Downgrade to version 2.6.7 68/243768/1 accepted/tizen_6.0_unified accepted/tizen_6.0_unified_hotfix accepted/tizen_6.5_unified accepted/tizen_7.0_unified_hotfix tizen_6.0 tizen_6.0_hotfix tizen_6.5 tizen_7.0_hotfix accepted/tizen/6.0/unified/20201030.110120 accepted/tizen/6.0/unified/hotfix/20201102.234212 accepted/tizen/6.0/unified/hotfix/20201103.050622 accepted/tizen/6.5/unified/20211029.014429 accepted/tizen/7.0/unified/20221110.060239 accepted/tizen/7.0/unified/hotfix/20221116.111057 accepted/tizen/unified/20200914.131445 submit/tizen/20200910.042022 submit/tizen/20200911.033103 submit/tizen_6.0/20201029.205502 submit/tizen_6.0_hotfix/20201102.192902 submit/tizen_6.0_hotfix/20201103.115102 submit/tizen_6.5/20211028.163501 tizen_6.0.m2_release tizen_6.5.m2_release tizen_7.0_m2_release
authorTae-Young Chung <ty83.chung@samsung.com>
Thu, 10 Sep 2020 02:09:06 +0000 (11:09 +0900)
committerTae-Young Chung <ty83.chung@samsung.com>
Thu, 10 Sep 2020 02:15:23 +0000 (11:15 +0900)
sjis.c, gb18030.c gb2312.c are parts of LIBICONV
opensource with GPL-2.0 license. It was added after 2.6.7 so
downgrade to 2.7.1 to 2.6.7.

Current version is corresponding to
```
commit 385a0a246f2d9f7a6fd774fd8edc03d3d965f49e (HEAD)
Author: Robin Stuart <rstuart114@gmail.com>
Date:   Sun Nov 17 22:03:54 2019 +0000

    typo-- in isotest
```

Change-Id: If90b5f00e9db5fcf94a895b9fef8afea0f43cfd8
Signed-off-by: Tae-Young Chung <ty83.chung@samsung.com>
67 files changed:
backend/2of5.c
backend/CMakeLists.txt
backend/auspost.c
backend/aztec.c
backend/bmp.c
backend/channel_precalcs.h [deleted file]
backend/codablock.c
backend/code.c
backend/code1.c
backend/code128.c
backend/code128.h [deleted file]
backend/code16k.c
backend/code49.c
backend/common.c
backend/common.h
backend/composite.c
backend/dllversion.c
backend/dmatrix.c
backend/dmatrix.h
backend/dotcode.c
backend/eci.c
backend/emf.c
backend/emf.h
backend/gb18030.c [deleted file]
backend/gb18030.h
backend/gb2312.c [deleted file]
backend/gb2312.h
backend/general_field.c
backend/general_field.h
backend/gif.c
backend/gridmtx.c
backend/gridmtx.h
backend/gs1.c
backend/hanxin.c
backend/imail.c
backend/large.c
backend/large.h
backend/library.c
backend/libzint.rc
backend/mailmark.c
backend/maxicode.c
backend/medical.c
backend/output.c [deleted file]
backend/output.h [deleted file]
backend/pcx.c
backend/pdf417.c
backend/plessey.c
backend/png.c
backend/postal.c
backend/ps.c
backend/qr.c
backend/qr.h
backend/raster.c
backend/reedsol.c
backend/reedsol.h
backend/render.c [new file with mode: 0644]
backend/rss.c
backend/sjis.c [deleted file]
backend/sjis.h
backend/svg.c
backend/telepen.c
backend/tif.c
backend/ultra.c
backend/upcean.c
backend/vector.c
backend/zint.h
packaging/zint.spec

index c3c795d..1781821 100644 (file)
@@ -2,7 +2,7 @@
 
 /*
     libzint - the open source barcode library
-    Copyright (C) 2008 - 2020 Robin Stuart <rstuart114@gmail.com>
+    Copyright (C) 2008-2017 Robin Stuart <rstuart114@gmail.com>
 
     Redistribution and use in source and binary forms, with or without
     modification, are permitted provided that the following conditions
     OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     SUCH DAMAGE.
  */
-/* vim: set ts=4 sw=4 et : */
 
+#include <string.h>
 #include <stdio.h>
+#include <stdlib.h>
 #include "common.h"
 #ifdef _MSC_VER
 #include <malloc.h>
@@ -58,7 +59,7 @@ static inline char check_digit(unsigned int count) {
 }
 
 /* Code 2 of 5 Standard (Code 2 of 5 Matrix) */
-INTERNAL int matrix_two_of_five(struct zint_symbol *symbol, unsigned char source[], int length) {
+int matrix_two_of_five(struct zint_symbol *symbol, unsigned char source[], int length) {
 
     int i, error_number;
     char dest[512]; /* 6 + 80 * 6 + 6 + 1 ~ 512*/
@@ -89,7 +90,7 @@ INTERNAL int matrix_two_of_five(struct zint_symbol *symbol, unsigned char source
 }
 
 /* Code 2 of 5 Industrial */
-INTERNAL int industrial_two_of_five(struct zint_symbol *symbol, unsigned char source[], int length) {
+int industrial_two_of_five(struct zint_symbol *symbol, unsigned char source[], int length) {
 
     int i, error_number;
     char dest[512]; /* 6 + 40 * 10 + 6 + 1 */
@@ -120,7 +121,7 @@ INTERNAL int industrial_two_of_five(struct zint_symbol *symbol, unsigned char so
 }
 
 /* Code 2 of 5 IATA */
-INTERNAL int iata_two_of_five(struct zint_symbol *symbol, unsigned char source[], int length) {
+int iata_two_of_five(struct zint_symbol *symbol, unsigned char source[], int length) {
     int i, error_number;
     char dest[512]; /* 4 + 45 * 10 + 3 + 1 */
 
@@ -150,7 +151,7 @@ INTERNAL int iata_two_of_five(struct zint_symbol *symbol, unsigned char source[]
 }
 
 /* Code 2 of 5 Data Logic */
-INTERNAL int logic_two_of_five(struct zint_symbol *symbol, unsigned char source[], int length) {
+int logic_two_of_five(struct zint_symbol *symbol, unsigned char source[], int length) {
 
     int i, error_number;
     char dest[512]; /* 4 + 80 * 6 + 3 + 1 */
@@ -181,7 +182,7 @@ INTERNAL int logic_two_of_five(struct zint_symbol *symbol, unsigned char source[
 }
 
 /* Code 2 of 5 Interleaved */
-INTERNAL int interleaved_two_of_five(struct zint_symbol *symbol, const unsigned char source[], size_t length) {
+int interleaved_two_of_five(struct zint_symbol *symbol, const unsigned char source[], size_t length) {
 
     int i, j, error_number;
     char bars[7], spaces[7], mixed[14], dest[1000];
@@ -201,19 +202,19 @@ INTERNAL int interleaved_two_of_five(struct zint_symbol *symbol, const unsigned
         return error_number;
     }
 
-    ustrcpy(temp, "");
+    ustrcpy(temp, (unsigned char *) "");
     /* Input must be an even number of characters for Interlaced 2 of 5 to work:
        if an odd number of characters has been entered then add a leading zero */
     if (length & 1) {
-        ustrcpy(temp, "0");
+        ustrcpy(temp, (unsigned char *) "0");
         length++;
     }
-    ustrcat(temp, source);
+    strcat((char*) temp, (char*) source);
 
     /* start character */
     strcpy(dest, "1111");
 
-    for (i = 0; i < (int) length; i += 2) {
+    for (i = 0; i < length; i += 2) {
         int k = 0;
         /* look up the bars and the spaces and put them in two strings */
         strcpy(bars, "");
@@ -242,7 +243,7 @@ INTERNAL int interleaved_two_of_five(struct zint_symbol *symbol, const unsigned
 }
 
 /* Interleaved 2-of-5 (ITF) */
-INTERNAL int itf14(struct zint_symbol *symbol, unsigned char source[], int length) {
+int itf14(struct zint_symbol *symbol, unsigned char source[], int length) {
     int i, error_number, zeroes;
     unsigned int count;
     char localstr[16];
@@ -265,7 +266,7 @@ INTERNAL int itf14(struct zint_symbol *symbol, unsigned char source[], int lengt
     for (i = 0; i < zeroes; i++) {
         localstr[i] = '0';
     }
-    ustrcpy(localstr + zeroes, source);
+    strcpy(localstr + zeroes, (char *) source);
 
     /* Calculate the check digit - the same method used for EAN-13 */
     for (i = 12; i >= 0; i--) {
@@ -278,12 +279,12 @@ INTERNAL int itf14(struct zint_symbol *symbol, unsigned char source[], int lengt
     localstr[13] = check_digit(count);
     localstr[14] = '\0';
     error_number = interleaved_two_of_five(symbol, (unsigned char *) localstr, strlen(localstr));
-    ustrcpy(symbol->text, localstr);
+    ustrcpy(symbol->text, (unsigned char*) localstr);
     return error_number;
 }
 
 /* Deutshe Post Leitcode */
-INTERNAL int dpleit(struct zint_symbol *symbol, unsigned char source[], int length) {
+int dpleit(struct zint_symbol *symbol, unsigned char source[], int length) {
     int i, error_number;
     unsigned int count;
     char localstr[16];
@@ -303,7 +304,7 @@ INTERNAL int dpleit(struct zint_symbol *symbol, unsigned char source[], int leng
     zeroes = 13 - length;
     for (i = 0; i < zeroes; i++)
         localstr[i] = '0';
-    ustrcpy(localstr + zeroes, source);
+    strcpy(localstr + zeroes, (char *) source);
 
     for (i = 12; i >= 0; i--) {
         count += 4 * ctoi(localstr[i]);
@@ -315,12 +316,12 @@ INTERNAL int dpleit(struct zint_symbol *symbol, unsigned char source[], int leng
     localstr[13] = check_digit(count);
     localstr[14] = '\0';
     error_number = interleaved_two_of_five(symbol, (unsigned char *) localstr, strlen(localstr));
-    ustrcpy(symbol->text, localstr);
+    ustrcpy(symbol->text, (unsigned char*) localstr);
     return error_number;
 }
 
 /* Deutsche Post Identcode */
-INTERNAL int dpident(struct zint_symbol *symbol, unsigned char source[], int length) {
+int dpident(struct zint_symbol *symbol, unsigned char source[], int length) {
     int i, error_number, zeroes;
     unsigned int count;
     char localstr[16];
@@ -339,7 +340,7 @@ INTERNAL int dpident(struct zint_symbol *symbol, unsigned char source[], int len
     zeroes = 11 - length;
     for (i = 0; i < zeroes; i++)
         localstr[i] = '0';
-    ustrcpy(localstr + zeroes, source);
+    strcpy(localstr + zeroes, (char *) source);
 
     for (i = 10; i >= 0; i--) {
         count += 4 * ctoi(localstr[i]);
@@ -351,6 +352,8 @@ INTERNAL int dpident(struct zint_symbol *symbol, unsigned char source[], int len
     localstr[11] = check_digit(count);
     localstr[12] = '\0';
     error_number = interleaved_two_of_five(symbol, (unsigned char *) localstr, strlen(localstr));
-    ustrcpy(symbol->text, localstr);
+    ustrcpy(symbol->text, (unsigned char*) localstr);
     return error_number;
 }
+
+
index e7baa0b..b6ecae1 100644 (file)
@@ -2,11 +2,11 @@
 
 project(zint)
 
-set(zint_COMMON_SRCS common.c library.c large.c reedsol.c gs1.c eci.c general_field.c sjis.c gb2312.c gb18030.c)
+set(zint_COMMON_SRCS common.c library.c render.c large.c reedsol.c gs1.c eci.c general_field.c)
 set(zint_ONEDIM_SRCS code.c code128.c 2of5.c upcean.c telepen.c medical.c plessey.c rss.c)
 set(zint_POSTAL_SRCS postal.c auspost.c imail.c mailmark.c)
 set(zint_TWODIM_SRCS code16k.c codablock.c dmatrix.c pdf417.c qr.c maxicode.c composite.c aztec.c code49.c code1.c gridmtx.c hanxin.c dotcode.c ultra.c)
-set(zint_OUTPUT_SRCS vector.c ps.c svg.c emf.c bmp.c pcx.c gif.c png.c tif.c raster.c output.c)
+set(zint_OUTPUT_SRCS vector.c render.c ps.c svg.c emf.c bmp.c pcx.c gif.c png.c tif.c raster.c)
 set(zint_SRCS ${zint_OUTPUT_SRCS} ${zint_COMMON_SRCS} ${zint_ONEDIM_SRCS} ${zint_POSTAL_SRCS} ${zint_TWODIM_SRCS})
 
 add_library(zint SHARED ${zint_SRCS})
index 39d3414..c10c325 100644 (file)
@@ -29,7 +29,6 @@
     OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     SUCH DAMAGE.
  */
-/* vim: set ts=4 sw=4 et : */
 
 #define GDSET  "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz #"
 
@@ -69,7 +68,7 @@ static inline char convert_pattern(char data, int shift) {
 }
 
 /* Adds Reed-Solomon error correction to auspost */
-static void rs_error(char data_pattern[]) {
+void rs_error(char data_pattern[]) {
     size_t reader, triple_writer = 0;
     char triple[31];
     unsigned char result[5];
@@ -91,7 +90,7 @@ static void rs_error(char data_pattern[]) {
 }
 
 /* Handles Australia Posts's 4 State Codes */
-INTERNAL int australia_post(struct zint_symbol *symbol, unsigned char source[], int length) {
+int australia_post(struct zint_symbol *symbol, unsigned char source[], int length) {
     /* Customer Standard Barcode, Barcode 2 or Barcode 3 system determined automatically
        (i.e. the FCC doesn't need to be specified by the user) dependent
        on the length of the input string */
@@ -110,12 +109,7 @@ INTERNAL int australia_post(struct zint_symbol *symbol, unsigned char source[],
     char fcc[3] = {0, 0, 0}, dpid[10];
     char localstr[30];
 
-    /* Check input immediately to catch nuls */
-    error_number = is_sane(GDSET, source, length);
-    if (error_number == ZINT_ERROR_INVALID_DATA) {
-        strcpy(symbol->errtxt, "404: Invalid characters in data");
-        return error_number;
-    }
+    error_number = 0;
     strcpy(localstr, "");
 
     /* Do all of the length checking first to avoid stack smashing */
@@ -170,6 +164,12 @@ INTERNAL int australia_post(struct zint_symbol *symbol, unsigned char source[],
 
     strcat(localstr, (char*) source);
     h = strlen(localstr);
+    error_number = is_sane(GDSET, (unsigned char *) localstr, h);
+    if (error_number == ZINT_ERROR_INVALID_DATA) {
+        strcpy(symbol->errtxt, "404: Invalid characters in data");
+        return error_number;
+    }
+
     /* Verifiy that the first 8 characters are numbers */
     memcpy(dpid, localstr, 8);
     dpid[8] = '\0';
@@ -248,3 +248,6 @@ INTERNAL int australia_post(struct zint_symbol *symbol, unsigned char source[],
 
     return error_number;
 }
+
+
+
index f5e88bd..9ed059c 100644 (file)
@@ -2,7 +2,7 @@
 
 /*
     libzint - the open source barcode library
-    Copyright (C) 2009-2020 Robin Stuart <rstuart114@gmail.com>
+    Copyright (C) 2009-2017 Robin Stuart <rstuart114@gmail.com>
 
     Redistribution and use in source and binary forms, with or without
     modification, are permitted provided that the following conditions
     OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     SUCH DAMAGE.
  */
-/* vim: set ts=4 sw=4 et : */
 
 #include <stdio.h>
 #include <string.h>
+#include <stdlib.h>
 #ifdef _MSC_VER
 #include <malloc.h>
 #endif
@@ -40,9 +40,6 @@
 #include "aztec.h"
 #include "reedsol.h"
 
-#define AZTEC_MAX_CAPACITY   19968 /* ISO/IEC 24778:2008 5.3 Table 1 Maximum Symbol Bit Capacity */
-#define AZTEC_BIN_CAPACITY   17940 /* Above less 169 * 12 = 2028 bits (169 = 10% of 1664 + 3) */
-
 static int AztecMap[22801];
 
 static int count_doubles(const unsigned char source[], const int posn, const size_t src_len) {
@@ -57,7 +54,7 @@ static int count_doubles(const unsigned char source[], const int posn, const siz
             cond = 0;
         }
         i += 2;
-    } while ((i < (int) src_len) && cond);
+    } while ((i < src_len) && cond);
 
     return c;
 }
@@ -118,47 +115,40 @@ static char get_next_mode(char encode_mode[], const size_t src_len, const int po
 
     do {
         i++;
-    } while ((i < (int) src_len) && (encode_mode[i] == encode_mode[posn]));
-    if (i >= (int) src_len) {
+    } while ((i < src_len) && (encode_mode[i] == encode_mode[posn]));
+    if (i >= src_len) {
         return 'E';
     } else {
         return encode_mode[i];
     }
 }
 
-static int az_bin_append(const int arg, const int length, char *binary) {
-    size_t posn = strlen(binary);
-
-    if (posn + length > AZTEC_BIN_CAPACITY) {
-        return 0; /* Fail */
-    }
-    bin_append_posn(arg, length, binary, posn);
-
-    binary[posn + length] = '\0';
-
-    return 1; /* Success */
-}
-
 static int aztec_text_process(const unsigned char source[], const size_t src_len, char binary_string[], const int gs1, const int eci, const int debug) {
 
+    char *encode_mode;
     int i, j;
     char current_mode;
     int count;
     char next_mode;
+    unsigned char *reduced_source;
+    char *reduced_encode_mode;
     int reduced_length;
     int byte_mode = 0;
 
-#ifndef _MSC_VER
-    char encode_mode[src_len + 1];
-    unsigned char reduced_source[src_len + 1];
-    char reduced_encode_mode[src_len + 1];
-#else
-    char *encode_mode = (char *) _alloca(src_len + 1);
-    unsigned char *reduced_source = (unsigned char *) _alloca(src_len + 1);
-    char *reduced_encode_mode = (char *) _alloca(src_len + 1);
-#endif
+    encode_mode=(char*)malloc(src_len + 1);
+    reduced_source=(unsigned char*)malloc(src_len + 1);
+    reduced_encode_mode=(char*)malloc(src_len + 1);
+
+    if ((!encode_mode) ||
+        (!reduced_source) ||
+        (!reduced_encode_mode)) {
+        free(encode_mode);
+        free(reduced_source);
+        free(reduced_encode_mode);
+        return -1;
+    }
 
-    for (i = 0; i < (int) src_len; i++) {
+    for (i = 0; i < src_len; i++) {
         if (source[i] >= 128) {
             encode_mode[i] = 'B';
         } else {
@@ -169,7 +159,7 @@ static int aztec_text_process(const unsigned char source[], const size_t src_len
     // Deal first with letter combinations which can be combined to one codeword
     // Combinations are (CR LF) (. SP) (, SP) (: SP) in Punct mode
     current_mode = 'U';
-    for (i = 0; i < (int) src_len - 1; i++) {
+    for (i = 0; i < src_len - 1; i++) {
         // Combination (CR LF) should always be in Punct mode
         if ((source[i] == 13) && (source[i + 1] == 10)) {
             encode_mode[i] = 'P';
@@ -240,7 +230,7 @@ static int aztec_text_process(const unsigned char source[], const size_t src_len
 
     if (debug) {
         printf("First Pass:\n");
-        for (i = 0; i < (int) src_len; i++) {
+        for (i = 0; i < src_len; i++) {
             printf("%c", encode_mode[i]);
         }
         printf("\n");
@@ -249,7 +239,7 @@ static int aztec_text_process(const unsigned char source[], const size_t src_len
     // Reduce two letter combinations to one codeword marked as [abcd] in Punct mode
     i = 0;
     j = 0;
-    while (i < (int) src_len) {
+    do {
         if ((source[i] == 13) && (source[i + 1] == 10)) { // CR LF
             reduced_source[j] = 'a';
             reduced_encode_mode[j] = encode_mode[i];
@@ -272,7 +262,7 @@ static int aztec_text_process(const unsigned char source[], const size_t src_len
             i++;
         }
         j++;
-    }
+    } while (i < src_len);
 
     reduced_length = j;
 
@@ -449,7 +439,7 @@ static int aztec_text_process(const unsigned char source[], const size_t src_len
 
         if (reduced_encode_mode[i] != current_mode) {
 
-            for (count = 0; ((i + count) < reduced_length) && (reduced_encode_mode[i + count] == reduced_encode_mode[i]); count++);
+            for (count = 0; ((i + count) <= reduced_length) && (reduced_encode_mode[i + count] == reduced_encode_mode[i]); count++);
             next_mode = get_next_mode(reduced_encode_mode, reduced_length, i);
 
             if (reduced_encode_mode[i] == 'P') {
@@ -584,7 +574,7 @@ static int aztec_text_process(const unsigned char source[], const size_t src_len
     }
 
     current_mode = 'U';
-    for (i = 0; i < reduced_length; i++) {
+    for(i = 0; i < reduced_length; i++) {
 
         if (reduced_encode_mode[i] != 'B') {
             byte_mode = 0;
@@ -595,23 +585,23 @@ static int aztec_text_process(const unsigned char source[], const size_t src_len
             if (current_mode == 'U') {
                 switch (reduced_encode_mode[i]) {
                     case 'L':
-                        if (!az_bin_append(28, 5, binary_string)) return ZINT_ERROR_TOO_LONG; // L/L
+                        bin_append(28, 5, binary_string); // L/L
                         break;
                     case 'M':
-                        if (!az_bin_append(29, 5, binary_string)) return ZINT_ERROR_TOO_LONG; // M/L
+                        bin_append(29, 5, binary_string); // M/L
                         break;
                     case 'P':
-                        if (!az_bin_append(29, 5, binary_string)) return ZINT_ERROR_TOO_LONG; // M/L
-                        if (!az_bin_append(30, 5, binary_string)) return ZINT_ERROR_TOO_LONG; // P/L
+                        bin_append(29, 5, binary_string); // M/L
+                        bin_append(30, 5, binary_string); // P/L
                         break;
                     case 'p':
-                        if (!az_bin_append(0, 5, binary_string)) return ZINT_ERROR_TOO_LONG; // P/S
+                        bin_append(0, 5, binary_string); // P/S
                         break;
                     case 'D':
-                        if (!az_bin_append(30, 5, binary_string)) return ZINT_ERROR_TOO_LONG; // D/L
+                        bin_append(30, 5, binary_string); // D/L
                         break;
                     case 'B':
-                        if (!az_bin_append(31, 5, binary_string)) return ZINT_ERROR_TOO_LONG; // B/S
+                        bin_append(31, 5, binary_string); // B/S
                         break;
                 }
             }
@@ -619,27 +609,27 @@ static int aztec_text_process(const unsigned char source[], const size_t src_len
             if (current_mode == 'L') {
                 switch (reduced_encode_mode[i]) {
                     case 'U':
-                        if (!az_bin_append(30, 5, binary_string)) return ZINT_ERROR_TOO_LONG; // D/L
-                        if (!az_bin_append(14, 4, binary_string)) return ZINT_ERROR_TOO_LONG; // U/L
+                        bin_append(30, 5, binary_string); // D/L
+                        bin_append(14, 4, binary_string); // U/L
                         break;
                     case 'u':
-                        if (!az_bin_append(28, 5, binary_string)) return ZINT_ERROR_TOO_LONG; // U/S
+                        bin_append(28, 5, binary_string); // U/S
                         break;
                     case 'M':
-                        if (!az_bin_append(29, 5, binary_string)) return ZINT_ERROR_TOO_LONG; // M/L
+                        bin_append(29, 5, binary_string); // M/L
                         break;
                     case 'P':
-                        if (!az_bin_append(29, 5, binary_string)) return ZINT_ERROR_TOO_LONG; // M/L
-                        if (!az_bin_append(30, 5, binary_string)) return ZINT_ERROR_TOO_LONG; // P/L
+                        bin_append(29, 5, binary_string); // M/L
+                        bin_append(30, 5, binary_string); // P/L
                         break;
                     case 'p':
-                        if (!az_bin_append(0, 5, binary_string)) return ZINT_ERROR_TOO_LONG; // P/S
+                        bin_append(0, 5, binary_string); // P/S
                         break;
                     case 'D':
-                        if (!az_bin_append(30, 5, binary_string)) return ZINT_ERROR_TOO_LONG; // D/L
+                        bin_append(30, 5, binary_string); // D/L
                         break;
                     case 'B':
-                        if (!az_bin_append(31, 5, binary_string)) return ZINT_ERROR_TOO_LONG; // B/S
+                        bin_append(31, 5, binary_string); // B/S
                         break;
                 }
             }
@@ -647,23 +637,23 @@ static int aztec_text_process(const unsigned char source[], const size_t src_len
             if (current_mode == 'M') {
                 switch (reduced_encode_mode[i]) {
                     case 'U':
-                        if (!az_bin_append(29, 5, binary_string)) return ZINT_ERROR_TOO_LONG; // U/L
+                        bin_append(29, 5, binary_string); // U/L
                         break;
                     case 'L':
-                        if (!az_bin_append(28, 5, binary_string)) return ZINT_ERROR_TOO_LONG; // L/L
+                        bin_append(28, 5, binary_string); // L/L
                         break;
                     case 'P':
-                        if (!az_bin_append(30, 5, binary_string)) return ZINT_ERROR_TOO_LONG; // P/L
+                        bin_append(30, 5, binary_string); // P/L
                         break;
                     case 'p':
-                        if (!az_bin_append(0, 5, binary_string)) return ZINT_ERROR_TOO_LONG; // P/S
+                        bin_append(0, 5, binary_string); // P/S
                         break;
                     case 'D':
-                        if (!az_bin_append(29, 5, binary_string)) return ZINT_ERROR_TOO_LONG; // U/L
-                        if (!az_bin_append(30, 5, binary_string)) return ZINT_ERROR_TOO_LONG; // D/L
+                        bin_append(29, 5, binary_string); // U/L
+                        bin_append(30, 5, binary_string); // D/L
                         break;
                     case 'B':
-                        if (!az_bin_append(31, 5, binary_string)) return ZINT_ERROR_TOO_LONG; // B/S
+                        bin_append(31, 5, binary_string); // B/S
                         break;
                 }
             }
@@ -671,24 +661,24 @@ static int aztec_text_process(const unsigned char source[], const size_t src_len
             if (current_mode == 'P') {
                 switch (reduced_encode_mode[i]) {
                     case 'U':
-                        if (!az_bin_append(31, 5, binary_string)) return ZINT_ERROR_TOO_LONG; // U/L
+                        bin_append(31, 5, binary_string); // U/L
                         break;
                     case 'L':
-                        if (!az_bin_append(31, 5, binary_string)) return ZINT_ERROR_TOO_LONG; // U/L
-                        if (!az_bin_append(28, 5, binary_string)) return ZINT_ERROR_TOO_LONG; // L/L
+                        bin_append(31, 5, binary_string); // U/L
+                        bin_append(28, 5, binary_string); // L/L
                         break;
                     case 'M':
-                        if (!az_bin_append(31, 5, binary_string)) return ZINT_ERROR_TOO_LONG; // U/L
-                        if (!az_bin_append(29, 5, binary_string)) return ZINT_ERROR_TOO_LONG; // M/L
+                        bin_append(31, 5, binary_string); // U/L
+                        bin_append(29, 5, binary_string); // M/L
                         break;
                     case 'D':
-                        if (!az_bin_append(31, 5, binary_string)) return ZINT_ERROR_TOO_LONG; // U/L
-                        if (!az_bin_append(30, 5, binary_string)) return ZINT_ERROR_TOO_LONG; // D/L
+                        bin_append(31, 5, binary_string); // U/L
+                        bin_append(30, 5, binary_string); // D/L
                         break;
                     case 'B':
-                        if (!az_bin_append(31, 5, binary_string)) return ZINT_ERROR_TOO_LONG; // U/L
+                        bin_append(31, 5, binary_string); // U/L
                         current_mode = 'U';
-                        if (!az_bin_append(31, 5, binary_string)) return ZINT_ERROR_TOO_LONG; // B/S
+                        bin_append(31, 5, binary_string); // B/S
                         break;
                 }
             }
@@ -696,31 +686,31 @@ static int aztec_text_process(const unsigned char source[], const size_t src_len
             if (current_mode == 'D') {
                 switch (reduced_encode_mode[i]) {
                     case 'U':
-                        if (!az_bin_append(14, 4, binary_string)) return ZINT_ERROR_TOO_LONG; // U/L
+                        bin_append(14, 4, binary_string); // U/L
                         break;
                     case 'u':
-                        if (!az_bin_append(15, 4, binary_string)) return ZINT_ERROR_TOO_LONG; // U/S
+                        bin_append(15, 4, binary_string); // U/S
                         break;
                     case 'L':
-                        if (!az_bin_append(14, 4, binary_string)) return ZINT_ERROR_TOO_LONG; // U/L
-                        if (!az_bin_append(28, 5, binary_string)) return ZINT_ERROR_TOO_LONG; // L/L
+                        bin_append(14, 4, binary_string); // U/L
+                        bin_append(28, 5, binary_string); // L/L
                         break;
                     case 'M':
-                        if (!az_bin_append(14, 4, binary_string)) return ZINT_ERROR_TOO_LONG; // U/L
-                        if (!az_bin_append(29, 5, binary_string)) return ZINT_ERROR_TOO_LONG; // M/L
+                        bin_append(14, 4, binary_string); // U/L
+                        bin_append(29, 5, binary_string); // M/L
                         break;
                     case 'P':
-                        if (!az_bin_append(14, 4, binary_string)) return ZINT_ERROR_TOO_LONG; // U/L
-                        if (!az_bin_append(29, 5, binary_string)) return ZINT_ERROR_TOO_LONG; // M/L
-                        if (!az_bin_append(30, 5, binary_string)) return ZINT_ERROR_TOO_LONG; // P/L
+                        bin_append(14, 4, binary_string); // U/L
+                        bin_append(29, 5, binary_string); // M/L
+                        bin_append(30, 5, binary_string); // P/L
                         break;
                     case 'p':
-                        if (!az_bin_append(0, 4, binary_string)) return ZINT_ERROR_TOO_LONG; // P/S
+                        bin_append(0, 4, binary_string); // P/S
                         break;
                     case 'B':
-                        if (!az_bin_append(14, 4, binary_string)) return ZINT_ERROR_TOO_LONG; // U/L
+                        bin_append(14, 4, binary_string); // U/L
                         current_mode = 'U';
-                        if (!az_bin_append(31, 5, binary_string)) return ZINT_ERROR_TOO_LONG; // B/S
+                        bin_append(31, 5, binary_string); // B/S
                         break;
                 }
             }
@@ -735,11 +725,11 @@ static int aztec_text_process(const unsigned char source[], const size_t src_len
 
                 if (count > 31) {
                     /* Put 00000 followed by 11-bit number of bytes less 31 */
-                    if (!az_bin_append(0, 5, binary_string)) return ZINT_ERROR_TOO_LONG;
-                    if (!az_bin_append(count - 31, 11, binary_string)) return ZINT_ERROR_TOO_LONG;
+                    bin_append(0, 5, binary_string);
+                    bin_append(count - 31, 11, binary_string);
                 } else {
                     /* Put 5-bit number of bytes */
-                    if (!az_bin_append(count, 5, binary_string)) return ZINT_ERROR_TOO_LONG;
+                    bin_append(count, 5, binary_string);
                 }
                 byte_mode = 1;
             }
@@ -751,67 +741,66 @@ static int aztec_text_process(const unsigned char source[], const size_t src_len
 
         if ((reduced_encode_mode[i] == 'U') || (reduced_encode_mode[i] == 'u')) {
             if (reduced_source[i] == ' ') {
-                if (!az_bin_append(1, 5, binary_string)) return ZINT_ERROR_TOO_LONG; // SP
+                bin_append(1, 5, binary_string); // SP
             } else {
-                if (!az_bin_append(AztecSymbolChar[(int) reduced_source[i]], 5, binary_string)) return ZINT_ERROR_TOO_LONG;
+                bin_append(AztecSymbolChar[(int) reduced_source[i]], 5, binary_string);
             }
         }
 
         if (reduced_encode_mode[i] == 'L') {
             if (reduced_source[i] == ' ') {
-                if (!az_bin_append(1, 5, binary_string)) return ZINT_ERROR_TOO_LONG; // SP
+                bin_append(1, 5, binary_string); // SP
             } else {
-                if (!az_bin_append(AztecSymbolChar[(int) reduced_source[i]], 5, binary_string)) return ZINT_ERROR_TOO_LONG;
+                bin_append(AztecSymbolChar[(int) reduced_source[i]], 5, binary_string);
             }
         }
 
         if (reduced_encode_mode[i] == 'M') {
             if (reduced_source[i] == ' ') {
-                if (!az_bin_append(1, 5, binary_string)) return ZINT_ERROR_TOO_LONG; // SP
+                bin_append(1, 5, binary_string); // SP
             } else if (reduced_source[i] == 13) {
-                if (!az_bin_append(14, 5, binary_string)) return ZINT_ERROR_TOO_LONG; // CR
+                bin_append(14, 5, binary_string); // CR
             } else {
-                if (!az_bin_append(AztecSymbolChar[(int) reduced_source[i]], 5, binary_string)) return ZINT_ERROR_TOO_LONG;
+                bin_append(AztecSymbolChar[(int) reduced_source[i]], 5, binary_string);
             }
         }
 
         if ((reduced_encode_mode[i] == 'P') || (reduced_encode_mode[i] == 'p')) {
             if (gs1 && (reduced_source[i] == '[')) {
-                if (!az_bin_append(0, 5, binary_string)) return ZINT_ERROR_TOO_LONG; // FLG(n)
-                if (!az_bin_append(0, 3, binary_string)) return ZINT_ERROR_TOO_LONG; // FLG(0) = FNC1
+                bin_append(0, 5, binary_string); // FLG(0) = FNC1
             } else if (reduced_source[i] == 13) {
-                if (!az_bin_append(1, 5, binary_string)) return ZINT_ERROR_TOO_LONG; // CR
+                bin_append(1, 5, binary_string); // CR
             } else if (reduced_source[i] == 'a') {
-                if (!az_bin_append(2, 5, binary_string)) return ZINT_ERROR_TOO_LONG; // CR LF
+                bin_append(2, 5, binary_string); // CR LF
             } else if (reduced_source[i] == 'b') {
-                if (!az_bin_append(3, 5, binary_string)) return ZINT_ERROR_TOO_LONG; // . SP
+                bin_append(3, 5, binary_string); // . SP
             } else if (reduced_source[i] == 'c') {
-                if (!az_bin_append(4, 5, binary_string)) return ZINT_ERROR_TOO_LONG; // , SP
+                bin_append(4, 5, binary_string); // , SP
             } else if (reduced_source[i] == 'd') {
-                if (!az_bin_append(5, 5, binary_string)) return ZINT_ERROR_TOO_LONG; // : SP
+                bin_append(5, 5, binary_string); // : SP
             } else if (reduced_source[i] == ',') {
-                if (!az_bin_append(17, 5, binary_string)) return ZINT_ERROR_TOO_LONG; // Comma
+                bin_append(17, 5, binary_string); // Comma
             } else if (reduced_source[i] == '.') {
-                if (!az_bin_append(19, 5, binary_string)) return ZINT_ERROR_TOO_LONG; // Full stop
+                bin_append(19, 5, binary_string); // Full stop
             } else {
-                if (!az_bin_append(AztecSymbolChar[(int) reduced_source[i]], 5, binary_string)) return ZINT_ERROR_TOO_LONG;
+                bin_append(AztecSymbolChar[(int) reduced_source[i]], 5, binary_string);
             }
         }
 
         if (reduced_encode_mode[i] == 'D') {
             if (reduced_source[i] == ' ') {
-                if (!az_bin_append(1, 4, binary_string)) return ZINT_ERROR_TOO_LONG; // SP
+                bin_append(1, 4, binary_string); // SP
             } else if (reduced_source[i] == ',') {
-                if (!az_bin_append(12, 4, binary_string)) return ZINT_ERROR_TOO_LONG; // Comma
+                bin_append(12, 4, binary_string); // Comma
             } else if (reduced_source[i] == '.') {
-                if (!az_bin_append(13, 4, binary_string)) return ZINT_ERROR_TOO_LONG; // Full stop
+                bin_append(13, 4, binary_string); // Full stop
             } else {
-                if (!az_bin_append(AztecSymbolChar[(int) reduced_source[i]], 4, binary_string)) return ZINT_ERROR_TOO_LONG;
+                bin_append(AztecSymbolChar[(int) reduced_source[i]], 4, binary_string);
             }
         }
 
         if (reduced_encode_mode[i] == 'B') {
-            if (!az_bin_append(reduced_source[i], 8, binary_string)) return ZINT_ERROR_TOO_LONG;
+            bin_append(reduced_source[i], 8, binary_string);
         }
     }
 
@@ -820,6 +809,10 @@ static int aztec_text_process(const unsigned char source[], const size_t src_len
         printf("%s\n", binary_string);
     }
 
+    free(encode_mode);
+    free(reduced_source);
+    free(reduced_encode_mode);
+
     return 0;
 }
 
@@ -976,14 +969,14 @@ static void populate_map() {
     AztecMap[(avoidReferenceGrid(76) * 151) + avoidReferenceGrid(77)] = 1;
 }
 
-INTERNAL int aztec(struct zint_symbol *symbol, unsigned char source[], const size_t length) {
+int aztec(struct zint_symbol *symbol, unsigned char source[], const size_t length) {
     int x, y, i, j, p, data_blocks, ecc_blocks, layers, total_bits;
-    char binary_string[AZTEC_BIN_CAPACITY + 1], bit_pattern[20045], descriptor[42];
-    char adjusted_string[AZTEC_MAX_CAPACITY + 1];
+    char binary_string[20000], bit_pattern[20045], descriptor[42];
+    char adjusted_string[20000];
     unsigned char desc_data[4], desc_ecc[6];
     int err_code, ecc_level, compact, data_length, data_maxsize, codeword_size, adjusted_length;
     int remainder, padbits, count, gs1, adjustment_size;
-    int debug = (symbol->debug & ZINT_DEBUG_PRINT), reader = 0;
+    int debug = symbol->debug, reader = 0;
     int comp_loop = 4;
 
 #ifdef _MSC_VER
@@ -991,10 +984,10 @@ INTERNAL int aztec(struct zint_symbol *symbol, unsigned char source[], const siz
     unsigned int* ecc_part;
 #endif
 
-    memset(binary_string, 0, AZTEC_BIN_CAPACITY + 1);
-    memset(adjusted_string, 0, AZTEC_MAX_CAPACITY + 1);
+    memset(binary_string, 0, 20000);
+    memset(adjusted_string, 0, 20000);
 
-    if ((symbol->input_mode & 0x07) == GS1_MODE) {
+    if (symbol->input_mode == GS1_MODE) {
         gs1 = 1;
     } else {
         gs1 = 0;
@@ -1123,36 +1116,42 @@ INTERNAL int aztec(struct zint_symbol *symbol, unsigned char source[], const siz
             }
 
             j = 0;
-            count = 0;
-            for (i = 0; i < data_length; i++) {
-
+            i = 0;
+            do {
                 if ((j + 1) % codeword_size == 0) {
-                    // Last bit of codeword
-                    /* 7.3.1.2 "whenever the first B-1 bits ... are all “0”s, then a dummy “1” is inserted..."
-                     * "Similarly a message codeword that starts with B-1 “1”s has a dummy “0” inserted..." */
+                    /* Last bit of codeword */
+                    int t, done = 0;
+                    count = 0;
+
+                    /* Discover how many '1's in current codeword */
+                    for (t = 0; t < (codeword_size - 1); t++) {
+                        if (binary_string[(i - (codeword_size - 1)) + t] == '1') count++;
+                    }
 
                     if (count == (codeword_size - 1)) {
-                        // Codeword of B-1 '1's
                         adjusted_string[j] = '0';
                         j++;
+                        done = 1;
                     }
 
                     if (count == 0) {
-                        // Codeword of B-1 '0's
                         adjusted_string[j] = '1';
                         j++;
+                        done = 1;
                     }
 
-                    count = 0;
-                } else if (binary_string[i] == '1') { /* Skip B so only counting B-1 */
-                    count++;
+                    if (done == 0) {
+                        adjusted_string[j] = binary_string[i];
+                        j++;
+                        i++;
+                    }
                 }
-
                 adjusted_string[j] = binary_string[i];
                 j++;
-            }
+                i++;
+            } while (i <= (data_length + 1));
             adjusted_string[j] = '\0';
-            adjusted_length = j;
+            adjusted_length = (int) strlen(adjusted_string);
             adjustment_size = adjusted_length - data_length;
 
             /* Add padding */
@@ -1178,16 +1177,17 @@ INTERNAL int aztec(struct zint_symbol *symbol, unsigned char source[], const siz
                 adjusted_string[adjusted_length - 1] = '0';
             }
 
+/*
             if (debug) {
                 printf("Codewords:\n");
                 for (i = 0; i < (adjusted_length / codeword_size); i++) {
                     for (j = 0; j < codeword_size; j++) {
                         printf("%c", adjusted_string[(i * codeword_size) + j]);
                     }
-                    printf(" ");
+                    printf("\n");
                 }
-                printf("\n");
             }
+*/
 
         } while (adjusted_length > data_maxsize);
         /* This loop will only repeat on the rare occasions when the rule about not having all 1s or all 0s
@@ -1226,34 +1226,42 @@ INTERNAL int aztec(struct zint_symbol *symbol, unsigned char source[], const siz
         }
 
         j = 0;
-        count = 0;
-        for (i = 0; i < data_length; i++) {
-
+        i = 0;
+        do {
             if ((j + 1) % codeword_size == 0) {
-                // Last bit of codeword
+                /* Last bit of codeword */
+                int t, done = 0;
+                count = 0;
+
+                /* Discover how many '1's in current codeword */
+                for (t = 0; t < (codeword_size - 1); t++) {
+                    if (binary_string[(i - (codeword_size - 1)) + t] == '1') count++;
+                }
 
                 if (count == (codeword_size - 1)) {
-                    // Codeword of B-1 '1's
                     adjusted_string[j] = '0';
                     j++;
+                    done = 1;
                 }
 
                 if (count == 0) {
-                    // Codeword of B-1 '0's
                     adjusted_string[j] = '1';
                     j++;
+                    done = 1;
                 }
 
-                count = 0;
-            } else if (binary_string[i] == '1') { /* Skip B so only counting B-1 */
-                count++;
+                if (done == 0) {
+                    adjusted_string[j] = binary_string[i];
+                    j++;
+                    i++;
+                }
             }
-
             adjusted_string[j] = binary_string[i];
             j++;
-        }
+            i++;
+        } while (i <= (data_length + 1));
         adjusted_string[j] = '\0';
-        adjusted_length = j;
+        adjusted_length = (int) strlen(adjusted_string);
 
         remainder = adjusted_length % codeword_size;
 
@@ -1295,9 +1303,8 @@ INTERNAL int aztec(struct zint_symbol *symbol, unsigned char source[], const siz
                 for (j = 0; j < codeword_size; j++) {
                     printf("%c", adjusted_string[(i * codeword_size) + j]);
                 }
-                printf(" ");
+                printf("\n");
             }
-            printf("\n");
         }
 
     }
@@ -1574,7 +1581,7 @@ INTERNAL int aztec(struct zint_symbol *symbol, unsigned char source[], const siz
 }
 
 /* Encodes Aztec runes as specified in ISO/IEC 24778:2008 Annex A */
-INTERNAL int aztec_runes(struct zint_symbol *symbol, unsigned char source[], int length) {
+int aztec_runes(struct zint_symbol *symbol, unsigned char source[], int length) {
     int input_value, error_number, i, y, x;
     char binary_string[28];
     unsigned char data_codewords[3], ecc_codewords[6];
@@ -1684,3 +1691,4 @@ INTERNAL int aztec_runes(struct zint_symbol *symbol, unsigned char source[], int
 
     return 0;
 }
+
index 240c697..69dd955 100644 (file)
@@ -2,7 +2,7 @@
 
 /*
     libzint - the open source barcode library
-    Copyright (C) 2009 - 2020 Robin Stuart <rstuart114@gmail.com>
+    Copyright (C) 2009-2017 Robin Stuart <rstuart114@gmail.com>
 
     Redistribution and use in source and binary forms, with or without
     modification, are permitted provided that the following conditions
     OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     SUCH DAMAGE.
  */
-/* vim: set ts=4 sw=4 et : */
 
 #include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
 #include "common.h"
 #include "bmp.h"        /* Bitmap header structure */
+#include <math.h>
 #ifdef _MSC_VER
 #include <io.h>
 #include <fcntl.h>
 #endif
 
-INTERNAL int bmp_pixel_plot(struct zint_symbol *symbol, char *pixelbuf) {
+#define SSET   "0123456789ABCDEF"
+
+int bmp_pixel_plot(struct zint_symbol *symbol, char *pixelbuf) {
     int i, row, column;
-    unsigned int fgred, fggrn, fgblu, bgred, bggrn, bgblu;
+    int fgred, fggrn, fgblu, bgred, bggrn, bgblu;
     int row_size;
-    unsigned int data_offset, data_size, file_size;
+    unsigned int data_size;
     unsigned char *bitmap_file_start, *bmp_posn;
-    unsigned char *bitmap;
+    char *bitmap;
     FILE *bmp_file;
     bitmap_file_header_t file_header;
     bitmap_info_header_t info_header;
 
-    row_size = 4 * ((24 * symbol->bitmap_width + 31) / 32);
-    data_size = symbol->bitmap_height * row_size;
-    data_offset = sizeof (bitmap_file_header_t) + sizeof (bitmap_info_header_t);
-    file_size = data_offset + data_size;
-
-    bitmap_file_start = (unsigned char *) malloc(file_size);
-    if (bitmap_file_start == NULL) {
-        strcpy(symbol->errtxt, "602: Out of memory");
-        return ZINT_ERROR_MEMORY;
-    }
-    memset(bitmap_file_start, 0, file_size); /* Not required but keeps padding bytes consistent */
+    if (symbol->bitmap != NULL)
+        free(symbol->bitmap);
 
-    bitmap = bitmap_file_start + data_offset;
+    row_size = 4 * floor((24.0 * symbol->bitmap_width + 31) / 32);
+    bitmap = (char *) malloc(row_size * symbol->bitmap_height);
 
     fgred = (16 * ctoi(symbol->fgcolour[0])) + ctoi(symbol->fgcolour[1]);
     fggrn = (16 * ctoi(symbol->fgcolour[2])) + ctoi(symbol->fgcolour[3]);
@@ -72,50 +68,11 @@ INTERNAL int bmp_pixel_plot(struct zint_symbol *symbol, char *pixelbuf) {
     bgblu = (16 * ctoi(symbol->bgcolour[4])) + ctoi(symbol->bgcolour[5]);
 
     /* Pixel Plotting */
+    i = 0;
     for (row = 0; row < symbol->bitmap_height; row++) {
         for (column = 0; column < symbol->bitmap_width; column++) {
             i = (3 * column) + (row * row_size);
             switch (*(pixelbuf + (symbol->bitmap_width * (symbol->bitmap_height - row - 1)) + column)) {
-                case 'W': // White
-                    bitmap[i] = 255;
-                    bitmap[i + 1] = 255;
-                    bitmap[i + 2] = 255;
-                    break;
-                case 'C': // Cyan
-                    bitmap[i] = 255;
-                    bitmap[i + 1] = 255;
-                    bitmap[i + 2] = 0;
-                    break;
-                case 'B': // Blue
-                    bitmap[i] = 255;
-                    bitmap[i + 1] = 0;
-                    bitmap[i + 2] = 0;
-                    break;
-                case 'M': // Magenta
-                    bitmap[i] = 255;
-                    bitmap[i + 1] = 0;
-                    bitmap[i + 2] = 255;
-                    break;
-                case 'R': // Red
-                    bitmap[i] = 0;
-                    bitmap[i + 1] = 0;
-                    bitmap[i + 2] = 255;
-                    break;
-                case 'Y': // Yellow
-                    bitmap[i] = 0;
-                    bitmap[i + 1] = 255;
-                    bitmap[i + 2] = 255;
-                    break;
-                case 'G': // Green
-                    bitmap[i] = 0;
-                    bitmap[i + 1] = 255;
-                    bitmap[i + 2] = 0;
-                    break;
-                case 'K': // Black
-                    bitmap[i] = 0;
-                    bitmap[i + 1] = 0;
-                    bitmap[i + 2] = 0;
-                    break;
                 case '1':
                     bitmap[i] = fgblu;
                     bitmap[i + 1] = fggrn;
@@ -131,12 +88,13 @@ INTERNAL int bmp_pixel_plot(struct zint_symbol *symbol, char *pixelbuf) {
         }
     }
 
+    data_size = symbol->bitmap_height * row_size;
     symbol->bitmap_byte_length = data_size;
 
     file_header.header_field = 0x4d42; // "BM"
-    file_header.file_size = file_size;
+    file_header.file_size = sizeof (bitmap_file_header_t) + sizeof (bitmap_info_header_t) + data_size;
     file_header.reserved = 0;
-    file_header.data_offset = data_offset;
+    file_header.data_offset = sizeof (bitmap_file_header_t) + sizeof (bitmap_info_header_t);
 
     info_header.header_size = sizeof (bitmap_info_header_t);
     info_header.width = symbol->bitmap_width;
@@ -150,10 +108,15 @@ INTERNAL int bmp_pixel_plot(struct zint_symbol *symbol, char *pixelbuf) {
     info_header.colours = 0;
     info_header.important_colours = 0;
 
+    bitmap_file_start = (unsigned char*) malloc(file_header.file_size);
+    memset(bitmap_file_start, 0xff, file_header.file_size);
+
     bmp_posn = bitmap_file_start;
     memcpy(bitmap_file_start, &file_header, sizeof (bitmap_file_header_t));
     bmp_posn += sizeof (bitmap_file_header_t);
     memcpy(bmp_posn, &info_header, sizeof (bitmap_info_header_t));
+    bmp_posn += sizeof (bitmap_info_header_t);
+    memcpy(bmp_posn, bitmap, data_size);
 
     /* Open output file in binary mode */
     if ((symbol->output_options & BARCODE_STDOUT) != 0) {
@@ -161,6 +124,7 @@ INTERNAL int bmp_pixel_plot(struct zint_symbol *symbol, char *pixelbuf) {
         if (-1 == _setmode(_fileno(stdout), _O_BINARY)) {
             strcpy(symbol->errtxt, "600: Can't open output file");
             free(bitmap_file_start);
+            free(bitmap);
             return ZINT_ERROR_FILE_ACCESS;
         }
 #endif
@@ -168,6 +132,7 @@ INTERNAL int bmp_pixel_plot(struct zint_symbol *symbol, char *pixelbuf) {
     } else {
         if (!(bmp_file = fopen(symbol->outfile, "wb"))) {
             free(bitmap_file_start);
+            free(bitmap);
             strcpy(symbol->errtxt, "601: Can't open output file");
             return ZINT_ERROR_FILE_ACCESS;
         }
@@ -177,5 +142,7 @@ INTERNAL int bmp_pixel_plot(struct zint_symbol *symbol, char *pixelbuf) {
     fclose(bmp_file);
 
     free(bitmap_file_start);
+    free(bitmap);
     return 0;
 }
+
diff --git a/backend/channel_precalcs.h b/backend/channel_precalcs.h
deleted file mode 100644 (file)
index f979e1a..0000000
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
-    libzint - the open source barcode library
-    Copyright (C) 2020 Robin Stuart <rstuart114@gmail.com>
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-    1. Redistributions of source code must retain the above copyright
-       notice, this list of conditions and the following disclaimer.
-    2. Redistributions in binary form must reproduce the above copyright
-       notice, this list of conditions and the following disclaimer in the
-       documentation and/or other materials provided with the distribution.
-    3. Neither the name of the project nor the names of its contributors
-       may be used to endorse or promote products derived from this software
-       without specific prior written permission.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
-    ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-    ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-    SUCH DAMAGE.
- */
-/* vim: set ts=4 sw=4 et : */
-
-/* Channel code precalculated values to avoid excessive looping */
-/* To generate uncomment CHANNEL_GENERATE_PRECALCS define and run "./test_channel -f generate -g" */
-/* Paste result below here */
-static channel_precalc channel_precalcs7[] = {
-    {  115338, { 1, 3, 1, 1, 1, 1, 5, 1, }, { 1, 1, 1, 2, 1, 2, 3, 3, }, { 1, 7, 5, 5, 5, 5, 5, }, { 1, 7, 7, 7, 6, 6, 5, }, },
-    {  230676, { 1, 1, 2, 2, 4, 1, 1, 2, }, { 1, 2, 1, 3, 2, 1, 3, 1, }, { 1, 7, 7, 6, 5, 2, 2, }, { 1, 7, 6, 6, 4, 3, 3, }, },
-    {  346014, { 1, 2, 3, 1, 1, 1, 3, 2, }, { 1, 2, 2, 1, 1, 3, 1, 3, }, { 1, 7, 6, 4, 4, 4, 4, }, { 1, 7, 6, 5, 5, 5, 3, }, },
-    {  461352, { 1, 2, 1, 1, 1, 2, 2, 4, }, { 1, 3, 1, 1, 3, 2, 2, 1, }, { 1, 7, 6, 6, 6, 6, 5, }, { 1, 7, 5, 5, 5, 3, 2, }, },
-};
-static channel_precalc channel_precalcs8[] = {
-    {  119121, { 2, 1, 3, 2, 1, 3, 2, 1, }, { 1, 1, 1, 4, 3, 2, 1, 2, }, { 8, 7, 7, 5, 4, 4, 2, }, { 8, 8, 8, 8, 5, 3, 2, }, },
-    {  238242, { 2, 1, 1, 2, 2, 2, 1, 4, }, { 1, 1, 3, 1, 1, 2, 4, 2, }, { 8, 7, 7, 7, 6, 5, 4, }, { 8, 8, 8, 6, 6, 6, 5, }, },
-    {  357363, { 2, 2, 1, 4, 1, 1, 1, 3, }, { 1, 1, 1, 1, 3, 2, 5, 1, }, { 8, 7, 6, 6, 3, 3, 3, }, { 8, 8, 8, 8, 8, 6, 5, }, },
-    {  476484, { 2, 2, 1, 1, 3, 2, 3, 1, }, { 1, 1, 3, 1, 2, 2, 3, 2, }, { 8, 7, 6, 6, 6, 4, 3, }, { 8, 8, 8, 6, 6, 5, 4, }, },
-    {  595605, { 2, 3, 3, 2, 1, 1, 1, 2, }, { 1, 1, 2, 1, 1, 1, 5, 3, }, { 8, 7, 5, 3, 2, 2, 2, }, { 8, 8, 8, 7, 7, 7, 7, }, },
-    {  714726, { 2, 1, 1, 6, 1, 1, 2, 1, }, { 1, 2, 1, 3, 1, 4, 1, 2, }, { 8, 7, 7, 7, 2, 2, 2, }, { 8, 8, 7, 7, 5, 5, 2, }, },
-    {  833847, { 2, 1, 1, 3, 1, 3, 3, 1, }, { 1, 2, 3, 1, 1, 3, 2, 2, }, { 8, 7, 7, 7, 5, 5, 3, }, { 8, 8, 7, 5, 5, 5, 3, }, },
-    {  952968, { 2, 2, 2, 3, 2, 1, 2, 1, }, { 1, 2, 2, 1, 2, 2, 2, 3, }, { 8, 7, 6, 5, 3, 2, 2, }, { 8, 8, 7, 6, 6, 5, 4, }, },
-    { 1072089, { 2, 5, 1, 1, 2, 2, 1, 1, }, { 1, 2, 1, 3, 1, 3, 3, 1, }, { 8, 7, 3, 3, 3, 2, 1, }, { 8, 8, 7, 7, 5, 5, 3, }, },
-    { 1191210, { 2, 2, 1, 2, 1, 1, 3, 3, }, { 1, 3, 1, 1, 5, 1, 1, 2, }, { 8, 7, 6, 6, 5, 5, 5, }, { 8, 8, 6, 6, 6, 2, 2, }, },
-    { 1310331, { 2, 1, 2, 1, 2, 3, 2, 2, }, { 1, 4, 1, 3, 1, 1, 2, 2, }, { 8, 7, 7, 6, 6, 5, 3, }, { 8, 8, 5, 5, 3, 3, 3, }, },
-    { 1429452, { 2, 2, 1, 2, 2, 3, 2, 1, }, { 1, 5, 3, 1, 2, 1, 1, 1, }, { 8, 7, 6, 6, 5, 4, 2, }, { 8, 8, 4, 2, 2, 1, 1, }, },
-    { 1548573, { 3, 1, 1, 2, 5, 1, 1, 1, }, { 1, 1, 2, 2, 1, 2, 5, 1, }, { 8, 6, 6, 6, 5, 1, 1, }, { 8, 8, 8, 7, 6, 6, 5, }, },
-    { 1667694, { 3, 2, 2, 1, 1, 3, 2, 1, }, { 1, 1, 1, 1, 2, 4, 3, 2, }, { 8, 6, 5, 4, 4, 4, 2, }, { 8, 8, 8, 8, 8, 7, 4, }, },
-    { 1786815, { 3, 4, 2, 1, 2, 1, 1, 1, }, { 1, 1, 2, 1, 1, 2, 1, 6, }, { 8, 6, 3, 2, 2, 1, 1, }, { 8, 8, 8, 7, 7, 7, 6, }, },
-    { 1905936, { 3, 2, 1, 3, 1, 3, 1, 1, }, { 1, 2, 1, 1, 1, 4, 2, 3, }, { 8, 6, 5, 5, 3, 3, 1, }, { 8, 8, 7, 7, 7, 7, 4, }, },
-    { 2025057, { 3, 1, 2, 2, 1, 1, 4, 1, }, { 1, 3, 2, 1, 1, 1, 5, 1, }, { 8, 6, 6, 5, 4, 4, 4, }, { 8, 8, 6, 5, 5, 5, 5, }, },
-    { 2144178, { 3, 1, 2, 1, 2, 2, 2, 2, }, { 1, 5, 1, 1, 4, 1, 1, 1, }, { 8, 6, 6, 5, 5, 4, 3, }, { 8, 8, 4, 4, 4, 1, 1, }, },
-    { 2263299, { 4, 2, 1, 2, 1, 1, 1, 3, }, { 1, 1, 1, 1, 3, 3, 3, 2, }, { 8, 5, 4, 4, 3, 3, 3, }, { 8, 8, 8, 8, 8, 6, 4, }, },
-    { 2382420, { 4, 2, 1, 1, 1, 1, 4, 1, }, { 1, 2, 2, 2, 2, 2, 2, 2, }, { 8, 5, 4, 4, 4, 4, 4, }, { 8, 8, 7, 6, 5, 4, 3, }, },
-    { 2501541, { 5, 1, 1, 2, 2, 1, 1, 2, }, { 1, 1, 2, 3, 3, 1, 1, 3, }, { 8, 4, 4, 4, 3, 2, 2, }, { 8, 8, 8, 7, 5, 3, 3, }, },
-    { 2620662, { 6, 1, 1, 1, 2, 1, 1, 2, }, { 1, 2, 4, 1, 2, 3, 1, 1, }, { 8, 3, 3, 3, 3, 2, 2, }, { 8, 8, 7, 4, 4, 3, 1, }, },
-    { 2739783, { 1, 1, 1, 1, 3, 3, 4, 1, }, { 2, 1, 2, 1, 6, 1, 1, 1, }, { 8, 8, 8, 8, 8, 6, 4, }, { 8, 7, 7, 6, 6, 1, 1, }, },
-    { 2858904, { 1, 1, 2, 3, 3, 1, 3, 1, }, { 2, 1, 3, 1, 3, 1, 2, 2, }, { 8, 8, 8, 7, 5, 3, 3, }, { 8, 7, 7, 5, 5, 3, 3, }, },
-    { 2978025, { 1, 2, 2, 4, 1, 2, 1, 2, }, { 2, 1, 1, 1, 1, 3, 4, 2, }, { 8, 8, 7, 6, 3, 3, 2, }, { 8, 7, 7, 7, 7, 7, 5, }, },
-    { 3097146, { 1, 2, 2, 1, 3, 3, 2, 1, }, { 2, 1, 3, 3, 2, 2, 1, 1, }, { 8, 8, 7, 6, 6, 4, 2, }, { 8, 7, 7, 5, 3, 2, 1, }, },
-    { 3216267, { 1, 3, 1, 1, 1, 3, 1, 4, }, { 2, 1, 3, 2, 3, 2, 1, 1, }, { 8, 8, 6, 6, 6, 6, 4, }, { 8, 7, 7, 5, 4, 2, 1, }, },
-    { 3335388, { 1, 1, 1, 4, 4, 1, 2, 1, }, { 2, 2, 1, 1, 1, 1, 3, 4, }, { 8, 8, 8, 8, 5, 2, 2, }, { 8, 7, 6, 6, 6, 6, 6, }, },
-    { 3454509, { 1, 1, 2, 4, 3, 1, 2, 1, }, { 2, 2, 2, 5, 1, 1, 1, 1, }, { 8, 8, 8, 7, 4, 2, 2, }, { 8, 7, 6, 5, 1, 1, 1, }, },
-    { 3573630, { 1, 2, 1, 3, 1, 2, 3, 2, }, { 2, 2, 2, 1, 1, 4, 2, 1, }, { 8, 8, 7, 7, 5, 5, 4, }, { 8, 7, 6, 5, 5, 5, 2, }, },
-    { 3692751, { 1, 4, 2, 3, 2, 1, 1, 1, }, { 2, 2, 1, 1, 2, 1, 2, 4, }, { 8, 8, 5, 4, 2, 1, 1, }, { 8, 7, 6, 6, 6, 5, 5, }, },
-    { 3811872, { 1, 1, 2, 1, 3, 5, 1, 1, }, { 2, 3, 3, 2, 2, 1, 1, 1, }, { 8, 8, 8, 7, 7, 5, 1, }, { 8, 7, 5, 3, 2, 1, 1, }, },
-    { 3930993, { 1, 1, 1, 1, 6, 2, 2, 1, }, { 2, 4, 1, 2, 1, 3, 1, 1, }, { 8, 8, 8, 8, 8, 3, 2, }, { 8, 7, 4, 4, 3, 3, 1, }, },
-    { 4050114, { 1, 3, 3, 2, 2, 1, 2, 1, }, { 2, 6, 2, 1, 1, 1, 1, 1, }, { 8, 8, 6, 4, 3, 2, 2, }, { 8, 7, 2, 1, 1, 1, 1, }, },
-    { 4169235, { 2, 1, 2, 2, 4, 2, 1, 1, }, { 2, 1, 2, 1, 1, 1, 4, 3, }, { 8, 7, 7, 6, 5, 2, 1, }, { 8, 7, 7, 6, 6, 6, 6, }, },
-    { 4288356, { 2, 2, 2, 1, 1, 3, 3, 1, }, { 2, 1, 1, 4, 2, 1, 1, 3, }, { 8, 7, 6, 5, 5, 5, 3, }, { 8, 7, 7, 7, 4, 3, 3, }, },
-    { 4407477, { 2, 3, 3, 1, 2, 1, 1, 2, }, { 2, 1, 3, 2, 4, 1, 1, 1, }, { 8, 7, 5, 3, 3, 2, 2, }, { 8, 7, 7, 5, 4, 1, 1, }, },
-    { 4526598, { 2, 1, 4, 1, 4, 1, 1, 1, }, { 2, 2, 2, 1, 2, 3, 1, 2, }, { 8, 7, 7, 4, 4, 1, 1, }, { 8, 7, 6, 5, 5, 4, 2, }, },
-    { 4645719, { 2, 4, 2, 1, 1, 2, 1, 2, }, { 2, 2, 1, 1, 3, 2, 3, 1, }, { 8, 7, 4, 3, 3, 3, 2, }, { 8, 7, 6, 6, 6, 4, 3, }, },
-    { 4764840, { 2, 1, 1, 1, 2, 4, 1, 3, }, { 2, 4, 1, 2, 1, 3, 1, 1, }, { 8, 7, 7, 7, 7, 6, 3, }, { 8, 7, 4, 4, 3, 3, 1, }, },
-    { 4883961, { 3, 1, 1, 3, 2, 2, 1, 2, }, { 2, 1, 2, 2, 2, 1, 2, 3, }, { 8, 6, 6, 6, 4, 3, 2, }, { 8, 7, 7, 6, 5, 4, 4, }, },
-    { 5003082, { 3, 3, 3, 1, 1, 1, 2, 1, }, { 2, 1, 2, 1, 1, 3, 1, 4, }, { 8, 6, 4, 2, 2, 2, 2, }, { 8, 7, 7, 6, 6, 6, 4, }, },
-    { 5122203, { 3, 1, 1, 2, 1, 2, 1, 4, }, { 2, 3, 1, 1, 1, 2, 4, 1, }, { 8, 6, 6, 6, 5, 5, 4, }, { 8, 7, 5, 5, 5, 5, 4, }, },
-    { 5241324, { 4, 1, 1, 3, 1, 2, 2, 1, }, { 2, 1, 3, 1, 1, 3, 3, 1, }, { 8, 5, 5, 5, 3, 3, 2, }, { 8, 7, 7, 5, 5, 5, 3, }, },
-    { 5360445, { 4, 3, 1, 1, 2, 1, 1, 2, }, { 2, 4, 1, 3, 2, 1, 1, 1, }, { 8, 5, 3, 3, 3, 2, 2, }, { 8, 7, 4, 4, 2, 1, 1, }, },
-    { 5479566, { 1, 1, 3, 1, 3, 2, 1, 3, }, { 3, 1, 1, 2, 1, 2, 1, 4, }, { 8, 8, 8, 6, 6, 4, 3, }, { 8, 6, 6, 6, 5, 5, 4, }, },
-    { 5598687, { 1, 2, 1, 1, 5, 1, 3, 1, }, { 3, 1, 1, 1, 1, 3, 1, 4, }, { 8, 8, 7, 7, 7, 3, 3, }, { 8, 6, 6, 6, 6, 6, 4, }, },
-    { 5717808, { 1, 3, 1, 2, 1, 3, 1, 3, }, { 3, 1, 1, 2, 4, 1, 1, 2, }, { 8, 8, 6, 6, 5, 5, 3, }, { 8, 6, 6, 6, 5, 2, 2, }, },
-    { 5836929, { 1, 1, 2, 3, 1, 2, 3, 2, }, { 3, 2, 1, 1, 1, 1, 2, 4, }, { 8, 8, 8, 7, 5, 5, 4, }, { 8, 6, 5, 5, 5, 5, 5, }, },
-    { 5956050, { 1, 2, 3, 3, 2, 2, 1, 1, }, { 3, 2, 3, 1, 1, 1, 1, 3, }, { 8, 8, 7, 5, 3, 2, 1, }, { 8, 6, 5, 3, 3, 3, 3, }, },
-    { 6075171, { 1, 3, 1, 1, 3, 3, 2, 1, }, { 3, 3, 1, 1, 3, 1, 2, 1, }, { 8, 8, 6, 6, 6, 4, 2, }, { 8, 6, 4, 4, 4, 2, 2, }, },
-    { 6194292, { 2, 1, 1, 3, 4, 1, 2, 1, }, { 3, 1, 2, 1, 3, 1, 3, 1, }, { 8, 7, 7, 7, 5, 2, 2, }, { 8, 6, 6, 5, 5, 3, 3, }, },
-    { 6313413, { 2, 3, 2, 2, 1, 2, 2, 1, }, { 3, 1, 1, 2, 1, 3, 2, 2, }, { 8, 7, 5, 4, 3, 3, 2, }, { 8, 6, 6, 6, 5, 5, 3, }, },
-    { 6432534, { 2, 3, 1, 1, 2, 2, 3, 1, }, { 3, 2, 1, 2, 3, 1, 2, 1, }, { 8, 7, 5, 5, 5, 4, 3, }, { 8, 6, 5, 5, 4, 2, 2, }, },
-    { 6551655, { 3, 1, 1, 2, 1, 4, 1, 2, }, { 3, 1, 2, 3, 1, 1, 3, 1, }, { 8, 6, 6, 6, 5, 5, 2, }, { 8, 6, 6, 5, 3, 3, 3, }, },
-    { 6670776, { 3, 1, 1, 1, 1, 3, 4, 1, }, { 3, 3, 1, 2, 1, 1, 3, 1, }, { 8, 6, 6, 6, 6, 6, 4, }, { 8, 6, 4, 4, 3, 3, 3, }, },
-    { 6789897, { 5, 2, 1, 1, 2, 1, 2, 1, }, { 3, 1, 1, 1, 2, 2, 3, 2, }, { 8, 4, 3, 3, 3, 2, 2, }, { 8, 6, 6, 6, 6, 5, 4, }, },
-    { 6909018, { 1, 2, 2, 2, 2, 1, 4, 1, }, { 4, 1, 1, 2, 1, 2, 1, 3, }, { 8, 8, 7, 6, 5, 4, 4, }, { 8, 5, 5, 5, 4, 4, 3, }, },
-    { 7028139, { 1, 1, 3, 2, 2, 2, 1, 3, }, { 4, 2, 2, 1, 2, 2, 1, 1, }, { 8, 8, 8, 6, 5, 4, 3, }, { 8, 5, 4, 3, 3, 2, 1, }, },
-    { 7147260, { 2, 1, 4, 3, 2, 1, 1, 1, }, { 4, 1, 1, 1, 4, 1, 1, 2, }, { 8, 7, 7, 4, 2, 1, 1, }, { 8, 5, 5, 5, 5, 2, 2, }, },
-    { 7266381, { 2, 4, 1, 3, 2, 1, 1, 1, }, { 4, 2, 1, 1, 1, 2, 1, 3, }, { 8, 7, 4, 4, 2, 1, 1, }, { 8, 5, 4, 4, 4, 4, 3, }, },
-    { 7385502, { 4, 2, 1, 3, 1, 2, 1, 1, }, { 4, 1, 1, 4, 2, 1, 1, 1, }, { 8, 5, 4, 4, 2, 2, 1, }, { 8, 5, 5, 5, 2, 1, 1, }, },
-    { 7504623, { 1, 1, 3, 4, 3, 1, 1, 1, }, { 5, 2, 1, 1, 1, 1, 1, 3, }, { 8, 8, 8, 6, 3, 1, 1, }, { 8, 4, 3, 3, 3, 3, 3, }, },
-    { 7623744, { 3, 1, 1, 2, 2, 1, 2, 3, }, { 5, 2, 1, 1, 1, 2, 1, 2, }, { 8, 6, 6, 6, 5, 4, 4, }, { 8, 4, 3, 3, 3, 3, 2, }, },
-};
index 2eef2a7..2f49ea2 100644 (file)
@@ -2,7 +2,7 @@
 
 /*
     libzint - the open source barcode library
-    Copyright (C) 2016 - 2020 Harald Oehlmann
+    Copyright (C) 2016 Harald Oehlmann
 
     Redistribution and use in source and binary forms, with or without
     modification, are permitted provided that the following conditions
     OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     SUCH DAMAGE.
  */
-/* vim: set ts=4 sw=4 et : */
 
 #include <stdio.h>
 #include <math.h>
 #include <string.h>
+#include <stdlib.h>
 #ifdef _MSC_VER
 #include <malloc.h>
 #endif
-#include <assert.h>
 #include "common.h"
-
-INTERNAL int code_128(struct zint_symbol *symbol, const unsigned char source[], const size_t length);
+#include "gs1.h"
 
 #define uchar unsigned char
 
@@ -52,7 +50,6 @@ INTERNAL int code_128(struct zint_symbol *symbol, const unsigned char source[],
 #define CShift 16
 #define CFill 32
 #define CodeFNC1 64
-#define CodeFNC4 128
 #define ZTNum (CodeA+CodeB+CodeC)
 #define ZTFNC1 (CodeA+CodeB+CodeC+CodeFNC1)
 
@@ -93,34 +90,32 @@ typedef struct sCharacterSetTable
 } CharacterSetTable;
 
 /* Find the possible Code-128 Character sets for a character
- * The result is an or of CodeA, CodeB, CodeC, CodeFNC1, CodeFNC4 depending on the
+ * The result is an or of CodeA,CodeB,CodeC,CodeFNC1 in dependency of the
  * possible Code 128 character sets.
  */
-static int GetPossibleCharacterSet(unsigned char C)
+int GetPossibleCharacterSet(unsigned char C)
 {
-    if (C<='\x1f')      /* Control chars */
+    if (C<='\x19')      /* Dec:31 */
         return CodeA;
     if (C>='0' && C<='9')
         return ZTNum;   /* ZTNum=CodeA+CodeB+CodeC */
     if (C==aFNC1)
         return ZTFNC1;  /* ZTFNC1=CodeA+CodeB+CodeC+CodeFNC1 */
-    if (C==aFNC4)
-        return (CodeA | CodeB | CodeFNC4);
     if (C>='\x60' && C<='\x7f')      /* 60 to 127 */
         return CodeB;
     return CodeA+CodeB;
 }
 
 /* Create a Table with the following information for each Data character:
- *  int CharacterSet    is an or of CodeA, CodeB, CodeC, CodeFNC1, CodeFNC4,
- *          depending on which character set is applicable.
+ *  int CharacterSet    is an or of CodeA,CodeB,CodeC,CodeFNC1, in
+ *          dependency which character set is applicable.
  *          (Result of GetPossibleCharacterSet)
  *  int AFollowing,BFollowing   The number of source characters you still may encode
  *          in this character set.
  *  int CFollowing  The number of characters encodable in CodeC if we
  *          start here.
  */
-static void CreateCharacterSetTable(CharacterSetTable T[], unsigned char *data, const int dataLength)
+static void CreateCharacterSetTable(CharacterSetTable T[], unsigned char *data,const size_t dataLength)
 {
     int charCur;
     int runChar;
@@ -151,7 +146,7 @@ static void CreateCharacterSetTable(CharacterSetTable T[], unsigned char *data,
             /* CodeC possible */
             runChar=charCur;
             do{
-                /* Whether this is FNC1, whether next is */
+                /* Wether this is FNC1 wether next is */
                 /* numeric */
                 if (T[runChar].CharacterSet==ZTFNC1)
                     /* FNC1 */
@@ -177,7 +172,7 @@ static void CreateCharacterSetTable(CharacterSetTable T[], unsigned char *data,
  * one bundle into the line (up to here). This is calculated online because
  * it depends on the space in the line.
  */
-static int RemainingDigits(CharacterSetTable *T, int charCur,int emptyColumns)
+int RemainingDigits(CharacterSetTable *T, int charCur,int emptyColumns)
 {
     int digitCount;     /* Numerical digits fitting in the line */
     int runChar;
@@ -198,17 +193,19 @@ static int RemainingDigits(CharacterSetTable *T, int charCur,int emptyColumns)
 }
 
 /* Find the Character distribution at a given column count.
- * If too many rows (>44) are requested the columns are extended.
+ * If to many rows (>44) are requested the columns is extended.
+ * A oneLigner may be choosen if shorter.
  * Parameters :
  *  T       Pointer on the Characters which fit in the row
  *          If a different count is calculated it is corrected
  *          in the callers workspace.
  *  pFillings   Output of filling characters
  *  pSet        Output of the character sets used, allocated by me.
+ *  Data        The Data string to encode, exceptionnally not an out
  *  Return value    Resulting row count
  */
 
-static int Columns2Rows(struct zint_symbol *symbol, CharacterSetTable *T, const int dataLength,
+static int Columns2Rows(CharacterSetTable *T, unsigned char *data, const size_t dataLength,
         int * pRows, int * pUseColumns, int * pSet, int * pFillings)
 {
     int useColumns;     /* Usable Characters per line */
@@ -219,20 +216,24 @@ static int Columns2Rows(struct zint_symbol *symbol, CharacterSetTable *T, const
     int emptyColumns2;  /* Alternative emptyColumns to compare */
     int CPaires;        /* Number of digit pairs which may fit in the line */
     int characterSetCur;        /* Current Character Set */
-    int isFNC4; /* Set if current character FNC4 */
 
     useColumns=*pUseColumns;
+    if (useColumns<3)
+        useColumns=3;
 
-    /* >>> Loop until rowsCur <= 44 */
+    /* >>> Loop until rowsCur<44 */
     do {
         int charCur=0;
+        int fOneLiner=1;        /* First try one-Liner */
         memset(pSet,0,dataLength*sizeof(int));
         rowsCur=0;
 
-        /* >>> Line Loop */
+        /* >>> Line and OneLiner-try Loop */
         do{
             /* >> Start Character */
             emptyColumns=useColumns;    /* Remained place in Line */
+            if (fOneLiner)
+                emptyColumns+=2;
 
             /* >>Choose in Set A or B */
             /* (C is changed as an option later on) */
@@ -262,7 +263,7 @@ static int Columns2Rows(struct zint_symbol *symbol, CharacterSetTable *T, const
                     /* Start odd is not better */
                     /* We start in C */
                     pSet[charCur]=characterSetCur=CodeC;
-                    /* Increment charCur */
+                    /* Inkrement charCur */
                     if (T[charCur].CharacterSet!=ZTFNC1)
                         ++charCur;      /* 2 Num.Digits */
                 }
@@ -273,7 +274,6 @@ static int Columns2Rows(struct zint_symbol *symbol, CharacterSetTable *T, const
             /* >> Following characters */
             while(emptyColumns>0 && charCur<dataLength)
             {
-                isFNC4 = (T[charCur].CharacterSet & CodeFNC4);
                 switch(characterSetCur){
                 case CodeA:
                 case CodeB:
@@ -293,23 +293,18 @@ static int Columns2Rows(struct zint_symbol *symbol, CharacterSetTable *T, const
                         emptyColumns-=2; /* <SwitchC>12 */
                     } else if (characterSetCur==CodeA)
                     {
-                        if (T[charCur].AFollowing == 0 || (isFNC4 && T[charCur].AFollowing == 1))
+                        if(T[charCur].AFollowing==0)
                         {
                             /* Must change to B */
-                            if (emptyColumns == 1 || (isFNC4 && emptyColumns == 2))
+                            if (emptyColumns==1)
                             {
                                 /* Can't switch: */
                                 pSet[charCur-1]|=CEnd+CFill;
                                 emptyColumns=0;
                             }else{
                                 /* <Shift> or <switchB>? */
-                                if (T[charCur].BFollowing == 1 || (isFNC4 && T[charCur].BFollowing == 2))
+                                if (T[charCur].BFollowing==1)
                                 {
-                                    /* Note using order "FNC4 shift char" (same as CODE128) not "shift FNC4 char" as given in Table B.1 and Table B.2 */
-                                    if (isFNC4) { /* So skip FNC4 and shift value instead */
-                                        --emptyColumns;
-                                        ++charCur;
-                                    }
                                     pSet[charCur]|=CShift;
                                 } else {
                                     pSet[charCur]|=CodeB;
@@ -318,32 +313,23 @@ static int Columns2Rows(struct zint_symbol *symbol, CharacterSetTable *T, const
                                 emptyColumns-=2;
                                 ++charCur;
                             }
-                        } else if (isFNC4 && emptyColumns == 1) {
-                            /* Can't fit extended ASCII on same line */
-                            pSet[charCur-1]|=CEnd+CFill;
-                            emptyColumns=0;
                         }else{
                             --emptyColumns;
                             ++charCur;
                         }
                     } else { /* Last possibility : CodeB */
-                        if (T[charCur].BFollowing == 0 || (isFNC4 && T[charCur].BFollowing == 1))
+                        if(T[charCur].BFollowing==0)
                         {
                             /* Must change to A */
-                            if (emptyColumns == 1 || (isFNC4 && emptyColumns == 2))
+                            if (emptyColumns==1)
                             {
                                 /* Can't switch: */
                                 pSet[charCur-1]|=CEnd+CFill;
                                 emptyColumns=0;
                             } else {
                                 /* <Shift> or <switchA>? */
-                                if (T[charCur].AFollowing == 1 || (isFNC4 && T[charCur].AFollowing == 2))
+                                if (T[charCur].AFollowing==1)
                                 {
-                                    /* Note using order "FNC4 shift char" (same as CODE128) not "shift FNC4 char" as given in Table B.1 and Table B.2 */
-                                    if (isFNC4) { /* So skip FNC4 and shift value instead */
-                                        --emptyColumns;
-                                        ++charCur;
-                                    }
                                     pSet[charCur]|=CShift;
                                 } else {
                                     pSet[charCur]|=CodeA;
@@ -352,10 +338,6 @@ static int Columns2Rows(struct zint_symbol *symbol, CharacterSetTable *T, const
                                 emptyColumns-=2;
                                 ++charCur;
                             }
-                        } else if (isFNC4 && emptyColumns == 1) {
-                            /* Can't fit extended ASCII on same line */
-                            pSet[charCur-1]|=CEnd+CFill;
-                            emptyColumns=0;
                         }else{
                             --emptyColumns;
                             ++charCur;
@@ -390,23 +372,43 @@ static int Columns2Rows(struct zint_symbol *symbol, CharacterSetTable *T, const
             /* > End of Codeline */
             pSet[charCur-1]|=CEnd;
             ++rowsCur;
+            if ( fOneLiner)
+            {
+                if (charCur<dataLength)
+                {
+                    /* One line not sufficiant */
+                    fOneLiner=0;
+                    /* Reset and Start again */
+                    charCur=0;
+                    rowsCur=0;
+                    memset(pSet,0,dataLength*sizeof(int));
+                }else{
+                    /* Calculate real Length of OneLiner */
+                    /* This is -2 BASED !!! */
+                    useColumns-=emptyColumns;
+                }
+            }
         } while (charCur<dataLength); /* <= Data.Len-1 */
 
-        /* Allow for check characters K1, K2 */
-        switch (emptyColumns) {
-        case 1:
-            pSet[charCur-1]|=CFill;
-            /* fall through */
-        case 0:
-            ++rowsCur;
-            fillings=useColumns-2+emptyColumns;
-            break;
-        case 2:
+        /* Place check characters C1,C2 */
+        if (fOneLiner)
             fillings=0;
-            break;
-        default:
-            pSet[charCur-1]|=CFill;
-            fillings=emptyColumns-2;
+        else{
+            switch (emptyColumns) {
+            case 1:
+                pSet[charCur-1]|=CFill;
+                /* Glide in following block without break */
+            case 0:
+                ++rowsCur;
+                fillings=useColumns-2+emptyColumns;
+                break;
+            case 2:
+                fillings=0;
+                break;
+            default:
+                pSet[charCur-1]|=CFill;
+                fillings=emptyColumns-2;
+            }
         }
 
         if (rowsCur>44) {
@@ -414,35 +416,30 @@ static int Columns2Rows(struct zint_symbol *symbol, CharacterSetTable *T, const
             if (useColumns > 62) {
                 return ZINT_ERROR_TOO_LONG;
             }
-        } else if (rowsCur == 1) {
-            rowsCur = 2;
-            fillings += useColumns;
         }
     } while(rowsCur>44);
-    if (symbol->debug & ZINT_DEBUG_PRINT) {
+    #ifdef _DEBUG
         printf("  -> out: rowsCur <%i>, useColumns <%i>, fillings <%i>\n",rowsCur,useColumns,fillings);
-    }
+    #endif
     *pUseColumns=useColumns;
     *pRows=rowsCur;
     *pFillings=fillings;
     return 0;
 }
-
 /* Find columns if row count is given.
  */
-static int Rows2Columns(struct zint_symbol *symbol, CharacterSetTable *T, const int dataLength,
+static int Rows2Columns(CharacterSetTable *T, unsigned char *data, const size_t dataLength,
         int * pRows, int * pUseColumns, int * pSet, int * pFillings)
 {
     int rowsCur;
     int rowsRequested;  /* Number of requested rows */
-    int columnsRequested; /* Number of requested columns (if any) */
     int backupRows = 0;
     int fillings;
     int backupFillings = 0;
     int useColumns;
     int testColumns;    /* To enter into Width2Rows */
     int backupColumns = 0;
-    int fBackupOk = 0;      /* The memorised set is o.k. */
+    int fBackupOk = 0;      /* The memorysed set is o.k. */
     int testListSize = 0;
     int pTestList[62];
 #ifndef _MSC_VER
@@ -452,21 +449,21 @@ static int Rows2Columns(struct zint_symbol *symbol, CharacterSetTable *T, const
 #endif
 
     rowsRequested=*pRows;
-    columnsRequested = *pUseColumns >= 4 ? *pUseColumns : 0;
 
-    if (symbol->debug & ZINT_DEBUG_PRINT) {
-        printf("Optimizer : Searching <%i> rows\n", rowsRequested);
-    }
+    #ifdef _DEBUG
+        fprintf(stderr,"Optimizer : Searching <%i> rows\n",rowsRequested);
+    #endif
 
-    if (columnsRequested) {
-        testColumns = columnsRequested;
-    } else {
+    if (rowsRequested==1)
+        /* OneLiners are self-calibrating */
+        testColumns=32767;
+    else {
         /* First guess */
         testColumns=dataLength/rowsRequested;
         if (testColumns > 62)
             testColumns = 62;
-        else if (testColumns < 4)
-            testColumns = 4;
+        else if (testColumns < 1)
+            testColumns = 1;
     }
 
     for (;;) {
@@ -474,13 +471,13 @@ static int Rows2Columns(struct zint_symbol *symbol, CharacterSetTable *T, const
         pTestList[testListSize] = testColumns;
         testListSize++;
         useColumns=testColumns; /* Make a copy because it may be modified */
-        errorCur = Columns2Rows(symbol, T, dataLength, &rowsCur, &useColumns, pSet, &fillings);
+        errorCur = Columns2Rows(T, data, dataLength, &rowsCur, &useColumns, pSet, &fillings);
         if (errorCur != 0)
             return errorCur;
         if (rowsCur<=rowsRequested) {
             /* Less or exactly line number found */
-            /* check if column count below already tested or at smallest/requested */
-            int fInTestList = (rowsCur == 2 || testColumns == 4 || testColumns == columnsRequested);
+            /* check if column count below already tested or Count = 1*/
+            int fInTestList = (rowsCur == 1 || testColumns == 1);
             int posCur;
             for (posCur = 0; posCur < testListSize && ! fInTestList; posCur++) {
                 if ( pTestList[posCur] == testColumns-1 )
@@ -488,16 +485,21 @@ static int Rows2Columns(struct zint_symbol *symbol, CharacterSetTable *T, const
             }
             if (fInTestList) {
                 /* >> Smaller Width already tested
+                 * if rowsCur=rowsRequested->Exit
+                 * if rowsCur<rowsRequested and fillings>0
+                 * -> New search for rowsRequested:=rowsCur
                  */
-                if (rowsCur < rowsRequested) {
-                    fillings += useColumns * (rowsRequested - rowsCur);
-                    rowsCur = rowsRequested;
+                if ( rowsCur == rowsRequested || fillings == 0 || testColumns == 1 ) {
+                    /* Exit with actual */
+                    *pFillings=fillings;
+                    *pRows=rowsCur;
+                    *pUseColumns = useColumns;
+                    return 0;
                 }
-                /* Exit with actual */
-                *pFillings=fillings;
-                *pRows=rowsCur;
-                *pUseColumns = useColumns;
-                return 0;
+                /* Search again for smaller Line number */
+                rowsRequested=rowsCur;
+                pTestList[0] = testColumns;
+                testListSize = 1;
             }
             /* > Test more rows (shorter CDB) */
             fBackupOk=(rowsCur==rowsRequested);
@@ -507,7 +509,7 @@ static int Rows2Columns(struct zint_symbol *symbol, CharacterSetTable *T, const
             backupRows=rowsCur;
             --testColumns;
         } else {
-            /* > Too many rows */
+            /* > To many rows */
             int fInTestList = fBackupOk;
             int posCur;
             for (posCur = 0; posCur < testListSize && ! fInTestList; posCur++) {
@@ -538,7 +540,7 @@ static int Rows2Columns(struct zint_symbol *symbol, CharacterSetTable *T, const
 
 /* Print a character in character set A
  */
-static void A2C128_A(uchar **ppOutPos,uchar c)
+void A2C128_A(uchar **ppOutPos,uchar c)
 {
     uchar * pOutPos = *ppOutPos;
     switch(c){
@@ -559,10 +561,9 @@ static void A2C128_A(uchar **ppOutPos,uchar c)
     }
     (*ppOutPos)++;
 }
-
 /* Output c in Set B
  */
-static void A2C128_B(uchar **ppOutPos,uchar c)
+void A2C128_B(uchar **ppOutPos,uchar c)
 {
     uchar * pOutPos = *ppOutPos;
     switch(c){
@@ -577,10 +578,9 @@ static void A2C128_B(uchar **ppOutPos,uchar c)
     }
     ++(*ppOutPos);
 }
-
 /* Output c1, c2 in Set C
  */
-static void A2C128_C(uchar **ppOutPos,uchar c1,uchar c2)
+void A2C128_C(uchar **ppOutPos,uchar c1,uchar c2)
 {
     uchar * pOutPos = *ppOutPos;
     switch(c1){
@@ -591,10 +591,9 @@ static void A2C128_C(uchar **ppOutPos,uchar c1,uchar c2)
     }
     (*ppOutPos)++;
 }
-
 /* Output a character in Characterset
  */
-static void ASCIIZ128(uchar **ppOutPos, int CharacterSet,uchar c1, uchar c2)
+void ASCIIZ128(uchar **ppOutPos, int CharacterSet,uchar c1, uchar c2)
 {
     if (CharacterSet==CodeA)
         A2C128_A(ppOutPos,c1);
@@ -603,13 +602,14 @@ static void ASCIIZ128(uchar **ppOutPos, int CharacterSet,uchar c1, uchar c2)
     else
         A2C128_C(ppOutPos,c1,c2);
 }
-
-/* XLate Tables D.2, D.3 and F.1 of Codablock-F Specification and call output
+/* XLate Table A of Codablock-F Specification and call output
  */
-static void SumASCII(uchar **ppOutPos, int Sum, int CharacterSet)
+void SumASCII(uchar **ppOutPos, int Sum, int CharacterSet)
 {
     switch (CharacterSet){
-    case CodeA: /* Row # Indicators and Data Check Characters K1/K2 for CodeA and CodeB are the same */
+    case CodeA:
+        A2C128_A(ppOutPos, (uchar)Sum);
+        break;
     case CodeB:
         if (Sum<=31)
             A2C128_B(ppOutPos, (uchar)(Sum+96));
@@ -627,8 +627,8 @@ static void SumASCII(uchar **ppOutPos, int Sum, int CharacterSet)
 
 /* Main function called by zint framework
  */
-INTERNAL int codablock(struct zint_symbol *symbol,const unsigned char source[], const size_t length) {
-    int charCur, dataLength;
+int codablock(struct zint_symbol *symbol,const unsigned char source[], const size_t length) {
+    size_t charCur,dataLength;
     int Error;
     int rows, columns, useColumns;
     int fillings;
@@ -637,41 +637,33 @@ INTERNAL int codablock(struct zint_symbol *symbol,const unsigned char source[],
     int rowCur;
     int characterSetCur;
     int emptyColumns;
-    char dest[1000];
-    int r, c;
+        char dest[1000];
+        int r, c;
 #ifdef _MSC_VER
     CharacterSetTable *T;
     unsigned char *data;
     int *pSet;
     uchar * pOutput;
 #endif
-    /* Suppresses clang-analyzer-core.VLASize warning */
-    assert(length > 0);
 
     /* Parameter check */
-    /* option1: rows <= 0: automatic, 1..44 */
+    /* option1: rows 0: automatic, 1..44 */
     rows = symbol->option_1;
-    if (rows == 1) {
-        Error = code_128(symbol, source, length);
-        if (Error < 5) {
-            symbol->output_options |= BARCODE_BIND;
-            if (symbol->border_width == 0) { /* Allow override if non-zero */
-                symbol->border_width = 1; /* AIM ISS-X-24 Section 4.6.1 b) (note change from previous default 2) */
-            }
-        }
-        return Error;
-    }
     if (rows > 44) {
-        strcpy(symbol->errtxt, "410: Rows parameter not in 0..44");
+        strcpy(symbol->errtxt, "410: Row parameter not in 0..44");
         return ZINT_ERROR_INVALID_OPTION;
     }
-    /* option_2: (usable data) columns: <= 0: automatic, 9..67 (min 9 == 4 data, max 67 == 62 data) */
+    /* option_2: (usable data) columns: 0: automatic, 6..66 */
     columns = symbol->option_2;
-    if ( ! (columns <= 0 || (columns >= 9 && columns <= 67)) ) {
-        strcpy(symbol->errtxt, "411: Columns parameter not in 0, 9..67");
+    if ( ! (columns <= 0 || (columns >= 6 && columns <=66)) ) {
+        strcpy(symbol->errtxt, "411: Columns parameter not in 0,6..66");
+        return ZINT_ERROR_INVALID_OPTION;
+    }
+    /* GS1 not implemented */
+    if  (symbol->input_mode == GS1_MODE) {
+        strcpy(symbol->errtxt, "412: GS1 mode not supported");
         return ZINT_ERROR_INVALID_OPTION;
     }
-
 #ifndef _MSC_VER
     unsigned char data[length*2+1];
 #else
@@ -684,7 +676,7 @@ INTERNAL int codablock(struct zint_symbol *symbol,const unsigned char source[],
         dataLength++;
     }
     /* Replace all Codes>127 with <fnc4>Code-128 */
-    for (charCur = 0; charCur < (int) length; charCur++) {
+    for (charCur=0;charCur<length;charCur++) {
         if (source[charCur]>127)
         {
             data[dataLength] = aFNC4;
@@ -707,46 +699,51 @@ INTERNAL int codablock(struct zint_symbol *symbol,const unsigned char source[],
 
     /* Find final row and column count */
     /* nor row nor column count given */
-    if (rows <= 0 && columns <= 0) {
-        /* use 1/1 aspect/ratio Codablock */
-        columns = floor(sqrt(dataLength)) + 5;
-        if (columns > 67) {
-            columns = 67;
-        } else if (columns < 9) {
-            columns = 9;
-        }
-        if (symbol->debug & ZINT_DEBUG_PRINT) {
-            printf("Auto column count for %d characters:%d\n", dataLength, columns);
+    if ( rows <= 0 && columns <= 5 ) {
+        /* Use Code128 until reasonable size */
+        if (dataLength < 9) {
+            rows = 1;
+        } else {
+            /* use 1/1 aspect/ratio Codablock */
+            columns = ((int)floor(sqrt(1.0*dataLength))+5);
+            if (columns > 64)
+                columns = 64;
+                #ifdef _DEBUG
+                printf("Auto column count for %zu characters:%d\n",dataLength,columns);
+                #endif
         }
     }
     /* There are 5 Codewords for Organisation Start(2),row(1),CheckSum,Stop */
     useColumns = columns - 5;
     if ( rows > 0 ) {
         /* row count given */
-        Error = Rows2Columns(symbol, T, dataLength, &rows, &useColumns, pSet, &fillings);
+        Error=Rows2Columns(T,data,dataLength,&rows,&useColumns,pSet,&fillings);
     } else {
         /* column count given */
-        Error = Columns2Rows(symbol, T, dataLength, &rows, &useColumns, pSet, &fillings);
+        Error=Columns2Rows(T,data,dataLength,&rows,&useColumns,pSet,&fillings);
     }
     if (Error != 0) {
-        strcpy(symbol->errtxt, "413: Data string too long");
+        strcpy(symbol->errtxt, "413: Data string to long");
         return Error;
     }
-    /* Suppresses clang-analyzer-core.VLASize warning */
-    assert(rows >= 2 && useColumns >= 4);
-
-    /* Data Check Characters K1 and K2, Annex F */
-    Sum1 = Sum2 = 0;
-    for (charCur = 0; charCur < (int) length; charCur++) {
-        Sum1 = (Sum1 + (charCur + 1) * source[charCur]) % 86; /* Mod as we go along to avoid overflow */
-        Sum2 = (Sum2 + charCur * source[charCur]) % 86;
+    /* Checksum */
+    Sum1=Sum2=0;
+    if (rows>1)
+    {
+        size_t charCur;
+        for (charCur=0 ; charCur<dataLength ; charCur++) {
+            Sum1=(Sum1 + (charCur%86+1)*data[charCur])%86;
+            Sum2=(Sum2 + (charCur%86)*data[charCur])%86;
+        }
     }
 
-    if (symbol->debug & ZINT_DEBUG_PRINT) { /* start a new level of local variables */
+    #ifdef _DEBUG
+    {   /* start a new level of local variables */
         int DPos;
         printf("\nData:");
         for (DPos=0 ; DPos< dataLength ; DPos++)
             fputc(data[DPos],stdout);
+
         printf("\n Set:");
         for (DPos=0 ; DPos< dataLength ; DPos++) {
             switch (pSet[DPos]&(CodeA+CodeB+CodeC)) {
@@ -769,8 +766,8 @@ INTERNAL int codablock(struct zint_symbol *symbol,const unsigned char source[],
         for (DPos=0 ; DPos< dataLength ; DPos++)
             fputc((pSet[DPos]&CFill)==0?'.':'X',stdout);
         fputc('\n',stdout);
-        printf("K1 %d, K2 %d\n", Sum1, Sum2);
     }
+    #endif
 
     columns = useColumns + 5;
 
@@ -787,17 +784,15 @@ INTERNAL int codablock(struct zint_symbol *symbol,const unsigned char source[],
     for (rowCur=0 ; rowCur<rows ; rowCur++) {
         if (charCur>=dataLength)
         {
-            /* >> Empty line with StartA, aCodeB, row #, and then filler aCodeC aCodeB etc */
+            /* >> Empty line with StartCCodeBCodeC */
+            characterSetCur=CodeC;
+            /* CDB Start C*/
             *pOutPos='\x67';
             pOutPos++;
-            *pOutPos = 100; /* aCodeB */
+            *pOutPos='\x63';
             pOutPos++;
-            characterSetCur = CodeB;
-            SumASCII(&pOutPos, rowCur + 42, characterSetCur); /* Row # */
-            emptyColumns = useColumns;
-            if (rowCur == rows - 1) {
-                emptyColumns -= 2;
-            }
+            SumASCII(&pOutPos,rowCur+42,CodeC);
+            emptyColumns=useColumns-2;
             while (emptyColumns>0)
             {
                 if(characterSetCur==CodeC)
@@ -817,36 +812,60 @@ INTERNAL int codablock(struct zint_symbol *symbol,const unsigned char source[],
             case CodeA:
                 *pOutPos = '\x67';
                 pOutPos++;
-                *pOutPos = '\x62';
-                pOutPos++;
+                if (rows>1) {
+                    *pOutPos = '\x62';
+                    pOutPos++;
+                }
                 characterSetCur=CodeA;
                 break;
             case CodeB:
-                *pOutPos = '\x67';
-                pOutPos++;
-                *pOutPos = '\x64';
-                pOutPos++;
+                if (rows==1) {
+                    *pOutPos = '\x68';
+                    pOutPos++;
+                } else {
+                    *pOutPos = '\x67';
+                    pOutPos++;
+                    *pOutPos = '\x64';
+                    pOutPos++;
+                }
                 characterSetCur=CodeB;
                 break;
             case CodeC:
             default:
-                *pOutPos = '\x67';
-                pOutPos++;
-                *pOutPos = '\x63';
-                pOutPos++;
+                if (rows==1) {
+                    *pOutPos = '\x69';
+                    pOutPos++;
+                } else {
+                    *pOutPos = '\x67';
+                    pOutPos++;
+                    *pOutPos = '\x63';
+                    pOutPos++;
+                }
                 characterSetCur=CodeC;
                 break;
             }
-            /* > Set F1 */
-            /* In first line : # of rows */
-            SumASCII(&pOutPos, rowCur == 0 ? rows - 2 : rowCur + 42, characterSetCur);
+            if (rows>1)
+            {
+                /* > Set F1 */
+                /* In first line : # of rows */
+                /* In Case of CodeA we shifted to CodeB */
+                SumASCII(&pOutPos
+                    ,(rowCur==0)?rows-2:rowCur+42
+                    ,(characterSetCur==CodeA)?CodeB:characterSetCur
+                );
+            }
             /* >>> Data */
             emptyColumns=useColumns;
+            /* +++ One liner don't have start/stop code */
+            if (rows == 1)
+                emptyColumns +=2;
             /* >> Character loop */
-            while (emptyColumns > 0 && charCur < dataLength)
+            while (emptyColumns>0)
             {
                 /* ? Change character set */
-                if (emptyColumns < useColumns)
+                /* not at first possition (It was then the start set) */
+                /* +++ special case for one-ligner */
+                if (emptyColumns<useColumns || (rows == 1 && charCur!=0) )
                 {
                     if ((pSet[charCur]&CodeA)!=0)
                     {
@@ -884,7 +903,7 @@ INTERNAL int codablock(struct zint_symbol *symbol,const unsigned char source[],
                             A2C128_C(&pOutPos,aFNC1,'\0');
                         else
                         {
-                            A2C128_C(&pOutPos, data[charCur], charCur + 1 < dataLength ? data[charCur + 1] : 0);
+                            A2C128_C(&pOutPos,data[charCur],data[charCur+1]);
                             ++charCur;
                             /* We need this here to get the good index */
                             /* for the termination flags in Set. */
@@ -894,12 +913,11 @@ INTERNAL int codablock(struct zint_symbol *symbol,const unsigned char source[],
                     --emptyColumns;
                 }
                 /* >> End Criteria */
-                if ((pSet[charCur] & CFill) || (pSet[charCur] & CEnd))
+                if ((pSet[charCur] & CFill)!=0)
                 {
                     /* Fill Line but leave space for checks in last line */
-                    if (rowCur == rows - 1) {
-                        emptyColumns -= 2;
-                    }
+                    if(rowCur==rows-1 && emptyColumns>=2)
+                        emptyColumns-=2;
                     while(emptyColumns>0)
                     {
                         switch(characterSetCur){
@@ -919,23 +937,27 @@ INTERNAL int codablock(struct zint_symbol *symbol,const unsigned char source[],
                         --emptyColumns;
                     }
                 }
+                if ((pSet[charCur] & CEnd)!=0)
+                    emptyColumns=0;
                 ++charCur;
             } /* Loop over characters */
         } /* if filling-Line / normal */
 
         /* Add checksum in last line */
-        if (rowCur == rows - 1)
+        if(rows>1 && rowCur==rows-1)
         {
             SumASCII(&pOutPos,Sum1,characterSetCur);
             SumASCII(&pOutPos,Sum2,characterSetCur);
         }
         /* Add Code 128 checksum */
         {
-            int Sum = pOutput[columns * rowCur] % 103;
-            int Pos = 1;
+            int Sum=0;
+            int Pos=0;
             for ( ; Pos < useColumns+3 ; Pos++)
             {
-                Sum = (Sum + pOutput[columns * rowCur + Pos] * Pos) % 103;
+                Sum = (Sum +
+                    ((Pos==0?1:Pos) * pOutput[columns*rowCur+Pos]) % 103
+                    ) % 103;
             }
             *pOutPos=(uchar)Sum;
             pOutPos++;
@@ -945,7 +967,7 @@ INTERNAL int codablock(struct zint_symbol *symbol,const unsigned char source[],
         pOutPos++;
     } /* End Lineloop */
 
-    if (symbol->debug & ZINT_DEBUG_PRINT) {
+    #ifdef _DEBUG
         /* Dump the output to the screen
          */
         printf("\nCode 128 Code Numbers:\n");
@@ -961,12 +983,7 @@ INTERNAL int codablock(struct zint_symbol *symbol,const unsigned char source[],
             }
         }
         printf("rows=%i columns=%i fillings=%i\n", rows, columns, fillings);
-    }
-#ifdef ZINT_TEST
-    if (symbol->debug & ZINT_DEBUG_TEST) {
-        debug_test_codeword_dump(symbol, pOutput, rows * columns);
-    }
-#endif
+    #endif
 
     /* Paint the C128 patterns */
     for (r = 0; r < rows; r++) {
@@ -978,11 +995,14 @@ INTERNAL int codablock(struct zint_symbol *symbol,const unsigned char source[],
         symbol->row_height[r] = 10;
     }
 
-    symbol->output_options |= BARCODE_BIND;
-
-    if (symbol->border_width == 0) { /* Allow override if non-zero */
-        symbol->border_width = 1; /* AIM ISS-X-24 Section 4.6.1 b) (note change from previous default 2) */
+    if (!(symbol->output_options & BARCODE_BIND)) {
+        symbol->output_options += BARCODE_BIND;
     }
 
+    if (symbol->border_width < 2) {
+        symbol->border_width = 2;
+    }
     return 0;
 }
+
+
index 455491c..ede641f 100644 (file)
@@ -1,11 +1,8 @@
-/* code.c - Handles Code 11, 39, 39+, 93, PZN, Channel and VIN */
-/* LOGMARS MIL-STD-1189 Rev. B https://apps.dtic.mil/dtic/tr/fulltext/u2/a473534.pdf */
-/* PZN https://www.ifaffm.de/mandanten/1/documents/04_ifa_coding_system/IFA_Info_Code_39_EN.pdf */
-/* PZN https://www.ifaffm.de/mandanten/1/documents/04_ifa_coding_system/IFA-Info_Check_Digit_Calculations_PZN_PPN_UDI_EN.pdf */
+/* code.c - Handles Code 11, 39, 39+ and 93 */
 
 /*
     libzint - the open source barcode library
-    Copyright (C) 2008 - 2020 Robin Stuart <rstuart114@gmail.com>
+    Copyright (C) 2008-2017 Robin Stuart <rstuart114@gmail.com>
 
     Redistribution and use in source and binary forms, with or without
     modification, are permitted provided that the following conditions
     OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     SUCH DAMAGE.
  */
-/* vim: set ts=4 sw=4 et : */
 
 /* In version 0.5 this file was 1,553 lines long! */
 
+#include <string.h>
 #include <stdio.h>
-#include <assert.h>
+#include <stdlib.h>
 #include "common.h"
 
-#define SODIUM  "0123456789-"
-#define SILVER  "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%abcd"
+#define SODIUM "0123456789-"
+#define SILVER "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%abcd"
 #define ARSENIC "0123456789ABCDEFGHJKLMNPRSTUVWXYZ"
 
 static const char *C11Table[11] = {
@@ -97,18 +94,24 @@ static const char *C93Table[47] = {
     "121221", "312111", "311121", "122211"
 };
 
+/* Global Variables for Channel Code */
+int S[11], B[11];
+long value;
+long target_value;
+char pattern[30];
+
+/* Function Prototypes */
+void NextS(int Chan, int i, int MaxS, int MaxB);
+void NextB(int Chan, int i, int MaxB, int MaxS);
+
 /* *********************** CODE 11 ******************** */
-INTERNAL int code_11(struct zint_symbol *symbol, unsigned char source[], int length) { /* Code 11 */
+int code_11(struct zint_symbol *symbol, unsigned char source[], int length) { /* Code 11 */
 
-    int i;
+    unsigned int i;
     int h, c_digit, c_weight, c_count, k_digit, k_weight, k_count;
-    int weight[122], error_number;
-    char dest[750]; /* 6 + 121 * 6 + 2 * 6 + 5 + 1 == 750 */
+    int weight[128], error_number;
+    char dest[1024]; /* 6 +  121 * 6 + 2 * 6 + 5 + 1 ~ 1024*/
     char checkstr[3];
-    int num_check_digits;
-
-    /* Suppresses clang-tidy clang-analyzer-core.UndefinedBinaryOperatorResult warning */
-    assert(length > 0);
 
     if (length > 121) {
         strcpy(symbol->errtxt, "320: Input too long");
@@ -119,19 +122,6 @@ INTERNAL int code_11(struct zint_symbol *symbol, unsigned char source[], int len
         strcpy(symbol->errtxt, "321: Invalid characters in data");
         return error_number;
     }
-
-    if (symbol->option_2 < 0 || symbol->option_2 > 2) {
-        strcpy(symbol->errtxt, "339: Invalid check digit version");
-        return ZINT_ERROR_INVALID_OPTION;
-    }
-    if (symbol->option_2 == 2) {
-        num_check_digits = 0;
-    } else if (symbol->option_2 == 1) {
-        num_check_digits = 1;
-    } else {
-        num_check_digits = 2;
-    }
-
     c_weight = 1;
     c_count = 0;
     k_weight = 1;
@@ -141,7 +131,7 @@ INTERNAL int code_11(struct zint_symbol *symbol, unsigned char source[], int len
     strcpy(dest, "112211");
 
     /* Draw main body of barcode */
-    for (i = 0; i < length; i++) {
+    for (i = 0; i < (unsigned int) length; i++) {
         lookup(SODIUM, C11Table, source[i], dest);
         if (source[i] == '-')
             weight[i] = 10;
@@ -149,52 +139,41 @@ INTERNAL int code_11(struct zint_symbol *symbol, unsigned char source[], int len
             weight[i] = ctoi(source[i]);
     }
 
-    if (num_check_digits) {
-        /* Calculate C checksum */
-        for (h = length - 1; h >= 0; h--) {
-            c_count += (c_weight * weight[h]);
-            c_weight++;
+    /* Calculate C checksum */
+    for (h = length - 1; h >= 0; h--) {
+        c_count += (c_weight * weight[h]);
+        c_weight++;
 
-            if (c_weight > 10) {
-                c_weight = 1;
-            }
+        if (c_weight > 10) {
+            c_weight = 1;
         }
-        c_digit = c_count % 11;
-
-        if (num_check_digits == 1) {
-            checkstr[0] = itoc(c_digit);
-            if (checkstr[0] == 'A') {
-                checkstr[0] = '-';
-            }
-            checkstr[1] = '\0';
-            lookup(SODIUM, C11Table, checkstr[0], dest);
-        } else {
-            weight[length] = c_digit;
+    }
+    c_digit = c_count % 11;
 
-            /* Calculate K checksum */
-            for (h = length; h >= 0; h--) {
-                k_count += (k_weight * weight[h]);
-                k_weight++;
+    weight[length] = c_digit;
 
-                if (k_weight > 9) {
-                    k_weight = 1;
-                }
-            }
-            k_digit = k_count % 11;
+    /* Calculate K checksum */
+    for (h = length; h >= 0; h--) {
+        k_count += (k_weight * weight[h]);
+        k_weight++;
 
-            checkstr[0] = itoc(c_digit);
-            checkstr[1] = itoc(k_digit);
-            if (checkstr[0] == 'A') {
-                checkstr[0] = '-';
-            }
-            if (checkstr[1] == 'A') {
-                checkstr[1] = '-';
-            }
-            checkstr[2] = '\0';
-            lookup(SODIUM, C11Table, checkstr[0], dest);
-            lookup(SODIUM, C11Table, checkstr[1], dest);
+        if (k_weight > 9) {
+            k_weight = 1;
         }
     }
+    k_digit = k_count % 11;
+
+    checkstr[0] = itoc(c_digit);
+    checkstr[1] = itoc(k_digit);
+    if (checkstr[0] == 'A') {
+        checkstr[0] = '-';
+    }
+    if (checkstr[1] == 'A') {
+        checkstr[1] = '-';
+    }
+    checkstr[2] = '\0';
+    lookup(SODIUM, C11Table, checkstr[0], dest);
+    lookup(SODIUM, C11Table, checkstr[1], dest);
 
     /* Stop character */
     strcat(dest, "11221");
@@ -202,18 +181,16 @@ INTERNAL int code_11(struct zint_symbol *symbol, unsigned char source[], int len
     expand(symbol, dest);
 
     ustrcpy(symbol->text, source);
-    if (num_check_digits) {
-        ustrcat(symbol->text, checkstr);
-    }
+    strcat((char*) symbol->text, checkstr);
     return error_number;
 }
 
 /* Code 39 */
-INTERNAL int c39(struct zint_symbol *symbol, unsigned char source[], const size_t length) {
-    int i;
-    int counter;
+int c39(struct zint_symbol *symbol, unsigned char source[], const size_t length) {
+    unsigned int i;
+    unsigned int counter;
     int error_number;
-    char dest[880]; /* 10 (Start) + 85 * 10 + 10 (Check) + 9 (Stop) + 1 = 880 */
+    char dest[775];
     char localstr[2] = {0};
 
     counter = 0;
@@ -222,13 +199,10 @@ INTERNAL int c39(struct zint_symbol *symbol, unsigned char source[], const size_
         symbol->option_2 = 0;
     }
 
-    if ((symbol->symbology == BARCODE_LOGMARS) && (length > 30)) { /* MIL-STD-1189 Rev. B Section 5.2.6.2 */
+    if ((symbol->symbology == BARCODE_LOGMARS) && (length > 59)) {
         strcpy(symbol->errtxt, "322: Input too long");
         return ZINT_ERROR_TOO_LONG;
-    } else if ((symbol->symbology == BARCODE_HIBC_39) && (length > 68)) { /* Prevent encoded_data out-of-bounds >= 143 due to wider 'wide' bars */
-        strcpy(symbol->errtxt, "319: Input too long"); /* Note use 319 (2of5 range) as 340 taken by CODE128 */
-        return ZINT_ERROR_TOO_LONG;
-    } else if (length > 85) {
+    } else if (length > 74) {
         strcpy(symbol->errtxt, "323: Input too long");
         return ZINT_ERROR_TOO_LONG;
     }
@@ -242,12 +216,12 @@ INTERNAL int c39(struct zint_symbol *symbol, unsigned char source[], const size_
     /* Start character */
     strcpy(dest, "1211212111");
 
-    for (i = 0; i < (int) length; i++) {
+    for (i = 0; i < (unsigned int) length; i++) {
         lookup(SILVER, C39Table, source[i], dest);
         counter += posn(SILVER, source[i]);
     }
 
-    if (symbol->option_2 == 1) {
+    if ((symbol->symbology == BARCODE_LOGMARS) || (symbol->option_2 == 1)) {
 
         char check_digit;
         counter = counter % 43;
@@ -293,7 +267,7 @@ INTERNAL int c39(struct zint_symbol *symbol, unsigned char source[], const size_
 
     if ((symbol->symbology == BARCODE_LOGMARS) || (symbol->symbology == BARCODE_HIBC_39)) {
         /* LOGMARS uses wider 'wide' bars than normal Code 39 */
-        counter = strlen(dest);
+        counter = (unsigned int) strlen(dest);
         for (i = 0; i < counter; i++) {
             if (dest[i] == '2') {
                 dest[i] = '3';
@@ -304,24 +278,25 @@ INTERNAL int c39(struct zint_symbol *symbol, unsigned char source[], const size_
     expand(symbol, dest);
 
     if (symbol->symbology == BARCODE_CODE39) {
-        ustrcpy(symbol->text, "*");
-        ustrcat(symbol->text, source);
-        ustrcat(symbol->text, localstr);
-        ustrcat(symbol->text, "*");
+        strcpy((char*) symbol->text, "*");
+        strcat((char*) symbol->text, (char*) source);
+        strcat((char*) symbol->text, localstr);
+        strcat((char*) symbol->text, "*");
     } else {
-        ustrcpy(symbol->text, source);
-        ustrcat(symbol->text, localstr);
+        strcpy((char*) symbol->text, (char*) source);
+        strcat((char*) symbol->text, localstr);
     }
     return error_number;
 }
 
 /* Pharmazentral Nummer (PZN) */
-INTERNAL int pharmazentral(struct zint_symbol *symbol, unsigned char source[], int length) {
+int pharmazentral(struct zint_symbol *symbol, unsigned char source[], int length) {
 
     int i, error_number, zeroes;
     unsigned int count, check_digit;
     char localstr[11];
 
+    count = 0;
     if (length > 7) {
         strcpy(symbol->errtxt, "325: Input wrong length");
         return ZINT_ERROR_TOO_LONG;
@@ -336,57 +311,54 @@ INTERNAL int pharmazentral(struct zint_symbol *symbol, unsigned char source[], i
     zeroes = 7 - length + 1;
     for (i = 1; i < zeroes; i++)
         localstr[i] = '0';
-    ustrcpy(localstr + zeroes, source);
+    strcpy(localstr + zeroes, (char *) source);
 
-    count = 0;
     for (i = 1; i < 8; i++) {
         count += i * ctoi(localstr[i]);
     }
 
     check_digit = count % 11;
-
-    if (symbol->debug & ZINT_DEBUG_PRINT) {
-        printf("PZN: %s, check digit %d\n", localstr, check_digit);
+    if (check_digit == 11) {
+        check_digit = 0;
     }
-
-    if (check_digit == 10) {
+    localstr[8] = itoc(check_digit);
+    localstr[9] = '\0';
+    if (localstr[8] == 'A') {
         strcpy(symbol->errtxt, "327: Invalid PZN Data");
         return ZINT_ERROR_INVALID_DATA;
     }
-    localstr[8] = itoc(check_digit);
-    localstr[9] = '\0';
     error_number = c39(symbol, (unsigned char *) localstr, strlen(localstr));
-    ustrcpy(symbol->text, "PZN ");
-    ustrcat(symbol->text, localstr);
+    ustrcpy(symbol->text, (unsigned char *) "PZN");
+    strcat((char*) symbol->text, localstr);
     return error_number;
 }
 
 /* Extended Code 39 - ISO/IEC 16388:2007 Annex A */
-INTERNAL int ec39(struct zint_symbol *symbol, unsigned char source[], int length) {
+int ec39(struct zint_symbol *symbol, unsigned char source[], int length) {
 
-    unsigned char buffer[85 * 2 + 1] = {0};
-    int i;
+    unsigned char buffer[150] = {0};
+    unsigned int i;
     int error_number;
 
-    if (length > 85) {
+    if (length > 74) {
         strcpy(symbol->errtxt, "328: Input too long");
         return ZINT_ERROR_TOO_LONG;
     }
 
     /* Creates a buffer string and places control characters into it */
-    for (i = 0; i < length; i++) {
+    for (i = 0; i < (unsigned int) length; i++) {
         if (source[i] > 127) {
             /* Cannot encode extended ASCII */
             strcpy(symbol->errtxt, "329: Invalid characters in input data");
             return ZINT_ERROR_INVALID_DATA;
         }
-        ustrcat(buffer, EC39Ctrl[source[i]]);
+        strcat((char*) buffer, EC39Ctrl[source[i]]);
     }
 
     /* Then sends the buffer to the C39 function */
     error_number = c39(symbol, buffer, ustrlen(buffer));
 
-    for (i = 0; i < length; i++)
+    for (i = 0; i < (unsigned int) length; i++)
         symbol->text[i] = source[i] ? source[i] : ' ';
     symbol->text[length] = '\0';
 
@@ -394,7 +366,7 @@ INTERNAL int ec39(struct zint_symbol *symbol, unsigned char source[], int length
 }
 
 /* Code 93 is an advancement on Code 39 and the definition is a lot tighter */
-INTERNAL int c93(struct zint_symbol *symbol, unsigned char source[], int length) {
+int c93(struct zint_symbol *symbol, unsigned char source[], int length) {
 
     /* SILVER includes the extra characters a, b, c and d to represent Code 93 specific
        shift characters 1, 2, 3 and 4 respectively. These characters are never used by
@@ -482,136 +454,66 @@ INTERNAL int c93(struct zint_symbol *symbol, unsigned char source[], int length)
     return error_number;
 }
 
-typedef const struct s_channel_precalc {
-    long value; unsigned char B[8]; unsigned char S[8]; unsigned char bmax[7]; unsigned char smax[7];
-} channel_precalc;
-
-//#define CHANNEL_GENERATE_PRECALCS
+/* NextS() and NextB() are from ANSI/AIM BC12-1998 and are Copyright (c) AIM 1997 */
 
-#ifdef CHANNEL_GENERATE_PRECALCS
-/* To generate precalc tables uncomment define and run "./test_channel -f generate -g" and place result in "channel_precalcs.h" */
-static void channel_generate_precalc(int channels, long value, int mod, int last, int B[8], int S[8], int bmax[7], int smax[7]) {
-    int i;
-    if (value == mod) printf("static channel_precalc channel_precalcs%d[] = {\n", channels);
-    printf("    { %7ld, {", value); for (i = 0; i < 8; i++) printf(" %d,", B[i]); printf(" },");
-    printf(" {"); for (i = 0; i < 8; i++) printf(" %d,", S[i]); printf(" },");
-    printf(" {"); for (i = 0; i < 7; i++) printf(" %d,", bmax[i]); printf(" },");
-    printf(" {"); for (i = 0; i < 7; i++) printf(" %d,", smax[i]); printf(" }, },\n");
-    if (value == last) printf("};\n");
-}
-#else
-#include "channel_precalcs.h"
-#endif
+/* Their are used here on the understanding that they form part of the specification
+   for Channel Code and therefore their use is permitted under the following terms
+   set out in that document:
 
-static long channel_copy_precalc(channel_precalc precalc, int B[8], int S[8], int bmax[7], int smax[7]) {
-    int i;
+   "It is the intent and understanding of AIM [t]hat the symbology presented in this
+   specification is entirely in the public domain and free of all use restrictions,
+   licenses and fees. AIM USA, its member companies, or individual officers
+   assume no liability for the use of this document." */
 
-    for (i = 0; i < 7; i++) {
-        B[i] = precalc.B[i];
-        S[i] = precalc.S[i];
-        bmax[i] = precalc.bmax[i];
-        smax[i] = precalc.smax[i];
+void CheckCharacter() {
+
+    if (value == target_value) {
+        int i;
+        /* Target reached - save the generated pattern */
+        strcpy(pattern, "11110");
+        for (i = 0; i < 11; i++) {
+            char part[3];
+            part[0] = itoc(S[i]);
+            part[1] = itoc(B[i]);
+            part[2] = '\0';
+            strcat(pattern, part);
+        }
     }
-    B[7] = precalc.B[7];
-    S[7] = precalc.S[7];
-
-    return precalc.value;
 }
 
-/* CHNCHR is adapted from ANSI/AIM BC12-1998 Annex D Figure D5 and is Copyright (c) AIM 1997 */
+void NextB(int Chan, int i, int MaxB, int MaxS) {
+    int b;
 
-/* It is used here on the understanding that it forms part of the specification
-   for Channel Code and therefore its use is permitted under the following terms
-   set out in that document:
+    b = (S[i] + B[i - 1] + S[i - 1] + B[i - 2] > 4) ? 1 : 2;
+    if (i < Chan + 2) {
+        for (; b <= MaxB; b++) {
+            B[i] = b;
+            NextS(Chan, i + 1, MaxS, MaxB + 1 - b);
+        }
+    } else if (b <= MaxB) {
+        B[i] = MaxB;
+        CheckCharacter();
+        value++;
+    }
+}
 
-   "It is the intent and understanding of AIM [t]hat the symbology presented in this
-   specification is entirely in the public domain and free of all use restrictions,
-   licenses and fees. AIM USA, its member companies, or individual officers
-   assume no liability for the use of this document." */
+void NextS(int Chan, int i, int MaxS, int MaxB) {
+    int s;
 
-static void CHNCHR(int channels, long target_value, int B[8], int S[8]) {
-    /* Use of initial pre-calculations taken from Barcode Writer in Pure PostScript (bwipp)
-     * Copyright (c) 2004-2020 Terry Burton (MIT/X-Consortium license) */
-    static channel_precalc initial_precalcs[6] = {
-        { 0, { 1, 1, 1, 1, 1, 2, 1, 2, }, { 1, 1, 1, 1, 1, 1, 1, 3, }, { 1, 1, 1, 1, 1, 3, 2, }, { 1, 1, 1, 1, 1, 3, 3, }, },
-        { 0, { 1, 1, 1, 1, 2, 1, 1, 3, }, { 1, 1, 1, 1, 1, 1, 1, 4, }, { 1, 1, 1, 1, 4, 3, 3, }, { 1, 1, 1, 1, 4, 4, 4, }, },
-        { 0, { 1, 1, 1, 2, 1, 1, 2, 3, }, { 1, 1, 1, 1, 1, 1, 1, 5, }, { 1, 1, 1, 5, 4, 4, 4, }, { 1, 1, 1, 5, 5, 5, 5, }, },
-        { 0, { 1, 1, 2, 1, 1, 2, 1, 4, }, { 1, 1, 1, 1, 1, 1, 1, 6, }, { 1, 1, 6, 5, 5, 5, 4, }, { 1, 1, 6, 6, 6, 6, 6, }, },
-        { 0, { 1, 2, 1, 1, 2, 1, 1, 5, }, { 1, 1, 1, 1, 1, 1, 1, 7, }, { 1, 7, 6, 6, 6, 5, 5, }, { 1, 7, 7, 7, 7, 7, 7, }, },
-        { 0, { 2, 1, 1, 2, 1, 1, 2, 5, }, { 1, 1, 1, 1, 1, 1, 1, 8, }, { 8, 7, 7, 7, 6, 6, 6, }, { 8, 8, 8, 8, 8, 8, 8, }, },
-    };
-    int bmax[7], smax[7];
-    long value = 0;
-
-    channel_copy_precalc(initial_precalcs[channels - 3], B, S, bmax, smax);
-
-#ifndef CHANNEL_GENERATE_PRECALCS
-    if (channels == 7 && target_value >= channel_precalcs7[0].value) {
-        value = channel_copy_precalc(channel_precalcs7[(target_value / channel_precalcs7[0].value) - 1], B, S, bmax, smax);
-    } else if (channels == 8 && target_value >= channel_precalcs8[0].value) {
-        value = channel_copy_precalc(channel_precalcs8[(target_value / channel_precalcs8[0].value) - 1], B, S, bmax, smax);
-    }
-#endif
-
-    goto chkchr;
-
-ls0:smax[1] = smax[0] + 1 - S[0]; B[0] = 1;
-    if (S[0] == 1) goto nb0;
-lb0:    bmax[1] = bmax[0] + 1 - B[0]; S[1] = 1;
-ls1:        smax[2] = smax[1] + 1 - S[1]; B[1] = 1;
-            if (S[0] + B[0] + S[1] == 3) goto nb1;
-lb1:            bmax[2] = bmax[1] + 1 - B[1]; S[2] = 1;
-ls2:                smax[3] = smax[2] + 1 - S[2]; B[2] = 1;
-                    if (B[0] + S[1] + B[1] + S[2] == 4) goto nb2;
-lb2:                    bmax[3] = bmax[2] + 1 - B[2]; S[3] = 1;
-ls3:                        smax[4] = smax[3] + 1 - S[3]; B[3] = 1;
-                            if (B[1] + S[2] + B[2] + S[3] == 4) goto nb3;
-lb3:                            bmax[4] = bmax[3] + 1 - B[3]; S[4] = 1;
-ls4:                                smax[5] = smax[4] + 1 - S[4]; B[4] = 1;
-                                    if (B[2] + S[3] + B[3] + S[4] == 4) goto nb4;
-lb4:                                    bmax[5] = bmax[4] + 1 - B[4]; S[5] = 1;
-ls5:                                        smax[6] = smax[5] + 1 - S[5]; B[5] = 1;
-                                            if (B[3] + S[4] + B[4] + S[5] == 4) goto nb5;
-lb5:                                            bmax[6] = bmax[5] + 1 - B[5]; S[6] = 1;
-ls6:                                                S[7] = smax[6] + 1 - S[6]; B[6] = 1;
-                                                    if (B[4] + S[5] + B[5] + S[6] == 4) goto nb6;
-lb6:                                                    B[7] = bmax[6] + 1 - B[6];
-                                                        if (B[5] + S[6] + B[6] + S[7] + B[7] == 5) goto nb6;
-chkchr:
-#ifdef CHANNEL_GENERATE_PRECALCS
-                                                        if (channels == 7 && value && value % 115338 == 0) { /* 115338 == (576688 + 2) / 5 */
-                                                            channel_generate_precalc(channels, value, 115338, 115338 * (5 - 1), B, S, bmax, smax);
-                                                        } else if (channels == 8 && value && value % 119121 == 0) { /* 119121 == (7742862 + 3) / 65 */
-                                                            channel_generate_precalc(channels, value, 119121, 119121 * (65 - 1), B, S, bmax, smax);
-                                                        }
-#endif
-                                                        if (value == target_value) return;
-                                                        value++;
-nb6:                                                    if (++B[6] <= bmax[6]) goto lb6;
-                                                    if (++S[6] <= smax[6]) goto ls6;
-nb5:                                            if (++B[5] <= bmax[5]) goto lb5;
-                                            if (++S[5] <= smax[5]) goto ls5;
-nb4:                                    if (++B[4] <= bmax[4]) goto lb4;
-                                    if (++S[4] <= smax[4]) goto ls4;
-nb3:                            if (++B[3] <= bmax[3]) goto lb3;
-                            if (++S[3] <= smax[3]) goto ls3;
-nb2:                    if (++B[2] <= bmax[2]) goto lb2;
-                    if (++S[2] <= smax[2]) goto ls2;
-nb1:            if (++B[1] <= bmax[1]) goto lb1;
-            if (++S[1] <= smax[1]) goto ls1;
-nb0:    if (++B[0] <= bmax[0]) goto lb0;
-    if (++S[0] <= smax[0]) goto ls0;
+    for (s = (i < Chan + 2) ? 1 : MaxS; s <= MaxS; s++) {
+        S[i] = s;
+        NextB(Chan, i, MaxB, MaxS + 1 - s);
+    }
 }
 
 /* Channel Code - According to ANSI/AIM BC12-1998 */
-INTERNAL int channel_code(struct zint_symbol *symbol, unsigned char source[], int length) {
-    int S[8] = {0}, B[8] = {0};
-    long target_value = 0;
-    char pattern[30];
+int channel_code(struct zint_symbol *symbol, unsigned char source[], int length) {
     int channels, i;
-    int error_number, range = 0, zeroes;
+    int error_number = 0, range = 0, zeroes;
     char hrt[9];
 
+    target_value = 0;
+
     if (length > 7) {
         strcpy(symbol->errtxt, "333: Input too long");
         return ZINT_ERROR_TOO_LONG;
@@ -627,30 +529,18 @@ INTERNAL int channel_code(struct zint_symbol *symbol, unsigned char source[], in
     } else {
         channels = symbol->option_2;
     }
-
-    for (i = 0; i < length; i++) {
-        target_value *= 10;
-        target_value += ctoi((char) source[i]);
-    }
-
     if (channels == 0) {
         channels = length + 1;
-        if (target_value > 576688 && channels < 8) {
-            channels = 8;
-        } else if (target_value > 44072 && channels < 7) {
-            channels = 7;
-        } else if (target_value > 3493 && channels < 6) {
-            channels = 6;
-        } else if (target_value > 292 && channels < 5) {
-            channels = 5;
-        } else if (target_value > 26 && channels < 4) {
-            channels = 4;
-        }
     }
     if (channels == 2) {
         channels = 3;
     }
 
+    for (i = 0; i < length; i++) {
+        target_value *= 10;
+        target_value += ctoi((char) source[i]);
+    }
+
     switch (channels) {
         case 3: if (target_value > 26) {
                 range = 1;
@@ -682,35 +572,35 @@ INTERNAL int channel_code(struct zint_symbol *symbol, unsigned char source[], in
         return ZINT_ERROR_INVALID_DATA;
     }
 
-    CHNCHR(channels, target_value, B, S);
-
-    strcpy(pattern, "111111111"); /* Finder pattern */
-    for (i = 8 - channels; i < 8; i++) {
-        char part[3];
-        part[0] = itoc(S[i]);
-        part[1] = itoc(B[i]);
-        part[2] = '\0';
-        strcat(pattern, part);
+    for (i = 0; i < 11; i++) {
+        B[i] = 0;
+        S[i] = 0;
     }
 
+    B[0] = S[1] = B[1] = S[2] = B[2] = 1;
+    value = 0;
+    NextS(channels, 3, channels, channels);
+
     zeroes = channels - 1 - length;
     if (zeroes < 0) {
         zeroes = 0;
     }
     memset(hrt, '0', zeroes);
-    ustrcpy(hrt + zeroes, source);
-    ustrcpy(symbol->text, hrt);
+    strcpy(hrt + zeroes, (char *) source);
+    ustrcpy(symbol->text, (unsigned char *) hrt);
 
     expand(symbol, pattern);
 
     return error_number;
 }
 
-/* Vehicle Identification Number (VIN) */
-INTERNAL int vin(struct zint_symbol *symbol, const unsigned char source[], const size_t in_length) {
 
+/* Vehicle Identification Number (VIN) */
+int vin(struct zint_symbol *symbol, const unsigned char source[], const size_t in_length) {
+    
     /* This code verifies the check digit present in North American VIN codes */
-
+    
+    int zeros;
     char local_source[18];
     char dest[200];
     char input_check;
@@ -720,80 +610,86 @@ INTERNAL int vin(struct zint_symbol *symbol, const unsigned char source[], const
     int sum;
     int i;
     int length = (int) in_length;
-
+    
     // Check length
-    if (length != 17) {
-        strcpy(symbol->errtxt, "336: Input wrong length, 17 characters required");
+    if (length > 17) {
+        strcpy(symbol->errtxt, "336: Input too long");
         return ZINT_ERROR_TOO_LONG;
     }
-
+    
+    // Pad with zeros
+    zeros = 17 - length;
+    
+    for (i = 0; i < 17; i++) {
+        local_source[i] = '0';
+    }
+    local_source[17] = '\0';
+    
+    for (i = 0; i < length; i++) {
+        local_source[zeros + i] = source[i];
+    }
+    
+    to_upper((unsigned char *) local_source);
+    
     // Check input characters, I, O and Q are not allowed
-    if (is_sane(ARSENIC, source, length) == ZINT_ERROR_INVALID_DATA) {
+    if (is_sane(ARSENIC, (unsigned char *) local_source, length) == ZINT_ERROR_INVALID_DATA) {
         strcpy(symbol->errtxt, "337: Invalid characters in input data");
         return ZINT_ERROR_INVALID_DATA;
     }
-
-    ustrcpy(local_source, source);
-
-    to_upper((unsigned char *) local_source);
-
-
-    // Check digit only valid for North America
-    if (local_source[0] >= '1' && local_source[0] <= '5') {
-        input_check = local_source[8];
-
-        for (i = 0; i < 17; i++) {
-            if ((local_source[i] >= '0') && (local_source[i] <= '9')) {
-                value[i] = local_source[i] - '0';
-            } else if ((local_source[i] >= 'A') && (local_source[i] <= 'I')) {
-                value[i] = (local_source[i] - 'A') + 1;
-            } else if ((local_source[i] >= 'J') && (local_source[i] <= 'R')) {
-                value[i] = (local_source[i] - 'J') + 1;
-            } else if ((local_source[i] >= 'S') && (local_source[i] <= 'Z')) {
-                value[i] = (local_source[i] - 'S') + 2;
-            }
-        }
-
-        sum = 0;
-        for (i = 0; i < 17; i++) {
-            sum += value[i] * weight[i];
+    
+    input_check = local_source[8];
+    
+    for (i = 0; i < 17; i++) {
+        if ((local_source[i] >= '0') && (local_source[i] <= '9')) {
+            value[i] = local_source[i] - '0';
         }
-
-        output_check = '0' + (sum % 11);
-
-        if (output_check == ':') {
-            // Check digit was 10
-            output_check = 'X';
+        if ((local_source[i] >= 'A') && (local_source[i] <= 'I')) {
+            value[i] = (local_source[i] - 'A') + 1;
         }
-
-        if (symbol->debug & ZINT_DEBUG_PRINT) {
-            printf("Producing VIN code: %s\n", local_source);
-            printf("Input check was %c, calculated check is %c\n", input_check, output_check);
+        if ((local_source[i] >= 'J') && (local_source[i] <= 'R')) {
+            value[i] = (local_source[i] - 'J') + 1;
         }
-
-        if (input_check != output_check) {
-            strcpy(symbol->errtxt, "338: Invalid check digit in input data");
-            return ZINT_ERROR_INVALID_DATA;
+        if ((local_source[i] >= 'S') && (local_source[i] <= 'Z')) {
+            value[i] = (local_source[i] - 'S') + 2;
         }
     }
-
+    
+    sum = 0;
+    for (i = 0; i < 17; i++) {
+        sum += value[i] * weight[i];
+    }
+    
+    output_check = '0' + (sum % 11);
+    
+    if (output_check == ':') {
+        // Check digit was 10
+        output_check = 'X';
+    }
+    
+    if (symbol->debug) {
+        printf("Producing VIN code: %s\n", local_source);
+        printf("Input check was %c, calculated check is %c\n", input_check, output_check);
+    }
+    
+    if (input_check != output_check) {
+        strcpy(symbol->errtxt, "338: Invalid check digit in input data");
+        return ZINT_ERROR_INVALID_DATA;
+    }
+    
     /* Start character */
     strcpy(dest, "1211212111");
-
-    /* Import character 'I' prefix? */
-    if (symbol->option_2 & 1) {
-        strcat(dest, "1121122111");
-    }
-
+    
     // Copy glyphs to symbol
     for (i = 0; i < 17; i++) {
         lookup(SILVER, C39Table, local_source[i], dest);
     }
-
+    
+    /* Stop character */
     strcat(dest, "121121211");
-
-    ustrcpy(symbol->text, local_source);
+    
+    ustrcpy(symbol->text, (unsigned char *) local_source);
     expand(symbol, dest);
-
+    
     return 0;
 }
+
index 8ba456b..62b09a6 100644 (file)
@@ -2,7 +2,7 @@
 
 /*
     libzint - the open source barcode library
-    Copyright (C) 2009-2020 Robin Stuart <rstuart114@gmail.com>
+    Copyright (C) 2009-2017 Robin Stuart <rstuart114@gmail.com>
 
     Redistribution and use in source and binary forms, with or without
     modification, are permitted provided that the following conditions
     OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     SUCH DAMAGE.
  */
-/* vim: set ts=4 sw=4 et : */
 
 #include "common.h"
 #include "code1.h"
 #include "reedsol.h"
 #include "large.h"
 #include <stdio.h>
+#include <string.h>
 #include <math.h>
 
-static void horiz(struct zint_symbol *symbol, int row_no, int full) {
+void horiz(struct zint_symbol *symbol, int row_no, int full) {
     int i;
 
     if (full) {
@@ -52,7 +52,7 @@ static void horiz(struct zint_symbol *symbol, int row_no, int full) {
     }
 }
 
-static void central_finder(struct zint_symbol *symbol, int start_row, int row_count, int full_rows) {
+void central_finder(struct zint_symbol *symbol, int start_row, int row_count, int full_rows) {
     int i;
 
     for (i = 0; i < row_count; i++) {
@@ -68,7 +68,7 @@ static void central_finder(struct zint_symbol *symbol, int start_row, int row_co
     }
 }
 
-static void vert(struct zint_symbol *symbol, int column, int height, int top) {
+void vert(struct zint_symbol *symbol, int column, int height, int top) {
     int i;
 
     if (top) {
@@ -82,7 +82,7 @@ static void vert(struct zint_symbol *symbol, int column, int height, int top) {
     }
 }
 
-static void spigot(struct zint_symbol *symbol, int row_no) {
+void spigot(struct zint_symbol *symbol, int row_no) {
     int i;
 
     for (i = symbol->width - 1; i > 0; i--) {
@@ -92,7 +92,7 @@ static void spigot(struct zint_symbol *symbol, int row_no) {
     }
 }
 
-static int isedi(unsigned char input) {
+int isedi(unsigned char input) {
     int result = 0;
 
     if (input == 13) {
@@ -117,19 +117,15 @@ static int isedi(unsigned char input) {
     return result;
 }
 
-static int dq4bi(unsigned char source[], int sourcelen, int position) {
+int dq4bi(unsigned char source[], int sourcelen, int position) {
     int i;
 
-    for (i = 0; ((position + i) < sourcelen) && isedi(source[position + i]); i++);
+    for (i = position; isedi(source[position + i]) && ((position + i) < sourcelen); i++);
 
     if ((position + i) == sourcelen) {
         /* Reached end of input */
         return 0;
     }
-    if (i == 0) {
-        /* Not EDI */
-        return 0;
-    }
 
     if (source[position + i - 1] == 13) {
         return 1;
@@ -323,6 +319,7 @@ static int c1_look_ahead_test(unsigned char source[], int sourcelen, int positio
             if (c40_count < edi_count) {
                 best_scheme = C1_C40;
             } else {
+                done = 0;
                 if (c40_count == edi_count) {
                     if (dq4bi(source, sourcelen, position)) {
                         best_scheme = C1_EDI;
@@ -352,7 +349,7 @@ static int c1_look_ahead_test(unsigned char source[], int sourcelen, int positio
     return best_scheme;
 }
 
-static int c1_encode(struct zint_symbol *symbol, unsigned char source[], unsigned int target[], int length) {
+int c1_encode(struct zint_symbol *symbol, unsigned char source[], unsigned int target[], int length) {
     int current_mode, next_mode;
     int sp, tp, gs1, i, j, p, latch;
     int c40_buffer[6], c40_p;
@@ -363,6 +360,7 @@ static int c1_encode(struct zint_symbol *symbol, unsigned char source[], unsigne
 
     sp = 0;
     tp = 0;
+    latch = 0;
     memset(c40_buffer, 0, sizeof(*c40_buffer));
     c40_p = 0;
     memset(text_buffer, 0, sizeof(*text_buffer));
@@ -371,7 +369,7 @@ static int c1_encode(struct zint_symbol *symbol, unsigned char source[], unsigne
     edi_p = 0;
     strcpy(decimal_binary, "");
 
-    if ((symbol->input_mode & 0x07) == GS1_MODE) {
+    if (symbol->input_mode == GS1_MODE) {
         gs1 = 1;
     } else {
         gs1 = 0;
@@ -443,7 +441,7 @@ static int c1_encode(struct zint_symbol *symbol, unsigned char source[], unsigne
                 if (j == 13) {
                     latch = 0;
                     for (i = sp + 13; i < length; i++) {
-                        if (!((source[i] >= '0') && (source[i] <= '9'))) {
+                        if (!((source[sp + i] >= '0') && (source[sp + i] <= '9'))) {
                             latch = 1;
                         }
                     }
@@ -456,7 +454,7 @@ static int c1_encode(struct zint_symbol *symbol, unsigned char source[], unsigne
             }
 
             if (next_mode == C1_ASCII) { /* Step B3 */
-                if (istwodigits(source, length, sp)) {
+                if (istwodigits(source, sp) && ((sp + 1) != length)) {
                     target[tp] = (10 * ctoi(source[sp])) + ctoi(source[sp + 1]) + 130;
                     tp++;
                     sp += 2;
@@ -492,7 +490,7 @@ static int c1_encode(struct zint_symbol *symbol, unsigned char source[], unsigne
                             if (j == 7) {
                                 latch = 0;
                                 for (i = sp + 7; i < length; i++) {
-                                    if (!((source[i] >= '0') && (source[i] <= '9'))) {
+                                    if (!((source[sp + i] >= '0') && (source[sp + i] <= '9'))) {
                                         latch = 1;
                                     }
                                 }
@@ -1173,7 +1171,7 @@ static int c1_encode(struct zint_symbol *symbol, unsigned char source[], unsigne
     return tp;
 }
 
-static void block_copy(struct zint_symbol *symbol, char grid[][120], int start_row, int start_col, int height, int width, int row_offset, int col_offset) {
+void block_copy(struct zint_symbol *symbol, char grid[][120], int start_row, int start_col, int height, int width, int row_offset, int col_offset) {
     int i, j;
 
     for (i = start_row; i < (start_row + height); i++) {
@@ -1185,7 +1183,7 @@ static void block_copy(struct zint_symbol *symbol, char grid[][120], int start_r
     }
 }
 
-INTERNAL int code_one(struct zint_symbol *symbol, unsigned char source[], int length) {
+int code_one(struct zint_symbol *symbol, unsigned char source[], int length) {
     int size = 1, i, j;
 
     char datagrid[136][120];
@@ -1200,7 +1198,7 @@ INTERNAL int code_one(struct zint_symbol *symbol, unsigned char source[], int le
     if (symbol->option_2 == 9) {
         /* Version S */
         int codewords;
-        large_int elreg;
+        short int elreg[112];
         unsigned int data[15], ecc[15];
         int stream[30];
         int block_width;
@@ -1230,14 +1228,20 @@ INTERNAL int code_one(struct zint_symbol *symbol, unsigned char source[], int le
             block_width = 2;
         }
 
-        large_load_str_u64(&elreg, source, length);
+        binary_load(elreg, (char *) source, length);
 
         for (i = 0; i < 15; i++) {
             data[i] = 0;
             ecc[i] = 0;
         }
 
-        large_uint_array(&elreg, data, codewords, 5 /*bits*/);
+        for (i = 0; i < codewords; i++) {
+            data[codewords - i - 1] += 1 * elreg[(i * 5)];
+            data[codewords - i - 1] += 2 * elreg[(i * 5) + 1];
+            data[codewords - i - 1] += 4 * elreg[(i * 5) + 2];
+            data[codewords - i - 1] += 8 * elreg[(i * 5) + 3];
+            data[codewords - i - 1] += 16 * elreg[(i * 5) + 4];
+        }
 
         rs_init_gf(0x25);
         rs_init_code(codewords, 1);
@@ -1299,17 +1303,14 @@ INTERNAL int code_one(struct zint_symbol *symbol, unsigned char source[], int le
 
     if (symbol->option_2 == 10) {
         /* Version T */
-        unsigned int data[80] = {0}; /* Allow for doubled digits */
-        unsigned int ecc[22];
-        unsigned int stream[60];
+        unsigned int data[40], ecc[25];
+        unsigned int stream[65];
         int data_length;
         int data_cw, ecc_cw, block_width;
 
-        if (length > 80) {
-            strcpy(symbol->errtxt, "519: Input data too long");
-            return ZINT_ERROR_TOO_LONG;
+        for (i = 0; i < 40; i++) {
+            data[i] = 0;
         }
-
         data_length = c1_encode(symbol, source, data, length);
 
         if (data_length == 0) {
@@ -1768,3 +1769,5 @@ INTERNAL int code_one(struct zint_symbol *symbol, unsigned char source[], int le
 
     return 0;
 }
+
+
index b69613a..e9279cb 100644 (file)
@@ -2,7 +2,7 @@
 
 /*
     libzint - the open source barcode library
-    Copyright (C) 2008-2020 Robin Stuart <rstuart114@gmail.com>
+    Copyright (C) 2008-2019 Robin Stuart <rstuart114@gmail.com>
     Bugfixes thanks to Christian Sakowski and BogDan Vatra
 
     Redistribution and use in source and binary forms, with or without
 
 #include <stdio.h>
 #include <string.h>
+#include <stdlib.h>
 #ifdef _MSC_VER
 #include <malloc.h>
 #endif
-#include <assert.h>
 #include "common.h"
-#include "code128.h"
 #include "gs1.h"
 
+#define TRUE 1
+#define FALSE 0
+#define SHIFTA 90
+#define LATCHA 91
+#define SHIFTB 92
+#define LATCHB 93
+#define SHIFTC 94
+#define LATCHC 95
+#define AORB 96
+#define ABORC 97
+
+#define DPDSET "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ*"
+
+static int list[2][170];
+
 /* Code 128 tables checked against ISO/IEC 15417:2007 */
 
 static const char *C128Table[107] = {
@@ -62,8 +76,9 @@ static const char *C128Table[107] = {
 };
 
 /* Determine appropriate mode for a given character */
-INTERNAL int parunmodd(const unsigned char llyth) {
+int parunmodd(const unsigned char llyth) {
     int modd;
+    modd = 0;
 
     if (llyth <= 31) {
         modd = SHIFTA;
@@ -87,7 +102,7 @@ INTERNAL int parunmodd(const unsigned char llyth) {
 /**
  * bring together same type blocks
  */
-static void grwp(int list[2][C128_MAX], int *indexliste) {
+void grwp(int *indexliste) {
 
     /* bring together same type blocks */
     if (*(indexliste) > 1) {
@@ -99,7 +114,7 @@ static void grwp(int list[2][C128_MAX], int *indexliste) {
                 list[0][i - 1] = list[0][i - 1] + list[0][i];
                 j = i + 1;
 
-                /* decrease the list */
+                /* decreace the list */
                 while (j < *(indexliste)) {
                     list[0][j - 1] = list[0][j];
                     list[1][j - 1] = list[1][j];
@@ -116,11 +131,11 @@ static void grwp(int list[2][C128_MAX], int *indexliste) {
 /**
  * Implements rules from ISO 15417 Annex E
  */
-INTERNAL void dxsmooth(int list[2][C128_MAX], int *indexliste) {
+void dxsmooth(int *indexliste) {
     int i, last, next;
 
     for (i = 0; i < *(indexliste); i++) {
-        int current = list[1][i]; /* Either ABORC, AORB, SHIFTA or SHIFTB */
+        int current = list[1][i];
         int length = list[0][i];
         if (i != 0) {
             last = list[1][i - 1];
@@ -134,84 +149,99 @@ INTERNAL void dxsmooth(int list[2][C128_MAX], int *indexliste) {
         }
 
         if (i == 0) { /* first block */
+            if ((*(indexliste) == 1) && ((length == 2) && (current == ABORC))) {
+                /* Rule 1a */
+                list[1][i] = LATCHC;
+            }
             if (current == ABORC) {
-                if ((*(indexliste) == 1) && (length == 2)) {
-                    /* Rule 1a */
-                    list[1][i] = LATCHC;
-                    current = LATCHC;
-                } else if (length >= 4) {
+                if (length >= 4) {
                     /* Rule 1b */
                     list[1][i] = LATCHC;
-                    current = LATCHC;
                 } else {
-                    current = AORB; /* Determine below */
+                    list[1][i] = AORB;
+                    current = AORB;
                 }
             }
-            if (current == AORB) {
-                if (next == SHIFTA) {
-                    /* Rule 1c */
-                    list[1][i] = LATCHA;
-                } else {
-                    /* Rule 1d */
-                    list[1][i] = LATCHB;
-                }
-            } else if (current == SHIFTA) {
+            if (current == SHIFTA) {
+                /* Rule 1c */
+                list[1][i] = LATCHA;
+            }
+            if ((current == AORB) && (next == SHIFTA)) {
                 /* Rule 1c */
                 list[1][i] = LATCHA;
-            } else if (current == SHIFTB) { /* Unless LATCHC set above, can only be SHIFTB */
+                current = LATCHA;
+            }
+            if (current == AORB) {
                 /* Rule 1d */
                 list[1][i] = LATCHB;
             }
         } else {
+            if ((current == ABORC) && (length >= 4)) {
+                /* Rule 3 */
+                list[1][i] = LATCHC;
+                current = LATCHC;
+            }
             if (current == ABORC) {
-                if (length >= 4) {
-                    /* Rule 3 */
-                    list[1][i] = LATCHC;
-                    current = LATCHC;
-                } else {
-                    current = AORB; /* Determine below */
-                }
+                list[1][i] = AORB;
+                current = AORB;
+            }
+            if ((current == AORB) && (last == LATCHA)) {
+                list[1][i] = LATCHA;
+                current = LATCHA;
+            }
+            if ((current == AORB) && (last == LATCHB)) {
+                list[1][i] = LATCHB;
+                current = LATCHB;
+            }
+            if ((current == AORB) && (next == SHIFTA)) {
+                list[1][i] = LATCHA;
+                current = LATCHA;
+            }
+            if ((current == AORB) && (next == SHIFTB)) {
+                list[1][i] = LATCHB;
+                current = LATCHB;
             }
             if (current == AORB) {
-                if (last == LATCHA || last == SHIFTB) { /* Maintain state */
-                    list[1][i] = LATCHA;
-                } else if (last == LATCHB || last == SHIFTA) { /* Maintain state */
-                    list[1][i] = LATCHB;
-                } else if (next == SHIFTA) {
-                    list[1][i] = LATCHA;
-                } else {
-                    list[1][i] = LATCHB;
-                }
-            } else if (current == SHIFTA) {
-                if (length > 1) {
-                    /* Rule 4 */
-                    list[1][i] = LATCHA;
-                } else if (last == LATCHA || last == SHIFTB) { /* Maintain state */
-                    list[1][i] = LATCHA;
-                } else if (last == LATCHC) {
-                    list[1][i] = LATCHA;
-                }
-            } else if (current == SHIFTB) { /* Unless LATCHC set above, can only be SHIFTB */
-                if (length > 1) {
-                    /* Rule 5 */
-                    list[1][i] = LATCHB;
-                } else if (last == LATCHB || last == SHIFTA) { /* Maintain state */
-                    list[1][i] = LATCHB;
-                } else if (last == LATCHC) {
-                    list[1][i] = LATCHB;
-                }
+                list[1][i] = LATCHB;
+                current = LATCHB;
+            }
+            if ((current == SHIFTA) && (length > 1)) {
+                /* Rule 4 */
+                list[1][i] = LATCHA;
+                current = LATCHA;
             }
-        } /* Rule 2 is implemented elsewhere, Rule 6 is implied */
+            if ((current == SHIFTB) && (length > 1)) {
+                /* Rule 5 */
+                list[1][i] = LATCHB;
+                current = LATCHB;
+            }
+            if ((current == SHIFTA) && (last == LATCHA)) {
+                list[1][i] = LATCHA;
+                current = LATCHA;
+            }
+            if ((current == SHIFTB) && (last == LATCHB)) {
+                list[1][i] = LATCHB;
+                current = LATCHB;
+            }
+            if ((current == SHIFTA) && (last == LATCHC)) {
+                list[1][i] = LATCHA;
+                current = LATCHA;
+            }
+            if ((current == SHIFTB) && (last == LATCHC)) {
+                list[1][i] = LATCHB;
+                current = LATCHB;
+            }
+        } /* Rule 2 is implimented elsewhere, Rule 6 is implied */
     }
+    grwp(indexliste);
 
-    grwp(list, indexliste);
 }
 
 /**
  * Translate Code 128 Set A characters into barcodes.
- * This set handles all control characters NUL to US.
+ * This set handles all control characters NULL to US.
  */
-static void c128_set_a(unsigned char source, char dest[], int values[], int *bar_chars) {
+void c128_set_a(unsigned char source, char dest[], int values[], int *bar_chars) {
 
     if (source > 127) {
         if (source < 160) {
@@ -238,7 +268,7 @@ static void c128_set_a(unsigned char source, char dest[], int values[], int *bar
  * This set handles all characters which are not part of long numbers and not
  * control characters.
  */
-static void c128_set_b(unsigned char source, char dest[], int values[], int *bar_chars) {
+void c128_set_b(unsigned char source, char dest[], int values[], int *bar_chars) {
     if (source > 127) {
         strcat(dest, C128Table[source - 32 - 128]);
         values[(*bar_chars)] = source - 32 - 128;
@@ -252,7 +282,7 @@ static void c128_set_b(unsigned char source, char dest[], int values[], int *bar
 /* Translate Code 128 Set C characters into barcodes
  * This set handles numbers in a compressed form
  */
-static void c128_set_c(unsigned char source_a, unsigned char source_b, char dest[], int values[], int *bar_chars) {
+void c128_set_c(unsigned char source_a, unsigned char source_b, char dest[], int values[], int *bar_chars) {
     int weight;
 
     weight = (10 * ctoi(source_a)) + ctoi(source_b);
@@ -261,29 +291,26 @@ static void c128_set_c(unsigned char source_a, unsigned char source_b, char dest
     (*bar_chars)++;
 }
 
-/* Handle Code 128, 128B and HIBC 128 */
-INTERNAL int code_128(struct zint_symbol *symbol, const unsigned char source[], const size_t length) {
-    int i, j, k, values[C128_MAX] = {0}, bar_characters, read, total_sum;
+/* Handle Code 128 and NVE-18 */
+int code_128(struct zint_symbol *symbol, unsigned char source[], const size_t length) {
+    int i, j, k, values[170] = {0}, bar_characters, read, total_sum;
     int error_number, indexchaine, indexliste, f_state;
-    int sourcelen;
-    int list[2][C128_MAX] = {{0}};
-    char set[C128_MAX] = {0}, fset[C128_MAX], mode, last_set, current_set = ' ';
+    size_t sourcelen;
+    char set[170] = {' '}, fset[170] = {' '}, mode, last_set, current_set = ' ';
     float glyph_count;
     char dest[1000];
 
-    /* Suppresses clang-analyzer-core.UndefinedBinaryOperatorResult warning on fset which is fully set */
-    assert(length > 0);
-
     error_number = 0;
     strcpy(dest, "");
 
     sourcelen = length;
 
+    j = 0;
     bar_characters = 0;
     f_state = 0;
 
-    if (sourcelen > C128_MAX) {
-        /* This only blocks ridiculously long input - the actual length of the
+    if (sourcelen > 160) {
+        /* This only blocks rediculously long input - the actual length of the
            resulting barcode depends on the type of data, so this is trapped later */
         strcpy(symbol->errtxt, "340: Input too long");
         return ZINT_ERROR_TOO_LONG;
@@ -291,8 +318,10 @@ INTERNAL int code_128(struct zint_symbol *symbol, const unsigned char source[],
 
     /* Detect extended ASCII characters */
     for (i = 0; i < sourcelen; i++) {
-        fset[i] = source[i] >= 128 ? 'f' : ' ';
+        if (source[i] >= 128)
+            fset[i] = 'f';
     }
+    fset[i] = '\0';
 
     /* Decide when to latch to extended mode - Annex E note 3 */
     j = 0;
@@ -320,15 +349,10 @@ INTERNAL int code_128(struct zint_symbol *symbol, const unsigned char source[],
     for (i = 1; i < sourcelen; i++) {
         if ((fset[i - 1] == 'F') && (fset[i] == ' ')) {
             /* Detected a change from 8859-1 to 646 - count how long for */
-            for (j = 0; ((i + j) < sourcelen) && (fset[i + j] == ' '); j++);
-            /* Count how many 8859-1 beyond */
-            k = 0;
-            if (i + j < sourcelen) {
-                for (k = 1; ((i + j + k) < sourcelen) && (fset[i + j + k] != ' '); k++);
-            }
-            if (j < 3 || (j < 5 && k > 2)) {
+            for (j = 0; (fset[i + j] == ' ') && ((i + j) < sourcelen); j++);
+            if ((j < 5) || ((j < 3) && ((i + j) == (sourcelen - 1)))) {
+                /* Uses the same figures recommended by Annex E note 3 */
                 /* Change to shifting back rather than latching back */
-                /* Inverts the same figures recommended by Annex E note 3 */
                 for (k = 0; k < j; k++) {
                     fset[i + k] = 'n';
                 }
@@ -345,14 +369,15 @@ INTERNAL int code_128(struct zint_symbol *symbol, const unsigned char source[],
         mode = AORB;
     }
 
+    for (i = 0; i < 170; i++) {
+        list[0][i] = 0;
+    }
+
     do {
         list[1][indexliste] = mode;
         while ((list[1][indexliste] == mode) && (indexchaine < sourcelen)) {
             list[0][indexliste]++;
             indexchaine++;
-            if (indexchaine == sourcelen) {
-                break;
-            }
             mode = parunmodd(source[indexchaine]);
             if ((symbol->symbology == BARCODE_CODE128B) && (mode == ABORC)) {
                 mode = AORB;
@@ -361,7 +386,7 @@ INTERNAL int code_128(struct zint_symbol *symbol, const unsigned char source[],
         indexliste++;
     } while (indexchaine < sourcelen);
 
-    dxsmooth(list, &indexliste);
+    dxsmooth(&indexliste);
 
     /* Resolve odd length LATCHC blocks */
     if ((list[1][0] == LATCHC) && (list[0][0] & 1)) {
@@ -405,15 +430,26 @@ INTERNAL int code_128(struct zint_symbol *symbol, const unsigned char source[],
         }
     }
 
-    if (symbol->debug & ZINT_DEBUG_PRINT) {
-        printf("Data: %.*s (%d)\n", sourcelen, source, sourcelen);
-        printf(" Set: %.*s\n", sourcelen, set);
-        printf("FSet: %.*s\n", sourcelen, fset);
+    /* Adjust for strings which start with shift characters - make them latch instead */
+    if (set[0] == 'a') {
+        i = 0;
+        do {
+            set[i] = 'A';
+            i++;
+        } while (set[i] == 'a');
+    }
+
+    if (set[0] == 'b') {
+        i = 0;
+        do {
+            set[i] = 'B';
+            i++;
+        } while (set[i] == 'b');
     }
 
     /* Now we can calculate how long the barcode is going to be - and stop it from
        being too long */
-    last_set = set[0];
+    last_set = ' ';
     glyph_count = 0.0;
     for (i = 0; i < sourcelen; i++) {
         if ((set[i] == 'a') || (set[i] == 'b')) {
@@ -504,6 +540,7 @@ INTERNAL int code_128(struct zint_symbol *symbol, const unsigned char source[],
         }
     }
     bar_characters++;
+    last_set = set[0];
 
     if (fset[0] == 'F') {
         switch (current_set) {
@@ -629,61 +666,48 @@ INTERNAL int code_128(struct zint_symbol *symbol, const unsigned char source[],
     } while (read < sourcelen);
 
     /* check digit calculation */
-    total_sum = values[0] % 103; /* Mod as we go along to avoid overflow */
+    total_sum = 0;
 
-    for (i = 1; i < bar_characters; i++) {
-        total_sum = (total_sum + values[i] * i) % 103;
+    for (i = 0; i < bar_characters; i++) {
+        if (i > 0) {
+            values[i] *= i;
+        }
+        total_sum += values[i];
     }
-    strcat(dest, C128Table[total_sum]);
-    values[bar_characters] = total_sum;
-    bar_characters++;
+    strcat(dest, C128Table[total_sum % 103]);
 
     /* Stop character */
     strcat(dest, C128Table[106]);
-    values[bar_characters] = 106;
-    bar_characters++;
-
-    if (symbol->debug & ZINT_DEBUG_PRINT) {
-        printf("Codewords:");
-        for (i = 0; i < bar_characters; i++) {
-            printf(" %d", values[i]);
-        }
-        printf("\n");
-    }
-#ifdef ZINT_TEST
-    if (symbol->debug & ZINT_DEBUG_TEST) {
-        debug_test_codeword_dump_int(symbol, values, bar_characters);
-    }
-#endif
-
     expand(symbol, dest);
     return error_number;
 }
 
 /* Handle EAN-128 (Now known as GS1-128) */
-INTERNAL int ean_128(struct zint_symbol *symbol, unsigned char source[], const size_t length) {
-    int i, j, values[C128_MAX] = {0}, bar_characters, read, total_sum;
+int ean_128(struct zint_symbol *symbol, unsigned char source[], const size_t length) {
+    int i, j, values[170], bar_characters, read, total_sum;
     int error_number, indexchaine, indexliste;
-    int list[2][C128_MAX] = {{0}};
-    char set[C128_MAX] = {0}, mode, last_set;
+    char set[170], mode, last_set;
     float glyph_count;
     char dest[1000];
     int separator_row, linkage_flag, c_count;
-    int reduced_length;
 #ifndef _MSC_VER
     char reduced[length + 1];
 #else
     char* reduced = (char*) _alloca(length + 1);
 #endif
-
+    error_number = 0;
     strcpy(dest, "");
     linkage_flag = 0;
 
+    j = 0;
     bar_characters = 0;
     separator_row = 0;
 
-    if (length > C128_MAX) {
-        /* This only blocks ridiculously long input - the actual length of the
+    memset(values, 0, sizeof (values));
+    memset(set, ' ', sizeof (set));
+
+    if (length > 160) {
+        /* This only blocks rediculously long input - the actual length of the
         resulting barcode depends on the type of data, so this is trapped later */
         strcpy(symbol->errtxt, "342: Input too long");
         return ZINT_ERROR_TOO_LONG;
@@ -700,7 +724,6 @@ INTERNAL int ean_128(struct zint_symbol *symbol, unsigned char source[], const s
     if (error_number != 0) {
         return error_number;
     }
-    reduced_length = strlen(reduced);
 
     /* Decide on mode using same system as PDF417 and rules of ISO 15417 Annex E */
     indexliste = 0;
@@ -711,23 +734,24 @@ INTERNAL int ean_128(struct zint_symbol *symbol, unsigned char source[], const s
         mode = ABORC;
     }
 
+    for (i = 0; i < 170; i++) {
+        list[0][i] = 0;
+    }
+
     do {
         list[1][indexliste] = mode;
-        while ((list[1][indexliste] == mode) && (indexchaine < reduced_length)) {
+        while ((list[1][indexliste] == mode) && (indexchaine < (int) strlen(reduced))) {
             list[0][indexliste]++;
             indexchaine++;
-            if (indexchaine == reduced_length) {
-                break;
-            }
             mode = parunmodd(reduced[indexchaine]);
             if (reduced[indexchaine] == '[') {
                 mode = ABORC;
             }
         }
         indexliste++;
-    } while (indexchaine < reduced_length);
+    } while (indexchaine < (int) strlen(reduced));
 
-    dxsmooth(list, &indexliste);
+    dxsmooth(&indexliste);
 
     /* Put set data into set[] */
     read = 0;
@@ -789,16 +813,11 @@ INTERNAL int ean_128(struct zint_symbol *symbol, unsigned char source[], const s
         }
     }
 
-    if (symbol->debug & ZINT_DEBUG_PRINT) {
-        printf("Data: %s (%d)\n", reduced, reduced_length);
-        printf(" Set: %.*s\n", reduced_length, set);
-    }
-
     /* Now we can calculate how long the barcode is going to be - and stop it from
     being too long */
-    last_set = set[0];
+    last_set = ' ';
     glyph_count = 0.0;
-    for (i = 0; i < reduced_length; i++) {
+    for (i = 0; i < (int) strlen(reduced); i++) {
         if ((set[i] == 'a') || (set[i] == 'b')) {
             glyph_count = glyph_count + 1.0;
         }
@@ -892,7 +911,7 @@ INTERNAL int ean_128(struct zint_symbol *symbol, unsigned char source[], const s
             bar_characters++;
             read++;
         }
-    } while (read < reduced_length);
+    } while (read < (int) strlen(reduced));
 
     /* "...note that the linkage flag is an extra code set character between
     the last data character and the Symbol Check Character" (GS1 Specification) */
@@ -903,7 +922,7 @@ INTERNAL int ean_128(struct zint_symbol *symbol, unsigned char source[], const s
         case 1:
         case 2:
             /* CC-A or CC-B 2D component */
-            switch (set[reduced_length - 1]) {
+            switch (set[strlen(reduced) - 1]) {
                 case 'A': linkage_flag = 100;
                     break;
                 case 'B': linkage_flag = 99;
@@ -914,7 +933,7 @@ INTERNAL int ean_128(struct zint_symbol *symbol, unsigned char source[], const s
             break;
         case 3:
             /* CC-C 2D component */
-            switch (set[reduced_length - 1]) {
+            switch (set[strlen(reduced) - 1]) {
                 case 'A': linkage_flag = 99;
                     break;
                 case 'B': linkage_flag = 101;
@@ -932,33 +951,22 @@ INTERNAL int ean_128(struct zint_symbol *symbol, unsigned char source[], const s
     }
 
     /* check digit calculation */
-    total_sum = values[0] % 103; /* Mod as we go along to avoid overflow */
+    total_sum = 0;
+    for (i = 0; i < bar_characters; i++) {
+        if (i > 0) {
+            values[i] *= i;
 
-    for (i = 1; i < bar_characters; i++) {
-        total_sum = (total_sum + values[i] * i) % 103;
+        }
+        total_sum += values[i];
     }
-    strcat(dest, C128Table[total_sum]);
-    values[bar_characters] = total_sum;
+    strcat(dest, C128Table[total_sum % 103]);
+    values[bar_characters] = total_sum % 103;
     bar_characters++;
 
     /* Stop character */
     strcat(dest, C128Table[106]);
     values[bar_characters] = 106;
     bar_characters++;
-
-    if (symbol->debug & ZINT_DEBUG_PRINT) {
-        printf("Codewords:");
-        for (i = 0; i < bar_characters; i++) {
-            printf(" %d", values[i]);
-        }
-        printf("\n");
-    }
-#ifdef ZINT_TEST
-    if (symbol->debug & ZINT_DEBUG_TEST) {
-        debug_test_codeword_dump_int(symbol, values, bar_characters);
-    }
-#endif
-
     expand(symbol, dest);
 
     /* Add the separator pattern for composite symbols */
@@ -970,7 +978,7 @@ INTERNAL int ean_128(struct zint_symbol *symbol, unsigned char source[], const s
         }
     }
 
-    for (i = 0; i < (int) length; i++) {
+    for (i = 0; i < length; i++) {
         if ((source[i] != '[') && (source[i] != ']')) {
             symbol->text[i] = source[i];
         }
@@ -986,7 +994,7 @@ INTERNAL int ean_128(struct zint_symbol *symbol, unsigned char source[], const s
 }
 
 /* Add check digit if encoding an NVE18 symbol */
-INTERNAL int nve_18(struct zint_symbol *symbol, unsigned char source[], int length) {
+int nve_18(struct zint_symbol *symbol, unsigned char source[], int length) {
     int error_number, zeroes, i, nve_check, total_sum, sourcelen;
     unsigned char ean128_equiv[25];
 
@@ -1029,7 +1037,7 @@ INTERNAL int nve_18(struct zint_symbol *symbol, unsigned char source[], int leng
 }
 
 /* EAN-14 - A version of EAN-128 */
-INTERNAL int ean_14(struct zint_symbol *symbol, unsigned char source[], int length) {
+int ean_14(struct zint_symbol *symbol, unsigned char source[], int length) {
     int i, count, check_digit;
     int error_number, zeroes;
     unsigned char ean128_equiv[20];
@@ -1069,3 +1077,5 @@ INTERNAL int ean_14(struct zint_symbol *symbol, unsigned char source[], int leng
 
     return error_number;
 }
+
+
diff --git a/backend/code128.h b/backend/code128.h
deleted file mode 100644 (file)
index 0b1f042..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
-    libzint - the open source barcode library
-    Copyright (C) 2020 Robin Stuart <rstuart114@gmail.com>
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-    1. Redistributions of source code must retain the above copyright
-       notice, this list of conditions and the following disclaimer.
-    2. Redistributions in binary form must reproduce the above copyright
-       notice, this list of conditions and the following disclaimer in the
-       documentation and/or other materials provided with the distribution.
-    3. Neither the name of the project nor the names of its contributors
-       may be used to endorse or promote products derived from this software
-       without specific prior written permission.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
-    ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-    ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-    SUCH DAMAGE.
- */
-/* vim: set ts=4 sw=4 et : */
-
-#ifndef CODE128_H
-#define CODE128_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
-#define C128_MAX 160
-
-#define SHIFTA 90
-#define LATCHA 91
-#define SHIFTB 92
-#define LATCHB 93
-#define SHIFTC 94
-#define LATCHC 95
-#define AORB 96
-#define ABORC 97
-
-INTERNAL int parunmodd(const unsigned char llyth);
-INTERNAL void dxsmooth(int list[2][C128_MAX], int *indexliste);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* CODE128_H */
index c7394c5..86fd6c2 100644 (file)
@@ -2,7 +2,7 @@
 
 /*
     libzint - the open source barcode library
-    Copyright (C) 2008 - 2020 Robin Stuart <rstuart114@gmail.com>
+    Copyright (C) 2008-2017 Robin Stuart <rstuart114@gmail.com>
 
     Redistribution and use in source and binary forms, with or without
     modification, are permitted provided that the following conditions
@@ -29,7 +29,6 @@
     OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     SUCH DAMAGE.
  */
-/* vim: set ts=4 sw=4 et : */
 
 /* Updated to comply with BS EN 12323:2005 */
 
 
 #include <string.h>
 #include <stdio.h>
-#include <assert.h>
+#include <stdlib.h>
 #include "common.h"
-#include "code128.h"
+
+#define TRUE 1
+#define FALSE 0
+#define SHIFTA 90
+#define LATCHA 91
+#define SHIFTB 92
+#define LATCHB 93
+#define SHIFTC 94
+#define LATCHC 95
+#define AORB 96
+#define ABORC 97
+#define CANDB 98
+#define CANDBB 99
+
+extern int parunmodd(const unsigned char llyth);
+
+static int list[2][170];
 
 static const char *C16KTable[107] = {
     /* EN 12323 Table 1 - "Code 16K" character encodations */
@@ -73,7 +88,141 @@ static const int C16KStopValues[16] = {
     0, 1, 2, 3, 4, 5, 6, 7, 4, 5, 6, 7, 0, 1, 2, 3
 };
 
-static void c16k_set_a(const unsigned char source, int values[], int *bar_chars) {
+static void grwp16(unsigned int *indexliste) {
+
+    /* bring together same type blocks */
+    if (*(indexliste) > 1) {
+        int i = 1;
+        while(i < (int)*(indexliste)) {
+            if (list[1][i - 1] == list[1][i]) {
+                int j;
+                /* bring together */
+                list[0][i - 1] = list[0][i - 1] + list[0][i];
+                j = i + 1;
+
+                /* decreace the list */
+                while(j < (int)*(indexliste)) {
+                    list[0][j - 1] = list[0][j];
+                    list[1][j - 1] = list[1][j];
+                    j++;
+                }
+                *(indexliste) = *(indexliste) - 1;
+                i--;
+            }
+            i++;
+        }
+    }
+}
+
+/* Implements rules from ISO 15417 Annex E */
+static void dxsmooth16(unsigned int *indexliste) {
+    int i, last, next;
+
+    for(i = 0; i < (int)*(indexliste); i++) {
+        int current = list[1][i];
+        int length = list[0][i];
+        if (i != 0) {
+            last = list[1][i - 1];
+        } else {
+            last = FALSE;
+        }
+        if (i != *(indexliste) - 1) {
+            next = list[1][i + 1];
+        } else {
+            next = FALSE;
+        }
+
+        if (i == 0) {
+            /* first block */
+            if ((*(indexliste) == 1) && ((length == 2) && (current == ABORC))) {
+                /* Rule 1a */
+                list[1][i] = LATCHC;
+            }
+            if (current == ABORC) {
+                if (length >= 4) {
+                    /* Rule 1b */
+                    list[1][i] = LATCHC;
+                } else {
+                    list[1][i] = AORB;
+                    current = AORB;
+                }
+            }
+            if (current == SHIFTA) {
+                /* Rule 1c */
+                list[1][i] = LATCHA;
+            }
+            if ((current == AORB) && (next == SHIFTA)) {
+                /* Rule 1c */
+                list[1][i] = LATCHA;
+                current = LATCHA;
+            }
+            if (current == AORB) {
+                /* Rule 1d */
+                list[1][i] = LATCHB;
+            }
+        } else {
+            if ((current == ABORC) && (length >= 4)) {
+                /* Rule 3 */
+                list[1][i] = LATCHC;
+                current = LATCHC;
+            }
+            if (current == ABORC) {
+                list[1][i] = AORB;
+                current = AORB;
+            }
+            if ((current == AORB) && (last == LATCHA)) {
+                list[1][i] = LATCHA;
+                current = LATCHA;
+            }
+            if ((current == AORB) && (last == LATCHB)) {
+                list[1][i] = LATCHB;
+                current = LATCHB;
+            }
+            if ((current == AORB) && (next == SHIFTA)) {
+                list[1][i] = LATCHA;
+                current = LATCHA;
+            }
+            if ((current == AORB) && (next == SHIFTB)) {
+                list[1][i] = LATCHB;
+                current = LATCHB;
+            }
+            if (current == AORB) {
+                list[1][i] = LATCHB;
+                current = LATCHB;
+            }
+            if ((current == SHIFTA) && (length > 1)) {
+                /* Rule 4 */
+                list[1][i] = LATCHA;
+                current = LATCHA;
+            }
+            if ((current == SHIFTB) && (length > 1)) {
+                /* Rule 5 */
+                list[1][i] = LATCHB;
+                current = LATCHB;
+            }
+            if ((current == SHIFTA) && (last == LATCHA)) {
+                list[1][i] = LATCHA;
+                current = LATCHA;
+            }
+            if ((current == SHIFTB) && (last == LATCHB)) {
+                list[1][i] = LATCHB;
+                current = LATCHB;
+            }
+            if ((current == SHIFTA) && (last == LATCHC)) {
+                list[1][i] = LATCHA;
+                current = LATCHA;
+            }
+            if ((current == SHIFTB) && (last == LATCHC)) {
+                list[1][i] = LATCHB;
+                current = LATCHB;
+            }
+        } /* Rule 2 is implimented elsewhere, Rule 6 is implied */
+    }
+    grwp16(indexliste);
+
+}
+
+static void c16k_set_a(const unsigned char source, unsigned int values[], unsigned int *bar_chars) {
     if (source > 127) {
         if (source < 160) {
             values[(*bar_chars)] = source + 64 - 128;
@@ -90,7 +239,7 @@ static void c16k_set_a(const unsigned char source, int values[], int *bar_chars)
     (*bar_chars)++;
 }
 
-static void c16k_set_b(const unsigned char source, int values[], int *bar_chars) {
+static void c16k_set_b(const unsigned char source, unsigned int values[], unsigned int *bar_chars) {
     if (source > 127) {
         values[(*bar_chars)] = source - 32 - 128;
     } else {
@@ -99,7 +248,7 @@ static void c16k_set_b(const unsigned char source, int values[], int *bar_chars)
     (*bar_chars)++;
 }
 
-static void c16k_set_c(const unsigned char source_a, unsigned char source_b, int values[], int *bar_chars) {
+static void c16k_set_c(const unsigned char source_a, unsigned char source_b, unsigned int values[], unsigned int *bar_chars) {
     int weight;
 
     weight = (10 * ctoi(source_a)) + ctoi(source_b);
@@ -107,34 +256,30 @@ static void c16k_set_c(const unsigned char source_a, unsigned char source_b, int
     (*bar_chars)++;
 }
 
-INTERNAL int code16k(struct zint_symbol *symbol, unsigned char source[], const size_t length) {
+int code16k(struct zint_symbol *symbol, unsigned char source[], const size_t length) {
     char width_pattern[100];
     int current_row, rows_needed, looper, first_check, second_check;
-    int indexchaine;
-    int list[2][C128_MAX] = {{0}};
-    char set[C128_MAX] = {0}, fset[C128_MAX], mode, last_set, current_set;
-    int pads_needed, indexliste, i, j, m, read, mx_reader;
-    int values[C128_MAX] = {0};
-    int bar_characters;
+    int indexchaine, f_state;
+    char set[160] = {' '}, fset[160] = {' '}, mode, last_set, current_set;
+    unsigned int pads_needed, indexliste, i, j, k, m, read, mx_reader;
+    unsigned int values[160] = {0};
+    unsigned int bar_characters;
     float glyph_count;
     int errornum, first_sum, second_sum;
-    int input_length;
+    size_t input_length;
     int gs1, c_count;
 
-    /* Suppresses clang-analyzer-core.UndefinedBinaryOperatorResult warning on fset which is fully set */
-    assert(length > 0);
-
     errornum = 0;
     strcpy(width_pattern, "");
     input_length = length;
 
-    if ((symbol->input_mode & 0x07) == GS1_MODE) {
+    if (symbol->input_mode == GS1_MODE) {
         gs1 = 1;
     } else {
         gs1 = 0;
     }
 
-    if (input_length > C128_MAX) {
+    if (input_length > 157) {
         strcpy(symbol->errtxt, "420: Input too long");
         return ZINT_ERROR_TOO_LONG;
     }
@@ -142,11 +287,43 @@ INTERNAL int code16k(struct zint_symbol *symbol, unsigned char source[], const s
     bar_characters = 0;
 
     /* Detect extended ASCII characters */
-    for (i = 0; i < input_length; i++) {
-        fset[i] = source[i] >= 128 ? 'f' : ' ';
+    for (i = 0; i < (unsigned int) input_length; i++) {
+        if (source[i] >= 128) {
+            fset[i] = 'f';
+        }
     }
-    /* Note to be safe not using extended ASCII latch as not mentioned in BS EN 12323:2005 */
+    fset[i] = '\0';
 
+    /* Decide when to latch to extended mode */
+    for (i = 0; i < (unsigned int) input_length; i++) {
+        j = 0;
+        if (fset[i] == 'f') {
+            do {
+                j++;
+            } while (fset[i + j] == 'f');
+            if ((j >= 5) || ((j >= 3) && ((i + j) == (input_length - 1)))) {
+                for (k = 0; k <= j; k++) {
+                    fset[i + k] = 'F';
+                }
+            }
+        }
+    }
+
+    /* Decide if it is worth reverting to 646 encodation for a few characters */
+    if (input_length > 1) {
+        for (i = 1; i < (unsigned int) input_length; i++) {
+            if ((fset[i - 1] == 'F') && (fset[i] == ' ')) {
+                /* Detected a change from 8859-1 to 646 - count how long for */
+                for (j = 0; (fset[i + j] == ' ') && ((i + j) < (unsigned int) input_length); j++);
+                if ((j < 5) || ((j < 3) && ((i + j) == (input_length - 1)))) {
+                    /* Change to shifting back rather than latching back */
+                    for (k = 0; k < j; k++) {
+                        fset[i + k] = 'n';
+                    }
+                }
+            }
+        }
+    }
     /* Detect mode A, B and C characters */
     indexliste = 0;
     indexchaine = 0;
@@ -156,14 +333,15 @@ INTERNAL int code16k(struct zint_symbol *symbol, unsigned char source[], const s
         mode = ABORC;
     } /* FNC1 */
 
+    for (i = 0; i < 160; i++) {
+        list[0][i] = 0;
+    }
+
     do {
         list[1][indexliste] = mode;
         while ((list[1][indexliste] == mode) && (indexchaine < input_length)) {
             list[0][indexliste]++;
             indexchaine++;
-            if (indexchaine == input_length) {
-                break;
-            }
             mode = parunmodd(source[indexchaine]);
             if ((gs1) && (source[indexchaine] == '[')) {
                 mode = ABORC;
@@ -172,7 +350,7 @@ INTERNAL int code16k(struct zint_symbol *symbol, unsigned char source[], const s
         indexliste++;
     } while (indexchaine < input_length);
 
-    dxsmooth(list, &indexliste);
+    dxsmooth16(&indexliste);
 
     /* Put set data into set[] */
     read = 0;
@@ -194,6 +372,23 @@ INTERNAL int code16k(struct zint_symbol *symbol, unsigned char source[], const s
         }
     }
 
+    /* Adjust for strings which start with shift characters - make them latch instead */
+    if (set[0] == 'a') {
+        i = 0;
+        do {
+            set[i] = 'A';
+            i++;
+        } while (set[i] == 'a');
+    }
+
+    if (set[0] == 'b') {
+        i = 0;
+        do {
+            set[i] = 'B';
+            i++;
+        } while (set[i] == 'b');
+    }
+
     /* Watch out for odd-length Mode C blocks */
     c_count = 0;
     for (i = 0; i < read; i++) {
@@ -234,20 +429,14 @@ INTERNAL int code16k(struct zint_symbol *symbol, unsigned char source[], const s
         }
     }
 
-    if (symbol->debug & ZINT_DEBUG_PRINT) {
-        printf("Data: %.*s\n", input_length, source);
-        printf(" Set: %.*s\n", input_length, set);
-        printf("FSet: %.*s\n", input_length, fset);
-    }
-
     /* Make sure the data will fit in the symbol */
-    last_set = set[0];
+    last_set = ' ';
     glyph_count = 0.0;
     for (i = 0; i < input_length; i++) {
         if ((set[i] == 'a') || (set[i] == 'b')) {
             glyph_count = glyph_count + 1.0;
         }
-        if (fset[i] == 'f') {
+        if ((fset[i] == 'f') || (fset[i] == 'n')) {
             glyph_count = glyph_count + 1.0;
         }
         if (((set[i] == 'A') || (set[i] == 'B')) || (set[i] == 'C')) {
@@ -265,6 +454,16 @@ INTERNAL int code16k(struct zint_symbol *symbol, unsigned char source[], const s
                     glyph_count = glyph_count - 1.0;
                 }
             }
+            if (fset[i] == 'F') {
+                glyph_count = glyph_count + 2.0;
+            }
+        } else {
+            if ((fset[i] == 'F') && (fset[i - 1] != 'F')) {
+                glyph_count = glyph_count + 2.0;
+            }
+            if ((fset[i] != 'F') && (fset[i - 1] == 'F')) {
+                glyph_count = glyph_count + 2.0;
+            }
         }
 
         if ((set[i] == 'C') && (!((gs1) && (source[i] == '[')))) {
@@ -344,6 +543,24 @@ INTERNAL int code16k(struct zint_symbol *symbol, unsigned char source[], const s
     }
 
     current_set = set[0];
+    f_state = 0;
+    /* f_state remembers if we are in Extended ASCII mode (value 1) or
+        in ISO/IEC 646 mode (value 0) */
+    if (fset[0] == 'F') {
+        switch (current_set) {
+            case 'A':
+                values[bar_characters] = 101;
+                values[bar_characters + 1] = 101;
+                break;
+            case 'B':
+                values[bar_characters] = 100;
+                values[bar_characters + 1] = 100;
+                break;
+        }
+        bar_characters += 2;
+        f_state = 1;
+    }
+
     read = 0;
 
     /* Encode the data */
@@ -376,7 +593,40 @@ INTERNAL int code16k(struct zint_symbol *symbol, unsigned char source[], const s
             }
         }
 
-        if (fset[read] == 'f') {
+        if (read != 0) {
+            if ((fset[read] == 'F') && (f_state == 0)) {
+                /* Latch beginning of extended mode */
+                switch (current_set) {
+                    case 'A':
+                        values[bar_characters] = 101;
+                        values[bar_characters + 1] = 101;
+                        break;
+                    case 'B':
+                        values[bar_characters] = 100;
+                        values[bar_characters + 1] = 100;
+                        break;
+                }
+                bar_characters += 2;
+                f_state = 1;
+            }
+            if ((fset[read] == ' ') && (f_state == 1)) {
+                /* Latch end of extended mode */
+                switch (current_set) {
+                    case 'A':
+                        values[bar_characters] = 101;
+                        values[bar_characters + 1] = 101;
+                        break;
+                    case 'B':
+                        values[bar_characters] = 100;
+                        values[bar_characters + 1] = 100;
+                        break;
+                }
+                bar_characters += 2;
+                f_state = 0;
+            }
+        }
+
+        if ((fset[i] == 'f') || (fset[i] == 'n')) {
             /* Shift extended mode */
             switch (current_set) {
                 case 'A':
@@ -389,7 +639,7 @@ INTERNAL int code16k(struct zint_symbol *symbol, unsigned char source[], const s
             bar_characters++;
         }
 
-        if ((set[read] == 'a') || (set[read] == 'b')) {
+        if ((set[i] == 'a') || (set[i] == 'b')) {
             /* Insert shift character */
             values[bar_characters] = 98;
             bar_characters++;
@@ -416,7 +666,7 @@ INTERNAL int code16k(struct zint_symbol *symbol, unsigned char source[], const s
             bar_characters++;
             read++;
         }
-    } while (read < input_length);
+    } while (read < ustrlen(source));
 
     pads_needed = 5 - ((bar_characters + 2) % 5);
     if (pads_needed == 5) {
@@ -426,7 +676,7 @@ INTERNAL int code16k(struct zint_symbol *symbol, unsigned char source[], const s
         pads_needed += 8 - (bar_characters + pads_needed);
     }
     for (i = 0; i < pads_needed; i++) {
-        values[bar_characters] = 103;
+        values[bar_characters] = 106;
         bar_characters++;
     }
 
@@ -444,23 +694,9 @@ INTERNAL int code16k(struct zint_symbol *symbol, unsigned char source[], const s
     values[bar_characters + 1] = second_check;
     bar_characters += 2;
 
-    if (symbol->debug & ZINT_DEBUG_PRINT) {
-        printf("Codewords:");
-        for (i = 0; i < bar_characters; i++) {
-            printf(" %d", values[i]);
-        }
-        printf("\n");
-    }
-#ifdef ZINT_TEST
-    if (symbol->debug & ZINT_DEBUG_TEST) {
-        debug_test_codeword_dump_int(symbol, values, bar_characters); /* Missing row start/stop */
-    }
-#endif
-
     for (current_row = 0; current_row < rows_needed; current_row++) {
-        int writer;
+        unsigned int writer;
         int flip_flop;
-        int len;
 
         strcpy(width_pattern, "");
         strcat(width_pattern, C16KStartStop[C16KStartValues[current_row]]);
@@ -473,7 +709,7 @@ INTERNAL int code16k(struct zint_symbol *symbol, unsigned char source[], const s
         /* Write the information into the symbol */
         writer = 0;
         flip_flop = 1;
-        for (mx_reader = 0, len = strlen(width_pattern); mx_reader < len; mx_reader++) {
+        for (mx_reader = 0; mx_reader < strlen(width_pattern); mx_reader++) {
             for (looper = 0; looper < ctoi(width_pattern[mx_reader]); looper++) {
                 if (flip_flop == 1) {
                     set_module(symbol, current_row, writer);
@@ -493,12 +729,8 @@ INTERNAL int code16k(struct zint_symbol *symbol, unsigned char source[], const s
 
     symbol->rows = rows_needed;
     symbol->width = 70;
+    return errornum;
+}
 
-    symbol->output_options |= BARCODE_BIND;
 
-    if (symbol->border_width == 0) { /* Allow override if non-zero */
-        symbol->border_width = 1; /* BS EN 12323:2005 Section 4.3.7 minimum (note change from previous default 2) */
-    }
 
-    return errornum;
-}
index 3d7aebf..4ffcdb3 100644 (file)
@@ -2,7 +2,7 @@
 
 /*
     libzint - the open source barcode library
-    Copyright (C) 2009 - 2020 Robin Stuart <rstuart114@gmail.com>
+    Copyright (C) 2009-2017 Robin Stuart <rstuart114@gmail.com>
 
     Redistribution and use in source and binary forms, with or without
     modification, are permitted provided that the following conditions
     OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     SUCH DAMAGE.
  */
-/* vim: set ts=4 sw=4 et : */
 
 #include <string.h>
 #include <stdio.h>
+#include <stdlib.h>
 #include "common.h"
 #include "code49.h"
 
-#define INSET   "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%!&*"
+#define INSET  "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%!&*"
 
 /* "!" represents Shift 1 and "&" represents Shift 2, "*" represents FNC1 */
 
-INTERNAL int code_49(struct zint_symbol *symbol, unsigned char source[], const int length) {
+int code_49(struct zint_symbol *symbol, unsigned char source[], const int length) {
     int i, j, rows, M, x_count, y_count, z_count, posn_val, local_value;
     char intermediate[170] = "";
     int codewords[170], codeword_count;
@@ -49,13 +49,13 @@ INTERNAL int code_49(struct zint_symbol *symbol, unsigned char source[], const i
     int pad_count = 0;
     char pattern[80];
     int gs1;
-    int h, len;
+    size_t h;
 
     if (length > 81) {
         strcpy(symbol->errtxt, "430: Input too long");
         return ZINT_ERROR_TOO_LONG;
     }
-    if ((symbol->input_mode & 0x07) == GS1_MODE) {
+    if (symbol->input_mode == GS1_MODE) {
         gs1 = 1;
         strcpy(intermediate, "*"); /* FNC1 */
     } else {
@@ -298,21 +298,6 @@ INTERNAL int code_49(struct zint_symbol *symbol, unsigned char source[], const i
     }
     c_grid[rows - 1][7] = j % 49;
 
-    if (symbol->debug & ZINT_DEBUG_PRINT) {
-        printf("Codewords:\n");
-        for (i = 0; i < rows; i++) {
-            for (j = 0; j < 8; j++) {
-                printf(" %2d", c_grid[i][j]);
-            }
-            printf("\n");
-        }
-    }
-#ifdef ZINT_TEST
-    if (symbol->debug & ZINT_DEBUG_TEST) {
-        debug_test_codeword_dump_int(symbol, (int *)c_grid, rows * 8);
-    }
-#endif
-
     /* Transfer data to symbol character array (w grid) */
     for (i = 0; i < rows; i++) {
         for (j = 0; j < 4; j++) {
@@ -341,7 +326,7 @@ INTERNAL int code_49(struct zint_symbol *symbol, unsigned char source[], const i
         /* Expand into symbol */
         symbol->row_height[i] = 10;
 
-        for (j = 0, len = strlen(pattern); j < len; j++) {
+        for (j = 0; j < strlen(pattern); j++) {
             if (pattern[j] == '1') {
                 set_module(symbol, i, j);
             }
@@ -350,12 +335,12 @@ INTERNAL int code_49(struct zint_symbol *symbol, unsigned char source[], const i
 
     symbol->rows = rows;
     symbol->width = strlen(pattern);
-
-    symbol->output_options |= BARCODE_BIND;
-
-    if (symbol->border_width == 0) { /* Allow override if non-zero */
-        symbol->border_width = 1; /* ANSI/AIM BC6-2000 Section 2.1 (note change from previous default 2) */
+    symbol->whitespace_width = 10;
+    if (!(symbol->output_options & BARCODE_BIND)) {
+        symbol->output_options += BARCODE_BIND;
     }
+    symbol->border_width = 2;
 
     return 0;
 }
+
index f295099..ac30221 100644 (file)
@@ -2,7 +2,7 @@
 
 /*
     libzint - the open source barcode library
-    Copyright (C) 2008 - 2020 Robin Stuart <rstuart114@gmail.com>
+    Copyright (C) 2008-2017 Robin Stuart <rstuart114@gmail.com>
 
     Redistribution and use in source and binary forms, with or without
     modification, are permitted provided that the following conditions
     SUCH DAMAGE.
  */
 /* vim: set ts=4 sw=4 et : */
+#include <string.h>
 #include <stdio.h>
-#ifdef _MSC_VER
-#include <malloc.h>
-#endif
+#include <stdlib.h>
 #include "common.h"
 
+/* Local replacement for strlen() with unsigned char strings */
+size_t ustrlen(const unsigned char data[]) {
+    return strlen((const char*) data);
+}
+
 /* Converts a character 0-9 to its equivalent integer value */
-INTERNAL int ctoi(const char source) {
+int ctoi(const char source) {
     if ((source >= '0') && (source <= '9'))
         return (source - '0');
     if ((source >= 'A') && (source <= 'F'))
@@ -47,19 +51,12 @@ INTERNAL int ctoi(const char source) {
     return -1;
 }
 
-/* Convert an integer value to a string representing its binary equivalent */
-INTERNAL void bin_append(const int arg, const int length, char *binary) {
-    size_t posn = strlen(binary);
-
-    bin_append_posn(arg, length, binary, posn);
-
-    binary[posn + length] = '\0';
-}
 
-/* Convert an integer value to a string representing its binary equivalent at a set position */
-INTERNAL void bin_append_posn(const int arg, const int length, char *binary, size_t posn) {
+/* Convert an integer value to a string representing its binary equivalent */
+void bin_append(const int arg, const int length, char *binary) {
     int i;
     int start;
+    size_t posn = strlen(binary);
 
     start = 0x01 << (length - 1);
 
@@ -69,19 +66,21 @@ INTERNAL void bin_append_posn(const int arg, const int length, char *binary, siz
             binary[posn + i] = '1';
         }
     }
+    binary[posn + length] = '\0';
+
+    return;
 }
 
 /* Converts an integer value to its hexadecimal character */
-INTERNAL char itoc(const int source) {
+char itoc(const int source) {
     if ((source >= 0) && (source <= 9)) {
         return ('0' + source);
     } else {
         return ('A' + (source - 10));
     }
 }
-
 /* Converts lower case characters to upper case in a string source[] */
-INTERNAL void to_upper(unsigned char source[]) {
+void to_upper(unsigned char source[]) {
     size_t i, src_len = ustrlen(source);
 
     for (i = 0; i < src_len; i++) {
@@ -92,7 +91,7 @@ INTERNAL void to_upper(unsigned char source[]) {
 }
 
 /* Verifies that a string only uses valid characters */
-INTERNAL int is_sane(const char test_string[], const unsigned char source[], const size_t length) {
+int is_sane(const char test_string[], const unsigned char source[], const size_t length) {
     unsigned int j;
     size_t i, lt = strlen(test_string);
 
@@ -113,7 +112,7 @@ INTERNAL int is_sane(const char test_string[], const unsigned char source[], con
 }
 
 /* Replaces huge switch statements for looking up in tables */
-INTERNAL void lookup(const char set_string[], const char *table[], const char data, char dest[]) {
+void lookup(const char set_string[], const char *table[], const char data, char dest[]) {
     size_t i, n = strlen(set_string);
 
     for (i = 0; i < n; i++) {
@@ -124,7 +123,7 @@ INTERNAL void lookup(const char set_string[], const char *table[], const char da
 }
 
 /* Returns the position of data in set_string */
-INTERNAL int posn(const char set_string[], const char data) {
+int posn(const char set_string[], const char data) {
     int i, n = (int)strlen(set_string);
 
     for (i = 0; i < n; i++) {
@@ -136,9 +135,9 @@ INTERNAL int posn(const char set_string[], const char data) {
 }
 
 /* Returns the number of times a character occurs in a string */
-INTERNAL int ustrchr_cnt(const unsigned char string[], const size_t length, const unsigned char c) {
+int ustrchr_cnt(const unsigned char string[], const size_t length, const unsigned char c) {
     int count = 0;
-    unsigned int i;
+    int i;
     for (i = 0; i < length; i++) {
         if (string[i] == c) {
             count++;
@@ -147,32 +146,23 @@ INTERNAL int ustrchr_cnt(const unsigned char string[], const size_t length, cons
     return count;
 }
 
-/* Return true (1) if a module is dark/black/colour, otherwise false (0) */
-INTERNAL int module_is_set(const struct zint_symbol *symbol, const int y_coord, const int x_coord) {
-    if (symbol->symbology == BARCODE_ULTRA) {
-        return symbol->encoded_data[y_coord][x_coord];
-    } else {
-        return (symbol->encoded_data[y_coord][x_coord / 8] >> (x_coord % 8)) & 1;
-    }
+/* Return true (1) if a module is dark/black, otherwise false (0) */
+int module_is_set(const struct zint_symbol *symbol, const int y_coord, const int x_coord) {
+    return (symbol->encoded_data[y_coord][x_coord / 7] >> (x_coord % 7)) & 1;
 }
 
 /* Set a module to dark/black */
-INTERNAL void set_module(struct zint_symbol *symbol, const int y_coord, const int x_coord) {
-    symbol->encoded_data[y_coord][x_coord / 8] |= 1 << (x_coord % 8);
-}
-
-/* Set a module to a colour */
-INTERNAL void set_module_colour(struct zint_symbol *symbol, const int y_coord, const int x_coord, const int colour) {
-    symbol->encoded_data[y_coord][x_coord] = colour;
+void set_module(struct zint_symbol *symbol, const int y_coord, const int x_coord) {
+    symbol->encoded_data[y_coord][x_coord / 7] |= 1 << (x_coord % 7);
 }
 
 /* Set (or unset) a module to white */
-INTERNAL void unset_module(struct zint_symbol *symbol, const int y_coord, const int x_coord) {
-    symbol->encoded_data[y_coord][x_coord / 8] &= ~(1 << (x_coord % 8));
+void unset_module(struct zint_symbol *symbol, const int y_coord, const int x_coord) {
+    symbol->encoded_data[y_coord][x_coord / 7] &= ~(1 << (x_coord % 7));
 }
 
 /* Expands from a width pattern to a bit pattern */
-INTERNAL void expand(struct zint_symbol *symbol, const char data[]) {
+void expand(struct zint_symbol *symbol, const char data[]) {
 
     size_t reader, n = strlen(data);
     int writer, i;
@@ -205,9 +195,8 @@ INTERNAL void expand(struct zint_symbol *symbol, const char data[]) {
     symbol->rows = symbol->rows + 1;
 }
 
-/* Indicates which symbologies can have row binding
- * Note: if change this must also change version in frontend/main.c */
-INTERNAL int is_stackable(const int symbology) {
+/* Indicates which symbologies can have row binding */
+int is_stackable(const int symbology) {
     if (symbology < BARCODE_PDF417) {
         return 1;
     }
@@ -223,7 +212,6 @@ INTERNAL int is_stackable(const int symbology) {
         case BARCODE_ITF14:
         case BARCODE_CODE32:
         case BARCODE_CODABLOCKF:
-        case BARCODE_HIBC_BLOCKF:
             return 1;
     }
 
@@ -231,7 +219,7 @@ INTERNAL int is_stackable(const int symbology) {
 }
 
 /* Indicates which symbols can have addon (EAN-2 and EAN-5) */
-INTERNAL int is_extendable(const int symbology) {
+int is_extendable(const int symbology) {
     if (symbology == BARCODE_EANX || symbology == BARCODE_EANX_CHK) {
         return 1;
     }
@@ -258,99 +246,75 @@ INTERNAL int is_extendable(const int symbology) {
 }
 
 /* Indicates which symbols can have composite 2D component data */
-INTERNAL int is_composite(int symbology) {
+int is_composite(int symbology) {
     return symbology >= BARCODE_EANX_CC && symbology <= BARCODE_RSS_EXPSTACK_CC;
 }
 
-INTERNAL int istwodigits(const unsigned char source[], const int length, const int position) {
-    if ((position + 1 < length) && (source[position] >= '0') && (source[position] <= '9')
-            && (source[position + 1] >= '0') && (source[position + 1] <= '9')) {
-        return 1;
+int istwodigits(const unsigned char source[], const size_t position) {
+    if ((source[position] >= '0') && (source[position] <= '9')) {
+        if ((source[position + 1] >= '0') && (source[position + 1] <= '9')) {
+            return 1;
+        }
     }
 
     return 0;
 }
 
-/* State machine to decode UTF-8 to Unicode codepoints (state 0 means done, state 12 means error) */
-INTERNAL unsigned int decode_utf8(unsigned int* state, unsigned int* codep, const unsigned char byte) {
-    /*
-        Copyright (c) 2008-2009 Bjoern Hoehrmann <bjoern@hoehrmann.de>
-
-        Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation
-        files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy,
-        modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
-        Software is furnished to do so, subject to the following conditions:
-
-        The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
-
-        See https://bjoern.hoehrmann.de/utf-8/decoder/dfa/ for details.
-     */
-
-    static const unsigned char utf8d[] = {
-        /* The first part of the table maps bytes to character classes that
-         * reduce the size of the transition table and create bitmasks. */
-         0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-         0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-         0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-         0,0,0,0,0,0,0,0,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,1,1,1,1,1,1,1,1,1,1,1,  9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
-         7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,  7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
-         8,8,2,2,2,2,2,2,2,2,2,2,2,2,2,2,  2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
-        10,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3, 11,6,6,6,5,8,8,8,8,8,8,8,8,8,8,8,
-
-        /* The second part is a transition table that maps a combination
-         * of a state of the automaton and a character class to a state. */
-         0,12,24,36,60,96,84,12,12,12,48,72, 12,12,12,12,12,12,12,12,12,12,12,12,
-        12, 0,12,12,12,12,12, 0,12, 0,12,12, 12,24,12,12,12,12,12,24,12,24,12,12,
-        12,12,12,12,12,12,12,24,12,12,12,12, 12,24,12,12,12,12,12,12,12,24,12,12,
-        12,12,12,12,12,12,12,36,12,36,12,12, 12,36,12,12,12,12,12,36,12,36,12,12,
-        12,36,12,12,12,12,12,12,12,12,12,12,
-    };
-
-    unsigned int type = utf8d[byte];
-
-    *codep = *state != 0 ? (byte & 0x3fu) | (*codep << 6) : (0xff >> type) & byte;
-
-    *state = utf8d[256 + *state + type];
-
-    return *state;
-}
-
-/* Convert UTF-8 to Unicode. If `disallow_4byte` unset, allow all values (UTF-32).
- * If `disallow_4byte` set, only allow codepoints <= U+FFFF (ie four-byte sequences not allowed) (UTF-16, no surrogates) */
-INTERNAL int utf8_to_unicode(struct zint_symbol *symbol, const unsigned char source[], unsigned int vals[], size_t *length, int disallow_4byte) {
+int utf8toutf16(struct zint_symbol *symbol, const unsigned char source[], int vals[], size_t *length) {
     size_t bpos;
-    int    jpos;
-    unsigned int codepoint, state = 0;
+    int    jpos, error_number;
+    int next;
 
     bpos = 0;
     jpos = 0;
+    error_number = 0;
+    next = 0;
+
+    do {
+        if (source[bpos] <= 0x7f) {
+            /* 1 byte mode (7-bit ASCII) */
+            vals[jpos] = source[bpos];
+            next = bpos + 1;
+            jpos++;
+        } else {
+            if ((source[bpos] >= 0x80) && (source[bpos] <= 0xbf)) {
+                strcpy(symbol->errtxt, "240: Corrupt Unicode data");
+                return ZINT_ERROR_INVALID_DATA;
+            }
+            if ((source[bpos] >= 0xc0) && (source[bpos] <= 0xc1)) {
+                strcpy(symbol->errtxt, "241: Overlong encoding not supported");
+                return ZINT_ERROR_INVALID_DATA;
+            }
 
-    while (bpos < *length) {
-        do {
-            decode_utf8(&state, &codepoint, source[bpos++]);
-        } while (bpos < *length && state != 0 && state != 12);
-
-        if (state != 0) {
-            strcpy(symbol->errtxt, "240: Corrupt Unicode data");
-            return ZINT_ERROR_INVALID_DATA;
-        }
-        if (disallow_4byte && codepoint > 0xffff) {
-            strcpy(symbol->errtxt, "242: Unicode sequences of more than 3 bytes not supported");
-            return ZINT_ERROR_INVALID_DATA;
+            if ((source[bpos] >= 0xc2) && (source[bpos] <= 0xdf)) {
+                /* 2 byte mode */
+                vals[jpos] = ((source[bpos] & 0x1f) << 6) + (source[bpos + 1] & 0x3f);
+                next = bpos + 2;
+                jpos++;
+            } else
+                if ((source[bpos] >= 0xe0) && (source[bpos] <= 0xef)) {
+                /* 3 byte mode */
+                vals[jpos] = ((source[bpos] & 0x0f) << 12) + ((source[bpos + 1] & 0x3f) << 6) + (source[bpos + 2] & 0x3f);
+                next = bpos + 3;
+                jpos++;
+            } else
+                if (source[bpos] >= 0xf0) {
+                strcpy(symbol->errtxt, "242: Unicode sequences of more than 3 bytes not supported");
+                return ZINT_ERROR_INVALID_DATA;
+            }
         }
 
-        vals[jpos] = codepoint;
-        jpos++;
-    }
+        bpos = next;
 
+    } while (bpos < *length);
     *length = jpos;
 
-    return 0;
+    return error_number;
 }
 
-/* Enforce minimum permissable height of rows */
-INTERNAL void set_minimum_height(struct zint_symbol *symbol, const int min_height) {
+
+void set_minimum_height(struct zint_symbol *symbol, const int min_height) {
+    /* Enforce minimum permissable height of rows */
     int fixed_height = 0;
     int zero_count = 0;
     int i;
@@ -374,127 +338,3 @@ INTERNAL void set_minimum_height(struct zint_symbol *symbol, const int min_heigh
     }
 }
 
-/* Calculate optimized encoding modes. Adapted from Project Nayuki */
-INTERNAL void pn_define_mode(char* mode, const unsigned int data[], const size_t length, const int debug,
-        unsigned int state[], const char mode_types[], const int num_modes, pn_head_costs head_costs, pn_switch_cost switch_cost, pn_eod_cost eod_cost, pn_cur_cost cur_cost) {
-    /*
-     * Copyright (c) Project Nayuki. (MIT License)
-     * https://www.nayuki.io/page/qr-code-generator-library
-     *
-     * Permission is hereby granted, free of charge, to any person obtaining a copy of
-     * this software and associated documentation files (the "Software"), to deal in
-     * the Software without restriction, including without limitation the rights to
-     * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
-     * the Software, and to permit persons to whom the Software is furnished to do so,
-     * subject to the following conditions:
-     * - The above copyright notice and this permission notice shall be included in
-     *   all copies or substantial portions of the Software.
-     */
-    int i, j, k, cm_i;
-    unsigned int min_cost;
-    char cur_mode;
-#ifndef _MSC_VER
-    unsigned int prev_costs[num_modes];
-    char char_modes[length * num_modes];
-    unsigned int cur_costs[num_modes];
-#else
-    unsigned int* prev_costs;
-    char* char_modes;
-    unsigned int* cur_costs;
-    prev_costs = (unsigned int*) _alloca(num_modes * sizeof(unsigned int));
-    char_modes = (char*) _alloca(length * num_modes);
-    cur_costs = (unsigned int*) _alloca(num_modes * sizeof(unsigned int));
-#endif
-
-    /* char_modes[i * num_modes + j] represents the mode to encode the code point at index i such that the final
-     * segment ends in mode_types[j] and the total number of bits is minimized over all possible choices */
-    memset(char_modes, 0, length * num_modes);
-
-    /* At the beginning of each iteration of the loop below, prev_costs[j] is the minimum number of 1/6 (1/XX_MULT)
-     * bits needed to encode the entire string prefix of length i, and end in mode_types[j] */
-    memcpy(prev_costs, (*head_costs)(state), num_modes * sizeof(unsigned int));
-
-    /* Calculate costs using dynamic programming */
-    for (i = 0, cm_i = 0; i < (int) length; i++, cm_i += num_modes) {
-        memset(cur_costs, 0, num_modes * sizeof(unsigned int));
-
-        (*cur_cost)(state, data, length, i, char_modes, prev_costs, cur_costs);
-
-        if (eod_cost && i == (int) length - 1) { /* Add end of data costs if last character */
-            for (j = 0; j < num_modes; j++) {
-                if (char_modes[cm_i + j]) {
-                    cur_costs[j] += (*eod_cost)(state, j);
-                }
-            }
-        }
-
-        /* Start new segment at the end to switch modes */
-        for (j = 0; j < num_modes; j++) { /* To mode */
-            for (k = 0; k < num_modes; k++) { /* From mode */
-                if (j != k && char_modes[cm_i + k]) {
-                    unsigned int new_cost = cur_costs[k] + (*switch_cost)(state, k, j);
-                    if (!char_modes[cm_i + j] || new_cost < cur_costs[j]) {
-                        cur_costs[j] = new_cost;
-                        char_modes[cm_i + j] = mode_types[k];
-                    }
-                }
-            }
-        }
-
-        memcpy(prev_costs, cur_costs, num_modes * sizeof(unsigned int));
-    }
-
-    /* Find optimal ending mode */
-    min_cost = prev_costs[0];
-    cur_mode = mode_types[0];
-    for (i = 1; i < num_modes; i++) {
-        if (prev_costs[i] < min_cost) {
-            min_cost = prev_costs[i];
-            cur_mode = mode_types[i];
-        }
-    }
-
-    /* Get optimal mode for each code point by tracing backwards */
-    for (i = length - 1, cm_i = i * num_modes; i >= 0; i--, cm_i -= num_modes) {
-        j = strchr(mode_types, cur_mode) - mode_types;
-        cur_mode = char_modes[cm_i + j];
-        mode[i] = cur_mode;
-    }
-
-    if (debug & ZINT_DEBUG_PRINT) {
-        printf("  Mode: %.*s\n", (int)length, mode);
-    }
-}
-
-#ifdef ZINT_TEST
-/* Dumps hex-formatted codewords in symbol->errtxt (for use in testing) */
-void debug_test_codeword_dump(struct zint_symbol *symbol, unsigned char* codewords, int length) {
-    int i, max = length, cnt_len = 0;
-    if (length > 30) { /* 30*3 < errtxt 92 (100 - "Warning ") chars */
-        sprintf(symbol->errtxt, "(%d) ", length); /* Place the number of codewords at the front */
-        cnt_len = strlen(symbol->errtxt);
-        max = 30 - (cnt_len + 2) / 3;
-    }
-    for (i = 0; i < max; i++) {
-        sprintf(symbol->errtxt + cnt_len + i * 3, "%02X ", codewords[i]);
-    }
-    symbol->errtxt[strlen(symbol->errtxt) - 1] = '\0'; /* Zap last space */
-}
-
-void debug_test_codeword_dump_int(struct zint_symbol *symbol, int* codewords, int length) {
-    int i, max = 0, cnt_len, errtxt_len;
-    char temp[20];
-    errtxt_len = sprintf(symbol->errtxt, "(%d) ", length); /* Place the number of codewords at the front */
-    for (i = 0, cnt_len = errtxt_len; i < length; i++) {
-        cnt_len += sprintf(temp, "%d ", codewords[i]);
-        if (cnt_len > 92) {
-            break;
-        }
-        max++;
-    }
-    for (i = 0; i < max; i++) {
-        errtxt_len += sprintf(symbol->errtxt + errtxt_len, "%d ", codewords[i]);
-    }
-    symbol->errtxt[strlen(symbol->errtxt) - 1] = '\0'; /* Zap last space */
-}
-#endif
index 649eaeb..3bb535d 100644 (file)
@@ -2,7 +2,7 @@
 
 /*
     libzint - the open source barcode library
-    Copyright (C) 2009 - 2020 Robin Stuart <rstuart114@gmail.com>
+    Copyright (C) 2009-2017 Robin Stuart <rstuart114@gmail.com>
 
     Redistribution and use in source and binary forms, with or without
     modification, are permitted provided that the following conditions
 #define __COMMON_H
 
 #ifndef FALSE
-#define FALSE   0
+#define FALSE          0
 #endif
 
 #ifndef TRUE
-#define TRUE    1
+#define TRUE           1
 #endif
 
 /* The most commonly used set */
-#define NEON   "0123456789"
+#define NEON   "0123456789"
 
 #include "zint.h"
 #include <stdlib.h>
-#include <string.h>
 
-/* Helpers to cast away char pointer signedness */
-#define ustrlen(source) strlen((const char *) (source))
-#define ustrcpy(target, source) strcpy((char *) (target), (const char *) (source))
-#define ustrcat(target, source) strcat((char *) (target), (const char *) (source))
-
-#if defined(__GNUC__) && !defined(_WIN32) && !defined(ZINT_TEST)
-#define INTERNAL __attribute__ ((visibility ("hidden")))
-#else
-#define INTERNAL
-#endif
-
-#if defined(ZINT_TEST)
-#define STATIC_UNLESS_ZINT_TEST
-#else
-#define STATIC_UNLESS_ZINT_TEST static
-#endif
+#define ustrcpy(target,source) strcpy((char*)target,(const char*)source)
 
 #ifdef __cplusplus
 extern "C" {
 #endif /* __cplusplus */
 
-    INTERNAL int ctoi(const char source);
-    INTERNAL char itoc(const int source);
-    INTERNAL void to_upper(unsigned char source[]);
-    INTERNAL int is_sane(const char test_string[], const unsigned char source[], const size_t length);
-    INTERNAL void lookup(const char set_string[], const char *table[], const char data, char dest[]);
-    INTERNAL void bin_append(const int arg, const int length, char *binary);
-    INTERNAL void bin_append_posn(const int arg, const int length, char *binary, size_t posn);
-    INTERNAL int posn(const char set_string[], const char data);
-    INTERNAL int ustrchr_cnt(const unsigned char string[], const size_t length, const unsigned char c);
-    INTERNAL int module_is_set(const struct zint_symbol *symbol, const int y_coord, const int x_coord);
-    INTERNAL void set_module(struct zint_symbol *symbol, const int y_coord, const int x_coord);
-    INTERNAL void set_module_colour(struct zint_symbol *symbol, const int y_coord, const int x_coord, const int colour);
-    INTERNAL void unset_module(struct zint_symbol *symbol, const int y_coord, const int x_coord);
-    INTERNAL void expand(struct zint_symbol *symbol, const char data[]);
-    INTERNAL int is_stackable(const int symbology);
-    INTERNAL int is_extendable(const int symbology);
-    INTERNAL int is_composite(const int symbology);
-    INTERNAL int istwodigits(const unsigned char source[], int length, const int position);
-    INTERNAL unsigned int decode_utf8(unsigned int* state, unsigned int* codep, const unsigned char byte);
-    INTERNAL int utf8_to_unicode(struct zint_symbol *symbol, const unsigned char source[], unsigned int vals[], size_t *length, int disallow_4byte);
-    INTERNAL void set_minimum_height(struct zint_symbol *symbol, const int min_height);
-
-    typedef unsigned int* (*pn_head_costs)(unsigned int state[]);
-    typedef unsigned int (*pn_switch_cost)(unsigned int state[], const int k, const int j);
-    typedef unsigned int (*pn_eod_cost)(unsigned int state[], const int k);
-    typedef void (*pn_cur_cost)(unsigned int state[], const unsigned int data[], const size_t length, const int i, char* char_modes, unsigned int prev_costs[], unsigned int cur_costs[]);
-    INTERNAL void pn_define_mode(char* mode, const unsigned int data[], const size_t length, const int debug,
-                    unsigned int state[], const char mode_types[], const int num_modes, pn_head_costs head_costs, pn_switch_cost switch_cost, pn_eod_cost eod_cost, pn_cur_cost cur_cost);
-
-    #ifdef ZINT_TEST
-    void debug_test_codeword_dump(struct zint_symbol *symbol, unsigned char* codewords, int length);
-    void debug_test_codeword_dump_int(struct zint_symbol *symbol, int* codewords, int length);
-    #endif
-
+    extern size_t ustrlen(const unsigned char data[]);
+    extern int ctoi(const char source);
+    extern char itoc(const int source);
+    extern void to_upper(unsigned char source[]);
+    extern int is_sane(const char test_string[], const unsigned char source[], const size_t length);
+    extern void lookup(const char set_string[], const char *table[], const char data, char dest[]);
+    extern void bin_append(const int arg, const int length, char *binary);
+    extern int posn(const char set_string[], const char data);
+    extern int ustrchr_cnt(const unsigned char string[], const size_t length, const unsigned char c);
+    extern int module_is_set(const struct zint_symbol *symbol, const int y_coord, const int x_coord);
+    extern void set_module(struct zint_symbol *symbol, const int y_coord, const int x_coord);
+    extern int istwodigits(const unsigned char source[], const size_t position);
+    extern int parunmodd(const unsigned char llyth);
+    extern void expand(struct zint_symbol *symbol, const char data[]);
+    extern void unset_module(struct zint_symbol *symbol, const int y_coord, const int x_coord);
+    extern int is_stackable(const int symbology);
+    extern int is_extendable(const int symbology);
+    extern int is_composite(const int symbology);
+    extern int utf8toutf16(struct zint_symbol *symbol, const unsigned char source[], int vals[], size_t *length);
+    extern void set_minimum_height(struct zint_symbol *symbol, const int min_height);
 #ifdef __cplusplus
 }
 #endif /* __cplusplus */
index 1184965..7d057e5 100644 (file)
 
 #define UINT unsigned short
 
-INTERNAL int eanx(struct zint_symbol *symbol, unsigned char source[], int length);
-INTERNAL int ean_128(struct zint_symbol *symbol, unsigned char source[], const size_t length);
-INTERNAL void ean_leading_zeroes(struct zint_symbol *symbol, unsigned char source[], unsigned char local_source[]);
-INTERNAL int rss14(struct zint_symbol *symbol, unsigned char source[], int length);
-INTERNAL int rsslimited(struct zint_symbol *symbol, unsigned char source[], int length);
-INTERNAL int rssexpanded(struct zint_symbol *symbol, unsigned char source[], int length);
+extern int eanx(struct zint_symbol *symbol, unsigned char source[], int length);
+extern int ean_128(struct zint_symbol *symbol, unsigned char source[], const size_t length);
+extern void ean_leading_zeroes(struct zint_symbol *symbol, unsigned char source[], unsigned char local_source[]);
+extern int rss14(struct zint_symbol *symbol, unsigned char source[], int length);
+extern int rsslimited(struct zint_symbol *symbol, unsigned char source[], int length);
+extern int rssexpanded(struct zint_symbol *symbol, unsigned char source[], int length);
 
 static UINT pwr928[69][7];
 
@@ -233,6 +233,7 @@ static int cc_a(struct zint_symbol *symbol, char source[], int cc_width) {
     for (i = 0; i < 8; i++) {
         rsCodeWords[i] = 0;
     }
+    total = 0;
     for (i = 0; i < cwCnt; i++) {
         total = (codeWords[i] + rsCodeWords[k - 1]) % 929;
         for (j = k - 1; j >= 0; j--) {
@@ -485,6 +486,7 @@ static int cc_b(struct zint_symbol *symbol, char source[], int cc_width) {
     for (loop = 0; loop < 50; loop++) {
         mccorrection[loop] = 0;
     }
+    total = 0;
     for (i = 0; i < longueur; i++) {
         total = (chainemc[i] + mccorrection[k - 1]) % 929;
         for (j = k - 1; j >= 0; j--) {
@@ -655,6 +657,7 @@ static int cc_c(struct zint_symbol *symbol, char source[], int cc_width, int ecc
     for (loop = 0; loop < 520; loop++) {
         mccorrection[loop] = 0;
     }
+    total = 0;
     for (i = 0; i < longueur; i++) {
         total = (chainemc[i] + mccorrection[k - 1]) % 929;
         for (j = k - 1; j >= 0; j--) {
@@ -793,7 +796,7 @@ static int calc_padding_cca(int binary_length, int cc_width) {
         return target_bitsize;
 }
 
-static int calc_padding_ccb(int binary_length, int cc_width) {
+int calc_padding_ccb(int binary_length, int cc_width) {
     int target_bitsize = 0;
 
     switch (cc_width) {
@@ -892,7 +895,7 @@ static int calc_padding_ccb(int binary_length, int cc_width) {
     return target_bitsize;
 }
 
-static int calc_padding_ccc(int binary_length, int *cc_width, int lin_width, int *ecc) {
+int calc_padding_ccc(int binary_length, int *cc_width, int lin_width, int *ecc) {
     int target_bitsize = 0;
     int byte_length, codewords_used, ecc_level, ecc_codewords, rows;
     int codewords_total, target_codewords, target_bytesize;
@@ -1062,7 +1065,6 @@ static int cc_binary_string(struct zint_symbol *symbol, const char source[], cha
         following the two-digit AI 90 starts with an alphanumeric string which
         complies with a specific format." (para 5.3.2) */
 
-        memset(ninety, 0, source_len + 1);
         i = 0;
         do {
             ninety[i] = source[i + 2];
@@ -1342,7 +1344,7 @@ static int cc_binary_string(struct zint_symbol *symbol, const char source[], cha
     return 0;
 }
 
-static int linear_dummy_run(unsigned char *source, int length) {
+int linear_dummy_run(unsigned char *source, int length) {
     struct zint_symbol *dummy;
     int error_number;
     int linear_width;
@@ -1361,7 +1363,7 @@ static int linear_dummy_run(unsigned char *source, int length) {
     }
 }
 
-INTERNAL int composite(struct zint_symbol *symbol, unsigned char source[], int length) {
+int composite(struct zint_symbol *symbol, unsigned char source[], int length) {
     int error_number, cc_mode, cc_width, ecc_level;
     int j, i, k;
     unsigned int bs = 13 * length + 500 + 1; /* Allow for 8 bits + 5-bit latch per char + 500 bits overhead/padding */
index 71f5a75..d59725e 100644 (file)
@@ -20,11 +20,11 @@ HRESULT DllGetVersion (DLLVERSIONINFO2* pdvi)
                return (E_INVALIDARG);
 
        pdvi->info1.dwMajorVersion = 2;
-       pdvi->info1.dwMinorVersion = 8;
+       pdvi->info1.dwMinorVersion = 2;
        pdvi->info1.dwBuildNumber = 1;
        pdvi->info1.dwPlatformID = DLLVER_PLATFORM_WINDOWS;
        if (sizeof(DLLVERSIONINFO2) == pdvi->info1.cbSize)
-               pdvi->ullVersion = MAKEDLLVERULL(2, 8, 1, 0);
+               pdvi->ullVersion = MAKEDLLVERULL(2, 2, 1, 0);
 
        return S_OK;
 }
index 212eb6d..bec48d6 100644 (file)
@@ -37,9 +37,9 @@
     OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     SUCH DAMAGE.
  */
-/* vim: set ts=4 sw=4 et : */
 
 #include <stdio.h>
+#include <stdlib.h>
 #include <ctype.h>
 #include <string.h>
 #include <assert.h>
@@ -51,8 +51,8 @@
 #define ceilf ceil
 #endif
 #endif
-#include "common.h"
 #include "reedsol.h"
+#include "common.h"
 #include "dmatrix.h"
 
 /* Annex M placement alorithm low level */
@@ -528,7 +528,7 @@ static int look_ahead_test(const unsigned char inputData[], const size_t sourcel
 
 /* Encodes data using ASCII, C40, Text, X12, EDIFACT or Base 256 modes as appropriate
    Supports encoding FNC1 in supporting systems */
-static int dm200encode(struct zint_symbol *symbol, const unsigned char source[], unsigned char target[], int *last_mode, size_t *length_p, int process_buffer[], int *process_p, int *binlen_p) {
+static int dm200encode(struct zint_symbol *symbol, const unsigned char source[], unsigned char target[], int *last_mode, size_t *length_p, int process_buffer[], int *process_p) {
 
     size_t sp;
     int tp, i, gs1;
@@ -536,9 +536,9 @@ static int dm200encode(struct zint_symbol *symbol, const unsigned char source[],
     size_t inputlen = *length_p;
     int debug = symbol->debug;
 #ifndef _MSC_VER
-    char binary[2 * inputlen + 1 + 4 + 1]; /* Allow for GS1/READER_INIT, ECI and nul chars overhead */
+    char binary[2 * inputlen];
 #else
-    char* binary = (char*) _alloca(2 * inputlen + 1 + 4 + 1);
+    char* binary = (char*) _alloca(2 * inputlen);
 #endif
 
     sp = 0;
@@ -552,7 +552,7 @@ static int dm200encode(struct zint_symbol *symbol, const unsigned char source[],
     next_mode = DM_ASCII;
 
     /* gs1 flag values: 0: no gs1, 1: gs1 with FNC1 serparator, 2: GS separator */
-    if ((symbol->input_mode & 0x07) == GS1_MODE) {
+    if (symbol->input_mode == GS1_MODE) {
         if (symbol->output_options & GS1_GS_SEPARATOR) {
             gs1 = 2;
         } else {
@@ -571,7 +571,7 @@ static int dm200encode(struct zint_symbol *symbol, const unsigned char source[],
 
     if (symbol->output_options & READER_INIT) {
         if (gs1) {
-            strcpy(symbol->errtxt, "521: Cannot encode in GS1 mode and Reader Initialisation at the same time");
+            strcpy(symbol->errtxt, "519: Cannot encode in GS1 mode and Reader Initialisation at the same time");
             return ZINT_ERROR_INVALID_OPTION;
         } else {
             target[tp] = 234;
@@ -643,7 +643,7 @@ static int dm200encode(struct zint_symbol *symbol, const unsigned char source[],
         if (current_mode == DM_ASCII) {
             next_mode = DM_ASCII;
 
-            if (istwodigits(source, inputlen, sp)) {
+            if (istwodigits(source, sp) && ((sp + 1) != inputlen)) {
                 target[tp] = (unsigned char) ((10 * ctoi(source[sp])) + ctoi(source[sp + 1]) + 130);
                 if (debug) printf("N%d ", target[tp] - 130);
                 tp++;
@@ -756,7 +756,7 @@ static int dm200encode(struct zint_symbol *symbol, const unsigned char source[],
                 process_buffer[*process_p] = value;
                 (*process_p)++;
 
-                while (*process_p >= 3) {
+                if (*process_p >= 3) {
                     int iv;
 
                     iv = (1600 * process_buffer[0]) + (40 * process_buffer[1]) + (process_buffer[2]) + 1;
@@ -824,7 +824,7 @@ static int dm200encode(struct zint_symbol *symbol, const unsigned char source[],
                 process_buffer[*process_p] = value;
                 (*process_p)++;
 
-                while (*process_p >= 3) {
+                if (*process_p >= 3) {
                     int iv;
 
                     iv = (1600 * process_buffer[0]) + (40 * process_buffer[1]) + (process_buffer[2]) + 1;
@@ -885,7 +885,7 @@ static int dm200encode(struct zint_symbol *symbol, const unsigned char source[],
                 process_buffer[*process_p] = value;
                 (*process_p)++;
 
-                while (*process_p >= 3) {
+                if (*process_p >= 3) {
                     int iv;
 
                     iv = (1600 * process_buffer[0]) + (40 * process_buffer[1]) + (process_buffer[2]) + 1;
@@ -932,7 +932,7 @@ static int dm200encode(struct zint_symbol *symbol, const unsigned char source[],
                 sp++;
             }
 
-            while (*process_p >= 4) {
+            if (*process_p >= 4) {
                 target[tp] = (unsigned char) ((process_buffer[0] << 2) + ((process_buffer[1] & 0x30) >> 4));
                 tp++;
                 target[tp] = ((process_buffer[1] & 0x0f) << 4) + ((process_buffer[2] & 0x3c) >> 2);
@@ -971,8 +971,7 @@ static int dm200encode(struct zint_symbol *symbol, const unsigned char source[],
         }
 
         if (tp > 1558) {
-            strcpy(symbol->errtxt, "520: Data too long to fit in symbol");
-            return ZINT_ERROR_TOO_LONG;
+            return 0;
         }
 
     } /* while */
@@ -1019,8 +1018,7 @@ static int dm200encode(struct zint_symbol *symbol, const unsigned char source[],
     }
 
     *(last_mode) = current_mode;
-    *binlen_p = tp;
-    return 0;
+    return tp;
 }
 
 static int dm200encode_remainder(unsigned char target[], int target_length, const unsigned char source[], const size_t inputlen, const int last_mode, const int process_buffer[], const int process_p, const int symbols_left) {
@@ -1163,9 +1161,9 @@ static void add_tail(unsigned char target[], int tp, const int tail_length) {
     }
 }
 
-static int data_matrix_200(struct zint_symbol *symbol,const unsigned char source[], const size_t in_length) {
-    int i, skew = 0;
-    size_t inputlen = in_length;
+int data_matrix_200(struct zint_symbol *symbol,const unsigned char source[], const size_t in_length) {
+       int i, skew = 0;
+   size_t inputlen=in_length;
     unsigned char binary[2200];
     int binlen;
     int process_buffer[8]; /* holds remaining data to finalised */
@@ -1177,9 +1175,11 @@ static int data_matrix_200(struct zint_symbol *symbol,const unsigned char source
     int symbols_left;
 
     /* inputlen may be decremented by 2 if macro character is used */
-    error_number = dm200encode(symbol, source, binary, &last_mode, &inputlen, process_buffer, &process_p, &binlen);
-    if (error_number != 0) {
-        return error_number;
+    binlen = dm200encode(symbol, source, binary, &last_mode, &inputlen, process_buffer, &process_p);
+
+    if (binlen == 0) {
+        strcpy(symbol->errtxt, "520: Data too long to fit in symbol");
+        return ZINT_ERROR_TOO_LONG;
     }
 
     if ((symbol->option_2 >= 1) && (symbol->option_2 <= DMSIZESCOUNT)) {
@@ -1253,7 +1253,7 @@ static int data_matrix_200(struct zint_symbol *symbol,const unsigned char source
 #ifdef DEBUG
     {
         int CWCount;
-        int posCur;
+               int posCur;
         if (skew)
             CWCount = 1558 + 620;
         else
@@ -1289,7 +1289,7 @@ static int data_matrix_200(struct zint_symbol *symbol,const unsigned char source
         // Print position matrix as in standard
         for (y = NR - 1; y >= 0; y--) {
             for (x = 0; x < NC; x++) {
-                int v;
+                               int v;
                 if (x != 0)
                     fprintf(stderr, "|");
                 v = places[(NR - y - 1) * NC + x];
@@ -1326,7 +1326,7 @@ static int data_matrix_200(struct zint_symbol *symbol,const unsigned char source
     return error_number;
 }
 
-INTERNAL int dmatrix(struct zint_symbol *symbol, const unsigned char source[], const size_t in_length) {
+int dmatrix(struct zint_symbol *symbol, const unsigned char source[], const size_t in_length) {
     int error_number;
 
     if (symbol->option_1 <= 1) {
@@ -1340,3 +1340,5 @@ INTERNAL int dmatrix(struct zint_symbol *symbol, const unsigned char source[], c
 
     return error_number;
 }
+
+
index ef39825..4403f43 100644 (file)
@@ -29,7 +29,6 @@
     OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     SUCH DAMAGE.
  */
-/* vim: set ts=4 sw=4 et : */
 
 /*
     Containes Extended Rectangular Data Matrix (DMRE)
     Contact: harald.oehlmann@eurodatacouncil.org
  */
 
-#ifndef __DMATRIX_H
-#define __DMATRIX_H
+#include "common.h"
+
+#ifndef __IEC16022ECC200_H
+#define __IEC16022ECC200_H
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+extern int data_matrix_200(struct zint_symbol *symbol, const unsigned char source[], const size_t in_length);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
 
 #define MAXBARCODE 3116
 
@@ -245,4 +255,6 @@ static const unsigned short int matrixrsblock[] = {
     /*44*/ 56, /*104x104*/ 68, /*120x120*/ 62, /*132x132*/ 62  /*144x144*/
 };
 
-#endif /* __DMATRIX_H */
+
+#endif
+
index 78f3914..c1407c4 100644 (file)
@@ -2,7 +2,7 @@
 
 /*
     libzint - the open source barcode library
-    Copyright (C) 2017-2020 Robin Stuart <rstuart114@gmail.com>
+    Copyright (C) 2017-2019 Robin Stuart <rstuart114@gmail.com>
 
     Redistribution and use in source and binary forms, with or without
     modification, are permitted provided that the following conditions
     OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     SUCH DAMAGE.
  */
-/* vim: set ts=4 sw=4 et : */
 
 /*
- * Attempts to encode DotCode according to (AIMD013) ISS DotCode Rev. 4.0, DRAFT 0.15, TSC Pre-PR #5, dated May 28, 2019
+ * Attempts to encode DotCode according to AIMD013 Rev 1.34a, dated Feb 19, 2009
  * Incorporating suggestions from Terry Burton at BWIPP
  */
 
 #include <stdio.h>
 #include <string.h>
+#include <stdlib.h>
 #include <math.h>
 #ifndef _MSC_VER
 #include <stdint.h>
@@ -68,7 +68,6 @@ static const unsigned short int dot_patterns[113] = {
     0x1b8, 0x1c6, 0x1cc
 };
 
-// Printed() routine from Annex A adapted to char array of ASCII 1's and 0's
 static int get_dot(char Dots[], const int Hgt, const int Wid, const int x, const int y) {
     int retval = 0;
 
@@ -103,67 +102,61 @@ static int clr_row(char *Dots, const int Hgt, const int Wid, const int y) {
     return 1;
 }
 
-// calc penalty for empty interior columns
-static int col_penalty(char *Dots, int Hgt, int Wid) {
-    int x, penalty = 0, penalty_local = 0;
+/* Dot pattern scoring routine from Annex A */
+const int score_array(char Dots[], int Hgt, int Wid) {
+    int x, y, worstedge, first, last, sum;
+    int penalty_local = 0;
+    int penalty = 0;
 
-    for (x = 1; x < Wid - 1; x++) {
-        if (clr_col(Dots, Hgt, Wid, x)) {
-            if (penalty_local == 0) {
-                penalty_local = Hgt;
-            } else {
-                penalty_local *= Hgt;
-            }
-        } else {
-            if (penalty_local) {
-                penalty += penalty_local;
-                penalty_local = 0;
+    // first, guard against "pathelogical" gaps in the array
+    if (Hgt & 1) {
+        if (Hgt < 12) {
+            sum = 0;
+            for (x = 1; x < Wid - 1; x++) {
+                if (!(clr_col(Dots, Hgt, Wid, x))) {
+                    sum = 0;
+                    if (penalty_local) {
+                        penalty += penalty_local;
+                        penalty_local = 0;
+                    }
+                } else {
+                    sum++;
+                    if (sum == 1) {
+                        penalty_local = Hgt;
+                    } else {
+                        penalty_local *= Hgt;
+                    }
+                }
             }
         }
-    }
-
-    return penalty + penalty_local;
-}
-
-// calc penalty for empty interior rows
-static int row_penalty(char *Dots, int Hgt, int Wid) {
-    int y, penalty = 0, penalty_local = 0;
-
-    for (y = 1; y < Hgt - 1; y++) {
-        if (clr_row(Dots, Hgt, Wid, y)) {
-            if (penalty_local == 0) {
-                penalty_local = Wid;
-            } else {
-                penalty_local *= Wid;
-            }
-        } else {
-            if (penalty_local) {
-                penalty += penalty_local;
-                penalty_local = 0;
+    } else {
+        if (Wid < 12) {
+            sum = 0;
+            for (y = 1; y < Hgt - 1; y++) {
+                if (!(clr_row(Dots, Hgt, Wid, y))) {
+                    sum = 0;
+                    if (penalty_local) {
+                        penalty += penalty_local;
+                        penalty_local = 0;
+                    }
+                } else {
+                    sum++;
+                    if (sum == 1) {
+                        penalty_local = Wid;
+                    } else {
+                        penalty_local *= Wid;
+                    }
+                }
             }
         }
     }
 
-    return penalty + penalty_local;
-}
-
-/* Dot pattern scoring routine from Annex A */
-static int score_array(char Dots[], int Hgt, int Wid) {
-    int x, y, worstedge, first, last, sum;
-    int penalty = 0;
-
-    // first, guard against "pathelogical" gaps in the array
-    // subtract a penalty score for empty rows/columns from total code score for each mask,
-    // where the penalty is Sum(N ^ n), where N is the number of positions in a column/row,
-    // and n is the number of consecutive empty rows/columns
-    penalty = row_penalty(Dots, Hgt, Wid) + col_penalty(Dots, Hgt, Wid);
-
     sum = 0;
     first = -1;
     last = -1;
 
     // across the top edge, count printed dots and measure their extent
-    for (x = 0; x < Wid; x += 2) {
+    for (x = 0; x < Wid; x += 2)
         if (get_dot(Dots, Hgt, Wid, x, 0)) {
             if (first < 0) {
                 first = x;
@@ -171,20 +164,19 @@ static int score_array(char Dots[], int Hgt, int Wid) {
             last = x;
             sum++;
         }
-    }
+    worstedge = sum + last - first;
+    worstedge *= Hgt;
+
     if (sum == 0) {
         return SCORE_UNLIT_EDGE;      // guard against empty top edge
     }
 
-    worstedge = sum + last - first;
-    worstedge *= Hgt;
-
     sum = 0;
     first = -1;
     last = -1;
 
-    // across the bottom edge, ditto
-    for (x = Wid & 1; x < Wid; x += 2) {
+    //across the bottom edge, ditto
+    for (x = Wid & 1; x < Wid; x += 2)
         if (get_dot(Dots, Hgt, Wid, x, Hgt - 1)) {
             if (first < 0) {
                 first = x;
@@ -192,23 +184,22 @@ static int score_array(char Dots[], int Hgt, int Wid) {
             last = x;
             sum++;
         }
-    }
-    if (sum == 0) {
-        return SCORE_UNLIT_EDGE;      // guard against empty bottom edge
-    }
-
     sum += last - first;
     sum *= Hgt;
     if (sum < worstedge) {
         worstedge = sum;
     }
 
+    if (sum == 0) {
+        return SCORE_UNLIT_EDGE;      // guard against empty bottom edge
+    }
+
     sum = 0;
     first = -1;
     last = -1;
 
-    // down the left edge, ditto
-    for (y = 0; y < Hgt; y += 2) {
+    //down the left edge, ditto
+    for (y = 0; y < Hgt; y += 2)
         if (get_dot(Dots, Hgt, Wid, 0, y)) {
             if (first < 0) {
                 first = y;
@@ -216,23 +207,22 @@ static int score_array(char Dots[], int Hgt, int Wid) {
             last = y;
             sum++;
         }
-    }
-    if (sum == 0) {
-        return SCORE_UNLIT_EDGE;      // guard against empty left edge
-    }
-
     sum += last - first;
     sum *= Wid;
     if (sum < worstedge) {
         worstedge = sum;
     }
 
+    if (sum == 0) {
+        return SCORE_UNLIT_EDGE;      // guard against empty left edge
+    }
+
     sum = 0;
     first = -1;
     last = -1;
 
-    // down the right edge, ditto
-    for (y = Hgt & 1; y < Hgt; y += 2) {
+    //down the right edge, ditto
+    for (y = Hgt & 1; y < Hgt; y += 2)
         if (get_dot(Dots, Hgt, Wid, Wid - 1, y)) {
             if (first < 0) {
                 first = y;
@@ -240,17 +230,16 @@ static int score_array(char Dots[], int Hgt, int Wid) {
             last = y;
             sum++;
         }
-    }
-    if (sum == 0) {
-        return SCORE_UNLIT_EDGE;      // guard against empty right edge
-    }
-
     sum += last - first;
     sum *= Wid;
     if (sum < worstedge) {
         worstedge = sum;
     }
 
+    if (sum == 0) {
+        return SCORE_UNLIT_EDGE;      // guard against empty right edge
+    }
+
     // throughout the array, count the # of unprinted 5-somes (cross patterns)
     // plus the # of printed dots surrounded by 8 unprinted neighbors
     sum = 0;
@@ -278,23 +267,13 @@ static int score_array(char Dots[], int Hgt, int Wid) {
 // employing Galois Field GF, where GF is prime, with a prime modulus of PM
 //-------------------------------------------------------------------------
 
-static void rsencode(int nd, int nc, unsigned char *wd) {
-    // roots (antilogs): root[0] = 1; for (i = 1; i < GF - 1; i++) root[i] = (PM * root[i - 1]) % GF;
-    static int root[GF - 1] = {
-          1,   3,   9,  27,  81,  17,  51,  40,   7,  21,
-         63,  76,   2,   6,  18,  54,  49,  34, 102,  80,
-         14,  42,  13,  39,   4,  12,  36, 108,  98,  68,
-         91,  47,  28,  84,  26,  78,   8,  24,  72, 103,
-         83,  23,  69,  94,  56,  55,  52,  43,  16,  48,
-         31,  93,  53,  46,  25,  75, 112, 110, 104,  86,
-         32,  96,  62,  73, 106,  92,  50,  37, 111, 107,
-         95,  59,  64,  79,  11,  33,  99,  71, 100,  74,
-        109, 101,  77,   5,  15,  45,  22,  66,  85,  29,
-         87,  35, 105,  89,  41,  10,  30,  90,  44,  19,
-         57,  58,  61,  70,  97,  65,  82,  20,  60,  67,
-         88,  38
-    };
-    int i, j, k, nw, start, step, c[GF];
+void rsencode(int nd, int nc, unsigned char *wd) {
+    int i, j, k, nw, start, step, root[GF], c[GF];
+
+    // Start by generating "nc" roots (antilogs):
+    root[0] = 1;
+    for (i = 1; (i <= nc) && (i < GF); i++)
+        root[i] = (PM * root[i - 1]) % GF;
 
     // Here we compute how many interleaved R-S blocks will be needed
     nw = nd + nc;
@@ -302,14 +281,13 @@ static void rsencode(int nd, int nc, unsigned char *wd) {
 
     // ...& then for each such block:
     for (start = 0; start < step; start++) {
-        int ND = (nd - start + step - 1) / step;
-        int NW = (nw - start + step - 1) / step;
-        int NC = NW - ND;
+        int ND = (nd - start + step - 1) / step, NW = (nw - start + step - 1) / step, NC = NW - ND;
 
         // first compute the generator polynomial "c" of order "NC":
-        memset(c, 0, GF * sizeof(int)); // Keep clang-tidy happy (as far as UndefinedBinaryOperatorResult warning below at least)
-
+        for (i = 1; i <= NC; i++)
+            c[i] = 0;
         c[0] = 1;
+
         for (i = 1; i <= NC; i++) {
             for (j = NC; j >= 1; j--) {
                 c[j] = (GF + c[j] - (root[i] * c[j - 1]) % GF) % GF;
@@ -318,24 +296,22 @@ static void rsencode(int nd, int nc, unsigned char *wd) {
 
         // & then compute the corresponding checkword values into wd[]
         // ... (a) starting at wd[start] & (b) stepping by step
-        for (i = ND; i < NW; i++) {
+        for (i = ND; i < NW; i++)
             wd[start + i * step] = 0;
-        }
         for (i = 0; i < ND; i++) {
-            k = (wd[start + i * step] + wd[start + ND * step]) % GF; // NOLINT wd set 0..(nd - 1) and start + i * step <= nd - 1
+            k = (wd[start + i * step] + wd[start + ND * step]) % GF;
             for (j = 0; j < NC - 1; j++) {
                 wd[start + (ND + j) * step] = (GF - ((c[j + 1] * k) % GF) + wd[start + (ND + j + 1) * step]) % GF;
             }
             wd[start + (ND + NC - 1) * step] = (GF - ((c[NC] * k) % GF)) % GF;
         }
-        for (i = ND; i < NW; i++) {
+        for (i = ND; i < NW; i++)
             wd[start + i * step] = (GF - wd[start + i * step]) % GF;
-        }
     }
 }
 
 /* Check if the next character is directly encodable in code set A (Annex F.II.D) */
-static int datum_a(const unsigned char source[], int position, int length) {
+int datum_a(const unsigned char source[], int position, int length) {
     int retval = 0;
 
     if (position < length) {
@@ -347,8 +323,8 @@ static int datum_a(const unsigned char source[], int position, int length) {
     return retval;
 }
 
-/* Check if the next character is directly encodable in code set B (Annex F.II.D). Note changed to return 2 if CR/LF */
-static int datum_b(const unsigned char source[], int position, int length) {
+/* Check if the next character is directly encodable in code set B (Annex F.II.D) */
+int datum_b(const unsigned char source[], int position, int length) {
     int retval = 0;
 
     if (position < length) {
@@ -364,9 +340,9 @@ static int datum_b(const unsigned char source[], int position, int length) {
                 retval = 1;
         }
 
-        if (position + 1 < length) {
+        if (position != length - 2) {
             if ((source[position] == 13) && (source[position + 1] == 10)) { // CRLF
-                retval = 2;
+                retval = 1;
             }
         }
     }
@@ -375,7 +351,7 @@ static int datum_b(const unsigned char source[], int position, int length) {
 }
 
 /* Check if the next characters are directly encodable in code set C (Annex F.II.D) */
-static int datum_c(const unsigned char source[], int position, int length) {
+int datum_c(const unsigned char source[], int position, int length) {
     int retval = 0;
 
     if (position <= length - 2) {
@@ -388,7 +364,7 @@ static int datum_c(const unsigned char source[], int position, int length) {
 }
 
 /* Returns how many consecutive digits lie immediately ahead (Annex F.II.A) */
-static int n_digits(const unsigned char source[], int position, int length) {
+int n_digits(const unsigned char source[], int position, int length) {
     int i;
 
     for (i = position; ((source[i] >= '0') && (source[i] <= '9')) && (i < length); i++);
@@ -397,7 +373,7 @@ static int n_digits(const unsigned char source[], int position, int length) {
 }
 
 /* checks ahead for 10 or more digits starting "17xxxxxx10..." (Annex F.II.B) */
-static int seventeen_ten(const unsigned char source[], int position, int length) {
+int seventeen_ten(const unsigned char source[], int position, int length) {
     int found = 0;
 
     if (n_digits(source, position, length) >= 10) {
@@ -413,7 +389,7 @@ static int seventeen_ten(const unsigned char source[], int position, int length)
 /*  checks how many characters ahead can be reached while datum_c is true,
  *  returning the resulting number of codewords (Annex F.II.E)
  */
-static int ahead_c(const unsigned char source[], int position, int length) {
+int ahead_c(const unsigned char source[], int position, int length) {
     int count = 0;
     int i;
 
@@ -425,7 +401,7 @@ static int ahead_c(const unsigned char source[], int position, int length) {
 }
 
 /* Annex F.II.F */
-static int try_c(const unsigned char source[], int position, int length) {
+int try_c(const unsigned char source[], int position, int length) {
     int retval = 0;
 
     if (n_digits(source, position, length) > 0) {
@@ -438,7 +414,7 @@ static int try_c(const unsigned char source[], int position, int length) {
 }
 
 /* Annex F.II.G */
-static int ahead_a(const unsigned char source[], int position, int length) {
+int ahead_a(const unsigned char source[], int position, int length) {
     int count = 0;
     int i;
 
@@ -450,28 +426,24 @@ static int ahead_a(const unsigned char source[], int position, int length) {
     return count;
 }
 
-/* Annex F.II.H Note: changed to return number of chars encodable. Number of codewords returned in *p_nx. */
-static int ahead_b(const unsigned char source[], int position, int length, int *p_nx) {
+/* Annex F.II.H */
+int ahead_b(const unsigned char source[], int position, int length) {
     int count = 0;
-    int i, incr;
+    int i;
 
-    for (i = position; (i < length) && (incr = datum_b(source, i, length))
-            && (try_c(source, i, length) < 2); i += incr) {
+    for (i = position; ((i < length) && datum_b(source, i, length))
+            && (try_c(source, i, length) < 2); i++) {
         count++;
     }
 
-    if (p_nx != NULL) {
-        *p_nx = count;
-    }
-
-    return i - position;
+    return count;
 }
 
 /* checks if the next character is in the range 128 to 255  (Annex F.II.I) */
-static int binary(const unsigned char source[], int length, int position) {
+int binary(const unsigned char source[], int position) {
     int retval = 0;
 
-    if (position < length && source[position] >= 128) {
+    if (source[position] >= 128) {
         retval = 1;
     }
 
@@ -479,16 +451,13 @@ static int binary(const unsigned char source[], int length, int position) {
 }
 
 /* Analyse input data stream and encode using algorithm from Annex F */
-static int dotcode_encode_message(struct zint_symbol *symbol, const unsigned char source[], int length, unsigned char *codeword_array, int *binary_finish) {
-    static char lead_specials[] = "\x09\x1C\x1D\x1E"; // HT, FS, GS, RS
-
+int dotcode_encode_message(struct zint_symbol *symbol, const unsigned char source[], int length, unsigned char *codeword_array, int *binary_finish) {
     int input_position, array_length, i;
     char encoding_mode;
     int inside_macro;
-    int debug = (symbol->debug & ZINT_DEBUG_PRINT);
+    int debug = symbol->debug;
     int binary_buffer_size = 0;
     int lawrencium[6]; // Reversed radix 103 values
-    int nx;
 
 #if defined(_MSC_VER) && _MSC_VER == 1200
     uint64_t binary_buffer = 0;
@@ -506,7 +475,7 @@ static int dotcode_encode_message(struct zint_symbol *symbol, const unsigned cha
         array_length++;
     }
 
-    if ((symbol->input_mode & 0x07) != GS1_MODE) {
+    if (symbol->input_mode != GS1_MODE) {
         if (length > 2) {
             if (((source[input_position] >= '0') && (source[input_position] <= '9')) &&
                     ((source[input_position + 1] >= '0') && (source[input_position + 1] <= '9'))) {
@@ -526,8 +495,8 @@ static int dotcode_encode_message(struct zint_symbol *symbol, const unsigned cha
             // the next three codewords valued A, B & C encode the ECI value of
             // (A - 40) * 12769 + B * 113 + C + 40 (Section 5.2.1)
             int a, b, c;
-            a = (symbol->eci - 40) / 12769;
-            b = ((symbol->eci - 40) - (12769 * a)) / 113;
+            a = (symbol->eci - 40) % 12769;
+            b = ((symbol->eci - 40) - (12769 * a)) % 113;
             c = (symbol->eci - 40) - (12769 * a) - (113 * b);
 
             codeword_array[array_length] = a + 40;
@@ -540,16 +509,39 @@ static int dotcode_encode_message(struct zint_symbol *symbol, const unsigned cha
     }
 
     // Prevent encodation as a macro if a special character is in first position
-    if (strchr(lead_specials, source[input_position]) != NULL) {
+    if (source[input_position] == 9) {
         codeword_array[array_length] = 101; // Latch A
         array_length++;
-        codeword_array[array_length] = source[input_position] + 64;
+        codeword_array[array_length] = 73; // HT
         array_length++;
         encoding_mode = 'A';
-        input_position++;
     }
 
-    while (input_position < length) {
+    if (source[input_position] == 28) {
+        codeword_array[array_length] = 101; // Latch A
+        array_length++;
+        codeword_array[array_length] = 92; // FS
+        array_length++;
+        encoding_mode = 'A';
+    }
+
+    if (source[input_position] == 29) {
+        codeword_array[array_length] = 101; // Latch A
+        array_length++;
+        codeword_array[array_length] = 93; // GS
+        array_length++;
+        encoding_mode = 'A';
+    }
+
+    if (source[input_position] == 30) {
+        codeword_array[array_length] = 101; // Latch A
+        array_length++;
+        codeword_array[array_length] = 94; // RS
+        array_length++;
+        encoding_mode = 'A';
+    }
+
+    do {
         int done = 0;
         /* Step A */
         if ((input_position == length - 2) && (inside_macro != 0) && (inside_macro != 100)) {
@@ -561,89 +553,84 @@ static int dotcode_encode_message(struct zint_symbol *symbol, const unsigned cha
             }
         }
 
-        /* Step B */
         if ((input_position == length - 1) && (inside_macro == 100)) {
             // inside_macro only gets set to 100 if the last character is EOT
             input_position++;
             done = 1;
             if (debug) {
-                printf("B ");
+                printf("A ");
             }
         }
 
-        /* Step C1 */
+        /* Step B1 */
         if ((!done) && (encoding_mode == 'C')) {
-            if ((array_length == 0) && (length > 6)) {
+            if ((array_length == 0) && (length > 9)) {
                 if ((source[input_position] == '[')
                         && (source[input_position + 1] == ')')
                         && (source[input_position + 2] == '>')
                         && (source[input_position + 3] == 30) // RS
-                        && (source[length - 1] == 4)) { // EOT
+                        && (source[length - 1] == 04)) { // EOT
 
 
                     if ((source[input_position + 6] == 29) && (source[length - 2] == 30)) { // GS/RS
                         if ((source[input_position + 4] == '0') && (source[input_position + 5] == '5')) {
-                            codeword_array[array_length] = 106; // Latch B
+                            codeword_array[array_length] = 102; // Shift B
                             array_length++;
-                            encoding_mode = 'B';
                             codeword_array[array_length] = 97; // Macro
                             array_length++;
                             input_position += 7;
                             inside_macro = 97;
                             done = 1;
                             if (debug) {
-                                printf("C1/1 ");
+                                printf("B1/1 ");
                             }
                         }
 
-                        if ((!done) && (source[input_position + 4] == '0') && (source[input_position + 5] == '6')) {
-                            codeword_array[array_length] = 106; // Latch B
+                        if ((source[input_position + 4] == '0') && (source[input_position + 5] == '6')) {
+                            codeword_array[array_length] = 102; // Shift B
                             array_length++;
-                            encoding_mode = 'B';
                             codeword_array[array_length] = 98; // Macro
                             array_length++;
                             input_position += 7;
                             inside_macro = 98;
                             done = 1;
                             if (debug) {
-                                printf("C1/2 ");
+                                printf("B1/2 ");
                             }
                         }
 
-                        if ((!done) && (source[input_position + 4] == '1') && (source[input_position + 5] == '2')) {
-                            codeword_array[array_length] = 106; // Latch B
+                        if ((source[input_position + 4] == '1') && (source[input_position + 5] == '2')) {
+                            codeword_array[array_length] = 102; // Shift B
                             array_length++;
-                            encoding_mode = 'B';
                             codeword_array[array_length] = 99; // Macro
                             array_length++;
                             input_position += 7;
                             inside_macro = 99;
                             done = 1;
                             if (debug) {
-                                printf("C1/3 ");
+                                printf("B1/3 ");
                             }
                         }
                     }
 
-                    if ((!done) && (source[input_position + 4] >= '0') && (source[input_position + 4] <= '9') &&
-                            (source[input_position + 5] >= '0') && (source[input_position + 5] <= '9')) {
-                        codeword_array[array_length] = 106; // Latch B
+                    if ((!done) && (source[input_position] >= '0') && (source[input_position] <= '9') &&
+                            (source[input_position + 1] >= '0') && (source[input_position + 1] <= '9')) {
+                        codeword_array[array_length] = 102; // Shift B
                         array_length++;
-                        encoding_mode = 'B';
                         codeword_array[array_length] = 100; // Macro
                         array_length++;
                         input_position += 4;
                         inside_macro = 100;
                         done = 1;
                         if (debug) {
-                            printf("C1/4 ");
+                            printf("B1/4 ");
                         }
                     }
                 }
             }
         }
 
-        /* Step C2 */
+        /* Step B2 */
         if ((!done) && (encoding_mode == 'C')) {
             if (seventeen_ten(source, input_position, length)) {
                 codeword_array[array_length] = 100; // (17)...(10)
@@ -657,13 +644,13 @@ static int dotcode_encode_message(struct zint_symbol *symbol, const unsigned cha
                 input_position += 10;
                 done = 1;
                 if (debug) {
-                    printf("C2/1 ");
+                    printf("B2/1 ");
                 }
             }
         }
 
         if ((!done) && (encoding_mode == 'C')) {
-            if (datum_c(source, input_position, length) || ((source[input_position] == '[') && ((symbol->input_mode & 0x07) == GS1_MODE))) {
+            if (datum_c(source, input_position, length) || ((source[input_position] == '[') && (symbol->input_mode == GS1_MODE))) {
                 if (source[input_position] == '[') {
                     codeword_array[array_length] = 107; // FNC1
                     input_position++;
@@ -674,22 +661,22 @@ static int dotcode_encode_message(struct zint_symbol *symbol, const unsigned cha
                 array_length++;
                 done = 1;
                 if (debug) {
-                    printf("C2/2 ");
+                    printf("B2/2 ");
                 }
             }
         }
 
-        /* Step C3 */
+        /* Step B3 */
         if ((!done) && (encoding_mode == 'C')) {
-            if (binary(source, length, input_position)) {
+            if (binary(source, input_position)) {
                 if (n_digits(source, input_position + 1, length) > 0) {
                     if ((source[input_position] - 128) < 32) {
-                        codeword_array[array_length] = 110; // Upper Shift A
+                        codeword_array[array_length] = 110; // Bin Shift A
                         array_length++;
                         codeword_array[array_length] = source[input_position] - 128 + 64;
                         array_length++;
                     } else {
-                        codeword_array[array_length] = 111; // Upper Shift B
+                        codeword_array[array_length] = 111; // Bin Shift B
                         array_length++;
                         codeword_array[array_length] = source[input_position] - 128 - 32;
                         array_length++;
@@ -702,38 +689,26 @@ static int dotcode_encode_message(struct zint_symbol *symbol, const unsigned cha
                 }
                 done = 1;
                 if (debug) {
-                    printf("C3 ");
+                    printf("B3 ");
                 }
             }
         }
 
-        /* Step C4 */
+        /* Step B4 */
         if ((!done) && (encoding_mode == 'C')) {
             int m = ahead_a(source, input_position, length);
-            int n = ahead_b(source, input_position, length, &nx);
+            int n = ahead_b(source, input_position, length);
             if (m > n) {
                 codeword_array[array_length] = 101; // Latch A
                 array_length++;
                 encoding_mode = 'A';
             } else {
-                if (nx >= 1 && nx <= 4) {
-                    codeword_array[array_length] = 101 + nx; // nx Shift B
+                if (n <= 4) {
+                    codeword_array[array_length] = 101 + n; // nx Shift B
                     array_length++;
 
-                    for (i = 0; i < nx; i++) {
-                        if (source[input_position] >= 32) {
-                            codeword_array[array_length] = source[input_position] - 32;
-                        } else if (source[input_position] == 13) { // CR/LF
-                            codeword_array[array_length] = 96;
-                            input_position++;
-                        } else {
-                            switch(source[input_position]) {
-                                case 9: codeword_array[array_length] = 97; break; // HT
-                                case 28: codeword_array[array_length] = 98; break; // FS
-                                case 29: codeword_array[array_length] = 99; break; // GS
-                                case 30: codeword_array[array_length] = 100; break; // RS
-                            }
-                        }
+                    for (i = 0; i < n; i++) {
+                        codeword_array[array_length] = source[input_position] - 32;
                         array_length++;
                         input_position++;
                     }
@@ -745,11 +720,11 @@ static int dotcode_encode_message(struct zint_symbol *symbol, const unsigned cha
             }
             done = 1;
             if (debug) {
-                printf("C4 ");
+                printf("B4 ");
             }
         }
 
-        /* Step D1 */
+        /* Step C1 */
         if ((!done) && (encoding_mode == 'B')) {
             int n = try_c(source, input_position, length);
 
@@ -769,20 +744,20 @@ static int dotcode_encode_message(struct zint_symbol *symbol, const unsigned cha
                 }
                 done = 1;
                 if (debug) {
-                    printf("D1 ");
+                    printf("C1 ");
                 }
             }
         }
 
-        /* Step D2 */
+        /* Step C2 */
         if ((!done) && (encoding_mode == 'B')) {
-            if ((source[input_position] == '[') && ((symbol->input_mode & 0x07) == GS1_MODE)) {
+            if ((source[input_position] == '[') && (symbol->input_mode == GS1_MODE)) {
                 codeword_array[array_length] = 107; // FNC1
                 array_length++;
                 input_position++;
                 done = 1;
                 if (debug) {
-                    printf("D2/1 ");
+                    printf("C2/1 ");
                 }
             } else {
                 if (datum_b(source, input_position, length)) {
@@ -820,16 +795,16 @@ static int dotcode_encode_message(struct zint_symbol *symbol, const unsigned cha
                         array_length++;
                         input_position++;
                         if (debug) {
-                            printf("D2/2 ");
+                            printf("C2/2 ");
                         }
                     }
                 }
             }
         }
 
-        /* Step D3 */
+        /* Step C3 */
         if ((!done) && (encoding_mode == 'B')) {
-            if (binary(source, length, input_position)) {
+            if (binary(source, input_position)) {
                 if (datum_b(source, input_position + 1, length)) {
                     if ((source[input_position] - 128) < 32) {
                         codeword_array[array_length] = 110; // Bin Shift A
@@ -850,12 +825,12 @@ static int dotcode_encode_message(struct zint_symbol *symbol, const unsigned cha
                 }
                 done = 1;
                 if (debug) {
-                    printf("D3 ");
+                    printf("C3 ");
                 }
             }
         }
 
-        /* Step D4 */
+        /* Step C4 */
         if ((!done) && (encoding_mode == 'B')) {
             if (ahead_a(source, input_position, length) == 1) {
                 codeword_array[array_length] = 101; // Shift A
@@ -874,11 +849,11 @@ static int dotcode_encode_message(struct zint_symbol *symbol, const unsigned cha
             }
             done = 1;
             if (debug) {
-                printf("D4 ");
+                printf("C4 ");
             }
         }
 
-        /* Step E1 */
+        /* Step D1 */
         if ((!done) && (encoding_mode == 'A')) {
             int n = try_c(source, input_position, length);
             if (n >= 2) {
@@ -897,21 +872,20 @@ static int dotcode_encode_message(struct zint_symbol *symbol, const unsigned cha
                 }
                 done = 1;
                 if (debug) {
-                    printf("E1 ");
+                    printf("D1 ");
                 }
             }
         }
 
-        /* Step E2 */
+        /* Step D2 */
         if ((!done) && (encoding_mode == 'A')) {
-            if ((source[input_position] == '[') && ((symbol->input_mode & 0x07) == GS1_MODE)) {
-                // Note: this branch probably never reached as no reason to be in Code Set A for GS1 data
+            if ((source[input_position] == '[') && (symbol->input_mode == GS1_MODE)) {
                 codeword_array[array_length] = 107; // FNC1
                 array_length++;
                 input_position++;
                 done = 1;
                 if (debug) {
-                    printf("E2/1 ");
+                    printf("D2/1 ");
                 }
             } else {
                 if (datum_a(source, input_position, length)) {
@@ -924,15 +898,15 @@ static int dotcode_encode_message(struct zint_symbol *symbol, const unsigned cha
                     input_position++;
                     done = 1;
                     if (debug) {
-                        printf("E2/2 ");
+                        printf("D2/2 ");
                     }
                 }
             }
         }
 
-        /* Step E3 */
+        /* Step D3 */
         if ((!done) && (encoding_mode == 'A')) {
-            if (binary(source, length, input_position)) {
+            if (binary(source, input_position)) {
                 if (datum_a(source, input_position + 1, length)) {
                     if ((source[input_position] - 128) < 32) {
                         codeword_array[array_length] = 110; // Bin Shift A
@@ -953,32 +927,20 @@ static int dotcode_encode_message(struct zint_symbol *symbol, const unsigned cha
                 }
                 done = 1;
                 if (debug) {
-                    printf("E3 ");
+                    printf("D3 ");
                 }
             }
         }
 
-        /* Step E4 */
+        /* Step D4 */
         if ((!done) && (encoding_mode == 'A')) {
-            ahead_b(source, input_position, length, &nx);
+            int n = ahead_b(source, input_position, length);
 
-            if (nx >= 1 && nx <= 6) {
-                codeword_array[array_length] = 95 + nx; // nx Shift B
+            if (n <= 6) {
+                codeword_array[array_length] = 95 + n; // nx Shift B
                 array_length++;
-                for (i = 0; i < nx; i++) {
-                    if (source[input_position] >= 32) {
-                        codeword_array[array_length] = source[input_position] - 32;
-                    } else if (source[input_position] == 13) { // CR/LF
-                        codeword_array[array_length] = 96;
-                        input_position++;
-                    } else {
-                        switch(source[input_position]) {
-                            case 9: codeword_array[array_length] = 97; break; // HT
-                            case 28: codeword_array[array_length] = 98; break; // FS
-                            case 29: codeword_array[array_length] = 99; break; // GS
-                            case 30: codeword_array[array_length] = 100; break; // RS
-                        }
-                    }
+                for (i = 0; i < n; i++) {
+                    codeword_array[array_length] = source[input_position] - 32;
                     array_length++;
                     input_position++;
                 }
@@ -989,11 +951,11 @@ static int dotcode_encode_message(struct zint_symbol *symbol, const unsigned cha
             }
             done = 1;
             if (debug) {
-                printf("E4 ");
+                printf("D4 ");
             }
         }
 
-        /* Step F1 */
+        /* Step E1 */
         if ((!done) && (encoding_mode == 'X')) {
             int n = try_c(source, input_position, length);
 
@@ -1026,21 +988,21 @@ static int dotcode_encode_message(struct zint_symbol *symbol, const unsigned cha
                 }
                 done = 1;
                 if (debug) {
-                    printf("F1 ");
+                    printf("E1 ");
                 }
             }
         }
 
-        /* Step F2 */
+        /* Step E2 */
         /* Section 5.2.1.1 para D.2.i states:
          * "Groups of six codewords, each valued between 0 and 102, are radix converted from
          * base 103 into five base 259 values..."
          */
         if ((!done) && (encoding_mode == 'X')) {
-            if (binary(source, length, input_position)
-                    || binary(source, length, input_position + 1)
-                    || binary(source, length, input_position + 2)
-                    || binary(source, length, input_position + 3)) {
+            if (binary(source, input_position)
+                    || binary(source, input_position + 1)
+                    || binary(source, input_position + 2)
+                    || binary(source, input_position + 3)) {
                 binary_buffer *= 259;
                 binary_buffer += source[input_position];
                 binary_buffer_size++;
@@ -1061,12 +1023,12 @@ static int dotcode_encode_message(struct zint_symbol *symbol, const unsigned cha
                 input_position++;
                 done = 1;
                 if (debug) {
-                    printf("F2 ");
+                    printf("E2 ");
                 }
             }
         }
 
-        /* Step F3 */
+        /* Step E3 */
         if ((!done) && (encoding_mode == 'X')) {
             /* Empty binary buffer */
             for (i = 0; i < (binary_buffer_size + 1); i++) {
@@ -1081,7 +1043,7 @@ static int dotcode_encode_message(struct zint_symbol *symbol, const unsigned cha
             binary_buffer = 0;
             binary_buffer_size = 0;
 
-            if (ahead_a(source, input_position, length) > ahead_b(source, input_position, length, NULL)) {
+            if (ahead_a(source, input_position, length) > ahead_b(source, input_position, length)) {
                 codeword_array[array_length] = 109; // Terminate with Latch to A
                 encoding_mode = 'A';
             } else {
@@ -1089,12 +1051,12 @@ static int dotcode_encode_message(struct zint_symbol *symbol, const unsigned cha
                 encoding_mode = 'B';
             }
             array_length++;
-            // done = 1 // As long as last branch not needed
+            done = 1;
             if (debug) {
-                printf("F3 ");
+                printf("E3 ");
             }
         }
-    }
+    } while (input_position < length);
 
     if (encoding_mode == 'X') {
         if (binary_buffer_size != 0) {
@@ -1130,7 +1092,7 @@ static size_t make_dotstream(unsigned char masked_array[], int array_length, cha
 
     /* The rest of the data uses 9-bit dot patterns from Annex C */
     for (i = 1; i < array_length; i++) {
-        bin_append(dot_patterns[masked_array[i]], 9, dot_stream); // NOLINT masked_array values modulo 113 and fully set
+        bin_append(dot_patterns[masked_array[i]], 9, dot_stream);
     }
 
     return strlen(dot_stream);
@@ -1139,7 +1101,7 @@ static size_t make_dotstream(unsigned char masked_array[], int array_length, cha
 /* Determines if a given dot is a reserved corner dot
  * to be used by one of the last six bits
  */
-static int is_corner(int column, int row, int width, int height) {
+int is_corner(int column, int row, int width, int height) {
     int corner = 0;
 
     /* Top Left */
@@ -1181,7 +1143,7 @@ static int is_corner(int column, int row, int width, int height) {
 }
 
 /* Place the dots in the symbol*/
-static void fold_dotstream(char dot_stream[], int width, int height, char dot_array[]) {
+void fold_dotstream(char dot_stream[], int width, int height, char dot_array[]) {
     int column, row;
     int input_position = 0;
 
@@ -1246,7 +1208,7 @@ static void fold_dotstream(char dot_stream[], int width, int height, char dot_ar
     }
 }
 
-static void apply_mask(int mask, int data_length, unsigned char *masked_codeword_array, unsigned char *codeword_array, int ecc_length) {
+void apply_mask(int mask, int data_length, unsigned char *masked_codeword_array, unsigned char *codeword_array, int ecc_length, char *dot_stream) {
     int weight = 0;
     int j;
 
@@ -1283,7 +1245,7 @@ static void apply_mask(int mask, int data_length, unsigned char *masked_codeword
     rsencode(data_length + 1, ecc_length, masked_codeword_array);
 }
 
-static void force_corners(int width, int height, char *dot_array) {
+void force_corners(int width, int height, char *dot_array) {
     if (width % 2) {
         // "Vertical" symbol
         dot_array[0] = '1';
@@ -1303,7 +1265,7 @@ static void force_corners(int width, int height, char *dot_array) {
     }
 }
 
-INTERNAL int dotcode(struct zint_symbol *symbol, const unsigned char source[], int length) {
+int dotcode(struct zint_symbol *symbol, const unsigned char source[], int length) {
     int i, j, k;
     size_t jc, n_dots;
     int data_length, ecc_length;
@@ -1315,17 +1277,16 @@ INTERNAL int dotcode(struct zint_symbol *symbol, const unsigned char source[], i
     int binary_finish = 0;
     int debug = symbol->debug;
     int padding_dots, is_first;
-    int codeword_array_len = length * 4 + 8; /* Allow up to 4 codewords per input + 2 (FNC) + 4 (ECI) + 2 (special char 1st position) */
 #ifdef _MSC_VER
     unsigned char* masked_codeword_array;
 #endif
 
 #ifndef _MSC_VER
-    unsigned char codeword_array[codeword_array_len];
+    unsigned char codeword_array[length * 3];
 #else
     char* dot_stream;
     char* dot_array;
-    unsigned char* codeword_array = (unsigned char *) _alloca(codeword_array_len);
+    unsigned char* codeword_array = (unsigned char *) _alloca(length * 3 * sizeof (unsigned char));
 #endif /* _MSC_VER */
 
     if (symbol->eci > 811799) {
@@ -1337,7 +1298,7 @@ INTERNAL int dotcode(struct zint_symbol *symbol, const unsigned char source[], i
 
     ecc_length = 3 + (data_length / 2);
 
-    if (debug & ZINT_DEBUG_PRINT) {
+    if (debug) {
         printf("Codeword length = %d, ECC length = %d\n", data_length, ecc_length);
         printf("Codewords: ");
         for (i = 0; i < data_length; i++) {
@@ -1345,11 +1306,6 @@ INTERNAL int dotcode(struct zint_symbol *symbol, const unsigned char source[], i
         }
         printf("\n");
     }
-#ifdef ZINT_TEST
-    if (debug & ZINT_DEBUG_TEST) {
-        debug_test_codeword_dump(symbol, codeword_array, data_length);
-    }
-#endif
 
     min_dots = 9 * (data_length + 3 + (data_length / 2)) + 2;
     min_area = min_dots * 2;
@@ -1404,10 +1360,6 @@ INTERNAL int dotcode(struct zint_symbol *symbol, const unsigned char source[], i
         }
     }
 
-    if (debug & ZINT_DEBUG_PRINT) {
-        printf("Width = %d, Height = %d\n", width, height);
-    }
-
     if ((height > 200) || (width > 200)) {
         strcpy(symbol->errtxt, "526: Specified symbol size is too large");
         return ZINT_ERROR_INVALID_OPTION;
@@ -1458,7 +1410,6 @@ INTERNAL int dotcode(struct zint_symbol *symbol, const unsigned char source[], i
 
     ecc_length = 3 + (data_length / 2);
 
-
 #ifndef _MSC_VER
     unsigned char masked_codeword_array[data_length + 1 + ecc_length];
 #else
@@ -1468,7 +1419,7 @@ INTERNAL int dotcode(struct zint_symbol *symbol, const unsigned char source[], i
     /* Evaluate data mask options */
     for (i = 0; i < 4; i++) {
 
-        apply_mask(i, data_length, masked_codeword_array, codeword_array, ecc_length);
+        apply_mask(i, data_length, masked_codeword_array, codeword_array, ecc_length, dot_stream);
 
         dot_stream_length = make_dotstream(masked_codeword_array, (data_length + ecc_length + 1), dot_stream);
 
@@ -1481,7 +1432,7 @@ INTERNAL int dotcode(struct zint_symbol *symbol, const unsigned char source[], i
 
         mask_score[i] = score_array(dot_array, height, width);
 
-        if (debug & ZINT_DEBUG_PRINT) {
+        if (debug) {
             printf("Mask %d score is %d\n", i, mask_score[i]);
         }
     }
@@ -1500,7 +1451,7 @@ INTERNAL int dotcode(struct zint_symbol *symbol, const unsigned char source[], i
     if (best_mask <= (height * width) / 2) {
         for (i = 0; i < 4; i++) {
 
-            apply_mask(i, data_length, masked_codeword_array, codeword_array, ecc_length);
+            apply_mask(i, data_length, masked_codeword_array, codeword_array, ecc_length, dot_stream);
 
             dot_stream_length = make_dotstream(masked_codeword_array, (data_length + ecc_length + 1), dot_stream);
 
@@ -1515,7 +1466,7 @@ INTERNAL int dotcode(struct zint_symbol *symbol, const unsigned char source[], i
 
             mask_score[i + 4] = score_array(dot_array, height, width);
 
-            if (debug & ZINT_DEBUG_PRINT) {
+            if (debug) {
                 printf("Mask %d score is %d\n", i + 4, mask_score[i + 4]);
             }
         }
@@ -1528,12 +1479,12 @@ INTERNAL int dotcode(struct zint_symbol *symbol, const unsigned char source[], i
         }
     }
 
-    if (debug & ZINT_DEBUG_PRINT) {
-        printf("Applying mask %d, high_score %d\n", best_mask, high_score);
+    if (debug) {
+        printf("Applying mask %d\n", best_mask);
     }
 
     /* Apply best mask */
-    apply_mask(best_mask % 4, data_length, masked_codeword_array, codeword_array, ecc_length);
+    apply_mask(best_mask % 4, data_length, masked_codeword_array, codeword_array, ecc_length, dot_stream);
 
     dot_stream_length = make_dotstream(masked_codeword_array, (data_length + ecc_length + 1), dot_stream);
 
@@ -1567,3 +1518,4 @@ INTERNAL int dotcode(struct zint_symbol *symbol, const unsigned char source[], i
 
     return 0;
 }
+
index 4227790..22b6b0f 100644 (file)
@@ -1,7 +1,7 @@
 /*  eci.c - Extended Channel Interpretations
 
     libzint - the open source barcode library
-    Copyright (C) 2009 - 2020 Robin Stuart <rstuart114@gmail.com>
+    Copyright (C) 2009-2017 Robin Stuart <rstuart114@gmail.com>
 
     Redistribution and use in source and binary forms, with or without
     modification, are permitted provided that the following conditions
     OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     SUCH DAMAGE.
  */
-/* vim: set ts=4 sw=4 et : */
 
 #include <string.h>
 #include <stdio.h>
+#include <stdlib.h>
 #include "eci.h"
-#include "common.h"
+#include "zint.h"
 #ifdef _MSC_VER
 #include <malloc.h>
 #endif
 
 /* Convert Unicode to other character encodings */
-INTERNAL int utf_to_eci(const int eci, const unsigned char source[], unsigned char dest[], size_t *length) {
+int utf_to_eci(const int eci, const unsigned char source[], unsigned char dest[], size_t *length) {
     int in_posn;
     int out_posn;
     int ext;
@@ -69,7 +69,7 @@ INTERNAL int utf_to_eci(const int eci, const unsigned char source[], unsigned ch
             bytelen = 2;
             glyph = (source[in_posn] & 0x1f) << 6;
 
-            if ((int) *length < (in_posn + 2)) {
+            if (*length < (in_posn + 2)) {
                 return ZINT_ERROR_INVALID_DATA;
             }
 
@@ -85,11 +85,11 @@ INTERNAL int utf_to_eci(const int eci, const unsigned char source[], unsigned ch
             bytelen = 3;
             glyph = (source[in_posn] & 0x0f) << 12;
 
-            if ((int) *length < (in_posn + 2)) {
+            if (*length < (in_posn + 2)) {
                 return ZINT_ERROR_INVALID_DATA;
             }
 
-            if ((int) *length < (in_posn + 3)) {
+            if (*length < (in_posn + 3)) {
                 return ZINT_ERROR_INVALID_DATA;
             }
 
@@ -245,7 +245,7 @@ INTERNAL int utf_to_eci(const int eci, const unsigned char source[], unsigned ch
 
         in_posn += bytelen;
         out_posn++;
-    } while (in_posn < (int) *length);
+    } while (in_posn < *length);
     dest[out_posn] = '\0';
     *length = out_posn;
 
@@ -253,7 +253,7 @@ INTERNAL int utf_to_eci(const int eci, const unsigned char source[], unsigned ch
 }
 
 /* Find the lowest ECI mode which will encode a given set of Unicode text */
-INTERNAL int get_best_eci(unsigned char source[], size_t length) {
+int get_best_eci(unsigned char source[], size_t length) {
     int eci = 3;
 
 #ifndef _MSC_VER
@@ -271,3 +271,5 @@ INTERNAL int get_best_eci(unsigned char source[], size_t length) {
 
     return 26; // If all of these fail, use Unicode!
 }
+
+
index bd6f6a2..e6c799d 100644 (file)
@@ -1,7 +1,7 @@
 /*  emf.c - Support for Microsoft Enhanced Metafile Format
 
     libzint - the open source barcode library
-    Copyright (C) 2016 - 2020 Robin Stuart <rstuart114@gmail.com>
+    Copyright (C) 2016-2018 Robin Stuart <rstuart114@gmail.com>
 
     Redistribution and use in source and binary forms, with or without
     modification, are permitted provided that the following conditions
@@ -28,7 +28,6 @@
     OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     SUCH DAMAGE.
  */
-/* vim: set ts=4 sw=4 et : */
 
 /* Developed according to [MS-EMF] - v20160714, Released July 14, 2016
  * and [MS-WMF] - v20160714, Released July 14, 2016 */
 #include "common.h"
 #include "emf.h"
 
-int colour_to_red(int colour) {
-    int return_val = 0;
-
-    switch(colour) {
-        case 0: // White
-        case 3: // Magenta
-        case 4: // Red
-        case 5: // Yellow
-            return_val = 255;
-            break;
-    }
-
-    return return_val;
-}
-
-int colour_to_green(int colour) {
-    int return_val = 0;
-
-    switch(colour) {
-        case 0: // White
-        case 1: // Cyan
-        case 5: // Yellow
-        case 6: // Green
-            return_val = 255;
-            break;
-    }
-
-    return return_val;
-}
-
-int colour_to_blue(int colour) {
-    int return_val = 0;
-
-    switch(colour) {
-        case 0: // White
-        case 1: // Cyan
-        case 2: // Blue
-        case 3: // Magenta
-            return_val = 255;
-            break;
-    }
-
-    return return_val;
-}
-
-static int count_rectangles(struct zint_symbol *symbol) {
+int count_rectangles(struct zint_symbol *symbol) {
     int rectangles = 0;
     struct zint_vector_rect *rect;
 
@@ -100,7 +54,7 @@ static int count_rectangles(struct zint_symbol *symbol) {
     return rectangles;
 }
 
-static int count_circles(struct zint_symbol *symbol) {
+int count_circles(struct zint_symbol *symbol) {
     int circles = 0;
     struct zint_vector_circle *circ;
 
@@ -113,7 +67,7 @@ static int count_circles(struct zint_symbol *symbol) {
     return circles;
 }
 
-static int count_hexagons(struct zint_symbol *symbol) {
+int count_hexagons(struct zint_symbol *symbol) {
     int hexagons = 0;
     struct zint_vector_hexagon *hex;
 
@@ -126,7 +80,7 @@ static int count_hexagons(struct zint_symbol *symbol) {
     return hexagons;
 }
 
-static int count_strings(struct zint_symbol *symbol) {
+int count_strings(struct zint_symbol *symbol) {
     int strings = 0;
     struct zint_vector_string *str;
 
@@ -139,7 +93,7 @@ static int count_strings(struct zint_symbol *symbol) {
     return strings;
 }
 
-static void utfle_copy(unsigned char *output, unsigned char *input, int length) {
+void utfle_copy(unsigned char *output, unsigned char *input, int length) {
     int i;
     int o;
 
@@ -163,7 +117,7 @@ static void utfle_copy(unsigned char *output, unsigned char *input, int length)
     } while (i < length);
 }
 
-static int bump_up(int input) {
+int bump_up(int input) {
     /* Strings length must be a multiple of 4 bytes */
     if ((input % 2) == 1) {
         input++;
@@ -171,7 +125,7 @@ static int bump_up(int input) {
     return input;
 }
 
-INTERNAL int emf_plot(struct zint_symbol *symbol) {
+int emf_plot(struct zint_symbol *symbol) {
     int i,j;
     FILE *emf_file;
     int fgred, fggrn, fgblu, bgred, bggrn, bgblu;
@@ -182,8 +136,6 @@ INTERNAL int emf_plot(struct zint_symbol *symbol) {
     int string_count, this_text;
     int bytecount, recordcount;
     float radius;
-    int colours_used = 0;
-    int rectangle_count_bycolour[8];
     unsigned char *this_string[6];
     uint32_t spacing;
 
@@ -198,10 +150,8 @@ INTERNAL int emf_plot(struct zint_symbol *symbol) {
     emr_eof_t emr_eof;
     emr_createbrushindirect_t emr_createbrushindirect_fg;
     emr_createbrushindirect_t emr_createbrushindirect_bg;
-    emr_createbrushindirect_t emr_createbrushindirect_colour[8]; // Used for colour symbols only
     emr_selectobject_t emr_selectobject_fgbrush;
     emr_selectobject_t emr_selectobject_bgbrush;
-    emr_selectobject_t emr_selectobject_colour[8]; // Used for colour symbols only
     emr_createpen_t emr_createpen;
     emr_selectobject_t emr_selectobject_pen;
     emr_rectangle_t background;
@@ -230,36 +180,20 @@ INTERNAL int emf_plot(struct zint_symbol *symbol) {
     string_count = count_strings(symbol);
 
 #ifndef _MSC_VER
-    emr_rectangle_t rectangle[rectangle_count ? rectangle_count : 1]; // Avoid sanitize runtime error by making always non-zero
-    emr_ellipse_t circle[circle_count ? circle_count : 1];
-    emr_polygon_t hexagon[hexagon_count ? hexagon_count : 1];
-    emr_exttextoutw_t text[string_count ? string_count: 1];
+    emr_rectangle_t rectangle[rectangle_count];
+    emr_ellipse_t circle[circle_count];
+    emr_polygon_t hexagon[hexagon_count];
+    emr_exttextoutw_t text[string_count];
 #else
     rectangle = (emr_rectangle_t*) _alloca(rectangle_count * sizeof (emr_rectangle_t));
     circle = (emr_ellipse_t*) _alloca(circle_count * sizeof (emr_ellipse_t));
     hexagon = (emr_polygon_t*) _alloca(hexagon_count * sizeof (emr_polygon_t));
     text = (emr_exttextoutw_t*) _alloca(string_count * sizeof (emr_exttextoutw_t));
 #endif
-
-    //Calculate how many coloured rectangles
-    if (symbol->symbology == BARCODE_ULTRA) {
-        for (i = 0; i < 8; i++) {
-            rectangle_count_bycolour[i] = 0;
-        }
-
-        rect = symbol->vector->rectangles;
-        while (rect) {
-            if (rectangle_count_bycolour[rect->colour] == 0) {
-                colours_used++;
-            }
-            rectangle_count_bycolour[rect->colour]++;
-            rect = rect->next;
-        }
-    }
-
+    
     /* Header */
     emr_header.type = 0x00000001; // EMR_HEADER
-    emr_header.size = 108; // Including extensions
+    emr_header.size = 88; // Assuming no additional data in header
     emr_header.emf_header.bounds.left = 0;
     emr_header.emf_header.bounds.right = ceil(symbol->vector->width);
     emr_header.emf_header.bounds.bottom = ceil(symbol->vector->height);
@@ -279,20 +213,25 @@ INTERNAL int emf_plot(struct zint_symbol *symbol) {
     emr_header.emf_header.device.cy = 1000;
     emr_header.emf_header.millimeters.cx = 300;
     emr_header.emf_header.millimeters.cy = 300;
-    /* HeaderExtension1 */
-    emr_header.emf_header.cb_pixel_format = 0x0000; // None set
-    emr_header.emf_header.off_pixel_format = 0x0000; // None set
-    emr_header.emf_header.b_open_gl = 0x0000; // OpenGL not present
-    /* HeaderExtension2 */
-    emr_header.emf_header.micrometers.cx = 0;
-    emr_header.emf_header.micrometers.cy = 0;
-    bytecount = 108;
+    bytecount = 88;
     recordcount = 1;
 
     /* Create Brushes */
+    emr_createbrushindirect_fg.type = 0x00000027; // EMR_CREATEBRUSHINDIRECT
+    emr_createbrushindirect_fg.size = 24;
+    emr_createbrushindirect_fg.ih_brush = 1;
+    emr_createbrushindirect_fg.log_brush.brush_style = 0x0000; // BS_SOLID
+    emr_createbrushindirect_fg.log_brush.color.red = fgred;
+    emr_createbrushindirect_fg.log_brush.color.green = fggrn;
+    emr_createbrushindirect_fg.log_brush.color.blue = fgblu;
+    emr_createbrushindirect_fg.log_brush.color.reserved = 0;
+    emr_createbrushindirect_fg.log_brush.brush_hatch = 0x0006; // HS_SOLIDCLR
+    bytecount += 24;
+    recordcount++;
+
     emr_createbrushindirect_bg.type = 0x00000027; // EMR_CREATEBRUSHINDIRECT
     emr_createbrushindirect_bg.size = 24;
-    emr_createbrushindirect_bg.ih_brush = 1;
+    emr_createbrushindirect_bg.ih_brush = 2;
     emr_createbrushindirect_bg.log_brush.brush_style = 0x0000; // BS_SOLID
     emr_createbrushindirect_bg.log_brush.color.red = bgred;
     emr_createbrushindirect_bg.log_brush.color.green = bggrn;
@@ -302,60 +241,22 @@ INTERNAL int emf_plot(struct zint_symbol *symbol) {
     bytecount += 24;
     recordcount++;
 
-    if (symbol->symbology == BARCODE_ULTRA) {
-        for (i = 0; i < 8; i++) {
-            emr_createbrushindirect_colour[i].type = 0x00000027; // EMR_CREATEBRUSHINDIRECT
-            emr_createbrushindirect_colour[i].size = 24;
-            emr_createbrushindirect_colour[i].ih_brush = 2 + i;
-            emr_createbrushindirect_colour[i].log_brush.brush_style = 0x0000; // BS_SOLID
-            emr_createbrushindirect_colour[i].log_brush.color.red = colour_to_red(i);
-            emr_createbrushindirect_colour[i].log_brush.color.green = colour_to_green(i);
-            emr_createbrushindirect_colour[i].log_brush.color.blue = colour_to_blue(i);
-            emr_createbrushindirect_colour[i].log_brush.color.reserved = 0;
-            emr_createbrushindirect_colour[i].log_brush.brush_hatch = 0x0006; // HS_SOLIDCLR
-        }
-        bytecount += colours_used * 24;
-        recordcount += colours_used;
-    } else {
-        emr_createbrushindirect_fg.type = 0x00000027; // EMR_CREATEBRUSHINDIRECT
-        emr_createbrushindirect_fg.size = 24;
-        emr_createbrushindirect_fg.ih_brush = 2;
-        emr_createbrushindirect_fg.log_brush.brush_style = 0x0000; // BS_SOLID
-        emr_createbrushindirect_fg.log_brush.color.red = fgred;
-        emr_createbrushindirect_fg.log_brush.color.green = fggrn;
-        emr_createbrushindirect_fg.log_brush.color.blue = fgblu;
-        emr_createbrushindirect_fg.log_brush.color.reserved = 0;
-        emr_createbrushindirect_fg.log_brush.brush_hatch = 0x0006; // HS_SOLIDCLR
-        bytecount += 24;
-        recordcount++;
-    }
+    emr_selectobject_fgbrush.type = 0x00000025; // EMR_SELECTOBJECT
+    emr_selectobject_fgbrush.size = 12;
+    emr_selectobject_fgbrush.ih_object = 1;
+    bytecount += 12;
+    recordcount++;
 
     emr_selectobject_bgbrush.type = 0x00000025; // EMR_SELECTOBJECT
     emr_selectobject_bgbrush.size = 12;
-    emr_selectobject_bgbrush.ih_object = 1;
+    emr_selectobject_bgbrush.ih_object = 2;
     bytecount += 12;
     recordcount++;
 
-    if (symbol->symbology == BARCODE_ULTRA) {
-        for (i = 0; i < 8; i++) {
-            emr_selectobject_colour[i].type = 0x00000025; // EMR_SELECTOBJECT
-            emr_selectobject_colour[i].size = 12;
-            emr_selectobject_colour[i].ih_object = 2 + i;
-        }
-        bytecount += colours_used * 12;
-        recordcount += colours_used;
-    } else {
-        emr_selectobject_fgbrush.type = 0x00000025; // EMR_SELECTOBJECT
-        emr_selectobject_fgbrush.size = 12;
-        emr_selectobject_fgbrush.ih_object = 2;
-        bytecount += 12;
-        recordcount++;
-    }
-
     /* Create Pens */
     emr_createpen.type = 0x00000026; // EMR_CREATEPEN
     emr_createpen.size = 28;
-    emr_createpen.ih_pen = 10;
+    emr_createpen.ih_pen = 3;
     emr_createpen.log_pen.pen_style = 0x00000005; // PS_NULL
     emr_createpen.log_pen.width.x = 1;
     emr_createpen.log_pen.width.y = 0; // ignored
@@ -368,7 +269,7 @@ INTERNAL int emf_plot(struct zint_symbol *symbol) {
 
     emr_selectobject_pen.type = 0x00000025; // EMR_SELECTOBJECT
     emr_selectobject_pen.size = 12;
-    emr_selectobject_pen.ih_object = 10;
+    emr_selectobject_pen.ih_object = 3;
     bytecount += 12;
     recordcount++;
 
@@ -558,18 +459,8 @@ INTERNAL int emf_plot(struct zint_symbol *symbol) {
 
     fwrite(&emr_header, sizeof (emr_header_t), 1, emf_file);
 
+    fwrite(&emr_createbrushindirect_fg, sizeof (emr_createbrushindirect_t), 1, emf_file);
     fwrite(&emr_createbrushindirect_bg, sizeof (emr_createbrushindirect_t), 1, emf_file);
-
-    if (symbol->symbology == BARCODE_ULTRA) {
-        for (i = 0; i < 8; i++) {
-            if (rectangle_count_bycolour[i]) {
-                fwrite(&emr_createbrushindirect_colour[i], sizeof (emr_createbrushindirect_t), 1, emf_file);
-            }
-        }
-    } else {
-        fwrite(&emr_createbrushindirect_fg, sizeof (emr_createbrushindirect_t), 1, emf_file);
-    }
-
     fwrite(&emr_createpen, sizeof (emr_createpen_t), 1, emf_file);
 
     if (symbol->vector->strings) {
@@ -580,29 +471,11 @@ INTERNAL int emf_plot(struct zint_symbol *symbol) {
     fwrite(&emr_selectobject_pen, sizeof (emr_selectobject_t), 1, emf_file);
     fwrite(&background, sizeof (emr_rectangle_t), 1, emf_file);
 
-    if (symbol->symbology == BARCODE_ULTRA) {
-        for(i = 0; i < 8; i++) {
-            if (rectangle_count_bycolour[i]) {
-                fwrite(&emr_selectobject_colour[i], sizeof (emr_selectobject_t), 1, emf_file);
-
-                rect = symbol->vector->rectangles;
-                this_rectangle = 0;
-                while (rect) {
-                    if (rect->colour == i) {
-                        fwrite(&rectangle[this_rectangle], sizeof (emr_rectangle_t), 1, emf_file);
-                    }
-                    this_rectangle++;
-                    rect = rect->next;
-                }
-            }
-        }
-    } else {
-        fwrite(&emr_selectobject_fgbrush, sizeof (emr_selectobject_t), 1, emf_file);
+    fwrite(&emr_selectobject_fgbrush, sizeof (emr_selectobject_t), 1, emf_file);
 
-        // Rectangles
-        for (i = 0; i < rectangle_count; i++) {
-            fwrite(&rectangle[i], sizeof (emr_rectangle_t), 1, emf_file);
-        }
+    // Rectangles
+    for (i = 0; i < rectangle_count; i++) {
+        fwrite(&rectangle[i], sizeof (emr_rectangle_t), 1, emf_file);
     }
 
     // Hexagons
@@ -630,15 +503,11 @@ INTERNAL int emf_plot(struct zint_symbol *symbol) {
     }
 
     // Text
-    if (string_count > 0) {
-        fwrite(&emr_selectobject_font, sizeof (emr_selectobject_t), 1, emf_file);
-    }
-
     for (i = 0; i < string_count; i++) {
         spacing = 8 * symbol->scale;
+        fwrite(&emr_selectobject_font, sizeof (emr_selectobject_t), 1, emf_file);
         fwrite(&text[i], sizeof (emr_exttextoutw_t), 1, emf_file);
-        fwrite(this_string[i], bump_up(text[i].w_emr_text.chars + 1) * 2, 1, emf_file); // NOLINT text set 0..(string_count - 1)
-        free(this_string[i]);
+        fwrite(this_string[i], bump_up(text[i].w_emr_text.chars + 1) * 2, 1, emf_file);
         for (j = 0; j < bump_up(text[i].w_emr_text.chars + 1); j++) {
             fwrite(&spacing, 4, 1, emf_file);
         }
index 5ecb23d..ffd4521 100644 (file)
@@ -121,12 +121,6 @@ extern "C" {
         uint32_t n_pal_entries;
         size_l_t device;
         size_l_t millimeters;
-        // HeaderExtension1 Object
-        uint32_t cb_pixel_format;
-        uint32_t off_pixel_format;
-        uint32_t b_open_gl;
-        // HeaderExtension2 Object
-        size_l_t micrometers;
     } emf_header_t;
 
     typedef struct emr_header {
diff --git a/backend/gb18030.c b/backend/gb18030.c
deleted file mode 100644 (file)
index ae67fd7..0000000
+++ /dev/null
@@ -1,2968 +0,0 @@
-/*
-    libzint - the open source barcode library
-    Copyright (C) 2008-2020 Robin Stuart <rstuart114@gmail.com>
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-    1. Redistributions of source code must retain the above copyright
-       notice, this list of conditions and the following disclaimer.
-    2. Redistributions in binary form must reproduce the above copyright
-       notice, this list of conditions and the following disclaimer in the
-       documentation and/or other materials provided with the distribution.
-    3. Neither the name of the project nor the names of its contributors
-       may be used to endorse or promote products derived from this software
-       without specific prior written permission.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
-    ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-    ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-    SUCH DAMAGE.
- */
-/* vim: set ts=4 sw=4 et : */
-/*
- * Adapted from GNU LIBICONV library and patched to allow 2 duplicate mappings
- * for compatibility with GB 2312 (GB2312.TXT):
- * 1) U+30FB to 0xA1A4 (duplicate of U+00B7)
- * 2) U+2015 to 0xA1AA (duplicate of U+2014)
- */
-/*
- * Copyright (C) 1999-2001, 2005, 2012, 2016 Free Software Foundation, Inc.
- * This file is part of the GNU LIBICONV Library.
- *
- * The GNU LIBICONV Library is free software; you can redistribute it
- * and/or modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * The GNU LIBICONV Library is distributed in the hope that it will be
- * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with the GNU LIBICONV Library; see the file COPYING.LIB.
- * If not, see <https://www.gnu.org/licenses/>.
- */
-#include <string.h>
-#ifdef _MSC_VER
-#include <malloc.h>
-#endif
-#include "common.h"
-#include "gb2312.h"
-#include "gb18030.h"
-
-INTERNAL int utf_to_eci(const int eci, const unsigned char source[], unsigned char dest[], size_t *length); /* Convert Unicode to other encodings */
-
-/*
- * CP936 extensions (libiconv-1.16/lib/cp936ext.h)
- */
-
-static const unsigned short cp936ext_page01[16] = {
-  0x0000, 0x0000, 0x0000, 0x0000, 0xa8bd, 0x0000, 0x0000, 0x0000, /*0x40-0x47*/
-  0xa8be, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x48-0x4f*/
-};
-static const unsigned short cp936ext_page02[24] = {
-  0x0000, 0xa8bb, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x50-0x57*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x58-0x5f*/
-  0x0000, 0xa8c0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x60-0x67*/
-};
-static const unsigned short cp936ext_pagefe[24] = {
-  0x0000, 0xa6f2, 0x0000, 0xa6f4, 0xa6f5, 0xa6e0, 0xa6e1, 0xa6f0, /*0x30-0x37*/
-  0xa6f1, 0xa6e2, 0xa6e3, 0xa6ee, 0xa6ef, 0xa6e6, 0xa6e7, 0xa6e4, /*0x38-0x3f*/
-  0xa6e5, 0xa6e8, 0xa6e9, 0xa6ea, 0xa6eb, 0x0000, 0x0000, 0x0000, /*0x40-0x47*/
-};
-
-static int cp936ext_wctomb(unsigned int* r, unsigned int wc) {
-    unsigned short c = 0;
-    if (wc >= 0x0140 && wc < 0x0150) {
-        c = cp936ext_page01[wc-0x0140];
-    } else if (wc >= 0x0250 && wc < 0x0268) {
-        c = cp936ext_page02[wc-0x0250];
-    } else if (wc >= 0xfe30 && wc < 0xfe48) {
-        c = cp936ext_pagefe[wc-0xfe30];
-    }
-    if (c != 0) {
-        *r = c;
-        return 2;
-    }
-    return 0;
-}
-
-/*
- * GBK extensions (libiconv-1.16/lib/gbkext_inv.h)
- */
-
-static const unsigned short gbkext_inv_2charset[14313] = {
-  0xa840, 0xa841, 0xa842, 0xa95c, 0xa843, 0xa844, 0xa845, 0xa846,
-  0xa847, 0xa848, 0xa959, 0xa849, 0xa84a, 0xa84b, 0xa84c, 0xa84d,
-  0xa84e, 0xa84f, 0xa850, 0xa851, 0xa852, 0xa892, 0xa853, 0xa854,
-  0xa855, 0xa856, 0xa857, 0xa858, 0xa859, 0xa85a, 0xa85b, 0xa85c,
-  0xa85d, 0xa85e, 0xa85f, 0xa860, 0xa861, 0xa862, 0xa863, 0xa864,
-  0xa865, 0xa866, 0xa867, 0xa868, 0xa869, 0xa86a, 0xa86b, 0xa86c,
-  0xa86d, 0xa86e, 0xa86f, 0xa870, 0xa871, 0xa872, 0xa873, 0xa874,
-  0xa875, 0xa876, 0xa877, 0xa878, 0xa879, 0xa87a, 0xa87b, 0xa87c,
-  0xa87d, 0xa87e, 0xa880, 0xa881, 0xa882, 0xa883, 0xa884, 0xa885,
-  0xa886, 0xa887, 0xa888, 0xa889, 0xa88a, 0xa88b, 0xa88c, 0xa88d,
-  0xa88e, 0xa88f, 0xa890, 0xa891, 0xa965, 0xa996, 0xa893, 0xa894,
-  0xa895, 0xa940, 0xa941, 0xa942, 0xa943, 0xa944, 0xa945, 0xa946,
-  0xa947, 0xa948, 0xa961, 0xa962, 0xa966, 0xa967, 0xa960, 0xa963,
-  0xa964, 0xa95a, 0xa949, 0xa94a, 0xa94b, 0xa94c, 0xa94d, 0xa94e,
-  0xa94f, 0xa950, 0xa951, 0xa952, 0xa953, 0xa954, 0x8140, 0x8141,
-  0x8142, 0x8143, 0x8144, 0x8145, 0x8146, 0x8147, 0x8148, 0x8149,
-  0x814a, 0x814b, 0x814c, 0x814d, 0x814e, 0x814f, 0x8150, 0x8151,
-  0x8152, 0x8153, 0x8154, 0x8155, 0x8156, 0x8157, 0x8158, 0x8159,
-  0x815a, 0x815b, 0x815c, 0x815d, 0x815e, 0x815f, 0x8160, 0x8161,
-  0x8162, 0x8163, 0x8164, 0x8165, 0x8166, 0x8167, 0x8168, 0x8169,
-  0x816a, 0x816b, 0x816c, 0x816d, 0x816e, 0x816f, 0x8170, 0x8171,
-  0x8172, 0x8173, 0x8174, 0x8175, 0x8176, 0x8177, 0x8178, 0x8179,
-  0x817a, 0x817b, 0x817c, 0x817d, 0x817e, 0x8180, 0x8181, 0x8182,
-  0x8183, 0x8184, 0x8185, 0x8186, 0x8187, 0x8188, 0x8189, 0x818a,
-  0x818b, 0x818c, 0x818d, 0x818e, 0x818f, 0x8190, 0x8191, 0x8192,
-  0x8193, 0x8194, 0x8195, 0x8196, 0x8197, 0x8198, 0x8199, 0x819a,
-  0x819b, 0x819c, 0x819d, 0x819e, 0x819f, 0x81a0, 0x81a1, 0x81a2,
-  0x81a3, 0x81a4, 0x81a5, 0x81a6, 0x81a7, 0x81a8, 0x81a9, 0x81aa,
-  0x81ab, 0x81ac, 0x81ad, 0x81ae, 0x81af, 0x81b0, 0x81b1, 0x81b2,
-  0x81b3, 0x81b4, 0x81b5, 0x81b6, 0x81b7, 0x81b8, 0x81b9, 0x81ba,
-  0x81bb, 0x81bc, 0x81bd, 0x81be, 0x81bf, 0x81c0, 0x81c1, 0x81c2,
-  0x81c3, 0x81c4, 0x81c5, 0x81c6, 0x81c7, 0x81c8, 0x81c9, 0x81ca,
-  0x81cb, 0x81cc, 0x81cd, 0x81ce, 0x81cf, 0x81d0, 0x81d1, 0x81d2,
-  0x81d3, 0x81d4, 0x81d5, 0x81d6, 0x81d7, 0x81d8, 0x81d9, 0x81da,
-  0x81db, 0x81dc, 0x81dd, 0x81de, 0x81df, 0x81e0, 0x81e1, 0x81e2,
-  0x81e3, 0x81e4, 0x81e5, 0x81e6, 0x81e7, 0x81e8, 0x81e9, 0x81ea,
-  0x81eb, 0x81ec, 0x81ed, 0x81ee, 0x81ef, 0x81f0, 0x81f1, 0x81f2,
-  0x81f3, 0x81f4, 0x81f5, 0x81f6, 0x81f7, 0x81f8, 0x81f9, 0x81fa,
-  0x81fb, 0x81fc, 0x81fd, 0x81fe, 0x8240, 0x8241, 0x8242, 0x8243,
-  0x8244, 0x8245, 0x8246, 0x8247, 0x8248, 0x8249, 0x824a, 0x824b,
-  0x824c, 0x824d, 0x824e, 0x824f, 0x8250, 0x8251, 0x8252, 0x8253,
-  0x8254, 0x8255, 0x8256, 0x8257, 0x8258, 0x8259, 0x825a, 0x825b,
-  0x825c, 0x825d, 0x825e, 0x825f, 0x8260, 0x8261, 0x8262, 0x8263,
-  0x8264, 0x8265, 0x8266, 0x8267, 0x8268, 0x8269, 0x826a, 0x826b,
-  0x826c, 0x826d, 0x826e, 0x826f, 0x8270, 0x8271, 0x8272, 0x8273,
-  0x8274, 0x8275, 0x8276, 0x8277, 0x8278, 0x8279, 0x827a, 0x827b,
-  0x827c, 0x827d, 0x827e, 0x8280, 0x8281, 0x8282, 0x8283, 0x8284,
-  0x8285, 0x8286, 0x8287, 0x8288, 0x8289, 0x828a, 0x828b, 0x828c,
-  0x828d, 0x828e, 0x828f, 0x8290, 0x8291, 0x8292, 0x8293, 0x8294,
-  0x8295, 0x8296, 0x8297, 0x8298, 0x8299, 0x829a, 0x829b, 0x829c,
-  0x829d, 0x829e, 0x829f, 0x82a0, 0x82a1, 0x82a2, 0x82a3, 0x82a4,
-  0x82a5, 0x82a6, 0x82a7, 0x82a8, 0x82a9, 0x82aa, 0x82ab, 0x82ac,
-  0x82ad, 0x82ae, 0x82af, 0x82b0, 0x82b1, 0x82b2, 0x82b3, 0x82b4,
-  0x82b5, 0x82b6, 0x82b7, 0x82b8, 0x82b9, 0x82ba, 0x82bb, 0x82bc,
-  0x82bd, 0x82be, 0x82bf, 0x82c0, 0x82c1, 0x82c2, 0x82c3, 0x82c4,
-  0x82c5, 0x82c6, 0x82c7, 0x82c8, 0x82c9, 0x82ca, 0x82cb, 0x82cc,
-  0x82cd, 0x82ce, 0x82cf, 0x82d0, 0x82d1, 0x82d2, 0x82d3, 0x82d4,
-  0x82d5, 0x82d6, 0x82d7, 0x82d8, 0x82d9, 0x82da, 0x82db, 0x82dc,
-  0x82dd, 0x82de, 0x82df, 0x82e0, 0x82e1, 0x82e2, 0x82e3, 0x82e4,
-  0x82e5, 0x82e6, 0x82e7, 0x82e8, 0x82e9, 0x82ea, 0x82eb, 0x82ec,
-  0x82ed, 0x82ee, 0x82ef, 0x82f0, 0x82f1, 0x82f2, 0x82f3, 0x82f4,
-  0x82f5, 0x82f6, 0x82f7, 0x82f8, 0x82f9, 0x82fa, 0x82fb, 0x82fc,
-  0x82fd, 0x82fe, 0x8340, 0x8341, 0x8342, 0x8343, 0x8344, 0x8345,
-  0x8346, 0x8347, 0x8348, 0x8349, 0x834a, 0x834b, 0x834c, 0x834d,
-  0x834e, 0x834f, 0x8350, 0x8351, 0x8352, 0x8353, 0x8354, 0x8355,
-  0x8356, 0x8357, 0x8358, 0x8359, 0x835a, 0x835b, 0x835c, 0x835d,
-  0x835e, 0x835f, 0x8360, 0x8361, 0x8362, 0x8363, 0x8364, 0x8365,
-  0x8366, 0x8367, 0x8368, 0x8369, 0x836a, 0x836b, 0x836c, 0x836d,
-  0x836e, 0x836f, 0x8370, 0x8371, 0x8372, 0x8373, 0x8374, 0x8375,
-  0x8376, 0x8377, 0x8378, 0x8379, 0x837a, 0x837b, 0x837c, 0x837d,
-  0x837e, 0x8380, 0x8381, 0x8382, 0x8383, 0x8384, 0x8385, 0x8386,
-  0x8387, 0x8388, 0x8389, 0x838a, 0x838b, 0x838c, 0x838d, 0x838e,
-  0x838f, 0x8390, 0x8391, 0x8392, 0x8393, 0x8394, 0x8395, 0x8396,
-  0x8397, 0x8398, 0x8399, 0x839a, 0x839b, 0x839c, 0x839d, 0x839e,
-  0x839f, 0x83a0, 0x83a1, 0x83a2, 0x83a3, 0x83a4, 0x83a5, 0x83a6,
-  0x83a7, 0x83a8, 0x83a9, 0x83aa, 0x83ab, 0x83ac, 0x83ad, 0x83ae,
-  0x83af, 0x83b0, 0x83b1, 0x83b2, 0x83b3, 0x83b4, 0x83b5, 0x83b6,
-  0x83b7, 0x83b8, 0x83b9, 0x83ba, 0x83bb, 0x83bc, 0x83bd, 0x83be,
-  0x83bf, 0x83c0, 0x83c1, 0x83c2, 0x83c3, 0x83c4, 0x83c5, 0x83c6,
-  0x83c7, 0x83c8, 0x83c9, 0x83ca, 0x83cb, 0x83cc, 0x83cd, 0x83ce,
-  0x83cf, 0x83d0, 0x83d1, 0x83d2, 0x83d3, 0x83d4, 0x83d5, 0x83d6,
-  0x83d7, 0x83d8, 0x83d9, 0x83da, 0x83db, 0x83dc, 0x83dd, 0x83de,
-  0x83df, 0x83e0, 0x83e1, 0x83e2, 0x83e3, 0x83e4, 0x83e5, 0x83e6,
-  0x83e7, 0x83e8, 0x83e9, 0x83ea, 0x83eb, 0x83ec, 0x83ed, 0x83ee,
-  0x83ef, 0x83f0, 0x83f1, 0x83f2, 0x83f3, 0x83f4, 0x83f5, 0x83f6,
-  0x83f7, 0x83f8, 0x83f9, 0x83fa, 0x83fb, 0x83fc, 0x83fd, 0x83fe,
-  0x8440, 0x8441, 0x8442, 0x8443, 0x8444, 0x8445, 0x8446, 0x8447,
-  0x8448, 0x8449, 0x844a, 0x844b, 0x844c, 0x844d, 0x844e, 0x844f,
-  0x8450, 0x8451, 0x8452, 0x8453, 0x8454, 0x8455, 0x8456, 0x8457,
-  0x8458, 0x8459, 0x845a, 0x845b, 0x845c, 0x845d, 0x845e, 0x845f,
-  0x8460, 0x8461, 0x8462, 0x8463, 0x8464, 0x8465, 0x8466, 0x8467,
-  0x8468, 0x8469, 0x846a, 0x846b, 0x846c, 0x846d, 0x846e, 0x846f,
-  0x8470, 0x8471, 0x8472, 0x8473, 0x8474, 0x8475, 0x8476, 0x8477,
-  0x8478, 0x8479, 0x847a, 0x847b, 0x847c, 0x847d, 0x847e, 0x8480,
-  0x8481, 0x8482, 0x8483, 0x8484, 0x8485, 0x8486, 0x8487, 0x8488,
-  0x8489, 0x848a, 0x848b, 0x848c, 0x848d, 0x848e, 0x848f, 0x8490,
-  0x8491, 0x8492, 0x8493, 0x8494, 0x8495, 0x8496, 0x8497, 0x8498,
-  0x8499, 0x849a, 0x849b, 0x849c, 0x849d, 0x849e, 0x849f, 0x84a0,
-  0x84a1, 0x84a2, 0x84a3, 0x84a4, 0x84a5, 0x84a6, 0x84a7, 0x84a8,
-  0x84a9, 0x84aa, 0x84ab, 0x84ac, 0x84ad, 0x84ae, 0x84af, 0x84b0,
-  0x84b1, 0x84b2, 0x84b3, 0x84b4, 0x84b5, 0x84b6, 0x84b7, 0x84b8,
-  0x84b9, 0x84ba, 0x84bb, 0x84bc, 0x84bd, 0x84be, 0x84bf, 0x84c0,
-  0x84c1, 0x84c2, 0x84c3, 0x84c4, 0x84c5, 0x84c6, 0x84c7, 0x84c8,
-  0x84c9, 0x84ca, 0x84cb, 0x84cc, 0x84cd, 0x84ce, 0x84cf, 0x84d0,
-  0x84d1, 0x84d2, 0x84d3, 0x84d4, 0x84d5, 0x84d6, 0x84d7, 0x84d8,
-  0x84d9, 0x84da, 0x84db, 0x84dc, 0x84dd, 0x84de, 0x84df, 0x84e0,
-  0x84e1, 0x84e2, 0x84e3, 0x84e4, 0x84e5, 0x84e6, 0x84e7, 0x84e8,
-  0x84e9, 0x84ea, 0x84eb, 0x84ec, 0x84ed, 0x84ee, 0x84ef, 0x84f0,
-  0x84f1, 0x84f2, 0x84f3, 0x84f4, 0x84f5, 0x84f6, 0x84f7, 0x84f8,
-  0x84f9, 0x84fa, 0x84fb, 0x84fc, 0x84fd, 0x84fe, 0x8540, 0x8541,
-  0x8542, 0x8543, 0x8544, 0x8545, 0x8546, 0x8547, 0x8548, 0x8549,
-  0x854a, 0x854b, 0x854c, 0x854d, 0x854e, 0x854f, 0x8550, 0x8551,
-  0x8552, 0x8553, 0x8554, 0x8555, 0x8556, 0x8557, 0x8558, 0x8559,
-  0x855a, 0x855b, 0x855c, 0x855d, 0x855e, 0x855f, 0x8560, 0x8561,
-  0x8562, 0x8563, 0x8564, 0x8565, 0x8566, 0x8567, 0x8568, 0x8569,
-  0x856a, 0x856b, 0x856c, 0x856d, 0x856e, 0x856f, 0x8570, 0x8571,
-  0x8572, 0x8573, 0x8574, 0x8575, 0x8576, 0x8577, 0x8578, 0x8579,
-  0x857a, 0x857b, 0x857c, 0x857d, 0x857e, 0x8580, 0x8581, 0x8582,
-  0x8583, 0x8584, 0x8585, 0x8586, 0x8587, 0x8588, 0x8589, 0x858a,
-  0x858b, 0x858c, 0x858d, 0x858e, 0x858f, 0x8590, 0x8591, 0x8592,
-  0x8593, 0x8594, 0x8595, 0x8596, 0x8597, 0x8598, 0x8599, 0x859a,
-  0x859b, 0x859c, 0x859d, 0x859e, 0x859f, 0x85a0, 0x85a1, 0x85a2,
-  0x85a3, 0x85a4, 0x85a5, 0x85a6, 0x85a7, 0x85a8, 0x85a9, 0x85aa,
-  0x85ab, 0x85ac, 0x85ad, 0x85ae, 0x85af, 0x85b0, 0x85b1, 0x85b2,
-  0x85b3, 0x85b4, 0x85b5, 0x85b6, 0x85b7, 0x85b8, 0x85b9, 0x85ba,
-  0x85bb, 0x85bc, 0x85bd, 0x85be, 0x85bf, 0x85c0, 0x85c1, 0x85c2,
-  0x85c3, 0x85c4, 0x85c5, 0x85c6, 0x85c7, 0x85c8, 0x85c9, 0x85ca,
-  0x85cb, 0x85cc, 0x85cd, 0x85ce, 0x85cf, 0x85d0, 0x85d1, 0x85d2,
-  0x85d3, 0x85d4, 0x85d5, 0x85d6, 0x85d7, 0x85d8, 0x85d9, 0x85da,
-  0x85db, 0x85dc, 0x85dd, 0x85de, 0x85df, 0x85e0, 0x85e1, 0x85e2,
-  0x85e3, 0x85e4, 0x85e5, 0x85e6, 0x85e7, 0x85e8, 0x85e9, 0x85ea,
-  0x85eb, 0x85ec, 0x85ed, 0x85ee, 0x85ef, 0x85f0, 0x85f1, 0x85f2,
-  0x85f3, 0x85f4, 0x85f5, 0x85f6, 0x85f7, 0x85f8, 0x85f9, 0x85fa,
-  0x85fb, 0x85fc, 0x85fd, 0x85fe, 0x8640, 0x8641, 0x8642, 0x8643,
-  0x8644, 0x8645, 0x8646, 0x8647, 0x8648, 0x8649, 0x864a, 0x864b,
-  0x864c, 0x864d, 0x864e, 0x864f, 0x8650, 0x8651, 0x8652, 0x8653,
-  0x8654, 0x8655, 0x8656, 0x8657, 0x8658, 0x8659, 0x865a, 0x865b,
-  0x865c, 0x865d, 0x865e, 0x865f, 0x8660, 0x8661, 0x8662, 0x8663,
-  0x8664, 0x8665, 0x8666, 0x8667, 0x8668, 0x8669, 0x866a, 0x866b,
-  0x866c, 0x866d, 0x866e, 0x866f, 0x8670, 0x8671, 0x8672, 0x8673,
-  0x8674, 0x8675, 0x8676, 0x8677, 0x8678, 0x8679, 0x867a, 0x867b,
-  0x867c, 0x867d, 0x867e, 0x8680, 0x8681, 0x8682, 0x8683, 0x8684,
-  0x8685, 0x8686, 0x8687, 0x8688, 0x8689, 0x868a, 0x868b, 0x868c,
-  0x868d, 0x868e, 0x868f, 0x8690, 0x8691, 0x8692, 0x8693, 0x8694,
-  0x8695, 0x8696, 0x8697, 0x8698, 0x8699, 0x869a, 0x869b, 0x869c,
-  0x869d, 0x869e, 0x869f, 0x86a0, 0x86a1, 0x86a2, 0x86a3, 0x86a4,
-  0x86a5, 0x86a6, 0x86a7, 0x86a8, 0x86a9, 0x86aa, 0x86ab, 0x86ac,
-  0x86ad, 0x86ae, 0x86af, 0x86b0, 0x86b1, 0x86b2, 0x86b3, 0x86b4,
-  0x86b5, 0x86b6, 0x86b7, 0x86b8, 0x86b9, 0x86ba, 0x86bb, 0x86bc,
-  0x86bd, 0x86be, 0x86bf, 0x86c0, 0x86c1, 0x86c2, 0x86c3, 0x86c4,
-  0x86c5, 0x86c6, 0x86c7, 0x86c8, 0x86c9, 0x86ca, 0x86cb, 0x86cc,
-  0x86cd, 0x86ce, 0x86cf, 0x86d0, 0x86d1, 0x86d2, 0x86d3, 0x86d4,
-  0x86d5, 0x86d6, 0x86d7, 0x86d8, 0x86d9, 0x86da, 0x86db, 0x86dc,
-  0x86dd, 0x86de, 0x86df, 0x86e0, 0x86e1, 0x86e2, 0x86e3, 0x86e4,
-  0x86e5, 0x86e6, 0x86e7, 0x86e8, 0x86e9, 0x86ea, 0x86eb, 0x86ec,
-  0x86ed, 0x86ee, 0x86ef, 0x86f0, 0x86f1, 0x86f2, 0x86f3, 0x86f4,
-  0x86f5, 0x86f6, 0x86f7, 0x86f8, 0x86f9, 0x86fa, 0x86fb, 0x86fc,
-  0x86fd, 0x86fe, 0x8740, 0x8741, 0x8742, 0x8743, 0x8744, 0x8745,
-  0x8746, 0x8747, 0x8748, 0x8749, 0x874a, 0x874b, 0x874c, 0x874d,
-  0x874e, 0x874f, 0x8750, 0x8751, 0x8752, 0x8753, 0x8754, 0x8755,
-  0x8756, 0x8757, 0x8758, 0x8759, 0x875a, 0x875b, 0x875c, 0x875d,
-  0x875e, 0x875f, 0x8760, 0x8761, 0x8762, 0x8763, 0x8764, 0x8765,
-  0x8766, 0x8767, 0x8768, 0x8769, 0x876a, 0x876b, 0x876c, 0x876d,
-  0x876e, 0x876f, 0x8770, 0x8771, 0x8772, 0x8773, 0x8774, 0x8775,
-  0x8776, 0x8777, 0x8778, 0x8779, 0x877a, 0x877b, 0x877c, 0x877d,
-  0x877e, 0x8780, 0x8781, 0x8782, 0x8783, 0x8784, 0x8785, 0x8786,
-  0x8787, 0x8788, 0x8789, 0x878a, 0x878b, 0x878c, 0x878d, 0x878e,
-  0x878f, 0x8790, 0x8791, 0x8792, 0x8793, 0x8794, 0x8795, 0x8796,
-  0x8797, 0x8798, 0x8799, 0x879a, 0x879b, 0x879c, 0x879d, 0x879e,
-  0x879f, 0x87a0, 0x87a1, 0x87a2, 0x87a3, 0x87a4, 0x87a5, 0x87a6,
-  0x87a7, 0x87a8, 0x87a9, 0x87aa, 0x87ab, 0x87ac, 0x87ad, 0x87ae,
-  0x87af, 0x87b0, 0x87b1, 0x87b2, 0x87b3, 0x87b4, 0x87b5, 0x87b6,
-  0x87b7, 0x87b8, 0x87b9, 0x87ba, 0x87bb, 0x87bc, 0x87bd, 0x87be,
-  0x87bf, 0x87c0, 0x87c1, 0x87c2, 0x87c3, 0x87c4, 0x87c5, 0x87c6,
-  0x87c7, 0x87c8, 0x87c9, 0x87ca, 0x87cb, 0x87cc, 0x87cd, 0x87ce,
-  0x87cf, 0x87d0, 0x87d1, 0x87d2, 0x87d3, 0x87d4, 0x87d5, 0x87d6,
-  0x87d7, 0x87d8, 0x87d9, 0x87da, 0x87db, 0x87dc, 0x87dd, 0x87de,
-  0x87df, 0x87e0, 0x87e1, 0x87e2, 0x87e3, 0x87e4, 0x87e5, 0x87e6,
-  0x87e7, 0x87e8, 0x87e9, 0x87ea, 0x87eb, 0x87ec, 0x87ed, 0x87ee,
-  0x87ef, 0x87f0, 0x87f1, 0x87f2, 0x87f3, 0x87f4, 0x87f5, 0x87f6,
-  0x87f7, 0x87f8, 0x87f9, 0x87fa, 0x87fb, 0x87fc, 0x87fd, 0x87fe,
-  0x8840, 0x8841, 0x8842, 0x8843, 0x8844, 0x8845, 0x8846, 0x8847,
-  0x8848, 0x8849, 0x884a, 0x884b, 0x884c, 0x884d, 0x884e, 0x884f,
-  0x8850, 0x8851, 0x8852, 0x8853, 0x8854, 0x8855, 0x8856, 0x8857,
-  0x8858, 0x8859, 0x885a, 0x885b, 0x885c, 0x885d, 0x885e, 0x885f,
-  0x8860, 0x8861, 0x8862, 0x8863, 0x8864, 0x8865, 0x8866, 0x8867,
-  0x8868, 0x8869, 0x886a, 0x886b, 0x886c, 0x886d, 0x886e, 0x886f,
-  0x8870, 0x8871, 0x8872, 0x8873, 0x8874, 0x8875, 0x8876, 0x8877,
-  0x8878, 0x8879, 0x887a, 0x887b, 0x887c, 0x887d, 0x887e, 0x8880,
-  0x8881, 0x8882, 0x8883, 0x8884, 0x8885, 0x8886, 0x8887, 0x8888,
-  0x8889, 0x888a, 0x888b, 0x888c, 0x888d, 0x888e, 0x888f, 0x8890,
-  0x8891, 0x8892, 0x8893, 0x8894, 0x8895, 0x8896, 0x8897, 0x8898,
-  0x8899, 0x889a, 0x889b, 0x889c, 0x889d, 0x889e, 0x889f, 0x88a0,
-  0x88a1, 0x88a2, 0x88a3, 0x88a4, 0x88a5, 0x88a6, 0x88a7, 0x88a8,
-  0x88a9, 0x88aa, 0x88ab, 0x88ac, 0x88ad, 0x88ae, 0x88af, 0x88b0,
-  0x88b1, 0x88b2, 0x88b3, 0x88b4, 0x88b5, 0x88b6, 0x88b7, 0x88b8,
-  0x88b9, 0x88ba, 0x88bb, 0x88bc, 0x88bd, 0x88be, 0x88bf, 0x88c0,
-  0x88c1, 0x88c2, 0x88c3, 0x88c4, 0x88c5, 0x88c6, 0x88c7, 0x88c8,
-  0x88c9, 0x88ca, 0x88cb, 0x88cc, 0x88cd, 0x88ce, 0x88cf, 0x88d0,
-  0x88d1, 0x88d2, 0x88d3, 0x88d4, 0x88d5, 0x88d6, 0x88d7, 0x88d8,
-  0x88d9, 0x88da, 0x88db, 0x88dc, 0x88dd, 0x88de, 0x88df, 0x88e0,
-  0x88e1, 0x88e2, 0x88e3, 0x88e4, 0x88e5, 0x88e6, 0x88e7, 0x88e8,
-  0x88e9, 0x88ea, 0x88eb, 0x88ec, 0x88ed, 0x88ee, 0x88ef, 0x88f0,
-  0x88f1, 0x88f2, 0x88f3, 0x88f4, 0x88f5, 0x88f6, 0x88f7, 0x88f8,
-  0x88f9, 0x88fa, 0x88fb, 0x88fc, 0x88fd, 0x88fe, 0x8940, 0x8941,
-  0x8942, 0x8943, 0x8944, 0x8945, 0x8946, 0x8947, 0x8948, 0x8949,
-  0x894a, 0x894b, 0x894c, 0x894d, 0x894e, 0x894f, 0x8950, 0x8951,
-  0x8952, 0x8953, 0x8954, 0x8955, 0x8956, 0x8957, 0x8958, 0x8959,
-  0x895a, 0x895b, 0x895c, 0x895d, 0x895e, 0x895f, 0x8960, 0x8961,
-  0x8962, 0x8963, 0x8964, 0x8965, 0x8966, 0x8967, 0x8968, 0x8969,
-  0x896a, 0x896b, 0x896c, 0x896d, 0x896e, 0x896f, 0x8970, 0x8971,
-  0x8972, 0x8973, 0x8974, 0x8975, 0x8976, 0x8977, 0x8978, 0x8979,
-  0x897a, 0x897b, 0x897c, 0x897d, 0x897e, 0x8980, 0x8981, 0x8982,
-  0x8983, 0x8984, 0x8985, 0x8986, 0x8987, 0x8988, 0x8989, 0x898a,
-  0x898b, 0x898c, 0x898d, 0x898e, 0x898f, 0x8990, 0x8991, 0x8992,
-  0x8993, 0x8994, 0x8995, 0x8996, 0x8997, 0x8998, 0x8999, 0x899a,
-  0x899b, 0x899c, 0x899d, 0x899e, 0x899f, 0x89a0, 0x89a1, 0x89a2,
-  0x89a3, 0x89a4, 0x89a5, 0x89a6, 0x89a7, 0x89a8, 0x89a9, 0x89aa,
-  0x89ab, 0x89ac, 0x89ad, 0x89ae, 0x89af, 0x89b0, 0x89b1, 0x89b2,
-  0x89b3, 0x89b4, 0x89b5, 0x89b6, 0x89b7, 0x89b8, 0x89b9, 0x89ba,
-  0x89bb, 0x89bc, 0x89bd, 0x89be, 0x89bf, 0x89c0, 0x89c1, 0x89c2,
-  0x89c3, 0x89c4, 0x89c5, 0x89c6, 0x89c7, 0x89c8, 0x89c9, 0x89ca,
-  0x89cb, 0x89cc, 0x89cd, 0x89ce, 0x89cf, 0x89d0, 0x89d1, 0x89d2,
-  0x89d3, 0x89d4, 0x89d5, 0x89d6, 0x89d7, 0x89d8, 0x89d9, 0x89da,
-  0x89db, 0x89dc, 0x89dd, 0x89de, 0x89df, 0x89e0, 0x89e1, 0x89e2,
-  0x89e3, 0x89e4, 0x89e5, 0x89e6, 0x89e7, 0x89e8, 0x89e9, 0x89ea,
-  0x89eb, 0x89ec, 0x89ed, 0x89ee, 0x89ef, 0x89f0, 0x89f1, 0x89f2,
-  0x89f3, 0x89f4, 0x89f5, 0x89f6, 0x89f7, 0x89f8, 0x89f9, 0x89fa,
-  0x89fb, 0x89fc, 0x89fd, 0x89fe, 0x8a40, 0x8a41, 0x8a42, 0x8a43,
-  0x8a44, 0x8a45, 0x8a46, 0x8a47, 0x8a48, 0x8a49, 0x8a4a, 0x8a4b,
-  0x8a4c, 0x8a4d, 0x8a4e, 0x8a4f, 0x8a50, 0x8a51, 0x8a52, 0x8a53,
-  0x8a54, 0x8a55, 0x8a56, 0x8a57, 0x8a58, 0x8a59, 0x8a5a, 0x8a5b,
-  0x8a5c, 0x8a5d, 0x8a5e, 0x8a5f, 0x8a60, 0x8a61, 0x8a62, 0x8a63,
-  0x8a64, 0x8a65, 0x8a66, 0x8a67, 0x8a68, 0x8a69, 0x8a6a, 0x8a6b,
-  0x8a6c, 0x8a6d, 0x8a6e, 0x8a6f, 0x8a70, 0x8a71, 0x8a72, 0x8a73,
-  0x8a74, 0x8a75, 0x8a76, 0x8a77, 0x8a78, 0x8a79, 0x8a7a, 0x8a7b,
-  0x8a7c, 0x8a7d, 0x8a7e, 0x8a80, 0x8a81, 0x8a82, 0x8a83, 0x8a84,
-  0x8a85, 0x8a86, 0x8a87, 0x8a88, 0x8a89, 0x8a8a, 0x8a8b, 0x8a8c,
-  0x8a8d, 0x8a8e, 0x8a8f, 0x8a90, 0x8a91, 0x8a92, 0x8a93, 0x8a94,
-  0x8a95, 0x8a96, 0x8a97, 0x8a98, 0x8a99, 0x8a9a, 0x8a9b, 0x8a9c,
-  0x8a9d, 0x8a9e, 0x8a9f, 0x8aa0, 0x8aa1, 0x8aa2, 0x8aa3, 0x8aa4,
-  0x8aa5, 0x8aa6, 0x8aa7, 0x8aa8, 0x8aa9, 0x8aaa, 0x8aab, 0x8aac,
-  0x8aad, 0x8aae, 0x8aaf, 0x8ab0, 0x8ab1, 0x8ab2, 0x8ab3, 0x8ab4,
-  0x8ab5, 0x8ab6, 0x8ab7, 0x8ab8, 0x8ab9, 0x8aba, 0x8abb, 0x8abc,
-  0x8abd, 0x8abe, 0x8abf, 0x8ac0, 0x8ac1, 0x8ac2, 0x8ac3, 0x8ac4,
-  0x8ac5, 0x8ac6, 0x8ac7, 0x8ac8, 0x8ac9, 0x8aca, 0x8acb, 0x8acc,
-  0x8acd, 0x8ace, 0x8acf, 0x8ad0, 0x8ad1, 0x8ad2, 0x8ad3, 0x8ad4,
-  0x8ad5, 0x8ad6, 0x8ad7, 0x8ad8, 0x8ad9, 0x8ada, 0x8adb, 0x8adc,
-  0x8add, 0x8ade, 0x8adf, 0x8ae0, 0x8ae1, 0x8ae2, 0x8ae3, 0x8ae4,
-  0x8ae5, 0x8ae6, 0x8ae7, 0x8ae8, 0x8ae9, 0x8aea, 0x8aeb, 0x8aec,
-  0x8aed, 0x8aee, 0x8aef, 0x8af0, 0x8af1, 0x8af2, 0x8af3, 0x8af4,
-  0x8af5, 0x8af6, 0x8af7, 0x8af8, 0x8af9, 0x8afa, 0x8afb, 0x8afc,
-  0x8afd, 0x8afe, 0x8b40, 0x8b41, 0x8b42, 0x8b43, 0x8b44, 0x8b45,
-  0x8b46, 0x8b47, 0x8b48, 0x8b49, 0x8b4a, 0x8b4b, 0x8b4c, 0x8b4d,
-  0x8b4e, 0x8b4f, 0x8b50, 0x8b51, 0x8b52, 0x8b53, 0x8b54, 0x8b55,
-  0x8b56, 0x8b57, 0x8b58, 0x8b59, 0x8b5a, 0x8b5b, 0x8b5c, 0x8b5d,
-  0x8b5e, 0x8b5f, 0x8b60, 0x8b61, 0x8b62, 0x8b63, 0x8b64, 0x8b65,
-  0x8b66, 0x8b67, 0x8b68, 0x8b69, 0x8b6a, 0x8b6b, 0x8b6c, 0x8b6d,
-  0x8b6e, 0x8b6f, 0x8b70, 0x8b71, 0x8b72, 0x8b73, 0x8b74, 0x8b75,
-  0x8b76, 0x8b77, 0x8b78, 0x8b79, 0x8b7a, 0x8b7b, 0x8b7c, 0x8b7d,
-  0x8b7e, 0x8b80, 0x8b81, 0x8b82, 0x8b83, 0x8b84, 0x8b85, 0x8b86,
-  0x8b87, 0x8b88, 0x8b89, 0x8b8a, 0x8b8b, 0x8b8c, 0x8b8d, 0x8b8e,
-  0x8b8f, 0x8b90, 0x8b91, 0x8b92, 0x8b93, 0x8b94, 0x8b95, 0x8b96,
-  0x8b97, 0x8b98, 0x8b99, 0x8b9a, 0x8b9b, 0x8b9c, 0x8b9d, 0x8b9e,
-  0x8b9f, 0x8ba0, 0x8ba1, 0x8ba2, 0x8ba3, 0x8ba4, 0x8ba5, 0x8ba6,
-  0x8ba7, 0x8ba8, 0x8ba9, 0x8baa, 0x8bab, 0x8bac, 0x8bad, 0x8bae,
-  0x8baf, 0x8bb0, 0x8bb1, 0x8bb2, 0x8bb3, 0x8bb4, 0x8bb5, 0x8bb6,
-  0x8bb7, 0x8bb8, 0x8bb9, 0x8bba, 0x8bbb, 0x8bbc, 0x8bbd, 0x8bbe,
-  0x8bbf, 0x8bc0, 0x8bc1, 0x8bc2, 0x8bc3, 0x8bc4, 0x8bc5, 0x8bc6,
-  0x8bc7, 0x8bc8, 0x8bc9, 0x8bca, 0x8bcb, 0x8bcc, 0x8bcd, 0x8bce,
-  0x8bcf, 0x8bd0, 0x8bd1, 0x8bd2, 0x8bd3, 0x8bd4, 0x8bd5, 0x8bd6,
-  0x8bd7, 0x8bd8, 0x8bd9, 0x8bda, 0x8bdb, 0x8bdc, 0x8bdd, 0x8bde,
-  0x8bdf, 0x8be0, 0x8be1, 0x8be2, 0x8be3, 0x8be4, 0x8be5, 0x8be6,
-  0x8be7, 0x8be8, 0x8be9, 0x8bea, 0x8beb, 0x8bec, 0x8bed, 0x8bee,
-  0x8bef, 0x8bf0, 0x8bf1, 0x8bf2, 0x8bf3, 0x8bf4, 0x8bf5, 0x8bf6,
-  0x8bf7, 0x8bf8, 0x8bf9, 0x8bfa, 0x8bfb, 0x8bfc, 0x8bfd, 0x8bfe,
-  0x8c40, 0x8c41, 0x8c42, 0x8c43, 0x8c44, 0x8c45, 0x8c46, 0x8c47,
-  0x8c48, 0x8c49, 0x8c4a, 0x8c4b, 0x8c4c, 0x8c4d, 0x8c4e, 0x8c4f,
-  0x8c50, 0x8c51, 0x8c52, 0x8c53, 0x8c54, 0x8c55, 0x8c56, 0x8c57,
-  0x8c58, 0x8c59, 0x8c5a, 0x8c5b, 0x8c5c, 0x8c5d, 0x8c5e, 0x8c5f,
-  0x8c60, 0x8c61, 0x8c62, 0x8c63, 0x8c64, 0x8c65, 0x8c66, 0x8c67,
-  0x8c68, 0x8c69, 0x8c6a, 0x8c6b, 0x8c6c, 0x8c6d, 0x8c6e, 0x8c6f,
-  0x8c70, 0x8c71, 0x8c72, 0x8c73, 0x8c74, 0x8c75, 0x8c76, 0x8c77,
-  0x8c78, 0x8c79, 0x8c7a, 0x8c7b, 0x8c7c, 0x8c7d, 0x8c7e, 0x8c80,
-  0x8c81, 0x8c82, 0x8c83, 0x8c84, 0x8c85, 0x8c86, 0x8c87, 0x8c88,
-  0x8c89, 0x8c8a, 0x8c8b, 0x8c8c, 0x8c8d, 0x8c8e, 0x8c8f, 0x8c90,
-  0x8c91, 0x8c92, 0x8c93, 0x8c94, 0x8c95, 0x8c96, 0x8c97, 0x8c98,
-  0x8c99, 0x8c9a, 0x8c9b, 0x8c9c, 0x8c9d, 0x8c9e, 0x8c9f, 0x8ca0,
-  0x8ca1, 0x8ca2, 0x8ca3, 0x8ca4, 0x8ca5, 0x8ca6, 0x8ca7, 0x8ca8,
-  0x8ca9, 0x8caa, 0x8cab, 0x8cac, 0x8cad, 0x8cae, 0x8caf, 0x8cb0,
-  0x8cb1, 0x8cb2, 0x8cb3, 0x8cb4, 0x8cb5, 0x8cb6, 0x8cb7, 0x8cb8,
-  0x8cb9, 0x8cba, 0x8cbb, 0x8cbc, 0x8cbd, 0x8cbe, 0x8cbf, 0x8cc0,
-  0x8cc1, 0x8cc2, 0x8cc3, 0x8cc4, 0x8cc5, 0x8cc6, 0x8cc7, 0x8cc8,
-  0x8cc9, 0x8cca, 0x8ccb, 0x8ccc, 0x8ccd, 0x8cce, 0x8ccf, 0x8cd0,
-  0x8cd1, 0x8cd2, 0x8cd3, 0x8cd4, 0x8cd5, 0x8cd6, 0x8cd7, 0x8cd8,
-  0x8cd9, 0x8cda, 0x8cdb, 0x8cdc, 0x8cdd, 0x8cde, 0x8cdf, 0x8ce0,
-  0x8ce1, 0x8ce2, 0x8ce3, 0x8ce4, 0x8ce5, 0x8ce6, 0x8ce7, 0x8ce8,
-  0x8ce9, 0x8cea, 0x8ceb, 0x8cec, 0x8ced, 0x8cee, 0x8cef, 0x8cf0,
-  0x8cf1, 0x8cf2, 0x8cf3, 0x8cf4, 0x8cf5, 0x8cf6, 0x8cf7, 0x8cf8,
-  0x8cf9, 0x8cfa, 0x8cfb, 0x8cfc, 0x8cfd, 0x8cfe, 0x8d40, 0x8d41,
-  0x8d42, 0x8d43, 0x8d44, 0x8d45, 0x8d46, 0x8d47, 0x8d48, 0x8d49,
-  0x8d4a, 0x8d4b, 0x8d4c, 0x8d4d, 0x8d4e, 0x8d4f, 0x8d50, 0x8d51,
-  0x8d52, 0x8d53, 0x8d54, 0x8d55, 0x8d56, 0x8d57, 0x8d58, 0x8d59,
-  0x8d5a, 0x8d5b, 0x8d5c, 0x8d5d, 0x8d5e, 0x8d5f, 0x8d60, 0x8d61,
-  0x8d62, 0x8d63, 0x8d64, 0x8d65, 0x8d66, 0x8d67, 0x8d68, 0x8d69,
-  0x8d6a, 0x8d6b, 0x8d6c, 0x8d6d, 0x8d6e, 0x8d6f, 0x8d70, 0x8d71,
-  0x8d72, 0x8d73, 0x8d74, 0x8d75, 0x8d76, 0x8d77, 0x8d78, 0x8d79,
-  0x8d7a, 0x8d7b, 0x8d7c, 0x8d7d, 0x8d7e, 0x8d80, 0x8d81, 0x8d82,
-  0x8d83, 0x8d84, 0x8d85, 0x8d86, 0x8d87, 0x8d88, 0x8d89, 0x8d8a,
-  0x8d8b, 0x8d8c, 0x8d8d, 0x8d8e, 0x8d8f, 0x8d90, 0x8d91, 0x8d92,
-  0x8d93, 0x8d94, 0x8d95, 0x8d96, 0x8d97, 0x8d98, 0x8d99, 0x8d9a,
-  0x8d9b, 0x8d9c, 0x8d9d, 0x8d9e, 0x8d9f, 0x8da0, 0x8da1, 0x8da2,
-  0x8da3, 0x8da4, 0x8da5, 0x8da6, 0x8da7, 0x8da8, 0x8da9, 0x8daa,
-  0x8dab, 0x8dac, 0x8dad, 0x8dae, 0x8daf, 0x8db0, 0x8db1, 0x8db2,
-  0x8db3, 0x8db4, 0x8db5, 0x8db6, 0x8db7, 0x8db8, 0x8db9, 0x8dba,
-  0x8dbb, 0x8dbc, 0x8dbd, 0x8dbe, 0x8dbf, 0x8dc0, 0x8dc1, 0x8dc2,
-  0x8dc3, 0x8dc4, 0x8dc5, 0x8dc6, 0x8dc7, 0x8dc8, 0x8dc9, 0x8dca,
-  0x8dcb, 0x8dcc, 0x8dcd, 0x8dce, 0x8dcf, 0x8dd0, 0x8dd1, 0x8dd2,
-  0x8dd3, 0x8dd4, 0x8dd5, 0x8dd6, 0x8dd7, 0x8dd8, 0x8dd9, 0x8dda,
-  0x8ddb, 0x8ddc, 0x8ddd, 0x8dde, 0x8ddf, 0x8de0, 0x8de1, 0x8de2,
-  0x8de3, 0x8de4, 0x8de5, 0x8de6, 0x8de7, 0x8de8, 0x8de9, 0x8dea,
-  0x8deb, 0x8dec, 0x8ded, 0x8dee, 0x8def, 0x8df0, 0x8df1, 0x8df2,
-  0x8df3, 0x8df4, 0x8df5, 0x8df6, 0x8df7, 0x8df8, 0x8df9, 0x8dfa,
-  0x8dfb, 0x8dfc, 0x8dfd, 0x8dfe, 0x8e40, 0x8e41, 0x8e42, 0x8e43,
-  0x8e44, 0x8e45, 0x8e46, 0x8e47, 0x8e48, 0x8e49, 0x8e4a, 0x8e4b,
-  0x8e4c, 0x8e4d, 0x8e4e, 0x8e4f, 0x8e50, 0x8e51, 0x8e52, 0x8e53,
-  0x8e54, 0x8e55, 0x8e56, 0x8e57, 0x8e58, 0x8e59, 0x8e5a, 0x8e5b,
-  0x8e5c, 0x8e5d, 0x8e5e, 0x8e5f, 0x8e60, 0x8e61, 0x8e62, 0x8e63,
-  0x8e64, 0x8e65, 0x8e66, 0x8e67, 0x8e68, 0x8e69, 0x8e6a, 0x8e6b,
-  0x8e6c, 0x8e6d, 0x8e6e, 0x8e6f, 0x8e70, 0x8e71, 0x8e72, 0x8e73,
-  0x8e74, 0x8e75, 0x8e76, 0x8e77, 0x8e78, 0x8e79, 0x8e7a, 0x8e7b,
-  0x8e7c, 0x8e7d, 0x8e7e, 0x8e80, 0x8e81, 0x8e82, 0x8e83, 0x8e84,
-  0x8e85, 0x8e86, 0x8e87, 0x8e88, 0x8e89, 0x8e8a, 0x8e8b, 0x8e8c,
-  0x8e8d, 0x8e8e, 0x8e8f, 0x8e90, 0x8e91, 0x8e92, 0x8e93, 0x8e94,
-  0x8e95, 0x8e96, 0x8e97, 0x8e98, 0x8e99, 0x8e9a, 0x8e9b, 0x8e9c,
-  0x8e9d, 0x8e9e, 0x8e9f, 0x8ea0, 0x8ea1, 0x8ea2, 0x8ea3, 0x8ea4,
-  0x8ea5, 0x8ea6, 0x8ea7, 0x8ea8, 0x8ea9, 0x8eaa, 0x8eab, 0x8eac,
-  0x8ead, 0x8eae, 0x8eaf, 0x8eb0, 0x8eb1, 0x8eb2, 0x8eb3, 0x8eb4,
-  0x8eb5, 0x8eb6, 0x8eb7, 0x8eb8, 0x8eb9, 0x8eba, 0x8ebb, 0x8ebc,
-  0x8ebd, 0x8ebe, 0x8ebf, 0x8ec0, 0x8ec1, 0x8ec2, 0x8ec3, 0x8ec4,
-  0x8ec5, 0x8ec6, 0x8ec7, 0x8ec8, 0x8ec9, 0x8eca, 0x8ecb, 0x8ecc,
-  0x8ecd, 0x8ece, 0x8ecf, 0x8ed0, 0x8ed1, 0x8ed2, 0x8ed3, 0x8ed4,
-  0x8ed5, 0x8ed6, 0x8ed7, 0x8ed8, 0x8ed9, 0x8eda, 0x8edb, 0x8edc,
-  0x8edd, 0x8ede, 0x8edf, 0x8ee0, 0x8ee1, 0x8ee2, 0x8ee3, 0x8ee4,
-  0x8ee5, 0x8ee6, 0x8ee7, 0x8ee8, 0x8ee9, 0x8eea, 0x8eeb, 0x8eec,
-  0x8eed, 0x8eee, 0x8eef, 0x8ef0, 0x8ef1, 0x8ef2, 0x8ef3, 0x8ef4,
-  0x8ef5, 0x8ef6, 0x8ef7, 0x8ef8, 0x8ef9, 0x8efa, 0x8efb, 0x8efc,
-  0x8efd, 0x8efe, 0x8f40, 0x8f41, 0x8f42, 0x8f43, 0x8f44, 0x8f45,
-  0x8f46, 0x8f47, 0x8f48, 0x8f49, 0x8f4a, 0x8f4b, 0x8f4c, 0x8f4d,
-  0x8f4e, 0x8f4f, 0x8f50, 0x8f51, 0x8f52, 0x8f53, 0x8f54, 0x8f55,
-  0x8f56, 0x8f57, 0x8f58, 0x8f59, 0x8f5a, 0x8f5b, 0x8f5c, 0x8f5d,
-  0x8f5e, 0x8f5f, 0x8f60, 0x8f61, 0x8f62, 0x8f63, 0x8f64, 0x8f65,
-  0x8f66, 0x8f67, 0x8f68, 0x8f69, 0x8f6a, 0x8f6b, 0x8f6c, 0x8f6d,
-  0x8f6e, 0x8f6f, 0x8f70, 0x8f71, 0x8f72, 0x8f73, 0x8f74, 0x8f75,
-  0x8f76, 0x8f77, 0x8f78, 0x8f79, 0x8f7a, 0x8f7b, 0x8f7c, 0x8f7d,
-  0x8f7e, 0x8f80, 0x8f81, 0x8f82, 0x8f83, 0x8f84, 0x8f85, 0x8f86,
-  0x8f87, 0x8f88, 0x8f89, 0x8f8a, 0x8f8b, 0x8f8c, 0x8f8d, 0x8f8e,
-  0x8f8f, 0x8f90, 0x8f91, 0x8f92, 0x8f93, 0x8f94, 0x8f95, 0x8f96,
-  0x8f97, 0x8f98, 0x8f99, 0x8f9a, 0x8f9b, 0x8f9c, 0x8f9d, 0x8f9e,
-  0x8f9f, 0x8fa0, 0x8fa1, 0x8fa2, 0x8fa3, 0x8fa4, 0x8fa5, 0x8fa6,
-  0x8fa7, 0x8fa8, 0x8fa9, 0x8faa, 0x8fab, 0x8fac, 0x8fad, 0x8fae,
-  0x8faf, 0x8fb0, 0x8fb1, 0x8fb2, 0x8fb3, 0x8fb4, 0x8fb5, 0x8fb6,
-  0x8fb7, 0x8fb8, 0x8fb9, 0x8fba, 0x8fbb, 0x8fbc, 0x8fbd, 0x8fbe,
-  0x8fbf, 0x8fc0, 0x8fc1, 0x8fc2, 0x8fc3, 0x8fc4, 0x8fc5, 0x8fc6,
-  0x8fc7, 0x8fc8, 0x8fc9, 0x8fca, 0x8fcb, 0x8fcc, 0x8fcd, 0x8fce,
-  0x8fcf, 0x8fd0, 0x8fd1, 0x8fd2, 0x8fd3, 0x8fd4, 0x8fd5, 0x8fd6,
-  0x8fd7, 0x8fd8, 0x8fd9, 0x8fda, 0x8fdb, 0x8fdc, 0x8fdd, 0x8fde,
-  0x8fdf, 0x8fe0, 0x8fe1, 0x8fe2, 0x8fe3, 0x8fe4, 0x8fe5, 0x8fe6,
-  0x8fe7, 0x8fe8, 0x8fe9, 0x8fea, 0x8feb, 0x8fec, 0x8fed, 0x8fee,
-  0x8fef, 0x8ff0, 0x8ff1, 0x8ff2, 0x8ff3, 0x8ff4, 0x8ff5, 0x8ff6,
-  0x8ff7, 0x8ff8, 0x8ff9, 0x8ffa, 0x8ffb, 0x8ffc, 0x8ffd, 0x8ffe,
-  0x9040, 0x9041, 0x9042, 0x9043, 0x9044, 0x9045, 0x9046, 0x9047,
-  0x9048, 0x9049, 0x904a, 0x904b, 0x904c, 0x904d, 0x904e, 0x904f,
-  0x9050, 0x9051, 0x9052, 0x9053, 0x9054, 0x9055, 0x9056, 0x9057,
-  0x9058, 0x9059, 0x905a, 0x905b, 0x905c, 0x905d, 0x905e, 0x905f,
-  0x9060, 0x9061, 0x9062, 0x9063, 0x9064, 0x9065, 0x9066, 0x9067,
-  0x9068, 0x9069, 0x906a, 0x906b, 0x906c, 0x906d, 0x906e, 0x906f,
-  0x9070, 0x9071, 0x9072, 0x9073, 0x9074, 0x9075, 0x9076, 0x9077,
-  0x9078, 0x9079, 0x907a, 0x907b, 0x907c, 0x907d, 0x907e, 0x9080,
-  0x9081, 0x9082, 0x9083, 0x9084, 0x9085, 0x9086, 0x9087, 0x9088,
-  0x9089, 0x908a, 0x908b, 0x908c, 0x908d, 0x908e, 0x908f, 0x9090,
-  0x9091, 0x9092, 0x9093, 0x9094, 0x9095, 0x9096, 0x9097, 0x9098,
-  0x9099, 0x909a, 0x909b, 0x909c, 0x909d, 0x909e, 0x909f, 0x90a0,
-  0x90a1, 0x90a2, 0x90a3, 0x90a4, 0x90a5, 0x90a6, 0x90a7, 0x90a8,
-  0x90a9, 0x90aa, 0x90ab, 0x90ac, 0x90ad, 0x90ae, 0x90af, 0x90b0,
-  0x90b1, 0x90b2, 0x90b3, 0x90b4, 0x90b5, 0x90b6, 0x90b7, 0x90b8,
-  0x90b9, 0x90ba, 0x90bb, 0x90bc, 0x90bd, 0x90be, 0x90bf, 0x90c0,
-  0x90c1, 0x90c2, 0x90c3, 0x90c4, 0x90c5, 0x90c6, 0x90c7, 0x90c8,
-  0x90c9, 0x90ca, 0x90cb, 0x90cc, 0x90cd, 0x90ce, 0x90cf, 0x90d0,
-  0x90d1, 0x90d2, 0x90d3, 0x90d4, 0x90d5, 0x90d6, 0x90d7, 0x90d8,
-  0x90d9, 0x90da, 0x90db, 0x90dc, 0x90dd, 0x90de, 0x90df, 0x90e0,
-  0x90e1, 0x90e2, 0x90e3, 0x90e4, 0x90e5, 0x90e6, 0x90e7, 0x90e8,
-  0x90e9, 0x90ea, 0x90eb, 0x90ec, 0x90ed, 0x90ee, 0x90ef, 0x90f0,
-  0x90f1, 0x90f2, 0x90f3, 0x90f4, 0x90f5, 0x90f6, 0x90f7, 0x90f8,
-  0x90f9, 0x90fa, 0x90fb, 0x90fc, 0x90fd, 0x90fe, 0x9140, 0x9141,
-  0x9142, 0x9143, 0x9144, 0x9145, 0x9146, 0x9147, 0x9148, 0x9149,
-  0x914a, 0x914b, 0x914c, 0x914d, 0x914e, 0x914f, 0x9150, 0x9151,
-  0x9152, 0x9153, 0x9154, 0x9155, 0x9156, 0x9157, 0x9158, 0x9159,
-  0x915a, 0x915b, 0x915c, 0x915d, 0x915e, 0x915f, 0x9160, 0x9161,
-  0x9162, 0x9163, 0x9164, 0x9165, 0x9166, 0x9167, 0x9168, 0x9169,
-  0x916a, 0x916b, 0x916c, 0x916d, 0x916e, 0x916f, 0x9170, 0x9171,
-  0x9172, 0x9173, 0x9174, 0x9175, 0x9176, 0x9177, 0x9178, 0x9179,
-  0x917a, 0x917b, 0x917c, 0x917d, 0x917e, 0x9180, 0x9181, 0x9182,
-  0x9183, 0x9184, 0x9185, 0x9186, 0x9187, 0x9188, 0x9189, 0x918a,
-  0x918b, 0x918c, 0x918d, 0x918e, 0x918f, 0x9190, 0x9191, 0x9192,
-  0x9193, 0x9194, 0x9195, 0x9196, 0x9197, 0x9198, 0x9199, 0x919a,
-  0x919b, 0x919c, 0x919d, 0x919e, 0x919f, 0x91a0, 0x91a1, 0x91a2,
-  0x91a3, 0x91a4, 0x91a5, 0x91a6, 0x91a7, 0x91a8, 0x91a9, 0x91aa,
-  0x91ab, 0x91ac, 0x91ad, 0x91ae, 0x91af, 0x91b0, 0x91b1, 0x91b2,
-  0x91b3, 0x91b4, 0x91b5, 0x91b6, 0x91b7, 0x91b8, 0x91b9, 0x91ba,
-  0x91bb, 0x91bc, 0x91bd, 0x91be, 0x91bf, 0x91c0, 0x91c1, 0x91c2,
-  0x91c3, 0x91c4, 0x91c5, 0x91c6, 0x91c7, 0x91c8, 0x91c9, 0x91ca,
-  0x91cb, 0x91cc, 0x91cd, 0x91ce, 0x91cf, 0x91d0, 0x91d1, 0x91d2,
-  0x91d3, 0x91d4, 0x91d5, 0x91d6, 0x91d7, 0x91d8, 0x91d9, 0x91da,
-  0x91db, 0x91dc, 0x91dd, 0x91de, 0x91df, 0x91e0, 0x91e1, 0x91e2,
-  0x91e3, 0x91e4, 0x91e5, 0x91e6, 0x91e7, 0x91e8, 0x91e9, 0x91ea,
-  0x91eb, 0x91ec, 0x91ed, 0x91ee, 0x91ef, 0x91f0, 0x91f1, 0x91f2,
-  0x91f3, 0x91f4, 0x91f5, 0x91f6, 0x91f7, 0x91f8, 0x91f9, 0x91fa,
-  0x91fb, 0x91fc, 0x91fd, 0x91fe, 0x9240, 0x9241, 0x9242, 0x9243,
-  0x9244, 0x9245, 0x9246, 0x9247, 0x9248, 0x9249, 0x924a, 0x924b,
-  0x924c, 0x924d, 0x924e, 0x924f, 0x9250, 0x9251, 0x9252, 0x9253,
-  0x9254, 0x9255, 0x9256, 0x9257, 0x9258, 0x9259, 0x925a, 0x925b,
-  0x925c, 0x925d, 0x925e, 0x925f, 0x9260, 0x9261, 0x9262, 0x9263,
-  0x9264, 0x9265, 0x9266, 0x9267, 0x9268, 0x9269, 0x926a, 0x926b,
-  0x926c, 0x926d, 0x926e, 0x926f, 0x9270, 0x9271, 0x9272, 0x9273,
-  0x9274, 0x9275, 0x9276, 0x9277, 0x9278, 0x9279, 0x927a, 0x927b,
-  0x927c, 0x927d, 0x927e, 0x9280, 0x9281, 0x9282, 0x9283, 0x9284,
-  0x9285, 0x9286, 0x9287, 0x9288, 0x9289, 0x928a, 0x928b, 0x928c,
-  0x928d, 0x928e, 0x928f, 0x9290, 0x9291, 0x9292, 0x9293, 0x9294,
-  0x9295, 0x9296, 0x9297, 0x9298, 0x9299, 0x929a, 0x929b, 0x929c,
-  0x929d, 0x929e, 0x929f, 0x92a0, 0x92a1, 0x92a2, 0x92a3, 0x92a4,
-  0x92a5, 0x92a6, 0x92a7, 0x92a8, 0x92a9, 0x92aa, 0x92ab, 0x92ac,
-  0x92ad, 0x92ae, 0x92af, 0x92b0, 0x92b1, 0x92b2, 0x92b3, 0x92b4,
-  0x92b5, 0x92b6, 0x92b7, 0x92b8, 0x92b9, 0x92ba, 0x92bb, 0x92bc,
-  0x92bd, 0x92be, 0x92bf, 0x92c0, 0x92c1, 0x92c2, 0x92c3, 0x92c4,
-  0x92c5, 0x92c6, 0x92c7, 0x92c8, 0x92c9, 0x92ca, 0x92cb, 0x92cc,
-  0x92cd, 0x92ce, 0x92cf, 0x92d0, 0x92d1, 0x92d2, 0x92d3, 0x92d4,
-  0x92d5, 0x92d6, 0x92d7, 0x92d8, 0x92d9, 0x92da, 0x92db, 0x92dc,
-  0x92dd, 0x92de, 0x92df, 0x92e0, 0x92e1, 0x92e2, 0x92e3, 0x92e4,
-  0x92e5, 0x92e6, 0x92e7, 0x92e8, 0x92e9, 0x92ea, 0x92eb, 0x92ec,
-  0x92ed, 0x92ee, 0x92ef, 0x92f0, 0x92f1, 0x92f2, 0x92f3, 0x92f4,
-  0x92f5, 0x92f6, 0x92f7, 0x92f8, 0x92f9, 0x92fa, 0x92fb, 0x92fc,
-  0x92fd, 0x92fe, 0x9340, 0x9341, 0x9342, 0x9343, 0x9344, 0x9345,
-  0x9346, 0x9347, 0x9348, 0x9349, 0x934a, 0x934b, 0x934c, 0x934d,
-  0x934e, 0x934f, 0x9350, 0x9351, 0x9352, 0x9353, 0x9354, 0x9355,
-  0x9356, 0x9357, 0x9358, 0x9359, 0x935a, 0x935b, 0x935c, 0x935d,
-  0x935e, 0x935f, 0x9360, 0x9361, 0x9362, 0x9363, 0x9364, 0x9365,
-  0x9366, 0x9367, 0x9368, 0x9369, 0x936a, 0x936b, 0x936c, 0x936d,
-  0x936e, 0x936f, 0x9370, 0x9371, 0x9372, 0x9373, 0x9374, 0x9375,
-  0x9376, 0x9377, 0x9378, 0x9379, 0x937a, 0x937b, 0x937c, 0x937d,
-  0x937e, 0x9380, 0x9381, 0x9382, 0x9383, 0x9384, 0x9385, 0x9386,
-  0x9387, 0x9388, 0x9389, 0x938a, 0x938b, 0x938c, 0x938d, 0x938e,
-  0x938f, 0x9390, 0x9391, 0x9392, 0x9393, 0x9394, 0x9395, 0x9396,
-  0x9397, 0x9398, 0x9399, 0x939a, 0x939b, 0x939c, 0x939d, 0x939e,
-  0x939f, 0x93a0, 0x93a1, 0x93a2, 0x93a3, 0x93a4, 0x93a5, 0x93a6,
-  0x93a7, 0x93a8, 0x93a9, 0x93aa, 0x93ab, 0x93ac, 0x93ad, 0x93ae,
-  0x93af, 0x93b0, 0x93b1, 0x93b2, 0x93b3, 0x93b4, 0x93b5, 0x93b6,
-  0x93b7, 0x93b8, 0x93b9, 0x93ba, 0x93bb, 0x93bc, 0x93bd, 0x93be,
-  0x93bf, 0x93c0, 0x93c1, 0x93c2, 0x93c3, 0x93c4, 0x93c5, 0x93c6,
-  0x93c7, 0x93c8, 0x93c9, 0x93ca, 0x93cb, 0x93cc, 0x93cd, 0x93ce,
-  0x93cf, 0x93d0, 0x93d1, 0x93d2, 0x93d3, 0x93d4, 0x93d5, 0x93d6,
-  0x93d7, 0x93d8, 0x93d9, 0x93da, 0x93db, 0x93dc, 0x93dd, 0x93de,
-  0x93df, 0x93e0, 0x93e1, 0x93e2, 0x93e3, 0x93e4, 0x93e5, 0x93e6,
-  0x93e7, 0x93e8, 0x93e9, 0x93ea, 0x93eb, 0x93ec, 0x93ed, 0x93ee,
-  0x93ef, 0x93f0, 0x93f1, 0x93f2, 0x93f3, 0x93f4, 0x93f5, 0x93f6,
-  0x93f7, 0x93f8, 0x93f9, 0x93fa, 0x93fb, 0x93fc, 0x93fd, 0x93fe,
-  0x9440, 0x9441, 0x9442, 0x9443, 0x9444, 0x9445, 0x9446, 0x9447,
-  0x9448, 0x9449, 0x944a, 0x944b, 0x944c, 0x944d, 0x944e, 0x944f,
-  0x9450, 0x9451, 0x9452, 0x9453, 0x9454, 0x9455, 0x9456, 0x9457,
-  0x9458, 0x9459, 0x945a, 0x945b, 0x945c, 0x945d, 0x945e, 0x945f,
-  0x9460, 0x9461, 0x9462, 0x9463, 0x9464, 0x9465, 0x9466, 0x9467,
-  0x9468, 0x9469, 0x946a, 0x946b, 0x946c, 0x946d, 0x946e, 0x946f,
-  0x9470, 0x9471, 0x9472, 0x9473, 0x9474, 0x9475, 0x9476, 0x9477,
-  0x9478, 0x9479, 0x947a, 0x947b, 0x947c, 0x947d, 0x947e, 0x9480,
-  0x9481, 0x9482, 0x9483, 0x9484, 0x9485, 0x9486, 0x9487, 0x9488,
-  0x9489, 0x948a, 0x948b, 0x948c, 0x948d, 0x948e, 0x948f, 0x9490,
-  0x9491, 0x9492, 0x9493, 0x9494, 0x9495, 0x9496, 0x9497, 0x9498,
-  0x9499, 0x949a, 0x949b, 0x949c, 0x949d, 0x949e, 0x949f, 0x94a0,
-  0x94a1, 0x94a2, 0x94a3, 0x94a4, 0x94a5, 0x94a6, 0x94a7, 0x94a8,
-  0x94a9, 0x94aa, 0x94ab, 0x94ac, 0x94ad, 0x94ae, 0x94af, 0x94b0,
-  0x94b1, 0x94b2, 0x94b3, 0x94b4, 0x94b5, 0x94b6, 0x94b7, 0x94b8,
-  0x94b9, 0x94ba, 0x94bb, 0x94bc, 0x94bd, 0x94be, 0x94bf, 0x94c0,
-  0x94c1, 0x94c2, 0x94c3, 0x94c4, 0x94c5, 0x94c6, 0x94c7, 0x94c8,
-  0x94c9, 0x94ca, 0x94cb, 0x94cc, 0x94cd, 0x94ce, 0x94cf, 0x94d0,
-  0x94d1, 0x94d2, 0x94d3, 0x94d4, 0x94d5, 0x94d6, 0x94d7, 0x94d8,
-  0x94d9, 0x94da, 0x94db, 0x94dc, 0x94dd, 0x94de, 0x94df, 0x94e0,
-  0x94e1, 0x94e2, 0x94e3, 0x94e4, 0x94e5, 0x94e6, 0x94e7, 0x94e8,
-  0x94e9, 0x94ea, 0x94eb, 0x94ec, 0x94ed, 0x94ee, 0x94ef, 0x94f0,
-  0x94f1, 0x94f2, 0x94f3, 0x94f4, 0x94f5, 0x94f6, 0x94f7, 0x94f8,
-  0x94f9, 0x94fa, 0x94fb, 0x94fc, 0x94fd, 0x94fe, 0x9540, 0x9541,
-  0x9542, 0x9543, 0x9544, 0x9545, 0x9546, 0x9547, 0x9548, 0x9549,
-  0x954a, 0x954b, 0x954c, 0x954d, 0x954e, 0x954f, 0x9550, 0x9551,
-  0x9552, 0x9553, 0x9554, 0x9555, 0x9556, 0x9557, 0x9558, 0x9559,
-  0x955a, 0x955b, 0x955c, 0x955d, 0x955e, 0x955f, 0x9560, 0x9561,
-  0x9562, 0x9563, 0x9564, 0x9565, 0x9566, 0x9567, 0x9568, 0x9569,
-  0x956a, 0x956b, 0x956c, 0x956d, 0x956e, 0x956f, 0x9570, 0x9571,
-  0x9572, 0x9573, 0x9574, 0x9575, 0x9576, 0x9577, 0x9578, 0x9579,
-  0x957a, 0x957b, 0x957c, 0x957d, 0x957e, 0x9580, 0x9581, 0x9582,
-  0x9583, 0x9584, 0x9585, 0x9586, 0x9587, 0x9588, 0x9589, 0x958a,
-  0x958b, 0x958c, 0x958d, 0x958e, 0x958f, 0x9590, 0x9591, 0x9592,
-  0x9593, 0x9594, 0x9595, 0x9596, 0x9597, 0x9598, 0x9599, 0x959a,
-  0x959b, 0x959c, 0x959d, 0x959e, 0x959f, 0x95a0, 0x95a1, 0x95a2,
-  0x95a3, 0x95a4, 0x95a5, 0x95a6, 0x95a7, 0x95a8, 0x95a9, 0x95aa,
-  0x95ab, 0x95ac, 0x95ad, 0x95ae, 0x95af, 0x95b0, 0x95b1, 0x95b2,
-  0x95b3, 0x95b4, 0x95b5, 0x95b6, 0x95b7, 0x95b8, 0x95b9, 0x95ba,
-  0x95bb, 0x95bc, 0x95bd, 0x95be, 0x95bf, 0x95c0, 0x95c1, 0x95c2,
-  0x95c3, 0x95c4, 0x95c5, 0x95c6, 0x95c7, 0x95c8, 0x95c9, 0x95ca,
-  0x95cb, 0x95cc, 0x95cd, 0x95ce, 0x95cf, 0x95d0, 0x95d1, 0x95d2,
-  0x95d3, 0x95d4, 0x95d5, 0x95d6, 0x95d7, 0x95d8, 0x95d9, 0x95da,
-  0x95db, 0x95dc, 0x95dd, 0x95de, 0x95df, 0x95e0, 0x95e1, 0x95e2,
-  0x95e3, 0x95e4, 0x95e5, 0x95e6, 0x95e7, 0x95e8, 0x95e9, 0x95ea,
-  0x95eb, 0x95ec, 0x95ed, 0x95ee, 0x95ef, 0x95f0, 0x95f1, 0x95f2,
-  0x95f3, 0x95f4, 0x95f5, 0x95f6, 0x95f7, 0x95f8, 0x95f9, 0x95fa,
-  0x95fb, 0x95fc, 0x95fd, 0x95fe, 0x9640, 0x9641, 0x9642, 0x9643,
-  0x9644, 0x9645, 0x9646, 0x9647, 0x9648, 0x9649, 0x964a, 0x964b,
-  0x964c, 0x964d, 0x964e, 0x964f, 0x9650, 0x9651, 0x9652, 0x9653,
-  0x9654, 0x9655, 0x9656, 0x9657, 0x9658, 0x9659, 0x965a, 0x965b,
-  0x965c, 0x965d, 0x965e, 0x965f, 0x9660, 0x9661, 0x9662, 0x9663,
-  0x9664, 0x9665, 0x9666, 0x9667, 0x9668, 0x9669, 0x966a, 0x966b,
-  0x966c, 0x966d, 0x966e, 0x966f, 0x9670, 0x9671, 0x9672, 0x9673,
-  0x9674, 0x9675, 0x9676, 0x9677, 0x9678, 0x9679, 0x967a, 0x967b,
-  0x967c, 0x967d, 0x967e, 0x9680, 0x9681, 0x9682, 0x9683, 0x9684,
-  0x9685, 0x9686, 0x9687, 0x9688, 0x9689, 0x968a, 0x968b, 0x968c,
-  0x968d, 0x968e, 0x968f, 0x9690, 0x9691, 0x9692, 0x9693, 0x9694,
-  0x9695, 0x9696, 0x9697, 0x9698, 0x9699, 0x969a, 0x969b, 0x969c,
-  0x969d, 0x969e, 0x969f, 0x96a0, 0x96a1, 0x96a2, 0x96a3, 0x96a4,
-  0x96a5, 0x96a6, 0x96a7, 0x96a8, 0x96a9, 0x96aa, 0x96ab, 0x96ac,
-  0x96ad, 0x96ae, 0x96af, 0x96b0, 0x96b1, 0x96b2, 0x96b3, 0x96b4,
-  0x96b5, 0x96b6, 0x96b7, 0x96b8, 0x96b9, 0x96ba, 0x96bb, 0x96bc,
-  0x96bd, 0x96be, 0x96bf, 0x96c0, 0x96c1, 0x96c2, 0x96c3, 0x96c4,
-  0x96c5, 0x96c6, 0x96c7, 0x96c8, 0x96c9, 0x96ca, 0x96cb, 0x96cc,
-  0x96cd, 0x96ce, 0x96cf, 0x96d0, 0x96d1, 0x96d2, 0x96d3, 0x96d4,
-  0x96d5, 0x96d6, 0x96d7, 0x96d8, 0x96d9, 0x96da, 0x96db, 0x96dc,
-  0x96dd, 0x96de, 0x96df, 0x96e0, 0x96e1, 0x96e2, 0x96e3, 0x96e4,
-  0x96e5, 0x96e6, 0x96e7, 0x96e8, 0x96e9, 0x96ea, 0x96eb, 0x96ec,
-  0x96ed, 0x96ee, 0x96ef, 0x96f0, 0x96f1, 0x96f2, 0x96f3, 0x96f4,
-  0x96f5, 0x96f6, 0x96f7, 0x96f8, 0x96f9, 0x96fa, 0x96fb, 0x96fc,
-  0x96fd, 0x96fe, 0x9740, 0x9741, 0x9742, 0x9743, 0x9744, 0x9745,
-  0x9746, 0x9747, 0x9748, 0x9749, 0x974a, 0x974b, 0x974c, 0x974d,
-  0x974e, 0x974f, 0x9750, 0x9751, 0x9752, 0x9753, 0x9754, 0x9755,
-  0x9756, 0x9757, 0x9758, 0x9759, 0x975a, 0x975b, 0x975c, 0x975d,
-  0x975e, 0x975f, 0x9760, 0x9761, 0x9762, 0x9763, 0x9764, 0x9765,
-  0x9766, 0x9767, 0x9768, 0x9769, 0x976a, 0x976b, 0x976c, 0x976d,
-  0x976e, 0x976f, 0x9770, 0x9771, 0x9772, 0x9773, 0x9774, 0x9775,
-  0x9776, 0x9777, 0x9778, 0x9779, 0x977a, 0x977b, 0x977c, 0x977d,
-  0x977e, 0x9780, 0x9781, 0x9782, 0x9783, 0x9784, 0x9785, 0x9786,
-  0x9787, 0x9788, 0x9789, 0x978a, 0x978b, 0x978c, 0x978d, 0x978e,
-  0x978f, 0x9790, 0x9791, 0x9792, 0x9793, 0x9794, 0x9795, 0x9796,
-  0x9797, 0x9798, 0x9799, 0x979a, 0x979b, 0x979c, 0x979d, 0x979e,
-  0x979f, 0x97a0, 0x97a1, 0x97a2, 0x97a3, 0x97a4, 0x97a5, 0x97a6,
-  0x97a7, 0x97a8, 0x97a9, 0x97aa, 0x97ab, 0x97ac, 0x97ad, 0x97ae,
-  0x97af, 0x97b0, 0x97b1, 0x97b2, 0x97b3, 0x97b4, 0x97b5, 0x97b6,
-  0x97b7, 0x97b8, 0x97b9, 0x97ba, 0x97bb, 0x97bc, 0x97bd, 0x97be,
-  0x97bf, 0x97c0, 0x97c1, 0x97c2, 0x97c3, 0x97c4, 0x97c5, 0x97c6,
-  0x97c7, 0x97c8, 0x97c9, 0x97ca, 0x97cb, 0x97cc, 0x97cd, 0x97ce,
-  0x97cf, 0x97d0, 0x97d1, 0x97d2, 0x97d3, 0x97d4, 0x97d5, 0x97d6,
-  0x97d7, 0x97d8, 0x97d9, 0x97da, 0x97db, 0x97dc, 0x97dd, 0x97de,
-  0x97df, 0x97e0, 0x97e1, 0x97e2, 0x97e3, 0x97e4, 0x97e5, 0x97e6,
-  0x97e7, 0x97e8, 0x97e9, 0x97ea, 0x97eb, 0x97ec, 0x97ed, 0x97ee,
-  0x97ef, 0x97f0, 0x97f1, 0x97f2, 0x97f3, 0x97f4, 0x97f5, 0x97f6,
-  0x97f7, 0x97f8, 0x97f9, 0x97fa, 0x97fb, 0x97fc, 0x97fd, 0x97fe,
-  0x9840, 0x9841, 0x9842, 0x9843, 0x9844, 0x9845, 0x9846, 0x9847,
-  0x9848, 0x9849, 0x984a, 0x984b, 0x984c, 0x984d, 0x984e, 0x984f,
-  0x9850, 0x9851, 0x9852, 0x9853, 0x9854, 0x9855, 0x9856, 0x9857,
-  0x9858, 0x9859, 0x985a, 0x985b, 0x985c, 0x985d, 0x985e, 0x985f,
-  0x9860, 0x9861, 0x9862, 0x9863, 0x9864, 0x9865, 0x9866, 0x9867,
-  0x9868, 0x9869, 0x986a, 0x986b, 0x986c, 0x986d, 0x986e, 0x986f,
-  0x9870, 0x9871, 0x9872, 0x9873, 0x9874, 0x9875, 0x9876, 0x9877,
-  0x9878, 0x9879, 0x987a, 0x987b, 0x987c, 0x987d, 0x987e, 0x9880,
-  0x9881, 0x9882, 0x9883, 0x9884, 0x9885, 0x9886, 0x9887, 0x9888,
-  0x9889, 0x988a, 0x988b, 0x988c, 0x988d, 0x988e, 0x988f, 0x9890,
-  0x9891, 0x9892, 0x9893, 0x9894, 0x9895, 0x9896, 0x9897, 0x9898,
-  0x9899, 0x989a, 0x989b, 0x989c, 0x989d, 0x989e, 0x989f, 0x98a0,
-  0x98a1, 0x98a2, 0x98a3, 0x98a4, 0x98a5, 0x98a6, 0x98a7, 0x98a8,
-  0x98a9, 0x98aa, 0x98ab, 0x98ac, 0x98ad, 0x98ae, 0x98af, 0x98b0,
-  0x98b1, 0x98b2, 0x98b3, 0x98b4, 0x98b5, 0x98b6, 0x98b7, 0x98b8,
-  0x98b9, 0x98ba, 0x98bb, 0x98bc, 0x98bd, 0x98be, 0x98bf, 0x98c0,
-  0x98c1, 0x98c2, 0x98c3, 0x98c4, 0x98c5, 0x98c6, 0x98c7, 0x98c8,
-  0x98c9, 0x98ca, 0x98cb, 0x98cc, 0x98cd, 0x98ce, 0x98cf, 0x98d0,
-  0x98d1, 0x98d2, 0x98d3, 0x98d4, 0x98d5, 0x98d6, 0x98d7, 0x98d8,
-  0x98d9, 0x98da, 0x98db, 0x98dc, 0x98dd, 0x98de, 0x98df, 0x98e0,
-  0x98e1, 0x98e2, 0x98e3, 0x98e4, 0x98e5, 0x98e6, 0x98e7, 0x98e8,
-  0x98e9, 0x98ea, 0x98eb, 0x98ec, 0x98ed, 0x98ee, 0x98ef, 0x98f0,
-  0x98f1, 0x98f2, 0x98f3, 0x98f4, 0x98f5, 0x98f6, 0x98f7, 0x98f8,
-  0x98f9, 0x98fa, 0x98fb, 0x98fc, 0x98fd, 0x98fe, 0x9940, 0x9941,
-  0x9942, 0x9943, 0x9944, 0x9945, 0x9946, 0x9947, 0x9948, 0x9949,
-  0x994a, 0x994b, 0x994c, 0x994d, 0x994e, 0x994f, 0x9950, 0x9951,
-  0x9952, 0x9953, 0x9954, 0x9955, 0x9956, 0x9957, 0x9958, 0x9959,
-  0x995a, 0x995b, 0x995c, 0x995d, 0x995e, 0x995f, 0x9960, 0x9961,
-  0x9962, 0x9963, 0x9964, 0x9965, 0x9966, 0x9967, 0x9968, 0x9969,
-  0x996a, 0x996b, 0x996c, 0x996d, 0x996e, 0x996f, 0x9970, 0x9971,
-  0x9972, 0x9973, 0x9974, 0x9975, 0x9976, 0x9977, 0x9978, 0x9979,
-  0x997a, 0x997b, 0x997c, 0x997d, 0x997e, 0x9980, 0x9981, 0x9982,
-  0x9983, 0x9984, 0x9985, 0x9986, 0x9987, 0x9988, 0x9989, 0x998a,
-  0x998b, 0x998c, 0x998d, 0x998e, 0x998f, 0x9990, 0x9991, 0x9992,
-  0x9993, 0x9994, 0x9995, 0x9996, 0x9997, 0x9998, 0x9999, 0x999a,
-  0x999b, 0x999c, 0x999d, 0x999e, 0x999f, 0x99a0, 0x99a1, 0x99a2,
-  0x99a3, 0x99a4, 0x99a5, 0x99a6, 0x99a7, 0x99a8, 0x99a9, 0x99aa,
-  0x99ab, 0x99ac, 0x99ad, 0x99ae, 0x99af, 0x99b0, 0x99b1, 0x99b2,
-  0x99b3, 0x99b4, 0x99b5, 0x99b6, 0x99b7, 0x99b8, 0x99b9, 0x99ba,
-  0x99bb, 0x99bc, 0x99bd, 0x99be, 0x99bf, 0x99c0, 0x99c1, 0x99c2,
-  0x99c3, 0x99c4, 0x99c5, 0x99c6, 0x99c7, 0x99c8, 0x99c9, 0x99ca,
-  0x99cb, 0x99cc, 0x99cd, 0x99ce, 0x99cf, 0x99d0, 0x99d1, 0x99d2,
-  0x99d3, 0x99d4, 0x99d5, 0x99d6, 0x99d7, 0x99d8, 0x99d9, 0x99da,
-  0x99db, 0x99dc, 0x99dd, 0x99de, 0x99df, 0x99e0, 0x99e1, 0x99e2,
-  0x99e3, 0x99e4, 0x99e5, 0x99e6, 0x99e7, 0x99e8, 0x99e9, 0x99ea,
-  0x99eb, 0x99ec, 0x99ed, 0x99ee, 0x99ef, 0x99f0, 0x99f1, 0x99f2,
-  0x99f3, 0x99f4, 0x99f5, 0x99f6, 0x99f7, 0x99f8, 0x99f9, 0x99fa,
-  0x99fb, 0x99fc, 0x99fd, 0x99fe, 0x9a40, 0x9a41, 0x9a42, 0x9a43,
-  0x9a44, 0x9a45, 0x9a46, 0x9a47, 0x9a48, 0x9a49, 0x9a4a, 0x9a4b,
-  0x9a4c, 0x9a4d, 0x9a4e, 0x9a4f, 0x9a50, 0x9a51, 0x9a52, 0x9a53,
-  0x9a54, 0x9a55, 0x9a56, 0x9a57, 0x9a58, 0x9a59, 0x9a5a, 0x9a5b,
-  0x9a5c, 0x9a5d, 0x9a5e, 0x9a5f, 0x9a60, 0x9a61, 0x9a62, 0x9a63,
-  0x9a64, 0x9a65, 0x9a66, 0x9a67, 0x9a68, 0x9a69, 0x9a6a, 0x9a6b,
-  0x9a6c, 0x9a6d, 0x9a6e, 0x9a6f, 0x9a70, 0x9a71, 0x9a72, 0x9a73,
-  0x9a74, 0x9a75, 0x9a76, 0x9a77, 0x9a78, 0x9a79, 0x9a7a, 0x9a7b,
-  0x9a7c, 0x9a7d, 0x9a7e, 0x9a80, 0x9a81, 0x9a82, 0x9a83, 0x9a84,
-  0x9a85, 0x9a86, 0x9a87, 0x9a88, 0x9a89, 0x9a8a, 0x9a8b, 0x9a8c,
-  0x9a8d, 0x9a8e, 0x9a8f, 0x9a90, 0x9a91, 0x9a92, 0x9a93, 0x9a94,
-  0x9a95, 0x9a96, 0x9a97, 0x9a98, 0x9a99, 0x9a9a, 0x9a9b, 0x9a9c,
-  0x9a9d, 0x9a9e, 0x9a9f, 0x9aa0, 0x9aa1, 0x9aa2, 0x9aa3, 0x9aa4,
-  0x9aa5, 0x9aa6, 0x9aa7, 0x9aa8, 0x9aa9, 0x9aaa, 0x9aab, 0x9aac,
-  0x9aad, 0x9aae, 0x9aaf, 0x9ab0, 0x9ab1, 0x9ab2, 0x9ab3, 0x9ab4,
-  0x9ab5, 0x9ab6, 0x9ab7, 0x9ab8, 0x9ab9, 0x9aba, 0x9abb, 0x9abc,
-  0x9abd, 0x9abe, 0x9abf, 0x9ac0, 0x9ac1, 0x9ac2, 0x9ac3, 0x9ac4,
-  0x9ac5, 0x9ac6, 0x9ac7, 0x9ac8, 0x9ac9, 0x9aca, 0x9acb, 0x9acc,
-  0x9acd, 0x9ace, 0x9acf, 0x9ad0, 0x9ad1, 0x9ad2, 0x9ad3, 0x9ad4,
-  0x9ad5, 0x9ad6, 0x9ad7, 0x9ad8, 0x9ad9, 0x9ada, 0x9adb, 0x9adc,
-  0x9add, 0x9ade, 0x9adf, 0x9ae0, 0x9ae1, 0x9ae2, 0x9ae3, 0x9ae4,
-  0x9ae5, 0x9ae6, 0x9ae7, 0x9ae8, 0x9ae9, 0x9aea, 0x9aeb, 0x9aec,
-  0x9aed, 0x9aee, 0x9aef, 0x9af0, 0x9af1, 0x9af2, 0x9af3, 0x9af4,
-  0x9af5, 0x9af6, 0x9af7, 0x9af8, 0x9af9, 0x9afa, 0x9afb, 0x9afc,
-  0x9afd, 0x9afe, 0x9b40, 0x9b41, 0x9b42, 0x9b43, 0x9b44, 0x9b45,
-  0x9b46, 0x9b47, 0x9b48, 0x9b49, 0x9b4a, 0x9b4b, 0x9b4c, 0x9b4d,
-  0x9b4e, 0x9b4f, 0x9b50, 0x9b51, 0x9b52, 0x9b53, 0x9b54, 0x9b55,
-  0x9b56, 0x9b57, 0x9b58, 0x9b59, 0x9b5a, 0x9b5b, 0x9b5c, 0x9b5d,
-  0x9b5e, 0x9b5f, 0x9b60, 0x9b61, 0x9b62, 0x9b63, 0x9b64, 0x9b65,
-  0x9b66, 0x9b67, 0x9b68, 0x9b69, 0x9b6a, 0x9b6b, 0x9b6c, 0x9b6d,
-  0x9b6e, 0x9b6f, 0x9b70, 0x9b71, 0x9b72, 0x9b73, 0x9b74, 0x9b75,
-  0x9b76, 0x9b77, 0x9b78, 0x9b79, 0x9b7a, 0x9b7b, 0x9b7c, 0x9b7d,
-  0x9b7e, 0x9b80, 0x9b81, 0x9b82, 0x9b83, 0x9b84, 0x9b85, 0x9b86,
-  0x9b87, 0x9b88, 0x9b89, 0x9b8a, 0x9b8b, 0x9b8c, 0x9b8d, 0x9b8e,
-  0x9b8f, 0x9b90, 0x9b91, 0x9b92, 0x9b93, 0x9b94, 0x9b95, 0x9b96,
-  0x9b97, 0x9b98, 0x9b99, 0x9b9a, 0x9b9b, 0x9b9c, 0x9b9d, 0x9b9e,
-  0x9b9f, 0x9ba0, 0x9ba1, 0x9ba2, 0x9ba3, 0x9ba4, 0x9ba5, 0x9ba6,
-  0x9ba7, 0x9ba8, 0x9ba9, 0x9baa, 0x9bab, 0x9bac, 0x9bad, 0x9bae,
-  0x9baf, 0x9bb0, 0x9bb1, 0x9bb2, 0x9bb3, 0x9bb4, 0x9bb5, 0x9bb6,
-  0x9bb7, 0x9bb8, 0x9bb9, 0x9bba, 0x9bbb, 0x9bbc, 0x9bbd, 0x9bbe,
-  0x9bbf, 0x9bc0, 0x9bc1, 0x9bc2, 0x9bc3, 0x9bc4, 0x9bc5, 0x9bc6,
-  0x9bc7, 0x9bc8, 0x9bc9, 0x9bca, 0x9bcb, 0x9bcc, 0x9bcd, 0x9bce,
-  0x9bcf, 0x9bd0, 0x9bd1, 0x9bd2, 0x9bd3, 0x9bd4, 0x9bd5, 0x9bd6,
-  0x9bd7, 0x9bd8, 0x9bd9, 0x9bda, 0x9bdb, 0x9bdc, 0x9bdd, 0x9bde,
-  0x9bdf, 0x9be0, 0x9be1, 0x9be2, 0x9be3, 0x9be4, 0x9be5, 0x9be6,
-  0x9be7, 0x9be8, 0x9be9, 0x9bea, 0x9beb, 0x9bec, 0x9bed, 0x9bee,
-  0x9bef, 0x9bf0, 0x9bf1, 0x9bf2, 0x9bf3, 0x9bf4, 0x9bf5, 0x9bf6,
-  0x9bf7, 0x9bf8, 0x9bf9, 0x9bfa, 0x9bfb, 0x9bfc, 0x9bfd, 0x9bfe,
-  0x9c40, 0x9c41, 0x9c42, 0x9c43, 0x9c44, 0x9c45, 0x9c46, 0x9c47,
-  0x9c48, 0x9c49, 0x9c4a, 0x9c4b, 0x9c4c, 0x9c4d, 0x9c4e, 0x9c4f,
-  0x9c50, 0x9c51, 0x9c52, 0x9c53, 0x9c54, 0x9c55, 0x9c56, 0x9c57,
-  0x9c58, 0x9c59, 0x9c5a, 0x9c5b, 0x9c5c, 0x9c5d, 0x9c5e, 0x9c5f,
-  0x9c60, 0x9c61, 0x9c62, 0x9c63, 0x9c64, 0x9c65, 0x9c66, 0x9c67,
-  0x9c68, 0x9c69, 0x9c6a, 0x9c6b, 0x9c6c, 0x9c6d, 0x9c6e, 0x9c6f,
-  0x9c70, 0x9c71, 0x9c72, 0x9c73, 0x9c74, 0x9c75, 0x9c76, 0x9c77,
-  0x9c78, 0x9c79, 0x9c7a, 0x9c7b, 0x9c7c, 0x9c7d, 0x9c7e, 0x9c80,
-  0x9c81, 0x9c82, 0x9c83, 0x9c84, 0x9c85, 0x9c86, 0x9c87, 0x9c88,
-  0x9c89, 0x9c8a, 0x9c8b, 0x9c8c, 0x9c8d, 0x9c8e, 0x9c8f, 0x9c90,
-  0x9c91, 0x9c92, 0x9c93, 0x9c94, 0x9c95, 0x9c96, 0x9c97, 0x9c98,
-  0x9c99, 0x9c9a, 0x9c9b, 0x9c9c, 0x9c9d, 0x9c9e, 0x9c9f, 0x9ca0,
-  0x9ca1, 0x9ca2, 0x9ca3, 0x9ca4, 0x9ca5, 0x9ca6, 0x9ca7, 0x9ca8,
-  0x9ca9, 0x9caa, 0x9cab, 0x9cac, 0x9cad, 0x9cae, 0x9caf, 0x9cb0,
-  0x9cb1, 0x9cb2, 0x9cb3, 0x9cb4, 0x9cb5, 0x9cb6, 0x9cb7, 0x9cb8,
-  0x9cb9, 0x9cba, 0x9cbb, 0x9cbc, 0x9cbd, 0x9cbe, 0x9cbf, 0x9cc0,
-  0x9cc1, 0x9cc2, 0x9cc3, 0x9cc4, 0x9cc5, 0x9cc6, 0x9cc7, 0x9cc8,
-  0x9cc9, 0x9cca, 0x9ccb, 0x9ccc, 0x9ccd, 0x9cce, 0x9ccf, 0x9cd0,
-  0x9cd1, 0x9cd2, 0x9cd3, 0x9cd4, 0x9cd5, 0x9cd6, 0x9cd7, 0x9cd8,
-  0x9cd9, 0x9cda, 0x9cdb, 0x9cdc, 0x9cdd, 0x9cde, 0x9cdf, 0x9ce0,
-  0x9ce1, 0x9ce2, 0x9ce3, 0x9ce4, 0x9ce5, 0x9ce6, 0x9ce7, 0x9ce8,
-  0x9ce9, 0x9cea, 0x9ceb, 0x9cec, 0x9ced, 0x9cee, 0x9cef, 0x9cf0,
-  0x9cf1, 0x9cf2, 0x9cf3, 0x9cf4, 0x9cf5, 0x9cf6, 0x9cf7, 0x9cf8,
-  0x9cf9, 0x9cfa, 0x9cfb, 0x9cfc, 0x9cfd, 0x9cfe, 0x9d40, 0x9d41,
-  0x9d42, 0x9d43, 0x9d44, 0x9d45, 0x9d46, 0x9d47, 0x9d48, 0x9d49,
-  0x9d4a, 0x9d4b, 0x9d4c, 0x9d4d, 0x9d4e, 0x9d4f, 0x9d50, 0x9d51,
-  0x9d52, 0x9d53, 0x9d54, 0x9d55, 0x9d56, 0x9d57, 0x9d58, 0x9d59,
-  0x9d5a, 0x9d5b, 0x9d5c, 0x9d5d, 0x9d5e, 0x9d5f, 0x9d60, 0x9d61,
-  0x9d62, 0x9d63, 0x9d64, 0x9d65, 0x9d66, 0x9d67, 0x9d68, 0x9d69,
-  0x9d6a, 0x9d6b, 0x9d6c, 0x9d6d, 0x9d6e, 0x9d6f, 0x9d70, 0x9d71,
-  0x9d72, 0x9d73, 0x9d74, 0x9d75, 0x9d76, 0x9d77, 0x9d78, 0x9d79,
-  0x9d7a, 0x9d7b, 0x9d7c, 0x9d7d, 0x9d7e, 0x9d80, 0x9d81, 0x9d82,
-  0x9d83, 0x9d84, 0x9d85, 0x9d86, 0x9d87, 0x9d88, 0x9d89, 0x9d8a,
-  0x9d8b, 0x9d8c, 0x9d8d, 0x9d8e, 0x9d8f, 0x9d90, 0x9d91, 0x9d92,
-  0x9d93, 0x9d94, 0x9d95, 0x9d96, 0x9d97, 0x9d98, 0x9d99, 0x9d9a,
-  0x9d9b, 0x9d9c, 0x9d9d, 0x9d9e, 0x9d9f, 0x9da0, 0x9da1, 0x9da2,
-  0x9da3, 0x9da4, 0x9da5, 0x9da6, 0x9da7, 0x9da8, 0x9da9, 0x9daa,
-  0x9dab, 0x9dac, 0x9dad, 0x9dae, 0x9daf, 0x9db0, 0x9db1, 0x9db2,
-  0x9db3, 0x9db4, 0x9db5, 0x9db6, 0x9db7, 0x9db8, 0x9db9, 0x9dba,
-  0x9dbb, 0x9dbc, 0x9dbd, 0x9dbe, 0x9dbf, 0x9dc0, 0x9dc1, 0x9dc2,
-  0x9dc3, 0x9dc4, 0x9dc5, 0x9dc6, 0x9dc7, 0x9dc8, 0x9dc9, 0x9dca,
-  0x9dcb, 0x9dcc, 0x9dcd, 0x9dce, 0x9dcf, 0x9dd0, 0x9dd1, 0x9dd2,
-  0x9dd3, 0x9dd4, 0x9dd5, 0x9dd6, 0x9dd7, 0x9dd8, 0x9dd9, 0x9dda,
-  0x9ddb, 0x9ddc, 0x9ddd, 0x9dde, 0x9ddf, 0x9de0, 0x9de1, 0x9de2,
-  0x9de3, 0x9de4, 0x9de5, 0x9de6, 0x9de7, 0x9de8, 0x9de9, 0x9dea,
-  0x9deb, 0x9dec, 0x9ded, 0x9dee, 0x9def, 0x9df0, 0x9df1, 0x9df2,
-  0x9df3, 0x9df4, 0x9df5, 0x9df6, 0x9df7, 0x9df8, 0x9df9, 0x9dfa,
-  0x9dfb, 0x9dfc, 0x9dfd, 0x9dfe, 0x9e40, 0x9e41, 0x9e42, 0x9e43,
-  0x9e44, 0x9e45, 0x9e46, 0x9e47, 0x9e48, 0x9e49, 0x9e4a, 0x9e4b,
-  0x9e4c, 0x9e4d, 0x9e4e, 0x9e4f, 0x9e50, 0x9e51, 0x9e52, 0x9e53,
-  0x9e54, 0x9e55, 0x9e56, 0x9e57, 0x9e58, 0x9e59, 0x9e5a, 0x9e5b,
-  0x9e5c, 0x9e5d, 0x9e5e, 0x9e5f, 0x9e60, 0x9e61, 0x9e62, 0x9e63,
-  0x9e64, 0x9e65, 0x9e66, 0x9e67, 0x9e68, 0x9e69, 0x9e6a, 0x9e6b,
-  0x9e6c, 0x9e6d, 0x9e6e, 0x9e6f, 0x9e70, 0x9e71, 0x9e72, 0x9e73,
-  0x9e74, 0x9e75, 0x9e76, 0x9e77, 0x9e78, 0x9e79, 0x9e7a, 0x9e7b,
-  0x9e7c, 0x9e7d, 0x9e7e, 0x9e80, 0x9e81, 0x9e82, 0x9e83, 0x9e84,
-  0x9e85, 0x9e86, 0x9e87, 0x9e88, 0x9e89, 0x9e8a, 0x9e8b, 0x9e8c,
-  0x9e8d, 0x9e8e, 0x9e8f, 0x9e90, 0x9e91, 0x9e92, 0x9e93, 0x9e94,
-  0x9e95, 0x9e96, 0x9e97, 0x9e98, 0x9e99, 0x9e9a, 0x9e9b, 0x9e9c,
-  0x9e9d, 0x9e9e, 0x9e9f, 0x9ea0, 0x9ea1, 0x9ea2, 0x9ea3, 0x9ea4,
-  0x9ea5, 0x9ea6, 0x9ea7, 0x9ea8, 0x9ea9, 0x9eaa, 0x9eab, 0x9eac,
-  0x9ead, 0x9eae, 0x9eaf, 0x9eb0, 0x9eb1, 0x9eb2, 0x9eb3, 0x9eb4,
-  0x9eb5, 0x9eb6, 0x9eb7, 0x9eb8, 0x9eb9, 0x9eba, 0x9ebb, 0x9ebc,
-  0x9ebd, 0x9ebe, 0x9ebf, 0x9ec0, 0x9ec1, 0x9ec2, 0x9ec3, 0x9ec4,
-  0x9ec5, 0x9ec6, 0x9ec7, 0x9ec8, 0x9ec9, 0x9eca, 0x9ecb, 0x9ecc,
-  0x9ecd, 0x9ece, 0x9ecf, 0x9ed0, 0x9ed1, 0x9ed2, 0x9ed3, 0x9ed4,
-  0x9ed5, 0x9ed6, 0x9ed7, 0x9ed8, 0x9ed9, 0x9eda, 0x9edb, 0x9edc,
-  0x9edd, 0x9ede, 0x9edf, 0x9ee0, 0x9ee1, 0x9ee2, 0x9ee3, 0x9ee4,
-  0x9ee5, 0x9ee6, 0x9ee7, 0x9ee8, 0x9ee9, 0x9eea, 0x9eeb, 0x9eec,
-  0x9eed, 0x9eee, 0x9eef, 0x9ef0, 0x9ef1, 0x9ef2, 0x9ef3, 0x9ef4,
-  0x9ef5, 0x9ef6, 0x9ef7, 0x9ef8, 0x9ef9, 0x9efa, 0x9efb, 0x9efc,
-  0x9efd, 0x9efe, 0x9f40, 0x9f41, 0x9f42, 0x9f43, 0x9f44, 0x9f45,
-  0x9f46, 0x9f47, 0x9f48, 0x9f49, 0x9f4a, 0x9f4b, 0x9f4c, 0x9f4d,
-  0x9f4e, 0x9f4f, 0x9f50, 0x9f51, 0x9f52, 0x9f53, 0x9f54, 0x9f55,
-  0x9f56, 0x9f57, 0x9f58, 0x9f59, 0x9f5a, 0x9f5b, 0x9f5c, 0x9f5d,
-  0x9f5e, 0x9f5f, 0x9f60, 0x9f61, 0x9f62, 0x9f63, 0x9f64, 0x9f65,
-  0x9f66, 0x9f67, 0x9f68, 0x9f69, 0x9f6a, 0x9f6b, 0x9f6c, 0x9f6d,
-  0x9f6e, 0x9f6f, 0x9f70, 0x9f71, 0x9f72, 0x9f73, 0x9f74, 0x9f75,
-  0x9f76, 0x9f77, 0x9f78, 0x9f79, 0x9f7a, 0x9f7b, 0x9f7c, 0x9f7d,
-  0x9f7e, 0x9f80, 0x9f81, 0x9f82, 0x9f83, 0x9f84, 0x9f85, 0x9f86,
-  0x9f87, 0x9f88, 0x9f89, 0x9f8a, 0x9f8b, 0x9f8c, 0x9f8d, 0x9f8e,
-  0x9f8f, 0x9f90, 0x9f91, 0x9f92, 0x9f93, 0x9f94, 0x9f95, 0x9f96,
-  0x9f97, 0x9f98, 0x9f99, 0x9f9a, 0x9f9b, 0x9f9c, 0x9f9d, 0x9f9e,
-  0x9f9f, 0x9fa0, 0x9fa1, 0x9fa2, 0x9fa3, 0x9fa4, 0x9fa5, 0x9fa6,
-  0x9fa7, 0x9fa8, 0x9fa9, 0x9faa, 0x9fab, 0x9fac, 0x9fad, 0x9fae,
-  0x9faf, 0x9fb0, 0x9fb1, 0x9fb2, 0x9fb3, 0x9fb4, 0x9fb5, 0x9fb6,
-  0x9fb7, 0x9fb8, 0x9fb9, 0x9fba, 0x9fbb, 0x9fbc, 0x9fbd, 0x9fbe,
-  0x9fbf, 0x9fc0, 0x9fc1, 0x9fc2, 0x9fc3, 0x9fc4, 0x9fc5, 0x9fc6,
-  0x9fc7, 0x9fc8, 0x9fc9, 0x9fca, 0x9fcb, 0x9fcc, 0x9fcd, 0x9fce,
-  0x9fcf, 0x9fd0, 0x9fd1, 0x9fd2, 0x9fd3, 0x9fd4, 0x9fd5, 0x9fd6,
-  0x9fd7, 0x9fd8, 0x9fd9, 0x9fda, 0x9fdb, 0x9fdc, 0x9fdd, 0x9fde,
-  0x9fdf, 0x9fe0, 0x9fe1, 0x9fe2, 0x9fe3, 0x9fe4, 0x9fe5, 0x9fe6,
-  0x9fe7, 0x9fe8, 0x9fe9, 0x9fea, 0x9feb, 0x9fec, 0x9fed, 0x9fee,
-  0x9fef, 0x9ff0, 0x9ff1, 0x9ff2, 0x9ff3, 0x9ff4, 0x9ff5, 0x9ff6,
-  0x9ff7, 0x9ff8, 0x9ff9, 0x9ffa, 0x9ffb, 0x9ffc, 0x9ffd, 0x9ffe,
-  0xa040, 0xa041, 0xa042, 0xa043, 0xa044, 0xa045, 0xa046, 0xa047,
-  0xa048, 0xa049, 0xa04a, 0xa04b, 0xa04c, 0xa04d, 0xa04e, 0xa04f,
-  0xa050, 0xa051, 0xa052, 0xa053, 0xa054, 0xa055, 0xa056, 0xa057,
-  0xa058, 0xa059, 0xa05a, 0xa05b, 0xa05c, 0xa05d, 0xa05e, 0xa05f,
-  0xa060, 0xa061, 0xa062, 0xa063, 0xa064, 0xa065, 0xa066, 0xa067,
-  0xa068, 0xa069, 0xa06a, 0xa06b, 0xa06c, 0xa06d, 0xa06e, 0xa06f,
-  0xa070, 0xa071, 0xa072, 0xa073, 0xa074, 0xa075, 0xa076, 0xa077,
-  0xa078, 0xa079, 0xa07a, 0xa07b, 0xa07c, 0xa07d, 0xa07e, 0xa080,
-  0xa081, 0xa082, 0xa083, 0xa084, 0xa085, 0xa086, 0xa087, 0xa088,
-  0xa089, 0xa08a, 0xa08b, 0xa08c, 0xa08d, 0xa08e, 0xa08f, 0xa090,
-  0xa091, 0xa092, 0xa093, 0xa094, 0xa095, 0xa096, 0xa097, 0xa098,
-  0xa099, 0xa09a, 0xa09b, 0xa09c, 0xa09d, 0xa09e, 0xa09f, 0xa0a0,
-  0xa0a1, 0xa0a2, 0xa0a3, 0xa0a4, 0xa0a5, 0xa0a6, 0xa0a7, 0xa0a8,
-  0xa0a9, 0xa0aa, 0xa0ab, 0xa0ac, 0xa0ad, 0xa0ae, 0xa0af, 0xa0b0,
-  0xa0b1, 0xa0b2, 0xa0b3, 0xa0b4, 0xa0b5, 0xa0b6, 0xa0b7, 0xa0b8,
-  0xa0b9, 0xa0ba, 0xa0bb, 0xa0bc, 0xa0bd, 0xa0be, 0xa0bf, 0xa0c0,
-  0xa0c1, 0xa0c2, 0xa0c3, 0xa0c4, 0xa0c5, 0xa0c6, 0xa0c7, 0xa0c8,
-  0xa0c9, 0xa0ca, 0xa0cb, 0xa0cc, 0xa0cd, 0xa0ce, 0xa0cf, 0xa0d0,
-  0xa0d1, 0xa0d2, 0xa0d3, 0xa0d4, 0xa0d5, 0xa0d6, 0xa0d7, 0xa0d8,
-  0xa0d9, 0xa0da, 0xa0db, 0xa0dc, 0xa0dd, 0xa0de, 0xa0df, 0xa0e0,
-  0xa0e1, 0xa0e2, 0xa0e3, 0xa0e4, 0xa0e5, 0xa0e6, 0xa0e7, 0xa0e8,
-  0xa0e9, 0xa0ea, 0xa0eb, 0xa0ec, 0xa0ed, 0xa0ee, 0xa0ef, 0xa0f0,
-  0xa0f1, 0xa0f2, 0xa0f3, 0xa0f4, 0xa0f5, 0xa0f6, 0xa0f7, 0xa0f8,
-  0xa0f9, 0xa0fa, 0xa0fb, 0xa0fc, 0xa0fd, 0xa0fe, 0xaa40, 0xaa41,
-  0xaa42, 0xaa43, 0xaa44, 0xaa45, 0xaa46, 0xaa47, 0xaa48, 0xaa49,
-  0xaa4a, 0xaa4b, 0xaa4c, 0xaa4d, 0xaa4e, 0xaa4f, 0xaa50, 0xaa51,
-  0xaa52, 0xaa53, 0xaa54, 0xaa55, 0xaa56, 0xaa57, 0xaa58, 0xaa59,
-  0xaa5a, 0xaa5b, 0xaa5c, 0xaa5d, 0xaa5e, 0xaa5f, 0xaa60, 0xaa61,
-  0xaa62, 0xaa63, 0xaa64, 0xaa65, 0xaa66, 0xaa67, 0xaa68, 0xaa69,
-  0xaa6a, 0xaa6b, 0xaa6c, 0xaa6d, 0xaa6e, 0xaa6f, 0xaa70, 0xaa71,
-  0xaa72, 0xaa73, 0xaa74, 0xaa75, 0xaa76, 0xaa77, 0xaa78, 0xaa79,
-  0xaa7a, 0xaa7b, 0xaa7c, 0xaa7d, 0xaa7e, 0xaa80, 0xaa81, 0xaa82,
-  0xaa83, 0xaa84, 0xaa85, 0xaa86, 0xaa87, 0xaa88, 0xaa89, 0xaa8a,
-  0xaa8b, 0xaa8c, 0xaa8d, 0xaa8e, 0xaa8f, 0xaa90, 0xaa91, 0xaa92,
-  0xaa93, 0xaa94, 0xaa95, 0xaa96, 0xaa97, 0xaa98, 0xaa99, 0xaa9a,
-  0xaa9b, 0xaa9c, 0xaa9d, 0xaa9e, 0xaa9f, 0xaaa0, 0xab40, 0xab41,
-  0xab42, 0xab43, 0xab44, 0xab45, 0xab46, 0xab47, 0xab48, 0xab49,
-  0xab4a, 0xab4b, 0xab4c, 0xab4d, 0xab4e, 0xab4f, 0xab50, 0xab51,
-  0xab52, 0xab53, 0xab54, 0xab55, 0xab56, 0xab57, 0xab58, 0xab59,
-  0xab5a, 0xab5b, 0xab5c, 0xab5d, 0xab5e, 0xab5f, 0xab60, 0xab61,
-  0xab62, 0xab63, 0xab64, 0xab65, 0xab66, 0xab67, 0xab68, 0xab69,
-  0xab6a, 0xab6b, 0xab6c, 0xab6d, 0xab6e, 0xab6f, 0xab70, 0xab71,
-  0xab72, 0xab73, 0xab74, 0xab75, 0xab76, 0xab77, 0xab78, 0xab79,
-  0xab7a, 0xab7b, 0xab7c, 0xab7d, 0xab7e, 0xab80, 0xab81, 0xab82,
-  0xab83, 0xab84, 0xab85, 0xab86, 0xab87, 0xab88, 0xab89, 0xab8a,
-  0xab8b, 0xab8c, 0xab8d, 0xab8e, 0xab8f, 0xab90, 0xab91, 0xab92,
-  0xab93, 0xab94, 0xab95, 0xab96, 0xab97, 0xab98, 0xab99, 0xab9a,
-  0xab9b, 0xab9c, 0xab9d, 0xab9e, 0xab9f, 0xaba0, 0xac40, 0xac41,
-  0xac42, 0xac43, 0xac44, 0xac45, 0xac46, 0xac47, 0xac48, 0xac49,
-  0xac4a, 0xac4b, 0xac4c, 0xac4d, 0xac4e, 0xac4f, 0xac50, 0xac51,
-  0xac52, 0xac53, 0xac54, 0xac55, 0xac56, 0xac57, 0xac58, 0xac59,
-  0xac5a, 0xac5b, 0xac5c, 0xac5d, 0xac5e, 0xac5f, 0xac60, 0xac61,
-  0xac62, 0xac63, 0xac64, 0xac65, 0xac66, 0xac67, 0xac68, 0xac69,
-  0xac6a, 0xac6b, 0xac6c, 0xac6d, 0xac6e, 0xac6f, 0xac70, 0xac71,
-  0xac72, 0xac73, 0xac74, 0xac75, 0xac76, 0xac77, 0xac78, 0xac79,
-  0xac7a, 0xac7b, 0xac7c, 0xac7d, 0xac7e, 0xac80, 0xac81, 0xac82,
-  0xac83, 0xac84, 0xac85, 0xac86, 0xac87, 0xac88, 0xac89, 0xac8a,
-  0xac8b, 0xac8c, 0xac8d, 0xac8e, 0xac8f, 0xac90, 0xac91, 0xac92,
-  0xac93, 0xac94, 0xac95, 0xac96, 0xac97, 0xac98, 0xac99, 0xac9a,
-  0xac9b, 0xac9c, 0xac9d, 0xac9e, 0xac9f, 0xaca0, 0xad40, 0xad41,
-  0xad42, 0xad43, 0xad44, 0xad45, 0xad46, 0xad47, 0xad48, 0xad49,
-  0xad4a, 0xad4b, 0xad4c, 0xad4d, 0xad4e, 0xad4f, 0xad50, 0xad51,
-  0xad52, 0xad53, 0xad54, 0xad55, 0xad56, 0xad57, 0xad58, 0xad59,
-  0xad5a, 0xad5b, 0xad5c, 0xad5d, 0xad5e, 0xad5f, 0xad60, 0xad61,
-  0xad62, 0xad63, 0xad64, 0xad65, 0xad66, 0xad67, 0xad68, 0xad69,
-  0xad6a, 0xad6b, 0xad6c, 0xad6d, 0xad6e, 0xad6f, 0xad70, 0xad71,
-  0xad72, 0xad73, 0xad74, 0xad75, 0xad76, 0xad77, 0xad78, 0xad79,
-  0xad7a, 0xad7b, 0xad7c, 0xad7d, 0xad7e, 0xad80, 0xad81, 0xad82,
-  0xad83, 0xad84, 0xad85, 0xad86, 0xad87, 0xad88, 0xad89, 0xad8a,
-  0xad8b, 0xad8c, 0xad8d, 0xad8e, 0xad8f, 0xad90, 0xad91, 0xad92,
-  0xad93, 0xad94, 0xad95, 0xad96, 0xad97, 0xad98, 0xad99, 0xad9a,
-  0xad9b, 0xad9c, 0xad9d, 0xad9e, 0xad9f, 0xada0, 0xae40, 0xae41,
-  0xae42, 0xae43, 0xae44, 0xae45, 0xae46, 0xae47, 0xae48, 0xae49,
-  0xae4a, 0xae4b, 0xae4c, 0xae4d, 0xae4e, 0xae4f, 0xae50, 0xae51,
-  0xae52, 0xae53, 0xae54, 0xae55, 0xae56, 0xae57, 0xae58, 0xae59,
-  0xae5a, 0xae5b, 0xae5c, 0xae5d, 0xae5e, 0xae5f, 0xae60, 0xae61,
-  0xae62, 0xae63, 0xae64, 0xae65, 0xae66, 0xae67, 0xae68, 0xae69,
-  0xae6a, 0xae6b, 0xae6c, 0xae6d, 0xae6e, 0xae6f, 0xae70, 0xae71,
-  0xae72, 0xae73, 0xae74, 0xae75, 0xae76, 0xae77, 0xae78, 0xae79,
-  0xae7a, 0xae7b, 0xae7c, 0xae7d, 0xae7e, 0xae80, 0xae81, 0xae82,
-  0xae83, 0xae84, 0xae85, 0xae86, 0xae87, 0xae88, 0xae89, 0xae8a,
-  0xae8b, 0xae8c, 0xae8d, 0xae8e, 0xae8f, 0xae90, 0xae91, 0xae92,
-  0xae93, 0xae94, 0xae95, 0xae96, 0xae97, 0xae98, 0xae99, 0xae9a,
-  0xae9b, 0xae9c, 0xae9d, 0xae9e, 0xae9f, 0xaea0, 0xaf40, 0xaf41,
-  0xaf42, 0xaf43, 0xaf44, 0xaf45, 0xaf46, 0xaf47, 0xaf48, 0xaf49,
-  0xaf4a, 0xaf4b, 0xaf4c, 0xaf4d, 0xaf4e, 0xaf4f, 0xaf50, 0xaf51,
-  0xaf52, 0xaf53, 0xaf54, 0xaf55, 0xaf56, 0xaf57, 0xaf58, 0xaf59,
-  0xaf5a, 0xaf5b, 0xaf5c, 0xaf5d, 0xaf5e, 0xaf5f, 0xaf60, 0xaf61,
-  0xaf62, 0xaf63, 0xaf64, 0xaf65, 0xaf66, 0xaf67, 0xaf68, 0xaf69,
-  0xaf6a, 0xaf6b, 0xaf6c, 0xaf6d, 0xaf6e, 0xaf6f, 0xaf70, 0xaf71,
-  0xaf72, 0xaf73, 0xaf74, 0xaf75, 0xaf76, 0xaf77, 0xaf78, 0xaf79,
-  0xaf7a, 0xaf7b, 0xaf7c, 0xaf7d, 0xaf7e, 0xaf80, 0xaf81, 0xaf82,
-  0xaf83, 0xaf84, 0xaf85, 0xaf86, 0xaf87, 0xaf88, 0xaf89, 0xaf8a,
-  0xaf8b, 0xaf8c, 0xaf8d, 0xaf8e, 0xaf8f, 0xaf90, 0xaf91, 0xaf92,
-  0xaf93, 0xaf94, 0xaf95, 0xaf96, 0xaf97, 0xaf98, 0xaf99, 0xaf9a,
-  0xaf9b, 0xaf9c, 0xaf9d, 0xaf9e, 0xaf9f, 0xafa0, 0xb040, 0xb041,
-  0xb042, 0xb043, 0xb044, 0xb045, 0xb046, 0xb047, 0xb048, 0xb049,
-  0xb04a, 0xb04b, 0xb04c, 0xb04d, 0xb04e, 0xb04f, 0xb050, 0xb051,
-  0xb052, 0xb053, 0xb054, 0xb055, 0xb056, 0xb057, 0xb058, 0xb059,
-  0xb05a, 0xb05b, 0xb05c, 0xb05d, 0xb05e, 0xb05f, 0xb060, 0xb061,
-  0xb062, 0xb063, 0xb064, 0xb065, 0xb066, 0xb067, 0xb068, 0xb069,
-  0xb06a, 0xb06b, 0xb06c, 0xb06d, 0xb06e, 0xb06f, 0xb070, 0xb071,
-  0xb072, 0xb073, 0xb074, 0xb075, 0xb076, 0xb077, 0xb078, 0xb079,
-  0xb07a, 0xb07b, 0xb07c, 0xb07d, 0xb07e, 0xb080, 0xb081, 0xb082,
-  0xb083, 0xb084, 0xb085, 0xb086, 0xb087, 0xb088, 0xb089, 0xb08a,
-  0xb08b, 0xb08c, 0xb08d, 0xb08e, 0xb08f, 0xb090, 0xb091, 0xb092,
-  0xb093, 0xb094, 0xb095, 0xb096, 0xb097, 0xb098, 0xb099, 0xb09a,
-  0xb09b, 0xb09c, 0xb09d, 0xb09e, 0xb09f, 0xb0a0, 0xb140, 0xb141,
-  0xb142, 0xb143, 0xb144, 0xb145, 0xb146, 0xb147, 0xb148, 0xb149,
-  0xb14a, 0xb14b, 0xb14c, 0xb14d, 0xb14e, 0xb14f, 0xb150, 0xb151,
-  0xb152, 0xb153, 0xb154, 0xb155, 0xb156, 0xb157, 0xb158, 0xb159,
-  0xb15a, 0xb15b, 0xb15c, 0xb15d, 0xb15e, 0xb15f, 0xb160, 0xb161,
-  0xb162, 0xb163, 0xb164, 0xb165, 0xb166, 0xb167, 0xb168, 0xb169,
-  0xb16a, 0xb16b, 0xb16c, 0xb16d, 0xb16e, 0xb16f, 0xb170, 0xb171,
-  0xb172, 0xb173, 0xb174, 0xb175, 0xb176, 0xb177, 0xb178, 0xb179,
-  0xb17a, 0xb17b, 0xb17c, 0xb17d, 0xb17e, 0xb180, 0xb181, 0xb182,
-  0xb183, 0xb184, 0xb185, 0xb186, 0xb187, 0xb188, 0xb189, 0xb18a,
-  0xb18b, 0xb18c, 0xb18d, 0xb18e, 0xb18f, 0xb190, 0xb191, 0xb192,
-  0xb193, 0xb194, 0xb195, 0xb196, 0xb197, 0xb198, 0xb199, 0xb19a,
-  0xb19b, 0xb19c, 0xb19d, 0xb19e, 0xb19f, 0xb1a0, 0xb240, 0xb241,
-  0xb242, 0xb243, 0xb244, 0xb245, 0xb246, 0xb247, 0xb248, 0xb249,
-  0xb24a, 0xb24b, 0xb24c, 0xb24d, 0xb24e, 0xb24f, 0xb250, 0xb251,
-  0xb252, 0xb253, 0xb254, 0xb255, 0xb256, 0xb257, 0xb258, 0xb259,
-  0xb25a, 0xb25b, 0xb25c, 0xb25d, 0xb25e, 0xb25f, 0xb260, 0xb261,
-  0xb262, 0xb263, 0xb264, 0xb265, 0xb266, 0xb267, 0xb268, 0xb269,
-  0xb26a, 0xb26b, 0xb26c, 0xb26d, 0xb26e, 0xb26f, 0xb270, 0xb271,
-  0xb272, 0xb273, 0xb274, 0xb275, 0xb276, 0xb277, 0xb278, 0xb279,
-  0xb27a, 0xb27b, 0xb27c, 0xb27d, 0xb27e, 0xb280, 0xb281, 0xb282,
-  0xb283, 0xb284, 0xb285, 0xb286, 0xb287, 0xb288, 0xb289, 0xb28a,
-  0xb28b, 0xb28c, 0xb28d, 0xb28e, 0xb28f, 0xb290, 0xb291, 0xb292,
-  0xb293, 0xb294, 0xb295, 0xb296, 0xb297, 0xb298, 0xb299, 0xb29a,
-  0xb29b, 0xb29c, 0xb29d, 0xb29e, 0xb29f, 0xb2a0, 0xb340, 0xb341,
-  0xb342, 0xb343, 0xb344, 0xb345, 0xb346, 0xb347, 0xb348, 0xb349,
-  0xb34a, 0xb34b, 0xb34c, 0xb34d, 0xb34e, 0xb34f, 0xb350, 0xb351,
-  0xb352, 0xb353, 0xb354, 0xb355, 0xb356, 0xb357, 0xb358, 0xb359,
-  0xb35a, 0xb35b, 0xb35c, 0xb35d, 0xb35e, 0xb35f, 0xb360, 0xb361,
-  0xb362, 0xb363, 0xb364, 0xb365, 0xb366, 0xb367, 0xb368, 0xb369,
-  0xb36a, 0xb36b, 0xb36c, 0xb36d, 0xb36e, 0xb36f, 0xb370, 0xb371,
-  0xb372, 0xb373, 0xb374, 0xb375, 0xb376, 0xb377, 0xb378, 0xb379,
-  0xb37a, 0xb37b, 0xb37c, 0xb37d, 0xb37e, 0xb380, 0xb381, 0xb382,
-  0xb383, 0xb384, 0xb385, 0xb386, 0xb387, 0xb388, 0xb389, 0xb38a,
-  0xb38b, 0xb38c, 0xb38d, 0xb38e, 0xb38f, 0xb390, 0xb391, 0xb392,
-  0xb393, 0xb394, 0xb395, 0xb396, 0xb397, 0xb398, 0xb399, 0xb39a,
-  0xb39b, 0xb39c, 0xb39d, 0xb39e, 0xb39f, 0xb3a0, 0xb440, 0xb441,
-  0xb442, 0xb443, 0xb444, 0xb445, 0xb446, 0xb447, 0xb448, 0xb449,
-  0xb44a, 0xb44b, 0xb44c, 0xb44d, 0xb44e, 0xb44f, 0xb450, 0xb451,
-  0xb452, 0xb453, 0xb454, 0xb455, 0xb456, 0xb457, 0xb458, 0xb459,
-  0xb45a, 0xb45b, 0xb45c, 0xb45d, 0xb45e, 0xb45f, 0xb460, 0xb461,
-  0xb462, 0xb463, 0xb464, 0xb465, 0xb466, 0xb467, 0xb468, 0xb469,
-  0xb46a, 0xb46b, 0xb46c, 0xb46d, 0xb46e, 0xb46f, 0xb470, 0xb471,
-  0xb472, 0xb473, 0xb474, 0xb475, 0xb476, 0xb477, 0xb478, 0xb479,
-  0xb47a, 0xb47b, 0xb47c, 0xb47d, 0xb47e, 0xb480, 0xb481, 0xb482,
-  0xb483, 0xb484, 0xb485, 0xb486, 0xb487, 0xb488, 0xb489, 0xb48a,
-  0xb48b, 0xb48c, 0xb48d, 0xb48e, 0xb48f, 0xb490, 0xb491, 0xb492,
-  0xb493, 0xb494, 0xb495, 0xb496, 0xb497, 0xb498, 0xb499, 0xb49a,
-  0xb49b, 0xb49c, 0xb49d, 0xb49e, 0xb49f, 0xb4a0, 0xb540, 0xb541,
-  0xb542, 0xb543, 0xb544, 0xb545, 0xb546, 0xb547, 0xb548, 0xb549,
-  0xb54a, 0xb54b, 0xb54c, 0xb54d, 0xb54e, 0xb54f, 0xb550, 0xb551,
-  0xb552, 0xb553, 0xb554, 0xb555, 0xb556, 0xb557, 0xb558, 0xb559,
-  0xb55a, 0xb55b, 0xb55c, 0xb55d, 0xb55e, 0xb55f, 0xb560, 0xb561,
-  0xb562, 0xb563, 0xb564, 0xb565, 0xb566, 0xb567, 0xb568, 0xb569,
-  0xb56a, 0xb56b, 0xb56c, 0xb56d, 0xb56e, 0xb56f, 0xb570, 0xb571,
-  0xb572, 0xb573, 0xb574, 0xb575, 0xb576, 0xb577, 0xb578, 0xb579,
-  0xb57a, 0xb57b, 0xb57c, 0xb57d, 0xb57e, 0xb580, 0xb581, 0xb582,
-  0xb583, 0xb584, 0xb585, 0xb586, 0xb587, 0xb588, 0xb589, 0xb58a,
-  0xb58b, 0xb58c, 0xb58d, 0xb58e, 0xb58f, 0xb590, 0xb591, 0xb592,
-  0xb593, 0xb594, 0xb595, 0xb596, 0xb597, 0xb598, 0xb599, 0xb59a,
-  0xb59b, 0xb59c, 0xb59d, 0xb59e, 0xb59f, 0xb5a0, 0xb640, 0xb641,
-  0xb642, 0xb643, 0xb644, 0xb645, 0xb646, 0xb647, 0xb648, 0xb649,
-  0xb64a, 0xb64b, 0xb64c, 0xb64d, 0xb64e, 0xb64f, 0xb650, 0xb651,
-  0xb652, 0xb653, 0xb654, 0xb655, 0xb656, 0xb657, 0xb658, 0xb659,
-  0xb65a, 0xb65b, 0xb65c, 0xb65d, 0xb65e, 0xb65f, 0xb660, 0xb661,
-  0xb662, 0xb663, 0xb664, 0xb665, 0xb666, 0xb667, 0xb668, 0xb669,
-  0xb66a, 0xb66b, 0xb66c, 0xb66d, 0xb66e, 0xb66f, 0xb670, 0xb671,
-  0xb672, 0xb673, 0xb674, 0xb675, 0xb676, 0xb677, 0xb678, 0xb679,
-  0xb67a, 0xb67b, 0xb67c, 0xb67d, 0xb67e, 0xb680, 0xb681, 0xb682,
-  0xb683, 0xb684, 0xb685, 0xb686, 0xb687, 0xb688, 0xb689, 0xb68a,
-  0xb68b, 0xb68c, 0xb68d, 0xb68e, 0xb68f, 0xb690, 0xb691, 0xb692,
-  0xb693, 0xb694, 0xb695, 0xb696, 0xb697, 0xb698, 0xb699, 0xb69a,
-  0xb69b, 0xb69c, 0xb69d, 0xb69e, 0xb69f, 0xb6a0, 0xb740, 0xb741,
-  0xb742, 0xb743, 0xb744, 0xb745, 0xb746, 0xb747, 0xb748, 0xb749,
-  0xb74a, 0xb74b, 0xb74c, 0xb74d, 0xb74e, 0xb74f, 0xb750, 0xb751,
-  0xb752, 0xb753, 0xb754, 0xb755, 0xb756, 0xb757, 0xb758, 0xb759,
-  0xb75a, 0xb75b, 0xb75c, 0xb75d, 0xb75e, 0xb75f, 0xb760, 0xb761,
-  0xb762, 0xb763, 0xb764, 0xb765, 0xb766, 0xb767, 0xb768, 0xb769,
-  0xb76a, 0xb76b, 0xb76c, 0xb76d, 0xb76e, 0xb76f, 0xb770, 0xb771,
-  0xb772, 0xb773, 0xb774, 0xb775, 0xb776, 0xb777, 0xb778, 0xb779,
-  0xb77a, 0xb77b, 0xb77c, 0xb77d, 0xb77e, 0xb780, 0xb781, 0xb782,
-  0xb783, 0xb784, 0xb785, 0xb786, 0xb787, 0xb788, 0xb789, 0xb78a,
-  0xb78b, 0xb78c, 0xb78d, 0xb78e, 0xb78f, 0xb790, 0xb791, 0xb792,
-  0xb793, 0xb794, 0xb795, 0xb796, 0xb797, 0xb798, 0xb799, 0xb79a,
-  0xb79b, 0xb79c, 0xb79d, 0xb79e, 0xb79f, 0xb7a0, 0xb840, 0xb841,
-  0xb842, 0xb843, 0xb844, 0xb845, 0xb846, 0xb847, 0xb848, 0xb849,
-  0xb84a, 0xb84b, 0xb84c, 0xb84d, 0xb84e, 0xb84f, 0xb850, 0xb851,
-  0xb852, 0xb853, 0xb854, 0xb855, 0xb856, 0xb857, 0xb858, 0xb859,
-  0xb85a, 0xb85b, 0xb85c, 0xb85d, 0xb85e, 0xb85f, 0xb860, 0xb861,
-  0xb862, 0xb863, 0xb864, 0xb865, 0xb866, 0xb867, 0xb868, 0xb869,
-  0xb86a, 0xb86b, 0xb86c, 0xb86d, 0xb86e, 0xb86f, 0xb870, 0xb871,
-  0xb872, 0xb873, 0xb874, 0xb875, 0xb876, 0xb877, 0xb878, 0xb879,
-  0xb87a, 0xb87b, 0xb87c, 0xb87d, 0xb87e, 0xb880, 0xb881, 0xb882,
-  0xb883, 0xb884, 0xb885, 0xb886, 0xb887, 0xb888, 0xb889, 0xb88a,
-  0xb88b, 0xb88c, 0xb88d, 0xb88e, 0xb88f, 0xb890, 0xb891, 0xb892,
-  0xb893, 0xb894, 0xb895, 0xb896, 0xb897, 0xb898, 0xb899, 0xb89a,
-  0xb89b, 0xb89c, 0xb89d, 0xb89e, 0xb89f, 0xb8a0, 0xb940, 0xb941,
-  0xb942, 0xb943, 0xb944, 0xb945, 0xb946, 0xb947, 0xb948, 0xb949,
-  0xb94a, 0xb94b, 0xb94c, 0xb94d, 0xb94e, 0xb94f, 0xb950, 0xb951,
-  0xb952, 0xb953, 0xb954, 0xb955, 0xb956, 0xb957, 0xb958, 0xb959,
-  0xb95a, 0xb95b, 0xb95c, 0xb95d, 0xb95e, 0xb95f, 0xb960, 0xb961,
-  0xb962, 0xb963, 0xb964, 0xb965, 0xb966, 0xb967, 0xb968, 0xb969,
-  0xb96a, 0xb96b, 0xb96c, 0xb96d, 0xb96e, 0xb96f, 0xb970, 0xb971,
-  0xb972, 0xb973, 0xb974, 0xb975, 0xb976, 0xb977, 0xb978, 0xb979,
-  0xb97a, 0xb97b, 0xb97c, 0xb97d, 0xb97e, 0xb980, 0xb981, 0xb982,
-  0xb983, 0xb984, 0xb985, 0xb986, 0xb987, 0xb988, 0xb989, 0xb98a,
-  0xb98b, 0xb98c, 0xb98d, 0xb98e, 0xb98f, 0xb990, 0xb991, 0xb992,
-  0xb993, 0xb994, 0xb995, 0xb996, 0xb997, 0xb998, 0xb999, 0xb99a,
-  0xb99b, 0xb99c, 0xb99d, 0xb99e, 0xb99f, 0xb9a0, 0xba40, 0xba41,
-  0xba42, 0xba43, 0xba44, 0xba45, 0xba46, 0xba47, 0xba48, 0xba49,
-  0xba4a, 0xba4b, 0xba4c, 0xba4d, 0xba4e, 0xba4f, 0xba50, 0xba51,
-  0xba52, 0xba53, 0xba54, 0xba55, 0xba56, 0xba57, 0xba58, 0xba59,
-  0xba5a, 0xba5b, 0xba5c, 0xba5d, 0xba5e, 0xba5f, 0xba60, 0xba61,
-  0xba62, 0xba63, 0xba64, 0xba65, 0xba66, 0xba67, 0xba68, 0xba69,
-  0xba6a, 0xba6b, 0xba6c, 0xba6d, 0xba6e, 0xba6f, 0xba70, 0xba71,
-  0xba72, 0xba73, 0xba74, 0xba75, 0xba76, 0xba77, 0xba78, 0xba79,
-  0xba7a, 0xba7b, 0xba7c, 0xba7d, 0xba7e, 0xba80, 0xba81, 0xba82,
-  0xba83, 0xba84, 0xba85, 0xba86, 0xba87, 0xba88, 0xba89, 0xba8a,
-  0xba8b, 0xba8c, 0xba8d, 0xba8e, 0xba8f, 0xba90, 0xba91, 0xba92,
-  0xba93, 0xba94, 0xba95, 0xba96, 0xba97, 0xba98, 0xba99, 0xba9a,
-  0xba9b, 0xba9c, 0xba9d, 0xba9e, 0xba9f, 0xbaa0, 0xbb40, 0xbb41,
-  0xbb42, 0xbb43, 0xbb44, 0xbb45, 0xbb46, 0xbb47, 0xbb48, 0xbb49,
-  0xbb4a, 0xbb4b, 0xbb4c, 0xbb4d, 0xbb4e, 0xbb4f, 0xbb50, 0xbb51,
-  0xbb52, 0xbb53, 0xbb54, 0xbb55, 0xbb56, 0xbb57, 0xbb58, 0xbb59,
-  0xbb5a, 0xbb5b, 0xbb5c, 0xbb5d, 0xbb5e, 0xbb5f, 0xbb60, 0xbb61,
-  0xbb62, 0xbb63, 0xbb64, 0xbb65, 0xbb66, 0xbb67, 0xbb68, 0xbb69,
-  0xbb6a, 0xbb6b, 0xbb6c, 0xbb6d, 0xbb6e, 0xbb6f, 0xbb70, 0xbb71,
-  0xbb72, 0xbb73, 0xbb74, 0xbb75, 0xbb76, 0xbb77, 0xbb78, 0xbb79,
-  0xbb7a, 0xbb7b, 0xbb7c, 0xbb7d, 0xbb7e, 0xbb80, 0xbb81, 0xbb82,
-  0xbb83, 0xbb84, 0xbb85, 0xbb86, 0xbb87, 0xbb88, 0xbb89, 0xbb8a,
-  0xbb8b, 0xbb8c, 0xbb8d, 0xbb8e, 0xbb8f, 0xbb90, 0xbb91, 0xbb92,
-  0xbb93, 0xbb94, 0xbb95, 0xbb96, 0xbb97, 0xbb98, 0xbb99, 0xbb9a,
-  0xbb9b, 0xbb9c, 0xbb9d, 0xbb9e, 0xbb9f, 0xbba0, 0xbc40, 0xbc41,
-  0xbc42, 0xbc43, 0xbc44, 0xbc45, 0xbc46, 0xbc47, 0xbc48, 0xbc49,
-  0xbc4a, 0xbc4b, 0xbc4c, 0xbc4d, 0xbc4e, 0xbc4f, 0xbc50, 0xbc51,
-  0xbc52, 0xbc53, 0xbc54, 0xbc55, 0xbc56, 0xbc57, 0xbc58, 0xbc59,
-  0xbc5a, 0xbc5b, 0xbc5c, 0xbc5d, 0xbc5e, 0xbc5f, 0xbc60, 0xbc61,
-  0xbc62, 0xbc63, 0xbc64, 0xbc65, 0xbc66, 0xbc67, 0xbc68, 0xbc69,
-  0xbc6a, 0xbc6b, 0xbc6c, 0xbc6d, 0xbc6e, 0xbc6f, 0xbc70, 0xbc71,
-  0xbc72, 0xbc73, 0xbc74, 0xbc75, 0xbc76, 0xbc77, 0xbc78, 0xbc79,
-  0xbc7a, 0xbc7b, 0xbc7c, 0xbc7d, 0xbc7e, 0xbc80, 0xbc81, 0xbc82,
-  0xbc83, 0xbc84, 0xbc85, 0xbc86, 0xbc87, 0xbc88, 0xbc89, 0xbc8a,
-  0xbc8b, 0xbc8c, 0xbc8d, 0xbc8e, 0xbc8f, 0xbc90, 0xbc91, 0xbc92,
-  0xbc93, 0xbc94, 0xbc95, 0xbc96, 0xbc97, 0xbc98, 0xbc99, 0xbc9a,
-  0xbc9b, 0xbc9c, 0xbc9d, 0xbc9e, 0xbc9f, 0xbca0, 0xbd40, 0xbd41,
-  0xbd42, 0xbd43, 0xbd44, 0xbd45, 0xbd46, 0xbd47, 0xbd48, 0xbd49,
-  0xbd4a, 0xbd4b, 0xbd4c, 0xbd4d, 0xbd4e, 0xbd4f, 0xbd50, 0xbd51,
-  0xbd52, 0xbd53, 0xbd54, 0xbd55, 0xbd56, 0xbd57, 0xbd58, 0xbd59,
-  0xbd5a, 0xbd5b, 0xbd5c, 0xbd5d, 0xbd5e, 0xbd5f, 0xbd60, 0xbd61,
-  0xbd62, 0xbd63, 0xbd64, 0xbd65, 0xbd66, 0xbd67, 0xbd68, 0xbd69,
-  0xbd6a, 0xbd6b, 0xbd6c, 0xbd6d, 0xbd6e, 0xbd6f, 0xbd70, 0xbd71,
-  0xbd72, 0xbd73, 0xbd74, 0xbd75, 0xbd76, 0xbd77, 0xbd78, 0xbd79,
-  0xbd7a, 0xbd7b, 0xbd7c, 0xbd7d, 0xbd7e, 0xbd80, 0xbd81, 0xbd82,
-  0xbd83, 0xbd84, 0xbd85, 0xbd86, 0xbd87, 0xbd88, 0xbd89, 0xbd8a,
-  0xbd8b, 0xbd8c, 0xbd8d, 0xbd8e, 0xbd8f, 0xbd90, 0xbd91, 0xbd92,
-  0xbd93, 0xbd94, 0xbd95, 0xbd96, 0xbd97, 0xbd98, 0xbd99, 0xbd9a,
-  0xbd9b, 0xbd9c, 0xbd9d, 0xbd9e, 0xbd9f, 0xbda0, 0xbe40, 0xbe41,
-  0xbe42, 0xbe43, 0xbe44, 0xbe45, 0xbe46, 0xbe47, 0xbe48, 0xbe49,
-  0xbe4a, 0xbe4b, 0xbe4c, 0xbe4d, 0xbe4e, 0xbe4f, 0xbe50, 0xbe51,
-  0xbe52, 0xbe53, 0xbe54, 0xbe55, 0xbe56, 0xbe57, 0xbe58, 0xbe59,
-  0xbe5a, 0xbe5b, 0xbe5c, 0xbe5d, 0xbe5e, 0xbe5f, 0xbe60, 0xbe61,
-  0xbe62, 0xbe63, 0xbe64, 0xbe65, 0xbe66, 0xbe67, 0xbe68, 0xbe69,
-  0xbe6a, 0xbe6b, 0xbe6c, 0xbe6d, 0xbe6e, 0xbe6f, 0xbe70, 0xbe71,
-  0xbe72, 0xbe73, 0xbe74, 0xbe75, 0xbe76, 0xbe77, 0xbe78, 0xbe79,
-  0xbe7a, 0xbe7b, 0xbe7c, 0xbe7d, 0xbe7e, 0xbe80, 0xbe81, 0xbe82,
-  0xbe83, 0xbe84, 0xbe85, 0xbe86, 0xbe87, 0xbe88, 0xbe89, 0xbe8a,
-  0xbe8b, 0xbe8c, 0xbe8d, 0xbe8e, 0xbe8f, 0xbe90, 0xbe91, 0xbe92,
-  0xbe93, 0xbe94, 0xbe95, 0xbe96, 0xbe97, 0xbe98, 0xbe99, 0xbe9a,
-  0xbe9b, 0xbe9c, 0xbe9d, 0xbe9e, 0xbe9f, 0xbea0, 0xbf40, 0xbf41,
-  0xbf42, 0xbf43, 0xbf44, 0xbf45, 0xbf46, 0xbf47, 0xbf48, 0xbf49,
-  0xbf4a, 0xbf4b, 0xbf4c, 0xbf4d, 0xbf4e, 0xbf4f, 0xbf50, 0xbf51,
-  0xbf52, 0xbf53, 0xbf54, 0xbf55, 0xbf56, 0xbf57, 0xbf58, 0xbf59,
-  0xbf5a, 0xbf5b, 0xbf5c, 0xbf5d, 0xbf5e, 0xbf5f, 0xbf60, 0xbf61,
-  0xbf62, 0xbf63, 0xbf64, 0xbf65, 0xbf66, 0xbf67, 0xbf68, 0xbf69,
-  0xbf6a, 0xbf6b, 0xbf6c, 0xbf6d, 0xbf6e, 0xbf6f, 0xbf70, 0xbf71,
-  0xbf72, 0xbf73, 0xbf74, 0xbf75, 0xbf76, 0xbf77, 0xbf78, 0xbf79,
-  0xbf7a, 0xbf7b, 0xbf7c, 0xbf7d, 0xbf7e, 0xbf80, 0xbf81, 0xbf82,
-  0xbf83, 0xbf84, 0xbf85, 0xbf86, 0xbf87, 0xbf88, 0xbf89, 0xbf8a,
-  0xbf8b, 0xbf8c, 0xbf8d, 0xbf8e, 0xbf8f, 0xbf90, 0xbf91, 0xbf92,
-  0xbf93, 0xbf94, 0xbf95, 0xbf96, 0xbf97, 0xbf98, 0xbf99, 0xbf9a,
-  0xbf9b, 0xbf9c, 0xbf9d, 0xbf9e, 0xbf9f, 0xbfa0, 0xc040, 0xc041,
-  0xc042, 0xc043, 0xc044, 0xc045, 0xc046, 0xc047, 0xc048, 0xc049,
-  0xc04a, 0xc04b, 0xc04c, 0xc04d, 0xc04e, 0xc04f, 0xc050, 0xc051,
-  0xc052, 0xc053, 0xc054, 0xc055, 0xc056, 0xc057, 0xc058, 0xc059,
-  0xc05a, 0xc05b, 0xc05c, 0xc05d, 0xc05e, 0xc05f, 0xc060, 0xc061,
-  0xc062, 0xc063, 0xc064, 0xc065, 0xc066, 0xc067, 0xc068, 0xc069,
-  0xc06a, 0xc06b, 0xc06c, 0xc06d, 0xc06e, 0xc06f, 0xc070, 0xc071,
-  0xc072, 0xc073, 0xc074, 0xc075, 0xc076, 0xc077, 0xc078, 0xc079,
-  0xc07a, 0xc07b, 0xc07c, 0xc07d, 0xc07e, 0xc080, 0xc081, 0xc082,
-  0xc083, 0xc084, 0xc085, 0xc086, 0xc087, 0xc088, 0xc089, 0xc08a,
-  0xc08b, 0xc08c, 0xc08d, 0xc08e, 0xc08f, 0xc090, 0xc091, 0xc092,
-  0xc093, 0xc094, 0xc095, 0xc096, 0xc097, 0xc098, 0xc099, 0xc09a,
-  0xc09b, 0xc09c, 0xc09d, 0xc09e, 0xc09f, 0xc0a0, 0xc140, 0xc141,
-  0xc142, 0xc143, 0xc144, 0xc145, 0xc146, 0xc147, 0xc148, 0xc149,
-  0xc14a, 0xc14b, 0xc14c, 0xc14d, 0xc14e, 0xc14f, 0xc150, 0xc151,
-  0xc152, 0xc153, 0xc154, 0xc155, 0xc156, 0xc157, 0xc158, 0xc159,
-  0xc15a, 0xc15b, 0xc15c, 0xc15d, 0xc15e, 0xc15f, 0xc160, 0xc161,
-  0xc162, 0xc163, 0xc164, 0xc165, 0xc166, 0xc167, 0xc168, 0xc169,
-  0xc16a, 0xc16b, 0xc16c, 0xc16d, 0xc16e, 0xc16f, 0xc170, 0xc171,
-  0xc172, 0xc173, 0xc174, 0xc175, 0xc176, 0xc177, 0xc178, 0xc179,
-  0xc17a, 0xc17b, 0xc17c, 0xc17d, 0xc17e, 0xc180, 0xc181, 0xc182,
-  0xc183, 0xc184, 0xc185, 0xc186, 0xc187, 0xc188, 0xc189, 0xc18a,
-  0xc18b, 0xc18c, 0xc18d, 0xc18e, 0xc18f, 0xc190, 0xc191, 0xc192,
-  0xc193, 0xc194, 0xc195, 0xc196, 0xc197, 0xc198, 0xc199, 0xc19a,
-  0xc19b, 0xc19c, 0xc19d, 0xc19e, 0xc19f, 0xc1a0, 0xc240, 0xc241,
-  0xc242, 0xc243, 0xc244, 0xc245, 0xc246, 0xc247, 0xc248, 0xc249,
-  0xc24a, 0xc24b, 0xc24c, 0xc24d, 0xc24e, 0xc24f, 0xc250, 0xc251,
-  0xc252, 0xc253, 0xc254, 0xc255, 0xc256, 0xc257, 0xc258, 0xc259,
-  0xc25a, 0xc25b, 0xc25c, 0xc25d, 0xc25e, 0xc25f, 0xc260, 0xc261,
-  0xc262, 0xc263, 0xc264, 0xc265, 0xc266, 0xc267, 0xc268, 0xc269,
-  0xc26a, 0xc26b, 0xc26c, 0xc26d, 0xc26e, 0xc26f, 0xc270, 0xc271,
-  0xc272, 0xc273, 0xc274, 0xc275, 0xc276, 0xc277, 0xc278, 0xc279,
-  0xc27a, 0xc27b, 0xc27c, 0xc27d, 0xc27e, 0xc280, 0xc281, 0xc282,
-  0xc283, 0xc284, 0xc285, 0xc286, 0xc287, 0xc288, 0xc289, 0xc28a,
-  0xc28b, 0xc28c, 0xc28d, 0xc28e, 0xc28f, 0xc290, 0xc291, 0xc292,
-  0xc293, 0xc294, 0xc295, 0xc296, 0xc297, 0xc298, 0xc299, 0xc29a,
-  0xc29b, 0xc29c, 0xc29d, 0xc29e, 0xc29f, 0xc2a0, 0xc340, 0xc341,
-  0xc342, 0xc343, 0xc344, 0xc345, 0xc346, 0xc347, 0xc348, 0xc349,
-  0xc34a, 0xc34b, 0xc34c, 0xc34d, 0xc34e, 0xc34f, 0xc350, 0xc351,
-  0xc352, 0xc353, 0xc354, 0xc355, 0xc356, 0xc357, 0xc358, 0xc359,
-  0xc35a, 0xc35b, 0xc35c, 0xc35d, 0xc35e, 0xc35f, 0xc360, 0xc361,
-  0xc362, 0xc363, 0xc364, 0xc365, 0xc366, 0xc367, 0xc368, 0xc369,
-  0xc36a, 0xc36b, 0xc36c, 0xc36d, 0xc36e, 0xc36f, 0xc370, 0xc371,
-  0xc372, 0xc373, 0xc374, 0xc375, 0xc376, 0xc377, 0xc378, 0xc379,
-  0xc37a, 0xc37b, 0xc37c, 0xc37d, 0xc37e, 0xc380, 0xc381, 0xc382,
-  0xc383, 0xc384, 0xc385, 0xc386, 0xc387, 0xc388, 0xc389, 0xc38a,
-  0xc38b, 0xc38c, 0xc38d, 0xc38e, 0xc38f, 0xc390, 0xc391, 0xc392,
-  0xc393, 0xc394, 0xc395, 0xc396, 0xc397, 0xc398, 0xc399, 0xc39a,
-  0xc39b, 0xc39c, 0xc39d, 0xc39e, 0xc39f, 0xc3a0, 0xc440, 0xc441,
-  0xc442, 0xc443, 0xc444, 0xc445, 0xc446, 0xc447, 0xc448, 0xc449,
-  0xc44a, 0xc44b, 0xc44c, 0xc44d, 0xc44e, 0xc44f, 0xc450, 0xc451,
-  0xc452, 0xc453, 0xc454, 0xc455, 0xc456, 0xc457, 0xc458, 0xc459,
-  0xc45a, 0xc45b, 0xc45c, 0xc45d, 0xc45e, 0xc45f, 0xc460, 0xc461,
-  0xc462, 0xc463, 0xc464, 0xc465, 0xc466, 0xc467, 0xc468, 0xc469,
-  0xc46a, 0xc46b, 0xc46c, 0xc46d, 0xc46e, 0xc46f, 0xc470, 0xc471,
-  0xc472, 0xc473, 0xc474, 0xc475, 0xc476, 0xc477, 0xc478, 0xc479,
-  0xc47a, 0xc47b, 0xc47c, 0xc47d, 0xc47e, 0xc480, 0xc481, 0xc482,
-  0xc483, 0xc484, 0xc485, 0xc486, 0xc487, 0xc488, 0xc489, 0xc48a,
-  0xc48b, 0xc48c, 0xc48d, 0xc48e, 0xc48f, 0xc490, 0xc491, 0xc492,
-  0xc493, 0xc494, 0xc495, 0xc496, 0xc497, 0xc498, 0xc499, 0xc49a,
-  0xc49b, 0xc49c, 0xc49d, 0xc49e, 0xc49f, 0xc4a0, 0xc540, 0xc541,
-  0xc542, 0xc543, 0xc544, 0xc545, 0xc546, 0xc547, 0xc548, 0xc549,
-  0xc54a, 0xc54b, 0xc54c, 0xc54d, 0xc54e, 0xc54f, 0xc550, 0xc551,
-  0xc552, 0xc553, 0xc554, 0xc555, 0xc556, 0xc557, 0xc558, 0xc559,
-  0xc55a, 0xc55b, 0xc55c, 0xc55d, 0xc55e, 0xc55f, 0xc560, 0xc561,
-  0xc562, 0xc563, 0xc564, 0xc565, 0xc566, 0xc567, 0xc568, 0xc569,
-  0xc56a, 0xc56b, 0xc56c, 0xc56d, 0xc56e, 0xc56f, 0xc570, 0xc571,
-  0xc572, 0xc573, 0xc574, 0xc575, 0xc576, 0xc577, 0xc578, 0xc579,
-  0xc57a, 0xc57b, 0xc57c, 0xc57d, 0xc57e, 0xc580, 0xc581, 0xc582,
-  0xc583, 0xc584, 0xc585, 0xc586, 0xc587, 0xc588, 0xc589, 0xc58a,
-  0xc58b, 0xc58c, 0xc58d, 0xc58e, 0xc58f, 0xc590, 0xc591, 0xc592,
-  0xc593, 0xc594, 0xc595, 0xc596, 0xc597, 0xc598, 0xc599, 0xc59a,
-  0xc59b, 0xc59c, 0xc59d, 0xc59e, 0xc59f, 0xc5a0, 0xc640, 0xc641,
-  0xc642, 0xc643, 0xc644, 0xc645, 0xc646, 0xc647, 0xc648, 0xc649,
-  0xc64a, 0xc64b, 0xc64c, 0xc64d, 0xc64e, 0xc64f, 0xc650, 0xc651,
-  0xc652, 0xc653, 0xc654, 0xc655, 0xc656, 0xc657, 0xc658, 0xc659,
-  0xc65a, 0xc65b, 0xc65c, 0xc65d, 0xc65e, 0xc65f, 0xc660, 0xc661,
-  0xc662, 0xc663, 0xc664, 0xc665, 0xc666, 0xc667, 0xc668, 0xc669,
-  0xc66a, 0xc66b, 0xc66c, 0xc66d, 0xc66e, 0xc66f, 0xc670, 0xc671,
-  0xc672, 0xc673, 0xc674, 0xc675, 0xc676, 0xc677, 0xc678, 0xc679,
-  0xc67a, 0xc67b, 0xc67c, 0xc67d, 0xc67e, 0xc680, 0xc681, 0xc682,
-  0xc683, 0xc684, 0xc685, 0xc686, 0xc687, 0xc688, 0xc689, 0xc68a,
-  0xc68b, 0xc68c, 0xc68d, 0xc68e, 0xc68f, 0xc690, 0xc691, 0xc692,
-  0xc693, 0xc694, 0xc695, 0xc696, 0xc697, 0xc698, 0xc699, 0xc69a,
-  0xc69b, 0xc69c, 0xc69d, 0xc69e, 0xc69f, 0xc6a0, 0xc740, 0xc741,
-  0xc742, 0xc743, 0xc744, 0xc745, 0xc746, 0xc747, 0xc748, 0xc749,
-  0xc74a, 0xc74b, 0xc74c, 0xc74d, 0xc74e, 0xc74f, 0xc750, 0xc751,
-  0xc752, 0xc753, 0xc754, 0xc755, 0xc756, 0xc757, 0xc758, 0xc759,
-  0xc75a, 0xc75b, 0xc75c, 0xc75d, 0xc75e, 0xc75f, 0xc760, 0xc761,
-  0xc762, 0xc763, 0xc764, 0xc765, 0xc766, 0xc767, 0xc768, 0xc769,
-  0xc76a, 0xc76b, 0xc76c, 0xc76d, 0xc76e, 0xc76f, 0xc770, 0xc771,
-  0xc772, 0xc773, 0xc774, 0xc775, 0xc776, 0xc777, 0xc778, 0xc779,
-  0xc77a, 0xc77b, 0xc77c, 0xc77d, 0xc77e, 0xc780, 0xc781, 0xc782,
-  0xc783, 0xc784, 0xc785, 0xc786, 0xc787, 0xc788, 0xc789, 0xc78a,
-  0xc78b, 0xc78c, 0xc78d, 0xc78e, 0xc78f, 0xc790, 0xc791, 0xc792,
-  0xc793, 0xc794, 0xc795, 0xc796, 0xc797, 0xc798, 0xc799, 0xc79a,
-  0xc79b, 0xc79c, 0xc79d, 0xc79e, 0xc79f, 0xc7a0, 0xc840, 0xc841,
-  0xc842, 0xc843, 0xc844, 0xc845, 0xc846, 0xc847, 0xc848, 0xc849,
-  0xc84a, 0xc84b, 0xc84c, 0xc84d, 0xc84e, 0xc84f, 0xc850, 0xc851,
-  0xc852, 0xc853, 0xc854, 0xc855, 0xc856, 0xc857, 0xc858, 0xc859,
-  0xc85a, 0xc85b, 0xc85c, 0xc85d, 0xc85e, 0xc85f, 0xc860, 0xc861,
-  0xc862, 0xc863, 0xc864, 0xc865, 0xc866, 0xc867, 0xc868, 0xc869,
-  0xc86a, 0xc86b, 0xc86c, 0xc86d, 0xc86e, 0xc86f, 0xc870, 0xc871,
-  0xc872, 0xc873, 0xc874, 0xc875, 0xc876, 0xc877, 0xc878, 0xc879,
-  0xc87a, 0xc87b, 0xc87c, 0xc87d, 0xc87e, 0xc880, 0xc881, 0xc882,
-  0xc883, 0xc884, 0xc885, 0xc886, 0xc887, 0xc888, 0xc889, 0xc88a,
-  0xc88b, 0xc88c, 0xc88d, 0xc88e, 0xc88f, 0xc890, 0xc891, 0xc892,
-  0xc893, 0xc894, 0xc895, 0xc896, 0xc897, 0xc898, 0xc899, 0xc89a,
-  0xc89b, 0xc89c, 0xc89d, 0xc89e, 0xc89f, 0xc8a0, 0xc940, 0xc941,
-  0xc942, 0xc943, 0xc944, 0xc945, 0xc946, 0xc947, 0xc948, 0xc949,
-  0xc94a, 0xc94b, 0xc94c, 0xc94d, 0xc94e, 0xc94f, 0xc950, 0xc951,
-  0xc952, 0xc953, 0xc954, 0xc955, 0xc956, 0xc957, 0xc958, 0xc959,
-  0xc95a, 0xc95b, 0xc95c, 0xc95d, 0xc95e, 0xc95f, 0xc960, 0xc961,
-  0xc962, 0xc963, 0xc964, 0xc965, 0xc966, 0xc967, 0xc968, 0xc969,
-  0xc96a, 0xc96b, 0xc96c, 0xc96d, 0xc96e, 0xc96f, 0xc970, 0xc971,
-  0xc972, 0xc973, 0xc974, 0xc975, 0xc976, 0xc977, 0xc978, 0xc979,
-  0xc97a, 0xc97b, 0xc97c, 0xc97d, 0xc97e, 0xc980, 0xc981, 0xc982,
-  0xc983, 0xc984, 0xc985, 0xc986, 0xc987, 0xc988, 0xc989, 0xc98a,
-  0xc98b, 0xc98c, 0xc98d, 0xc98e, 0xc98f, 0xc990, 0xc991, 0xc992,
-  0xc993, 0xc994, 0xc995, 0xc996, 0xc997, 0xc998, 0xc999, 0xc99a,
-  0xc99b, 0xc99c, 0xc99d, 0xc99e, 0xc99f, 0xc9a0, 0xca40, 0xca41,
-  0xca42, 0xca43, 0xca44, 0xca45, 0xca46, 0xca47, 0xca48, 0xca49,
-  0xca4a, 0xca4b, 0xca4c, 0xca4d, 0xca4e, 0xca4f, 0xca50, 0xca51,
-  0xca52, 0xca53, 0xca54, 0xca55, 0xca56, 0xca57, 0xca58, 0xca59,
-  0xca5a, 0xca5b, 0xca5c, 0xca5d, 0xca5e, 0xca5f, 0xca60, 0xca61,
-  0xca62, 0xca63, 0xca64, 0xca65, 0xca66, 0xca67, 0xca68, 0xca69,
-  0xca6a, 0xca6b, 0xca6c, 0xca6d, 0xca6e, 0xca6f, 0xca70, 0xca71,
-  0xca72, 0xca73, 0xca74, 0xca75, 0xca76, 0xca77, 0xca78, 0xca79,
-  0xca7a, 0xca7b, 0xca7c, 0xca7d, 0xca7e, 0xca80, 0xca81, 0xca82,
-  0xca83, 0xca84, 0xca85, 0xca86, 0xca87, 0xca88, 0xca89, 0xca8a,
-  0xca8b, 0xca8c, 0xca8d, 0xca8e, 0xca8f, 0xca90, 0xca91, 0xca92,
-  0xca93, 0xca94, 0xca95, 0xca96, 0xca97, 0xca98, 0xca99, 0xca9a,
-  0xca9b, 0xca9c, 0xca9d, 0xca9e, 0xca9f, 0xcaa0, 0xcb40, 0xcb41,
-  0xcb42, 0xcb43, 0xcb44, 0xcb45, 0xcb46, 0xcb47, 0xcb48, 0xcb49,
-  0xcb4a, 0xcb4b, 0xcb4c, 0xcb4d, 0xcb4e, 0xcb4f, 0xcb50, 0xcb51,
-  0xcb52, 0xcb53, 0xcb54, 0xcb55, 0xcb56, 0xcb57, 0xcb58, 0xcb59,
-  0xcb5a, 0xcb5b, 0xcb5c, 0xcb5d, 0xcb5e, 0xcb5f, 0xcb60, 0xcb61,
-  0xcb62, 0xcb63, 0xcb64, 0xcb65, 0xcb66, 0xcb67, 0xcb68, 0xcb69,
-  0xcb6a, 0xcb6b, 0xcb6c, 0xcb6d, 0xcb6e, 0xcb6f, 0xcb70, 0xcb71,
-  0xcb72, 0xcb73, 0xcb74, 0xcb75, 0xcb76, 0xcb77, 0xcb78, 0xcb79,
-  0xcb7a, 0xcb7b, 0xcb7c, 0xcb7d, 0xcb7e, 0xcb80, 0xcb81, 0xcb82,
-  0xcb83, 0xcb84, 0xcb85, 0xcb86, 0xcb87, 0xcb88, 0xcb89, 0xcb8a,
-  0xcb8b, 0xcb8c, 0xcb8d, 0xcb8e, 0xcb8f, 0xcb90, 0xcb91, 0xcb92,
-  0xcb93, 0xcb94, 0xcb95, 0xcb96, 0xcb97, 0xcb98, 0xcb99, 0xcb9a,
-  0xcb9b, 0xcb9c, 0xcb9d, 0xcb9e, 0xcb9f, 0xcba0, 0xcc40, 0xcc41,
-  0xcc42, 0xcc43, 0xcc44, 0xcc45, 0xcc46, 0xcc47, 0xcc48, 0xcc49,
-  0xcc4a, 0xcc4b, 0xcc4c, 0xcc4d, 0xcc4e, 0xcc4f, 0xcc50, 0xcc51,
-  0xcc52, 0xcc53, 0xcc54, 0xcc55, 0xcc56, 0xcc57, 0xcc58, 0xcc59,
-  0xcc5a, 0xcc5b, 0xcc5c, 0xcc5d, 0xcc5e, 0xcc5f, 0xcc60, 0xcc61,
-  0xcc62, 0xcc63, 0xcc64, 0xcc65, 0xcc66, 0xcc67, 0xcc68, 0xcc69,
-  0xcc6a, 0xcc6b, 0xcc6c, 0xcc6d, 0xcc6e, 0xcc6f, 0xcc70, 0xcc71,
-  0xcc72, 0xcc73, 0xcc74, 0xcc75, 0xcc76, 0xcc77, 0xcc78, 0xcc79,
-  0xcc7a, 0xcc7b, 0xcc7c, 0xcc7d, 0xcc7e, 0xcc80, 0xcc81, 0xcc82,
-  0xcc83, 0xcc84, 0xcc85, 0xcc86, 0xcc87, 0xcc88, 0xcc89, 0xcc8a,
-  0xcc8b, 0xcc8c, 0xcc8d, 0xcc8e, 0xcc8f, 0xcc90, 0xcc91, 0xcc92,
-  0xcc93, 0xcc94, 0xcc95, 0xcc96, 0xcc97, 0xcc98, 0xcc99, 0xcc9a,
-  0xcc9b, 0xcc9c, 0xcc9d, 0xcc9e, 0xcc9f, 0xcca0, 0xcd40, 0xcd41,
-  0xcd42, 0xcd43, 0xcd44, 0xcd45, 0xcd46, 0xcd47, 0xcd48, 0xcd49,
-  0xcd4a, 0xcd4b, 0xcd4c, 0xcd4d, 0xcd4e, 0xcd4f, 0xcd50, 0xcd51,
-  0xcd52, 0xcd53, 0xcd54, 0xcd55, 0xcd56, 0xcd57, 0xcd58, 0xcd59,
-  0xcd5a, 0xcd5b, 0xcd5c, 0xcd5d, 0xcd5e, 0xcd5f, 0xcd60, 0xcd61,
-  0xcd62, 0xcd63, 0xcd64, 0xcd65, 0xcd66, 0xcd67, 0xcd68, 0xcd69,
-  0xcd6a, 0xcd6b, 0xcd6c, 0xcd6d, 0xcd6e, 0xcd6f, 0xcd70, 0xcd71,
-  0xcd72, 0xcd73, 0xcd74, 0xcd75, 0xcd76, 0xcd77, 0xcd78, 0xcd79,
-  0xcd7a, 0xcd7b, 0xcd7c, 0xcd7d, 0xcd7e, 0xcd80, 0xcd81, 0xcd82,
-  0xcd83, 0xcd84, 0xcd85, 0xcd86, 0xcd87, 0xcd88, 0xcd89, 0xcd8a,
-  0xcd8b, 0xcd8c, 0xcd8d, 0xcd8e, 0xcd8f, 0xcd90, 0xcd91, 0xcd92,
-  0xcd93, 0xcd94, 0xcd95, 0xcd96, 0xcd97, 0xcd98, 0xcd99, 0xcd9a,
-  0xcd9b, 0xcd9c, 0xcd9d, 0xcd9e, 0xcd9f, 0xcda0, 0xce40, 0xce41,
-  0xce42, 0xce43, 0xce44, 0xce45, 0xce46, 0xce47, 0xce48, 0xce49,
-  0xce4a, 0xce4b, 0xce4c, 0xce4d, 0xce4e, 0xce4f, 0xce50, 0xce51,
-  0xce52, 0xce53, 0xce54, 0xce55, 0xce56, 0xce57, 0xce58, 0xce59,
-  0xce5a, 0xce5b, 0xce5c, 0xce5d, 0xce5e, 0xce5f, 0xce60, 0xce61,
-  0xce62, 0xce63, 0xce64, 0xce65, 0xce66, 0xce67, 0xce68, 0xce69,
-  0xce6a, 0xce6b, 0xce6c, 0xce6d, 0xce6e, 0xce6f, 0xce70, 0xce71,
-  0xce72, 0xce73, 0xce74, 0xce75, 0xce76, 0xce77, 0xce78, 0xce79,
-  0xce7a, 0xce7b, 0xce7c, 0xce7d, 0xce7e, 0xce80, 0xce81, 0xce82,
-  0xce83, 0xce84, 0xce85, 0xce86, 0xce87, 0xce88, 0xce89, 0xce8a,
-  0xce8b, 0xce8c, 0xce8d, 0xce8e, 0xce8f, 0xce90, 0xce91, 0xce92,
-  0xce93, 0xce94, 0xce95, 0xce96, 0xce97, 0xce98, 0xce99, 0xce9a,
-  0xce9b, 0xce9c, 0xce9d, 0xce9e, 0xce9f, 0xcea0, 0xcf40, 0xcf41,
-  0xcf42, 0xcf43, 0xcf44, 0xcf45, 0xcf46, 0xcf47, 0xcf48, 0xcf49,
-  0xcf4a, 0xcf4b, 0xcf4c, 0xcf4d, 0xcf4e, 0xcf4f, 0xcf50, 0xcf51,
-  0xcf52, 0xcf53, 0xcf54, 0xcf55, 0xcf56, 0xcf57, 0xcf58, 0xcf59,
-  0xcf5a, 0xcf5b, 0xcf5c, 0xcf5d, 0xcf5e, 0xcf5f, 0xcf60, 0xcf61,
-  0xcf62, 0xcf63, 0xcf64, 0xcf65, 0xcf66, 0xcf67, 0xcf68, 0xcf69,
-  0xcf6a, 0xcf6b, 0xcf6c, 0xcf6d, 0xcf6e, 0xcf6f, 0xcf70, 0xcf71,
-  0xcf72, 0xcf73, 0xcf74, 0xcf75, 0xcf76, 0xcf77, 0xcf78, 0xcf79,
-  0xcf7a, 0xcf7b, 0xcf7c, 0xcf7d, 0xcf7e, 0xcf80, 0xcf81, 0xcf82,
-  0xcf83, 0xcf84, 0xcf85, 0xcf86, 0xcf87, 0xcf88, 0xcf89, 0xcf8a,
-  0xcf8b, 0xcf8c, 0xcf8d, 0xcf8e, 0xcf8f, 0xcf90, 0xcf91, 0xcf92,
-  0xcf93, 0xcf94, 0xcf95, 0xcf96, 0xcf97, 0xcf98, 0xcf99, 0xcf9a,
-  0xcf9b, 0xcf9c, 0xcf9d, 0xcf9e, 0xcf9f, 0xcfa0, 0xd040, 0xd041,
-  0xd042, 0xd043, 0xd044, 0xd045, 0xd046, 0xd047, 0xd048, 0xd049,
-  0xd04a, 0xd04b, 0xd04c, 0xd04d, 0xd04e, 0xd04f, 0xd050, 0xd051,
-  0xd052, 0xd053, 0xd054, 0xd055, 0xd056, 0xd057, 0xd058, 0xd059,
-  0xd05a, 0xd05b, 0xd05c, 0xd05d, 0xd05e, 0xd05f, 0xd060, 0xd061,
-  0xd062, 0xd063, 0xd064, 0xd065, 0xd066, 0xd067, 0xd068, 0xd069,
-  0xd06a, 0xd06b, 0xd06c, 0xd06d, 0xd06e, 0xd06f, 0xd070, 0xd071,
-  0xd072, 0xd073, 0xd074, 0xd075, 0xd076, 0xd077, 0xd078, 0xd079,
-  0xd07a, 0xd07b, 0xd07c, 0xd07d, 0xd07e, 0xd080, 0xd081, 0xd082,
-  0xd083, 0xd084, 0xd085, 0xd086, 0xd087, 0xd088, 0xd089, 0xd08a,
-  0xd08b, 0xd08c, 0xd08d, 0xd08e, 0xd08f, 0xd090, 0xd091, 0xd092,
-  0xd093, 0xd094, 0xd095, 0xd096, 0xd097, 0xd098, 0xd099, 0xd09a,
-  0xd09b, 0xd09c, 0xd09d, 0xd09e, 0xd09f, 0xd0a0, 0xd140, 0xd141,
-  0xd142, 0xd143, 0xd144, 0xd145, 0xd146, 0xd147, 0xd148, 0xd149,
-  0xd14a, 0xd14b, 0xd14c, 0xd14d, 0xd14e, 0xd14f, 0xd150, 0xd151,
-  0xd152, 0xd153, 0xd154, 0xd155, 0xd156, 0xd157, 0xd158, 0xd159,
-  0xd15a, 0xd15b, 0xd15c, 0xd15d, 0xd15e, 0xd15f, 0xd160, 0xd161,
-  0xd162, 0xd163, 0xd164, 0xd165, 0xd166, 0xd167, 0xd168, 0xd169,
-  0xd16a, 0xd16b, 0xd16c, 0xd16d, 0xd16e, 0xd16f, 0xd170, 0xd171,
-  0xd172, 0xd173, 0xd174, 0xd175, 0xd176, 0xd177, 0xd178, 0xd179,
-  0xd17a, 0xd17b, 0xd17c, 0xd17d, 0xd17e, 0xd180, 0xd181, 0xd182,
-  0xd183, 0xd184, 0xd185, 0xd186, 0xd187, 0xd188, 0xd189, 0xd18a,
-  0xd18b, 0xd18c, 0xd18d, 0xd18e, 0xd18f, 0xd190, 0xd191, 0xd192,
-  0xd193, 0xd194, 0xd195, 0xd196, 0xd197, 0xd198, 0xd199, 0xd19a,
-  0xd19b, 0xd19c, 0xd19d, 0xd19e, 0xd19f, 0xd1a0, 0xd240, 0xd241,
-  0xd242, 0xd243, 0xd244, 0xd245, 0xd246, 0xd247, 0xd248, 0xd249,
-  0xd24a, 0xd24b, 0xd24c, 0xd24d, 0xd24e, 0xd24f, 0xd250, 0xd251,
-  0xd252, 0xd253, 0xd254, 0xd255, 0xd256, 0xd257, 0xd258, 0xd259,
-  0xd25a, 0xd25b, 0xd25c, 0xd25d, 0xd25e, 0xd25f, 0xd260, 0xd261,
-  0xd262, 0xd263, 0xd264, 0xd265, 0xd266, 0xd267, 0xd268, 0xd269,
-  0xd26a, 0xd26b, 0xd26c, 0xd26d, 0xd26e, 0xd26f, 0xd270, 0xd271,
-  0xd272, 0xd273, 0xd274, 0xd275, 0xd276, 0xd277, 0xd278, 0xd279,
-  0xd27a, 0xd27b, 0xd27c, 0xd27d, 0xd27e, 0xd280, 0xd281, 0xd282,
-  0xd283, 0xd284, 0xd285, 0xd286, 0xd287, 0xd288, 0xd289, 0xd28a,
-  0xd28b, 0xd28c, 0xd28d, 0xd28e, 0xd28f, 0xd290, 0xd291, 0xd292,
-  0xd293, 0xd294, 0xd295, 0xd296, 0xd297, 0xd298, 0xd299, 0xd29a,
-  0xd29b, 0xd29c, 0xd29d, 0xd29e, 0xd29f, 0xd2a0, 0xd340, 0xd341,
-  0xd342, 0xd343, 0xd344, 0xd345, 0xd346, 0xd347, 0xd348, 0xd349,
-  0xd34a, 0xd34b, 0xd34c, 0xd34d, 0xd34e, 0xd34f, 0xd350, 0xd351,
-  0xd352, 0xd353, 0xd354, 0xd355, 0xd356, 0xd357, 0xd358, 0xd359,
-  0xd35a, 0xd35b, 0xd35c, 0xd35d, 0xd35e, 0xd35f, 0xd360, 0xd361,
-  0xd362, 0xd363, 0xd364, 0xd365, 0xd366, 0xd367, 0xd368, 0xd369,
-  0xd36a, 0xd36b, 0xd36c, 0xd36d, 0xd36e, 0xd36f, 0xd370, 0xd371,
-  0xd372, 0xd373, 0xd374, 0xd375, 0xd376, 0xd377, 0xd378, 0xd379,
-  0xd37a, 0xd37b, 0xd37c, 0xd37d, 0xd37e, 0xd380, 0xd381, 0xd382,
-  0xd383, 0xd384, 0xd385, 0xd386, 0xd387, 0xd388, 0xd389, 0xd38a,
-  0xd38b, 0xd38c, 0xd38d, 0xd38e, 0xd38f, 0xd390, 0xd391, 0xd392,
-  0xd393, 0xd394, 0xd395, 0xd396, 0xd397, 0xd398, 0xd399, 0xd39a,
-  0xd39b, 0xd39c, 0xd39d, 0xd39e, 0xd39f, 0xd3a0, 0xd440, 0xd441,
-  0xd442, 0xd443, 0xd444, 0xd445, 0xd446, 0xd447, 0xd448, 0xd449,
-  0xd44a, 0xd44b, 0xd44c, 0xd44d, 0xd44e, 0xd44f, 0xd450, 0xd451,
-  0xd452, 0xd453, 0xd454, 0xd455, 0xd456, 0xd457, 0xd458, 0xd459,
-  0xd45a, 0xd45b, 0xd45c, 0xd45d, 0xd45e, 0xd45f, 0xd460, 0xd461,
-  0xd462, 0xd463, 0xd464, 0xd465, 0xd466, 0xd467, 0xd468, 0xd469,
-  0xd46a, 0xd46b, 0xd46c, 0xd46d, 0xd46e, 0xd46f, 0xd470, 0xd471,
-  0xd472, 0xd473, 0xd474, 0xd475, 0xd476, 0xd477, 0xd478, 0xd479,
-  0xd47a, 0xd47b, 0xd47c, 0xd47d, 0xd47e, 0xd480, 0xd481, 0xd482,
-  0xd483, 0xd484, 0xd485, 0xd486, 0xd487, 0xd488, 0xd489, 0xd48a,
-  0xd48b, 0xd48c, 0xd48d, 0xd48e, 0xd48f, 0xd490, 0xd491, 0xd492,
-  0xd493, 0xd494, 0xd495, 0xd496, 0xd497, 0xd498, 0xd499, 0xd49a,
-  0xd49b, 0xd49c, 0xd49d, 0xd49e, 0xd49f, 0xd4a0, 0xd540, 0xd541,
-  0xd542, 0xd543, 0xd544, 0xd545, 0xd546, 0xd547, 0xd548, 0xd549,
-  0xd54a, 0xd54b, 0xd54c, 0xd54d, 0xd54e, 0xd54f, 0xd550, 0xd551,
-  0xd552, 0xd553, 0xd554, 0xd555, 0xd556, 0xd557, 0xd558, 0xd559,
-  0xd55a, 0xd55b, 0xd55c, 0xd55d, 0xd55e, 0xd55f, 0xd560, 0xd561,
-  0xd562, 0xd563, 0xd564, 0xd565, 0xd566, 0xd567, 0xd568, 0xd569,
-  0xd56a, 0xd56b, 0xd56c, 0xd56d, 0xd56e, 0xd56f, 0xd570, 0xd571,
-  0xd572, 0xd573, 0xd574, 0xd575, 0xd576, 0xd577, 0xd578, 0xd579,
-  0xd57a, 0xd57b, 0xd57c, 0xd57d, 0xd57e, 0xd580, 0xd581, 0xd582,
-  0xd583, 0xd584, 0xd585, 0xd586, 0xd587, 0xd588, 0xd589, 0xd58a,
-  0xd58b, 0xd58c, 0xd58d, 0xd58e, 0xd58f, 0xd590, 0xd591, 0xd592,
-  0xd593, 0xd594, 0xd595, 0xd596, 0xd597, 0xd598, 0xd599, 0xd59a,
-  0xd59b, 0xd59c, 0xd59d, 0xd59e, 0xd59f, 0xd5a0, 0xd640, 0xd641,
-  0xd642, 0xd643, 0xd644, 0xd645, 0xd646, 0xd647, 0xd648, 0xd649,
-  0xd64a, 0xd64b, 0xd64c, 0xd64d, 0xd64e, 0xd64f, 0xd650, 0xd651,
-  0xd652, 0xd653, 0xd654, 0xd655, 0xd656, 0xd657, 0xd658, 0xd659,
-  0xd65a, 0xd65b, 0xd65c, 0xd65d, 0xd65e, 0xd65f, 0xd660, 0xd661,
-  0xd662, 0xd663, 0xd664, 0xd665, 0xd666, 0xd667, 0xd668, 0xd669,
-  0xd66a, 0xd66b, 0xd66c, 0xd66d, 0xd66e, 0xd66f, 0xd670, 0xd671,
-  0xd672, 0xd673, 0xd674, 0xd675, 0xd676, 0xd677, 0xd678, 0xd679,
-  0xd67a, 0xd67b, 0xd67c, 0xd67d, 0xd67e, 0xd680, 0xd681, 0xd682,
-  0xd683, 0xd684, 0xd685, 0xd686, 0xd687, 0xd688, 0xd689, 0xd68a,
-  0xd68b, 0xd68c, 0xd68d, 0xd68e, 0xd68f, 0xd690, 0xd691, 0xd692,
-  0xd693, 0xd694, 0xd695, 0xd696, 0xd697, 0xd698, 0xd699, 0xd69a,
-  0xd69b, 0xd69c, 0xd69d, 0xd69e, 0xd69f, 0xd6a0, 0xd740, 0xd741,
-  0xd742, 0xd743, 0xd744, 0xd745, 0xd746, 0xd747, 0xd748, 0xd749,
-  0xd74a, 0xd74b, 0xd74c, 0xd74d, 0xd74e, 0xd74f, 0xd750, 0xd751,
-  0xd752, 0xd753, 0xd754, 0xd755, 0xd756, 0xd757, 0xd758, 0xd759,
-  0xd75a, 0xd75b, 0xd75c, 0xd75d, 0xd75e, 0xd75f, 0xd760, 0xd761,
-  0xd762, 0xd763, 0xd764, 0xd765, 0xd766, 0xd767, 0xd768, 0xd769,
-  0xd76a, 0xd76b, 0xd76c, 0xd76d, 0xd76e, 0xd76f, 0xd770, 0xd771,
-  0xd772, 0xd773, 0xd774, 0xd775, 0xd776, 0xd777, 0xd778, 0xd779,
-  0xd77a, 0xd77b, 0xd77c, 0xd77d, 0xd77e, 0xd780, 0xd781, 0xd782,
-  0xd783, 0xd784, 0xd785, 0xd786, 0xd787, 0xd788, 0xd789, 0xd78a,
-  0xd78b, 0xd78c, 0xd78d, 0xd78e, 0xd78f, 0xd790, 0xd791, 0xd792,
-  0xd793, 0xd794, 0xd795, 0xd796, 0xd797, 0xd798, 0xd799, 0xd79a,
-  0xd79b, 0xd79c, 0xd79d, 0xd79e, 0xd79f, 0xd7a0, 0xd840, 0xd841,
-  0xd842, 0xd843, 0xd844, 0xd845, 0xd846, 0xd847, 0xd848, 0xd849,
-  0xd84a, 0xd84b, 0xd84c, 0xd84d, 0xd84e, 0xd84f, 0xd850, 0xd851,
-  0xd852, 0xd853, 0xd854, 0xd855, 0xd856, 0xd857, 0xd858, 0xd859,
-  0xd85a, 0xd85b, 0xd85c, 0xd85d, 0xd85e, 0xd85f, 0xd860, 0xd861,
-  0xd862, 0xd863, 0xd864, 0xd865, 0xd866, 0xd867, 0xd868, 0xd869,
-  0xd86a, 0xd86b, 0xd86c, 0xd86d, 0xd86e, 0xd86f, 0xd870, 0xd871,
-  0xd872, 0xd873, 0xd874, 0xd875, 0xd876, 0xd877, 0xd878, 0xd879,
-  0xd87a, 0xd87b, 0xd87c, 0xd87d, 0xd87e, 0xd880, 0xd881, 0xd882,
-  0xd883, 0xd884, 0xd885, 0xd886, 0xd887, 0xd888, 0xd889, 0xd88a,
-  0xd88b, 0xd88c, 0xd88d, 0xd88e, 0xd88f, 0xd890, 0xd891, 0xd892,
-  0xd893, 0xd894, 0xd895, 0xd896, 0xd897, 0xd898, 0xd899, 0xd89a,
-  0xd89b, 0xd89c, 0xd89d, 0xd89e, 0xd89f, 0xd8a0, 0xd940, 0xd941,
-  0xd942, 0xd943, 0xd944, 0xd945, 0xd946, 0xd947, 0xd948, 0xd949,
-  0xd94a, 0xd94b, 0xd94c, 0xd94d, 0xd94e, 0xd94f, 0xd950, 0xd951,
-  0xd952, 0xd953, 0xd954, 0xd955, 0xd956, 0xd957, 0xd958, 0xd959,
-  0xd95a, 0xd95b, 0xd95c, 0xd95d, 0xd95e, 0xd95f, 0xd960, 0xd961,
-  0xd962, 0xd963, 0xd964, 0xd965, 0xd966, 0xd967, 0xd968, 0xd969,
-  0xd96a, 0xd96b, 0xd96c, 0xd96d, 0xd96e, 0xd96f, 0xd970, 0xd971,
-  0xd972, 0xd973, 0xd974, 0xd975, 0xd976, 0xd977, 0xd978, 0xd979,
-  0xd97a, 0xd97b, 0xd97c, 0xd97d, 0xd97e, 0xd980, 0xd981, 0xd982,
-  0xd983, 0xd984, 0xd985, 0xd986, 0xd987, 0xd988, 0xd989, 0xd98a,
-  0xd98b, 0xd98c, 0xd98d, 0xd98e, 0xd98f, 0xd990, 0xd991, 0xd992,
-  0xd993, 0xd994, 0xd995, 0xd996, 0xd997, 0xd998, 0xd999, 0xd99a,
-  0xd99b, 0xd99c, 0xd99d, 0xd99e, 0xd99f, 0xd9a0, 0xda40, 0xda41,
-  0xda42, 0xda43, 0xda44, 0xda45, 0xda46, 0xda47, 0xda48, 0xda49,
-  0xda4a, 0xda4b, 0xda4c, 0xda4d, 0xda4e, 0xda4f, 0xda50, 0xda51,
-  0xda52, 0xda53, 0xda54, 0xda55, 0xda56, 0xda57, 0xda58, 0xda59,
-  0xda5a, 0xda5b, 0xda5c, 0xda5d, 0xda5e, 0xda5f, 0xda60, 0xda61,
-  0xda62, 0xda63, 0xda64, 0xda65, 0xda66, 0xda67, 0xda68, 0xda69,
-  0xda6a, 0xda6b, 0xda6c, 0xda6d, 0xda6e, 0xda6f, 0xda70, 0xda71,
-  0xda72, 0xda73, 0xda74, 0xda75, 0xda76, 0xda77, 0xda78, 0xda79,
-  0xda7a, 0xda7b, 0xda7c, 0xda7d, 0xda7e, 0xda80, 0xda81, 0xda82,
-  0xda83, 0xda84, 0xda85, 0xda86, 0xda87, 0xda88, 0xda89, 0xda8a,
-  0xda8b, 0xda8c, 0xda8d, 0xda8e, 0xda8f, 0xda90, 0xda91, 0xda92,
-  0xda93, 0xda94, 0xda95, 0xda96, 0xda97, 0xda98, 0xda99, 0xda9a,
-  0xda9b, 0xda9c, 0xda9d, 0xda9e, 0xda9f, 0xdaa0, 0xdb40, 0xdb41,
-  0xdb42, 0xdb43, 0xdb44, 0xdb45, 0xdb46, 0xdb47, 0xdb48, 0xdb49,
-  0xdb4a, 0xdb4b, 0xdb4c, 0xdb4d, 0xdb4e, 0xdb4f, 0xdb50, 0xdb51,
-  0xdb52, 0xdb53, 0xdb54, 0xdb55, 0xdb56, 0xdb57, 0xdb58, 0xdb59,
-  0xdb5a, 0xdb5b, 0xdb5c, 0xdb5d, 0xdb5e, 0xdb5f, 0xdb60, 0xdb61,
-  0xdb62, 0xdb63, 0xdb64, 0xdb65, 0xdb66, 0xdb67, 0xdb68, 0xdb69,
-  0xdb6a, 0xdb6b, 0xdb6c, 0xdb6d, 0xdb6e, 0xdb6f, 0xdb70, 0xdb71,
-  0xdb72, 0xdb73, 0xdb74, 0xdb75, 0xdb76, 0xdb77, 0xdb78, 0xdb79,
-  0xdb7a, 0xdb7b, 0xdb7c, 0xdb7d, 0xdb7e, 0xdb80, 0xdb81, 0xdb82,
-  0xdb83, 0xdb84, 0xdb85, 0xdb86, 0xdb87, 0xdb88, 0xdb89, 0xdb8a,
-  0xdb8b, 0xdb8c, 0xdb8d, 0xdb8e, 0xdb8f, 0xdb90, 0xdb91, 0xdb92,
-  0xdb93, 0xdb94, 0xdb95, 0xdb96, 0xdb97, 0xdb98, 0xdb99, 0xdb9a,
-  0xdb9b, 0xdb9c, 0xdb9d, 0xdb9e, 0xdb9f, 0xdba0, 0xdc40, 0xdc41,
-  0xdc42, 0xdc43, 0xdc44, 0xdc45, 0xdc46, 0xdc47, 0xdc48, 0xdc49,
-  0xdc4a, 0xdc4b, 0xdc4c, 0xdc4d, 0xdc4e, 0xdc4f, 0xdc50, 0xdc51,
-  0xdc52, 0xdc53, 0xdc54, 0xdc55, 0xdc56, 0xdc57, 0xdc58, 0xdc59,
-  0xdc5a, 0xdc5b, 0xdc5c, 0xdc5d, 0xdc5e, 0xdc5f, 0xdc60, 0xdc61,
-  0xdc62, 0xdc63, 0xdc64, 0xdc65, 0xdc66, 0xdc67, 0xdc68, 0xdc69,
-  0xdc6a, 0xdc6b, 0xdc6c, 0xdc6d, 0xdc6e, 0xdc6f, 0xdc70, 0xdc71,
-  0xdc72, 0xdc73, 0xdc74, 0xdc75, 0xdc76, 0xdc77, 0xdc78, 0xdc79,
-  0xdc7a, 0xdc7b, 0xdc7c, 0xdc7d, 0xdc7e, 0xdc80, 0xdc81, 0xdc82,
-  0xdc83, 0xdc84, 0xdc85, 0xdc86, 0xdc87, 0xdc88, 0xdc89, 0xdc8a,
-  0xdc8b, 0xdc8c, 0xdc8d, 0xdc8e, 0xdc8f, 0xdc90, 0xdc91, 0xdc92,
-  0xdc93, 0xdc94, 0xdc95, 0xdc96, 0xdc97, 0xdc98, 0xdc99, 0xdc9a,
-  0xdc9b, 0xdc9c, 0xdc9d, 0xdc9e, 0xdc9f, 0xdca0, 0xdd40, 0xdd41,
-  0xdd42, 0xdd43, 0xdd44, 0xdd45, 0xdd46, 0xdd47, 0xdd48, 0xdd49,
-  0xdd4a, 0xdd4b, 0xdd4c, 0xdd4d, 0xdd4e, 0xdd4f, 0xdd50, 0xdd51,
-  0xdd52, 0xdd53, 0xdd54, 0xdd55, 0xdd56, 0xdd57, 0xdd58, 0xdd59,
-  0xdd5a, 0xdd5b, 0xdd5c, 0xdd5d, 0xdd5e, 0xdd5f, 0xdd60, 0xdd61,
-  0xdd62, 0xdd63, 0xdd64, 0xdd65, 0xdd66, 0xdd67, 0xdd68, 0xdd69,
-  0xdd6a, 0xdd6b, 0xdd6c, 0xdd6d, 0xdd6e, 0xdd6f, 0xdd70, 0xdd71,
-  0xdd72, 0xdd73, 0xdd74, 0xdd75, 0xdd76, 0xdd77, 0xdd78, 0xdd79,
-  0xdd7a, 0xdd7b, 0xdd7c, 0xdd7d, 0xdd7e, 0xdd80, 0xdd81, 0xdd82,
-  0xdd83, 0xdd84, 0xdd85, 0xdd86, 0xdd87, 0xdd88, 0xdd89, 0xdd8a,
-  0xdd8b, 0xdd8c, 0xdd8d, 0xdd8e, 0xdd8f, 0xdd90, 0xdd91, 0xdd92,
-  0xdd93, 0xdd94, 0xdd95, 0xdd96, 0xdd97, 0xdd98, 0xdd99, 0xdd9a,
-  0xdd9b, 0xdd9c, 0xdd9d, 0xdd9e, 0xdd9f, 0xdda0, 0xde40, 0xde41,
-  0xde42, 0xde43, 0xde44, 0xde45, 0xde46, 0xde47, 0xde48, 0xde49,
-  0xde4a, 0xde4b, 0xde4c, 0xde4d, 0xde4e, 0xde4f, 0xde50, 0xde51,
-  0xde52, 0xde53, 0xde54, 0xde55, 0xde56, 0xde57, 0xde58, 0xde59,
-  0xde5a, 0xde5b, 0xde5c, 0xde5d, 0xde5e, 0xde5f, 0xde60, 0xde61,
-  0xde62, 0xde63, 0xde64, 0xde65, 0xde66, 0xde67, 0xde68, 0xde69,
-  0xde6a, 0xde6b, 0xde6c, 0xde6d, 0xde6e, 0xde6f, 0xde70, 0xde71,
-  0xde72, 0xde73, 0xde74, 0xde75, 0xde76, 0xde77, 0xde78, 0xde79,
-  0xde7a, 0xde7b, 0xde7c, 0xde7d, 0xde7e, 0xde80, 0xde81, 0xde82,
-  0xde83, 0xde84, 0xde85, 0xde86, 0xde87, 0xde88, 0xde89, 0xde8a,
-  0xde8b, 0xde8c, 0xde8d, 0xde8e, 0xde8f, 0xde90, 0xde91, 0xde92,
-  0xde93, 0xde94, 0xde95, 0xde96, 0xde97, 0xde98, 0xde99, 0xde9a,
-  0xde9b, 0xde9c, 0xde9d, 0xde9e, 0xde9f, 0xdea0, 0xdf40, 0xdf41,
-  0xdf42, 0xdf43, 0xdf44, 0xdf45, 0xdf46, 0xdf47, 0xdf48, 0xdf49,
-  0xdf4a, 0xdf4b, 0xdf4c, 0xdf4d, 0xdf4e, 0xdf4f, 0xdf50, 0xdf51,
-  0xdf52, 0xdf53, 0xdf54, 0xdf55, 0xdf56, 0xdf57, 0xdf58, 0xdf59,
-  0xdf5a, 0xdf5b, 0xdf5c, 0xdf5d, 0xdf5e, 0xdf5f, 0xdf60, 0xdf61,
-  0xdf62, 0xdf63, 0xdf64, 0xdf65, 0xdf66, 0xdf67, 0xdf68, 0xdf69,
-  0xdf6a, 0xdf6b, 0xdf6c, 0xdf6d, 0xdf6e, 0xdf6f, 0xdf70, 0xdf71,
-  0xdf72, 0xdf73, 0xdf74, 0xdf75, 0xdf76, 0xdf77, 0xdf78, 0xdf79,
-  0xdf7a, 0xdf7b, 0xdf7c, 0xdf7d, 0xdf7e, 0xdf80, 0xdf81, 0xdf82,
-  0xdf83, 0xdf84, 0xdf85, 0xdf86, 0xdf87, 0xdf88, 0xdf89, 0xdf8a,
-  0xdf8b, 0xdf8c, 0xdf8d, 0xdf8e, 0xdf8f, 0xdf90, 0xdf91, 0xdf92,
-  0xdf93, 0xdf94, 0xdf95, 0xdf96, 0xdf97, 0xdf98, 0xdf99, 0xdf9a,
-  0xdf9b, 0xdf9c, 0xdf9d, 0xdf9e, 0xdf9f, 0xdfa0, 0xe040, 0xe041,
-  0xe042, 0xe043, 0xe044, 0xe045, 0xe046, 0xe047, 0xe048, 0xe049,
-  0xe04a, 0xe04b, 0xe04c, 0xe04d, 0xe04e, 0xe04f, 0xe050, 0xe051,
-  0xe052, 0xe053, 0xe054, 0xe055, 0xe056, 0xe057, 0xe058, 0xe059,
-  0xe05a, 0xe05b, 0xe05c, 0xe05d, 0xe05e, 0xe05f, 0xe060, 0xe061,
-  0xe062, 0xe063, 0xe064, 0xe065, 0xe066, 0xe067, 0xe068, 0xe069,
-  0xe06a, 0xe06b, 0xe06c, 0xe06d, 0xe06e, 0xe06f, 0xe070, 0xe071,
-  0xe072, 0xe073, 0xe074, 0xe075, 0xe076, 0xe077, 0xe078, 0xe079,
-  0xe07a, 0xe07b, 0xe07c, 0xe07d, 0xe07e, 0xe080, 0xe081, 0xe082,
-  0xe083, 0xe084, 0xe085, 0xe086, 0xe087, 0xe088, 0xe089, 0xe08a,
-  0xe08b, 0xe08c, 0xe08d, 0xe08e, 0xe08f, 0xe090, 0xe091, 0xe092,
-  0xe093, 0xe094, 0xe095, 0xe096, 0xe097, 0xe098, 0xe099, 0xe09a,
-  0xe09b, 0xe09c, 0xe09d, 0xe09e, 0xe09f, 0xe0a0, 0xe140, 0xe141,
-  0xe142, 0xe143, 0xe144, 0xe145, 0xe146, 0xe147, 0xe148, 0xe149,
-  0xe14a, 0xe14b, 0xe14c, 0xe14d, 0xe14e, 0xe14f, 0xe150, 0xe151,
-  0xe152, 0xe153, 0xe154, 0xe155, 0xe156, 0xe157, 0xe158, 0xe159,
-  0xe15a, 0xe15b, 0xe15c, 0xe15d, 0xe15e, 0xe15f, 0xe160, 0xe161,
-  0xe162, 0xe163, 0xe164, 0xe165, 0xe166, 0xe167, 0xe168, 0xe169,
-  0xe16a, 0xe16b, 0xe16c, 0xe16d, 0xe16e, 0xe16f, 0xe170, 0xe171,
-  0xe172, 0xe173, 0xe174, 0xe175, 0xe176, 0xe177, 0xe178, 0xe179,
-  0xe17a, 0xe17b, 0xe17c, 0xe17d, 0xe17e, 0xe180, 0xe181, 0xe182,
-  0xe183, 0xe184, 0xe185, 0xe186, 0xe187, 0xe188, 0xe189, 0xe18a,
-  0xe18b, 0xe18c, 0xe18d, 0xe18e, 0xe18f, 0xe190, 0xe191, 0xe192,
-  0xe193, 0xe194, 0xe195, 0xe196, 0xe197, 0xe198, 0xe199, 0xe19a,
-  0xe19b, 0xe19c, 0xe19d, 0xe19e, 0xe19f, 0xe1a0, 0xe240, 0xe241,
-  0xe242, 0xe243, 0xe244, 0xe245, 0xe246, 0xe247, 0xe248, 0xe249,
-  0xe24a, 0xe24b, 0xe24c, 0xe24d, 0xe24e, 0xe24f, 0xe250, 0xe251,
-  0xe252, 0xe253, 0xe254, 0xe255, 0xe256, 0xe257, 0xe258, 0xe259,
-  0xe25a, 0xe25b, 0xe25c, 0xe25d, 0xe25e, 0xe25f, 0xe260, 0xe261,
-  0xe262, 0xe263, 0xe264, 0xe265, 0xe266, 0xe267, 0xe268, 0xe269,
-  0xe26a, 0xe26b, 0xe26c, 0xe26d, 0xe26e, 0xe26f, 0xe270, 0xe271,
-  0xe272, 0xe273, 0xe274, 0xe275, 0xe276, 0xe277, 0xe278, 0xe279,
-  0xe27a, 0xe27b, 0xe27c, 0xe27d, 0xe27e, 0xe280, 0xe281, 0xe282,
-  0xe283, 0xe284, 0xe285, 0xe286, 0xe287, 0xe288, 0xe289, 0xe28a,
-  0xe28b, 0xe28c, 0xe28d, 0xe28e, 0xe28f, 0xe290, 0xe291, 0xe292,
-  0xe293, 0xe294, 0xe295, 0xe296, 0xe297, 0xe298, 0xe299, 0xe29a,
-  0xe29b, 0xe29c, 0xe29d, 0xe29e, 0xe29f, 0xe2a0, 0xe340, 0xe341,
-  0xe342, 0xe343, 0xe344, 0xe345, 0xe346, 0xe347, 0xe348, 0xe349,
-  0xe34a, 0xe34b, 0xe34c, 0xe34d, 0xe34e, 0xe34f, 0xe350, 0xe351,
-  0xe352, 0xe353, 0xe354, 0xe355, 0xe356, 0xe357, 0xe358, 0xe359,
-  0xe35a, 0xe35b, 0xe35c, 0xe35d, 0xe35e, 0xe35f, 0xe360, 0xe361,
-  0xe362, 0xe363, 0xe364, 0xe365, 0xe366, 0xe367, 0xe368, 0xe369,
-  0xe36a, 0xe36b, 0xe36c, 0xe36d, 0xe36e, 0xe36f, 0xe370, 0xe371,
-  0xe372, 0xe373, 0xe374, 0xe375, 0xe376, 0xe377, 0xe378, 0xe379,
-  0xe37a, 0xe37b, 0xe37c, 0xe37d, 0xe37e, 0xe380, 0xe381, 0xe382,
-  0xe383, 0xe384, 0xe385, 0xe386, 0xe387, 0xe388, 0xe389, 0xe38a,
-  0xe38b, 0xe38c, 0xe38d, 0xe38e, 0xe38f, 0xe390, 0xe391, 0xe392,
-  0xe393, 0xe394, 0xe395, 0xe396, 0xe397, 0xe398, 0xe399, 0xe39a,
-  0xe39b, 0xe39c, 0xe39d, 0xe39e, 0xe39f, 0xe3a0, 0xe440, 0xe441,
-  0xe442, 0xe443, 0xe444, 0xe445, 0xe446, 0xe447, 0xe448, 0xe449,
-  0xe44a, 0xe44b, 0xe44c, 0xe44d, 0xe44e, 0xe44f, 0xe450, 0xe451,
-  0xe452, 0xe453, 0xe454, 0xe455, 0xe456, 0xe457, 0xe458, 0xe459,
-  0xe45a, 0xe45b, 0xe45c, 0xe45d, 0xe45e, 0xe45f, 0xe460, 0xe461,
-  0xe462, 0xe463, 0xe464, 0xe465, 0xe466, 0xe467, 0xe468, 0xe469,
-  0xe46a, 0xe46b, 0xe46c, 0xe46d, 0xe46e, 0xe46f, 0xe470, 0xe471,
-  0xe472, 0xe473, 0xe474, 0xe475, 0xe476, 0xe477, 0xe478, 0xe479,
-  0xe47a, 0xe47b, 0xe47c, 0xe47d, 0xe47e, 0xe480, 0xe481, 0xe482,
-  0xe483, 0xe484, 0xe485, 0xe486, 0xe487, 0xe488, 0xe489, 0xe48a,
-  0xe48b, 0xe48c, 0xe48d, 0xe48e, 0xe48f, 0xe490, 0xe491, 0xe492,
-  0xe493, 0xe494, 0xe495, 0xe496, 0xe497, 0xe498, 0xe499, 0xe49a,
-  0xe49b, 0xe49c, 0xe49d, 0xe49e, 0xe49f, 0xe4a0, 0xe540, 0xe541,
-  0xe542, 0xe543, 0xe544, 0xe545, 0xe546, 0xe547, 0xe548, 0xe549,
-  0xe54a, 0xe54b, 0xe54c, 0xe54d, 0xe54e, 0xe54f, 0xe550, 0xe551,
-  0xe552, 0xe553, 0xe554, 0xe555, 0xe556, 0xe557, 0xe558, 0xe559,
-  0xe55a, 0xe55b, 0xe55c, 0xe55d, 0xe55e, 0xe55f, 0xe560, 0xe561,
-  0xe562, 0xe563, 0xe564, 0xe565, 0xe566, 0xe567, 0xe568, 0xe569,
-  0xe56a, 0xe56b, 0xe56c, 0xe56d, 0xe56e, 0xe56f, 0xe570, 0xe571,
-  0xe572, 0xe573, 0xe574, 0xe575, 0xe576, 0xe577, 0xe578, 0xe579,
-  0xe57a, 0xe57b, 0xe57c, 0xe57d, 0xe57e, 0xe580, 0xe581, 0xe582,
-  0xe583, 0xe584, 0xe585, 0xe586, 0xe587, 0xe588, 0xe589, 0xe58a,
-  0xe58b, 0xe58c, 0xe58d, 0xe58e, 0xe58f, 0xe590, 0xe591, 0xe592,
-  0xe593, 0xe594, 0xe595, 0xe596, 0xe597, 0xe598, 0xe599, 0xe59a,
-  0xe59b, 0xe59c, 0xe59d, 0xe59e, 0xe59f, 0xe5a0, 0xe640, 0xe641,
-  0xe642, 0xe643, 0xe644, 0xe645, 0xe646, 0xe647, 0xe648, 0xe649,
-  0xe64a, 0xe64b, 0xe64c, 0xe64d, 0xe64e, 0xe64f, 0xe650, 0xe651,
-  0xe652, 0xe653, 0xe654, 0xe655, 0xe656, 0xe657, 0xe658, 0xe659,
-  0xe65a, 0xe65b, 0xe65c, 0xe65d, 0xe65e, 0xe65f, 0xe660, 0xe661,
-  0xe662, 0xe663, 0xe664, 0xe665, 0xe666, 0xe667, 0xe668, 0xe669,
-  0xe66a, 0xe66b, 0xe66c, 0xe66d, 0xe66e, 0xe66f, 0xe670, 0xe671,
-  0xe672, 0xe673, 0xe674, 0xe675, 0xe676, 0xe677, 0xe678, 0xe679,
-  0xe67a, 0xe67b, 0xe67c, 0xe67d, 0xe67e, 0xe680, 0xe681, 0xe682,
-  0xe683, 0xe684, 0xe685, 0xe686, 0xe687, 0xe688, 0xe689, 0xe68a,
-  0xe68b, 0xe68c, 0xe68d, 0xe68e, 0xe68f, 0xe690, 0xe691, 0xe692,
-  0xe693, 0xe694, 0xe695, 0xe696, 0xe697, 0xe698, 0xe699, 0xe69a,
-  0xe69b, 0xe69c, 0xe69d, 0xe69e, 0xe69f, 0xe6a0, 0xe740, 0xe741,
-  0xe742, 0xe743, 0xe744, 0xe745, 0xe746, 0xe747, 0xe748, 0xe749,
-  0xe74a, 0xe74b, 0xe74c, 0xe74d, 0xe74e, 0xe74f, 0xe750, 0xe751,
-  0xe752, 0xe753, 0xe754, 0xe755, 0xe756, 0xe757, 0xe758, 0xe759,
-  0xe75a, 0xe75b, 0xe75c, 0xe75d, 0xe75e, 0xe75f, 0xe760, 0xe761,
-  0xe762, 0xe763, 0xe764, 0xe765, 0xe766, 0xe767, 0xe768, 0xe769,
-  0xe76a, 0xe76b, 0xe76c, 0xe76d, 0xe76e, 0xe76f, 0xe770, 0xe771,
-  0xe772, 0xe773, 0xe774, 0xe775, 0xe776, 0xe777, 0xe778, 0xe779,
-  0xe77a, 0xe77b, 0xe77c, 0xe77d, 0xe77e, 0xe780, 0xe781, 0xe782,
-  0xe783, 0xe784, 0xe785, 0xe786, 0xe787, 0xe788, 0xe789, 0xe78a,
-  0xe78b, 0xe78c, 0xe78d, 0xe78e, 0xe78f, 0xe790, 0xe791, 0xe792,
-  0xe793, 0xe794, 0xe795, 0xe796, 0xe797, 0xe798, 0xe799, 0xe79a,
-  0xe79b, 0xe79c, 0xe79d, 0xe79e, 0xe79f, 0xe7a0, 0xe840, 0xe841,
-  0xe842, 0xe843, 0xe844, 0xe845, 0xe846, 0xe847, 0xe848, 0xe849,
-  0xe84a, 0xe84b, 0xe84c, 0xe84d, 0xe84e, 0xe84f, 0xe850, 0xe851,
-  0xe852, 0xe853, 0xe854, 0xe855, 0xe856, 0xe857, 0xe858, 0xe859,
-  0xe85a, 0xe85b, 0xe85c, 0xe85d, 0xe85e, 0xe85f, 0xe860, 0xe861,
-  0xe862, 0xe863, 0xe864, 0xe865, 0xe866, 0xe867, 0xe868, 0xe869,
-  0xe86a, 0xe86b, 0xe86c, 0xe86d, 0xe86e, 0xe86f, 0xe870, 0xe871,
-  0xe872, 0xe873, 0xe874, 0xe875, 0xe876, 0xe877, 0xe878, 0xe879,
-  0xe87a, 0xe87b, 0xe87c, 0xe87d, 0xe87e, 0xe880, 0xe881, 0xe882,
-  0xe883, 0xe884, 0xe885, 0xe886, 0xe887, 0xe888, 0xe889, 0xe88a,
-  0xe88b, 0xe88c, 0xe88d, 0xe88e, 0xe88f, 0xe890, 0xe891, 0xe892,
-  0xe893, 0xe894, 0xe895, 0xe896, 0xe897, 0xe898, 0xe899, 0xe89a,
-  0xe89b, 0xe89c, 0xe89d, 0xe89e, 0xe89f, 0xe8a0, 0xe940, 0xe941,
-  0xe942, 0xe943, 0xe944, 0xe945, 0xe946, 0xe947, 0xe948, 0xe949,
-  0xe94a, 0xe94b, 0xe94c, 0xe94d, 0xe94e, 0xe94f, 0xe950, 0xe951,
-  0xe952, 0xe953, 0xe954, 0xe955, 0xe956, 0xe957, 0xe958, 0xe959,
-  0xe95a, 0xe95b, 0xe95c, 0xe95d, 0xe95e, 0xe95f, 0xe960, 0xe961,
-  0xe962, 0xe963, 0xe964, 0xe965, 0xe966, 0xe967, 0xe968, 0xe969,
-  0xe96a, 0xe96b, 0xe96c, 0xe96d, 0xe96e, 0xe96f, 0xe970, 0xe971,
-  0xe972, 0xe973, 0xe974, 0xe975, 0xe976, 0xe977, 0xe978, 0xe979,
-  0xe97a, 0xe97b, 0xe97c, 0xe97d, 0xe97e, 0xe980, 0xe981, 0xe982,
-  0xe983, 0xe984, 0xe985, 0xe986, 0xe987, 0xe988, 0xe989, 0xe98a,
-  0xe98b, 0xe98c, 0xe98d, 0xe98e, 0xe98f, 0xe990, 0xe991, 0xe992,
-  0xe993, 0xe994, 0xe995, 0xe996, 0xe997, 0xe998, 0xe999, 0xe99a,
-  0xe99b, 0xe99c, 0xe99d, 0xe99e, 0xe99f, 0xe9a0, 0xea40, 0xea41,
-  0xea42, 0xea43, 0xea44, 0xea45, 0xea46, 0xea47, 0xea48, 0xea49,
-  0xea4a, 0xea4b, 0xea4c, 0xea4d, 0xea4e, 0xea4f, 0xea50, 0xea51,
-  0xea52, 0xea53, 0xea54, 0xea55, 0xea56, 0xea57, 0xea58, 0xea59,
-  0xea5a, 0xea5b, 0xea5c, 0xea5d, 0xea5e, 0xea5f, 0xea60, 0xea61,
-  0xea62, 0xea63, 0xea64, 0xea65, 0xea66, 0xea67, 0xea68, 0xea69,
-  0xea6a, 0xea6b, 0xea6c, 0xea6d, 0xea6e, 0xea6f, 0xea70, 0xea71,
-  0xea72, 0xea73, 0xea74, 0xea75, 0xea76, 0xea77, 0xea78, 0xea79,
-  0xea7a, 0xea7b, 0xea7c, 0xea7d, 0xea7e, 0xea80, 0xea81, 0xea82,
-  0xea83, 0xea84, 0xea85, 0xea86, 0xea87, 0xea88, 0xea89, 0xea8a,
-  0xea8b, 0xea8c, 0xea8d, 0xea8e, 0xea8f, 0xea90, 0xea91, 0xea92,
-  0xea93, 0xea94, 0xea95, 0xea96, 0xea97, 0xea98, 0xea99, 0xea9a,
-  0xea9b, 0xea9c, 0xea9d, 0xea9e, 0xea9f, 0xeaa0, 0xeb40, 0xeb41,
-  0xeb42, 0xeb43, 0xeb44, 0xeb45, 0xeb46, 0xeb47, 0xeb48, 0xeb49,
-  0xeb4a, 0xeb4b, 0xeb4c, 0xeb4d, 0xeb4e, 0xeb4f, 0xeb50, 0xeb51,
-  0xeb52, 0xeb53, 0xeb54, 0xeb55, 0xeb56, 0xeb57, 0xeb58, 0xeb59,
-  0xeb5a, 0xeb5b, 0xeb5c, 0xeb5d, 0xeb5e, 0xeb5f, 0xeb60, 0xeb61,
-  0xeb62, 0xeb63, 0xeb64, 0xeb65, 0xeb66, 0xeb67, 0xeb68, 0xeb69,
-  0xeb6a, 0xeb6b, 0xeb6c, 0xeb6d, 0xeb6e, 0xeb6f, 0xeb70, 0xeb71,
-  0xeb72, 0xeb73, 0xeb74, 0xeb75, 0xeb76, 0xeb77, 0xeb78, 0xeb79,
-  0xeb7a, 0xeb7b, 0xeb7c, 0xeb7d, 0xeb7e, 0xeb80, 0xeb81, 0xeb82,
-  0xeb83, 0xeb84, 0xeb85, 0xeb86, 0xeb87, 0xeb88, 0xeb89, 0xeb8a,
-  0xeb8b, 0xeb8c, 0xeb8d, 0xeb8e, 0xeb8f, 0xeb90, 0xeb91, 0xeb92,
-  0xeb93, 0xeb94, 0xeb95, 0xeb96, 0xeb97, 0xeb98, 0xeb99, 0xeb9a,
-  0xeb9b, 0xeb9c, 0xeb9d, 0xeb9e, 0xeb9f, 0xeba0, 0xec40, 0xec41,
-  0xec42, 0xec43, 0xec44, 0xec45, 0xec46, 0xec47, 0xec48, 0xec49,
-  0xec4a, 0xec4b, 0xec4c, 0xec4d, 0xec4e, 0xec4f, 0xec50, 0xec51,
-  0xec52, 0xec53, 0xec54, 0xec55, 0xec56, 0xec57, 0xec58, 0xec59,
-  0xec5a, 0xec5b, 0xec5c, 0xec5d, 0xec5e, 0xec5f, 0xec60, 0xec61,
-  0xec62, 0xec63, 0xec64, 0xec65, 0xec66, 0xec67, 0xec68, 0xec69,
-  0xec6a, 0xec6b, 0xec6c, 0xec6d, 0xec6e, 0xec6f, 0xec70, 0xec71,
-  0xec72, 0xec73, 0xec74, 0xec75, 0xec76, 0xec77, 0xec78, 0xec79,
-  0xec7a, 0xec7b, 0xec7c, 0xec7d, 0xec7e, 0xec80, 0xec81, 0xec82,
-  0xec83, 0xec84, 0xec85, 0xec86, 0xec87, 0xec88, 0xec89, 0xec8a,
-  0xec8b, 0xec8c, 0xec8d, 0xec8e, 0xec8f, 0xec90, 0xec91, 0xec92,
-  0xec93, 0xec94, 0xec95, 0xec96, 0xec97, 0xec98, 0xec99, 0xec9a,
-  0xec9b, 0xec9c, 0xec9d, 0xec9e, 0xec9f, 0xeca0, 0xed40, 0xed41,
-  0xed42, 0xed43, 0xed44, 0xed45, 0xed46, 0xed47, 0xed48, 0xed49,
-  0xed4a, 0xed4b, 0xed4c, 0xed4d, 0xed4e, 0xed4f, 0xed50, 0xed51,
-  0xed52, 0xed53, 0xed54, 0xed55, 0xed56, 0xed57, 0xed58, 0xed59,
-  0xed5a, 0xed5b, 0xed5c, 0xed5d, 0xed5e, 0xed5f, 0xed60, 0xed61,
-  0xed62, 0xed63, 0xed64, 0xed65, 0xed66, 0xed67, 0xed68, 0xed69,
-  0xed6a, 0xed6b, 0xed6c, 0xed6d, 0xed6e, 0xed6f, 0xed70, 0xed71,
-  0xed72, 0xed73, 0xed74, 0xed75, 0xed76, 0xed77, 0xed78, 0xed79,
-  0xed7a, 0xed7b, 0xed7c, 0xed7d, 0xed7e, 0xed80, 0xed81, 0xed82,
-  0xed83, 0xed84, 0xed85, 0xed86, 0xed87, 0xed88, 0xed89, 0xed8a,
-  0xed8b, 0xed8c, 0xed8d, 0xed8e, 0xed8f, 0xed90, 0xed91, 0xed92,
-  0xed93, 0xed94, 0xed95, 0xed96, 0xed97, 0xed98, 0xed99, 0xed9a,
-  0xed9b, 0xed9c, 0xed9d, 0xed9e, 0xed9f, 0xeda0, 0xee40, 0xee41,
-  0xee42, 0xee43, 0xee44, 0xee45, 0xee46, 0xee47, 0xee48, 0xee49,
-  0xee4a, 0xee4b, 0xee4c, 0xee4d, 0xee4e, 0xee4f, 0xee50, 0xee51,
-  0xee52, 0xee53, 0xee54, 0xee55, 0xee56, 0xee57, 0xee58, 0xee59,
-  0xee5a, 0xee5b, 0xee5c, 0xee5d, 0xee5e, 0xee5f, 0xee60, 0xee61,
-  0xee62, 0xee63, 0xee64, 0xee65, 0xee66, 0xee67, 0xee68, 0xee69,
-  0xee6a, 0xee6b, 0xee6c, 0xee6d, 0xee6e, 0xee6f, 0xee70, 0xee71,
-  0xee72, 0xee73, 0xee74, 0xee75, 0xee76, 0xee77, 0xee78, 0xee79,
-  0xee7a, 0xee7b, 0xee7c, 0xee7d, 0xee7e, 0xee80, 0xee81, 0xee82,
-  0xee83, 0xee84, 0xee85, 0xee86, 0xee87, 0xee88, 0xee89, 0xee8a,
-  0xee8b, 0xee8c, 0xee8d, 0xee8e, 0xee8f, 0xee90, 0xee91, 0xee92,
-  0xee93, 0xee94, 0xee95, 0xee96, 0xee97, 0xee98, 0xee99, 0xee9a,
-  0xee9b, 0xee9c, 0xee9d, 0xee9e, 0xee9f, 0xeea0, 0xef40, 0xef41,
-  0xef42, 0xef43, 0xef44, 0xef45, 0xef46, 0xef47, 0xef48, 0xef49,
-  0xef4a, 0xef4b, 0xef4c, 0xef4d, 0xef4e, 0xef4f, 0xef50, 0xef51,
-  0xef52, 0xef53, 0xef54, 0xef55, 0xef56, 0xef57, 0xef58, 0xef59,
-  0xef5a, 0xef5b, 0xef5c, 0xef5d, 0xef5e, 0xef5f, 0xef60, 0xef61,
-  0xef62, 0xef63, 0xef64, 0xef65, 0xef66, 0xef67, 0xef68, 0xef69,
-  0xef6a, 0xef6b, 0xef6c, 0xef6d, 0xef6e, 0xef6f, 0xef70, 0xef71,
-  0xef72, 0xef73, 0xef74, 0xef75, 0xef76, 0xef77, 0xef78, 0xef79,
-  0xef7a, 0xef7b, 0xef7c, 0xef7d, 0xef7e, 0xef80, 0xef81, 0xef82,
-  0xef83, 0xef84, 0xef85, 0xef86, 0xef87, 0xef88, 0xef89, 0xef8a,
-  0xef8b, 0xef8c, 0xef8d, 0xef8e, 0xef8f, 0xef90, 0xef91, 0xef92,
-  0xef93, 0xef94, 0xef95, 0xef96, 0xef97, 0xef98, 0xef99, 0xef9a,
-  0xef9b, 0xef9c, 0xef9d, 0xef9e, 0xef9f, 0xefa0, 0xf040, 0xf041,
-  0xf042, 0xf043, 0xf044, 0xf045, 0xf046, 0xf047, 0xf048, 0xf049,
-  0xf04a, 0xf04b, 0xf04c, 0xf04d, 0xf04e, 0xf04f, 0xf050, 0xf051,
-  0xf052, 0xf053, 0xf054, 0xf055, 0xf056, 0xf057, 0xf058, 0xf059,
-  0xf05a, 0xf05b, 0xf05c, 0xf05d, 0xf05e, 0xf05f, 0xf060, 0xf061,
-  0xf062, 0xf063, 0xf064, 0xf065, 0xf066, 0xf067, 0xf068, 0xf069,
-  0xf06a, 0xf06b, 0xf06c, 0xf06d, 0xf06e, 0xf06f, 0xf070, 0xf071,
-  0xf072, 0xf073, 0xf074, 0xf075, 0xf076, 0xf077, 0xf078, 0xf079,
-  0xf07a, 0xf07b, 0xf07c, 0xf07d, 0xf07e, 0xf080, 0xf081, 0xf082,
-  0xf083, 0xf084, 0xf085, 0xf086, 0xf087, 0xf088, 0xf089, 0xf08a,
-  0xf08b, 0xf08c, 0xf08d, 0xf08e, 0xf08f, 0xf090, 0xf091, 0xf092,
-  0xf093, 0xf094, 0xf095, 0xf096, 0xf097, 0xf098, 0xf099, 0xf09a,
-  0xf09b, 0xf09c, 0xf09d, 0xf09e, 0xf09f, 0xf0a0, 0xf140, 0xf141,
-  0xf142, 0xf143, 0xf144, 0xf145, 0xf146, 0xf147, 0xf148, 0xf149,
-  0xf14a, 0xf14b, 0xf14c, 0xf14d, 0xf14e, 0xf14f, 0xf150, 0xf151,
-  0xf152, 0xf153, 0xf154, 0xf155, 0xf156, 0xf157, 0xf158, 0xf159,
-  0xf15a, 0xf15b, 0xf15c, 0xf15d, 0xf15e, 0xf15f, 0xf160, 0xf161,
-  0xf162, 0xf163, 0xf164, 0xf165, 0xf166, 0xf167, 0xf168, 0xf169,
-  0xf16a, 0xf16b, 0xf16c, 0xf16d, 0xf16e, 0xf16f, 0xf170, 0xf171,
-  0xf172, 0xf173, 0xf174, 0xf175, 0xf176, 0xf177, 0xf178, 0xf179,
-  0xf17a, 0xf17b, 0xf17c, 0xf17d, 0xf17e, 0xf180, 0xf181, 0xf182,
-  0xf183, 0xf184, 0xf185, 0xf186, 0xf187, 0xf188, 0xf189, 0xf18a,
-  0xf18b, 0xf18c, 0xf18d, 0xf18e, 0xf18f, 0xf190, 0xf191, 0xf192,
-  0xf193, 0xf194, 0xf195, 0xf196, 0xf197, 0xf198, 0xf199, 0xf19a,
-  0xf19b, 0xf19c, 0xf19d, 0xf19e, 0xf19f, 0xf1a0, 0xf240, 0xf241,
-  0xf242, 0xf243, 0xf244, 0xf245, 0xf246, 0xf247, 0xf248, 0xf249,
-  0xf24a, 0xf24b, 0xf24c, 0xf24d, 0xf24e, 0xf24f, 0xf250, 0xf251,
-  0xf252, 0xf253, 0xf254, 0xf255, 0xf256, 0xf257, 0xf258, 0xf259,
-  0xf25a, 0xf25b, 0xf25c, 0xf25d, 0xf25e, 0xf25f, 0xf260, 0xf261,
-  0xf262, 0xf263, 0xf264, 0xf265, 0xf266, 0xf267, 0xf268, 0xf269,
-  0xf26a, 0xf26b, 0xf26c, 0xf26d, 0xf26e, 0xf26f, 0xf270, 0xf271,
-  0xf272, 0xf273, 0xf274, 0xf275, 0xf276, 0xf277, 0xf278, 0xf279,
-  0xf27a, 0xf27b, 0xf27c, 0xf27d, 0xf27e, 0xf280, 0xf281, 0xf282,
-  0xf283, 0xf284, 0xf285, 0xf286, 0xf287, 0xf288, 0xf289, 0xf28a,
-  0xf28b, 0xf28c, 0xf28d, 0xf28e, 0xf28f, 0xf290, 0xf291, 0xf292,
-  0xf293, 0xf294, 0xf295, 0xf296, 0xf297, 0xf298, 0xf299, 0xf29a,
-  0xf29b, 0xf29c, 0xf29d, 0xf29e, 0xf29f, 0xf2a0, 0xf340, 0xf341,
-  0xf342, 0xf343, 0xf344, 0xf345, 0xf346, 0xf347, 0xf348, 0xf349,
-  0xf34a, 0xf34b, 0xf34c, 0xf34d, 0xf34e, 0xf34f, 0xf350, 0xf351,
-  0xf352, 0xf353, 0xf354, 0xf355, 0xf356, 0xf357, 0xf358, 0xf359,
-  0xf35a, 0xf35b, 0xf35c, 0xf35d, 0xf35e, 0xf35f, 0xf360, 0xf361,
-  0xf362, 0xf363, 0xf364, 0xf365, 0xf366, 0xf367, 0xf368, 0xf369,
-  0xf36a, 0xf36b, 0xf36c, 0xf36d, 0xf36e, 0xf36f, 0xf370, 0xf371,
-  0xf372, 0xf373, 0xf374, 0xf375, 0xf376, 0xf377, 0xf378, 0xf379,
-  0xf37a, 0xf37b, 0xf37c, 0xf37d, 0xf37e, 0xf380, 0xf381, 0xf382,
-  0xf383, 0xf384, 0xf385, 0xf386, 0xf387, 0xf388, 0xf389, 0xf38a,
-  0xf38b, 0xf38c, 0xf38d, 0xf38e, 0xf38f, 0xf390, 0xf391, 0xf392,
-  0xf393, 0xf394, 0xf395, 0xf396, 0xf397, 0xf398, 0xf399, 0xf39a,
-  0xf39b, 0xf39c, 0xf39d, 0xf39e, 0xf39f, 0xf3a0, 0xf440, 0xf441,
-  0xf442, 0xf443, 0xf444, 0xf445, 0xf446, 0xf447, 0xf448, 0xf449,
-  0xf44a, 0xf44b, 0xf44c, 0xf44d, 0xf44e, 0xf44f, 0xf450, 0xf451,
-  0xf452, 0xf453, 0xf454, 0xf455, 0xf456, 0xf457, 0xf458, 0xf459,
-  0xf45a, 0xf45b, 0xf45c, 0xf45d, 0xf45e, 0xf45f, 0xf460, 0xf461,
-  0xf462, 0xf463, 0xf464, 0xf465, 0xf466, 0xf467, 0xf468, 0xf469,
-  0xf46a, 0xf46b, 0xf46c, 0xf46d, 0xf46e, 0xf46f, 0xf470, 0xf471,
-  0xf472, 0xf473, 0xf474, 0xf475, 0xf476, 0xf477, 0xf478, 0xf479,
-  0xf47a, 0xf47b, 0xf47c, 0xf47d, 0xf47e, 0xf480, 0xf481, 0xf482,
-  0xf483, 0xf484, 0xf485, 0xf486, 0xf487, 0xf488, 0xf489, 0xf48a,
-  0xf48b, 0xf48c, 0xf48d, 0xf48e, 0xf48f, 0xf490, 0xf491, 0xf492,
-  0xf493, 0xf494, 0xf495, 0xf496, 0xf497, 0xf498, 0xf499, 0xf49a,
-  0xf49b, 0xf49c, 0xf49d, 0xf49e, 0xf49f, 0xf4a0, 0xf540, 0xf541,
-  0xf542, 0xf543, 0xf544, 0xf545, 0xf546, 0xf547, 0xf548, 0xf549,
-  0xf54a, 0xf54b, 0xf54c, 0xf54d, 0xf54e, 0xf54f, 0xf550, 0xf551,
-  0xf552, 0xf553, 0xf554, 0xf555, 0xf556, 0xf557, 0xf558, 0xf559,
-  0xf55a, 0xf55b, 0xf55c, 0xf55d, 0xf55e, 0xf55f, 0xf560, 0xf561,
-  0xf562, 0xf563, 0xf564, 0xf565, 0xf566, 0xf567, 0xf568, 0xf569,
-  0xf56a, 0xf56b, 0xf56c, 0xf56d, 0xf56e, 0xf56f, 0xf570, 0xf571,
-  0xf572, 0xf573, 0xf574, 0xf575, 0xf576, 0xf577, 0xf578, 0xf579,
-  0xf57a, 0xf57b, 0xf57c, 0xf57d, 0xf57e, 0xf580, 0xf581, 0xf582,
-  0xf583, 0xf584, 0xf585, 0xf586, 0xf587, 0xf588, 0xf589, 0xf58a,
-  0xf58b, 0xf58c, 0xf58d, 0xf58e, 0xf58f, 0xf590, 0xf591, 0xf592,
-  0xf593, 0xf594, 0xf595, 0xf596, 0xf597, 0xf598, 0xf599, 0xf59a,
-  0xf59b, 0xf59c, 0xf59d, 0xf59e, 0xf59f, 0xf5a0, 0xf640, 0xf641,
-  0xf642, 0xf643, 0xf644, 0xf645, 0xf646, 0xf647, 0xf648, 0xf649,
-  0xf64a, 0xf64b, 0xf64c, 0xf64d, 0xf64e, 0xf64f, 0xf650, 0xf651,
-  0xf652, 0xf653, 0xf654, 0xf655, 0xf656, 0xf657, 0xf658, 0xf659,
-  0xf65a, 0xf65b, 0xf65c, 0xf65d, 0xf65e, 0xf65f, 0xf660, 0xf661,
-  0xf662, 0xf663, 0xf664, 0xf665, 0xf666, 0xf667, 0xf668, 0xf669,
-  0xf66a, 0xf66b, 0xf66c, 0xf66d, 0xf66e, 0xf66f, 0xf670, 0xf671,
-  0xf672, 0xf673, 0xf674, 0xf675, 0xf676, 0xf677, 0xf678, 0xf679,
-  0xf67a, 0xf67b, 0xf67c, 0xf67d, 0xf67e, 0xf680, 0xf681, 0xf682,
-  0xf683, 0xf684, 0xf685, 0xf686, 0xf687, 0xf688, 0xf689, 0xf68a,
-  0xf68b, 0xf68c, 0xf68d, 0xf68e, 0xf68f, 0xf690, 0xf691, 0xf692,
-  0xf693, 0xf694, 0xf695, 0xf696, 0xf697, 0xf698, 0xf699, 0xf69a,
-  0xf69b, 0xf69c, 0xf69d, 0xf69e, 0xf69f, 0xf6a0, 0xf740, 0xf741,
-  0xf742, 0xf743, 0xf744, 0xf745, 0xf746, 0xf747, 0xf748, 0xf749,
-  0xf74a, 0xf74b, 0xf74c, 0xf74d, 0xf74e, 0xf74f, 0xf750, 0xf751,
-  0xf752, 0xf753, 0xf754, 0xf755, 0xf756, 0xf757, 0xf758, 0xf759,
-  0xf75a, 0xf75b, 0xf75c, 0xf75d, 0xf75e, 0xf75f, 0xf760, 0xf761,
-  0xf762, 0xf763, 0xf764, 0xf765, 0xf766, 0xf767, 0xf768, 0xf769,
-  0xf76a, 0xf76b, 0xf76c, 0xf76d, 0xf76e, 0xf76f, 0xf770, 0xf771,
-  0xf772, 0xf773, 0xf774, 0xf775, 0xf776, 0xf777, 0xf778, 0xf779,
-  0xf77a, 0xf77b, 0xf77c, 0xf77d, 0xf77e, 0xf780, 0xf781, 0xf782,
-  0xf783, 0xf784, 0xf785, 0xf786, 0xf787, 0xf788, 0xf789, 0xf78a,
-  0xf78b, 0xf78c, 0xf78d, 0xf78e, 0xf78f, 0xf790, 0xf791, 0xf792,
-  0xf793, 0xf794, 0xf795, 0xf796, 0xf797, 0xf798, 0xf799, 0xf79a,
-  0xf79b, 0xf79c, 0xf79d, 0xf79e, 0xf79f, 0xf7a0, 0xf840, 0xf841,
-  0xf842, 0xf843, 0xf844, 0xf845, 0xf846, 0xf847, 0xf848, 0xf849,
-  0xf84a, 0xf84b, 0xf84c, 0xf84d, 0xf84e, 0xf84f, 0xf850, 0xf851,
-  0xf852, 0xf853, 0xf854, 0xf855, 0xf856, 0xf857, 0xf858, 0xf859,
-  0xf85a, 0xf85b, 0xf85c, 0xf85d, 0xf85e, 0xf85f, 0xf860, 0xf861,
-  0xf862, 0xf863, 0xf864, 0xf865, 0xf866, 0xf867, 0xf868, 0xf869,
-  0xf86a, 0xf86b, 0xf86c, 0xf86d, 0xf86e, 0xf86f, 0xf870, 0xf871,
-  0xf872, 0xf873, 0xf874, 0xf875, 0xf876, 0xf877, 0xf878, 0xf879,
-  0xf87a, 0xf87b, 0xf87c, 0xf87d, 0xf87e, 0xf880, 0xf881, 0xf882,
-  0xf883, 0xf884, 0xf885, 0xf886, 0xf887, 0xf888, 0xf889, 0xf88a,
-  0xf88b, 0xf88c, 0xf88d, 0xf88e, 0xf88f, 0xf890, 0xf891, 0xf892,
-  0xf893, 0xf894, 0xf895, 0xf896, 0xf897, 0xf898, 0xf899, 0xf89a,
-  0xf89b, 0xf89c, 0xf89d, 0xf89e, 0xf89f, 0xf8a0, 0xf940, 0xf941,
-  0xf942, 0xf943, 0xf944, 0xf945, 0xf946, 0xf947, 0xf948, 0xf949,
-  0xf94a, 0xf94b, 0xf94c, 0xf94d, 0xf94e, 0xf94f, 0xf950, 0xf951,
-  0xf952, 0xf953, 0xf954, 0xf955, 0xf956, 0xf957, 0xf958, 0xf959,
-  0xf95a, 0xf95b, 0xf95c, 0xf95d, 0xf95e, 0xf95f, 0xf960, 0xf961,
-  0xf962, 0xf963, 0xf964, 0xf965, 0xf966, 0xf967, 0xf968, 0xf969,
-  0xf96a, 0xf96b, 0xf96c, 0xf96d, 0xf96e, 0xf96f, 0xf970, 0xf971,
-  0xf972, 0xf973, 0xf974, 0xf975, 0xf976, 0xf977, 0xf978, 0xf979,
-  0xf97a, 0xf97b, 0xf97c, 0xf97d, 0xf97e, 0xf980, 0xf981, 0xf982,
-  0xf983, 0xf984, 0xf985, 0xf986, 0xf987, 0xf988, 0xf989, 0xf98a,
-  0xf98b, 0xf98c, 0xf98d, 0xf98e, 0xf98f, 0xf990, 0xf991, 0xf992,
-  0xf993, 0xf994, 0xf995, 0xf996, 0xf997, 0xf998, 0xf999, 0xf99a,
-  0xf99b, 0xf99c, 0xf99d, 0xf99e, 0xf99f, 0xf9a0, 0xfa40, 0xfa41,
-  0xfa42, 0xfa43, 0xfa44, 0xfa45, 0xfa46, 0xfa47, 0xfa48, 0xfa49,
-  0xfa4a, 0xfa4b, 0xfa4c, 0xfa4d, 0xfa4e, 0xfa4f, 0xfa50, 0xfa51,
-  0xfa52, 0xfa53, 0xfa54, 0xfa55, 0xfa56, 0xfa57, 0xfa58, 0xfa59,
-  0xfa5a, 0xfa5b, 0xfa5c, 0xfa5d, 0xfa5e, 0xfa5f, 0xfa60, 0xfa61,
-  0xfa62, 0xfa63, 0xfa64, 0xfa65, 0xfa66, 0xfa67, 0xfa68, 0xfa69,
-  0xfa6a, 0xfa6b, 0xfa6c, 0xfa6d, 0xfa6e, 0xfa6f, 0xfa70, 0xfa71,
-  0xfa72, 0xfa73, 0xfa74, 0xfa75, 0xfa76, 0xfa77, 0xfa78, 0xfa79,
-  0xfa7a, 0xfa7b, 0xfa7c, 0xfa7d, 0xfa7e, 0xfa80, 0xfa81, 0xfa82,
-  0xfa83, 0xfa84, 0xfa85, 0xfa86, 0xfa87, 0xfa88, 0xfa89, 0xfa8a,
-  0xfa8b, 0xfa8c, 0xfa8d, 0xfa8e, 0xfa8f, 0xfa90, 0xfa91, 0xfa92,
-  0xfa93, 0xfa94, 0xfa95, 0xfa96, 0xfa97, 0xfa98, 0xfa99, 0xfa9a,
-  0xfa9b, 0xfa9c, 0xfa9d, 0xfa9e, 0xfa9f, 0xfaa0, 0xfb40, 0xfb41,
-  0xfb42, 0xfb43, 0xfb44, 0xfb45, 0xfb46, 0xfb47, 0xfb48, 0xfb49,
-  0xfb4a, 0xfb4b, 0xfb4c, 0xfb4d, 0xfb4e, 0xfb4f, 0xfb50, 0xfb51,
-  0xfb52, 0xfb53, 0xfb54, 0xfb55, 0xfb56, 0xfb57, 0xfb58, 0xfb59,
-  0xfb5a, 0xfb5b, 0xfb5c, 0xfb5d, 0xfb5e, 0xfb5f, 0xfb60, 0xfb61,
-  0xfb62, 0xfb63, 0xfb64, 0xfb65, 0xfb66, 0xfb67, 0xfb68, 0xfb69,
-  0xfb6a, 0xfb6b, 0xfb6c, 0xfb6d, 0xfb6e, 0xfb6f, 0xfb70, 0xfb71,
-  0xfb72, 0xfb73, 0xfb74, 0xfb75, 0xfb76, 0xfb77, 0xfb78, 0xfb79,
-  0xfb7a, 0xfb7b, 0xfb7c, 0xfb7d, 0xfb7e, 0xfb80, 0xfb81, 0xfb82,
-  0xfb83, 0xfb84, 0xfb85, 0xfb86, 0xfb87, 0xfb88, 0xfb89, 0xfb8a,
-  0xfb8b, 0xfb8c, 0xfb8d, 0xfb8e, 0xfb8f, 0xfb90, 0xfb91, 0xfb92,
-  0xfb93, 0xfb94, 0xfb95, 0xfb96, 0xfb97, 0xfb98, 0xfb99, 0xfb9a,
-  0xfb9b, 0xfb9c, 0xfb9d, 0xfb9e, 0xfb9f, 0xfba0, 0xfc40, 0xfc41,
-  0xfc42, 0xfc43, 0xfc44, 0xfc45, 0xfc46, 0xfc47, 0xfc48, 0xfc49,
-  0xfc4a, 0xfc4b, 0xfc4c, 0xfc4d, 0xfc4e, 0xfc4f, 0xfc50, 0xfc51,
-  0xfc52, 0xfc53, 0xfc54, 0xfc55, 0xfc56, 0xfc57, 0xfc58, 0xfc59,
-  0xfc5a, 0xfc5b, 0xfc5c, 0xfc5d, 0xfc5e, 0xfc5f, 0xfc60, 0xfc61,
-  0xfc62, 0xfc63, 0xfc64, 0xfc65, 0xfc66, 0xfc67, 0xfc68, 0xfc69,
-  0xfc6a, 0xfc6b, 0xfc6c, 0xfc6d, 0xfc6e, 0xfc6f, 0xfc70, 0xfc71,
-  0xfc72, 0xfc73, 0xfc74, 0xfc75, 0xfc76, 0xfc77, 0xfc78, 0xfc79,
-  0xfc7a, 0xfc7b, 0xfc7c, 0xfc7d, 0xfc7e, 0xfc80, 0xfc81, 0xfc82,
-  0xfc83, 0xfc84, 0xfc85, 0xfc86, 0xfc87, 0xfc88, 0xfc89, 0xfc8a,
-  0xfc8b, 0xfc8c, 0xfc8d, 0xfc8e, 0xfc8f, 0xfc90, 0xfc91, 0xfc92,
-  0xfc93, 0xfc94, 0xfc95, 0xfc96, 0xfc97, 0xfc98, 0xfc99, 0xfc9a,
-  0xfc9b, 0xfc9c, 0xfc9d, 0xfc9e, 0xfc9f, 0xfca0, 0xfd40, 0xfd41,
-  0xfd42, 0xfd43, 0xfd44, 0xfd45, 0xfd46, 0xfd47, 0xfd48, 0xfd49,
-  0xfd4a, 0xfd4b, 0xfd4c, 0xfd4d, 0xfd4e, 0xfd4f, 0xfd50, 0xfd51,
-  0xfd52, 0xfd53, 0xfd54, 0xfd55, 0xfd56, 0xfd57, 0xfd58, 0xfd59,
-  0xfd5a, 0xfd5b, 0xfd5c, 0xfd5d, 0xfd5e, 0xfd5f, 0xfd60, 0xfd61,
-  0xfd62, 0xfd63, 0xfd64, 0xfd65, 0xfd66, 0xfd67, 0xfd68, 0xfd69,
-  0xfd6a, 0xfd6b, 0xfd6c, 0xfd6d, 0xfd6e, 0xfd6f, 0xfd70, 0xfd71,
-  0xfd72, 0xfd73, 0xfd74, 0xfd75, 0xfd76, 0xfd77, 0xfd78, 0xfd79,
-  0xfd7a, 0xfd7b, 0xfd7c, 0xfd7d, 0xfd7e, 0xfd80, 0xfd81, 0xfd82,
-  0xfd83, 0xfd84, 0xfd85, 0xfd86, 0xfd87, 0xfd88, 0xfd89, 0xfd8a,
-  0xfd8b, 0xfd8c, 0xfd8d, 0xfd8e, 0xfd8f, 0xfd90, 0xfd91, 0xfd92,
-  0xfd93, 0xfd94, 0xfd95, 0xfd96, 0xfd97, 0xfd98, 0xfd99, 0xfd9a,
-  0xfd9b, 0xfd9c, 0xfd9d, 0xfd9e, 0xfd9f, 0xfda0, 0xfe40, 0xfe41,
-  0xfe42, 0xfe43, 0xfe44, 0xfe45, 0xfe46, 0xfe47, 0xfe48, 0xfe49,
-  0xfe4a, 0xfe4b, 0xfe4c, 0xfe4d, 0xfe4e, 0xfe4f, 0xa955, 0xa968,
-  0xa969, 0xa96a, 0xa96b, 0xa96c, 0xa96d, 0xa96e, 0xa96f, 0xa970,
-  0xa971, 0xa972, 0xa973, 0xa974, 0xa975, 0xa976, 0xa977, 0xa978,
-  0xa979, 0xa97a, 0xa97b, 0xa97c, 0xa97d, 0xa97e, 0xa980, 0xa981,
-  0xa982, 0xa983, 0xa984, 0xa985, 0xa986, 0xa987, 0xa988, 0xa956,
-  0xa957,
-};
-
-typedef struct {
-  unsigned short indx; /* index into big table */
-  unsigned short used; /* bitmask of used entries */
-} Summary16;
-
-static const Summary16 gbkext_inv_uni2indx_page02[14] = {
-  /* 0x0200 */
-  {    0, 0x0000 }, {    0, 0x0000 }, {    0, 0x0000 }, {    0, 0x0000 },
-  {    0, 0x0000 }, {    0, 0x0000 }, {    0, 0x0000 }, {    0, 0x0000 },
-  {    0, 0x0000 }, {    0, 0x0000 }, {    0, 0x0000 }, {    0, 0x0000 },
-  {    0, 0x0c00 }, {    2, 0x0200 },
-};
-static const Summary16 gbkext_inv_uni2indx_page20[44] = {
-  /* 0x2000 */
-  {    3, 0x0000 }, {    3, 0x0029 }, {    6, 0x0020 }, {    7, 0x0020 },
-  {    8, 0x0000 }, {    8, 0x0000 }, {    8, 0x0000 }, {    8, 0x0000 },
-  {    8, 0x0000 }, {    8, 0x0000 }, {    8, 0x0000 }, {    8, 0x0000 },
-  {    8, 0x0000 }, {    8, 0x0000 }, {    8, 0x0000 }, {    8, 0x0000 },
-  /* 0x2100 */
-  {    8, 0x0220 }, {   10, 0x0000 }, {   10, 0x0002 }, {   11, 0x0000 },
-  {   11, 0x0000 }, {   11, 0x0000 }, {   11, 0x0000 }, {   11, 0x0000 },
-  {   11, 0x0000 }, {   11, 0x03c0 }, {   15, 0x0000 }, {   15, 0x0000 },
-  {   15, 0x0000 }, {   15, 0x0000 }, {   15, 0x0000 }, {   15, 0x0000 },
-  /* 0x2200 */
-  {   15, 0x0000 }, {   15, 0x8020 }, {   17, 0x0008 }, {   18, 0x0000 },
-  {   18, 0x0000 }, {   18, 0x0004 }, {   19, 0x00c0 }, {   21, 0x0000 },
-  {   21, 0x0000 }, {   21, 0x0020 }, {   22, 0x0000 }, {   22, 0x8000 },
-};
-static const Summary16 gbkext_inv_uni2indx_page25[17] = {
-  /* 0x2500 */
-  {   23, 0x0000 }, {   23, 0x0000 }, {   23, 0x0000 }, {   23, 0x0000 },
-  {   23, 0x0000 }, {   23, 0xffff }, {   39, 0xffff }, {   55, 0x000f },
-  {   59, 0xfffe }, {   74, 0x0038 }, {   77, 0x0000 }, {   77, 0x3000 },
-  {   79, 0x0000 }, {   79, 0x0000 }, {   79, 0x003c }, {   83, 0x0000 },
-  /* 0x2600 */
-  {   83, 0x0200 },
-};
-static const Summary16 gbkext_inv_uni2indx_page30[16] = {
-  /* 0x3000 */
-  {   84, 0x00c0 }, {   86, 0x6004 }, {   89, 0x03fe }, {   98, 0x0000 },
-  {   98, 0x0000 }, {   98, 0x0000 }, {   98, 0x0000 }, {   98, 0x0000 },
-  {   98, 0x0000 }, {   98, 0x7800 }, {  102, 0x0000 }, {  102, 0x0000 },
-  {  102, 0x0000 }, {  102, 0x0000 }, {  102, 0x0000 }, {  102, 0x7000 },
-};
-static const Summary16 gbkext_inv_uni2indx_page32[30] = {
-  /* 0x3200 */
-  {  105, 0x0000 }, {  105, 0x0000 }, {  105, 0x0000 }, {  105, 0x0002 },
-  {  106, 0x0000 }, {  106, 0x0000 }, {  106, 0x0000 }, {  106, 0x0000 },
-  {  106, 0x0000 }, {  106, 0x0000 }, {  106, 0x0008 }, {  107, 0x0000 },
-  {  107, 0x0000 }, {  107, 0x0000 }, {  107, 0x0000 }, {  107, 0x0000 },
-  /* 0x3300 */
-  {  107, 0x0000 }, {  107, 0x0000 }, {  107, 0x0000 }, {  107, 0x0000 },
-  {  107, 0x0000 }, {  107, 0x0000 }, {  107, 0x0000 }, {  107, 0x0000 },
-  {  107, 0xc000 }, {  109, 0x7000 }, {  112, 0x0002 }, {  113, 0x0000 },
-  {  113, 0x4010 }, {  115, 0x0026 },
-};
-static const Summary16 gbkext_inv_uni2indx_page4e[1307] = {
-  /* 0x4e00 */
-  {  118, 0x8074 }, {  123, 0x8084 }, {  126, 0xc24b }, {  133, 0x10aa },
-  {  138, 0x0457 }, {  144, 0x0ca2 }, {  149, 0xfdbc }, {  161, 0xbff4 },
-  {  173, 0x04bf }, {  181, 0x72c1 }, {  188, 0x8408 }, {  191, 0x73d3 },
-  {  201, 0x9100 }, {  204, 0x1c05 }, {  209, 0xe2c5 }, {  217, 0x5712 },
-  /* 0x4f00 */
-  {  224, 0x19fd }, {  234, 0x307c }, {  241, 0x730a }, {  248, 0xcaaa },
-  {  256, 0x1fb7 }, {  267, 0x0054 }, {  270, 0x6d46 }, {  278, 0x27a6 },
-  {  286, 0x54e7 }, {  295, 0xd76d }, {  306, 0x2816 }, {  311, 0x7fdf },
-  {  325, 0x3bc7 }, {  335, 0x0a7c }, {  342, 0x18b5 }, {  349, 0xbaf5 },
-  /* 0x5000 */
-  {  360, 0x4fff }, {  373, 0x68eb }, {  382, 0x889d }, {  389, 0xabff },
-  {  402, 0x2e77 }, {  412, 0xebdf }, {  425, 0xefdf }, {  439, 0x373f },
-  {  450, 0xdede }, {  462, 0xffff }, {  478, 0xec57 }, {  488, 0xf3fb },
-  {  501, 0x7fff }, {  516, 0xfbbf }, {  530, 0x8f3f }, {  541, 0xf7d7 },
-  /* 0x5100 */
-  {  554, 0xf73f }, {  567, 0xfffb }, {  582, 0xfffd }, {  597, 0x7fff },
-  {  612, 0xd484 }, {  618, 0xeb8d }, {  628, 0x86db }, {  637, 0xc404 },
-  {  641, 0xccd8 }, {  649, 0xe51b }, {  658, 0x67ca }, {  667, 0xc710 },
-  {  673, 0x652e }, {  681, 0xd7fd }, {  694, 0x57ec }, {  704, 0x4096 },
-  /* 0x5200 */
-  {  709, 0x9a30 }, {  715, 0xd039 }, {  722, 0x94ee }, {  731, 0x5036 },
-  {  737, 0xcbf0 }, {  746, 0xafac }, {  756, 0x795d }, {  766, 0x5ffb },
-  {  779, 0xfef9 }, {  792, 0x17f6 }, {  802, 0xc0f0 }, {  808, 0x3ff1 },
-  {  819, 0xf577 }, {  831, 0x7eba }, {  842, 0xffef }, {  857, 0x39fe },
-  /* 0x5300 */
-  {  868, 0x5e9e }, {  878, 0xd91e }, {  887, 0xbbb4 }, {  897, 0x31ff },
-  {  908, 0x3855 }, {  915, 0x2b11 }, {  921, 0x3520 }, {  926, 0x7a44 },
-  {  933, 0xc58b }, {  941, 0x5adf }, {  952, 0xbc93 }, {  961, 0x77bf },
-  {  974, 0xc0f9 }, {  982, 0x742d }, {  990, 0x0086 }, {  993, 0xc410 },
-  /* 0x5400 */
-  {  997, 0x08a5 }, { 1002, 0x1710 }, { 1007, 0x0434 }, { 1011, 0xa4c9 },
-  { 1018, 0xf2b6 }, { 1028, 0xe402 }, { 1033, 0xfeab }, { 1045, 0xc611 },
-  { 1051, 0x27aa }, { 1059, 0xd18a }, { 1066, 0x4027 }, { 1071, 0x56e5 },
-  { 1080, 0x0c28 }, { 1084, 0x0940 }, { 1087, 0x981f }, { 1095, 0x4bf3 },
-  /* 0x5500 */
-  { 1105, 0x7d3d }, { 1116, 0xf7ec }, { 1128, 0x2b62 }, { 1135, 0x2f74 },
-  { 1144, 0xf9a5 }, { 1154, 0xef9e }, { 1166, 0x8b0d }, { 1173, 0xa61f },
-  { 1182, 0x7060 }, { 1187, 0x4ced }, { 1196, 0xff7f }, { 1211, 0x9555 },
-  { 1219, 0xcdcf }, { 1230, 0x4fa1 }, { 1238, 0x6285 }, { 1244, 0x9f53 },
-  /* 0x5600 */
-  { 1254, 0x2cfc }, { 1263, 0x36ff }, { 1275, 0xcf67 }, { 1286, 0x75a9 },
-  { 1295, 0x8fff }, { 1308, 0xec6f }, { 1319, 0xe0eb }, { 1328, 0xe7bd },
-  { 1340, 0x3f9f }, { 1352, 0xfff7 }, { 1367, 0x7ff7 }, { 1381, 0xef7f },
-  { 1395, 0xfbff }, { 1410, 0x136f }, { 1419, 0xd7e8 }, { 1429, 0x19cc },
-  /* 0x5700 */
-  { 1436, 0xf8a7 }, { 1446, 0x6fff }, { 1460, 0x08f7 }, { 1468, 0xb1f6 },
-  { 1478, 0x0b7a }, { 1486, 0x037c }, { 1493, 0x50ac }, { 1499, 0xe737 },
-  { 1510, 0xe783 }, { 1519, 0xf7f3 }, { 1532, 0x9520 }, { 1537, 0xfeeb },
-  { 1550, 0x37f3 }, { 1561, 0x58cb }, { 1569, 0x5fee }, { 1581, 0xd8ef },
-  /* 0x5800 */
-  { 1592, 0xd73a }, { 1602, 0xbddd }, { 1614, 0xfbec }, { 1626, 0xffde },
-  { 1640, 0xcfef }, { 1653, 0xbeed }, { 1665, 0xe7df }, { 1678, 0xbfff },
-  { 1693, 0xfdd4 }, { 1704, 0x39f3 }, { 1714, 0xfcff }, { 1728, 0xefff },
-  { 1743, 0xffdd }, { 1757, 0xffdd }, { 1771, 0xa7ef }, { 1783, 0xfdb6 },
-  /* 0x5900 */
-  { 1795, 0x5f6b }, { 1806, 0x698f }, { 1815, 0x114f }, { 1822, 0xe86d },
-  { 1831, 0x3469 }, { 1838, 0xfa0d }, { 1847, 0xffda }, { 1860, 0xdca7 },
-  { 1870, 0xda21 }, { 1877, 0xbd33 }, { 1887, 0x30c7 }, { 1894, 0xb5fb },
-  { 1906, 0xf3bf }, { 1919, 0xca60 }, { 1925, 0xeed7 }, { 1937, 0x75ff },
-  /* 0x5a00 */
-  { 1950, 0xec05 }, { 1957, 0x6ef5 }, { 1968, 0xfdd6 }, { 1980, 0xefa9 },
-  { 1991, 0xf9be }, { 2003, 0xfbdf }, { 2017, 0xfb7b }, { 2030, 0x7b0f },
-  { 2040, 0xffff }, { 2056, 0xf3fb }, { 2069, 0xfbff }, { 2084, 0xbed3 },
-  { 2095, 0xedf9 }, { 2107, 0xeeab }, { 2118, 0xf5b4 }, { 2128, 0xfffd },
-  /* 0x5b00 */
-  { 2143, 0xfdff }, { 2158, 0xff3f }, { 2172, 0xffff }, { 2188, 0xff6b },
-  { 2201, 0xfffe }, { 2216, 0x4044 }, { 2219, 0xe983 }, { 2227, 0xdbd4 },
-  { 2237, 0x6444 }, { 2242, 0x8057 }, { 2248, 0xf380 }, { 2255, 0x1c86 },
-  { 2261, 0xef0b }, { 2271, 0x1ff2 }, { 2281, 0xbecd }, { 2292, 0x60fe },
-  /* 0x5c00 */
-  { 2301, 0x79ad }, { 2311, 0xca8d }, { 2319, 0xef4b }, { 2330, 0x00ed },
-  { 2336, 0x30d8 }, { 2342, 0xbddc }, { 2353, 0x3f94 }, { 2362, 0x79fd },
-  { 2374, 0xcef9 }, { 2385, 0xe02c }, { 2391, 0xc5f3 }, { 2401, 0x5e55 },
-  { 2410, 0xf7ed }, { 2423, 0xfdfb }, { 2437, 0xda8d }, { 2446, 0xf7fe },
-  /* 0x5d00 */
-  { 2460, 0xbf33 }, { 2471, 0xb7af }, { 2483, 0x9d2f }, { 2493, 0x9fef },
-  { 2506, 0xe37f }, { 2518, 0xd6ff }, { 2531, 0x65ff }, { 2543, 0xffef },
-  { 2558, 0xfffb }, { 2573, 0xddff }, { 2587, 0xffff }, { 2603, 0xff7f },
-  { 2618, 0xdfdf }, { 2632, 0x97ff }, { 2645, 0x3419 }, { 2651, 0x9f61 },
-  /* 0x5e00 */
-  { 2660, 0x6e91 }, { 2668, 0xc08c }, { 2673, 0x9f3f }, { 2685, 0xc67d },
-  { 2695, 0xefcb }, { 2707, 0xb7cf }, { 2719, 0xfff9 }, { 2733, 0x42a3 },
-  { 2739, 0x732e }, { 2748, 0x2904 }, { 2752, 0xdf1e }, { 2763, 0xbc17 },
-  { 2772, 0xf9ff }, { 2786, 0xf7b1 }, { 2797, 0xfaff }, { 2811, 0x3b2f },
-  /* 0x5f00 */
-  { 2821, 0x72e0 }, { 2828, 0x7655 }, { 2837, 0x591e }, { 2845, 0xe9fd },
-  { 2857, 0xfffe }, { 2872, 0xde12 }, { 2880, 0xc9a9 }, { 2888, 0xe574 },
-  { 2897, 0xe048 }, { 2902, 0xec5a }, { 2911, 0x9afd }, { 2922, 0xcf5f },
-  { 2934, 0x4d87 }, { 2942, 0xdc38 }, { 2950, 0x936c }, { 2958, 0x16dd },
-  /* 0x6000 */
-  { 2967, 0x1b80 }, { 2972, 0xc58b }, { 2980, 0x701c }, { 2986, 0x67df },
-  { 2998, 0xd7f1 }, { 3009, 0xd9da }, { 3019, 0x4063 }, { 3024, 0x40b6 },
-  { 3030, 0xcde7 }, { 3041, 0x53ab }, { 3050, 0x46b6 }, { 3058, 0xe6e9 },
-  { 3068, 0xf39f }, { 3080, 0x4add }, { 3089, 0x043e }, { 3095, 0xf9a6 },
-  /* 0x6100 */
-  { 3105, 0x1cbc }, { 3113, 0x7bdf }, { 3126, 0xf726 }, { 3136, 0x7fff },
-  { 3151, 0xaaff }, { 3163, 0xdfdd }, { 3176, 0xfe7b }, { 3189, 0xff5e },
-  { 3202, 0xb7ff }, { 3216, 0xdfef }, { 3230, 0xec7f }, { 3242, 0xbf7f },
-  { 3256, 0xf2fb }, { 3268, 0xffe9 }, { 3281, 0xffbf }, { 3296, 0x7fdf },
-  /* 0x6200 */
-  { 3310, 0x02bf }, { 3318, 0x7218 }, { 3324, 0xabc9 }, { 3333, 0x1f67 },
-  { 3343, 0x8474 }, { 3349, 0xf6e1 }, { 3359, 0x0137 }, { 3365, 0x2db6 },
-  { 3374, 0xf9ee }, { 3386, 0x7211 }, { 3392, 0xe6c8 }, { 3400, 0x45dd },
-  { 3409, 0x880b }, { 3414, 0x6022 }, { 3418, 0x0c13 }, { 3423, 0x0f25 },
-  /* 0x6300 */
-  { 3430, 0xbc79 }, { 3440, 0x13bd }, { 3449, 0x72c0 }, { 3455, 0xd9fb },
-  { 3467, 0x0593 }, { 3473, 0x3fde }, { 3485, 0x9d71 }, { 3494, 0xf33d },
-  { 3505, 0x287a }, { 3512, 0xfeba }, { 3524, 0x8852 }, { 3529, 0xaa66 },
-  { 3537, 0x1daf }, { 3547, 0xbfba }, { 3559, 0xd9f4 }, { 3569, 0x5eab },
-  /* 0x6400 */
-  { 3579, 0x67d8 }, { 3588, 0xa7e6 }, { 3598, 0xcbbc }, { 3608, 0x5bef },
-  { 3620, 0xfa0d }, { 3629, 0xbeeb }, { 3641, 0xdd7f }, { 3654, 0xf8ff },
-  { 3667, 0xff4b }, { 3679, 0xbd99 }, { 3689, 0x8def }, { 3700, 0xea5e },
-  { 3710, 0x9fda }, { 3721, 0xbe7a }, { 3732, 0xffab }, { 3745, 0xffff },
-  /* 0x6500 */
-  { 3761, 0xfdfe }, { 3775, 0xfefb }, { 3789, 0x37df }, { 3801, 0x348f },
-  { 3809, 0x6cdf }, { 3820, 0x959d }, { 3829, 0xe7b3 }, { 3840, 0xff6a },
-  { 3852, 0xe77f }, { 3865, 0x6574 }, { 3873, 0x554d }, { 3881, 0xcdfe },
-  { 3893, 0x2785 }, { 3900, 0xff3b }, { 3913, 0x0c1a }, { 3918, 0xfb3c },
-  /* 0x6600 */
-  { 3929, 0x2bb2 }, { 3937, 0x5dc7 }, { 3947, 0x5e5e }, { 3957, 0xaf8d },
-  { 3967, 0x67f5 }, { 3978, 0x7b03 }, { 3986, 0x3ead }, { 3996, 0xbb2e },
-  { 4006, 0xef6b }, { 4018, 0xdf3d }, { 4030, 0xbe7f }, { 4043, 0xbdef },
-  { 4056, 0xffff }, { 4072, 0xc5ff }, { 4084, 0xfdbf }, { 4098, 0x2d62 },
-  /* 0x6700 */
-  { 4105, 0xd0fe }, { 4115, 0x574e }, { 4124, 0x42bf }, { 4133, 0xdbcd },
-  { 4144, 0x2cb2 }, { 4151, 0x2fb4 }, { 4160, 0x58dc }, { 4168, 0x2f52 },
-  { 4176, 0xf56d }, { 4187, 0x8a5e }, { 4195, 0x5253 }, { 4202, 0xfe16 },
-  { 4212, 0x7fe5 }, { 4224, 0x88e0 }, { 4229, 0x6dda }, { 4239, 0x5fe4 },
-  /* 0x6800 */
-  { 4249, 0x205e }, { 4255, 0xdf35 }, { 4266, 0xf9fd }, { 4279, 0x8c73 },
-  { 4287, 0xa880 }, { 4291, 0xffc4 }, { 4302, 0xf400 }, { 4307, 0xff2f },
-  { 4320, 0x7f95 }, { 4331, 0xff77 }, { 4345, 0x5e3b }, { 4355, 0xffd6 },
-  { 4368, 0xd5fa }, { 4379, 0xfadb }, { 4391, 0xbff6 }, { 4404, 0xe9dc },
-  /* 0x6900 */
-  { 4414, 0x97dd }, { 4425, 0x7ffa }, { 4438, 0xdfee }, { 4451, 0x5dee },
-  { 4462, 0xfffb }, { 4477, 0x9b6f }, { 4488, 0xb7b6 }, { 4499, 0xec7d },
-  { 4510, 0xdc2a }, { 4518, 0xe6cf }, { 4529, 0xd67f }, { 4541, 0xf76d },
-  { 4553, 0xabfd }, { 4565, 0x77ee }, { 4577, 0xdffe }, { 4591, 0x5ffb },
-  /* 0x6a00 */
-  { 4604, 0xfbff }, { 4619, 0x7e7f }, { 4632, 0x7afd }, { 4644, 0x9fdd },
-  { 4656, 0xff6f }, { 4670, 0xf4fe }, { 4682, 0xffdd }, { 4696, 0xedfd },
-  { 4709, 0xbfee }, { 4722, 0xff7c }, { 4735, 0xe5fe }, { 4747, 0xffff },
-  { 4763, 0xffff }, { 4779, 0xffff }, { 4795, 0xffff }, { 4811, 0xffff },
-  /* 0x6b00 */
-  { 4827, 0xffff }, { 4843, 0xffff }, { 4859, 0xff60 }, { 4869, 0xb97b },
-  { 4880, 0xed37 }, { 4891, 0xfdff }, { 4906, 0xfb03 }, { 4915, 0xe5ff },
-  { 4928, 0xd121 }, { 4934, 0xf3b3 }, { 4945, 0xfbfd }, { 4959, 0x7f47 },
-  { 4970, 0x57d9 }, { 4980, 0xf503 }, { 4988, 0x73fd }, { 5000, 0xddd7 },
-  /* 0x6c00 */
-  { 5012, 0x5f1f }, { 5023, 0x7084 }, { 5028, 0x3829 }, { 5034, 0xdeca },
-  { 5044, 0xf938 }, { 5053, 0x074e }, { 5060, 0xf8ec }, { 5070, 0x9daa },
-  { 5079, 0x6c91 }, { 5086, 0x75e6 }, { 5096, 0x9105 }, { 5101, 0x04f1 },
-  { 5107, 0xe9cf }, { 5118, 0xb706 }, { 5126, 0x32d0 }, { 5132, 0x8214 },
-  /* 0x6d00 */
-  { 5136, 0xa76d }, { 5146, 0xb17b }, { 5156, 0xb35f }, { 5167, 0x85d1 },
-  { 5174, 0x1215 }, { 5179, 0xa9e1 }, { 5187, 0x39b6 }, { 5196, 0xee6f },
-  { 5208, 0xacdb }, { 5218, 0x17c5 }, { 5226, 0x3024 }, { 5230, 0x7edb },
-  { 5242, 0xe70e }, { 5251, 0x9cbd }, { 5261, 0xa7ac }, { 5270, 0xe575 },
-  /* 0x6e00 */
-  { 5280, 0x8bdf }, { 5291, 0xdb2c }, { 5300, 0x55c4 }, { 5307, 0xfaeb },
-  { 5319, 0x9fe7 }, { 5331, 0x76a7 }, { 5341, 0xb7ff }, { 5355, 0x3fff },
-  { 5369, 0x7d97 }, { 5380, 0x6efe }, { 5392, 0x7b5b }, { 5403, 0xd329 },
-  { 5411, 0x7779 }, { 5422, 0x3b45 }, { 5430, 0xfc88 }, { 5438, 0xfdef },
-  /* 0x6f00 */
-  { 5452, 0x7dbb }, { 5464, 0xffc7 }, { 5477, 0x51ee }, { 5486, 0xbfb5 },
-  { 5498, 0xd73f }, { 5510, 0xaeff }, { 5523, 0x9fbb }, { 5535, 0xeaeb },
-  { 5546, 0x8cef }, { 5556, 0xefff }, { 5571, 0xff7d }, { 5585, 0xfdb7 },
-  { 5598, 0xfdfa }, { 5611, 0xbff9 }, { 5624, 0x3ffc }, { 5636, 0xffff },
-  /* 0x7000 */
-  { 5652, 0xffff }, { 5668, 0xf3fd }, { 5681, 0xfff7 }, { 5696, 0xfddf },
-  { 5710, 0x6fff }, { 5724, 0xbfff }, { 5739, 0x47ff }, { 5751, 0x2e9e },
-  { 5760, 0xb9de }, { 5771, 0xcd8b }, { 5780, 0x07ff }, { 5791, 0xc475 },
-  { 5799, 0xfaf0 }, { 5809, 0x74ff }, { 5821, 0x442f }, { 5828, 0xdd7f },
-  /* 0x7100 */
-  { 5841, 0xf9ff }, { 5855, 0xf896 }, { 5864, 0x7fbf }, { 5878, 0xffbc },
-  { 5891, 0xabdf }, { 5903, 0xafff }, { 5917, 0xbe2f }, { 5928, 0xdaf3 },
-  { 5939, 0x7bef }, { 5952, 0x7cef }, { 5964, 0xeefe }, { 5977, 0xfdd7 },
-  { 5990, 0xbff7 }, { 6004, 0xffcf }, { 6018, 0xbf5e }, { 6030, 0xfdff },
-  /* 0x7200 */
-  { 6045, 0xffbf }, { 6060, 0xdfff }, { 6075, 0xeaff }, { 6088, 0x541c },
-  { 6094, 0xce7f }, { 6106, 0x55bb }, { 6116, 0x3d39 }, { 6125, 0x39db },
-  { 6135, 0x53ec }, { 6144, 0x7ffb }, { 6158, 0x4fff }, { 6171, 0xfc2e },
-  { 6181, 0x9ee1 }, { 6190, 0xbd7a }, { 6201, 0x0cfc }, { 6209, 0xe260 },
-  /* 0x7300 */
-  { 6215, 0xbbf5 }, { 6227, 0x8717 }, { 6235, 0xa1d9 }, { 6243, 0x3c6d },
-  { 6252, 0xdfff }, { 6267, 0xff7a }, { 6280, 0x4ffe }, { 6292, 0xbfff },
-  { 6307, 0xb56f }, { 6318, 0x77bd }, { 6330, 0x35fb }, { 6341, 0xf372 },
-  { 6351, 0x58fa }, { 6360, 0xbdfc }, { 6372, 0xdd5e }, { 6383, 0xfffb },
-  /* 0x7400 */
-  { 6398, 0x7997 }, { 6408, 0xf3fe }, { 6421, 0xaa9b }, { 6430, 0xef86 },
-  { 6440, 0xfffd }, { 6455, 0x215f }, { 6463, 0xdfff }, { 6478, 0xbf3e },
-  { 6490, 0xb774 }, { 6500, 0xaffe }, { 6513, 0xfc7f }, { 6526, 0xfbff },
-  { 6541, 0xffff }, { 6557, 0xaffb }, { 6570, 0x3fa2 }, { 6579, 0x7f2f },
-  /* 0x7500 */
-  { 6591, 0x5fef }, { 6604, 0x68f5 }, { 6613, 0x44df }, { 6622, 0xb250 },
-  { 6628, 0x26de }, { 6637, 0xe1ef }, { 6648, 0xfb9f }, { 6661, 0x7ceb },
-  { 6672, 0x77b7 }, { 6684, 0x5929 }, { 6691, 0x27c4 }, { 6698, 0x8cc0 },
-  { 6703, 0xd843 }, { 6710, 0xb68b }, { 6719, 0xf223 }, { 6727, 0x6dec },
-  /* 0x7600 */
-  { 6737, 0xebd4 }, { 6747, 0x745e }, { 6756, 0xd18a }, { 6763, 0x2ec6 },
-  { 6771, 0xcff6 }, { 6783, 0xafaf }, { 6795, 0x77f7 }, { 6808, 0x96ff },
-  { 6820, 0xb62b }, { 6829, 0xfdb5 }, { 6841, 0xbfef }, { 6855, 0x7fe9 },
-  { 6867, 0x1a9b }, { 6875, 0x7628 }, { 6882, 0x3fdf }, { 6895, 0xace9 },
-  /* 0x7700 */
-  { 6904, 0xd46d }, { 6913, 0x79ff }, { 6926, 0x5cba }, { 6935, 0xea1f },
-  { 6945, 0xff74 }, { 6957, 0xf3fc }, { 6969, 0xe691 }, { 6977, 0x1dff },
-  { 6989, 0x8fce }, { 6999, 0x7ff9 }, { 7012, 0xe95a }, { 7021, 0x57d6 },
-  { 7031, 0xdfff }, { 7046, 0xe77f }, { 7059, 0x8553 }, { 7066, 0x1eb7 },
-  /* 0x7800 */
-  { 7076, 0xcdf8 }, { 7086, 0x4a29 }, { 7092, 0xcd17 }, { 7101, 0xa06e },
-  { 7108, 0xaf5e }, { 7119, 0xdf1a }, { 7129, 0x83ff }, { 7140, 0xef7f },
-  { 7154, 0x8d7f }, { 7165, 0x6275 }, { 7173, 0xff55 }, { 7185, 0xbde0 },
-  { 7194, 0xf1dd }, { 7205, 0xfdce }, { 7217, 0xeeff }, { 7231, 0xfb6b },
-  /* 0x7900 */
-  { 7243, 0xffdd }, { 7257, 0xbff7 }, { 7271, 0xffef }, { 7286, 0xa3ef },
-  { 7297, 0xfcbc }, { 7308, 0x0337 }, { 7315, 0x5e5a }, { 7324, 0xfa7f },
-  { 7337, 0x7bcc }, { 7347, 0xfbff }, { 7362, 0xff7f }, { 7377, 0x91f7 },
-  { 7387, 0xd5b4 }, { 7396, 0x7ed9 }, { 7407, 0x5527 }, { 7415, 0xd6fe },
-  /* 0x7a00 */
-  { 7427, 0x97b2 }, { 7436, 0xbb6f }, { 7448, 0xfff6 }, { 7462, 0x4577 },
-  { 7471, 0xffbf }, { 7486, 0xff7d }, { 7500, 0xffff }, { 7516, 0x782e },
-  { 7524, 0xdea4 }, { 7533, 0x4e19 }, { 7540, 0xce9e }, { 7550, 0x7ff7 },
-  { 7564, 0xf7ff }, { 7579, 0x3dbf }, { 7591, 0x5f96 }, { 7601, 0x59ff },
-  /* 0x7b00 */
-  { 7613, 0x72a7 }, { 7622, 0xb5cd }, { 7632, 0xa28e }, { 7639, 0xaaf5 },
-  { 7649, 0x655f }, { 7659, 0xd2a8 }, { 7666, 0xbffa }, { 7679, 0xb559 },
-  { 7688, 0xdfde }, { 7701, 0xcf4e }, { 7711, 0xc039 }, { 7717, 0xfeed },
-  { 7730, 0xef3d }, { 7742, 0xd9f5 }, { 7753, 0xbb9d }, { 7764, 0xaf7d },
-  /* 0x7c00 */
-  { 7776, 0x677f }, { 7788, 0x7fbf }, { 7802, 0xfb3f }, { 7815, 0x7eff },
-  { 7829, 0xdffc }, { 7842, 0xffff }, { 7858, 0xffff }, { 7874, 0xc7e7 },
-  { 7885, 0xfdff }, { 7900, 0x0e59 }, { 7907, 0xbbcb }, { 7918, 0x8df1 },
-  { 7927, 0xca5d }, { 7936, 0x6d1f }, { 7946, 0x7efe }, { 7959, 0xf6ff },
-  /* 0x7d00 */
-  { 7973, 0xfbff }, { 7988, 0xffff }, { 8004, 0x777a }, { 8015, 0xffff },
-  { 8031, 0xffff }, { 8047, 0xffff }, { 8063, 0xbfff }, { 8078, 0xff7f },
-  { 8093, 0xffff }, { 8109, 0xffff }, { 8125, 0xbfbf }, { 8139, 0xffff },
-  { 8155, 0xffff }, { 8171, 0xffff }, { 8187, 0xffff }, { 8203, 0xffff },
-  /* 0x7e00 */
-  { 8219, 0xffff }, { 8235, 0xffff }, { 8251, 0xffff }, { 8267, 0xf7ff },
-  { 8282, 0xff7d }, { 8296, 0xffff }, { 8312, 0xffff }, { 8328, 0xffff },
-  { 8344, 0xfffb }, { 8359, 0x77ff }, { 8373, 0x4000 }, { 8374, 0x1810 },
-  { 8377, 0x0000 }, { 8377, 0x0040 }, { 8378, 0x1010 }, { 8380, 0x0200 },
-  /* 0x7f00 */
-  { 8381, 0x0400 }, { 8382, 0x4001 }, { 8384, 0x0000 }, { 8384, 0xfa80 },
-  { 8391, 0xffcb }, { 8404, 0x7a4c }, { 8412, 0xb8f9 }, { 8422, 0xbde9 },
-  { 8433, 0xabfd }, { 8445, 0x1bef }, { 8456, 0x7f6d }, { 8468, 0x4cfa },
-  { 8477, 0xabdd }, { 8488, 0x7ecf }, { 8500, 0xbd9c }, { 8510, 0xe7f4 },
-  /* 0x8000 */
-  { 8521, 0xc784 }, { 8528, 0xec0a }, { 8535, 0xf81a }, { 8543, 0x5615 },
-  { 8550, 0xc3b3 }, { 8559, 0xfaeb }, { 8571, 0xf9ff }, { 8585, 0x7ffd },
-  { 8599, 0xe526 }, { 8607, 0x42b7 }, { 8615, 0x11c8 }, { 8620, 0x0b69 },
-  { 8627, 0x8fa0 }, { 8634, 0x813f }, { 8642, 0x404d }, { 8647, 0xcaa0 },
-  /* 0x8100 */
-  { 8653, 0x19bb }, { 8662, 0xbaa0 }, { 8669, 0x6fff }, { 8683, 0xbeb9 },
-  { 8694, 0xe2bf }, { 8705, 0xf9c4 }, { 8714, 0x9d5e }, { 8724, 0x01ec },
-  { 8730, 0x7afa }, { 8741, 0xc6fd }, { 8752, 0xfab7 }, { 8764, 0xf3f7 },
-  { 8777, 0xebb0 }, { 8786, 0xffff }, { 8802, 0xcb77 }, { 8813, 0xa7e7 },
-  /* 0x8200 */
-  { 8824, 0xcf88 }, { 8832, 0x27ea }, { 8841, 0x42f1 }, { 8848, 0xb404 },
-  { 8853, 0x756f }, { 8864, 0x7aff }, { 8877, 0x3eff }, { 8890, 0x19e2 },
-  { 8897, 0x12eb }, { 8905, 0x4c79 }, { 8913, 0x008d }, { 8917, 0x9c64 },
-  { 8924, 0x026d }, { 8930, 0x2641 }, { 8935, 0x7784 }, { 8943, 0xf56d },
-  /* 0x8300 */
-  { 8954, 0x2c01 }, { 8958, 0xe34d }, { 8967, 0x467f }, { 8977, 0xe885 },
-  { 8984, 0x7d36 }, { 8994, 0x23e8 }, { 9001, 0x0004 }, { 9002, 0xc67f },
-  { 9013, 0xbd9f }, { 9025, 0xa6f3 }, { 9035, 0xf0fe }, { 9046, 0xc820 },
-  { 9050, 0x6b5c }, { 9059, 0x4eaf }, { 9069, 0xf9dc }, { 9080, 0xdcf8 },
-  /* 0x8400 */
-  { 9090, 0x07a5 }, { 9097, 0xcefd }, { 9109, 0xfe0f }, { 9120, 0xcefd },
-  { 9132, 0xffbf }, { 9147, 0xe17d }, { 9157, 0xc5f5 }, { 9167, 0xfa95 },
-  { 9177, 0xa47b }, { 9186, 0xed7f }, { 9199, 0x7ffd }, { 9213, 0x58eb },
-  { 9222, 0xd9ed }, { 9233, 0x5fb4 }, { 9243, 0xef96 }, { 9254, 0x6ffe },
-  /* 0x8500 */
-  { 9267, 0xefff }, { 9282, 0x7b75 }, { 9293, 0xe7fd }, { 9306, 0xc07f },
-  { 9315, 0xf8f7 }, { 9327, 0xbdbf }, { 9340, 0xfeef }, { 9354, 0xb1eb },
-  { 9364, 0x7f4f }, { 9376, 0xe7ff }, { 9390, 0x3aef }, { 9401, 0xfd7e },
-  { 9414, 0x7dfd }, { 9427, 0xefd6 }, { 9439, 0xfdef }, { 9453, 0x77ff },
-  /* 0x8600 */
-  { 9467, 0xffdf }, { 9482, 0xffbd }, { 9496, 0xfd7f }, { 9510, 0xeeff },
-  { 9524, 0x1fff }, { 9537, 0xbbec }, { 9548, 0xa7fb }, { 9560, 0x01fd },
-  { 9568, 0xc3f8 }, { 9577, 0xcfd7 }, { 9589, 0x6867 }, { 9597, 0xfb8c },
-  { 9607, 0x312e }, { 9614, 0x34ec }, { 9622, 0x9def }, { 9634, 0xbce0 },
-  /* 0x8700 */
-  { 9642, 0xd872 }, { 9650, 0xaa53 }, { 9658, 0xbdd1 }, { 9668, 0x376d },
-  { 9678, 0xac7f }, { 9689, 0xfd77 }, { 9702, 0xbfc6 }, { 9713, 0x87ae },
-  { 9722, 0xd6d3 }, { 9732, 0x7f77 }, { 9745, 0x46ff }, { 9756, 0xdbd7 },
-  { 9768, 0xf3be }, { 9780, 0xf7f1 }, { 9792, 0xbbde }, { 9804, 0xbdff },
-  /* 0x8800 */
-  { 9818, 0xfbf7 }, { 9832, 0xf797 }, { 9844, 0xfff9 }, { 9858, 0xedfb },
-  { 9871, 0xcfce }, { 9882, 0xfd6f }, { 9895, 0xa4c1 }, { 9901, 0x1f7a },
-  { 9911, 0xd6c9 }, { 9920, 0xefbb }, { 9933, 0xd7eb }, { 9945, 0xef7d },
-  { 9958, 0xbd99 }, { 9968, 0x7ccb }, { 9978, 0xfec3 }, { 9989, 0xace4 },
-  /* 0x8900 */
-  { 9997, 0xfbfb }, { 10011, 0xf1f2 }, { 10021, 0xf3dd }, { 10033, 0xffae },
-  { 10046, 0xffed }, { 10060, 0x3fff }, { 10074, 0xffbf }, { 10089, 0x77ff },
-  { 10103, 0xffb5 }, { 10116, 0xffff }, { 10132, 0xffff }, { 10148, 0xffff },
-  { 10164, 0x2009 }, { 10167, 0xabb8 }, { 10176, 0x7797 }, { 10187, 0xfff7 },
-  /* 0x8a00 */
-  { 10202, 0xff7e }, { 10216, 0xffff }, { 10232, 0xffff }, { 10248, 0xbfff },
-  { 10263, 0xfeff }, { 10278, 0xffff }, { 10294, 0xffff }, { 10310, 0xfdff },
-  { 10325, 0xf9ff }, { 10339, 0xfff7 }, { 10354, 0xffff }, { 10370, 0xffff },
-  { 10386, 0xffff }, { 10402, 0xffff }, { 10418, 0xffff }, { 10434, 0xffff },
-  /* 0x8b00 */
-  { 10450, 0xff7f }, { 10465, 0xffff }, { 10481, 0xffbf }, { 10496, 0xffff },
-  { 10512, 0xffff }, { 10528, 0xffff }, { 10544, 0xefbf }, { 10558, 0xffff },
-  { 10574, 0xffff }, { 10590, 0xffff }, { 10606, 0x1000 }, { 10607, 0x0802 },
-  { 10609, 0x0080 }, { 10610, 0x0001 }, { 10611, 0x0400 }, { 10612, 0x0000 },
-  /* 0x8c00 */
-  { 10612, 0x0200 }, { 10613, 0x4000 }, { 10614, 0x0000 }, { 10614, 0xff00 },
-  { 10622, 0xed3d }, { 10633, 0xfbdf }, { 10647, 0xf3f9 }, { 10659, 0xf8f7 },
-  { 10671, 0xe9db }, { 10682, 0xfeef }, { 10696, 0xffff }, { 10712, 0xffff },
-  { 10728, 0xffff }, { 10744, 0xffff }, { 10760, 0xffff }, { 10776, 0xffff },
-  /* 0x8d00 */
-  { 10792, 0xffff }, { 10808, 0x1fff }, { 10821, 0x0001 }, { 10822, 0x0000 },
-  { 10822, 0x0000 }, { 10822, 0x8086 }, { 10826, 0xd720 }, { 10833, 0xff06 },
-  { 10843, 0xf3cd }, { 10854, 0x7fed }, { 10867, 0xfff7 }, { 10882, 0x2ac5 },
-  { 10889, 0x27a7 }, { 10898, 0x133d }, { 10906, 0x62e7 }, { 10915, 0xd057 },
-  /* 0x8e00 */
-  { 10923, 0x69df }, { 10934, 0x1fef }, { 10946, 0x29f3 }, { 10955, 0xd9dd },
-  { 10966, 0xf068 }, { 10973, 0xfdf9 }, { 10986, 0x4dbf }, { 10997, 0x6faa },
-  { 11007, 0x7f5d }, { 11019, 0xafee }, { 11031, 0x67ff }, { 11044, 0xfbfb },
-  { 11058, 0xbfff }, { 11073, 0xffff }, { 11089, 0xffff }, { 11105, 0xffff },
-  /* 0x8f00 */
-  { 11121, 0xffff }, { 11137, 0xffff }, { 11153, 0xffff }, { 11169, 0xffff },
-  { 11185, 0xffff }, { 11201, 0xffff }, { 11217, 0x043f }, { 11224, 0x0000 },
-  { 11224, 0x1001 }, { 11226, 0x2004 }, { 11228, 0xf4f7 }, { 11240, 0x9dbc },
-  { 11250, 0xbe49 }, { 11259, 0x04c4 }, { 11263, 0x908b }, { 11269, 0xdc76 },
-  /* 0x9000 */
-  { 11279, 0x5180 }, { 11283, 0x1328 }, { 11288, 0x1fb8 }, { 11297, 0xa69f },
-  { 11307, 0x5f69 }, { 11317, 0xf670 }, { 11326, 0x9ed3 }, { 11336, 0x5fcf },
-  { 11348, 0xf6f2 }, { 11359, 0xd555 }, { 11368, 0x2bb1 }, { 11376, 0xb084 },
-  { 11381, 0x3b4d }, { 11390, 0xc774 }, { 11399, 0x5639 }, { 11407, 0x9eef },
-  /* 0x9100 */
-  { 11419, 0xffeb }, { 11433, 0xbdff }, { 11447, 0x7ff3 }, { 11460, 0xfdfd },
-  { 11474, 0x01b7 }, { 11481, 0x9b7a }, { 11491, 0x29c1 }, { 11497, 0x1c08 },
-  { 11501, 0xc55f }, { 11511, 0xf3f8 }, { 11522, 0x1bf3 }, { 11532, 0xfbcf },
-  { 11545, 0x097f }, { 11554, 0xeffd }, { 11568, 0xffff }, { 11584, 0xffff },
-  /* 0x9200 */
-  { 11600, 0xffff }, { 11616, 0xffff }, { 11632, 0xffff }, { 11648, 0xffff },
-  { 11664, 0xffff }, { 11680, 0xffff }, { 11696, 0xffff }, { 11712, 0xffef },
-  { 11727, 0xbfff }, { 11742, 0xffff }, { 11758, 0xbfff }, { 11773, 0xffff },
-  { 11789, 0xfeff }, { 11804, 0xffff }, { 11820, 0xffff }, { 11836, 0xffff },
-  /* 0x9300 */
-  { 11852, 0xffff }, { 11868, 0xffff }, { 11884, 0xffff }, { 11900, 0xbfff },
-  { 11915, 0xffff }, { 11931, 0xffff }, { 11947, 0xfbff }, { 11962, 0xffff },
-  { 11978, 0x7fff }, { 11993, 0xffff }, { 12009, 0xffff }, { 12025, 0xffff },
-  { 12041, 0xfbff }, { 12056, 0xffbf }, { 12071, 0xffff }, { 12087, 0xffff },
-  /* 0x9400 */
-  { 12103, 0xffff }, { 12119, 0xffff }, { 12135, 0xffff }, { 12151, 0xbfff },
-  { 12166, 0xffff }, { 12182, 0xffff }, { 12198, 0xf7ff }, { 12213, 0xffff },
-  { 12229, 0x001f }, { 12234, 0x0142 }, { 12237, 0x0000 }, { 12237, 0x0000 },
-  { 12237, 0x8080 }, { 12239, 0x0418 }, { 12242, 0x0040 }, { 12243, 0x0800 },
-  /* 0x9500 */
-  { 12244, 0x0000 }, { 12244, 0x1000 }, { 12245, 0x0081 }, { 12247, 0x2008 },
-  { 12249, 0x0908 }, { 12252, 0x0420 }, { 12254, 0x4001 }, { 12256, 0x7fb0 },
-  { 12266, 0xffff }, { 12282, 0xffff }, { 12298, 0xffff }, { 12314, 0xffff },
-  { 12330, 0xffff }, { 12346, 0xffff }, { 12362, 0x10ff }, { 12371, 0x8000 },
-  /* 0x9600 */
-  { 12372, 0x0080 }, { 12373, 0x4908 }, { 12377, 0xbbf9 }, { 12389, 0x4781 },
-  { 12395, 0xc40a }, { 12400, 0x77ce }, { 12411, 0xe869 }, { 12419, 0xff0b },
-  { 12430, 0x569f }, { 12440, 0xec6e }, { 12450, 0xff7f }, { 12465, 0x8db6 },
-  { 12474, 0x0d0c }, { 12479, 0xffdb }, { 12493, 0x78fe }, { 12504, 0xbd37 },
-  /* 0x9700 */
-  { 12515, 0x1c2c }, { 12521, 0xafb7 }, { 12533, 0xdbff }, { 12547, 0xbcfa },
-  { 12558, 0xffff }, { 12574, 0xb5b3 }, { 12584, 0xfdd8 }, { 12595, 0xefa7 },
-  { 12607, 0xd7df }, { 12620, 0xfee9 }, { 12632, 0x57f6 }, { 12643, 0xffeb },
-  { 12657, 0xffff }, { 12673, 0xffff }, { 12689, 0xc13f }, { 12698, 0xff97 },
-  /* 0x9800 */
-  { 12711, 0xffff }, { 12727, 0xffff }, { 12743, 0xffff }, { 12759, 0xffff },
-  { 12775, 0xffff }, { 12791, 0xffff }, { 12807, 0xffff }, { 12823, 0x001f },
-  { 12828, 0x4800 }, { 12830, 0x0224 }, { 12833, 0xff08 }, { 12842, 0xffff },
-  { 12858, 0xbfff }, { 12873, 0x38d1 }, { 12880, 0xfe7f }, { 12894, 0xffff },
-  /* 0x9900 */
-  { 12910, 0xdfff }, { 12925, 0xfffe }, { 12940, 0xbfff }, { 12955, 0xffff },
-  { 12971, 0xffff }, { 12987, 0xffcf }, { 13001, 0x0057 }, { 13006, 0x4b08 },
-  { 13011, 0x520c }, { 13016, 0xfc00 }, { 13022, 0xfedf }, { 13036, 0xffff },
-  { 13052, 0xffff }, { 13068, 0xffff }, { 13084, 0xffff }, { 13100, 0xffff },
-  /* 0x9a00 */
-  { 13116, 0xffff }, { 13132, 0xffff }, { 13148, 0xffff }, { 13164, 0xffff },
-  { 13180, 0xffff }, { 13196, 0xffff }, { 13212, 0x0fff }, { 13224, 0x0004 },
-  { 13225, 0x6208 }, { 13229, 0x0230 }, { 13232, 0xfe40 }, { 13240, 0xea3c },
-  { 13249, 0xe7d8 }, { 13259, 0x7ef5 }, { 13271, 0x57bd }, { 13282, 0xf5ff },
-  /* 0x9b00 */
-  { 13296, 0x7ef7 }, { 13309, 0x7ff7 }, { 13323, 0x7ff7 }, { 13337, 0xe7fb },
-  { 13350, 0x5c41 }, { 13356, 0xffed }, { 13370, 0xffff }, { 13386, 0xffff },
-  { 13402, 0xffff }, { 13418, 0xffff }, { 13434, 0xffff }, { 13450, 0xffff },
-  { 13466, 0xffff }, { 13482, 0xffff }, { 13498, 0xffff }, { 13514, 0xffff },
-  /* 0x9c00 */
-  { 13530, 0xffff }, { 13546, 0xffff }, { 13562, 0xffff }, { 13578, 0xffff },
-  { 13594, 0xffff }, { 13610, 0xffff }, { 13626, 0xffff }, { 13642, 0x6fff },
-  { 13656, 0x9619 }, { 13663, 0x23c8 }, { 13669, 0x9400 }, { 13672, 0xc200 },
-  { 13675, 0x0307 }, { 13680, 0x0c06 }, { 13684, 0xfffb }, { 13699, 0xffff },
-  /* 0x9d00 */
-  { 13715, 0xffff }, { 13731, 0xffff }, { 13747, 0xffff }, { 13763, 0xffff },
-  { 13779, 0xffff }, { 13795, 0xffff }, { 13811, 0xffff }, { 13827, 0xffff },
-  { 13843, 0xffff }, { 13859, 0xffff }, { 13875, 0xffff }, { 13891, 0xffff },
-  { 13907, 0xffff }, { 13923, 0xffff }, { 13939, 0xffff }, { 13955, 0xffff },
-  /* 0x9e00 */
-  { 13971, 0xffff }, { 13987, 0x7fff }, { 14002, 0x4090 }, { 14005, 0x1811 },
-  { 14009, 0x2001 }, { 14011, 0xa25d }, { 14019, 0xc027 }, { 14025, 0x3ff4 },
-  { 14036, 0xf67b }, { 14048, 0x5ff3 }, { 14060, 0xffbf }, { 14075, 0x96ef },
-  { 14086, 0x1def }, { 14097, 0x46ed }, { 14106, 0x795a }, { 14115, 0xa5ff },
-  /* 0x9f00 */
-  { 14127, 0x97ff }, { 14140, 0xfd76 }, { 14152, 0x6ffa }, { 14164, 0x957f },
-  { 14175, 0xffef }, { 14190, 0xfffc }, { 14204, 0xffff }, { 14220, 0x7fff },
-  { 14235, 0xe006 }, { 14240, 0x71ff }, { 14252, 0x003e },
-};
-static const Summary16 gbkext_inv_uni2indx_pagef9[19] = {
-  /* 0xf900 */
-  { 14257, 0x0000 }, { 14257, 0x0000 }, { 14257, 0x1000 }, { 14258, 0x0000 },
-  { 14258, 0x0000 }, { 14258, 0x0000 }, { 14258, 0x0000 }, { 14258, 0x0200 },
-  { 14259, 0x0000 }, { 14259, 0x0020 }, { 14260, 0x0000 }, { 14260, 0x0000 },
-  { 14260, 0x0000 }, { 14260, 0x0000 }, { 14260, 0x0080 }, { 14261, 0x0002 },
-  /* 0xfa00 */
-  { 14262, 0xf000 }, { 14266, 0x811a }, { 14271, 0x039b },
-};
-static const Summary16 gbkext_inv_uni2indx_pagefe[31] = {
-  /* 0xfe00 */
-  { 14278, 0x0000 }, { 14278, 0x0000 }, { 14278, 0x0000 }, { 14278, 0x0001 },
-  { 14279, 0xfe00 }, { 14286, 0xfef7 }, { 14300, 0x0f7f }, { 14311, 0x0000 },
-  { 14311, 0x0000 }, { 14311, 0x0000 }, { 14311, 0x0000 }, { 14311, 0x0000 },
-  { 14311, 0x0000 }, { 14311, 0x0000 }, { 14311, 0x0000 }, { 14311, 0x0000 },
-  /* 0xff00 */
-  { 14311, 0x0000 }, { 14311, 0x0000 }, { 14311, 0x0000 }, { 14311, 0x0000 },
-  { 14311, 0x0000 }, { 14311, 0x0000 }, { 14311, 0x0000 }, { 14311, 0x0000 },
-  { 14311, 0x0000 }, { 14311, 0x0000 }, { 14311, 0x0000 }, { 14311, 0x0000 },
-  { 14311, 0x0000 }, { 14311, 0x0000 }, { 14311, 0x0014 },
-};
-
-static int gbkext_inv_wctomb(unsigned int* r, unsigned int wc) {
-    const Summary16 *summary = NULL;
-    if (wc >= 0x0200 && wc < 0x02e0) {
-        summary = &gbkext_inv_uni2indx_page02[(wc>>4)-0x020];
-    } else if (wc >= 0x2000 && wc < 0x22c0) {
-        summary = &gbkext_inv_uni2indx_page20[(wc>>4)-0x200];
-    } else if (wc >= 0x2500 && wc < 0x2610) {
-        summary = &gbkext_inv_uni2indx_page25[(wc>>4)-0x250];
-    } else if (wc >= 0x3000 && wc < 0x3100) {
-        summary = &gbkext_inv_uni2indx_page30[(wc>>4)-0x300];
-    } else if (wc >= 0x3200 && wc < 0x33e0) {
-        summary = &gbkext_inv_uni2indx_page32[(wc>>4)-0x320];
-    } else if (wc >= 0x4e00 && wc < 0x9fb0) {
-        summary = &gbkext_inv_uni2indx_page4e[(wc>>4)-0x4e0];
-    } else if (wc >= 0xf900 && wc < 0xfa30) {
-        summary = &gbkext_inv_uni2indx_pagef9[(wc>>4)-0xf90];
-    } else if (wc >= 0xfe00 && wc < 0xfff0) {
-        summary = &gbkext_inv_uni2indx_pagefe[(wc>>4)-0xfe0];
-    }
-    if (summary) {
-        unsigned short used = summary->used;
-        unsigned int i = wc & 0x0f;
-        if (used & ((unsigned short) 1 << i)) {
-            /* Keep in 'used' only the bits 0..i-1. */
-            used &= ((unsigned short) 1 << i) - 1;
-            /* Add 'summary->indx' and the number of bits set in 'used'. */
-            used = (used & 0x5555) + ((used & 0xaaaa) >> 1);
-            used = (used & 0x3333) + ((used & 0xcccc) >> 2);
-            used = (used & 0x0f0f) + ((used & 0xf0f0) >> 4);
-            used = (used & 0x00ff) + (used >> 8);
-            *r = gbkext_inv_2charset[summary->indx + used];
-            return 2;
-        }
-    }
-    return 0;
-}
-
-/*
- * GBK (libiconv-1.16/lib/gbk.h)
- */
-
-static int gbk_wctomb(unsigned int* r, unsigned int wc) {
-    int ret;
-
-    /* ZINT: Note these mappings U+30FB and U+2015 different from GB 2312 */
-    if (wc != 0x30fb && wc != 0x2015) {
-        ret = gb2312_wctomb_zint(r, wc); /* In gb2312.c */
-        if (ret) {
-            return ret;
-        }
-    }
-    ret = gbkext_inv_wctomb(r, wc);
-    if (ret) {
-        return ret;
-    }
-    if (wc >= 0x2170 && wc <= 0x2179) {
-        *r = 0xa2a1 + (wc-0x2170);
-        return 2;
-    }
-    ret = cp936ext_wctomb(r, wc);
-    if (ret) {
-        return ret;
-    }
-    /* ZINT: gb2312_wctomb_zint() is patched to map U+00B7 to 0xA1A4 and U+2014 to 0xA1AA */
-
-    return 0;
-}
-
-/*
- * GB18030 two-byte extension (libiconv-1.16/lib/gb18030ext.h)
- */
-
-static const unsigned short gb18030ext_page2e[80] = {
-  0x0000, 0xfe50, 0x0000, 0x0000, 0xfe54, 0x0000, 0x0000, 0x0000, /*0x80-0x87*/
-  0xfe57, 0x0000, 0x0000, 0xfe58, 0xfe5d, 0x0000, 0x0000, 0x0000, /*0x88-0x8f*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xfe5e, /*0x90-0x97*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x98-0x9f*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xfe6b, /*0xa0-0xa7*/
-  0x0000, 0x0000, 0xfe6e, 0x0000, 0x0000, 0x0000, 0xfe71, 0x0000, /*0xa8-0xaf*/
-  0x0000, 0x0000, 0x0000, 0xfe73, 0x0000, 0x0000, 0xfe74, 0xfe75, /*0xb0-0xb7*/
-  0x0000, 0x0000, 0x0000, 0xfe79, 0x0000, 0x0000, 0x0000, 0x0000, /*0xb8-0xbf*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0xc0-0xc7*/
-  0x0000, 0x0000, 0xfe84, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0xc8-0xcf*/
-};
-static const unsigned short gb18030ext_page2f[16] = {
-  0xa98a, 0xa98b, 0xa98c, 0xa98d, 0xa98e, 0xa98f, 0xa990, 0xa991, /*0xf0-0xf7*/
-  0xa992, 0xa993, 0xa994, 0xa995, 0x0000, 0x0000, 0x0000, 0x0000, /*0xf8-0xff*/
-};
-static const unsigned short gb18030ext_page34[56] = {
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xfe56, /*0x40-0x47*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x48-0x4f*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x50-0x57*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x58-0x5f*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x60-0x67*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x68-0x6f*/
-  0x0000, 0x0000, 0x0000, 0xfe55, 0x0000, 0x0000, 0x0000, 0x0000, /*0x70-0x77*/
-};
-static const unsigned short gb18030ext_page36[24] = {
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xfe5c, 0x0000, /*0x08-0x0f*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x10-0x17*/
-  0x0000, 0x0000, 0xfe5b, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x18-0x1f*/
-};
-static const unsigned short gb18030ext_page39[24] = {
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xfe62, /*0xc8-0xcf*/
-  0xfe65, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0xd0-0xd7*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xfe63, /*0xd8-0xdf*/
-};
-static const unsigned short gb18030ext_page43[56] = {
-  0x0000, 0x0000, 0x0000, 0x0000, 0xfe78, 0x0000, 0x0000, 0x0000, /*0xa8-0xaf*/
-  0x0000, 0xfe77, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0xb0-0xb7*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0xb8-0xbf*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0xc0-0xc7*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0xc8-0xcf*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0xd0-0xd7*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xfe7a, 0x0000, 0x0000, /*0xd8-0xdf*/
-};
-static const unsigned short gb18030ext_page46[32] = {
-  0x0000, 0x0000, 0x0000, 0x0000, 0xfe7d, 0x0000, 0x0000, 0x0000, /*0x48-0x4f*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x50-0x57*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x58-0x5f*/
-  0x0000, 0xfe7c, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x60-0x67*/
-};
-static const unsigned short gb18030ext_page47_1[16] = {
-  0x0000, 0x0000, 0x0000, 0xfe80, 0x0000, 0x0000, 0x0000, 0x0000, /*0x20-0x27*/
-  0x0000, 0xfe81, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x28-0x2f*/
-};
-static const unsigned short gb18030ext_page47_2[24] = {
-  0x0000, 0x0000, 0x0000, 0x0000, 0xfe82, 0x0000, 0x0000, 0x0000, /*0x78-0x7f*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x80-0x87*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xfe83, 0x0000, 0x0000, /*0x88-0x8f*/
-};
-static const unsigned short gb18030ext_page49[120] = {
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xfe85, /*0x40-0x47*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x48-0x4f*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x50-0x57*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x58-0x5f*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x60-0x67*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x68-0x6f*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x70-0x77*/
-  0x0000, 0x0000, 0xfe86, 0x0000, 0x0000, 0xfe87, 0x0000, 0x0000, /*0x78-0x7f*/
-  0x0000, 0x0000, 0xfe88, 0xfe89, 0x0000, 0xfe8a, 0xfe8b, 0x0000, /*0x80-0x87*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x88-0x8f*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x90-0x97*/
-  0x0000, 0x0000, 0x0000, 0xfe8d, 0x0000, 0x0000, 0x0000, 0xfe8c, /*0x98-0x9f*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0xa0-0xa7*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0xa8-0xaf*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xfe8f, 0xfe8e, /*0xb0-0xb7*/
-};
-static const unsigned short gb18030ext_page4c[56] = {
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xfe96, /*0x70-0x77*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x78-0x7f*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x80-0x87*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x88-0x8f*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x90-0x97*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xfe93, /*0x98-0x9f*/
-  0xfe94, 0xfe95, 0xfe97, 0xfe92, 0x0000, 0x0000, 0x0000, 0x0000, /*0xa0-0xa7*/
-};
-static const unsigned short gb18030ext_page4d[16] = {
-  0x0000, 0x0000, 0x0000, 0xfe98, 0xfe99, 0xfe9a, 0xfe9b, 0xfe9c, /*0x10-0x17*/
-  0xfe9d, 0xfe9e, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x18-0x1f*/
-};
-static const unsigned short gb18030ext_page9f[16] = {
-  0x0000, 0x0000, 0x0000, 0x0000, 0xfe59, 0xfe61, 0xfe66, 0xfe67, /*0xb0-0xb7*/
-  0xfe6d, 0xfe7e, 0xfe90, 0xfea0, 0x0000, 0x0000, 0x0000, 0x0000, /*0xb8-0xbf*/
-};
-static const unsigned short gb18030ext_pagefe[16] = {
-  0xa6d9, 0xa6db, 0xa6da, 0xa6dc, 0xa6dd, 0xa6de, 0xa6df, 0xa6ec, /*0x10-0x17*/
-  0xa6ed, 0xa6f3, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x18-0x1f*/
-};
-
-static int gb18030ext_wctomb(unsigned int* r, unsigned int wc) {
-    unsigned short c = 0;
-    if (wc == 0x01f9) {
-        c = 0xa8bf;
-    } else if (wc == 0x1e3f) {
-        c = 0xa8bc;
-    } else if (wc == 0x20ac) {
-        c = 0xa2e3;
-    } else if (wc >= 0x2e80 && wc < 0x2ed0) {
-        c = gb18030ext_page2e[wc-0x2e80];
-    } else if (wc >= 0x2ff0 && wc < 0x3000) {
-        c = gb18030ext_page2f[wc-0x2ff0];
-    } else if (wc == 0x303e) {
-        c = 0xa989;
-    } else if (wc >= 0x3440 && wc < 0x3478) {
-        c = gb18030ext_page34[wc-0x3440];
-    } else if (wc == 0x359e) {
-        c = 0xfe5a;
-    } else if (wc >= 0x3608 && wc < 0x3620) {
-        c = gb18030ext_page36[wc-0x3608];
-    } else if (wc == 0x3918) {
-        c = 0xfe60;
-    } else if (wc == 0x396e) {
-        c = 0xfe5f;
-    } else if (wc >= 0x39c8 && wc < 0x39e0) {
-        c = gb18030ext_page39[wc-0x39c8];
-    } else if (wc == 0x3a73) {
-        c = 0xfe64;
-    } else if (wc == 0x3b4e) {
-        c = 0xfe68;
-    } else if (wc == 0x3c6e) {
-        c = 0xfe69;
-    } else if (wc == 0x3ce0) {
-        c = 0xfe6a;
-    } else if (wc == 0x4056) {
-        c = 0xfe6f;
-    } else if (wc == 0x415f) {
-        c = 0xfe70;
-    } else if (wc == 0x4337) {
-        c = 0xfe72;
-    } else if (wc >= 0x43a8 && wc < 0x43e0) {
-        c = gb18030ext_page43[wc-0x43a8];
-    } else if (wc == 0x44d6) {
-        c = 0xfe7b;
-    } else if (wc >= 0x4648 && wc < 0x4668) {
-        c = gb18030ext_page46[wc-0x4648];
-    } else if (wc >= 0x4720 && wc < 0x4730) {
-        c = gb18030ext_page47_1[wc-0x4720];
-    } else if (wc >= 0x4778 && wc < 0x4790) {
-        c = gb18030ext_page47_2[wc-0x4778];
-    } else if (wc >= 0x4940 && wc < 0x49b8) {
-        c = gb18030ext_page49[wc-0x4940];
-    } else if (wc >= 0x4c70 && wc < 0x4ca8) {
-        c = gb18030ext_page4c[wc-0x4c70];
-    } else if (wc >= 0x4d10 && wc < 0x4d20) {
-        c = gb18030ext_page4d[wc-0x4d10];
-    } else if (wc == 0x4dae) {
-        c = 0xfe9f;
-    } else if (wc >= 0x9fb4 && wc < 0x9fbc) {
-        c = gb18030ext_page9f[wc-0x9fb0];
-    } else if (wc >= 0xfe10 && wc < 0xfe1a) {
-        c = gb18030ext_pagefe[wc-0xfe10];
-    } else if (wc == 0x20087) {
-        c = 0xfe51;
-    } else if (wc == 0x20089) {
-        c = 0xfe52;
-    } else if (wc == 0x200cc) {
-        c = 0xfe53;
-    } else if (wc == 0x215d7) {
-        c = 0xfe6c;
-    } else if (wc == 0x2298f) {
-        c = 0xfe76;
-    } else if (wc == 0x241fe) {
-        c = 0xfe91;
-    }
-    if (c != 0) {
-        *r = c;
-        return 2;
-    }
-    return 0;
-}
-
-/*
- * GB18030 four-byte extension (libiconv-1.16/lib/gb18030uni.h)
- */
-
-static const unsigned short gb18030uni_uni2charset_ranges[412] = {
-  0x0080, 0x00a3,  0x00a5, 0x00a6,  0x00a9, 0x00af,  0x00b2, 0x00b6,
-  0x00b8, 0x00d6,  0x00d8, 0x00df,  0x00e2, 0x00e7,  0x00eb, 0x00eb,
-  0x00ee, 0x00f1,  0x00f4, 0x00f6,  0x00f8, 0x00f8,  0x00fb, 0x00fb,
-  0x00fd, 0x0100,  0x0102, 0x0112,  0x0114, 0x011a,  0x011c, 0x012a,
-  0x012c, 0x0143,  0x0145, 0x0147,  0x0149, 0x014c,  0x014e, 0x016a,
-  0x016c, 0x01cd,  0x01cf, 0x01cf,  0x01d1, 0x01d1,  0x01d3, 0x01d3,
-  0x01d5, 0x01d5,  0x01d7, 0x01d7,  0x01d9, 0x01d9,  0x01db, 0x01db,
-  0x01dd, 0x01f8,  0x01fa, 0x0250,  0x0252, 0x0260,  0x0262, 0x02c6,
-  0x02c8, 0x02c8,  0x02cc, 0x02d8,  0x02da, 0x0390,  0x03a2, 0x03a2,
-  0x03aa, 0x03b0,  0x03c2, 0x03c2,  0x03ca, 0x0400,  0x0402, 0x040f,
-  0x0450, 0x0450,  0x0452, 0x200f,  0x2011, 0x2012,  0x2017, 0x2017,
-  0x201a, 0x201b,  0x201e, 0x2024,  0x2027, 0x202f,  0x2031, 0x2031,
-  0x2034, 0x2034,  0x2036, 0x203a,  0x203c, 0x20ab,  0x20ad, 0x2102,
-  0x2104, 0x2104,  0x2106, 0x2108,  0x210a, 0x2115,  0x2117, 0x2120,
-  0x2122, 0x215f,  0x216c, 0x216f,  0x217a, 0x218f,  0x2194, 0x2195,
-  0x219a, 0x2207,  0x2209, 0x220e,  0x2210, 0x2210,  0x2212, 0x2214,
-  0x2216, 0x2219,  0x221b, 0x221c,  0x2221, 0x2222,  0x2224, 0x2224,
-  0x2226, 0x2226,  0x222c, 0x222d,  0x222f, 0x2233,  0x2238, 0x223c,
-  0x223e, 0x2247,  0x2249, 0x224b,  0x224d, 0x2251,  0x2253, 0x225f,
-  0x2262, 0x2263,  0x2268, 0x226d,  0x2270, 0x2294,  0x2296, 0x2298,
-  0x229a, 0x22a4,  0x22a6, 0x22be,  0x22c0, 0x2311,  0x2313, 0x245f,
-  0x246a, 0x2473,  0x249c, 0x24ff,  0x254c, 0x254f,  0x2574, 0x2580,
-  0x2590, 0x2592,  0x2596, 0x259f,  0x25a2, 0x25b1,  0x25b4, 0x25bb,
-  0x25be, 0x25c5,  0x25c8, 0x25ca,  0x25cc, 0x25cd,  0x25d0, 0x25e1,
-  0x25e6, 0x2604,  0x2607, 0x2608,  0x260a, 0x263f,  0x2641, 0x2641,
-  0x2643, 0x2e80,  0x2e82, 0x2e83,  0x2e85, 0x2e87,  0x2e89, 0x2e8a,
-  0x2e8d, 0x2e96,  0x2e98, 0x2ea6,  0x2ea8, 0x2ea9,  0x2eab, 0x2ead,
-  0x2eaf, 0x2eb2,  0x2eb4, 0x2eb5,  0x2eb8, 0x2eba,  0x2ebc, 0x2ec9,
-  0x2ecb, 0x2fef,  0x2ffc, 0x2fff,  0x3004, 0x3004,  0x3018, 0x301c,
-  0x301f, 0x3020,  0x302a, 0x303d,  0x303f, 0x3040,  0x3094, 0x309a,
-  0x309f, 0x30a0,  0x30f7, 0x30fb,  0x30ff, 0x3104,  0x312a, 0x321f,
-  0x322a, 0x3230,  0x3232, 0x32a2,  0x32a4, 0x338d,  0x3390, 0x339b,
-  0x339f, 0x33a0,  0x33a2, 0x33c3,  0x33c5, 0x33cd,  0x33cf, 0x33d0,
-  0x33d3, 0x33d4,  0x33d6, 0x3446,  0x3448, 0x3472,  0x3474, 0x359d,
-  0x359f, 0x360d,  0x360f, 0x3619,  0x361b, 0x3917,  0x3919, 0x396d,
-  0x396f, 0x39ce,  0x39d1, 0x39de,  0x39e0, 0x3a72,  0x3a74, 0x3b4d,
-  0x3b4f, 0x3c6d,  0x3c6f, 0x3cdf,  0x3ce1, 0x4055,  0x4057, 0x415e,
-  0x4160, 0x4336,  0x4338, 0x43ab,  0x43ad, 0x43b0,  0x43b2, 0x43dc,
-  0x43de, 0x44d5,  0x44d7, 0x464b,  0x464d, 0x4660,  0x4662, 0x4722,
-  0x4724, 0x4728,  0x472a, 0x477b,  0x477d, 0x478c,  0x478e, 0x4946,
-  0x4948, 0x4979,  0x497b, 0x497c,  0x497e, 0x4981,  0x4984, 0x4984,
-  0x4987, 0x499a,  0x499c, 0x499e,  0x49a0, 0x49b5,  0x49b8, 0x4c76,
-  0x4c78, 0x4c9e,  0x4ca4, 0x4d12,  0x4d1a, 0x4dad,  0x4daf, 0x4dff,
-  0x9fa6, 0xd7ff,
-                   0xe76c, 0xe76c,  0xe7c8, 0xe7c8,  0xe7e7, 0xe7f3,
-  0xe815, 0xe815,  0xe819, 0xe81d,  0xe81f, 0xe825,  0xe827, 0xe82a,
-  0xe82d, 0xe830,  0xe833, 0xe83a,  0xe83c, 0xe842,  0xe844, 0xe853,
-  0xe856, 0xe863,
-                   0xe865, 0xf92b,  0xf92d, 0xf978,  0xf97a, 0xf994,
-  0xf996, 0xf9e6,  0xf9e8, 0xf9f0,  0xf9f2, 0xfa0b,  0xfa10, 0xfa10,
-  0xfa12, 0xfa12,  0xfa15, 0xfa17,  0xfa19, 0xfa1e,  0xfa22, 0xfa22,
-  0xfa25, 0xfa26,  0xfa2a, 0xfe2f,  0xfe32, 0xfe32,  0xfe45, 0xfe48,
-  0xfe53, 0xfe53,  0xfe58, 0xfe58,  0xfe67, 0xfe67,  0xfe6c, 0xff00,
-  0xff5f, 0xffdf,  0xffe6, 0xffff
-};
-
-static const unsigned short gb18030uni_ranges[206] = {
-    128,   129,   131,   133,   134,   135,   137,   140,
-    142,   144,   145,   147,   148,   149,   150,   151,
-    152,   153,   154,   155,   156,   157,   158,   159,
-    160,   161,   162,   163,   164,   165,   166,   167,
-    168,   171,   172,   189,   196,   213,   220,   221,
-    285,   286,   287,   291,   293,   295,   297,   298,
-    300,   301,   302,   303,   304,   305,   306,   307,
-    308,   320,   330,   334,   338,   339,   340,   341,
-    342,   343,   347,   348,   349,   354,   355,   359,
-    360,   361,   362,   363,   365,   369,   371,   372,
-    373,   374,   375,   376,   386,   426,   502,   538,
-    553,   556,   558,   560,   562,   564,   565,   567,
-    571,   573,   574,   575,   576,   577,   578,   579,
-    581,   582,   583,   584,   585,   586,   588,   589,
-    590,   602,   606,   625,   627,   636,   637,   720,
-    724,   810,   813,   850,   860,   861,   862,   864,
-    867,   868,   869,   870,   872,   873,   874,   875,
-    876,   877,   878,   879,   880,   882,   883,   884,
-    885,   886,   887,   888,   889,   890,   891,   892,
-    893,   894,   895,   896,   897,   898,   899,   900,
-    901,   902,   903,   905,   907,   908,   909,   911,
-    912,   917,   924,   925, 21827,
-                                     25775, 25866, 25896,
-  25929, 25932, 25933, 25934, 25936, 25938, 25939, 25940,
-  25942,
-         25943, 25944, 25945, 25946, 25947, 25948, 25952,
-  25953, 25955, 25956, 25959, 25961, 25964, 25966, 25984,
-  25994, 25998, 26012, 26016, 26110, 26116
-};
-
-static int gb18030uni_wctomb(unsigned int* r1, unsigned int* r2, unsigned int wc) {
-    unsigned int i = wc;
-    if (i >= 0x0080 && i <= 0xffff) {
-        if (i == 0xe7c7) {
-            i = 7457;
-        } else {
-            unsigned int k1 = 0;
-            unsigned int k2 = 205;
-            while (k1 < k2) {
-                unsigned int k = (k1 + k2) / 2;
-                if (i <= gb18030uni_uni2charset_ranges[2*k+1]) {
-                    k2 = k;
-                } else if (i >= gb18030uni_uni2charset_ranges[2*k+2]) {
-                    k1 = k + 1;
-                } else {
-                    return 0;
-                }
-            }
-            {
-                unsigned int diff = gb18030uni_ranges[k1];
-                i -= diff;
-            }
-        }
-        *r2 = (i % 10) + 0x30; i = i / 10;
-        *r2 |= ((i % 126) + 0x81) << 8; i = i / 126;
-        *r1 = (i % 10) + 0x30; i = i / 10;
-        *r1 |= (i + 0x81) << 8;
-        return 4;
-    }
-    return 0;
-}
-
-/*
- * GB18030 (libiconv-1.16/lib/gb18030.h)
- */
-
-static const unsigned short gb18030_pua2charset[31*3] = {
-/* Unicode range   GB18030 range */
-  0xe766, 0xe76b,  0xa2ab, /*.. 0xa2b0, */
-  0xe76d, 0xe76d,  0xa2e4,
-  0xe76e, 0xe76f,  0xa2ef, /*.. 0xa2f0, */
-  0xe770, 0xe771,  0xa2fd, /*.. 0xa2fe, */
-  0xe772, 0xe77c,  0xa4f4, /*.. 0xa4fe, */
-  0xe77d, 0xe784,  0xa5f7, /*.. 0xa5fe, */
-  0xe785, 0xe78c,  0xa6b9, /*.. 0xa6c0, */
-  0xe78d, 0xe793,  0xa6d9, /*.. 0xa6df, */
-  0xe794, 0xe795,  0xa6ec, /*.. 0xa6ed, */
-  0xe796, 0xe796,  0xa6f3,
-  0xe797, 0xe79f,  0xa6f6, /*.. 0xa6fe, */
-  0xe7a0, 0xe7ae,  0xa7c2, /*.. 0xa7d0, */
-  0xe7af, 0xe7bb,  0xa7f2, /*.. 0xa7fe, */
-  0xe7bc, 0xe7c6,  0xa896, /*.. 0xa8a0, */
-  0xe7c9, 0xe7cc,  0xa8c1, /*.. 0xa8c4, */
-  0xe7cd, 0xe7e1,  0xa8ea, /*.. 0xa8fe, */
-  0xe7e2, 0xe7e2,  0xa958,
-  0xe7e3, 0xe7e3,  0xa95b,
-  0xe7e4, 0xe7e6,  0xa95d, /*.. 0xa95f, */
-  0xe7f4, 0xe800,  0xa997, /*.. 0xa9a3, */
-  0xe801, 0xe80f,  0xa9f0, /*.. 0xa9fe, */
-  0xe810, 0xe814,  0xd7fa, /*.. 0xd7fe, */
-  0xe816, 0xe818,  0xfe51, /*.. 0xfe53, */
-  0xe81e, 0xe81e,  0xfe59,
-  0xe826, 0xe826,  0xfe61,
-  0xe82b, 0xe82c,  0xfe66, /*.. 0xfe67, */
-  0xe831, 0xe832,  0xfe6c, /*.. 0xfe6d, */
-  0xe83b, 0xe83b,  0xfe76,
-  0xe843, 0xe843,  0xfe7e,
-  0xe854, 0xe855,  0xfe90, /*.. 0xfe91, */
-  0xe864, 0xe864,  0xfea0,
-};
-
-INTERNAL int gb18030_wctomb_zint(unsigned int* r1, unsigned int* r2, unsigned int wc) {
-    int ret;
-
-    /* Code set 0 (ASCII) */
-    if (wc < 0x0080) {
-        *r1 = wc;
-        return 1;
-    }
-
-    /* Code set 1 (GBK extended) */
-    ret = gbk_wctomb(r1, wc);
-    if (ret) {
-        return ret;
-    }
-
-    ret = gb18030ext_wctomb(r1, wc);
-    if (ret) {
-        return ret;
-    }
-
-    /* Code set 2 (remainder of Unicode U+0000..U+FFFF) */
-    if (wc >= 0xe000 && wc <= 0xe864) {
-        if (wc < 0xe766) {
-            /* User-defined characters range U+E000..U+E765 */
-            if (wc < 0xe4c6) {
-                unsigned int i = wc - 0xe000;
-                *r1 = (i % 94) + 0xa1; i = i / 94;
-                *r1 |= (i < 6 ? i + 0xaa : i + 0xf2) << 8;
-                return 2;
-            } else {
-                unsigned int i = wc - 0xe4c6;
-                *r1 = ((i / 96) + 0xa1) << 8; i = i % 96;
-                *r1 |= i + (i >= 0x3f ? 0x41 : 0x40);
-                return 2;
-            }
-        } else {
-            /* User-defined characters, two-byte part of range U+E766..U+E864 */
-            unsigned int k1 = 0;
-            unsigned int k2 = 31;
-            /* Invariant: We know that if wc occurs in Unicode interval in
-            gb18030_pua2charset, it does so at a k with  k1 <= k < k2. */
-            while (k1 < k2) {
-                unsigned int k = (k1 + k2) / 2;
-                if (wc < gb18030_pua2charset[k*3+0]) {
-                    k2 = k;
-                } else if (wc > gb18030_pua2charset[k*3+1]) {
-                    k1 = k + 1;
-                } else {
-                    *r1 = gb18030_pua2charset[k*3+2] + (wc - gb18030_pua2charset[k*3+0]);
-                    return 2;
-                }
-            }
-        }
-    }
-    ret = gb18030uni_wctomb(r1, r2, wc);
-    if (ret) {
-        return ret;
-    }
-
-    /* Code set 3 (Unicode U+10000..U+10FFFF) */
-    if (wc >= 0x10000 && wc < 0x110000) {
-        unsigned int i = wc - 0x10000;
-        *r2 = (i % 10) + 0x30; i = i / 10;
-        *r2 |= ((i % 126) + 0x81) << 8; i = i / 126;
-        *r1 = (i % 10) + 0x30; i = i / 10;
-        *r1 |= (i + 0x90) << 8;
-        return 4;
-    }
-    return 0;
-}
-
-/* Convert UTF-8 string to GB 18030 and place in array of ints */
-INTERNAL int gb18030_utf8tomb(struct zint_symbol *symbol, const unsigned char source[], size_t* p_length, unsigned int* gbdata) {
-    int error_number, ret;
-    unsigned int i, j, length;
-#ifndef _MSC_VER
-    unsigned int utfdata[*p_length + 1];
-#else
-    unsigned int* utfdata = (unsigned int*) _alloca((*p_length + 1) * sizeof(unsigned int));
-#endif
-
-    error_number = utf8_to_unicode(symbol, source, utfdata, p_length, 0 /*disallow_4byte*/);
-    if (error_number != 0) {
-        return error_number;
-    }
-
-    for (i = 0, j = 0, length = *p_length; i < length; i++, j++) {
-        if (utfdata[i] < 0x80) {
-            gbdata[j] = utfdata[i];
-        } else {
-            ret = gb18030_wctomb_zint(gbdata + j, gbdata + j + 1, utfdata[i]);
-            if (ret == 0) {
-                strcpy(symbol->errtxt, "820: Invalid character in input data");
-                return ZINT_ERROR_INVALID_DATA;
-            }
-            if (ret == 4) {
-                j++;
-            }
-        }
-    }
-
-    *p_length = j;
-
-    return 0;
-}
-
-/* Convert UTF-8 string to single byte ECI and place in array of ints */
-INTERNAL int gb18030_utf8tosb(int eci, const unsigned char source[], size_t* p_length, unsigned int* gbdata, int full_multibyte) {
-    int error_number;
-#ifndef _MSC_VER
-    unsigned char single_byte[*p_length + 1];
-#else
-    unsigned char* single_byte = (unsigned char*) _alloca(*p_length + 1);
-#endif
-
-    error_number = utf_to_eci(eci, source, single_byte, p_length);
-    if (error_number != 0) {
-        /* Note not setting `symbol->errtxt`, up to caller */
-        return error_number;
-    }
-
-    gb18030_cpy(single_byte, p_length, gbdata, full_multibyte);
-
-    return 0;
-}
-
-/* If `full_multibyte` set, copy byte input stream to array of ints, putting double-bytes that match HANXIN Chinese mode in single entry,
- * and quad-bytes in 2 entries. If `full_multibyte` not set, do a straight copy */
-INTERNAL void gb18030_cpy(const unsigned char source[], size_t* p_length, unsigned int* gbdata, int full_multibyte) {
-    unsigned int i, j, length;
-    int done;
-    unsigned char c1, c2, c3, c4;
-
-    if (full_multibyte) {
-        for (i = 0, j = 0, length = *p_length; i < length; i++, j++) {
-            done = 0;
-            c1 = source[i];
-            if (length - i >= 2) {
-                if (c1 >= 0x81 && c1 <= 0xFE) {
-                    c2 = source[i + 1];
-                    if ((c2 >= 0x40 && c2 <= 0x7E) || (c2 >= 0x80 && c2 <= 0xFE)) {
-                        gbdata[j] = (c1 << 8) | c2;
-                        i++;
-                        done = 1;
-                    } else if (length - i >= 4 && (c2 >= 0x30 && c2 <= 0x39)) {
-                        c3 = source[i + 2];
-                        c4 = source[i + 3];
-                        if ((c3 >= 0x81 && c3 <= 0xFE) && (c4 >= 0x30 && c4 <= 0x39)) {
-                            gbdata[j++] = (c1 << 8) | c2;
-                            gbdata[j] = (c3 << 8) | c4;
-                            i += 3;
-                            done = 1;
-                        }
-                    }
-                }
-            }
-            if (!done) {
-                gbdata[j] = c1;
-            }
-        }
-        *p_length = j;
-    } else {
-        /* Straight copy */
-        for (i = 0, length = *p_length; i < length; i++) {
-            gbdata[i] = source[i];
-        }
-    }
-}
index 704e4bd..5cdd5ea 100644 (file)
@@ -1,7 +1,7 @@
-/*  gb18030.h - Unicode to GB 18030
+/*  gb18030.h - Unicode to GB 18030 lookup table
 
     libzint - the open source barcode library
-    Copyright (C) 2009-2020 Robin Stuart <rstuart114@gmail.com>
+    Copyright (C) 2009-2017 Robin Stuart <rstuart114@gmail.com>
 
     Redistribution and use in source and binary forms, with or without
     modification, are permitted provided that the following conditions
     OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     SUCH DAMAGE.
  */
-/* vim: set ts=4 sw=4 et : */
 
-#ifndef GB18030_H
-#define GB18030_H
+static const unsigned short int gb18030_twobyte_lookup[] = {
+    0x0144, 0xA8BD,
+    0x0148, 0xA8BE,
+    0x01F9, 0xA8BF,
+    0x0251, 0xA8BB,
+    0x0261, 0xA8C0,
+    0x02CA, 0xA840,
+    0x02CB, 0xA841,
+    0x02D9, 0xA842,
+    0x2010, 0xA95C,
+    0x2013, 0xA843,
+    0x2015, 0xA844,
+    0x2025, 0xA845,
+    0x2035, 0xA846,
+    0x20AC, 0xA2E3,
+    0x2105, 0xA847,
+    0x2109, 0xA848,
+    0x2121, 0xA959,
+    0x2170, 0xA2A1,
+    0x2171, 0xA2A2,
+    0x2172, 0xA2A3,
+    0x2173, 0xA2A4,
+    0x2174, 0xA2A5,
+    0x2175, 0xA2A6,
+    0x2176, 0xA2A7,
+    0x2177, 0xA2A8,
+    0x2178, 0xA2A9,
+    0x2179, 0xA2AA,
+    0x2196, 0xA849,
+    0x2197, 0xA84A,
+    0x2198, 0xA84B,
+    0x2199, 0xA84C,
+    0x2215, 0xA84D,
+    0x221F, 0xA84E,
+    0x2223, 0xA84F,
+    0x2252, 0xA850,
+    0x2266, 0xA851,
+    0x2267, 0xA852,
+    0x2295, 0xA892,
+    0x22BF, 0xA853,
+    0x2550, 0xA854,
+    0x2551, 0xA855,
+    0x2552, 0xA856,
+    0x2553, 0xA857,
+    0x2554, 0xA858,
+    0x2555, 0xA859,
+    0x2556, 0xA85A,
+    0x2557, 0xA85B,
+    0x2558, 0xA85C,
+    0x2559, 0xA85D,
+    0x255A, 0xA85E,
+    0x255B, 0xA85F,
+    0x255C, 0xA860,
+    0x255D, 0xA861,
+    0x255E, 0xA862,
+    0x255F, 0xA863,
+    0x2560, 0xA864,
+    0x2561, 0xA865,
+    0x2562, 0xA866,
+    0x2563, 0xA867,
+    0x2564, 0xA868,
+    0x2565, 0xA869,
+    0x2566, 0xA86A,
+    0x2567, 0xA86B,
+    0x2568, 0xA86C,
+    0x2569, 0xA86D,
+    0x256A, 0xA86E,
+    0x256B, 0xA86F,
+    0x256C, 0xA870,
+    0x256D, 0xA871,
+    0x256E, 0xA872,
+    0x256F, 0xA873,
+    0x2570, 0xA874,
+    0x2571, 0xA875,
+    0x2572, 0xA876,
+    0x2573, 0xA877,
+    0x2581, 0xA878,
+    0x2582, 0xA879,
+    0x2583, 0xA87A,
+    0x2584, 0xA87B,
+    0x2585, 0xA87C,
+    0x2586, 0xA87D,
+    0x2587, 0xA87E,
+    0x2588, 0xA880,
+    0x2589, 0xA881,
+    0x258A, 0xA882,
+    0x258B, 0xA883,
+    0x258C, 0xA884,
+    0x258D, 0xA885,
+    0x258E, 0xA886,
+    0x258F, 0xA887,
+    0x2593, 0xA888,
+    0x2594, 0xA889,
+    0x2595, 0xA88A,
+    0x25BC, 0xA88B,
+    0x25BD, 0xA88C,
+    0x25E2, 0xA88D,
+    0x25E3, 0xA88E,
+    0x25E4, 0xA88F,
+    0x25E5, 0xA890,
+    0x2609, 0xA891,
+    0x2E81, 0xFE50,
+    0x2E84, 0xFE54,
+    0x2E88, 0xFE57,
+    0x2E8B, 0xFE58,
+    0x2E8C, 0xFE5D,
+    0x2E97, 0xFE5E,
+    0x2EA7, 0xFE6B,
+    0x2EAA, 0xFE6E,
+    0x2EAE, 0xFE71,
+    0x2EB3, 0xFE73,
+    0x2EB6, 0xFE74,
+    0x2EB7, 0xFE75,
+    0x2EBB, 0xFE79,
+    0x2ECA, 0xFE84,
+    0x2FF0, 0xA98A,
+    0x2FF1, 0xA98B,
+    0x2FF2, 0xA98C,
+    0x2FF3, 0xA98D,
+    0x2FF4, 0xA98E,
+    0x2FF5, 0xA98F,
+    0x2FF6, 0xA990,
+    0x2FF7, 0xA991,
+    0x2FF8, 0xA992,
+    0x2FF9, 0xA993,
+    0x2FFA, 0xA994,
+    0x2FFB, 0xA995,
+    0x3006, 0xA965,
+    0x3007, 0xA996,
+    0x3012, 0xA893,
+    0x301D, 0xA894,
+    0x301E, 0xA895,
+    0x3021, 0xA940,
+    0x3022, 0xA941,
+    0x3023, 0xA942,
+    0x3024, 0xA943,
+    0x3025, 0xA944,
+    0x3026, 0xA945,
+    0x3027, 0xA946,
+    0x3028, 0xA947,
+    0x3029, 0xA948,
+    0x303E, 0xA989,
+    0x309B, 0xA961,
+    0x309C, 0xA962,
+    0x309D, 0xA966,
+    0x309E, 0xA967,
+    0x30FC, 0xA960,
+    0x30FD, 0xA963,
+    0x30FE, 0xA964,
+    0x3231, 0xA95A,
+    0x32A3, 0xA949,
+    0x338E, 0xA94A,
+    0x338F, 0xA94B,
+    0x339C, 0xA94C,
+    0x339D, 0xA94D,
+    0x339E, 0xA94E,
+    0x33A1, 0xA94F,
+    0x33C4, 0xA950,
+    0x33CE, 0xA951,
+    0x33D1, 0xA952,
+    0x33D2, 0xA953,
+    0x33D5, 0xA954,
+    0x3447, 0xFE56,
+    0x3473, 0xFE55,
+    0x359E, 0xFE5A,
+    0x360E, 0xFE5C,
+    0x361A, 0xFE5B,
+    0x3918, 0xFE60,
+    0x396E, 0xFE5F,
+    0x39CF, 0xFE62,
+    0x39D0, 0xFE65,
+    0x39DF, 0xFE63,
+    0x3A73, 0xFE64,
+    0x3B4E, 0xFE68,
+    0x3C6E, 0xFE69,
+    0x3CE0, 0xFE6A,
+    0x4056, 0xFE6F,
+    0x415F, 0xFE70,
+    0x4337, 0xFE72,
+    0x43AC, 0xFE78,
+    0x43B1, 0xFE77,
+    0x43DD, 0xFE7A,
+    0x44D6, 0xFE7B,
+    0x464C, 0xFE7D,
+    0x4661, 0xFE7C,
+    0x4723, 0xFE80,
+    0x4729, 0xFE81,
+    0x477C, 0xFE82,
+    0x478D, 0xFE83,
+    0x4947, 0xFE85,
+    0x497A, 0xFE86,
+    0x497D, 0xFE87,
+    0x4982, 0xFE88,
+    0x4983, 0xFE89,
+    0x4985, 0xFE8A,
+    0x4986, 0xFE8B,
+    0x499B, 0xFE8D,
+    0x499F, 0xFE8C,
+    0x49B6, 0xFE8F,
+    0x49B7, 0xFE8E,
+    0x4C77, 0xFE96,
+    0x4C9F, 0xFE93,
+    0x4CA0, 0xFE94,
+    0x4CA1, 0xFE95,
+    0x4CA2, 0xFE97,
+    0x4CA3, 0xFE92,
+    0x4D13, 0xFE98,
+    0x4D14, 0xFE99,
+    0x4D15, 0xFE9A,
+    0x4D16, 0xFE9B,
+    0x4D17, 0xFE9C,
+    0x4D18, 0xFE9D,
+    0x4D19, 0xFE9E,
+    0x4DAE, 0xFE9F,
+    0x4E02, 0x8140,
+    0x4E04, 0x8141,
+    0x4E05, 0x8142,
+    0x4E06, 0x8143,
+    0x4E0F, 0x8144,
+    0x4E12, 0x8145,
+    0x4E17, 0x8146,
+    0x4E1F, 0x8147,
+    0x4E20, 0x8148,
+    0x4E21, 0x8149,
+    0x4E23, 0x814A,
+    0x4E26, 0x814B,
+    0x4E29, 0x814C,
+    0x4E2E, 0x814D,
+    0x4E2F, 0x814E,
+    0x4E31, 0x814F,
+    0x4E33, 0x8150,
+    0x4E35, 0x8151,
+    0x4E37, 0x8152,
+    0x4E3C, 0x8153,
+    0x4E40, 0x8154,
+    0x4E41, 0x8155,
+    0x4E42, 0x8156,
+    0x4E44, 0x8157,
+    0x4E46, 0x8158,
+    0x4E4A, 0x8159,
+    0x4E51, 0x815A,
+    0x4E55, 0x815B,
+    0x4E57, 0x815C,
+    0x4E5A, 0x815D,
+    0x4E5B, 0x815E,
+    0x4E62, 0x815F,
+    0x4E63, 0x8160,
+    0x4E64, 0x8161,
+    0x4E65, 0x8162,
+    0x4E67, 0x8163,
+    0x4E68, 0x8164,
+    0x4E6A, 0x8165,
+    0x4E6B, 0x8166,
+    0x4E6C, 0x8167,
+    0x4E6D, 0x8168,
+    0x4E6E, 0x8169,
+    0x4E6F, 0x816A,
+    0x4E72, 0x816B,
+    0x4E74, 0x816C,
+    0x4E75, 0x816D,
+    0x4E76, 0x816E,
+    0x4E77, 0x816F,
+    0x4E78, 0x8170,
+    0x4E79, 0x8171,
+    0x4E7A, 0x8172,
+    0x4E7B, 0x8173,
+    0x4E7C, 0x8174,
+    0x4E7D, 0x8175,
+    0x4E7F, 0x8176,
+    0x4E80, 0x8177,
+    0x4E81, 0x8178,
+    0x4E82, 0x8179,
+    0x4E83, 0x817A,
+    0x4E84, 0x817B,
+    0x4E85, 0x817C,
+    0x4E87, 0x817D,
+    0x4E8A, 0x817E,
+    0x4E90, 0x8180,
+    0x4E96, 0x8181,
+    0x4E97, 0x8182,
+    0x4E99, 0x8183,
+    0x4E9C, 0x8184,
+    0x4E9D, 0x8185,
+    0x4E9E, 0x8186,
+    0x4EA3, 0x8187,
+    0x4EAA, 0x8188,
+    0x4EAF, 0x8189,
+    0x4EB0, 0x818A,
+    0x4EB1, 0x818B,
+    0x4EB4, 0x818C,
+    0x4EB6, 0x818D,
+    0x4EB7, 0x818E,
+    0x4EB8, 0x818F,
+    0x4EB9, 0x8190,
+    0x4EBC, 0x8191,
+    0x4EBD, 0x8192,
+    0x4EBE, 0x8193,
+    0x4EC8, 0x8194,
+    0x4ECC, 0x8195,
+    0x4ECF, 0x8196,
+    0x4ED0, 0x8197,
+    0x4ED2, 0x8198,
+    0x4EDA, 0x8199,
+    0x4EDB, 0x819A,
+    0x4EDC, 0x819B,
+    0x4EE0, 0x819C,
+    0x4EE2, 0x819D,
+    0x4EE6, 0x819E,
+    0x4EE7, 0x819F,
+    0x4EE9, 0x81A0,
+    0x4EED, 0x81A1,
+    0x4EEE, 0x81A2,
+    0x4EEF, 0x81A3,
+    0x4EF1, 0x81A4,
+    0x4EF4, 0x81A5,
+    0x4EF8, 0x81A6,
+    0x4EF9, 0x81A7,
+    0x4EFA, 0x81A8,
+    0x4EFC, 0x81A9,
+    0x4EFE, 0x81AA,
+    0x4F00, 0x81AB,
+    0x4F02, 0x81AC,
+    0x4F03, 0x81AD,
+    0x4F04, 0x81AE,
+    0x4F05, 0x81AF,
+    0x4F06, 0x81B0,
+    0x4F07, 0x81B1,
+    0x4F08, 0x81B2,
+    0x4F0B, 0x81B3,
+    0x4F0C, 0x81B4,
+    0x4F12, 0x81B5,
+    0x4F13, 0x81B6,
+    0x4F14, 0x81B7,
+    0x4F15, 0x81B8,
+    0x4F16, 0x81B9,
+    0x4F1C, 0x81BA,
+    0x4F1D, 0x81BB,
+    0x4F21, 0x81BC,
+    0x4F23, 0x81BD,
+    0x4F28, 0x81BE,
+    0x4F29, 0x81BF,
+    0x4F2C, 0x81C0,
+    0x4F2D, 0x81C1,
+    0x4F2E, 0x81C2,
+    0x4F31, 0x81C3,
+    0x4F33, 0x81C4,
+    0x4F35, 0x81C5,
+    0x4F37, 0x81C6,
+    0x4F39, 0x81C7,
+    0x4F3B, 0x81C8,
+    0x4F3E, 0x81C9,
+    0x4F3F, 0x81CA,
+    0x4F40, 0x81CB,
+    0x4F41, 0x81CC,
+    0x4F42, 0x81CD,
+    0x4F44, 0x81CE,
+    0x4F45, 0x81CF,
+    0x4F47, 0x81D0,
+    0x4F48, 0x81D1,
+    0x4F49, 0x81D2,
+    0x4F4A, 0x81D3,
+    0x4F4B, 0x81D4,
+    0x4F4C, 0x81D5,
+    0x4F52, 0x81D6,
+    0x4F54, 0x81D7,
+    0x4F56, 0x81D8,
+    0x4F61, 0x81D9,
+    0x4F62, 0x81DA,
+    0x4F66, 0x81DB,
+    0x4F68, 0x81DC,
+    0x4F6A, 0x81DD,
+    0x4F6B, 0x81DE,
+    0x4F6D, 0x81DF,
+    0x4F6E, 0x81E0,
+    0x4F71, 0x81E1,
+    0x4F72, 0x81E2,
+    0x4F75, 0x81E3,
+    0x4F77, 0x81E4,
+    0x4F78, 0x81E5,
+    0x4F79, 0x81E6,
+    0x4F7A, 0x81E7,
+    0x4F7D, 0x81E8,
+    0x4F80, 0x81E9,
+    0x4F81, 0x81EA,
+    0x4F82, 0x81EB,
+    0x4F85, 0x81EC,
+    0x4F86, 0x81ED,
+    0x4F87, 0x81EE,
+    0x4F8A, 0x81EF,
+    0x4F8C, 0x81F0,
+    0x4F8E, 0x81F1,
+    0x4F90, 0x81F2,
+    0x4F92, 0x81F3,
+    0x4F93, 0x81F4,
+    0x4F95, 0x81F5,
+    0x4F96, 0x81F6,
+    0x4F98, 0x81F7,
+    0x4F99, 0x81F8,
+    0x4F9A, 0x81F9,
+    0x4F9C, 0x81FA,
+    0x4F9E, 0x81FB,
+    0x4F9F, 0x81FC,
+    0x4FA1, 0x81FD,
+    0x4FA2, 0x81FE,
+    0x4FA4, 0x8240,
+    0x4FAB, 0x8241,
+    0x4FAD, 0x8242,
+    0x4FB0, 0x8243,
+    0x4FB1, 0x8244,
+    0x4FB2, 0x8245,
+    0x4FB3, 0x8246,
+    0x4FB4, 0x8247,
+    0x4FB6, 0x8248,
+    0x4FB7, 0x8249,
+    0x4FB8, 0x824A,
+    0x4FB9, 0x824B,
+    0x4FBA, 0x824C,
+    0x4FBB, 0x824D,
+    0x4FBC, 0x824E,
+    0x4FBD, 0x824F,
+    0x4FBE, 0x8250,
+    0x4FC0, 0x8251,
+    0x4FC1, 0x8252,
+    0x4FC2, 0x8253,
+    0x4FC6, 0x8254,
+    0x4FC7, 0x8255,
+    0x4FC8, 0x8256,
+    0x4FC9, 0x8257,
+    0x4FCB, 0x8258,
+    0x4FCC, 0x8259,
+    0x4FCD, 0x825A,
+    0x4FD2, 0x825B,
+    0x4FD3, 0x825C,
+    0x4FD4, 0x825D,
+    0x4FD5, 0x825E,
+    0x4FD6, 0x825F,
+    0x4FD9, 0x8260,
+    0x4FDB, 0x8261,
+    0x4FE0, 0x8262,
+    0x4FE2, 0x8263,
+    0x4FE4, 0x8264,
+    0x4FE5, 0x8265,
+    0x4FE7, 0x8266,
+    0x4FEB, 0x8267,
+    0x4FEC, 0x8268,
+    0x4FF0, 0x8269,
+    0x4FF2, 0x826A,
+    0x4FF4, 0x826B,
+    0x4FF5, 0x826C,
+    0x4FF6, 0x826D,
+    0x4FF7, 0x826E,
+    0x4FF9, 0x826F,
+    0x4FFB, 0x8270,
+    0x4FFC, 0x8271,
+    0x4FFD, 0x8272,
+    0x4FFF, 0x8273,
+    0x5000, 0x8274,
+    0x5001, 0x8275,
+    0x5002, 0x8276,
+    0x5003, 0x8277,
+    0x5004, 0x8278,
+    0x5005, 0x8279,
+    0x5006, 0x827A,
+    0x5007, 0x827B,
+    0x5008, 0x827C,
+    0x5009, 0x827D,
+    0x500A, 0x827E,
+    0x500B, 0x8280,
+    0x500E, 0x8281,
+    0x5010, 0x8282,
+    0x5011, 0x8283,
+    0x5013, 0x8284,
+    0x5015, 0x8285,
+    0x5016, 0x8286,
+    0x5017, 0x8287,
+    0x501B, 0x8288,
+    0x501D, 0x8289,
+    0x501E, 0x828A,
+    0x5020, 0x828B,
+    0x5022, 0x828C,
+    0x5023, 0x828D,
+    0x5024, 0x828E,
+    0x5027, 0x828F,
+    0x502B, 0x8290,
+    0x502F, 0x8291,
+    0x5030, 0x8292,
+    0x5031, 0x8293,
+    0x5032, 0x8294,
+    0x5033, 0x8295,
+    0x5034, 0x8296,
+    0x5035, 0x8297,
+    0x5036, 0x8298,
+    0x5037, 0x8299,
+    0x5038, 0x829A,
+    0x5039, 0x829B,
+    0x503B, 0x829C,
+    0x503D, 0x829D,
+    0x503F, 0x829E,
+    0x5040, 0x829F,
+    0x5041, 0x82A0,
+    0x5042, 0x82A1,
+    0x5044, 0x82A2,
+    0x5045, 0x82A3,
+    0x5046, 0x82A4,
+    0x5049, 0x82A5,
+    0x504A, 0x82A6,
+    0x504B, 0x82A7,
+    0x504D, 0x82A8,
+    0x5050, 0x82A9,
+    0x5051, 0x82AA,
+    0x5052, 0x82AB,
+    0x5053, 0x82AC,
+    0x5054, 0x82AD,
+    0x5056, 0x82AE,
+    0x5057, 0x82AF,
+    0x5058, 0x82B0,
+    0x5059, 0x82B1,
+    0x505B, 0x82B2,
+    0x505D, 0x82B3,
+    0x505E, 0x82B4,
+    0x505F, 0x82B5,
+    0x5060, 0x82B6,
+    0x5061, 0x82B7,
+    0x5062, 0x82B8,
+    0x5063, 0x82B9,
+    0x5064, 0x82BA,
+    0x5066, 0x82BB,
+    0x5067, 0x82BC,
+    0x5068, 0x82BD,
+    0x5069, 0x82BE,
+    0x506A, 0x82BF,
+    0x506B, 0x82C0,
+    0x506D, 0x82C1,
+    0x506E, 0x82C2,
+    0x506F, 0x82C3,
+    0x5070, 0x82C4,
+    0x5071, 0x82C5,
+    0x5072, 0x82C6,
+    0x5073, 0x82C7,
+    0x5074, 0x82C8,
+    0x5075, 0x82C9,
+    0x5078, 0x82CA,
+    0x5079, 0x82CB,
+    0x507A, 0x82CC,
+    0x507C, 0x82CD,
+    0x507D, 0x82CE,
+    0x5081, 0x82CF,
+    0x5082, 0x82D0,
+    0x5083, 0x82D1,
+    0x5084, 0x82D2,
+    0x5086, 0x82D3,
+    0x5087, 0x82D4,
+    0x5089, 0x82D5,
+    0x508A, 0x82D6,
+    0x508B, 0x82D7,
+    0x508C, 0x82D8,
+    0x508E, 0x82D9,
+    0x508F, 0x82DA,
+    0x5090, 0x82DB,
+    0x5091, 0x82DC,
+    0x5092, 0x82DD,
+    0x5093, 0x82DE,
+    0x5094, 0x82DF,
+    0x5095, 0x82E0,
+    0x5096, 0x82E1,
+    0x5097, 0x82E2,
+    0x5098, 0x82E3,
+    0x5099, 0x82E4,
+    0x509A, 0x82E5,
+    0x509B, 0x82E6,
+    0x509C, 0x82E7,
+    0x509D, 0x82E8,
+    0x509E, 0x82E9,
+    0x509F, 0x82EA,
+    0x50A0, 0x82EB,
+    0x50A1, 0x82EC,
+    0x50A2, 0x82ED,
+    0x50A4, 0x82EE,
+    0x50A6, 0x82EF,
+    0x50AA, 0x82F0,
+    0x50AB, 0x82F1,
+    0x50AD, 0x82F2,
+    0x50AE, 0x82F3,
+    0x50AF, 0x82F4,
+    0x50B0, 0x82F5,
+    0x50B1, 0x82F6,
+    0x50B3, 0x82F7,
+    0x50B4, 0x82F8,
+    0x50B5, 0x82F9,
+    0x50B6, 0x82FA,
+    0x50B7, 0x82FB,
+    0x50B8, 0x82FC,
+    0x50B9, 0x82FD,
+    0x50BC, 0x82FE,
+    0x50BD, 0x8340,
+    0x50BE, 0x8341,
+    0x50BF, 0x8342,
+    0x50C0, 0x8343,
+    0x50C1, 0x8344,
+    0x50C2, 0x8345,
+    0x50C3, 0x8346,
+    0x50C4, 0x8347,
+    0x50C5, 0x8348,
+    0x50C6, 0x8349,
+    0x50C7, 0x834A,
+    0x50C8, 0x834B,
+    0x50C9, 0x834C,
+    0x50CA, 0x834D,
+    0x50CB, 0x834E,
+    0x50CC, 0x834F,
+    0x50CD, 0x8350,
+    0x50CE, 0x8351,
+    0x50D0, 0x8352,
+    0x50D1, 0x8353,
+    0x50D2, 0x8354,
+    0x50D3, 0x8355,
+    0x50D4, 0x8356,
+    0x50D5, 0x8357,
+    0x50D7, 0x8358,
+    0x50D8, 0x8359,
+    0x50D9, 0x835A,
+    0x50DB, 0x835B,
+    0x50DC, 0x835C,
+    0x50DD, 0x835D,
+    0x50DE, 0x835E,
+    0x50DF, 0x835F,
+    0x50E0, 0x8360,
+    0x50E1, 0x8361,
+    0x50E2, 0x8362,
+    0x50E3, 0x8363,
+    0x50E4, 0x8364,
+    0x50E5, 0x8365,
+    0x50E8, 0x8366,
+    0x50E9, 0x8367,
+    0x50EA, 0x8368,
+    0x50EB, 0x8369,
+    0x50EF, 0x836A,
+    0x50F0, 0x836B,
+    0x50F1, 0x836C,
+    0x50F2, 0x836D,
+    0x50F4, 0x836E,
+    0x50F6, 0x836F,
+    0x50F7, 0x8370,
+    0x50F8, 0x8371,
+    0x50F9, 0x8372,
+    0x50FA, 0x8373,
+    0x50FC, 0x8374,
+    0x50FD, 0x8375,
+    0x50FE, 0x8376,
+    0x50FF, 0x8377,
+    0x5100, 0x8378,
+    0x5101, 0x8379,
+    0x5102, 0x837A,
+    0x5103, 0x837B,
+    0x5104, 0x837C,
+    0x5105, 0x837D,
+    0x5108, 0x837E,
+    0x5109, 0x8380,
+    0x510A, 0x8381,
+    0x510C, 0x8382,
+    0x510D, 0x8383,
+    0x510E, 0x8384,
+    0x510F, 0x8385,
+    0x5110, 0x8386,
+    0x5111, 0x8387,
+    0x5113, 0x8388,
+    0x5114, 0x8389,
+    0x5115, 0x838A,
+    0x5116, 0x838B,
+    0x5117, 0x838C,
+    0x5118, 0x838D,
+    0x5119, 0x838E,
+    0x511A, 0x838F,
+    0x511B, 0x8390,
+    0x511C, 0x8391,
+    0x511D, 0x8392,
+    0x511E, 0x8393,
+    0x511F, 0x8394,
+    0x5120, 0x8395,
+    0x5122, 0x8396,
+    0x5123, 0x8397,
+    0x5124, 0x8398,
+    0x5125, 0x8399,
+    0x5126, 0x839A,
+    0x5127, 0x839B,
+    0x5128, 0x839C,
+    0x5129, 0x839D,
+    0x512A, 0x839E,
+    0x512B, 0x839F,
+    0x512C, 0x83A0,
+    0x512D, 0x83A1,
+    0x512E, 0x83A2,
+    0x512F, 0x83A3,
+    0x5130, 0x83A4,
+    0x5131, 0x83A5,
+    0x5132, 0x83A6,
+    0x5133, 0x83A7,
+    0x5134, 0x83A8,
+    0x5135, 0x83A9,
+    0x5136, 0x83AA,
+    0x5137, 0x83AB,
+    0x5138, 0x83AC,
+    0x5139, 0x83AD,
+    0x513A, 0x83AE,
+    0x513B, 0x83AF,
+    0x513C, 0x83B0,
+    0x513D, 0x83B1,
+    0x513E, 0x83B2,
+    0x5142, 0x83B3,
+    0x5147, 0x83B4,
+    0x514A, 0x83B5,
+    0x514C, 0x83B6,
+    0x514E, 0x83B7,
+    0x514F, 0x83B8,
+    0x5150, 0x83B9,
+    0x5152, 0x83BA,
+    0x5153, 0x83BB,
+    0x5157, 0x83BC,
+    0x5158, 0x83BD,
+    0x5159, 0x83BE,
+    0x515B, 0x83BF,
+    0x515D, 0x83C0,
+    0x515E, 0x83C1,
+    0x515F, 0x83C2,
+    0x5160, 0x83C3,
+    0x5161, 0x83C4,
+    0x5163, 0x83C5,
+    0x5164, 0x83C6,
+    0x5166, 0x83C7,
+    0x5167, 0x83C8,
+    0x5169, 0x83C9,
+    0x516A, 0x83CA,
+    0x516F, 0x83CB,
+    0x5172, 0x83CC,
+    0x517A, 0x83CD,
+    0x517E, 0x83CE,
+    0x517F, 0x83CF,
+    0x5183, 0x83D0,
+    0x5184, 0x83D1,
+    0x5186, 0x83D2,
+    0x5187, 0x83D3,
+    0x518A, 0x83D4,
+    0x518B, 0x83D5,
+    0x518E, 0x83D6,
+    0x518F, 0x83D7,
+    0x5190, 0x83D8,
+    0x5191, 0x83D9,
+    0x5193, 0x83DA,
+    0x5194, 0x83DB,
+    0x5198, 0x83DC,
+    0x519A, 0x83DD,
+    0x519D, 0x83DE,
+    0x519E, 0x83DF,
+    0x519F, 0x83E0,
+    0x51A1, 0x83E1,
+    0x51A3, 0x83E2,
+    0x51A6, 0x83E3,
+    0x51A7, 0x83E4,
+    0x51A8, 0x83E5,
+    0x51A9, 0x83E6,
+    0x51AA, 0x83E7,
+    0x51AD, 0x83E8,
+    0x51AE, 0x83E9,
+    0x51B4, 0x83EA,
+    0x51B8, 0x83EB,
+    0x51B9, 0x83EC,
+    0x51BA, 0x83ED,
+    0x51BE, 0x83EE,
+    0x51BF, 0x83EF,
+    0x51C1, 0x83F0,
+    0x51C2, 0x83F1,
+    0x51C3, 0x83F2,
+    0x51C5, 0x83F3,
+    0x51C8, 0x83F4,
+    0x51CA, 0x83F5,
+    0x51CD, 0x83F6,
+    0x51CE, 0x83F7,
+    0x51D0, 0x83F8,
+    0x51D2, 0x83F9,
+    0x51D3, 0x83FA,
+    0x51D4, 0x83FB,
+    0x51D5, 0x83FC,
+    0x51D6, 0x83FD,
+    0x51D7, 0x83FE,
+    0x51D8, 0x8440,
+    0x51D9, 0x8441,
+    0x51DA, 0x8442,
+    0x51DC, 0x8443,
+    0x51DE, 0x8444,
+    0x51DF, 0x8445,
+    0x51E2, 0x8446,
+    0x51E3, 0x8447,
+    0x51E5, 0x8448,
+    0x51E6, 0x8449,
+    0x51E7, 0x844A,
+    0x51E8, 0x844B,
+    0x51E9, 0x844C,
+    0x51EA, 0x844D,
+    0x51EC, 0x844E,
+    0x51EE, 0x844F,
+    0x51F1, 0x8450,
+    0x51F2, 0x8451,
+    0x51F4, 0x8452,
+    0x51F7, 0x8453,
+    0x51FE, 0x8454,
+    0x5204, 0x8455,
+    0x5205, 0x8456,
+    0x5209, 0x8457,
+    0x520B, 0x8458,
+    0x520C, 0x8459,
+    0x520F, 0x845A,
+    0x5210, 0x845B,
+    0x5213, 0x845C,
+    0x5214, 0x845D,
+    0x5215, 0x845E,
+    0x521C, 0x845F,
+    0x521E, 0x8460,
+    0x521F, 0x8461,
+    0x5221, 0x8462,
+    0x5222, 0x8463,
+    0x5223, 0x8464,
+    0x5225, 0x8465,
+    0x5226, 0x8466,
+    0x5227, 0x8467,
+    0x522A, 0x8468,
+    0x522C, 0x8469,
+    0x522F, 0x846A,
+    0x5231, 0x846B,
+    0x5232, 0x846C,
+    0x5234, 0x846D,
+    0x5235, 0x846E,
+    0x523C, 0x846F,
+    0x523E, 0x8470,
+    0x5244, 0x8471,
+    0x5245, 0x8472,
+    0x5246, 0x8473,
+    0x5247, 0x8474,
+    0x5248, 0x8475,
+    0x5249, 0x8476,
+    0x524B, 0x8477,
+    0x524E, 0x8478,
+    0x524F, 0x8479,
+    0x5252, 0x847A,
+    0x5253, 0x847B,
+    0x5255, 0x847C,
+    0x5257, 0x847D,
+    0x5258, 0x847E,
+    0x5259, 0x8480,
+    0x525A, 0x8481,
+    0x525B, 0x8482,
+    0x525D, 0x8483,
+    0x525F, 0x8484,
+    0x5260, 0x8485,
+    0x5262, 0x8486,
+    0x5263, 0x8487,
+    0x5264, 0x8488,
+    0x5266, 0x8489,
+    0x5268, 0x848A,
+    0x526B, 0x848B,
+    0x526C, 0x848C,
+    0x526D, 0x848D,
+    0x526E, 0x848E,
+    0x5270, 0x848F,
+    0x5271, 0x8490,
+    0x5273, 0x8491,
+    0x5274, 0x8492,
+    0x5275, 0x8493,
+    0x5276, 0x8494,
+    0x5277, 0x8495,
+    0x5278, 0x8496,
+    0x5279, 0x8497,
+    0x527A, 0x8498,
+    0x527B, 0x8499,
+    0x527C, 0x849A,
+    0x527E, 0x849B,
+    0x5280, 0x849C,
+    0x5283, 0x849D,
+    0x5284, 0x849E,
+    0x5285, 0x849F,
+    0x5286, 0x84A0,
+    0x5287, 0x84A1,
+    0x5289, 0x84A2,
+    0x528A, 0x84A3,
+    0x528B, 0x84A4,
+    0x528C, 0x84A5,
+    0x528D, 0x84A6,
+    0x528E, 0x84A7,
+    0x528F, 0x84A8,
+    0x5291, 0x84A9,
+    0x5292, 0x84AA,
+    0x5294, 0x84AB,
+    0x5295, 0x84AC,
+    0x5296, 0x84AD,
+    0x5297, 0x84AE,
+    0x5298, 0x84AF,
+    0x5299, 0x84B0,
+    0x529A, 0x84B1,
+    0x529C, 0x84B2,
+    0x52A4, 0x84B3,
+    0x52A5, 0x84B4,
+    0x52A6, 0x84B5,
+    0x52A7, 0x84B6,
+    0x52AE, 0x84B7,
+    0x52AF, 0x84B8,
+    0x52B0, 0x84B9,
+    0x52B4, 0x84BA,
+    0x52B5, 0x84BB,
+    0x52B6, 0x84BC,
+    0x52B7, 0x84BD,
+    0x52B8, 0x84BE,
+    0x52B9, 0x84BF,
+    0x52BA, 0x84C0,
+    0x52BB, 0x84C1,
+    0x52BC, 0x84C2,
+    0x52BD, 0x84C3,
+    0x52C0, 0x84C4,
+    0x52C1, 0x84C5,
+    0x52C2, 0x84C6,
+    0x52C4, 0x84C7,
+    0x52C5, 0x84C8,
+    0x52C6, 0x84C9,
+    0x52C8, 0x84CA,
+    0x52CA, 0x84CB,
+    0x52CC, 0x84CC,
+    0x52CD, 0x84CD,
+    0x52CE, 0x84CE,
+    0x52CF, 0x84CF,
+    0x52D1, 0x84D0,
+    0x52D3, 0x84D1,
+    0x52D4, 0x84D2,
+    0x52D5, 0x84D3,
+    0x52D7, 0x84D4,
+    0x52D9, 0x84D5,
+    0x52DA, 0x84D6,
+    0x52DB, 0x84D7,
+    0x52DC, 0x84D8,
+    0x52DD, 0x84D9,
+    0x52DE, 0x84DA,
+    0x52E0, 0x84DB,
+    0x52E1, 0x84DC,
+    0x52E2, 0x84DD,
+    0x52E3, 0x84DE,
+    0x52E5, 0x84DF,
+    0x52E6, 0x84E0,
+    0x52E7, 0x84E1,
+    0x52E8, 0x84E2,
+    0x52E9, 0x84E3,
+    0x52EA, 0x84E4,
+    0x52EB, 0x84E5,
+    0x52EC, 0x84E6,
+    0x52ED, 0x84E7,
+    0x52EE, 0x84E8,
+    0x52EF, 0x84E9,
+    0x52F1, 0x84EA,
+    0x52F2, 0x84EB,
+    0x52F3, 0x84EC,
+    0x52F4, 0x84ED,
+    0x52F5, 0x84EE,
+    0x52F6, 0x84EF,
+    0x52F7, 0x84F0,
+    0x52F8, 0x84F1,
+    0x52FB, 0x84F2,
+    0x52FC, 0x84F3,
+    0x52FD, 0x84F4,
+    0x5301, 0x84F5,
+    0x5302, 0x84F6,
+    0x5303, 0x84F7,
+    0x5304, 0x84F8,
+    0x5307, 0x84F9,
+    0x5309, 0x84FA,
+    0x530A, 0x84FB,
+    0x530B, 0x84FC,
+    0x530C, 0x84FD,
+    0x530E, 0x84FE,
+    0x5311, 0x8540,
+    0x5312, 0x8541,
+    0x5313, 0x8542,
+    0x5314, 0x8543,
+    0x5318, 0x8544,
+    0x531B, 0x8545,
+    0x531C, 0x8546,
+    0x531E, 0x8547,
+    0x531F, 0x8548,
+    0x5322, 0x8549,
+    0x5324, 0x854A,
+    0x5325, 0x854B,
+    0x5327, 0x854C,
+    0x5328, 0x854D,
+    0x5329, 0x854E,
+    0x532B, 0x854F,
+    0x532C, 0x8550,
+    0x532D, 0x8551,
+    0x532F, 0x8552,
+    0x5330, 0x8553,
+    0x5331, 0x8554,
+    0x5332, 0x8555,
+    0x5333, 0x8556,
+    0x5334, 0x8557,
+    0x5335, 0x8558,
+    0x5336, 0x8559,
+    0x5337, 0x855A,
+    0x5338, 0x855B,
+    0x533C, 0x855C,
+    0x533D, 0x855D,
+    0x5340, 0x855E,
+    0x5342, 0x855F,
+    0x5344, 0x8560,
+    0x5346, 0x8561,
+    0x534B, 0x8562,
+    0x534C, 0x8563,
+    0x534D, 0x8564,
+    0x5350, 0x8565,
+    0x5354, 0x8566,
+    0x5358, 0x8567,
+    0x5359, 0x8568,
+    0x535B, 0x8569,
+    0x535D, 0x856A,
+    0x5365, 0x856B,
+    0x5368, 0x856C,
+    0x536A, 0x856D,
+    0x536C, 0x856E,
+    0x536D, 0x856F,
+    0x5372, 0x8570,
+    0x5376, 0x8571,
+    0x5379, 0x8572,
+    0x537B, 0x8573,
+    0x537C, 0x8574,
+    0x537D, 0x8575,
+    0x537E, 0x8576,
+    0x5380, 0x8577,
+    0x5381, 0x8578,
+    0x5383, 0x8579,
+    0x5387, 0x857A,
+    0x5388, 0x857B,
+    0x538A, 0x857C,
+    0x538E, 0x857D,
+    0x538F, 0x857E,
+    0x5390, 0x8580,
+    0x5391, 0x8581,
+    0x5392, 0x8582,
+    0x5393, 0x8583,
+    0x5394, 0x8584,
+    0x5396, 0x8585,
+    0x5397, 0x8586,
+    0x5399, 0x8587,
+    0x539B, 0x8588,
+    0x539C, 0x8589,
+    0x539E, 0x858A,
+    0x53A0, 0x858B,
+    0x53A1, 0x858C,
+    0x53A4, 0x858D,
+    0x53A7, 0x858E,
+    0x53AA, 0x858F,
+    0x53AB, 0x8590,
+    0x53AC, 0x8591,
+    0x53AD, 0x8592,
+    0x53AF, 0x8593,
+    0x53B0, 0x8594,
+    0x53B1, 0x8595,
+    0x53B2, 0x8596,
+    0x53B3, 0x8597,
+    0x53B4, 0x8598,
+    0x53B5, 0x8599,
+    0x53B7, 0x859A,
+    0x53B8, 0x859B,
+    0x53B9, 0x859C,
+    0x53BA, 0x859D,
+    0x53BC, 0x859E,
+    0x53BD, 0x859F,
+    0x53BE, 0x85A0,
+    0x53C0, 0x85A1,
+    0x53C3, 0x85A2,
+    0x53C4, 0x85A3,
+    0x53C5, 0x85A4,
+    0x53C6, 0x85A5,
+    0x53C7, 0x85A6,
+    0x53CE, 0x85A7,
+    0x53CF, 0x85A8,
+    0x53D0, 0x85A9,
+    0x53D2, 0x85AA,
+    0x53D3, 0x85AB,
+    0x53D5, 0x85AC,
+    0x53DA, 0x85AD,
+    0x53DC, 0x85AE,
+    0x53DD, 0x85AF,
+    0x53DE, 0x85B0,
+    0x53E1, 0x85B1,
+    0x53E2, 0x85B2,
+    0x53E7, 0x85B3,
+    0x53F4, 0x85B4,
+    0x53FA, 0x85B5,
+    0x53FE, 0x85B6,
+    0x53FF, 0x85B7,
+    0x5400, 0x85B8,
+    0x5402, 0x85B9,
+    0x5405, 0x85BA,
+    0x5407, 0x85BB,
+    0x540B, 0x85BC,
+    0x5414, 0x85BD,
+    0x5418, 0x85BE,
+    0x5419, 0x85BF,
+    0x541A, 0x85C0,
+    0x541C, 0x85C1,
+    0x5422, 0x85C2,
+    0x5424, 0x85C3,
+    0x5425, 0x85C4,
+    0x542A, 0x85C5,
+    0x5430, 0x85C6,
+    0x5433, 0x85C7,
+    0x5436, 0x85C8,
+    0x5437, 0x85C9,
+    0x543A, 0x85CA,
+    0x543D, 0x85CB,
+    0x543F, 0x85CC,
+    0x5441, 0x85CD,
+    0x5442, 0x85CE,
+    0x5444, 0x85CF,
+    0x5445, 0x85D0,
+    0x5447, 0x85D1,
+    0x5449, 0x85D2,
+    0x544C, 0x85D3,
+    0x544D, 0x85D4,
+    0x544E, 0x85D5,
+    0x544F, 0x85D6,
+    0x5451, 0x85D7,
+    0x545A, 0x85D8,
+    0x545D, 0x85D9,
+    0x545E, 0x85DA,
+    0x545F, 0x85DB,
+    0x5460, 0x85DC,
+    0x5461, 0x85DD,
+    0x5463, 0x85DE,
+    0x5465, 0x85DF,
+    0x5467, 0x85E0,
+    0x5469, 0x85E1,
+    0x546A, 0x85E2,
+    0x546B, 0x85E3,
+    0x546C, 0x85E4,
+    0x546D, 0x85E5,
+    0x546E, 0x85E6,
+    0x546F, 0x85E7,
+    0x5470, 0x85E8,
+    0x5474, 0x85E9,
+    0x5479, 0x85EA,
+    0x547A, 0x85EB,
+    0x547E, 0x85EC,
+    0x547F, 0x85ED,
+    0x5481, 0x85EE,
+    0x5483, 0x85EF,
+    0x5485, 0x85F0,
+    0x5487, 0x85F1,
+    0x5488, 0x85F2,
+    0x5489, 0x85F3,
+    0x548A, 0x85F4,
+    0x548D, 0x85F5,
+    0x5491, 0x85F6,
+    0x5493, 0x85F7,
+    0x5497, 0x85F8,
+    0x5498, 0x85F9,
+    0x549C, 0x85FA,
+    0x549E, 0x85FB,
+    0x549F, 0x85FC,
+    0x54A0, 0x85FD,
+    0x54A1, 0x85FE,
+    0x54A2, 0x8640,
+    0x54A5, 0x8641,
+    0x54AE, 0x8642,
+    0x54B0, 0x8643,
+    0x54B2, 0x8644,
+    0x54B5, 0x8645,
+    0x54B6, 0x8646,
+    0x54B7, 0x8647,
+    0x54B9, 0x8648,
+    0x54BA, 0x8649,
+    0x54BC, 0x864A,
+    0x54BE, 0x864B,
+    0x54C3, 0x864C,
+    0x54C5, 0x864D,
+    0x54CA, 0x864E,
+    0x54CB, 0x864F,
+    0x54D6, 0x8650,
+    0x54D8, 0x8651,
+    0x54DB, 0x8652,
+    0x54E0, 0x8653,
+    0x54E1, 0x8654,
+    0x54E2, 0x8655,
+    0x54E3, 0x8656,
+    0x54E4, 0x8657,
+    0x54EB, 0x8658,
+    0x54EC, 0x8659,
+    0x54EF, 0x865A,
+    0x54F0, 0x865B,
+    0x54F1, 0x865C,
+    0x54F4, 0x865D,
+    0x54F5, 0x865E,
+    0x54F6, 0x865F,
+    0x54F7, 0x8660,
+    0x54F8, 0x8661,
+    0x54F9, 0x8662,
+    0x54FB, 0x8663,
+    0x54FE, 0x8664,
+    0x5500, 0x8665,
+    0x5502, 0x8666,
+    0x5503, 0x8667,
+    0x5504, 0x8668,
+    0x5505, 0x8669,
+    0x5508, 0x866A,
+    0x550A, 0x866B,
+    0x550B, 0x866C,
+    0x550C, 0x866D,
+    0x550D, 0x866E,
+    0x550E, 0x866F,
+    0x5512, 0x8670,
+    0x5513, 0x8671,
+    0x5515, 0x8672,
+    0x5516, 0x8673,
+    0x5517, 0x8674,
+    0x5518, 0x8675,
+    0x5519, 0x8676,
+    0x551A, 0x8677,
+    0x551C, 0x8678,
+    0x551D, 0x8679,
+    0x551E, 0x867A,
+    0x551F, 0x867B,
+    0x5521, 0x867C,
+    0x5525, 0x867D,
+    0x5526, 0x867E,
+    0x5528, 0x8680,
+    0x5529, 0x8681,
+    0x552B, 0x8682,
+    0x552D, 0x8683,
+    0x5532, 0x8684,
+    0x5534, 0x8685,
+    0x5535, 0x8686,
+    0x5536, 0x8687,
+    0x5538, 0x8688,
+    0x5539, 0x8689,
+    0x553A, 0x868A,
+    0x553B, 0x868B,
+    0x553D, 0x868C,
+    0x5540, 0x868D,
+    0x5542, 0x868E,
+    0x5545, 0x868F,
+    0x5547, 0x8690,
+    0x5548, 0x8691,
+    0x554B, 0x8692,
+    0x554C, 0x8693,
+    0x554D, 0x8694,
+    0x554E, 0x8695,
+    0x554F, 0x8696,
+    0x5551, 0x8697,
+    0x5552, 0x8698,
+    0x5553, 0x8699,
+    0x5554, 0x869A,
+    0x5557, 0x869B,
+    0x5558, 0x869C,
+    0x5559, 0x869D,
+    0x555A, 0x869E,
+    0x555B, 0x869F,
+    0x555D, 0x86A0,
+    0x555E, 0x86A1,
+    0x555F, 0x86A2,
+    0x5560, 0x86A3,
+    0x5562, 0x86A4,
+    0x5563, 0x86A5,
+    0x5568, 0x86A6,
+    0x5569, 0x86A7,
+    0x556B, 0x86A8,
+    0x556F, 0x86A9,
+    0x5570, 0x86AA,
+    0x5571, 0x86AB,
+    0x5572, 0x86AC,
+    0x5573, 0x86AD,
+    0x5574, 0x86AE,
+    0x5579, 0x86AF,
+    0x557A, 0x86B0,
+    0x557D, 0x86B1,
+    0x557F, 0x86B2,
+    0x5585, 0x86B3,
+    0x5586, 0x86B4,
+    0x558C, 0x86B5,
+    0x558D, 0x86B6,
+    0x558E, 0x86B7,
+    0x5590, 0x86B8,
+    0x5592, 0x86B9,
+    0x5593, 0x86BA,
+    0x5595, 0x86BB,
+    0x5596, 0x86BC,
+    0x5597, 0x86BD,
+    0x559A, 0x86BE,
+    0x559B, 0x86BF,
+    0x559E, 0x86C0,
+    0x55A0, 0x86C1,
+    0x55A1, 0x86C2,
+    0x55A2, 0x86C3,
+    0x55A3, 0x86C4,
+    0x55A4, 0x86C5,
+    0x55A5, 0x86C6,
+    0x55A6, 0x86C7,
+    0x55A8, 0x86C8,
+    0x55A9, 0x86C9,
+    0x55AA, 0x86CA,
+    0x55AB, 0x86CB,
+    0x55AC, 0x86CC,
+    0x55AD, 0x86CD,
+    0x55AE, 0x86CE,
+    0x55AF, 0x86CF,
+    0x55B0, 0x86D0,
+    0x55B2, 0x86D1,
+    0x55B4, 0x86D2,
+    0x55B6, 0x86D3,
+    0x55B8, 0x86D4,
+    0x55BA, 0x86D5,
+    0x55BC, 0x86D6,
+    0x55BF, 0x86D7,
+    0x55C0, 0x86D8,
+    0x55C1, 0x86D9,
+    0x55C2, 0x86DA,
+    0x55C3, 0x86DB,
+    0x55C6, 0x86DC,
+    0x55C7, 0x86DD,
+    0x55C8, 0x86DE,
+    0x55CA, 0x86DF,
+    0x55CB, 0x86E0,
+    0x55CE, 0x86E1,
+    0x55CF, 0x86E2,
+    0x55D0, 0x86E3,
+    0x55D5, 0x86E4,
+    0x55D7, 0x86E5,
+    0x55D8, 0x86E6,
+    0x55D9, 0x86E7,
+    0x55DA, 0x86E8,
+    0x55DB, 0x86E9,
+    0x55DE, 0x86EA,
+    0x55E0, 0x86EB,
+    0x55E2, 0x86EC,
+    0x55E7, 0x86ED,
+    0x55E9, 0x86EE,
+    0x55ED, 0x86EF,
+    0x55EE, 0x86F0,
+    0x55F0, 0x86F1,
+    0x55F1, 0x86F2,
+    0x55F4, 0x86F3,
+    0x55F6, 0x86F4,
+    0x55F8, 0x86F5,
+    0x55F9, 0x86F6,
+    0x55FA, 0x86F7,
+    0x55FB, 0x86F8,
+    0x55FC, 0x86F9,
+    0x55FF, 0x86FA,
+    0x5602, 0x86FB,
+    0x5603, 0x86FC,
+    0x5604, 0x86FD,
+    0x5605, 0x86FE,
+    0x5606, 0x8740,
+    0x5607, 0x8741,
+    0x560A, 0x8742,
+    0x560B, 0x8743,
+    0x560D, 0x8744,
+    0x5610, 0x8745,
+    0x5611, 0x8746,
+    0x5612, 0x8747,
+    0x5613, 0x8748,
+    0x5614, 0x8749,
+    0x5615, 0x874A,
+    0x5616, 0x874B,
+    0x5617, 0x874C,
+    0x5619, 0x874D,
+    0x561A, 0x874E,
+    0x561C, 0x874F,
+    0x561D, 0x8750,
+    0x5620, 0x8751,
+    0x5621, 0x8752,
+    0x5622, 0x8753,
+    0x5625, 0x8754,
+    0x5626, 0x8755,
+    0x5628, 0x8756,
+    0x5629, 0x8757,
+    0x562A, 0x8758,
+    0x562B, 0x8759,
+    0x562E, 0x875A,
+    0x562F, 0x875B,
+    0x5630, 0x875C,
+    0x5633, 0x875D,
+    0x5635, 0x875E,
+    0x5637, 0x875F,
+    0x5638, 0x8760,
+    0x563A, 0x8761,
+    0x563C, 0x8762,
+    0x563D, 0x8763,
+    0x563E, 0x8764,
+    0x5640, 0x8765,
+    0x5641, 0x8766,
+    0x5642, 0x8767,
+    0x5643, 0x8768,
+    0x5644, 0x8769,
+    0x5645, 0x876A,
+    0x5646, 0x876B,
+    0x5647, 0x876C,
+    0x5648, 0x876D,
+    0x5649, 0x876E,
+    0x564A, 0x876F,
+    0x564B, 0x8770,
+    0x564F, 0x8771,
+    0x5650, 0x8772,
+    0x5651, 0x8773,
+    0x5652, 0x8774,
+    0x5653, 0x8775,
+    0x5655, 0x8776,
+    0x5656, 0x8777,
+    0x565A, 0x8778,
+    0x565B, 0x8779,
+    0x565D, 0x877A,
+    0x565E, 0x877B,
+    0x565F, 0x877C,
+    0x5660, 0x877D,
+    0x5661, 0x877E,
+    0x5663, 0x8780,
+    0x5665, 0x8781,
+    0x5666, 0x8782,
+    0x5667, 0x8783,
+    0x566D, 0x8784,
+    0x566E, 0x8785,
+    0x566F, 0x8786,
+    0x5670, 0x8787,
+    0x5672, 0x8788,
+    0x5673, 0x8789,
+    0x5674, 0x878A,
+    0x5675, 0x878B,
+    0x5677, 0x878C,
+    0x5678, 0x878D,
+    0x5679, 0x878E,
+    0x567A, 0x878F,
+    0x567D, 0x8790,
+    0x567E, 0x8791,
+    0x567F, 0x8792,
+    0x5680, 0x8793,
+    0x5681, 0x8794,
+    0x5682, 0x8795,
+    0x5683, 0x8796,
+    0x5684, 0x8797,
+    0x5687, 0x8798,
+    0x5688, 0x8799,
+    0x5689, 0x879A,
+    0x568A, 0x879B,
+    0x568B, 0x879C,
+    0x568C, 0x879D,
+    0x568D, 0x879E,
+    0x5690, 0x879F,
+    0x5691, 0x87A0,
+    0x5692, 0x87A1,
+    0x5694, 0x87A2,
+    0x5695, 0x87A3,
+    0x5696, 0x87A4,
+    0x5697, 0x87A5,
+    0x5698, 0x87A6,
+    0x5699, 0x87A7,
+    0x569A, 0x87A8,
+    0x569B, 0x87A9,
+    0x569C, 0x87AA,
+    0x569D, 0x87AB,
+    0x569E, 0x87AC,
+    0x569F, 0x87AD,
+    0x56A0, 0x87AE,
+    0x56A1, 0x87AF,
+    0x56A2, 0x87B0,
+    0x56A4, 0x87B1,
+    0x56A5, 0x87B2,
+    0x56A6, 0x87B3,
+    0x56A7, 0x87B4,
+    0x56A8, 0x87B5,
+    0x56A9, 0x87B6,
+    0x56AA, 0x87B7,
+    0x56AB, 0x87B8,
+    0x56AC, 0x87B9,
+    0x56AD, 0x87BA,
+    0x56AE, 0x87BB,
+    0x56B0, 0x87BC,
+    0x56B1, 0x87BD,
+    0x56B2, 0x87BE,
+    0x56B3, 0x87BF,
+    0x56B4, 0x87C0,
+    0x56B5, 0x87C1,
+    0x56B6, 0x87C2,
+    0x56B8, 0x87C3,
+    0x56B9, 0x87C4,
+    0x56BA, 0x87C5,
+    0x56BB, 0x87C6,
+    0x56BD, 0x87C7,
+    0x56BE, 0x87C8,
+    0x56BF, 0x87C9,
+    0x56C0, 0x87CA,
+    0x56C1, 0x87CB,
+    0x56C2, 0x87CC,
+    0x56C3, 0x87CD,
+    0x56C4, 0x87CE,
+    0x56C5, 0x87CF,
+    0x56C6, 0x87D0,
+    0x56C7, 0x87D1,
+    0x56C8, 0x87D2,
+    0x56C9, 0x87D3,
+    0x56CB, 0x87D4,
+    0x56CC, 0x87D5,
+    0x56CD, 0x87D6,
+    0x56CE, 0x87D7,
+    0x56CF, 0x87D8,
+    0x56D0, 0x87D9,
+    0x56D1, 0x87DA,
+    0x56D2, 0x87DB,
+    0x56D3, 0x87DC,
+    0x56D5, 0x87DD,
+    0x56D6, 0x87DE,
+    0x56D8, 0x87DF,
+    0x56D9, 0x87E0,
+    0x56DC, 0x87E1,
+    0x56E3, 0x87E2,
+    0x56E5, 0x87E3,
+    0x56E6, 0x87E4,
+    0x56E7, 0x87E5,
+    0x56E8, 0x87E6,
+    0x56E9, 0x87E7,
+    0x56EA, 0x87E8,
+    0x56EC, 0x87E9,
+    0x56EE, 0x87EA,
+    0x56EF, 0x87EB,
+    0x56F2, 0x87EC,
+    0x56F3, 0x87ED,
+    0x56F6, 0x87EE,
+    0x56F7, 0x87EF,
+    0x56F8, 0x87F0,
+    0x56FB, 0x87F1,
+    0x56FC, 0x87F2,
+    0x5700, 0x87F3,
+    0x5701, 0x87F4,
+    0x5702, 0x87F5,
+    0x5705, 0x87F6,
+    0x5707, 0x87F7,
+    0x570B, 0x87F8,
+    0x570C, 0x87F9,
+    0x570D, 0x87FA,
+    0x570E, 0x87FB,
+    0x570F, 0x87FC,
+    0x5710, 0x87FD,
+    0x5711, 0x87FE,
+    0x5712, 0x8840,
+    0x5713, 0x8841,
+    0x5714, 0x8842,
+    0x5715, 0x8843,
+    0x5716, 0x8844,
+    0x5717, 0x8845,
+    0x5718, 0x8846,
+    0x5719, 0x8847,
+    0x571A, 0x8848,
+    0x571B, 0x8849,
+    0x571D, 0x884A,
+    0x571E, 0x884B,
+    0x5720, 0x884C,
+    0x5721, 0x884D,
+    0x5722, 0x884E,
+    0x5724, 0x884F,
+    0x5725, 0x8850,
+    0x5726, 0x8851,
+    0x5727, 0x8852,
+    0x572B, 0x8853,
+    0x5731, 0x8854,
+    0x5732, 0x8855,
+    0x5734, 0x8856,
+    0x5735, 0x8857,
+    0x5736, 0x8858,
+    0x5737, 0x8859,
+    0x5738, 0x885A,
+    0x573C, 0x885B,
+    0x573D, 0x885C,
+    0x573F, 0x885D,
+    0x5741, 0x885E,
+    0x5743, 0x885F,
+    0x5744, 0x8860,
+    0x5745, 0x8861,
+    0x5746, 0x8862,
+    0x5748, 0x8863,
+    0x5749, 0x8864,
+    0x574B, 0x8865,
+    0x5752, 0x8866,
+    0x5753, 0x8867,
+    0x5754, 0x8868,
+    0x5755, 0x8869,
+    0x5756, 0x886A,
+    0x5758, 0x886B,
+    0x5759, 0x886C,
+    0x5762, 0x886D,
+    0x5763, 0x886E,
+    0x5765, 0x886F,
+    0x5767, 0x8870,
+    0x576C, 0x8871,
+    0x576E, 0x8872,
+    0x5770, 0x8873,
+    0x5771, 0x8874,
+    0x5772, 0x8875,
+    0x5774, 0x8876,
+    0x5775, 0x8877,
+    0x5778, 0x8878,
+    0x5779, 0x8879,
+    0x577A, 0x887A,
+    0x577D, 0x887B,
+    0x577E, 0x887C,
+    0x577F, 0x887D,
+    0x5780, 0x887E,
+    0x5781, 0x8880,
+    0x5787, 0x8881,
+    0x5788, 0x8882,
+    0x5789, 0x8883,
+    0x578A, 0x8884,
+    0x578D, 0x8885,
+    0x578E, 0x8886,
+    0x578F, 0x8887,
+    0x5790, 0x8888,
+    0x5791, 0x8889,
+    0x5794, 0x888A,
+    0x5795, 0x888B,
+    0x5796, 0x888C,
+    0x5797, 0x888D,
+    0x5798, 0x888E,
+    0x5799, 0x888F,
+    0x579A, 0x8890,
+    0x579C, 0x8891,
+    0x579D, 0x8892,
+    0x579E, 0x8893,
+    0x579F, 0x8894,
+    0x57A5, 0x8895,
+    0x57A8, 0x8896,
+    0x57AA, 0x8897,
+    0x57AC, 0x8898,
+    0x57AF, 0x8899,
+    0x57B0, 0x889A,
+    0x57B1, 0x889B,
+    0x57B3, 0x889C,
+    0x57B5, 0x889D,
+    0x57B6, 0x889E,
+    0x57B7, 0x889F,
+    0x57B9, 0x88A0,
+    0x57BA, 0x88A1,
+    0x57BB, 0x88A2,
+    0x57BC, 0x88A3,
+    0x57BD, 0x88A4,
+    0x57BE, 0x88A5,
+    0x57BF, 0x88A6,
+    0x57C0, 0x88A7,
+    0x57C1, 0x88A8,
+    0x57C4, 0x88A9,
+    0x57C5, 0x88AA,
+    0x57C6, 0x88AB,
+    0x57C7, 0x88AC,
+    0x57C8, 0x88AD,
+    0x57C9, 0x88AE,
+    0x57CA, 0x88AF,
+    0x57CC, 0x88B0,
+    0x57CD, 0x88B1,
+    0x57D0, 0x88B2,
+    0x57D1, 0x88B3,
+    0x57D3, 0x88B4,
+    0x57D6, 0x88B5,
+    0x57D7, 0x88B6,
+    0x57DB, 0x88B7,
+    0x57DC, 0x88B8,
+    0x57DE, 0x88B9,
+    0x57E1, 0x88BA,
+    0x57E2, 0x88BB,
+    0x57E3, 0x88BC,
+    0x57E5, 0x88BD,
+    0x57E6, 0x88BE,
+    0x57E7, 0x88BF,
+    0x57E8, 0x88C0,
+    0x57E9, 0x88C1,
+    0x57EA, 0x88C2,
+    0x57EB, 0x88C3,
+    0x57EC, 0x88C4,
+    0x57EE, 0x88C5,
+    0x57F0, 0x88C6,
+    0x57F1, 0x88C7,
+    0x57F2, 0x88C8,
+    0x57F3, 0x88C9,
+    0x57F5, 0x88CA,
+    0x57F6, 0x88CB,
+    0x57F7, 0x88CC,
+    0x57FB, 0x88CD,
+    0x57FC, 0x88CE,
+    0x57FE, 0x88CF,
+    0x57FF, 0x88D0,
+    0x5801, 0x88D1,
+    0x5803, 0x88D2,
+    0x5804, 0x88D3,
+    0x5805, 0x88D4,
+    0x5808, 0x88D5,
+    0x5809, 0x88D6,
+    0x580A, 0x88D7,
+    0x580C, 0x88D8,
+    0x580E, 0x88D9,
+    0x580F, 0x88DA,
+    0x5810, 0x88DB,
+    0x5812, 0x88DC,
+    0x5813, 0x88DD,
+    0x5814, 0x88DE,
+    0x5816, 0x88DF,
+    0x5817, 0x88E0,
+    0x5818, 0x88E1,
+    0x581A, 0x88E2,
+    0x581B, 0x88E3,
+    0x581C, 0x88E4,
+    0x581D, 0x88E5,
+    0x581F, 0x88E6,
+    0x5822, 0x88E7,
+    0x5823, 0x88E8,
+    0x5825, 0x88E9,
+    0x5826, 0x88EA,
+    0x5827, 0x88EB,
+    0x5828, 0x88EC,
+    0x5829, 0x88ED,
+    0x582B, 0x88EE,
+    0x582C, 0x88EF,
+    0x582D, 0x88F0,
+    0x582E, 0x88F1,
+    0x582F, 0x88F2,
+    0x5831, 0x88F3,
+    0x5832, 0x88F4,
+    0x5833, 0x88F5,
+    0x5834, 0x88F6,
+    0x5836, 0x88F7,
+    0x5837, 0x88F8,
+    0x5838, 0x88F9,
+    0x5839, 0x88FA,
+    0x583A, 0x88FB,
+    0x583B, 0x88FC,
+    0x583C, 0x88FD,
+    0x583D, 0x88FE,
+    0x583E, 0x8940,
+    0x583F, 0x8941,
+    0x5840, 0x8942,
+    0x5841, 0x8943,
+    0x5842, 0x8944,
+    0x5843, 0x8945,
+    0x5845, 0x8946,
+    0x5846, 0x8947,
+    0x5847, 0x8948,
+    0x5848, 0x8949,
+    0x5849, 0x894A,
+    0x584A, 0x894B,
+    0x584B, 0x894C,
+    0x584E, 0x894D,
+    0x584F, 0x894E,
+    0x5850, 0x894F,
+    0x5852, 0x8950,
+    0x5853, 0x8951,
+    0x5855, 0x8952,
+    0x5856, 0x8953,
+    0x5857, 0x8954,
+    0x5859, 0x8955,
+    0x585A, 0x8956,
+    0x585B, 0x8957,
+    0x585C, 0x8958,
+    0x585D, 0x8959,
+    0x585F, 0x895A,
+    0x5860, 0x895B,
+    0x5861, 0x895C,
+    0x5862, 0x895D,
+    0x5863, 0x895E,
+    0x5864, 0x895F,
+    0x5866, 0x8960,
+    0x5867, 0x8961,
+    0x5868, 0x8962,
+    0x5869, 0x8963,
+    0x586A, 0x8964,
+    0x586D, 0x8965,
+    0x586E, 0x8966,
+    0x586F, 0x8967,
+    0x5870, 0x8968,
+    0x5871, 0x8969,
+    0x5872, 0x896A,
+    0x5873, 0x896B,
+    0x5874, 0x896C,
+    0x5875, 0x896D,
+    0x5876, 0x896E,
+    0x5877, 0x896F,
+    0x5878, 0x8970,
+    0x5879, 0x8971,
+    0x587A, 0x8972,
+    0x587B, 0x8973,
+    0x587C, 0x8974,
+    0x587D, 0x8975,
+    0x587F, 0x8976,
+    0x5882, 0x8977,
+    0x5884, 0x8978,
+    0x5886, 0x8979,
+    0x5887, 0x897A,
+    0x5888, 0x897B,
+    0x588A, 0x897C,
+    0x588B, 0x897D,
+    0x588C, 0x897E,
+    0x588D, 0x8980,
+    0x588E, 0x8981,
+    0x588F, 0x8982,
+    0x5890, 0x8983,
+    0x5891, 0x8984,
+    0x5894, 0x8985,
+    0x5895, 0x8986,
+    0x5896, 0x8987,
+    0x5897, 0x8988,
+    0x5898, 0x8989,
+    0x589B, 0x898A,
+    0x589C, 0x898B,
+    0x589D, 0x898C,
+    0x58A0, 0x898D,
+    0x58A1, 0x898E,
+    0x58A2, 0x898F,
+    0x58A3, 0x8990,
+    0x58A4, 0x8991,
+    0x58A5, 0x8992,
+    0x58A6, 0x8993,
+    0x58A7, 0x8994,
+    0x58AA, 0x8995,
+    0x58AB, 0x8996,
+    0x58AC, 0x8997,
+    0x58AD, 0x8998,
+    0x58AE, 0x8999,
+    0x58AF, 0x899A,
+    0x58B0, 0x899B,
+    0x58B1, 0x899C,
+    0x58B2, 0x899D,
+    0x58B3, 0x899E,
+    0x58B4, 0x899F,
+    0x58B5, 0x89A0,
+    0x58B6, 0x89A1,
+    0x58B7, 0x89A2,
+    0x58B8, 0x89A3,
+    0x58B9, 0x89A4,
+    0x58BA, 0x89A5,
+    0x58BB, 0x89A6,
+    0x58BD, 0x89A7,
+    0x58BE, 0x89A8,
+    0x58BF, 0x89A9,
+    0x58C0, 0x89AA,
+    0x58C2, 0x89AB,
+    0x58C3, 0x89AC,
+    0x58C4, 0x89AD,
+    0x58C6, 0x89AE,
+    0x58C7, 0x89AF,
+    0x58C8, 0x89B0,
+    0x58C9, 0x89B1,
+    0x58CA, 0x89B2,
+    0x58CB, 0x89B3,
+    0x58CC, 0x89B4,
+    0x58CD, 0x89B5,
+    0x58CE, 0x89B6,
+    0x58CF, 0x89B7,
+    0x58D0, 0x89B8,
+    0x58D2, 0x89B9,
+    0x58D3, 0x89BA,
+    0x58D4, 0x89BB,
+    0x58D6, 0x89BC,
+    0x58D7, 0x89BD,
+    0x58D8, 0x89BE,
+    0x58D9, 0x89BF,
+    0x58DA, 0x89C0,
+    0x58DB, 0x89C1,
+    0x58DC, 0x89C2,
+    0x58DD, 0x89C3,
+    0x58DE, 0x89C4,
+    0x58DF, 0x89C5,
+    0x58E0, 0x89C6,
+    0x58E1, 0x89C7,
+    0x58E2, 0x89C8,
+    0x58E3, 0x89C9,
+    0x58E5, 0x89CA,
+    0x58E6, 0x89CB,
+    0x58E7, 0x89CC,
+    0x58E8, 0x89CD,
+    0x58E9, 0x89CE,
+    0x58EA, 0x89CF,
+    0x58ED, 0x89D0,
+    0x58EF, 0x89D1,
+    0x58F1, 0x89D2,
+    0x58F2, 0x89D3,
+    0x58F4, 0x89D4,
+    0x58F5, 0x89D5,
+    0x58F7, 0x89D6,
+    0x58F8, 0x89D7,
+    0x58FA, 0x89D8,
+    0x58FB, 0x89D9,
+    0x58FC, 0x89DA,
+    0x58FD, 0x89DB,
+    0x58FE, 0x89DC,
+    0x58FF, 0x89DD,
+    0x5900, 0x89DE,
+    0x5901, 0x89DF,
+    0x5903, 0x89E0,
+    0x5905, 0x89E1,
+    0x5906, 0x89E2,
+    0x5908, 0x89E3,
+    0x5909, 0x89E4,
+    0x590A, 0x89E5,
+    0x590B, 0x89E6,
+    0x590C, 0x89E7,
+    0x590E, 0x89E8,
+    0x5910, 0x89E9,
+    0x5911, 0x89EA,
+    0x5912, 0x89EB,
+    0x5913, 0x89EC,
+    0x5917, 0x89ED,
+    0x5918, 0x89EE,
+    0x591B, 0x89EF,
+    0x591D, 0x89F0,
+    0x591E, 0x89F1,
+    0x5920, 0x89F2,
+    0x5921, 0x89F3,
+    0x5922, 0x89F4,
+    0x5923, 0x89F5,
+    0x5926, 0x89F6,
+    0x5928, 0x89F7,
+    0x592C, 0x89F8,
+    0x5930, 0x89F9,
+    0x5932, 0x89FA,
+    0x5933, 0x89FB,
+    0x5935, 0x89FC,
+    0x5936, 0x89FD,
+    0x593B, 0x89FE,
+    0x593D, 0x8A40,
+    0x593E, 0x8A41,
+    0x593F, 0x8A42,
+    0x5940, 0x8A43,
+    0x5943, 0x8A44,
+    0x5945, 0x8A45,
+    0x5946, 0x8A46,
+    0x594A, 0x8A47,
+    0x594C, 0x8A48,
+    0x594D, 0x8A49,
+    0x5950, 0x8A4A,
+    0x5952, 0x8A4B,
+    0x5953, 0x8A4C,
+    0x5959, 0x8A4D,
+    0x595B, 0x8A4E,
+    0x595C, 0x8A4F,
+    0x595D, 0x8A50,
+    0x595E, 0x8A51,
+    0x595F, 0x8A52,
+    0x5961, 0x8A53,
+    0x5963, 0x8A54,
+    0x5964, 0x8A55,
+    0x5966, 0x8A56,
+    0x5967, 0x8A57,
+    0x5968, 0x8A58,
+    0x5969, 0x8A59,
+    0x596A, 0x8A5A,
+    0x596B, 0x8A5B,
+    0x596C, 0x8A5C,
+    0x596D, 0x8A5D,
+    0x596E, 0x8A5E,
+    0x596F, 0x8A5F,
+    0x5970, 0x8A60,
+    0x5971, 0x8A61,
+    0x5972, 0x8A62,
+    0x5975, 0x8A63,
+    0x5977, 0x8A64,
+    0x597A, 0x8A65,
+    0x597B, 0x8A66,
+    0x597C, 0x8A67,
+    0x597E, 0x8A68,
+    0x597F, 0x8A69,
+    0x5980, 0x8A6A,
+    0x5985, 0x8A6B,
+    0x5989, 0x8A6C,
+    0x598B, 0x8A6D,
+    0x598C, 0x8A6E,
+    0x598E, 0x8A6F,
+    0x598F, 0x8A70,
+    0x5990, 0x8A71,
+    0x5991, 0x8A72,
+    0x5994, 0x8A73,
+    0x5995, 0x8A74,
+    0x5998, 0x8A75,
+    0x599A, 0x8A76,
+    0x599B, 0x8A77,
+    0x599C, 0x8A78,
+    0x599D, 0x8A79,
+    0x599F, 0x8A7A,
+    0x59A0, 0x8A7B,
+    0x59A1, 0x8A7C,
+    0x59A2, 0x8A7D,
+    0x59A6, 0x8A7E,
+    0x59A7, 0x8A80,
+    0x59AC, 0x8A81,
+    0x59AD, 0x8A82,
+    0x59B0, 0x8A83,
+    0x59B1, 0x8A84,
+    0x59B3, 0x8A85,
+    0x59B4, 0x8A86,
+    0x59B5, 0x8A87,
+    0x59B6, 0x8A88,
+    0x59B7, 0x8A89,
+    0x59B8, 0x8A8A,
+    0x59BA, 0x8A8B,
+    0x59BC, 0x8A8C,
+    0x59BD, 0x8A8D,
+    0x59BF, 0x8A8E,
+    0x59C0, 0x8A8F,
+    0x59C1, 0x8A90,
+    0x59C2, 0x8A91,
+    0x59C3, 0x8A92,
+    0x59C4, 0x8A93,
+    0x59C5, 0x8A94,
+    0x59C7, 0x8A95,
+    0x59C8, 0x8A96,
+    0x59C9, 0x8A97,
+    0x59CC, 0x8A98,
+    0x59CD, 0x8A99,
+    0x59CE, 0x8A9A,
+    0x59CF, 0x8A9B,
+    0x59D5, 0x8A9C,
+    0x59D6, 0x8A9D,
+    0x59D9, 0x8A9E,
+    0x59DB, 0x8A9F,
+    0x59DE, 0x8AA0,
+    0x59DF, 0x8AA1,
+    0x59E0, 0x8AA2,
+    0x59E1, 0x8AA3,
+    0x59E2, 0x8AA4,
+    0x59E4, 0x8AA5,
+    0x59E6, 0x8AA6,
+    0x59E7, 0x8AA7,
+    0x59E9, 0x8AA8,
+    0x59EA, 0x8AA9,
+    0x59EB, 0x8AAA,
+    0x59ED, 0x8AAB,
+    0x59EE, 0x8AAC,
+    0x59EF, 0x8AAD,
+    0x59F0, 0x8AAE,
+    0x59F1, 0x8AAF,
+    0x59F2, 0x8AB0,
+    0x59F3, 0x8AB1,
+    0x59F4, 0x8AB2,
+    0x59F5, 0x8AB3,
+    0x59F6, 0x8AB4,
+    0x59F7, 0x8AB5,
+    0x59F8, 0x8AB6,
+    0x59FA, 0x8AB7,
+    0x59FC, 0x8AB8,
+    0x59FD, 0x8AB9,
+    0x59FE, 0x8ABA,
+    0x5A00, 0x8ABB,
+    0x5A02, 0x8ABC,
+    0x5A0A, 0x8ABD,
+    0x5A0B, 0x8ABE,
+    0x5A0D, 0x8ABF,
+    0x5A0E, 0x8AC0,
+    0x5A0F, 0x8AC1,
+    0x5A10, 0x8AC2,
+    0x5A12, 0x8AC3,
+    0x5A14, 0x8AC4,
+    0x5A15, 0x8AC5,
+    0x5A16, 0x8AC6,
+    0x5A17, 0x8AC7,
+    0x5A19, 0x8AC8,
+    0x5A1A, 0x8AC9,
+    0x5A1B, 0x8ACA,
+    0x5A1D, 0x8ACB,
+    0x5A1E, 0x8ACC,
+    0x5A21, 0x8ACD,
+    0x5A22, 0x8ACE,
+    0x5A24, 0x8ACF,
+    0x5A26, 0x8AD0,
+    0x5A27, 0x8AD1,
+    0x5A28, 0x8AD2,
+    0x5A2A, 0x8AD3,
+    0x5A2B, 0x8AD4,
+    0x5A2C, 0x8AD5,
+    0x5A2D, 0x8AD6,
+    0x5A2E, 0x8AD7,
+    0x5A2F, 0x8AD8,
+    0x5A30, 0x8AD9,
+    0x5A33, 0x8ADA,
+    0x5A35, 0x8ADB,
+    0x5A37, 0x8ADC,
+    0x5A38, 0x8ADD,
+    0x5A39, 0x8ADE,
+    0x5A3A, 0x8ADF,
+    0x5A3B, 0x8AE0,
+    0x5A3D, 0x8AE1,
+    0x5A3E, 0x8AE2,
+    0x5A3F, 0x8AE3,
+    0x5A41, 0x8AE4,
+    0x5A42, 0x8AE5,
+    0x5A43, 0x8AE6,
+    0x5A44, 0x8AE7,
+    0x5A45, 0x8AE8,
+    0x5A47, 0x8AE9,
+    0x5A48, 0x8AEA,
+    0x5A4B, 0x8AEB,
+    0x5A4C, 0x8AEC,
+    0x5A4D, 0x8AED,
+    0x5A4E, 0x8AEE,
+    0x5A4F, 0x8AEF,
+    0x5A50, 0x8AF0,
+    0x5A51, 0x8AF1,
+    0x5A52, 0x8AF2,
+    0x5A53, 0x8AF3,
+    0x5A54, 0x8AF4,
+    0x5A56, 0x8AF5,
+    0x5A57, 0x8AF6,
+    0x5A58, 0x8AF7,
+    0x5A59, 0x8AF8,
+    0x5A5B, 0x8AF9,
+    0x5A5C, 0x8AFA,
+    0x5A5D, 0x8AFB,
+    0x5A5E, 0x8AFC,
+    0x5A5F, 0x8AFD,
+    0x5A60, 0x8AFE,
+    0x5A61, 0x8B40,
+    0x5A63, 0x8B41,
+    0x5A64, 0x8B42,
+    0x5A65, 0x8B43,
+    0x5A66, 0x8B44,
+    0x5A68, 0x8B45,
+    0x5A69, 0x8B46,
+    0x5A6B, 0x8B47,
+    0x5A6C, 0x8B48,
+    0x5A6D, 0x8B49,
+    0x5A6E, 0x8B4A,
+    0x5A6F, 0x8B4B,
+    0x5A70, 0x8B4C,
+    0x5A71, 0x8B4D,
+    0x5A72, 0x8B4E,
+    0x5A73, 0x8B4F,
+    0x5A78, 0x8B50,
+    0x5A79, 0x8B51,
+    0x5A7B, 0x8B52,
+    0x5A7C, 0x8B53,
+    0x5A7D, 0x8B54,
+    0x5A7E, 0x8B55,
+    0x5A80, 0x8B56,
+    0x5A81, 0x8B57,
+    0x5A82, 0x8B58,
+    0x5A83, 0x8B59,
+    0x5A84, 0x8B5A,
+    0x5A85, 0x8B5B,
+    0x5A86, 0x8B5C,
+    0x5A87, 0x8B5D,
+    0x5A88, 0x8B5E,
+    0x5A89, 0x8B5F,
+    0x5A8A, 0x8B60,
+    0x5A8B, 0x8B61,
+    0x5A8C, 0x8B62,
+    0x5A8D, 0x8B63,
+    0x5A8E, 0x8B64,
+    0x5A8F, 0x8B65,
+    0x5A90, 0x8B66,
+    0x5A91, 0x8B67,
+    0x5A93, 0x8B68,
+    0x5A94, 0x8B69,
+    0x5A95, 0x8B6A,
+    0x5A96, 0x8B6B,
+    0x5A97, 0x8B6C,
+    0x5A98, 0x8B6D,
+    0x5A99, 0x8B6E,
+    0x5A9C, 0x8B6F,
+    0x5A9D, 0x8B70,
+    0x5A9E, 0x8B71,
+    0x5A9F, 0x8B72,
+    0x5AA0, 0x8B73,
+    0x5AA1, 0x8B74,
+    0x5AA2, 0x8B75,
+    0x5AA3, 0x8B76,
+    0x5AA4, 0x8B77,
+    0x5AA5, 0x8B78,
+    0x5AA6, 0x8B79,
+    0x5AA7, 0x8B7A,
+    0x5AA8, 0x8B7B,
+    0x5AA9, 0x8B7C,
+    0x5AAB, 0x8B7D,
+    0x5AAC, 0x8B7E,
+    0x5AAD, 0x8B80,
+    0x5AAE, 0x8B81,
+    0x5AAF, 0x8B82,
+    0x5AB0, 0x8B83,
+    0x5AB1, 0x8B84,
+    0x5AB4, 0x8B85,
+    0x5AB6, 0x8B86,
+    0x5AB7, 0x8B87,
+    0x5AB9, 0x8B88,
+    0x5ABA, 0x8B89,
+    0x5ABB, 0x8B8A,
+    0x5ABC, 0x8B8B,
+    0x5ABD, 0x8B8C,
+    0x5ABF, 0x8B8D,
+    0x5AC0, 0x8B8E,
+    0x5AC3, 0x8B8F,
+    0x5AC4, 0x8B90,
+    0x5AC5, 0x8B91,
+    0x5AC6, 0x8B92,
+    0x5AC7, 0x8B93,
+    0x5AC8, 0x8B94,
+    0x5ACA, 0x8B95,
+    0x5ACB, 0x8B96,
+    0x5ACD, 0x8B97,
+    0x5ACE, 0x8B98,
+    0x5ACF, 0x8B99,
+    0x5AD0, 0x8B9A,
+    0x5AD1, 0x8B9B,
+    0x5AD3, 0x8B9C,
+    0x5AD5, 0x8B9D,
+    0x5AD7, 0x8B9E,
+    0x5AD9, 0x8B9F,
+    0x5ADA, 0x8BA0,
+    0x5ADB, 0x8BA1,
+    0x5ADD, 0x8BA2,
+    0x5ADE, 0x8BA3,
+    0x5ADF, 0x8BA4,
+    0x5AE2, 0x8BA5,
+    0x5AE4, 0x8BA6,
+    0x5AE5, 0x8BA7,
+    0x5AE7, 0x8BA8,
+    0x5AE8, 0x8BA9,
+    0x5AEA, 0x8BAA,
+    0x5AEC, 0x8BAB,
+    0x5AED, 0x8BAC,
+    0x5AEE, 0x8BAD,
+    0x5AEF, 0x8BAE,
+    0x5AF0, 0x8BAF,
+    0x5AF2, 0x8BB0,
+    0x5AF3, 0x8BB1,
+    0x5AF4, 0x8BB2,
+    0x5AF5, 0x8BB3,
+    0x5AF6, 0x8BB4,
+    0x5AF7, 0x8BB5,
+    0x5AF8, 0x8BB6,
+    0x5AF9, 0x8BB7,
+    0x5AFA, 0x8BB8,
+    0x5AFB, 0x8BB9,
+    0x5AFC, 0x8BBA,
+    0x5AFD, 0x8BBB,
+    0x5AFE, 0x8BBC,
+    0x5AFF, 0x8BBD,
+    0x5B00, 0x8BBE,
+    0x5B01, 0x8BBF,
+    0x5B02, 0x8BC0,
+    0x5B03, 0x8BC1,
+    0x5B04, 0x8BC2,
+    0x5B05, 0x8BC3,
+    0x5B06, 0x8BC4,
+    0x5B07, 0x8BC5,
+    0x5B08, 0x8BC6,
+    0x5B0A, 0x8BC7,
+    0x5B0B, 0x8BC8,
+    0x5B0C, 0x8BC9,
+    0x5B0D, 0x8BCA,
+    0x5B0E, 0x8BCB,
+    0x5B0F, 0x8BCC,
+    0x5B10, 0x8BCD,
+    0x5B11, 0x8BCE,
+    0x5B12, 0x8BCF,
+    0x5B13, 0x8BD0,
+    0x5B14, 0x8BD1,
+    0x5B15, 0x8BD2,
+    0x5B18, 0x8BD3,
+    0x5B19, 0x8BD4,
+    0x5B1A, 0x8BD5,
+    0x5B1B, 0x8BD6,
+    0x5B1C, 0x8BD7,
+    0x5B1D, 0x8BD8,
+    0x5B1E, 0x8BD9,
+    0x5B1F, 0x8BDA,
+    0x5B20, 0x8BDB,
+    0x5B21, 0x8BDC,
+    0x5B22, 0x8BDD,
+    0x5B23, 0x8BDE,
+    0x5B24, 0x8BDF,
+    0x5B25, 0x8BE0,
+    0x5B26, 0x8BE1,
+    0x5B27, 0x8BE2,
+    0x5B28, 0x8BE3,
+    0x5B29, 0x8BE4,
+    0x5B2A, 0x8BE5,
+    0x5B2B, 0x8BE6,
+    0x5B2C, 0x8BE7,
+    0x5B2D, 0x8BE8,
+    0x5B2E, 0x8BE9,
+    0x5B2F, 0x8BEA,
+    0x5B30, 0x8BEB,
+    0x5B31, 0x8BEC,
+    0x5B33, 0x8BED,
+    0x5B35, 0x8BEE,
+    0x5B36, 0x8BEF,
+    0x5B38, 0x8BF0,
+    0x5B39, 0x8BF1,
+    0x5B3A, 0x8BF2,
+    0x5B3B, 0x8BF3,
+    0x5B3C, 0x8BF4,
+    0x5B3D, 0x8BF5,
+    0x5B3E, 0x8BF6,
+    0x5B3F, 0x8BF7,
+    0x5B41, 0x8BF8,
+    0x5B42, 0x8BF9,
+    0x5B43, 0x8BFA,
+    0x5B44, 0x8BFB,
+    0x5B45, 0x8BFC,
+    0x5B46, 0x8BFD,
+    0x5B47, 0x8BFE,
+    0x5B48, 0x8C40,
+    0x5B49, 0x8C41,
+    0x5B4A, 0x8C42,
+    0x5B4B, 0x8C43,
+    0x5B4C, 0x8C44,
+    0x5B4D, 0x8C45,
+    0x5B4E, 0x8C46,
+    0x5B4F, 0x8C47,
+    0x5B52, 0x8C48,
+    0x5B56, 0x8C49,
+    0x5B5E, 0x8C4A,
+    0x5B60, 0x8C4B,
+    0x5B61, 0x8C4C,
+    0x5B67, 0x8C4D,
+    0x5B68, 0x8C4E,
+    0x5B6B, 0x8C4F,
+    0x5B6D, 0x8C50,
+    0x5B6E, 0x8C51,
+    0x5B6F, 0x8C52,
+    0x5B72, 0x8C53,
+    0x5B74, 0x8C54,
+    0x5B76, 0x8C55,
+    0x5B77, 0x8C56,
+    0x5B78, 0x8C57,
+    0x5B79, 0x8C58,
+    0x5B7B, 0x8C59,
+    0x5B7C, 0x8C5A,
+    0x5B7E, 0x8C5B,
+    0x5B7F, 0x8C5C,
+    0x5B82, 0x8C5D,
+    0x5B86, 0x8C5E,
+    0x5B8A, 0x8C5F,
+    0x5B8D, 0x8C60,
+    0x5B8E, 0x8C61,
+    0x5B90, 0x8C62,
+    0x5B91, 0x8C63,
+    0x5B92, 0x8C64,
+    0x5B94, 0x8C65,
+    0x5B96, 0x8C66,
+    0x5B9F, 0x8C67,
+    0x5BA7, 0x8C68,
+    0x5BA8, 0x8C69,
+    0x5BA9, 0x8C6A,
+    0x5BAC, 0x8C6B,
+    0x5BAD, 0x8C6C,
+    0x5BAE, 0x8C6D,
+    0x5BAF, 0x8C6E,
+    0x5BB1, 0x8C6F,
+    0x5BB2, 0x8C70,
+    0x5BB7, 0x8C71,
+    0x5BBA, 0x8C72,
+    0x5BBB, 0x8C73,
+    0x5BBC, 0x8C74,
+    0x5BC0, 0x8C75,
+    0x5BC1, 0x8C76,
+    0x5BC3, 0x8C77,
+    0x5BC8, 0x8C78,
+    0x5BC9, 0x8C79,
+    0x5BCA, 0x8C7A,
+    0x5BCB, 0x8C7B,
+    0x5BCD, 0x8C7C,
+    0x5BCE, 0x8C7D,
+    0x5BCF, 0x8C7E,
+    0x5BD1, 0x8C80,
+    0x5BD4, 0x8C81,
+    0x5BD5, 0x8C82,
+    0x5BD6, 0x8C83,
+    0x5BD7, 0x8C84,
+    0x5BD8, 0x8C85,
+    0x5BD9, 0x8C86,
+    0x5BDA, 0x8C87,
+    0x5BDB, 0x8C88,
+    0x5BDC, 0x8C89,
+    0x5BE0, 0x8C8A,
+    0x5BE2, 0x8C8B,
+    0x5BE3, 0x8C8C,
+    0x5BE6, 0x8C8D,
+    0x5BE7, 0x8C8E,
+    0x5BE9, 0x8C8F,
+    0x5BEA, 0x8C90,
+    0x5BEB, 0x8C91,
+    0x5BEC, 0x8C92,
+    0x5BED, 0x8C93,
+    0x5BEF, 0x8C94,
+    0x5BF1, 0x8C95,
+    0x5BF2, 0x8C96,
+    0x5BF3, 0x8C97,
+    0x5BF4, 0x8C98,
+    0x5BF5, 0x8C99,
+    0x5BF6, 0x8C9A,
+    0x5BF7, 0x8C9B,
+    0x5BFD, 0x8C9C,
+    0x5BFE, 0x8C9D,
+    0x5C00, 0x8C9E,
+    0x5C02, 0x8C9F,
+    0x5C03, 0x8CA0,
+    0x5C05, 0x8CA1,
+    0x5C07, 0x8CA2,
+    0x5C08, 0x8CA3,
+    0x5C0B, 0x8CA4,
+    0x5C0C, 0x8CA5,
+    0x5C0D, 0x8CA6,
+    0x5C0E, 0x8CA7,
+    0x5C10, 0x8CA8,
+    0x5C12, 0x8CA9,
+    0x5C13, 0x8CAA,
+    0x5C17, 0x8CAB,
+    0x5C19, 0x8CAC,
+    0x5C1B, 0x8CAD,
+    0x5C1E, 0x8CAE,
+    0x5C1F, 0x8CAF,
+    0x5C20, 0x8CB0,
+    0x5C21, 0x8CB1,
+    0x5C23, 0x8CB2,
+    0x5C26, 0x8CB3,
+    0x5C28, 0x8CB4,
+    0x5C29, 0x8CB5,
+    0x5C2A, 0x8CB6,
+    0x5C2B, 0x8CB7,
+    0x5C2D, 0x8CB8,
+    0x5C2E, 0x8CB9,
+    0x5C2F, 0x8CBA,
+    0x5C30, 0x8CBB,
+    0x5C32, 0x8CBC,
+    0x5C33, 0x8CBD,
+    0x5C35, 0x8CBE,
+    0x5C36, 0x8CBF,
+    0x5C37, 0x8CC0,
+    0x5C43, 0x8CC1,
+    0x5C44, 0x8CC2,
+    0x5C46, 0x8CC3,
+    0x5C47, 0x8CC4,
+    0x5C4C, 0x8CC5,
+    0x5C4D, 0x8CC6,
+    0x5C52, 0x8CC7,
+    0x5C53, 0x8CC8,
+    0x5C54, 0x8CC9,
+    0x5C56, 0x8CCA,
+    0x5C57, 0x8CCB,
+    0x5C58, 0x8CCC,
+    0x5C5A, 0x8CCD,
+    0x5C5B, 0x8CCE,
+    0x5C5C, 0x8CCF,
+    0x5C5D, 0x8CD0,
+    0x5C5F, 0x8CD1,
+    0x5C62, 0x8CD2,
+    0x5C64, 0x8CD3,
+    0x5C67, 0x8CD4,
+    0x5C68, 0x8CD5,
+    0x5C69, 0x8CD6,
+    0x5C6A, 0x8CD7,
+    0x5C6B, 0x8CD8,
+    0x5C6C, 0x8CD9,
+    0x5C6D, 0x8CDA,
+    0x5C70, 0x8CDB,
+    0x5C72, 0x8CDC,
+    0x5C73, 0x8CDD,
+    0x5C74, 0x8CDE,
+    0x5C75, 0x8CDF,
+    0x5C76, 0x8CE0,
+    0x5C77, 0x8CE1,
+    0x5C78, 0x8CE2,
+    0x5C7B, 0x8CE3,
+    0x5C7C, 0x8CE4,
+    0x5C7D, 0x8CE5,
+    0x5C7E, 0x8CE6,
+    0x5C80, 0x8CE7,
+    0x5C83, 0x8CE8,
+    0x5C84, 0x8CE9,
+    0x5C85, 0x8CEA,
+    0x5C86, 0x8CEB,
+    0x5C87, 0x8CEC,
+    0x5C89, 0x8CED,
+    0x5C8A, 0x8CEE,
+    0x5C8B, 0x8CEF,
+    0x5C8E, 0x8CF0,
+    0x5C8F, 0x8CF1,
+    0x5C92, 0x8CF2,
+    0x5C93, 0x8CF3,
+    0x5C95, 0x8CF4,
+    0x5C9D, 0x8CF5,
+    0x5C9E, 0x8CF6,
+    0x5C9F, 0x8CF7,
+    0x5CA0, 0x8CF8,
+    0x5CA1, 0x8CF9,
+    0x5CA4, 0x8CFA,
+    0x5CA5, 0x8CFB,
+    0x5CA6, 0x8CFC,
+    0x5CA7, 0x8CFD,
+    0x5CA8, 0x8CFE,
+    0x5CAA, 0x8D40,
+    0x5CAE, 0x8D41,
+    0x5CAF, 0x8D42,
+    0x5CB0, 0x8D43,
+    0x5CB2, 0x8D44,
+    0x5CB4, 0x8D45,
+    0x5CB6, 0x8D46,
+    0x5CB9, 0x8D47,
+    0x5CBA, 0x8D48,
+    0x5CBB, 0x8D49,
+    0x5CBC, 0x8D4A,
+    0x5CBE, 0x8D4B,
+    0x5CC0, 0x8D4C,
+    0x5CC2, 0x8D4D,
+    0x5CC3, 0x8D4E,
+    0x5CC5, 0x8D4F,
+    0x5CC6, 0x8D50,
+    0x5CC7, 0x8D51,
+    0x5CC8, 0x8D52,
+    0x5CC9, 0x8D53,
+    0x5CCA, 0x8D54,
+    0x5CCC, 0x8D55,
+    0x5CCD, 0x8D56,
+    0x5CCE, 0x8D57,
+    0x5CCF, 0x8D58,
+    0x5CD0, 0x8D59,
+    0x5CD1, 0x8D5A,
+    0x5CD3, 0x8D5B,
+    0x5CD4, 0x8D5C,
+    0x5CD5, 0x8D5D,
+    0x5CD6, 0x8D5E,
+    0x5CD7, 0x8D5F,
+    0x5CD8, 0x8D60,
+    0x5CDA, 0x8D61,
+    0x5CDB, 0x8D62,
+    0x5CDC, 0x8D63,
+    0x5CDD, 0x8D64,
+    0x5CDE, 0x8D65,
+    0x5CDF, 0x8D66,
+    0x5CE0, 0x8D67,
+    0x5CE2, 0x8D68,
+    0x5CE3, 0x8D69,
+    0x5CE7, 0x8D6A,
+    0x5CE9, 0x8D6B,
+    0x5CEB, 0x8D6C,
+    0x5CEC, 0x8D6D,
+    0x5CEE, 0x8D6E,
+    0x5CEF, 0x8D6F,
+    0x5CF1, 0x8D70,
+    0x5CF2, 0x8D71,
+    0x5CF3, 0x8D72,
+    0x5CF4, 0x8D73,
+    0x5CF5, 0x8D74,
+    0x5CF6, 0x8D75,
+    0x5CF7, 0x8D76,
+    0x5CF8, 0x8D77,
+    0x5CF9, 0x8D78,
+    0x5CFA, 0x8D79,
+    0x5CFC, 0x8D7A,
+    0x5CFD, 0x8D7B,
+    0x5CFE, 0x8D7C,
+    0x5CFF, 0x8D7D,
+    0x5D00, 0x8D7E,
+    0x5D01, 0x8D80,
+    0x5D04, 0x8D81,
+    0x5D05, 0x8D82,
+    0x5D08, 0x8D83,
+    0x5D09, 0x8D84,
+    0x5D0A, 0x8D85,
+    0x5D0B, 0x8D86,
+    0x5D0C, 0x8D87,
+    0x5D0D, 0x8D88,
+    0x5D0F, 0x8D89,
+    0x5D10, 0x8D8A,
+    0x5D11, 0x8D8B,
+    0x5D12, 0x8D8C,
+    0x5D13, 0x8D8D,
+    0x5D15, 0x8D8E,
+    0x5D17, 0x8D8F,
+    0x5D18, 0x8D90,
+    0x5D19, 0x8D91,
+    0x5D1A, 0x8D92,
+    0x5D1C, 0x8D93,
+    0x5D1D, 0x8D94,
+    0x5D1F, 0x8D95,
+    0x5D20, 0x8D96,
+    0x5D21, 0x8D97,
+    0x5D22, 0x8D98,
+    0x5D23, 0x8D99,
+    0x5D25, 0x8D9A,
+    0x5D28, 0x8D9B,
+    0x5D2A, 0x8D9C,
+    0x5D2B, 0x8D9D,
+    0x5D2C, 0x8D9E,
+    0x5D2F, 0x8D9F,
+    0x5D30, 0x8DA0,
+    0x5D31, 0x8DA1,
+    0x5D32, 0x8DA2,
+    0x5D33, 0x8DA3,
+    0x5D35, 0x8DA4,
+    0x5D36, 0x8DA5,
+    0x5D37, 0x8DA6,
+    0x5D38, 0x8DA7,
+    0x5D39, 0x8DA8,
+    0x5D3A, 0x8DA9,
+    0x5D3B, 0x8DAA,
+    0x5D3C, 0x8DAB,
+    0x5D3F, 0x8DAC,
+    0x5D40, 0x8DAD,
+    0x5D41, 0x8DAE,
+    0x5D42, 0x8DAF,
+    0x5D43, 0x8DB0,
+    0x5D44, 0x8DB1,
+    0x5D45, 0x8DB2,
+    0x5D46, 0x8DB3,
+    0x5D48, 0x8DB4,
+    0x5D49, 0x8DB5,
+    0x5D4D, 0x8DB6,
+    0x5D4E, 0x8DB7,
+    0x5D4F, 0x8DB8,
+    0x5D50, 0x8DB9,
+    0x5D51, 0x8DBA,
+    0x5D52, 0x8DBB,
+    0x5D53, 0x8DBC,
+    0x5D54, 0x8DBD,
+    0x5D55, 0x8DBE,
+    0x5D56, 0x8DBF,
+    0x5D57, 0x8DC0,
+    0x5D59, 0x8DC1,
+    0x5D5A, 0x8DC2,
+    0x5D5C, 0x8DC3,
+    0x5D5E, 0x8DC4,
+    0x5D5F, 0x8DC5,
+    0x5D60, 0x8DC6,
+    0x5D61, 0x8DC7,
+    0x5D62, 0x8DC8,
+    0x5D63, 0x8DC9,
+    0x5D64, 0x8DCA,
+    0x5D65, 0x8DCB,
+    0x5D66, 0x8DCC,
+    0x5D67, 0x8DCD,
+    0x5D68, 0x8DCE,
+    0x5D6A, 0x8DCF,
+    0x5D6D, 0x8DD0,
+    0x5D6E, 0x8DD1,
+    0x5D70, 0x8DD2,
+    0x5D71, 0x8DD3,
+    0x5D72, 0x8DD4,
+    0x5D73, 0x8DD5,
+    0x5D75, 0x8DD6,
+    0x5D76, 0x8DD7,
+    0x5D77, 0x8DD8,
+    0x5D78, 0x8DD9,
+    0x5D79, 0x8DDA,
+    0x5D7A, 0x8DDB,
+    0x5D7B, 0x8DDC,
+    0x5D7C, 0x8DDD,
+    0x5D7D, 0x8DDE,
+    0x5D7E, 0x8DDF,
+    0x5D7F, 0x8DE0,
+    0x5D80, 0x8DE1,
+    0x5D81, 0x8DE2,
+    0x5D83, 0x8DE3,
+    0x5D84, 0x8DE4,
+    0x5D85, 0x8DE5,
+    0x5D86, 0x8DE6,
+    0x5D87, 0x8DE7,
+    0x5D88, 0x8DE8,
+    0x5D89, 0x8DE9,
+    0x5D8A, 0x8DEA,
+    0x5D8B, 0x8DEB,
+    0x5D8C, 0x8DEC,
+    0x5D8D, 0x8DED,
+    0x5D8E, 0x8DEE,
+    0x5D8F, 0x8DEF,
+    0x5D90, 0x8DF0,
+    0x5D91, 0x8DF1,
+    0x5D92, 0x8DF2,
+    0x5D93, 0x8DF3,
+    0x5D94, 0x8DF4,
+    0x5D95, 0x8DF5,
+    0x5D96, 0x8DF6,
+    0x5D97, 0x8DF7,
+    0x5D98, 0x8DF8,
+    0x5D9A, 0x8DF9,
+    0x5D9B, 0x8DFA,
+    0x5D9C, 0x8DFB,
+    0x5D9E, 0x8DFC,
+    0x5D9F, 0x8DFD,
+    0x5DA0, 0x8DFE,
+    0x5DA1, 0x8E40,
+    0x5DA2, 0x8E41,
+    0x5DA3, 0x8E42,
+    0x5DA4, 0x8E43,
+    0x5DA5, 0x8E44,
+    0x5DA6, 0x8E45,
+    0x5DA7, 0x8E46,
+    0x5DA8, 0x8E47,
+    0x5DA9, 0x8E48,
+    0x5DAA, 0x8E49,
+    0x5DAB, 0x8E4A,
+    0x5DAC, 0x8E4B,
+    0x5DAD, 0x8E4C,
+    0x5DAE, 0x8E4D,
+    0x5DAF, 0x8E4E,
+    0x5DB0, 0x8E4F,
+    0x5DB1, 0x8E50,
+    0x5DB2, 0x8E51,
+    0x5DB3, 0x8E52,
+    0x5DB4, 0x8E53,
+    0x5DB5, 0x8E54,
+    0x5DB6, 0x8E55,
+    0x5DB8, 0x8E56,
+    0x5DB9, 0x8E57,
+    0x5DBA, 0x8E58,
+    0x5DBB, 0x8E59,
+    0x5DBC, 0x8E5A,
+    0x5DBD, 0x8E5B,
+    0x5DBE, 0x8E5C,
+    0x5DBF, 0x8E5D,
+    0x5DC0, 0x8E5E,
+    0x5DC1, 0x8E5F,
+    0x5DC2, 0x8E60,
+    0x5DC3, 0x8E61,
+    0x5DC4, 0x8E62,
+    0x5DC6, 0x8E63,
+    0x5DC7, 0x8E64,
+    0x5DC8, 0x8E65,
+    0x5DC9, 0x8E66,
+    0x5DCA, 0x8E67,
+    0x5DCB, 0x8E68,
+    0x5DCC, 0x8E69,
+    0x5DCE, 0x8E6A,
+    0x5DCF, 0x8E6B,
+    0x5DD0, 0x8E6C,
+    0x5DD1, 0x8E6D,
+    0x5DD2, 0x8E6E,
+    0x5DD3, 0x8E6F,
+    0x5DD4, 0x8E70,
+    0x5DD5, 0x8E71,
+    0x5DD6, 0x8E72,
+    0x5DD7, 0x8E73,
+    0x5DD8, 0x8E74,
+    0x5DD9, 0x8E75,
+    0x5DDA, 0x8E76,
+    0x5DDC, 0x8E77,
+    0x5DDF, 0x8E78,
+    0x5DE0, 0x8E79,
+    0x5DE3, 0x8E7A,
+    0x5DE4, 0x8E7B,
+    0x5DEA, 0x8E7C,
+    0x5DEC, 0x8E7D,
+    0x5DED, 0x8E7E,
+    0x5DF0, 0x8E80,
+    0x5DF5, 0x8E81,
+    0x5DF6, 0x8E82,
+    0x5DF8, 0x8E83,
+    0x5DF9, 0x8E84,
+    0x5DFA, 0x8E85,
+    0x5DFB, 0x8E86,
+    0x5DFC, 0x8E87,
+    0x5DFF, 0x8E88,
+    0x5E00, 0x8E89,
+    0x5E04, 0x8E8A,
+    0x5E07, 0x8E8B,
+    0x5E09, 0x8E8C,
+    0x5E0A, 0x8E8D,
+    0x5E0B, 0x8E8E,
+    0x5E0D, 0x8E8F,
+    0x5E0E, 0x8E90,
+    0x5E12, 0x8E91,
+    0x5E13, 0x8E92,
+    0x5E17, 0x8E93,
+    0x5E1E, 0x8E94,
+    0x5E1F, 0x8E95,
+    0x5E20, 0x8E96,
+    0x5E21, 0x8E97,
+    0x5E22, 0x8E98,
+    0x5E23, 0x8E99,
+    0x5E24, 0x8E9A,
+    0x5E25, 0x8E9B,
+    0x5E28, 0x8E9C,
+    0x5E29, 0x8E9D,
+    0x5E2A, 0x8E9E,
+    0x5E2B, 0x8E9F,
+    0x5E2C, 0x8EA0,
+    0x5E2F, 0x8EA1,
+    0x5E30, 0x8EA2,
+    0x5E32, 0x8EA3,
+    0x5E33, 0x8EA4,
+    0x5E34, 0x8EA5,
+    0x5E35, 0x8EA6,
+    0x5E36, 0x8EA7,
+    0x5E39, 0x8EA8,
+    0x5E3A, 0x8EA9,
+    0x5E3E, 0x8EAA,
+    0x5E3F, 0x8EAB,
+    0x5E40, 0x8EAC,
+    0x5E41, 0x8EAD,
+    0x5E43, 0x8EAE,
+    0x5E46, 0x8EAF,
+    0x5E47, 0x8EB0,
+    0x5E48, 0x8EB1,
+    0x5E49, 0x8EB2,
+    0x5E4A, 0x8EB3,
+    0x5E4B, 0x8EB4,
+    0x5E4D, 0x8EB5,
+    0x5E4E, 0x8EB6,
+    0x5E4F, 0x8EB7,
+    0x5E50, 0x8EB8,
+    0x5E51, 0x8EB9,
+    0x5E52, 0x8EBA,
+    0x5E53, 0x8EBB,
+    0x5E56, 0x8EBC,
+    0x5E57, 0x8EBD,
+    0x5E58, 0x8EBE,
+    0x5E59, 0x8EBF,
+    0x5E5A, 0x8EC0,
+    0x5E5C, 0x8EC1,
+    0x5E5D, 0x8EC2,
+    0x5E5F, 0x8EC3,
+    0x5E60, 0x8EC4,
+    0x5E63, 0x8EC5,
+    0x5E64, 0x8EC6,
+    0x5E65, 0x8EC7,
+    0x5E66, 0x8EC8,
+    0x5E67, 0x8EC9,
+    0x5E68, 0x8ECA,
+    0x5E69, 0x8ECB,
+    0x5E6A, 0x8ECC,
+    0x5E6B, 0x8ECD,
+    0x5E6C, 0x8ECE,
+    0x5E6D, 0x8ECF,
+    0x5E6E, 0x8ED0,
+    0x5E6F, 0x8ED1,
+    0x5E70, 0x8ED2,
+    0x5E71, 0x8ED3,
+    0x5E75, 0x8ED4,
+    0x5E77, 0x8ED5,
+    0x5E79, 0x8ED6,
+    0x5E7E, 0x8ED7,
+    0x5E81, 0x8ED8,
+    0x5E82, 0x8ED9,
+    0x5E83, 0x8EDA,
+    0x5E85, 0x8EDB,
+    0x5E88, 0x8EDC,
+    0x5E89, 0x8EDD,
+    0x5E8C, 0x8EDE,
+    0x5E8D, 0x8EDF,
+    0x5E8E, 0x8EE0,
+    0x5E92, 0x8EE1,
+    0x5E98, 0x8EE2,
+    0x5E9B, 0x8EE3,
+    0x5E9D, 0x8EE4,
+    0x5EA1, 0x8EE5,
+    0x5EA2, 0x8EE6,
+    0x5EA3, 0x8EE7,
+    0x5EA4, 0x8EE8,
+    0x5EA8, 0x8EE9,
+    0x5EA9, 0x8EEA,
+    0x5EAA, 0x8EEB,
+    0x5EAB, 0x8EEC,
+    0x5EAC, 0x8EED,
+    0x5EAE, 0x8EEE,
+    0x5EAF, 0x8EEF,
+    0x5EB0, 0x8EF0,
+    0x5EB1, 0x8EF1,
+    0x5EB2, 0x8EF2,
+    0x5EB4, 0x8EF3,
+    0x5EBA, 0x8EF4,
+    0x5EBB, 0x8EF5,
+    0x5EBC, 0x8EF6,
+    0x5EBD, 0x8EF7,
+    0x5EBF, 0x8EF8,
+    0x5EC0, 0x8EF9,
+    0x5EC1, 0x8EFA,
+    0x5EC2, 0x8EFB,
+    0x5EC3, 0x8EFC,
+    0x5EC4, 0x8EFD,
+    0x5EC5, 0x8EFE,
+    0x5EC6, 0x8F40,
+    0x5EC7, 0x8F41,
+    0x5EC8, 0x8F42,
+    0x5ECB, 0x8F43,
+    0x5ECC, 0x8F44,
+    0x5ECD, 0x8F45,
+    0x5ECE, 0x8F46,
+    0x5ECF, 0x8F47,
+    0x5ED0, 0x8F48,
+    0x5ED4, 0x8F49,
+    0x5ED5, 0x8F4A,
+    0x5ED7, 0x8F4B,
+    0x5ED8, 0x8F4C,
+    0x5ED9, 0x8F4D,
+    0x5EDA, 0x8F4E,
+    0x5EDC, 0x8F4F,
+    0x5EDD, 0x8F50,
+    0x5EDE, 0x8F51,
+    0x5EDF, 0x8F52,
+    0x5EE0, 0x8F53,
+    0x5EE1, 0x8F54,
+    0x5EE2, 0x8F55,
+    0x5EE3, 0x8F56,
+    0x5EE4, 0x8F57,
+    0x5EE5, 0x8F58,
+    0x5EE6, 0x8F59,
+    0x5EE7, 0x8F5A,
+    0x5EE9, 0x8F5B,
+    0x5EEB, 0x8F5C,
+    0x5EEC, 0x8F5D,
+    0x5EED, 0x8F5E,
+    0x5EEE, 0x8F5F,
+    0x5EEF, 0x8F60,
+    0x5EF0, 0x8F61,
+    0x5EF1, 0x8F62,
+    0x5EF2, 0x8F63,
+    0x5EF3, 0x8F64,
+    0x5EF5, 0x8F65,
+    0x5EF8, 0x8F66,
+    0x5EF9, 0x8F67,
+    0x5EFB, 0x8F68,
+    0x5EFC, 0x8F69,
+    0x5EFD, 0x8F6A,
+    0x5F05, 0x8F6B,
+    0x5F06, 0x8F6C,
+    0x5F07, 0x8F6D,
+    0x5F09, 0x8F6E,
+    0x5F0C, 0x8F6F,
+    0x5F0D, 0x8F70,
+    0x5F0E, 0x8F71,
+    0x5F10, 0x8F72,
+    0x5F12, 0x8F73,
+    0x5F14, 0x8F74,
+    0x5F16, 0x8F75,
+    0x5F19, 0x8F76,
+    0x5F1A, 0x8F77,
+    0x5F1C, 0x8F78,
+    0x5F1D, 0x8F79,
+    0x5F1E, 0x8F7A,
+    0x5F21, 0x8F7B,
+    0x5F22, 0x8F7C,
+    0x5F23, 0x8F7D,
+    0x5F24, 0x8F7E,
+    0x5F28, 0x8F80,
+    0x5F2B, 0x8F81,
+    0x5F2C, 0x8F82,
+    0x5F2E, 0x8F83,
+    0x5F30, 0x8F84,
+    0x5F32, 0x8F85,
+    0x5F33, 0x8F86,
+    0x5F34, 0x8F87,
+    0x5F35, 0x8F88,
+    0x5F36, 0x8F89,
+    0x5F37, 0x8F8A,
+    0x5F38, 0x8F8B,
+    0x5F3B, 0x8F8C,
+    0x5F3D, 0x8F8D,
+    0x5F3E, 0x8F8E,
+    0x5F3F, 0x8F8F,
+    0x5F41, 0x8F90,
+    0x5F42, 0x8F91,
+    0x5F43, 0x8F92,
+    0x5F44, 0x8F93,
+    0x5F45, 0x8F94,
+    0x5F46, 0x8F95,
+    0x5F47, 0x8F96,
+    0x5F48, 0x8F97,
+    0x5F49, 0x8F98,
+    0x5F4A, 0x8F99,
+    0x5F4B, 0x8F9A,
+    0x5F4C, 0x8F9B,
+    0x5F4D, 0x8F9C,
+    0x5F4E, 0x8F9D,
+    0x5F4F, 0x8F9E,
+    0x5F51, 0x8F9F,
+    0x5F54, 0x8FA0,
+    0x5F59, 0x8FA1,
+    0x5F5A, 0x8FA2,
+    0x5F5B, 0x8FA3,
+    0x5F5C, 0x8FA4,
+    0x5F5E, 0x8FA5,
+    0x5F5F, 0x8FA6,
+    0x5F60, 0x8FA7,
+    0x5F63, 0x8FA8,
+    0x5F65, 0x8FA9,
+    0x5F67, 0x8FAA,
+    0x5F68, 0x8FAB,
+    0x5F6B, 0x8FAC,
+    0x5F6E, 0x8FAD,
+    0x5F6F, 0x8FAE,
+    0x5F72, 0x8FAF,
+    0x5F74, 0x8FB0,
+    0x5F75, 0x8FB1,
+    0x5F76, 0x8FB2,
+    0x5F78, 0x8FB3,
+    0x5F7A, 0x8FB4,
+    0x5F7D, 0x8FB5,
+    0x5F7E, 0x8FB6,
+    0x5F7F, 0x8FB7,
+    0x5F83, 0x8FB8,
+    0x5F86, 0x8FB9,
+    0x5F8D, 0x8FBA,
+    0x5F8E, 0x8FBB,
+    0x5F8F, 0x8FBC,
+    0x5F91, 0x8FBD,
+    0x5F93, 0x8FBE,
+    0x5F94, 0x8FBF,
+    0x5F96, 0x8FC0,
+    0x5F9A, 0x8FC1,
+    0x5F9B, 0x8FC2,
+    0x5F9D, 0x8FC3,
+    0x5F9E, 0x8FC4,
+    0x5F9F, 0x8FC5,
+    0x5FA0, 0x8FC6,
+    0x5FA2, 0x8FC7,
+    0x5FA3, 0x8FC8,
+    0x5FA4, 0x8FC9,
+    0x5FA5, 0x8FCA,
+    0x5FA6, 0x8FCB,
+    0x5FA7, 0x8FCC,
+    0x5FA9, 0x8FCD,
+    0x5FAB, 0x8FCE,
+    0x5FAC, 0x8FCF,
+    0x5FAF, 0x8FD0,
+    0x5FB0, 0x8FD1,
+    0x5FB1, 0x8FD2,
+    0x5FB2, 0x8FD3,
+    0x5FB3, 0x8FD4,
+    0x5FB4, 0x8FD5,
+    0x5FB6, 0x8FD6,
+    0x5FB8, 0x8FD7,
+    0x5FB9, 0x8FD8,
+    0x5FBA, 0x8FD9,
+    0x5FBB, 0x8FDA,
+    0x5FBE, 0x8FDB,
+    0x5FBF, 0x8FDC,
+    0x5FC0, 0x8FDD,
+    0x5FC1, 0x8FDE,
+    0x5FC2, 0x8FDF,
+    0x5FC7, 0x8FE0,
+    0x5FC8, 0x8FE1,
+    0x5FCA, 0x8FE2,
+    0x5FCB, 0x8FE3,
+    0x5FCE, 0x8FE4,
+    0x5FD3, 0x8FE5,
+    0x5FD4, 0x8FE6,
+    0x5FD5, 0x8FE7,
+    0x5FDA, 0x8FE8,
+    0x5FDB, 0x8FE9,
+    0x5FDC, 0x8FEA,
+    0x5FDE, 0x8FEB,
+    0x5FDF, 0x8FEC,
+    0x5FE2, 0x8FED,
+    0x5FE3, 0x8FEE,
+    0x5FE5, 0x8FEF,
+    0x5FE6, 0x8FF0,
+    0x5FE8, 0x8FF1,
+    0x5FE9, 0x8FF2,
+    0x5FEC, 0x8FF3,
+    0x5FEF, 0x8FF4,
+    0x5FF0, 0x8FF5,
+    0x5FF2, 0x8FF6,
+    0x5FF3, 0x8FF7,
+    0x5FF4, 0x8FF8,
+    0x5FF6, 0x8FF9,
+    0x5FF7, 0x8FFA,
+    0x5FF9, 0x8FFB,
+    0x5FFA, 0x8FFC,
+    0x5FFC, 0x8FFD,
+    0x6007, 0x8FFE,
+    0x6008, 0x9040,
+    0x6009, 0x9041,
+    0x600B, 0x9042,
+    0x600C, 0x9043,
+    0x6010, 0x9044,
+    0x6011, 0x9045,
+    0x6013, 0x9046,
+    0x6017, 0x9047,
+    0x6018, 0x9048,
+    0x601A, 0x9049,
+    0x601E, 0x904A,
+    0x601F, 0x904B,
+    0x6022, 0x904C,
+    0x6023, 0x904D,
+    0x6024, 0x904E,
+    0x602C, 0x904F,
+    0x602D, 0x9050,
+    0x602E, 0x9051,
+    0x6030, 0x9052,
+    0x6031, 0x9053,
+    0x6032, 0x9054,
+    0x6033, 0x9055,
+    0x6034, 0x9056,
+    0x6036, 0x9057,
+    0x6037, 0x9058,
+    0x6038, 0x9059,
+    0x6039, 0x905A,
+    0x603A, 0x905B,
+    0x603D, 0x905C,
+    0x603E, 0x905D,
+    0x6040, 0x905E,
+    0x6044, 0x905F,
+    0x6045, 0x9060,
+    0x6046, 0x9061,
+    0x6047, 0x9062,
+    0x6048, 0x9063,
+    0x6049, 0x9064,
+    0x604A, 0x9065,
+    0x604C, 0x9066,
+    0x604E, 0x9067,
+    0x604F, 0x9068,
+    0x6051, 0x9069,
+    0x6053, 0x906A,
+    0x6054, 0x906B,
+    0x6056, 0x906C,
+    0x6057, 0x906D,
+    0x6058, 0x906E,
+    0x605B, 0x906F,
+    0x605C, 0x9070,
+    0x605E, 0x9071,
+    0x605F, 0x9072,
+    0x6060, 0x9073,
+    0x6061, 0x9074,
+    0x6065, 0x9075,
+    0x6066, 0x9076,
+    0x606E, 0x9077,
+    0x6071, 0x9078,
+    0x6072, 0x9079,
+    0x6074, 0x907A,
+    0x6075, 0x907B,
+    0x6077, 0x907C,
+    0x607E, 0x907D,
+    0x6080, 0x907E,
+    0x6081, 0x9080,
+    0x6082, 0x9081,
+    0x6085, 0x9082,
+    0x6086, 0x9083,
+    0x6087, 0x9084,
+    0x6088, 0x9085,
+    0x608A, 0x9086,
+    0x608B, 0x9087,
+    0x608E, 0x9088,
+    0x608F, 0x9089,
+    0x6090, 0x908A,
+    0x6091, 0x908B,
+    0x6093, 0x908C,
+    0x6095, 0x908D,
+    0x6097, 0x908E,
+    0x6098, 0x908F,
+    0x6099, 0x9090,
+    0x609C, 0x9091,
+    0x609E, 0x9092,
+    0x60A1, 0x9093,
+    0x60A2, 0x9094,
+    0x60A4, 0x9095,
+    0x60A5, 0x9096,
+    0x60A7, 0x9097,
+    0x60A9, 0x9098,
+    0x60AA, 0x9099,
+    0x60AE, 0x909A,
+    0x60B0, 0x909B,
+    0x60B3, 0x909C,
+    0x60B5, 0x909D,
+    0x60B6, 0x909E,
+    0x60B7, 0x909F,
+    0x60B9, 0x90A0,
+    0x60BA, 0x90A1,
+    0x60BD, 0x90A2,
+    0x60BE, 0x90A3,
+    0x60BF, 0x90A4,
+    0x60C0, 0x90A5,
+    0x60C1, 0x90A6,
+    0x60C2, 0x90A7,
+    0x60C3, 0x90A8,
+    0x60C4, 0x90A9,
+    0x60C7, 0x90AA,
+    0x60C8, 0x90AB,
+    0x60C9, 0x90AC,
+    0x60CC, 0x90AD,
+    0x60CD, 0x90AE,
+    0x60CE, 0x90AF,
+    0x60CF, 0x90B0,
+    0x60D0, 0x90B1,
+    0x60D2, 0x90B2,
+    0x60D3, 0x90B3,
+    0x60D4, 0x90B4,
+    0x60D6, 0x90B5,
+    0x60D7, 0x90B6,
+    0x60D9, 0x90B7,
+    0x60DB, 0x90B8,
+    0x60DE, 0x90B9,
+    0x60E1, 0x90BA,
+    0x60E2, 0x90BB,
+    0x60E3, 0x90BC,
+    0x60E4, 0x90BD,
+    0x60E5, 0x90BE,
+    0x60EA, 0x90BF,
+    0x60F1, 0x90C0,
+    0x60F2, 0x90C1,
+    0x60F5, 0x90C2,
+    0x60F7, 0x90C3,
+    0x60F8, 0x90C4,
+    0x60FB, 0x90C5,
+    0x60FC, 0x90C6,
+    0x60FD, 0x90C7,
+    0x60FE, 0x90C8,
+    0x60FF, 0x90C9,
+    0x6102, 0x90CA,
+    0x6103, 0x90CB,
+    0x6104, 0x90CC,
+    0x6105, 0x90CD,
+    0x6107, 0x90CE,
+    0x610A, 0x90CF,
+    0x610B, 0x90D0,
+    0x610C, 0x90D1,
+    0x6110, 0x90D2,
+    0x6111, 0x90D3,
+    0x6112, 0x90D4,
+    0x6113, 0x90D5,
+    0x6114, 0x90D6,
+    0x6116, 0x90D7,
+    0x6117, 0x90D8,
+    0x6118, 0x90D9,
+    0x6119, 0x90DA,
+    0x611B, 0x90DB,
+    0x611C, 0x90DC,
+    0x611D, 0x90DD,
+    0x611E, 0x90DE,
+    0x6121, 0x90DF,
+    0x6122, 0x90E0,
+    0x6125, 0x90E1,
+    0x6128, 0x90E2,
+    0x6129, 0x90E3,
+    0x612A, 0x90E4,
+    0x612C, 0x90E5,
+    0x612D, 0x90E6,
+    0x612E, 0x90E7,
+    0x612F, 0x90E8,
+    0x6130, 0x90E9,
+    0x6131, 0x90EA,
+    0x6132, 0x90EB,
+    0x6133, 0x90EC,
+    0x6134, 0x90ED,
+    0x6135, 0x90EE,
+    0x6136, 0x90EF,
+    0x6137, 0x90F0,
+    0x6138, 0x90F1,
+    0x6139, 0x90F2,
+    0x613A, 0x90F3,
+    0x613B, 0x90F4,
+    0x613C, 0x90F5,
+    0x613D, 0x90F6,
+    0x613E, 0x90F7,
+    0x6140, 0x90F8,
+    0x6141, 0x90F9,
+    0x6142, 0x90FA,
+    0x6143, 0x90FB,
+    0x6144, 0x90FC,
+    0x6145, 0x90FD,
+    0x6146, 0x90FE,
+    0x6147, 0x9140,
+    0x6149, 0x9141,
+    0x614B, 0x9142,
+    0x614D, 0x9143,
+    0x614F, 0x9144,
+    0x6150, 0x9145,
+    0x6152, 0x9146,
+    0x6153, 0x9147,
+    0x6154, 0x9148,
+    0x6156, 0x9149,
+    0x6157, 0x914A,
+    0x6158, 0x914B,
+    0x6159, 0x914C,
+    0x615A, 0x914D,
+    0x615B, 0x914E,
+    0x615C, 0x914F,
+    0x615E, 0x9150,
+    0x615F, 0x9151,
+    0x6160, 0x9152,
+    0x6161, 0x9153,
+    0x6163, 0x9154,
+    0x6164, 0x9155,
+    0x6165, 0x9156,
+    0x6166, 0x9157,
+    0x6169, 0x9158,
+    0x616A, 0x9159,
+    0x616B, 0x915A,
+    0x616C, 0x915B,
+    0x616D, 0x915C,
+    0x616E, 0x915D,
+    0x616F, 0x915E,
+    0x6171, 0x915F,
+    0x6172, 0x9160,
+    0x6173, 0x9161,
+    0x6174, 0x9162,
+    0x6176, 0x9163,
+    0x6178, 0x9164,
+    0x6179, 0x9165,
+    0x617A, 0x9166,
+    0x617B, 0x9167,
+    0x617C, 0x9168,
+    0x617D, 0x9169,
+    0x617E, 0x916A,
+    0x617F, 0x916B,
+    0x6180, 0x916C,
+    0x6181, 0x916D,
+    0x6182, 0x916E,
+    0x6183, 0x916F,
+    0x6184, 0x9170,
+    0x6185, 0x9171,
+    0x6186, 0x9172,
+    0x6187, 0x9173,
+    0x6188, 0x9174,
+    0x6189, 0x9175,
+    0x618A, 0x9176,
+    0x618C, 0x9177,
+    0x618D, 0x9178,
+    0x618F, 0x9179,
+    0x6190, 0x917A,
+    0x6191, 0x917B,
+    0x6192, 0x917C,
+    0x6193, 0x917D,
+    0x6195, 0x917E,
+    0x6196, 0x9180,
+    0x6197, 0x9181,
+    0x6198, 0x9182,
+    0x6199, 0x9183,
+    0x619A, 0x9184,
+    0x619B, 0x9185,
+    0x619C, 0x9186,
+    0x619E, 0x9187,
+    0x619F, 0x9188,
+    0x61A0, 0x9189,
+    0x61A1, 0x918A,
+    0x61A2, 0x918B,
+    0x61A3, 0x918C,
+    0x61A4, 0x918D,
+    0x61A5, 0x918E,
+    0x61A6, 0x918F,
+    0x61AA, 0x9190,
+    0x61AB, 0x9191,
+    0x61AD, 0x9192,
+    0x61AE, 0x9193,
+    0x61AF, 0x9194,
+    0x61B0, 0x9195,
+    0x61B1, 0x9196,
+    0x61B2, 0x9197,
+    0x61B3, 0x9198,
+    0x61B4, 0x9199,
+    0x61B5, 0x919A,
+    0x61B6, 0x919B,
+    0x61B8, 0x919C,
+    0x61B9, 0x919D,
+    0x61BA, 0x919E,
+    0x61BB, 0x919F,
+    0x61BC, 0x91A0,
+    0x61BD, 0x91A1,
+    0x61BF, 0x91A2,
+    0x61C0, 0x91A3,
+    0x61C1, 0x91A4,
+    0x61C3, 0x91A5,
+    0x61C4, 0x91A6,
+    0x61C5, 0x91A7,
+    0x61C6, 0x91A8,
+    0x61C7, 0x91A9,
+    0x61C9, 0x91AA,
+    0x61CC, 0x91AB,
+    0x61CD, 0x91AC,
+    0x61CE, 0x91AD,
+    0x61CF, 0x91AE,
+    0x61D0, 0x91AF,
+    0x61D3, 0x91B0,
+    0x61D5, 0x91B1,
+    0x61D6, 0x91B2,
+    0x61D7, 0x91B3,
+    0x61D8, 0x91B4,
+    0x61D9, 0x91B5,
+    0x61DA, 0x91B6,
+    0x61DB, 0x91B7,
+    0x61DC, 0x91B8,
+    0x61DD, 0x91B9,
+    0x61DE, 0x91BA,
+    0x61DF, 0x91BB,
+    0x61E0, 0x91BC,
+    0x61E1, 0x91BD,
+    0x61E2, 0x91BE,
+    0x61E3, 0x91BF,
+    0x61E4, 0x91C0,
+    0x61E5, 0x91C1,
+    0x61E7, 0x91C2,
+    0x61E8, 0x91C3,
+    0x61E9, 0x91C4,
+    0x61EA, 0x91C5,
+    0x61EB, 0x91C6,
+    0x61EC, 0x91C7,
+    0x61ED, 0x91C8,
+    0x61EE, 0x91C9,
+    0x61EF, 0x91CA,
+    0x61F0, 0x91CB,
+    0x61F1, 0x91CC,
+    0x61F2, 0x91CD,
+    0x61F3, 0x91CE,
+    0x61F4, 0x91CF,
+    0x61F6, 0x91D0,
+    0x61F7, 0x91D1,
+    0x61F8, 0x91D2,
+    0x61F9, 0x91D3,
+    0x61FA, 0x91D4,
+    0x61FB, 0x91D5,
+    0x61FC, 0x91D6,
+    0x61FD, 0x91D7,
+    0x61FE, 0x91D8,
+    0x6200, 0x91D9,
+    0x6201, 0x91DA,
+    0x6202, 0x91DB,
+    0x6203, 0x91DC,
+    0x6204, 0x91DD,
+    0x6205, 0x91DE,
+    0x6207, 0x91DF,
+    0x6209, 0x91E0,
+    0x6213, 0x91E1,
+    0x6214, 0x91E2,
+    0x6219, 0x91E3,
+    0x621C, 0x91E4,
+    0x621D, 0x91E5,
+    0x621E, 0x91E6,
+    0x6220, 0x91E7,
+    0x6223, 0x91E8,
+    0x6226, 0x91E9,
+    0x6227, 0x91EA,
+    0x6228, 0x91EB,
+    0x6229, 0x91EC,
+    0x622B, 0x91ED,
+    0x622D, 0x91EE,
+    0x622F, 0x91EF,
+    0x6230, 0x91F0,
+    0x6231, 0x91F1,
+    0x6232, 0x91F2,
+    0x6235, 0x91F3,
+    0x6236, 0x91F4,
+    0x6238, 0x91F5,
+    0x6239, 0x91F6,
+    0x623A, 0x91F7,
+    0x623B, 0x91F8,
+    0x623C, 0x91F9,
+    0x6242, 0x91FA,
+    0x6244, 0x91FB,
+    0x6245, 0x91FC,
+    0x6246, 0x91FD,
+    0x624A, 0x91FE,
+    0x624F, 0x9240,
+    0x6250, 0x9241,
+    0x6255, 0x9242,
+    0x6256, 0x9243,
+    0x6257, 0x9244,
+    0x6259, 0x9245,
+    0x625A, 0x9246,
+    0x625C, 0x9247,
+    0x625D, 0x9248,
+    0x625E, 0x9249,
+    0x625F, 0x924A,
+    0x6260, 0x924B,
+    0x6261, 0x924C,
+    0x6262, 0x924D,
+    0x6264, 0x924E,
+    0x6265, 0x924F,
+    0x6268, 0x9250,
+    0x6271, 0x9251,
+    0x6272, 0x9252,
+    0x6274, 0x9253,
+    0x6275, 0x9254,
+    0x6277, 0x9255,
+    0x6278, 0x9256,
+    0x627A, 0x9257,
+    0x627B, 0x9258,
+    0x627D, 0x9259,
+    0x6281, 0x925A,
+    0x6282, 0x925B,
+    0x6283, 0x925C,
+    0x6285, 0x925D,
+    0x6286, 0x925E,
+    0x6287, 0x925F,
+    0x6288, 0x9260,
+    0x628B, 0x9261,
+    0x628C, 0x9262,
+    0x628D, 0x9263,
+    0x628E, 0x9264,
+    0x628F, 0x9265,
+    0x6290, 0x9266,
+    0x6294, 0x9267,
+    0x6299, 0x9268,
+    0x629C, 0x9269,
+    0x629D, 0x926A,
+    0x629E, 0x926B,
+    0x62A3, 0x926C,
+    0x62A6, 0x926D,
+    0x62A7, 0x926E,
+    0x62A9, 0x926F,
+    0x62AA, 0x9270,
+    0x62AD, 0x9271,
+    0x62AE, 0x9272,
+    0x62AF, 0x9273,
+    0x62B0, 0x9274,
+    0x62B2, 0x9275,
+    0x62B3, 0x9276,
+    0x62B4, 0x9277,
+    0x62B6, 0x9278,
+    0x62B7, 0x9279,
+    0x62B8, 0x927A,
+    0x62BA, 0x927B,
+    0x62BE, 0x927C,
+    0x62C0, 0x927D,
+    0x62C1, 0x927E,
+    0x62C3, 0x9280,
+    0x62CB, 0x9281,
+    0x62CF, 0x9282,
+    0x62D1, 0x9283,
+    0x62D5, 0x9284,
+    0x62DD, 0x9285,
+    0x62DE, 0x9286,
+    0x62E0, 0x9287,
+    0x62E1, 0x9288,
+    0x62E4, 0x9289,
+    0x62EA, 0x928A,
+    0x62EB, 0x928B,
+    0x62F0, 0x928C,
+    0x62F2, 0x928D,
+    0x62F5, 0x928E,
+    0x62F8, 0x928F,
+    0x62F9, 0x9290,
+    0x62FA, 0x9291,
+    0x62FB, 0x9292,
+    0x6300, 0x9293,
+    0x6303, 0x9294,
+    0x6304, 0x9295,
+    0x6305, 0x9296,
+    0x6306, 0x9297,
+    0x630A, 0x9298,
+    0x630B, 0x9299,
+    0x630C, 0x929A,
+    0x630D, 0x929B,
+    0x630F, 0x929C,
+    0x6310, 0x929D,
+    0x6312, 0x929E,
+    0x6313, 0x929F,
+    0x6314, 0x92A0,
+    0x6315, 0x92A1,
+    0x6317, 0x92A2,
+    0x6318, 0x92A3,
+    0x6319, 0x92A4,
+    0x631C, 0x92A5,
+    0x6326, 0x92A6,
+    0x6327, 0x92A7,
+    0x6329, 0x92A8,
+    0x632C, 0x92A9,
+    0x632D, 0x92AA,
+    0x632E, 0x92AB,
+    0x6330, 0x92AC,
+    0x6331, 0x92AD,
+    0x6333, 0x92AE,
+    0x6334, 0x92AF,
+    0x6335, 0x92B0,
+    0x6336, 0x92B1,
+    0x6337, 0x92B2,
+    0x6338, 0x92B3,
+    0x633B, 0x92B4,
+    0x633C, 0x92B5,
+    0x633E, 0x92B6,
+    0x633F, 0x92B7,
+    0x6340, 0x92B8,
+    0x6341, 0x92B9,
+    0x6344, 0x92BA,
+    0x6347, 0x92BB,
+    0x6348, 0x92BC,
+    0x634A, 0x92BD,
+    0x6351, 0x92BE,
+    0x6352, 0x92BF,
+    0x6353, 0x92C0,
+    0x6354, 0x92C1,
+    0x6356, 0x92C2,
+    0x6357, 0x92C3,
+    0x6358, 0x92C4,
+    0x6359, 0x92C5,
+    0x635A, 0x92C6,
+    0x635B, 0x92C7,
+    0x635C, 0x92C8,
+    0x635D, 0x92C9,
+    0x6360, 0x92CA,
+    0x6364, 0x92CB,
+    0x6365, 0x92CC,
+    0x6366, 0x92CD,
+    0x6368, 0x92CE,
+    0x636A, 0x92CF,
+    0x636B, 0x92D0,
+    0x636C, 0x92D1,
+    0x636F, 0x92D2,
+    0x6370, 0x92D3,
+    0x6372, 0x92D4,
+    0x6373, 0x92D5,
+    0x6374, 0x92D6,
+    0x6375, 0x92D7,
+    0x6378, 0x92D8,
+    0x6379, 0x92D9,
+    0x637C, 0x92DA,
+    0x637D, 0x92DB,
+    0x637E, 0x92DC,
+    0x637F, 0x92DD,
+    0x6381, 0x92DE,
+    0x6383, 0x92DF,
+    0x6384, 0x92E0,
+    0x6385, 0x92E1,
+    0x6386, 0x92E2,
+    0x638B, 0x92E3,
+    0x638D, 0x92E4,
+    0x6391, 0x92E5,
+    0x6393, 0x92E6,
+    0x6394, 0x92E7,
+    0x6395, 0x92E8,
+    0x6397, 0x92E9,
+    0x6399, 0x92EA,
+    0x639A, 0x92EB,
+    0x639B, 0x92EC,
+    0x639C, 0x92ED,
+    0x639D, 0x92EE,
+    0x639E, 0x92EF,
+    0x639F, 0x92F0,
+    0x63A1, 0x92F1,
+    0x63A4, 0x92F2,
+    0x63A6, 0x92F3,
+    0x63AB, 0x92F4,
+    0x63AF, 0x92F5,
+    0x63B1, 0x92F6,
+    0x63B2, 0x92F7,
+    0x63B5, 0x92F8,
+    0x63B6, 0x92F9,
+    0x63B9, 0x92FA,
+    0x63BB, 0x92FB,
+    0x63BD, 0x92FC,
+    0x63BF, 0x92FD,
+    0x63C0, 0x92FE,
+    0x63C1, 0x9340,
+    0x63C2, 0x9341,
+    0x63C3, 0x9342,
+    0x63C5, 0x9343,
+    0x63C7, 0x9344,
+    0x63C8, 0x9345,
+    0x63CA, 0x9346,
+    0x63CB, 0x9347,
+    0x63CC, 0x9348,
+    0x63D1, 0x9349,
+    0x63D3, 0x934A,
+    0x63D4, 0x934B,
+    0x63D5, 0x934C,
+    0x63D7, 0x934D,
+    0x63D8, 0x934E,
+    0x63D9, 0x934F,
+    0x63DA, 0x9350,
+    0x63DB, 0x9351,
+    0x63DC, 0x9352,
+    0x63DD, 0x9353,
+    0x63DF, 0x9354,
+    0x63E2, 0x9355,
+    0x63E4, 0x9356,
+    0x63E5, 0x9357,
+    0x63E6, 0x9358,
+    0x63E7, 0x9359,
+    0x63E8, 0x935A,
+    0x63EB, 0x935B,
+    0x63EC, 0x935C,
+    0x63EE, 0x935D,
+    0x63EF, 0x935E,
+    0x63F0, 0x935F,
+    0x63F1, 0x9360,
+    0x63F3, 0x9361,
+    0x63F5, 0x9362,
+    0x63F7, 0x9363,
+    0x63F9, 0x9364,
+    0x63FA, 0x9365,
+    0x63FB, 0x9366,
+    0x63FC, 0x9367,
+    0x63FE, 0x9368,
+    0x6403, 0x9369,
+    0x6404, 0x936A,
+    0x6406, 0x936B,
+    0x6407, 0x936C,
+    0x6408, 0x936D,
+    0x6409, 0x936E,
+    0x640A, 0x936F,
+    0x640D, 0x9370,
+    0x640E, 0x9371,
+    0x6411, 0x9372,
+    0x6412, 0x9373,
+    0x6415, 0x9374,
+    0x6416, 0x9375,
+    0x6417, 0x9376,
+    0x6418, 0x9377,
+    0x6419, 0x9378,
+    0x641A, 0x9379,
+    0x641D, 0x937A,
+    0x641F, 0x937B,
+    0x6422, 0x937C,
+    0x6423, 0x937D,
+    0x6424, 0x937E,
+    0x6425, 0x9380,
+    0x6427, 0x9381,
+    0x6428, 0x9382,
+    0x6429, 0x9383,
+    0x642B, 0x9384,
+    0x642E, 0x9385,
+    0x642F, 0x9386,
+    0x6430, 0x9387,
+    0x6431, 0x9388,
+    0x6432, 0x9389,
+    0x6433, 0x938A,
+    0x6435, 0x938B,
+    0x6436, 0x938C,
+    0x6437, 0x938D,
+    0x6438, 0x938E,
+    0x6439, 0x938F,
+    0x643B, 0x9390,
+    0x643C, 0x9391,
+    0x643E, 0x9392,
+    0x6440, 0x9393,
+    0x6442, 0x9394,
+    0x6443, 0x9395,
+    0x6449, 0x9396,
+    0x644B, 0x9397,
+    0x644C, 0x9398,
+    0x644D, 0x9399,
+    0x644E, 0x939A,
+    0x644F, 0x939B,
+    0x6450, 0x939C,
+    0x6451, 0x939D,
+    0x6453, 0x939E,
+    0x6455, 0x939F,
+    0x6456, 0x93A0,
+    0x6457, 0x93A1,
+    0x6459, 0x93A2,
+    0x645A, 0x93A3,
+    0x645B, 0x93A4,
+    0x645C, 0x93A5,
+    0x645D, 0x93A6,
+    0x645F, 0x93A7,
+    0x6460, 0x93A8,
+    0x6461, 0x93A9,
+    0x6462, 0x93AA,
+    0x6463, 0x93AB,
+    0x6464, 0x93AC,
+    0x6465, 0x93AD,
+    0x6466, 0x93AE,
+    0x6468, 0x93AF,
+    0x646A, 0x93B0,
+    0x646B, 0x93B1,
+    0x646C, 0x93B2,
+    0x646E, 0x93B3,
+    0x646F, 0x93B4,
+    0x6470, 0x93B5,
+    0x6471, 0x93B6,
+    0x6472, 0x93B7,
+    0x6473, 0x93B8,
+    0x6474, 0x93B9,
+    0x6475, 0x93BA,
+    0x6476, 0x93BB,
+    0x6477, 0x93BC,
+    0x647B, 0x93BD,
+    0x647C, 0x93BE,
+    0x647D, 0x93BF,
+    0x647E, 0x93C0,
+    0x647F, 0x93C1,
+    0x6480, 0x93C2,
+    0x6481, 0x93C3,
+    0x6483, 0x93C4,
+    0x6486, 0x93C5,
+    0x6488, 0x93C6,
+    0x6489, 0x93C7,
+    0x648A, 0x93C8,
+    0x648B, 0x93C9,
+    0x648C, 0x93CA,
+    0x648D, 0x93CB,
+    0x648E, 0x93CC,
+    0x648F, 0x93CD,
+    0x6490, 0x93CE,
+    0x6493, 0x93CF,
+    0x6494, 0x93D0,
+    0x6497, 0x93D1,
+    0x6498, 0x93D2,
+    0x649A, 0x93D3,
+    0x649B, 0x93D4,
+    0x649C, 0x93D5,
+    0x649D, 0x93D6,
+    0x649F, 0x93D7,
+    0x64A0, 0x93D8,
+    0x64A1, 0x93D9,
+    0x64A2, 0x93DA,
+    0x64A3, 0x93DB,
+    0x64A5, 0x93DC,
+    0x64A6, 0x93DD,
+    0x64A7, 0x93DE,
+    0x64A8, 0x93DF,
+    0x64AA, 0x93E0,
+    0x64AB, 0x93E1,
+    0x64AF, 0x93E2,
+    0x64B1, 0x93E3,
+    0x64B2, 0x93E4,
+    0x64B3, 0x93E5,
+    0x64B4, 0x93E6,
+    0x64B6, 0x93E7,
+    0x64B9, 0x93E8,
+    0x64BB, 0x93E9,
+    0x64BD, 0x93EA,
+    0x64BE, 0x93EB,
+    0x64BF, 0x93EC,
+    0x64C1, 0x93ED,
+    0x64C3, 0x93EE,
+    0x64C4, 0x93EF,
+    0x64C6, 0x93F0,
+    0x64C7, 0x93F1,
+    0x64C8, 0x93F2,
+    0x64C9, 0x93F3,
+    0x64CA, 0x93F4,
+    0x64CB, 0x93F5,
+    0x64CC, 0x93F6,
+    0x64CF, 0x93F7,
+    0x64D1, 0x93F8,
+    0x64D3, 0x93F9,
+    0x64D4, 0x93FA,
+    0x64D5, 0x93FB,
+    0x64D6, 0x93FC,
+    0x64D9, 0x93FD,
+    0x64DA, 0x93FE,
+    0x64DB, 0x9440,
+    0x64DC, 0x9441,
+    0x64DD, 0x9442,
+    0x64DF, 0x9443,
+    0x64E0, 0x9444,
+    0x64E1, 0x9445,
+    0x64E3, 0x9446,
+    0x64E5, 0x9447,
+    0x64E7, 0x9448,
+    0x64E8, 0x9449,
+    0x64E9, 0x944A,
+    0x64EA, 0x944B,
+    0x64EB, 0x944C,
+    0x64EC, 0x944D,
+    0x64ED, 0x944E,
+    0x64EE, 0x944F,
+    0x64EF, 0x9450,
+    0x64F0, 0x9451,
+    0x64F1, 0x9452,
+    0x64F2, 0x9453,
+    0x64F3, 0x9454,
+    0x64F4, 0x9455,
+    0x64F5, 0x9456,
+    0x64F6, 0x9457,
+    0x64F7, 0x9458,
+    0x64F8, 0x9459,
+    0x64F9, 0x945A,
+    0x64FA, 0x945B,
+    0x64FB, 0x945C,
+    0x64FC, 0x945D,
+    0x64FD, 0x945E,
+    0x64FE, 0x945F,
+    0x64FF, 0x9460,
+    0x6501, 0x9461,
+    0x6502, 0x9462,
+    0x6503, 0x9463,
+    0x6504, 0x9464,
+    0x6505, 0x9465,
+    0x6506, 0x9466,
+    0x6507, 0x9467,
+    0x6508, 0x9468,
+    0x650A, 0x9469,
+    0x650B, 0x946A,
+    0x650C, 0x946B,
+    0x650D, 0x946C,
+    0x650E, 0x946D,
+    0x650F, 0x946E,
+    0x6510, 0x946F,
+    0x6511, 0x9470,
+    0x6513, 0x9471,
+    0x6514, 0x9472,
+    0x6515, 0x9473,
+    0x6516, 0x9474,
+    0x6517, 0x9475,
+    0x6519, 0x9476,
+    0x651A, 0x9477,
+    0x651B, 0x9478,
+    0x651C, 0x9479,
+    0x651D, 0x947A,
+    0x651E, 0x947B,
+    0x651F, 0x947C,
+    0x6520, 0x947D,
+    0x6521, 0x947E,
+    0x6522, 0x9480,
+    0x6523, 0x9481,
+    0x6524, 0x9482,
+    0x6526, 0x9483,
+    0x6527, 0x9484,
+    0x6528, 0x9485,
+    0x6529, 0x9486,
+    0x652A, 0x9487,
+    0x652C, 0x9488,
+    0x652D, 0x9489,
+    0x6530, 0x948A,
+    0x6531, 0x948B,
+    0x6532, 0x948C,
+    0x6533, 0x948D,
+    0x6537, 0x948E,
+    0x653A, 0x948F,
+    0x653C, 0x9490,
+    0x653D, 0x9491,
+    0x6540, 0x9492,
+    0x6541, 0x9493,
+    0x6542, 0x9494,
+    0x6543, 0x9495,
+    0x6544, 0x9496,
+    0x6546, 0x9497,
+    0x6547, 0x9498,
+    0x654A, 0x9499,
+    0x654B, 0x949A,
+    0x654D, 0x949B,
+    0x654E, 0x949C,
+    0x6550, 0x949D,
+    0x6552, 0x949E,
+    0x6553, 0x949F,
+    0x6554, 0x94A0,
+    0x6557, 0x94A1,
+    0x6558, 0x94A2,
+    0x655A, 0x94A3,
+    0x655C, 0x94A4,
+    0x655F, 0x94A5,
+    0x6560, 0x94A6,
+    0x6561, 0x94A7,
+    0x6564, 0x94A8,
+    0x6565, 0x94A9,
+    0x6567, 0x94AA,
+    0x6568, 0x94AB,
+    0x6569, 0x94AC,
+    0x656A, 0x94AD,
+    0x656D, 0x94AE,
+    0x656E, 0x94AF,
+    0x656F, 0x94B0,
+    0x6571, 0x94B1,
+    0x6573, 0x94B2,
+    0x6575, 0x94B3,
+    0x6576, 0x94B4,
+    0x6578, 0x94B5,
+    0x6579, 0x94B6,
+    0x657A, 0x94B7,
+    0x657B, 0x94B8,
+    0x657C, 0x94B9,
+    0x657D, 0x94BA,
+    0x657E, 0x94BB,
+    0x657F, 0x94BC,
+    0x6580, 0x94BD,
+    0x6581, 0x94BE,
+    0x6582, 0x94BF,
+    0x6583, 0x94C0,
+    0x6584, 0x94C1,
+    0x6585, 0x94C2,
+    0x6586, 0x94C3,
+    0x6588, 0x94C4,
+    0x6589, 0x94C5,
+    0x658A, 0x94C6,
+    0x658D, 0x94C7,
+    0x658E, 0x94C8,
+    0x658F, 0x94C9,
+    0x6592, 0x94CA,
+    0x6594, 0x94CB,
+    0x6595, 0x94CC,
+    0x6596, 0x94CD,
+    0x6598, 0x94CE,
+    0x659A, 0x94CF,
+    0x659D, 0x94D0,
+    0x659E, 0x94D1,
+    0x65A0, 0x94D2,
+    0x65A2, 0x94D3,
+    0x65A3, 0x94D4,
+    0x65A6, 0x94D5,
+    0x65A8, 0x94D6,
+    0x65AA, 0x94D7,
+    0x65AC, 0x94D8,
+    0x65AE, 0x94D9,
+    0x65B1, 0x94DA,
+    0x65B2, 0x94DB,
+    0x65B3, 0x94DC,
+    0x65B4, 0x94DD,
+    0x65B5, 0x94DE,
+    0x65B6, 0x94DF,
+    0x65B7, 0x94E0,
+    0x65B8, 0x94E1,
+    0x65BA, 0x94E2,
+    0x65BB, 0x94E3,
+    0x65BE, 0x94E4,
+    0x65BF, 0x94E5,
+    0x65C0, 0x94E6,
+    0x65C2, 0x94E7,
+    0x65C7, 0x94E8,
+    0x65C8, 0x94E9,
+    0x65C9, 0x94EA,
+    0x65CA, 0x94EB,
+    0x65CD, 0x94EC,
+    0x65D0, 0x94ED,
+    0x65D1, 0x94EE,
+    0x65D3, 0x94EF,
+    0x65D4, 0x94F0,
+    0x65D5, 0x94F1,
+    0x65D8, 0x94F2,
+    0x65D9, 0x94F3,
+    0x65DA, 0x94F4,
+    0x65DB, 0x94F5,
+    0x65DC, 0x94F6,
+    0x65DD, 0x94F7,
+    0x65DE, 0x94F8,
+    0x65DF, 0x94F9,
+    0x65E1, 0x94FA,
+    0x65E3, 0x94FB,
+    0x65E4, 0x94FC,
+    0x65EA, 0x94FD,
+    0x65EB, 0x94FE,
+    0x65F2, 0x9540,
+    0x65F3, 0x9541,
+    0x65F4, 0x9542,
+    0x65F5, 0x9543,
+    0x65F8, 0x9544,
+    0x65F9, 0x9545,
+    0x65FB, 0x9546,
+    0x65FC, 0x9547,
+    0x65FD, 0x9548,
+    0x65FE, 0x9549,
+    0x65FF, 0x954A,
+    0x6601, 0x954B,
+    0x6604, 0x954C,
+    0x6605, 0x954D,
+    0x6607, 0x954E,
+    0x6608, 0x954F,
+    0x6609, 0x9550,
+    0x660B, 0x9551,
+    0x660D, 0x9552,
+    0x6610, 0x9553,
+    0x6611, 0x9554,
+    0x6612, 0x9555,
+    0x6616, 0x9556,
+    0x6617, 0x9557,
+    0x6618, 0x9558,
+    0x661A, 0x9559,
+    0x661B, 0x955A,
+    0x661C, 0x955B,
+    0x661E, 0x955C,
+    0x6621, 0x955D,
+    0x6622, 0x955E,
+    0x6623, 0x955F,
+    0x6624, 0x9560,
+    0x6626, 0x9561,
+    0x6629, 0x9562,
+    0x662A, 0x9563,
+    0x662B, 0x9564,
+    0x662C, 0x9565,
+    0x662E, 0x9566,
+    0x6630, 0x9567,
+    0x6632, 0x9568,
+    0x6633, 0x9569,
+    0x6637, 0x956A,
+    0x6638, 0x956B,
+    0x6639, 0x956C,
+    0x663A, 0x956D,
+    0x663B, 0x956E,
+    0x663D, 0x956F,
+    0x663F, 0x9570,
+    0x6640, 0x9571,
+    0x6642, 0x9572,
+    0x6644, 0x9573,
+    0x6645, 0x9574,
+    0x6646, 0x9575,
+    0x6647, 0x9576,
+    0x6648, 0x9577,
+    0x6649, 0x9578,
+    0x664A, 0x9579,
+    0x664D, 0x957A,
+    0x664E, 0x957B,
+    0x6650, 0x957C,
+    0x6651, 0x957D,
+    0x6658, 0x957E,
+    0x6659, 0x9580,
+    0x665B, 0x9581,
+    0x665C, 0x9582,
+    0x665D, 0x9583,
+    0x665E, 0x9584,
+    0x6660, 0x9585,
+    0x6662, 0x9586,
+    0x6663, 0x9587,
+    0x6665, 0x9588,
+    0x6667, 0x9589,
+    0x6669, 0x958A,
+    0x666A, 0x958B,
+    0x666B, 0x958C,
+    0x666C, 0x958D,
+    0x666D, 0x958E,
+    0x6671, 0x958F,
+    0x6672, 0x9590,
+    0x6673, 0x9591,
+    0x6675, 0x9592,
+    0x6678, 0x9593,
+    0x6679, 0x9594,
+    0x667B, 0x9595,
+    0x667C, 0x9596,
+    0x667D, 0x9597,
+    0x667F, 0x9598,
+    0x6680, 0x9599,
+    0x6681, 0x959A,
+    0x6683, 0x959B,
+    0x6685, 0x959C,
+    0x6686, 0x959D,
+    0x6688, 0x959E,
+    0x6689, 0x959F,
+    0x668A, 0x95A0,
+    0x668B, 0x95A1,
+    0x668D, 0x95A2,
+    0x668E, 0x95A3,
+    0x668F, 0x95A4,
+    0x6690, 0x95A5,
+    0x6692, 0x95A6,
+    0x6693, 0x95A7,
+    0x6694, 0x95A8,
+    0x6695, 0x95A9,
+    0x6698, 0x95AA,
+    0x6699, 0x95AB,
+    0x669A, 0x95AC,
+    0x669B, 0x95AD,
+    0x669C, 0x95AE,
+    0x669E, 0x95AF,
+    0x669F, 0x95B0,
+    0x66A0, 0x95B1,
+    0x66A1, 0x95B2,
+    0x66A2, 0x95B3,
+    0x66A3, 0x95B4,
+    0x66A4, 0x95B5,
+    0x66A5, 0x95B6,
+    0x66A6, 0x95B7,
+    0x66A9, 0x95B8,
+    0x66AA, 0x95B9,
+    0x66AB, 0x95BA,
+    0x66AC, 0x95BB,
+    0x66AD, 0x95BC,
+    0x66AF, 0x95BD,
+    0x66B0, 0x95BE,
+    0x66B1, 0x95BF,
+    0x66B2, 0x95C0,
+    0x66B3, 0x95C1,
+    0x66B5, 0x95C2,
+    0x66B6, 0x95C3,
+    0x66B7, 0x95C4,
+    0x66B8, 0x95C5,
+    0x66BA, 0x95C6,
+    0x66BB, 0x95C7,
+    0x66BC, 0x95C8,
+    0x66BD, 0x95C9,
+    0x66BF, 0x95CA,
+    0x66C0, 0x95CB,
+    0x66C1, 0x95CC,
+    0x66C2, 0x95CD,
+    0x66C3, 0x95CE,
+    0x66C4, 0x95CF,
+    0x66C5, 0x95D0,
+    0x66C6, 0x95D1,
+    0x66C7, 0x95D2,
+    0x66C8, 0x95D3,
+    0x66C9, 0x95D4,
+    0x66CA, 0x95D5,
+    0x66CB, 0x95D6,
+    0x66CC, 0x95D7,
+    0x66CD, 0x95D8,
+    0x66CE, 0x95D9,
+    0x66CF, 0x95DA,
+    0x66D0, 0x95DB,
+    0x66D1, 0x95DC,
+    0x66D2, 0x95DD,
+    0x66D3, 0x95DE,
+    0x66D4, 0x95DF,
+    0x66D5, 0x95E0,
+    0x66D6, 0x95E1,
+    0x66D7, 0x95E2,
+    0x66D8, 0x95E3,
+    0x66DA, 0x95E4,
+    0x66DE, 0x95E5,
+    0x66DF, 0x95E6,
+    0x66E0, 0x95E7,
+    0x66E1, 0x95E8,
+    0x66E2, 0x95E9,
+    0x66E3, 0x95EA,
+    0x66E4, 0x95EB,
+    0x66E5, 0x95EC,
+    0x66E7, 0x95ED,
+    0x66E8, 0x95EE,
+    0x66EA, 0x95EF,
+    0x66EB, 0x95F0,
+    0x66EC, 0x95F1,
+    0x66ED, 0x95F2,
+    0x66EE, 0x95F3,
+    0x66EF, 0x95F4,
+    0x66F1, 0x95F5,
+    0x66F5, 0x95F6,
+    0x66F6, 0x95F7,
+    0x66F8, 0x95F8,
+    0x66FA, 0x95F9,
+    0x66FB, 0x95FA,
+    0x66FD, 0x95FB,
+    0x6701, 0x95FC,
+    0x6702, 0x95FD,
+    0x6703, 0x95FE,
+    0x6704, 0x9640,
+    0x6705, 0x9641,
+    0x6706, 0x9642,
+    0x6707, 0x9643,
+    0x670C, 0x9644,
+    0x670E, 0x9645,
+    0x670F, 0x9646,
+    0x6711, 0x9647,
+    0x6712, 0x9648,
+    0x6713, 0x9649,
+    0x6716, 0x964A,
+    0x6718, 0x964B,
+    0x6719, 0x964C,
+    0x671A, 0x964D,
+    0x671C, 0x964E,
+    0x671E, 0x964F,
+    0x6720, 0x9650,
+    0x6721, 0x9651,
+    0x6722, 0x9652,
+    0x6723, 0x9653,
+    0x6724, 0x9654,
+    0x6725, 0x9655,
+    0x6727, 0x9656,
+    0x6729, 0x9657,
+    0x672E, 0x9658,
+    0x6730, 0x9659,
+    0x6732, 0x965A,
+    0x6733, 0x965B,
+    0x6736, 0x965C,
+    0x6737, 0x965D,
+    0x6738, 0x965E,
+    0x6739, 0x965F,
+    0x673B, 0x9660,
+    0x673C, 0x9661,
+    0x673E, 0x9662,
+    0x673F, 0x9663,
+    0x6741, 0x9664,
+    0x6744, 0x9665,
+    0x6745, 0x9666,
+    0x6747, 0x9667,
+    0x674A, 0x9668,
+    0x674B, 0x9669,
+    0x674D, 0x966A,
+    0x6752, 0x966B,
+    0x6754, 0x966C,
+    0x6755, 0x966D,
+    0x6757, 0x966E,
+    0x6758, 0x966F,
+    0x6759, 0x9670,
+    0x675A, 0x9671,
+    0x675B, 0x9672,
+    0x675D, 0x9673,
+    0x6762, 0x9674,
+    0x6763, 0x9675,
+    0x6764, 0x9676,
+    0x6766, 0x9677,
+    0x6767, 0x9678,
+    0x676B, 0x9679,
+    0x676C, 0x967A,
+    0x676E, 0x967B,
+    0x6771, 0x967C,
+    0x6774, 0x967D,
+    0x6776, 0x967E,
+    0x6778, 0x9680,
+    0x6779, 0x9681,
+    0x677A, 0x9682,
+    0x677B, 0x9683,
+    0x677D, 0x9684,
+    0x6780, 0x9685,
+    0x6782, 0x9686,
+    0x6783, 0x9687,
+    0x6785, 0x9688,
+    0x6786, 0x9689,
+    0x6788, 0x968A,
+    0x678A, 0x968B,
+    0x678C, 0x968C,
+    0x678D, 0x968D,
+    0x678E, 0x968E,
+    0x678F, 0x968F,
+    0x6791, 0x9690,
+    0x6792, 0x9691,
+    0x6793, 0x9692,
+    0x6794, 0x9693,
+    0x6796, 0x9694,
+    0x6799, 0x9695,
+    0x679B, 0x9696,
+    0x679F, 0x9697,
+    0x67A0, 0x9698,
+    0x67A1, 0x9699,
+    0x67A4, 0x969A,
+    0x67A6, 0x969B,
+    0x67A9, 0x969C,
+    0x67AC, 0x969D,
+    0x67AE, 0x969E,
+    0x67B1, 0x969F,
+    0x67B2, 0x96A0,
+    0x67B4, 0x96A1,
+    0x67B9, 0x96A2,
+    0x67BA, 0x96A3,
+    0x67BB, 0x96A4,
+    0x67BC, 0x96A5,
+    0x67BD, 0x96A6,
+    0x67BE, 0x96A7,
+    0x67BF, 0x96A8,
+    0x67C0, 0x96A9,
+    0x67C2, 0x96AA,
+    0x67C5, 0x96AB,
+    0x67C6, 0x96AC,
+    0x67C7, 0x96AD,
+    0x67C8, 0x96AE,
+    0x67C9, 0x96AF,
+    0x67CA, 0x96B0,
+    0x67CB, 0x96B1,
+    0x67CC, 0x96B2,
+    0x67CD, 0x96B3,
+    0x67CE, 0x96B4,
+    0x67D5, 0x96B5,
+    0x67D6, 0x96B6,
+    0x67D7, 0x96B7,
+    0x67DB, 0x96B8,
+    0x67DF, 0x96B9,
+    0x67E1, 0x96BA,
+    0x67E3, 0x96BB,
+    0x67E4, 0x96BC,
+    0x67E6, 0x96BD,
+    0x67E7, 0x96BE,
+    0x67E8, 0x96BF,
+    0x67EA, 0x96C0,
+    0x67EB, 0x96C1,
+    0x67ED, 0x96C2,
+    0x67EE, 0x96C3,
+    0x67F2, 0x96C4,
+    0x67F5, 0x96C5,
+    0x67F6, 0x96C6,
+    0x67F7, 0x96C7,
+    0x67F8, 0x96C8,
+    0x67F9, 0x96C9,
+    0x67FA, 0x96CA,
+    0x67FB, 0x96CB,
+    0x67FC, 0x96CC,
+    0x67FE, 0x96CD,
+    0x6801, 0x96CE,
+    0x6802, 0x96CF,
+    0x6803, 0x96D0,
+    0x6804, 0x96D1,
+    0x6806, 0x96D2,
+    0x680D, 0x96D3,
+    0x6810, 0x96D4,
+    0x6812, 0x96D5,
+    0x6814, 0x96D6,
+    0x6815, 0x96D7,
+    0x6818, 0x96D8,
+    0x6819, 0x96D9,
+    0x681A, 0x96DA,
+    0x681B, 0x96DB,
+    0x681C, 0x96DC,
+    0x681E, 0x96DD,
+    0x681F, 0x96DE,
+    0x6820, 0x96DF,
+    0x6822, 0x96E0,
+    0x6823, 0x96E1,
+    0x6824, 0x96E2,
+    0x6825, 0x96E3,
+    0x6826, 0x96E4,
+    0x6827, 0x96E5,
+    0x6828, 0x96E6,
+    0x682B, 0x96E7,
+    0x682C, 0x96E8,
+    0x682D, 0x96E9,
+    0x682E, 0x96EA,
+    0x682F, 0x96EB,
+    0x6830, 0x96EC,
+    0x6831, 0x96ED,
+    0x6834, 0x96EE,
+    0x6835, 0x96EF,
+    0x6836, 0x96F0,
+    0x683A, 0x96F1,
+    0x683B, 0x96F2,
+    0x683F, 0x96F3,
+    0x6847, 0x96F4,
+    0x684B, 0x96F5,
+    0x684D, 0x96F6,
+    0x684F, 0x96F7,
+    0x6852, 0x96F8,
+    0x6856, 0x96F9,
+    0x6857, 0x96FA,
+    0x6858, 0x96FB,
+    0x6859, 0x96FC,
+    0x685A, 0x96FD,
+    0x685B, 0x96FE,
+    0x685C, 0x9740,
+    0x685D, 0x9741,
+    0x685E, 0x9742,
+    0x685F, 0x9743,
+    0x686A, 0x9744,
+    0x686C, 0x9745,
+    0x686D, 0x9746,
+    0x686E, 0x9747,
+    0x686F, 0x9748,
+    0x6870, 0x9749,
+    0x6871, 0x974A,
+    0x6872, 0x974B,
+    0x6873, 0x974C,
+    0x6875, 0x974D,
+    0x6878, 0x974E,
+    0x6879, 0x974F,
+    0x687A, 0x9750,
+    0x687B, 0x9751,
+    0x687C, 0x9752,
+    0x687D, 0x9753,
+    0x687E, 0x9754,
+    0x687F, 0x9755,
+    0x6880, 0x9756,
+    0x6882, 0x9757,
+    0x6884, 0x9758,
+    0x6887, 0x9759,
+    0x6888, 0x975A,
+    0x6889, 0x975B,
+    0x688A, 0x975C,
+    0x688B, 0x975D,
+    0x688C, 0x975E,
+    0x688D, 0x975F,
+    0x688E, 0x9760,
+    0x6890, 0x9761,
+    0x6891, 0x9762,
+    0x6892, 0x9763,
+    0x6894, 0x9764,
+    0x6895, 0x9765,
+    0x6896, 0x9766,
+    0x6898, 0x9767,
+    0x6899, 0x9768,
+    0x689A, 0x9769,
+    0x689B, 0x976A,
+    0x689C, 0x976B,
+    0x689D, 0x976C,
+    0x689E, 0x976D,
+    0x689F, 0x976E,
+    0x68A0, 0x976F,
+    0x68A1, 0x9770,
+    0x68A3, 0x9771,
+    0x68A4, 0x9772,
+    0x68A5, 0x9773,
+    0x68A9, 0x9774,
+    0x68AA, 0x9775,
+    0x68AB, 0x9776,
+    0x68AC, 0x9777,
+    0x68AE, 0x9778,
+    0x68B1, 0x9779,
+    0x68B2, 0x977A,
+    0x68B4, 0x977B,
+    0x68B6, 0x977C,
+    0x68B7, 0x977D,
+    0x68B8, 0x977E,
+    0x68B9, 0x9780,
+    0x68BA, 0x9781,
+    0x68BB, 0x9782,
+    0x68BC, 0x9783,
+    0x68BD, 0x9784,
+    0x68BE, 0x9785,
+    0x68BF, 0x9786,
+    0x68C1, 0x9787,
+    0x68C3, 0x9788,
+    0x68C4, 0x9789,
+    0x68C5, 0x978A,
+    0x68C6, 0x978B,
+    0x68C7, 0x978C,
+    0x68C8, 0x978D,
+    0x68CA, 0x978E,
+    0x68CC, 0x978F,
+    0x68CE, 0x9790,
+    0x68CF, 0x9791,
+    0x68D0, 0x9792,
+    0x68D1, 0x9793,
+    0x68D3, 0x9794,
+    0x68D4, 0x9795,
+    0x68D6, 0x9796,
+    0x68D7, 0x9797,
+    0x68D9, 0x9798,
+    0x68DB, 0x9799,
+    0x68DC, 0x979A,
+    0x68DD, 0x979B,
+    0x68DE, 0x979C,
+    0x68DF, 0x979D,
+    0x68E1, 0x979E,
+    0x68E2, 0x979F,
+    0x68E4, 0x97A0,
+    0x68E5, 0x97A1,
+    0x68E6, 0x97A2,
+    0x68E7, 0x97A3,
+    0x68E8, 0x97A4,
+    0x68E9, 0x97A5,
+    0x68EA, 0x97A6,
+    0x68EB, 0x97A7,
+    0x68EC, 0x97A8,
+    0x68ED, 0x97A9,
+    0x68EF, 0x97AA,
+    0x68F2, 0x97AB,
+    0x68F3, 0x97AC,
+    0x68F4, 0x97AD,
+    0x68F6, 0x97AE,
+    0x68F7, 0x97AF,
+    0x68F8, 0x97B0,
+    0x68FB, 0x97B1,
+    0x68FD, 0x97B2,
+    0x68FE, 0x97B3,
+    0x68FF, 0x97B4,
+    0x6900, 0x97B5,
+    0x6902, 0x97B6,
+    0x6903, 0x97B7,
+    0x6904, 0x97B8,
+    0x6906, 0x97B9,
+    0x6907, 0x97BA,
+    0x6908, 0x97BB,
+    0x6909, 0x97BC,
+    0x690A, 0x97BD,
+    0x690C, 0x97BE,
+    0x690F, 0x97BF,
+    0x6911, 0x97C0,
+    0x6913, 0x97C1,
+    0x6914, 0x97C2,
+    0x6915, 0x97C3,
+    0x6916, 0x97C4,
+    0x6917, 0x97C5,
+    0x6918, 0x97C6,
+    0x6919, 0x97C7,
+    0x691A, 0x97C8,
+    0x691B, 0x97C9,
+    0x691C, 0x97CA,
+    0x691D, 0x97CB,
+    0x691E, 0x97CC,
+    0x6921, 0x97CD,
+    0x6922, 0x97CE,
+    0x6923, 0x97CF,
+    0x6925, 0x97D0,
+    0x6926, 0x97D1,
+    0x6927, 0x97D2,
+    0x6928, 0x97D3,
+    0x6929, 0x97D4,
+    0x692A, 0x97D5,
+    0x692B, 0x97D6,
+    0x692C, 0x97D7,
+    0x692E, 0x97D8,
+    0x692F, 0x97D9,
+    0x6931, 0x97DA,
+    0x6932, 0x97DB,
+    0x6933, 0x97DC,
+    0x6935, 0x97DD,
+    0x6936, 0x97DE,
+    0x6937, 0x97DF,
+    0x6938, 0x97E0,
+    0x693A, 0x97E1,
+    0x693B, 0x97E2,
+    0x693C, 0x97E3,
+    0x693E, 0x97E4,
+    0x6940, 0x97E5,
+    0x6941, 0x97E6,
+    0x6943, 0x97E7,
+    0x6944, 0x97E8,
+    0x6945, 0x97E9,
+    0x6946, 0x97EA,
+    0x6947, 0x97EB,
+    0x6948, 0x97EC,
+    0x6949, 0x97ED,
+    0x694A, 0x97EE,
+    0x694B, 0x97EF,
+    0x694C, 0x97F0,
+    0x694D, 0x97F1,
+    0x694E, 0x97F2,
+    0x694F, 0x97F3,
+    0x6950, 0x97F4,
+    0x6951, 0x97F5,
+    0x6952, 0x97F6,
+    0x6953, 0x97F7,
+    0x6955, 0x97F8,
+    0x6956, 0x97F9,
+    0x6958, 0x97FA,
+    0x6959, 0x97FB,
+    0x695B, 0x97FC,
+    0x695C, 0x97FD,
+    0x695F, 0x97FE,
+    0x6961, 0x9840,
+    0x6962, 0x9841,
+    0x6964, 0x9842,
+    0x6965, 0x9843,
+    0x6967, 0x9844,
+    0x6968, 0x9845,
+    0x6969, 0x9846,
+    0x696A, 0x9847,
+    0x696C, 0x9848,
+    0x696D, 0x9849,
+    0x696F, 0x984A,
+    0x6970, 0x984B,
+    0x6972, 0x984C,
+    0x6973, 0x984D,
+    0x6974, 0x984E,
+    0x6975, 0x984F,
+    0x6976, 0x9850,
+    0x697A, 0x9851,
+    0x697B, 0x9852,
+    0x697D, 0x9853,
+    0x697E, 0x9854,
+    0x697F, 0x9855,
+    0x6981, 0x9856,
+    0x6983, 0x9857,
+    0x6985, 0x9858,
+    0x698A, 0x9859,
+    0x698B, 0x985A,
+    0x698C, 0x985B,
+    0x698E, 0x985C,
+    0x698F, 0x985D,
+    0x6990, 0x985E,
+    0x6991, 0x985F,
+    0x6992, 0x9860,
+    0x6993, 0x9861,
+    0x6996, 0x9862,
+    0x6997, 0x9863,
+    0x6999, 0x9864,
+    0x699A, 0x9865,
+    0x699D, 0x9866,
+    0x699E, 0x9867,
+    0x699F, 0x9868,
+    0x69A0, 0x9869,
+    0x69A1, 0x986A,
+    0x69A2, 0x986B,
+    0x69A3, 0x986C,
+    0x69A4, 0x986D,
+    0x69A5, 0x986E,
+    0x69A6, 0x986F,
+    0x69A9, 0x9870,
+    0x69AA, 0x9871,
+    0x69AC, 0x9872,
+    0x69AE, 0x9873,
+    0x69AF, 0x9874,
+    0x69B0, 0x9875,
+    0x69B2, 0x9876,
+    0x69B3, 0x9877,
+    0x69B5, 0x9878,
+    0x69B6, 0x9879,
+    0x69B8, 0x987A,
+    0x69B9, 0x987B,
+    0x69BA, 0x987C,
+    0x69BC, 0x987D,
+    0x69BD, 0x987E,
+    0x69BE, 0x9880,
+    0x69BF, 0x9881,
+    0x69C0, 0x9882,
+    0x69C2, 0x9883,
+    0x69C3, 0x9884,
+    0x69C4, 0x9885,
+    0x69C5, 0x9886,
+    0x69C6, 0x9887,
+    0x69C7, 0x9888,
+    0x69C8, 0x9889,
+    0x69C9, 0x988A,
+    0x69CB, 0x988B,
+    0x69CD, 0x988C,
+    0x69CF, 0x988D,
+    0x69D1, 0x988E,
+    0x69D2, 0x988F,
+    0x69D3, 0x9890,
+    0x69D5, 0x9891,
+    0x69D6, 0x9892,
+    0x69D7, 0x9893,
+    0x69D8, 0x9894,
+    0x69D9, 0x9895,
+    0x69DA, 0x9896,
+    0x69DC, 0x9897,
+    0x69DD, 0x9898,
+    0x69DE, 0x9899,
+    0x69E1, 0x989A,
+    0x69E2, 0x989B,
+    0x69E3, 0x989C,
+    0x69E4, 0x989D,
+    0x69E5, 0x989E,
+    0x69E6, 0x989F,
+    0x69E7, 0x98A0,
+    0x69E8, 0x98A1,
+    0x69E9, 0x98A2,
+    0x69EA, 0x98A3,
+    0x69EB, 0x98A4,
+    0x69EC, 0x98A5,
+    0x69EE, 0x98A6,
+    0x69EF, 0x98A7,
+    0x69F0, 0x98A8,
+    0x69F1, 0x98A9,
+    0x69F3, 0x98AA,
+    0x69F4, 0x98AB,
+    0x69F5, 0x98AC,
+    0x69F6, 0x98AD,
+    0x69F7, 0x98AE,
+    0x69F8, 0x98AF,
+    0x69F9, 0x98B0,
+    0x69FA, 0x98B1,
+    0x69FB, 0x98B2,
+    0x69FC, 0x98B3,
+    0x69FE, 0x98B4,
+    0x6A00, 0x98B5,
+    0x6A01, 0x98B6,
+    0x6A02, 0x98B7,
+    0x6A03, 0x98B8,
+    0x6A04, 0x98B9,
+    0x6A05, 0x98BA,
+    0x6A06, 0x98BB,
+    0x6A07, 0x98BC,
+    0x6A08, 0x98BD,
+    0x6A09, 0x98BE,
+    0x6A0B, 0x98BF,
+    0x6A0C, 0x98C0,
+    0x6A0D, 0x98C1,
+    0x6A0E, 0x98C2,
+    0x6A0F, 0x98C3,
+    0x6A10, 0x98C4,
+    0x6A11, 0x98C5,
+    0x6A12, 0x98C6,
+    0x6A13, 0x98C7,
+    0x6A14, 0x98C8,
+    0x6A15, 0x98C9,
+    0x6A16, 0x98CA,
+    0x6A19, 0x98CB,
+    0x6A1A, 0x98CC,
+    0x6A1B, 0x98CD,
+    0x6A1C, 0x98CE,
+    0x6A1D, 0x98CF,
+    0x6A1E, 0x98D0,
+    0x6A20, 0x98D1,
+    0x6A22, 0x98D2,
+    0x6A23, 0x98D3,
+    0x6A24, 0x98D4,
+    0x6A25, 0x98D5,
+    0x6A26, 0x98D6,
+    0x6A27, 0x98D7,
+    0x6A29, 0x98D8,
+    0x6A2B, 0x98D9,
+    0x6A2C, 0x98DA,
+    0x6A2D, 0x98DB,
+    0x6A2E, 0x98DC,
+    0x6A30, 0x98DD,
+    0x6A32, 0x98DE,
+    0x6A33, 0x98DF,
+    0x6A34, 0x98E0,
+    0x6A36, 0x98E1,
+    0x6A37, 0x98E2,
+    0x6A38, 0x98E3,
+    0x6A39, 0x98E4,
+    0x6A3A, 0x98E5,
+    0x6A3B, 0x98E6,
+    0x6A3C, 0x98E7,
+    0x6A3F, 0x98E8,
+    0x6A40, 0x98E9,
+    0x6A41, 0x98EA,
+    0x6A42, 0x98EB,
+    0x6A43, 0x98EC,
+    0x6A45, 0x98ED,
+    0x6A46, 0x98EE,
+    0x6A48, 0x98EF,
+    0x6A49, 0x98F0,
+    0x6A4A, 0x98F1,
+    0x6A4B, 0x98F2,
+    0x6A4C, 0x98F3,
+    0x6A4D, 0x98F4,
+    0x6A4E, 0x98F5,
+    0x6A4F, 0x98F6,
+    0x6A51, 0x98F7,
+    0x6A52, 0x98F8,
+    0x6A53, 0x98F9,
+    0x6A54, 0x98FA,
+    0x6A55, 0x98FB,
+    0x6A56, 0x98FC,
+    0x6A57, 0x98FD,
+    0x6A5A, 0x98FE,
+    0x6A5C, 0x9940,
+    0x6A5D, 0x9941,
+    0x6A5E, 0x9942,
+    0x6A5F, 0x9943,
+    0x6A60, 0x9944,
+    0x6A62, 0x9945,
+    0x6A63, 0x9946,
+    0x6A64, 0x9947,
+    0x6A66, 0x9948,
+    0x6A67, 0x9949,
+    0x6A68, 0x994A,
+    0x6A69, 0x994B,
+    0x6A6A, 0x994C,
+    0x6A6B, 0x994D,
+    0x6A6C, 0x994E,
+    0x6A6D, 0x994F,
+    0x6A6E, 0x9950,
+    0x6A6F, 0x9951,
+    0x6A70, 0x9952,
+    0x6A72, 0x9953,
+    0x6A73, 0x9954,
+    0x6A74, 0x9955,
+    0x6A75, 0x9956,
+    0x6A76, 0x9957,
+    0x6A77, 0x9958,
+    0x6A78, 0x9959,
+    0x6A7A, 0x995A,
+    0x6A7B, 0x995B,
+    0x6A7D, 0x995C,
+    0x6A7E, 0x995D,
+    0x6A7F, 0x995E,
+    0x6A81, 0x995F,
+    0x6A82, 0x9960,
+    0x6A83, 0x9961,
+    0x6A85, 0x9962,
+    0x6A86, 0x9963,
+    0x6A87, 0x9964,
+    0x6A88, 0x9965,
+    0x6A89, 0x9966,
+    0x6A8A, 0x9967,
+    0x6A8B, 0x9968,
+    0x6A8C, 0x9969,
+    0x6A8D, 0x996A,
+    0x6A8F, 0x996B,
+    0x6A92, 0x996C,
+    0x6A93, 0x996D,
+    0x6A94, 0x996E,
+    0x6A95, 0x996F,
+    0x6A96, 0x9970,
+    0x6A98, 0x9971,
+    0x6A99, 0x9972,
+    0x6A9A, 0x9973,
+    0x6A9B, 0x9974,
+    0x6A9C, 0x9975,
+    0x6A9D, 0x9976,
+    0x6A9E, 0x9977,
+    0x6A9F, 0x9978,
+    0x6AA1, 0x9979,
+    0x6AA2, 0x997A,
+    0x6AA3, 0x997B,
+    0x6AA4, 0x997C,
+    0x6AA5, 0x997D,
+    0x6AA6, 0x997E,
+    0x6AA7, 0x9980,
+    0x6AA8, 0x9981,
+    0x6AAA, 0x9982,
+    0x6AAD, 0x9983,
+    0x6AAE, 0x9984,
+    0x6AAF, 0x9985,
+    0x6AB0, 0x9986,
+    0x6AB1, 0x9987,
+    0x6AB2, 0x9988,
+    0x6AB3, 0x9989,
+    0x6AB4, 0x998A,
+    0x6AB5, 0x998B,
+    0x6AB6, 0x998C,
+    0x6AB7, 0x998D,
+    0x6AB8, 0x998E,
+    0x6AB9, 0x998F,
+    0x6ABA, 0x9990,
+    0x6ABB, 0x9991,
+    0x6ABC, 0x9992,
+    0x6ABD, 0x9993,
+    0x6ABE, 0x9994,
+    0x6ABF, 0x9995,
+    0x6AC0, 0x9996,
+    0x6AC1, 0x9997,
+    0x6AC2, 0x9998,
+    0x6AC3, 0x9999,
+    0x6AC4, 0x999A,
+    0x6AC5, 0x999B,
+    0x6AC6, 0x999C,
+    0x6AC7, 0x999D,
+    0x6AC8, 0x999E,
+    0x6AC9, 0x999F,
+    0x6ACA, 0x99A0,
+    0x6ACB, 0x99A1,
+    0x6ACC, 0x99A2,
+    0x6ACD, 0x99A3,
+    0x6ACE, 0x99A4,
+    0x6ACF, 0x99A5,
+    0x6AD0, 0x99A6,
+    0x6AD1, 0x99A7,
+    0x6AD2, 0x99A8,
+    0x6AD3, 0x99A9,
+    0x6AD4, 0x99AA,
+    0x6AD5, 0x99AB,
+    0x6AD6, 0x99AC,
+    0x6AD7, 0x99AD,
+    0x6AD8, 0x99AE,
+    0x6AD9, 0x99AF,
+    0x6ADA, 0x99B0,
+    0x6ADB, 0x99B1,
+    0x6ADC, 0x99B2,
+    0x6ADD, 0x99B3,
+    0x6ADE, 0x99B4,
+    0x6ADF, 0x99B5,
+    0x6AE0, 0x99B6,
+    0x6AE1, 0x99B7,
+    0x6AE2, 0x99B8,
+    0x6AE3, 0x99B9,
+    0x6AE4, 0x99BA,
+    0x6AE5, 0x99BB,
+    0x6AE6, 0x99BC,
+    0x6AE7, 0x99BD,
+    0x6AE8, 0x99BE,
+    0x6AE9, 0x99BF,
+    0x6AEA, 0x99C0,
+    0x6AEB, 0x99C1,
+    0x6AEC, 0x99C2,
+    0x6AED, 0x99C3,
+    0x6AEE, 0x99C4,
+    0x6AEF, 0x99C5,
+    0x6AF0, 0x99C6,
+    0x6AF1, 0x99C7,
+    0x6AF2, 0x99C8,
+    0x6AF3, 0x99C9,
+    0x6AF4, 0x99CA,
+    0x6AF5, 0x99CB,
+    0x6AF6, 0x99CC,
+    0x6AF7, 0x99CD,
+    0x6AF8, 0x99CE,
+    0x6AF9, 0x99CF,
+    0x6AFA, 0x99D0,
+    0x6AFB, 0x99D1,
+    0x6AFC, 0x99D2,
+    0x6AFD, 0x99D3,
+    0x6AFE, 0x99D4,
+    0x6AFF, 0x99D5,
+    0x6B00, 0x99D6,
+    0x6B01, 0x99D7,
+    0x6B02, 0x99D8,
+    0x6B03, 0x99D9,
+    0x6B04, 0x99DA,
+    0x6B05, 0x99DB,
+    0x6B06, 0x99DC,
+    0x6B07, 0x99DD,
+    0x6B08, 0x99DE,
+    0x6B09, 0x99DF,
+    0x6B0A, 0x99E0,
+    0x6B0B, 0x99E1,
+    0x6B0C, 0x99E2,
+    0x6B0D, 0x99E3,
+    0x6B0E, 0x99E4,
+    0x6B0F, 0x99E5,
+    0x6B10, 0x99E6,
+    0x6B11, 0x99E7,
+    0x6B12, 0x99E8,
+    0x6B13, 0x99E9,
+    0x6B14, 0x99EA,
+    0x6B15, 0x99EB,
+    0x6B16, 0x99EC,
+    0x6B17, 0x99ED,
+    0x6B18, 0x99EE,
+    0x6B19, 0x99EF,
+    0x6B1A, 0x99F0,
+    0x6B1B, 0x99F1,
+    0x6B1C, 0x99F2,
+    0x6B1D, 0x99F3,
+    0x6B1E, 0x99F4,
+    0x6B1F, 0x99F5,
+    0x6B25, 0x99F6,
+    0x6B26, 0x99F7,
+    0x6B28, 0x99F8,
+    0x6B29, 0x99F9,
+    0x6B2A, 0x99FA,
+    0x6B2B, 0x99FB,
+    0x6B2C, 0x99FC,
+    0x6B2D, 0x99FD,
+    0x6B2E, 0x99FE,
+    0x6B2F, 0x9A40,
+    0x6B30, 0x9A41,
+    0x6B31, 0x9A42,
+    0x6B33, 0x9A43,
+    0x6B34, 0x9A44,
+    0x6B35, 0x9A45,
+    0x6B36, 0x9A46,
+    0x6B38, 0x9A47,
+    0x6B3B, 0x9A48,
+    0x6B3C, 0x9A49,
+    0x6B3D, 0x9A4A,
+    0x6B3F, 0x9A4B,
+    0x6B40, 0x9A4C,
+    0x6B41, 0x9A4D,
+    0x6B42, 0x9A4E,
+    0x6B44, 0x9A4F,
+    0x6B45, 0x9A50,
+    0x6B48, 0x9A51,
+    0x6B4A, 0x9A52,
+    0x6B4B, 0x9A53,
+    0x6B4D, 0x9A54,
+    0x6B4E, 0x9A55,
+    0x6B4F, 0x9A56,
+    0x6B50, 0x9A57,
+    0x6B51, 0x9A58,
+    0x6B52, 0x9A59,
+    0x6B53, 0x9A5A,
+    0x6B54, 0x9A5B,
+    0x6B55, 0x9A5C,
+    0x6B56, 0x9A5D,
+    0x6B57, 0x9A5E,
+    0x6B58, 0x9A5F,
+    0x6B5A, 0x9A60,
+    0x6B5B, 0x9A61,
+    0x6B5C, 0x9A62,
+    0x6B5D, 0x9A63,
+    0x6B5E, 0x9A64,
+    0x6B5F, 0x9A65,
+    0x6B60, 0x9A66,
+    0x6B61, 0x9A67,
+    0x6B68, 0x9A68,
+    0x6B69, 0x9A69,
+    0x6B6B, 0x9A6A,
+    0x6B6C, 0x9A6B,
+    0x6B6D, 0x9A6C,
+    0x6B6E, 0x9A6D,
+    0x6B6F, 0x9A6E,
+    0x6B70, 0x9A6F,
+    0x6B71, 0x9A70,
+    0x6B72, 0x9A71,
+    0x6B73, 0x9A72,
+    0x6B74, 0x9A73,
+    0x6B75, 0x9A74,
+    0x6B76, 0x9A75,
+    0x6B77, 0x9A76,
+    0x6B78, 0x9A77,
+    0x6B7A, 0x9A78,
+    0x6B7D, 0x9A79,
+    0x6B7E, 0x9A7A,
+    0x6B7F, 0x9A7B,
+    0x6B80, 0x9A7C,
+    0x6B85, 0x9A7D,
+    0x6B88, 0x9A7E,
+    0x6B8C, 0x9A80,
+    0x6B8E, 0x9A81,
+    0x6B8F, 0x9A82,
+    0x6B90, 0x9A83,
+    0x6B91, 0x9A84,
+    0x6B94, 0x9A85,
+    0x6B95, 0x9A86,
+    0x6B97, 0x9A87,
+    0x6B98, 0x9A88,
+    0x6B99, 0x9A89,
+    0x6B9C, 0x9A8A,
+    0x6B9D, 0x9A8B,
+    0x6B9E, 0x9A8C,
+    0x6B9F, 0x9A8D,
+    0x6BA0, 0x9A8E,
+    0x6BA2, 0x9A8F,
+    0x6BA3, 0x9A90,
+    0x6BA4, 0x9A91,
+    0x6BA5, 0x9A92,
+    0x6BA6, 0x9A93,
+    0x6BA7, 0x9A94,
+    0x6BA8, 0x9A95,
+    0x6BA9, 0x9A96,
+    0x6BAB, 0x9A97,
+    0x6BAC, 0x9A98,
+    0x6BAD, 0x9A99,
+    0x6BAE, 0x9A9A,
+    0x6BAF, 0x9A9B,
+    0x6BB0, 0x9A9C,
+    0x6BB1, 0x9A9D,
+    0x6BB2, 0x9A9E,
+    0x6BB6, 0x9A9F,
+    0x6BB8, 0x9AA0,
+    0x6BB9, 0x9AA1,
+    0x6BBA, 0x9AA2,
+    0x6BBB, 0x9AA3,
+    0x6BBC, 0x9AA4,
+    0x6BBD, 0x9AA5,
+    0x6BBE, 0x9AA6,
+    0x6BC0, 0x9AA7,
+    0x6BC3, 0x9AA8,
+    0x6BC4, 0x9AA9,
+    0x6BC6, 0x9AAA,
+    0x6BC7, 0x9AAB,
+    0x6BC8, 0x9AAC,
+    0x6BC9, 0x9AAD,
+    0x6BCA, 0x9AAE,
+    0x6BCC, 0x9AAF,
+    0x6BCE, 0x9AB0,
+    0x6BD0, 0x9AB1,
+    0x6BD1, 0x9AB2,
+    0x6BD8, 0x9AB3,
+    0x6BDA, 0x9AB4,
+    0x6BDC, 0x9AB5,
+    0x6BDD, 0x9AB6,
+    0x6BDE, 0x9AB7,
+    0x6BDF, 0x9AB8,
+    0x6BE0, 0x9AB9,
+    0x6BE2, 0x9ABA,
+    0x6BE3, 0x9ABB,
+    0x6BE4, 0x9ABC,
+    0x6BE5, 0x9ABD,
+    0x6BE6, 0x9ABE,
+    0x6BE7, 0x9ABF,
+    0x6BE8, 0x9AC0,
+    0x6BE9, 0x9AC1,
+    0x6BEC, 0x9AC2,
+    0x6BED, 0x9AC3,
+    0x6BEE, 0x9AC4,
+    0x6BF0, 0x9AC5,
+    0x6BF1, 0x9AC6,
+    0x6BF2, 0x9AC7,
+    0x6BF4, 0x9AC8,
+    0x6BF6, 0x9AC9,
+    0x6BF7, 0x9ACA,
+    0x6BF8, 0x9ACB,
+    0x6BFA, 0x9ACC,
+    0x6BFB, 0x9ACD,
+    0x6BFC, 0x9ACE,
+    0x6BFE, 0x9ACF,
+    0x6BFF, 0x9AD0,
+    0x6C00, 0x9AD1,
+    0x6C01, 0x9AD2,
+    0x6C02, 0x9AD3,
+    0x6C03, 0x9AD4,
+    0x6C04, 0x9AD5,
+    0x6C08, 0x9AD6,
+    0x6C09, 0x9AD7,
+    0x6C0A, 0x9AD8,
+    0x6C0B, 0x9AD9,
+    0x6C0C, 0x9ADA,
+    0x6C0E, 0x9ADB,
+    0x6C12, 0x9ADC,
+    0x6C17, 0x9ADD,
+    0x6C1C, 0x9ADE,
+    0x6C1D, 0x9ADF,
+    0x6C1E, 0x9AE0,
+    0x6C20, 0x9AE1,
+    0x6C23, 0x9AE2,
+    0x6C25, 0x9AE3,
+    0x6C2B, 0x9AE4,
+    0x6C2C, 0x9AE5,
+    0x6C2D, 0x9AE6,
+    0x6C31, 0x9AE7,
+    0x6C33, 0x9AE8,
+    0x6C36, 0x9AE9,
+    0x6C37, 0x9AEA,
+    0x6C39, 0x9AEB,
+    0x6C3A, 0x9AEC,
+    0x6C3B, 0x9AED,
+    0x6C3C, 0x9AEE,
+    0x6C3E, 0x9AEF,
+    0x6C3F, 0x9AF0,
+    0x6C43, 0x9AF1,
+    0x6C44, 0x9AF2,
+    0x6C45, 0x9AF3,
+    0x6C48, 0x9AF4,
+    0x6C4B, 0x9AF5,
+    0x6C4C, 0x9AF6,
+    0x6C4D, 0x9AF7,
+    0x6C4E, 0x9AF8,
+    0x6C4F, 0x9AF9,
+    0x6C51, 0x9AFA,
+    0x6C52, 0x9AFB,
+    0x6C53, 0x9AFC,
+    0x6C56, 0x9AFD,
+    0x6C58, 0x9AFE,
+    0x6C59, 0x9B40,
+    0x6C5A, 0x9B41,
+    0x6C62, 0x9B42,
+    0x6C63, 0x9B43,
+    0x6C65, 0x9B44,
+    0x6C66, 0x9B45,
+    0x6C67, 0x9B46,
+    0x6C6B, 0x9B47,
+    0x6C6C, 0x9B48,
+    0x6C6D, 0x9B49,
+    0x6C6E, 0x9B4A,
+    0x6C6F, 0x9B4B,
+    0x6C71, 0x9B4C,
+    0x6C73, 0x9B4D,
+    0x6C75, 0x9B4E,
+    0x6C77, 0x9B4F,
+    0x6C78, 0x9B50,
+    0x6C7A, 0x9B51,
+    0x6C7B, 0x9B52,
+    0x6C7C, 0x9B53,
+    0x6C7F, 0x9B54,
+    0x6C80, 0x9B55,
+    0x6C84, 0x9B56,
+    0x6C87, 0x9B57,
+    0x6C8A, 0x9B58,
+    0x6C8B, 0x9B59,
+    0x6C8D, 0x9B5A,
+    0x6C8E, 0x9B5B,
+    0x6C91, 0x9B5C,
+    0x6C92, 0x9B5D,
+    0x6C95, 0x9B5E,
+    0x6C96, 0x9B5F,
+    0x6C97, 0x9B60,
+    0x6C98, 0x9B61,
+    0x6C9A, 0x9B62,
+    0x6C9C, 0x9B63,
+    0x6C9D, 0x9B64,
+    0x6C9E, 0x9B65,
+    0x6CA0, 0x9B66,
+    0x6CA2, 0x9B67,
+    0x6CA8, 0x9B68,
+    0x6CAC, 0x9B69,
+    0x6CAF, 0x9B6A,
+    0x6CB0, 0x9B6B,
+    0x6CB4, 0x9B6C,
+    0x6CB5, 0x9B6D,
+    0x6CB6, 0x9B6E,
+    0x6CB7, 0x9B6F,
+    0x6CBA, 0x9B70,
+    0x6CC0, 0x9B71,
+    0x6CC1, 0x9B72,
+    0x6CC2, 0x9B73,
+    0x6CC3, 0x9B74,
+    0x6CC6, 0x9B75,
+    0x6CC7, 0x9B76,
+    0x6CC8, 0x9B77,
+    0x6CCB, 0x9B78,
+    0x6CCD, 0x9B79,
+    0x6CCE, 0x9B7A,
+    0x6CCF, 0x9B7B,
+    0x6CD1, 0x9B7C,
+    0x6CD2, 0x9B7D,
+    0x6CD8, 0x9B7E,
+    0x6CD9, 0x9B80,
+    0x6CDA, 0x9B81,
+    0x6CDC, 0x9B82,
+    0x6CDD, 0x9B83,
+    0x6CDF, 0x9B84,
+    0x6CE4, 0x9B85,
+    0x6CE6, 0x9B86,
+    0x6CE7, 0x9B87,
+    0x6CE9, 0x9B88,
+    0x6CEC, 0x9B89,
+    0x6CED, 0x9B8A,
+    0x6CF2, 0x9B8B,
+    0x6CF4, 0x9B8C,
+    0x6CF9, 0x9B8D,
+    0x6CFF, 0x9B8E,
+    0x6D00, 0x9B8F,
+    0x6D02, 0x9B90,
+    0x6D03, 0x9B91,
+    0x6D05, 0x9B92,
+    0x6D06, 0x9B93,
+    0x6D08, 0x9B94,
+    0x6D09, 0x9B95,
+    0x6D0A, 0x9B96,
+    0x6D0D, 0x9B97,
+    0x6D0F, 0x9B98,
+    0x6D10, 0x9B99,
+    0x6D11, 0x9B9A,
+    0x6D13, 0x9B9B,
+    0x6D14, 0x9B9C,
+    0x6D15, 0x9B9D,
+    0x6D16, 0x9B9E,
+    0x6D18, 0x9B9F,
+    0x6D1C, 0x9BA0,
+    0x6D1D, 0x9BA1,
+    0x6D1F, 0x9BA2,
+    0x6D20, 0x9BA3,
+    0x6D21, 0x9BA4,
+    0x6D22, 0x9BA5,
+    0x6D23, 0x9BA6,
+    0x6D24, 0x9BA7,
+    0x6D26, 0x9BA8,
+    0x6D28, 0x9BA9,
+    0x6D29, 0x9BAA,
+    0x6D2C, 0x9BAB,
+    0x6D2D, 0x9BAC,
+    0x6D2F, 0x9BAD,
+    0x6D30, 0x9BAE,
+    0x6D34, 0x9BAF,
+    0x6D36, 0x9BB0,
+    0x6D37, 0x9BB1,
+    0x6D38, 0x9BB2,
+    0x6D3A, 0x9BB3,
+    0x6D3F, 0x9BB4,
+    0x6D40, 0x9BB5,
+    0x6D42, 0x9BB6,
+    0x6D44, 0x9BB7,
+    0x6D49, 0x9BB8,
+    0x6D4C, 0x9BB9,
+    0x6D50, 0x9BBA,
+    0x6D55, 0x9BBB,
+    0x6D56, 0x9BBC,
+    0x6D57, 0x9BBD,
+    0x6D58, 0x9BBE,
+    0x6D5B, 0x9BBF,
+    0x6D5D, 0x9BC0,
+    0x6D5F, 0x9BC1,
+    0x6D61, 0x9BC2,
+    0x6D62, 0x9BC3,
+    0x6D64, 0x9BC4,
+    0x6D65, 0x9BC5,
+    0x6D67, 0x9BC6,
+    0x6D68, 0x9BC7,
+    0x6D6B, 0x9BC8,
+    0x6D6C, 0x9BC9,
+    0x6D6D, 0x9BCA,
+    0x6D70, 0x9BCB,
+    0x6D71, 0x9BCC,
+    0x6D72, 0x9BCD,
+    0x6D73, 0x9BCE,
+    0x6D75, 0x9BCF,
+    0x6D76, 0x9BD0,
+    0x6D79, 0x9BD1,
+    0x6D7A, 0x9BD2,
+    0x6D7B, 0x9BD3,
+    0x6D7D, 0x9BD4,
+    0x6D7E, 0x9BD5,
+    0x6D7F, 0x9BD6,
+    0x6D80, 0x9BD7,
+    0x6D81, 0x9BD8,
+    0x6D83, 0x9BD9,
+    0x6D84, 0x9BDA,
+    0x6D86, 0x9BDB,
+    0x6D87, 0x9BDC,
+    0x6D8A, 0x9BDD,
+    0x6D8B, 0x9BDE,
+    0x6D8D, 0x9BDF,
+    0x6D8F, 0x9BE0,
+    0x6D90, 0x9BE1,
+    0x6D92, 0x9BE2,
+    0x6D96, 0x9BE3,
+    0x6D97, 0x9BE4,
+    0x6D98, 0x9BE5,
+    0x6D99, 0x9BE6,
+    0x6D9A, 0x9BE7,
+    0x6D9C, 0x9BE8,
+    0x6DA2, 0x9BE9,
+    0x6DA5, 0x9BEA,
+    0x6DAC, 0x9BEB,
+    0x6DAD, 0x9BEC,
+    0x6DB0, 0x9BED,
+    0x6DB1, 0x9BEE,
+    0x6DB3, 0x9BEF,
+    0x6DB4, 0x9BF0,
+    0x6DB6, 0x9BF1,
+    0x6DB7, 0x9BF2,
+    0x6DB9, 0x9BF3,
+    0x6DBA, 0x9BF4,
+    0x6DBB, 0x9BF5,
+    0x6DBC, 0x9BF6,
+    0x6DBD, 0x9BF7,
+    0x6DBE, 0x9BF8,
+    0x6DC1, 0x9BF9,
+    0x6DC2, 0x9BFA,
+    0x6DC3, 0x9BFB,
+    0x6DC8, 0x9BFC,
+    0x6DC9, 0x9BFD,
+    0x6DCA, 0x9BFE,
+    0x6DCD, 0x9C40,
+    0x6DCE, 0x9C41,
+    0x6DCF, 0x9C42,
+    0x6DD0, 0x9C43,
+    0x6DD2, 0x9C44,
+    0x6DD3, 0x9C45,
+    0x6DD4, 0x9C46,
+    0x6DD5, 0x9C47,
+    0x6DD7, 0x9C48,
+    0x6DDA, 0x9C49,
+    0x6DDB, 0x9C4A,
+    0x6DDC, 0x9C4B,
+    0x6DDF, 0x9C4C,
+    0x6DE2, 0x9C4D,
+    0x6DE3, 0x9C4E,
+    0x6DE5, 0x9C4F,
+    0x6DE7, 0x9C50,
+    0x6DE8, 0x9C51,
+    0x6DE9, 0x9C52,
+    0x6DEA, 0x9C53,
+    0x6DED, 0x9C54,
+    0x6DEF, 0x9C55,
+    0x6DF0, 0x9C56,
+    0x6DF2, 0x9C57,
+    0x6DF4, 0x9C58,
+    0x6DF5, 0x9C59,
+    0x6DF6, 0x9C5A,
+    0x6DF8, 0x9C5B,
+    0x6DFA, 0x9C5C,
+    0x6DFD, 0x9C5D,
+    0x6DFE, 0x9C5E,
+    0x6DFF, 0x9C5F,
+    0x6E00, 0x9C60,
+    0x6E01, 0x9C61,
+    0x6E02, 0x9C62,
+    0x6E03, 0x9C63,
+    0x6E04, 0x9C64,
+    0x6E06, 0x9C65,
+    0x6E07, 0x9C66,
+    0x6E08, 0x9C67,
+    0x6E09, 0x9C68,
+    0x6E0B, 0x9C69,
+    0x6E0F, 0x9C6A,
+    0x6E12, 0x9C6B,
+    0x6E13, 0x9C6C,
+    0x6E15, 0x9C6D,
+    0x6E18, 0x9C6E,
+    0x6E19, 0x9C6F,
+    0x6E1B, 0x9C70,
+    0x6E1C, 0x9C71,
+    0x6E1E, 0x9C72,
+    0x6E1F, 0x9C73,
+    0x6E22, 0x9C74,
+    0x6E26, 0x9C75,
+    0x6E27, 0x9C76,
+    0x6E28, 0x9C77,
+    0x6E2A, 0x9C78,
+    0x6E2C, 0x9C79,
+    0x6E2E, 0x9C7A,
+    0x6E30, 0x9C7B,
+    0x6E31, 0x9C7C,
+    0x6E33, 0x9C7D,
+    0x6E35, 0x9C7E,
+    0x6E36, 0x9C80,
+    0x6E37, 0x9C81,
+    0x6E39, 0x9C82,
+    0x6E3B, 0x9C83,
+    0x6E3C, 0x9C84,
+    0x6E3D, 0x9C85,
+    0x6E3E, 0x9C86,
+    0x6E3F, 0x9C87,
+    0x6E40, 0x9C88,
+    0x6E41, 0x9C89,
+    0x6E42, 0x9C8A,
+    0x6E45, 0x9C8B,
+    0x6E46, 0x9C8C,
+    0x6E47, 0x9C8D,
+    0x6E48, 0x9C8E,
+    0x6E49, 0x9C8F,
+    0x6E4A, 0x9C90,
+    0x6E4B, 0x9C91,
+    0x6E4C, 0x9C92,
+    0x6E4F, 0x9C93,
+    0x6E50, 0x9C94,
+    0x6E51, 0x9C95,
+    0x6E52, 0x9C96,
+    0x6E55, 0x9C97,
+    0x6E57, 0x9C98,
+    0x6E59, 0x9C99,
+    0x6E5A, 0x9C9A,
+    0x6E5C, 0x9C9B,
+    0x6E5D, 0x9C9C,
+    0x6E5E, 0x9C9D,
+    0x6E60, 0x9C9E,
+    0x6E61, 0x9C9F,
+    0x6E62, 0x9CA0,
+    0x6E63, 0x9CA1,
+    0x6E64, 0x9CA2,
+    0x6E65, 0x9CA3,
+    0x6E66, 0x9CA4,
+    0x6E67, 0x9CA5,
+    0x6E68, 0x9CA6,
+    0x6E69, 0x9CA7,
+    0x6E6A, 0x9CA8,
+    0x6E6C, 0x9CA9,
+    0x6E6D, 0x9CAA,
+    0x6E6F, 0x9CAB,
+    0x6E70, 0x9CAC,
+    0x6E71, 0x9CAD,
+    0x6E72, 0x9CAE,
+    0x6E73, 0x9CAF,
+    0x6E74, 0x9CB0,
+    0x6E75, 0x9CB1,
+    0x6E76, 0x9CB2,
+    0x6E77, 0x9CB3,
+    0x6E78, 0x9CB4,
+    0x6E79, 0x9CB5,
+    0x6E7A, 0x9CB6,
+    0x6E7B, 0x9CB7,
+    0x6E7C, 0x9CB8,
+    0x6E7D, 0x9CB9,
+    0x6E80, 0x9CBA,
+    0x6E81, 0x9CBB,
+    0x6E82, 0x9CBC,
+    0x6E84, 0x9CBD,
+    0x6E87, 0x9CBE,
+    0x6E88, 0x9CBF,
+    0x6E8A, 0x9CC0,
+    0x6E8B, 0x9CC1,
+    0x6E8C, 0x9CC2,
+    0x6E8D, 0x9CC3,
+    0x6E8E, 0x9CC4,
+    0x6E91, 0x9CC5,
+    0x6E92, 0x9CC6,
+    0x6E93, 0x9CC7,
+    0x6E94, 0x9CC8,
+    0x6E95, 0x9CC9,
+    0x6E96, 0x9CCA,
+    0x6E97, 0x9CCB,
+    0x6E99, 0x9CCC,
+    0x6E9A, 0x9CCD,
+    0x6E9B, 0x9CCE,
+    0x6E9D, 0x9CCF,
+    0x6E9E, 0x9CD0,
+    0x6EA0, 0x9CD1,
+    0x6EA1, 0x9CD2,
+    0x6EA3, 0x9CD3,
+    0x6EA4, 0x9CD4,
+    0x6EA6, 0x9CD5,
+    0x6EA8, 0x9CD6,
+    0x6EA9, 0x9CD7,
+    0x6EAB, 0x9CD8,
+    0x6EAC, 0x9CD9,
+    0x6EAD, 0x9CDA,
+    0x6EAE, 0x9CDB,
+    0x6EB0, 0x9CDC,
+    0x6EB3, 0x9CDD,
+    0x6EB5, 0x9CDE,
+    0x6EB8, 0x9CDF,
+    0x6EB9, 0x9CE0,
+    0x6EBC, 0x9CE1,
+    0x6EBE, 0x9CE2,
+    0x6EBF, 0x9CE3,
+    0x6EC0, 0x9CE4,
+    0x6EC3, 0x9CE5,
+    0x6EC4, 0x9CE6,
+    0x6EC5, 0x9CE7,
+    0x6EC6, 0x9CE8,
+    0x6EC8, 0x9CE9,
+    0x6EC9, 0x9CEA,
+    0x6ECA, 0x9CEB,
+    0x6ECC, 0x9CEC,
+    0x6ECD, 0x9CED,
+    0x6ECE, 0x9CEE,
+    0x6ED0, 0x9CEF,
+    0x6ED2, 0x9CF0,
+    0x6ED6, 0x9CF1,
+    0x6ED8, 0x9CF2,
+    0x6ED9, 0x9CF3,
+    0x6EDB, 0x9CF4,
+    0x6EDC, 0x9CF5,
+    0x6EDD, 0x9CF6,
+    0x6EE3, 0x9CF7,
+    0x6EE7, 0x9CF8,
+    0x6EEA, 0x9CF9,
+    0x6EEB, 0x9CFA,
+    0x6EEC, 0x9CFB,
+    0x6EED, 0x9CFC,
+    0x6EEE, 0x9CFD,
+    0x6EEF, 0x9CFE,
+    0x6EF0, 0x9D40,
+    0x6EF1, 0x9D41,
+    0x6EF2, 0x9D42,
+    0x6EF3, 0x9D43,
+    0x6EF5, 0x9D44,
+    0x6EF6, 0x9D45,
+    0x6EF7, 0x9D46,
+    0x6EF8, 0x9D47,
+    0x6EFA, 0x9D48,
+    0x6EFB, 0x9D49,
+    0x6EFC, 0x9D4A,
+    0x6EFD, 0x9D4B,
+    0x6EFE, 0x9D4C,
+    0x6EFF, 0x9D4D,
+    0x6F00, 0x9D4E,
+    0x6F01, 0x9D4F,
+    0x6F03, 0x9D50,
+    0x6F04, 0x9D51,
+    0x6F05, 0x9D52,
+    0x6F07, 0x9D53,
+    0x6F08, 0x9D54,
+    0x6F0A, 0x9D55,
+    0x6F0B, 0x9D56,
+    0x6F0C, 0x9D57,
+    0x6F0D, 0x9D58,
+    0x6F0E, 0x9D59,
+    0x6F10, 0x9D5A,
+    0x6F11, 0x9D5B,
+    0x6F12, 0x9D5C,
+    0x6F16, 0x9D5D,
+    0x6F17, 0x9D5E,
+    0x6F18, 0x9D5F,
+    0x6F19, 0x9D60,
+    0x6F1A, 0x9D61,
+    0x6F1B, 0x9D62,
+    0x6F1C, 0x9D63,
+    0x6F1D, 0x9D64,
+    0x6F1E, 0x9D65,
+    0x6F1F, 0x9D66,
+    0x6F21, 0x9D67,
+    0x6F22, 0x9D68,
+    0x6F23, 0x9D69,
+    0x6F25, 0x9D6A,
+    0x6F26, 0x9D6B,
+    0x6F27, 0x9D6C,
+    0x6F28, 0x9D6D,
+    0x6F2C, 0x9D6E,
+    0x6F2E, 0x9D6F,
+    0x6F30, 0x9D70,
+    0x6F32, 0x9D71,
+    0x6F34, 0x9D72,
+    0x6F35, 0x9D73,
+    0x6F37, 0x9D74,
+    0x6F38, 0x9D75,
+    0x6F39, 0x9D76,
+    0x6F3A, 0x9D77,
+    0x6F3B, 0x9D78,
+    0x6F3C, 0x9D79,
+    0x6F3D, 0x9D7A,
+    0x6F3F, 0x9D7B,
+    0x6F40, 0x9D7C,
+    0x6F41, 0x9D7D,
+    0x6F42, 0x9D7E,
+    0x6F43, 0x9D80,
+    0x6F44, 0x9D81,
+    0x6F45, 0x9D82,
+    0x6F48, 0x9D83,
+    0x6F49, 0x9D84,
+    0x6F4A, 0x9D85,
+    0x6F4C, 0x9D86,
+    0x6F4E, 0x9D87,
+    0x6F4F, 0x9D88,
+    0x6F50, 0x9D89,
+    0x6F51, 0x9D8A,
+    0x6F52, 0x9D8B,
+    0x6F53, 0x9D8C,
+    0x6F54, 0x9D8D,
+    0x6F55, 0x9D8E,
+    0x6F56, 0x9D8F,
+    0x6F57, 0x9D90,
+    0x6F59, 0x9D91,
+    0x6F5A, 0x9D92,
+    0x6F5B, 0x9D93,
+    0x6F5D, 0x9D94,
+    0x6F5F, 0x9D95,
+    0x6F60, 0x9D96,
+    0x6F61, 0x9D97,
+    0x6F63, 0x9D98,
+    0x6F64, 0x9D99,
+    0x6F65, 0x9D9A,
+    0x6F67, 0x9D9B,
+    0x6F68, 0x9D9C,
+    0x6F69, 0x9D9D,
+    0x6F6A, 0x9D9E,
+    0x6F6B, 0x9D9F,
+    0x6F6C, 0x9DA0,
+    0x6F6F, 0x9DA1,
+    0x6F70, 0x9DA2,
+    0x6F71, 0x9DA3,
+    0x6F73, 0x9DA4,
+    0x6F75, 0x9DA5,
+    0x6F76, 0x9DA6,
+    0x6F77, 0x9DA7,
+    0x6F79, 0x9DA8,
+    0x6F7B, 0x9DA9,
+    0x6F7D, 0x9DAA,
+    0x6F7E, 0x9DAB,
+    0x6F7F, 0x9DAC,
+    0x6F80, 0x9DAD,
+    0x6F81, 0x9DAE,
+    0x6F82, 0x9DAF,
+    0x6F83, 0x9DB0,
+    0x6F85, 0x9DB1,
+    0x6F86, 0x9DB2,
+    0x6F87, 0x9DB3,
+    0x6F8A, 0x9DB4,
+    0x6F8B, 0x9DB5,
+    0x6F8F, 0x9DB6,
+    0x6F90, 0x9DB7,
+    0x6F91, 0x9DB8,
+    0x6F92, 0x9DB9,
+    0x6F93, 0x9DBA,
+    0x6F94, 0x9DBB,
+    0x6F95, 0x9DBC,
+    0x6F96, 0x9DBD,
+    0x6F97, 0x9DBE,
+    0x6F98, 0x9DBF,
+    0x6F99, 0x9DC0,
+    0x6F9A, 0x9DC1,
+    0x6F9B, 0x9DC2,
+    0x6F9D, 0x9DC3,
+    0x6F9E, 0x9DC4,
+    0x6F9F, 0x9DC5,
+    0x6FA0, 0x9DC6,
+    0x6FA2, 0x9DC7,
+    0x6FA3, 0x9DC8,
+    0x6FA4, 0x9DC9,
+    0x6FA5, 0x9DCA,
+    0x6FA6, 0x9DCB,
+    0x6FA8, 0x9DCC,
+    0x6FA9, 0x9DCD,
+    0x6FAA, 0x9DCE,
+    0x6FAB, 0x9DCF,
+    0x6FAC, 0x9DD0,
+    0x6FAD, 0x9DD1,
+    0x6FAE, 0x9DD2,
+    0x6FAF, 0x9DD3,
+    0x6FB0, 0x9DD4,
+    0x6FB1, 0x9DD5,
+    0x6FB2, 0x9DD6,
+    0x6FB4, 0x9DD7,
+    0x6FB5, 0x9DD8,
+    0x6FB7, 0x9DD9,
+    0x6FB8, 0x9DDA,
+    0x6FBA, 0x9DDB,
+    0x6FBB, 0x9DDC,
+    0x6FBC, 0x9DDD,
+    0x6FBD, 0x9DDE,
+    0x6FBE, 0x9DDF,
+    0x6FBF, 0x9DE0,
+    0x6FC1, 0x9DE1,
+    0x6FC3, 0x9DE2,
+    0x6FC4, 0x9DE3,
+    0x6FC5, 0x9DE4,
+    0x6FC6, 0x9DE5,
+    0x6FC7, 0x9DE6,
+    0x6FC8, 0x9DE7,
+    0x6FCA, 0x9DE8,
+    0x6FCB, 0x9DE9,
+    0x6FCC, 0x9DEA,
+    0x6FCD, 0x9DEB,
+    0x6FCE, 0x9DEC,
+    0x6FCF, 0x9DED,
+    0x6FD0, 0x9DEE,
+    0x6FD3, 0x9DEF,
+    0x6FD4, 0x9DF0,
+    0x6FD5, 0x9DF1,
+    0x6FD6, 0x9DF2,
+    0x6FD7, 0x9DF3,
+    0x6FD8, 0x9DF4,
+    0x6FD9, 0x9DF5,
+    0x6FDA, 0x9DF6,
+    0x6FDB, 0x9DF7,
+    0x6FDC, 0x9DF8,
+    0x6FDD, 0x9DF9,
+    0x6FDF, 0x9DFA,
+    0x6FE2, 0x9DFB,
+    0x6FE3, 0x9DFC,
+    0x6FE4, 0x9DFD,
+    0x6FE5, 0x9DFE,
+    0x6FE6, 0x9E40,
+    0x6FE7, 0x9E41,
+    0x6FE8, 0x9E42,
+    0x6FE9, 0x9E43,
+    0x6FEA, 0x9E44,
+    0x6FEB, 0x9E45,
+    0x6FEC, 0x9E46,
+    0x6FED, 0x9E47,
+    0x6FF0, 0x9E48,
+    0x6FF1, 0x9E49,
+    0x6FF2, 0x9E4A,
+    0x6FF3, 0x9E4B,
+    0x6FF4, 0x9E4C,
+    0x6FF5, 0x9E4D,
+    0x6FF6, 0x9E4E,
+    0x6FF7, 0x9E4F,
+    0x6FF8, 0x9E50,
+    0x6FF9, 0x9E51,
+    0x6FFA, 0x9E52,
+    0x6FFB, 0x9E53,
+    0x6FFC, 0x9E54,
+    0x6FFD, 0x9E55,
+    0x6FFE, 0x9E56,
+    0x6FFF, 0x9E57,
+    0x7000, 0x9E58,
+    0x7001, 0x9E59,
+    0x7002, 0x9E5A,
+    0x7003, 0x9E5B,
+    0x7004, 0x9E5C,
+    0x7005, 0x9E5D,
+    0x7006, 0x9E5E,
+    0x7007, 0x9E5F,
+    0x7008, 0x9E60,
+    0x7009, 0x9E61,
+    0x700A, 0x9E62,
+    0x700B, 0x9E63,
+    0x700C, 0x9E64,
+    0x700D, 0x9E65,
+    0x700E, 0x9E66,
+    0x700F, 0x9E67,
+    0x7010, 0x9E68,
+    0x7012, 0x9E69,
+    0x7013, 0x9E6A,
+    0x7014, 0x9E6B,
+    0x7015, 0x9E6C,
+    0x7016, 0x9E6D,
+    0x7017, 0x9E6E,
+    0x7018, 0x9E6F,
+    0x7019, 0x9E70,
+    0x701C, 0x9E71,
+    0x701D, 0x9E72,
+    0x701E, 0x9E73,
+    0x701F, 0x9E74,
+    0x7020, 0x9E75,
+    0x7021, 0x9E76,
+    0x7022, 0x9E77,
+    0x7024, 0x9E78,
+    0x7025, 0x9E79,
+    0x7026, 0x9E7A,
+    0x7027, 0x9E7B,
+    0x7028, 0x9E7C,
+    0x7029, 0x9E7D,
+    0x702A, 0x9E7E,
+    0x702B, 0x9E80,
+    0x702C, 0x9E81,
+    0x702D, 0x9E82,
+    0x702E, 0x9E83,
+    0x702F, 0x9E84,
+    0x7030, 0x9E85,
+    0x7031, 0x9E86,
+    0x7032, 0x9E87,
+    0x7033, 0x9E88,
+    0x7034, 0x9E89,
+    0x7036, 0x9E8A,
+    0x7037, 0x9E8B,
+    0x7038, 0x9E8C,
+    0x703A, 0x9E8D,
+    0x703B, 0x9E8E,
+    0x703C, 0x9E8F,
+    0x703D, 0x9E90,
+    0x703E, 0x9E91,
+    0x703F, 0x9E92,
+    0x7040, 0x9E93,
+    0x7041, 0x9E94,
+    0x7042, 0x9E95,
+    0x7043, 0x9E96,
+    0x7044, 0x9E97,
+    0x7045, 0x9E98,
+    0x7046, 0x9E99,
+    0x7047, 0x9E9A,
+    0x7048, 0x9E9B,
+    0x7049, 0x9E9C,
+    0x704A, 0x9E9D,
+    0x704B, 0x9E9E,
+    0x704D, 0x9E9F,
+    0x704E, 0x9EA0,
+    0x7050, 0x9EA1,
+    0x7051, 0x9EA2,
+    0x7052, 0x9EA3,
+    0x7053, 0x9EA4,
+    0x7054, 0x9EA5,
+    0x7055, 0x9EA6,
+    0x7056, 0x9EA7,
+    0x7057, 0x9EA8,
+    0x7058, 0x9EA9,
+    0x7059, 0x9EAA,
+    0x705A, 0x9EAB,
+    0x705B, 0x9EAC,
+    0x705C, 0x9EAD,
+    0x705D, 0x9EAE,
+    0x705F, 0x9EAF,
+    0x7060, 0x9EB0,
+    0x7061, 0x9EB1,
+    0x7062, 0x9EB2,
+    0x7063, 0x9EB3,
+    0x7064, 0x9EB4,
+    0x7065, 0x9EB5,
+    0x7066, 0x9EB6,
+    0x7067, 0x9EB7,
+    0x7068, 0x9EB8,
+    0x7069, 0x9EB9,
+    0x706A, 0x9EBA,
+    0x706E, 0x9EBB,
+    0x7071, 0x9EBC,
+    0x7072, 0x9EBD,
+    0x7073, 0x9EBE,
+    0x7074, 0x9EBF,
+    0x7077, 0x9EC0,
+    0x7079, 0x9EC1,
+    0x707A, 0x9EC2,
+    0x707B, 0x9EC3,
+    0x707D, 0x9EC4,
+    0x7081, 0x9EC5,
+    0x7082, 0x9EC6,
+    0x7083, 0x9EC7,
+    0x7084, 0x9EC8,
+    0x7086, 0x9EC9,
+    0x7087, 0x9ECA,
+    0x7088, 0x9ECB,
+    0x708B, 0x9ECC,
+    0x708C, 0x9ECD,
+    0x708D, 0x9ECE,
+    0x708F, 0x9ECF,
+    0x7090, 0x9ED0,
+    0x7091, 0x9ED1,
+    0x7093, 0x9ED2,
+    0x7097, 0x9ED3,
+    0x7098, 0x9ED4,
+    0x709A, 0x9ED5,
+    0x709B, 0x9ED6,
+    0x709E, 0x9ED7,
+    0x709F, 0x9ED8,
+    0x70A0, 0x9ED9,
+    0x70A1, 0x9EDA,
+    0x70A2, 0x9EDB,
+    0x70A3, 0x9EDC,
+    0x70A4, 0x9EDD,
+    0x70A5, 0x9EDE,
+    0x70A6, 0x9EDF,
+    0x70A7, 0x9EE0,
+    0x70A8, 0x9EE1,
+    0x70A9, 0x9EE2,
+    0x70AA, 0x9EE3,
+    0x70B0, 0x9EE4,
+    0x70B2, 0x9EE5,
+    0x70B4, 0x9EE6,
+    0x70B5, 0x9EE7,
+    0x70B6, 0x9EE8,
+    0x70BA, 0x9EE9,
+    0x70BE, 0x9EEA,
+    0x70BF, 0x9EEB,
+    0x70C4, 0x9EEC,
+    0x70C5, 0x9EED,
+    0x70C6, 0x9EEE,
+    0x70C7, 0x9EEF,
+    0x70C9, 0x9EF0,
+    0x70CB, 0x9EF1,
+    0x70CC, 0x9EF2,
+    0x70CD, 0x9EF3,
+    0x70CE, 0x9EF4,
+    0x70CF, 0x9EF5,
+    0x70D0, 0x9EF6,
+    0x70D1, 0x9EF7,
+    0x70D2, 0x9EF8,
+    0x70D3, 0x9EF9,
+    0x70D4, 0x9EFA,
+    0x70D5, 0x9EFB,
+    0x70D6, 0x9EFC,
+    0x70D7, 0x9EFD,
+    0x70DA, 0x9EFE,
+    0x70DC, 0x9F40,
+    0x70DD, 0x9F41,
+    0x70DE, 0x9F42,
+    0x70E0, 0x9F43,
+    0x70E1, 0x9F44,
+    0x70E2, 0x9F45,
+    0x70E3, 0x9F46,
+    0x70E5, 0x9F47,
+    0x70EA, 0x9F48,
+    0x70EE, 0x9F49,
+    0x70F0, 0x9F4A,
+    0x70F1, 0x9F4B,
+    0x70F2, 0x9F4C,
+    0x70F3, 0x9F4D,
+    0x70F4, 0x9F4E,
+    0x70F5, 0x9F4F,
+    0x70F6, 0x9F50,
+    0x70F8, 0x9F51,
+    0x70FA, 0x9F52,
+    0x70FB, 0x9F53,
+    0x70FC, 0x9F54,
+    0x70FE, 0x9F55,
+    0x70FF, 0x9F56,
+    0x7100, 0x9F57,
+    0x7101, 0x9F58,
+    0x7102, 0x9F59,
+    0x7103, 0x9F5A,
+    0x7104, 0x9F5B,
+    0x7105, 0x9F5C,
+    0x7106, 0x9F5D,
+    0x7107, 0x9F5E,
+    0x7108, 0x9F5F,
+    0x710B, 0x9F60,
+    0x710C, 0x9F61,
+    0x710D, 0x9F62,
+    0x710E, 0x9F63,
+    0x710F, 0x9F64,
+    0x7111, 0x9F65,
+    0x7112, 0x9F66,
+    0x7114, 0x9F67,
+    0x7117, 0x9F68,
+    0x711B, 0x9F69,
+    0x711C, 0x9F6A,
+    0x711D, 0x9F6B,
+    0x711E, 0x9F6C,
+    0x711F, 0x9F6D,
+    0x7120, 0x9F6E,
+    0x7121, 0x9F6F,
+    0x7122, 0x9F70,
+    0x7123, 0x9F71,
+    0x7124, 0x9F72,
+    0x7125, 0x9F73,
+    0x7127, 0x9F74,
+    0x7128, 0x9F75,
+    0x7129, 0x9F76,
+    0x712A, 0x9F77,
+    0x712B, 0x9F78,
+    0x712C, 0x9F79,
+    0x712D, 0x9F7A,
+    0x712E, 0x9F7B,
+    0x7132, 0x9F7C,
+    0x7133, 0x9F7D,
+    0x7134, 0x9F7E,
+    0x7135, 0x9F80,
+    0x7137, 0x9F81,
+    0x7138, 0x9F82,
+    0x7139, 0x9F83,
+    0x713A, 0x9F84,
+    0x713B, 0x9F85,
+    0x713C, 0x9F86,
+    0x713D, 0x9F87,
+    0x713E, 0x9F88,
+    0x713F, 0x9F89,
+    0x7140, 0x9F8A,
+    0x7141, 0x9F8B,
+    0x7142, 0x9F8C,
+    0x7143, 0x9F8D,
+    0x7144, 0x9F8E,
+    0x7146, 0x9F8F,
+    0x7147, 0x9F90,
+    0x7148, 0x9F91,
+    0x7149, 0x9F92,
+    0x714B, 0x9F93,
+    0x714D, 0x9F94,
+    0x714F, 0x9F95,
+    0x7150, 0x9F96,
+    0x7151, 0x9F97,
+    0x7152, 0x9F98,
+    0x7153, 0x9F99,
+    0x7154, 0x9F9A,
+    0x7155, 0x9F9B,
+    0x7156, 0x9F9C,
+    0x7157, 0x9F9D,
+    0x7158, 0x9F9E,
+    0x7159, 0x9F9F,
+    0x715A, 0x9FA0,
+    0x715B, 0x9FA1,
+    0x715D, 0x9FA2,
+    0x715F, 0x9FA3,
+    0x7160, 0x9FA4,
+    0x7161, 0x9FA5,
+    0x7162, 0x9FA6,
+    0x7163, 0x9FA7,
+    0x7165, 0x9FA8,
+    0x7169, 0x9FA9,
+    0x716A, 0x9FAA,
+    0x716B, 0x9FAB,
+    0x716C, 0x9FAC,
+    0x716D, 0x9FAD,
+    0x716F, 0x9FAE,
+    0x7170, 0x9FAF,
+    0x7171, 0x9FB0,
+    0x7174, 0x9FB1,
+    0x7175, 0x9FB2,
+    0x7176, 0x9FB3,
+    0x7177, 0x9FB4,
+    0x7179, 0x9FB5,
+    0x717B, 0x9FB6,
+    0x717C, 0x9FB7,
+    0x717E, 0x9FB8,
+    0x717F, 0x9FB9,
+    0x7180, 0x9FBA,
+    0x7181, 0x9FBB,
+    0x7182, 0x9FBC,
+    0x7183, 0x9FBD,
+    0x7185, 0x9FBE,
+    0x7186, 0x9FBF,
+    0x7187, 0x9FC0,
+    0x7188, 0x9FC1,
+    0x7189, 0x9FC2,
+    0x718B, 0x9FC3,
+    0x718C, 0x9FC4,
+    0x718D, 0x9FC5,
+    0x718E, 0x9FC6,
+    0x7190, 0x9FC7,
+    0x7191, 0x9FC8,
+    0x7192, 0x9FC9,
+    0x7193, 0x9FCA,
+    0x7195, 0x9FCB,
+    0x7196, 0x9FCC,
+    0x7197, 0x9FCD,
+    0x719A, 0x9FCE,
+    0x719B, 0x9FCF,
+    0x719C, 0x9FD0,
+    0x719D, 0x9FD1,
+    0x719E, 0x9FD2,
+    0x71A1, 0x9FD3,
+    0x71A2, 0x9FD4,
+    0x71A3, 0x9FD5,
+    0x71A4, 0x9FD6,
+    0x71A5, 0x9FD7,
+    0x71A6, 0x9FD8,
+    0x71A7, 0x9FD9,
+    0x71A9, 0x9FDA,
+    0x71AA, 0x9FDB,
+    0x71AB, 0x9FDC,
+    0x71AD, 0x9FDD,
+    0x71AE, 0x9FDE,
+    0x71AF, 0x9FDF,
+    0x71B0, 0x9FE0,
+    0x71B1, 0x9FE1,
+    0x71B2, 0x9FE2,
+    0x71B4, 0x9FE3,
+    0x71B6, 0x9FE4,
+    0x71B7, 0x9FE5,
+    0x71B8, 0x9FE6,
+    0x71BA, 0x9FE7,
+    0x71BB, 0x9FE8,
+    0x71BC, 0x9FE9,
+    0x71BD, 0x9FEA,
+    0x71BE, 0x9FEB,
+    0x71BF, 0x9FEC,
+    0x71C0, 0x9FED,
+    0x71C1, 0x9FEE,
+    0x71C2, 0x9FEF,
+    0x71C4, 0x9FF0,
+    0x71C5, 0x9FF1,
+    0x71C6, 0x9FF2,
+    0x71C7, 0x9FF3,
+    0x71C8, 0x9FF4,
+    0x71C9, 0x9FF5,
+    0x71CA, 0x9FF6,
+    0x71CB, 0x9FF7,
+    0x71CC, 0x9FF8,
+    0x71CD, 0x9FF9,
+    0x71CF, 0x9FFA,
+    0x71D0, 0x9FFB,
+    0x71D1, 0x9FFC,
+    0x71D2, 0x9FFD,
+    0x71D3, 0x9FFE,
+    0x71D6, 0xA040,
+    0x71D7, 0xA041,
+    0x71D8, 0xA042,
+    0x71D9, 0xA043,
+    0x71DA, 0xA044,
+    0x71DB, 0xA045,
+    0x71DC, 0xA046,
+    0x71DD, 0xA047,
+    0x71DE, 0xA048,
+    0x71DF, 0xA049,
+    0x71E1, 0xA04A,
+    0x71E2, 0xA04B,
+    0x71E3, 0xA04C,
+    0x71E4, 0xA04D,
+    0x71E6, 0xA04E,
+    0x71E8, 0xA04F,
+    0x71E9, 0xA050,
+    0x71EA, 0xA051,
+    0x71EB, 0xA052,
+    0x71EC, 0xA053,
+    0x71ED, 0xA054,
+    0x71EF, 0xA055,
+    0x71F0, 0xA056,
+    0x71F1, 0xA057,
+    0x71F2, 0xA058,
+    0x71F3, 0xA059,
+    0x71F4, 0xA05A,
+    0x71F5, 0xA05B,
+    0x71F6, 0xA05C,
+    0x71F7, 0xA05D,
+    0x71F8, 0xA05E,
+    0x71FA, 0xA05F,
+    0x71FB, 0xA060,
+    0x71FC, 0xA061,
+    0x71FD, 0xA062,
+    0x71FE, 0xA063,
+    0x71FF, 0xA064,
+    0x7200, 0xA065,
+    0x7201, 0xA066,
+    0x7202, 0xA067,
+    0x7203, 0xA068,
+    0x7204, 0xA069,
+    0x7205, 0xA06A,
+    0x7207, 0xA06B,
+    0x7208, 0xA06C,
+    0x7209, 0xA06D,
+    0x720A, 0xA06E,
+    0x720B, 0xA06F,
+    0x720C, 0xA070,
+    0x720D, 0xA071,
+    0x720E, 0xA072,
+    0x720F, 0xA073,
+    0x7210, 0xA074,
+    0x7211, 0xA075,
+    0x7212, 0xA076,
+    0x7213, 0xA077,
+    0x7214, 0xA078,
+    0x7215, 0xA079,
+    0x7216, 0xA07A,
+    0x7217, 0xA07B,
+    0x7218, 0xA07C,
+    0x7219, 0xA07D,
+    0x721A, 0xA07E,
+    0x721B, 0xA080,
+    0x721C, 0xA081,
+    0x721E, 0xA082,
+    0x721F, 0xA083,
+    0x7220, 0xA084,
+    0x7221, 0xA085,
+    0x7222, 0xA086,
+    0x7223, 0xA087,
+    0x7224, 0xA088,
+    0x7225, 0xA089,
+    0x7226, 0xA08A,
+    0x7227, 0xA08B,
+    0x7229, 0xA08C,
+    0x722B, 0xA08D,
+    0x722D, 0xA08E,
+    0x722E, 0xA08F,
+    0x722F, 0xA090,
+    0x7232, 0xA091,
+    0x7233, 0xA092,
+    0x7234, 0xA093,
+    0x723A, 0xA094,
+    0x723C, 0xA095,
+    0x723E, 0xA096,
+    0x7240, 0xA097,
+    0x7241, 0xA098,
+    0x7242, 0xA099,
+    0x7243, 0xA09A,
+    0x7244, 0xA09B,
+    0x7245, 0xA09C,
+    0x7246, 0xA09D,
+    0x7249, 0xA09E,
+    0x724A, 0xA09F,
+    0x724B, 0xA0A0,
+    0x724E, 0xA0A1,
+    0x724F, 0xA0A2,
+    0x7250, 0xA0A3,
+    0x7251, 0xA0A4,
+    0x7253, 0xA0A5,
+    0x7254, 0xA0A6,
+    0x7255, 0xA0A7,
+    0x7257, 0xA0A8,
+    0x7258, 0xA0A9,
+    0x725A, 0xA0AA,
+    0x725C, 0xA0AB,
+    0x725E, 0xA0AC,
+    0x7260, 0xA0AD,
+    0x7263, 0xA0AE,
+    0x7264, 0xA0AF,
+    0x7265, 0xA0B0,
+    0x7268, 0xA0B1,
+    0x726A, 0xA0B2,
+    0x726B, 0xA0B3,
+    0x726C, 0xA0B4,
+    0x726D, 0xA0B5,
+    0x7270, 0xA0B6,
+    0x7271, 0xA0B7,
+    0x7273, 0xA0B8,
+    0x7274, 0xA0B9,
+    0x7276, 0xA0BA,
+    0x7277, 0xA0BB,
+    0x7278, 0xA0BC,
+    0x727B, 0xA0BD,
+    0x727C, 0xA0BE,
+    0x727D, 0xA0BF,
+    0x7282, 0xA0C0,
+    0x7283, 0xA0C1,
+    0x7285, 0xA0C2,
+    0x7286, 0xA0C3,
+    0x7287, 0xA0C4,
+    0x7288, 0xA0C5,
+    0x7289, 0xA0C6,
+    0x728C, 0xA0C7,
+    0x728E, 0xA0C8,
+    0x7290, 0xA0C9,
+    0x7291, 0xA0CA,
+    0x7293, 0xA0CB,
+    0x7294, 0xA0CC,
+    0x7295, 0xA0CD,
+    0x7296, 0xA0CE,
+    0x7297, 0xA0CF,
+    0x7298, 0xA0D0,
+    0x7299, 0xA0D1,
+    0x729A, 0xA0D2,
+    0x729B, 0xA0D3,
+    0x729C, 0xA0D4,
+    0x729D, 0xA0D5,
+    0x729E, 0xA0D6,
+    0x72A0, 0xA0D7,
+    0x72A1, 0xA0D8,
+    0x72A2, 0xA0D9,
+    0x72A3, 0xA0DA,
+    0x72A4, 0xA0DB,
+    0x72A5, 0xA0DC,
+    0x72A6, 0xA0DD,
+    0x72A7, 0xA0DE,
+    0x72A8, 0xA0DF,
+    0x72A9, 0xA0E0,
+    0x72AA, 0xA0E1,
+    0x72AB, 0xA0E2,
+    0x72AE, 0xA0E3,
+    0x72B1, 0xA0E4,
+    0x72B2, 0xA0E5,
+    0x72B3, 0xA0E6,
+    0x72B5, 0xA0E7,
+    0x72BA, 0xA0E8,
+    0x72BB, 0xA0E9,
+    0x72BC, 0xA0EA,
+    0x72BD, 0xA0EB,
+    0x72BE, 0xA0EC,
+    0x72BF, 0xA0ED,
+    0x72C0, 0xA0EE,
+    0x72C5, 0xA0EF,
+    0x72C6, 0xA0F0,
+    0x72C7, 0xA0F1,
+    0x72C9, 0xA0F2,
+    0x72CA, 0xA0F3,
+    0x72CB, 0xA0F4,
+    0x72CC, 0xA0F5,
+    0x72CF, 0xA0F6,
+    0x72D1, 0xA0F7,
+    0x72D3, 0xA0F8,
+    0x72D4, 0xA0F9,
+    0x72D5, 0xA0FA,
+    0x72D6, 0xA0FB,
+    0x72D8, 0xA0FC,
+    0x72DA, 0xA0FD,
+    0x72DB, 0xA0FE,
+    0x72DC, 0xAA40,
+    0x72DD, 0xAA41,
+    0x72DF, 0xAA42,
+    0x72E2, 0xAA43,
+    0x72E3, 0xAA44,
+    0x72E4, 0xAA45,
+    0x72E5, 0xAA46,
+    0x72E6, 0xAA47,
+    0x72E7, 0xAA48,
+    0x72EA, 0xAA49,
+    0x72EB, 0xAA4A,
+    0x72F5, 0xAA4B,
+    0x72F6, 0xAA4C,
+    0x72F9, 0xAA4D,
+    0x72FD, 0xAA4E,
+    0x72FE, 0xAA4F,
+    0x72FF, 0xAA50,
+    0x7300, 0xAA51,
+    0x7302, 0xAA52,
+    0x7304, 0xAA53,
+    0x7305, 0xAA54,
+    0x7306, 0xAA55,
+    0x7307, 0xAA56,
+    0x7308, 0xAA57,
+    0x7309, 0xAA58,
+    0x730B, 0xAA59,
+    0x730C, 0xAA5A,
+    0x730D, 0xAA5B,
+    0x730F, 0xAA5C,
+    0x7310, 0xAA5D,
+    0x7311, 0xAA5E,
+    0x7312, 0xAA5F,
+    0x7314, 0xAA60,
+    0x7318, 0xAA61,
+    0x7319, 0xAA62,
+    0x731A, 0xAA63,
+    0x731F, 0xAA64,
+    0x7320, 0xAA65,
+    0x7323, 0xAA66,
+    0x7324, 0xAA67,
+    0x7326, 0xAA68,
+    0x7327, 0xAA69,
+    0x7328, 0xAA6A,
+    0x732D, 0xAA6B,
+    0x732F, 0xAA6C,
+    0x7330, 0xAA6D,
+    0x7332, 0xAA6E,
+    0x7333, 0xAA6F,
+    0x7335, 0xAA70,
+    0x7336, 0xAA71,
+    0x733A, 0xAA72,
+    0x733B, 0xAA73,
+    0x733C, 0xAA74,
+    0x733D, 0xAA75,
+    0x7340, 0xAA76,
+    0x7341, 0xAA77,
+    0x7342, 0xAA78,
+    0x7343, 0xAA79,
+    0x7344, 0xAA7A,
+    0x7345, 0xAA7B,
+    0x7346, 0xAA7C,
+    0x7347, 0xAA7D,
+    0x7348, 0xAA7E,
+    0x7349, 0xAA80,
+    0x734A, 0xAA81,
+    0x734B, 0xAA82,
+    0x734C, 0xAA83,
+    0x734E, 0xAA84,
+    0x734F, 0xAA85,
+    0x7351, 0xAA86,
+    0x7353, 0xAA87,
+    0x7354, 0xAA88,
+    0x7355, 0xAA89,
+    0x7356, 0xAA8A,
+    0x7358, 0xAA8B,
+    0x7359, 0xAA8C,
+    0x735A, 0xAA8D,
+    0x735B, 0xAA8E,
+    0x735C, 0xAA8F,
+    0x735D, 0xAA90,
+    0x735E, 0xAA91,
+    0x735F, 0xAA92,
+    0x7361, 0xAA93,
+    0x7362, 0xAA94,
+    0x7363, 0xAA95,
+    0x7364, 0xAA96,
+    0x7365, 0xAA97,
+    0x7366, 0xAA98,
+    0x7367, 0xAA99,
+    0x7368, 0xAA9A,
+    0x7369, 0xAA9B,
+    0x736A, 0xAA9C,
+    0x736B, 0xAA9D,
+    0x736E, 0xAA9E,
+    0x7370, 0xAA9F,
+    0x7371, 0xAAA0,
+    0x7372, 0xAB40,
+    0x7373, 0xAB41,
+    0x7374, 0xAB42,
+    0x7375, 0xAB43,
+    0x7376, 0xAB44,
+    0x7377, 0xAB45,
+    0x7378, 0xAB46,
+    0x7379, 0xAB47,
+    0x737A, 0xAB48,
+    0x737B, 0xAB49,
+    0x737C, 0xAB4A,
+    0x737D, 0xAB4B,
+    0x737F, 0xAB4C,
+    0x7380, 0xAB4D,
+    0x7381, 0xAB4E,
+    0x7382, 0xAB4F,
+    0x7383, 0xAB50,
+    0x7385, 0xAB51,
+    0x7386, 0xAB52,
+    0x7388, 0xAB53,
+    0x738A, 0xAB54,
+    0x738C, 0xAB55,
+    0x738D, 0xAB56,
+    0x738F, 0xAB57,
+    0x7390, 0xAB58,
+    0x7392, 0xAB59,
+    0x7393, 0xAB5A,
+    0x7394, 0xAB5B,
+    0x7395, 0xAB5C,
+    0x7397, 0xAB5D,
+    0x7398, 0xAB5E,
+    0x7399, 0xAB5F,
+    0x739A, 0xAB60,
+    0x739C, 0xAB61,
+    0x739D, 0xAB62,
+    0x739E, 0xAB63,
+    0x73A0, 0xAB64,
+    0x73A1, 0xAB65,
+    0x73A3, 0xAB66,
+    0x73A4, 0xAB67,
+    0x73A5, 0xAB68,
+    0x73A6, 0xAB69,
+    0x73A7, 0xAB6A,
+    0x73A8, 0xAB6B,
+    0x73AA, 0xAB6C,
+    0x73AC, 0xAB6D,
+    0x73AD, 0xAB6E,
+    0x73B1, 0xAB6F,
+    0x73B4, 0xAB70,
+    0x73B5, 0xAB71,
+    0x73B6, 0xAB72,
+    0x73B8, 0xAB73,
+    0x73B9, 0xAB74,
+    0x73BC, 0xAB75,
+    0x73BD, 0xAB76,
+    0x73BE, 0xAB77,
+    0x73BF, 0xAB78,
+    0x73C1, 0xAB79,
+    0x73C3, 0xAB7A,
+    0x73C4, 0xAB7B,
+    0x73C5, 0xAB7C,
+    0x73C6, 0xAB7D,
+    0x73C7, 0xAB7E,
+    0x73CB, 0xAB80,
+    0x73CC, 0xAB81,
+    0x73CE, 0xAB82,
+    0x73D2, 0xAB83,
+    0x73D3, 0xAB84,
+    0x73D4, 0xAB85,
+    0x73D5, 0xAB86,
+    0x73D6, 0xAB87,
+    0x73D7, 0xAB88,
+    0x73D8, 0xAB89,
+    0x73DA, 0xAB8A,
+    0x73DB, 0xAB8B,
+    0x73DC, 0xAB8C,
+    0x73DD, 0xAB8D,
+    0x73DF, 0xAB8E,
+    0x73E1, 0xAB8F,
+    0x73E2, 0xAB90,
+    0x73E3, 0xAB91,
+    0x73E4, 0xAB92,
+    0x73E6, 0xAB93,
+    0x73E8, 0xAB94,
+    0x73EA, 0xAB95,
+    0x73EB, 0xAB96,
+    0x73EC, 0xAB97,
+    0x73EE, 0xAB98,
+    0x73EF, 0xAB99,
+    0x73F0, 0xAB9A,
+    0x73F1, 0xAB9B,
+    0x73F3, 0xAB9C,
+    0x73F4, 0xAB9D,
+    0x73F5, 0xAB9E,
+    0x73F6, 0xAB9F,
+    0x73F7, 0xABA0,
+    0x73F8, 0xAC40,
+    0x73F9, 0xAC41,
+    0x73FA, 0xAC42,
+    0x73FB, 0xAC43,
+    0x73FC, 0xAC44,
+    0x73FD, 0xAC45,
+    0x73FE, 0xAC46,
+    0x73FF, 0xAC47,
+    0x7400, 0xAC48,
+    0x7401, 0xAC49,
+    0x7402, 0xAC4A,
+    0x7404, 0xAC4B,
+    0x7407, 0xAC4C,
+    0x7408, 0xAC4D,
+    0x740B, 0xAC4E,
+    0x740C, 0xAC4F,
+    0x740D, 0xAC50,
+    0x740E, 0xAC51,
+    0x7411, 0xAC52,
+    0x7412, 0xAC53,
+    0x7413, 0xAC54,
+    0x7414, 0xAC55,
+    0x7415, 0xAC56,
+    0x7416, 0xAC57,
+    0x7417, 0xAC58,
+    0x7418, 0xAC59,
+    0x7419, 0xAC5A,
+    0x741C, 0xAC5B,
+    0x741D, 0xAC5C,
+    0x741E, 0xAC5D,
+    0x741F, 0xAC5E,
+    0x7420, 0xAC5F,
+    0x7421, 0xAC60,
+    0x7423, 0xAC61,
+    0x7424, 0xAC62,
+    0x7427, 0xAC63,
+    0x7429, 0xAC64,
+    0x742B, 0xAC65,
+    0x742D, 0xAC66,
+    0x742F, 0xAC67,
+    0x7431, 0xAC68,
+    0x7432, 0xAC69,
+    0x7437, 0xAC6A,
+    0x7438, 0xAC6B,
+    0x7439, 0xAC6C,
+    0x743A, 0xAC6D,
+    0x743B, 0xAC6E,
+    0x743D, 0xAC6F,
+    0x743E, 0xAC70,
+    0x743F, 0xAC71,
+    0x7440, 0xAC72,
+    0x7442, 0xAC73,
+    0x7443, 0xAC74,
+    0x7444, 0xAC75,
+    0x7445, 0xAC76,
+    0x7446, 0xAC77,
+    0x7447, 0xAC78,
+    0x7448, 0xAC79,
+    0x7449, 0xAC7A,
+    0x744A, 0xAC7B,
+    0x744B, 0xAC7C,
+    0x744C, 0xAC7D,
+    0x744D, 0xAC7E,
+    0x744E, 0xAC80,
+    0x744F, 0xAC81,
+    0x7450, 0xAC82,
+    0x7451, 0xAC83,
+    0x7452, 0xAC84,
+    0x7453, 0xAC85,
+    0x7454, 0xAC86,
+    0x7456, 0xAC87,
+    0x7458, 0xAC88,
+    0x745D, 0xAC89,
+    0x7460, 0xAC8A,
+    0x7461, 0xAC8B,
+    0x7462, 0xAC8C,
+    0x7463, 0xAC8D,
+    0x7464, 0xAC8E,
+    0x7465, 0xAC8F,
+    0x7466, 0xAC90,
+    0x7467, 0xAC91,
+    0x7468, 0xAC92,
+    0x7469, 0xAC93,
+    0x746A, 0xAC94,
+    0x746B, 0xAC95,
+    0x746C, 0xAC96,
+    0x746E, 0xAC97,
+    0x746F, 0xAC98,
+    0x7471, 0xAC99,
+    0x7472, 0xAC9A,
+    0x7473, 0xAC9B,
+    0x7474, 0xAC9C,
+    0x7475, 0xAC9D,
+    0x7478, 0xAC9E,
+    0x7479, 0xAC9F,
+    0x747A, 0xACA0,
+    0x747B, 0xAD40,
+    0x747C, 0xAD41,
+    0x747D, 0xAD42,
+    0x747F, 0xAD43,
+    0x7482, 0xAD44,
+    0x7484, 0xAD45,
+    0x7485, 0xAD46,
+    0x7486, 0xAD47,
+    0x7488, 0xAD48,
+    0x7489, 0xAD49,
+    0x748A, 0xAD4A,
+    0x748C, 0xAD4B,
+    0x748D, 0xAD4C,
+    0x748F, 0xAD4D,
+    0x7491, 0xAD4E,
+    0x7492, 0xAD4F,
+    0x7493, 0xAD50,
+    0x7494, 0xAD51,
+    0x7495, 0xAD52,
+    0x7496, 0xAD53,
+    0x7497, 0xAD54,
+    0x7498, 0xAD55,
+    0x7499, 0xAD56,
+    0x749A, 0xAD57,
+    0x749B, 0xAD58,
+    0x749D, 0xAD59,
+    0x749F, 0xAD5A,
+    0x74A0, 0xAD5B,
+    0x74A1, 0xAD5C,
+    0x74A2, 0xAD5D,
+    0x74A3, 0xAD5E,
+    0x74A4, 0xAD5F,
+    0x74A5, 0xAD60,
+    0x74A6, 0xAD61,
+    0x74AA, 0xAD62,
+    0x74AB, 0xAD63,
+    0x74AC, 0xAD64,
+    0x74AD, 0xAD65,
+    0x74AE, 0xAD66,
+    0x74AF, 0xAD67,
+    0x74B0, 0xAD68,
+    0x74B1, 0xAD69,
+    0x74B2, 0xAD6A,
+    0x74B3, 0xAD6B,
+    0x74B4, 0xAD6C,
+    0x74B5, 0xAD6D,
+    0x74B6, 0xAD6E,
+    0x74B7, 0xAD6F,
+    0x74B8, 0xAD70,
+    0x74B9, 0xAD71,
+    0x74BB, 0xAD72,
+    0x74BC, 0xAD73,
+    0x74BD, 0xAD74,
+    0x74BE, 0xAD75,
+    0x74BF, 0xAD76,
+    0x74C0, 0xAD77,
+    0x74C1, 0xAD78,
+    0x74C2, 0xAD79,
+    0x74C3, 0xAD7A,
+    0x74C4, 0xAD7B,
+    0x74C5, 0xAD7C,
+    0x74C6, 0xAD7D,
+    0x74C7, 0xAD7E,
+    0x74C8, 0xAD80,
+    0x74C9, 0xAD81,
+    0x74CA, 0xAD82,
+    0x74CB, 0xAD83,
+    0x74CC, 0xAD84,
+    0x74CD, 0xAD85,
+    0x74CE, 0xAD86,
+    0x74CF, 0xAD87,
+    0x74D0, 0xAD88,
+    0x74D1, 0xAD89,
+    0x74D3, 0xAD8A,
+    0x74D4, 0xAD8B,
+    0x74D5, 0xAD8C,
+    0x74D6, 0xAD8D,
+    0x74D7, 0xAD8E,
+    0x74D8, 0xAD8F,
+    0x74D9, 0xAD90,
+    0x74DA, 0xAD91,
+    0x74DB, 0xAD92,
+    0x74DD, 0xAD93,
+    0x74DF, 0xAD94,
+    0x74E1, 0xAD95,
+    0x74E5, 0xAD96,
+    0x74E7, 0xAD97,
+    0x74E8, 0xAD98,
+    0x74E9, 0xAD99,
+    0x74EA, 0xAD9A,
+    0x74EB, 0xAD9B,
+    0x74EC, 0xAD9C,
+    0x74ED, 0xAD9D,
+    0x74F0, 0xAD9E,
+    0x74F1, 0xAD9F,
+    0x74F2, 0xADA0,
+    0x74F3, 0xAE40,
+    0x74F5, 0xAE41,
+    0x74F8, 0xAE42,
+    0x74F9, 0xAE43,
+    0x74FA, 0xAE44,
+    0x74FB, 0xAE45,
+    0x74FC, 0xAE46,
+    0x74FD, 0xAE47,
+    0x74FE, 0xAE48,
+    0x7500, 0xAE49,
+    0x7501, 0xAE4A,
+    0x7502, 0xAE4B,
+    0x7503, 0xAE4C,
+    0x7505, 0xAE4D,
+    0x7506, 0xAE4E,
+    0x7507, 0xAE4F,
+    0x7508, 0xAE50,
+    0x7509, 0xAE51,
+    0x750A, 0xAE52,
+    0x750B, 0xAE53,
+    0x750C, 0xAE54,
+    0x750E, 0xAE55,
+    0x7510, 0xAE56,
+    0x7512, 0xAE57,
+    0x7514, 0xAE58,
+    0x7515, 0xAE59,
+    0x7516, 0xAE5A,
+    0x7517, 0xAE5B,
+    0x751B, 0xAE5C,
+    0x751D, 0xAE5D,
+    0x751E, 0xAE5E,
+    0x7520, 0xAE5F,
+    0x7521, 0xAE60,
+    0x7522, 0xAE61,
+    0x7523, 0xAE62,
+    0x7524, 0xAE63,
+    0x7526, 0xAE64,
+    0x7527, 0xAE65,
+    0x752A, 0xAE66,
+    0x752E, 0xAE67,
+    0x7534, 0xAE68,
+    0x7536, 0xAE69,
+    0x7539, 0xAE6A,
+    0x753C, 0xAE6B,
+    0x753D, 0xAE6C,
+    0x753F, 0xAE6D,
+    0x7541, 0xAE6E,
+    0x7542, 0xAE6F,
+    0x7543, 0xAE70,
+    0x7544, 0xAE71,
+    0x7546, 0xAE72,
+    0x7547, 0xAE73,
+    0x7549, 0xAE74,
+    0x754A, 0xAE75,
+    0x754D, 0xAE76,
+    0x7550, 0xAE77,
+    0x7551, 0xAE78,
+    0x7552, 0xAE79,
+    0x7553, 0xAE7A,
+    0x7555, 0xAE7B,
+    0x7556, 0xAE7C,
+    0x7557, 0xAE7D,
+    0x7558, 0xAE7E,
+    0x755D, 0xAE80,
+    0x755E, 0xAE81,
+    0x755F, 0xAE82,
+    0x7560, 0xAE83,
+    0x7561, 0xAE84,
+    0x7562, 0xAE85,
+    0x7563, 0xAE86,
+    0x7564, 0xAE87,
+    0x7567, 0xAE88,
+    0x7568, 0xAE89,
+    0x7569, 0xAE8A,
+    0x756B, 0xAE8B,
+    0x756C, 0xAE8C,
+    0x756D, 0xAE8D,
+    0x756E, 0xAE8E,
+    0x756F, 0xAE8F,
+    0x7570, 0xAE90,
+    0x7571, 0xAE91,
+    0x7573, 0xAE92,
+    0x7575, 0xAE93,
+    0x7576, 0xAE94,
+    0x7577, 0xAE95,
+    0x757A, 0xAE96,
+    0x757B, 0xAE97,
+    0x757C, 0xAE98,
+    0x757D, 0xAE99,
+    0x757E, 0xAE9A,
+    0x7580, 0xAE9B,
+    0x7581, 0xAE9C,
+    0x7582, 0xAE9D,
+    0x7584, 0xAE9E,
+    0x7585, 0xAE9F,
+    0x7587, 0xAEA0,
+    0x7588, 0xAF40,
+    0x7589, 0xAF41,
+    0x758A, 0xAF42,
+    0x758C, 0xAF43,
+    0x758D, 0xAF44,
+    0x758E, 0xAF45,
+    0x7590, 0xAF46,
+    0x7593, 0xAF47,
+    0x7595, 0xAF48,
+    0x7598, 0xAF49,
+    0x759B, 0xAF4A,
+    0x759C, 0xAF4B,
+    0x759E, 0xAF4C,
+    0x75A2, 0xAF4D,
+    0x75A6, 0xAF4E,
+    0x75A7, 0xAF4F,
+    0x75A8, 0xAF50,
+    0x75A9, 0xAF51,
+    0x75AA, 0xAF52,
+    0x75AD, 0xAF53,
+    0x75B6, 0xAF54,
+    0x75B7, 0xAF55,
+    0x75BA, 0xAF56,
+    0x75BB, 0xAF57,
+    0x75BF, 0xAF58,
+    0x75C0, 0xAF59,
+    0x75C1, 0xAF5A,
+    0x75C6, 0xAF5B,
+    0x75CB, 0xAF5C,
+    0x75CC, 0xAF5D,
+    0x75CE, 0xAF5E,
+    0x75CF, 0xAF5F,
+    0x75D0, 0xAF60,
+    0x75D1, 0xAF61,
+    0x75D3, 0xAF62,
+    0x75D7, 0xAF63,
+    0x75D9, 0xAF64,
+    0x75DA, 0xAF65,
+    0x75DC, 0xAF66,
+    0x75DD, 0xAF67,
+    0x75DF, 0xAF68,
+    0x75E0, 0xAF69,
+    0x75E1, 0xAF6A,
+    0x75E5, 0xAF6B,
+    0x75E9, 0xAF6C,
+    0x75EC, 0xAF6D,
+    0x75ED, 0xAF6E,
+    0x75EE, 0xAF6F,
+    0x75EF, 0xAF70,
+    0x75F2, 0xAF71,
+    0x75F3, 0xAF72,
+    0x75F5, 0xAF73,
+    0x75F6, 0xAF74,
+    0x75F7, 0xAF75,
+    0x75F8, 0xAF76,
+    0x75FA, 0xAF77,
+    0x75FB, 0xAF78,
+    0x75FD, 0xAF79,
+    0x75FE, 0xAF7A,
+    0x7602, 0xAF7B,
+    0x7604, 0xAF7C,
+    0x7606, 0xAF7D,
+    0x7607, 0xAF7E,
+    0x7608, 0xAF80,
+    0x7609, 0xAF81,
+    0x760B, 0xAF82,
+    0x760D, 0xAF83,
+    0x760E, 0xAF84,
+    0x760F, 0xAF85,
+    0x7611, 0xAF86,
+    0x7612, 0xAF87,
+    0x7613, 0xAF88,
+    0x7614, 0xAF89,
+    0x7616, 0xAF8A,
+    0x761A, 0xAF8B,
+    0x761C, 0xAF8C,
+    0x761D, 0xAF8D,
+    0x761E, 0xAF8E,
+    0x7621, 0xAF8F,
+    0x7623, 0xAF90,
+    0x7627, 0xAF91,
+    0x7628, 0xAF92,
+    0x762C, 0xAF93,
+    0x762E, 0xAF94,
+    0x762F, 0xAF95,
+    0x7631, 0xAF96,
+    0x7632, 0xAF97,
+    0x7636, 0xAF98,
+    0x7637, 0xAF99,
+    0x7639, 0xAF9A,
+    0x763A, 0xAF9B,
+    0x763B, 0xAF9C,
+    0x763D, 0xAF9D,
+    0x7641, 0xAF9E,
+    0x7642, 0xAF9F,
+    0x7644, 0xAFA0,
+    0x7645, 0xB040,
+    0x7646, 0xB041,
+    0x7647, 0xB042,
+    0x7648, 0xB043,
+    0x7649, 0xB044,
+    0x764A, 0xB045,
+    0x764B, 0xB046,
+    0x764E, 0xB047,
+    0x764F, 0xB048,
+    0x7650, 0xB049,
+    0x7651, 0xB04A,
+    0x7652, 0xB04B,
+    0x7653, 0xB04C,
+    0x7655, 0xB04D,
+    0x7657, 0xB04E,
+    0x7658, 0xB04F,
+    0x7659, 0xB050,
+    0x765A, 0xB051,
+    0x765B, 0xB052,
+    0x765D, 0xB053,
+    0x765F, 0xB054,
+    0x7660, 0xB055,
+    0x7661, 0xB056,
+    0x7662, 0xB057,
+    0x7664, 0xB058,
+    0x7665, 0xB059,
+    0x7666, 0xB05A,
+    0x7667, 0xB05B,
+    0x7668, 0xB05C,
+    0x7669, 0xB05D,
+    0x766A, 0xB05E,
+    0x766C, 0xB05F,
+    0x766D, 0xB060,
+    0x766E, 0xB061,
+    0x7670, 0xB062,
+    0x7671, 0xB063,
+    0x7672, 0xB064,
+    0x7673, 0xB065,
+    0x7674, 0xB066,
+    0x7675, 0xB067,
+    0x7676, 0xB068,
+    0x7677, 0xB069,
+    0x7679, 0xB06A,
+    0x767A, 0xB06B,
+    0x767C, 0xB06C,
+    0x767F, 0xB06D,
+    0x7680, 0xB06E,
+    0x7681, 0xB06F,
+    0x7683, 0xB070,
+    0x7685, 0xB071,
+    0x7689, 0xB072,
+    0x768A, 0xB073,
+    0x768C, 0xB074,
+    0x768D, 0xB075,
+    0x768F, 0xB076,
+    0x7690, 0xB077,
+    0x7692, 0xB078,
+    0x7694, 0xB079,
+    0x7695, 0xB07A,
+    0x7697, 0xB07B,
+    0x7698, 0xB07C,
+    0x769A, 0xB07D,
+    0x769B, 0xB07E,
+    0x769C, 0xB080,
+    0x769D, 0xB081,
+    0x769E, 0xB082,
+    0x769F, 0xB083,
+    0x76A0, 0xB084,
+    0x76A1, 0xB085,
+    0x76A2, 0xB086,
+    0x76A3, 0xB087,
+    0x76A5, 0xB088,
+    0x76A6, 0xB089,
+    0x76A7, 0xB08A,
+    0x76A8, 0xB08B,
+    0x76A9, 0xB08C,
+    0x76AA, 0xB08D,
+    0x76AB, 0xB08E,
+    0x76AC, 0xB08F,
+    0x76AD, 0xB090,
+    0x76AF, 0xB091,
+    0x76B0, 0xB092,
+    0x76B3, 0xB093,
+    0x76B5, 0xB094,
+    0x76B6, 0xB095,
+    0x76B7, 0xB096,
+    0x76B8, 0xB097,
+    0x76B9, 0xB098,
+    0x76BA, 0xB099,
+    0x76BB, 0xB09A,
+    0x76BC, 0xB09B,
+    0x76BD, 0xB09C,
+    0x76BE, 0xB09D,
+    0x76C0, 0xB09E,
+    0x76C1, 0xB09F,
+    0x76C3, 0xB0A0,
+    0x76C4, 0xB140,
+    0x76C7, 0xB141,
+    0x76C9, 0xB142,
+    0x76CB, 0xB143,
+    0x76CC, 0xB144,
+    0x76D3, 0xB145,
+    0x76D5, 0xB146,
+    0x76D9, 0xB147,
+    0x76DA, 0xB148,
+    0x76DC, 0xB149,
+    0x76DD, 0xB14A,
+    0x76DE, 0xB14B,
+    0x76E0, 0xB14C,
+    0x76E1, 0xB14D,
+    0x76E2, 0xB14E,
+    0x76E3, 0xB14F,
+    0x76E4, 0xB150,
+    0x76E6, 0xB151,
+    0x76E7, 0xB152,
+    0x76E8, 0xB153,
+    0x76E9, 0xB154,
+    0x76EA, 0xB155,
+    0x76EB, 0xB156,
+    0x76EC, 0xB157,
+    0x76ED, 0xB158,
+    0x76F0, 0xB159,
+    0x76F3, 0xB15A,
+    0x76F5, 0xB15B,
+    0x76F6, 0xB15C,
+    0x76F7, 0xB15D,
+    0x76FA, 0xB15E,
+    0x76FB, 0xB15F,
+    0x76FD, 0xB160,
+    0x76FF, 0xB161,
+    0x7700, 0xB162,
+    0x7702, 0xB163,
+    0x7703, 0xB164,
+    0x7705, 0xB165,
+    0x7706, 0xB166,
+    0x770A, 0xB167,
+    0x770C, 0xB168,
+    0x770E, 0xB169,
+    0x770F, 0xB16A,
+    0x7710, 0xB16B,
+    0x7711, 0xB16C,
+    0x7712, 0xB16D,
+    0x7713, 0xB16E,
+    0x7714, 0xB16F,
+    0x7715, 0xB170,
+    0x7716, 0xB171,
+    0x7717, 0xB172,
+    0x7718, 0xB173,
+    0x771B, 0xB174,
+    0x771C, 0xB175,
+    0x771D, 0xB176,
+    0x771E, 0xB177,
+    0x7721, 0xB178,
+    0x7723, 0xB179,
+    0x7724, 0xB17A,
+    0x7725, 0xB17B,
+    0x7727, 0xB17C,
+    0x772A, 0xB17D,
+    0x772B, 0xB17E,
+    0x772C, 0xB180,
+    0x772E, 0xB181,
+    0x7730, 0xB182,
+    0x7731, 0xB183,
+    0x7732, 0xB184,
+    0x7733, 0xB185,
+    0x7734, 0xB186,
+    0x7739, 0xB187,
+    0x773B, 0xB188,
+    0x773D, 0xB189,
+    0x773E, 0xB18A,
+    0x773F, 0xB18B,
+    0x7742, 0xB18C,
+    0x7744, 0xB18D,
+    0x7745, 0xB18E,
+    0x7746, 0xB18F,
+    0x7748, 0xB190,
+    0x7749, 0xB191,
+    0x774A, 0xB192,
+    0x774B, 0xB193,
+    0x774C, 0xB194,
+    0x774D, 0xB195,
+    0x774E, 0xB196,
+    0x774F, 0xB197,
+    0x7752, 0xB198,
+    0x7753, 0xB199,
+    0x7754, 0xB19A,
+    0x7755, 0xB19B,
+    0x7756, 0xB19C,
+    0x7757, 0xB19D,
+    0x7758, 0xB19E,
+    0x7759, 0xB19F,
+    0x775C, 0xB1A0,
+    0x775D, 0xB240,
+    0x775E, 0xB241,
+    0x775F, 0xB242,
+    0x7760, 0xB243,
+    0x7764, 0xB244,
+    0x7767, 0xB245,
+    0x7769, 0xB246,
+    0x776A, 0xB247,
+    0x776D, 0xB248,
+    0x776E, 0xB249,
+    0x776F, 0xB24A,
+    0x7770, 0xB24B,
+    0x7771, 0xB24C,
+    0x7772, 0xB24D,
+    0x7773, 0xB24E,
+    0x7774, 0xB24F,
+    0x7775, 0xB250,
+    0x7776, 0xB251,
+    0x7777, 0xB252,
+    0x7778, 0xB253,
+    0x777A, 0xB254,
+    0x777B, 0xB255,
+    0x777C, 0xB256,
+    0x7781, 0xB257,
+    0x7782, 0xB258,
+    0x7783, 0xB259,
+    0x7786, 0xB25A,
+    0x7787, 0xB25B,
+    0x7788, 0xB25C,
+    0x7789, 0xB25D,
+    0x778A, 0xB25E,
+    0x778B, 0xB25F,
+    0x778F, 0xB260,
+    0x7790, 0xB261,
+    0x7793, 0xB262,
+    0x7794, 0xB263,
+    0x7795, 0xB264,
+    0x7796, 0xB265,
+    0x7797, 0xB266,
+    0x7798, 0xB267,
+    0x7799, 0xB268,
+    0x779A, 0xB269,
+    0x779B, 0xB26A,
+    0x779C, 0xB26B,
+    0x779D, 0xB26C,
+    0x779E, 0xB26D,
+    0x77A1, 0xB26E,
+    0x77A3, 0xB26F,
+    0x77A4, 0xB270,
+    0x77A6, 0xB271,
+    0x77A8, 0xB272,
+    0x77AB, 0xB273,
+    0x77AD, 0xB274,
+    0x77AE, 0xB275,
+    0x77AF, 0xB276,
+    0x77B1, 0xB277,
+    0x77B2, 0xB278,
+    0x77B4, 0xB279,
+    0x77B6, 0xB27A,
+    0x77B7, 0xB27B,
+    0x77B8, 0xB27C,
+    0x77B9, 0xB27D,
+    0x77BA, 0xB27E,
+    0x77BC, 0xB280,
+    0x77BE, 0xB281,
+    0x77C0, 0xB282,
+    0x77C1, 0xB283,
+    0x77C2, 0xB284,
+    0x77C3, 0xB285,
+    0x77C4, 0xB286,
+    0x77C5, 0xB287,
+    0x77C6, 0xB288,
+    0x77C7, 0xB289,
+    0x77C8, 0xB28A,
+    0x77C9, 0xB28B,
+    0x77CA, 0xB28C,
+    0x77CB, 0xB28D,
+    0x77CC, 0xB28E,
+    0x77CE, 0xB28F,
+    0x77CF, 0xB290,
+    0x77D0, 0xB291,
+    0x77D1, 0xB292,
+    0x77D2, 0xB293,
+    0x77D3, 0xB294,
+    0x77D4, 0xB295,
+    0x77D5, 0xB296,
+    0x77D6, 0xB297,
+    0x77D8, 0xB298,
+    0x77D9, 0xB299,
+    0x77DA, 0xB29A,
+    0x77DD, 0xB29B,
+    0x77DE, 0xB29C,
+    0x77DF, 0xB29D,
+    0x77E0, 0xB29E,
+    0x77E1, 0xB29F,
+    0x77E4, 0xB2A0,
+    0x77E6, 0xB340,
+    0x77E8, 0xB341,
+    0x77EA, 0xB342,
+    0x77EF, 0xB343,
+    0x77F0, 0xB344,
+    0x77F1, 0xB345,
+    0x77F2, 0xB346,
+    0x77F4, 0xB347,
+    0x77F5, 0xB348,
+    0x77F7, 0xB349,
+    0x77F9, 0xB34A,
+    0x77FA, 0xB34B,
+    0x77FB, 0xB34C,
+    0x77FC, 0xB34D,
+    0x7803, 0xB34E,
+    0x7804, 0xB34F,
+    0x7805, 0xB350,
+    0x7806, 0xB351,
+    0x7807, 0xB352,
+    0x7808, 0xB353,
+    0x780A, 0xB354,
+    0x780B, 0xB355,
+    0x780E, 0xB356,
+    0x780F, 0xB357,
+    0x7810, 0xB358,
+    0x7813, 0xB359,
+    0x7815, 0xB35A,
+    0x7819, 0xB35B,
+    0x781B, 0xB35C,
+    0x781E, 0xB35D,
+    0x7820, 0xB35E,
+    0x7821, 0xB35F,
+    0x7822, 0xB360,
+    0x7824, 0xB361,
+    0x7828, 0xB362,
+    0x782A, 0xB363,
+    0x782B, 0xB364,
+    0x782E, 0xB365,
+    0x782F, 0xB366,
+    0x7831, 0xB367,
+    0x7832, 0xB368,
+    0x7833, 0xB369,
+    0x7835, 0xB36A,
+    0x7836, 0xB36B,
+    0x783D, 0xB36C,
+    0x783F, 0xB36D,
+    0x7841, 0xB36E,
+    0x7842, 0xB36F,
+    0x7843, 0xB370,
+    0x7844, 0xB371,
+    0x7846, 0xB372,
+    0x7848, 0xB373,
+    0x7849, 0xB374,
+    0x784A, 0xB375,
+    0x784B, 0xB376,
+    0x784D, 0xB377,
+    0x784F, 0xB378,
+    0x7851, 0xB379,
+    0x7853, 0xB37A,
+    0x7854, 0xB37B,
+    0x7858, 0xB37C,
+    0x7859, 0xB37D,
+    0x785A, 0xB37E,
+    0x785B, 0xB380,
+    0x785C, 0xB381,
+    0x785E, 0xB382,
+    0x785F, 0xB383,
+    0x7860, 0xB384,
+    0x7861, 0xB385,
+    0x7862, 0xB386,
+    0x7863, 0xB387,
+    0x7864, 0xB388,
+    0x7865, 0xB389,
+    0x7866, 0xB38A,
+    0x7867, 0xB38B,
+    0x7868, 0xB38C,
+    0x7869, 0xB38D,
+    0x786F, 0xB38E,
+    0x7870, 0xB38F,
+    0x7871, 0xB390,
+    0x7872, 0xB391,
+    0x7873, 0xB392,
+    0x7874, 0xB393,
+    0x7875, 0xB394,
+    0x7876, 0xB395,
+    0x7878, 0xB396,
+    0x7879, 0xB397,
+    0x787A, 0xB398,
+    0x787B, 0xB399,
+    0x787D, 0xB39A,
+    0x787E, 0xB39B,
+    0x787F, 0xB39C,
+    0x7880, 0xB39D,
+    0x7881, 0xB39E,
+    0x7882, 0xB39F,
+    0x7883, 0xB3A0,
+    0x7884, 0xB440,
+    0x7885, 0xB441,
+    0x7886, 0xB442,
+    0x7888, 0xB443,
+    0x788A, 0xB444,
+    0x788B, 0xB445,
+    0x788F, 0xB446,
+    0x7890, 0xB447,
+    0x7892, 0xB448,
+    0x7894, 0xB449,
+    0x7895, 0xB44A,
+    0x7896, 0xB44B,
+    0x7899, 0xB44C,
+    0x789D, 0xB44D,
+    0x789E, 0xB44E,
+    0x78A0, 0xB44F,
+    0x78A2, 0xB450,
+    0x78A4, 0xB451,
+    0x78A6, 0xB452,
+    0x78A8, 0xB453,
+    0x78A9, 0xB454,
+    0x78AA, 0xB455,
+    0x78AB, 0xB456,
+    0x78AC, 0xB457,
+    0x78AD, 0xB458,
+    0x78AE, 0xB459,
+    0x78AF, 0xB45A,
+    0x78B5, 0xB45B,
+    0x78B6, 0xB45C,
+    0x78B7, 0xB45D,
+    0x78B8, 0xB45E,
+    0x78BA, 0xB45F,
+    0x78BB, 0xB460,
+    0x78BC, 0xB461,
+    0x78BD, 0xB462,
+    0x78BF, 0xB463,
+    0x78C0, 0xB464,
+    0x78C2, 0xB465,
+    0x78C3, 0xB466,
+    0x78C4, 0xB467,
+    0x78C6, 0xB468,
+    0x78C7, 0xB469,
+    0x78C8, 0xB46A,
+    0x78CC, 0xB46B,
+    0x78CD, 0xB46C,
+    0x78CE, 0xB46D,
+    0x78CF, 0xB46E,
+    0x78D1, 0xB46F,
+    0x78D2, 0xB470,
+    0x78D3, 0xB471,
+    0x78D6, 0xB472,
+    0x78D7, 0xB473,
+    0x78D8, 0xB474,
+    0x78DA, 0xB475,
+    0x78DB, 0xB476,
+    0x78DC, 0xB477,
+    0x78DD, 0xB478,
+    0x78DE, 0xB479,
+    0x78DF, 0xB47A,
+    0x78E0, 0xB47B,
+    0x78E1, 0xB47C,
+    0x78E2, 0xB47D,
+    0x78E3, 0xB47E,
+    0x78E4, 0xB480,
+    0x78E5, 0xB481,
+    0x78E6, 0xB482,
+    0x78E7, 0xB483,
+    0x78E9, 0xB484,
+    0x78EA, 0xB485,
+    0x78EB, 0xB486,
+    0x78ED, 0xB487,
+    0x78EE, 0xB488,
+    0x78EF, 0xB489,
+    0x78F0, 0xB48A,
+    0x78F1, 0xB48B,
+    0x78F3, 0xB48C,
+    0x78F5, 0xB48D,
+    0x78F6, 0xB48E,
+    0x78F8, 0xB48F,
+    0x78F9, 0xB490,
+    0x78FB, 0xB491,
+    0x78FC, 0xB492,
+    0x78FD, 0xB493,
+    0x78FE, 0xB494,
+    0x78FF, 0xB495,
+    0x7900, 0xB496,
+    0x7902, 0xB497,
+    0x7903, 0xB498,
+    0x7904, 0xB499,
+    0x7906, 0xB49A,
+    0x7907, 0xB49B,
+    0x7908, 0xB49C,
+    0x7909, 0xB49D,
+    0x790A, 0xB49E,
+    0x790B, 0xB49F,
+    0x790C, 0xB4A0,
+    0x790D, 0xB540,
+    0x790E, 0xB541,
+    0x790F, 0xB542,
+    0x7910, 0xB543,
+    0x7911, 0xB544,
+    0x7912, 0xB545,
+    0x7914, 0xB546,
+    0x7915, 0xB547,
+    0x7916, 0xB548,
+    0x7917, 0xB549,
+    0x7918, 0xB54A,
+    0x7919, 0xB54B,
+    0x791A, 0xB54C,
+    0x791B, 0xB54D,
+    0x791C, 0xB54E,
+    0x791D, 0xB54F,
+    0x791F, 0xB550,
+    0x7920, 0xB551,
+    0x7921, 0xB552,
+    0x7922, 0xB553,
+    0x7923, 0xB554,
+    0x7925, 0xB555,
+    0x7926, 0xB556,
+    0x7927, 0xB557,
+    0x7928, 0xB558,
+    0x7929, 0xB559,
+    0x792A, 0xB55A,
+    0x792B, 0xB55B,
+    0x792C, 0xB55C,
+    0x792D, 0xB55D,
+    0x792E, 0xB55E,
+    0x792F, 0xB55F,
+    0x7930, 0xB560,
+    0x7931, 0xB561,
+    0x7932, 0xB562,
+    0x7933, 0xB563,
+    0x7935, 0xB564,
+    0x7936, 0xB565,
+    0x7937, 0xB566,
+    0x7938, 0xB567,
+    0x7939, 0xB568,
+    0x793D, 0xB569,
+    0x793F, 0xB56A,
+    0x7942, 0xB56B,
+    0x7943, 0xB56C,
+    0x7944, 0xB56D,
+    0x7945, 0xB56E,
+    0x7947, 0xB56F,
+    0x794A, 0xB570,
+    0x794B, 0xB571,
+    0x794C, 0xB572,
+    0x794D, 0xB573,
+    0x794E, 0xB574,
+    0x794F, 0xB575,
+    0x7950, 0xB576,
+    0x7951, 0xB577,
+    0x7952, 0xB578,
+    0x7954, 0xB579,
+    0x7955, 0xB57A,
+    0x7958, 0xB57B,
+    0x7959, 0xB57C,
+    0x7961, 0xB57D,
+    0x7963, 0xB57E,
+    0x7964, 0xB580,
+    0x7966, 0xB581,
+    0x7969, 0xB582,
+    0x796A, 0xB583,
+    0x796B, 0xB584,
+    0x796C, 0xB585,
+    0x796E, 0xB586,
+    0x7970, 0xB587,
+    0x7971, 0xB588,
+    0x7972, 0xB589,
+    0x7973, 0xB58A,
+    0x7974, 0xB58B,
+    0x7975, 0xB58C,
+    0x7976, 0xB58D,
+    0x7979, 0xB58E,
+    0x797B, 0xB58F,
+    0x797C, 0xB590,
+    0x797D, 0xB591,
+    0x797E, 0xB592,
+    0x797F, 0xB593,
+    0x7982, 0xB594,
+    0x7983, 0xB595,
+    0x7986, 0xB596,
+    0x7987, 0xB597,
+    0x7988, 0xB598,
+    0x7989, 0xB599,
+    0x798B, 0xB59A,
+    0x798C, 0xB59B,
+    0x798D, 0xB59C,
+    0x798E, 0xB59D,
+    0x7990, 0xB59E,
+    0x7991, 0xB59F,
+    0x7992, 0xB5A0,
+    0x7993, 0xB640,
+    0x7994, 0xB641,
+    0x7995, 0xB642,
+    0x7996, 0xB643,
+    0x7997, 0xB644,
+    0x7998, 0xB645,
+    0x7999, 0xB646,
+    0x799B, 0xB647,
+    0x799C, 0xB648,
+    0x799D, 0xB649,
+    0x799E, 0xB64A,
+    0x799F, 0xB64B,
+    0x79A0, 0xB64C,
+    0x79A1, 0xB64D,
+    0x79A2, 0xB64E,
+    0x79A3, 0xB64F,
+    0x79A4, 0xB650,
+    0x79A5, 0xB651,
+    0x79A6, 0xB652,
+    0x79A8, 0xB653,
+    0x79A9, 0xB654,
+    0x79AA, 0xB655,
+    0x79AB, 0xB656,
+    0x79AC, 0xB657,
+    0x79AD, 0xB658,
+    0x79AE, 0xB659,
+    0x79AF, 0xB65A,
+    0x79B0, 0xB65B,
+    0x79B1, 0xB65C,
+    0x79B2, 0xB65D,
+    0x79B4, 0xB65E,
+    0x79B5, 0xB65F,
+    0x79B6, 0xB660,
+    0x79B7, 0xB661,
+    0x79B8, 0xB662,
+    0x79BC, 0xB663,
+    0x79BF, 0xB664,
+    0x79C2, 0xB665,
+    0x79C4, 0xB666,
+    0x79C5, 0xB667,
+    0x79C7, 0xB668,
+    0x79C8, 0xB669,
+    0x79CA, 0xB66A,
+    0x79CC, 0xB66B,
+    0x79CE, 0xB66C,
+    0x79CF, 0xB66D,
+    0x79D0, 0xB66E,
+    0x79D3, 0xB66F,
+    0x79D4, 0xB670,
+    0x79D6, 0xB671,
+    0x79D7, 0xB672,
+    0x79D9, 0xB673,
+    0x79DA, 0xB674,
+    0x79DB, 0xB675,
+    0x79DC, 0xB676,
+    0x79DD, 0xB677,
+    0x79DE, 0xB678,
+    0x79E0, 0xB679,
+    0x79E1, 0xB67A,
+    0x79E2, 0xB67B,
+    0x79E5, 0xB67C,
+    0x79E8, 0xB67D,
+    0x79EA, 0xB67E,
+    0x79EC, 0xB680,
+    0x79EE, 0xB681,
+    0x79F1, 0xB682,
+    0x79F2, 0xB683,
+    0x79F3, 0xB684,
+    0x79F4, 0xB685,
+    0x79F5, 0xB686,
+    0x79F6, 0xB687,
+    0x79F7, 0xB688,
+    0x79F9, 0xB689,
+    0x79FA, 0xB68A,
+    0x79FC, 0xB68B,
+    0x79FE, 0xB68C,
+    0x79FF, 0xB68D,
+    0x7A01, 0xB68E,
+    0x7A04, 0xB68F,
+    0x7A05, 0xB690,
+    0x7A07, 0xB691,
+    0x7A08, 0xB692,
+    0x7A09, 0xB693,
+    0x7A0A, 0xB694,
+    0x7A0C, 0xB695,
+    0x7A0F, 0xB696,
+    0x7A10, 0xB697,
+    0x7A11, 0xB698,
+    0x7A12, 0xB699,
+    0x7A13, 0xB69A,
+    0x7A15, 0xB69B,
+    0x7A16, 0xB69C,
+    0x7A18, 0xB69D,
+    0x7A19, 0xB69E,
+    0x7A1B, 0xB69F,
+    0x7A1C, 0xB6A0,
+    0x7A1D, 0xB740,
+    0x7A1F, 0xB741,
+    0x7A21, 0xB742,
+    0x7A22, 0xB743,
+    0x7A24, 0xB744,
+    0x7A25, 0xB745,
+    0x7A26, 0xB746,
+    0x7A27, 0xB747,
+    0x7A28, 0xB748,
+    0x7A29, 0xB749,
+    0x7A2A, 0xB74A,
+    0x7A2B, 0xB74B,
+    0x7A2C, 0xB74C,
+    0x7A2D, 0xB74D,
+    0x7A2E, 0xB74E,
+    0x7A2F, 0xB74F,
+    0x7A30, 0xB750,
+    0x7A31, 0xB751,
+    0x7A32, 0xB752,
+    0x7A34, 0xB753,
+    0x7A35, 0xB754,
+    0x7A36, 0xB755,
+    0x7A38, 0xB756,
+    0x7A3A, 0xB757,
+    0x7A3E, 0xB758,
+    0x7A40, 0xB759,
+    0x7A41, 0xB75A,
+    0x7A42, 0xB75B,
+    0x7A43, 0xB75C,
+    0x7A44, 0xB75D,
+    0x7A45, 0xB75E,
+    0x7A47, 0xB75F,
+    0x7A48, 0xB760,
+    0x7A49, 0xB761,
+    0x7A4A, 0xB762,
+    0x7A4B, 0xB763,
+    0x7A4C, 0xB764,
+    0x7A4D, 0xB765,
+    0x7A4E, 0xB766,
+    0x7A4F, 0xB767,
+    0x7A50, 0xB768,
+    0x7A52, 0xB769,
+    0x7A53, 0xB76A,
+    0x7A54, 0xB76B,
+    0x7A55, 0xB76C,
+    0x7A56, 0xB76D,
+    0x7A58, 0xB76E,
+    0x7A59, 0xB76F,
+    0x7A5A, 0xB770,
+    0x7A5B, 0xB771,
+    0x7A5C, 0xB772,
+    0x7A5D, 0xB773,
+    0x7A5E, 0xB774,
+    0x7A5F, 0xB775,
+    0x7A60, 0xB776,
+    0x7A61, 0xB777,
+    0x7A62, 0xB778,
+    0x7A63, 0xB779,
+    0x7A64, 0xB77A,
+    0x7A65, 0xB77B,
+    0x7A66, 0xB77C,
+    0x7A67, 0xB77D,
+    0x7A68, 0xB77E,
+    0x7A69, 0xB780,
+    0x7A6A, 0xB781,
+    0x7A6B, 0xB782,
+    0x7A6C, 0xB783,
+    0x7A6D, 0xB784,
+    0x7A6E, 0xB785,
+    0x7A6F, 0xB786,
+    0x7A71, 0xB787,
+    0x7A72, 0xB788,
+    0x7A73, 0xB789,
+    0x7A75, 0xB78A,
+    0x7A7B, 0xB78B,
+    0x7A7C, 0xB78C,
+    0x7A7D, 0xB78D,
+    0x7A7E, 0xB78E,
+    0x7A82, 0xB78F,
+    0x7A85, 0xB790,
+    0x7A87, 0xB791,
+    0x7A89, 0xB792,
+    0x7A8A, 0xB793,
+    0x7A8B, 0xB794,
+    0x7A8C, 0xB795,
+    0x7A8E, 0xB796,
+    0x7A8F, 0xB797,
+    0x7A90, 0xB798,
+    0x7A93, 0xB799,
+    0x7A94, 0xB79A,
+    0x7A99, 0xB79B,
+    0x7A9A, 0xB79C,
+    0x7A9B, 0xB79D,
+    0x7A9E, 0xB79E,
+    0x7AA1, 0xB79F,
+    0x7AA2, 0xB7A0,
+    0x7AA3, 0xB840,
+    0x7AA4, 0xB841,
+    0x7AA7, 0xB842,
+    0x7AA9, 0xB843,
+    0x7AAA, 0xB844,
+    0x7AAB, 0xB845,
+    0x7AAE, 0xB846,
+    0x7AAF, 0xB847,
+    0x7AB0, 0xB848,
+    0x7AB1, 0xB849,
+    0x7AB2, 0xB84A,
+    0x7AB4, 0xB84B,
+    0x7AB5, 0xB84C,
+    0x7AB6, 0xB84D,
+    0x7AB7, 0xB84E,
+    0x7AB8, 0xB84F,
+    0x7AB9, 0xB850,
+    0x7ABA, 0xB851,
+    0x7ABB, 0xB852,
+    0x7ABC, 0xB853,
+    0x7ABD, 0xB854,
+    0x7ABE, 0xB855,
+    0x7AC0, 0xB856,
+    0x7AC1, 0xB857,
+    0x7AC2, 0xB858,
+    0x7AC3, 0xB859,
+    0x7AC4, 0xB85A,
+    0x7AC5, 0xB85B,
+    0x7AC6, 0xB85C,
+    0x7AC7, 0xB85D,
+    0x7AC8, 0xB85E,
+    0x7AC9, 0xB85F,
+    0x7ACA, 0xB860,
+    0x7ACC, 0xB861,
+    0x7ACD, 0xB862,
+    0x7ACE, 0xB863,
+    0x7ACF, 0xB864,
+    0x7AD0, 0xB865,
+    0x7AD1, 0xB866,
+    0x7AD2, 0xB867,
+    0x7AD3, 0xB868,
+    0x7AD4, 0xB869,
+    0x7AD5, 0xB86A,
+    0x7AD7, 0xB86B,
+    0x7AD8, 0xB86C,
+    0x7ADA, 0xB86D,
+    0x7ADB, 0xB86E,
+    0x7ADC, 0xB86F,
+    0x7ADD, 0xB870,
+    0x7AE1, 0xB871,
+    0x7AE2, 0xB872,
+    0x7AE4, 0xB873,
+    0x7AE7, 0xB874,
+    0x7AE8, 0xB875,
+    0x7AE9, 0xB876,
+    0x7AEA, 0xB877,
+    0x7AEB, 0xB878,
+    0x7AEC, 0xB879,
+    0x7AEE, 0xB87A,
+    0x7AF0, 0xB87B,
+    0x7AF1, 0xB87C,
+    0x7AF2, 0xB87D,
+    0x7AF3, 0xB87E,
+    0x7AF4, 0xB880,
+    0x7AF5, 0xB881,
+    0x7AF6, 0xB882,
+    0x7AF7, 0xB883,
+    0x7AF8, 0xB884,
+    0x7AFB, 0xB885,
+    0x7AFC, 0xB886,
+    0x7AFE, 0xB887,
+    0x7B00, 0xB888,
+    0x7B01, 0xB889,
+    0x7B02, 0xB88A,
+    0x7B05, 0xB88B,
+    0x7B07, 0xB88C,
+    0x7B09, 0xB88D,
+    0x7B0C, 0xB88E,
+    0x7B0D, 0xB88F,
+    0x7B0E, 0xB890,
+    0x7B10, 0xB891,
+    0x7B12, 0xB892,
+    0x7B13, 0xB893,
+    0x7B16, 0xB894,
+    0x7B17, 0xB895,
+    0x7B18, 0xB896,
+    0x7B1A, 0xB897,
+    0x7B1C, 0xB898,
+    0x7B1D, 0xB899,
+    0x7B1F, 0xB89A,
+    0x7B21, 0xB89B,
+    0x7B22, 0xB89C,
+    0x7B23, 0xB89D,
+    0x7B27, 0xB89E,
+    0x7B29, 0xB89F,
+    0x7B2D, 0xB8A0,
+    0x7B2F, 0xB940,
+    0x7B30, 0xB941,
+    0x7B32, 0xB942,
+    0x7B34, 0xB943,
+    0x7B35, 0xB944,
+    0x7B36, 0xB945,
+    0x7B37, 0xB946,
+    0x7B39, 0xB947,
+    0x7B3B, 0xB948,
+    0x7B3D, 0xB949,
+    0x7B3F, 0xB94A,
+    0x7B40, 0xB94B,
+    0x7B41, 0xB94C,
+    0x7B42, 0xB94D,
+    0x7B43, 0xB94E,
+    0x7B44, 0xB94F,
+    0x7B46, 0xB950,
+    0x7B48, 0xB951,
+    0x7B4A, 0xB952,
+    0x7B4D, 0xB953,
+    0x7B4E, 0xB954,
+    0x7B53, 0xB955,
+    0x7B55, 0xB956,
+    0x7B57, 0xB957,
+    0x7B59, 0xB958,
+    0x7B5C, 0xB959,
+    0x7B5E, 0xB95A,
+    0x7B5F, 0xB95B,
+    0x7B61, 0xB95C,
+    0x7B63, 0xB95D,
+    0x7B64, 0xB95E,
+    0x7B65, 0xB95F,
+    0x7B66, 0xB960,
+    0x7B67, 0xB961,
+    0x7B68, 0xB962,
+    0x7B69, 0xB963,
+    0x7B6A, 0xB964,
+    0x7B6B, 0xB965,
+    0x7B6C, 0xB966,
+    0x7B6D, 0xB967,
+    0x7B6F, 0xB968,
+    0x7B70, 0xB969,
+    0x7B73, 0xB96A,
+    0x7B74, 0xB96B,
+    0x7B76, 0xB96C,
+    0x7B78, 0xB96D,
+    0x7B7A, 0xB96E,
+    0x7B7C, 0xB96F,
+    0x7B7D, 0xB970,
+    0x7B7F, 0xB971,
+    0x7B81, 0xB972,
+    0x7B82, 0xB973,
+    0x7B83, 0xB974,
+    0x7B84, 0xB975,
+    0x7B86, 0xB976,
+    0x7B87, 0xB977,
+    0x7B88, 0xB978,
+    0x7B89, 0xB979,
+    0x7B8A, 0xB97A,
+    0x7B8B, 0xB97B,
+    0x7B8C, 0xB97C,
+    0x7B8E, 0xB97D,
+    0x7B8F, 0xB97E,
+    0x7B91, 0xB980,
+    0x7B92, 0xB981,
+    0x7B93, 0xB982,
+    0x7B96, 0xB983,
+    0x7B98, 0xB984,
+    0x7B99, 0xB985,
+    0x7B9A, 0xB986,
+    0x7B9B, 0xB987,
+    0x7B9E, 0xB988,
+    0x7B9F, 0xB989,
+    0x7BA0, 0xB98A,
+    0x7BA3, 0xB98B,
+    0x7BA4, 0xB98C,
+    0x7BA5, 0xB98D,
+    0x7BAE, 0xB98E,
+    0x7BAF, 0xB98F,
+    0x7BB0, 0xB990,
+    0x7BB2, 0xB991,
+    0x7BB3, 0xB992,
+    0x7BB5, 0xB993,
+    0x7BB6, 0xB994,
+    0x7BB7, 0xB995,
+    0x7BB9, 0xB996,
+    0x7BBA, 0xB997,
+    0x7BBB, 0xB998,
+    0x7BBC, 0xB999,
+    0x7BBD, 0xB99A,
+    0x7BBE, 0xB99B,
+    0x7BBF, 0xB99C,
+    0x7BC0, 0xB99D,
+    0x7BC2, 0xB99E,
+    0x7BC3, 0xB99F,
+    0x7BC4, 0xB9A0,
+    0x7BC5, 0xBA40,
+    0x7BC8, 0xBA41,
+    0x7BC9, 0xBA42,
+    0x7BCA, 0xBA43,
+    0x7BCB, 0xBA44,
+    0x7BCD, 0xBA45,
+    0x7BCE, 0xBA46,
+    0x7BCF, 0xBA47,
+    0x7BD0, 0xBA48,
+    0x7BD2, 0xBA49,
+    0x7BD4, 0xBA4A,
+    0x7BD5, 0xBA4B,
+    0x7BD6, 0xBA4C,
+    0x7BD7, 0xBA4D,
+    0x7BD8, 0xBA4E,
+    0x7BDB, 0xBA4F,
+    0x7BDC, 0xBA50,
+    0x7BDE, 0xBA51,
+    0x7BDF, 0xBA52,
+    0x7BE0, 0xBA53,
+    0x7BE2, 0xBA54,
+    0x7BE3, 0xBA55,
+    0x7BE4, 0xBA56,
+    0x7BE7, 0xBA57,
+    0x7BE8, 0xBA58,
+    0x7BE9, 0xBA59,
+    0x7BEB, 0xBA5A,
+    0x7BEC, 0xBA5B,
+    0x7BED, 0xBA5C,
+    0x7BEF, 0xBA5D,
+    0x7BF0, 0xBA5E,
+    0x7BF2, 0xBA5F,
+    0x7BF3, 0xBA60,
+    0x7BF4, 0xBA61,
+    0x7BF5, 0xBA62,
+    0x7BF6, 0xBA63,
+    0x7BF8, 0xBA64,
+    0x7BF9, 0xBA65,
+    0x7BFA, 0xBA66,
+    0x7BFB, 0xBA67,
+    0x7BFD, 0xBA68,
+    0x7BFF, 0xBA69,
+    0x7C00, 0xBA6A,
+    0x7C01, 0xBA6B,
+    0x7C02, 0xBA6C,
+    0x7C03, 0xBA6D,
+    0x7C04, 0xBA6E,
+    0x7C05, 0xBA6F,
+    0x7C06, 0xBA70,
+    0x7C08, 0xBA71,
+    0x7C09, 0xBA72,
+    0x7C0A, 0xBA73,
+    0x7C0D, 0xBA74,
+    0x7C0E, 0xBA75,
+    0x7C10, 0xBA76,
+    0x7C11, 0xBA77,
+    0x7C12, 0xBA78,
+    0x7C13, 0xBA79,
+    0x7C14, 0xBA7A,
+    0x7C15, 0xBA7B,
+    0x7C17, 0xBA7C,
+    0x7C18, 0xBA7D,
+    0x7C19, 0xBA7E,
+    0x7C1A, 0xBA80,
+    0x7C1B, 0xBA81,
+    0x7C1C, 0xBA82,
+    0x7C1D, 0xBA83,
+    0x7C1E, 0xBA84,
+    0x7C20, 0xBA85,
+    0x7C21, 0xBA86,
+    0x7C22, 0xBA87,
+    0x7C23, 0xBA88,
+    0x7C24, 0xBA89,
+    0x7C25, 0xBA8A,
+    0x7C28, 0xBA8B,
+    0x7C29, 0xBA8C,
+    0x7C2B, 0xBA8D,
+    0x7C2C, 0xBA8E,
+    0x7C2D, 0xBA8F,
+    0x7C2E, 0xBA90,
+    0x7C2F, 0xBA91,
+    0x7C30, 0xBA92,
+    0x7C31, 0xBA93,
+    0x7C32, 0xBA94,
+    0x7C33, 0xBA95,
+    0x7C34, 0xBA96,
+    0x7C35, 0xBA97,
+    0x7C36, 0xBA98,
+    0x7C37, 0xBA99,
+    0x7C39, 0xBA9A,
+    0x7C3A, 0xBA9B,
+    0x7C3B, 0xBA9C,
+    0x7C3C, 0xBA9D,
+    0x7C3D, 0xBA9E,
+    0x7C3E, 0xBA9F,
+    0x7C42, 0xBAA0,
+    0x7C43, 0xBB40,
+    0x7C44, 0xBB41,
+    0x7C45, 0xBB42,
+    0x7C46, 0xBB43,
+    0x7C47, 0xBB44,
+    0x7C48, 0xBB45,
+    0x7C49, 0xBB46,
+    0x7C4A, 0xBB47,
+    0x7C4B, 0xBB48,
+    0x7C4C, 0xBB49,
+    0x7C4E, 0xBB4A,
+    0x7C4F, 0xBB4B,
+    0x7C50, 0xBB4C,
+    0x7C51, 0xBB4D,
+    0x7C52, 0xBB4E,
+    0x7C53, 0xBB4F,
+    0x7C54, 0xBB50,
+    0x7C55, 0xBB51,
+    0x7C56, 0xBB52,
+    0x7C57, 0xBB53,
+    0x7C58, 0xBB54,
+    0x7C59, 0xBB55,
+    0x7C5A, 0xBB56,
+    0x7C5B, 0xBB57,
+    0x7C5C, 0xBB58,
+    0x7C5D, 0xBB59,
+    0x7C5E, 0xBB5A,
+    0x7C5F, 0xBB5B,
+    0x7C60, 0xBB5C,
+    0x7C61, 0xBB5D,
+    0x7C62, 0xBB5E,
+    0x7C63, 0xBB5F,
+    0x7C64, 0xBB60,
+    0x7C65, 0xBB61,
+    0x7C66, 0xBB62,
+    0x7C67, 0xBB63,
+    0x7C68, 0xBB64,
+    0x7C69, 0xBB65,
+    0x7C6A, 0xBB66,
+    0x7C6B, 0xBB67,
+    0x7C6C, 0xBB68,
+    0x7C6D, 0xBB69,
+    0x7C6E, 0xBB6A,
+    0x7C6F, 0xBB6B,
+    0x7C70, 0xBB6C,
+    0x7C71, 0xBB6D,
+    0x7C72, 0xBB6E,
+    0x7C75, 0xBB6F,
+    0x7C76, 0xBB70,
+    0x7C77, 0xBB71,
+    0x7C78, 0xBB72,
+    0x7C79, 0xBB73,
+    0x7C7A, 0xBB74,
+    0x7C7E, 0xBB75,
+    0x7C7F, 0xBB76,
+    0x7C80, 0xBB77,
+    0x7C81, 0xBB78,
+    0x7C82, 0xBB79,
+    0x7C83, 0xBB7A,
+    0x7C84, 0xBB7B,
+    0x7C85, 0xBB7C,
+    0x7C86, 0xBB7D,
+    0x7C87, 0xBB7E,
+    0x7C88, 0xBB80,
+    0x7C8A, 0xBB81,
+    0x7C8B, 0xBB82,
+    0x7C8C, 0xBB83,
+    0x7C8D, 0xBB84,
+    0x7C8E, 0xBB85,
+    0x7C8F, 0xBB86,
+    0x7C90, 0xBB87,
+    0x7C93, 0xBB88,
+    0x7C94, 0xBB89,
+    0x7C96, 0xBB8A,
+    0x7C99, 0xBB8B,
+    0x7C9A, 0xBB8C,
+    0x7C9B, 0xBB8D,
+    0x7CA0, 0xBB8E,
+    0x7CA1, 0xBB8F,
+    0x7CA3, 0xBB90,
+    0x7CA6, 0xBB91,
+    0x7CA7, 0xBB92,
+    0x7CA8, 0xBB93,
+    0x7CA9, 0xBB94,
+    0x7CAB, 0xBB95,
+    0x7CAC, 0xBB96,
+    0x7CAD, 0xBB97,
+    0x7CAF, 0xBB98,
+    0x7CB0, 0xBB99,
+    0x7CB4, 0xBB9A,
+    0x7CB5, 0xBB9B,
+    0x7CB6, 0xBB9C,
+    0x7CB7, 0xBB9D,
+    0x7CB8, 0xBB9E,
+    0x7CBA, 0xBB9F,
+    0x7CBB, 0xBBA0,
+    0x7CBF, 0xBC40,
+    0x7CC0, 0xBC41,
+    0x7CC2, 0xBC42,
+    0x7CC3, 0xBC43,
+    0x7CC4, 0xBC44,
+    0x7CC6, 0xBC45,
+    0x7CC9, 0xBC46,
+    0x7CCB, 0xBC47,
+    0x7CCE, 0xBC48,
+    0x7CCF, 0xBC49,
+    0x7CD0, 0xBC4A,
+    0x7CD1, 0xBC4B,
+    0x7CD2, 0xBC4C,
+    0x7CD3, 0xBC4D,
+    0x7CD4, 0xBC4E,
+    0x7CD8, 0xBC4F,
+    0x7CDA, 0xBC50,
+    0x7CDB, 0xBC51,
+    0x7CDD, 0xBC52,
+    0x7CDE, 0xBC53,
+    0x7CE1, 0xBC54,
+    0x7CE2, 0xBC55,
+    0x7CE3, 0xBC56,
+    0x7CE4, 0xBC57,
+    0x7CE5, 0xBC58,
+    0x7CE6, 0xBC59,
+    0x7CE7, 0xBC5A,
+    0x7CE9, 0xBC5B,
+    0x7CEA, 0xBC5C,
+    0x7CEB, 0xBC5D,
+    0x7CEC, 0xBC5E,
+    0x7CED, 0xBC5F,
+    0x7CEE, 0xBC60,
+    0x7CF0, 0xBC61,
+    0x7CF1, 0xBC62,
+    0x7CF2, 0xBC63,
+    0x7CF3, 0xBC64,
+    0x7CF4, 0xBC65,
+    0x7CF5, 0xBC66,
+    0x7CF6, 0xBC67,
+    0x7CF7, 0xBC68,
+    0x7CF9, 0xBC69,
+    0x7CFA, 0xBC6A,
+    0x7CFC, 0xBC6B,
+    0x7CFD, 0xBC6C,
+    0x7CFE, 0xBC6D,
+    0x7CFF, 0xBC6E,
+    0x7D00, 0xBC6F,
+    0x7D01, 0xBC70,
+    0x7D02, 0xBC71,
+    0x7D03, 0xBC72,
+    0x7D04, 0xBC73,
+    0x7D05, 0xBC74,
+    0x7D06, 0xBC75,
+    0x7D07, 0xBC76,
+    0x7D08, 0xBC77,
+    0x7D09, 0xBC78,
+    0x7D0B, 0xBC79,
+    0x7D0C, 0xBC7A,
+    0x7D0D, 0xBC7B,
+    0x7D0E, 0xBC7C,
+    0x7D0F, 0xBC7D,
+    0x7D10, 0xBC7E,
+    0x7D11, 0xBC80,
+    0x7D12, 0xBC81,
+    0x7D13, 0xBC82,
+    0x7D14, 0xBC83,
+    0x7D15, 0xBC84,
+    0x7D16, 0xBC85,
+    0x7D17, 0xBC86,
+    0x7D18, 0xBC87,
+    0x7D19, 0xBC88,
+    0x7D1A, 0xBC89,
+    0x7D1B, 0xBC8A,
+    0x7D1C, 0xBC8B,
+    0x7D1D, 0xBC8C,
+    0x7D1E, 0xBC8D,
+    0x7D1F, 0xBC8E,
+    0x7D21, 0xBC8F,
+    0x7D23, 0xBC90,
+    0x7D24, 0xBC91,
+    0x7D25, 0xBC92,
+    0x7D26, 0xBC93,
+    0x7D28, 0xBC94,
+    0x7D29, 0xBC95,
+    0x7D2A, 0xBC96,
+    0x7D2C, 0xBC97,
+    0x7D2D, 0xBC98,
+    0x7D2E, 0xBC99,
+    0x7D30, 0xBC9A,
+    0x7D31, 0xBC9B,
+    0x7D32, 0xBC9C,
+    0x7D33, 0xBC9D,
+    0x7D34, 0xBC9E,
+    0x7D35, 0xBC9F,
+    0x7D36, 0xBCA0,
+    0x7D37, 0xBD40,
+    0x7D38, 0xBD41,
+    0x7D39, 0xBD42,
+    0x7D3A, 0xBD43,
+    0x7D3B, 0xBD44,
+    0x7D3C, 0xBD45,
+    0x7D3D, 0xBD46,
+    0x7D3E, 0xBD47,
+    0x7D3F, 0xBD48,
+    0x7D40, 0xBD49,
+    0x7D41, 0xBD4A,
+    0x7D42, 0xBD4B,
+    0x7D43, 0xBD4C,
+    0x7D44, 0xBD4D,
+    0x7D45, 0xBD4E,
+    0x7D46, 0xBD4F,
+    0x7D47, 0xBD50,
+    0x7D48, 0xBD51,
+    0x7D49, 0xBD52,
+    0x7D4A, 0xBD53,
+    0x7D4B, 0xBD54,
+    0x7D4C, 0xBD55,
+    0x7D4D, 0xBD56,
+    0x7D4E, 0xBD57,
+    0x7D4F, 0xBD58,
+    0x7D50, 0xBD59,
+    0x7D51, 0xBD5A,
+    0x7D52, 0xBD5B,
+    0x7D53, 0xBD5C,
+    0x7D54, 0xBD5D,
+    0x7D55, 0xBD5E,
+    0x7D56, 0xBD5F,
+    0x7D57, 0xBD60,
+    0x7D58, 0xBD61,
+    0x7D59, 0xBD62,
+    0x7D5A, 0xBD63,
+    0x7D5B, 0xBD64,
+    0x7D5C, 0xBD65,
+    0x7D5D, 0xBD66,
+    0x7D5E, 0xBD67,
+    0x7D5F, 0xBD68,
+    0x7D60, 0xBD69,
+    0x7D61, 0xBD6A,
+    0x7D62, 0xBD6B,
+    0x7D63, 0xBD6C,
+    0x7D64, 0xBD6D,
+    0x7D65, 0xBD6E,
+    0x7D66, 0xBD6F,
+    0x7D67, 0xBD70,
+    0x7D68, 0xBD71,
+    0x7D69, 0xBD72,
+    0x7D6A, 0xBD73,
+    0x7D6B, 0xBD74,
+    0x7D6C, 0xBD75,
+    0x7D6D, 0xBD76,
+    0x7D6F, 0xBD77,
+    0x7D70, 0xBD78,
+    0x7D71, 0xBD79,
+    0x7D72, 0xBD7A,
+    0x7D73, 0xBD7B,
+    0x7D74, 0xBD7C,
+    0x7D75, 0xBD7D,
+    0x7D76, 0xBD7E,
+    0x7D78, 0xBD80,
+    0x7D79, 0xBD81,
+    0x7D7A, 0xBD82,
+    0x7D7B, 0xBD83,
+    0x7D7C, 0xBD84,
+    0x7D7D, 0xBD85,
+    0x7D7E, 0xBD86,
+    0x7D7F, 0xBD87,
+    0x7D80, 0xBD88,
+    0x7D81, 0xBD89,
+    0x7D82, 0xBD8A,
+    0x7D83, 0xBD8B,
+    0x7D84, 0xBD8C,
+    0x7D85, 0xBD8D,
+    0x7D86, 0xBD8E,
+    0x7D87, 0xBD8F,
+    0x7D88, 0xBD90,
+    0x7D89, 0xBD91,
+    0x7D8A, 0xBD92,
+    0x7D8B, 0xBD93,
+    0x7D8C, 0xBD94,
+    0x7D8D, 0xBD95,
+    0x7D8E, 0xBD96,
+    0x7D8F, 0xBD97,
+    0x7D90, 0xBD98,
+    0x7D91, 0xBD99,
+    0x7D92, 0xBD9A,
+    0x7D93, 0xBD9B,
+    0x7D94, 0xBD9C,
+    0x7D95, 0xBD9D,
+    0x7D96, 0xBD9E,
+    0x7D97, 0xBD9F,
+    0x7D98, 0xBDA0,
+    0x7D99, 0xBE40,
+    0x7D9A, 0xBE41,
+    0x7D9B, 0xBE42,
+    0x7D9C, 0xBE43,
+    0x7D9D, 0xBE44,
+    0x7D9E, 0xBE45,
+    0x7D9F, 0xBE46,
+    0x7DA0, 0xBE47,
+    0x7DA1, 0xBE48,
+    0x7DA2, 0xBE49,
+    0x7DA3, 0xBE4A,
+    0x7DA4, 0xBE4B,
+    0x7DA5, 0xBE4C,
+    0x7DA7, 0xBE4D,
+    0x7DA8, 0xBE4E,
+    0x7DA9, 0xBE4F,
+    0x7DAA, 0xBE50,
+    0x7DAB, 0xBE51,
+    0x7DAC, 0xBE52,
+    0x7DAD, 0xBE53,
+    0x7DAF, 0xBE54,
+    0x7DB0, 0xBE55,
+    0x7DB1, 0xBE56,
+    0x7DB2, 0xBE57,
+    0x7DB3, 0xBE58,
+    0x7DB4, 0xBE59,
+    0x7DB5, 0xBE5A,
+    0x7DB6, 0xBE5B,
+    0x7DB7, 0xBE5C,
+    0x7DB8, 0xBE5D,
+    0x7DB9, 0xBE5E,
+    0x7DBA, 0xBE5F,
+    0x7DBB, 0xBE60,
+    0x7DBC, 0xBE61,
+    0x7DBD, 0xBE62,
+    0x7DBE, 0xBE63,
+    0x7DBF, 0xBE64,
+    0x7DC0, 0xBE65,
+    0x7DC1, 0xBE66,
+    0x7DC2, 0xBE67,
+    0x7DC3, 0xBE68,
+    0x7DC4, 0xBE69,
+    0x7DC5, 0xBE6A,
+    0x7DC6, 0xBE6B,
+    0x7DC7, 0xBE6C,
+    0x7DC8, 0xBE6D,
+    0x7DC9, 0xBE6E,
+    0x7DCA, 0xBE6F,
+    0x7DCB, 0xBE70,
+    0x7DCC, 0xBE71,
+    0x7DCD, 0xBE72,
+    0x7DCE, 0xBE73,
+    0x7DCF, 0xBE74,
+    0x7DD0, 0xBE75,
+    0x7DD1, 0xBE76,
+    0x7DD2, 0xBE77,
+    0x7DD3, 0xBE78,
+    0x7DD4, 0xBE79,
+    0x7DD5, 0xBE7A,
+    0x7DD6, 0xBE7B,
+    0x7DD7, 0xBE7C,
+    0x7DD8, 0xBE7D,
+    0x7DD9, 0xBE7E,
+    0x7DDA, 0xBE80,
+    0x7DDB, 0xBE81,
+    0x7DDC, 0xBE82,
+    0x7DDD, 0xBE83,
+    0x7DDE, 0xBE84,
+    0x7DDF, 0xBE85,
+    0x7DE0, 0xBE86,
+    0x7DE1, 0xBE87,
+    0x7DE2, 0xBE88,
+    0x7DE3, 0xBE89,
+    0x7DE4, 0xBE8A,
+    0x7DE5, 0xBE8B,
+    0x7DE6, 0xBE8C,
+    0x7DE7, 0xBE8D,
+    0x7DE8, 0xBE8E,
+    0x7DE9, 0xBE8F,
+    0x7DEA, 0xBE90,
+    0x7DEB, 0xBE91,
+    0x7DEC, 0xBE92,
+    0x7DED, 0xBE93,
+    0x7DEE, 0xBE94,
+    0x7DEF, 0xBE95,
+    0x7DF0, 0xBE96,
+    0x7DF1, 0xBE97,
+    0x7DF2, 0xBE98,
+    0x7DF3, 0xBE99,
+    0x7DF4, 0xBE9A,
+    0x7DF5, 0xBE9B,
+    0x7DF6, 0xBE9C,
+    0x7DF7, 0xBE9D,
+    0x7DF8, 0xBE9E,
+    0x7DF9, 0xBE9F,
+    0x7DFA, 0xBEA0,
+    0x7DFB, 0xBF40,
+    0x7DFC, 0xBF41,
+    0x7DFD, 0xBF42,
+    0x7DFE, 0xBF43,
+    0x7DFF, 0xBF44,
+    0x7E00, 0xBF45,
+    0x7E01, 0xBF46,
+    0x7E02, 0xBF47,
+    0x7E03, 0xBF48,
+    0x7E04, 0xBF49,
+    0x7E05, 0xBF4A,
+    0x7E06, 0xBF4B,
+    0x7E07, 0xBF4C,
+    0x7E08, 0xBF4D,
+    0x7E09, 0xBF4E,
+    0x7E0A, 0xBF4F,
+    0x7E0B, 0xBF50,
+    0x7E0C, 0xBF51,
+    0x7E0D, 0xBF52,
+    0x7E0E, 0xBF53,
+    0x7E0F, 0xBF54,
+    0x7E10, 0xBF55,
+    0x7E11, 0xBF56,
+    0x7E12, 0xBF57,
+    0x7E13, 0xBF58,
+    0x7E14, 0xBF59,
+    0x7E15, 0xBF5A,
+    0x7E16, 0xBF5B,
+    0x7E17, 0xBF5C,
+    0x7E18, 0xBF5D,
+    0x7E19, 0xBF5E,
+    0x7E1A, 0xBF5F,
+    0x7E1B, 0xBF60,
+    0x7E1C, 0xBF61,
+    0x7E1D, 0xBF62,
+    0x7E1E, 0xBF63,
+    0x7E1F, 0xBF64,
+    0x7E20, 0xBF65,
+    0x7E21, 0xBF66,
+    0x7E22, 0xBF67,
+    0x7E23, 0xBF68,
+    0x7E24, 0xBF69,
+    0x7E25, 0xBF6A,
+    0x7E26, 0xBF6B,
+    0x7E27, 0xBF6C,
+    0x7E28, 0xBF6D,
+    0x7E29, 0xBF6E,
+    0x7E2A, 0xBF6F,
+    0x7E2B, 0xBF70,
+    0x7E2C, 0xBF71,
+    0x7E2D, 0xBF72,
+    0x7E2E, 0xBF73,
+    0x7E2F, 0xBF74,
+    0x7E30, 0xBF75,
+    0x7E31, 0xBF76,
+    0x7E32, 0xBF77,
+    0x7E33, 0xBF78,
+    0x7E34, 0xBF79,
+    0x7E35, 0xBF7A,
+    0x7E36, 0xBF7B,
+    0x7E37, 0xBF7C,
+    0x7E38, 0xBF7D,
+    0x7E39, 0xBF7E,
+    0x7E3A, 0xBF80,
+    0x7E3C, 0xBF81,
+    0x7E3D, 0xBF82,
+    0x7E3E, 0xBF83,
+    0x7E3F, 0xBF84,
+    0x7E40, 0xBF85,
+    0x7E42, 0xBF86,
+    0x7E43, 0xBF87,
+    0x7E44, 0xBF88,
+    0x7E45, 0xBF89,
+    0x7E46, 0xBF8A,
+    0x7E48, 0xBF8B,
+    0x7E49, 0xBF8C,
+    0x7E4A, 0xBF8D,
+    0x7E4B, 0xBF8E,
+    0x7E4C, 0xBF8F,
+    0x7E4D, 0xBF90,
+    0x7E4E, 0xBF91,
+    0x7E4F, 0xBF92,
+    0x7E50, 0xBF93,
+    0x7E51, 0xBF94,
+    0x7E52, 0xBF95,
+    0x7E53, 0xBF96,
+    0x7E54, 0xBF97,
+    0x7E55, 0xBF98,
+    0x7E56, 0xBF99,
+    0x7E57, 0xBF9A,
+    0x7E58, 0xBF9B,
+    0x7E59, 0xBF9C,
+    0x7E5A, 0xBF9D,
+    0x7E5B, 0xBF9E,
+    0x7E5C, 0xBF9F,
+    0x7E5D, 0xBFA0,
+    0x7E5E, 0xC040,
+    0x7E5F, 0xC041,
+    0x7E60, 0xC042,
+    0x7E61, 0xC043,
+    0x7E62, 0xC044,
+    0x7E63, 0xC045,
+    0x7E64, 0xC046,
+    0x7E65, 0xC047,
+    0x7E66, 0xC048,
+    0x7E67, 0xC049,
+    0x7E68, 0xC04A,
+    0x7E69, 0xC04B,
+    0x7E6A, 0xC04C,
+    0x7E6B, 0xC04D,
+    0x7E6C, 0xC04E,
+    0x7E6D, 0xC04F,
+    0x7E6E, 0xC050,
+    0x7E6F, 0xC051,
+    0x7E70, 0xC052,
+    0x7E71, 0xC053,
+    0x7E72, 0xC054,
+    0x7E73, 0xC055,
+    0x7E74, 0xC056,
+    0x7E75, 0xC057,
+    0x7E76, 0xC058,
+    0x7E77, 0xC059,
+    0x7E78, 0xC05A,
+    0x7E79, 0xC05B,
+    0x7E7A, 0xC05C,
+    0x7E7B, 0xC05D,
+    0x7E7C, 0xC05E,
+    0x7E7D, 0xC05F,
+    0x7E7E, 0xC060,
+    0x7E7F, 0xC061,
+    0x7E80, 0xC062,
+    0x7E81, 0xC063,
+    0x7E83, 0xC064,
+    0x7E84, 0xC065,
+    0x7E85, 0xC066,
+    0x7E86, 0xC067,
+    0x7E87, 0xC068,
+    0x7E88, 0xC069,
+    0x7E89, 0xC06A,
+    0x7E8A, 0xC06B,
+    0x7E8B, 0xC06C,
+    0x7E8C, 0xC06D,
+    0x7E8D, 0xC06E,
+    0x7E8E, 0xC06F,
+    0x7E8F, 0xC070,
+    0x7E90, 0xC071,
+    0x7E91, 0xC072,
+    0x7E92, 0xC073,
+    0x7E93, 0xC074,
+    0x7E94, 0xC075,
+    0x7E95, 0xC076,
+    0x7E96, 0xC077,
+    0x7E97, 0xC078,
+    0x7E98, 0xC079,
+    0x7E99, 0xC07A,
+    0x7E9A, 0xC07B,
+    0x7E9C, 0xC07C,
+    0x7E9D, 0xC07D,
+    0x7E9E, 0xC07E,
+    0x7EAE, 0xC080,
+    0x7EB4, 0xC081,
+    0x7EBB, 0xC082,
+    0x7EBC, 0xC083,
+    0x7ED6, 0xC084,
+    0x7EE4, 0xC085,
+    0x7EEC, 0xC086,
+    0x7EF9, 0xC087,
+    0x7F0A, 0xC088,
+    0x7F10, 0xC089,
+    0x7F1E, 0xC08A,
+    0x7F37, 0xC08B,
+    0x7F39, 0xC08C,
+    0x7F3B, 0xC08D,
+    0x7F3C, 0xC08E,
+    0x7F3D, 0xC08F,
+    0x7F3E, 0xC090,
+    0x7F3F, 0xC091,
+    0x7F40, 0xC092,
+    0x7F41, 0xC093,
+    0x7F43, 0xC094,
+    0x7F46, 0xC095,
+    0x7F47, 0xC096,
+    0x7F48, 0xC097,
+    0x7F49, 0xC098,
+    0x7F4A, 0xC099,
+    0x7F4B, 0xC09A,
+    0x7F4C, 0xC09B,
+    0x7F4D, 0xC09C,
+    0x7F4E, 0xC09D,
+    0x7F4F, 0xC09E,
+    0x7F52, 0xC09F,
+    0x7F53, 0xC0A0,
+    0x7F56, 0xC140,
+    0x7F59, 0xC141,
+    0x7F5B, 0xC142,
+    0x7F5C, 0xC143,
+    0x7F5D, 0xC144,
+    0x7F5E, 0xC145,
+    0x7F60, 0xC146,
+    0x7F63, 0xC147,
+    0x7F64, 0xC148,
+    0x7F65, 0xC149,
+    0x7F66, 0xC14A,
+    0x7F67, 0xC14B,
+    0x7F6B, 0xC14C,
+    0x7F6C, 0xC14D,
+    0x7F6D, 0xC14E,
+    0x7F6F, 0xC14F,
+    0x7F70, 0xC150,
+    0x7F73, 0xC151,
+    0x7F75, 0xC152,
+    0x7F76, 0xC153,
+    0x7F77, 0xC154,
+    0x7F78, 0xC155,
+    0x7F7A, 0xC156,
+    0x7F7B, 0xC157,
+    0x7F7C, 0xC158,
+    0x7F7D, 0xC159,
+    0x7F7F, 0xC15A,
+    0x7F80, 0xC15B,
+    0x7F82, 0xC15C,
+    0x7F83, 0xC15D,
+    0x7F84, 0xC15E,
+    0x7F85, 0xC15F,
+    0x7F86, 0xC160,
+    0x7F87, 0xC161,
+    0x7F88, 0xC162,
+    0x7F89, 0xC163,
+    0x7F8B, 0xC164,
+    0x7F8D, 0xC165,
+    0x7F8F, 0xC166,
+    0x7F90, 0xC167,
+    0x7F91, 0xC168,
+    0x7F92, 0xC169,
+    0x7F93, 0xC16A,
+    0x7F95, 0xC16B,
+    0x7F96, 0xC16C,
+    0x7F97, 0xC16D,
+    0x7F98, 0xC16E,
+    0x7F99, 0xC16F,
+    0x7F9B, 0xC170,
+    0x7F9C, 0xC171,
+    0x7FA0, 0xC172,
+    0x7FA2, 0xC173,
+    0x7FA3, 0xC174,
+    0x7FA5, 0xC175,
+    0x7FA6, 0xC176,
+    0x7FA8, 0xC177,
+    0x7FA9, 0xC178,
+    0x7FAA, 0xC179,
+    0x7FAB, 0xC17A,
+    0x7FAC, 0xC17B,
+    0x7FAD, 0xC17C,
+    0x7FAE, 0xC17D,
+    0x7FB1, 0xC17E,
+    0x7FB3, 0xC180,
+    0x7FB4, 0xC181,
+    0x7FB5, 0xC182,
+    0x7FB6, 0xC183,
+    0x7FB7, 0xC184,
+    0x7FBA, 0xC185,
+    0x7FBB, 0xC186,
+    0x7FBE, 0xC187,
+    0x7FC0, 0xC188,
+    0x7FC2, 0xC189,
+    0x7FC3, 0xC18A,
+    0x7FC4, 0xC18B,
+    0x7FC6, 0xC18C,
+    0x7FC7, 0xC18D,
+    0x7FC8, 0xC18E,
+    0x7FC9, 0xC18F,
+    0x7FCB, 0xC190,
+    0x7FCD, 0xC191,
+    0x7FCF, 0xC192,
+    0x7FD0, 0xC193,
+    0x7FD1, 0xC194,
+    0x7FD2, 0xC195,
+    0x7FD3, 0xC196,
+    0x7FD6, 0xC197,
+    0x7FD7, 0xC198,
+    0x7FD9, 0xC199,
+    0x7FDA, 0xC19A,
+    0x7FDB, 0xC19B,
+    0x7FDC, 0xC19C,
+    0x7FDD, 0xC19D,
+    0x7FDE, 0xC19E,
+    0x7FE2, 0xC19F,
+    0x7FE3, 0xC1A0,
+    0x7FE4, 0xC240,
+    0x7FE7, 0xC241,
+    0x7FE8, 0xC242,
+    0x7FEA, 0xC243,
+    0x7FEB, 0xC244,
+    0x7FEC, 0xC245,
+    0x7FED, 0xC246,
+    0x7FEF, 0xC247,
+    0x7FF2, 0xC248,
+    0x7FF4, 0xC249,
+    0x7FF5, 0xC24A,
+    0x7FF6, 0xC24B,
+    0x7FF7, 0xC24C,
+    0x7FF8, 0xC24D,
+    0x7FF9, 0xC24E,
+    0x7FFA, 0xC24F,
+    0x7FFD, 0xC250,
+    0x7FFE, 0xC251,
+    0x7FFF, 0xC252,
+    0x8002, 0xC253,
+    0x8007, 0xC254,
+    0x8008, 0xC255,
+    0x8009, 0xC256,
+    0x800A, 0xC257,
+    0x800E, 0xC258,
+    0x800F, 0xC259,
+    0x8011, 0xC25A,
+    0x8013, 0xC25B,
+    0x801A, 0xC25C,
+    0x801B, 0xC25D,
+    0x801D, 0xC25E,
+    0x801E, 0xC25F,
+    0x801F, 0xC260,
+    0x8021, 0xC261,
+    0x8023, 0xC262,
+    0x8024, 0xC263,
+    0x802B, 0xC264,
+    0x802C, 0xC265,
+    0x802D, 0xC266,
+    0x802E, 0xC267,
+    0x802F, 0xC268,
+    0x8030, 0xC269,
+    0x8032, 0xC26A,
+    0x8034, 0xC26B,
+    0x8039, 0xC26C,
+    0x803A, 0xC26D,
+    0x803C, 0xC26E,
+    0x803E, 0xC26F,
+    0x8040, 0xC270,
+    0x8041, 0xC271,
+    0x8044, 0xC272,
+    0x8045, 0xC273,
+    0x8047, 0xC274,
+    0x8048, 0xC275,
+    0x8049, 0xC276,
+    0x804E, 0xC277,
+    0x804F, 0xC278,
+    0x8050, 0xC279,
+    0x8051, 0xC27A,
+    0x8053, 0xC27B,
+    0x8055, 0xC27C,
+    0x8056, 0xC27D,
+    0x8057, 0xC27E,
+    0x8059, 0xC280,
+    0x805B, 0xC281,
+    0x805C, 0xC282,
+    0x805D, 0xC283,
+    0x805E, 0xC284,
+    0x805F, 0xC285,
+    0x8060, 0xC286,
+    0x8061, 0xC287,
+    0x8062, 0xC288,
+    0x8063, 0xC289,
+    0x8064, 0xC28A,
+    0x8065, 0xC28B,
+    0x8066, 0xC28C,
+    0x8067, 0xC28D,
+    0x8068, 0xC28E,
+    0x806B, 0xC28F,
+    0x806C, 0xC290,
+    0x806D, 0xC291,
+    0x806E, 0xC292,
+    0x806F, 0xC293,
+    0x8070, 0xC294,
+    0x8072, 0xC295,
+    0x8073, 0xC296,
+    0x8074, 0xC297,
+    0x8075, 0xC298,
+    0x8076, 0xC299,
+    0x8077, 0xC29A,
+    0x8078, 0xC29B,
+    0x8079, 0xC29C,
+    0x807A, 0xC29D,
+    0x807B, 0xC29E,
+    0x807C, 0xC29F,
+    0x807D, 0xC2A0,
+    0x807E, 0xC340,
+    0x8081, 0xC341,
+    0x8082, 0xC342,
+    0x8085, 0xC343,
+    0x8088, 0xC344,
+    0x808A, 0xC345,
+    0x808D, 0xC346,
+    0x808E, 0xC347,
+    0x808F, 0xC348,
+    0x8090, 0xC349,
+    0x8091, 0xC34A,
+    0x8092, 0xC34B,
+    0x8094, 0xC34C,
+    0x8095, 0xC34D,
+    0x8097, 0xC34E,
+    0x8099, 0xC34F,
+    0x809E, 0xC350,
+    0x80A3, 0xC351,
+    0x80A6, 0xC352,
+    0x80A7, 0xC353,
+    0x80A8, 0xC354,
+    0x80AC, 0xC355,
+    0x80B0, 0xC356,
+    0x80B3, 0xC357,
+    0x80B5, 0xC358,
+    0x80B6, 0xC359,
+    0x80B8, 0xC35A,
+    0x80B9, 0xC35B,
+    0x80BB, 0xC35C,
+    0x80C5, 0xC35D,
+    0x80C7, 0xC35E,
+    0x80C8, 0xC35F,
+    0x80C9, 0xC360,
+    0x80CA, 0xC361,
+    0x80CB, 0xC362,
+    0x80CF, 0xC363,
+    0x80D0, 0xC364,
+    0x80D1, 0xC365,
+    0x80D2, 0xC366,
+    0x80D3, 0xC367,
+    0x80D4, 0xC368,
+    0x80D5, 0xC369,
+    0x80D8, 0xC36A,
+    0x80DF, 0xC36B,
+    0x80E0, 0xC36C,
+    0x80E2, 0xC36D,
+    0x80E3, 0xC36E,
+    0x80E6, 0xC36F,
+    0x80EE, 0xC370,
+    0x80F5, 0xC371,
+    0x80F7, 0xC372,
+    0x80F9, 0xC373,
+    0x80FB, 0xC374,
+    0x80FE, 0xC375,
+    0x80FF, 0xC376,
+    0x8100, 0xC377,
+    0x8101, 0xC378,
+    0x8103, 0xC379,
+    0x8104, 0xC37A,
+    0x8105, 0xC37B,
+    0x8107, 0xC37C,
+    0x8108, 0xC37D,
+    0x810B, 0xC37E,
+    0x810C, 0xC380,
+    0x8115, 0xC381,
+    0x8117, 0xC382,
+    0x8119, 0xC383,
+    0x811B, 0xC384,
+    0x811C, 0xC385,
+    0x811D, 0xC386,
+    0x811F, 0xC387,
+    0x8120, 0xC388,
+    0x8121, 0xC389,
+    0x8122, 0xC38A,
+    0x8123, 0xC38B,
+    0x8124, 0xC38C,
+    0x8125, 0xC38D,
+    0x8126, 0xC38E,
+    0x8127, 0xC38F,
+    0x8128, 0xC390,
+    0x8129, 0xC391,
+    0x812A, 0xC392,
+    0x812B, 0xC393,
+    0x812D, 0xC394,
+    0x812E, 0xC395,
+    0x8130, 0xC396,
+    0x8133, 0xC397,
+    0x8134, 0xC398,
+    0x8135, 0xC399,
+    0x8137, 0xC39A,
+    0x8139, 0xC39B,
+    0x813A, 0xC39C,
+    0x813B, 0xC39D,
+    0x813C, 0xC39E,
+    0x813D, 0xC39F,
+    0x813F, 0xC3A0,
+    0x8140, 0xC440,
+    0x8141, 0xC441,
+    0x8142, 0xC442,
+    0x8143, 0xC443,
+    0x8144, 0xC444,
+    0x8145, 0xC445,
+    0x8147, 0xC446,
+    0x8149, 0xC447,
+    0x814D, 0xC448,
+    0x814E, 0xC449,
+    0x814F, 0xC44A,
+    0x8152, 0xC44B,
+    0x8156, 0xC44C,
+    0x8157, 0xC44D,
+    0x8158, 0xC44E,
+    0x815B, 0xC44F,
+    0x815C, 0xC450,
+    0x815D, 0xC451,
+    0x815E, 0xC452,
+    0x815F, 0xC453,
+    0x8161, 0xC454,
+    0x8162, 0xC455,
+    0x8163, 0xC456,
+    0x8164, 0xC457,
+    0x8166, 0xC458,
+    0x8168, 0xC459,
+    0x816A, 0xC45A,
+    0x816B, 0xC45B,
+    0x816C, 0xC45C,
+    0x816F, 0xC45D,
+    0x8172, 0xC45E,
+    0x8173, 0xC45F,
+    0x8175, 0xC460,
+    0x8176, 0xC461,
+    0x8177, 0xC462,
+    0x8178, 0xC463,
+    0x8181, 0xC464,
+    0x8183, 0xC465,
+    0x8184, 0xC466,
+    0x8185, 0xC467,
+    0x8186, 0xC468,
+    0x8187, 0xC469,
+    0x8189, 0xC46A,
+    0x818B, 0xC46B,
+    0x818C, 0xC46C,
+    0x818D, 0xC46D,
+    0x818E, 0xC46E,
+    0x8190, 0xC46F,
+    0x8192, 0xC470,
+    0x8193, 0xC471,
+    0x8194, 0xC472,
+    0x8195, 0xC473,
+    0x8196, 0xC474,
+    0x8197, 0xC475,
+    0x8199, 0xC476,
+    0x819A, 0xC477,
+    0x819E, 0xC478,
+    0x819F, 0xC479,
+    0x81A0, 0xC47A,
+    0x81A1, 0xC47B,
+    0x81A2, 0xC47C,
+    0x81A4, 0xC47D,
+    0x81A5, 0xC47E,
+    0x81A7, 0xC480,
+    0x81A9, 0xC481,
+    0x81AB, 0xC482,
+    0x81AC, 0xC483,
+    0x81AD, 0xC484,
+    0x81AE, 0xC485,
+    0x81AF, 0xC486,
+    0x81B0, 0xC487,
+    0x81B1, 0xC488,
+    0x81B2, 0xC489,
+    0x81B4, 0xC48A,
+    0x81B5, 0xC48B,
+    0x81B6, 0xC48C,
+    0x81B7, 0xC48D,
+    0x81B8, 0xC48E,
+    0x81B9, 0xC48F,
+    0x81BC, 0xC490,
+    0x81BD, 0xC491,
+    0x81BE, 0xC492,
+    0x81BF, 0xC493,
+    0x81C4, 0xC494,
+    0x81C5, 0xC495,
+    0x81C7, 0xC496,
+    0x81C8, 0xC497,
+    0x81C9, 0xC498,
+    0x81CB, 0xC499,
+    0x81CD, 0xC49A,
+    0x81CE, 0xC49B,
+    0x81CF, 0xC49C,
+    0x81D0, 0xC49D,
+    0x81D1, 0xC49E,
+    0x81D2, 0xC49F,
+    0x81D3, 0xC4A0,
+    0x81D4, 0xC540,
+    0x81D5, 0xC541,
+    0x81D6, 0xC542,
+    0x81D7, 0xC543,
+    0x81D8, 0xC544,
+    0x81D9, 0xC545,
+    0x81DA, 0xC546,
+    0x81DB, 0xC547,
+    0x81DC, 0xC548,
+    0x81DD, 0xC549,
+    0x81DE, 0xC54A,
+    0x81DF, 0xC54B,
+    0x81E0, 0xC54C,
+    0x81E1, 0xC54D,
+    0x81E2, 0xC54E,
+    0x81E4, 0xC54F,
+    0x81E5, 0xC550,
+    0x81E6, 0xC551,
+    0x81E8, 0xC552,
+    0x81E9, 0xC553,
+    0x81EB, 0xC554,
+    0x81EE, 0xC555,
+    0x81EF, 0xC556,
+    0x81F0, 0xC557,
+    0x81F1, 0xC558,
+    0x81F2, 0xC559,
+    0x81F5, 0xC55A,
+    0x81F6, 0xC55B,
+    0x81F7, 0xC55C,
+    0x81F8, 0xC55D,
+    0x81F9, 0xC55E,
+    0x81FA, 0xC55F,
+    0x81FD, 0xC560,
+    0x81FF, 0xC561,
+    0x8203, 0xC562,
+    0x8207, 0xC563,
+    0x8208, 0xC564,
+    0x8209, 0xC565,
+    0x820A, 0xC566,
+    0x820B, 0xC567,
+    0x820E, 0xC568,
+    0x820F, 0xC569,
+    0x8211, 0xC56A,
+    0x8213, 0xC56B,
+    0x8215, 0xC56C,
+    0x8216, 0xC56D,
+    0x8217, 0xC56E,
+    0x8218, 0xC56F,
+    0x8219, 0xC570,
+    0x821A, 0xC571,
+    0x821D, 0xC572,
+    0x8220, 0xC573,
+    0x8224, 0xC574,
+    0x8225, 0xC575,
+    0x8226, 0xC576,
+    0x8227, 0xC577,
+    0x8229, 0xC578,
+    0x822E, 0xC579,
+    0x8232, 0xC57A,
+    0x823A, 0xC57B,
+    0x823C, 0xC57C,
+    0x823D, 0xC57D,
+    0x823F, 0xC57E,
+    0x8240, 0xC580,
+    0x8241, 0xC581,
+    0x8242, 0xC582,
+    0x8243, 0xC583,
+    0x8245, 0xC584,
+    0x8246, 0xC585,
+    0x8248, 0xC586,
+    0x824A, 0xC587,
+    0x824C, 0xC588,
+    0x824D, 0xC589,
+    0x824E, 0xC58A,
+    0x8250, 0xC58B,
+    0x8251, 0xC58C,
+    0x8252, 0xC58D,
+    0x8253, 0xC58E,
+    0x8254, 0xC58F,
+    0x8255, 0xC590,
+    0x8256, 0xC591,
+    0x8257, 0xC592,
+    0x8259, 0xC593,
+    0x825B, 0xC594,
+    0x825C, 0xC595,
+    0x825D, 0xC596,
+    0x825E, 0xC597,
+    0x8260, 0xC598,
+    0x8261, 0xC599,
+    0x8262, 0xC59A,
+    0x8263, 0xC59B,
+    0x8264, 0xC59C,
+    0x8265, 0xC59D,
+    0x8266, 0xC59E,
+    0x8267, 0xC59F,
+    0x8269, 0xC5A0,
+    0x826A, 0xC640,
+    0x826B, 0xC641,
+    0x826C, 0xC642,
+    0x826D, 0xC643,
+    0x8271, 0xC644,
+    0x8275, 0xC645,
+    0x8276, 0xC646,
+    0x8277, 0xC647,
+    0x8278, 0xC648,
+    0x827B, 0xC649,
+    0x827C, 0xC64A,
+    0x8280, 0xC64B,
+    0x8281, 0xC64C,
+    0x8283, 0xC64D,
+    0x8285, 0xC64E,
+    0x8286, 0xC64F,
+    0x8287, 0xC650,
+    0x8289, 0xC651,
+    0x828C, 0xC652,
+    0x8290, 0xC653,
+    0x8293, 0xC654,
+    0x8294, 0xC655,
+    0x8295, 0xC656,
+    0x8296, 0xC657,
+    0x829A, 0xC658,
+    0x829B, 0xC659,
+    0x829E, 0xC65A,
+    0x82A0, 0xC65B,
+    0x82A2, 0xC65C,
+    0x82A3, 0xC65D,
+    0x82A7, 0xC65E,
+    0x82B2, 0xC65F,
+    0x82B5, 0xC660,
+    0x82B6, 0xC661,
+    0x82BA, 0xC662,
+    0x82BB, 0xC663,
+    0x82BC, 0xC664,
+    0x82BF, 0xC665,
+    0x82C0, 0xC666,
+    0x82C2, 0xC667,
+    0x82C3, 0xC668,
+    0x82C5, 0xC669,
+    0x82C6, 0xC66A,
+    0x82C9, 0xC66B,
+    0x82D0, 0xC66C,
+    0x82D6, 0xC66D,
+    0x82D9, 0xC66E,
+    0x82DA, 0xC66F,
+    0x82DD, 0xC670,
+    0x82E2, 0xC671,
+    0x82E7, 0xC672,
+    0x82E8, 0xC673,
+    0x82E9, 0xC674,
+    0x82EA, 0xC675,
+    0x82EC, 0xC676,
+    0x82ED, 0xC677,
+    0x82EE, 0xC678,
+    0x82F0, 0xC679,
+    0x82F2, 0xC67A,
+    0x82F3, 0xC67B,
+    0x82F5, 0xC67C,
+    0x82F6, 0xC67D,
+    0x82F8, 0xC67E,
+    0x82FA, 0xC680,
+    0x82FC, 0xC681,
+    0x82FD, 0xC682,
+    0x82FE, 0xC683,
+    0x82FF, 0xC684,
+    0x8300, 0xC685,
+    0x830A, 0xC686,
+    0x830B, 0xC687,
+    0x830D, 0xC688,
+    0x8310, 0xC689,
+    0x8312, 0xC68A,
+    0x8313, 0xC68B,
+    0x8316, 0xC68C,
+    0x8318, 0xC68D,
+    0x8319, 0xC68E,
+    0x831D, 0xC68F,
+    0x831E, 0xC690,
+    0x831F, 0xC691,
+    0x8320, 0xC692,
+    0x8321, 0xC693,
+    0x8322, 0xC694,
+    0x8323, 0xC695,
+    0x8324, 0xC696,
+    0x8325, 0xC697,
+    0x8326, 0xC698,
+    0x8329, 0xC699,
+    0x832A, 0xC69A,
+    0x832E, 0xC69B,
+    0x8330, 0xC69C,
+    0x8332, 0xC69D,
+    0x8337, 0xC69E,
+    0x833B, 0xC69F,
+    0x833D, 0xC6A0,
+    0x833E, 0xC740,
+    0x833F, 0xC741,
+    0x8341, 0xC742,
+    0x8342, 0xC743,
+    0x8344, 0xC744,
+    0x8345, 0xC745,
+    0x8348, 0xC746,
+    0x834A, 0xC747,
+    0x834B, 0xC748,
+    0x834C, 0xC749,
+    0x834D, 0xC74A,
+    0x834E, 0xC74B,
+    0x8353, 0xC74C,
+    0x8355, 0xC74D,
+    0x8356, 0xC74E,
+    0x8357, 0xC74F,
+    0x8358, 0xC750,
+    0x8359, 0xC751,
+    0x835D, 0xC752,
+    0x8362, 0xC753,
+    0x8370, 0xC754,
+    0x8371, 0xC755,
+    0x8372, 0xC756,
+    0x8373, 0xC757,
+    0x8374, 0xC758,
+    0x8375, 0xC759,
+    0x8376, 0xC75A,
+    0x8379, 0xC75B,
+    0x837A, 0xC75C,
+    0x837E, 0xC75D,
+    0x837F, 0xC75E,
+    0x8380, 0xC75F,
+    0x8381, 0xC760,
+    0x8382, 0xC761,
+    0x8383, 0xC762,
+    0x8384, 0xC763,
+    0x8387, 0xC764,
+    0x8388, 0xC765,
+    0x838A, 0xC766,
+    0x838B, 0xC767,
+    0x838C, 0xC768,
+    0x838D, 0xC769,
+    0x838F, 0xC76A,
+    0x8390, 0xC76B,
+    0x8391, 0xC76C,
+    0x8394, 0xC76D,
+    0x8395, 0xC76E,
+    0x8396, 0xC76F,
+    0x8397, 0xC770,
+    0x8399, 0xC771,
+    0x839A, 0xC772,
+    0x839D, 0xC773,
+    0x839F, 0xC774,
+    0x83A1, 0xC775,
+    0x83A2, 0xC776,
+    0x83A3, 0xC777,
+    0x83A4, 0xC778,
+    0x83A5, 0xC779,
+    0x83A6, 0xC77A,
+    0x83A7, 0xC77B,
+    0x83AC, 0xC77C,
+    0x83AD, 0xC77D,
+    0x83AE, 0xC77E,
+    0x83AF, 0xC780,
+    0x83B5, 0xC781,
+    0x83BB, 0xC782,
+    0x83BE, 0xC783,
+    0x83BF, 0xC784,
+    0x83C2, 0xC785,
+    0x83C3, 0xC786,
+    0x83C4, 0xC787,
+    0x83C6, 0xC788,
+    0x83C8, 0xC789,
+    0x83C9, 0xC78A,
+    0x83CB, 0xC78B,
+    0x83CD, 0xC78C,
+    0x83CE, 0xC78D,
+    0x83D0, 0xC78E,
+    0x83D1, 0xC78F,
+    0x83D2, 0xC790,
+    0x83D3, 0xC791,
+    0x83D5, 0xC792,
+    0x83D7, 0xC793,
+    0x83D9, 0xC794,
+    0x83DA, 0xC795,
+    0x83DB, 0xC796,
+    0x83DE, 0xC797,
+    0x83E2, 0xC798,
+    0x83E3, 0xC799,
+    0x83E4, 0xC79A,
+    0x83E6, 0xC79B,
+    0x83E7, 0xC79C,
+    0x83E8, 0xC79D,
+    0x83EB, 0xC79E,
+    0x83EC, 0xC79F,
+    0x83ED, 0xC7A0,
+    0x83EE, 0xC840,
+    0x83EF, 0xC841,
+    0x83F3, 0xC842,
+    0x83F4, 0xC843,
+    0x83F5, 0xC844,
+    0x83F6, 0xC845,
+    0x83F7, 0xC846,
+    0x83FA, 0xC847,
+    0x83FB, 0xC848,
+    0x83FC, 0xC849,
+    0x83FE, 0xC84A,
+    0x83FF, 0xC84B,
+    0x8400, 0xC84C,
+    0x8402, 0xC84D,
+    0x8405, 0xC84E,
+    0x8407, 0xC84F,
+    0x8408, 0xC850,
+    0x8409, 0xC851,
+    0x840A, 0xC852,
+    0x8410, 0xC853,
+    0x8412, 0xC854,
+    0x8413, 0xC855,
+    0x8414, 0xC856,
+    0x8415, 0xC857,
+    0x8416, 0xC858,
+    0x8417, 0xC859,
+    0x8419, 0xC85A,
+    0x841A, 0xC85B,
+    0x841B, 0xC85C,
+    0x841E, 0xC85D,
+    0x841F, 0xC85E,
+    0x8420, 0xC85F,
+    0x8421, 0xC860,
+    0x8422, 0xC861,
+    0x8423, 0xC862,
+    0x8429, 0xC863,
+    0x842A, 0xC864,
+    0x842B, 0xC865,
+    0x842C, 0xC866,
+    0x842D, 0xC867,
+    0x842E, 0xC868,
+    0x842F, 0xC869,
+    0x8430, 0xC86A,
+    0x8432, 0xC86B,
+    0x8433, 0xC86C,
+    0x8434, 0xC86D,
+    0x8435, 0xC86E,
+    0x8436, 0xC86F,
+    0x8437, 0xC870,
+    0x8439, 0xC871,
+    0x843A, 0xC872,
+    0x843B, 0xC873,
+    0x843E, 0xC874,
+    0x843F, 0xC875,
+    0x8440, 0xC876,
+    0x8441, 0xC877,
+    0x8442, 0xC878,
+    0x8443, 0xC879,
+    0x8444, 0xC87A,
+    0x8445, 0xC87B,
+    0x8447, 0xC87C,
+    0x8448, 0xC87D,
+    0x8449, 0xC87E,
+    0x844A, 0xC880,
+    0x844B, 0xC881,
+    0x844C, 0xC882,
+    0x844D, 0xC883,
+    0x844E, 0xC884,
+    0x844F, 0xC885,
+    0x8450, 0xC886,
+    0x8452, 0xC887,
+    0x8453, 0xC888,
+    0x8454, 0xC889,
+    0x8455, 0xC88A,
+    0x8456, 0xC88B,
+    0x8458, 0xC88C,
+    0x845D, 0xC88D,
+    0x845E, 0xC88E,
+    0x845F, 0xC88F,
+    0x8460, 0xC890,
+    0x8462, 0xC891,
+    0x8464, 0xC892,
+    0x8465, 0xC893,
+    0x8466, 0xC894,
+    0x8467, 0xC895,
+    0x8468, 0xC896,
+    0x846A, 0xC897,
+    0x846E, 0xC898,
+    0x846F, 0xC899,
+    0x8470, 0xC89A,
+    0x8472, 0xC89B,
+    0x8474, 0xC89C,
+    0x8477, 0xC89D,
+    0x8479, 0xC89E,
+    0x847B, 0xC89F,
+    0x847C, 0xC8A0,
+    0x847D, 0xC940,
+    0x847E, 0xC941,
+    0x847F, 0xC942,
+    0x8480, 0xC943,
+    0x8481, 0xC944,
+    0x8483, 0xC945,
+    0x8484, 0xC946,
+    0x8485, 0xC947,
+    0x8486, 0xC948,
+    0x848A, 0xC949,
+    0x848D, 0xC94A,
+    0x848F, 0xC94B,
+    0x8490, 0xC94C,
+    0x8491, 0xC94D,
+    0x8492, 0xC94E,
+    0x8493, 0xC94F,
+    0x8494, 0xC950,
+    0x8495, 0xC951,
+    0x8496, 0xC952,
+    0x8498, 0xC953,
+    0x849A, 0xC954,
+    0x849B, 0xC955,
+    0x849D, 0xC956,
+    0x849E, 0xC957,
+    0x849F, 0xC958,
+    0x84A0, 0xC959,
+    0x84A2, 0xC95A,
+    0x84A3, 0xC95B,
+    0x84A4, 0xC95C,
+    0x84A5, 0xC95D,
+    0x84A6, 0xC95E,
+    0x84A7, 0xC95F,
+    0x84A8, 0xC960,
+    0x84A9, 0xC961,
+    0x84AA, 0xC962,
+    0x84AB, 0xC963,
+    0x84AC, 0xC964,
+    0x84AD, 0xC965,
+    0x84AE, 0xC966,
+    0x84B0, 0xC967,
+    0x84B1, 0xC968,
+    0x84B3, 0xC969,
+    0x84B5, 0xC96A,
+    0x84B6, 0xC96B,
+    0x84B7, 0xC96C,
+    0x84BB, 0xC96D,
+    0x84BC, 0xC96E,
+    0x84BE, 0xC96F,
+    0x84C0, 0xC970,
+    0x84C2, 0xC971,
+    0x84C3, 0xC972,
+    0x84C5, 0xC973,
+    0x84C6, 0xC974,
+    0x84C7, 0xC975,
+    0x84C8, 0xC976,
+    0x84CB, 0xC977,
+    0x84CC, 0xC978,
+    0x84CE, 0xC979,
+    0x84CF, 0xC97A,
+    0x84D2, 0xC97B,
+    0x84D4, 0xC97C,
+    0x84D5, 0xC97D,
+    0x84D7, 0xC97E,
+    0x84D8, 0xC980,
+    0x84D9, 0xC981,
+    0x84DA, 0xC982,
+    0x84DB, 0xC983,
+    0x84DC, 0xC984,
+    0x84DE, 0xC985,
+    0x84E1, 0xC986,
+    0x84E2, 0xC987,
+    0x84E4, 0xC988,
+    0x84E7, 0xC989,
+    0x84E8, 0xC98A,
+    0x84E9, 0xC98B,
+    0x84EA, 0xC98C,
+    0x84EB, 0xC98D,
+    0x84ED, 0xC98E,
+    0x84EE, 0xC98F,
+    0x84EF, 0xC990,
+    0x84F1, 0xC991,
+    0x84F2, 0xC992,
+    0x84F3, 0xC993,
+    0x84F4, 0xC994,
+    0x84F5, 0xC995,
+    0x84F6, 0xC996,
+    0x84F7, 0xC997,
+    0x84F8, 0xC998,
+    0x84F9, 0xC999,
+    0x84FA, 0xC99A,
+    0x84FB, 0xC99B,
+    0x84FD, 0xC99C,
+    0x84FE, 0xC99D,
+    0x8500, 0xC99E,
+    0x8501, 0xC99F,
+    0x8502, 0xC9A0,
+    0x8503, 0xCA40,
+    0x8504, 0xCA41,
+    0x8505, 0xCA42,
+    0x8506, 0xCA43,
+    0x8507, 0xCA44,
+    0x8508, 0xCA45,
+    0x8509, 0xCA46,
+    0x850A, 0xCA47,
+    0x850B, 0xCA48,
+    0x850D, 0xCA49,
+    0x850E, 0xCA4A,
+    0x850F, 0xCA4B,
+    0x8510, 0xCA4C,
+    0x8512, 0xCA4D,
+    0x8514, 0xCA4E,
+    0x8515, 0xCA4F,
+    0x8516, 0xCA50,
+    0x8518, 0xCA51,
+    0x8519, 0xCA52,
+    0x851B, 0xCA53,
+    0x851C, 0xCA54,
+    0x851D, 0xCA55,
+    0x851E, 0xCA56,
+    0x8520, 0xCA57,
+    0x8522, 0xCA58,
+    0x8523, 0xCA59,
+    0x8524, 0xCA5A,
+    0x8525, 0xCA5B,
+    0x8526, 0xCA5C,
+    0x8527, 0xCA5D,
+    0x8528, 0xCA5E,
+    0x8529, 0xCA5F,
+    0x852A, 0xCA60,
+    0x852D, 0xCA61,
+    0x852E, 0xCA62,
+    0x852F, 0xCA63,
+    0x8530, 0xCA64,
+    0x8531, 0xCA65,
+    0x8532, 0xCA66,
+    0x8533, 0xCA67,
+    0x8534, 0xCA68,
+    0x8535, 0xCA69,
+    0x8536, 0xCA6A,
+    0x853E, 0xCA6B,
+    0x853F, 0xCA6C,
+    0x8540, 0xCA6D,
+    0x8541, 0xCA6E,
+    0x8542, 0xCA6F,
+    0x8544, 0xCA70,
+    0x8545, 0xCA71,
+    0x8546, 0xCA72,
+    0x8547, 0xCA73,
+    0x854B, 0xCA74,
+    0x854C, 0xCA75,
+    0x854D, 0xCA76,
+    0x854E, 0xCA77,
+    0x854F, 0xCA78,
+    0x8550, 0xCA79,
+    0x8551, 0xCA7A,
+    0x8552, 0xCA7B,
+    0x8553, 0xCA7C,
+    0x8554, 0xCA7D,
+    0x8555, 0xCA7E,
+    0x8557, 0xCA80,
+    0x8558, 0xCA81,
+    0x855A, 0xCA82,
+    0x855B, 0xCA83,
+    0x855C, 0xCA84,
+    0x855D, 0xCA85,
+    0x855F, 0xCA86,
+    0x8560, 0xCA87,
+    0x8561, 0xCA88,
+    0x8562, 0xCA89,
+    0x8563, 0xCA8A,
+    0x8565, 0xCA8B,
+    0x8566, 0xCA8C,
+    0x8567, 0xCA8D,
+    0x8569, 0xCA8E,
+    0x856A, 0xCA8F,
+    0x856B, 0xCA90,
+    0x856C, 0xCA91,
+    0x856D, 0xCA92,
+    0x856E, 0xCA93,
+    0x856F, 0xCA94,
+    0x8570, 0xCA95,
+    0x8571, 0xCA96,
+    0x8573, 0xCA97,
+    0x8575, 0xCA98,
+    0x8576, 0xCA99,
+    0x8577, 0xCA9A,
+    0x8578, 0xCA9B,
+    0x857C, 0xCA9C,
+    0x857D, 0xCA9D,
+    0x857F, 0xCA9E,
+    0x8580, 0xCA9F,
+    0x8581, 0xCAA0,
+    0x8582, 0xCB40,
+    0x8583, 0xCB41,
+    0x8586, 0xCB42,
+    0x8588, 0xCB43,
+    0x8589, 0xCB44,
+    0x858A, 0xCB45,
+    0x858B, 0xCB46,
+    0x858C, 0xCB47,
+    0x858D, 0xCB48,
+    0x858E, 0xCB49,
+    0x8590, 0xCB4A,
+    0x8591, 0xCB4B,
+    0x8592, 0xCB4C,
+    0x8593, 0xCB4D,
+    0x8594, 0xCB4E,
+    0x8595, 0xCB4F,
+    0x8596, 0xCB50,
+    0x8597, 0xCB51,
+    0x8598, 0xCB52,
+    0x8599, 0xCB53,
+    0x859A, 0xCB54,
+    0x859D, 0xCB55,
+    0x859E, 0xCB56,
+    0x859F, 0xCB57,
+    0x85A0, 0xCB58,
+    0x85A1, 0xCB59,
+    0x85A2, 0xCB5A,
+    0x85A3, 0xCB5B,
+    0x85A5, 0xCB5C,
+    0x85A6, 0xCB5D,
+    0x85A7, 0xCB5E,
+    0x85A9, 0xCB5F,
+    0x85AB, 0xCB60,
+    0x85AC, 0xCB61,
+    0x85AD, 0xCB62,
+    0x85B1, 0xCB63,
+    0x85B2, 0xCB64,
+    0x85B3, 0xCB65,
+    0x85B4, 0xCB66,
+    0x85B5, 0xCB67,
+    0x85B6, 0xCB68,
+    0x85B8, 0xCB69,
+    0x85BA, 0xCB6A,
+    0x85BB, 0xCB6B,
+    0x85BC, 0xCB6C,
+    0x85BD, 0xCB6D,
+    0x85BE, 0xCB6E,
+    0x85BF, 0xCB6F,
+    0x85C0, 0xCB70,
+    0x85C2, 0xCB71,
+    0x85C3, 0xCB72,
+    0x85C4, 0xCB73,
+    0x85C5, 0xCB74,
+    0x85C6, 0xCB75,
+    0x85C7, 0xCB76,
+    0x85C8, 0xCB77,
+    0x85CA, 0xCB78,
+    0x85CB, 0xCB79,
+    0x85CC, 0xCB7A,
+    0x85CD, 0xCB7B,
+    0x85CE, 0xCB7C,
+    0x85D1, 0xCB7D,
+    0x85D2, 0xCB7E,
+    0x85D4, 0xCB80,
+    0x85D6, 0xCB81,
+    0x85D7, 0xCB82,
+    0x85D8, 0xCB83,
+    0x85D9, 0xCB84,
+    0x85DA, 0xCB85,
+    0x85DB, 0xCB86,
+    0x85DD, 0xCB87,
+    0x85DE, 0xCB88,
+    0x85DF, 0xCB89,
+    0x85E0, 0xCB8A,
+    0x85E1, 0xCB8B,
+    0x85E2, 0xCB8C,
+    0x85E3, 0xCB8D,
+    0x85E5, 0xCB8E,
+    0x85E6, 0xCB8F,
+    0x85E7, 0xCB90,
+    0x85E8, 0xCB91,
+    0x85EA, 0xCB92,
+    0x85EB, 0xCB93,
+    0x85EC, 0xCB94,
+    0x85ED, 0xCB95,
+    0x85EE, 0xCB96,
+    0x85EF, 0xCB97,
+    0x85F0, 0xCB98,
+    0x85F1, 0xCB99,
+    0x85F2, 0xCB9A,
+    0x85F3, 0xCB9B,
+    0x85F4, 0xCB9C,
+    0x85F5, 0xCB9D,
+    0x85F6, 0xCB9E,
+    0x85F7, 0xCB9F,
+    0x85F8, 0xCBA0,
+    0x85F9, 0xCC40,
+    0x85FA, 0xCC41,
+    0x85FC, 0xCC42,
+    0x85FD, 0xCC43,
+    0x85FE, 0xCC44,
+    0x8600, 0xCC45,
+    0x8601, 0xCC46,
+    0x8602, 0xCC47,
+    0x8603, 0xCC48,
+    0x8604, 0xCC49,
+    0x8606, 0xCC4A,
+    0x8607, 0xCC4B,
+    0x8608, 0xCC4C,
+    0x8609, 0xCC4D,
+    0x860A, 0xCC4E,
+    0x860B, 0xCC4F,
+    0x860C, 0xCC50,
+    0x860D, 0xCC51,
+    0x860E, 0xCC52,
+    0x860F, 0xCC53,
+    0x8610, 0xCC54,
+    0x8612, 0xCC55,
+    0x8613, 0xCC56,
+    0x8614, 0xCC57,
+    0x8615, 0xCC58,
+    0x8617, 0xCC59,
+    0x8618, 0xCC5A,
+    0x8619, 0xCC5B,
+    0x861A, 0xCC5C,
+    0x861B, 0xCC5D,
+    0x861C, 0xCC5E,
+    0x861D, 0xCC5F,
+    0x861E, 0xCC60,
+    0x861F, 0xCC61,
+    0x8620, 0xCC62,
+    0x8621, 0xCC63,
+    0x8622, 0xCC64,
+    0x8623, 0xCC65,
+    0x8624, 0xCC66,
+    0x8625, 0xCC67,
+    0x8626, 0xCC68,
+    0x8628, 0xCC69,
+    0x862A, 0xCC6A,
+    0x862B, 0xCC6B,
+    0x862C, 0xCC6C,
+    0x862D, 0xCC6D,
+    0x862E, 0xCC6E,
+    0x862F, 0xCC6F,
+    0x8630, 0xCC70,
+    0x8631, 0xCC71,
+    0x8632, 0xCC72,
+    0x8633, 0xCC73,
+    0x8634, 0xCC74,
+    0x8635, 0xCC75,
+    0x8636, 0xCC76,
+    0x8637, 0xCC77,
+    0x8639, 0xCC78,
+    0x863A, 0xCC79,
+    0x863B, 0xCC7A,
+    0x863D, 0xCC7B,
+    0x863E, 0xCC7C,
+    0x863F, 0xCC7D,
+    0x8640, 0xCC7E,
+    0x8641, 0xCC80,
+    0x8642, 0xCC81,
+    0x8643, 0xCC82,
+    0x8644, 0xCC83,
+    0x8645, 0xCC84,
+    0x8646, 0xCC85,
+    0x8647, 0xCC86,
+    0x8648, 0xCC87,
+    0x8649, 0xCC88,
+    0x864A, 0xCC89,
+    0x864B, 0xCC8A,
+    0x864C, 0xCC8B,
+    0x8652, 0xCC8C,
+    0x8653, 0xCC8D,
+    0x8655, 0xCC8E,
+    0x8656, 0xCC8F,
+    0x8657, 0xCC90,
+    0x8658, 0xCC91,
+    0x8659, 0xCC92,
+    0x865B, 0xCC93,
+    0x865C, 0xCC94,
+    0x865D, 0xCC95,
+    0x865F, 0xCC96,
+    0x8660, 0xCC97,
+    0x8661, 0xCC98,
+    0x8663, 0xCC99,
+    0x8664, 0xCC9A,
+    0x8665, 0xCC9B,
+    0x8666, 0xCC9C,
+    0x8667, 0xCC9D,
+    0x8668, 0xCC9E,
+    0x8669, 0xCC9F,
+    0x866A, 0xCCA0,
+    0x866D, 0xCD40,
+    0x866F, 0xCD41,
+    0x8670, 0xCD42,
+    0x8672, 0xCD43,
+    0x8673, 0xCD44,
+    0x8674, 0xCD45,
+    0x8675, 0xCD46,
+    0x8676, 0xCD47,
+    0x8677, 0xCD48,
+    0x8678, 0xCD49,
+    0x8683, 0xCD4A,
+    0x8684, 0xCD4B,
+    0x8685, 0xCD4C,
+    0x8686, 0xCD4D,
+    0x8687, 0xCD4E,
+    0x8688, 0xCD4F,
+    0x8689, 0xCD50,
+    0x868E, 0xCD51,
+    0x868F, 0xCD52,
+    0x8690, 0xCD53,
+    0x8691, 0xCD54,
+    0x8692, 0xCD55,
+    0x8694, 0xCD56,
+    0x8696, 0xCD57,
+    0x8697, 0xCD58,
+    0x8698, 0xCD59,
+    0x8699, 0xCD5A,
+    0x869A, 0xCD5B,
+    0x869B, 0xCD5C,
+    0x869E, 0xCD5D,
+    0x869F, 0xCD5E,
+    0x86A0, 0xCD5F,
+    0x86A1, 0xCD60,
+    0x86A2, 0xCD61,
+    0x86A5, 0xCD62,
+    0x86A6, 0xCD63,
+    0x86AB, 0xCD64,
+    0x86AD, 0xCD65,
+    0x86AE, 0xCD66,
+    0x86B2, 0xCD67,
+    0x86B3, 0xCD68,
+    0x86B7, 0xCD69,
+    0x86B8, 0xCD6A,
+    0x86B9, 0xCD6B,
+    0x86BB, 0xCD6C,
+    0x86BC, 0xCD6D,
+    0x86BD, 0xCD6E,
+    0x86BE, 0xCD6F,
+    0x86BF, 0xCD70,
+    0x86C1, 0xCD71,
+    0x86C2, 0xCD72,
+    0x86C3, 0xCD73,
+    0x86C5, 0xCD74,
+    0x86C8, 0xCD75,
+    0x86CC, 0xCD76,
+    0x86CD, 0xCD77,
+    0x86D2, 0xCD78,
+    0x86D3, 0xCD79,
+    0x86D5, 0xCD7A,
+    0x86D6, 0xCD7B,
+    0x86D7, 0xCD7C,
+    0x86DA, 0xCD7D,
+    0x86DC, 0xCD7E,
+    0x86DD, 0xCD80,
+    0x86E0, 0xCD81,
+    0x86E1, 0xCD82,
+    0x86E2, 0xCD83,
+    0x86E3, 0xCD84,
+    0x86E5, 0xCD85,
+    0x86E6, 0xCD86,
+    0x86E7, 0xCD87,
+    0x86E8, 0xCD88,
+    0x86EA, 0xCD89,
+    0x86EB, 0xCD8A,
+    0x86EC, 0xCD8B,
+    0x86EF, 0xCD8C,
+    0x86F5, 0xCD8D,
+    0x86F6, 0xCD8E,
+    0x86F7, 0xCD8F,
+    0x86FA, 0xCD90,
+    0x86FB, 0xCD91,
+    0x86FC, 0xCD92,
+    0x86FD, 0xCD93,
+    0x86FF, 0xCD94,
+    0x8701, 0xCD95,
+    0x8704, 0xCD96,
+    0x8705, 0xCD97,
+    0x8706, 0xCD98,
+    0x870B, 0xCD99,
+    0x870C, 0xCD9A,
+    0x870E, 0xCD9B,
+    0x870F, 0xCD9C,
+    0x8710, 0xCD9D,
+    0x8711, 0xCD9E,
+    0x8714, 0xCD9F,
+    0x8716, 0xCDA0,
+    0x8719, 0xCE40,
+    0x871B, 0xCE41,
+    0x871D, 0xCE42,
+    0x871F, 0xCE43,
+    0x8720, 0xCE44,
+    0x8724, 0xCE45,
+    0x8726, 0xCE46,
+    0x8727, 0xCE47,
+    0x8728, 0xCE48,
+    0x872A, 0xCE49,
+    0x872B, 0xCE4A,
+    0x872C, 0xCE4B,
+    0x872D, 0xCE4C,
+    0x872F, 0xCE4D,
+    0x8730, 0xCE4E,
+    0x8732, 0xCE4F,
+    0x8733, 0xCE50,
+    0x8735, 0xCE51,
+    0x8736, 0xCE52,
+    0x8738, 0xCE53,
+    0x8739, 0xCE54,
+    0x873A, 0xCE55,
+    0x873C, 0xCE56,
+    0x873D, 0xCE57,
+    0x8740, 0xCE58,
+    0x8741, 0xCE59,
+    0x8742, 0xCE5A,
+    0x8743, 0xCE5B,
+    0x8744, 0xCE5C,
+    0x8745, 0xCE5D,
+    0x8746, 0xCE5E,
+    0x874A, 0xCE5F,
+    0x874B, 0xCE60,
+    0x874D, 0xCE61,
+    0x874F, 0xCE62,
+    0x8750, 0xCE63,
+    0x8751, 0xCE64,
+    0x8752, 0xCE65,
+    0x8754, 0xCE66,
+    0x8755, 0xCE67,
+    0x8756, 0xCE68,
+    0x8758, 0xCE69,
+    0x875A, 0xCE6A,
+    0x875B, 0xCE6B,
+    0x875C, 0xCE6C,
+    0x875D, 0xCE6D,
+    0x875E, 0xCE6E,
+    0x875F, 0xCE6F,
+    0x8761, 0xCE70,
+    0x8762, 0xCE71,
+    0x8766, 0xCE72,
+    0x8767, 0xCE73,
+    0x8768, 0xCE74,
+    0x8769, 0xCE75,
+    0x876A, 0xCE76,
+    0x876B, 0xCE77,
+    0x876C, 0xCE78,
+    0x876D, 0xCE79,
+    0x876F, 0xCE7A,
+    0x8771, 0xCE7B,
+    0x8772, 0xCE7C,
+    0x8773, 0xCE7D,
+    0x8775, 0xCE7E,
+    0x8777, 0xCE80,
+    0x8778, 0xCE81,
+    0x8779, 0xCE82,
+    0x877A, 0xCE83,
+    0x877F, 0xCE84,
+    0x8780, 0xCE85,
+    0x8781, 0xCE86,
+    0x8784, 0xCE87,
+    0x8786, 0xCE88,
+    0x8787, 0xCE89,
+    0x8789, 0xCE8A,
+    0x878A, 0xCE8B,
+    0x878C, 0xCE8C,
+    0x878E, 0xCE8D,
+    0x878F, 0xCE8E,
+    0x8790, 0xCE8F,
+    0x8791, 0xCE90,
+    0x8792, 0xCE91,
+    0x8794, 0xCE92,
+    0x8795, 0xCE93,
+    0x8796, 0xCE94,
+    0x8798, 0xCE95,
+    0x8799, 0xCE96,
+    0x879A, 0xCE97,
+    0x879B, 0xCE98,
+    0x879C, 0xCE99,
+    0x879D, 0xCE9A,
+    0x879E, 0xCE9B,
+    0x87A0, 0xCE9C,
+    0x87A1, 0xCE9D,
+    0x87A2, 0xCE9E,
+    0x87A3, 0xCE9F,
+    0x87A4, 0xCEA0,
+    0x87A5, 0xCF40,
+    0x87A6, 0xCF41,
+    0x87A7, 0xCF42,
+    0x87A9, 0xCF43,
+    0x87AA, 0xCF44,
+    0x87AE, 0xCF45,
+    0x87B0, 0xCF46,
+    0x87B1, 0xCF47,
+    0x87B2, 0xCF48,
+    0x87B4, 0xCF49,
+    0x87B6, 0xCF4A,
+    0x87B7, 0xCF4B,
+    0x87B8, 0xCF4C,
+    0x87B9, 0xCF4D,
+    0x87BB, 0xCF4E,
+    0x87BC, 0xCF4F,
+    0x87BE, 0xCF50,
+    0x87BF, 0xCF51,
+    0x87C1, 0xCF52,
+    0x87C2, 0xCF53,
+    0x87C3, 0xCF54,
+    0x87C4, 0xCF55,
+    0x87C5, 0xCF56,
+    0x87C7, 0xCF57,
+    0x87C8, 0xCF58,
+    0x87C9, 0xCF59,
+    0x87CC, 0xCF5A,
+    0x87CD, 0xCF5B,
+    0x87CE, 0xCF5C,
+    0x87CF, 0xCF5D,
+    0x87D0, 0xCF5E,
+    0x87D4, 0xCF5F,
+    0x87D5, 0xCF60,
+    0x87D6, 0xCF61,
+    0x87D7, 0xCF62,
+    0x87D8, 0xCF63,
+    0x87D9, 0xCF64,
+    0x87DA, 0xCF65,
+    0x87DC, 0xCF66,
+    0x87DD, 0xCF67,
+    0x87DE, 0xCF68,
+    0x87DF, 0xCF69,
+    0x87E1, 0xCF6A,
+    0x87E2, 0xCF6B,
+    0x87E3, 0xCF6C,
+    0x87E4, 0xCF6D,
+    0x87E6, 0xCF6E,
+    0x87E7, 0xCF6F,
+    0x87E8, 0xCF70,
+    0x87E9, 0xCF71,
+    0x87EB, 0xCF72,
+    0x87EC, 0xCF73,
+    0x87ED, 0xCF74,
+    0x87EF, 0xCF75,
+    0x87F0, 0xCF76,
+    0x87F1, 0xCF77,
+    0x87F2, 0xCF78,
+    0x87F3, 0xCF79,
+    0x87F4, 0xCF7A,
+    0x87F5, 0xCF7B,
+    0x87F6, 0xCF7C,
+    0x87F7, 0xCF7D,
+    0x87F8, 0xCF7E,
+    0x87FA, 0xCF80,
+    0x87FB, 0xCF81,
+    0x87FC, 0xCF82,
+    0x87FD, 0xCF83,
+    0x87FF, 0xCF84,
+    0x8800, 0xCF85,
+    0x8801, 0xCF86,
+    0x8802, 0xCF87,
+    0x8804, 0xCF88,
+    0x8805, 0xCF89,
+    0x8806, 0xCF8A,
+    0x8807, 0xCF8B,
+    0x8808, 0xCF8C,
+    0x8809, 0xCF8D,
+    0x880B, 0xCF8E,
+    0x880C, 0xCF8F,
+    0x880D, 0xCF90,
+    0x880E, 0xCF91,
+    0x880F, 0xCF92,
+    0x8810, 0xCF93,
+    0x8811, 0xCF94,
+    0x8812, 0xCF95,
+    0x8814, 0xCF96,
+    0x8817, 0xCF97,
+    0x8818, 0xCF98,
+    0x8819, 0xCF99,
+    0x881A, 0xCF9A,
+    0x881C, 0xCF9B,
+    0x881D, 0xCF9C,
+    0x881E, 0xCF9D,
+    0x881F, 0xCF9E,
+    0x8820, 0xCF9F,
+    0x8823, 0xCFA0,
+    0x8824, 0xD040,
+    0x8825, 0xD041,
+    0x8826, 0xD042,
+    0x8827, 0xD043,
+    0x8828, 0xD044,
+    0x8829, 0xD045,
+    0x882A, 0xD046,
+    0x882B, 0xD047,
+    0x882C, 0xD048,
+    0x882D, 0xD049,
+    0x882E, 0xD04A,
+    0x882F, 0xD04B,
+    0x8830, 0xD04C,
+    0x8831, 0xD04D,
+    0x8833, 0xD04E,
+    0x8834, 0xD04F,
+    0x8835, 0xD050,
+    0x8836, 0xD051,
+    0x8837, 0xD052,
+    0x8838, 0xD053,
+    0x883A, 0xD054,
+    0x883B, 0xD055,
+    0x883D, 0xD056,
+    0x883E, 0xD057,
+    0x883F, 0xD058,
+    0x8841, 0xD059,
+    0x8842, 0xD05A,
+    0x8843, 0xD05B,
+    0x8846, 0xD05C,
+    0x8847, 0xD05D,
+    0x8848, 0xD05E,
+    0x8849, 0xD05F,
+    0x884A, 0xD060,
+    0x884B, 0xD061,
+    0x884E, 0xD062,
+    0x884F, 0xD063,
+    0x8850, 0xD064,
+    0x8851, 0xD065,
+    0x8852, 0xD066,
+    0x8853, 0xD067,
+    0x8855, 0xD068,
+    0x8856, 0xD069,
+    0x8858, 0xD06A,
+    0x885A, 0xD06B,
+    0x885B, 0xD06C,
+    0x885C, 0xD06D,
+    0x885D, 0xD06E,
+    0x885E, 0xD06F,
+    0x885F, 0xD070,
+    0x8860, 0xD071,
+    0x8866, 0xD072,
+    0x8867, 0xD073,
+    0x886A, 0xD074,
+    0x886D, 0xD075,
+    0x886F, 0xD076,
+    0x8871, 0xD077,
+    0x8873, 0xD078,
+    0x8874, 0xD079,
+    0x8875, 0xD07A,
+    0x8876, 0xD07B,
+    0x8878, 0xD07C,
+    0x8879, 0xD07D,
+    0x887A, 0xD07E,
+    0x887B, 0xD080,
+    0x887C, 0xD081,
+    0x8880, 0xD082,
+    0x8883, 0xD083,
+    0x8886, 0xD084,
+    0x8887, 0xD085,
+    0x8889, 0xD086,
+    0x888A, 0xD087,
+    0x888C, 0xD088,
+    0x888E, 0xD089,
+    0x888F, 0xD08A,
+    0x8890, 0xD08B,
+    0x8891, 0xD08C,
+    0x8893, 0xD08D,
+    0x8894, 0xD08E,
+    0x8895, 0xD08F,
+    0x8897, 0xD090,
+    0x8898, 0xD091,
+    0x8899, 0xD092,
+    0x889A, 0xD093,
+    0x889B, 0xD094,
+    0x889D, 0xD095,
+    0x889E, 0xD096,
+    0x889F, 0xD097,
+    0x88A0, 0xD098,
+    0x88A1, 0xD099,
+    0x88A3, 0xD09A,
+    0x88A5, 0xD09B,
+    0x88A6, 0xD09C,
+    0x88A7, 0xD09D,
+    0x88A8, 0xD09E,
+    0x88A9, 0xD09F,
+    0x88AA, 0xD0A0,
+    0x88AC, 0xD140,
+    0x88AE, 0xD141,
+    0x88AF, 0xD142,
+    0x88B0, 0xD143,
+    0x88B2, 0xD144,
+    0x88B3, 0xD145,
+    0x88B4, 0xD146,
+    0x88B5, 0xD147,
+    0x88B6, 0xD148,
+    0x88B8, 0xD149,
+    0x88B9, 0xD14A,
+    0x88BA, 0xD14B,
+    0x88BB, 0xD14C,
+    0x88BD, 0xD14D,
+    0x88BE, 0xD14E,
+    0x88BF, 0xD14F,
+    0x88C0, 0xD150,
+    0x88C3, 0xD151,
+    0x88C4, 0xD152,
+    0x88C7, 0xD153,
+    0x88C8, 0xD154,
+    0x88CA, 0xD155,
+    0x88CB, 0xD156,
+    0x88CC, 0xD157,
+    0x88CD, 0xD158,
+    0x88CF, 0xD159,
+    0x88D0, 0xD15A,
+    0x88D1, 0xD15B,
+    0x88D3, 0xD15C,
+    0x88D6, 0xD15D,
+    0x88D7, 0xD15E,
+    0x88DA, 0xD15F,
+    0x88DB, 0xD160,
+    0x88DC, 0xD161,
+    0x88DD, 0xD162,
+    0x88DE, 0xD163,
+    0x88E0, 0xD164,
+    0x88E1, 0xD165,
+    0x88E6, 0xD166,
+    0x88E7, 0xD167,
+    0x88E9, 0xD168,
+    0x88EA, 0xD169,
+    0x88EB, 0xD16A,
+    0x88EC, 0xD16B,
+    0x88ED, 0xD16C,
+    0x88EE, 0xD16D,
+    0x88EF, 0xD16E,
+    0x88F2, 0xD16F,
+    0x88F5, 0xD170,
+    0x88F6, 0xD171,
+    0x88F7, 0xD172,
+    0x88FA, 0xD173,
+    0x88FB, 0xD174,
+    0x88FD, 0xD175,
+    0x88FF, 0xD176,
+    0x8900, 0xD177,
+    0x8901, 0xD178,
+    0x8903, 0xD179,
+    0x8904, 0xD17A,
+    0x8905, 0xD17B,
+    0x8906, 0xD17C,
+    0x8907, 0xD17D,
+    0x8908, 0xD17E,
+    0x8909, 0xD180,
+    0x890B, 0xD181,
+    0x890C, 0xD182,
+    0x890D, 0xD183,
+    0x890E, 0xD184,
+    0x890F, 0xD185,
+    0x8911, 0xD186,
+    0x8914, 0xD187,
+    0x8915, 0xD188,
+    0x8916, 0xD189,
+    0x8917, 0xD18A,
+    0x8918, 0xD18B,
+    0x891C, 0xD18C,
+    0x891D, 0xD18D,
+    0x891E, 0xD18E,
+    0x891F, 0xD18F,
+    0x8920, 0xD190,
+    0x8922, 0xD191,
+    0x8923, 0xD192,
+    0x8924, 0xD193,
+    0x8926, 0xD194,
+    0x8927, 0xD195,
+    0x8928, 0xD196,
+    0x8929, 0xD197,
+    0x892C, 0xD198,
+    0x892D, 0xD199,
+    0x892E, 0xD19A,
+    0x892F, 0xD19B,
+    0x8931, 0xD19C,
+    0x8932, 0xD19D,
+    0x8933, 0xD19E,
+    0x8935, 0xD19F,
+    0x8937, 0xD1A0,
+    0x8938, 0xD240,
+    0x8939, 0xD241,
+    0x893A, 0xD242,
+    0x893B, 0xD243,
+    0x893C, 0xD244,
+    0x893D, 0xD245,
+    0x893E, 0xD246,
+    0x893F, 0xD247,
+    0x8940, 0xD248,
+    0x8942, 0xD249,
+    0x8943, 0xD24A,
+    0x8945, 0xD24B,
+    0x8946, 0xD24C,
+    0x8947, 0xD24D,
+    0x8948, 0xD24E,
+    0x8949, 0xD24F,
+    0x894A, 0xD250,
+    0x894B, 0xD251,
+    0x894C, 0xD252,
+    0x894D, 0xD253,
+    0x894E, 0xD254,
+    0x894F, 0xD255,
+    0x8950, 0xD256,
+    0x8951, 0xD257,
+    0x8952, 0xD258,
+    0x8953, 0xD259,
+    0x8954, 0xD25A,
+    0x8955, 0xD25B,
+    0x8956, 0xD25C,
+    0x8957, 0xD25D,
+    0x8958, 0xD25E,
+    0x8959, 0xD25F,
+    0x895A, 0xD260,
+    0x895B, 0xD261,
+    0x895C, 0xD262,
+    0x895D, 0xD263,
+    0x8960, 0xD264,
+    0x8961, 0xD265,
+    0x8962, 0xD266,
+    0x8963, 0xD267,
+    0x8964, 0xD268,
+    0x8965, 0xD269,
+    0x8967, 0xD26A,
+    0x8968, 0xD26B,
+    0x8969, 0xD26C,
+    0x896A, 0xD26D,
+    0x896B, 0xD26E,
+    0x896C, 0xD26F,
+    0x896D, 0xD270,
+    0x896E, 0xD271,
+    0x896F, 0xD272,
+    0x8970, 0xD273,
+    0x8971, 0xD274,
+    0x8972, 0xD275,
+    0x8973, 0xD276,
+    0x8974, 0xD277,
+    0x8975, 0xD278,
+    0x8976, 0xD279,
+    0x8977, 0xD27A,
+    0x8978, 0xD27B,
+    0x8979, 0xD27C,
+    0x897A, 0xD27D,
+    0x897C, 0xD27E,
+    0x897D, 0xD280,
+    0x897E, 0xD281,
+    0x8980, 0xD282,
+    0x8982, 0xD283,
+    0x8984, 0xD284,
+    0x8985, 0xD285,
+    0x8987, 0xD286,
+    0x8988, 0xD287,
+    0x8989, 0xD288,
+    0x898A, 0xD289,
+    0x898B, 0xD28A,
+    0x898C, 0xD28B,
+    0x898D, 0xD28C,
+    0x898E, 0xD28D,
+    0x898F, 0xD28E,
+    0x8990, 0xD28F,
+    0x8991, 0xD290,
+    0x8992, 0xD291,
+    0x8993, 0xD292,
+    0x8994, 0xD293,
+    0x8995, 0xD294,
+    0x8996, 0xD295,
+    0x8997, 0xD296,
+    0x8998, 0xD297,
+    0x8999, 0xD298,
+    0x899A, 0xD299,
+    0x899B, 0xD29A,
+    0x899C, 0xD29B,
+    0x899D, 0xD29C,
+    0x899E, 0xD29D,
+    0x899F, 0xD29E,
+    0x89A0, 0xD29F,
+    0x89A1, 0xD2A0,
+    0x89A2, 0xD340,
+    0x89A3, 0xD341,
+    0x89A4, 0xD342,
+    0x89A5, 0xD343,
+    0x89A6, 0xD344,
+    0x89A7, 0xD345,
+    0x89A8, 0xD346,
+    0x89A9, 0xD347,
+    0x89AA, 0xD348,
+    0x89AB, 0xD349,
+    0x89AC, 0xD34A,
+    0x89AD, 0xD34B,
+    0x89AE, 0xD34C,
+    0x89AF, 0xD34D,
+    0x89B0, 0xD34E,
+    0x89B1, 0xD34F,
+    0x89B2, 0xD350,
+    0x89B3, 0xD351,
+    0x89B4, 0xD352,
+    0x89B5, 0xD353,
+    0x89B6, 0xD354,
+    0x89B7, 0xD355,
+    0x89B8, 0xD356,
+    0x89B9, 0xD357,
+    0x89BA, 0xD358,
+    0x89BB, 0xD359,
+    0x89BC, 0xD35A,
+    0x89BD, 0xD35B,
+    0x89BE, 0xD35C,
+    0x89BF, 0xD35D,
+    0x89C0, 0xD35E,
+    0x89C3, 0xD35F,
+    0x89CD, 0xD360,
+    0x89D3, 0xD361,
+    0x89D4, 0xD362,
+    0x89D5, 0xD363,
+    0x89D7, 0xD364,
+    0x89D8, 0xD365,
+    0x89D9, 0xD366,
+    0x89DB, 0xD367,
+    0x89DD, 0xD368,
+    0x89DF, 0xD369,
+    0x89E0, 0xD36A,
+    0x89E1, 0xD36B,
+    0x89E2, 0xD36C,
+    0x89E4, 0xD36D,
+    0x89E7, 0xD36E,
+    0x89E8, 0xD36F,
+    0x89E9, 0xD370,
+    0x89EA, 0xD371,
+    0x89EC, 0xD372,
+    0x89ED, 0xD373,
+    0x89EE, 0xD374,
+    0x89F0, 0xD375,
+    0x89F1, 0xD376,
+    0x89F2, 0xD377,
+    0x89F4, 0xD378,
+    0x89F5, 0xD379,
+    0x89F6, 0xD37A,
+    0x89F7, 0xD37B,
+    0x89F8, 0xD37C,
+    0x89F9, 0xD37D,
+    0x89FA, 0xD37E,
+    0x89FB, 0xD380,
+    0x89FC, 0xD381,
+    0x89FD, 0xD382,
+    0x89FE, 0xD383,
+    0x89FF, 0xD384,
+    0x8A01, 0xD385,
+    0x8A02, 0xD386,
+    0x8A03, 0xD387,
+    0x8A04, 0xD388,
+    0x8A05, 0xD389,
+    0x8A06, 0xD38A,
+    0x8A08, 0xD38B,
+    0x8A09, 0xD38C,
+    0x8A0A, 0xD38D,
+    0x8A0B, 0xD38E,
+    0x8A0C, 0xD38F,
+    0x8A0D, 0xD390,
+    0x8A0E, 0xD391,
+    0x8A0F, 0xD392,
+    0x8A10, 0xD393,
+    0x8A11, 0xD394,
+    0x8A12, 0xD395,
+    0x8A13, 0xD396,
+    0x8A14, 0xD397,
+    0x8A15, 0xD398,
+    0x8A16, 0xD399,
+    0x8A17, 0xD39A,
+    0x8A18, 0xD39B,
+    0x8A19, 0xD39C,
+    0x8A1A, 0xD39D,
+    0x8A1B, 0xD39E,
+    0x8A1C, 0xD39F,
+    0x8A1D, 0xD3A0,
+    0x8A1E, 0xD440,
+    0x8A1F, 0xD441,
+    0x8A20, 0xD442,
+    0x8A21, 0xD443,
+    0x8A22, 0xD444,
+    0x8A23, 0xD445,
+    0x8A24, 0xD446,
+    0x8A25, 0xD447,
+    0x8A26, 0xD448,
+    0x8A27, 0xD449,
+    0x8A28, 0xD44A,
+    0x8A29, 0xD44B,
+    0x8A2A, 0xD44C,
+    0x8A2B, 0xD44D,
+    0x8A2C, 0xD44E,
+    0x8A2D, 0xD44F,
+    0x8A2E, 0xD450,
+    0x8A2F, 0xD451,
+    0x8A30, 0xD452,
+    0x8A31, 0xD453,
+    0x8A32, 0xD454,
+    0x8A33, 0xD455,
+    0x8A34, 0xD456,
+    0x8A35, 0xD457,
+    0x8A36, 0xD458,
+    0x8A37, 0xD459,
+    0x8A38, 0xD45A,
+    0x8A39, 0xD45B,
+    0x8A3A, 0xD45C,
+    0x8A3B, 0xD45D,
+    0x8A3C, 0xD45E,
+    0x8A3D, 0xD45F,
+    0x8A3F, 0xD460,
+    0x8A40, 0xD461,
+    0x8A41, 0xD462,
+    0x8A42, 0xD463,
+    0x8A43, 0xD464,
+    0x8A44, 0xD465,
+    0x8A45, 0xD466,
+    0x8A46, 0xD467,
+    0x8A47, 0xD468,
+    0x8A49, 0xD469,
+    0x8A4A, 0xD46A,
+    0x8A4B, 0xD46B,
+    0x8A4C, 0xD46C,
+    0x8A4D, 0xD46D,
+    0x8A4E, 0xD46E,
+    0x8A4F, 0xD46F,
+    0x8A50, 0xD470,
+    0x8A51, 0xD471,
+    0x8A52, 0xD472,
+    0x8A53, 0xD473,
+    0x8A54, 0xD474,
+    0x8A55, 0xD475,
+    0x8A56, 0xD476,
+    0x8A57, 0xD477,
+    0x8A58, 0xD478,
+    0x8A59, 0xD479,
+    0x8A5A, 0xD47A,
+    0x8A5B, 0xD47B,
+    0x8A5C, 0xD47C,
+    0x8A5D, 0xD47D,
+    0x8A5E, 0xD47E,
+    0x8A5F, 0xD480,
+    0x8A60, 0xD481,
+    0x8A61, 0xD482,
+    0x8A62, 0xD483,
+    0x8A63, 0xD484,
+    0x8A64, 0xD485,
+    0x8A65, 0xD486,
+    0x8A66, 0xD487,
+    0x8A67, 0xD488,
+    0x8A68, 0xD489,
+    0x8A69, 0xD48A,
+    0x8A6A, 0xD48B,
+    0x8A6B, 0xD48C,
+    0x8A6C, 0xD48D,
+    0x8A6D, 0xD48E,
+    0x8A6E, 0xD48F,
+    0x8A6F, 0xD490,
+    0x8A70, 0xD491,
+    0x8A71, 0xD492,
+    0x8A72, 0xD493,
+    0x8A73, 0xD494,
+    0x8A74, 0xD495,
+    0x8A75, 0xD496,
+    0x8A76, 0xD497,
+    0x8A77, 0xD498,
+    0x8A78, 0xD499,
+    0x8A7A, 0xD49A,
+    0x8A7B, 0xD49B,
+    0x8A7C, 0xD49C,
+    0x8A7D, 0xD49D,
+    0x8A7E, 0xD49E,
+    0x8A7F, 0xD49F,
+    0x8A80, 0xD4A0,
+    0x8A81, 0xD540,
+    0x8A82, 0xD541,
+    0x8A83, 0xD542,
+    0x8A84, 0xD543,
+    0x8A85, 0xD544,
+    0x8A86, 0xD545,
+    0x8A87, 0xD546,
+    0x8A88, 0xD547,
+    0x8A8B, 0xD548,
+    0x8A8C, 0xD549,
+    0x8A8D, 0xD54A,
+    0x8A8E, 0xD54B,
+    0x8A8F, 0xD54C,
+    0x8A90, 0xD54D,
+    0x8A91, 0xD54E,
+    0x8A92, 0xD54F,
+    0x8A94, 0xD550,
+    0x8A95, 0xD551,
+    0x8A96, 0xD552,
+    0x8A97, 0xD553,
+    0x8A98, 0xD554,
+    0x8A99, 0xD555,
+    0x8A9A, 0xD556,
+    0x8A9B, 0xD557,
+    0x8A9C, 0xD558,
+    0x8A9D, 0xD559,
+    0x8A9E, 0xD55A,
+    0x8A9F, 0xD55B,
+    0x8AA0, 0xD55C,
+    0x8AA1, 0xD55D,
+    0x8AA2, 0xD55E,
+    0x8AA3, 0xD55F,
+    0x8AA4, 0xD560,
+    0x8AA5, 0xD561,
+    0x8AA6, 0xD562,
+    0x8AA7, 0xD563,
+    0x8AA8, 0xD564,
+    0x8AA9, 0xD565,
+    0x8AAA, 0xD566,
+    0x8AAB, 0xD567,
+    0x8AAC, 0xD568,
+    0x8AAD, 0xD569,
+    0x8AAE, 0xD56A,
+    0x8AAF, 0xD56B,
+    0x8AB0, 0xD56C,
+    0x8AB1, 0xD56D,
+    0x8AB2, 0xD56E,
+    0x8AB3, 0xD56F,
+    0x8AB4, 0xD570,
+    0x8AB5, 0xD571,
+    0x8AB6, 0xD572,
+    0x8AB7, 0xD573,
+    0x8AB8, 0xD574,
+    0x8AB9, 0xD575,
+    0x8ABA, 0xD576,
+    0x8ABB, 0xD577,
+    0x8ABC, 0xD578,
+    0x8ABD, 0xD579,
+    0x8ABE, 0xD57A,
+    0x8ABF, 0xD57B,
+    0x8AC0, 0xD57C,
+    0x8AC1, 0xD57D,
+    0x8AC2, 0xD57E,
+    0x8AC3, 0xD580,
+    0x8AC4, 0xD581,
+    0x8AC5, 0xD582,
+    0x8AC6, 0xD583,
+    0x8AC7, 0xD584,
+    0x8AC8, 0xD585,
+    0x8AC9, 0xD586,
+    0x8ACA, 0xD587,
+    0x8ACB, 0xD588,
+    0x8ACC, 0xD589,
+    0x8ACD, 0xD58A,
+    0x8ACE, 0xD58B,
+    0x8ACF, 0xD58C,
+    0x8AD0, 0xD58D,
+    0x8AD1, 0xD58E,
+    0x8AD2, 0xD58F,
+    0x8AD3, 0xD590,
+    0x8AD4, 0xD591,
+    0x8AD5, 0xD592,
+    0x8AD6, 0xD593,
+    0x8AD7, 0xD594,
+    0x8AD8, 0xD595,
+    0x8AD9, 0xD596,
+    0x8ADA, 0xD597,
+    0x8ADB, 0xD598,
+    0x8ADC, 0xD599,
+    0x8ADD, 0xD59A,
+    0x8ADE, 0xD59B,
+    0x8ADF, 0xD59C,
+    0x8AE0, 0xD59D,
+    0x8AE1, 0xD59E,
+    0x8AE2, 0xD59F,
+    0x8AE3, 0xD5A0,
+    0x8AE4, 0xD640,
+    0x8AE5, 0xD641,
+    0x8AE6, 0xD642,
+    0x8AE7, 0xD643,
+    0x8AE8, 0xD644,
+    0x8AE9, 0xD645,
+    0x8AEA, 0xD646,
+    0x8AEB, 0xD647,
+    0x8AEC, 0xD648,
+    0x8AED, 0xD649,
+    0x8AEE, 0xD64A,
+    0x8AEF, 0xD64B,
+    0x8AF0, 0xD64C,
+    0x8AF1, 0xD64D,
+    0x8AF2, 0xD64E,
+    0x8AF3, 0xD64F,
+    0x8AF4, 0xD650,
+    0x8AF5, 0xD651,
+    0x8AF6, 0xD652,
+    0x8AF7, 0xD653,
+    0x8AF8, 0xD654,
+    0x8AF9, 0xD655,
+    0x8AFA, 0xD656,
+    0x8AFB, 0xD657,
+    0x8AFC, 0xD658,
+    0x8AFD, 0xD659,
+    0x8AFE, 0xD65A,
+    0x8AFF, 0xD65B,
+    0x8B00, 0xD65C,
+    0x8B01, 0xD65D,
+    0x8B02, 0xD65E,
+    0x8B03, 0xD65F,
+    0x8B04, 0xD660,
+    0x8B05, 0xD661,
+    0x8B06, 0xD662,
+    0x8B08, 0xD663,
+    0x8B09, 0xD664,
+    0x8B0A, 0xD665,
+    0x8B0B, 0xD666,
+    0x8B0C, 0xD667,
+    0x8B0D, 0xD668,
+    0x8B0E, 0xD669,
+    0x8B0F, 0xD66A,
+    0x8B10, 0xD66B,
+    0x8B11, 0xD66C,
+    0x8B12, 0xD66D,
+    0x8B13, 0xD66E,
+    0x8B14, 0xD66F,
+    0x8B15, 0xD670,
+    0x8B16, 0xD671,
+    0x8B17, 0xD672,
+    0x8B18, 0xD673,
+    0x8B19, 0xD674,
+    0x8B1A, 0xD675,
+    0x8B1B, 0xD676,
+    0x8B1C, 0xD677,
+    0x8B1D, 0xD678,
+    0x8B1E, 0xD679,
+    0x8B1F, 0xD67A,
+    0x8B20, 0xD67B,
+    0x8B21, 0xD67C,
+    0x8B22, 0xD67D,
+    0x8B23, 0xD67E,
+    0x8B24, 0xD680,
+    0x8B25, 0xD681,
+    0x8B27, 0xD682,
+    0x8B28, 0xD683,
+    0x8B29, 0xD684,
+    0x8B2A, 0xD685,
+    0x8B2B, 0xD686,
+    0x8B2C, 0xD687,
+    0x8B2D, 0xD688,
+    0x8B2E, 0xD689,
+    0x8B2F, 0xD68A,
+    0x8B30, 0xD68B,
+    0x8B31, 0xD68C,
+    0x8B32, 0xD68D,
+    0x8B33, 0xD68E,
+    0x8B34, 0xD68F,
+    0x8B35, 0xD690,
+    0x8B36, 0xD691,
+    0x8B37, 0xD692,
+    0x8B38, 0xD693,
+    0x8B39, 0xD694,
+    0x8B3A, 0xD695,
+    0x8B3B, 0xD696,
+    0x8B3C, 0xD697,
+    0x8B3D, 0xD698,
+    0x8B3E, 0xD699,
+    0x8B3F, 0xD69A,
+    0x8B40, 0xD69B,
+    0x8B41, 0xD69C,
+    0x8B42, 0xD69D,
+    0x8B43, 0xD69E,
+    0x8B44, 0xD69F,
+    0x8B45, 0xD6A0,
+    0x8B46, 0xD740,
+    0x8B47, 0xD741,
+    0x8B48, 0xD742,
+    0x8B49, 0xD743,
+    0x8B4A, 0xD744,
+    0x8B4B, 0xD745,
+    0x8B4C, 0xD746,
+    0x8B4D, 0xD747,
+    0x8B4E, 0xD748,
+    0x8B4F, 0xD749,
+    0x8B50, 0xD74A,
+    0x8B51, 0xD74B,
+    0x8B52, 0xD74C,
+    0x8B53, 0xD74D,
+    0x8B54, 0xD74E,
+    0x8B55, 0xD74F,
+    0x8B56, 0xD750,
+    0x8B57, 0xD751,
+    0x8B58, 0xD752,
+    0x8B59, 0xD753,
+    0x8B5A, 0xD754,
+    0x8B5B, 0xD755,
+    0x8B5C, 0xD756,
+    0x8B5D, 0xD757,
+    0x8B5E, 0xD758,
+    0x8B5F, 0xD759,
+    0x8B60, 0xD75A,
+    0x8B61, 0xD75B,
+    0x8B62, 0xD75C,
+    0x8B63, 0xD75D,
+    0x8B64, 0xD75E,
+    0x8B65, 0xD75F,
+    0x8B67, 0xD760,
+    0x8B68, 0xD761,
+    0x8B69, 0xD762,
+    0x8B6A, 0xD763,
+    0x8B6B, 0xD764,
+    0x8B6D, 0xD765,
+    0x8B6E, 0xD766,
+    0x8B6F, 0xD767,
+    0x8B70, 0xD768,
+    0x8B71, 0xD769,
+    0x8B72, 0xD76A,
+    0x8B73, 0xD76B,
+    0x8B74, 0xD76C,
+    0x8B75, 0xD76D,
+    0x8B76, 0xD76E,
+    0x8B77, 0xD76F,
+    0x8B78, 0xD770,
+    0x8B79, 0xD771,
+    0x8B7A, 0xD772,
+    0x8B7B, 0xD773,
+    0x8B7C, 0xD774,
+    0x8B7D, 0xD775,
+    0x8B7E, 0xD776,
+    0x8B7F, 0xD777,
+    0x8B80, 0xD778,
+    0x8B81, 0xD779,
+    0x8B82, 0xD77A,
+    0x8B83, 0xD77B,
+    0x8B84, 0xD77C,
+    0x8B85, 0xD77D,
+    0x8B86, 0xD77E,
+    0x8B87, 0xD780,
+    0x8B88, 0xD781,
+    0x8B89, 0xD782,
+    0x8B8A, 0xD783,
+    0x8B8B, 0xD784,
+    0x8B8C, 0xD785,
+    0x8B8D, 0xD786,
+    0x8B8E, 0xD787,
+    0x8B8F, 0xD788,
+    0x8B90, 0xD789,
+    0x8B91, 0xD78A,
+    0x8B92, 0xD78B,
+    0x8B93, 0xD78C,
+    0x8B94, 0xD78D,
+    0x8B95, 0xD78E,
+    0x8B96, 0xD78F,
+    0x8B97, 0xD790,
+    0x8B98, 0xD791,
+    0x8B99, 0xD792,
+    0x8B9A, 0xD793,
+    0x8B9B, 0xD794,
+    0x8B9C, 0xD795,
+    0x8B9D, 0xD796,
+    0x8B9E, 0xD797,
+    0x8B9F, 0xD798,
+    0x8BAC, 0xD799,
+    0x8BB1, 0xD79A,
+    0x8BBB, 0xD79B,
+    0x8BC7, 0xD79C,
+    0x8BD0, 0xD79D,
+    0x8BEA, 0xD79E,
+    0x8C09, 0xD79F,
+    0x8C1E, 0xD7A0,
+    0x8C38, 0xD840,
+    0x8C39, 0xD841,
+    0x8C3A, 0xD842,
+    0x8C3B, 0xD843,
+    0x8C3C, 0xD844,
+    0x8C3D, 0xD845,
+    0x8C3E, 0xD846,
+    0x8C3F, 0xD847,
+    0x8C40, 0xD848,
+    0x8C42, 0xD849,
+    0x8C43, 0xD84A,
+    0x8C44, 0xD84B,
+    0x8C45, 0xD84C,
+    0x8C48, 0xD84D,
+    0x8C4A, 0xD84E,
+    0x8C4B, 0xD84F,
+    0x8C4D, 0xD850,
+    0x8C4E, 0xD851,
+    0x8C4F, 0xD852,
+    0x8C50, 0xD853,
+    0x8C51, 0xD854,
+    0x8C52, 0xD855,
+    0x8C53, 0xD856,
+    0x8C54, 0xD857,
+    0x8C56, 0xD858,
+    0x8C57, 0xD859,
+    0x8C58, 0xD85A,
+    0x8C59, 0xD85B,
+    0x8C5B, 0xD85C,
+    0x8C5C, 0xD85D,
+    0x8C5D, 0xD85E,
+    0x8C5E, 0xD85F,
+    0x8C5F, 0xD860,
+    0x8C60, 0xD861,
+    0x8C63, 0xD862,
+    0x8C64, 0xD863,
+    0x8C65, 0xD864,
+    0x8C66, 0xD865,
+    0x8C67, 0xD866,
+    0x8C68, 0xD867,
+    0x8C69, 0xD868,
+    0x8C6C, 0xD869,
+    0x8C6D, 0xD86A,
+    0x8C6E, 0xD86B,
+    0x8C6F, 0xD86C,
+    0x8C70, 0xD86D,
+    0x8C71, 0xD86E,
+    0x8C72, 0xD86F,
+    0x8C74, 0xD870,
+    0x8C75, 0xD871,
+    0x8C76, 0xD872,
+    0x8C77, 0xD873,
+    0x8C7B, 0xD874,
+    0x8C7C, 0xD875,
+    0x8C7D, 0xD876,
+    0x8C7E, 0xD877,
+    0x8C7F, 0xD878,
+    0x8C80, 0xD879,
+    0x8C81, 0xD87A,
+    0x8C83, 0xD87B,
+    0x8C84, 0xD87C,
+    0x8C86, 0xD87D,
+    0x8C87, 0xD87E,
+    0x8C88, 0xD880,
+    0x8C8B, 0xD881,
+    0x8C8D, 0xD882,
+    0x8C8E, 0xD883,
+    0x8C8F, 0xD884,
+    0x8C90, 0xD885,
+    0x8C91, 0xD886,
+    0x8C92, 0xD887,
+    0x8C93, 0xD888,
+    0x8C95, 0xD889,
+    0x8C96, 0xD88A,
+    0x8C97, 0xD88B,
+    0x8C99, 0xD88C,
+    0x8C9A, 0xD88D,
+    0x8C9B, 0xD88E,
+    0x8C9C, 0xD88F,
+    0x8C9D, 0xD890,
+    0x8C9E, 0xD891,
+    0x8C9F, 0xD892,
+    0x8CA0, 0xD893,
+    0x8CA1, 0xD894,
+    0x8CA2, 0xD895,
+    0x8CA3, 0xD896,
+    0x8CA4, 0xD897,
+    0x8CA5, 0xD898,
+    0x8CA6, 0xD899,
+    0x8CA7, 0xD89A,
+    0x8CA8, 0xD89B,
+    0x8CA9, 0xD89C,
+    0x8CAA, 0xD89D,
+    0x8CAB, 0xD89E,
+    0x8CAC, 0xD89F,
+    0x8CAD, 0xD8A0,
+    0x8CAE, 0xD940,
+    0x8CAF, 0xD941,
+    0x8CB0, 0xD942,
+    0x8CB1, 0xD943,
+    0x8CB2, 0xD944,
+    0x8CB3, 0xD945,
+    0x8CB4, 0xD946,
+    0x8CB5, 0xD947,
+    0x8CB6, 0xD948,
+    0x8CB7, 0xD949,
+    0x8CB8, 0xD94A,
+    0x8CB9, 0xD94B,
+    0x8CBA, 0xD94C,
+    0x8CBB, 0xD94D,
+    0x8CBC, 0xD94E,
+    0x8CBD, 0xD94F,
+    0x8CBE, 0xD950,
+    0x8CBF, 0xD951,
+    0x8CC0, 0xD952,
+    0x8CC1, 0xD953,
+    0x8CC2, 0xD954,
+    0x8CC3, 0xD955,
+    0x8CC4, 0xD956,
+    0x8CC5, 0xD957,
+    0x8CC6, 0xD958,
+    0x8CC7, 0xD959,
+    0x8CC8, 0xD95A,
+    0x8CC9, 0xD95B,
+    0x8CCA, 0xD95C,
+    0x8CCB, 0xD95D,
+    0x8CCC, 0xD95E,
+    0x8CCD, 0xD95F,
+    0x8CCE, 0xD960,
+    0x8CCF, 0xD961,
+    0x8CD0, 0xD962,
+    0x8CD1, 0xD963,
+    0x8CD2, 0xD964,
+    0x8CD3, 0xD965,
+    0x8CD4, 0xD966,
+    0x8CD5, 0xD967,
+    0x8CD6, 0xD968,
+    0x8CD7, 0xD969,
+    0x8CD8, 0xD96A,
+    0x8CD9, 0xD96B,
+    0x8CDA, 0xD96C,
+    0x8CDB, 0xD96D,
+    0x8CDC, 0xD96E,
+    0x8CDD, 0xD96F,
+    0x8CDE, 0xD970,
+    0x8CDF, 0xD971,
+    0x8CE0, 0xD972,
+    0x8CE1, 0xD973,
+    0x8CE2, 0xD974,
+    0x8CE3, 0xD975,
+    0x8CE4, 0xD976,
+    0x8CE5, 0xD977,
+    0x8CE6, 0xD978,
+    0x8CE7, 0xD979,
+    0x8CE8, 0xD97A,
+    0x8CE9, 0xD97B,
+    0x8CEA, 0xD97C,
+    0x8CEB, 0xD97D,
+    0x8CEC, 0xD97E,
+    0x8CED, 0xD980,
+    0x8CEE, 0xD981,
+    0x8CEF, 0xD982,
+    0x8CF0, 0xD983,
+    0x8CF1, 0xD984,
+    0x8CF2, 0xD985,
+    0x8CF3, 0xD986,
+    0x8CF4, 0xD987,
+    0x8CF5, 0xD988,
+    0x8CF6, 0xD989,
+    0x8CF7, 0xD98A,
+    0x8CF8, 0xD98B,
+    0x8CF9, 0xD98C,
+    0x8CFA, 0xD98D,
+    0x8CFB, 0xD98E,
+    0x8CFC, 0xD98F,
+    0x8CFD, 0xD990,
+    0x8CFE, 0xD991,
+    0x8CFF, 0xD992,
+    0x8D00, 0xD993,
+    0x8D01, 0xD994,
+    0x8D02, 0xD995,
+    0x8D03, 0xD996,
+    0x8D04, 0xD997,
+    0x8D05, 0xD998,
+    0x8D06, 0xD999,
+    0x8D07, 0xD99A,
+    0x8D08, 0xD99B,
+    0x8D09, 0xD99C,
+    0x8D0A, 0xD99D,
+    0x8D0B, 0xD99E,
+    0x8D0C, 0xD99F,
+    0x8D0D, 0xD9A0,
+    0x8D0E, 0xDA40,
+    0x8D0F, 0xDA41,
+    0x8D10, 0xDA42,
+    0x8D11, 0xDA43,
+    0x8D12, 0xDA44,
+    0x8D13, 0xDA45,
+    0x8D14, 0xDA46,
+    0x8D15, 0xDA47,
+    0x8D16, 0xDA48,
+    0x8D17, 0xDA49,
+    0x8D18, 0xDA4A,
+    0x8D19, 0xDA4B,
+    0x8D1A, 0xDA4C,
+    0x8D1B, 0xDA4D,
+    0x8D1C, 0xDA4E,
+    0x8D20, 0xDA4F,
+    0x8D51, 0xDA50,
+    0x8D52, 0xDA51,
+    0x8D57, 0xDA52,
+    0x8D5F, 0xDA53,
+    0x8D65, 0xDA54,
+    0x8D68, 0xDA55,
+    0x8D69, 0xDA56,
+    0x8D6A, 0xDA57,
+    0x8D6C, 0xDA58,
+    0x8D6E, 0xDA59,
+    0x8D6F, 0xDA5A,
+    0x8D71, 0xDA5B,
+    0x8D72, 0xDA5C,
+    0x8D78, 0xDA5D,
+    0x8D79, 0xDA5E,
+    0x8D7A, 0xDA5F,
+    0x8D7B, 0xDA60,
+    0x8D7C, 0xDA61,
+    0x8D7D, 0xDA62,
+    0x8D7E, 0xDA63,
+    0x8D7F, 0xDA64,
+    0x8D80, 0xDA65,
+    0x8D82, 0xDA66,
+    0x8D83, 0xDA67,
+    0x8D86, 0xDA68,
+    0x8D87, 0xDA69,
+    0x8D88, 0xDA6A,
+    0x8D89, 0xDA6B,
+    0x8D8C, 0xDA6C,
+    0x8D8D, 0xDA6D,
+    0x8D8E, 0xDA6E,
+    0x8D8F, 0xDA6F,
+    0x8D90, 0xDA70,
+    0x8D92, 0xDA71,
+    0x8D93, 0xDA72,
+    0x8D95, 0xDA73,
+    0x8D96, 0xDA74,
+    0x8D97, 0xDA75,
+    0x8D98, 0xDA76,
+    0x8D99, 0xDA77,
+    0x8D9A, 0xDA78,
+    0x8D9B, 0xDA79,
+    0x8D9C, 0xDA7A,
+    0x8D9D, 0xDA7B,
+    0x8D9E, 0xDA7C,
+    0x8DA0, 0xDA7D,
+    0x8DA1, 0xDA7E,
+    0x8DA2, 0xDA80,
+    0x8DA4, 0xDA81,
+    0x8DA5, 0xDA82,
+    0x8DA6, 0xDA83,
+    0x8DA7, 0xDA84,
+    0x8DA8, 0xDA85,
+    0x8DA9, 0xDA86,
+    0x8DAA, 0xDA87,
+    0x8DAB, 0xDA88,
+    0x8DAC, 0xDA89,
+    0x8DAD, 0xDA8A,
+    0x8DAE, 0xDA8B,
+    0x8DAF, 0xDA8C,
+    0x8DB0, 0xDA8D,
+    0x8DB2, 0xDA8E,
+    0x8DB6, 0xDA8F,
+    0x8DB7, 0xDA90,
+    0x8DB9, 0xDA91,
+    0x8DBB, 0xDA92,
+    0x8DBD, 0xDA93,
+    0x8DC0, 0xDA94,
+    0x8DC1, 0xDA95,
+    0x8DC2, 0xDA96,
+    0x8DC5, 0xDA97,
+    0x8DC7, 0xDA98,
+    0x8DC8, 0xDA99,
+    0x8DC9, 0xDA9A,
+    0x8DCA, 0xDA9B,
+    0x8DCD, 0xDA9C,
+    0x8DD0, 0xDA9D,
+    0x8DD2, 0xDA9E,
+    0x8DD3, 0xDA9F,
+    0x8DD4, 0xDAA0,
+    0x8DD5, 0xDB40,
+    0x8DD8, 0xDB41,
+    0x8DD9, 0xDB42,
+    0x8DDC, 0xDB43,
+    0x8DE0, 0xDB44,
+    0x8DE1, 0xDB45,
+    0x8DE2, 0xDB46,
+    0x8DE5, 0xDB47,
+    0x8DE6, 0xDB48,
+    0x8DE7, 0xDB49,
+    0x8DE9, 0xDB4A,
+    0x8DED, 0xDB4B,
+    0x8DEE, 0xDB4C,
+    0x8DF0, 0xDB4D,
+    0x8DF1, 0xDB4E,
+    0x8DF2, 0xDB4F,
+    0x8DF4, 0xDB50,
+    0x8DF6, 0xDB51,
+    0x8DFC, 0xDB52,
+    0x8DFE, 0xDB53,
+    0x8DFF, 0xDB54,
+    0x8E00, 0xDB55,
+    0x8E01, 0xDB56,
+    0x8E02, 0xDB57,
+    0x8E03, 0xDB58,
+    0x8E04, 0xDB59,
+    0x8E06, 0xDB5A,
+    0x8E07, 0xDB5B,
+    0x8E08, 0xDB5C,
+    0x8E0B, 0xDB5D,
+    0x8E0D, 0xDB5E,
+    0x8E0E, 0xDB5F,
+    0x8E10, 0xDB60,
+    0x8E11, 0xDB61,
+    0x8E12, 0xDB62,
+    0x8E13, 0xDB63,
+    0x8E15, 0xDB64,
+    0x8E16, 0xDB65,
+    0x8E17, 0xDB66,
+    0x8E18, 0xDB67,
+    0x8E19, 0xDB68,
+    0x8E1A, 0xDB69,
+    0x8E1B, 0xDB6A,
+    0x8E1C, 0xDB6B,
+    0x8E20, 0xDB6C,
+    0x8E21, 0xDB6D,
+    0x8E24, 0xDB6E,
+    0x8E25, 0xDB6F,
+    0x8E26, 0xDB70,
+    0x8E27, 0xDB71,
+    0x8E28, 0xDB72,
+    0x8E2B, 0xDB73,
+    0x8E2D, 0xDB74,
+    0x8E30, 0xDB75,
+    0x8E32, 0xDB76,
+    0x8E33, 0xDB77,
+    0x8E34, 0xDB78,
+    0x8E36, 0xDB79,
+    0x8E37, 0xDB7A,
+    0x8E38, 0xDB7B,
+    0x8E3B, 0xDB7C,
+    0x8E3C, 0xDB7D,
+    0x8E3E, 0xDB7E,
+    0x8E3F, 0xDB80,
+    0x8E43, 0xDB81,
+    0x8E45, 0xDB82,
+    0x8E46, 0xDB83,
+    0x8E4C, 0xDB84,
+    0x8E4D, 0xDB85,
+    0x8E4E, 0xDB86,
+    0x8E4F, 0xDB87,
+    0x8E50, 0xDB88,
+    0x8E53, 0xDB89,
+    0x8E54, 0xDB8A,
+    0x8E55, 0xDB8B,
+    0x8E56, 0xDB8C,
+    0x8E57, 0xDB8D,
+    0x8E58, 0xDB8E,
+    0x8E5A, 0xDB8F,
+    0x8E5B, 0xDB90,
+    0x8E5C, 0xDB91,
+    0x8E5D, 0xDB92,
+    0x8E5E, 0xDB93,
+    0x8E5F, 0xDB94,
+    0x8E60, 0xDB95,
+    0x8E61, 0xDB96,
+    0x8E62, 0xDB97,
+    0x8E63, 0xDB98,
+    0x8E64, 0xDB99,
+    0x8E65, 0xDB9A,
+    0x8E67, 0xDB9B,
+    0x8E68, 0xDB9C,
+    0x8E6A, 0xDB9D,
+    0x8E6B, 0xDB9E,
+    0x8E6E, 0xDB9F,
+    0x8E71, 0xDBA0,
+    0x8E73, 0xDC40,
+    0x8E75, 0xDC41,
+    0x8E77, 0xDC42,
+    0x8E78, 0xDC43,
+    0x8E79, 0xDC44,
+    0x8E7A, 0xDC45,
+    0x8E7B, 0xDC46,
+    0x8E7D, 0xDC47,
+    0x8E7E, 0xDC48,
+    0x8E80, 0xDC49,
+    0x8E82, 0xDC4A,
+    0x8E83, 0xDC4B,
+    0x8E84, 0xDC4C,
+    0x8E86, 0xDC4D,
+    0x8E88, 0xDC4E,
+    0x8E89, 0xDC4F,
+    0x8E8A, 0xDC50,
+    0x8E8B, 0xDC51,
+    0x8E8C, 0xDC52,
+    0x8E8D, 0xDC53,
+    0x8E8E, 0xDC54,
+    0x8E91, 0xDC55,
+    0x8E92, 0xDC56,
+    0x8E93, 0xDC57,
+    0x8E95, 0xDC58,
+    0x8E96, 0xDC59,
+    0x8E97, 0xDC5A,
+    0x8E98, 0xDC5B,
+    0x8E99, 0xDC5C,
+    0x8E9A, 0xDC5D,
+    0x8E9B, 0xDC5E,
+    0x8E9D, 0xDC5F,
+    0x8E9F, 0xDC60,
+    0x8EA0, 0xDC61,
+    0x8EA1, 0xDC62,
+    0x8EA2, 0xDC63,
+    0x8EA3, 0xDC64,
+    0x8EA4, 0xDC65,
+    0x8EA5, 0xDC66,
+    0x8EA6, 0xDC67,
+    0x8EA7, 0xDC68,
+    0x8EA8, 0xDC69,
+    0x8EA9, 0xDC6A,
+    0x8EAA, 0xDC6B,
+    0x8EAD, 0xDC6C,
+    0x8EAE, 0xDC6D,
+    0x8EB0, 0xDC6E,
+    0x8EB1, 0xDC6F,
+    0x8EB3, 0xDC70,
+    0x8EB4, 0xDC71,
+    0x8EB5, 0xDC72,
+    0x8EB6, 0xDC73,
+    0x8EB7, 0xDC74,
+    0x8EB8, 0xDC75,
+    0x8EB9, 0xDC76,
+    0x8EBB, 0xDC77,
+    0x8EBC, 0xDC78,
+    0x8EBD, 0xDC79,
+    0x8EBE, 0xDC7A,
+    0x8EBF, 0xDC7B,
+    0x8EC0, 0xDC7C,
+    0x8EC1, 0xDC7D,
+    0x8EC2, 0xDC7E,
+    0x8EC3, 0xDC80,
+    0x8EC4, 0xDC81,
+    0x8EC5, 0xDC82,
+    0x8EC6, 0xDC83,
+    0x8EC7, 0xDC84,
+    0x8EC8, 0xDC85,
+    0x8EC9, 0xDC86,
+    0x8ECA, 0xDC87,
+    0x8ECB, 0xDC88,
+    0x8ECC, 0xDC89,
+    0x8ECD, 0xDC8A,
+    0x8ECF, 0xDC8B,
+    0x8ED0, 0xDC8C,
+    0x8ED1, 0xDC8D,
+    0x8ED2, 0xDC8E,
+    0x8ED3, 0xDC8F,
+    0x8ED4, 0xDC90,
+    0x8ED5, 0xDC91,
+    0x8ED6, 0xDC92,
+    0x8ED7, 0xDC93,
+    0x8ED8, 0xDC94,
+    0x8ED9, 0xDC95,
+    0x8EDA, 0xDC96,
+    0x8EDB, 0xDC97,
+    0x8EDC, 0xDC98,
+    0x8EDD, 0xDC99,
+    0x8EDE, 0xDC9A,
+    0x8EDF, 0xDC9B,
+    0x8EE0, 0xDC9C,
+    0x8EE1, 0xDC9D,
+    0x8EE2, 0xDC9E,
+    0x8EE3, 0xDC9F,
+    0x8EE4, 0xDCA0,
+    0x8EE5, 0xDD40,
+    0x8EE6, 0xDD41,
+    0x8EE7, 0xDD42,
+    0x8EE8, 0xDD43,
+    0x8EE9, 0xDD44,
+    0x8EEA, 0xDD45,
+    0x8EEB, 0xDD46,
+    0x8EEC, 0xDD47,
+    0x8EED, 0xDD48,
+    0x8EEE, 0xDD49,
+    0x8EEF, 0xDD4A,
+    0x8EF0, 0xDD4B,
+    0x8EF1, 0xDD4C,
+    0x8EF2, 0xDD4D,
+    0x8EF3, 0xDD4E,
+    0x8EF4, 0xDD4F,
+    0x8EF5, 0xDD50,
+    0x8EF6, 0xDD51,
+    0x8EF7, 0xDD52,
+    0x8EF8, 0xDD53,
+    0x8EF9, 0xDD54,
+    0x8EFA, 0xDD55,
+    0x8EFB, 0xDD56,
+    0x8EFC, 0xDD57,
+    0x8EFD, 0xDD58,
+    0x8EFE, 0xDD59,
+    0x8EFF, 0xDD5A,
+    0x8F00, 0xDD5B,
+    0x8F01, 0xDD5C,
+    0x8F02, 0xDD5D,
+    0x8F03, 0xDD5E,
+    0x8F04, 0xDD5F,
+    0x8F05, 0xDD60,
+    0x8F06, 0xDD61,
+    0x8F07, 0xDD62,
+    0x8F08, 0xDD63,
+    0x8F09, 0xDD64,
+    0x8F0A, 0xDD65,
+    0x8F0B, 0xDD66,
+    0x8F0C, 0xDD67,
+    0x8F0D, 0xDD68,
+    0x8F0E, 0xDD69,
+    0x8F0F, 0xDD6A,
+    0x8F10, 0xDD6B,
+    0x8F11, 0xDD6C,
+    0x8F12, 0xDD6D,
+    0x8F13, 0xDD6E,
+    0x8F14, 0xDD6F,
+    0x8F15, 0xDD70,
+    0x8F16, 0xDD71,
+    0x8F17, 0xDD72,
+    0x8F18, 0xDD73,
+    0x8F19, 0xDD74,
+    0x8F1A, 0xDD75,
+    0x8F1B, 0xDD76,
+    0x8F1C, 0xDD77,
+    0x8F1D, 0xDD78,
+    0x8F1E, 0xDD79,
+    0x8F1F, 0xDD7A,
+    0x8F20, 0xDD7B,
+    0x8F21, 0xDD7C,
+    0x8F22, 0xDD7D,
+    0x8F23, 0xDD7E,
+    0x8F24, 0xDD80,
+    0x8F25, 0xDD81,
+    0x8F26, 0xDD82,
+    0x8F27, 0xDD83,
+    0x8F28, 0xDD84,
+    0x8F29, 0xDD85,
+    0x8F2A, 0xDD86,
+    0x8F2B, 0xDD87,
+    0x8F2C, 0xDD88,
+    0x8F2D, 0xDD89,
+    0x8F2E, 0xDD8A,
+    0x8F2F, 0xDD8B,
+    0x8F30, 0xDD8C,
+    0x8F31, 0xDD8D,
+    0x8F32, 0xDD8E,
+    0x8F33, 0xDD8F,
+    0x8F34, 0xDD90,
+    0x8F35, 0xDD91,
+    0x8F36, 0xDD92,
+    0x8F37, 0xDD93,
+    0x8F38, 0xDD94,
+    0x8F39, 0xDD95,
+    0x8F3A, 0xDD96,
+    0x8F3B, 0xDD97,
+    0x8F3C, 0xDD98,
+    0x8F3D, 0xDD99,
+    0x8F3E, 0xDD9A,
+    0x8F3F, 0xDD9B,
+    0x8F40, 0xDD9C,
+    0x8F41, 0xDD9D,
+    0x8F42, 0xDD9E,
+    0x8F43, 0xDD9F,
+    0x8F44, 0xDDA0,
+    0x8F45, 0xDE40,
+    0x8F46, 0xDE41,
+    0x8F47, 0xDE42,
+    0x8F48, 0xDE43,
+    0x8F49, 0xDE44,
+    0x8F4A, 0xDE45,
+    0x8F4B, 0xDE46,
+    0x8F4C, 0xDE47,
+    0x8F4D, 0xDE48,
+    0x8F4E, 0xDE49,
+    0x8F4F, 0xDE4A,
+    0x8F50, 0xDE4B,
+    0x8F51, 0xDE4C,
+    0x8F52, 0xDE4D,
+    0x8F53, 0xDE4E,
+    0x8F54, 0xDE4F,
+    0x8F55, 0xDE50,
+    0x8F56, 0xDE51,
+    0x8F57, 0xDE52,
+    0x8F58, 0xDE53,
+    0x8F59, 0xDE54,
+    0x8F5A, 0xDE55,
+    0x8F5B, 0xDE56,
+    0x8F5C, 0xDE57,
+    0x8F5D, 0xDE58,
+    0x8F5E, 0xDE59,
+    0x8F5F, 0xDE5A,
+    0x8F60, 0xDE5B,
+    0x8F61, 0xDE5C,
+    0x8F62, 0xDE5D,
+    0x8F63, 0xDE5E,
+    0x8F64, 0xDE5F,
+    0x8F65, 0xDE60,
+    0x8F6A, 0xDE61,
+    0x8F80, 0xDE62,
+    0x8F8C, 0xDE63,
+    0x8F92, 0xDE64,
+    0x8F9D, 0xDE65,
+    0x8FA0, 0xDE66,
+    0x8FA1, 0xDE67,
+    0x8FA2, 0xDE68,
+    0x8FA4, 0xDE69,
+    0x8FA5, 0xDE6A,
+    0x8FA6, 0xDE6B,
+    0x8FA7, 0xDE6C,
+    0x8FAA, 0xDE6D,
+    0x8FAC, 0xDE6E,
+    0x8FAD, 0xDE6F,
+    0x8FAE, 0xDE70,
+    0x8FAF, 0xDE71,
+    0x8FB2, 0xDE72,
+    0x8FB3, 0xDE73,
+    0x8FB4, 0xDE74,
+    0x8FB5, 0xDE75,
+    0x8FB7, 0xDE76,
+    0x8FB8, 0xDE77,
+    0x8FBA, 0xDE78,
+    0x8FBB, 0xDE79,
+    0x8FBC, 0xDE7A,
+    0x8FBF, 0xDE7B,
+    0x8FC0, 0xDE7C,
+    0x8FC3, 0xDE7D,
+    0x8FC6, 0xDE7E,
+    0x8FC9, 0xDE80,
+    0x8FCA, 0xDE81,
+    0x8FCB, 0xDE82,
+    0x8FCC, 0xDE83,
+    0x8FCD, 0xDE84,
+    0x8FCF, 0xDE85,
+    0x8FD2, 0xDE86,
+    0x8FD6, 0xDE87,
+    0x8FD7, 0xDE88,
+    0x8FDA, 0xDE89,
+    0x8FE0, 0xDE8A,
+    0x8FE1, 0xDE8B,
+    0x8FE3, 0xDE8C,
+    0x8FE7, 0xDE8D,
+    0x8FEC, 0xDE8E,
+    0x8FEF, 0xDE8F,
+    0x8FF1, 0xDE90,
+    0x8FF2, 0xDE91,
+    0x8FF4, 0xDE92,
+    0x8FF5, 0xDE93,
+    0x8FF6, 0xDE94,
+    0x8FFA, 0xDE95,
+    0x8FFB, 0xDE96,
+    0x8FFC, 0xDE97,
+    0x8FFE, 0xDE98,
+    0x8FFF, 0xDE99,
+    0x9007, 0xDE9A,
+    0x9008, 0xDE9B,
+    0x900C, 0xDE9C,
+    0x900E, 0xDE9D,
+    0x9013, 0xDE9E,
+    0x9015, 0xDE9F,
+    0x9018, 0xDEA0,
+    0x9019, 0xDF40,
+    0x901C, 0xDF41,
+    0x9023, 0xDF42,
+    0x9024, 0xDF43,
+    0x9025, 0xDF44,
+    0x9027, 0xDF45,
+    0x9028, 0xDF46,
+    0x9029, 0xDF47,
+    0x902A, 0xDF48,
+    0x902B, 0xDF49,
+    0x902C, 0xDF4A,
+    0x9030, 0xDF4B,
+    0x9031, 0xDF4C,
+    0x9032, 0xDF4D,
+    0x9033, 0xDF4E,
+    0x9034, 0xDF4F,
+    0x9037, 0xDF50,
+    0x9039, 0xDF51,
+    0x903A, 0xDF52,
+    0x903D, 0xDF53,
+    0x903F, 0xDF54,
+    0x9040, 0xDF55,
+    0x9043, 0xDF56,
+    0x9045, 0xDF57,
+    0x9046, 0xDF58,
+    0x9048, 0xDF59,
+    0x9049, 0xDF5A,
+    0x904A, 0xDF5B,
+    0x904B, 0xDF5C,
+    0x904C, 0xDF5D,
+    0x904E, 0xDF5E,
+    0x9054, 0xDF5F,
+    0x9055, 0xDF60,
+    0x9056, 0xDF61,
+    0x9059, 0xDF62,
+    0x905A, 0xDF63,
+    0x905C, 0xDF64,
+    0x905D, 0xDF65,
+    0x905E, 0xDF66,
+    0x905F, 0xDF67,
+    0x9060, 0xDF68,
+    0x9061, 0xDF69,
+    0x9064, 0xDF6A,
+    0x9066, 0xDF6B,
+    0x9067, 0xDF6C,
+    0x9069, 0xDF6D,
+    0x906A, 0xDF6E,
+    0x906B, 0xDF6F,
+    0x906C, 0xDF70,
+    0x906F, 0xDF71,
+    0x9070, 0xDF72,
+    0x9071, 0xDF73,
+    0x9072, 0xDF74,
+    0x9073, 0xDF75,
+    0x9076, 0xDF76,
+    0x9077, 0xDF77,
+    0x9078, 0xDF78,
+    0x9079, 0xDF79,
+    0x907A, 0xDF7A,
+    0x907B, 0xDF7B,
+    0x907C, 0xDF7C,
+    0x907E, 0xDF7D,
+    0x9081, 0xDF7E,
+    0x9084, 0xDF80,
+    0x9085, 0xDF81,
+    0x9086, 0xDF82,
+    0x9087, 0xDF83,
+    0x9089, 0xDF84,
+    0x908A, 0xDF85,
+    0x908C, 0xDF86,
+    0x908D, 0xDF87,
+    0x908E, 0xDF88,
+    0x908F, 0xDF89,
+    0x9090, 0xDF8A,
+    0x9092, 0xDF8B,
+    0x9094, 0xDF8C,
+    0x9096, 0xDF8D,
+    0x9098, 0xDF8E,
+    0x909A, 0xDF8F,
+    0x909C, 0xDF90,
+    0x909E, 0xDF91,
+    0x909F, 0xDF92,
+    0x90A0, 0xDF93,
+    0x90A4, 0xDF94,
+    0x90A5, 0xDF95,
+    0x90A7, 0xDF96,
+    0x90A8, 0xDF97,
+    0x90A9, 0xDF98,
+    0x90AB, 0xDF99,
+    0x90AD, 0xDF9A,
+    0x90B2, 0xDF9B,
+    0x90B7, 0xDF9C,
+    0x90BC, 0xDF9D,
+    0x90BD, 0xDF9E,
+    0x90BF, 0xDF9F,
+    0x90C0, 0xDFA0,
+    0x90C2, 0xE040,
+    0x90C3, 0xE041,
+    0x90C6, 0xE042,
+    0x90C8, 0xE043,
+    0x90C9, 0xE044,
+    0x90CB, 0xE045,
+    0x90CC, 0xE046,
+    0x90CD, 0xE047,
+    0x90D2, 0xE048,
+    0x90D4, 0xE049,
+    0x90D5, 0xE04A,
+    0x90D6, 0xE04B,
+    0x90D8, 0xE04C,
+    0x90D9, 0xE04D,
+    0x90DA, 0xE04E,
+    0x90DE, 0xE04F,
+    0x90DF, 0xE050,
+    0x90E0, 0xE051,
+    0x90E3, 0xE052,
+    0x90E4, 0xE053,
+    0x90E5, 0xE054,
+    0x90E9, 0xE055,
+    0x90EA, 0xE056,
+    0x90EC, 0xE057,
+    0x90EE, 0xE058,
+    0x90F0, 0xE059,
+    0x90F1, 0xE05A,
+    0x90F2, 0xE05B,
+    0x90F3, 0xE05C,
+    0x90F5, 0xE05D,
+    0x90F6, 0xE05E,
+    0x90F7, 0xE05F,
+    0x90F9, 0xE060,
+    0x90FA, 0xE061,
+    0x90FB, 0xE062,
+    0x90FC, 0xE063,
+    0x90FF, 0xE064,
+    0x9100, 0xE065,
+    0x9101, 0xE066,
+    0x9103, 0xE067,
+    0x9105, 0xE068,
+    0x9106, 0xE069,
+    0x9107, 0xE06A,
+    0x9108, 0xE06B,
+    0x9109, 0xE06C,
+    0x910A, 0xE06D,
+    0x910B, 0xE06E,
+    0x910C, 0xE06F,
+    0x910D, 0xE070,
+    0x910E, 0xE071,
+    0x910F, 0xE072,
+    0x9110, 0xE073,
+    0x9111, 0xE074,
+    0x9112, 0xE075,
+    0x9113, 0xE076,
+    0x9114, 0xE077,
+    0x9115, 0xE078,
+    0x9116, 0xE079,
+    0x9117, 0xE07A,
+    0x9118, 0xE07B,
+    0x911A, 0xE07C,
+    0x911B, 0xE07D,
+    0x911C, 0xE07E,
+    0x911D, 0xE080,
+    0x911F, 0xE081,
+    0x9120, 0xE082,
+    0x9121, 0xE083,
+    0x9124, 0xE084,
+    0x9125, 0xE085,
+    0x9126, 0xE086,
+    0x9127, 0xE087,
+    0x9128, 0xE088,
+    0x9129, 0xE089,
+    0x912A, 0xE08A,
+    0x912B, 0xE08B,
+    0x912C, 0xE08C,
+    0x912D, 0xE08D,
+    0x912E, 0xE08E,
+    0x9130, 0xE08F,
+    0x9132, 0xE090,
+    0x9133, 0xE091,
+    0x9134, 0xE092,
+    0x9135, 0xE093,
+    0x9136, 0xE094,
+    0x9137, 0xE095,
+    0x9138, 0xE096,
+    0x913A, 0xE097,
+    0x913B, 0xE098,
+    0x913C, 0xE099,
+    0x913D, 0xE09A,
+    0x913E, 0xE09B,
+    0x913F, 0xE09C,
+    0x9140, 0xE09D,
+    0x9141, 0xE09E,
+    0x9142, 0xE09F,
+    0x9144, 0xE0A0,
+    0x9145, 0xE140,
+    0x9147, 0xE141,
+    0x9148, 0xE142,
+    0x9151, 0xE143,
+    0x9153, 0xE144,
+    0x9154, 0xE145,
+    0x9155, 0xE146,
+    0x9156, 0xE147,
+    0x9158, 0xE148,
+    0x9159, 0xE149,
+    0x915B, 0xE14A,
+    0x915C, 0xE14B,
+    0x915F, 0xE14C,
+    0x9160, 0xE14D,
+    0x9166, 0xE14E,
+    0x9167, 0xE14F,
+    0x9168, 0xE150,
+    0x916B, 0xE151,
+    0x916D, 0xE152,
+    0x9173, 0xE153,
+    0x917A, 0xE154,
+    0x917B, 0xE155,
+    0x917C, 0xE156,
+    0x9180, 0xE157,
+    0x9181, 0xE158,
+    0x9182, 0xE159,
+    0x9183, 0xE15A,
+    0x9184, 0xE15B,
+    0x9186, 0xE15C,
+    0x9188, 0xE15D,
+    0x918A, 0xE15E,
+    0x918E, 0xE15F,
+    0x918F, 0xE160,
+    0x9193, 0xE161,
+    0x9194, 0xE162,
+    0x9195, 0xE163,
+    0x9196, 0xE164,
+    0x9197, 0xE165,
+    0x9198, 0xE166,
+    0x9199, 0xE167,
+    0x919C, 0xE168,
+    0x919D, 0xE169,
+    0x919E, 0xE16A,
+    0x919F, 0xE16B,
+    0x91A0, 0xE16C,
+    0x91A1, 0xE16D,
+    0x91A4, 0xE16E,
+    0x91A5, 0xE16F,
+    0x91A6, 0xE170,
+    0x91A7, 0xE171,
+    0x91A8, 0xE172,
+    0x91A9, 0xE173,
+    0x91AB, 0xE174,
+    0x91AC, 0xE175,
+    0x91B0, 0xE176,
+    0x91B1, 0xE177,
+    0x91B2, 0xE178,
+    0x91B3, 0xE179,
+    0x91B6, 0xE17A,
+    0x91B7, 0xE17B,
+    0x91B8, 0xE17C,
+    0x91B9, 0xE17D,
+    0x91BB, 0xE17E,
+    0x91BC, 0xE180,
+    0x91BD, 0xE181,
+    0x91BE, 0xE182,
+    0x91BF, 0xE183,
+    0x91C0, 0xE184,
+    0x91C1, 0xE185,
+    0x91C2, 0xE186,
+    0x91C3, 0xE187,
+    0x91C4, 0xE188,
+    0x91C5, 0xE189,
+    0x91C6, 0xE18A,
+    0x91C8, 0xE18B,
+    0x91CB, 0xE18C,
+    0x91D0, 0xE18D,
+    0x91D2, 0xE18E,
+    0x91D3, 0xE18F,
+    0x91D4, 0xE190,
+    0x91D5, 0xE191,
+    0x91D6, 0xE192,
+    0x91D7, 0xE193,
+    0x91D8, 0xE194,
+    0x91D9, 0xE195,
+    0x91DA, 0xE196,
+    0x91DB, 0xE197,
+    0x91DD, 0xE198,
+    0x91DE, 0xE199,
+    0x91DF, 0xE19A,
+    0x91E0, 0xE19B,
+    0x91E1, 0xE19C,
+    0x91E2, 0xE19D,
+    0x91E3, 0xE19E,
+    0x91E4, 0xE19F,
+    0x91E5, 0xE1A0,
+    0x91E6, 0xE240,
+    0x91E7, 0xE241,
+    0x91E8, 0xE242,
+    0x91E9, 0xE243,
+    0x91EA, 0xE244,
+    0x91EB, 0xE245,
+    0x91EC, 0xE246,
+    0x91ED, 0xE247,
+    0x91EE, 0xE248,
+    0x91EF, 0xE249,
+    0x91F0, 0xE24A,
+    0x91F1, 0xE24B,
+    0x91F2, 0xE24C,
+    0x91F3, 0xE24D,
+    0x91F4, 0xE24E,
+    0x91F5, 0xE24F,
+    0x91F6, 0xE250,
+    0x91F7, 0xE251,
+    0x91F8, 0xE252,
+    0x91F9, 0xE253,
+    0x91FA, 0xE254,
+    0x91FB, 0xE255,
+    0x91FC, 0xE256,
+    0x91FD, 0xE257,
+    0x91FE, 0xE258,
+    0x91FF, 0xE259,
+    0x9200, 0xE25A,
+    0x9201, 0xE25B,
+    0x9202, 0xE25C,
+    0x9203, 0xE25D,
+    0x9204, 0xE25E,
+    0x9205, 0xE25F,
+    0x9206, 0xE260,
+    0x9207, 0xE261,
+    0x9208, 0xE262,
+    0x9209, 0xE263,
+    0x920A, 0xE264,
+    0x920B, 0xE265,
+    0x920C, 0xE266,
+    0x920D, 0xE267,
+    0x920E, 0xE268,
+    0x920F, 0xE269,
+    0x9210, 0xE26A,
+    0x9211, 0xE26B,
+    0x9212, 0xE26C,
+    0x9213, 0xE26D,
+    0x9214, 0xE26E,
+    0x9215, 0xE26F,
+    0x9216, 0xE270,
+    0x9217, 0xE271,
+    0x9218, 0xE272,
+    0x9219, 0xE273,
+    0x921A, 0xE274,
+    0x921B, 0xE275,
+    0x921C, 0xE276,
+    0x921D, 0xE277,
+    0x921E, 0xE278,
+    0x921F, 0xE279,
+    0x9220, 0xE27A,
+    0x9221, 0xE27B,
+    0x9222, 0xE27C,
+    0x9223, 0xE27D,
+    0x9224, 0xE27E,
+    0x9225, 0xE280,
+    0x9226, 0xE281,
+    0x9227, 0xE282,
+    0x9228, 0xE283,
+    0x9229, 0xE284,
+    0x922A, 0xE285,
+    0x922B, 0xE286,
+    0x922C, 0xE287,
+    0x922D, 0xE288,
+    0x922E, 0xE289,
+    0x922F, 0xE28A,
+    0x9230, 0xE28B,
+    0x9231, 0xE28C,
+    0x9232, 0xE28D,
+    0x9233, 0xE28E,
+    0x9234, 0xE28F,
+    0x9235, 0xE290,
+    0x9236, 0xE291,
+    0x9237, 0xE292,
+    0x9238, 0xE293,
+    0x9239, 0xE294,
+    0x923A, 0xE295,
+    0x923B, 0xE296,
+    0x923C, 0xE297,
+    0x923D, 0xE298,
+    0x923E, 0xE299,
+    0x923F, 0xE29A,
+    0x9240, 0xE29B,
+    0x9241, 0xE29C,
+    0x9242, 0xE29D,
+    0x9243, 0xE29E,
+    0x9244, 0xE29F,
+    0x9245, 0xE2A0,
+    0x9246, 0xE340,
+    0x9247, 0xE341,
+    0x9248, 0xE342,
+    0x9249, 0xE343,
+    0x924A, 0xE344,
+    0x924B, 0xE345,
+    0x924C, 0xE346,
+    0x924D, 0xE347,
+    0x924E, 0xE348,
+    0x924F, 0xE349,
+    0x9250, 0xE34A,
+    0x9251, 0xE34B,
+    0x9252, 0xE34C,
+    0x9253, 0xE34D,
+    0x9254, 0xE34E,
+    0x9255, 0xE34F,
+    0x9256, 0xE350,
+    0x9257, 0xE351,
+    0x9258, 0xE352,
+    0x9259, 0xE353,
+    0x925A, 0xE354,
+    0x925B, 0xE355,
+    0x925C, 0xE356,
+    0x925D, 0xE357,
+    0x925E, 0xE358,
+    0x925F, 0xE359,
+    0x9260, 0xE35A,
+    0x9261, 0xE35B,
+    0x9262, 0xE35C,
+    0x9263, 0xE35D,
+    0x9264, 0xE35E,
+    0x9265, 0xE35F,
+    0x9266, 0xE360,
+    0x9267, 0xE361,
+    0x9268, 0xE362,
+    0x9269, 0xE363,
+    0x926A, 0xE364,
+    0x926B, 0xE365,
+    0x926C, 0xE366,
+    0x926D, 0xE367,
+    0x926E, 0xE368,
+    0x926F, 0xE369,
+    0x9270, 0xE36A,
+    0x9271, 0xE36B,
+    0x9272, 0xE36C,
+    0x9273, 0xE36D,
+    0x9275, 0xE36E,
+    0x9276, 0xE36F,
+    0x9277, 0xE370,
+    0x9278, 0xE371,
+    0x9279, 0xE372,
+    0x927A, 0xE373,
+    0x927B, 0xE374,
+    0x927C, 0xE375,
+    0x927D, 0xE376,
+    0x927E, 0xE377,
+    0x927F, 0xE378,
+    0x9280, 0xE379,
+    0x9281, 0xE37A,
+    0x9282, 0xE37B,
+    0x9283, 0xE37C,
+    0x9284, 0xE37D,
+    0x9285, 0xE37E,
+    0x9286, 0xE380,
+    0x9287, 0xE381,
+    0x9288, 0xE382,
+    0x9289, 0xE383,
+    0x928A, 0xE384,
+    0x928B, 0xE385,
+    0x928C, 0xE386,
+    0x928D, 0xE387,
+    0x928F, 0xE388,
+    0x9290, 0xE389,
+    0x9291, 0xE38A,
+    0x9292, 0xE38B,
+    0x9293, 0xE38C,
+    0x9294, 0xE38D,
+    0x9295, 0xE38E,
+    0x9296, 0xE38F,
+    0x9297, 0xE390,
+    0x9298, 0xE391,
+    0x9299, 0xE392,
+    0x929A, 0xE393,
+    0x929B, 0xE394,
+    0x929C, 0xE395,
+    0x929D, 0xE396,
+    0x929E, 0xE397,
+    0x929F, 0xE398,
+    0x92A0, 0xE399,
+    0x92A1, 0xE39A,
+    0x92A2, 0xE39B,
+    0x92A3, 0xE39C,
+    0x92A4, 0xE39D,
+    0x92A5, 0xE39E,
+    0x92A6, 0xE39F,
+    0x92A7, 0xE3A0,
+    0x92A8, 0xE440,
+    0x92A9, 0xE441,
+    0x92AA, 0xE442,
+    0x92AB, 0xE443,
+    0x92AC, 0xE444,
+    0x92AD, 0xE445,
+    0x92AF, 0xE446,
+    0x92B0, 0xE447,
+    0x92B1, 0xE448,
+    0x92B2, 0xE449,
+    0x92B3, 0xE44A,
+    0x92B4, 0xE44B,
+    0x92B5, 0xE44C,
+    0x92B6, 0xE44D,
+    0x92B7, 0xE44E,
+    0x92B8, 0xE44F,
+    0x92B9, 0xE450,
+    0x92BA, 0xE451,
+    0x92BB, 0xE452,
+    0x92BC, 0xE453,
+    0x92BD, 0xE454,
+    0x92BE, 0xE455,
+    0x92BF, 0xE456,
+    0x92C0, 0xE457,
+    0x92C1, 0xE458,
+    0x92C2, 0xE459,
+    0x92C3, 0xE45A,
+    0x92C4, 0xE45B,
+    0x92C5, 0xE45C,
+    0x92C6, 0xE45D,
+    0x92C7, 0xE45E,
+    0x92C9, 0xE45F,
+    0x92CA, 0xE460,
+    0x92CB, 0xE461,
+    0x92CC, 0xE462,
+    0x92CD, 0xE463,
+    0x92CE, 0xE464,
+    0x92CF, 0xE465,
+    0x92D0, 0xE466,
+    0x92D1, 0xE467,
+    0x92D2, 0xE468,
+    0x92D3, 0xE469,
+    0x92D4, 0xE46A,
+    0x92D5, 0xE46B,
+    0x92D6, 0xE46C,
+    0x92D7, 0xE46D,
+    0x92D8, 0xE46E,
+    0x92D9, 0xE46F,
+    0x92DA, 0xE470,
+    0x92DB, 0xE471,
+    0x92DC, 0xE472,
+    0x92DD, 0xE473,
+    0x92DE, 0xE474,
+    0x92DF, 0xE475,
+    0x92E0, 0xE476,
+    0x92E1, 0xE477,
+    0x92E2, 0xE478,
+    0x92E3, 0xE479,
+    0x92E4, 0xE47A,
+    0x92E5, 0xE47B,
+    0x92E6, 0xE47C,
+    0x92E7, 0xE47D,
+    0x92E8, 0xE47E,
+    0x92E9, 0xE480,
+    0x92EA, 0xE481,
+    0x92EB, 0xE482,
+    0x92EC, 0xE483,
+    0x92ED, 0xE484,
+    0x92EE, 0xE485,
+    0x92EF, 0xE486,
+    0x92F0, 0xE487,
+    0x92F1, 0xE488,
+    0x92F2, 0xE489,
+    0x92F3, 0xE48A,
+    0x92F4, 0xE48B,
+    0x92F5, 0xE48C,
+    0x92F6, 0xE48D,
+    0x92F7, 0xE48E,
+    0x92F8, 0xE48F,
+    0x92F9, 0xE490,
+    0x92FA, 0xE491,
+    0x92FB, 0xE492,
+    0x92FC, 0xE493,
+    0x92FD, 0xE494,
+    0x92FE, 0xE495,
+    0x92FF, 0xE496,
+    0x9300, 0xE497,
+    0x9301, 0xE498,
+    0x9302, 0xE499,
+    0x9303, 0xE49A,
+    0x9304, 0xE49B,
+    0x9305, 0xE49C,
+    0x9306, 0xE49D,
+    0x9307, 0xE49E,
+    0x9308, 0xE49F,
+    0x9309, 0xE4A0,
+    0x930A, 0xE540,
+    0x930B, 0xE541,
+    0x930C, 0xE542,
+    0x930D, 0xE543,
+    0x930E, 0xE544,
+    0x930F, 0xE545,
+    0x9310, 0xE546,
+    0x9311, 0xE547,
+    0x9312, 0xE548,
+    0x9313, 0xE549,
+    0x9314, 0xE54A,
+    0x9315, 0xE54B,
+    0x9316, 0xE54C,
+    0x9317, 0xE54D,
+    0x9318, 0xE54E,
+    0x9319, 0xE54F,
+    0x931A, 0xE550,
+    0x931B, 0xE551,
+    0x931C, 0xE552,
+    0x931D, 0xE553,
+    0x931E, 0xE554,
+    0x931F, 0xE555,
+    0x9320, 0xE556,
+    0x9321, 0xE557,
+    0x9322, 0xE558,
+    0x9323, 0xE559,
+    0x9324, 0xE55A,
+    0x9325, 0xE55B,
+    0x9326, 0xE55C,
+    0x9327, 0xE55D,
+    0x9328, 0xE55E,
+    0x9329, 0xE55F,
+    0x932A, 0xE560,
+    0x932B, 0xE561,
+    0x932C, 0xE562,
+    0x932D, 0xE563,
+    0x932E, 0xE564,
+    0x932F, 0xE565,
+    0x9330, 0xE566,
+    0x9331, 0xE567,
+    0x9332, 0xE568,
+    0x9333, 0xE569,
+    0x9334, 0xE56A,
+    0x9335, 0xE56B,
+    0x9336, 0xE56C,
+    0x9337, 0xE56D,
+    0x9338, 0xE56E,
+    0x9339, 0xE56F,
+    0x933A, 0xE570,
+    0x933B, 0xE571,
+    0x933C, 0xE572,
+    0x933D, 0xE573,
+    0x933F, 0xE574,
+    0x9340, 0xE575,
+    0x9341, 0xE576,
+    0x9342, 0xE577,
+    0x9343, 0xE578,
+    0x9344, 0xE579,
+    0x9345, 0xE57A,
+    0x9346, 0xE57B,
+    0x9347, 0xE57C,
+    0x9348, 0xE57D,
+    0x9349, 0xE57E,
+    0x934A, 0xE580,
+    0x934B, 0xE581,
+    0x934C, 0xE582,
+    0x934D, 0xE583,
+    0x934E, 0xE584,
+    0x934F, 0xE585,
+    0x9350, 0xE586,
+    0x9351, 0xE587,
+    0x9352, 0xE588,
+    0x9353, 0xE589,
+    0x9354, 0xE58A,
+    0x9355, 0xE58B,
+    0x9356, 0xE58C,
+    0x9357, 0xE58D,
+    0x9358, 0xE58E,
+    0x9359, 0xE58F,
+    0x935A, 0xE590,
+    0x935B, 0xE591,
+    0x935C, 0xE592,
+    0x935D, 0xE593,
+    0x935E, 0xE594,
+    0x935F, 0xE595,
+    0x9360, 0xE596,
+    0x9361, 0xE597,
+    0x9362, 0xE598,
+    0x9363, 0xE599,
+    0x9364, 0xE59A,
+    0x9365, 0xE59B,
+    0x9366, 0xE59C,
+    0x9367, 0xE59D,
+    0x9368, 0xE59E,
+    0x9369, 0xE59F,
+    0x936B, 0xE5A0,
+    0x936C, 0xE640,
+    0x936D, 0xE641,
+    0x936E, 0xE642,
+    0x936F, 0xE643,
+    0x9370, 0xE644,
+    0x9371, 0xE645,
+    0x9372, 0xE646,
+    0x9373, 0xE647,
+    0x9374, 0xE648,
+    0x9375, 0xE649,
+    0x9376, 0xE64A,
+    0x9377, 0xE64B,
+    0x9378, 0xE64C,
+    0x9379, 0xE64D,
+    0x937A, 0xE64E,
+    0x937B, 0xE64F,
+    0x937C, 0xE650,
+    0x937D, 0xE651,
+    0x937E, 0xE652,
+    0x937F, 0xE653,
+    0x9380, 0xE654,
+    0x9381, 0xE655,
+    0x9382, 0xE656,
+    0x9383, 0xE657,
+    0x9384, 0xE658,
+    0x9385, 0xE659,
+    0x9386, 0xE65A,
+    0x9387, 0xE65B,
+    0x9388, 0xE65C,
+    0x9389, 0xE65D,
+    0x938A, 0xE65E,
+    0x938B, 0xE65F,
+    0x938C, 0xE660,
+    0x938D, 0xE661,
+    0x938E, 0xE662,
+    0x9390, 0xE663,
+    0x9391, 0xE664,
+    0x9392, 0xE665,
+    0x9393, 0xE666,
+    0x9394, 0xE667,
+    0x9395, 0xE668,
+    0x9396, 0xE669,
+    0x9397, 0xE66A,
+    0x9398, 0xE66B,
+    0x9399, 0xE66C,
+    0x939A, 0xE66D,
+    0x939B, 0xE66E,
+    0x939C, 0xE66F,
+    0x939D, 0xE670,
+    0x939E, 0xE671,
+    0x939F, 0xE672,
+    0x93A0, 0xE673,
+    0x93A1, 0xE674,
+    0x93A2, 0xE675,
+    0x93A3, 0xE676,
+    0x93A4, 0xE677,
+    0x93A5, 0xE678,
+    0x93A6, 0xE679,
+    0x93A7, 0xE67A,
+    0x93A8, 0xE67B,
+    0x93A9, 0xE67C,
+    0x93AA, 0xE67D,
+    0x93AB, 0xE67E,
+    0x93AC, 0xE680,
+    0x93AD, 0xE681,
+    0x93AE, 0xE682,
+    0x93AF, 0xE683,
+    0x93B0, 0xE684,
+    0x93B1, 0xE685,
+    0x93B2, 0xE686,
+    0x93B3, 0xE687,
+    0x93B4, 0xE688,
+    0x93B5, 0xE689,
+    0x93B6, 0xE68A,
+    0x93B7, 0xE68B,
+    0x93B8, 0xE68C,
+    0x93B9, 0xE68D,
+    0x93BA, 0xE68E,
+    0x93BB, 0xE68F,
+    0x93BC, 0xE690,
+    0x93BD, 0xE691,
+    0x93BE, 0xE692,
+    0x93BF, 0xE693,
+    0x93C0, 0xE694,
+    0x93C1, 0xE695,
+    0x93C2, 0xE696,
+    0x93C3, 0xE697,
+    0x93C4, 0xE698,
+    0x93C5, 0xE699,
+    0x93C6, 0xE69A,
+    0x93C7, 0xE69B,
+    0x93C8, 0xE69C,
+    0x93C9, 0xE69D,
+    0x93CB, 0xE69E,
+    0x93CC, 0xE69F,
+    0x93CD, 0xE6A0,
+    0x93CE, 0xE740,
+    0x93CF, 0xE741,
+    0x93D0, 0xE742,
+    0x93D1, 0xE743,
+    0x93D2, 0xE744,
+    0x93D3, 0xE745,
+    0x93D4, 0xE746,
+    0x93D5, 0xE747,
+    0x93D7, 0xE748,
+    0x93D8, 0xE749,
+    0x93D9, 0xE74A,
+    0x93DA, 0xE74B,
+    0x93DB, 0xE74C,
+    0x93DC, 0xE74D,
+    0x93DD, 0xE74E,
+    0x93DE, 0xE74F,
+    0x93DF, 0xE750,
+    0x93E0, 0xE751,
+    0x93E1, 0xE752,
+    0x93E2, 0xE753,
+    0x93E3, 0xE754,
+    0x93E4, 0xE755,
+    0x93E5, 0xE756,
+    0x93E6, 0xE757,
+    0x93E7, 0xE758,
+    0x93E8, 0xE759,
+    0x93E9, 0xE75A,
+    0x93EA, 0xE75B,
+    0x93EB, 0xE75C,
+    0x93EC, 0xE75D,
+    0x93ED, 0xE75E,
+    0x93EE, 0xE75F,
+    0x93EF, 0xE760,
+    0x93F0, 0xE761,
+    0x93F1, 0xE762,
+    0x93F2, 0xE763,
+    0x93F3, 0xE764,
+    0x93F4, 0xE765,
+    0x93F5, 0xE766,
+    0x93F6, 0xE767,
+    0x93F7, 0xE768,
+    0x93F8, 0xE769,
+    0x93F9, 0xE76A,
+    0x93FA, 0xE76B,
+    0x93FB, 0xE76C,
+    0x93FC, 0xE76D,
+    0x93FD, 0xE76E,
+    0x93FE, 0xE76F,
+    0x93FF, 0xE770,
+    0x9400, 0xE771,
+    0x9401, 0xE772,
+    0x9402, 0xE773,
+    0x9403, 0xE774,
+    0x9404, 0xE775,
+    0x9405, 0xE776,
+    0x9406, 0xE777,
+    0x9407, 0xE778,
+    0x9408, 0xE779,
+    0x9409, 0xE77A,
+    0x940A, 0xE77B,
+    0x940B, 0xE77C,
+    0x940C, 0xE77D,
+    0x940D, 0xE77E,
+    0x940E, 0xE780,
+    0x940F, 0xE781,
+    0x9410, 0xE782,
+    0x9411, 0xE783,
+    0x9412, 0xE784,
+    0x9413, 0xE785,
+    0x9414, 0xE786,
+    0x9415, 0xE787,
+    0x9416, 0xE788,
+    0x9417, 0xE789,
+    0x9418, 0xE78A,
+    0x9419, 0xE78B,
+    0x941A, 0xE78C,
+    0x941B, 0xE78D,
+    0x941C, 0xE78E,
+    0x941D, 0xE78F,
+    0x941E, 0xE790,
+    0x941F, 0xE791,
+    0x9420, 0xE792,
+    0x9421, 0xE793,
+    0x9422, 0xE794,
+    0x9423, 0xE795,
+    0x9424, 0xE796,
+    0x9425, 0xE797,
+    0x9426, 0xE798,
+    0x9427, 0xE799,
+    0x9428, 0xE79A,
+    0x9429, 0xE79B,
+    0x942A, 0xE79C,
+    0x942B, 0xE79D,
+    0x942C, 0xE79E,
+    0x942D, 0xE79F,
+    0x942E, 0xE7A0,
+    0x942F, 0xE840,
+    0x9430, 0xE841,
+    0x9431, 0xE842,
+    0x9432, 0xE843,
+    0x9433, 0xE844,
+    0x9434, 0xE845,
+    0x9435, 0xE846,
+    0x9436, 0xE847,
+    0x9437, 0xE848,
+    0x9438, 0xE849,
+    0x9439, 0xE84A,
+    0x943A, 0xE84B,
+    0x943B, 0xE84C,
+    0x943C, 0xE84D,
+    0x943D, 0xE84E,
+    0x943F, 0xE84F,
+    0x9440, 0xE850,
+    0x9441, 0xE851,
+    0x9442, 0xE852,
+    0x9443, 0xE853,
+    0x9444, 0xE854,
+    0x9445, 0xE855,
+    0x9446, 0xE856,
+    0x9447, 0xE857,
+    0x9448, 0xE858,
+    0x9449, 0xE859,
+    0x944A, 0xE85A,
+    0x944B, 0xE85B,
+    0x944C, 0xE85C,
+    0x944D, 0xE85D,
+    0x944E, 0xE85E,
+    0x944F, 0xE85F,
+    0x9450, 0xE860,
+    0x9451, 0xE861,
+    0x9452, 0xE862,
+    0x9453, 0xE863,
+    0x9454, 0xE864,
+    0x9455, 0xE865,
+    0x9456, 0xE866,
+    0x9457, 0xE867,
+    0x9458, 0xE868,
+    0x9459, 0xE869,
+    0x945A, 0xE86A,
+    0x945B, 0xE86B,
+    0x945C, 0xE86C,
+    0x945D, 0xE86D,
+    0x945E, 0xE86E,
+    0x945F, 0xE86F,
+    0x9460, 0xE870,
+    0x9461, 0xE871,
+    0x9462, 0xE872,
+    0x9463, 0xE873,
+    0x9464, 0xE874,
+    0x9465, 0xE875,
+    0x9466, 0xE876,
+    0x9467, 0xE877,
+    0x9468, 0xE878,
+    0x9469, 0xE879,
+    0x946A, 0xE87A,
+    0x946C, 0xE87B,
+    0x946D, 0xE87C,
+    0x946E, 0xE87D,
+    0x946F, 0xE87E,
+    0x9470, 0xE880,
+    0x9471, 0xE881,
+    0x9472, 0xE882,
+    0x9473, 0xE883,
+    0x9474, 0xE884,
+    0x9475, 0xE885,
+    0x9476, 0xE886,
+    0x9477, 0xE887,
+    0x9478, 0xE888,
+    0x9479, 0xE889,
+    0x947A, 0xE88A,
+    0x947B, 0xE88B,
+    0x947C, 0xE88C,
+    0x947D, 0xE88D,
+    0x947E, 0xE88E,
+    0x947F, 0xE88F,
+    0x9480, 0xE890,
+    0x9481, 0xE891,
+    0x9482, 0xE892,
+    0x9483, 0xE893,
+    0x9484, 0xE894,
+    0x9491, 0xE895,
+    0x9496, 0xE896,
+    0x9498, 0xE897,
+    0x94C7, 0xE898,
+    0x94CF, 0xE899,
+    0x94D3, 0xE89A,
+    0x94D4, 0xE89B,
+    0x94DA, 0xE89C,
+    0x94E6, 0xE89D,
+    0x94FB, 0xE89E,
+    0x951C, 0xE89F,
+    0x9520, 0xE8A0,
+    0x9527, 0xE940,
+    0x9533, 0xE941,
+    0x953D, 0xE942,
+    0x9543, 0xE943,
+    0x9548, 0xE944,
+    0x954B, 0xE945,
+    0x9555, 0xE946,
+    0x955A, 0xE947,
+    0x9560, 0xE948,
+    0x956E, 0xE949,
+    0x9574, 0xE94A,
+    0x9575, 0xE94B,
+    0x9577, 0xE94C,
+    0x9578, 0xE94D,
+    0x9579, 0xE94E,
+    0x957A, 0xE94F,
+    0x957B, 0xE950,
+    0x957C, 0xE951,
+    0x957D, 0xE952,
+    0x957E, 0xE953,
+    0x9580, 0xE954,
+    0x9581, 0xE955,
+    0x9582, 0xE956,
+    0x9583, 0xE957,
+    0x9584, 0xE958,
+    0x9585, 0xE959,
+    0x9586, 0xE95A,
+    0x9587, 0xE95B,
+    0x9588, 0xE95C,
+    0x9589, 0xE95D,
+    0x958A, 0xE95E,
+    0x958B, 0xE95F,
+    0x958C, 0xE960,
+    0x958D, 0xE961,
+    0x958E, 0xE962,
+    0x958F, 0xE963,
+    0x9590, 0xE964,
+    0x9591, 0xE965,
+    0x9592, 0xE966,
+    0x9593, 0xE967,
+    0x9594, 0xE968,
+    0x9595, 0xE969,
+    0x9596, 0xE96A,
+    0x9597, 0xE96B,
+    0x9598, 0xE96C,
+    0x9599, 0xE96D,
+    0x959A, 0xE96E,
+    0x959B, 0xE96F,
+    0x959C, 0xE970,
+    0x959D, 0xE971,
+    0x959E, 0xE972,
+    0x959F, 0xE973,
+    0x95A0, 0xE974,
+    0x95A1, 0xE975,
+    0x95A2, 0xE976,
+    0x95A3, 0xE977,
+    0x95A4, 0xE978,
+    0x95A5, 0xE979,
+    0x95A6, 0xE97A,
+    0x95A7, 0xE97B,
+    0x95A8, 0xE97C,
+    0x95A9, 0xE97D,
+    0x95AA, 0xE97E,
+    0x95AB, 0xE980,
+    0x95AC, 0xE981,
+    0x95AD, 0xE982,
+    0x95AE, 0xE983,
+    0x95AF, 0xE984,
+    0x95B0, 0xE985,
+    0x95B1, 0xE986,
+    0x95B2, 0xE987,
+    0x95B3, 0xE988,
+    0x95B4, 0xE989,
+    0x95B5, 0xE98A,
+    0x95B6, 0xE98B,
+    0x95B7, 0xE98C,
+    0x95B8, 0xE98D,
+    0x95B9, 0xE98E,
+    0x95BA, 0xE98F,
+    0x95BB, 0xE990,
+    0x95BC, 0xE991,
+    0x95BD, 0xE992,
+    0x95BE, 0xE993,
+    0x95BF, 0xE994,
+    0x95C0, 0xE995,
+    0x95C1, 0xE996,
+    0x95C2, 0xE997,
+    0x95C3, 0xE998,
+    0x95C4, 0xE999,
+    0x95C5, 0xE99A,
+    0x95C6, 0xE99B,
+    0x95C7, 0xE99C,
+    0x95C8, 0xE99D,
+    0x95C9, 0xE99E,
+    0x95CA, 0xE99F,
+    0x95CB, 0xE9A0,
+    0x95CC, 0xEA40,
+    0x95CD, 0xEA41,
+    0x95CE, 0xEA42,
+    0x95CF, 0xEA43,
+    0x95D0, 0xEA44,
+    0x95D1, 0xEA45,
+    0x95D2, 0xEA46,
+    0x95D3, 0xEA47,
+    0x95D4, 0xEA48,
+    0x95D5, 0xEA49,
+    0x95D6, 0xEA4A,
+    0x95D7, 0xEA4B,
+    0x95D8, 0xEA4C,
+    0x95D9, 0xEA4D,
+    0x95DA, 0xEA4E,
+    0x95DB, 0xEA4F,
+    0x95DC, 0xEA50,
+    0x95DD, 0xEA51,
+    0x95DE, 0xEA52,
+    0x95DF, 0xEA53,
+    0x95E0, 0xEA54,
+    0x95E1, 0xEA55,
+    0x95E2, 0xEA56,
+    0x95E3, 0xEA57,
+    0x95E4, 0xEA58,
+    0x95E5, 0xEA59,
+    0x95E6, 0xEA5A,
+    0x95E7, 0xEA5B,
+    0x95EC, 0xEA5C,
+    0x95FF, 0xEA5D,
+    0x9607, 0xEA5E,
+    0x9613, 0xEA5F,
+    0x9618, 0xEA60,
+    0x961B, 0xEA61,
+    0x961E, 0xEA62,
+    0x9620, 0xEA63,
+    0x9623, 0xEA64,
+    0x9624, 0xEA65,
+    0x9625, 0xEA66,
+    0x9626, 0xEA67,
+    0x9627, 0xEA68,
+    0x9628, 0xEA69,
+    0x9629, 0xEA6A,
+    0x962B, 0xEA6B,
+    0x962C, 0xEA6C,
+    0x962D, 0xEA6D,
+    0x962F, 0xEA6E,
+    0x9630, 0xEA6F,
+    0x9637, 0xEA70,
+    0x9638, 0xEA71,
+    0x9639, 0xEA72,
+    0x963A, 0xEA73,
+    0x963E, 0xEA74,
+    0x9641, 0xEA75,
+    0x9643, 0xEA76,
+    0x964A, 0xEA77,
+    0x964E, 0xEA78,
+    0x964F, 0xEA79,
+    0x9651, 0xEA7A,
+    0x9652, 0xEA7B,
+    0x9653, 0xEA7C,
+    0x9656, 0xEA7D,
+    0x9657, 0xEA7E,
+    0x9658, 0xEA80,
+    0x9659, 0xEA81,
+    0x965A, 0xEA82,
+    0x965C, 0xEA83,
+    0x965D, 0xEA84,
+    0x965E, 0xEA85,
+    0x9660, 0xEA86,
+    0x9663, 0xEA87,
+    0x9665, 0xEA88,
+    0x9666, 0xEA89,
+    0x966B, 0xEA8A,
+    0x966D, 0xEA8B,
+    0x966E, 0xEA8C,
+    0x966F, 0xEA8D,
+    0x9670, 0xEA8E,
+    0x9671, 0xEA8F,
+    0x9673, 0xEA90,
+    0x9678, 0xEA91,
+    0x9679, 0xEA92,
+    0x967A, 0xEA93,
+    0x967B, 0xEA94,
+    0x967C, 0xEA95,
+    0x967D, 0xEA96,
+    0x967E, 0xEA97,
+    0x967F, 0xEA98,
+    0x9680, 0xEA99,
+    0x9681, 0xEA9A,
+    0x9682, 0xEA9B,
+    0x9683, 0xEA9C,
+    0x9684, 0xEA9D,
+    0x9687, 0xEA9E,
+    0x9689, 0xEA9F,
+    0x968A, 0xEAA0,
+    0x968C, 0xEB40,
+    0x968E, 0xEB41,
+    0x9691, 0xEB42,
+    0x9692, 0xEB43,
+    0x9693, 0xEB44,
+    0x9695, 0xEB45,
+    0x9696, 0xEB46,
+    0x969A, 0xEB47,
+    0x969B, 0xEB48,
+    0x969D, 0xEB49,
+    0x969E, 0xEB4A,
+    0x969F, 0xEB4B,
+    0x96A0, 0xEB4C,
+    0x96A1, 0xEB4D,
+    0x96A2, 0xEB4E,
+    0x96A3, 0xEB4F,
+    0x96A4, 0xEB50,
+    0x96A5, 0xEB51,
+    0x96A6, 0xEB52,
+    0x96A8, 0xEB53,
+    0x96A9, 0xEB54,
+    0x96AA, 0xEB55,
+    0x96AB, 0xEB56,
+    0x96AC, 0xEB57,
+    0x96AD, 0xEB58,
+    0x96AE, 0xEB59,
+    0x96AF, 0xEB5A,
+    0x96B1, 0xEB5B,
+    0x96B2, 0xEB5C,
+    0x96B4, 0xEB5D,
+    0x96B5, 0xEB5E,
+    0x96B7, 0xEB5F,
+    0x96B8, 0xEB60,
+    0x96BA, 0xEB61,
+    0x96BB, 0xEB62,
+    0x96BF, 0xEB63,
+    0x96C2, 0xEB64,
+    0x96C3, 0xEB65,
+    0x96C8, 0xEB66,
+    0x96CA, 0xEB67,
+    0x96CB, 0xEB68,
+    0x96D0, 0xEB69,
+    0x96D1, 0xEB6A,
+    0x96D3, 0xEB6B,
+    0x96D4, 0xEB6C,
+    0x96D6, 0xEB6D,
+    0x96D7, 0xEB6E,
+    0x96D8, 0xEB6F,
+    0x96D9, 0xEB70,
+    0x96DA, 0xEB71,
+    0x96DB, 0xEB72,
+    0x96DC, 0xEB73,
+    0x96DD, 0xEB74,
+    0x96DE, 0xEB75,
+    0x96DF, 0xEB76,
+    0x96E1, 0xEB77,
+    0x96E2, 0xEB78,
+    0x96E3, 0xEB79,
+    0x96E4, 0xEB7A,
+    0x96E5, 0xEB7B,
+    0x96E6, 0xEB7C,
+    0x96E7, 0xEB7D,
+    0x96EB, 0xEB7E,
+    0x96EC, 0xEB80,
+    0x96ED, 0xEB81,
+    0x96EE, 0xEB82,
+    0x96F0, 0xEB83,
+    0x96F1, 0xEB84,
+    0x96F2, 0xEB85,
+    0x96F4, 0xEB86,
+    0x96F5, 0xEB87,
+    0x96F8, 0xEB88,
+    0x96FA, 0xEB89,
+    0x96FB, 0xEB8A,
+    0x96FC, 0xEB8B,
+    0x96FD, 0xEB8C,
+    0x96FF, 0xEB8D,
+    0x9702, 0xEB8E,
+    0x9703, 0xEB8F,
+    0x9705, 0xEB90,
+    0x970A, 0xEB91,
+    0x970B, 0xEB92,
+    0x970C, 0xEB93,
+    0x9710, 0xEB94,
+    0x9711, 0xEB95,
+    0x9712, 0xEB96,
+    0x9714, 0xEB97,
+    0x9715, 0xEB98,
+    0x9717, 0xEB99,
+    0x9718, 0xEB9A,
+    0x9719, 0xEB9B,
+    0x971A, 0xEB9C,
+    0x971B, 0xEB9D,
+    0x971D, 0xEB9E,
+    0x971F, 0xEB9F,
+    0x9720, 0xEBA0,
+    0x9721, 0xEC40,
+    0x9722, 0xEC41,
+    0x9723, 0xEC42,
+    0x9724, 0xEC43,
+    0x9725, 0xEC44,
+    0x9726, 0xEC45,
+    0x9727, 0xEC46,
+    0x9728, 0xEC47,
+    0x9729, 0xEC48,
+    0x972B, 0xEC49,
+    0x972C, 0xEC4A,
+    0x972E, 0xEC4B,
+    0x972F, 0xEC4C,
+    0x9731, 0xEC4D,
+    0x9733, 0xEC4E,
+    0x9734, 0xEC4F,
+    0x9735, 0xEC50,
+    0x9736, 0xEC51,
+    0x9737, 0xEC52,
+    0x973A, 0xEC53,
+    0x973B, 0xEC54,
+    0x973C, 0xEC55,
+    0x973D, 0xEC56,
+    0x973F, 0xEC57,
+    0x9740, 0xEC58,
+    0x9741, 0xEC59,
+    0x9742, 0xEC5A,
+    0x9743, 0xEC5B,
+    0x9744, 0xEC5C,
+    0x9745, 0xEC5D,
+    0x9746, 0xEC5E,
+    0x9747, 0xEC5F,
+    0x9748, 0xEC60,
+    0x9749, 0xEC61,
+    0x974A, 0xEC62,
+    0x974B, 0xEC63,
+    0x974C, 0xEC64,
+    0x974D, 0xEC65,
+    0x974E, 0xEC66,
+    0x974F, 0xEC67,
+    0x9750, 0xEC68,
+    0x9751, 0xEC69,
+    0x9754, 0xEC6A,
+    0x9755, 0xEC6B,
+    0x9757, 0xEC6C,
+    0x9758, 0xEC6D,
+    0x975A, 0xEC6E,
+    0x975C, 0xEC6F,
+    0x975D, 0xEC70,
+    0x975F, 0xEC71,
+    0x9763, 0xEC72,
+    0x9764, 0xEC73,
+    0x9766, 0xEC74,
+    0x9767, 0xEC75,
+    0x9768, 0xEC76,
+    0x976A, 0xEC77,
+    0x976B, 0xEC78,
+    0x976C, 0xEC79,
+    0x976D, 0xEC7A,
+    0x976E, 0xEC7B,
+    0x976F, 0xEC7C,
+    0x9770, 0xEC7D,
+    0x9771, 0xEC7E,
+    0x9772, 0xEC80,
+    0x9775, 0xEC81,
+    0x9777, 0xEC82,
+    0x9778, 0xEC83,
+    0x9779, 0xEC84,
+    0x977A, 0xEC85,
+    0x977B, 0xEC86,
+    0x977D, 0xEC87,
+    0x977E, 0xEC88,
+    0x977F, 0xEC89,
+    0x9780, 0xEC8A,
+    0x9781, 0xEC8B,
+    0x9782, 0xEC8C,
+    0x9783, 0xEC8D,
+    0x9784, 0xEC8E,
+    0x9786, 0xEC8F,
+    0x9787, 0xEC90,
+    0x9788, 0xEC91,
+    0x9789, 0xEC92,
+    0x978A, 0xEC93,
+    0x978C, 0xEC94,
+    0x978E, 0xEC95,
+    0x978F, 0xEC96,
+    0x9790, 0xEC97,
+    0x9793, 0xEC98,
+    0x9795, 0xEC99,
+    0x9796, 0xEC9A,
+    0x9797, 0xEC9B,
+    0x9799, 0xEC9C,
+    0x979A, 0xEC9D,
+    0x979B, 0xEC9E,
+    0x979C, 0xEC9F,
+    0x979D, 0xECA0,
+    0x979E, 0xED40,
+    0x979F, 0xED41,
+    0x97A1, 0xED42,
+    0x97A2, 0xED43,
+    0x97A4, 0xED44,
+    0x97A5, 0xED45,
+    0x97A6, 0xED46,
+    0x97A7, 0xED47,
+    0x97A8, 0xED48,
+    0x97A9, 0xED49,
+    0x97AA, 0xED4A,
+    0x97AC, 0xED4B,
+    0x97AE, 0xED4C,
+    0x97B0, 0xED4D,
+    0x97B1, 0xED4E,
+    0x97B3, 0xED4F,
+    0x97B5, 0xED50,
+    0x97B6, 0xED51,
+    0x97B7, 0xED52,
+    0x97B8, 0xED53,
+    0x97B9, 0xED54,
+    0x97BA, 0xED55,
+    0x97BB, 0xED56,
+    0x97BC, 0xED57,
+    0x97BD, 0xED58,
+    0x97BE, 0xED59,
+    0x97BF, 0xED5A,
+    0x97C0, 0xED5B,
+    0x97C1, 0xED5C,
+    0x97C2, 0xED5D,
+    0x97C3, 0xED5E,
+    0x97C4, 0xED5F,
+    0x97C5, 0xED60,
+    0x97C6, 0xED61,
+    0x97C7, 0xED62,
+    0x97C8, 0xED63,
+    0x97C9, 0xED64,
+    0x97CA, 0xED65,
+    0x97CB, 0xED66,
+    0x97CC, 0xED67,
+    0x97CD, 0xED68,
+    0x97CE, 0xED69,
+    0x97CF, 0xED6A,
+    0x97D0, 0xED6B,
+    0x97D1, 0xED6C,
+    0x97D2, 0xED6D,
+    0x97D3, 0xED6E,
+    0x97D4, 0xED6F,
+    0x97D5, 0xED70,
+    0x97D6, 0xED71,
+    0x97D7, 0xED72,
+    0x97D8, 0xED73,
+    0x97D9, 0xED74,
+    0x97DA, 0xED75,
+    0x97DB, 0xED76,
+    0x97DC, 0xED77,
+    0x97DD, 0xED78,
+    0x97DE, 0xED79,
+    0x97DF, 0xED7A,
+    0x97E0, 0xED7B,
+    0x97E1, 0xED7C,
+    0x97E2, 0xED7D,
+    0x97E3, 0xED7E,
+    0x97E4, 0xED80,
+    0x97E5, 0xED81,
+    0x97E8, 0xED82,
+    0x97EE, 0xED83,
+    0x97EF, 0xED84,
+    0x97F0, 0xED85,
+    0x97F1, 0xED86,
+    0x97F2, 0xED87,
+    0x97F4, 0xED88,
+    0x97F7, 0xED89,
+    0x97F8, 0xED8A,
+    0x97F9, 0xED8B,
+    0x97FA, 0xED8C,
+    0x97FB, 0xED8D,
+    0x97FC, 0xED8E,
+    0x97FD, 0xED8F,
+    0x97FE, 0xED90,
+    0x97FF, 0xED91,
+    0x9800, 0xED92,
+    0x9801, 0xED93,
+    0x9802, 0xED94,
+    0x9803, 0xED95,
+    0x9804, 0xED96,
+    0x9805, 0xED97,
+    0x9806, 0xED98,
+    0x9807, 0xED99,
+    0x9808, 0xED9A,
+    0x9809, 0xED9B,
+    0x980A, 0xED9C,
+    0x980B, 0xED9D,
+    0x980C, 0xED9E,
+    0x980D, 0xED9F,
+    0x980E, 0xEDA0,
+    0x980F, 0xEE40,
+    0x9810, 0xEE41,
+    0x9811, 0xEE42,
+    0x9812, 0xEE43,
+    0x9813, 0xEE44,
+    0x9814, 0xEE45,
+    0x9815, 0xEE46,
+    0x9816, 0xEE47,
+    0x9817, 0xEE48,
+    0x9818, 0xEE49,
+    0x9819, 0xEE4A,
+    0x981A, 0xEE4B,
+    0x981B, 0xEE4C,
+    0x981C, 0xEE4D,
+    0x981D, 0xEE4E,
+    0x981E, 0xEE4F,
+    0x981F, 0xEE50,
+    0x9820, 0xEE51,
+    0x9821, 0xEE52,
+    0x9822, 0xEE53,
+    0x9823, 0xEE54,
+    0x9824, 0xEE55,
+    0x9825, 0xEE56,
+    0x9826, 0xEE57,
+    0x9827, 0xEE58,
+    0x9828, 0xEE59,
+    0x9829, 0xEE5A,
+    0x982A, 0xEE5B,
+    0x982B, 0xEE5C,
+    0x982C, 0xEE5D,
+    0x982D, 0xEE5E,
+    0x982E, 0xEE5F,
+    0x982F, 0xEE60,
+    0x9830, 0xEE61,
+    0x9831, 0xEE62,
+    0x9832, 0xEE63,
+    0x9833, 0xEE64,
+    0x9834, 0xEE65,
+    0x9835, 0xEE66,
+    0x9836, 0xEE67,
+    0x9837, 0xEE68,
+    0x9838, 0xEE69,
+    0x9839, 0xEE6A,
+    0x983A, 0xEE6B,
+    0x983B, 0xEE6C,
+    0x983C, 0xEE6D,
+    0x983D, 0xEE6E,
+    0x983E, 0xEE6F,
+    0x983F, 0xEE70,
+    0x9840, 0xEE71,
+    0x9841, 0xEE72,
+    0x9842, 0xEE73,
+    0x9843, 0xEE74,
+    0x9844, 0xEE75,
+    0x9845, 0xEE76,
+    0x9846, 0xEE77,
+    0x9847, 0xEE78,
+    0x9848, 0xEE79,
+    0x9849, 0xEE7A,
+    0x984A, 0xEE7B,
+    0x984B, 0xEE7C,
+    0x984C, 0xEE7D,
+    0x984D, 0xEE7E,
+    0x984E, 0xEE80,
+    0x984F, 0xEE81,
+    0x9850, 0xEE82,
+    0x9851, 0xEE83,
+    0x9852, 0xEE84,
+    0x9853, 0xEE85,
+    0x9854, 0xEE86,
+    0x9855, 0xEE87,
+    0x9856, 0xEE88,
+    0x9857, 0xEE89,
+    0x9858, 0xEE8A,
+    0x9859, 0xEE8B,
+    0x985A, 0xEE8C,
+    0x985B, 0xEE8D,
+    0x985C, 0xEE8E,
+    0x985D, 0xEE8F,
+    0x985E, 0xEE90,
+    0x985F, 0xEE91,
+    0x9860, 0xEE92,
+    0x9861, 0xEE93,
+    0x9862, 0xEE94,
+    0x9863, 0xEE95,
+    0x9864, 0xEE96,
+    0x9865, 0xEE97,
+    0x9866, 0xEE98,
+    0x9867, 0xEE99,
+    0x9868, 0xEE9A,
+    0x9869, 0xEE9B,
+    0x986A, 0xEE9C,
+    0x986B, 0xEE9D,
+    0x986C, 0xEE9E,
+    0x986D, 0xEE9F,
+    0x986E, 0xEEA0,
+    0x986F, 0xEF40,
+    0x9870, 0xEF41,
+    0x9871, 0xEF42,
+    0x9872, 0xEF43,
+    0x9873, 0xEF44,
+    0x9874, 0xEF45,
+    0x988B, 0xEF46,
+    0x988E, 0xEF47,
+    0x9892, 0xEF48,
+    0x9895, 0xEF49,
+    0x9899, 0xEF4A,
+    0x98A3, 0xEF4B,
+    0x98A8, 0xEF4C,
+    0x98A9, 0xEF4D,
+    0x98AA, 0xEF4E,
+    0x98AB, 0xEF4F,
+    0x98AC, 0xEF50,
+    0x98AD, 0xEF51,
+    0x98AE, 0xEF52,
+    0x98AF, 0xEF53,
+    0x98B0, 0xEF54,
+    0x98B1, 0xEF55,
+    0x98B2, 0xEF56,
+    0x98B3, 0xEF57,
+    0x98B4, 0xEF58,
+    0x98B5, 0xEF59,
+    0x98B6, 0xEF5A,
+    0x98B7, 0xEF5B,
+    0x98B8, 0xEF5C,
+    0x98B9, 0xEF5D,
+    0x98BA, 0xEF5E,
+    0x98BB, 0xEF5F,
+    0x98BC, 0xEF60,
+    0x98BD, 0xEF61,
+    0x98BE, 0xEF62,
+    0x98BF, 0xEF63,
+    0x98C0, 0xEF64,
+    0x98C1, 0xEF65,
+    0x98C2, 0xEF66,
+    0x98C3, 0xEF67,
+    0x98C4, 0xEF68,
+    0x98C5, 0xEF69,
+    0x98C6, 0xEF6A,
+    0x98C7, 0xEF6B,
+    0x98C8, 0xEF6C,
+    0x98C9, 0xEF6D,
+    0x98CA, 0xEF6E,
+    0x98CB, 0xEF6F,
+    0x98CC, 0xEF70,
+    0x98CD, 0xEF71,
+    0x98CF, 0xEF72,
+    0x98D0, 0xEF73,
+    0x98D4, 0xEF74,
+    0x98D6, 0xEF75,
+    0x98D7, 0xEF76,
+    0x98DB, 0xEF77,
+    0x98DC, 0xEF78,
+    0x98DD, 0xEF79,
+    0x98E0, 0xEF7A,
+    0x98E1, 0xEF7B,
+    0x98E2, 0xEF7C,
+    0x98E3, 0xEF7D,
+    0x98E4, 0xEF7E,
+    0x98E5, 0xEF80,
+    0x98E6, 0xEF81,
+    0x98E9, 0xEF82,
+    0x98EA, 0xEF83,
+    0x98EB, 0xEF84,
+    0x98EC, 0xEF85,
+    0x98ED, 0xEF86,
+    0x98EE, 0xEF87,
+    0x98EF, 0xEF88,
+    0x98F0, 0xEF89,
+    0x98F1, 0xEF8A,
+    0x98F2, 0xEF8B,
+    0x98F3, 0xEF8C,
+    0x98F4, 0xEF8D,
+    0x98F5, 0xEF8E,
+    0x98F6, 0xEF8F,
+    0x98F7, 0xEF90,
+    0x98F8, 0xEF91,
+    0x98F9, 0xEF92,
+    0x98FA, 0xEF93,
+    0x98FB, 0xEF94,
+    0x98FC, 0xEF95,
+    0x98FD, 0xEF96,
+    0x98FE, 0xEF97,
+    0x98FF, 0xEF98,
+    0x9900, 0xEF99,
+    0x9901, 0xEF9A,
+    0x9902, 0xEF9B,
+    0x9903, 0xEF9C,
+    0x9904, 0xEF9D,
+    0x9905, 0xEF9E,
+    0x9906, 0xEF9F,
+    0x9907, 0xEFA0,
+    0x9908, 0xF040,
+    0x9909, 0xF041,
+    0x990A, 0xF042,
+    0x990B, 0xF043,
+    0x990C, 0xF044,
+    0x990E, 0xF045,
+    0x990F, 0xF046,
+    0x9911, 0xF047,
+    0x9912, 0xF048,
+    0x9913, 0xF049,
+    0x9914, 0xF04A,
+    0x9915, 0xF04B,
+    0x9916, 0xF04C,
+    0x9917, 0xF04D,
+    0x9918, 0xF04E,
+    0x9919, 0xF04F,
+    0x991A, 0xF050,
+    0x991B, 0xF051,
+    0x991C, 0xF052,
+    0x991D, 0xF053,
+    0x991E, 0xF054,
+    0x991F, 0xF055,
+    0x9920, 0xF056,
+    0x9921, 0xF057,
+    0x9922, 0xF058,
+    0x9923, 0xF059,
+    0x9924, 0xF05A,
+    0x9925, 0xF05B,
+    0x9926, 0xF05C,
+    0x9927, 0xF05D,
+    0x9928, 0xF05E,
+    0x9929, 0xF05F,
+    0x992A, 0xF060,
+    0x992B, 0xF061,
+    0x992C, 0xF062,
+    0x992D, 0xF063,
+    0x992F, 0xF064,
+    0x9930, 0xF065,
+    0x9931, 0xF066,
+    0x9932, 0xF067,
+    0x9933, 0xF068,
+    0x9934, 0xF069,
+    0x9935, 0xF06A,
+    0x9936, 0xF06B,
+    0x9937, 0xF06C,
+    0x9938, 0xF06D,
+    0x9939, 0xF06E,
+    0x993A, 0xF06F,
+    0x993B, 0xF070,
+    0x993C, 0xF071,
+    0x993D, 0xF072,
+    0x993E, 0xF073,
+    0x993F, 0xF074,
+    0x9940, 0xF075,
+    0x9941, 0xF076,
+    0x9942, 0xF077,
+    0x9943, 0xF078,
+    0x9944, 0xF079,
+    0x9945, 0xF07A,
+    0x9946, 0xF07B,
+    0x9947, 0xF07C,
+    0x9948, 0xF07D,
+    0x9949, 0xF07E,
+    0x994A, 0xF080,
+    0x994B, 0xF081,
+    0x994C, 0xF082,
+    0x994D, 0xF083,
+    0x994E, 0xF084,
+    0x994F, 0xF085,
+    0x9950, 0xF086,
+    0x9951, 0xF087,
+    0x9952, 0xF088,
+    0x9953, 0xF089,
+    0x9956, 0xF08A,
+    0x9957, 0xF08B,
+    0x9958, 0xF08C,
+    0x9959, 0xF08D,
+    0x995A, 0xF08E,
+    0x995B, 0xF08F,
+    0x995C, 0xF090,
+    0x995D, 0xF091,
+    0x995E, 0xF092,
+    0x995F, 0xF093,
+    0x9960, 0xF094,
+    0x9961, 0xF095,
+    0x9962, 0xF096,
+    0x9964, 0xF097,
+    0x9966, 0xF098,
+    0x9973, 0xF099,
+    0x9978, 0xF09A,
+    0x9979, 0xF09B,
+    0x997B, 0xF09C,
+    0x997E, 0xF09D,
+    0x9982, 0xF09E,
+    0x9983, 0xF09F,
+    0x9989, 0xF0A0,
+    0x998C, 0xF140,
+    0x998E, 0xF141,
+    0x999A, 0xF142,
+    0x999B, 0xF143,
+    0x999C, 0xF144,
+    0x999D, 0xF145,
+    0x999E, 0xF146,
+    0x999F, 0xF147,
+    0x99A0, 0xF148,
+    0x99A1, 0xF149,
+    0x99A2, 0xF14A,
+    0x99A3, 0xF14B,
+    0x99A4, 0xF14C,
+    0x99A6, 0xF14D,
+    0x99A7, 0xF14E,
+    0x99A9, 0xF14F,
+    0x99AA, 0xF150,
+    0x99AB, 0xF151,
+    0x99AC, 0xF152,
+    0x99AD, 0xF153,
+    0x99AE, 0xF154,
+    0x99AF, 0xF155,
+    0x99B0, 0xF156,
+    0x99B1, 0xF157,
+    0x99B2, 0xF158,
+    0x99B3, 0xF159,
+    0x99B4, 0xF15A,
+    0x99B5, 0xF15B,
+    0x99B6, 0xF15C,
+    0x99B7, 0xF15D,
+    0x99B8, 0xF15E,
+    0x99B9, 0xF15F,
+    0x99BA, 0xF160,
+    0x99BB, 0xF161,
+    0x99BC, 0xF162,
+    0x99BD, 0xF163,
+    0x99BE, 0xF164,
+    0x99BF, 0xF165,
+    0x99C0, 0xF166,
+    0x99C1, 0xF167,
+    0x99C2, 0xF168,
+    0x99C3, 0xF169,
+    0x99C4, 0xF16A,
+    0x99C5, 0xF16B,
+    0x99C6, 0xF16C,
+    0x99C7, 0xF16D,
+    0x99C8, 0xF16E,
+    0x99C9, 0xF16F,
+    0x99CA, 0xF170,
+    0x99CB, 0xF171,
+    0x99CC, 0xF172,
+    0x99CD, 0xF173,
+    0x99CE, 0xF174,
+    0x99CF, 0xF175,
+    0x99D0, 0xF176,
+    0x99D1, 0xF177,
+    0x99D2, 0xF178,
+    0x99D3, 0xF179,
+    0x99D4, 0xF17A,
+    0x99D5, 0xF17B,
+    0x99D6, 0xF17C,
+    0x99D7, 0xF17D,
+    0x99D8, 0xF17E,
+    0x99D9, 0xF180,
+    0x99DA, 0xF181,
+    0x99DB, 0xF182,
+    0x99DC, 0xF183,
+    0x99DD, 0xF184,
+    0x99DE, 0xF185,
+    0x99DF, 0xF186,
+    0x99E0, 0xF187,
+    0x99E1, 0xF188,
+    0x99E2, 0xF189,
+    0x99E3, 0xF18A,
+    0x99E4, 0xF18B,
+    0x99E5, 0xF18C,
+    0x99E6, 0xF18D,
+    0x99E7, 0xF18E,
+    0x99E8, 0xF18F,
+    0x99E9, 0xF190,
+    0x99EA, 0xF191,
+    0x99EB, 0xF192,
+    0x99EC, 0xF193,
+    0x99ED, 0xF194,
+    0x99EE, 0xF195,
+    0x99EF, 0xF196,
+    0x99F0, 0xF197,
+    0x99F1, 0xF198,
+    0x99F2, 0xF199,
+    0x99F3, 0xF19A,
+    0x99F4, 0xF19B,
+    0x99F5, 0xF19C,
+    0x99F6, 0xF19D,
+    0x99F7, 0xF19E,
+    0x99F8, 0xF19F,
+    0x99F9, 0xF1A0,
+    0x99FA, 0xF240,
+    0x99FB, 0xF241,
+    0x99FC, 0xF242,
+    0x99FD, 0xF243,
+    0x99FE, 0xF244,
+    0x99FF, 0xF245,
+    0x9A00, 0xF246,
+    0x9A01, 0xF247,
+    0x9A02, 0xF248,
+    0x9A03, 0xF249,
+    0x9A04, 0xF24A,
+    0x9A05, 0xF24B,
+    0x9A06, 0xF24C,
+    0x9A07, 0xF24D,
+    0x9A08, 0xF24E,
+    0x9A09, 0xF24F,
+    0x9A0A, 0xF250,
+    0x9A0B, 0xF251,
+    0x9A0C, 0xF252,
+    0x9A0D, 0xF253,
+    0x9A0E, 0xF254,
+    0x9A0F, 0xF255,
+    0x9A10, 0xF256,
+    0x9A11, 0xF257,
+    0x9A12, 0xF258,
+    0x9A13, 0xF259,
+    0x9A14, 0xF25A,
+    0x9A15, 0xF25B,
+    0x9A16, 0xF25C,
+    0x9A17, 0xF25D,
+    0x9A18, 0xF25E,
+    0x9A19, 0xF25F,
+    0x9A1A, 0xF260,
+    0x9A1B, 0xF261,
+    0x9A1C, 0xF262,
+    0x9A1D, 0xF263,
+    0x9A1E, 0xF264,
+    0x9A1F, 0xF265,
+    0x9A20, 0xF266,
+    0x9A21, 0xF267,
+    0x9A22, 0xF268,
+    0x9A23, 0xF269,
+    0x9A24, 0xF26A,
+    0x9A25, 0xF26B,
+    0x9A26, 0xF26C,
+    0x9A27, 0xF26D,
+    0x9A28, 0xF26E,
+    0x9A29, 0xF26F,
+    0x9A2A, 0xF270,
+    0x9A2B, 0xF271,
+    0x9A2C, 0xF272,
+    0x9A2D, 0xF273,
+    0x9A2E, 0xF274,
+    0x9A2F, 0xF275,
+    0x9A30, 0xF276,
+    0x9A31, 0xF277,
+    0x9A32, 0xF278,
+    0x9A33, 0xF279,
+    0x9A34, 0xF27A,
+    0x9A35, 0xF27B,
+    0x9A36, 0xF27C,
+    0x9A37, 0xF27D,
+    0x9A38, 0xF27E,
+    0x9A39, 0xF280,
+    0x9A3A, 0xF281,
+    0x9A3B, 0xF282,
+    0x9A3C, 0xF283,
+    0x9A3D, 0xF284,
+    0x9A3E, 0xF285,
+    0x9A3F, 0xF286,
+    0x9A40, 0xF287,
+    0x9A41, 0xF288,
+    0x9A42, 0xF289,
+    0x9A43, 0xF28A,
+    0x9A44, 0xF28B,
+    0x9A45, 0xF28C,
+    0x9A46, 0xF28D,
+    0x9A47, 0xF28E,
+    0x9A48, 0xF28F,
+    0x9A49, 0xF290,
+    0x9A4A, 0xF291,
+    0x9A4B, 0xF292,
+    0x9A4C, 0xF293,
+    0x9A4D, 0xF294,
+    0x9A4E, 0xF295,
+    0x9A4F, 0xF296,
+    0x9A50, 0xF297,
+    0x9A51, 0xF298,
+    0x9A52, 0xF299,
+    0x9A53, 0xF29A,
+    0x9A54, 0xF29B,
+    0x9A55, 0xF29C,
+    0x9A56, 0xF29D,
+    0x9A57, 0xF29E,
+    0x9A58, 0xF29F,
+    0x9A59, 0xF2A0,
+    0x9A5A, 0xF340,
+    0x9A5B, 0xF341,
+    0x9A5C, 0xF342,
+    0x9A5D, 0xF343,
+    0x9A5E, 0xF344,
+    0x9A5F, 0xF345,
+    0x9A60, 0xF346,
+    0x9A61, 0xF347,
+    0x9A62, 0xF348,
+    0x9A63, 0xF349,
+    0x9A64, 0xF34A,
+    0x9A65, 0xF34B,
+    0x9A66, 0xF34C,
+    0x9A67, 0xF34D,
+    0x9A68, 0xF34E,
+    0x9A69, 0xF34F,
+    0x9A6A, 0xF350,
+    0x9A6B, 0xF351,
+    0x9A72, 0xF352,
+    0x9A83, 0xF353,
+    0x9A89, 0xF354,
+    0x9A8D, 0xF355,
+    0x9A8E, 0xF356,
+    0x9A94, 0xF357,
+    0x9A95, 0xF358,
+    0x9A99, 0xF359,
+    0x9AA6, 0xF35A,
+    0x9AA9, 0xF35B,
+    0x9AAA, 0xF35C,
+    0x9AAB, 0xF35D,
+    0x9AAC, 0xF35E,
+    0x9AAD, 0xF35F,
+    0x9AAE, 0xF360,
+    0x9AAF, 0xF361,
+    0x9AB2, 0xF362,
+    0x9AB3, 0xF363,
+    0x9AB4, 0xF364,
+    0x9AB5, 0xF365,
+    0x9AB9, 0xF366,
+    0x9ABB, 0xF367,
+    0x9ABD, 0xF368,
+    0x9ABE, 0xF369,
+    0x9ABF, 0xF36A,
+    0x9AC3, 0xF36B,
+    0x9AC4, 0xF36C,
+    0x9AC6, 0xF36D,
+    0x9AC7, 0xF36E,
+    0x9AC8, 0xF36F,
+    0x9AC9, 0xF370,
+    0x9ACA, 0xF371,
+    0x9ACD, 0xF372,
+    0x9ACE, 0xF373,
+    0x9ACF, 0xF374,
+    0x9AD0, 0xF375,
+    0x9AD2, 0xF376,
+    0x9AD4, 0xF377,
+    0x9AD5, 0xF378,
+    0x9AD6, 0xF379,
+    0x9AD7, 0xF37A,
+    0x9AD9, 0xF37B,
+    0x9ADA, 0xF37C,
+    0x9ADB, 0xF37D,
+    0x9ADC, 0xF37E,
+    0x9ADD, 0xF380,
+    0x9ADE, 0xF381,
+    0x9AE0, 0xF382,
+    0x9AE2, 0xF383,
+    0x9AE3, 0xF384,
+    0x9AE4, 0xF385,
+    0x9AE5, 0xF386,
+    0x9AE7, 0xF387,
+    0x9AE8, 0xF388,
+    0x9AE9, 0xF389,
+    0x9AEA, 0xF38A,
+    0x9AEC, 0xF38B,
+    0x9AEE, 0xF38C,
+    0x9AF0, 0xF38D,
+    0x9AF1, 0xF38E,
+    0x9AF2, 0xF38F,
+    0x9AF3, 0xF390,
+    0x9AF4, 0xF391,
+    0x9AF5, 0xF392,
+    0x9AF6, 0xF393,
+    0x9AF7, 0xF394,
+    0x9AF8, 0xF395,
+    0x9AFA, 0xF396,
+    0x9AFC, 0xF397,
+    0x9AFD, 0xF398,
+    0x9AFE, 0xF399,
+    0x9AFF, 0xF39A,
+    0x9B00, 0xF39B,
+    0x9B01, 0xF39C,
+    0x9B02, 0xF39D,
+    0x9B04, 0xF39E,
+    0x9B05, 0xF39F,
+    0x9B06, 0xF3A0,
+    0x9B07, 0xF440,
+    0x9B09, 0xF441,
+    0x9B0A, 0xF442,
+    0x9B0B, 0xF443,
+    0x9B0C, 0xF444,
+    0x9B0D, 0xF445,
+    0x9B0E, 0xF446,
+    0x9B10, 0xF447,
+    0x9B11, 0xF448,
+    0x9B12, 0xF449,
+    0x9B14, 0xF44A,
+    0x9B15, 0xF44B,
+    0x9B16, 0xF44C,
+    0x9B17, 0xF44D,
+    0x9B18, 0xF44E,
+    0x9B19, 0xF44F,
+    0x9B1A, 0xF450,
+    0x9B1B, 0xF451,
+    0x9B1C, 0xF452,
+    0x9B1D, 0xF453,
+    0x9B1E, 0xF454,
+    0x9B20, 0xF455,
+    0x9B21, 0xF456,
+    0x9B22, 0xF457,
+    0x9B24, 0xF458,
+    0x9B25, 0xF459,
+    0x9B26, 0xF45A,
+    0x9B27, 0xF45B,
+    0x9B28, 0xF45C,
+    0x9B29, 0xF45D,
+    0x9B2A, 0xF45E,
+    0x9B2B, 0xF45F,
+    0x9B2C, 0xF460,
+    0x9B2D, 0xF461,
+    0x9B2E, 0xF462,
+    0x9B30, 0xF463,
+    0x9B31, 0xF464,
+    0x9B33, 0xF465,
+    0x9B34, 0xF466,
+    0x9B35, 0xF467,
+    0x9B36, 0xF468,
+    0x9B37, 0xF469,
+    0x9B38, 0xF46A,
+    0x9B39, 0xF46B,
+    0x9B3A, 0xF46C,
+    0x9B3D, 0xF46D,
+    0x9B3E, 0xF46E,
+    0x9B3F, 0xF46F,
+    0x9B40, 0xF470,
+    0x9B46, 0xF471,
+    0x9B4A, 0xF472,
+    0x9B4B, 0xF473,
+    0x9B4C, 0xF474,
+    0x9B4E, 0xF475,
+    0x9B50, 0xF476,
+    0x9B52, 0xF477,
+    0x9B53, 0xF478,
+    0x9B55, 0xF479,
+    0x9B56, 0xF47A,
+    0x9B57, 0xF47B,
+    0x9B58, 0xF47C,
+    0x9B59, 0xF47D,
+    0x9B5A, 0xF47E,
+    0x9B5B, 0xF480,
+    0x9B5C, 0xF481,
+    0x9B5D, 0xF482,
+    0x9B5E, 0xF483,
+    0x9B5F, 0xF484,
+    0x9B60, 0xF485,
+    0x9B61, 0xF486,
+    0x9B62, 0xF487,
+    0x9B63, 0xF488,
+    0x9B64, 0xF489,
+    0x9B65, 0xF48A,
+    0x9B66, 0xF48B,
+    0x9B67, 0xF48C,
+    0x9B68, 0xF48D,
+    0x9B69, 0xF48E,
+    0x9B6A, 0xF48F,
+    0x9B6B, 0xF490,
+    0x9B6C, 0xF491,
+    0x9B6D, 0xF492,
+    0x9B6E, 0xF493,
+    0x9B6F, 0xF494,
+    0x9B70, 0xF495,
+    0x9B71, 0xF496,
+    0x9B72, 0xF497,
+    0x9B73, 0xF498,
+    0x9B74, 0xF499,
+    0x9B75, 0xF49A,
+    0x9B76, 0xF49B,
+    0x9B77, 0xF49C,
+    0x9B78, 0xF49D,
+    0x9B79, 0xF49E,
+    0x9B7A, 0xF49F,
+    0x9B7B, 0xF4A0,
+    0x9B7C, 0xF540,
+    0x9B7D, 0xF541,
+    0x9B7E, 0xF542,
+    0x9B7F, 0xF543,
+    0x9B80, 0xF544,
+    0x9B81, 0xF545,
+    0x9B82, 0xF546,
+    0x9B83, 0xF547,
+    0x9B84, 0xF548,
+    0x9B85, 0xF549,
+    0x9B86, 0xF54A,
+    0x9B87, 0xF54B,
+    0x9B88, 0xF54C,
+    0x9B89, 0xF54D,
+    0x9B8A, 0xF54E,
+    0x9B8B, 0xF54F,
+    0x9B8C, 0xF550,
+    0x9B8D, 0xF551,
+    0x9B8E, 0xF552,
+    0x9B8F, 0xF553,
+    0x9B90, 0xF554,
+    0x9B91, 0xF555,
+    0x9B92, 0xF556,
+    0x9B93, 0xF557,
+    0x9B94, 0xF558,
+    0x9B95, 0xF559,
+    0x9B96, 0xF55A,
+    0x9B97, 0xF55B,
+    0x9B98, 0xF55C,
+    0x9B99, 0xF55D,
+    0x9B9A, 0xF55E,
+    0x9B9B, 0xF55F,
+    0x9B9C, 0xF560,
+    0x9B9D, 0xF561,
+    0x9B9E, 0xF562,
+    0x9B9F, 0xF563,
+    0x9BA0, 0xF564,
+    0x9BA1, 0xF565,
+    0x9BA2, 0xF566,
+    0x9BA3, 0xF567,
+    0x9BA4, 0xF568,
+    0x9BA5, 0xF569,
+    0x9BA6, 0xF56A,
+    0x9BA7, 0xF56B,
+    0x9BA8, 0xF56C,
+    0x9BA9, 0xF56D,
+    0x9BAA, 0xF56E,
+    0x9BAB, 0xF56F,
+    0x9BAC, 0xF570,
+    0x9BAD, 0xF571,
+    0x9BAE, 0xF572,
+    0x9BAF, 0xF573,
+    0x9BB0, 0xF574,
+    0x9BB1, 0xF575,
+    0x9BB2, 0xF576,
+    0x9BB3, 0xF577,
+    0x9BB4, 0xF578,
+    0x9BB5, 0xF579,
+    0x9BB6, 0xF57A,
+    0x9BB7, 0xF57B,
+    0x9BB8, 0xF57C,
+    0x9BB9, 0xF57D,
+    0x9BBA, 0xF57E,
+    0x9BBB, 0xF580,
+    0x9BBC, 0xF581,
+    0x9BBD, 0xF582,
+    0x9BBE, 0xF583,
+    0x9BBF, 0xF584,
+    0x9BC0, 0xF585,
+    0x9BC1, 0xF586,
+    0x9BC2, 0xF587,
+    0x9BC3, 0xF588,
+    0x9BC4, 0xF589,
+    0x9BC5, 0xF58A,
+    0x9BC6, 0xF58B,
+    0x9BC7, 0xF58C,
+    0x9BC8, 0xF58D,
+    0x9BC9, 0xF58E,
+    0x9BCA, 0xF58F,
+    0x9BCB, 0xF590,
+    0x9BCC, 0xF591,
+    0x9BCD, 0xF592,
+    0x9BCE, 0xF593,
+    0x9BCF, 0xF594,
+    0x9BD0, 0xF595,
+    0x9BD1, 0xF596,
+    0x9BD2, 0xF597,
+    0x9BD3, 0xF598,
+    0x9BD4, 0xF599,
+    0x9BD5, 0xF59A,
+    0x9BD6, 0xF59B,
+    0x9BD7, 0xF59C,
+    0x9BD8, 0xF59D,
+    0x9BD9, 0xF59E,
+    0x9BDA, 0xF59F,
+    0x9BDB, 0xF5A0,
+    0x9BDC, 0xF640,
+    0x9BDD, 0xF641,
+    0x9BDE, 0xF642,
+    0x9BDF, 0xF643,
+    0x9BE0, 0xF644,
+    0x9BE1, 0xF645,
+    0x9BE2, 0xF646,
+    0x9BE3, 0xF647,
+    0x9BE4, 0xF648,
+    0x9BE5, 0xF649,
+    0x9BE6, 0xF64A,
+    0x9BE7, 0xF64B,
+    0x9BE8, 0xF64C,
+    0x9BE9, 0xF64D,
+    0x9BEA, 0xF64E,
+    0x9BEB, 0xF64F,
+    0x9BEC, 0xF650,
+    0x9BED, 0xF651,
+    0x9BEE, 0xF652,
+    0x9BEF, 0xF653,
+    0x9BF0, 0xF654,
+    0x9BF1, 0xF655,
+    0x9BF2, 0xF656,
+    0x9BF3, 0xF657,
+    0x9BF4, 0xF658,
+    0x9BF5, 0xF659,
+    0x9BF6, 0xF65A,
+    0x9BF7, 0xF65B,
+    0x9BF8, 0xF65C,
+    0x9BF9, 0xF65D,
+    0x9BFA, 0xF65E,
+    0x9BFB, 0xF65F,
+    0x9BFC, 0xF660,
+    0x9BFD, 0xF661,
+    0x9BFE, 0xF662,
+    0x9BFF, 0xF663,
+    0x9C00, 0xF664,
+    0x9C01, 0xF665,
+    0x9C02, 0xF666,
+    0x9C03, 0xF667,
+    0x9C04, 0xF668,
+    0x9C05, 0xF669,
+    0x9C06, 0xF66A,
+    0x9C07, 0xF66B,
+    0x9C08, 0xF66C,
+    0x9C09, 0xF66D,
+    0x9C0A, 0xF66E,
+    0x9C0B, 0xF66F,
+    0x9C0C, 0xF670,
+    0x9C0D, 0xF671,
+    0x9C0E, 0xF672,
+    0x9C0F, 0xF673,
+    0x9C10, 0xF674,
+    0x9C11, 0xF675,
+    0x9C12, 0xF676,
+    0x9C13, 0xF677,
+    0x9C14, 0xF678,
+    0x9C15, 0xF679,
+    0x9C16, 0xF67A,
+    0x9C17, 0xF67B,
+    0x9C18, 0xF67C,
+    0x9C19, 0xF67D,
+    0x9C1A, 0xF67E,
+    0x9C1B, 0xF680,
+    0x9C1C, 0xF681,
+    0x9C1D, 0xF682,
+    0x9C1E, 0xF683,
+    0x9C1F, 0xF684,
+    0x9C20, 0xF685,
+    0x9C21, 0xF686,
+    0x9C22, 0xF687,
+    0x9C23, 0xF688,
+    0x9C24, 0xF689,
+    0x9C25, 0xF68A,
+    0x9C26, 0xF68B,
+    0x9C27, 0xF68C,
+    0x9C28, 0xF68D,
+    0x9C29, 0xF68E,
+    0x9C2A, 0xF68F,
+    0x9C2B, 0xF690,
+    0x9C2C, 0xF691,
+    0x9C2D, 0xF692,
+    0x9C2E, 0xF693,
+    0x9C2F, 0xF694,
+    0x9C30, 0xF695,
+    0x9C31, 0xF696,
+    0x9C32, 0xF697,
+    0x9C33, 0xF698,
+    0x9C34, 0xF699,
+    0x9C35, 0xF69A,
+    0x9C36, 0xF69B,
+    0x9C37, 0xF69C,
+    0x9C38, 0xF69D,
+    0x9C39, 0xF69E,
+    0x9C3A, 0xF69F,
+    0x9C3B, 0xF6A0,
+    0x9C3C, 0xF740,
+    0x9C3D, 0xF741,
+    0x9C3E, 0xF742,
+    0x9C3F, 0xF743,
+    0x9C40, 0xF744,
+    0x9C41, 0xF745,
+    0x9C42, 0xF746,
+    0x9C43, 0xF747,
+    0x9C44, 0xF748,
+    0x9C45, 0xF749,
+    0x9C46, 0xF74A,
+    0x9C47, 0xF74B,
+    0x9C48, 0xF74C,
+    0x9C49, 0xF74D,
+    0x9C4A, 0xF74E,
+    0x9C4B, 0xF74F,
+    0x9C4C, 0xF750,
+    0x9C4D, 0xF751,
+    0x9C4E, 0xF752,
+    0x9C4F, 0xF753,
+    0x9C50, 0xF754,
+    0x9C51, 0xF755,
+    0x9C52, 0xF756,
+    0x9C53, 0xF757,
+    0x9C54, 0xF758,
+    0x9C55, 0xF759,
+    0x9C56, 0xF75A,
+    0x9C57, 0xF75B,
+    0x9C58, 0xF75C,
+    0x9C59, 0xF75D,
+    0x9C5A, 0xF75E,
+    0x9C5B, 0xF75F,
+    0x9C5C, 0xF760,
+    0x9C5D, 0xF761,
+    0x9C5E, 0xF762,
+    0x9C5F, 0xF763,
+    0x9C60, 0xF764,
+    0x9C61, 0xF765,
+    0x9C62, 0xF766,
+    0x9C63, 0xF767,
+    0x9C64, 0xF768,
+    0x9C65, 0xF769,
+    0x9C66, 0xF76A,
+    0x9C67, 0xF76B,
+    0x9C68, 0xF76C,
+    0x9C69, 0xF76D,
+    0x9C6A, 0xF76E,
+    0x9C6B, 0xF76F,
+    0x9C6C, 0xF770,
+    0x9C6D, 0xF771,
+    0x9C6E, 0xF772,
+    0x9C6F, 0xF773,
+    0x9C70, 0xF774,
+    0x9C71, 0xF775,
+    0x9C72, 0xF776,
+    0x9C73, 0xF777,
+    0x9C74, 0xF778,
+    0x9C75, 0xF779,
+    0x9C76, 0xF77A,
+    0x9C77, 0xF77B,
+    0x9C78, 0xF77C,
+    0x9C79, 0xF77D,
+    0x9C7A, 0xF77E,
+    0x9C7B, 0xF780,
+    0x9C7D, 0xF781,
+    0x9C7E, 0xF782,
+    0x9C80, 0xF783,
+    0x9C83, 0xF784,
+    0x9C84, 0xF785,
+    0x9C89, 0xF786,
+    0x9C8A, 0xF787,
+    0x9C8C, 0xF788,
+    0x9C8F, 0xF789,
+    0x9C93, 0xF78A,
+    0x9C96, 0xF78B,
+    0x9C97, 0xF78C,
+    0x9C98, 0xF78D,
+    0x9C99, 0xF78E,
+    0x9C9D, 0xF78F,
+    0x9CAA, 0xF790,
+    0x9CAC, 0xF791,
+    0x9CAF, 0xF792,
+    0x9CB9, 0xF793,
+    0x9CBE, 0xF794,
+    0x9CBF, 0xF795,
+    0x9CC0, 0xF796,
+    0x9CC1, 0xF797,
+    0x9CC2, 0xF798,
+    0x9CC8, 0xF799,
+    0x9CC9, 0xF79A,
+    0x9CD1, 0xF79B,
+    0x9CD2, 0xF79C,
+    0x9CDA, 0xF79D,
+    0x9CDB, 0xF79E,
+    0x9CE0, 0xF79F,
+    0x9CE1, 0xF7A0,
+    0x9CE3, 0xF840,
+    0x9CE4, 0xF841,
+    0x9CE5, 0xF842,
+    0x9CE6, 0xF843,
+    0x9CE7, 0xF844,
+    0x9CE8, 0xF845,
+    0x9CE9, 0xF846,
+    0x9CEA, 0xF847,
+    0x9CEB, 0xF848,
+    0x9CEC, 0xF849,
+    0x9CED, 0xF84A,
+    0x9CEE, 0xF84B,
+    0x9CEF, 0xF84C,
+    0x9CF0, 0xF84D,
+    0x9CF1, 0xF84E,
+    0x9CF2, 0xF84F,
+    0x9CF3, 0xF850,
+    0x9CF4, 0xF851,
+    0x9CF5, 0xF852,
+    0x9CF6, 0xF853,
+    0x9CF7, 0xF854,
+    0x9CF8, 0xF855,
+    0x9CF9, 0xF856,
+    0x9CFA, 0xF857,
+    0x9CFB, 0xF858,
+    0x9CFC, 0xF859,
+    0x9CFD, 0xF85A,
+    0x9CFE, 0xF85B,
+    0x9CFF, 0xF85C,
+    0x9D00, 0xF85D,
+    0x9D01, 0xF85E,
+    0x9D02, 0xF85F,
+    0x9D03, 0xF860,
+    0x9D04, 0xF861,
+    0x9D05, 0xF862,
+    0x9D06, 0xF863,
+    0x9D07, 0xF864,
+    0x9D08, 0xF865,
+    0x9D09, 0xF866,
+    0x9D0A, 0xF867,
+    0x9D0B, 0xF868,
+    0x9D0C, 0xF869,
+    0x9D0D, 0xF86A,
+    0x9D0E, 0xF86B,
+    0x9D0F, 0xF86C,
+    0x9D10, 0xF86D,
+    0x9D11, 0xF86E,
+    0x9D12, 0xF86F,
+    0x9D13, 0xF870,
+    0x9D14, 0xF871,
+    0x9D15, 0xF872,
+    0x9D16, 0xF873,
+    0x9D17, 0xF874,
+    0x9D18, 0xF875,
+    0x9D19, 0xF876,
+    0x9D1A, 0xF877,
+    0x9D1B, 0xF878,
+    0x9D1C, 0xF879,
+    0x9D1D, 0xF87A,
+    0x9D1E, 0xF87B,
+    0x9D1F, 0xF87C,
+    0x9D20, 0xF87D,
+    0x9D21, 0xF87E,
+    0x9D22, 0xF880,
+    0x9D23, 0xF881,
+    0x9D24, 0xF882,
+    0x9D25, 0xF883,
+    0x9D26, 0xF884,
+    0x9D27, 0xF885,
+    0x9D28, 0xF886,
+    0x9D29, 0xF887,
+    0x9D2A, 0xF888,
+    0x9D2B, 0xF889,
+    0x9D2C, 0xF88A,
+    0x9D2D, 0xF88B,
+    0x9D2E, 0xF88C,
+    0x9D2F, 0xF88D,
+    0x9D30, 0xF88E,
+    0x9D31, 0xF88F,
+    0x9D32, 0xF890,
+    0x9D33, 0xF891,
+    0x9D34, 0xF892,
+    0x9D35, 0xF893,
+    0x9D36, 0xF894,
+    0x9D37, 0xF895,
+    0x9D38, 0xF896,
+    0x9D39, 0xF897,
+    0x9D3A, 0xF898,
+    0x9D3B, 0xF899,
+    0x9D3C, 0xF89A,
+    0x9D3D, 0xF89B,
+    0x9D3E, 0xF89C,
+    0x9D3F, 0xF89D,
+    0x9D40, 0xF89E,
+    0x9D41, 0xF89F,
+    0x9D42, 0xF8A0,
+    0x9D43, 0xF940,
+    0x9D44, 0xF941,
+    0x9D45, 0xF942,
+    0x9D46, 0xF943,
+    0x9D47, 0xF944,
+    0x9D48, 0xF945,
+    0x9D49, 0xF946,
+    0x9D4A, 0xF947,
+    0x9D4B, 0xF948,
+    0x9D4C, 0xF949,
+    0x9D4D, 0xF94A,
+    0x9D4E, 0xF94B,
+    0x9D4F, 0xF94C,
+    0x9D50, 0xF94D,
+    0x9D51, 0xF94E,
+    0x9D52, 0xF94F,
+    0x9D53, 0xF950,
+    0x9D54, 0xF951,
+    0x9D55, 0xF952,
+    0x9D56, 0xF953,
+    0x9D57, 0xF954,
+    0x9D58, 0xF955,
+    0x9D59, 0xF956,
+    0x9D5A, 0xF957,
+    0x9D5B, 0xF958,
+    0x9D5C, 0xF959,
+    0x9D5D, 0xF95A,
+    0x9D5E, 0xF95B,
+    0x9D5F, 0xF95C,
+    0x9D60, 0xF95D,
+    0x9D61, 0xF95E,
+    0x9D62, 0xF95F,
+    0x9D63, 0xF960,
+    0x9D64, 0xF961,
+    0x9D65, 0xF962,
+    0x9D66, 0xF963,
+    0x9D67, 0xF964,
+    0x9D68, 0xF965,
+    0x9D69, 0xF966,
+    0x9D6A, 0xF967,
+    0x9D6B, 0xF968,
+    0x9D6C, 0xF969,
+    0x9D6D, 0xF96A,
+    0x9D6E, 0xF96B,
+    0x9D6F, 0xF96C,
+    0x9D70, 0xF96D,
+    0x9D71, 0xF96E,
+    0x9D72, 0xF96F,
+    0x9D73, 0xF970,
+    0x9D74, 0xF971,
+    0x9D75, 0xF972,
+    0x9D76, 0xF973,
+    0x9D77, 0xF974,
+    0x9D78, 0xF975,
+    0x9D79, 0xF976,
+    0x9D7A, 0xF977,
+    0x9D7B, 0xF978,
+    0x9D7C, 0xF979,
+    0x9D7D, 0xF97A,
+    0x9D7E, 0xF97B,
+    0x9D7F, 0xF97C,
+    0x9D80, 0xF97D,
+    0x9D81, 0xF97E,
+    0x9D82, 0xF980,
+    0x9D83, 0xF981,
+    0x9D84, 0xF982,
+    0x9D85, 0xF983,
+    0x9D86, 0xF984,
+    0x9D87, 0xF985,
+    0x9D88, 0xF986,
+    0x9D89, 0xF987,
+    0x9D8A, 0xF988,
+    0x9D8B, 0xF989,
+    0x9D8C, 0xF98A,
+    0x9D8D, 0xF98B,
+    0x9D8E, 0xF98C,
+    0x9D8F, 0xF98D,
+    0x9D90, 0xF98E,
+    0x9D91, 0xF98F,
+    0x9D92, 0xF990,
+    0x9D93, 0xF991,
+    0x9D94, 0xF992,
+    0x9D95, 0xF993,
+    0x9D96, 0xF994,
+    0x9D97, 0xF995,
+    0x9D98, 0xF996,
+    0x9D99, 0xF997,
+    0x9D9A, 0xF998,
+    0x9D9B, 0xF999,
+    0x9D9C, 0xF99A,
+    0x9D9D, 0xF99B,
+    0x9D9E, 0xF99C,
+    0x9D9F, 0xF99D,
+    0x9DA0, 0xF99E,
+    0x9DA1, 0xF99F,
+    0x9DA2, 0xF9A0,
+    0x9DA3, 0xFA40,
+    0x9DA4, 0xFA41,
+    0x9DA5, 0xFA42,
+    0x9DA6, 0xFA43,
+    0x9DA7, 0xFA44,
+    0x9DA8, 0xFA45,
+    0x9DA9, 0xFA46,
+    0x9DAA, 0xFA47,
+    0x9DAB, 0xFA48,
+    0x9DAC, 0xFA49,
+    0x9DAD, 0xFA4A,
+    0x9DAE, 0xFA4B,
+    0x9DAF, 0xFA4C,
+    0x9DB0, 0xFA4D,
+    0x9DB1, 0xFA4E,
+    0x9DB2, 0xFA4F,
+    0x9DB3, 0xFA50,
+    0x9DB4, 0xFA51,
+    0x9DB5, 0xFA52,
+    0x9DB6, 0xFA53,
+    0x9DB7, 0xFA54,
+    0x9DB8, 0xFA55,
+    0x9DB9, 0xFA56,
+    0x9DBA, 0xFA57,
+    0x9DBB, 0xFA58,
+    0x9DBC, 0xFA59,
+    0x9DBD, 0xFA5A,
+    0x9DBE, 0xFA5B,
+    0x9DBF, 0xFA5C,
+    0x9DC0, 0xFA5D,
+    0x9DC1, 0xFA5E,
+    0x9DC2, 0xFA5F,
+    0x9DC3, 0xFA60,
+    0x9DC4, 0xFA61,
+    0x9DC5, 0xFA62,
+    0x9DC6, 0xFA63,
+    0x9DC7, 0xFA64,
+    0x9DC8, 0xFA65,
+    0x9DC9, 0xFA66,
+    0x9DCA, 0xFA67,
+    0x9DCB, 0xFA68,
+    0x9DCC, 0xFA69,
+    0x9DCD, 0xFA6A,
+    0x9DCE, 0xFA6B,
+    0x9DCF, 0xFA6C,
+    0x9DD0, 0xFA6D,
+    0x9DD1, 0xFA6E,
+    0x9DD2, 0xFA6F,
+    0x9DD3, 0xFA70,
+    0x9DD4, 0xFA71,
+    0x9DD5, 0xFA72,
+    0x9DD6, 0xFA73,
+    0x9DD7, 0xFA74,
+    0x9DD8, 0xFA75,
+    0x9DD9, 0xFA76,
+    0x9DDA, 0xFA77,
+    0x9DDB, 0xFA78,
+    0x9DDC, 0xFA79,
+    0x9DDD, 0xFA7A,
+    0x9DDE, 0xFA7B,
+    0x9DDF, 0xFA7C,
+    0x9DE0, 0xFA7D,
+    0x9DE1, 0xFA7E,
+    0x9DE2, 0xFA80,
+    0x9DE3, 0xFA81,
+    0x9DE4, 0xFA82,
+    0x9DE5, 0xFA83,
+    0x9DE6, 0xFA84,
+    0x9DE7, 0xFA85,
+    0x9DE8, 0xFA86,
+    0x9DE9, 0xFA87,
+    0x9DEA, 0xFA88,
+    0x9DEB, 0xFA89,
+    0x9DEC, 0xFA8A,
+    0x9DED, 0xFA8B,
+    0x9DEE, 0xFA8C,
+    0x9DEF, 0xFA8D,
+    0x9DF0, 0xFA8E,
+    0x9DF1, 0xFA8F,
+    0x9DF2, 0xFA90,
+    0x9DF3, 0xFA91,
+    0x9DF4, 0xFA92,
+    0x9DF5, 0xFA93,
+    0x9DF6, 0xFA94,
+    0x9DF7, 0xFA95,
+    0x9DF8, 0xFA96,
+    0x9DF9, 0xFA97,
+    0x9DFA, 0xFA98,
+    0x9DFB, 0xFA99,
+    0x9DFC, 0xFA9A,
+    0x9DFD, 0xFA9B,
+    0x9DFE, 0xFA9C,
+    0x9DFF, 0xFA9D,
+    0x9E00, 0xFA9E,
+    0x9E01, 0xFA9F,
+    0x9E02, 0xFAA0,
+    0x9E03, 0xFB40,
+    0x9E04, 0xFB41,
+    0x9E05, 0xFB42,
+    0x9E06, 0xFB43,
+    0x9E07, 0xFB44,
+    0x9E08, 0xFB45,
+    0x9E09, 0xFB46,
+    0x9E0A, 0xFB47,
+    0x9E0B, 0xFB48,
+    0x9E0C, 0xFB49,
+    0x9E0D, 0xFB4A,
+    0x9E0E, 0xFB4B,
+    0x9E0F, 0xFB4C,
+    0x9E10, 0xFB4D,
+    0x9E11, 0xFB4E,
+    0x9E12, 0xFB4F,
+    0x9E13, 0xFB50,
+    0x9E14, 0xFB51,
+    0x9E15, 0xFB52,
+    0x9E16, 0xFB53,
+    0x9E17, 0xFB54,
+    0x9E18, 0xFB55,
+    0x9E19, 0xFB56,
+    0x9E1A, 0xFB57,
+    0x9E1B, 0xFB58,
+    0x9E1C, 0xFB59,
+    0x9E1D, 0xFB5A,
+    0x9E1E, 0xFB5B,
+    0x9E24, 0xFB5C,
+    0x9E27, 0xFB5D,
+    0x9E2E, 0xFB5E,
+    0x9E30, 0xFB5F,
+    0x9E34, 0xFB60,
+    0x9E3B, 0xFB61,
+    0x9E3C, 0xFB62,
+    0x9E40, 0xFB63,
+    0x9E4D, 0xFB64,
+    0x9E50, 0xFB65,
+    0x9E52, 0xFB66,
+    0x9E53, 0xFB67,
+    0x9E54, 0xFB68,
+    0x9E56, 0xFB69,
+    0x9E59, 0xFB6A,
+    0x9E5D, 0xFB6B,
+    0x9E5F, 0xFB6C,
+    0x9E60, 0xFB6D,
+    0x9E61, 0xFB6E,
+    0x9E62, 0xFB6F,
+    0x9E65, 0xFB70,
+    0x9E6E, 0xFB71,
+    0x9E6F, 0xFB72,
+    0x9E72, 0xFB73,
+    0x9E74, 0xFB74,
+    0x9E75, 0xFB75,
+    0x9E76, 0xFB76,
+    0x9E77, 0xFB77,
+    0x9E78, 0xFB78,
+    0x9E79, 0xFB79,
+    0x9E7A, 0xFB7A,
+    0x9E7B, 0xFB7B,
+    0x9E7C, 0xFB7C,
+    0x9E7D, 0xFB7D,
+    0x9E80, 0xFB7E,
+    0x9E81, 0xFB80,
+    0x9E83, 0xFB81,
+    0x9E84, 0xFB82,
+    0x9E85, 0xFB83,
+    0x9E86, 0xFB84,
+    0x9E89, 0xFB85,
+    0x9E8A, 0xFB86,
+    0x9E8C, 0xFB87,
+    0x9E8D, 0xFB88,
+    0x9E8E, 0xFB89,
+    0x9E8F, 0xFB8A,
+    0x9E90, 0xFB8B,
+    0x9E91, 0xFB8C,
+    0x9E94, 0xFB8D,
+    0x9E95, 0xFB8E,
+    0x9E96, 0xFB8F,
+    0x9E97, 0xFB90,
+    0x9E98, 0xFB91,
+    0x9E99, 0xFB92,
+    0x9E9A, 0xFB93,
+    0x9E9B, 0xFB94,
+    0x9E9C, 0xFB95,
+    0x9E9E, 0xFB96,
+    0x9EA0, 0xFB97,
+    0x9EA1, 0xFB98,
+    0x9EA2, 0xFB99,
+    0x9EA3, 0xFB9A,
+    0x9EA4, 0xFB9B,
+    0x9EA5, 0xFB9C,
+    0x9EA7, 0xFB9D,
+    0x9EA8, 0xFB9E,
+    0x9EA9, 0xFB9F,
+    0x9EAA, 0xFBA0,
+    0x9EAB, 0xFC40,
+    0x9EAC, 0xFC41,
+    0x9EAD, 0xFC42,
+    0x9EAE, 0xFC43,
+    0x9EAF, 0xFC44,
+    0x9EB0, 0xFC45,
+    0x9EB1, 0xFC46,
+    0x9EB2, 0xFC47,
+    0x9EB3, 0xFC48,
+    0x9EB5, 0xFC49,
+    0x9EB6, 0xFC4A,
+    0x9EB7, 0xFC4B,
+    0x9EB9, 0xFC4C,
+    0x9EBA, 0xFC4D,
+    0x9EBC, 0xFC4E,
+    0x9EBF, 0xFC4F,
+    0x9EC0, 0xFC50,
+    0x9EC1, 0xFC51,
+    0x9EC2, 0xFC52,
+    0x9EC3, 0xFC53,
+    0x9EC5, 0xFC54,
+    0x9EC6, 0xFC55,
+    0x9EC7, 0xFC56,
+    0x9EC8, 0xFC57,
+    0x9ECA, 0xFC58,
+    0x9ECB, 0xFC59,
+    0x9ECC, 0xFC5A,
+    0x9ED0, 0xFC5B,
+    0x9ED2, 0xFC5C,
+    0x9ED3, 0xFC5D,
+    0x9ED5, 0xFC5E,
+    0x9ED6, 0xFC5F,
+    0x9ED7, 0xFC60,
+    0x9ED9, 0xFC61,
+    0x9EDA, 0xFC62,
+    0x9EDE, 0xFC63,
+    0x9EE1, 0xFC64,
+    0x9EE3, 0xFC65,
+    0x9EE4, 0xFC66,
+    0x9EE6, 0xFC67,
+    0x9EE8, 0xFC68,
+    0x9EEB, 0xFC69,
+    0x9EEC, 0xFC6A,
+    0x9EED, 0xFC6B,
+    0x9EEE, 0xFC6C,
+    0x9EF0, 0xFC6D,
+    0x9EF1, 0xFC6E,
+    0x9EF2, 0xFC6F,
+    0x9EF3, 0xFC70,
+    0x9EF4, 0xFC71,
+    0x9EF5, 0xFC72,
+    0x9EF6, 0xFC73,
+    0x9EF7, 0xFC74,
+    0x9EF8, 0xFC75,
+    0x9EFA, 0xFC76,
+    0x9EFD, 0xFC77,
+    0x9EFF, 0xFC78,
+    0x9F00, 0xFC79,
+    0x9F01, 0xFC7A,
+    0x9F02, 0xFC7B,
+    0x9F03, 0xFC7C,
+    0x9F04, 0xFC7D,
+    0x9F05, 0xFC7E,
+    0x9F06, 0xFC80,
+    0x9F07, 0xFC81,
+    0x9F08, 0xFC82,
+    0x9F09, 0xFC83,
+    0x9F0A, 0xFC84,
+    0x9F0C, 0xFC85,
+    0x9F0F, 0xFC86,
+    0x9F11, 0xFC87,
+    0x9F12, 0xFC88,
+    0x9F14, 0xFC89,
+    0x9F15, 0xFC8A,
+    0x9F16, 0xFC8B,
+    0x9F18, 0xFC8C,
+    0x9F1A, 0xFC8D,
+    0x9F1B, 0xFC8E,
+    0x9F1C, 0xFC8F,
+    0x9F1D, 0xFC90,
+    0x9F1E, 0xFC91,
+    0x9F1F, 0xFC92,
+    0x9F21, 0xFC93,
+    0x9F23, 0xFC94,
+    0x9F24, 0xFC95,
+    0x9F25, 0xFC96,
+    0x9F26, 0xFC97,
+    0x9F27, 0xFC98,
+    0x9F28, 0xFC99,
+    0x9F29, 0xFC9A,
+    0x9F2A, 0xFC9B,
+    0x9F2B, 0xFC9C,
+    0x9F2D, 0xFC9D,
+    0x9F2E, 0xFC9E,
+    0x9F30, 0xFC9F,
+    0x9F31, 0xFCA0,
+    0x9F32, 0xFD40,
+    0x9F33, 0xFD41,
+    0x9F34, 0xFD42,
+    0x9F35, 0xFD43,
+    0x9F36, 0xFD44,
+    0x9F38, 0xFD45,
+    0x9F3A, 0xFD46,
+    0x9F3C, 0xFD47,
+    0x9F3F, 0xFD48,
+    0x9F40, 0xFD49,
+    0x9F41, 0xFD4A,
+    0x9F42, 0xFD4B,
+    0x9F43, 0xFD4C,
+    0x9F45, 0xFD4D,
+    0x9F46, 0xFD4E,
+    0x9F47, 0xFD4F,
+    0x9F48, 0xFD50,
+    0x9F49, 0xFD51,
+    0x9F4A, 0xFD52,
+    0x9F4B, 0xFD53,
+    0x9F4C, 0xFD54,
+    0x9F4D, 0xFD55,
+    0x9F4E, 0xFD56,
+    0x9F4F, 0xFD57,
+    0x9F52, 0xFD58,
+    0x9F53, 0xFD59,
+    0x9F54, 0xFD5A,
+    0x9F55, 0xFD5B,
+    0x9F56, 0xFD5C,
+    0x9F57, 0xFD5D,
+    0x9F58, 0xFD5E,
+    0x9F59, 0xFD5F,
+    0x9F5A, 0xFD60,
+    0x9F5B, 0xFD61,
+    0x9F5C, 0xFD62,
+    0x9F5D, 0xFD63,
+    0x9F5E, 0xFD64,
+    0x9F5F, 0xFD65,
+    0x9F60, 0xFD66,
+    0x9F61, 0xFD67,
+    0x9F62, 0xFD68,
+    0x9F63, 0xFD69,
+    0x9F64, 0xFD6A,
+    0x9F65, 0xFD6B,
+    0x9F66, 0xFD6C,
+    0x9F67, 0xFD6D,
+    0x9F68, 0xFD6E,
+    0x9F69, 0xFD6F,
+    0x9F6A, 0xFD70,
+    0x9F6B, 0xFD71,
+    0x9F6C, 0xFD72,
+    0x9F6D, 0xFD73,
+    0x9F6E, 0xFD74,
+    0x9F6F, 0xFD75,
+    0x9F70, 0xFD76,
+    0x9F71, 0xFD77,
+    0x9F72, 0xFD78,
+    0x9F73, 0xFD79,
+    0x9F74, 0xFD7A,
+    0x9F75, 0xFD7B,
+    0x9F76, 0xFD7C,
+    0x9F77, 0xFD7D,
+    0x9F78, 0xFD7E,
+    0x9F79, 0xFD80,
+    0x9F7A, 0xFD81,
+    0x9F7B, 0xFD82,
+    0x9F7C, 0xFD83,
+    0x9F7D, 0xFD84,
+    0x9F7E, 0xFD85,
+    0x9F81, 0xFD86,
+    0x9F82, 0xFD87,
+    0x9F8D, 0xFD88,
+    0x9F8E, 0xFD89,
+    0x9F8F, 0xFD8A,
+    0x9F90, 0xFD8B,
+    0x9F91, 0xFD8C,
+    0x9F92, 0xFD8D,
+    0x9F93, 0xFD8E,
+    0x9F94, 0xFD8F,
+    0x9F95, 0xFD90,
+    0x9F96, 0xFD91,
+    0x9F97, 0xFD92,
+    0x9F98, 0xFD93,
+    0x9F9C, 0xFD94,
+    0x9F9D, 0xFD95,
+    0x9F9E, 0xFD96,
+    0x9FA1, 0xFD97,
+    0x9FA2, 0xFD98,
+    0x9FA3, 0xFD99,
+    0x9FA4, 0xFD9A,
+    0x9FA5, 0xFD9B,
+    0xE000, 0xAAA1,
+    0xE001, 0xAAA2,
+    0xE002, 0xAAA3,
+    0xE003, 0xAAA4,
+    0xE004, 0xAAA5,
+    0xE005, 0xAAA6,
+    0xE006, 0xAAA7,
+    0xE007, 0xAAA8,
+    0xE008, 0xAAA9,
+    0xE009, 0xAAAA,
+    0xE00A, 0xAAAB,
+    0xE00B, 0xAAAC,
+    0xE00C, 0xAAAD,
+    0xE00D, 0xAAAE,
+    0xE00E, 0xAAAF,
+    0xE00F, 0xAAB0,
+    0xE010, 0xAAB1,
+    0xE011, 0xAAB2,
+    0xE012, 0xAAB3,
+    0xE013, 0xAAB4,
+    0xE014, 0xAAB5,
+    0xE015, 0xAAB6,
+    0xE016, 0xAAB7,
+    0xE017, 0xAAB8,
+    0xE018, 0xAAB9,
+    0xE019, 0xAABA,
+    0xE01A, 0xAABB,
+    0xE01B, 0xAABC,
+    0xE01C, 0xAABD,
+    0xE01D, 0xAABE,
+    0xE01E, 0xAABF,
+    0xE01F, 0xAAC0,
+    0xE020, 0xAAC1,
+    0xE021, 0xAAC2,
+    0xE022, 0xAAC3,
+    0xE023, 0xAAC4,
+    0xE024, 0xAAC5,
+    0xE025, 0xAAC6,
+    0xE026, 0xAAC7,
+    0xE027, 0xAAC8,
+    0xE028, 0xAAC9,
+    0xE029, 0xAACA,
+    0xE02A, 0xAACB,
+    0xE02B, 0xAACC,
+    0xE02C, 0xAACD,
+    0xE02D, 0xAACE,
+    0xE02E, 0xAACF,
+    0xE02F, 0xAAD0,
+    0xE030, 0xAAD1,
+    0xE031, 0xAAD2,
+    0xE032, 0xAAD3,
+    0xE033, 0xAAD4,
+    0xE034, 0xAAD5,
+    0xE035, 0xAAD6,
+    0xE036, 0xAAD7,
+    0xE037, 0xAAD8,
+    0xE038, 0xAAD9,
+    0xE039, 0xAADA,
+    0xE03A, 0xAADB,
+    0xE03B, 0xAADC,
+    0xE03C, 0xAADD,
+    0xE03D, 0xAADE,
+    0xE03E, 0xAADF,
+    0xE03F, 0xAAE0,
+    0xE040, 0xAAE1,
+    0xE041, 0xAAE2,
+    0xE042, 0xAAE3,
+    0xE043, 0xAAE4,
+    0xE044, 0xAAE5,
+    0xE045, 0xAAE6,
+    0xE046, 0xAAE7,
+    0xE047, 0xAAE8,
+    0xE048, 0xAAE9,
+    0xE049, 0xAAEA,
+    0xE04A, 0xAAEB,
+    0xE04B, 0xAAEC,
+    0xE04C, 0xAAED,
+    0xE04D, 0xAAEE,
+    0xE04E, 0xAAEF,
+    0xE04F, 0xAAF0,
+    0xE050, 0xAAF1,
+    0xE051, 0xAAF2,
+    0xE052, 0xAAF3,
+    0xE053, 0xAAF4,
+    0xE054, 0xAAF5,
+    0xE055, 0xAAF6,
+    0xE056, 0xAAF7,
+    0xE057, 0xAAF8,
+    0xE058, 0xAAF9,
+    0xE059, 0xAAFA,
+    0xE05A, 0xAAFB,
+    0xE05B, 0xAAFC,
+    0xE05C, 0xAAFD,
+    0xE05D, 0xAAFE,
+    0xE05E, 0xABA1,
+    0xE05F, 0xABA2,
+    0xE060, 0xABA3,
+    0xE061, 0xABA4,
+    0xE062, 0xABA5,
+    0xE063, 0xABA6,
+    0xE064, 0xABA7,
+    0xE065, 0xABA8,
+    0xE066, 0xABA9,
+    0xE067, 0xABAA,
+    0xE068, 0xABAB,
+    0xE069, 0xABAC,
+    0xE06A, 0xABAD,
+    0xE06B, 0xABAE,
+    0xE06C, 0xABAF,
+    0xE06D, 0xABB0,
+    0xE06E, 0xABB1,
+    0xE06F, 0xABB2,
+    0xE070, 0xABB3,
+    0xE071, 0xABB4,
+    0xE072, 0xABB5,
+    0xE073, 0xABB6,
+    0xE074, 0xABB7,
+    0xE075, 0xABB8,
+    0xE076, 0xABB9,
+    0xE077, 0xABBA,
+    0xE078, 0xABBB,
+    0xE079, 0xABBC,
+    0xE07A, 0xABBD,
+    0xE07B, 0xABBE,
+    0xE07C, 0xABBF,
+    0xE07D, 0xABC0,
+    0xE07E, 0xABC1,
+    0xE07F, 0xABC2,
+    0xE080, 0xABC3,
+    0xE081, 0xABC4,
+    0xE082, 0xABC5,
+    0xE083, 0xABC6,
+    0xE084, 0xABC7,
+    0xE085, 0xABC8,
+    0xE086, 0xABC9,
+    0xE087, 0xABCA,
+    0xE088, 0xABCB,
+    0xE089, 0xABCC,
+    0xE08A, 0xABCD,
+    0xE08B, 0xABCE,
+    0xE08C, 0xABCF,
+    0xE08D, 0xABD0,
+    0xE08E, 0xABD1,
+    0xE08F, 0xABD2,
+    0xE090, 0xABD3,
+    0xE091, 0xABD4,
+    0xE092, 0xABD5,
+    0xE093, 0xABD6,
+    0xE094, 0xABD7,
+    0xE095, 0xABD8,
+    0xE096, 0xABD9,
+    0xE097, 0xABDA,
+    0xE098, 0xABDB,
+    0xE099, 0xABDC,
+    0xE09A, 0xABDD,
+    0xE09B, 0xABDE,
+    0xE09C, 0xABDF,
+    0xE09D, 0xABE0,
+    0xE09E, 0xABE1,
+    0xE09F, 0xABE2,
+    0xE0A0, 0xABE3,
+    0xE0A1, 0xABE4,
+    0xE0A2, 0xABE5,
+    0xE0A3, 0xABE6,
+    0xE0A4, 0xABE7,
+    0xE0A5, 0xABE8,
+    0xE0A6, 0xABE9,
+    0xE0A7, 0xABEA,
+    0xE0A8, 0xABEB,
+    0xE0A9, 0xABEC,
+    0xE0AA, 0xABED,
+    0xE0AB, 0xABEE,
+    0xE0AC, 0xABEF,
+    0xE0AD, 0xABF0,
+    0xE0AE, 0xABF1,
+    0xE0AF, 0xABF2,
+    0xE0B0, 0xABF3,
+    0xE0B1, 0xABF4,
+    0xE0B2, 0xABF5,
+    0xE0B3, 0xABF6,
+    0xE0B4, 0xABF7,
+    0xE0B5, 0xABF8,
+    0xE0B6, 0xABF9,
+    0xE0B7, 0xABFA,
+    0xE0B8, 0xABFB,
+    0xE0B9, 0xABFC,
+    0xE0BA, 0xABFD,
+    0xE0BB, 0xABFE,
+    0xE0BC, 0xACA1,
+    0xE0BD, 0xACA2,
+    0xE0BE, 0xACA3,
+    0xE0BF, 0xACA4,
+    0xE0C0, 0xACA5,
+    0xE0C1, 0xACA6,
+    0xE0C2, 0xACA7,
+    0xE0C3, 0xACA8,
+    0xE0C4, 0xACA9,
+    0xE0C5, 0xACAA,
+    0xE0C6, 0xACAB,
+    0xE0C7, 0xACAC,
+    0xE0C8, 0xACAD,
+    0xE0C9, 0xACAE,
+    0xE0CA, 0xACAF,
+    0xE0CB, 0xACB0,
+    0xE0CC, 0xACB1,
+    0xE0CD, 0xACB2,
+    0xE0CE, 0xACB3,
+    0xE0CF, 0xACB4,
+    0xE0D0, 0xACB5,
+    0xE0D1, 0xACB6,
+    0xE0D2, 0xACB7,
+    0xE0D3, 0xACB8,
+    0xE0D4, 0xACB9,
+    0xE0D5, 0xACBA,
+    0xE0D6, 0xACBB,
+    0xE0D7, 0xACBC,
+    0xE0D8, 0xACBD,
+    0xE0D9, 0xACBE,
+    0xE0DA, 0xACBF,
+    0xE0DB, 0xACC0,
+    0xE0DC, 0xACC1,
+    0xE0DD, 0xACC2,
+    0xE0DE, 0xACC3,
+    0xE0DF, 0xACC4,
+    0xE0E0, 0xACC5,
+    0xE0E1, 0xACC6,
+    0xE0E2, 0xACC7,
+    0xE0E3, 0xACC8,
+    0xE0E4, 0xACC9,
+    0xE0E5, 0xACCA,
+    0xE0E6, 0xACCB,
+    0xE0E7, 0xACCC,
+    0xE0E8, 0xACCD,
+    0xE0E9, 0xACCE,
+    0xE0EA, 0xACCF,
+    0xE0EB, 0xACD0,
+    0xE0EC, 0xACD1,
+    0xE0ED, 0xACD2,
+    0xE0EE, 0xACD3,
+    0xE0EF, 0xACD4,
+    0xE0F0, 0xACD5,
+    0xE0F1, 0xACD6,
+    0xE0F2, 0xACD7,
+    0xE0F3, 0xACD8,
+    0xE0F4, 0xACD9,
+    0xE0F5, 0xACDA,
+    0xE0F6, 0xACDB,
+    0xE0F7, 0xACDC,
+    0xE0F8, 0xACDD,
+    0xE0F9, 0xACDE,
+    0xE0FA, 0xACDF,
+    0xE0FB, 0xACE0,
+    0xE0FC, 0xACE1,
+    0xE0FD, 0xACE2,
+    0xE0FE, 0xACE3,
+    0xE0FF, 0xACE4,
+    0xE100, 0xACE5,
+    0xE101, 0xACE6,
+    0xE102, 0xACE7,
+    0xE103, 0xACE8,
+    0xE104, 0xACE9,
+    0xE105, 0xACEA,
+    0xE106, 0xACEB,
+    0xE107, 0xACEC,
+    0xE108, 0xACED,
+    0xE109, 0xACEE,
+    0xE10A, 0xACEF,
+    0xE10B, 0xACF0,
+    0xE10C, 0xACF1,
+    0xE10D, 0xACF2,
+    0xE10E, 0xACF3,
+    0xE10F, 0xACF4,
+    0xE110, 0xACF5,
+    0xE111, 0xACF6,
+    0xE112, 0xACF7,
+    0xE113, 0xACF8,
+    0xE114, 0xACF9,
+    0xE115, 0xACFA,
+    0xE116, 0xACFB,
+    0xE117, 0xACFC,
+    0xE118, 0xACFD,
+    0xE119, 0xACFE,
+    0xE11A, 0xADA1,
+    0xE11B, 0xADA2,
+    0xE11C, 0xADA3,
+    0xE11D, 0xADA4,
+    0xE11E, 0xADA5,
+    0xE11F, 0xADA6,
+    0xE120, 0xADA7,
+    0xE121, 0xADA8,
+    0xE122, 0xADA9,
+    0xE123, 0xADAA,
+    0xE124, 0xADAB,
+    0xE125, 0xADAC,
+    0xE126, 0xADAD,
+    0xE127, 0xADAE,
+    0xE128, 0xADAF,
+    0xE129, 0xADB0,
+    0xE12A, 0xADB1,
+    0xE12B, 0xADB2,
+    0xE12C, 0xADB3,
+    0xE12D, 0xADB4,
+    0xE12E, 0xADB5,
+    0xE12F, 0xADB6,
+    0xE130, 0xADB7,
+    0xE131, 0xADB8,
+    0xE132, 0xADB9,
+    0xE133, 0xADBA,
+    0xE134, 0xADBB,
+    0xE135, 0xADBC,
+    0xE136, 0xADBD,
+    0xE137, 0xADBE,
+    0xE138, 0xADBF,
+    0xE139, 0xADC0,
+    0xE13A, 0xADC1,
+    0xE13B, 0xADC2,
+    0xE13C, 0xADC3,
+    0xE13D, 0xADC4,
+    0xE13E, 0xADC5,
+    0xE13F, 0xADC6,
+    0xE140, 0xADC7,
+    0xE141, 0xADC8,
+    0xE142, 0xADC9,
+    0xE143, 0xADCA,
+    0xE144, 0xADCB,
+    0xE145, 0xADCC,
+    0xE146, 0xADCD,
+    0xE147, 0xADCE,
+    0xE148, 0xADCF,
+    0xE149, 0xADD0,
+    0xE14A, 0xADD1,
+    0xE14B, 0xADD2,
+    0xE14C, 0xADD3,
+    0xE14D, 0xADD4,
+    0xE14E, 0xADD5,
+    0xE14F, 0xADD6,
+    0xE150, 0xADD7,
+    0xE151, 0xADD8,
+    0xE152, 0xADD9,
+    0xE153, 0xADDA,
+    0xE154, 0xADDB,
+    0xE155, 0xADDC,
+    0xE156, 0xADDD,
+    0xE157, 0xADDE,
+    0xE158, 0xADDF,
+    0xE159, 0xADE0,
+    0xE15A, 0xADE1,
+    0xE15B, 0xADE2,
+    0xE15C, 0xADE3,
+    0xE15D, 0xADE4,
+    0xE15E, 0xADE5,
+    0xE15F, 0xADE6,
+    0xE160, 0xADE7,
+    0xE161, 0xADE8,
+    0xE162, 0xADE9,
+    0xE163, 0xADEA,
+    0xE164, 0xADEB,
+    0xE165, 0xADEC,
+    0xE166, 0xADED,
+    0xE167, 0xADEE,
+    0xE168, 0xADEF,
+    0xE169, 0xADF0,
+    0xE16A, 0xADF1,
+    0xE16B, 0xADF2,
+    0xE16C, 0xADF3,
+    0xE16D, 0xADF4,
+    0xE16E, 0xADF5,
+    0xE16F, 0xADF6,
+    0xE170, 0xADF7,
+    0xE171, 0xADF8,
+    0xE172, 0xADF9,
+    0xE173, 0xADFA,
+    0xE174, 0xADFB,
+    0xE175, 0xADFC,
+    0xE176, 0xADFD,
+    0xE177, 0xADFE,
+    0xE178, 0xAEA1,
+    0xE179, 0xAEA2,
+    0xE17A, 0xAEA3,
+    0xE17B, 0xAEA4,
+    0xE17C, 0xAEA5,
+    0xE17D, 0xAEA6,
+    0xE17E, 0xAEA7,
+    0xE17F, 0xAEA8,
+    0xE180, 0xAEA9,
+    0xE181, 0xAEAA,
+    0xE182, 0xAEAB,
+    0xE183, 0xAEAC,
+    0xE184, 0xAEAD,
+    0xE185, 0xAEAE,
+    0xE186, 0xAEAF,
+    0xE187, 0xAEB0,
+    0xE188, 0xAEB1,
+    0xE189, 0xAEB2,
+    0xE18A, 0xAEB3,
+    0xE18B, 0xAEB4,
+    0xE18C, 0xAEB5,
+    0xE18D, 0xAEB6,
+    0xE18E, 0xAEB7,
+    0xE18F, 0xAEB8,
+    0xE190, 0xAEB9,
+    0xE191, 0xAEBA,
+    0xE192, 0xAEBB,
+    0xE193, 0xAEBC,
+    0xE194, 0xAEBD,
+    0xE195, 0xAEBE,
+    0xE196, 0xAEBF,
+    0xE197, 0xAEC0,
+    0xE198, 0xAEC1,
+    0xE199, 0xAEC2,
+    0xE19A, 0xAEC3,
+    0xE19B, 0xAEC4,
+    0xE19C, 0xAEC5,
+    0xE19D, 0xAEC6,
+    0xE19E, 0xAEC7,
+    0xE19F, 0xAEC8,
+    0xE1A0, 0xAEC9,
+    0xE1A1, 0xAECA,
+    0xE1A2, 0xAECB,
+    0xE1A3, 0xAECC,
+    0xE1A4, 0xAECD,
+    0xE1A5, 0xAECE,
+    0xE1A6, 0xAECF,
+    0xE1A7, 0xAED0,
+    0xE1A8, 0xAED1,
+    0xE1A9, 0xAED2,
+    0xE1AA, 0xAED3,
+    0xE1AB, 0xAED4,
+    0xE1AC, 0xAED5,
+    0xE1AD, 0xAED6,
+    0xE1AE, 0xAED7,
+    0xE1AF, 0xAED8,
+    0xE1B0, 0xAED9,
+    0xE1B1, 0xAEDA,
+    0xE1B2, 0xAEDB,
+    0xE1B3, 0xAEDC,
+    0xE1B4, 0xAEDD,
+    0xE1B5, 0xAEDE,
+    0xE1B6, 0xAEDF,
+    0xE1B7, 0xAEE0,
+    0xE1B8, 0xAEE1,
+    0xE1B9, 0xAEE2,
+    0xE1BA, 0xAEE3,
+    0xE1BB, 0xAEE4,
+    0xE1BC, 0xAEE5,
+    0xE1BD, 0xAEE6,
+    0xE1BE, 0xAEE7,
+    0xE1BF, 0xAEE8,
+    0xE1C0, 0xAEE9,
+    0xE1C1, 0xAEEA,
+    0xE1C2, 0xAEEB,
+    0xE1C3, 0xAEEC,
+    0xE1C4, 0xAEED,
+    0xE1C5, 0xAEEE,
+    0xE1C6, 0xAEEF,
+    0xE1C7, 0xAEF0,
+    0xE1C8, 0xAEF1,
+    0xE1C9, 0xAEF2,
+    0xE1CA, 0xAEF3,
+    0xE1CB, 0xAEF4,
+    0xE1CC, 0xAEF5,
+    0xE1CD, 0xAEF6,
+    0xE1CE, 0xAEF7,
+    0xE1CF, 0xAEF8,
+    0xE1D0, 0xAEF9,
+    0xE1D1, 0xAEFA,
+    0xE1D2, 0xAEFB,
+    0xE1D3, 0xAEFC,
+    0xE1D4, 0xAEFD,
+    0xE1D5, 0xAEFE,
+    0xE1D6, 0xAFA1,
+    0xE1D7, 0xAFA2,
+    0xE1D8, 0xAFA3,
+    0xE1D9, 0xAFA4,
+    0xE1DA, 0xAFA5,
+    0xE1DB, 0xAFA6,
+    0xE1DC, 0xAFA7,
+    0xE1DD, 0xAFA8,
+    0xE1DE, 0xAFA9,
+    0xE1DF, 0xAFAA,
+    0xE1E0, 0xAFAB,
+    0xE1E1, 0xAFAC,
+    0xE1E2, 0xAFAD,
+    0xE1E3, 0xAFAE,
+    0xE1E4, 0xAFAF,
+    0xE1E5, 0xAFB0,
+    0xE1E6, 0xAFB1,
+    0xE1E7, 0xAFB2,
+    0xE1E8, 0xAFB3,
+    0xE1E9, 0xAFB4,
+    0xE1EA, 0xAFB5,
+    0xE1EB, 0xAFB6,
+    0xE1EC, 0xAFB7,
+    0xE1ED, 0xAFB8,
+    0xE1EE, 0xAFB9,
+    0xE1EF, 0xAFBA,
+    0xE1F0, 0xAFBB,
+    0xE1F1, 0xAFBC,
+    0xE1F2, 0xAFBD,
+    0xE1F3, 0xAFBE,
+    0xE1F4, 0xAFBF,
+    0xE1F5, 0xAFC0,
+    0xE1F6, 0xAFC1,
+    0xE1F7, 0xAFC2,
+    0xE1F8, 0xAFC3,
+    0xE1F9, 0xAFC4,
+    0xE1FA, 0xAFC5,
+    0xE1FB, 0xAFC6,
+    0xE1FC, 0xAFC7,
+    0xE1FD, 0xAFC8,
+    0xE1FE, 0xAFC9,
+    0xE1FF, 0xAFCA,
+    0xE200, 0xAFCB,
+    0xE201, 0xAFCC,
+    0xE202, 0xAFCD,
+    0xE203, 0xAFCE,
+    0xE204, 0xAFCF,
+    0xE205, 0xAFD0,
+    0xE206, 0xAFD1,
+    0xE207, 0xAFD2,
+    0xE208, 0xAFD3,
+    0xE209, 0xAFD4,
+    0xE20A, 0xAFD5,
+    0xE20B, 0xAFD6,
+    0xE20C, 0xAFD7,
+    0xE20D, 0xAFD8,
+    0xE20E, 0xAFD9,
+    0xE20F, 0xAFDA,
+    0xE210, 0xAFDB,
+    0xE211, 0xAFDC,
+    0xE212, 0xAFDD,
+    0xE213, 0xAFDE,
+    0xE214, 0xAFDF,
+    0xE215, 0xAFE0,
+    0xE216, 0xAFE1,
+    0xE217, 0xAFE2,
+    0xE218, 0xAFE3,
+    0xE219, 0xAFE4,
+    0xE21A, 0xAFE5,
+    0xE21B, 0xAFE6,
+    0xE21C, 0xAFE7,
+    0xE21D, 0xAFE8,
+    0xE21E, 0xAFE9,
+    0xE21F, 0xAFEA,
+    0xE220, 0xAFEB,
+    0xE221, 0xAFEC,
+    0xE222, 0xAFED,
+    0xE223, 0xAFEE,
+    0xE224, 0xAFEF,
+    0xE225, 0xAFF0,
+    0xE226, 0xAFF1,
+    0xE227, 0xAFF2,
+    0xE228, 0xAFF3,
+    0xE229, 0xAFF4,
+    0xE22A, 0xAFF5,
+    0xE22B, 0xAFF6,
+    0xE22C, 0xAFF7,
+    0xE22D, 0xAFF8,
+    0xE22E, 0xAFF9,
+    0xE22F, 0xAFFA,
+    0xE230, 0xAFFB,
+    0xE231, 0xAFFC,
+    0xE232, 0xAFFD,
+    0xE233, 0xAFFE,
+    0xE234, 0xF8A1,
+    0xE235, 0xF8A2,
+    0xE236, 0xF8A3,
+    0xE237, 0xF8A4,
+    0xE238, 0xF8A5,
+    0xE239, 0xF8A6,
+    0xE23A, 0xF8A7,
+    0xE23B, 0xF8A8,
+    0xE23C, 0xF8A9,
+    0xE23D, 0xF8AA,
+    0xE23E, 0xF8AB,
+    0xE23F, 0xF8AC,
+    0xE240, 0xF8AD,
+    0xE241, 0xF8AE,
+    0xE242, 0xF8AF,
+    0xE243, 0xF8B0,
+    0xE244, 0xF8B1,
+    0xE245, 0xF8B2,
+    0xE246, 0xF8B3,
+    0xE247, 0xF8B4,
+    0xE248, 0xF8B5,
+    0xE249, 0xF8B6,
+    0xE24A, 0xF8B7,
+    0xE24B, 0xF8B8,
+    0xE24C, 0xF8B9,
+    0xE24D, 0xF8BA,
+    0xE24E, 0xF8BB,
+    0xE24F, 0xF8BC,
+    0xE250, 0xF8BD,
+    0xE251, 0xF8BE,
+    0xE252, 0xF8BF,
+    0xE253, 0xF8C0,
+    0xE254, 0xF8C1,
+    0xE255, 0xF8C2,
+    0xE256, 0xF8C3,
+    0xE257, 0xF8C4,
+    0xE258, 0xF8C5,
+    0xE259, 0xF8C6,
+    0xE25A, 0xF8C7,
+    0xE25B, 0xF8C8,
+    0xE25C, 0xF8C9,
+    0xE25D, 0xF8CA,
+    0xE25E, 0xF8CB,
+    0xE25F, 0xF8CC,
+    0xE260, 0xF8CD,
+    0xE261, 0xF8CE,
+    0xE262, 0xF8CF,
+    0xE263, 0xF8D0,
+    0xE264, 0xF8D1,
+    0xE265, 0xF8D2,
+    0xE266, 0xF8D3,
+    0xE267, 0xF8D4,
+    0xE268, 0xF8D5,
+    0xE269, 0xF8D6,
+    0xE26A, 0xF8D7,
+    0xE26B, 0xF8D8,
+    0xE26C, 0xF8D9,
+    0xE26D, 0xF8DA,
+    0xE26E, 0xF8DB,
+    0xE26F, 0xF8DC,
+    0xE270, 0xF8DD,
+    0xE271, 0xF8DE,
+    0xE272, 0xF8DF,
+    0xE273, 0xF8E0,
+    0xE274, 0xF8E1,
+    0xE275, 0xF8E2,
+    0xE276, 0xF8E3,
+    0xE277, 0xF8E4,
+    0xE278, 0xF8E5,
+    0xE279, 0xF8E6,
+    0xE27A, 0xF8E7,
+    0xE27B, 0xF8E8,
+    0xE27C, 0xF8E9,
+    0xE27D, 0xF8EA,
+    0xE27E, 0xF8EB,
+    0xE27F, 0xF8EC,
+    0xE280, 0xF8ED,
+    0xE281, 0xF8EE,
+    0xE282, 0xF8EF,
+    0xE283, 0xF8F0,
+    0xE284, 0xF8F1,
+    0xE285, 0xF8F2,
+    0xE286, 0xF8F3,
+    0xE287, 0xF8F4,
+    0xE288, 0xF8F5,
+    0xE289, 0xF8F6,
+    0xE28A, 0xF8F7,
+    0xE28B, 0xF8F8,
+    0xE28C, 0xF8F9,
+    0xE28D, 0xF8FA,
+    0xE28E, 0xF8FB,
+    0xE28F, 0xF8FC,
+    0xE290, 0xF8FD,
+    0xE291, 0xF8FE,
+    0xE292, 0xF9A1,
+    0xE293, 0xF9A2,
+    0xE294, 0xF9A3,
+    0xE295, 0xF9A4,
+    0xE296, 0xF9A5,
+    0xE297, 0xF9A6,
+    0xE298, 0xF9A7,
+    0xE299, 0xF9A8,
+    0xE29A, 0xF9A9,
+    0xE29B, 0xF9AA,
+    0xE29C, 0xF9AB,
+    0xE29D, 0xF9AC,
+    0xE29E, 0xF9AD,
+    0xE29F, 0xF9AE,
+    0xE2A0, 0xF9AF,
+    0xE2A1, 0xF9B0,
+    0xE2A2, 0xF9B1,
+    0xE2A3, 0xF9B2,
+    0xE2A4, 0xF9B3,
+    0xE2A5, 0xF9B4,
+    0xE2A6, 0xF9B5,
+    0xE2A7, 0xF9B6,
+    0xE2A8, 0xF9B7,
+    0xE2A9, 0xF9B8,
+    0xE2AA, 0xF9B9,
+    0xE2AB, 0xF9BA,
+    0xE2AC, 0xF9BB,
+    0xE2AD, 0xF9BC,
+    0xE2AE, 0xF9BD,
+    0xE2AF, 0xF9BE,
+    0xE2B0, 0xF9BF,
+    0xE2B1, 0xF9C0,
+    0xE2B2, 0xF9C1,
+    0xE2B3, 0xF9C2,
+    0xE2B4, 0xF9C3,
+    0xE2B5, 0xF9C4,
+    0xE2B6, 0xF9C5,
+    0xE2B7, 0xF9C6,
+    0xE2B8, 0xF9C7,
+    0xE2B9, 0xF9C8,
+    0xE2BA, 0xF9C9,
+    0xE2BB, 0xF9CA,
+    0xE2BC, 0xF9CB,
+    0xE2BD, 0xF9CC,
+    0xE2BE, 0xF9CD,
+    0xE2BF, 0xF9CE,
+    0xE2C0, 0xF9CF,
+    0xE2C1, 0xF9D0,
+    0xE2C2, 0xF9D1,
+    0xE2C3, 0xF9D2,
+    0xE2C4, 0xF9D3,
+    0xE2C5, 0xF9D4,
+    0xE2C6, 0xF9D5,
+    0xE2C7, 0xF9D6,
+    0xE2C8, 0xF9D7,
+    0xE2C9, 0xF9D8,
+    0xE2CA, 0xF9D9,
+    0xE2CB, 0xF9DA,
+    0xE2CC, 0xF9DB,
+    0xE2CD, 0xF9DC,
+    0xE2CE, 0xF9DD,
+    0xE2CF, 0xF9DE,
+    0xE2D0, 0xF9DF,
+    0xE2D1, 0xF9E0,
+    0xE2D2, 0xF9E1,
+    0xE2D3, 0xF9E2,
+    0xE2D4, 0xF9E3,
+    0xE2D5, 0xF9E4,
+    0xE2D6, 0xF9E5,
+    0xE2D7, 0xF9E6,
+    0xE2D8, 0xF9E7,
+    0xE2D9, 0xF9E8,
+    0xE2DA, 0xF9E9,
+    0xE2DB, 0xF9EA,
+    0xE2DC, 0xF9EB,
+    0xE2DD, 0xF9EC,
+    0xE2DE, 0xF9ED,
+    0xE2DF, 0xF9EE,
+    0xE2E0, 0xF9EF,
+    0xE2E1, 0xF9F0,
+    0xE2E2, 0xF9F1,
+    0xE2E3, 0xF9F2,
+    0xE2E4, 0xF9F3,
+    0xE2E5, 0xF9F4,
+    0xE2E6, 0xF9F5,
+    0xE2E7, 0xF9F6,
+    0xE2E8, 0xF9F7,
+    0xE2E9, 0xF9F8,
+    0xE2EA, 0xF9F9,
+    0xE2EB, 0xF9FA,
+    0xE2EC, 0xF9FB,
+    0xE2ED, 0xF9FC,
+    0xE2EE, 0xF9FD,
+    0xE2EF, 0xF9FE,
+    0xE2F0, 0xFAA1,
+    0xE2F1, 0xFAA2,
+    0xE2F2, 0xFAA3,
+    0xE2F3, 0xFAA4,
+    0xE2F4, 0xFAA5,
+    0xE2F5, 0xFAA6,
+    0xE2F6, 0xFAA7,
+    0xE2F7, 0xFAA8,
+    0xE2F8, 0xFAA9,
+    0xE2F9, 0xFAAA,
+    0xE2FA, 0xFAAB,
+    0xE2FB, 0xFAAC,
+    0xE2FC, 0xFAAD,
+    0xE2FD, 0xFAAE,
+    0xE2FE, 0xFAAF,
+    0xE2FF, 0xFAB0,
+    0xE300, 0xFAB1,
+    0xE301, 0xFAB2,
+    0xE302, 0xFAB3,
+    0xE303, 0xFAB4,
+    0xE304, 0xFAB5,
+    0xE305, 0xFAB6,
+    0xE306, 0xFAB7,
+    0xE307, 0xFAB8,
+    0xE308, 0xFAB9,
+    0xE309, 0xFABA,
+    0xE30A, 0xFABB,
+    0xE30B, 0xFABC,
+    0xE30C, 0xFABD,
+    0xE30D, 0xFABE,
+    0xE30E, 0xFABF,
+    0xE30F, 0xFAC0,
+    0xE310, 0xFAC1,
+    0xE311, 0xFAC2,
+    0xE312, 0xFAC3,
+    0xE313, 0xFAC4,
+    0xE314, 0xFAC5,
+    0xE315, 0xFAC6,
+    0xE316, 0xFAC7,
+    0xE317, 0xFAC8,
+    0xE318, 0xFAC9,
+    0xE319, 0xFACA,
+    0xE31A, 0xFACB,
+    0xE31B, 0xFACC,
+    0xE31C, 0xFACD,
+    0xE31D, 0xFACE,
+    0xE31E, 0xFACF,
+    0xE31F, 0xFAD0,
+    0xE320, 0xFAD1,
+    0xE321, 0xFAD2,
+    0xE322, 0xFAD3,
+    0xE323, 0xFAD4,
+    0xE324, 0xFAD5,
+    0xE325, 0xFAD6,
+    0xE326, 0xFAD7,
+    0xE327, 0xFAD8,
+    0xE328, 0xFAD9,
+    0xE329, 0xFADA,
+    0xE32A, 0xFADB,
+    0xE32B, 0xFADC,
+    0xE32C, 0xFADD,
+    0xE32D, 0xFADE,
+    0xE32E, 0xFADF,
+    0xE32F, 0xFAE0,
+    0xE330, 0xFAE1,
+    0xE331, 0xFAE2,
+    0xE332, 0xFAE3,
+    0xE333, 0xFAE4,
+    0xE334, 0xFAE5,
+    0xE335, 0xFAE6,
+    0xE336, 0xFAE7,
+    0xE337, 0xFAE8,
+    0xE338, 0xFAE9,
+    0xE339, 0xFAEA,
+    0xE33A, 0xFAEB,
+    0xE33B, 0xFAEC,
+    0xE33C, 0xFAED,
+    0xE33D, 0xFAEE,
+    0xE33E, 0xFAEF,
+    0xE33F, 0xFAF0,
+    0xE340, 0xFAF1,
+    0xE341, 0xFAF2,
+    0xE342, 0xFAF3,
+    0xE343, 0xFAF4,
+    0xE344, 0xFAF5,
+    0xE345, 0xFAF6,
+    0xE346, 0xFAF7,
+    0xE347, 0xFAF8,
+    0xE348, 0xFAF9,
+    0xE349, 0xFAFA,
+    0xE34A, 0xFAFB,
+    0xE34B, 0xFAFC,
+    0xE34C, 0xFAFD,
+    0xE34D, 0xFAFE,
+    0xE34E, 0xFBA1,
+    0xE34F, 0xFBA2,
+    0xE350, 0xFBA3,
+    0xE351, 0xFBA4,
+    0xE352, 0xFBA5,
+    0xE353, 0xFBA6,
+    0xE354, 0xFBA7,
+    0xE355, 0xFBA8,
+    0xE356, 0xFBA9,
+    0xE357, 0xFBAA,
+    0xE358, 0xFBAB,
+    0xE359, 0xFBAC,
+    0xE35A, 0xFBAD,
+    0xE35B, 0xFBAE,
+    0xE35C, 0xFBAF,
+    0xE35D, 0xFBB0,
+    0xE35E, 0xFBB1,
+    0xE35F, 0xFBB2,
+    0xE360, 0xFBB3,
+    0xE361, 0xFBB4,
+    0xE362, 0xFBB5,
+    0xE363, 0xFBB6,
+    0xE364, 0xFBB7,
+    0xE365, 0xFBB8,
+    0xE366, 0xFBB9,
+    0xE367, 0xFBBA,
+    0xE368, 0xFBBB,
+    0xE369, 0xFBBC,
+    0xE36A, 0xFBBD,
+    0xE36B, 0xFBBE,
+    0xE36C, 0xFBBF,
+    0xE36D, 0xFBC0,
+    0xE36E, 0xFBC1,
+    0xE36F, 0xFBC2,
+    0xE370, 0xFBC3,
+    0xE371, 0xFBC4,
+    0xE372, 0xFBC5,
+    0xE373, 0xFBC6,
+    0xE374, 0xFBC7,
+    0xE375, 0xFBC8,
+    0xE376, 0xFBC9,
+    0xE377, 0xFBCA,
+    0xE378, 0xFBCB,
+    0xE379, 0xFBCC,
+    0xE37A, 0xFBCD,
+    0xE37B, 0xFBCE,
+    0xE37C, 0xFBCF,
+    0xE37D, 0xFBD0,
+    0xE37E, 0xFBD1,
+    0xE37F, 0xFBD2,
+    0xE380, 0xFBD3,
+    0xE381, 0xFBD4,
+    0xE382, 0xFBD5,
+    0xE383, 0xFBD6,
+    0xE384, 0xFBD7,
+    0xE385, 0xFBD8,
+    0xE386, 0xFBD9,
+    0xE387, 0xFBDA,
+    0xE388, 0xFBDB,
+    0xE389, 0xFBDC,
+    0xE38A, 0xFBDD,
+    0xE38B, 0xFBDE,
+    0xE38C, 0xFBDF,
+    0xE38D, 0xFBE0,
+    0xE38E, 0xFBE1,
+    0xE38F, 0xFBE2,
+    0xE390, 0xFBE3,
+    0xE391, 0xFBE4,
+    0xE392, 0xFBE5,
+    0xE393, 0xFBE6,
+    0xE394, 0xFBE7,
+    0xE395, 0xFBE8,
+    0xE396, 0xFBE9,
+    0xE397, 0xFBEA,
+    0xE398, 0xFBEB,
+    0xE399, 0xFBEC,
+    0xE39A, 0xFBED,
+    0xE39B, 0xFBEE,
+    0xE39C, 0xFBEF,
+    0xE39D, 0xFBF0,
+    0xE39E, 0xFBF1,
+    0xE39F, 0xFBF2,
+    0xE3A0, 0xFBF3,
+    0xE3A1, 0xFBF4,
+    0xE3A2, 0xFBF5,
+    0xE3A3, 0xFBF6,
+    0xE3A4, 0xFBF7,
+    0xE3A5, 0xFBF8,
+    0xE3A6, 0xFBF9,
+    0xE3A7, 0xFBFA,
+    0xE3A8, 0xFBFB,
+    0xE3A9, 0xFBFC,
+    0xE3AA, 0xFBFD,
+    0xE3AB, 0xFBFE,
+    0xE3AC, 0xFCA1,
+    0xE3AD, 0xFCA2,
+    0xE3AE, 0xFCA3,
+    0xE3AF, 0xFCA4,
+    0xE3B0, 0xFCA5,
+    0xE3B1, 0xFCA6,
+    0xE3B2, 0xFCA7,
+    0xE3B3, 0xFCA8,
+    0xE3B4, 0xFCA9,
+    0xE3B5, 0xFCAA,
+    0xE3B6, 0xFCAB,
+    0xE3B7, 0xFCAC,
+    0xE3B8, 0xFCAD,
+    0xE3B9, 0xFCAE,
+    0xE3BA, 0xFCAF,
+    0xE3BB, 0xFCB0,
+    0xE3BC, 0xFCB1,
+    0xE3BD, 0xFCB2,
+    0xE3BE, 0xFCB3,
+    0xE3BF, 0xFCB4,
+    0xE3C0, 0xFCB5,
+    0xE3C1, 0xFCB6,
+    0xE3C2, 0xFCB7,
+    0xE3C3, 0xFCB8,
+    0xE3C4, 0xFCB9,
+    0xE3C5, 0xFCBA,
+    0xE3C6, 0xFCBB,
+    0xE3C7, 0xFCBC,
+    0xE3C8, 0xFCBD,
+    0xE3C9, 0xFCBE,
+    0xE3CA, 0xFCBF,
+    0xE3CB, 0xFCC0,
+    0xE3CC, 0xFCC1,
+    0xE3CD, 0xFCC2,
+    0xE3CE, 0xFCC3,
+    0xE3CF, 0xFCC4,
+    0xE3D0, 0xFCC5,
+    0xE3D1, 0xFCC6,
+    0xE3D2, 0xFCC7,
+    0xE3D3, 0xFCC8,
+    0xE3D4, 0xFCC9,
+    0xE3D5, 0xFCCA,
+    0xE3D6, 0xFCCB,
+    0xE3D7, 0xFCCC,
+    0xE3D8, 0xFCCD,
+    0xE3D9, 0xFCCE,
+    0xE3DA, 0xFCCF,
+    0xE3DB, 0xFCD0,
+    0xE3DC, 0xFCD1,
+    0xE3DD, 0xFCD2,
+    0xE3DE, 0xFCD3,
+    0xE3DF, 0xFCD4,
+    0xE3E0, 0xFCD5,
+    0xE3E1, 0xFCD6,
+    0xE3E2, 0xFCD7,
+    0xE3E3, 0xFCD8,
+    0xE3E4, 0xFCD9,
+    0xE3E5, 0xFCDA,
+    0xE3E6, 0xFCDB,
+    0xE3E7, 0xFCDC,
+    0xE3E8, 0xFCDD,
+    0xE3E9, 0xFCDE,
+    0xE3EA, 0xFCDF,
+    0xE3EB, 0xFCE0,
+    0xE3EC, 0xFCE1,
+    0xE3ED, 0xFCE2,
+    0xE3EE, 0xFCE3,
+    0xE3EF, 0xFCE4,
+    0xE3F0, 0xFCE5,
+    0xE3F1, 0xFCE6,
+    0xE3F2, 0xFCE7,
+    0xE3F3, 0xFCE8,
+    0xE3F4, 0xFCE9,
+    0xE3F5, 0xFCEA,
+    0xE3F6, 0xFCEB,
+    0xE3F7, 0xFCEC,
+    0xE3F8, 0xFCED,
+    0xE3F9, 0xFCEE,
+    0xE3FA, 0xFCEF,
+    0xE3FB, 0xFCF0,
+    0xE3FC, 0xFCF1,
+    0xE3FD, 0xFCF2,
+    0xE3FE, 0xFCF3,
+    0xE3FF, 0xFCF4,
+    0xE400, 0xFCF5,
+    0xE401, 0xFCF6,
+    0xE402, 0xFCF7,
+    0xE403, 0xFCF8,
+    0xE404, 0xFCF9,
+    0xE405, 0xFCFA,
+    0xE406, 0xFCFB,
+    0xE407, 0xFCFC,
+    0xE408, 0xFCFD,
+    0xE409, 0xFCFE,
+    0xE40A, 0xFDA1,
+    0xE40B, 0xFDA2,
+    0xE40C, 0xFDA3,
+    0xE40D, 0xFDA4,
+    0xE40E, 0xFDA5,
+    0xE40F, 0xFDA6,
+    0xE410, 0xFDA7,
+    0xE411, 0xFDA8,
+    0xE412, 0xFDA9,
+    0xE413, 0xFDAA,
+    0xE414, 0xFDAB,
+    0xE415, 0xFDAC,
+    0xE416, 0xFDAD,
+    0xE417, 0xFDAE,
+    0xE418, 0xFDAF,
+    0xE419, 0xFDB0,
+    0xE41A, 0xFDB1,
+    0xE41B, 0xFDB2,
+    0xE41C, 0xFDB3,
+    0xE41D, 0xFDB4,
+    0xE41E, 0xFDB5,
+    0xE41F, 0xFDB6,
+    0xE420, 0xFDB7,
+    0xE421, 0xFDB8,
+    0xE422, 0xFDB9,
+    0xE423, 0xFDBA,
+    0xE424, 0xFDBB,
+    0xE425, 0xFDBC,
+    0xE426, 0xFDBD,
+    0xE427, 0xFDBE,
+    0xE428, 0xFDBF,
+    0xE429, 0xFDC0,
+    0xE42A, 0xFDC1,
+    0xE42B, 0xFDC2,
+    0xE42C, 0xFDC3,
+    0xE42D, 0xFDC4,
+    0xE42E, 0xFDC5,
+    0xE42F, 0xFDC6,
+    0xE430, 0xFDC7,
+    0xE431, 0xFDC8,
+    0xE432, 0xFDC9,
+    0xE433, 0xFDCA,
+    0xE434, 0xFDCB,
+    0xE435, 0xFDCC,
+    0xE436, 0xFDCD,
+    0xE437, 0xFDCE,
+    0xE438, 0xFDCF,
+    0xE439, 0xFDD0,
+    0xE43A, 0xFDD1,
+    0xE43B, 0xFDD2,
+    0xE43C, 0xFDD3,
+    0xE43D, 0xFDD4,
+    0xE43E, 0xFDD5,
+    0xE43F, 0xFDD6,
+    0xE440, 0xFDD7,
+    0xE441, 0xFDD8,
+    0xE442, 0xFDD9,
+    0xE443, 0xFDDA,
+    0xE444, 0xFDDB,
+    0xE445, 0xFDDC,
+    0xE446, 0xFDDD,
+    0xE447, 0xFDDE,
+    0xE448, 0xFDDF,
+    0xE449, 0xFDE0,
+    0xE44A, 0xFDE1,
+    0xE44B, 0xFDE2,
+    0xE44C, 0xFDE3,
+    0xE44D, 0xFDE4,
+    0xE44E, 0xFDE5,
+    0xE44F, 0xFDE6,
+    0xE450, 0xFDE7,
+    0xE451, 0xFDE8,
+    0xE452, 0xFDE9,
+    0xE453, 0xFDEA,
+    0xE454, 0xFDEB,
+    0xE455, 0xFDEC,
+    0xE456, 0xFDED,
+    0xE457, 0xFDEE,
+    0xE458, 0xFDEF,
+    0xE459, 0xFDF0,
+    0xE45A, 0xFDF1,
+    0xE45B, 0xFDF2,
+    0xE45C, 0xFDF3,
+    0xE45D, 0xFDF4,
+    0xE45E, 0xFDF5,
+    0xE45F, 0xFDF6,
+    0xE460, 0xFDF7,
+    0xE461, 0xFDF8,
+    0xE462, 0xFDF9,
+    0xE463, 0xFDFA,
+    0xE464, 0xFDFB,
+    0xE465, 0xFDFC,
+    0xE466, 0xFDFD,
+    0xE467, 0xFDFE,
+    0xE468, 0xFEA1,
+    0xE469, 0xFEA2,
+    0xE46A, 0xFEA3,
+    0xE46B, 0xFEA4,
+    0xE46C, 0xFEA5,
+    0xE46D, 0xFEA6,
+    0xE46E, 0xFEA7,
+    0xE46F, 0xFEA8,
+    0xE470, 0xFEA9,
+    0xE471, 0xFEAA,
+    0xE472, 0xFEAB,
+    0xE473, 0xFEAC,
+    0xE474, 0xFEAD,
+    0xE475, 0xFEAE,
+    0xE476, 0xFEAF,
+    0xE477, 0xFEB0,
+    0xE478, 0xFEB1,
+    0xE479, 0xFEB2,
+    0xE47A, 0xFEB3,
+    0xE47B, 0xFEB4,
+    0xE47C, 0xFEB5,
+    0xE47D, 0xFEB6,
+    0xE47E, 0xFEB7,
+    0xE47F, 0xFEB8,
+    0xE480, 0xFEB9,
+    0xE481, 0xFEBA,
+    0xE482, 0xFEBB,
+    0xE483, 0xFEBC,
+    0xE484, 0xFEBD,
+    0xE485, 0xFEBE,
+    0xE486, 0xFEBF,
+    0xE487, 0xFEC0,
+    0xE488, 0xFEC1,
+    0xE489, 0xFEC2,
+    0xE48A, 0xFEC3,
+    0xE48B, 0xFEC4,
+    0xE48C, 0xFEC5,
+    0xE48D, 0xFEC6,
+    0xE48E, 0xFEC7,
+    0xE48F, 0xFEC8,
+    0xE490, 0xFEC9,
+    0xE491, 0xFECA,
+    0xE492, 0xFECB,
+    0xE493, 0xFECC,
+    0xE494, 0xFECD,
+    0xE495, 0xFECE,
+    0xE496, 0xFECF,
+    0xE497, 0xFED0,
+    0xE498, 0xFED1,
+    0xE499, 0xFED2,
+    0xE49A, 0xFED3,
+    0xE49B, 0xFED4,
+    0xE49C, 0xFED5,
+    0xE49D, 0xFED6,
+    0xE49E, 0xFED7,
+    0xE49F, 0xFED8,
+    0xE4A0, 0xFED9,
+    0xE4A1, 0xFEDA,
+    0xE4A2, 0xFEDB,
+    0xE4A3, 0xFEDC,
+    0xE4A4, 0xFEDD,
+    0xE4A5, 0xFEDE,
+    0xE4A6, 0xFEDF,
+    0xE4A7, 0xFEE0,
+    0xE4A8, 0xFEE1,
+    0xE4A9, 0xFEE2,
+    0xE4AA, 0xFEE3,
+    0xE4AB, 0xFEE4,
+    0xE4AC, 0xFEE5,
+    0xE4AD, 0xFEE6,
+    0xE4AE, 0xFEE7,
+    0xE4AF, 0xFEE8,
+    0xE4B0, 0xFEE9,
+    0xE4B1, 0xFEEA,
+    0xE4B2, 0xFEEB,
+    0xE4B3, 0xFEEC,
+    0xE4B4, 0xFEED,
+    0xE4B5, 0xFEEE,
+    0xE4B6, 0xFEEF,
+    0xE4B7, 0xFEF0,
+    0xE4B8, 0xFEF1,
+    0xE4B9, 0xFEF2,
+    0xE4BA, 0xFEF3,
+    0xE4BB, 0xFEF4,
+    0xE4BC, 0xFEF5,
+    0xE4BD, 0xFEF6,
+    0xE4BE, 0xFEF7,
+    0xE4BF, 0xFEF8,
+    0xE4C0, 0xFEF9,
+    0xE4C1, 0xFEFA,
+    0xE4C2, 0xFEFB,
+    0xE4C3, 0xFEFC,
+    0xE4C4, 0xFEFD,
+    0xE4C5, 0xFEFE,
+    0xE4C6, 0xA140,
+    0xE4C7, 0xA141,
+    0xE4C8, 0xA142,
+    0xE4C9, 0xA143,
+    0xE4CA, 0xA144,
+    0xE4CB, 0xA145,
+    0xE4CC, 0xA146,
+    0xE4CD, 0xA147,
+    0xE4CE, 0xA148,
+    0xE4CF, 0xA149,
+    0xE4D0, 0xA14A,
+    0xE4D1, 0xA14B,
+    0xE4D2, 0xA14C,
+    0xE4D3, 0xA14D,
+    0xE4D4, 0xA14E,
+    0xE4D5, 0xA14F,
+    0xE4D6, 0xA150,
+    0xE4D7, 0xA151,
+    0xE4D8, 0xA152,
+    0xE4D9, 0xA153,
+    0xE4DA, 0xA154,
+    0xE4DB, 0xA155,
+    0xE4DC, 0xA156,
+    0xE4DD, 0xA157,
+    0xE4DE, 0xA158,
+    0xE4DF, 0xA159,
+    0xE4E0, 0xA15A,
+    0xE4E1, 0xA15B,
+    0xE4E2, 0xA15C,
+    0xE4E3, 0xA15D,
+    0xE4E4, 0xA15E,
+    0xE4E5, 0xA15F,
+    0xE4E6, 0xA160,
+    0xE4E7, 0xA161,
+    0xE4E8, 0xA162,
+    0xE4E9, 0xA163,
+    0xE4EA, 0xA164,
+    0xE4EB, 0xA165,
+    0xE4EC, 0xA166,
+    0xE4ED, 0xA167,
+    0xE4EE, 0xA168,
+    0xE4EF, 0xA169,
+    0xE4F0, 0xA16A,
+    0xE4F1, 0xA16B,
+    0xE4F2, 0xA16C,
+    0xE4F3, 0xA16D,
+    0xE4F4, 0xA16E,
+    0xE4F5, 0xA16F,
+    0xE4F6, 0xA170,
+    0xE4F7, 0xA171,
+    0xE4F8, 0xA172,
+    0xE4F9, 0xA173,
+    0xE4FA, 0xA174,
+    0xE4FB, 0xA175,
+    0xE4FC, 0xA176,
+    0xE4FD, 0xA177,
+    0xE4FE, 0xA178,
+    0xE4FF, 0xA179,
+    0xE500, 0xA17A,
+    0xE501, 0xA17B,
+    0xE502, 0xA17C,
+    0xE503, 0xA17D,
+    0xE504, 0xA17E,
+    0xE505, 0xA180,
+    0xE506, 0xA181,
+    0xE507, 0xA182,
+    0xE508, 0xA183,
+    0xE509, 0xA184,
+    0xE50A, 0xA185,
+    0xE50B, 0xA186,
+    0xE50C, 0xA187,
+    0xE50D, 0xA188,
+    0xE50E, 0xA189,
+    0xE50F, 0xA18A,
+    0xE510, 0xA18B,
+    0xE511, 0xA18C,
+    0xE512, 0xA18D,
+    0xE513, 0xA18E,
+    0xE514, 0xA18F,
+    0xE515, 0xA190,
+    0xE516, 0xA191,
+    0xE517, 0xA192,
+    0xE518, 0xA193,
+    0xE519, 0xA194,
+    0xE51A, 0xA195,
+    0xE51B, 0xA196,
+    0xE51C, 0xA197,
+    0xE51D, 0xA198,
+    0xE51E, 0xA199,
+    0xE51F, 0xA19A,
+    0xE520, 0xA19B,
+    0xE521, 0xA19C,
+    0xE522, 0xA19D,
+    0xE523, 0xA19E,
+    0xE524, 0xA19F,
+    0xE525, 0xA1A0,
+    0xE526, 0xA240,
+    0xE527, 0xA241,
+    0xE528, 0xA242,
+    0xE529, 0xA243,
+    0xE52A, 0xA244,
+    0xE52B, 0xA245,
+    0xE52C, 0xA246,
+    0xE52D, 0xA247,
+    0xE52E, 0xA248,
+    0xE52F, 0xA249,
+    0xE530, 0xA24A,
+    0xE531, 0xA24B,
+    0xE532, 0xA24C,
+    0xE533, 0xA24D,
+    0xE534, 0xA24E,
+    0xE535, 0xA24F,
+    0xE536, 0xA250,
+    0xE537, 0xA251,
+    0xE538, 0xA252,
+    0xE539, 0xA253,
+    0xE53A, 0xA254,
+    0xE53B, 0xA255,
+    0xE53C, 0xA256,
+    0xE53D, 0xA257,
+    0xE53E, 0xA258,
+    0xE53F, 0xA259,
+    0xE540, 0xA25A,
+    0xE541, 0xA25B,
+    0xE542, 0xA25C,
+    0xE543, 0xA25D,
+    0xE544, 0xA25E,
+    0xE545, 0xA25F,
+    0xE546, 0xA260,
+    0xE547, 0xA261,
+    0xE548, 0xA262,
+    0xE549, 0xA263,
+    0xE54A, 0xA264,
+    0xE54B, 0xA265,
+    0xE54C, 0xA266,
+    0xE54D, 0xA267,
+    0xE54E, 0xA268,
+    0xE54F, 0xA269,
+    0xE550, 0xA26A,
+    0xE551, 0xA26B,
+    0xE552, 0xA26C,
+    0xE553, 0xA26D,
+    0xE554, 0xA26E,
+    0xE555, 0xA26F,
+    0xE556, 0xA270,
+    0xE557, 0xA271,
+    0xE558, 0xA272,
+    0xE559, 0xA273,
+    0xE55A, 0xA274,
+    0xE55B, 0xA275,
+    0xE55C, 0xA276,
+    0xE55D, 0xA277,
+    0xE55E, 0xA278,
+    0xE55F, 0xA279,
+    0xE560, 0xA27A,
+    0xE561, 0xA27B,
+    0xE562, 0xA27C,
+    0xE563, 0xA27D,
+    0xE564, 0xA27E,
+    0xE565, 0xA280,
+    0xE566, 0xA281,
+    0xE567, 0xA282,
+    0xE568, 0xA283,
+    0xE569, 0xA284,
+    0xE56A, 0xA285,
+    0xE56B, 0xA286,
+    0xE56C, 0xA287,
+    0xE56D, 0xA288,
+    0xE56E, 0xA289,
+    0xE56F, 0xA28A,
+    0xE570, 0xA28B,
+    0xE571, 0xA28C,
+    0xE572, 0xA28D,
+    0xE573, 0xA28E,
+    0xE574, 0xA28F,
+    0xE575, 0xA290,
+    0xE576, 0xA291,
+    0xE577, 0xA292,
+    0xE578, 0xA293,
+    0xE579, 0xA294,
+    0xE57A, 0xA295,
+    0xE57B, 0xA296,
+    0xE57C, 0xA297,
+    0xE57D, 0xA298,
+    0xE57E, 0xA299,
+    0xE57F, 0xA29A,
+    0xE580, 0xA29B,
+    0xE581, 0xA29C,
+    0xE582, 0xA29D,
+    0xE583, 0xA29E,
+    0xE584, 0xA29F,
+    0xE585, 0xA2A0,
+    0xE586, 0xA340,
+    0xE587, 0xA341,
+    0xE588, 0xA342,
+    0xE589, 0xA343,
+    0xE58A, 0xA344,
+    0xE58B, 0xA345,
+    0xE58C, 0xA346,
+    0xE58D, 0xA347,
+    0xE58E, 0xA348,
+    0xE58F, 0xA349,
+    0xE590, 0xA34A,
+    0xE591, 0xA34B,
+    0xE592, 0xA34C,
+    0xE593, 0xA34D,
+    0xE594, 0xA34E,
+    0xE595, 0xA34F,
+    0xE596, 0xA350,
+    0xE597, 0xA351,
+    0xE598, 0xA352,
+    0xE599, 0xA353,
+    0xE59A, 0xA354,
+    0xE59B, 0xA355,
+    0xE59C, 0xA356,
+    0xE59D, 0xA357,
+    0xE59E, 0xA358,
+    0xE59F, 0xA359,
+    0xE5A0, 0xA35A,
+    0xE5A1, 0xA35B,
+    0xE5A2, 0xA35C,
+    0xE5A3, 0xA35D,
+    0xE5A4, 0xA35E,
+    0xE5A5, 0xA35F,
+    0xE5A6, 0xA360,
+    0xE5A7, 0xA361,
+    0xE5A8, 0xA362,
+    0xE5A9, 0xA363,
+    0xE5AA, 0xA364,
+    0xE5AB, 0xA365,
+    0xE5AC, 0xA366,
+    0xE5AD, 0xA367,
+    0xE5AE, 0xA368,
+    0xE5AF, 0xA369,
+    0xE5B0, 0xA36A,
+    0xE5B1, 0xA36B,
+    0xE5B2, 0xA36C,
+    0xE5B3, 0xA36D,
+    0xE5B4, 0xA36E,
+    0xE5B5, 0xA36F,
+    0xE5B6, 0xA370,
+    0xE5B7, 0xA371,
+    0xE5B8, 0xA372,
+    0xE5B9, 0xA373,
+    0xE5BA, 0xA374,
+    0xE5BB, 0xA375,
+    0xE5BC, 0xA376,
+    0xE5BD, 0xA377,
+    0xE5BE, 0xA378,
+    0xE5BF, 0xA379,
+    0xE5C0, 0xA37A,
+    0xE5C1, 0xA37B,
+    0xE5C2, 0xA37C,
+    0xE5C3, 0xA37D,
+    0xE5C4, 0xA37E,
+    0xE5C5, 0xA380,
+    0xE5C6, 0xA381,
+    0xE5C7, 0xA382,
+    0xE5C8, 0xA383,
+    0xE5C9, 0xA384,
+    0xE5CA, 0xA385,
+    0xE5CB, 0xA386,
+    0xE5CC, 0xA387,
+    0xE5CD, 0xA388,
+    0xE5CE, 0xA389,
+    0xE5CF, 0xA38A,
+    0xE5D0, 0xA38B,
+    0xE5D1, 0xA38C,
+    0xE5D2, 0xA38D,
+    0xE5D3, 0xA38E,
+    0xE5D4, 0xA38F,
+    0xE5D5, 0xA390,
+    0xE5D6, 0xA391,
+    0xE5D7, 0xA392,
+    0xE5D8, 0xA393,
+    0xE5D9, 0xA394,
+    0xE5DA, 0xA395,
+    0xE5DB, 0xA396,
+    0xE5DC, 0xA397,
+    0xE5DD, 0xA398,
+    0xE5DE, 0xA399,
+    0xE5DF, 0xA39A,
+    0xE5E0, 0xA39B,
+    0xE5E1, 0xA39C,
+    0xE5E2, 0xA39D,
+    0xE5E3, 0xA39E,
+    0xE5E4, 0xA39F,
+    0xE5E5, 0xA3A0,
+    0xE5E6, 0xA440,
+    0xE5E7, 0xA441,
+    0xE5E8, 0xA442,
+    0xE5E9, 0xA443,
+    0xE5EA, 0xA444,
+    0xE5EB, 0xA445,
+    0xE5EC, 0xA446,
+    0xE5ED, 0xA447,
+    0xE5EE, 0xA448,
+    0xE5EF, 0xA449,
+    0xE5F0, 0xA44A,
+    0xE5F1, 0xA44B,
+    0xE5F2, 0xA44C,
+    0xE5F3, 0xA44D,
+    0xE5F4, 0xA44E,
+    0xE5F5, 0xA44F,
+    0xE5F6, 0xA450,
+    0xE5F7, 0xA451,
+    0xE5F8, 0xA452,
+    0xE5F9, 0xA453,
+    0xE5FA, 0xA454,
+    0xE5FB, 0xA455,
+    0xE5FC, 0xA456,
+    0xE5FD, 0xA457,
+    0xE5FE, 0xA458,
+    0xE5FF, 0xA459,
+    0xE600, 0xA45A,
+    0xE601, 0xA45B,
+    0xE602, 0xA45C,
+    0xE603, 0xA45D,
+    0xE604, 0xA45E,
+    0xE605, 0xA45F,
+    0xE606, 0xA460,
+    0xE607, 0xA461,
+    0xE608, 0xA462,
+    0xE609, 0xA463,
+    0xE60A, 0xA464,
+    0xE60B, 0xA465,
+    0xE60C, 0xA466,
+    0xE60D, 0xA467,
+    0xE60E, 0xA468,
+    0xE60F, 0xA469,
+    0xE610, 0xA46A,
+    0xE611, 0xA46B,
+    0xE612, 0xA46C,
+    0xE613, 0xA46D,
+    0xE614, 0xA46E,
+    0xE615, 0xA46F,
+    0xE616, 0xA470,
+    0xE617, 0xA471,
+    0xE618, 0xA472,
+    0xE619, 0xA473,
+    0xE61A, 0xA474,
+    0xE61B, 0xA475,
+    0xE61C, 0xA476,
+    0xE61D, 0xA477,
+    0xE61E, 0xA478,
+    0xE61F, 0xA479,
+    0xE620, 0xA47A,
+    0xE621, 0xA47B,
+    0xE622, 0xA47C,
+    0xE623, 0xA47D,
+    0xE624, 0xA47E,
+    0xE625, 0xA480,
+    0xE626, 0xA481,
+    0xE627, 0xA482,
+    0xE628, 0xA483,
+    0xE629, 0xA484,
+    0xE62A, 0xA485,
+    0xE62B, 0xA486,
+    0xE62C, 0xA487,
+    0xE62D, 0xA488,
+    0xE62E, 0xA489,
+    0xE62F, 0xA48A,
+    0xE630, 0xA48B,
+    0xE631, 0xA48C,
+    0xE632, 0xA48D,
+    0xE633, 0xA48E,
+    0xE634, 0xA48F,
+    0xE635, 0xA490,
+    0xE636, 0xA491,
+    0xE637, 0xA492,
+    0xE638, 0xA493,
+    0xE639, 0xA494,
+    0xE63A, 0xA495,
+    0xE63B, 0xA496,
+    0xE63C, 0xA497,
+    0xE63D, 0xA498,
+    0xE63E, 0xA499,
+    0xE63F, 0xA49A,
+    0xE640, 0xA49B,
+    0xE641, 0xA49C,
+    0xE642, 0xA49D,
+    0xE643, 0xA49E,
+    0xE644, 0xA49F,
+    0xE645, 0xA4A0,
+    0xE646, 0xA540,
+    0xE647, 0xA541,
+    0xE648, 0xA542,
+    0xE649, 0xA543,
+    0xE64A, 0xA544,
+    0xE64B, 0xA545,
+    0xE64C, 0xA546,
+    0xE64D, 0xA547,
+    0xE64E, 0xA548,
+    0xE64F, 0xA549,
+    0xE650, 0xA54A,
+    0xE651, 0xA54B,
+    0xE652, 0xA54C,
+    0xE653, 0xA54D,
+    0xE654, 0xA54E,
+    0xE655, 0xA54F,
+    0xE656, 0xA550,
+    0xE657, 0xA551,
+    0xE658, 0xA552,
+    0xE659, 0xA553,
+    0xE65A, 0xA554,
+    0xE65B, 0xA555,
+    0xE65C, 0xA556,
+    0xE65D, 0xA557,
+    0xE65E, 0xA558,
+    0xE65F, 0xA559,
+    0xE660, 0xA55A,
+    0xE661, 0xA55B,
+    0xE662, 0xA55C,
+    0xE663, 0xA55D,
+    0xE664, 0xA55E,
+    0xE665, 0xA55F,
+    0xE666, 0xA560,
+    0xE667, 0xA561,
+    0xE668, 0xA562,
+    0xE669, 0xA563,
+    0xE66A, 0xA564,
+    0xE66B, 0xA565,
+    0xE66C, 0xA566,
+    0xE66D, 0xA567,
+    0xE66E, 0xA568,
+    0xE66F, 0xA569,
+    0xE670, 0xA56A,
+    0xE671, 0xA56B,
+    0xE672, 0xA56C,
+    0xE673, 0xA56D,
+    0xE674, 0xA56E,
+    0xE675, 0xA56F,
+    0xE676, 0xA570,
+    0xE677, 0xA571,
+    0xE678, 0xA572,
+    0xE679, 0xA573,
+    0xE67A, 0xA574,
+    0xE67B, 0xA575,
+    0xE67C, 0xA576,
+    0xE67D, 0xA577,
+    0xE67E, 0xA578,
+    0xE67F, 0xA579,
+    0xE680, 0xA57A,
+    0xE681, 0xA57B,
+    0xE682, 0xA57C,
+    0xE683, 0xA57D,
+    0xE684, 0xA57E,
+    0xE685, 0xA580,
+    0xE686, 0xA581,
+    0xE687, 0xA582,
+    0xE688, 0xA583,
+    0xE689, 0xA584,
+    0xE68A, 0xA585,
+    0xE68B, 0xA586,
+    0xE68C, 0xA587,
+    0xE68D, 0xA588,
+    0xE68E, 0xA589,
+    0xE68F, 0xA58A,
+    0xE690, 0xA58B,
+    0xE691, 0xA58C,
+    0xE692, 0xA58D,
+    0xE693, 0xA58E,
+    0xE694, 0xA58F,
+    0xE695, 0xA590,
+    0xE696, 0xA591,
+    0xE697, 0xA592,
+    0xE698, 0xA593,
+    0xE699, 0xA594,
+    0xE69A, 0xA595,
+    0xE69B, 0xA596,
+    0xE69C, 0xA597,
+    0xE69D, 0xA598,
+    0xE69E, 0xA599,
+    0xE69F, 0xA59A,
+    0xE6A0, 0xA59B,
+    0xE6A1, 0xA59C,
+    0xE6A2, 0xA59D,
+    0xE6A3, 0xA59E,
+    0xE6A4, 0xA59F,
+    0xE6A5, 0xA5A0,
+    0xE6A6, 0xA640,
+    0xE6A7, 0xA641,
+    0xE6A8, 0xA642,
+    0xE6A9, 0xA643,
+    0xE6AA, 0xA644,
+    0xE6AB, 0xA645,
+    0xE6AC, 0xA646,
+    0xE6AD, 0xA647,
+    0xE6AE, 0xA648,
+    0xE6AF, 0xA649,
+    0xE6B0, 0xA64A,
+    0xE6B1, 0xA64B,
+    0xE6B2, 0xA64C,
+    0xE6B3, 0xA64D,
+    0xE6B4, 0xA64E,
+    0xE6B5, 0xA64F,
+    0xE6B6, 0xA650,
+    0xE6B7, 0xA651,
+    0xE6B8, 0xA652,
+    0xE6B9, 0xA653,
+    0xE6BA, 0xA654,
+    0xE6BB, 0xA655,
+    0xE6BC, 0xA656,
+    0xE6BD, 0xA657,
+    0xE6BE, 0xA658,
+    0xE6BF, 0xA659,
+    0xE6C0, 0xA65A,
+    0xE6C1, 0xA65B,
+    0xE6C2, 0xA65C,
+    0xE6C3, 0xA65D,
+    0xE6C4, 0xA65E,
+    0xE6C5, 0xA65F,
+    0xE6C6, 0xA660,
+    0xE6C7, 0xA661,
+    0xE6C8, 0xA662,
+    0xE6C9, 0xA663,
+    0xE6CA, 0xA664,
+    0xE6CB, 0xA665,
+    0xE6CC, 0xA666,
+    0xE6CD, 0xA667,
+    0xE6CE, 0xA668,
+    0xE6CF, 0xA669,
+    0xE6D0, 0xA66A,
+    0xE6D1, 0xA66B,
+    0xE6D2, 0xA66C,
+    0xE6D3, 0xA66D,
+    0xE6D4, 0xA66E,
+    0xE6D5, 0xA66F,
+    0xE6D6, 0xA670,
+    0xE6D7, 0xA671,
+    0xE6D8, 0xA672,
+    0xE6D9, 0xA673,
+    0xE6DA, 0xA674,
+    0xE6DB, 0xA675,
+    0xE6DC, 0xA676,
+    0xE6DD, 0xA677,
+    0xE6DE, 0xA678,
+    0xE6DF, 0xA679,
+    0xE6E0, 0xA67A,
+    0xE6E1, 0xA67B,
+    0xE6E2, 0xA67C,
+    0xE6E3, 0xA67D,
+    0xE6E4, 0xA67E,
+    0xE6E5, 0xA680,
+    0xE6E6, 0xA681,
+    0xE6E7, 0xA682,
+    0xE6E8, 0xA683,
+    0xE6E9, 0xA684,
+    0xE6EA, 0xA685,
+    0xE6EB, 0xA686,
+    0xE6EC, 0xA687,
+    0xE6ED, 0xA688,
+    0xE6EE, 0xA689,
+    0xE6EF, 0xA68A,
+    0xE6F0, 0xA68B,
+    0xE6F1, 0xA68C,
+    0xE6F2, 0xA68D,
+    0xE6F3, 0xA68E,
+    0xE6F4, 0xA68F,
+    0xE6F5, 0xA690,
+    0xE6F6, 0xA691,
+    0xE6F7, 0xA692,
+    0xE6F8, 0xA693,
+    0xE6F9, 0xA694,
+    0xE6FA, 0xA695,
+    0xE6FB, 0xA696,
+    0xE6FC, 0xA697,
+    0xE6FD, 0xA698,
+    0xE6FE, 0xA699,
+    0xE6FF, 0xA69A,
+    0xE700, 0xA69B,
+    0xE701, 0xA69C,
+    0xE702, 0xA69D,
+    0xE703, 0xA69E,
+    0xE704, 0xA69F,
+    0xE705, 0xA6A0,
+    0xE706, 0xA740,
+    0xE707, 0xA741,
+    0xE708, 0xA742,
+    0xE709, 0xA743,
+    0xE70A, 0xA744,
+    0xE70B, 0xA745,
+    0xE70C, 0xA746,
+    0xE70D, 0xA747,
+    0xE70E, 0xA748,
+    0xE70F, 0xA749,
+    0xE710, 0xA74A,
+    0xE711, 0xA74B,
+    0xE712, 0xA74C,
+    0xE713, 0xA74D,
+    0xE714, 0xA74E,
+    0xE715, 0xA74F,
+    0xE716, 0xA750,
+    0xE717, 0xA751,
+    0xE718, 0xA752,
+    0xE719, 0xA753,
+    0xE71A, 0xA754,
+    0xE71B, 0xA755,
+    0xE71C, 0xA756,
+    0xE71D, 0xA757,
+    0xE71E, 0xA758,
+    0xE71F, 0xA759,
+    0xE720, 0xA75A,
+    0xE721, 0xA75B,
+    0xE722, 0xA75C,
+    0xE723, 0xA75D,
+    0xE724, 0xA75E,
+    0xE725, 0xA75F,
+    0xE726, 0xA760,
+    0xE727, 0xA761,
+    0xE728, 0xA762,
+    0xE729, 0xA763,
+    0xE72A, 0xA764,
+    0xE72B, 0xA765,
+    0xE72C, 0xA766,
+    0xE72D, 0xA767,
+    0xE72E, 0xA768,
+    0xE72F, 0xA769,
+    0xE730, 0xA76A,
+    0xE731, 0xA76B,
+    0xE732, 0xA76C,
+    0xE733, 0xA76D,
+    0xE734, 0xA76E,
+    0xE735, 0xA76F,
+    0xE736, 0xA770,
+    0xE737, 0xA771,
+    0xE738, 0xA772,
+    0xE739, 0xA773,
+    0xE73A, 0xA774,
+    0xE73B, 0xA775,
+    0xE73C, 0xA776,
+    0xE73D, 0xA777,
+    0xE73E, 0xA778,
+    0xE73F, 0xA779,
+    0xE740, 0xA77A,
+    0xE741, 0xA77B,
+    0xE742, 0xA77C,
+    0xE743, 0xA77D,
+    0xE744, 0xA77E,
+    0xE745, 0xA780,
+    0xE746, 0xA781,
+    0xE747, 0xA782,
+    0xE748, 0xA783,
+    0xE749, 0xA784,
+    0xE74A, 0xA785,
+    0xE74B, 0xA786,
+    0xE74C, 0xA787,
+    0xE74D, 0xA788,
+    0xE74E, 0xA789,
+    0xE74F, 0xA78A,
+    0xE750, 0xA78B,
+    0xE751, 0xA78C,
+    0xE752, 0xA78D,
+    0xE753, 0xA78E,
+    0xE754, 0xA78F,
+    0xE755, 0xA790,
+    0xE756, 0xA791,
+    0xE757, 0xA792,
+    0xE758, 0xA793,
+    0xE759, 0xA794,
+    0xE75A, 0xA795,
+    0xE75B, 0xA796,
+    0xE75C, 0xA797,
+    0xE75D, 0xA798,
+    0xE75E, 0xA799,
+    0xE75F, 0xA79A,
+    0xE760, 0xA79B,
+    0xE761, 0xA79C,
+    0xE762, 0xA79D,
+    0xE763, 0xA79E,
+    0xE764, 0xA79F,
+    0xE765, 0xA7A0,
+    0xE766, 0xA2AB,
+    0xE767, 0xA2AC,
+    0xE768, 0xA2AD,
+    0xE769, 0xA2AE,
+    0xE76A, 0xA2AF,
+    0xE76B, 0xA2B0,
+    0xE76D, 0xA2E4,
+    0xE76E, 0xA2EF,
+    0xE76F, 0xA2F0,
+    0xE770, 0xA2FD,
+    0xE771, 0xA2FE,
+    0xE772, 0xA4F4,
+    0xE773, 0xA4F5,
+    0xE774, 0xA4F6,
+    0xE775, 0xA4F7,
+    0xE776, 0xA4F8,
+    0xE777, 0xA4F9,
+    0xE778, 0xA4FA,
+    0xE779, 0xA4FB,
+    0xE77A, 0xA4FC,
+    0xE77B, 0xA4FD,
+    0xE77C, 0xA4FE,
+    0xE77D, 0xA5F7,
+    0xE77E, 0xA5F8,
+    0xE77F, 0xA5F9,
+    0xE780, 0xA5FA,
+    0xE781, 0xA5FB,
+    0xE782, 0xA5FC,
+    0xE783, 0xA5FD,
+    0xE784, 0xA5FE,
+    0xE785, 0xA6B9,
+    0xE786, 0xA6BA,
+    0xE787, 0xA6BB,
+    0xE788, 0xA6BC,
+    0xE789, 0xA6BD,
+    0xE78A, 0xA6BE,
+    0xE78B, 0xA6BF,
+    0xE78C, 0xA6C0,
+    0xE78D, 0xA6D9,
+    0xE78E, 0xA6DA,
+    0xE78F, 0xA6DB,
+    0xE790, 0xA6DC,
+    0xE791, 0xA6DD,
+    0xE792, 0xA6DE,
+    0xE793, 0xA6DF,
+    0xE794, 0xA6EC,
+    0xE795, 0xA6ED,
+    0xE796, 0xA6F3,
+    0xE797, 0xA6F6,
+    0xE798, 0xA6F7,
+    0xE799, 0xA6F8,
+    0xE79A, 0xA6F9,
+    0xE79B, 0xA6FA,
+    0xE79C, 0xA6FB,
+    0xE79D, 0xA6FC,
+    0xE79E, 0xA6FD,
+    0xE79F, 0xA6FE,
+    0xE7A0, 0xA7C2,
+    0xE7A1, 0xA7C3,
+    0xE7A2, 0xA7C4,
+    0xE7A3, 0xA7C5,
+    0xE7A4, 0xA7C6,
+    0xE7A5, 0xA7C7,
+    0xE7A6, 0xA7C8,
+    0xE7A7, 0xA7C9,
+    0xE7A8, 0xA7CA,
+    0xE7A9, 0xA7CB,
+    0xE7AA, 0xA7CC,
+    0xE7AB, 0xA7CD,
+    0xE7AC, 0xA7CE,
+    0xE7AD, 0xA7CF,
+    0xE7AE, 0xA7D0,
+    0xE7AF, 0xA7F2,
+    0xE7B0, 0xA7F3,
+    0xE7B1, 0xA7F4,
+    0xE7B2, 0xA7F5,
+    0xE7B3, 0xA7F6,
+    0xE7B4, 0xA7F7,
+    0xE7B5, 0xA7F8,
+    0xE7B6, 0xA7F9,
+    0xE7B7, 0xA7FA,
+    0xE7B8, 0xA7FB,
+    0xE7B9, 0xA7FC,
+    0xE7BA, 0xA7FD,
+    0xE7BB, 0xA7FE,
+    0xE7BC, 0xA896,
+    0xE7BD, 0xA897,
+    0xE7BE, 0xA898,
+    0xE7BF, 0xA899,
+    0xE7C0, 0xA89A,
+    0xE7C1, 0xA89B,
+    0xE7C2, 0xA89C,
+    0xE7C3, 0xA89D,
+    0xE7C4, 0xA89E,
+    0xE7C5, 0xA89F,
+    0xE7C6, 0xA8A0,
+    0xE7C7, 0xA8BC,
+    0xE7C9, 0xA8C1,
+    0xE7CA, 0xA8C2,
+    0xE7CB, 0xA8C3,
+    0xE7CC, 0xA8C4,
+    0xE7CD, 0xA8EA,
+    0xE7CE, 0xA8EB,
+    0xE7CF, 0xA8EC,
+    0xE7D0, 0xA8ED,
+    0xE7D1, 0xA8EE,
+    0xE7D2, 0xA8EF,
+    0xE7D3, 0xA8F0,
+    0xE7D4, 0xA8F1,
+    0xE7D5, 0xA8F2,
+    0xE7D6, 0xA8F3,
+    0xE7D7, 0xA8F4,
+    0xE7D8, 0xA8F5,
+    0xE7D9, 0xA8F6,
+    0xE7DA, 0xA8F7,
+    0xE7DB, 0xA8F8,
+    0xE7DC, 0xA8F9,
+    0xE7DD, 0xA8FA,
+    0xE7DE, 0xA8FB,
+    0xE7DF, 0xA8FC,
+    0xE7E0, 0xA8FD,
+    0xE7E1, 0xA8FE,
+    0xE7E2, 0xA958,
+    0xE7E3, 0xA95B,
+    0xE7E4, 0xA95D,
+    0xE7E5, 0xA95E,
+    0xE7E6, 0xA95F,
+    0xE7F4, 0xA997,
+    0xE7F5, 0xA998,
+    0xE7F6, 0xA999,
+    0xE7F7, 0xA99A,
+    0xE7F8, 0xA99B,
+    0xE7F9, 0xA99C,
+    0xE7FA, 0xA99D,
+    0xE7FB, 0xA99E,
+    0xE7FC, 0xA99F,
+    0xE7FD, 0xA9A0,
+    0xE7FE, 0xA9A1,
+    0xE7FF, 0xA9A2,
+    0xE800, 0xA9A3,
+    0xE801, 0xA9F0,
+    0xE802, 0xA9F1,
+    0xE803, 0xA9F2,
+    0xE804, 0xA9F3,
+    0xE805, 0xA9F4,
+    0xE806, 0xA9F5,
+    0xE807, 0xA9F6,
+    0xE808, 0xA9F7,
+    0xE809, 0xA9F8,
+    0xE80A, 0xA9F9,
+    0xE80B, 0xA9FA,
+    0xE80C, 0xA9FB,
+    0xE80D, 0xA9FC,
+    0xE80E, 0xA9FD,
+    0xE80F, 0xA9FE,
+    0xE810, 0xD7FA,
+    0xE811, 0xD7FB,
+    0xE812, 0xD7FC,
+    0xE813, 0xD7FD,
+    0xE814, 0xD7FE,
+    0xE816, 0xFE51,
+    0xE817, 0xFE52,
+    0xE818, 0xFE53,
+    0xE81E, 0xFE59,
+    0xE826, 0xFE61,
+    0xE82B, 0xFE66,
+    0xE82C, 0xFE67,
+    0xE831, 0xFE6C,
+    0xE832, 0xFE6D,
+    0xE83B, 0xFE76,
+    0xE843, 0xFE7E,
+    0xE854, 0xFE90,
+    0xE855, 0xFE91,
+    0xE864, 0xFEA0,
+    0xF92C, 0xFD9C,
+    0xF979, 0xFD9D,
+    0xF995, 0xFD9E,
+    0xF9E7, 0xFD9F,
+    0xF9F1, 0xFDA0,
+    0xFA0C, 0xFE40,
+    0xFA0D, 0xFE41,
+    0xFA0E, 0xFE42,
+    0xFA0F, 0xFE43,
+    0xFA11, 0xFE44,
+    0xFA13, 0xFE45,
+    0xFA14, 0xFE46,
+    0xFA18, 0xFE47,
+    0xFA1F, 0xFE48,
+    0xFA20, 0xFE49,
+    0xFA21, 0xFE4A,
+    0xFA23, 0xFE4B,
+    0xFA24, 0xFE4C,
+    0xFA27, 0xFE4D,
+    0xFA28, 0xFE4E,
+    0xFA29, 0xFE4F,
+    0xFE30, 0xA955,
+    0xFE31, 0xA6F2,
+    0xFE33, 0xA6F4,
+    0xFE34, 0xA6F5,
+    0xFE35, 0xA6E0,
+    0xFE36, 0xA6E1,
+    0xFE37, 0xA6F0,
+    0xFE38, 0xA6F1,
+    0xFE39, 0xA6E2,
+    0xFE3A, 0xA6E3,
+    0xFE3B, 0xA6EE,
+    0xFE3C, 0xA6EF,
+    0xFE3D, 0xA6E6,
+    0xFE3E, 0xA6E7,
+    0xFE3F, 0xA6E4,
+    0xFE40, 0xA6E5,
+    0xFE41, 0xA6E8,
+    0xFE42, 0xA6E9,
+    0xFE43, 0xA6EA,
+    0xFE44, 0xA6EB,
+    0xFE49, 0xA968,
+    0xFE4A, 0xA969,
+    0xFE4B, 0xA96A,
+    0xFE4C, 0xA96B,
+    0xFE4D, 0xA96C,
+    0xFE4E, 0xA96D,
+    0xFE4F, 0xA96E,
+    0xFE50, 0xA96F,
+    0xFE51, 0xA970,
+    0xFE52, 0xA971,
+    0xFE54, 0xA972,
+    0xFE55, 0xA973,
+    0xFE56, 0xA974,
+    0xFE57, 0xA975,
+    0xFE59, 0xA976,
+    0xFE5A, 0xA977,
+    0xFE5B, 0xA978,
+    0xFE5C, 0xA979,
+    0xFE5D, 0xA97A,
+    0xFE5E, 0xA97B,
+    0xFE5F, 0xA97C,
+    0xFE60, 0xA97D,
+    0xFE61, 0xA97E,
+    0xFE62, 0xA980,
+    0xFE63, 0xA981,
+    0xFE64, 0xA982,
+    0xFE65, 0xA983,
+    0xFE66, 0xA984,
+    0xFE68, 0xA985,
+    0xFE69, 0xA986,
+    0xFE6A, 0xA987,
+    0xFE6B, 0xA988,
+    0xFFE2, 0xA956,
+    0xFFE4, 0xA957
+};
 
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
-INTERNAL int gb18030_wctomb_zint(unsigned int* r1, unsigned int* r2, unsigned int wc);
-INTERNAL int gb18030_utf8tomb(struct zint_symbol *symbol, const unsigned char source[], size_t* p_length, unsigned int* gbdata);
-INTERNAL int gb18030_utf8tosb(int eci, const unsigned char source[], size_t* p_length, unsigned int* gbdata, int full_multibyte);
-INTERNAL void gb18030_cpy(const unsigned char source[], size_t* p_length, unsigned int* gbdata, int full_multibyte);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* GB18030_H */
+static const unsigned short int gb18030_fourbyte_lookup[] = {
+    0x0080, 0x8130, 0x8130,
+    0x0081, 0x8130, 0x8131,
+    0x0082, 0x8130, 0x8132,
+    0x0083, 0x8130, 0x8133,
+    0x0084, 0x8130, 0x8134,
+    0x0085, 0x8130, 0x8135,
+    0x0086, 0x8130, 0x8136,
+    0x0087, 0x8130, 0x8137,
+    0x0088, 0x8130, 0x8138,
+    0x0089, 0x8130, 0x8139,
+    0x008A, 0x8130, 0x8230,
+    0x008B, 0x8130, 0x8231,
+    0x008C, 0x8130, 0x8232,
+    0x008D, 0x8130, 0x8233,
+    0x008E, 0x8130, 0x8234,
+    0x008F, 0x8130, 0x8235,
+    0x0090, 0x8130, 0x8236,
+    0x0091, 0x8130, 0x8237,
+    0x0092, 0x8130, 0x8238,
+    0x0093, 0x8130, 0x8239,
+    0x0094, 0x8130, 0x8330,
+    0x0095, 0x8130, 0x8331,
+    0x0096, 0x8130, 0x8332,
+    0x0097, 0x8130, 0x8333,
+    0x0098, 0x8130, 0x8334,
+    0x0099, 0x8130, 0x8335,
+    0x009A, 0x8130, 0x8336,
+    0x009B, 0x8130, 0x8337,
+    0x009C, 0x8130, 0x8338,
+    0x009D, 0x8130, 0x8339,
+    0x009E, 0x8130, 0x8430,
+    0x009F, 0x8130, 0x8431,
+    0x00A0, 0x8130, 0x8432,
+    0x00A1, 0x8130, 0x8433,
+    0x00A2, 0x8130, 0x8434,
+    0x00A3, 0x8130, 0x8435,
+    0x00A5, 0x8130, 0x8436,
+    0x00A6, 0x8130, 0x8437,
+    0x00A9, 0x8130, 0x8438,
+    0x00AA, 0x8130, 0x8439,
+    0x00AB, 0x8130, 0x8530,
+    0x00AC, 0x8130, 0x8531,
+    0x00AD, 0x8130, 0x8532,
+    0x00AE, 0x8130, 0x8533,
+    0x00AF, 0x8130, 0x8534,
+    0x00B2, 0x8130, 0x8535,
+    0x00B3, 0x8130, 0x8536,
+    0x00B4, 0x8130, 0x8537,
+    0x00B5, 0x8130, 0x8538,
+    0x00B6, 0x8130, 0x8539,
+    0x00B8, 0x8130, 0x8630,
+    0x00B9, 0x8130, 0x8631,
+    0x00BA, 0x8130, 0x8632,
+    0x00BB, 0x8130, 0x8633,
+    0x00BC, 0x8130, 0x8634,
+    0x00BD, 0x8130, 0x8635,
+    0x00BE, 0x8130, 0x8636,
+    0x00BF, 0x8130, 0x8637,
+    0x00C0, 0x8130, 0x8638,
+    0x00C1, 0x8130, 0x8639,
+    0x00C2, 0x8130, 0x8730,
+    0x00C3, 0x8130, 0x8731,
+    0x00C4, 0x8130, 0x8732,
+    0x00C5, 0x8130, 0x8733,
+    0x00C6, 0x8130, 0x8734,
+    0x00C7, 0x8130, 0x8735,
+    0x00C8, 0x8130, 0x8736,
+    0x00C9, 0x8130, 0x8737,
+    0x00CA, 0x8130, 0x8738,
+    0x00CB, 0x8130, 0x8739,
+    0x00CC, 0x8130, 0x8830,
+    0x00CD, 0x8130, 0x8831,
+    0x00CE, 0x8130, 0x8832,
+    0x00CF, 0x8130, 0x8833,
+    0x00D0, 0x8130, 0x8834,
+    0x00D1, 0x8130, 0x8835,
+    0x00D2, 0x8130, 0x8836,
+    0x00D3, 0x8130, 0x8837,
+    0x00D4, 0x8130, 0x8838,
+    0x00D5, 0x8130, 0x8839,
+    0x00D6, 0x8130, 0x8930,
+    0x00D8, 0x8130, 0x8931,
+    0x00D9, 0x8130, 0x8932,
+    0x00DA, 0x8130, 0x8933,
+    0x00DB, 0x8130, 0x8934,
+    0x00DC, 0x8130, 0x8935,
+    0x00DD, 0x8130, 0x8936,
+    0x00DE, 0x8130, 0x8937,
+    0x00DF, 0x8130, 0x8938,
+    0x00E2, 0x8130, 0x8939,
+    0x00E3, 0x8130, 0x8A30,
+    0x00E4, 0x8130, 0x8A31,
+    0x00E5, 0x8130, 0x8A32,
+    0x00E6, 0x8130, 0x8A33,
+    0x00E7, 0x8130, 0x8A34,
+    0x00EB, 0x8130, 0x8A35,
+    0x00EE, 0x8130, 0x8A36,
+    0x00EF, 0x8130, 0x8A37,
+    0x00F0, 0x8130, 0x8A38,
+    0x00F1, 0x8130, 0x8A39,
+    0x00F4, 0x8130, 0x8B30,
+    0x00F5, 0x8130, 0x8B31,
+    0x00F6, 0x8130, 0x8B32,
+    0x00F8, 0x8130, 0x8B33,
+    0x00FB, 0x8130, 0x8B34,
+    0x00FD, 0x8130, 0x8B35,
+    0x00FE, 0x8130, 0x8B36,
+    0x00FF, 0x8130, 0x8B37,
+    0x0100, 0x8130, 0x8B38,
+    0x0102, 0x8130, 0x8B39,
+    0x0103, 0x8130, 0x8C30,
+    0x0104, 0x8130, 0x8C31,
+    0x0105, 0x8130, 0x8C32,
+    0x0106, 0x8130, 0x8C33,
+    0x0107, 0x8130, 0x8C34,
+    0x0108, 0x8130, 0x8C35,
+    0x0109, 0x8130, 0x8C36,
+    0x010A, 0x8130, 0x8C37,
+    0x010B, 0x8130, 0x8C38,
+    0x010C, 0x8130, 0x8C39,
+    0x010D, 0x8130, 0x8D30,
+    0x010E, 0x8130, 0x8D31,
+    0x010F, 0x8130, 0x8D32,
+    0x0110, 0x8130, 0x8D33,
+    0x0111, 0x8130, 0x8D34,
+    0x0112, 0x8130, 0x8D35,
+    0x0114, 0x8130, 0x8D36,
+    0x0115, 0x8130, 0x8D37,
+    0x0116, 0x8130, 0x8D38,
+    0x0117, 0x8130, 0x8D39,
+    0x0118, 0x8130, 0x8E30,
+    0x0119, 0x8130, 0x8E31,
+    0x011A, 0x8130, 0x8E32,
+    0x011C, 0x8130, 0x8E33,
+    0x011D, 0x8130, 0x8E34,
+    0x011E, 0x8130, 0x8E35,
+    0x011F, 0x8130, 0x8E36,
+    0x0120, 0x8130, 0x8E37,
+    0x0121, 0x8130, 0x8E38,
+    0x0122, 0x8130, 0x8E39,
+    0x0123, 0x8130, 0x8F30,
+    0x0124, 0x8130, 0x8F31,
+    0x0125, 0x8130, 0x8F32,
+    0x0126, 0x8130, 0x8F33,
+    0x0127, 0x8130, 0x8F34,
+    0x0128, 0x8130, 0x8F35,
+    0x0129, 0x8130, 0x8F36,
+    0x012A, 0x8130, 0x8F37,
+    0x012C, 0x8130, 0x8F38,
+    0x012D, 0x8130, 0x8F39,
+    0x012E, 0x8130, 0x9030,
+    0x012F, 0x8130, 0x9031,
+    0x0130, 0x8130, 0x9032,
+    0x0131, 0x8130, 0x9033,
+    0x0132, 0x8130, 0x9034,
+    0x0133, 0x8130, 0x9035,
+    0x0134, 0x8130, 0x9036,
+    0x0135, 0x8130, 0x9037,
+    0x0136, 0x8130, 0x9038,
+    0x0137, 0x8130, 0x9039,
+    0x0138, 0x8130, 0x9130,
+    0x0139, 0x8130, 0x9131,
+    0x013A, 0x8130, 0x9132,
+    0x013B, 0x8130, 0x9133,
+    0x013C, 0x8130, 0x9134,
+    0x013D, 0x8130, 0x9135,
+    0x013E, 0x8130, 0x9136,
+    0x013F, 0x8130, 0x9137,
+    0x0140, 0x8130, 0x9138,
+    0x0141, 0x8130, 0x9139,
+    0x0142, 0x8130, 0x9230,
+    0x0143, 0x8130, 0x9231,
+    0x0145, 0x8130, 0x9232,
+    0x0146, 0x8130, 0x9233,
+    0x0147, 0x8130, 0x9234,
+    0x0149, 0x8130, 0x9235,
+    0x014A, 0x8130, 0x9236,
+    0x014B, 0x8130, 0x9237,
+    0x014C, 0x8130, 0x9238,
+    0x014E, 0x8130, 0x9239,
+    0x014F, 0x8130, 0x9330,
+    0x0150, 0x8130, 0x9331,
+    0x0151, 0x8130, 0x9332,
+    0x0152, 0x8130, 0x9333,
+    0x0153, 0x8130, 0x9334,
+    0x0154, 0x8130, 0x9335,
+    0x0155, 0x8130, 0x9336,
+    0x0156, 0x8130, 0x9337,
+    0x0157, 0x8130, 0x9338,
+    0x0158, 0x8130, 0x9339,
+    0x0159, 0x8130, 0x9430,
+    0x015A, 0x8130, 0x9431,
+    0x015B, 0x8130, 0x9432,
+    0x015C, 0x8130, 0x9433,
+    0x015D, 0x8130, 0x9434,
+    0x015E, 0x8130, 0x9435,
+    0x015F, 0x8130, 0x9436,
+    0x0160, 0x8130, 0x9437,
+    0x0161, 0x8130, 0x9438,
+    0x0162, 0x8130, 0x9439,
+    0x0163, 0x8130, 0x9530,
+    0x0164, 0x8130, 0x9531,
+    0x0165, 0x8130, 0x9532,
+    0x0166, 0x8130, 0x9533,
+    0x0167, 0x8130, 0x9534,
+    0x0168, 0x8130, 0x9535,
+    0x0169, 0x8130, 0x9536,
+    0x016A, 0x8130, 0x9537,
+    0x016C, 0x8130, 0x9538,
+    0x016D, 0x8130, 0x9539,
+    0x016E, 0x8130, 0x9630,
+    0x016F, 0x8130, 0x9631,
+    0x0170, 0x8130, 0x9632,
+    0x0171, 0x8130, 0x9633,
+    0x0172, 0x8130, 0x9634,
+    0x0173, 0x8130, 0x9635,
+    0x0174, 0x8130, 0x9636,
+    0x0175, 0x8130, 0x9637,
+    0x0176, 0x8130, 0x9638,
+    0x0177, 0x8130, 0x9639,
+    0x0178, 0x8130, 0x9730,
+    0x0179, 0x8130, 0x9731,
+    0x017A, 0x8130, 0x9732,
+    0x017B, 0x8130, 0x9733,
+    0x017C, 0x8130, 0x9734,
+    0x017D, 0x8130, 0x9735,
+    0x017E, 0x8130, 0x9736,
+    0x017F, 0x8130, 0x9737,
+    0x0180, 0x8130, 0x9738,
+    0x0181, 0x8130, 0x9739,
+    0x0182, 0x8130, 0x9830,
+    0x0183, 0x8130, 0x9831,
+    0x0184, 0x8130, 0x9832,
+    0x0185, 0x8130, 0x9833,
+    0x0186, 0x8130, 0x9834,
+    0x0187, 0x8130, 0x9835,
+    0x0188, 0x8130, 0x9836,
+    0x0189, 0x8130, 0x9837,
+    0x018A, 0x8130, 0x9838,
+    0x018B, 0x8130, 0x9839,
+    0x018C, 0x8130, 0x9930,
+    0x018D, 0x8130, 0x9931,
+    0x018E, 0x8130, 0x9932,
+    0x018F, 0x8130, 0x9933,
+    0x0190, 0x8130, 0x9934,
+    0x0191, 0x8130, 0x9935,
+    0x0192, 0x8130, 0x9936,
+    0x0193, 0x8130, 0x9937,
+    0x0194, 0x8130, 0x9938,
+    0x0195, 0x8130, 0x9939,
+    0x0196, 0x8130, 0x9A30,
+    0x0197, 0x8130, 0x9A31,
+    0x0198, 0x8130, 0x9A32,
+    0x0199, 0x8130, 0x9A33,
+    0x019A, 0x8130, 0x9A34,
+    0x019B, 0x8130, 0x9A35,
+    0x019C, 0x8130, 0x9A36,
+    0x019D, 0x8130, 0x9A37,
+    0x019E, 0x8130, 0x9A38,
+    0x019F, 0x8130, 0x9A39,
+    0x01A0, 0x8130, 0x9B30,
+    0x01A1, 0x8130, 0x9B31,
+    0x01A2, 0x8130, 0x9B32,
+    0x01A3, 0x8130, 0x9B33,
+    0x01A4, 0x8130, 0x9B34,
+    0x01A5, 0x8130, 0x9B35,
+    0x01A6, 0x8130, 0x9B36,
+    0x01A7, 0x8130, 0x9B37,
+    0x01A8, 0x8130, 0x9B38,
+    0x01A9, 0x8130, 0x9B39,
+    0x01AA, 0x8130, 0x9C30,
+    0x01AB, 0x8130, 0x9C31,
+    0x01AC, 0x8130, 0x9C32,
+    0x01AD, 0x8130, 0x9C33,
+    0x01AE, 0x8130, 0x9C34,
+    0x01AF, 0x8130, 0x9C35,
+    0x01B0, 0x8130, 0x9C36,
+    0x01B1, 0x8130, 0x9C37,
+    0x01B2, 0x8130, 0x9C38,
+    0x01B3, 0x8130, 0x9C39,
+    0x01B4, 0x8130, 0x9D30,
+    0x01B5, 0x8130, 0x9D31,
+    0x01B6, 0x8130, 0x9D32,
+    0x01B7, 0x8130, 0x9D33,
+    0x01B8, 0x8130, 0x9D34,
+    0x01B9, 0x8130, 0x9D35,
+    0x01BA, 0x8130, 0x9D36,
+    0x01BB, 0x8130, 0x9D37,
+    0x01BC, 0x8130, 0x9D38,
+    0x01BD, 0x8130, 0x9D39,
+    0x01BE, 0x8130, 0x9E30,
+    0x01BF, 0x8130, 0x9E31,
+    0x01C0, 0x8130, 0x9E32,
+    0x01C1, 0x8130, 0x9E33,
+    0x01C2, 0x8130, 0x9E34,
+    0x01C3, 0x8130, 0x9E35,
+    0x01C4, 0x8130, 0x9E36,
+    0x01C5, 0x8130, 0x9E37,
+    0x01C6, 0x8130, 0x9E38,
+    0x01C7, 0x8130, 0x9E39,
+    0x01C8, 0x8130, 0x9F30,
+    0x01C9, 0x8130, 0x9F31,
+    0x01CA, 0x8130, 0x9F32,
+    0x01CB, 0x8130, 0x9F33,
+    0x01CC, 0x8130, 0x9F34,
+    0x01CD, 0x8130, 0x9F35,
+    0x01CF, 0x8130, 0x9F36,
+    0x01D1, 0x8130, 0x9F37,
+    0x01D3, 0x8130, 0x9F38,
+    0x01D5, 0x8130, 0x9F39,
+    0x01D7, 0x8130, 0xA030,
+    0x01D9, 0x8130, 0xA031,
+    0x01DB, 0x8130, 0xA032,
+    0x01DD, 0x8130, 0xA033,
+    0x01DE, 0x8130, 0xA034,
+    0x01DF, 0x8130, 0xA035,
+    0x01E0, 0x8130, 0xA036,
+    0x01E1, 0x8130, 0xA037,
+    0x01E2, 0x8130, 0xA038,
+    0x01E3, 0x8130, 0xA039,
+    0x01E4, 0x8130, 0xA130,
+    0x01E5, 0x8130, 0xA131,
+    0x01E6, 0x8130, 0xA132,
+    0x01E7, 0x8130, 0xA133,
+    0x01E8, 0x8130, 0xA134,
+    0x01E9, 0x8130, 0xA135,
+    0x01EA, 0x8130, 0xA136,
+    0x01EB, 0x8130, 0xA137,
+    0x01EC, 0x8130, 0xA138,
+    0x01ED, 0x8130, 0xA139,
+    0x01EE, 0x8130, 0xA230,
+    0x01EF, 0x8130, 0xA231,
+    0x01F0, 0x8130, 0xA232,
+    0x01F1, 0x8130, 0xA233,
+    0x01F2, 0x8130, 0xA234,
+    0x01F3, 0x8130, 0xA235,
+    0x01F4, 0x8130, 0xA236,
+    0x01F5, 0x8130, 0xA237,
+    0x01F6, 0x8130, 0xA238,
+    0x01F7, 0x8130, 0xA239,
+    0x01F8, 0x8130, 0xA330,
+    0x01FA, 0x8130, 0xA331,
+    0x01FB, 0x8130, 0xA332,
+    0x01FC, 0x8130, 0xA333,
+    0x01FD, 0x8130, 0xA334,
+    0x01FE, 0x8130, 0xA335,
+    0x01FF, 0x8130, 0xA336,
+    0x0200, 0x8130, 0xA337,
+    0x0201, 0x8130, 0xA338,
+    0x0202, 0x8130, 0xA339,
+    0x0203, 0x8130, 0xA430,
+    0x0204, 0x8130, 0xA431,
+    0x0205, 0x8130, 0xA432,
+    0x0206, 0x8130, 0xA433,
+    0x0207, 0x8130, 0xA434,
+    0x0208, 0x8130, 0xA435,
+    0x0209, 0x8130, 0xA436,
+    0x020A, 0x8130, 0xA437,
+    0x020B, 0x8130, 0xA438,
+    0x020C, 0x8130, 0xA439,
+    0x020D, 0x8130, 0xA530,
+    0x020E, 0x8130, 0xA531,
+    0x020F, 0x8130, 0xA532,
+    0x0210, 0x8130, 0xA533,
+    0x0211, 0x8130, 0xA534,
+    0x0212, 0x8130, 0xA535,
+    0x0213, 0x8130, 0xA536,
+    0x0214, 0x8130, 0xA537,
+    0x0215, 0x8130, 0xA538,
+    0x0216, 0x8130, 0xA539,
+    0x0217, 0x8130, 0xA630,
+    0x0218, 0x8130, 0xA631,
+    0x0219, 0x8130, 0xA632,
+    0x021A, 0x8130, 0xA633,
+    0x021B, 0x8130, 0xA634,
+    0x021C, 0x8130, 0xA635,
+    0x021D, 0x8130, 0xA636,
+    0x021E, 0x8130, 0xA637,
+    0x021F, 0x8130, 0xA638,
+    0x0220, 0x8130, 0xA639,
+    0x0221, 0x8130, 0xA730,
+    0x0222, 0x8130, 0xA731,
+    0x0223, 0x8130, 0xA732,
+    0x0224, 0x8130, 0xA733,
+    0x0225, 0x8130, 0xA734,
+    0x0226, 0x8130, 0xA735,
+    0x0227, 0x8130, 0xA736,
+    0x0228, 0x8130, 0xA737,
+    0x0229, 0x8130, 0xA738,
+    0x022A, 0x8130, 0xA739,
+    0x022B, 0x8130, 0xA830,
+    0x022C, 0x8130, 0xA831,
+    0x022D, 0x8130, 0xA832,
+    0x022E, 0x8130, 0xA833,
+    0x022F, 0x8130, 0xA834,
+    0x0230, 0x8130, 0xA835,
+    0x0231, 0x8130, 0xA836,
+    0x0232, 0x8130, 0xA837,
+    0x0233, 0x8130, 0xA838,
+    0x0234, 0x8130, 0xA839,
+    0x0235, 0x8130, 0xA930,
+    0x0236, 0x8130, 0xA931,
+    0x0237, 0x8130, 0xA932,
+    0x0238, 0x8130, 0xA933,
+    0x0239, 0x8130, 0xA934,
+    0x023A, 0x8130, 0xA935,
+    0x023B, 0x8130, 0xA936,
+    0x023C, 0x8130, 0xA937,
+    0x023D, 0x8130, 0xA938,
+    0x023E, 0x8130, 0xA939,
+    0x023F, 0x8130, 0xAA30,
+    0x0240, 0x8130, 0xAA31,
+    0x0241, 0x8130, 0xAA32,
+    0x0242, 0x8130, 0xAA33,
+    0x0243, 0x8130, 0xAA34,
+    0x0244, 0x8130, 0xAA35,
+    0x0245, 0x8130, 0xAA36,
+    0x0246, 0x8130, 0xAA37,
+    0x0247, 0x8130, 0xAA38,
+    0x0248, 0x8130, 0xAA39,
+    0x0249, 0x8130, 0xAB30,
+    0x024A, 0x8130, 0xAB31,
+    0x024B, 0x8130, 0xAB32,
+    0x024C, 0x8130, 0xAB33,
+    0x024D, 0x8130, 0xAB34,
+    0x024E, 0x8130, 0xAB35,
+    0x024F, 0x8130, 0xAB36,
+    0x0250, 0x8130, 0xAB37,
+    0x0252, 0x8130, 0xAB38,
+    0x0253, 0x8130, 0xAB39,
+    0x0254, 0x8130, 0xAC30,
+    0x0255, 0x8130, 0xAC31,
+    0x0256, 0x8130, 0xAC32,
+    0x0257, 0x8130, 0xAC33,
+    0x0258, 0x8130, 0xAC34,
+    0x0259, 0x8130, 0xAC35,
+    0x025A, 0x8130, 0xAC36,
+    0x025B, 0x8130, 0xAC37,
+    0x025C, 0x8130, 0xAC38,
+    0x025D, 0x8130, 0xAC39,
+    0x025E, 0x8130, 0xAD30,
+    0x025F, 0x8130, 0xAD31,
+    0x0260, 0x8130, 0xAD32,
+    0x0262, 0x8130, 0xAD33,
+    0x0263, 0x8130, 0xAD34,
+    0x0264, 0x8130, 0xAD35,
+    0x0265, 0x8130, 0xAD36,
+    0x0266, 0x8130, 0xAD37,
+    0x0267, 0x8130, 0xAD38,
+    0x0268, 0x8130, 0xAD39,
+    0x0269, 0x8130, 0xAE30,
+    0x026A, 0x8130, 0xAE31,
+    0x026B, 0x8130, 0xAE32,
+    0x026C, 0x8130, 0xAE33,
+    0x026D, 0x8130, 0xAE34,
+    0x026E, 0x8130, 0xAE35,
+    0x026F, 0x8130, 0xAE36,
+    0x0270, 0x8130, 0xAE37,
+    0x0271, 0x8130, 0xAE38,
+    0x0272, 0x8130, 0xAE39,
+    0x0273, 0x8130, 0xAF30,
+    0x0274, 0x8130, 0xAF31,
+    0x0275, 0x8130, 0xAF32,
+    0x0276, 0x8130, 0xAF33,
+    0x0277, 0x8130, 0xAF34,
+    0x0278, 0x8130, 0xAF35,
+    0x0279, 0x8130, 0xAF36,
+    0x027A, 0x8130, 0xAF37,
+    0x027B, 0x8130, 0xAF38,
+    0x027C, 0x8130, 0xAF39,
+    0x027D, 0x8130, 0xB030,
+    0x027E, 0x8130, 0xB031,
+    0x027F, 0x8130, 0xB032,
+    0x0280, 0x8130, 0xB033,
+    0x0281, 0x8130, 0xB034,
+    0x0282, 0x8130, 0xB035,
+    0x0283, 0x8130, 0xB036,
+    0x0284, 0x8130, 0xB037,
+    0x0285, 0x8130, 0xB038,
+    0x0286, 0x8130, 0xB039,
+    0x0287, 0x8130, 0xB130,
+    0x0288, 0x8130, 0xB131,
+    0x0289, 0x8130, 0xB132,
+    0x028A, 0x8130, 0xB133,
+    0x028B, 0x8130, 0xB134,
+    0x028C, 0x8130, 0xB135,
+    0x028D, 0x8130, 0xB136,
+    0x028E, 0x8130, 0xB137,
+    0x028F, 0x8130, 0xB138,
+    0x0290, 0x8130, 0xB139,
+    0x0291, 0x8130, 0xB230,
+    0x0292, 0x8130, 0xB231,
+    0x0293, 0x8130, 0xB232,
+    0x0294, 0x8130, 0xB233,
+    0x0295, 0x8130, 0xB234,
+    0x0296, 0x8130, 0xB235,
+    0x0297, 0x8130, 0xB236,
+    0x0298, 0x8130, 0xB237,
+    0x0299, 0x8130, 0xB238,
+    0x029A, 0x8130, 0xB239,
+    0x029B, 0x8130, 0xB330,
+    0x029C, 0x8130, 0xB331,
+    0x029D, 0x8130, 0xB332,
+    0x029E, 0x8130, 0xB333,
+    0x029F, 0x8130, 0xB334,
+    0x02A0, 0x8130, 0xB335,
+    0x02A1, 0x8130, 0xB336,
+    0x02A2, 0x8130, 0xB337,
+    0x02A3, 0x8130, 0xB338,
+    0x02A4, 0x8130, 0xB339,
+    0x02A5, 0x8130, 0xB430,
+    0x02A6, 0x8130, 0xB431,
+    0x02A7, 0x8130, 0xB432,
+    0x02A8, 0x8130, 0xB433,
+    0x02A9, 0x8130, 0xB434,
+    0x02AA, 0x8130, 0xB435,
+    0x02AB, 0x8130, 0xB436,
+    0x02AC, 0x8130, 0xB437,
+    0x02AD, 0x8130, 0xB438,
+    0x02AE, 0x8130, 0xB439,
+    0x02AF, 0x8130, 0xB530,
+    0x02B0, 0x8130, 0xB531,
+    0x02B1, 0x8130, 0xB532,
+    0x02B2, 0x8130, 0xB533,
+    0x02B3, 0x8130, 0xB534,
+    0x02B4, 0x8130, 0xB535,
+    0x02B5, 0x8130, 0xB536,
+    0x02B6, 0x8130, 0xB537,
+    0x02B7, 0x8130, 0xB538,
+    0x02B8, 0x8130, 0xB539,
+    0x02B9, 0x8130, 0xB630,
+    0x02BA, 0x8130, 0xB631,
+    0x02BB, 0x8130, 0xB632,
+    0x02BC, 0x8130, 0xB633,
+    0x02BD, 0x8130, 0xB634,
+    0x02BE, 0x8130, 0xB635,
+    0x02BF, 0x8130, 0xB636,
+    0x02C0, 0x8130, 0xB637,
+    0x02C1, 0x8130, 0xB638,
+    0x02C2, 0x8130, 0xB639,
+    0x02C3, 0x8130, 0xB730,
+    0x02C4, 0x8130, 0xB731,
+    0x02C5, 0x8130, 0xB732,
+    0x02C6, 0x8130, 0xB733,
+    0x02C8, 0x8130, 0xB734,
+    0x02CC, 0x8130, 0xB735,
+    0x02CD, 0x8130, 0xB736,
+    0x02CE, 0x8130, 0xB737,
+    0x02CF, 0x8130, 0xB738,
+    0x02D0, 0x8130, 0xB739,
+    0x02D1, 0x8130, 0xB830,
+    0x02D2, 0x8130, 0xB831,
+    0x02D3, 0x8130, 0xB832,
+    0x02D4, 0x8130, 0xB833,
+    0x02D5, 0x8130, 0xB834,
+    0x02D6, 0x8130, 0xB835,
+    0x02D7, 0x8130, 0xB836,
+    0x02D8, 0x8130, 0xB837,
+    0x02DA, 0x8130, 0xB838,
+    0x02DB, 0x8130, 0xB839,
+    0x02DC, 0x8130, 0xB930,
+    0x02DD, 0x8130, 0xB931,
+    0x02DE, 0x8130, 0xB932,
+    0x02DF, 0x8130, 0xB933,
+    0x02E0, 0x8130, 0xB934,
+    0x02E1, 0x8130, 0xB935,
+    0x02E2, 0x8130, 0xB936,
+    0x02E3, 0x8130, 0xB937,
+    0x02E4, 0x8130, 0xB938,
+    0x02E5, 0x8130, 0xB939,
+    0x02E6, 0x8130, 0xBA30,
+    0x02E7, 0x8130, 0xBA31,
+    0x02E8, 0x8130, 0xBA32,
+    0x02E9, 0x8130, 0xBA33,
+    0x02EA, 0x8130, 0xBA34,
+    0x02EB, 0x8130, 0xBA35,
+    0x02EC, 0x8130, 0xBA36,
+    0x02ED, 0x8130, 0xBA37,
+    0x02EE, 0x8130, 0xBA38,
+    0x02EF, 0x8130, 0xBA39,
+    0x02F0, 0x8130, 0xBB30,
+    0x02F1, 0x8130, 0xBB31,
+    0x02F2, 0x8130, 0xBB32,
+    0x02F3, 0x8130, 0xBB33,
+    0x02F4, 0x8130, 0xBB34,
+    0x02F5, 0x8130, 0xBB35,
+    0x02F6, 0x8130, 0xBB36,
+    0x02F7, 0x8130, 0xBB37,
+    0x02F8, 0x8130, 0xBB38,
+    0x02F9, 0x8130, 0xBB39,
+    0x02FA, 0x8130, 0xBC30,
+    0x02FB, 0x8130, 0xBC31,
+    0x02FC, 0x8130, 0xBC32,
+    0x02FD, 0x8130, 0xBC33,
+    0x02FE, 0x8130, 0xBC34,
+    0x02FF, 0x8130, 0xBC35,
+    0x0300, 0x8130, 0xBC36,
+    0x0301, 0x8130, 0xBC37,
+    0x0302, 0x8130, 0xBC38,
+    0x0303, 0x8130, 0xBC39,
+    0x0304, 0x8130, 0xBD30,
+    0x0305, 0x8130, 0xBD31,
+    0x0306, 0x8130, 0xBD32,
+    0x0307, 0x8130, 0xBD33,
+    0x0308, 0x8130, 0xBD34,
+    0x0309, 0x8130, 0xBD35,
+    0x030A, 0x8130, 0xBD36,
+    0x030B, 0x8130, 0xBD37,
+    0x030C, 0x8130, 0xBD38,
+    0x030D, 0x8130, 0xBD39,
+    0x030E, 0x8130, 0xBE30,
+    0x030F, 0x8130, 0xBE31,
+    0x0310, 0x8130, 0xBE32,
+    0x0311, 0x8130, 0xBE33,
+    0x0312, 0x8130, 0xBE34,
+    0x0313, 0x8130, 0xBE35,
+    0x0314, 0x8130, 0xBE36,
+    0x0315, 0x8130, 0xBE37,
+    0x0316, 0x8130, 0xBE38,
+    0x0317, 0x8130, 0xBE39,
+    0x0318, 0x8130, 0xBF30,
+    0x0319, 0x8130, 0xBF31,
+    0x031A, 0x8130, 0xBF32,
+    0x031B, 0x8130, 0xBF33,
+    0x031C, 0x8130, 0xBF34,
+    0x031D, 0x8130, 0xBF35,
+    0x031E, 0x8130, 0xBF36,
+    0x031F, 0x8130, 0xBF37,
+    0x0320, 0x8130, 0xBF38,
+    0x0321, 0x8130, 0xBF39,
+    0x0322, 0x8130, 0xC030,
+    0x0323, 0x8130, 0xC031,
+    0x0324, 0x8130, 0xC032,
+    0x0325, 0x8130, 0xC033,
+    0x0326, 0x8130, 0xC034,
+    0x0327, 0x8130, 0xC035,
+    0x0328, 0x8130, 0xC036,
+    0x0329, 0x8130, 0xC037,
+    0x032A, 0x8130, 0xC038,
+    0x032B, 0x8130, 0xC039,
+    0x032C, 0x8130, 0xC130,
+    0x032D, 0x8130, 0xC131,
+    0x032E, 0x8130, 0xC132,
+    0x032F, 0x8130, 0xC133,
+    0x0330, 0x8130, 0xC134,
+    0x0331, 0x8130, 0xC135,
+    0x0332, 0x8130, 0xC136,
+    0x0333, 0x8130, 0xC137,
+    0x0334, 0x8130, 0xC138,
+    0x0335, 0x8130, 0xC139,
+    0x0336, 0x8130, 0xC230,
+    0x0337, 0x8130, 0xC231,
+    0x0338, 0x8130, 0xC232,
+    0x0339, 0x8130, 0xC233,
+    0x033A, 0x8130, 0xC234,
+    0x033B, 0x8130, 0xC235,
+    0x033C, 0x8130, 0xC236,
+    0x033D, 0x8130, 0xC237,
+    0x033E, 0x8130, 0xC238,
+    0x033F, 0x8130, 0xC239,
+    0x0340, 0x8130, 0xC330,
+    0x0341, 0x8130, 0xC331,
+    0x0342, 0x8130, 0xC332,
+    0x0343, 0x8130, 0xC333,
+    0x0344, 0x8130, 0xC334,
+    0x0345, 0x8130, 0xC335,
+    0x0346, 0x8130, 0xC336,
+    0x0347, 0x8130, 0xC337,
+    0x0348, 0x8130, 0xC338,
+    0x0349, 0x8130, 0xC339,
+    0x034A, 0x8130, 0xC430,
+    0x034B, 0x8130, 0xC431,
+    0x034C, 0x8130, 0xC432,
+    0x034D, 0x8130, 0xC433,
+    0x034E, 0x8130, 0xC434,
+    0x034F, 0x8130, 0xC435,
+    0x0350, 0x8130, 0xC436,
+    0x0351, 0x8130, 0xC437,
+    0x0352, 0x8130, 0xC438,
+    0x0353, 0x8130, 0xC439,
+    0x0354, 0x8130, 0xC530,
+    0x0355, 0x8130, 0xC531,
+    0x0356, 0x8130, 0xC532,
+    0x0357, 0x8130, 0xC533,
+    0x0358, 0x8130, 0xC534,
+    0x0359, 0x8130, 0xC535,
+    0x035A, 0x8130, 0xC536,
+    0x035B, 0x8130, 0xC537,
+    0x035C, 0x8130, 0xC538,
+    0x035D, 0x8130, 0xC539,
+    0x035E, 0x8130, 0xC630,
+    0x035F, 0x8130, 0xC631,
+    0x0360, 0x8130, 0xC632,
+    0x0361, 0x8130, 0xC633,
+    0x0362, 0x8130, 0xC634,
+    0x0363, 0x8130, 0xC635,
+    0x0364, 0x8130, 0xC636,
+    0x0365, 0x8130, 0xC637,
+    0x0366, 0x8130, 0xC638,
+    0x0367, 0x8130, 0xC639,
+    0x0368, 0x8130, 0xC730,
+    0x0369, 0x8130, 0xC731,
+    0x036A, 0x8130, 0xC732,
+    0x036B, 0x8130, 0xC733,
+    0x036C, 0x8130, 0xC734,
+    0x036D, 0x8130, 0xC735,
+    0x036E, 0x8130, 0xC736,
+    0x036F, 0x8130, 0xC737,
+    0x0370, 0x8130, 0xC738,
+    0x0371, 0x8130, 0xC739,
+    0x0372, 0x8130, 0xC830,
+    0x0373, 0x8130, 0xC831,
+    0x0374, 0x8130, 0xC832,
+    0x0375, 0x8130, 0xC833,
+    0x0376, 0x8130, 0xC834,
+    0x0377, 0x8130, 0xC835,
+    0x0378, 0x8130, 0xC836,
+    0x0379, 0x8130, 0xC837,
+    0x037A, 0x8130, 0xC838,
+    0x037B, 0x8130, 0xC839,
+    0x037C, 0x8130, 0xC930,
+    0x037D, 0x8130, 0xC931,
+    0x037E, 0x8130, 0xC932,
+    0x037F, 0x8130, 0xC933,
+    0x0380, 0x8130, 0xC934,
+    0x0381, 0x8130, 0xC935,
+    0x0382, 0x8130, 0xC936,
+    0x0383, 0x8130, 0xC937,
+    0x0384, 0x8130, 0xC938,
+    0x0385, 0x8130, 0xC939,
+    0x0386, 0x8130, 0xCA30,
+    0x0387, 0x8130, 0xCA31,
+    0x0388, 0x8130, 0xCA32,
+    0x0389, 0x8130, 0xCA33,
+    0x038A, 0x8130, 0xCA34,
+    0x038B, 0x8130, 0xCA35,
+    0x038C, 0x8130, 0xCA36,
+    0x038D, 0x8130, 0xCA37,
+    0x038E, 0x8130, 0xCA38,
+    0x038F, 0x8130, 0xCA39,
+    0x0390, 0x8130, 0xCB30,
+    0x03A2, 0x8130, 0xCB31,
+    0x03AA, 0x8130, 0xCB32,
+    0x03AB, 0x8130, 0xCB33,
+    0x03AC, 0x8130, 0xCB34,
+    0x03AD, 0x8130, 0xCB35,
+    0x03AE, 0x8130, 0xCB36,
+    0x03AF, 0x8130, 0xCB37,
+    0x03B0, 0x8130, 0xCB38,
+    0x03C2, 0x8130, 0xCB39,
+    0x03CA, 0x8130, 0xCC30,
+    0x03CB, 0x8130, 0xCC31,
+    0x03CC, 0x8130, 0xCC32,
+    0x03CD, 0x8130, 0xCC33,
+    0x03CE, 0x8130, 0xCC34,
+    0x03CF, 0x8130, 0xCC35,
+    0x03D0, 0x8130, 0xCC36,
+    0x03D1, 0x8130, 0xCC37,
+    0x03D2, 0x8130, 0xCC38,
+    0x03D3, 0x8130, 0xCC39,
+    0x03D4, 0x8130, 0xCD30,
+    0x03D5, 0x8130, 0xCD31,
+    0x03D6, 0x8130, 0xCD32,
+    0x03D7, 0x8130, 0xCD33,
+    0x03D8, 0x8130, 0xCD34,
+    0x03D9, 0x8130, 0xCD35,
+    0x03DA, 0x8130, 0xCD36,
+    0x03DB, 0x8130, 0xCD37,
+    0x03DC, 0x8130, 0xCD38,
+    0x03DD, 0x8130, 0xCD39,
+    0x03DE, 0x8130, 0xCE30,
+    0x03DF, 0x8130, 0xCE31,
+    0x03E0, 0x8130, 0xCE32,
+    0x03E1, 0x8130, 0xCE33,
+    0x03E2, 0x8130, 0xCE34,
+    0x03E3, 0x8130, 0xCE35,
+    0x03E4, 0x8130, 0xCE36,
+    0x03E5, 0x8130, 0xCE37,
+    0x03E6, 0x8130, 0xCE38,
+    0x03E7, 0x8130, 0xCE39,
+    0x03E8, 0x8130, 0xCF30,
+    0x03E9, 0x8130, 0xCF31,
+    0x03EA, 0x8130, 0xCF32,
+    0x03EB, 0x8130, 0xCF33,
+    0x03EC, 0x8130, 0xCF34,
+    0x03ED, 0x8130, 0xCF35,
+    0x03EE, 0x8130, 0xCF36,
+    0x03EF, 0x8130, 0xCF37,
+    0x03F0, 0x8130, 0xCF38,
+    0x03F1, 0x8130, 0xCF39,
+    0x03F2, 0x8130, 0xD030,
+    0x03F3, 0x8130, 0xD031,
+    0x03F4, 0x8130, 0xD032,
+    0x03F5, 0x8130, 0xD033,
+    0x03F6, 0x8130, 0xD034,
+    0x03F7, 0x8130, 0xD035,
+    0x03F8, 0x8130, 0xD036,
+    0x03F9, 0x8130, 0xD037,
+    0x03FA, 0x8130, 0xD038,
+    0x03FB, 0x8130, 0xD039,
+    0x03FC, 0x8130, 0xD130,
+    0x03FD, 0x8130, 0xD131,
+    0x03FE, 0x8130, 0xD132,
+    0x03FF, 0x8130, 0xD133,
+    0x0400, 0x8130, 0xD134,
+    0x0402, 0x8130, 0xD135,
+    0x0403, 0x8130, 0xD136,
+    0x0404, 0x8130, 0xD137,
+    0x0405, 0x8130, 0xD138,
+    0x0406, 0x8130, 0xD139,
+    0x0407, 0x8130, 0xD230,
+    0x0408, 0x8130, 0xD231,
+    0x0409, 0x8130, 0xD232,
+    0x040A, 0x8130, 0xD233,
+    0x040B, 0x8130, 0xD234,
+    0x040C, 0x8130, 0xD235,
+    0x040D, 0x8130, 0xD236,
+    0x040E, 0x8130, 0xD237,
+    0x040F, 0x8130, 0xD238,
+    0x0450, 0x8130, 0xD239,
+    0x2011, 0x8136, 0xA532,
+    0x2012, 0x8136, 0xA533,
+    0x2017, 0x8136, 0xA534,
+    0x201A, 0x8136, 0xA535,
+    0x201B, 0x8136, 0xA536,
+    0x201E, 0x8136, 0xA537,
+    0x201F, 0x8136, 0xA538,
+    0x2020, 0x8136, 0xA539,
+    0x2021, 0x8136, 0xA630,
+    0x2022, 0x8136, 0xA631,
+    0x2023, 0x8136, 0xA632,
+    0x2024, 0x8136, 0xA633,
+    0x2027, 0x8136, 0xA634,
+    0x2028, 0x8136, 0xA635,
+    0x2029, 0x8136, 0xA636,
+    0x202A, 0x8136, 0xA637,
+    0x202B, 0x8136, 0xA638,
+    0x202C, 0x8136, 0xA639,
+    0x202D, 0x8136, 0xA730,
+    0x202E, 0x8136, 0xA731,
+    0x202F, 0x8136, 0xA732,
+    0x2031, 0x8136, 0xA733,
+    0x2034, 0x8136, 0xA734,
+    0x2036, 0x8136, 0xA735,
+    0x2037, 0x8136, 0xA736,
+    0x2038, 0x8136, 0xA737,
+    0x2039, 0x8136, 0xA738,
+    0x203A, 0x8136, 0xA739,
+    0x203C, 0x8136, 0xA830,
+    0x203D, 0x8136, 0xA831,
+    0x203E, 0x8136, 0xA832,
+    0x203F, 0x8136, 0xA833,
+    0x2040, 0x8136, 0xA834,
+    0x2041, 0x8136, 0xA835,
+    0x2042, 0x8136, 0xA836,
+    0x2043, 0x8136, 0xA837,
+    0x2044, 0x8136, 0xA838,
+    0x2045, 0x8136, 0xA839,
+    0x2046, 0x8136, 0xA930,
+    0x2047, 0x8136, 0xA931,
+    0x2048, 0x8136, 0xA932,
+    0x2049, 0x8136, 0xA933,
+    0x204A, 0x8136, 0xA934,
+    0x204B, 0x8136, 0xA935,
+    0x204C, 0x8136, 0xA936,
+    0x204D, 0x8136, 0xA937,
+    0x204E, 0x8136, 0xA938,
+    0x204F, 0x8136, 0xA939,
+    0x2050, 0x8136, 0xAA30,
+    0x2051, 0x8136, 0xAA31,
+    0x2052, 0x8136, 0xAA32,
+    0x2053, 0x8136, 0xAA33,
+    0x2054, 0x8136, 0xAA34,
+    0x2055, 0x8136, 0xAA35,
+    0x2056, 0x8136, 0xAA36,
+    0x2057, 0x8136, 0xAA37,
+    0x2058, 0x8136, 0xAA38,
+    0x2059, 0x8136, 0xAA39,
+    0x205A, 0x8136, 0xAB30,
+    0x205B, 0x8136, 0xAB31,
+    0x205C, 0x8136, 0xAB32,
+    0x205D, 0x8136, 0xAB33,
+    0x205E, 0x8136, 0xAB34,
+    0x205F, 0x8136, 0xAB35,
+    0x2060, 0x8136, 0xAB36,
+    0x2061, 0x8136, 0xAB37,
+    0x2062, 0x8136, 0xAB38,
+    0x2063, 0x8136, 0xAB39,
+    0x2064, 0x8136, 0xAC30,
+    0x2065, 0x8136, 0xAC31,
+    0x2066, 0x8136, 0xAC32,
+    0x2067, 0x8136, 0xAC33,
+    0x2068, 0x8136, 0xAC34,
+    0x2069, 0x8136, 0xAC35,
+    0x206A, 0x8136, 0xAC36,
+    0x206B, 0x8136, 0xAC37,
+    0x206C, 0x8136, 0xAC38,
+    0x206D, 0x8136, 0xAC39,
+    0x206E, 0x8136, 0xAD30,
+    0x206F, 0x8136, 0xAD31,
+    0x2070, 0x8136, 0xAD32,
+    0x2071, 0x8136, 0xAD33,
+    0x2072, 0x8136, 0xAD34,
+    0x2073, 0x8136, 0xAD35,
+    0x2074, 0x8136, 0xAD36,
+    0x2075, 0x8136, 0xAD37,
+    0x2076, 0x8136, 0xAD38,
+    0x2077, 0x8136, 0xAD39,
+    0x2078, 0x8136, 0xAE30,
+    0x2079, 0x8136, 0xAE31,
+    0x207A, 0x8136, 0xAE32,
+    0x207B, 0x8136, 0xAE33,
+    0x207C, 0x8136, 0xAE34,
+    0x207D, 0x8136, 0xAE35,
+    0x207E, 0x8136, 0xAE36,
+    0x207F, 0x8136, 0xAE37,
+    0x2080, 0x8136, 0xAE38,
+    0x2081, 0x8136, 0xAE39,
+    0x2082, 0x8136, 0xAF30,
+    0x2083, 0x8136, 0xAF31,
+    0x2084, 0x8136, 0xAF32,
+    0x2085, 0x8136, 0xAF33,
+    0x2086, 0x8136, 0xAF34,
+    0x2087, 0x8136, 0xAF35,
+    0x2088, 0x8136, 0xAF36,
+    0x2089, 0x8136, 0xAF37,
+    0x208A, 0x8136, 0xAF38,
+    0x208B, 0x8136, 0xAF39,
+    0x208C, 0x8136, 0xB030,
+    0x208D, 0x8136, 0xB031,
+    0x208E, 0x8136, 0xB032,
+    0x208F, 0x8136, 0xB033,
+    0x2090, 0x8136, 0xB034,
+    0x2091, 0x8136, 0xB035,
+    0x2092, 0x8136, 0xB036,
+    0x2093, 0x8136, 0xB037,
+    0x2094, 0x8136, 0xB038,
+    0x2095, 0x8136, 0xB039,
+    0x2096, 0x8136, 0xB130,
+    0x2097, 0x8136, 0xB131,
+    0x2098, 0x8136, 0xB132,
+    0x2099, 0x8136, 0xB133,
+    0x209A, 0x8136, 0xB134,
+    0x209B, 0x8136, 0xB135,
+    0x209C, 0x8136, 0xB136,
+    0x209D, 0x8136, 0xB137,
+    0x209E, 0x8136, 0xB138,
+    0x209F, 0x8136, 0xB139,
+    0x20A0, 0x8136, 0xB230,
+    0x20A1, 0x8136, 0xB231,
+    0x20A2, 0x8136, 0xB232,
+    0x20A3, 0x8136, 0xB233,
+    0x20A4, 0x8136, 0xB234,
+    0x20A5, 0x8136, 0xB235,
+    0x20A6, 0x8136, 0xB236,
+    0x20A7, 0x8136, 0xB237,
+    0x20A8, 0x8136, 0xB238,
+    0x20A9, 0x8136, 0xB239,
+    0x20AA, 0x8136, 0xB330,
+    0x20AB, 0x8136, 0xB331,
+    0x20AD, 0x8136, 0xB332,
+    0x20AE, 0x8136, 0xB333,
+    0x20AF, 0x8136, 0xB334,
+    0x20B0, 0x8136, 0xB335,
+    0x20B1, 0x8136, 0xB336,
+    0x20B2, 0x8136, 0xB337,
+    0x20B3, 0x8136, 0xB338,
+    0x20B4, 0x8136, 0xB339,
+    0x20B5, 0x8136, 0xB430,
+    0x20B6, 0x8136, 0xB431,
+    0x20B7, 0x8136, 0xB432,
+    0x20B8, 0x8136, 0xB433,
+    0x20B9, 0x8136, 0xB434,
+    0x20BA, 0x8136, 0xB435,
+    0x20BB, 0x8136, 0xB436,
+    0x20BC, 0x8136, 0xB437,
+    0x20BD, 0x8136, 0xB438,
+    0x20BE, 0x8136, 0xB439,
+    0x20BF, 0x8136, 0xB530,
+    0x20C0, 0x8136, 0xB531,
+    0x20C1, 0x8136, 0xB532,
+    0x20C2, 0x8136, 0xB533,
+    0x20C3, 0x8136, 0xB534,
+    0x20C4, 0x8136, 0xB535,
+    0x20C5, 0x8136, 0xB536,
+    0x20C6, 0x8136, 0xB537,
+    0x20C7, 0x8136, 0xB538,
+    0x20C8, 0x8136, 0xB539,
+    0x20C9, 0x8136, 0xB630,
+    0x20CA, 0x8136, 0xB631,
+    0x20CB, 0x8136, 0xB632,
+    0x20CC, 0x8136, 0xB633,
+    0x20CD, 0x8136, 0xB634,
+    0x20CE, 0x8136, 0xB635,
+    0x20CF, 0x8136, 0xB636,
+    0x20D0, 0x8136, 0xB637,
+    0x20D1, 0x8136, 0xB638,
+    0x20D2, 0x8136, 0xB639,
+    0x20D3, 0x8136, 0xB730,
+    0x20D4, 0x8136, 0xB731,
+    0x20D5, 0x8136, 0xB732,
+    0x20D6, 0x8136, 0xB733,
+    0x20D7, 0x8136, 0xB734,
+    0x20D8, 0x8136, 0xB735,
+    0x20D9, 0x8136, 0xB736,
+    0x20DA, 0x8136, 0xB737,
+    0x20DB, 0x8136, 0xB738,
+    0x20DC, 0x8136, 0xB739,
+    0x20DD, 0x8136, 0xB830,
+    0x20DE, 0x8136, 0xB831,
+    0x20DF, 0x8136, 0xB832,
+    0x20E0, 0x8136, 0xB833,
+    0x20E1, 0x8136, 0xB834,
+    0x20E2, 0x8136, 0xB835,
+    0x20E3, 0x8136, 0xB836,
+    0x20E4, 0x8136, 0xB837,
+    0x20E5, 0x8136, 0xB838,
+    0x20E6, 0x8136, 0xB839,
+    0x20E7, 0x8136, 0xB930,
+    0x20E8, 0x8136, 0xB931,
+    0x20E9, 0x8136, 0xB932,
+    0x20EA, 0x8136, 0xB933,
+    0x20EB, 0x8136, 0xB934,
+    0x20EC, 0x8136, 0xB935,
+    0x20ED, 0x8136, 0xB936,
+    0x20EE, 0x8136, 0xB937,
+    0x20EF, 0x8136, 0xB938,
+    0x20F0, 0x8136, 0xB939,
+    0x20F1, 0x8136, 0xBA30,
+    0x20F2, 0x8136, 0xBA31,
+    0x20F3, 0x8136, 0xBA32,
+    0x20F4, 0x8136, 0xBA33,
+    0x20F5, 0x8136, 0xBA34,
+    0x20F6, 0x8136, 0xBA35,
+    0x20F7, 0x8136, 0xBA36,
+    0x20F8, 0x8136, 0xBA37,
+    0x20F9, 0x8136, 0xBA38,
+    0x20FA, 0x8136, 0xBA39,
+    0x20FB, 0x8136, 0xBB30,
+    0x20FC, 0x8136, 0xBB31,
+    0x20FD, 0x8136, 0xBB32,
+    0x20FE, 0x8136, 0xBB33,
+    0x20FF, 0x8136, 0xBB34,
+    0x2100, 0x8136, 0xBB35,
+    0x2101, 0x8136, 0xBB36,
+    0x2102, 0x8136, 0xBB37,
+    0x2104, 0x8136, 0xBB38,
+    0x2106, 0x8136, 0xBB39,
+    0x2107, 0x8136, 0xBC30,
+    0x2108, 0x8136, 0xBC31,
+    0x210A, 0x8136, 0xBC32,
+    0x210B, 0x8136, 0xBC33,
+    0x210C, 0x8136, 0xBC34,
+    0x210D, 0x8136, 0xBC35,
+    0x210E, 0x8136, 0xBC36,
+    0x210F, 0x8136, 0xBC37,
+    0x2110, 0x8136, 0xBC38,
+    0x2111, 0x8136, 0xBC39,
+    0x2112, 0x8136, 0xBD30,
+    0x2113, 0x8136, 0xBD31,
+    0x2114, 0x8136, 0xBD32,
+    0x2115, 0x8136, 0xBD33,
+    0x2117, 0x8136, 0xBD34,
+    0x2118, 0x8136, 0xBD35,
+    0x2119, 0x8136, 0xBD36,
+    0x211A, 0x8136, 0xBD37,
+    0x211B, 0x8136, 0xBD38,
+    0x211C, 0x8136, 0xBD39,
+    0x211D, 0x8136, 0xBE30,
+    0x211E, 0x8136, 0xBE31,
+    0x211F, 0x8136, 0xBE32,
+    0x2120, 0x8136, 0xBE33,
+    0x2122, 0x8136, 0xBE34,
+    0x2123, 0x8136, 0xBE35,
+    0x2124, 0x8136, 0xBE36,
+    0x2125, 0x8136, 0xBE37,
+    0x2126, 0x8136, 0xBE38,
+    0x2127, 0x8136, 0xBE39,
+    0x2128, 0x8136, 0xBF30,
+    0x2129, 0x8136, 0xBF31,
+    0x212A, 0x8136, 0xBF32,
+    0x212B, 0x8136, 0xBF33,
+    0x212C, 0x8136, 0xBF34,
+    0x212D, 0x8136, 0xBF35,
+    0x212E, 0x8136, 0xBF36,
+    0x212F, 0x8136, 0xBF37,
+    0x2130, 0x8136, 0xBF38,
+    0x2131, 0x8136, 0xBF39,
+    0x2132, 0x8136, 0xC030,
+    0x2133, 0x8136, 0xC031,
+    0x2134, 0x8136, 0xC032,
+    0x2135, 0x8136, 0xC033,
+    0x2136, 0x8136, 0xC034,
+    0x2137, 0x8136, 0xC035,
+    0x2138, 0x8136, 0xC036,
+    0x2139, 0x8136, 0xC037,
+    0x213A, 0x8136, 0xC038,
+    0x213B, 0x8136, 0xC039,
+    0x213C, 0x8136, 0xC130,
+    0x213D, 0x8136, 0xC131,
+    0x213E, 0x8136, 0xC132,
+    0x213F, 0x8136, 0xC133,
+    0x2140, 0x8136, 0xC134,
+    0x2141, 0x8136, 0xC135,
+    0x2142, 0x8136, 0xC136,
+    0x2143, 0x8136, 0xC137,
+    0x2144, 0x8136, 0xC138,
+    0x2145, 0x8136, 0xC139,
+    0x2146, 0x8136, 0xC230,
+    0x2147, 0x8136, 0xC231,
+    0x2148, 0x8136, 0xC232,
+    0x2149, 0x8136, 0xC233,
+    0x214A, 0x8136, 0xC234,
+    0x214B, 0x8136, 0xC235,
+    0x214C, 0x8136, 0xC236,
+    0x214D, 0x8136, 0xC237,
+    0x214E, 0x8136, 0xC238,
+    0x214F, 0x8136, 0xC239,
+    0x2150, 0x8136, 0xC330,
+    0x2151, 0x8136, 0xC331,
+    0x2152, 0x8136, 0xC332,
+    0x2153, 0x8136, 0xC333,
+    0x2154, 0x8136, 0xC334,
+    0x2155, 0x8136, 0xC335,
+    0x2156, 0x8136, 0xC336,
+    0x2157, 0x8136, 0xC337,
+    0x2158, 0x8136, 0xC338,
+    0x2159, 0x8136, 0xC339,
+    0x215A, 0x8136, 0xC430,
+    0x215B, 0x8136, 0xC431,
+    0x215C, 0x8136, 0xC432,
+    0x215D, 0x8136, 0xC433,
+    0x215E, 0x8136, 0xC434,
+    0x215F, 0x8136, 0xC435,
+    0x216C, 0x8136, 0xC436,
+    0x216D, 0x8136, 0xC437,
+    0x216E, 0x8136, 0xC438,
+    0x216F, 0x8136, 0xC439,
+    0x217A, 0x8136, 0xC530,
+    0x217B, 0x8136, 0xC531,
+    0x217C, 0x8136, 0xC532,
+    0x217D, 0x8136, 0xC533,
+    0x217E, 0x8136, 0xC534,
+    0x217F, 0x8136, 0xC535,
+    0x2180, 0x8136, 0xC536,
+    0x2181, 0x8136, 0xC537,
+    0x2182, 0x8136, 0xC538,
+    0x2183, 0x8136, 0xC539,
+    0x2184, 0x8136, 0xC630,
+    0x2185, 0x8136, 0xC631,
+    0x2186, 0x8136, 0xC632,
+    0x2187, 0x8136, 0xC633,
+    0x2188, 0x8136, 0xC634,
+    0x2189, 0x8136, 0xC635,
+    0x218A, 0x8136, 0xC636,
+    0x218B, 0x8136, 0xC637,
+    0x218C, 0x8136, 0xC638,
+    0x218D, 0x8136, 0xC639,
+    0x218E, 0x8136, 0xC730,
+    0x218F, 0x8136, 0xC731,
+    0x2194, 0x8136, 0xC732,
+    0x2195, 0x8136, 0xC733,
+    0x219A, 0x8136, 0xC734,
+    0x219B, 0x8136, 0xC735,
+    0x219C, 0x8136, 0xC736,
+    0x219D, 0x8136, 0xC737,
+    0x219E, 0x8136, 0xC738,
+    0x219F, 0x8136, 0xC739,
+    0x21A0, 0x8136, 0xC830,
+    0x21A1, 0x8136, 0xC831,
+    0x21A2, 0x8136, 0xC832,
+    0x21A3, 0x8136, 0xC833,
+    0x21A4, 0x8136, 0xC834,
+    0x21A5, 0x8136, 0xC835,
+    0x21A6, 0x8136, 0xC836,
+    0x21A7, 0x8136, 0xC837,
+    0x21A8, 0x8136, 0xC838,
+    0x21A9, 0x8136, 0xC839,
+    0x21AA, 0x8136, 0xC930,
+    0x21AB, 0x8136, 0xC931,
+    0x21AC, 0x8136, 0xC932,
+    0x21AD, 0x8136, 0xC933,
+    0x21AE, 0x8136, 0xC934,
+    0x21AF, 0x8136, 0xC935,
+    0x21B0, 0x8136, 0xC936,
+    0x21B1, 0x8136, 0xC937,
+    0x21B2, 0x8136, 0xC938,
+    0x21B3, 0x8136, 0xC939,
+    0x21B4, 0x8136, 0xCA30,
+    0x21B5, 0x8136, 0xCA31,
+    0x21B6, 0x8136, 0xCA32,
+    0x21B7, 0x8136, 0xCA33,
+    0x21B8, 0x8136, 0xCA34,
+    0x21B9, 0x8136, 0xCA35,
+    0x21BA, 0x8136, 0xCA36,
+    0x21BB, 0x8136, 0xCA37,
+    0x21BC, 0x8136, 0xCA38,
+    0x21BD, 0x8136, 0xCA39,
+    0x21BE, 0x8136, 0xCB30,
+    0x21BF, 0x8136, 0xCB31,
+    0x21C0, 0x8136, 0xCB32,
+    0x21C1, 0x8136, 0xCB33,
+    0x21C2, 0x8136, 0xCB34,
+    0x21C3, 0x8136, 0xCB35,
+    0x21C4, 0x8136, 0xCB36,
+    0x21C5, 0x8136, 0xCB37,
+    0x21C6, 0x8136, 0xCB38,
+    0x21C7, 0x8136, 0xCB39,
+    0x21C8, 0x8136, 0xCC30,
+    0x21C9, 0x8136, 0xCC31,
+    0x21CA, 0x8136, 0xCC32,
+    0x21CB, 0x8136, 0xCC33,
+    0x21CC, 0x8136, 0xCC34,
+    0x21CD, 0x8136, 0xCC35,
+    0x21CE, 0x8136, 0xCC36,
+    0x21CF, 0x8136, 0xCC37,
+    0x21D0, 0x8136, 0xCC38,
+    0x21D1, 0x8136, 0xCC39,
+    0x21D2, 0x8136, 0xCD30,
+    0x21D3, 0x8136, 0xCD31,
+    0x21D4, 0x8136, 0xCD32,
+    0x21D5, 0x8136, 0xCD33,
+    0x21D6, 0x8136, 0xCD34,
+    0x21D7, 0x8136, 0xCD35,
+    0x21D8, 0x8136, 0xCD36,
+    0x21D9, 0x8136, 0xCD37,
+    0x21DA, 0x8136, 0xCD38,
+    0x21DB, 0x8136, 0xCD39,
+    0x21DC, 0x8136, 0xCE30,
+    0x21DD, 0x8136, 0xCE31,
+    0x21DE, 0x8136, 0xCE32,
+    0x21DF, 0x8136, 0xCE33,
+    0x21E0, 0x8136, 0xCE34,
+    0x21E1, 0x8136, 0xCE35,
+    0x21E2, 0x8136, 0xCE36,
+    0x21E3, 0x8136, 0xCE37,
+    0x21E4, 0x8136, 0xCE38,
+    0x21E5, 0x8136, 0xCE39,
+    0x21E6, 0x8136, 0xCF30,
+    0x21E7, 0x8136, 0xCF31,
+    0x21E8, 0x8136, 0xCF32,
+    0x21E9, 0x8136, 0xCF33,
+    0x21EA, 0x8136, 0xCF34,
+    0x21EB, 0x8136, 0xCF35,
+    0x21EC, 0x8136, 0xCF36,
+    0x21ED, 0x8136, 0xCF37,
+    0x21EE, 0x8136, 0xCF38,
+    0x21EF, 0x8136, 0xCF39,
+    0x21F0, 0x8136, 0xD030,
+    0x21F1, 0x8136, 0xD031,
+    0x21F2, 0x8136, 0xD032,
+    0x21F3, 0x8136, 0xD033,
+    0x21F4, 0x8136, 0xD034,
+    0x21F5, 0x8136, 0xD035,
+    0x21F6, 0x8136, 0xD036,
+    0x21F7, 0x8136, 0xD037,
+    0x21F8, 0x8136, 0xD038,
+    0x21F9, 0x8136, 0xD039,
+    0x21FA, 0x8136, 0xD130,
+    0x21FB, 0x8136, 0xD131,
+    0x21FC, 0x8136, 0xD132,
+    0x21FD, 0x8136, 0xD133,
+    0x21FE, 0x8136, 0xD134,
+    0x21FF, 0x8136, 0xD135,
+    0x2200, 0x8136, 0xD136,
+    0x2201, 0x8136, 0xD137,
+    0x2202, 0x8136, 0xD138,
+    0x2203, 0x8136, 0xD139,
+    0x2204, 0x8136, 0xD230,
+    0x2205, 0x8136, 0xD231,
+    0x2206, 0x8136, 0xD232,
+    0x2207, 0x8136, 0xD233,
+    0x2209, 0x8136, 0xD234,
+    0x220A, 0x8136, 0xD235,
+    0x220B, 0x8136, 0xD236,
+    0x220C, 0x8136, 0xD237,
+    0x220D, 0x8136, 0xD238,
+    0x220E, 0x8136, 0xD239,
+    0x2210, 0x8136, 0xD330,
+    0x2212, 0x8136, 0xD331,
+    0x2213, 0x8136, 0xD332,
+    0x2214, 0x8136, 0xD333,
+    0x2216, 0x8136, 0xD334,
+    0x2217, 0x8136, 0xD335,
+    0x2218, 0x8136, 0xD336,
+    0x2219, 0x8136, 0xD337,
+    0x221B, 0x8136, 0xD338,
+    0x221C, 0x8136, 0xD339,
+    0x2221, 0x8136, 0xD430,
+    0x2222, 0x8136, 0xD431,
+    0x2224, 0x8136, 0xD432,
+    0x2226, 0x8136, 0xD433,
+    0x222C, 0x8136, 0xD434,
+    0x222D, 0x8136, 0xD435,
+    0x222F, 0x8136, 0xD436,
+    0x2230, 0x8136, 0xD437,
+    0x2231, 0x8136, 0xD438,
+    0x2232, 0x8136, 0xD439,
+    0x2233, 0x8136, 0xD530,
+    0x2238, 0x8136, 0xD531,
+    0x2239, 0x8136, 0xD532,
+    0x223A, 0x8136, 0xD533,
+    0x223B, 0x8136, 0xD534,
+    0x223C, 0x8136, 0xD535,
+    0x223E, 0x8136, 0xD536,
+    0x223F, 0x8136, 0xD537,
+    0x2240, 0x8136, 0xD538,
+    0x2241, 0x8136, 0xD539,
+    0x2242, 0x8136, 0xD630,
+    0x2243, 0x8136, 0xD631,
+    0x2244, 0x8136, 0xD632,
+    0x2245, 0x8136, 0xD633,
+    0x2246, 0x8136, 0xD634,
+    0x2247, 0x8136, 0xD635,
+    0x2249, 0x8136, 0xD636,
+    0x224A, 0x8136, 0xD637,
+    0x224B, 0x8136, 0xD638,
+    0x224D, 0x8136, 0xD639,
+    0x224E, 0x8136, 0xD730,
+    0x224F, 0x8136, 0xD731,
+    0x2250, 0x8136, 0xD732,
+    0x2251, 0x8136, 0xD733,
+    0x2253, 0x8136, 0xD734,
+    0x2254, 0x8136, 0xD735,
+    0x2255, 0x8136, 0xD736,
+    0x2256, 0x8136, 0xD737,
+    0x2257, 0x8136, 0xD738,
+    0x2258, 0x8136, 0xD739,
+    0x2259, 0x8136, 0xD830,
+    0x225A, 0x8136, 0xD831,
+    0x225B, 0x8136, 0xD832,
+    0x225C, 0x8136, 0xD833,
+    0x225D, 0x8136, 0xD834,
+    0x225E, 0x8136, 0xD835,
+    0x225F, 0x8136, 0xD836,
+    0x2262, 0x8136, 0xD837,
+    0x2263, 0x8136, 0xD838,
+    0x2268, 0x8136, 0xD839,
+    0x2269, 0x8136, 0xD930,
+    0x226A, 0x8136, 0xD931,
+    0x226B, 0x8136, 0xD932,
+    0x226C, 0x8136, 0xD933,
+    0x226D, 0x8136, 0xD934,
+    0x2270, 0x8136, 0xD935,
+    0x2271, 0x8136, 0xD936,
+    0x2272, 0x8136, 0xD937,
+    0x2273, 0x8136, 0xD938,
+    0x2274, 0x8136, 0xD939,
+    0x2275, 0x8136, 0xDA30,
+    0x2276, 0x8136, 0xDA31,
+    0x2277, 0x8136, 0xDA32,
+    0x2278, 0x8136, 0xDA33,
+    0x2279, 0x8136, 0xDA34,
+    0x227A, 0x8136, 0xDA35,
+    0x227B, 0x8136, 0xDA36,
+    0x227C, 0x8136, 0xDA37,
+    0x227D, 0x8136, 0xDA38,
+    0x227E, 0x8136, 0xDA39,
+    0x227F, 0x8136, 0xDB30,
+    0x2280, 0x8136, 0xDB31,
+    0x2281, 0x8136, 0xDB32,
+    0x2282, 0x8136, 0xDB33,
+    0x2283, 0x8136, 0xDB34,
+    0x2284, 0x8136, 0xDB35,
+    0x2285, 0x8136, 0xDB36,
+    0x2286, 0x8136, 0xDB37,
+    0x2287, 0x8136, 0xDB38,
+    0x2288, 0x8136, 0xDB39,
+    0x2289, 0x8136, 0xDC30,
+    0x228A, 0x8136, 0xDC31,
+    0x228B, 0x8136, 0xDC32,
+    0x228C, 0x8136, 0xDC33,
+    0x228D, 0x8136, 0xDC34,
+    0x228E, 0x8136, 0xDC35,
+    0x228F, 0x8136, 0xDC36,
+    0x2290, 0x8136, 0xDC37,
+    0x2291, 0x8136, 0xDC38,
+    0x2292, 0x8136, 0xDC39,
+    0x2293, 0x8136, 0xDD30,
+    0x2294, 0x8136, 0xDD31,
+    0x2296, 0x8136, 0xDD32,
+    0x2297, 0x8136, 0xDD33,
+    0x2298, 0x8136, 0xDD34,
+    0x229A, 0x8136, 0xDD35,
+    0x229B, 0x8136, 0xDD36,
+    0x229C, 0x8136, 0xDD37,
+    0x229D, 0x8136, 0xDD38,
+    0x229E, 0x8136, 0xDD39,
+    0x229F, 0x8136, 0xDE30,
+    0x22A0, 0x8136, 0xDE31,
+    0x22A1, 0x8136, 0xDE32,
+    0x22A2, 0x8136, 0xDE33,
+    0x22A3, 0x8136, 0xDE34,
+    0x22A4, 0x8136, 0xDE35,
+    0x22A6, 0x8136, 0xDE36,
+    0x22A7, 0x8136, 0xDE37,
+    0x22A8, 0x8136, 0xDE38,
+    0x22A9, 0x8136, 0xDE39,
+    0x22AA, 0x8136, 0xDF30,
+    0x22AB, 0x8136, 0xDF31,
+    0x22AC, 0x8136, 0xDF32,
+    0x22AD, 0x8136, 0xDF33,
+    0x22AE, 0x8136, 0xDF34,
+    0x22AF, 0x8136, 0xDF35,
+    0x22B0, 0x8136, 0xDF36,
+    0x22B1, 0x8136, 0xDF37,
+    0x22B2, 0x8136, 0xDF38,
+    0x22B3, 0x8136, 0xDF39,
+    0x22B4, 0x8136, 0xE030,
+    0x22B5, 0x8136, 0xE031,
+    0x22B6, 0x8136, 0xE032,
+    0x22B7, 0x8136, 0xE033,
+    0x22B8, 0x8136, 0xE034,
+    0x22B9, 0x8136, 0xE035,
+    0x22BA, 0x8136, 0xE036,
+    0x22BB, 0x8136, 0xE037,
+    0x22BC, 0x8136, 0xE038,
+    0x22BD, 0x8136, 0xE039,
+    0x22BE, 0x8136, 0xE130,
+    0x22C0, 0x8136, 0xE131,
+    0x22C1, 0x8136, 0xE132,
+    0x22C2, 0x8136, 0xE133,
+    0x22C3, 0x8136, 0xE134,
+    0x22C4, 0x8136, 0xE135,
+    0x22C5, 0x8136, 0xE136,
+    0x22C6, 0x8136, 0xE137,
+    0x22C7, 0x8136, 0xE138,
+    0x22C8, 0x8136, 0xE139,
+    0x22C9, 0x8136, 0xE230,
+    0x22CA, 0x8136, 0xE231,
+    0x22CB, 0x8136, 0xE232,
+    0x22CC, 0x8136, 0xE233,
+    0x22CD, 0x8136, 0xE234,
+    0x22CE, 0x8136, 0xE235,
+    0x22CF, 0x8136, 0xE236,
+    0x22D0, 0x8136, 0xE237,
+    0x22D1, 0x8136, 0xE238,
+    0x22D2, 0x8136, 0xE239,
+    0x22D3, 0x8136, 0xE330,
+    0x22D4, 0x8136, 0xE331,
+    0x22D5, 0x8136, 0xE332,
+    0x22D6, 0x8136, 0xE333,
+    0x22D7, 0x8136, 0xE334,
+    0x22D8, 0x8136, 0xE335,
+    0x22D9, 0x8136, 0xE336,
+    0x22DA, 0x8136, 0xE337,
+    0x22DB, 0x8136, 0xE338,
+    0x22DC, 0x8136, 0xE339,
+    0x22DD, 0x8136, 0xE430,
+    0x22DE, 0x8136, 0xE431,
+    0x22DF, 0x8136, 0xE432,
+    0x22E0, 0x8136, 0xE433,
+    0x22E1, 0x8136, 0xE434,
+    0x22E2, 0x8136, 0xE435,
+    0x22E3, 0x8136, 0xE436,
+    0x22E4, 0x8136, 0xE437,
+    0x22E5, 0x8136, 0xE438,
+    0x22E6, 0x8136, 0xE439,
+    0x22E7, 0x8136, 0xE530,
+    0x22E8, 0x8136, 0xE531,
+    0x22E9, 0x8136, 0xE532,
+    0x22EA, 0x8136, 0xE533,
+    0x22EB, 0x8136, 0xE534,
+    0x22EC, 0x8136, 0xE535,
+    0x22ED, 0x8136, 0xE536,
+    0x22EE, 0x8136, 0xE537,
+    0x22EF, 0x8136, 0xE538,
+    0x22F0, 0x8136, 0xE539,
+    0x22F1, 0x8136, 0xE630,
+    0x22F2, 0x8136, 0xE631,
+    0x22F3, 0x8136, 0xE632,
+    0x22F4, 0x8136, 0xE633,
+    0x22F5, 0x8136, 0xE634,
+    0x22F6, 0x8136, 0xE635,
+    0x22F7, 0x8136, 0xE636,
+    0x22F8, 0x8136, 0xE637,
+    0x22F9, 0x8136, 0xE638,
+    0x22FA, 0x8136, 0xE639,
+    0x22FB, 0x8136, 0xE730,
+    0x22FC, 0x8136, 0xE731,
+    0x22FD, 0x8136, 0xE732,
+    0x22FE, 0x8136, 0xE733,
+    0x22FF, 0x8136, 0xE734,
+    0x2300, 0x8136, 0xE735,
+    0x2301, 0x8136, 0xE736,
+    0x2302, 0x8136, 0xE737,
+    0x2303, 0x8136, 0xE738,
+    0x2304, 0x8136, 0xE739,
+    0x2305, 0x8136, 0xE830,
+    0x2306, 0x8136, 0xE831,
+    0x2307, 0x8136, 0xE832,
+    0x2308, 0x8136, 0xE833,
+    0x2309, 0x8136, 0xE834,
+    0x230A, 0x8136, 0xE835,
+    0x230B, 0x8136, 0xE836,
+    0x230C, 0x8136, 0xE837,
+    0x230D, 0x8136, 0xE838,
+    0x230E, 0x8136, 0xE839,
+    0x230F, 0x8136, 0xE930,
+    0x2310, 0x8136, 0xE931,
+    0x2311, 0x8136, 0xE932,
+    0x2313, 0x8136, 0xE933,
+    0x2314, 0x8136, 0xE934,
+    0x2315, 0x8136, 0xE935,
+    0x2316, 0x8136, 0xE936,
+    0x2317, 0x8136, 0xE937,
+    0x2318, 0x8136, 0xE938,
+    0x2319, 0x8136, 0xE939,
+    0x231A, 0x8136, 0xEA30,
+    0x231B, 0x8136, 0xEA31,
+    0x231C, 0x8136, 0xEA32,
+    0x231D, 0x8136, 0xEA33,
+    0x231E, 0x8136, 0xEA34,
+    0x231F, 0x8136, 0xEA35,
+    0x2320, 0x8136, 0xEA36,
+    0x2321, 0x8136, 0xEA37,
+    0x2322, 0x8136, 0xEA38,
+    0x2323, 0x8136, 0xEA39,
+    0x2324, 0x8136, 0xEB30,
+    0x2325, 0x8136, 0xEB31,
+    0x2326, 0x8136, 0xEB32,
+    0x2327, 0x8136, 0xEB33,
+    0x2328, 0x8136, 0xEB34,
+    0x2329, 0x8136, 0xEB35,
+    0x232A, 0x8136, 0xEB36,
+    0x232B, 0x8136, 0xEB37,
+    0x232C, 0x8136, 0xEB38,
+    0x232D, 0x8136, 0xEB39,
+    0x232E, 0x8136, 0xEC30,
+    0x232F, 0x8136, 0xEC31,
+    0x2330, 0x8136, 0xEC32,
+    0x2331, 0x8136, 0xEC33,
+    0x2332, 0x8136, 0xEC34,
+    0x2333, 0x8136, 0xEC35,
+    0x2334, 0x8136, 0xEC36,
+    0x2335, 0x8136, 0xEC37,
+    0x2336, 0x8136, 0xEC38,
+    0x2337, 0x8136, 0xEC39,
+    0x2338, 0x8136, 0xED30,
+    0x2339, 0x8136, 0xED31,
+    0x233A, 0x8136, 0xED32,
+    0x233B, 0x8136, 0xED33,
+    0x233C, 0x8136, 0xED34,
+    0x233D, 0x8136, 0xED35,
+    0x233E, 0x8136, 0xED36,
+    0x233F, 0x8136, 0xED37,
+    0x2340, 0x8136, 0xED38,
+    0x2341, 0x8136, 0xED39,
+    0x2342, 0x8136, 0xEE30,
+    0x2343, 0x8136, 0xEE31,
+    0x2344, 0x8136, 0xEE32,
+    0x2345, 0x8136, 0xEE33,
+    0x2346, 0x8136, 0xEE34,
+    0x2347, 0x8136, 0xEE35,
+    0x2348, 0x8136, 0xEE36,
+    0x2349, 0x8136, 0xEE37,
+    0x234A, 0x8136, 0xEE38,
+    0x234B, 0x8136, 0xEE39,
+    0x234C, 0x8136, 0xEF30,
+    0x234D, 0x8136, 0xEF31,
+    0x234E, 0x8136, 0xEF32,
+    0x234F, 0x8136, 0xEF33,
+    0x2350, 0x8136, 0xEF34,
+    0x2351, 0x8136, 0xEF35,
+    0x2352, 0x8136, 0xEF36,
+    0x2353, 0x8136, 0xEF37,
+    0x2354, 0x8136, 0xEF38,
+    0x2355, 0x8136, 0xEF39,
+    0x2356, 0x8136, 0xF030,
+    0x2357, 0x8136, 0xF031,
+    0x2358, 0x8136, 0xF032,
+    0x2359, 0x8136, 0xF033,
+    0x235A, 0x8136, 0xF034,
+    0x235B, 0x8136, 0xF035,
+    0x235C, 0x8136, 0xF036,
+    0x235D, 0x8136, 0xF037,
+    0x235E, 0x8136, 0xF038,
+    0x235F, 0x8136, 0xF039,
+    0x2360, 0x8136, 0xF130,
+    0x2361, 0x8136, 0xF131,
+    0x2362, 0x8136, 0xF132,
+    0x2363, 0x8136, 0xF133,
+    0x2364, 0x8136, 0xF134,
+    0x2365, 0x8136, 0xF135,
+    0x2366, 0x8136, 0xF136,
+    0x2367, 0x8136, 0xF137,
+    0x2368, 0x8136, 0xF138,
+    0x2369, 0x8136, 0xF139,
+    0x236A, 0x8136, 0xF230,
+    0x236B, 0x8136, 0xF231,
+    0x236C, 0x8136, 0xF232,
+    0x236D, 0x8136, 0xF233,
+    0x236E, 0x8136, 0xF234,
+    0x236F, 0x8136, 0xF235,
+    0x2370, 0x8136, 0xF236,
+    0x2371, 0x8136, 0xF237,
+    0x2372, 0x8136, 0xF238,
+    0x2373, 0x8136, 0xF239,
+    0x2374, 0x8136, 0xF330,
+    0x2375, 0x8136, 0xF331,
+    0x2376, 0x8136, 0xF332,
+    0x2377, 0x8136, 0xF333,
+    0x2378, 0x8136, 0xF334,
+    0x2379, 0x8136, 0xF335,
+    0x237A, 0x8136, 0xF336,
+    0x237B, 0x8136, 0xF337,
+    0x237C, 0x8136, 0xF338,
+    0x237D, 0x8136, 0xF339,
+    0x237E, 0x8136, 0xF430,
+    0x237F, 0x8136, 0xF431,
+    0x2380, 0x8136, 0xF432,
+    0x2381, 0x8136, 0xF433,
+    0x2382, 0x8136, 0xF434,
+    0x2383, 0x8136, 0xF435,
+    0x2384, 0x8136, 0xF436,
+    0x2385, 0x8136, 0xF437,
+    0x2386, 0x8136, 0xF438,
+    0x2387, 0x8136, 0xF439,
+    0x2388, 0x8136, 0xF530,
+    0x2389, 0x8136, 0xF531,
+    0x238A, 0x8136, 0xF532,
+    0x238B, 0x8136, 0xF533,
+    0x238C, 0x8136, 0xF534,
+    0x238D, 0x8136, 0xF535,
+    0x238E, 0x8136, 0xF536,
+    0x238F, 0x8136, 0xF537,
+    0x2390, 0x8136, 0xF538,
+    0x2391, 0x8136, 0xF539,
+    0x2392, 0x8136, 0xF630,
+    0x2393, 0x8136, 0xF631,
+    0x2394, 0x8136, 0xF632,
+    0x2395, 0x8136, 0xF633,
+    0x2396, 0x8136, 0xF634,
+    0x2397, 0x8136, 0xF635,
+    0x2398, 0x8136, 0xF636,
+    0x2399, 0x8136, 0xF637,
+    0x239A, 0x8136, 0xF638,
+    0x239B, 0x8136, 0xF639,
+    0x239C, 0x8136, 0xF730,
+    0x239D, 0x8136, 0xF731,
+    0x239E, 0x8136, 0xF732,
+    0x239F, 0x8136, 0xF733,
+    0x23A0, 0x8136, 0xF734,
+    0x23A1, 0x8136, 0xF735,
+    0x23A2, 0x8136, 0xF736,
+    0x23A3, 0x8136, 0xF737,
+    0x23A4, 0x8136, 0xF738,
+    0x23A5, 0x8136, 0xF739,
+    0x23A6, 0x8136, 0xF830,
+    0x23A7, 0x8136, 0xF831,
+    0x23A8, 0x8136, 0xF832,
+    0x23A9, 0x8136, 0xF833,
+    0x23AA, 0x8136, 0xF834,
+    0x23AB, 0x8136, 0xF835,
+    0x23AC, 0x8136, 0xF836,
+    0x23AD, 0x8136, 0xF837,
+    0x23AE, 0x8136, 0xF838,
+    0x23AF, 0x8136, 0xF839,
+    0x23B0, 0x8136, 0xF930,
+    0x23B1, 0x8136, 0xF931,
+    0x23B2, 0x8136, 0xF932,
+    0x23B3, 0x8136, 0xF933,
+    0x23B4, 0x8136, 0xF934,
+    0x23B5, 0x8136, 0xF935,
+    0x23B6, 0x8136, 0xF936,
+    0x23B7, 0x8136, 0xF937,
+    0x23B8, 0x8136, 0xF938,
+    0x23B9, 0x8136, 0xF939,
+    0x23BA, 0x8136, 0xFA30,
+    0x23BB, 0x8136, 0xFA31,
+    0x23BC, 0x8136, 0xFA32,
+    0x23BD, 0x8136, 0xFA33,
+    0x23BE, 0x8136, 0xFA34,
+    0x23BF, 0x8136, 0xFA35,
+    0x23C0, 0x8136, 0xFA36,
+    0x23C1, 0x8136, 0xFA37,
+    0x23C2, 0x8136, 0xFA38,
+    0x23C3, 0x8136, 0xFA39,
+    0x23C4, 0x8136, 0xFB30,
+    0x23C5, 0x8136, 0xFB31,
+    0x23C6, 0x8136, 0xFB32,
+    0x23C7, 0x8136, 0xFB33,
+    0x23C8, 0x8136, 0xFB34,
+    0x23C9, 0x8136, 0xFB35,
+    0x23CA, 0x8136, 0xFB36,
+    0x23CB, 0x8136, 0xFB37,
+    0x23CC, 0x8136, 0xFB38,
+    0x23CD, 0x8136, 0xFB39,
+    0x23CE, 0x8136, 0xFC30,
+    0x23CF, 0x8136, 0xFC31,
+    0x23D0, 0x8136, 0xFC32,
+    0x23D1, 0x8136, 0xFC33,
+    0x23D2, 0x8136, 0xFC34,
+    0x23D3, 0x8136, 0xFC35,
+    0x23D4, 0x8136, 0xFC36,
+    0x23D5, 0x8136, 0xFC37,
+    0x23D6, 0x8136, 0xFC38,
+    0x23D7, 0x8136, 0xFC39,
+    0x23D8, 0x8136, 0xFD30,
+    0x23D9, 0x8136, 0xFD31,
+    0x23DA, 0x8136, 0xFD32,
+    0x23DB, 0x8136, 0xFD33,
+    0x23DC, 0x8136, 0xFD34,
+    0x23DD, 0x8136, 0xFD35,
+    0x23DE, 0x8136, 0xFD36,
+    0x23DF, 0x8136, 0xFD37,
+    0x23E0, 0x8136, 0xFD38,
+    0x23E1, 0x8136, 0xFD39,
+    0x23E2, 0x8136, 0xFE30,
+    0x23E3, 0x8136, 0xFE31,
+    0x23E4, 0x8136, 0xFE32,
+    0x23E5, 0x8136, 0xFE33,
+    0x23E6, 0x8136, 0xFE34,
+    0x23E7, 0x8136, 0xFE35,
+    0x23E8, 0x8136, 0xFE36,
+    0x23E9, 0x8136, 0xFE37,
+    0x23EA, 0x8136, 0xFE38,
+    0x23EB, 0x8136, 0xFE39,
+    0x23EC, 0x8137, 0x8130,
+    0x23ED, 0x8137, 0x8131,
+    0x23EE, 0x8137, 0x8132,
+    0x23EF, 0x8137, 0x8133,
+    0x23F0, 0x8137, 0x8134,
+    0x23F1, 0x8137, 0x8135,
+    0x23F2, 0x8137, 0x8136,
+    0x23F3, 0x8137, 0x8137,
+    0x23F4, 0x8137, 0x8138,
+    0x23F5, 0x8137, 0x8139,
+    0x23F6, 0x8137, 0x8230,
+    0x23F7, 0x8137, 0x8231,
+    0x23F8, 0x8137, 0x8232,
+    0x23F9, 0x8137, 0x8233,
+    0x23FA, 0x8137, 0x8234,
+    0x23FB, 0x8137, 0x8235,
+    0x23FC, 0x8137, 0x8236,
+    0x23FD, 0x8137, 0x8237,
+    0x23FE, 0x8137, 0x8238,
+    0x23FF, 0x8137, 0x8239,
+    0x2400, 0x8137, 0x8330,
+    0x2401, 0x8137, 0x8331,
+    0x2402, 0x8137, 0x8332,
+    0x2403, 0x8137, 0x8333,
+    0x2404, 0x8137, 0x8334,
+    0x2405, 0x8137, 0x8335,
+    0x2406, 0x8137, 0x8336,
+    0x2407, 0x8137, 0x8337,
+    0x2408, 0x8137, 0x8338,
+    0x2409, 0x8137, 0x8339,
+    0x240A, 0x8137, 0x8430,
+    0x240B, 0x8137, 0x8431,
+    0x240C, 0x8137, 0x8432,
+    0x240D, 0x8137, 0x8433,
+    0x240E, 0x8137, 0x8434,
+    0x240F, 0x8137, 0x8435,
+    0x2410, 0x8137, 0x8436,
+    0x2411, 0x8137, 0x8437,
+    0x2412, 0x8137, 0x8438,
+    0x2413, 0x8137, 0x8439,
+    0x2414, 0x8137, 0x8530,
+    0x2415, 0x8137, 0x8531,
+    0x2416, 0x8137, 0x8532,
+    0x2417, 0x8137, 0x8533,
+    0x2418, 0x8137, 0x8534,
+    0x2419, 0x8137, 0x8535,
+    0x241A, 0x8137, 0x8536,
+    0x241B, 0x8137, 0x8537,
+    0x241C, 0x8137, 0x8538,
+    0x241D, 0x8137, 0x8539,
+    0x241E, 0x8137, 0x8630,
+    0x241F, 0x8137, 0x8631,
+    0x2420, 0x8137, 0x8632,
+    0x2421, 0x8137, 0x8633,
+    0x2422, 0x8137, 0x8634,
+    0x2423, 0x8137, 0x8635,
+    0x2424, 0x8137, 0x8636,
+    0x2425, 0x8137, 0x8637,
+    0x2426, 0x8137, 0x8638,
+    0x2427, 0x8137, 0x8639,
+    0x2428, 0x8137, 0x8730,
+    0x2429, 0x8137, 0x8731,
+    0x242A, 0x8137, 0x8732,
+    0x242B, 0x8137, 0x8733,
+    0x242C, 0x8137, 0x8734,
+    0x242D, 0x8137, 0x8735,
+    0x242E, 0x8137, 0x8736,
+    0x242F, 0x8137, 0x8737,
+    0x2430, 0x8137, 0x8738,
+    0x2431, 0x8137, 0x8739,
+    0x2432, 0x8137, 0x8830,
+    0x2433, 0x8137, 0x8831,
+    0x2434, 0x8137, 0x8832,
+    0x2435, 0x8137, 0x8833,
+    0x2436, 0x8137, 0x8834,
+    0x2437, 0x8137, 0x8835,
+    0x2438, 0x8137, 0x8836,
+    0x2439, 0x8137, 0x8837,
+    0x243A, 0x8137, 0x8838,
+    0x243B, 0x8137, 0x8839,
+    0x243C, 0x8137, 0x8930,
+    0x243D, 0x8137, 0x8931,
+    0x243E, 0x8137, 0x8932,
+    0x243F, 0x8137, 0x8933,
+    0x2440, 0x8137, 0x8934,
+    0x2441, 0x8137, 0x8935,
+    0x2442, 0x8137, 0x8936,
+    0x2443, 0x8137, 0x8937,
+    0x2444, 0x8137, 0x8938,
+    0x2445, 0x8137, 0x8939,
+    0x2446, 0x8137, 0x8A30,
+    0x2447, 0x8137, 0x8A31,
+    0x2448, 0x8137, 0x8A32,
+    0x2449, 0x8137, 0x8A33,
+    0x244A, 0x8137, 0x8A34,
+    0x244B, 0x8137, 0x8A35,
+    0x244C, 0x8137, 0x8A36,
+    0x244D, 0x8137, 0x8A37,
+    0x244E, 0x8137, 0x8A38,
+    0x244F, 0x8137, 0x8A39,
+    0x2450, 0x8137, 0x8B30,
+    0x2451, 0x8137, 0x8B31,
+    0x2452, 0x8137, 0x8B32,
+    0x2453, 0x8137, 0x8B33,
+    0x2454, 0x8137, 0x8B34,
+    0x2455, 0x8137, 0x8B35,
+    0x2456, 0x8137, 0x8B36,
+    0x2457, 0x8137, 0x8B37,
+    0x2458, 0x8137, 0x8B38,
+    0x2459, 0x8137, 0x8B39,
+    0x245A, 0x8137, 0x8C30,
+    0x245B, 0x8137, 0x8C31,
+    0x245C, 0x8137, 0x8C32,
+    0x245D, 0x8137, 0x8C33,
+    0x245E, 0x8137, 0x8C34,
+    0x245F, 0x8137, 0x8C35,
+    0x246A, 0x8137, 0x8C36,
+    0x246B, 0x8137, 0x8C37,
+    0x246C, 0x8137, 0x8C38,
+    0x246D, 0x8137, 0x8C39,
+    0x246E, 0x8137, 0x8D30,
+    0x246F, 0x8137, 0x8D31,
+    0x2470, 0x8137, 0x8D32,
+    0x2471, 0x8137, 0x8D33,
+    0x2472, 0x8137, 0x8D34,
+    0x2473, 0x8137, 0x8D35,
+    0x249C, 0x8137, 0x8D36,
+    0x249D, 0x8137, 0x8D37,
+    0x249E, 0x8137, 0x8D38,
+    0x249F, 0x8137, 0x8D39,
+    0x24A0, 0x8137, 0x8E30,
+    0x24A1, 0x8137, 0x8E31,
+    0x24A2, 0x8137, 0x8E32,
+    0x24A3, 0x8137, 0x8E33,
+    0x24A4, 0x8137, 0x8E34,
+    0x24A5, 0x8137, 0x8E35,
+    0x24A6, 0x8137, 0x8E36,
+    0x24A7, 0x8137, 0x8E37,
+    0x24A8, 0x8137, 0x8E38,
+    0x24A9, 0x8137, 0x8E39,
+    0x24AA, 0x8137, 0x8F30,
+    0x24AB, 0x8137, 0x8F31,
+    0x24AC, 0x8137, 0x8F32,
+    0x24AD, 0x8137, 0x8F33,
+    0x24AE, 0x8137, 0x8F34,
+    0x24AF, 0x8137, 0x8F35,
+    0x24B0, 0x8137, 0x8F36,
+    0x24B1, 0x8137, 0x8F37,
+    0x24B2, 0x8137, 0x8F38,
+    0x24B3, 0x8137, 0x8F39,
+    0x24B4, 0x8137, 0x9030,
+    0x24B5, 0x8137, 0x9031,
+    0x24B6, 0x8137, 0x9032,
+    0x24B7, 0x8137, 0x9033,
+    0x24B8, 0x8137, 0x9034,
+    0x24B9, 0x8137, 0x9035,
+    0x24BA, 0x8137, 0x9036,
+    0x24BB, 0x8137, 0x9037,
+    0x24BC, 0x8137, 0x9038,
+    0x24BD, 0x8137, 0x9039,
+    0x24BE, 0x8137, 0x9130,
+    0x24BF, 0x8137, 0x9131,
+    0x24C0, 0x8137, 0x9132,
+    0x24C1, 0x8137, 0x9133,
+    0x24C2, 0x8137, 0x9134,
+    0x24C3, 0x8137, 0x9135,
+    0x24C4, 0x8137, 0x9136,
+    0x24C5, 0x8137, 0x9137,
+    0x24C6, 0x8137, 0x9138,
+    0x24C7, 0x8137, 0x9139,
+    0x24C8, 0x8137, 0x9230,
+    0x24C9, 0x8137, 0x9231,
+    0x24CA, 0x8137, 0x9232,
+    0x24CB, 0x8137, 0x9233,
+    0x24CC, 0x8137, 0x9234,
+    0x24CD, 0x8137, 0x9235,
+    0x24CE, 0x8137, 0x9236,
+    0x24CF, 0x8137, 0x9237,
+    0x24D0, 0x8137, 0x9238,
+    0x24D1, 0x8137, 0x9239,
+    0x24D2, 0x8137, 0x9330,
+    0x24D3, 0x8137, 0x9331,
+    0x24D4, 0x8137, 0x9332,
+    0x24D5, 0x8137, 0x9333,
+    0x24D6, 0x8137, 0x9334,
+    0x24D7, 0x8137, 0x9335,
+    0x24D8, 0x8137, 0x9336,
+    0x24D9, 0x8137, 0x9337,
+    0x24DA, 0x8137, 0x9338,
+    0x24DB, 0x8137, 0x9339,
+    0x24DC, 0x8137, 0x9430,
+    0x24DD, 0x8137, 0x9431,
+    0x24DE, 0x8137, 0x9432,
+    0x24DF, 0x8137, 0x9433,
+    0x24E0, 0x8137, 0x9434,
+    0x24E1, 0x8137, 0x9435,
+    0x24E2, 0x8137, 0x9436,
+    0x24E3, 0x8137, 0x9437,
+    0x24E4, 0x8137, 0x9438,
+    0x24E5, 0x8137, 0x9439,
+    0x24E6, 0x8137, 0x9530,
+    0x24E7, 0x8137, 0x9531,
+    0x24E8, 0x8137, 0x9532,
+    0x24E9, 0x8137, 0x9533,
+    0x24EA, 0x8137, 0x9534,
+    0x24EB, 0x8137, 0x9535,
+    0x24EC, 0x8137, 0x9536,
+    0x24ED, 0x8137, 0x9537,
+    0x24EE, 0x8137, 0x9538,
+    0x24EF, 0x8137, 0x9539,
+    0x24F0, 0x8137, 0x9630,
+    0x24F1, 0x8137, 0x9631,
+    0x24F2, 0x8137, 0x9632,
+    0x24F3, 0x8137, 0x9633,
+    0x24F4, 0x8137, 0x9634,
+    0x24F5, 0x8137, 0x9635,
+    0x24F6, 0x8137, 0x9636,
+    0x24F7, 0x8137, 0x9637,
+    0x24F8, 0x8137, 0x9638,
+    0x24F9, 0x8137, 0x9639,
+    0x24FA, 0x8137, 0x9730,
+    0x24FB, 0x8137, 0x9731,
+    0x24FC, 0x8137, 0x9732,
+    0x24FD, 0x8137, 0x9733,
+    0x24FE, 0x8137, 0x9734,
+    0x24FF, 0x8137, 0x9735,
+    0x254C, 0x8137, 0x9736,
+    0x254D, 0x8137, 0x9737,
+    0x254E, 0x8137, 0x9738,
+    0x254F, 0x8137, 0x9739,
+    0x2574, 0x8137, 0x9830,
+    0x2575, 0x8137, 0x9831,
+    0x2576, 0x8137, 0x9832,
+    0x2577, 0x8137, 0x9833,
+    0x2578, 0x8137, 0x9834,
+    0x2579, 0x8137, 0x9835,
+    0x257A, 0x8137, 0x9836,
+    0x257B, 0x8137, 0x9837,
+    0x257C, 0x8137, 0x9838,
+    0x257D, 0x8137, 0x9839,
+    0x257E, 0x8137, 0x9930,
+    0x257F, 0x8137, 0x9931,
+    0x2580, 0x8137, 0x9932,
+    0x2590, 0x8137, 0x9933,
+    0x2591, 0x8137, 0x9934,
+    0x2592, 0x8137, 0x9935,
+    0x2596, 0x8137, 0x9936,
+    0x2597, 0x8137, 0x9937,
+    0x2598, 0x8137, 0x9938,
+    0x2599, 0x8137, 0x9939,
+    0x259A, 0x8137, 0x9A30,
+    0x259B, 0x8137, 0x9A31,
+    0x259C, 0x8137, 0x9A32,
+    0x259D, 0x8137, 0x9A33,
+    0x259E, 0x8137, 0x9A34,
+    0x259F, 0x8137, 0x9A35,
+    0x25A2, 0x8137, 0x9A36,
+    0x25A3, 0x8137, 0x9A37,
+    0x25A4, 0x8137, 0x9A38,
+    0x25A5, 0x8137, 0x9A39,
+    0x25A6, 0x8137, 0x9B30,
+    0x25A7, 0x8137, 0x9B31,
+    0x25A8, 0x8137, 0x9B32,
+    0x25A9, 0x8137, 0x9B33,
+    0x25AA, 0x8137, 0x9B34,
+    0x25AB, 0x8137, 0x9B35,
+    0x25AC, 0x8137, 0x9B36,
+    0x25AD, 0x8137, 0x9B37,
+    0x25AE, 0x8137, 0x9B38,
+    0x25AF, 0x8137, 0x9B39,
+    0x25B0, 0x8137, 0x9C30,
+    0x25B1, 0x8137, 0x9C31,
+    0x25B4, 0x8137, 0x9C32,
+    0x25B5, 0x8137, 0x9C33,
+    0x25B6, 0x8137, 0x9C34,
+    0x25B7, 0x8137, 0x9C35,
+    0x25B8, 0x8137, 0x9C36,
+    0x25B9, 0x8137, 0x9C37,
+    0x25BA, 0x8137, 0x9C38,
+    0x25BB, 0x8137, 0x9C39,
+    0x25BE, 0x8137, 0x9D30,
+    0x25BF, 0x8137, 0x9D31,
+    0x25C0, 0x8137, 0x9D32,
+    0x25C1, 0x8137, 0x9D33,
+    0x25C2, 0x8137, 0x9D34,
+    0x25C3, 0x8137, 0x9D35,
+    0x25C4, 0x8137, 0x9D36,
+    0x25C5, 0x8137, 0x9D37,
+    0x25C8, 0x8137, 0x9D38,
+    0x25C9, 0x8137, 0x9D39,
+    0x25CA, 0x8137, 0x9E30,
+    0x25CC, 0x8137, 0x9E31,
+    0x25CD, 0x8137, 0x9E32,
+    0x25D0, 0x8137, 0x9E33,
+    0x25D1, 0x8137, 0x9E34,
+    0x25D2, 0x8137, 0x9E35,
+    0x25D3, 0x8137, 0x9E36,
+    0x25D4, 0x8137, 0x9E37,
+    0x25D5, 0x8137, 0x9E38,
+    0x25D6, 0x8137, 0x9E39,
+    0x25D7, 0x8137, 0x9F30,
+    0x25D8, 0x8137, 0x9F31,
+    0x25D9, 0x8137, 0x9F32,
+    0x25DA, 0x8137, 0x9F33,
+    0x25DB, 0x8137, 0x9F34,
+    0x25DC, 0x8137, 0x9F35,
+    0x25DD, 0x8137, 0x9F36,
+    0x25DE, 0x8137, 0x9F37,
+    0x25DF, 0x8137, 0x9F38,
+    0x25E0, 0x8137, 0x9F39,
+    0x25E1, 0x8137, 0xA030,
+    0x25E6, 0x8137, 0xA031,
+    0x25E7, 0x8137, 0xA032,
+    0x25E8, 0x8137, 0xA033,
+    0x25E9, 0x8137, 0xA034,
+    0x25EA, 0x8137, 0xA035,
+    0x25EB, 0x8137, 0xA036,
+    0x25EC, 0x8137, 0xA037,
+    0x25ED, 0x8137, 0xA038,
+    0x25EE, 0x8137, 0xA039,
+    0x25EF, 0x8137, 0xA130,
+    0x25F0, 0x8137, 0xA131,
+    0x25F1, 0x8137, 0xA132,
+    0x25F2, 0x8137, 0xA133,
+    0x25F3, 0x8137, 0xA134,
+    0x25F4, 0x8137, 0xA135,
+    0x25F5, 0x8137, 0xA136,
+    0x25F6, 0x8137, 0xA137,
+    0x25F7, 0x8137, 0xA138,
+    0x25F8, 0x8137, 0xA139,
+    0x25F9, 0x8137, 0xA230,
+    0x25FA, 0x8137, 0xA231,
+    0x25FB, 0x8137, 0xA232,
+    0x25FC, 0x8137, 0xA233,
+    0x25FD, 0x8137, 0xA234,
+    0x25FE, 0x8137, 0xA235,
+    0x25FF, 0x8137, 0xA236,
+    0x2600, 0x8137, 0xA237,
+    0x2601, 0x8137, 0xA238,
+    0x2602, 0x8137, 0xA239,
+    0x2603, 0x8137, 0xA330,
+    0x2604, 0x8137, 0xA331,
+    0x2607, 0x8137, 0xA332,
+    0x2608, 0x8137, 0xA333,
+    0x260A, 0x8137, 0xA334,
+    0x260B, 0x8137, 0xA335,
+    0x260C, 0x8137, 0xA336,
+    0x260D, 0x8137, 0xA337,
+    0x260E, 0x8137, 0xA338,
+    0x260F, 0x8137, 0xA339,
+    0x2610, 0x8137, 0xA430,
+    0x2611, 0x8137, 0xA431,
+    0x2612, 0x8137, 0xA432,
+    0x2613, 0x8137, 0xA433,
+    0x2614, 0x8137, 0xA434,
+    0x2615, 0x8137, 0xA435,
+    0x2616, 0x8137, 0xA436,
+    0x2617, 0x8137, 0xA437,
+    0x2618, 0x8137, 0xA438,
+    0x2619, 0x8137, 0xA439,
+    0x261A, 0x8137, 0xA530,
+    0x261B, 0x8137, 0xA531,
+    0x261C, 0x8137, 0xA532,
+    0x261D, 0x8137, 0xA533,
+    0x261E, 0x8137, 0xA534,
+    0x261F, 0x8137, 0xA535,
+    0x2620, 0x8137, 0xA536,
+    0x2621, 0x8137, 0xA537,
+    0x2622, 0x8137, 0xA538,
+    0x2623, 0x8137, 0xA539,
+    0x2624, 0x8137, 0xA630,
+    0x2625, 0x8137, 0xA631,
+    0x2626, 0x8137, 0xA632,
+    0x2627, 0x8137, 0xA633,
+    0x2628, 0x8137, 0xA634,
+    0x2629, 0x8137, 0xA635,
+    0x262A, 0x8137, 0xA636,
+    0x262B, 0x8137, 0xA637,
+    0x262C, 0x8137, 0xA638,
+    0x262D, 0x8137, 0xA639,
+    0x262E, 0x8137, 0xA730,
+    0x262F, 0x8137, 0xA731,
+    0x2630, 0x8137, 0xA732,
+    0x2631, 0x8137, 0xA733,
+    0x2632, 0x8137, 0xA734,
+    0x2633, 0x8137, 0xA735,
+    0x2634, 0x8137, 0xA736,
+    0x2635, 0x8137, 0xA737,
+    0x2636, 0x8137, 0xA738,
+    0x2637, 0x8137, 0xA739,
+    0x2638, 0x8137, 0xA830,
+    0x2639, 0x8137, 0xA831,
+    0x263A, 0x8137, 0xA832,
+    0x263B, 0x8137, 0xA833,
+    0x263C, 0x8137, 0xA834,
+    0x263D, 0x8137, 0xA835,
+    0x263E, 0x8137, 0xA836,
+    0x263F, 0x8137, 0xA837,
+    0x2641, 0x8137, 0xA838,
+    0x2E82, 0x8138, 0xFD39,
+    0x2E83, 0x8138, 0xFE30,
+    0x2E85, 0x8138, 0xFE31,
+    0x2E86, 0x8138, 0xFE32,
+    0x2E87, 0x8138, 0xFE33,
+    0x2E89, 0x8138, 0xFE34,
+    0x2E8A, 0x8138, 0xFE35,
+    0x2E8D, 0x8138, 0xFE36,
+    0x2E8E, 0x8138, 0xFE37,
+    0x2E8F, 0x8138, 0xFE38,
+    0x2E90, 0x8138, 0xFE39,
+    0x2E91, 0x8139, 0x8130,
+    0x2E92, 0x8139, 0x8131,
+    0x2E93, 0x8139, 0x8132,
+    0x2E94, 0x8139, 0x8133,
+    0x2E95, 0x8139, 0x8134,
+    0x2E96, 0x8139, 0x8135,
+    0x2E98, 0x8139, 0x8136,
+    0x2E99, 0x8139, 0x8137,
+    0x2E9A, 0x8139, 0x8138,
+    0x2E9B, 0x8139, 0x8139,
+    0x2E9C, 0x8139, 0x8230,
+    0x2E9D, 0x8139, 0x8231,
+    0x2E9E, 0x8139, 0x8232,
+    0x2E9F, 0x8139, 0x8233,
+    0x2EA0, 0x8139, 0x8234,
+    0x2EA1, 0x8139, 0x8235,
+    0x2EA2, 0x8139, 0x8236,
+    0x2EA3, 0x8139, 0x8237,
+    0x2EA4, 0x8139, 0x8238,
+    0x2EA5, 0x8139, 0x8239,
+    0x2EA6, 0x8139, 0x8330,
+    0x2EA8, 0x8139, 0x8331,
+    0x2EA9, 0x8139, 0x8332,
+    0x2EAB, 0x8139, 0x8333,
+    0x2EAC, 0x8139, 0x8334,
+    0x2EAD, 0x8139, 0x8335,
+    0x2EAF, 0x8139, 0x8336,
+    0x2EB0, 0x8139, 0x8337,
+    0x2EB1, 0x8139, 0x8338,
+    0x2EB2, 0x8139, 0x8339,
+    0x2EB4, 0x8139, 0x8430,
+    0x2EB5, 0x8139, 0x8431,
+    0x2EB8, 0x8139, 0x8432,
+    0x2EB9, 0x8139, 0x8433,
+    0x2EBA, 0x8139, 0x8434,
+    0x2EBC, 0x8139, 0x8435,
+    0x2EBD, 0x8139, 0x8436,
+    0x2EBE, 0x8139, 0x8437,
+    0x2EBF, 0x8139, 0x8438,
+    0x2EC0, 0x8139, 0x8439,
+    0x2EC1, 0x8139, 0x8530,
+    0x2EC2, 0x8139, 0x8531,
+    0x2EC3, 0x8139, 0x8532,
+    0x2EC4, 0x8139, 0x8533,
+    0x2EC5, 0x8139, 0x8534,
+    0x2EC6, 0x8139, 0x8535,
+    0x2EC7, 0x8139, 0x8536,
+    0x2EC8, 0x8139, 0x8537,
+    0x2EC9, 0x8139, 0x8538,
+    0x2ECB, 0x8139, 0x8539,
+    0x2ECC, 0x8139, 0x8630,
+    0x2ECD, 0x8139, 0x8631,
+    0x2ECE, 0x8139, 0x8632,
+    0x2ECF, 0x8139, 0x8633,
+    0x2ED0, 0x8139, 0x8634,
+    0x2ED1, 0x8139, 0x8635,
+    0x2ED2, 0x8139, 0x8636,
+    0x2ED3, 0x8139, 0x8637,
+    0x2ED4, 0x8139, 0x8638,
+    0x2ED5, 0x8139, 0x8639,
+    0x2ED6, 0x8139, 0x8730,
+    0x2ED7, 0x8139, 0x8731,
+    0x2ED8, 0x8139, 0x8732,
+    0x2ED9, 0x8139, 0x8733,
+    0x2EDA, 0x8139, 0x8734,
+    0x2EDB, 0x8139, 0x8735,
+    0x2EDC, 0x8139, 0x8736,
+    0x2EDD, 0x8139, 0x8737,
+    0x2EDE, 0x8139, 0x8738,
+    0x2EDF, 0x8139, 0x8739,
+    0x2EE0, 0x8139, 0x8830,
+    0x2EE1, 0x8139, 0x8831,
+    0x2EE2, 0x8139, 0x8832,
+    0x2EE3, 0x8139, 0x8833,
+    0x2EE4, 0x8139, 0x8834,
+    0x2EE5, 0x8139, 0x8835,
+    0x2EE6, 0x8139, 0x8836,
+    0x2EE7, 0x8139, 0x8837,
+    0x2EE8, 0x8139, 0x8838,
+    0x2EE9, 0x8139, 0x8839,
+    0x2EEA, 0x8139, 0x8930,
+    0x2EEB, 0x8139, 0x8931,
+    0x2EEC, 0x8139, 0x8932,
+    0x2EED, 0x8139, 0x8933,
+    0x2EEE, 0x8139, 0x8934,
+    0x2EEF, 0x8139, 0x8935,
+    0x2EF0, 0x8139, 0x8936,
+    0x2EF1, 0x8139, 0x8937,
+    0x2EF2, 0x8139, 0x8938,
+    0x2EF3, 0x8139, 0x8939,
+    0x2EF4, 0x8139, 0x8A30,
+    0x2EF5, 0x8139, 0x8A31,
+    0x2EF6, 0x8139, 0x8A32,
+    0x2EF7, 0x8139, 0x8A33,
+    0x2EF8, 0x8139, 0x8A34,
+    0x2EF9, 0x8139, 0x8A35,
+    0x2EFA, 0x8139, 0x8A36,
+    0x2EFB, 0x8139, 0x8A37,
+    0x2EFC, 0x8139, 0x8A38,
+    0x2EFD, 0x8139, 0x8A39,
+    0x2EFE, 0x8139, 0x8B30,
+    0x2EFF, 0x8139, 0x8B31,
+    0x2F00, 0x8139, 0x8B32,
+    0x2F01, 0x8139, 0x8B33,
+    0x2F02, 0x8139, 0x8B34,
+    0x2F03, 0x8139, 0x8B35,
+    0x2F04, 0x8139, 0x8B36,
+    0x2F05, 0x8139, 0x8B37,
+    0x2F06, 0x8139, 0x8B38,
+    0x2F07, 0x8139, 0x8B39,
+    0x2F08, 0x8139, 0x8C30,
+    0x2F09, 0x8139, 0x8C31,
+    0x2F0A, 0x8139, 0x8C32,
+    0x2F0B, 0x8139, 0x8C33,
+    0x2F0C, 0x8139, 0x8C34,
+    0x2F0D, 0x8139, 0x8C35,
+    0x2F0E, 0x8139, 0x8C36,
+    0x2F0F, 0x8139, 0x8C37,
+    0x2F10, 0x8139, 0x8C38,
+    0x2F11, 0x8139, 0x8C39,
+    0x2F12, 0x8139, 0x8D30,
+    0x2F13, 0x8139, 0x8D31,
+    0x2F14, 0x8139, 0x8D32,
+    0x2F15, 0x8139, 0x8D33,
+    0x2F16, 0x8139, 0x8D34,
+    0x2F17, 0x8139, 0x8D35,
+    0x2F18, 0x8139, 0x8D36,
+    0x2F19, 0x8139, 0x8D37,
+    0x2F1A, 0x8139, 0x8D38,
+    0x2F1B, 0x8139, 0x8D39,
+    0x2F1C, 0x8139, 0x8E30,
+    0x2F1D, 0x8139, 0x8E31,
+    0x2F1E, 0x8139, 0x8E32,
+    0x2F1F, 0x8139, 0x8E33,
+    0x2F20, 0x8139, 0x8E34,
+    0x2F21, 0x8139, 0x8E35,
+    0x2F22, 0x8139, 0x8E36,
+    0x2F23, 0x8139, 0x8E37,
+    0x2F24, 0x8139, 0x8E38,
+    0x2F25, 0x8139, 0x8E39,
+    0x2F26, 0x8139, 0x8F30,
+    0x2F27, 0x8139, 0x8F31,
+    0x2F28, 0x8139, 0x8F32,
+    0x2F29, 0x8139, 0x8F33,
+    0x2F2A, 0x8139, 0x8F34,
+    0x2F2B, 0x8139, 0x8F35,
+    0x2F2C, 0x8139, 0x8F36,
+    0x2F2D, 0x8139, 0x8F37,
+    0x2F2E, 0x8139, 0x8F38,
+    0x2F2F, 0x8139, 0x8F39,
+    0x2F30, 0x8139, 0x9030,
+    0x2F31, 0x8139, 0x9031,
+    0x2F32, 0x8139, 0x9032,
+    0x2F33, 0x8139, 0x9033,
+    0x2F34, 0x8139, 0x9034,
+    0x2F35, 0x8139, 0x9035,
+    0x2F36, 0x8139, 0x9036,
+    0x2F37, 0x8139, 0x9037,
+    0x2F38, 0x8139, 0x9038,
+    0x2F39, 0x8139, 0x9039,
+    0x2F3A, 0x8139, 0x9130,
+    0x2F3B, 0x8139, 0x9131,
+    0x2F3C, 0x8139, 0x9132,
+    0x2F3D, 0x8139, 0x9133,
+    0x2F3E, 0x8139, 0x9134,
+    0x2F3F, 0x8139, 0x9135,
+    0x2F40, 0x8139, 0x9136,
+    0x2F41, 0x8139, 0x9137,
+    0x2F42, 0x8139, 0x9138,
+    0x2F43, 0x8139, 0x9139,
+    0x2F44, 0x8139, 0x9230,
+    0x2F45, 0x8139, 0x9231,
+    0x2F46, 0x8139, 0x9232,
+    0x2F47, 0x8139, 0x9233,
+    0x2F48, 0x8139, 0x9234,
+    0x2F49, 0x8139, 0x9235,
+    0x2F4A, 0x8139, 0x9236,
+    0x2F4B, 0x8139, 0x9237,
+    0x2F4C, 0x8139, 0x9238,
+    0x2F4D, 0x8139, 0x9239,
+    0x2F4E, 0x8139, 0x9330,
+    0x2F4F, 0x8139, 0x9331,
+    0x2F50, 0x8139, 0x9332,
+    0x2F51, 0x8139, 0x9333,
+    0x2F52, 0x8139, 0x9334,
+    0x2F53, 0x8139, 0x9335,
+    0x2F54, 0x8139, 0x9336,
+    0x2F55, 0x8139, 0x9337,
+    0x2F56, 0x8139, 0x9338,
+    0x2F57, 0x8139, 0x9339,
+    0x2F58, 0x8139, 0x9430,
+    0x2F59, 0x8139, 0x9431,
+    0x2F5A, 0x8139, 0x9432,
+    0x2F5B, 0x8139, 0x9433,
+    0x2F5C, 0x8139, 0x9434,
+    0x2F5D, 0x8139, 0x9435,
+    0x2F5E, 0x8139, 0x9436,
+    0x2F5F, 0x8139, 0x9437,
+    0x2F60, 0x8139, 0x9438,
+    0x2F61, 0x8139, 0x9439,
+    0x2F62, 0x8139, 0x9530,
+    0x2F63, 0x8139, 0x9531,
+    0x2F64, 0x8139, 0x9532,
+    0x2F65, 0x8139, 0x9533,
+    0x2F66, 0x8139, 0x9534,
+    0x2F67, 0x8139, 0x9535,
+    0x2F68, 0x8139, 0x9536,
+    0x2F69, 0x8139, 0x9537,
+    0x2F6A, 0x8139, 0x9538,
+    0x2F6B, 0x8139, 0x9539,
+    0x2F6C, 0x8139, 0x9630,
+    0x2F6D, 0x8139, 0x9631,
+    0x2F6E, 0x8139, 0x9632,
+    0x2F6F, 0x8139, 0x9633,
+    0x2F70, 0x8139, 0x9634,
+    0x2F71, 0x8139, 0x9635,
+    0x2F72, 0x8139, 0x9636,
+    0x2F73, 0x8139, 0x9637,
+    0x2F74, 0x8139, 0x9638,
+    0x2F75, 0x8139, 0x9639,
+    0x2F76, 0x8139, 0x9730,
+    0x2F77, 0x8139, 0x9731,
+    0x2F78, 0x8139, 0x9732,
+    0x2F79, 0x8139, 0x9733,
+    0x2F7A, 0x8139, 0x9734,
+    0x2F7B, 0x8139, 0x9735,
+    0x2F7C, 0x8139, 0x9736,
+    0x2F7D, 0x8139, 0x9737,
+    0x2F7E, 0x8139, 0x9738,
+    0x2F7F, 0x8139, 0x9739,
+    0x2F80, 0x8139, 0x9830,
+    0x2F81, 0x8139, 0x9831,
+    0x2F82, 0x8139, 0x9832,
+    0x2F83, 0x8139, 0x9833,
+    0x2F84, 0x8139, 0x9834,
+    0x2F85, 0x8139, 0x9835,
+    0x2F86, 0x8139, 0x9836,
+    0x2F87, 0x8139, 0x9837,
+    0x2F88, 0x8139, 0x9838,
+    0x2F89, 0x8139, 0x9839,
+    0x2F8A, 0x8139, 0x9930,
+    0x2F8B, 0x8139, 0x9931,
+    0x2F8C, 0x8139, 0x9932,
+    0x2F8D, 0x8139, 0x9933,
+    0x2F8E, 0x8139, 0x9934,
+    0x2F8F, 0x8139, 0x9935,
+    0x2F90, 0x8139, 0x9936,
+    0x2F91, 0x8139, 0x9937,
+    0x2F92, 0x8139, 0x9938,
+    0x2F93, 0x8139, 0x9939,
+    0x2F94, 0x8139, 0x9A30,
+    0x2F95, 0x8139, 0x9A31,
+    0x2F96, 0x8139, 0x9A32,
+    0x2F97, 0x8139, 0x9A33,
+    0x2F98, 0x8139, 0x9A34,
+    0x2F99, 0x8139, 0x9A35,
+    0x2F9A, 0x8139, 0x9A36,
+    0x2F9B, 0x8139, 0x9A37,
+    0x2F9C, 0x8139, 0x9A38,
+    0x2F9D, 0x8139, 0x9A39,
+    0x2F9E, 0x8139, 0x9B30,
+    0x2F9F, 0x8139, 0x9B31,
+    0x2FA0, 0x8139, 0x9B32,
+    0x2FA1, 0x8139, 0x9B33,
+    0x2FA2, 0x8139, 0x9B34,
+    0x2FA3, 0x8139, 0x9B35,
+    0x2FA4, 0x8139, 0x9B36,
+    0x2FA5, 0x8139, 0x9B37,
+    0x2FA6, 0x8139, 0x9B38,
+    0x2FA7, 0x8139, 0x9B39,
+    0x2FA8, 0x8139, 0x9C30,
+    0x2FA9, 0x8139, 0x9C31,
+    0x2FAA, 0x8139, 0x9C32,
+    0x2FAB, 0x8139, 0x9C33,
+    0x2FAC, 0x8139, 0x9C34,
+    0x2FAD, 0x8139, 0x9C35,
+    0x2FAE, 0x8139, 0x9C36,
+    0x2FAF, 0x8139, 0x9C37,
+    0x2FB0, 0x8139, 0x9C38,
+    0x2FB1, 0x8139, 0x9C39,
+    0x2FB2, 0x8139, 0x9D30,
+    0x2FB3, 0x8139, 0x9D31,
+    0x2FB4, 0x8139, 0x9D32,
+    0x2FB5, 0x8139, 0x9D33,
+    0x2FB6, 0x8139, 0x9D34,
+    0x2FB7, 0x8139, 0x9D35,
+    0x2FB8, 0x8139, 0x9D36,
+    0x2FB9, 0x8139, 0x9D37,
+    0x2FBA, 0x8139, 0x9D38,
+    0x2FBB, 0x8139, 0x9D39,
+    0x2FBC, 0x8139, 0x9E30,
+    0x2FBD, 0x8139, 0x9E31,
+    0x2FBE, 0x8139, 0x9E32,
+    0x2FBF, 0x8139, 0x9E33,
+    0x2FC0, 0x8139, 0x9E34,
+    0x2FC1, 0x8139, 0x9E35,
+    0x2FC2, 0x8139, 0x9E36,
+    0x2FC3, 0x8139, 0x9E37,
+    0x2FC4, 0x8139, 0x9E38,
+    0x2FC5, 0x8139, 0x9E39,
+    0x2FC6, 0x8139, 0x9F30,
+    0x2FC7, 0x8139, 0x9F31,
+    0x2FC8, 0x8139, 0x9F32,
+    0x2FC9, 0x8139, 0x9F33,
+    0x2FCA, 0x8139, 0x9F34,
+    0x2FCB, 0x8139, 0x9F35,
+    0x2FCC, 0x8139, 0x9F36,
+    0x2FCD, 0x8139, 0x9F37,
+    0x2FCE, 0x8139, 0x9F38,
+    0x2FCF, 0x8139, 0x9F39,
+    0x2FD0, 0x8139, 0xA030,
+    0x2FD1, 0x8139, 0xA031,
+    0x2FD2, 0x8139, 0xA032,
+    0x2FD3, 0x8139, 0xA033,
+    0x2FD4, 0x8139, 0xA034,
+    0x2FD5, 0x8139, 0xA035,
+    0x2FD6, 0x8139, 0xA036,
+    0x2FD7, 0x8139, 0xA037,
+    0x2FD8, 0x8139, 0xA038,
+    0x2FD9, 0x8139, 0xA039,
+    0x2FDA, 0x8139, 0xA130,
+    0x2FDB, 0x8139, 0xA131,
+    0x2FDC, 0x8139, 0xA132,
+    0x2FDD, 0x8139, 0xA133,
+    0x2FDE, 0x8139, 0xA134,
+    0x2FDF, 0x8139, 0xA135,
+    0x2FE0, 0x8139, 0xA136,
+    0x2FE1, 0x8139, 0xA137,
+    0x2FE2, 0x8139, 0xA138,
+    0x2FE3, 0x8139, 0xA139,
+    0x2FE4, 0x8139, 0xA230,
+    0x2FE5, 0x8139, 0xA231,
+    0x2FE6, 0x8139, 0xA232,
+    0x2FE7, 0x8139, 0xA233,
+    0x2FE8, 0x8139, 0xA234,
+    0x2FE9, 0x8139, 0xA235,
+    0x2FEA, 0x8139, 0xA236,
+    0x2FEB, 0x8139, 0xA237,
+    0x2FEC, 0x8139, 0xA238,
+    0x2FED, 0x8139, 0xA239,
+    0x2FEE, 0x8139, 0xA330,
+    0x2FEF, 0x8139, 0xA331,
+    0x2FFC, 0x8139, 0xA332,
+    0x2FFD, 0x8139, 0xA333,
+    0x2FFE, 0x8139, 0xA334,
+    0x2FFF, 0x8139, 0xA335,
+    0x3004, 0x8139, 0xA336,
+    0x3018, 0x8139, 0xA337,
+    0x3019, 0x8139, 0xA338,
+    0x301A, 0x8139, 0xA339,
+    0x301B, 0x8139, 0xA430,
+    0x301C, 0x8139, 0xA431,
+    0x301F, 0x8139, 0xA432,
+    0x3020, 0x8139, 0xA433,
+    0x302A, 0x8139, 0xA434,
+    0x302B, 0x8139, 0xA435,
+    0x302C, 0x8139, 0xA436,
+    0x302D, 0x8139, 0xA437,
+    0x302E, 0x8139, 0xA438,
+    0x302F, 0x8139, 0xA439,
+    0x3030, 0x8139, 0xA530,
+    0x3031, 0x8139, 0xA531,
+    0x3032, 0x8139, 0xA532,
+    0x3033, 0x8139, 0xA533,
+    0x3034, 0x8139, 0xA534,
+    0x3035, 0x8139, 0xA535,
+    0x3036, 0x8139, 0xA536,
+    0x3037, 0x8139, 0xA537,
+    0x3038, 0x8139, 0xA538,
+    0x3039, 0x8139, 0xA539,
+    0x303A, 0x8139, 0xA630,
+    0x303B, 0x8139, 0xA631,
+    0x303C, 0x8139, 0xA632,
+    0x303D, 0x8139, 0xA633,
+    0x303F, 0x8139, 0xA634,
+    0x3040, 0x8139, 0xA635,
+    0x3094, 0x8139, 0xA636,
+    0x3095, 0x8139, 0xA637,
+    0x3096, 0x8139, 0xA638,
+    0x3097, 0x8139, 0xA639,
+    0x3098, 0x8139, 0xA730,
+    0x3099, 0x8139, 0xA731,
+    0x309A, 0x8139, 0xA732,
+    0x309F, 0x8139, 0xA733,
+    0x30A0, 0x8139, 0xA734,
+    0x30F7, 0x8139, 0xA735,
+    0x30F8, 0x8139, 0xA736,
+    0x30F9, 0x8139, 0xA737,
+    0x30FA, 0x8139, 0xA738,
+    0x30FB, 0x8139, 0xA739,
+    0x30FF, 0x8139, 0xA830,
+    0x3100, 0x8139, 0xA831,
+    0x3101, 0x8139, 0xA832,
+    0x3102, 0x8139, 0xA833,
+    0x3103, 0x8139, 0xA834,
+    0x3104, 0x8139, 0xA835,
+    0x312A, 0x8139, 0xA836,
+    0x312B, 0x8139, 0xA837,
+    0x312C, 0x8139, 0xA838,
+    0x312D, 0x8139, 0xA839,
+    0x312E, 0x8139, 0xA930,
+    0x312F, 0x8139, 0xA931,
+    0x3130, 0x8139, 0xA932,
+    0x3131, 0x8139, 0xA933,
+    0x3132, 0x8139, 0xA934,
+    0x3133, 0x8139, 0xA935,
+    0x3134, 0x8139, 0xA936,
+    0x3135, 0x8139, 0xA937,
+    0x3136, 0x8139, 0xA938,
+    0x3137, 0x8139, 0xA939,
+    0x3138, 0x8139, 0xAA30,
+    0x3139, 0x8139, 0xAA31,
+    0x313A, 0x8139, 0xAA32,
+    0x313B, 0x8139, 0xAA33,
+    0x313C, 0x8139, 0xAA34,
+    0x313D, 0x8139, 0xAA35,
+    0x313E, 0x8139, 0xAA36,
+    0x313F, 0x8139, 0xAA37,
+    0x3140, 0x8139, 0xAA38,
+    0x3141, 0x8139, 0xAA39,
+    0x3142, 0x8139, 0xAB30,
+    0x3143, 0x8139, 0xAB31,
+    0x3144, 0x8139, 0xAB32,
+    0x3145, 0x8139, 0xAB33,
+    0x3146, 0x8139, 0xAB34,
+    0x3147, 0x8139, 0xAB35,
+    0x3148, 0x8139, 0xAB36,
+    0x3149, 0x8139, 0xAB37,
+    0x314A, 0x8139, 0xAB38,
+    0x314B, 0x8139, 0xAB39,
+    0x314C, 0x8139, 0xAC30,
+    0x314D, 0x8139, 0xAC31,
+    0x314E, 0x8139, 0xAC32,
+    0x314F, 0x8139, 0xAC33,
+    0x3150, 0x8139, 0xAC34,
+    0x3151, 0x8139, 0xAC35,
+    0x3152, 0x8139, 0xAC36,
+    0x3153, 0x8139, 0xAC37,
+    0x3154, 0x8139, 0xAC38,
+    0x3155, 0x8139, 0xAC39,
+    0x3156, 0x8139, 0xAD30,
+    0x3157, 0x8139, 0xAD31,
+    0x3158, 0x8139, 0xAD32,
+    0x3159, 0x8139, 0xAD33,
+    0x315A, 0x8139, 0xAD34,
+    0x315B, 0x8139, 0xAD35,
+    0x315C, 0x8139, 0xAD36,
+    0x315D, 0x8139, 0xAD37,
+    0x315E, 0x8139, 0xAD38,
+    0x315F, 0x8139, 0xAD39,
+    0x3160, 0x8139, 0xAE30,
+    0x3161, 0x8139, 0xAE31,
+    0x3162, 0x8139, 0xAE32,
+    0x3163, 0x8139, 0xAE33,
+    0x3164, 0x8139, 0xAE34,
+    0x3165, 0x8139, 0xAE35,
+    0x3166, 0x8139, 0xAE36,
+    0x3167, 0x8139, 0xAE37,
+    0x3168, 0x8139, 0xAE38,
+    0x3169, 0x8139, 0xAE39,
+    0x316A, 0x8139, 0xAF30,
+    0x316B, 0x8139, 0xAF31,
+    0x316C, 0x8139, 0xAF32,
+    0x316D, 0x8139, 0xAF33,
+    0x316E, 0x8139, 0xAF34,
+    0x316F, 0x8139, 0xAF35,
+    0x3170, 0x8139, 0xAF36,
+    0x3171, 0x8139, 0xAF37,
+    0x3172, 0x8139, 0xAF38,
+    0x3173, 0x8139, 0xAF39,
+    0x3174, 0x8139, 0xB030,
+    0x3175, 0x8139, 0xB031,
+    0x3176, 0x8139, 0xB032,
+    0x3177, 0x8139, 0xB033,
+    0x3178, 0x8139, 0xB034,
+    0x3179, 0x8139, 0xB035,
+    0x317A, 0x8139, 0xB036,
+    0x317B, 0x8139, 0xB037,
+    0x317C, 0x8139, 0xB038,
+    0x317D, 0x8139, 0xB039,
+    0x317E, 0x8139, 0xB130,
+    0x317F, 0x8139, 0xB131,
+    0x3180, 0x8139, 0xB132,
+    0x3181, 0x8139, 0xB133,
+    0x3182, 0x8139, 0xB134,
+    0x3183, 0x8139, 0xB135,
+    0x3184, 0x8139, 0xB136,
+    0x3185, 0x8139, 0xB137,
+    0x3186, 0x8139, 0xB138,
+    0x3187, 0x8139, 0xB139,
+    0x3188, 0x8139, 0xB230,
+    0x3189, 0x8139, 0xB231,
+    0x318A, 0x8139, 0xB232,
+    0x318B, 0x8139, 0xB233,
+    0x318C, 0x8139, 0xB234,
+    0x318D, 0x8139, 0xB235,
+    0x318E, 0x8139, 0xB236,
+    0x318F, 0x8139, 0xB237,
+    0x3190, 0x8139, 0xB238,
+    0x3191, 0x8139, 0xB239,
+    0x3192, 0x8139, 0xB330,
+    0x3193, 0x8139, 0xB331,
+    0x3194, 0x8139, 0xB332,
+    0x3195, 0x8139, 0xB333,
+    0x3196, 0x8139, 0xB334,
+    0x3197, 0x8139, 0xB335,
+    0x3198, 0x8139, 0xB336,
+    0x3199, 0x8139, 0xB337,
+    0x319A, 0x8139, 0xB338,
+    0x319B, 0x8139, 0xB339,
+    0x319C, 0x8139, 0xB430,
+    0x319D, 0x8139, 0xB431,
+    0x319E, 0x8139, 0xB432,
+    0x319F, 0x8139, 0xB433,
+    0x31A0, 0x8139, 0xB434,
+    0x31A1, 0x8139, 0xB435,
+    0x31A2, 0x8139, 0xB436,
+    0x31A3, 0x8139, 0xB437,
+    0x31A4, 0x8139, 0xB438,
+    0x31A5, 0x8139, 0xB439,
+    0x31A6, 0x8139, 0xB530,
+    0x31A7, 0x8139, 0xB531,
+    0x31A8, 0x8139, 0xB532,
+    0x31A9, 0x8139, 0xB533,
+    0x31AA, 0x8139, 0xB534,
+    0x31AB, 0x8139, 0xB535,
+    0x31AC, 0x8139, 0xB536,
+    0x31AD, 0x8139, 0xB537,
+    0x31AE, 0x8139, 0xB538,
+    0x31AF, 0x8139, 0xB539,
+    0x31B0, 0x8139, 0xB630,
+    0x31B1, 0x8139, 0xB631,
+    0x31B2, 0x8139, 0xB632,
+    0x31B3, 0x8139, 0xB633,
+    0x31B4, 0x8139, 0xB634,
+    0x31B5, 0x8139, 0xB635,
+    0x31B6, 0x8139, 0xB636,
+    0x31B7, 0x8139, 0xB637,
+    0x31B8, 0x8139, 0xB638,
+    0x31B9, 0x8139, 0xB639,
+    0x31BA, 0x8139, 0xB730,
+    0x31BB, 0x8139, 0xB731,
+    0x31BC, 0x8139, 0xB732,
+    0x31BD, 0x8139, 0xB733,
+    0x31BE, 0x8139, 0xB734,
+    0x31BF, 0x8139, 0xB735,
+    0x31C0, 0x8139, 0xB736,
+    0x31C1, 0x8139, 0xB737,
+    0x31C2, 0x8139, 0xB738,
+    0x31C3, 0x8139, 0xB739,
+    0x31C4, 0x8139, 0xB830,
+    0x31C5, 0x8139, 0xB831,
+    0x31C6, 0x8139, 0xB832,
+    0x31C7, 0x8139, 0xB833,
+    0x31C8, 0x8139, 0xB834,
+    0x31C9, 0x8139, 0xB835,
+    0x31CA, 0x8139, 0xB836,
+    0x31CB, 0x8139, 0xB837,
+    0x31CC, 0x8139, 0xB838,
+    0x31CD, 0x8139, 0xB839,
+    0x31CE, 0x8139, 0xB930,
+    0x31CF, 0x8139, 0xB931,
+    0x31D0, 0x8139, 0xB932,
+    0x31D1, 0x8139, 0xB933,
+    0x31D2, 0x8139, 0xB934,
+    0x31D3, 0x8139, 0xB935,
+    0x31D4, 0x8139, 0xB936,
+    0x31D5, 0x8139, 0xB937,
+    0x31D6, 0x8139, 0xB938,
+    0x31D7, 0x8139, 0xB939,
+    0x31D8, 0x8139, 0xBA30,
+    0x31D9, 0x8139, 0xBA31,
+    0x31DA, 0x8139, 0xBA32,
+    0x31DB, 0x8139, 0xBA33,
+    0x31DC, 0x8139, 0xBA34,
+    0x31DD, 0x8139, 0xBA35,
+    0x31DE, 0x8139, 0xBA36,
+    0x31DF, 0x8139, 0xBA37,
+    0x31E0, 0x8139, 0xBA38,
+    0x31E1, 0x8139, 0xBA39,
+    0x31E2, 0x8139, 0xBB30,
+    0x31E3, 0x8139, 0xBB31,
+    0x31E4, 0x8139, 0xBB32,
+    0x31E5, 0x8139, 0xBB33,
+    0x31E6, 0x8139, 0xBB34,
+    0x31E7, 0x8139, 0xBB35,
+    0x31E8, 0x8139, 0xBB36,
+    0x31E9, 0x8139, 0xBB37,
+    0x31EA, 0x8139, 0xBB38,
+    0x31EB, 0x8139, 0xBB39,
+    0x31EC, 0x8139, 0xBC30,
+    0x31ED, 0x8139, 0xBC31,
+    0x31EE, 0x8139, 0xBC32,
+    0x31EF, 0x8139, 0xBC33,
+    0x31F0, 0x8139, 0xBC34,
+    0x31F1, 0x8139, 0xBC35,
+    0x31F2, 0x8139, 0xBC36,
+    0x31F3, 0x8139, 0xBC37,
+    0x31F4, 0x8139, 0xBC38,
+    0x31F5, 0x8139, 0xBC39,
+    0x31F6, 0x8139, 0xBD30,
+    0x31F7, 0x8139, 0xBD31,
+    0x31F8, 0x8139, 0xBD32,
+    0x31F9, 0x8139, 0xBD33,
+    0x31FA, 0x8139, 0xBD34,
+    0x31FB, 0x8139, 0xBD35,
+    0x31FC, 0x8139, 0xBD36,
+    0x31FD, 0x8139, 0xBD37,
+    0x31FE, 0x8139, 0xBD38,
+    0x31FF, 0x8139, 0xBD39,
+    0x3200, 0x8139, 0xBE30,
+    0x3201, 0x8139, 0xBE31,
+    0x3202, 0x8139, 0xBE32,
+    0x3203, 0x8139, 0xBE33,
+    0x3204, 0x8139, 0xBE34,
+    0x3205, 0x8139, 0xBE35,
+    0x3206, 0x8139, 0xBE36,
+    0x3207, 0x8139, 0xBE37,
+    0x3208, 0x8139, 0xBE38,
+    0x3209, 0x8139, 0xBE39,
+    0x320A, 0x8139, 0xBF30,
+    0x320B, 0x8139, 0xBF31,
+    0x320C, 0x8139, 0xBF32,
+    0x320D, 0x8139, 0xBF33,
+    0x320E, 0x8139, 0xBF34,
+    0x320F, 0x8139, 0xBF35,
+    0x3210, 0x8139, 0xBF36,
+    0x3211, 0x8139, 0xBF37,
+    0x3212, 0x8139, 0xBF38,
+    0x3213, 0x8139, 0xBF39,
+    0x3214, 0x8139, 0xC030,
+    0x3215, 0x8139, 0xC031,
+    0x3216, 0x8139, 0xC032,
+    0x3217, 0x8139, 0xC033,
+    0x3218, 0x8139, 0xC034,
+    0x3219, 0x8139, 0xC035,
+    0x321A, 0x8139, 0xC036,
+    0x321B, 0x8139, 0xC037,
+    0x321C, 0x8139, 0xC038,
+    0x321D, 0x8139, 0xC039,
+    0x321E, 0x8139, 0xC130,
+    0x321F, 0x8139, 0xC131,
+    0x322A, 0x8139, 0xC132,
+    0x322B, 0x8139, 0xC133,
+    0x322C, 0x8139, 0xC134,
+    0x322D, 0x8139, 0xC135,
+    0x322E, 0x8139, 0xC136,
+    0x322F, 0x8139, 0xC137,
+    0x3230, 0x8139, 0xC138,
+    0x3232, 0x8139, 0xC139,
+    0x3233, 0x8139, 0xC230,
+    0x3234, 0x8139, 0xC231,
+    0x3235, 0x8139, 0xC232,
+    0x3236, 0x8139, 0xC233,
+    0x3237, 0x8139, 0xC234,
+    0x3238, 0x8139, 0xC235,
+    0x3239, 0x8139, 0xC236,
+    0x323A, 0x8139, 0xC237,
+    0x323B, 0x8139, 0xC238,
+    0x323C, 0x8139, 0xC239,
+    0x323D, 0x8139, 0xC330,
+    0x323E, 0x8139, 0xC331,
+    0x323F, 0x8139, 0xC332,
+    0x3240, 0x8139, 0xC333,
+    0x3241, 0x8139, 0xC334,
+    0x3242, 0x8139, 0xC335,
+    0x3243, 0x8139, 0xC336,
+    0x3244, 0x8139, 0xC337,
+    0x3245, 0x8139, 0xC338,
+    0x3246, 0x8139, 0xC339,
+    0x3247, 0x8139, 0xC430,
+    0x3248, 0x8139, 0xC431,
+    0x3249, 0x8139, 0xC432,
+    0x324A, 0x8139, 0xC433,
+    0x324B, 0x8139, 0xC434,
+    0x324C, 0x8139, 0xC435,
+    0x324D, 0x8139, 0xC436,
+    0x324E, 0x8139, 0xC437,
+    0x324F, 0x8139, 0xC438,
+    0x3250, 0x8139, 0xC439,
+    0x3251, 0x8139, 0xC530,
+    0x3252, 0x8139, 0xC531,
+    0x3253, 0x8139, 0xC532,
+    0x3254, 0x8139, 0xC533,
+    0x3255, 0x8139, 0xC534,
+    0x3256, 0x8139, 0xC535,
+    0x3257, 0x8139, 0xC536,
+    0x3258, 0x8139, 0xC537,
+    0x3259, 0x8139, 0xC538,
+    0x325A, 0x8139, 0xC539,
+    0x325B, 0x8139, 0xC630,
+    0x325C, 0x8139, 0xC631,
+    0x325D, 0x8139, 0xC632,
+    0x325E, 0x8139, 0xC633,
+    0x325F, 0x8139, 0xC634,
+    0x3260, 0x8139, 0xC635,
+    0x3261, 0x8139, 0xC636,
+    0x3262, 0x8139, 0xC637,
+    0x3263, 0x8139, 0xC638,
+    0x3264, 0x8139, 0xC639,
+    0x3265, 0x8139, 0xC730,
+    0x3266, 0x8139, 0xC731,
+    0x3267, 0x8139, 0xC732,
+    0x3268, 0x8139, 0xC733,
+    0x3269, 0x8139, 0xC734,
+    0x326A, 0x8139, 0xC735,
+    0x326B, 0x8139, 0xC736,
+    0x326C, 0x8139, 0xC737,
+    0x326D, 0x8139, 0xC738,
+    0x326E, 0x8139, 0xC739,
+    0x326F, 0x8139, 0xC830,
+    0x3270, 0x8139, 0xC831,
+    0x3271, 0x8139, 0xC832,
+    0x3272, 0x8139, 0xC833,
+    0x3273, 0x8139, 0xC834,
+    0x3274, 0x8139, 0xC835,
+    0x3275, 0x8139, 0xC836,
+    0x3276, 0x8139, 0xC837,
+    0x3277, 0x8139, 0xC838,
+    0x3278, 0x8139, 0xC839,
+    0x3279, 0x8139, 0xC930,
+    0x327A, 0x8139, 0xC931,
+    0x327B, 0x8139, 0xC932,
+    0x327C, 0x8139, 0xC933,
+    0x327D, 0x8139, 0xC934,
+    0x327E, 0x8139, 0xC935,
+    0x327F, 0x8139, 0xC936,
+    0x3280, 0x8139, 0xC937,
+    0x3281, 0x8139, 0xC938,
+    0x3282, 0x8139, 0xC939,
+    0x3283, 0x8139, 0xCA30,
+    0x3284, 0x8139, 0xCA31,
+    0x3285, 0x8139, 0xCA32,
+    0x3286, 0x8139, 0xCA33,
+    0x3287, 0x8139, 0xCA34,
+    0x3288, 0x8139, 0xCA35,
+    0x3289, 0x8139, 0xCA36,
+    0x328A, 0x8139, 0xCA37,
+    0x328B, 0x8139, 0xCA38,
+    0x328C, 0x8139, 0xCA39,
+    0x328D, 0x8139, 0xCB30,
+    0x328E, 0x8139, 0xCB31,
+    0x328F, 0x8139, 0xCB32,
+    0x3290, 0x8139, 0xCB33,
+    0x3291, 0x8139, 0xCB34,
+    0x3292, 0x8139, 0xCB35,
+    0x3293, 0x8139, 0xCB36,
+    0x3294, 0x8139, 0xCB37,
+    0x3295, 0x8139, 0xCB38,
+    0x3296, 0x8139, 0xCB39,
+    0x3297, 0x8139, 0xCC30,
+    0x3298, 0x8139, 0xCC31,
+    0x3299, 0x8139, 0xCC32,
+    0x329A, 0x8139, 0xCC33,
+    0x329B, 0x8139, 0xCC34,
+    0x329C, 0x8139, 0xCC35,
+    0x329D, 0x8139, 0xCC36,
+    0x329E, 0x8139, 0xCC37,
+    0x329F, 0x8139, 0xCC38,
+    0x32A0, 0x8139, 0xCC39,
+    0x32A1, 0x8139, 0xCD30,
+    0x32A2, 0x8139, 0xCD31,
+    0x32A4, 0x8139, 0xCD32,
+    0x32A5, 0x8139, 0xCD33,
+    0x32A6, 0x8139, 0xCD34,
+    0x32A7, 0x8139, 0xCD35,
+    0x32A8, 0x8139, 0xCD36,
+    0x32A9, 0x8139, 0xCD37,
+    0x32AA, 0x8139, 0xCD38,
+    0x32AB, 0x8139, 0xCD39,
+    0x32AC, 0x8139, 0xCE30,
+    0x32AD, 0x8139, 0xCE31,
+    0x32AE, 0x8139, 0xCE32,
+    0x32AF, 0x8139, 0xCE33,
+    0x32B0, 0x8139, 0xCE34,
+    0x32B1, 0x8139, 0xCE35,
+    0x32B2, 0x8139, 0xCE36,
+    0x32B3, 0x8139, 0xCE37,
+    0x32B4, 0x8139, 0xCE38,
+    0x32B5, 0x8139, 0xCE39,
+    0x32B6, 0x8139, 0xCF30,
+    0x32B7, 0x8139, 0xCF31,
+    0x32B8, 0x8139, 0xCF32,
+    0x32B9, 0x8139, 0xCF33,
+    0x32BA, 0x8139, 0xCF34,
+    0x32BB, 0x8139, 0xCF35,
+    0x32BC, 0x8139, 0xCF36,
+    0x32BD, 0x8139, 0xCF37,
+    0x32BE, 0x8139, 0xCF38,
+    0x32BF, 0x8139, 0xCF39,
+    0x32C0, 0x8139, 0xD030,
+    0x32C1, 0x8139, 0xD031,
+    0x32C2, 0x8139, 0xD032,
+    0x32C3, 0x8139, 0xD033,
+    0x32C4, 0x8139, 0xD034,
+    0x32C5, 0x8139, 0xD035,
+    0x32C6, 0x8139, 0xD036,
+    0x32C7, 0x8139, 0xD037,
+    0x32C8, 0x8139, 0xD038,
+    0x32C9, 0x8139, 0xD039,
+    0x32CA, 0x8139, 0xD130,
+    0x32CB, 0x8139, 0xD131,
+    0x32CC, 0x8139, 0xD132,
+    0x32CD, 0x8139, 0xD133,
+    0x32CE, 0x8139, 0xD134,
+    0x32CF, 0x8139, 0xD135,
+    0x32D0, 0x8139, 0xD136,
+    0x32D1, 0x8139, 0xD137,
+    0x32D2, 0x8139, 0xD138,
+    0x32D3, 0x8139, 0xD139,
+    0x32D4, 0x8139, 0xD230,
+    0x32D5, 0x8139, 0xD231,
+    0x32D6, 0x8139, 0xD232,
+    0x32D7, 0x8139, 0xD233,
+    0x32D8, 0x8139, 0xD234,
+    0x32D9, 0x8139, 0xD235,
+    0x32DA, 0x8139, 0xD236,
+    0x32DB, 0x8139, 0xD237,
+    0x32DC, 0x8139, 0xD238,
+    0x32DD, 0x8139, 0xD239,
+    0x32DE, 0x8139, 0xD330,
+    0x32DF, 0x8139, 0xD331,
+    0x32E0, 0x8139, 0xD332,
+    0x32E1, 0x8139, 0xD333,
+    0x32E2, 0x8139, 0xD334,
+    0x32E3, 0x8139, 0xD335,
+    0x32E4, 0x8139, 0xD336,
+    0x32E5, 0x8139, 0xD337,
+    0x32E6, 0x8139, 0xD338,
+    0x32E7, 0x8139, 0xD339,
+    0x32E8, 0x8139, 0xD430,
+    0x32E9, 0x8139, 0xD431,
+    0x32EA, 0x8139, 0xD432,
+    0x32EB, 0x8139, 0xD433,
+    0x32EC, 0x8139, 0xD434,
+    0x32ED, 0x8139, 0xD435,
+    0x32EE, 0x8139, 0xD436,
+    0x32EF, 0x8139, 0xD437,
+    0x32F0, 0x8139, 0xD438,
+    0x32F1, 0x8139, 0xD439,
+    0x32F2, 0x8139, 0xD530,
+    0x32F3, 0x8139, 0xD531,
+    0x32F4, 0x8139, 0xD532,
+    0x32F5, 0x8139, 0xD533,
+    0x32F6, 0x8139, 0xD534,
+    0x32F7, 0x8139, 0xD535,
+    0x32F8, 0x8139, 0xD536,
+    0x32F9, 0x8139, 0xD537,
+    0x32FA, 0x8139, 0xD538,
+    0x32FB, 0x8139, 0xD539,
+    0x32FC, 0x8139, 0xD630,
+    0x32FD, 0x8139, 0xD631,
+    0x32FE, 0x8139, 0xD632,
+    0x32FF, 0x8139, 0xD633,
+    0x3300, 0x8139, 0xD634,
+    0x3301, 0x8139, 0xD635,
+    0x3302, 0x8139, 0xD636,
+    0x3303, 0x8139, 0xD637,
+    0x3304, 0x8139, 0xD638,
+    0x3305, 0x8139, 0xD639,
+    0x3306, 0x8139, 0xD730,
+    0x3307, 0x8139, 0xD731,
+    0x3308, 0x8139, 0xD732,
+    0x3309, 0x8139, 0xD733,
+    0x330A, 0x8139, 0xD734,
+    0x330B, 0x8139, 0xD735,
+    0x330C, 0x8139, 0xD736,
+    0x330D, 0x8139, 0xD737,
+    0x330E, 0x8139, 0xD738,
+    0x330F, 0x8139, 0xD739,
+    0x3310, 0x8139, 0xD830,
+    0x3311, 0x8139, 0xD831,
+    0x3312, 0x8139, 0xD832,
+    0x3313, 0x8139, 0xD833,
+    0x3314, 0x8139, 0xD834,
+    0x3315, 0x8139, 0xD835,
+    0x3316, 0x8139, 0xD836,
+    0x3317, 0x8139, 0xD837,
+    0x3318, 0x8139, 0xD838,
+    0x3319, 0x8139, 0xD839,
+    0x331A, 0x8139, 0xD930,
+    0x331B, 0x8139, 0xD931,
+    0x331C, 0x8139, 0xD932,
+    0x331D, 0x8139, 0xD933,
+    0x331E, 0x8139, 0xD934,
+    0x331F, 0x8139, 0xD935,
+    0x3320, 0x8139, 0xD936,
+    0x3321, 0x8139, 0xD937,
+    0x3322, 0x8139, 0xD938,
+    0x3323, 0x8139, 0xD939,
+    0x3324, 0x8139, 0xDA30,
+    0x3325, 0x8139, 0xDA31,
+    0x3326, 0x8139, 0xDA32,
+    0x3327, 0x8139, 0xDA33,
+    0x3328, 0x8139, 0xDA34,
+    0x3329, 0x8139, 0xDA35,
+    0x332A, 0x8139, 0xDA36,
+    0x332B, 0x8139, 0xDA37,
+    0x332C, 0x8139, 0xDA38,
+    0x332D, 0x8139, 0xDA39,
+    0x332E, 0x8139, 0xDB30,
+    0x332F, 0x8139, 0xDB31,
+    0x3330, 0x8139, 0xDB32,
+    0x3331, 0x8139, 0xDB33,
+    0x3332, 0x8139, 0xDB34,
+    0x3333, 0x8139, 0xDB35,
+    0x3334, 0x8139, 0xDB36,
+    0x3335, 0x8139, 0xDB37,
+    0x3336, 0x8139, 0xDB38,
+    0x3337, 0x8139, 0xDB39,
+    0x3338, 0x8139, 0xDC30,
+    0x3339, 0x8139, 0xDC31,
+    0x333A, 0x8139, 0xDC32,
+    0x333B, 0x8139, 0xDC33,
+    0x333C, 0x8139, 0xDC34,
+    0x333D, 0x8139, 0xDC35,
+    0x333E, 0x8139, 0xDC36,
+    0x333F, 0x8139, 0xDC37,
+    0x3340, 0x8139, 0xDC38,
+    0x3341, 0x8139, 0xDC39,
+    0x3342, 0x8139, 0xDD30,
+    0x3343, 0x8139, 0xDD31,
+    0x3344, 0x8139, 0xDD32,
+    0x3345, 0x8139, 0xDD33,
+    0x3346, 0x8139, 0xDD34,
+    0x3347, 0x8139, 0xDD35,
+    0x3348, 0x8139, 0xDD36,
+    0x3349, 0x8139, 0xDD37,
+    0x334A, 0x8139, 0xDD38,
+    0x334B, 0x8139, 0xDD39,
+    0x334C, 0x8139, 0xDE30,
+    0x334D, 0x8139, 0xDE31,
+    0x334E, 0x8139, 0xDE32,
+    0x334F, 0x8139, 0xDE33,
+    0x3350, 0x8139, 0xDE34,
+    0x3351, 0x8139, 0xDE35,
+    0x3352, 0x8139, 0xDE36,
+    0x3353, 0x8139, 0xDE37,
+    0x3354, 0x8139, 0xDE38,
+    0x3355, 0x8139, 0xDE39,
+    0x3356, 0x8139, 0xDF30,
+    0x3357, 0x8139, 0xDF31,
+    0x3358, 0x8139, 0xDF32,
+    0x3359, 0x8139, 0xDF33,
+    0x335A, 0x8139, 0xDF34,
+    0x335B, 0x8139, 0xDF35,
+    0x335C, 0x8139, 0xDF36,
+    0x335D, 0x8139, 0xDF37,
+    0x335E, 0x8139, 0xDF38,
+    0x335F, 0x8139, 0xDF39,
+    0x3360, 0x8139, 0xE030,
+    0x3361, 0x8139, 0xE031,
+    0x3362, 0x8139, 0xE032,
+    0x3363, 0x8139, 0xE033,
+    0x3364, 0x8139, 0xE034,
+    0x3365, 0x8139, 0xE035,
+    0x3366, 0x8139, 0xE036,
+    0x3367, 0x8139, 0xE037,
+    0x3368, 0x8139, 0xE038,
+    0x3369, 0x8139, 0xE039,
+    0x336A, 0x8139, 0xE130,
+    0x336B, 0x8139, 0xE131,
+    0x336C, 0x8139, 0xE132,
+    0x336D, 0x8139, 0xE133,
+    0x336E, 0x8139, 0xE134,
+    0x336F, 0x8139, 0xE135,
+    0x3370, 0x8139, 0xE136,
+    0x3371, 0x8139, 0xE137,
+    0x3372, 0x8139, 0xE138,
+    0x3373, 0x8139, 0xE139,
+    0x3374, 0x8139, 0xE230,
+    0x3375, 0x8139, 0xE231,
+    0x3376, 0x8139, 0xE232,
+    0x3377, 0x8139, 0xE233,
+    0x3378, 0x8139, 0xE234,
+    0x3379, 0x8139, 0xE235,
+    0x337A, 0x8139, 0xE236,
+    0x337B, 0x8139, 0xE237,
+    0x337C, 0x8139, 0xE238,
+    0x337D, 0x8139, 0xE239,
+    0x337E, 0x8139, 0xE330,
+    0x337F, 0x8139, 0xE331,
+    0x3380, 0x8139, 0xE332,
+    0x3381, 0x8139, 0xE333,
+    0x3382, 0x8139, 0xE334,
+    0x3383, 0x8139, 0xE335,
+    0x3384, 0x8139, 0xE336,
+    0x3385, 0x8139, 0xE337,
+    0x3386, 0x8139, 0xE338,
+    0x3387, 0x8139, 0xE339,
+    0x3388, 0x8139, 0xE430,
+    0x3389, 0x8139, 0xE431,
+    0x338A, 0x8139, 0xE432,
+    0x338B, 0x8139, 0xE433,
+    0x338C, 0x8139, 0xE434,
+    0x338D, 0x8139, 0xE435,
+    0x3390, 0x8139, 0xE436,
+    0x3391, 0x8139, 0xE437,
+    0x3392, 0x8139, 0xE438,
+    0x3393, 0x8139, 0xE439,
+    0x3394, 0x8139, 0xE530,
+    0x3395, 0x8139, 0xE531,
+    0x3396, 0x8139, 0xE532,
+    0x3397, 0x8139, 0xE533,
+    0x3398, 0x8139, 0xE534,
+    0x3399, 0x8139, 0xE535,
+    0x339A, 0x8139, 0xE536,
+    0x339B, 0x8139, 0xE537,
+    0x339F, 0x8139, 0xE538,
+    0x33A0, 0x8139, 0xE539,
+    0x33A2, 0x8139, 0xE630,
+    0x33A3, 0x8139, 0xE631,
+    0x33A4, 0x8139, 0xE632,
+    0x33A5, 0x8139, 0xE633,
+    0x33A6, 0x8139, 0xE634,
+    0x33A7, 0x8139, 0xE635,
+    0x33A8, 0x8139, 0xE636,
+    0x33A9, 0x8139, 0xE637,
+    0x33AA, 0x8139, 0xE638,
+    0x33AB, 0x8139, 0xE639,
+    0x33AC, 0x8139, 0xE730,
+    0x33AD, 0x8139, 0xE731,
+    0x33AE, 0x8139, 0xE732,
+    0x33AF, 0x8139, 0xE733,
+    0x33B0, 0x8139, 0xE734,
+    0x33B1, 0x8139, 0xE735,
+    0x33B2, 0x8139, 0xE736,
+    0x33B3, 0x8139, 0xE737,
+    0x33B4, 0x8139, 0xE738,
+    0x33B5, 0x8139, 0xE739,
+    0x33B6, 0x8139, 0xE830,
+    0x33B7, 0x8139, 0xE831,
+    0x33B8, 0x8139, 0xE832,
+    0x33B9, 0x8139, 0xE833,
+    0x33BA, 0x8139, 0xE834,
+    0x33BB, 0x8139, 0xE835,
+    0x33BC, 0x8139, 0xE836,
+    0x33BD, 0x8139, 0xE837,
+    0x33BE, 0x8139, 0xE838,
+    0x33BF, 0x8139, 0xE839,
+    0x33C0, 0x8139, 0xE930,
+    0x33C1, 0x8139, 0xE931,
+    0x33C2, 0x8139, 0xE932,
+    0x33C3, 0x8139, 0xE933,
+    0x33C5, 0x8139, 0xE934,
+    0x33C6, 0x8139, 0xE935,
+    0x33C7, 0x8139, 0xE936,
+    0x33C8, 0x8139, 0xE937,
+    0x33C9, 0x8139, 0xE938,
+    0x33CA, 0x8139, 0xE939,
+    0x33CB, 0x8139, 0xEA30,
+    0x33CC, 0x8139, 0xEA31,
+    0x33CD, 0x8139, 0xEA32,
+    0x33CF, 0x8139, 0xEA33,
+    0x33D0, 0x8139, 0xEA34,
+    0x33D3, 0x8139, 0xEA35,
+    0x33D4, 0x8139, 0xEA36,
+    0x33D6, 0x8139, 0xEA37,
+    0x33D7, 0x8139, 0xEA38,
+    0x33D8, 0x8139, 0xEA39,
+    0x33D9, 0x8139, 0xEB30,
+    0x33DA, 0x8139, 0xEB31,
+    0x33DB, 0x8139, 0xEB32,
+    0x33DC, 0x8139, 0xEB33,
+    0x33DD, 0x8139, 0xEB34,
+    0x33DE, 0x8139, 0xEB35,
+    0x33DF, 0x8139, 0xEB36,
+    0x33E0, 0x8139, 0xEB37,
+    0x33E1, 0x8139, 0xEB38,
+    0x33E2, 0x8139, 0xEB39,
+    0x33E3, 0x8139, 0xEC30,
+    0x33E4, 0x8139, 0xEC31,
+    0x33E5, 0x8139, 0xEC32,
+    0x33E6, 0x8139, 0xEC33,
+    0x33E7, 0x8139, 0xEC34,
+    0x33E8, 0x8139, 0xEC35,
+    0x33E9, 0x8139, 0xEC36,
+    0x33EA, 0x8139, 0xEC37,
+    0x33EB, 0x8139, 0xEC38,
+    0x33EC, 0x8139, 0xEC39,
+    0x33ED, 0x8139, 0xED30,
+    0x33EE, 0x8139, 0xED31,
+    0x33EF, 0x8139, 0xED32,
+    0x33F0, 0x8139, 0xED33,
+    0x33F1, 0x8139, 0xED34,
+    0x33F2, 0x8139, 0xED35,
+    0x33F3, 0x8139, 0xED36,
+    0x33F4, 0x8139, 0xED37,
+    0x33F5, 0x8139, 0xED38,
+    0x33F6, 0x8139, 0xED39,
+    0x33F7, 0x8139, 0xEE30,
+    0x33F8, 0x8139, 0xEE31,
+    0x33F9, 0x8139, 0xEE32,
+    0x33FA, 0x8139, 0xEE33,
+    0x33FB, 0x8139, 0xEE34,
+    0x33FC, 0x8139, 0xEE35,
+    0x33FD, 0x8139, 0xEE36,
+    0x33FE, 0x8139, 0xEE37,
+    0x33FF, 0x8139, 0xEE38,
+    0x3400, 0x8139, 0xEE39,
+    0x3401, 0x8139, 0xEF30,
+    0x3402, 0x8139, 0xEF31,
+    0x3403, 0x8139, 0xEF32,
+    0x3404, 0x8139, 0xEF33,
+    0x3405, 0x8139, 0xEF34,
+    0x3406, 0x8139, 0xEF35,
+    0x3407, 0x8139, 0xEF36,
+    0x3408, 0x8139, 0xEF37,
+    0x3409, 0x8139, 0xEF38,
+    0x340A, 0x8139, 0xEF39,
+    0x340B, 0x8139, 0xF030,
+    0x340C, 0x8139, 0xF031,
+    0x340D, 0x8139, 0xF032,
+    0x340E, 0x8139, 0xF033,
+    0x340F, 0x8139, 0xF034,
+    0x3410, 0x8139, 0xF035,
+    0x3411, 0x8139, 0xF036,
+    0x3412, 0x8139, 0xF037,
+    0x3413, 0x8139, 0xF038,
+    0x3414, 0x8139, 0xF039,
+    0x3415, 0x8139, 0xF130,
+    0x3416, 0x8139, 0xF131,
+    0x3417, 0x8139, 0xF132,
+    0x3418, 0x8139, 0xF133,
+    0x3419, 0x8139, 0xF134,
+    0x341A, 0x8139, 0xF135,
+    0x341B, 0x8139, 0xF136,
+    0x341C, 0x8139, 0xF137,
+    0x341D, 0x8139, 0xF138,
+    0x341E, 0x8139, 0xF139,
+    0x341F, 0x8139, 0xF230,
+    0x3420, 0x8139, 0xF231,
+    0x3421, 0x8139, 0xF232,
+    0x3422, 0x8139, 0xF233,
+    0x3423, 0x8139, 0xF234,
+    0x3424, 0x8139, 0xF235,
+    0x3425, 0x8139, 0xF236,
+    0x3426, 0x8139, 0xF237,
+    0x3427, 0x8139, 0xF238,
+    0x3428, 0x8139, 0xF239,
+    0x3429, 0x8139, 0xF330,
+    0x342A, 0x8139, 0xF331,
+    0x342B, 0x8139, 0xF332,
+    0x342C, 0x8139, 0xF333,
+    0x342D, 0x8139, 0xF334,
+    0x342E, 0x8139, 0xF335,
+    0x342F, 0x8139, 0xF336,
+    0x3430, 0x8139, 0xF337,
+    0x3431, 0x8139, 0xF338,
+    0x3432, 0x8139, 0xF339,
+    0x3433, 0x8139, 0xF430,
+    0x3434, 0x8139, 0xF431,
+    0x3435, 0x8139, 0xF432,
+    0x3436, 0x8139, 0xF433,
+    0x3437, 0x8139, 0xF434,
+    0x3438, 0x8139, 0xF435,
+    0x3439, 0x8139, 0xF436,
+    0x343A, 0x8139, 0xF437,
+    0x343B, 0x8139, 0xF438,
+    0x343C, 0x8139, 0xF439,
+    0x343D, 0x8139, 0xF530,
+    0x343E, 0x8139, 0xF531,
+    0x343F, 0x8139, 0xF532,
+    0x3440, 0x8139, 0xF533,
+    0x3441, 0x8139, 0xF534,
+    0x3442, 0x8139, 0xF535,
+    0x3443, 0x8139, 0xF536,
+    0x3444, 0x8139, 0xF537,
+    0x3445, 0x8139, 0xF538,
+    0x3446, 0x8139, 0xF539,
+    0x3448, 0x8139, 0xF630,
+    0x3449, 0x8139, 0xF631,
+    0x344A, 0x8139, 0xF632,
+    0x344B, 0x8139, 0xF633,
+    0x344C, 0x8139, 0xF634,
+    0x344D, 0x8139, 0xF635,
+    0x344E, 0x8139, 0xF636,
+    0x344F, 0x8139, 0xF637,
+    0x3450, 0x8139, 0xF638,
+    0x3451, 0x8139, 0xF639,
+    0x3452, 0x8139, 0xF730,
+    0x3453, 0x8139, 0xF731,
+    0x3454, 0x8139, 0xF732,
+    0x3455, 0x8139, 0xF733,
+    0x3456, 0x8139, 0xF734,
+    0x3457, 0x8139, 0xF735,
+    0x3458, 0x8139, 0xF736,
+    0x3459, 0x8139, 0xF737,
+    0x345A, 0x8139, 0xF738,
+    0x345B, 0x8139, 0xF739,
+    0x345C, 0x8139, 0xF830,
+    0x345D, 0x8139, 0xF831,
+    0x345E, 0x8139, 0xF832,
+    0x345F, 0x8139, 0xF833,
+    0x3460, 0x8139, 0xF834,
+    0x3461, 0x8139, 0xF835,
+    0x3462, 0x8139, 0xF836,
+    0x3463, 0x8139, 0xF837,
+    0x3464, 0x8139, 0xF838,
+    0x3465, 0x8139, 0xF839,
+    0x3466, 0x8139, 0xF930,
+    0x3467, 0x8139, 0xF931,
+    0x3468, 0x8139, 0xF932,
+    0x3469, 0x8139, 0xF933,
+    0x346A, 0x8139, 0xF934,
+    0x346B, 0x8139, 0xF935,
+    0x346C, 0x8139, 0xF936,
+    0x346D, 0x8139, 0xF937,
+    0x346E, 0x8139, 0xF938,
+    0x346F, 0x8139, 0xF939,
+    0x3470, 0x8139, 0xFA30,
+    0x3471, 0x8139, 0xFA31,
+    0x3472, 0x8139, 0xFA32,
+    0x3474, 0x8139, 0xFA33,
+    0x3475, 0x8139, 0xFA34,
+    0x3476, 0x8139, 0xFA35,
+    0x3477, 0x8139, 0xFA36,
+    0x3478, 0x8139, 0xFA37,
+    0x3479, 0x8139, 0xFA38,
+    0x347A, 0x8139, 0xFA39,
+    0x347B, 0x8139, 0xFB30,
+    0x347C, 0x8139, 0xFB31,
+    0x347D, 0x8139, 0xFB32,
+    0x347E, 0x8139, 0xFB33,
+    0x347F, 0x8139, 0xFB34,
+    0x3480, 0x8139, 0xFB35,
+    0x3481, 0x8139, 0xFB36,
+    0x3482, 0x8139, 0xFB37,
+    0x3483, 0x8139, 0xFB38,
+    0x3484, 0x8139, 0xFB39,
+    0x3485, 0x8139, 0xFC30,
+    0x3486, 0x8139, 0xFC31,
+    0x3487, 0x8139, 0xFC32,
+    0x3488, 0x8139, 0xFC33,
+    0x3489, 0x8139, 0xFC34,
+    0x348A, 0x8139, 0xFC35,
+    0x348B, 0x8139, 0xFC36,
+    0x348C, 0x8139, 0xFC37,
+    0x348D, 0x8139, 0xFC38,
+    0x348E, 0x8139, 0xFC39,
+    0x348F, 0x8139, 0xFD30,
+    0x3490, 0x8139, 0xFD31,
+    0x3491, 0x8139, 0xFD32,
+    0x3492, 0x8139, 0xFD33,
+    0x3493, 0x8139, 0xFD34,
+    0x3494, 0x8139, 0xFD35,
+    0x3495, 0x8139, 0xFD36,
+    0x3496, 0x8139, 0xFD37,
+    0x3497, 0x8139, 0xFD38,
+    0x3498, 0x8139, 0xFD39,
+    0x3499, 0x8139, 0xFE30,
+    0x349A, 0x8139, 0xFE31,
+    0x349B, 0x8139, 0xFE32,
+    0x349C, 0x8139, 0xFE33,
+    0x349D, 0x8139, 0xFE34,
+    0x349E, 0x8139, 0xFE35,
+    0x349F, 0x8139, 0xFE36,
+    0x34A0, 0x8139, 0xFE37,
+    0x34A1, 0x8139, 0xFE38,
+    0x34A2, 0x8139, 0xFE39,
+    0x34A3, 0x8230, 0x8130,
+    0x34A4, 0x8230, 0x8131,
+    0x34A5, 0x8230, 0x8132,
+    0x34A6, 0x8230, 0x8133,
+    0x34A7, 0x8230, 0x8134,
+    0x34A8, 0x8230, 0x8135,
+    0x34A9, 0x8230, 0x8136,
+    0x34AA, 0x8230, 0x8137,
+    0x34AB, 0x8230, 0x8138,
+    0x34AC, 0x8230, 0x8139,
+    0x34AD, 0x8230, 0x8230,
+    0x34AE, 0x8230, 0x8231,
+    0x34AF, 0x8230, 0x8232,
+    0x34B0, 0x8230, 0x8233,
+    0x34B1, 0x8230, 0x8234,
+    0x34B2, 0x8230, 0x8235,
+    0x34B3, 0x8230, 0x8236,
+    0x34B4, 0x8230, 0x8237,
+    0x34B5, 0x8230, 0x8238,
+    0x34B6, 0x8230, 0x8239,
+    0x34B7, 0x8230, 0x8330,
+    0x34B8, 0x8230, 0x8331,
+    0x34B9, 0x8230, 0x8332,
+    0x34BA, 0x8230, 0x8333,
+    0x34BB, 0x8230, 0x8334,
+    0x34BC, 0x8230, 0x8335,
+    0x34BD, 0x8230, 0x8336,
+    0x34BE, 0x8230, 0x8337,
+    0x34BF, 0x8230, 0x8338,
+    0x34C0, 0x8230, 0x8339,
+    0x34C1, 0x8230, 0x8430,
+    0x34C2, 0x8230, 0x8431,
+    0x34C3, 0x8230, 0x8432,
+    0x34C4, 0x8230, 0x8433,
+    0x34C5, 0x8230, 0x8434,
+    0x34C6, 0x8230, 0x8435,
+    0x34C7, 0x8230, 0x8436,
+    0x34C8, 0x8230, 0x8437,
+    0x34C9, 0x8230, 0x8438,
+    0x34CA, 0x8230, 0x8439,
+    0x34CB, 0x8230, 0x8530,
+    0x34CC, 0x8230, 0x8531,
+    0x34CD, 0x8230, 0x8532,
+    0x34CE, 0x8230, 0x8533,
+    0x34CF, 0x8230, 0x8534,
+    0x34D0, 0x8230, 0x8535,
+    0x34D1, 0x8230, 0x8536,
+    0x34D2, 0x8230, 0x8537,
+    0x34D3, 0x8230, 0x8538,
+    0x34D4, 0x8230, 0x8539,
+    0x34D5, 0x8230, 0x8630,
+    0x34D6, 0x8230, 0x8631,
+    0x34D7, 0x8230, 0x8632,
+    0x34D8, 0x8230, 0x8633,
+    0x34D9, 0x8230, 0x8634,
+    0x34DA, 0x8230, 0x8635,
+    0x34DB, 0x8230, 0x8636,
+    0x34DC, 0x8230, 0x8637,
+    0x34DD, 0x8230, 0x8638,
+    0x34DE, 0x8230, 0x8639,
+    0x34DF, 0x8230, 0x8730,
+    0x34E0, 0x8230, 0x8731,
+    0x34E1, 0x8230, 0x8732,
+    0x34E2, 0x8230, 0x8733,
+    0x34E3, 0x8230, 0x8734,
+    0x34E4, 0x8230, 0x8735,
+    0x34E5, 0x8230, 0x8736,
+    0x34E6, 0x8230, 0x8737,
+    0x34E7, 0x8230, 0x8738,
+    0x34E8, 0x8230, 0x8739,
+    0x34E9, 0x8230, 0x8830,
+    0x34EA, 0x8230, 0x8831,
+    0x34EB, 0x8230, 0x8832,
+    0x34EC, 0x8230, 0x8833,
+    0x34ED, 0x8230, 0x8834,
+    0x34EE, 0x8230, 0x8835,
+    0x34EF, 0x8230, 0x8836,
+    0x34F0, 0x8230, 0x8837,
+    0x34F1, 0x8230, 0x8838,
+    0x34F2, 0x8230, 0x8839,
+    0x34F3, 0x8230, 0x8930,
+    0x34F4, 0x8230, 0x8931,
+    0x34F5, 0x8230, 0x8932,
+    0x34F6, 0x8230, 0x8933,
+    0x34F7, 0x8230, 0x8934,
+    0x34F8, 0x8230, 0x8935,
+    0x34F9, 0x8230, 0x8936,
+    0x34FA, 0x8230, 0x8937,
+    0x34FB, 0x8230, 0x8938,
+    0x34FC, 0x8230, 0x8939,
+    0x34FD, 0x8230, 0x8A30,
+    0x34FE, 0x8230, 0x8A31,
+    0x34FF, 0x8230, 0x8A32,
+    0x3500, 0x8230, 0x8A33,
+    0x3501, 0x8230, 0x8A34,
+    0x3502, 0x8230, 0x8A35,
+    0x3503, 0x8230, 0x8A36,
+    0x3504, 0x8230, 0x8A37,
+    0x3505, 0x8230, 0x8A38,
+    0x3506, 0x8230, 0x8A39,
+    0x3507, 0x8230, 0x8B30,
+    0x3508, 0x8230, 0x8B31,
+    0x3509, 0x8230, 0x8B32,
+    0x350A, 0x8230, 0x8B33,
+    0x350B, 0x8230, 0x8B34,
+    0x350C, 0x8230, 0x8B35,
+    0x350D, 0x8230, 0x8B36,
+    0x350E, 0x8230, 0x8B37,
+    0x350F, 0x8230, 0x8B38,
+    0x3510, 0x8230, 0x8B39,
+    0x3511, 0x8230, 0x8C30,
+    0x3512, 0x8230, 0x8C31,
+    0x3513, 0x8230, 0x8C32,
+    0x3514, 0x8230, 0x8C33,
+    0x3515, 0x8230, 0x8C34,
+    0x3516, 0x8230, 0x8C35,
+    0x3517, 0x8230, 0x8C36,
+    0x3518, 0x8230, 0x8C37,
+    0x3519, 0x8230, 0x8C38,
+    0x351A, 0x8230, 0x8C39,
+    0x351B, 0x8230, 0x8D30,
+    0x351C, 0x8230, 0x8D31,
+    0x351D, 0x8230, 0x8D32,
+    0x351E, 0x8230, 0x8D33,
+    0x351F, 0x8230, 0x8D34,
+    0x3520, 0x8230, 0x8D35,
+    0x3521, 0x8230, 0x8D36,
+    0x3522, 0x8230, 0x8D37,
+    0x3523, 0x8230, 0x8D38,
+    0x3524, 0x8230, 0x8D39,
+    0x3525, 0x8230, 0x8E30,
+    0x3526, 0x8230, 0x8E31,
+    0x3527, 0x8230, 0x8E32,
+    0x3528, 0x8230, 0x8E33,
+    0x3529, 0x8230, 0x8E34,
+    0x352A, 0x8230, 0x8E35,
+    0x352B, 0x8230, 0x8E36,
+    0x352C, 0x8230, 0x8E37,
+    0x352D, 0x8230, 0x8E38,
+    0x352E, 0x8230, 0x8E39,
+    0x352F, 0x8230, 0x8F30,
+    0x3530, 0x8230, 0x8F31,
+    0x3531, 0x8230, 0x8F32,
+    0x3532, 0x8230, 0x8F33,
+    0x3533, 0x8230, 0x8F34,
+    0x3534, 0x8230, 0x8F35,
+    0x3535, 0x8230, 0x8F36,
+    0x3536, 0x8230, 0x8F37,
+    0x3537, 0x8230, 0x8F38,
+    0x3538, 0x8230, 0x8F39,
+    0x3539, 0x8230, 0x9030,
+    0x353A, 0x8230, 0x9031,
+    0x353B, 0x8230, 0x9032,
+    0x353C, 0x8230, 0x9033,
+    0x353D, 0x8230, 0x9034,
+    0x353E, 0x8230, 0x9035,
+    0x353F, 0x8230, 0x9036,
+    0x3540, 0x8230, 0x9037,
+    0x3541, 0x8230, 0x9038,
+    0x3542, 0x8230, 0x9039,
+    0x3543, 0x8230, 0x9130,
+    0x3544, 0x8230, 0x9131,
+    0x3545, 0x8230, 0x9132,
+    0x3546, 0x8230, 0x9133,
+    0x3547, 0x8230, 0x9134,
+    0x3548, 0x8230, 0x9135,
+    0x3549, 0x8230, 0x9136,
+    0x354A, 0x8230, 0x9137,
+    0x354B, 0x8230, 0x9138,
+    0x354C, 0x8230, 0x9139,
+    0x354D, 0x8230, 0x9230,
+    0x354E, 0x8230, 0x9231,
+    0x354F, 0x8230, 0x9232,
+    0x3550, 0x8230, 0x9233,
+    0x3551, 0x8230, 0x9234,
+    0x3552, 0x8230, 0x9235,
+    0x3553, 0x8230, 0x9236,
+    0x3554, 0x8230, 0x9237,
+    0x3555, 0x8230, 0x9238,
+    0x3556, 0x8230, 0x9239,
+    0x3557, 0x8230, 0x9330,
+    0x3558, 0x8230, 0x9331,
+    0x3559, 0x8230, 0x9332,
+    0x355A, 0x8230, 0x9333,
+    0x355B, 0x8230, 0x9334,
+    0x355C, 0x8230, 0x9335,
+    0x355D, 0x8230, 0x9336,
+    0x355E, 0x8230, 0x9337,
+    0x355F, 0x8230, 0x9338,
+    0x3560, 0x8230, 0x9339,
+    0x3561, 0x8230, 0x9430,
+    0x3562, 0x8230, 0x9431,
+    0x3563, 0x8230, 0x9432,
+    0x3564, 0x8230, 0x9433,
+    0x3565, 0x8230, 0x9434,
+    0x3566, 0x8230, 0x9435,
+    0x3567, 0x8230, 0x9436,
+    0x3568, 0x8230, 0x9437,
+    0x3569, 0x8230, 0x9438,
+    0x356A, 0x8230, 0x9439,
+    0x356B, 0x8230, 0x9530,
+    0x356C, 0x8230, 0x9531,
+    0x356D, 0x8230, 0x9532,
+    0x356E, 0x8230, 0x9533,
+    0x356F, 0x8230, 0x9534,
+    0x3570, 0x8230, 0x9535,
+    0x3571, 0x8230, 0x9536,
+    0x3572, 0x8230, 0x9537,
+    0x3573, 0x8230, 0x9538,
+    0x3574, 0x8230, 0x9539,
+    0x3575, 0x8230, 0x9630,
+    0x3576, 0x8230, 0x9631,
+    0x3577, 0x8230, 0x9632,
+    0x3578, 0x8230, 0x9633,
+    0x3579, 0x8230, 0x9634,
+    0x357A, 0x8230, 0x9635,
+    0x357B, 0x8230, 0x9636,
+    0x357C, 0x8230, 0x9637,
+    0x357D, 0x8230, 0x9638,
+    0x357E, 0x8230, 0x9639,
+    0x357F, 0x8230, 0x9730,
+    0x3580, 0x8230, 0x9731,
+    0x3581, 0x8230, 0x9732,
+    0x3582, 0x8230, 0x9733,
+    0x3583, 0x8230, 0x9734,
+    0x3584, 0x8230, 0x9735,
+    0x3585, 0x8230, 0x9736,
+    0x3586, 0x8230, 0x9737,
+    0x3587, 0x8230, 0x9738,
+    0x3588, 0x8230, 0x9739,
+    0x3589, 0x8230, 0x9830,
+    0x358A, 0x8230, 0x9831,
+    0x358B, 0x8230, 0x9832,
+    0x358C, 0x8230, 0x9833,
+    0x358D, 0x8230, 0x9834,
+    0x358E, 0x8230, 0x9835,
+    0x358F, 0x8230, 0x9836,
+    0x3590, 0x8230, 0x9837,
+    0x3591, 0x8230, 0x9838,
+    0x3592, 0x8230, 0x9839,
+    0x3593, 0x8230, 0x9930,
+    0x3594, 0x8230, 0x9931,
+    0x3595, 0x8230, 0x9932,
+    0x3596, 0x8230, 0x9933,
+    0x3597, 0x8230, 0x9934,
+    0x3598, 0x8230, 0x9935,
+    0x3599, 0x8230, 0x9936,
+    0x359A, 0x8230, 0x9937,
+    0x359B, 0x8230, 0x9938,
+    0x359C, 0x8230, 0x9939,
+    0x359D, 0x8230, 0x9A30,
+    0x359F, 0x8230, 0x9A31,
+    0x35A0, 0x8230, 0x9A32,
+    0x35A1, 0x8230, 0x9A33,
+    0x35A2, 0x8230, 0x9A34,
+    0x35A3, 0x8230, 0x9A35,
+    0x35A4, 0x8230, 0x9A36,
+    0x35A5, 0x8230, 0x9A37,
+    0x35A6, 0x8230, 0x9A38,
+    0x35A7, 0x8230, 0x9A39,
+    0x35A8, 0x8230, 0x9B30,
+    0x35A9, 0x8230, 0x9B31,
+    0x35AA, 0x8230, 0x9B32,
+    0x35AB, 0x8230, 0x9B33,
+    0x35AC, 0x8230, 0x9B34,
+    0x35AD, 0x8230, 0x9B35,
+    0x35AE, 0x8230, 0x9B36,
+    0x35AF, 0x8230, 0x9B37,
+    0x35B0, 0x8230, 0x9B38,
+    0x35B1, 0x8230, 0x9B39,
+    0x35B2, 0x8230, 0x9C30,
+    0x35B3, 0x8230, 0x9C31,
+    0x35B4, 0x8230, 0x9C32,
+    0x35B5, 0x8230, 0x9C33,
+    0x35B6, 0x8230, 0x9C34,
+    0x35B7, 0x8230, 0x9C35,
+    0x35B8, 0x8230, 0x9C36,
+    0x35B9, 0x8230, 0x9C37,
+    0x35BA, 0x8230, 0x9C38,
+    0x35BB, 0x8230, 0x9C39,
+    0x35BC, 0x8230, 0x9D30,
+    0x35BD, 0x8230, 0x9D31,
+    0x35BE, 0x8230, 0x9D32,
+    0x35BF, 0x8230, 0x9D33,
+    0x35C0, 0x8230, 0x9D34,
+    0x35C1, 0x8230, 0x9D35,
+    0x35C2, 0x8230, 0x9D36,
+    0x35C3, 0x8230, 0x9D37,
+    0x35C4, 0x8230, 0x9D38,
+    0x35C5, 0x8230, 0x9D39,
+    0x35C6, 0x8230, 0x9E30,
+    0x35C7, 0x8230, 0x9E31,
+    0x35C8, 0x8230, 0x9E32,
+    0x35C9, 0x8230, 0x9E33,
+    0x35CA, 0x8230, 0x9E34,
+    0x35CB, 0x8230, 0x9E35,
+    0x35CC, 0x8230, 0x9E36,
+    0x35CD, 0x8230, 0x9E37,
+    0x35CE, 0x8230, 0x9E38,
+    0x35CF, 0x8230, 0x9E39,
+    0x35D0, 0x8230, 0x9F30,
+    0x35D1, 0x8230, 0x9F31,
+    0x35D2, 0x8230, 0x9F32,
+    0x35D3, 0x8230, 0x9F33,
+    0x35D4, 0x8230, 0x9F34,
+    0x35D5, 0x8230, 0x9F35,
+    0x35D6, 0x8230, 0x9F36,
+    0x35D7, 0x8230, 0x9F37,
+    0x35D8, 0x8230, 0x9F38,
+    0x35D9, 0x8230, 0x9F39,
+    0x35DA, 0x8230, 0xA030,
+    0x35DB, 0x8230, 0xA031,
+    0x35DC, 0x8230, 0xA032,
+    0x35DD, 0x8230, 0xA033,
+    0x35DE, 0x8230, 0xA034,
+    0x35DF, 0x8230, 0xA035,
+    0x35E0, 0x8230, 0xA036,
+    0x35E1, 0x8230, 0xA037,
+    0x35E2, 0x8230, 0xA038,
+    0x35E3, 0x8230, 0xA039,
+    0x35E4, 0x8230, 0xA130,
+    0x35E5, 0x8230, 0xA131,
+    0x35E6, 0x8230, 0xA132,
+    0x35E7, 0x8230, 0xA133,
+    0x35E8, 0x8230, 0xA134,
+    0x35E9, 0x8230, 0xA135,
+    0x35EA, 0x8230, 0xA136,
+    0x35EB, 0x8230, 0xA137,
+    0x35EC, 0x8230, 0xA138,
+    0x35ED, 0x8230, 0xA139,
+    0x35EE, 0x8230, 0xA230,
+    0x35EF, 0x8230, 0xA231,
+    0x35F0, 0x8230, 0xA232,
+    0x35F1, 0x8230, 0xA233,
+    0x35F2, 0x8230, 0xA234,
+    0x35F3, 0x8230, 0xA235,
+    0x35F4, 0x8230, 0xA236,
+    0x35F5, 0x8230, 0xA237,
+    0x35F6, 0x8230, 0xA238,
+    0x35F7, 0x8230, 0xA239,
+    0x35F8, 0x8230, 0xA330,
+    0x35F9, 0x8230, 0xA331,
+    0x35FA, 0x8230, 0xA332,
+    0x35FB, 0x8230, 0xA333,
+    0x35FC, 0x8230, 0xA334,
+    0x35FD, 0x8230, 0xA335,
+    0x35FE, 0x8230, 0xA336,
+    0x35FF, 0x8230, 0xA337,
+    0x3600, 0x8230, 0xA338,
+    0x3601, 0x8230, 0xA339,
+    0x3602, 0x8230, 0xA430,
+    0x3603, 0x8230, 0xA431,
+    0x3604, 0x8230, 0xA432,
+    0x3605, 0x8230, 0xA433,
+    0x3606, 0x8230, 0xA434,
+    0x3607, 0x8230, 0xA435,
+    0x3608, 0x8230, 0xA436,
+    0x3609, 0x8230, 0xA437,
+    0x360A, 0x8230, 0xA438,
+    0x360B, 0x8230, 0xA439,
+    0x360C, 0x8230, 0xA530,
+    0x360D, 0x8230, 0xA531,
+    0x360F, 0x8230, 0xA532,
+    0x3610, 0x8230, 0xA533,
+    0x3611, 0x8230, 0xA534,
+    0x3612, 0x8230, 0xA535,
+    0x3613, 0x8230, 0xA536,
+    0x3614, 0x8230, 0xA537,
+    0x3615, 0x8230, 0xA538,
+    0x3616, 0x8230, 0xA539,
+    0x3617, 0x8230, 0xA630,
+    0x3618, 0x8230, 0xA631,
+    0x3619, 0x8230, 0xA632,
+    0x3919, 0x8230, 0xF238,
+    0x391A, 0x8230, 0xF239,
+    0x391B, 0x8230, 0xF330,
+    0x391C, 0x8230, 0xF331,
+    0x391D, 0x8230, 0xF332,
+    0x391E, 0x8230, 0xF333,
+    0x391F, 0x8230, 0xF334,
+    0x3920, 0x8230, 0xF335,
+    0x3921, 0x8230, 0xF336,
+    0x3922, 0x8230, 0xF337,
+    0x3923, 0x8230, 0xF338,
+    0x3924, 0x8230, 0xF339,
+    0x3925, 0x8230, 0xF430,
+    0x3926, 0x8230, 0xF431,
+    0x3927, 0x8230, 0xF432,
+    0x3928, 0x8230, 0xF433,
+    0x3929, 0x8230, 0xF434,
+    0x392A, 0x8230, 0xF435,
+    0x392B, 0x8230, 0xF436,
+    0x392C, 0x8230, 0xF437,
+    0x392D, 0x8230, 0xF438,
+    0x392E, 0x8230, 0xF439,
+    0x392F, 0x8230, 0xF530,
+    0x3930, 0x8230, 0xF531,
+    0x3931, 0x8230, 0xF532,
+    0x3932, 0x8230, 0xF533,
+    0x3933, 0x8230, 0xF534,
+    0x3934, 0x8230, 0xF535,
+    0x3935, 0x8230, 0xF536,
+    0x3936, 0x8230, 0xF537,
+    0x3937, 0x8230, 0xF538,
+    0x3938, 0x8230, 0xF539,
+    0x3939, 0x8230, 0xF630,
+    0x393A, 0x8230, 0xF631,
+    0x393B, 0x8230, 0xF632,
+    0x393C, 0x8230, 0xF633,
+    0x393D, 0x8230, 0xF634,
+    0x393E, 0x8230, 0xF635,
+    0x393F, 0x8230, 0xF636,
+    0x3940, 0x8230, 0xF637,
+    0x3941, 0x8230, 0xF638,
+    0x3942, 0x8230, 0xF639,
+    0x3943, 0x8230, 0xF730,
+    0x3944, 0x8230, 0xF731,
+    0x3945, 0x8230, 0xF732,
+    0x3946, 0x8230, 0xF733,
+    0x3947, 0x8230, 0xF734,
+    0x3948, 0x8230, 0xF735,
+    0x3949, 0x8230, 0xF736,
+    0x394A, 0x8230, 0xF737,
+    0x394B, 0x8230, 0xF738,
+    0x394C, 0x8230, 0xF739,
+    0x394D, 0x8230, 0xF830,
+    0x394E, 0x8230, 0xF831,
+    0x394F, 0x8230, 0xF832,
+    0x3950, 0x8230, 0xF833,
+    0x3951, 0x8230, 0xF834,
+    0x3952, 0x8230, 0xF835,
+    0x3953, 0x8230, 0xF836,
+    0x3954, 0x8230, 0xF837,
+    0x3955, 0x8230, 0xF838,
+    0x3956, 0x8230, 0xF839,
+    0x3957, 0x8230, 0xF930,
+    0x3958, 0x8230, 0xF931,
+    0x3959, 0x8230, 0xF932,
+    0x395A, 0x8230, 0xF933,
+    0x395B, 0x8230, 0xF934,
+    0x395C, 0x8230, 0xF935,
+    0x395D, 0x8230, 0xF936,
+    0x395E, 0x8230, 0xF937,
+    0x395F, 0x8230, 0xF938,
+    0x3960, 0x8230, 0xF939,
+    0x3961, 0x8230, 0xFA30,
+    0x3962, 0x8230, 0xFA31,
+    0x3963, 0x8230, 0xFA32,
+    0x3964, 0x8230, 0xFA33,
+    0x3965, 0x8230, 0xFA34,
+    0x3966, 0x8230, 0xFA35,
+    0x3967, 0x8230, 0xFA36,
+    0x3968, 0x8230, 0xFA37,
+    0x3969, 0x8230, 0xFA38,
+    0x396A, 0x8230, 0xFA39,
+    0x396B, 0x8230, 0xFB30,
+    0x396C, 0x8230, 0xFB31,
+    0x396D, 0x8230, 0xFB32,
+    0x396F, 0x8230, 0xFB33,
+    0x3970, 0x8230, 0xFB34,
+    0x3971, 0x8230, 0xFB35,
+    0x3972, 0x8230, 0xFB36,
+    0x3973, 0x8230, 0xFB37,
+    0x3974, 0x8230, 0xFB38,
+    0x3975, 0x8230, 0xFB39,
+    0x3976, 0x8230, 0xFC30,
+    0x3977, 0x8230, 0xFC31,
+    0x3978, 0x8230, 0xFC32,
+    0x3979, 0x8230, 0xFC33,
+    0x397A, 0x8230, 0xFC34,
+    0x397B, 0x8230, 0xFC35,
+    0x397C, 0x8230, 0xFC36,
+    0x397D, 0x8230, 0xFC37,
+    0x397E, 0x8230, 0xFC38,
+    0x397F, 0x8230, 0xFC39,
+    0x3980, 0x8230, 0xFD30,
+    0x3981, 0x8230, 0xFD31,
+    0x3982, 0x8230, 0xFD32,
+    0x3983, 0x8230, 0xFD33,
+    0x3984, 0x8230, 0xFD34,
+    0x3985, 0x8230, 0xFD35,
+    0x3986, 0x8230, 0xFD36,
+    0x3987, 0x8230, 0xFD37,
+    0x3988, 0x8230, 0xFD38,
+    0x3989, 0x8230, 0xFD39,
+    0x398A, 0x8230, 0xFE30,
+    0x398B, 0x8230, 0xFE31,
+    0x398C, 0x8230, 0xFE32,
+    0x398D, 0x8230, 0xFE33,
+    0x398E, 0x8230, 0xFE34,
+    0x398F, 0x8230, 0xFE35,
+    0x3990, 0x8230, 0xFE36,
+    0x3991, 0x8230, 0xFE37,
+    0x3992, 0x8230, 0xFE38,
+    0x3993, 0x8230, 0xFE39,
+    0x3994, 0x8231, 0x8130,
+    0x3995, 0x8231, 0x8131,
+    0x3996, 0x8231, 0x8132,
+    0x3997, 0x8231, 0x8133,
+    0x3998, 0x8231, 0x8134,
+    0x3999, 0x8231, 0x8135,
+    0x399A, 0x8231, 0x8136,
+    0x399B, 0x8231, 0x8137,
+    0x399C, 0x8231, 0x8138,
+    0x399D, 0x8231, 0x8139,
+    0x399E, 0x8231, 0x8230,
+    0x399F, 0x8231, 0x8231,
+    0x39A0, 0x8231, 0x8232,
+    0x39A1, 0x8231, 0x8233,
+    0x39A2, 0x8231, 0x8234,
+    0x39A3, 0x8231, 0x8235,
+    0x39A4, 0x8231, 0x8236,
+    0x39A5, 0x8231, 0x8237,
+    0x39A6, 0x8231, 0x8238,
+    0x39A7, 0x8231, 0x8239,
+    0x39A8, 0x8231, 0x8330,
+    0x39A9, 0x8231, 0x8331,
+    0x39AA, 0x8231, 0x8332,
+    0x39AB, 0x8231, 0x8333,
+    0x39AC, 0x8231, 0x8334,
+    0x39AD, 0x8231, 0x8335,
+    0x39AE, 0x8231, 0x8336,
+    0x39AF, 0x8231, 0x8337,
+    0x39B0, 0x8231, 0x8338,
+    0x39B1, 0x8231, 0x8339,
+    0x39B2, 0x8231, 0x8430,
+    0x39B3, 0x8231, 0x8431,
+    0x39B4, 0x8231, 0x8432,
+    0x39B5, 0x8231, 0x8433,
+    0x39B6, 0x8231, 0x8434,
+    0x39B7, 0x8231, 0x8435,
+    0x39B8, 0x8231, 0x8436,
+    0x39B9, 0x8231, 0x8437,
+    0x39BA, 0x8231, 0x8438,
+    0x39BB, 0x8231, 0x8439,
+    0x39BC, 0x8231, 0x8530,
+    0x39BD, 0x8231, 0x8531,
+    0x39BE, 0x8231, 0x8532,
+    0x39BF, 0x8231, 0x8533,
+    0x39C0, 0x8231, 0x8534,
+    0x39C1, 0x8231, 0x8535,
+    0x39C2, 0x8231, 0x8536,
+    0x39C3, 0x8231, 0x8537,
+    0x39C4, 0x8231, 0x8538,
+    0x39C5, 0x8231, 0x8539,
+    0x39C6, 0x8231, 0x8630,
+    0x39C7, 0x8231, 0x8631,
+    0x39C8, 0x8231, 0x8632,
+    0x39C9, 0x8231, 0x8633,
+    0x39CA, 0x8231, 0x8634,
+    0x39CB, 0x8231, 0x8635,
+    0x39CC, 0x8231, 0x8636,
+    0x39CD, 0x8231, 0x8637,
+    0x39CE, 0x8231, 0x8638,
+    0x39D1, 0x8231, 0x8639,
+    0x39D2, 0x8231, 0x8730,
+    0x39D3, 0x8231, 0x8731,
+    0x39D4, 0x8231, 0x8732,
+    0x39D5, 0x8231, 0x8733,
+    0x39D6, 0x8231, 0x8734,
+    0x39D7, 0x8231, 0x8735,
+    0x39D8, 0x8231, 0x8736,
+    0x39D9, 0x8231, 0x8737,
+    0x39DA, 0x8231, 0x8738,
+    0x39DB, 0x8231, 0x8739,
+    0x39DC, 0x8231, 0x8830,
+    0x39DD, 0x8231, 0x8831,
+    0x39DE, 0x8231, 0x8832,
+    0x39E0, 0x8231, 0x8833,
+    0x39E1, 0x8231, 0x8834,
+    0x39E2, 0x8231, 0x8835,
+    0x39E3, 0x8231, 0x8836,
+    0x39E4, 0x8231, 0x8837,
+    0x39E5, 0x8231, 0x8838,
+    0x39E6, 0x8231, 0x8839,
+    0x39E7, 0x8231, 0x8930,
+    0x39E8, 0x8231, 0x8931,
+    0x39E9, 0x8231, 0x8932,
+    0x39EA, 0x8231, 0x8933,
+    0x39EB, 0x8231, 0x8934,
+    0x39EC, 0x8231, 0x8935,
+    0x39ED, 0x8231, 0x8936,
+    0x39EE, 0x8231, 0x8937,
+    0x39EF, 0x8231, 0x8938,
+    0x39F0, 0x8231, 0x8939,
+    0x39F1, 0x8231, 0x8A30,
+    0x39F2, 0x8231, 0x8A31,
+    0x39F3, 0x8231, 0x8A32,
+    0x39F4, 0x8231, 0x8A33,
+    0x39F5, 0x8231, 0x8A34,
+    0x39F6, 0x8231, 0x8A35,
+    0x39F7, 0x8231, 0x8A36,
+    0x39F8, 0x8231, 0x8A37,
+    0x39F9, 0x8231, 0x8A38,
+    0x39FA, 0x8231, 0x8A39,
+    0x39FB, 0x8231, 0x8B30,
+    0x39FC, 0x8231, 0x8B31,
+    0x39FD, 0x8231, 0x8B32,
+    0x39FE, 0x8231, 0x8B33,
+    0x39FF, 0x8231, 0x8B34,
+    0x3A00, 0x8231, 0x8B35,
+    0x3A01, 0x8231, 0x8B36,
+    0x3A02, 0x8231, 0x8B37,
+    0x3A03, 0x8231, 0x8B38,
+    0x3A04, 0x8231, 0x8B39,
+    0x3A05, 0x8231, 0x8C30,
+    0x3A06, 0x8231, 0x8C31,
+    0x3A07, 0x8231, 0x8C32,
+    0x3A08, 0x8231, 0x8C33,
+    0x3A09, 0x8231, 0x8C34,
+    0x3A0A, 0x8231, 0x8C35,
+    0x3A0B, 0x8231, 0x8C36,
+    0x3A0C, 0x8231, 0x8C37,
+    0x3A0D, 0x8231, 0x8C38,
+    0x3A0E, 0x8231, 0x8C39,
+    0x3A0F, 0x8231, 0x8D30,
+    0x3A10, 0x8231, 0x8D31,
+    0x3A11, 0x8231, 0x8D32,
+    0x3A12, 0x8231, 0x8D33,
+    0x3A13, 0x8231, 0x8D34,
+    0x3A14, 0x8231, 0x8D35,
+    0x3A15, 0x8231, 0x8D36,
+    0x3A16, 0x8231, 0x8D37,
+    0x3A17, 0x8231, 0x8D38,
+    0x3A18, 0x8231, 0x8D39,
+    0x3A19, 0x8231, 0x8E30,
+    0x3A1A, 0x8231, 0x8E31,
+    0x3A1B, 0x8231, 0x8E32,
+    0x3A1C, 0x8231, 0x8E33,
+    0x3A1D, 0x8231, 0x8E34,
+    0x3A1E, 0x8231, 0x8E35,
+    0x3A1F, 0x8231, 0x8E36,
+    0x3A20, 0x8231, 0x8E37,
+    0x3A21, 0x8231, 0x8E38,
+    0x3A22, 0x8231, 0x8E39,
+    0x3A23, 0x8231, 0x8F30,
+    0x3A24, 0x8231, 0x8F31,
+    0x3A25, 0x8231, 0x8F32,
+    0x3A26, 0x8231, 0x8F33,
+    0x3A27, 0x8231, 0x8F34,
+    0x3A28, 0x8231, 0x8F35,
+    0x3A29, 0x8231, 0x8F36,
+    0x3A2A, 0x8231, 0x8F37,
+    0x3A2B, 0x8231, 0x8F38,
+    0x3A2C, 0x8231, 0x8F39,
+    0x3A2D, 0x8231, 0x9030,
+    0x3A2E, 0x8231, 0x9031,
+    0x3A2F, 0x8231, 0x9032,
+    0x3A30, 0x8231, 0x9033,
+    0x3A31, 0x8231, 0x9034,
+    0x3A32, 0x8231, 0x9035,
+    0x3A33, 0x8231, 0x9036,
+    0x3A34, 0x8231, 0x9037,
+    0x3A35, 0x8231, 0x9038,
+    0x3A36, 0x8231, 0x9039,
+    0x3A37, 0x8231, 0x9130,
+    0x3A38, 0x8231, 0x9131,
+    0x3A39, 0x8231, 0x9132,
+    0x3A3A, 0x8231, 0x9133,
+    0x3A3B, 0x8231, 0x9134,
+    0x3A3C, 0x8231, 0x9135,
+    0x3A3D, 0x8231, 0x9136,
+    0x3A3E, 0x8231, 0x9137,
+    0x3A3F, 0x8231, 0x9138,
+    0x3A40, 0x8231, 0x9139,
+    0x3A41, 0x8231, 0x9230,
+    0x3A42, 0x8231, 0x9231,
+    0x3A43, 0x8231, 0x9232,
+    0x3A44, 0x8231, 0x9233,
+    0x3A45, 0x8231, 0x9234,
+    0x3A46, 0x8231, 0x9235,
+    0x3A47, 0x8231, 0x9236,
+    0x3A48, 0x8231, 0x9237,
+    0x3A49, 0x8231, 0x9238,
+    0x3A4A, 0x8231, 0x9239,
+    0x3A4B, 0x8231, 0x9330,
+    0x3A4C, 0x8231, 0x9331,
+    0x3A4D, 0x8231, 0x9332,
+    0x3A4E, 0x8231, 0x9333,
+    0x3A4F, 0x8231, 0x9334,
+    0x3A50, 0x8231, 0x9335,
+    0x3A51, 0x8231, 0x9336,
+    0x3A52, 0x8231, 0x9337,
+    0x3A53, 0x8231, 0x9338,
+    0x3A54, 0x8231, 0x9339,
+    0x3A55, 0x8231, 0x9430,
+    0x3A56, 0x8231, 0x9431,
+    0x3A57, 0x8231, 0x9432,
+    0x3A58, 0x8231, 0x9433,
+    0x3A59, 0x8231, 0x9434,
+    0x3A5A, 0x8231, 0x9435,
+    0x3A5B, 0x8231, 0x9436,
+    0x3A5C, 0x8231, 0x9437,
+    0x3A5D, 0x8231, 0x9438,
+    0x3A5E, 0x8231, 0x9439,
+    0x3A5F, 0x8231, 0x9530,
+    0x3A60, 0x8231, 0x9531,
+    0x3A61, 0x8231, 0x9532,
+    0x3A62, 0x8231, 0x9533,
+    0x3A63, 0x8231, 0x9534,
+    0x3A64, 0x8231, 0x9535,
+    0x3A65, 0x8231, 0x9536,
+    0x3A66, 0x8231, 0x9537,
+    0x3A67, 0x8231, 0x9538,
+    0x3A68, 0x8231, 0x9539,
+    0x3A69, 0x8231, 0x9630,
+    0x3A6A, 0x8231, 0x9631,
+    0x3A6B, 0x8231, 0x9632,
+    0x3A6C, 0x8231, 0x9633,
+    0x3A6D, 0x8231, 0x9634,
+    0x3A6E, 0x8231, 0x9635,
+    0x3A6F, 0x8231, 0x9636,
+    0x3A70, 0x8231, 0x9637,
+    0x3A71, 0x8231, 0x9638,
+    0x3A72, 0x8231, 0x9639,
+    0x3A74, 0x8231, 0x9730,
+    0x3A75, 0x8231, 0x9731,
+    0x3A76, 0x8231, 0x9732,
+    0x3A77, 0x8231, 0x9733,
+    0x3A78, 0x8231, 0x9734,
+    0x3A79, 0x8231, 0x9735,
+    0x3A7A, 0x8231, 0x9736,
+    0x3A7B, 0x8231, 0x9737,
+    0x3A7C, 0x8231, 0x9738,
+    0x3A7D, 0x8231, 0x9739,
+    0x3A7E, 0x8231, 0x9830,
+    0x3A7F, 0x8231, 0x9831,
+    0x3A80, 0x8231, 0x9832,
+    0x3A81, 0x8231, 0x9833,
+    0x3A82, 0x8231, 0x9834,
+    0x3A83, 0x8231, 0x9835,
+    0x3A84, 0x8231, 0x9836,
+    0x3A85, 0x8231, 0x9837,
+    0x3A86, 0x8231, 0x9838,
+    0x3A87, 0x8231, 0x9839,
+    0x3A88, 0x8231, 0x9930,
+    0x3A89, 0x8231, 0x9931,
+    0x3A8A, 0x8231, 0x9932,
+    0x3A8B, 0x8231, 0x9933,
+    0x3A8C, 0x8231, 0x9934,
+    0x3A8D, 0x8231, 0x9935,
+    0x3A8E, 0x8231, 0x9936,
+    0x3A8F, 0x8231, 0x9937,
+    0x3A90, 0x8231, 0x9938,
+    0x3A91, 0x8231, 0x9939,
+    0x3A92, 0x8231, 0x9A30,
+    0x3A93, 0x8231, 0x9A31,
+    0x3A94, 0x8231, 0x9A32,
+    0x3A95, 0x8231, 0x9A33,
+    0x3A96, 0x8231, 0x9A34,
+    0x3A97, 0x8231, 0x9A35,
+    0x3A98, 0x8231, 0x9A36,
+    0x3A99, 0x8231, 0x9A37,
+    0x3A9A, 0x8231, 0x9A38,
+    0x3A9B, 0x8231, 0x9A39,
+    0x3A9C, 0x8231, 0x9B30,
+    0x3A9D, 0x8231, 0x9B31,
+    0x3A9E, 0x8231, 0x9B32,
+    0x3A9F, 0x8231, 0x9B33,
+    0x3AA0, 0x8231, 0x9B34,
+    0x3AA1, 0x8231, 0x9B35,
+    0x3AA2, 0x8231, 0x9B36,
+    0x3AA3, 0x8231, 0x9B37,
+    0x3AA4, 0x8231, 0x9B38,
+    0x3AA5, 0x8231, 0x9B39,
+    0x3AA6, 0x8231, 0x9C30,
+    0x3AA7, 0x8231, 0x9C31,
+    0x3AA8, 0x8231, 0x9C32,
+    0x3AA9, 0x8231, 0x9C33,
+    0x3AAA, 0x8231, 0x9C34,
+    0x3AAB, 0x8231, 0x9C35,
+    0x3AAC, 0x8231, 0x9C36,
+    0x3AAD, 0x8231, 0x9C37,
+    0x3AAE, 0x8231, 0x9C38,
+    0x3AAF, 0x8231, 0x9C39,
+    0x3AB0, 0x8231, 0x9D30,
+    0x3AB1, 0x8231, 0x9D31,
+    0x3AB2, 0x8231, 0x9D32,
+    0x3AB3, 0x8231, 0x9D33,
+    0x3AB4, 0x8231, 0x9D34,
+    0x3AB5, 0x8231, 0x9D35,
+    0x3AB6, 0x8231, 0x9D36,
+    0x3AB7, 0x8231, 0x9D37,
+    0x3AB8, 0x8231, 0x9D38,
+    0x3AB9, 0x8231, 0x9D39,
+    0x3ABA, 0x8231, 0x9E30,
+    0x3ABB, 0x8231, 0x9E31,
+    0x3ABC, 0x8231, 0x9E32,
+    0x3ABD, 0x8231, 0x9E33,
+    0x3ABE, 0x8231, 0x9E34,
+    0x3ABF, 0x8231, 0x9E35,
+    0x3AC0, 0x8231, 0x9E36,
+    0x3AC1, 0x8231, 0x9E37,
+    0x3AC2, 0x8231, 0x9E38,
+    0x3AC3, 0x8231, 0x9E39,
+    0x3AC4, 0x8231, 0x9F30,
+    0x3AC5, 0x8231, 0x9F31,
+    0x3AC6, 0x8231, 0x9F32,
+    0x3AC7, 0x8231, 0x9F33,
+    0x3AC8, 0x8231, 0x9F34,
+    0x3AC9, 0x8231, 0x9F35,
+    0x3ACA, 0x8231, 0x9F36,
+    0x3ACB, 0x8231, 0x9F37,
+    0x3ACC, 0x8231, 0x9F38,
+    0x3ACD, 0x8231, 0x9F39,
+    0x3ACE, 0x8231, 0xA030,
+    0x3ACF, 0x8231, 0xA031,
+    0x3AD0, 0x8231, 0xA032,
+    0x3AD1, 0x8231, 0xA033,
+    0x3AD2, 0x8231, 0xA034,
+    0x3AD3, 0x8231, 0xA035,
+    0x3AD4, 0x8231, 0xA036,
+    0x3AD5, 0x8231, 0xA037,
+    0x3AD6, 0x8231, 0xA038,
+    0x3AD7, 0x8231, 0xA039,
+    0x3AD8, 0x8231, 0xA130,
+    0x3AD9, 0x8231, 0xA131,
+    0x3ADA, 0x8231, 0xA132,
+    0x3ADB, 0x8231, 0xA133,
+    0x3ADC, 0x8231, 0xA134,
+    0x3ADD, 0x8231, 0xA135,
+    0x3ADE, 0x8231, 0xA136,
+    0x3ADF, 0x8231, 0xA137,
+    0x3AE0, 0x8231, 0xA138,
+    0x3AE1, 0x8231, 0xA139,
+    0x3AE2, 0x8231, 0xA230,
+    0x3AE3, 0x8231, 0xA231,
+    0x3AE4, 0x8231, 0xA232,
+    0x3AE5, 0x8231, 0xA233,
+    0x3AE6, 0x8231, 0xA234,
+    0x3AE7, 0x8231, 0xA235,
+    0x3AE8, 0x8231, 0xA236,
+    0x3AE9, 0x8231, 0xA237,
+    0x3AEA, 0x8231, 0xA238,
+    0x3AEB, 0x8231, 0xA239,
+    0x3AEC, 0x8231, 0xA330,
+    0x3AED, 0x8231, 0xA331,
+    0x3AEE, 0x8231, 0xA332,
+    0x3AEF, 0x8231, 0xA333,
+    0x3AF0, 0x8231, 0xA334,
+    0x3AF1, 0x8231, 0xA335,
+    0x3AF2, 0x8231, 0xA336,
+    0x3AF3, 0x8231, 0xA337,
+    0x3AF4, 0x8231, 0xA338,
+    0x3AF5, 0x8231, 0xA339,
+    0x3AF6, 0x8231, 0xA430,
+    0x3AF7, 0x8231, 0xA431,
+    0x3AF8, 0x8231, 0xA432,
+    0x3AF9, 0x8231, 0xA433,
+    0x3AFA, 0x8231, 0xA434,
+    0x3AFB, 0x8231, 0xA435,
+    0x3AFC, 0x8231, 0xA436,
+    0x3AFD, 0x8231, 0xA437,
+    0x3AFE, 0x8231, 0xA438,
+    0x3AFF, 0x8231, 0xA439,
+    0x3B00, 0x8231, 0xA530,
+    0x3B01, 0x8231, 0xA531,
+    0x3B02, 0x8231, 0xA532,
+    0x3B03, 0x8231, 0xA533,
+    0x3B04, 0x8231, 0xA534,
+    0x3B05, 0x8231, 0xA535,
+    0x3B06, 0x8231, 0xA536,
+    0x3B07, 0x8231, 0xA537,
+    0x3B08, 0x8231, 0xA538,
+    0x3B09, 0x8231, 0xA539,
+    0x3B0A, 0x8231, 0xA630,
+    0x3B0B, 0x8231, 0xA631,
+    0x3B0C, 0x8231, 0xA632,
+    0x3B0D, 0x8231, 0xA633,
+    0x3B0E, 0x8231, 0xA634,
+    0x3B0F, 0x8231, 0xA635,
+    0x3B10, 0x8231, 0xA636,
+    0x3B11, 0x8231, 0xA637,
+    0x3B12, 0x8231, 0xA638,
+    0x3B13, 0x8231, 0xA639,
+    0x3B14, 0x8231, 0xA730,
+    0x3B15, 0x8231, 0xA731,
+    0x3B16, 0x8231, 0xA732,
+    0x3B17, 0x8231, 0xA733,
+    0x3B18, 0x8231, 0xA734,
+    0x3B19, 0x8231, 0xA735,
+    0x3B1A, 0x8231, 0xA736,
+    0x3B1B, 0x8231, 0xA737,
+    0x3B1C, 0x8231, 0xA738,
+    0x3B1D, 0x8231, 0xA739,
+    0x3B1E, 0x8231, 0xA830,
+    0x3B1F, 0x8231, 0xA831,
+    0x3B20, 0x8231, 0xA832,
+    0x3B21, 0x8231, 0xA833,
+    0x3B22, 0x8231, 0xA834,
+    0x3B23, 0x8231, 0xA835,
+    0x3B24, 0x8231, 0xA836,
+    0x3B25, 0x8231, 0xA837,
+    0x3B26, 0x8231, 0xA838,
+    0x3B27, 0x8231, 0xA839,
+    0x3B28, 0x8231, 0xA930,
+    0x3B29, 0x8231, 0xA931,
+    0x3B2A, 0x8231, 0xA932,
+    0x3B2B, 0x8231, 0xA933,
+    0x3B2C, 0x8231, 0xA934,
+    0x3B2D, 0x8231, 0xA935,
+    0x3B2E, 0x8231, 0xA936,
+    0x3B2F, 0x8231, 0xA937,
+    0x3B30, 0x8231, 0xA938,
+    0x3B31, 0x8231, 0xA939,
+    0x3B32, 0x8231, 0xAA30,
+    0x3B33, 0x8231, 0xAA31,
+    0x3B34, 0x8231, 0xAA32,
+    0x3B35, 0x8231, 0xAA33,
+    0x3B36, 0x8231, 0xAA34,
+    0x3B37, 0x8231, 0xAA35,
+    0x3B38, 0x8231, 0xAA36,
+    0x3B39, 0x8231, 0xAA37,
+    0x3B3A, 0x8231, 0xAA38,
+    0x3B3B, 0x8231, 0xAA39,
+    0x3B3C, 0x8231, 0xAB30,
+    0x3B3D, 0x8231, 0xAB31,
+    0x3B3E, 0x8231, 0xAB32,
+    0x3B3F, 0x8231, 0xAB33,
+    0x3B40, 0x8231, 0xAB34,
+    0x3B41, 0x8231, 0xAB35,
+    0x3B42, 0x8231, 0xAB36,
+    0x3B43, 0x8231, 0xAB37,
+    0x3B44, 0x8231, 0xAB38,
+    0x3B45, 0x8231, 0xAB39,
+    0x3B46, 0x8231, 0xAC30,
+    0x3B47, 0x8231, 0xAC31,
+    0x3B48, 0x8231, 0xAC32,
+    0x3B49, 0x8231, 0xAC33,
+    0x3B4A, 0x8231, 0xAC34,
+    0x3B4B, 0x8231, 0xAC35,
+    0x3B4C, 0x8231, 0xAC36,
+    0x3B4D, 0x8231, 0xAC37,
+    0x3B4F, 0x8231, 0xAC38,
+    0x3B50, 0x8231, 0xAC39,
+    0x3B51, 0x8231, 0xAD30,
+    0x3B52, 0x8231, 0xAD31,
+    0x3B53, 0x8231, 0xAD32,
+    0x3B54, 0x8231, 0xAD33,
+    0x3B55, 0x8231, 0xAD34,
+    0x3B56, 0x8231, 0xAD35,
+    0x3B57, 0x8231, 0xAD36,
+    0x3B58, 0x8231, 0xAD37,
+    0x3B59, 0x8231, 0xAD38,
+    0x3B5A, 0x8231, 0xAD39,
+    0x3B5B, 0x8231, 0xAE30,
+    0x3B5C, 0x8231, 0xAE31,
+    0x3B5D, 0x8231, 0xAE32,
+    0x3B5E, 0x8231, 0xAE33,
+    0x3B5F, 0x8231, 0xAE34,
+    0x3B60, 0x8231, 0xAE35,
+    0x3B61, 0x8231, 0xAE36,
+    0x3B62, 0x8231, 0xAE37,
+    0x3B63, 0x8231, 0xAE38,
+    0x3B64, 0x8231, 0xAE39,
+    0x3B65, 0x8231, 0xAF30,
+    0x3B66, 0x8231, 0xAF31,
+    0x3B67, 0x8231, 0xAF32,
+    0x3B68, 0x8231, 0xAF33,
+    0x3B69, 0x8231, 0xAF34,
+    0x3B6A, 0x8231, 0xAF35,
+    0x3B6B, 0x8231, 0xAF36,
+    0x3B6C, 0x8231, 0xAF37,
+    0x3B6D, 0x8231, 0xAF38,
+    0x3B6E, 0x8231, 0xAF39,
+    0x3B6F, 0x8231, 0xB030,
+    0x3B70, 0x8231, 0xB031,
+    0x3B71, 0x8231, 0xB032,
+    0x3B72, 0x8231, 0xB033,
+    0x3B73, 0x8231, 0xB034,
+    0x3B74, 0x8231, 0xB035,
+    0x3B75, 0x8231, 0xB036,
+    0x3B76, 0x8231, 0xB037,
+    0x3B77, 0x8231, 0xB038,
+    0x3B78, 0x8231, 0xB039,
+    0x3B79, 0x8231, 0xB130,
+    0x3B7A, 0x8231, 0xB131,
+    0x3B7B, 0x8231, 0xB132,
+    0x3B7C, 0x8231, 0xB133,
+    0x3B7D, 0x8231, 0xB134,
+    0x3B7E, 0x8231, 0xB135,
+    0x3B7F, 0x8231, 0xB136,
+    0x3B80, 0x8231, 0xB137,
+    0x3B81, 0x8231, 0xB138,
+    0x3B82, 0x8231, 0xB139,
+    0x3B83, 0x8231, 0xB230,
+    0x3B84, 0x8231, 0xB231,
+    0x3B85, 0x8231, 0xB232,
+    0x3B86, 0x8231, 0xB233,
+    0x3B87, 0x8231, 0xB234,
+    0x3B88, 0x8231, 0xB235,
+    0x3B89, 0x8231, 0xB236,
+    0x3B8A, 0x8231, 0xB237,
+    0x3B8B, 0x8231, 0xB238,
+    0x3B8C, 0x8231, 0xB239,
+    0x3B8D, 0x8231, 0xB330,
+    0x3B8E, 0x8231, 0xB331,
+    0x3B8F, 0x8231, 0xB332,
+    0x3B90, 0x8231, 0xB333,
+    0x3B91, 0x8231, 0xB334,
+    0x3B92, 0x8231, 0xB335,
+    0x3B93, 0x8231, 0xB336,
+    0x3B94, 0x8231, 0xB337,
+    0x3B95, 0x8231, 0xB338,
+    0x3B96, 0x8231, 0xB339,
+    0x3B97, 0x8231, 0xB430,
+    0x3B98, 0x8231, 0xB431,
+    0x3B99, 0x8231, 0xB432,
+    0x3B9A, 0x8231, 0xB433,
+    0x3B9B, 0x8231, 0xB434,
+    0x3B9C, 0x8231, 0xB435,
+    0x3B9D, 0x8231, 0xB436,
+    0x3B9E, 0x8231, 0xB437,
+    0x3B9F, 0x8231, 0xB438,
+    0x3BA0, 0x8231, 0xB439,
+    0x3BA1, 0x8231, 0xB530,
+    0x3BA2, 0x8231, 0xB531,
+    0x3BA3, 0x8231, 0xB532,
+    0x3BA4, 0x8231, 0xB533,
+    0x3BA5, 0x8231, 0xB534,
+    0x3BA6, 0x8231, 0xB535,
+    0x3BA7, 0x8231, 0xB536,
+    0x3BA8, 0x8231, 0xB537,
+    0x3BA9, 0x8231, 0xB538,
+    0x3BAA, 0x8231, 0xB539,
+    0x3BAB, 0x8231, 0xB630,
+    0x3BAC, 0x8231, 0xB631,
+    0x3BAD, 0x8231, 0xB632,
+    0x3BAE, 0x8231, 0xB633,
+    0x3BAF, 0x8231, 0xB634,
+    0x3BB0, 0x8231, 0xB635,
+    0x3BB1, 0x8231, 0xB636,
+    0x3BB2, 0x8231, 0xB637,
+    0x3BB3, 0x8231, 0xB638,
+    0x3BB4, 0x8231, 0xB639,
+    0x3BB5, 0x8231, 0xB730,
+    0x3BB6, 0x8231, 0xB731,
+    0x3BB7, 0x8231, 0xB732,
+    0x3BB8, 0x8231, 0xB733,
+    0x3BB9, 0x8231, 0xB734,
+    0x3BBA, 0x8231, 0xB735,
+    0x3BBB, 0x8231, 0xB736,
+    0x3BBC, 0x8231, 0xB737,
+    0x3BBD, 0x8231, 0xB738,
+    0x3BBE, 0x8231, 0xB739,
+    0x3BBF, 0x8231, 0xB830,
+    0x3BC0, 0x8231, 0xB831,
+    0x3BC1, 0x8231, 0xB832,
+    0x3BC2, 0x8231, 0xB833,
+    0x3BC3, 0x8231, 0xB834,
+    0x3BC4, 0x8231, 0xB835,
+    0x3BC5, 0x8231, 0xB836,
+    0x3BC6, 0x8231, 0xB837,
+    0x3BC7, 0x8231, 0xB838,
+    0x3BC8, 0x8231, 0xB839,
+    0x3BC9, 0x8231, 0xB930,
+    0x3BCA, 0x8231, 0xB931,
+    0x3BCB, 0x8231, 0xB932,
+    0x3BCC, 0x8231, 0xB933,
+    0x3BCD, 0x8231, 0xB934,
+    0x3BCE, 0x8231, 0xB935,
+    0x3BCF, 0x8231, 0xB936,
+    0x3BD0, 0x8231, 0xB937,
+    0x3BD1, 0x8231, 0xB938,
+    0x3BD2, 0x8231, 0xB939,
+    0x3BD3, 0x8231, 0xBA30,
+    0x3BD4, 0x8231, 0xBA31,
+    0x3BD5, 0x8231, 0xBA32,
+    0x3BD6, 0x8231, 0xBA33,
+    0x3BD7, 0x8231, 0xBA34,
+    0x3BD8, 0x8231, 0xBA35,
+    0x3BD9, 0x8231, 0xBA36,
+    0x3BDA, 0x8231, 0xBA37,
+    0x3BDB, 0x8231, 0xBA38,
+    0x3BDC, 0x8231, 0xBA39,
+    0x3BDD, 0x8231, 0xBB30,
+    0x3BDE, 0x8231, 0xBB31,
+    0x3BDF, 0x8231, 0xBB32,
+    0x3BE0, 0x8231, 0xBB33,
+    0x3BE1, 0x8231, 0xBB34,
+    0x3BE2, 0x8231, 0xBB35,
+    0x3BE3, 0x8231, 0xBB36,
+    0x3BE4, 0x8231, 0xBB37,
+    0x3BE5, 0x8231, 0xBB38,
+    0x3BE6, 0x8231, 0xBB39,
+    0x3BE7, 0x8231, 0xBC30,
+    0x3BE8, 0x8231, 0xBC31,
+    0x3BE9, 0x8231, 0xBC32,
+    0x3BEA, 0x8231, 0xBC33,
+    0x3BEB, 0x8231, 0xBC34,
+    0x3BEC, 0x8231, 0xBC35,
+    0x3BED, 0x8231, 0xBC36,
+    0x3BEE, 0x8231, 0xBC37,
+    0x3BEF, 0x8231, 0xBC38,
+    0x3BF0, 0x8231, 0xBC39,
+    0x3BF1, 0x8231, 0xBD30,
+    0x3BF2, 0x8231, 0xBD31,
+    0x3BF3, 0x8231, 0xBD32,
+    0x3BF4, 0x8231, 0xBD33,
+    0x3BF5, 0x8231, 0xBD34,
+    0x3BF6, 0x8231, 0xBD35,
+    0x3BF7, 0x8231, 0xBD36,
+    0x3BF8, 0x8231, 0xBD37,
+    0x3BF9, 0x8231, 0xBD38,
+    0x3BFA, 0x8231, 0xBD39,
+    0x3BFB, 0x8231, 0xBE30,
+    0x3BFC, 0x8231, 0xBE31,
+    0x3BFD, 0x8231, 0xBE32,
+    0x3BFE, 0x8231, 0xBE33,
+    0x3BFF, 0x8231, 0xBE34,
+    0x3C00, 0x8231, 0xBE35,
+    0x3C01, 0x8231, 0xBE36,
+    0x3C02, 0x8231, 0xBE37,
+    0x3C03, 0x8231, 0xBE38,
+    0x3C04, 0x8231, 0xBE39,
+    0x3C05, 0x8231, 0xBF30,
+    0x3C06, 0x8231, 0xBF31,
+    0x3C07, 0x8231, 0xBF32,
+    0x3C08, 0x8231, 0xBF33,
+    0x3C09, 0x8231, 0xBF34,
+    0x3C0A, 0x8231, 0xBF35,
+    0x3C0B, 0x8231, 0xBF36,
+    0x3C0C, 0x8231, 0xBF37,
+    0x3C0D, 0x8231, 0xBF38,
+    0x3C0E, 0x8231, 0xBF39,
+    0x3C0F, 0x8231, 0xC030,
+    0x3C10, 0x8231, 0xC031,
+    0x3C11, 0x8231, 0xC032,
+    0x3C12, 0x8231, 0xC033,
+    0x3C13, 0x8231, 0xC034,
+    0x3C14, 0x8231, 0xC035,
+    0x3C15, 0x8231, 0xC036,
+    0x3C16, 0x8231, 0xC037,
+    0x3C17, 0x8231, 0xC038,
+    0x3C18, 0x8231, 0xC039,
+    0x3C19, 0x8231, 0xC130,
+    0x3C1A, 0x8231, 0xC131,
+    0x3C1B, 0x8231, 0xC132,
+    0x3C1C, 0x8231, 0xC133,
+    0x3C1D, 0x8231, 0xC134,
+    0x3C1E, 0x8231, 0xC135,
+    0x3C1F, 0x8231, 0xC136,
+    0x3C20, 0x8231, 0xC137,
+    0x3C21, 0x8231, 0xC138,
+    0x3C22, 0x8231, 0xC139,
+    0x3C23, 0x8231, 0xC230,
+    0x3C24, 0x8231, 0xC231,
+    0x3C25, 0x8231, 0xC232,
+    0x3C26, 0x8231, 0xC233,
+    0x3C27, 0x8231, 0xC234,
+    0x3C28, 0x8231, 0xC235,
+    0x3C29, 0x8231, 0xC236,
+    0x3C2A, 0x8231, 0xC237,
+    0x3C2B, 0x8231, 0xC238,
+    0x3C2C, 0x8231, 0xC239,
+    0x3C2D, 0x8231, 0xC330,
+    0x3C2E, 0x8231, 0xC331,
+    0x3C2F, 0x8231, 0xC332,
+    0x3C30, 0x8231, 0xC333,
+    0x3C31, 0x8231, 0xC334,
+    0x3C32, 0x8231, 0xC335,
+    0x3C33, 0x8231, 0xC336,
+    0x3C34, 0x8231, 0xC337,
+    0x3C35, 0x8231, 0xC338,
+    0x3C36, 0x8231, 0xC339,
+    0x3C37, 0x8231, 0xC430,
+    0x3C38, 0x8231, 0xC431,
+    0x3C39, 0x8231, 0xC432,
+    0x3C3A, 0x8231, 0xC433,
+    0x3C3B, 0x8231, 0xC434,
+    0x3C3C, 0x8231, 0xC435,
+    0x3C3D, 0x8231, 0xC436,
+    0x3C3E, 0x8231, 0xC437,
+    0x3C3F, 0x8231, 0xC438,
+    0x3C40, 0x8231, 0xC439,
+    0x3C41, 0x8231, 0xC530,
+    0x3C42, 0x8231, 0xC531,
+    0x3C43, 0x8231, 0xC532,
+    0x3C44, 0x8231, 0xC533,
+    0x3C45, 0x8231, 0xC534,
+    0x3C46, 0x8231, 0xC535,
+    0x3C47, 0x8231, 0xC536,
+    0x3C48, 0x8231, 0xC537,
+    0x3C49, 0x8231, 0xC538,
+    0x3C4A, 0x8231, 0xC539,
+    0x3C4B, 0x8231, 0xC630,
+    0x3C4C, 0x8231, 0xC631,
+    0x3C4D, 0x8231, 0xC632,
+    0x3C4E, 0x8231, 0xC633,
+    0x3C4F, 0x8231, 0xC634,
+    0x3C50, 0x8231, 0xC635,
+    0x3C51, 0x8231, 0xC636,
+    0x3C52, 0x8231, 0xC637,
+    0x3C53, 0x8231, 0xC638,
+    0x3C54, 0x8231, 0xC639,
+    0x3C55, 0x8231, 0xC730,
+    0x3C56, 0x8231, 0xC731,
+    0x3C57, 0x8231, 0xC732,
+    0x3C58, 0x8231, 0xC733,
+    0x3C59, 0x8231, 0xC734,
+    0x3C5A, 0x8231, 0xC735,
+    0x3C5B, 0x8231, 0xC736,
+    0x3C5C, 0x8231, 0xC737,
+    0x3C5D, 0x8231, 0xC738,
+    0x3C5E, 0x8231, 0xC739,
+    0x3C5F, 0x8231, 0xC830,
+    0x3C60, 0x8231, 0xC831,
+    0x3C61, 0x8231, 0xC832,
+    0x3C62, 0x8231, 0xC833,
+    0x3C63, 0x8231, 0xC834,
+    0x3C64, 0x8231, 0xC835,
+    0x3C65, 0x8231, 0xC836,
+    0x3C66, 0x8231, 0xC837,
+    0x3C67, 0x8231, 0xC838,
+    0x3C68, 0x8231, 0xC839,
+    0x3C69, 0x8231, 0xC930,
+    0x3C6A, 0x8231, 0xC931,
+    0x3C6B, 0x8231, 0xC932,
+    0x3C6C, 0x8231, 0xC933,
+    0x3C6D, 0x8231, 0xC934,
+    0x3C6F, 0x8231, 0xC935,
+    0x3C70, 0x8231, 0xC936,
+    0x3C71, 0x8231, 0xC937,
+    0x3C72, 0x8231, 0xC938,
+    0x3C73, 0x8231, 0xC939,
+    0x3C74, 0x8231, 0xCA30,
+    0x3C75, 0x8231, 0xCA31,
+    0x3C76, 0x8231, 0xCA32,
+    0x3C77, 0x8231, 0xCA33,
+    0x3C78, 0x8231, 0xCA34,
+    0x3C79, 0x8231, 0xCA35,
+    0x3C7A, 0x8231, 0xCA36,
+    0x3C7B, 0x8231, 0xCA37,
+    0x3C7C, 0x8231, 0xCA38,
+    0x3C7D, 0x8231, 0xCA39,
+    0x3C7E, 0x8231, 0xCB30,
+    0x3C7F, 0x8231, 0xCB31,
+    0x3C80, 0x8231, 0xCB32,
+    0x3C81, 0x8231, 0xCB33,
+    0x3C82, 0x8231, 0xCB34,
+    0x3C83, 0x8231, 0xCB35,
+    0x3C84, 0x8231, 0xCB36,
+    0x3C85, 0x8231, 0xCB37,
+    0x3C86, 0x8231, 0xCB38,
+    0x3C87, 0x8231, 0xCB39,
+    0x3C88, 0x8231, 0xCC30,
+    0x3C89, 0x8231, 0xCC31,
+    0x3C8A, 0x8231, 0xCC32,
+    0x3C8B, 0x8231, 0xCC33,
+    0x3C8C, 0x8231, 0xCC34,
+    0x3C8D, 0x8231, 0xCC35,
+    0x3C8E, 0x8231, 0xCC36,
+    0x3C8F, 0x8231, 0xCC37,
+    0x3C90, 0x8231, 0xCC38,
+    0x3C91, 0x8231, 0xCC39,
+    0x3C92, 0x8231, 0xCD30,
+    0x3C93, 0x8231, 0xCD31,
+    0x3C94, 0x8231, 0xCD32,
+    0x3C95, 0x8231, 0xCD33,
+    0x3C96, 0x8231, 0xCD34,
+    0x3C97, 0x8231, 0xCD35,
+    0x3C98, 0x8231, 0xCD36,
+    0x3C99, 0x8231, 0xCD37,
+    0x3C9A, 0x8231, 0xCD38,
+    0x3C9B, 0x8231, 0xCD39,
+    0x3C9C, 0x8231, 0xCE30,
+    0x3C9D, 0x8231, 0xCE31,
+    0x3C9E, 0x8231, 0xCE32,
+    0x3C9F, 0x8231, 0xCE33,
+    0x3CA0, 0x8231, 0xCE34,
+    0x3CA1, 0x8231, 0xCE35,
+    0x3CA2, 0x8231, 0xCE36,
+    0x3CA3, 0x8231, 0xCE37,
+    0x3CA4, 0x8231, 0xCE38,
+    0x3CA5, 0x8231, 0xCE39,
+    0x3CA6, 0x8231, 0xCF30,
+    0x3CA7, 0x8231, 0xCF31,
+    0x3CA8, 0x8231, 0xCF32,
+    0x3CA9, 0x8231, 0xCF33,
+    0x3CAA, 0x8231, 0xCF34,
+    0x3CAB, 0x8231, 0xCF35,
+    0x3CAC, 0x8231, 0xCF36,
+    0x3CAD, 0x8231, 0xCF37,
+    0x3CAE, 0x8231, 0xCF38,
+    0x3CAF, 0x8231, 0xCF39,
+    0x3CB0, 0x8231, 0xD030,
+    0x3CB1, 0x8231, 0xD031,
+    0x3CB2, 0x8231, 0xD032,
+    0x3CB3, 0x8231, 0xD033,
+    0x3CB4, 0x8231, 0xD034,
+    0x3CB5, 0x8231, 0xD035,
+    0x3CB6, 0x8231, 0xD036,
+    0x3CB7, 0x8231, 0xD037,
+    0x3CB8, 0x8231, 0xD038,
+    0x3CB9, 0x8231, 0xD039,
+    0x3CBA, 0x8231, 0xD130,
+    0x3CBB, 0x8231, 0xD131,
+    0x3CBC, 0x8231, 0xD132,
+    0x3CBD, 0x8231, 0xD133,
+    0x3CBE, 0x8231, 0xD134,
+    0x3CBF, 0x8231, 0xD135,
+    0x3CC0, 0x8231, 0xD136,
+    0x3CC1, 0x8231, 0xD137,
+    0x3CC2, 0x8231, 0xD138,
+    0x3CC3, 0x8231, 0xD139,
+    0x3CC4, 0x8231, 0xD230,
+    0x3CC5, 0x8231, 0xD231,
+    0x3CC6, 0x8231, 0xD232,
+    0x3CC7, 0x8231, 0xD233,
+    0x3CC8, 0x8231, 0xD234,
+    0x3CC9, 0x8231, 0xD235,
+    0x3CCA, 0x8231, 0xD236,
+    0x3CCB, 0x8231, 0xD237,
+    0x3CCC, 0x8231, 0xD238,
+    0x3CCD, 0x8231, 0xD239,
+    0x3CCE, 0x8231, 0xD330,
+    0x3CCF, 0x8231, 0xD331,
+    0x3CD0, 0x8231, 0xD332,
+    0x3CD1, 0x8231, 0xD333,
+    0x3CD2, 0x8231, 0xD334,
+    0x3CD3, 0x8231, 0xD335,
+    0x3CD4, 0x8231, 0xD336,
+    0x3CD5, 0x8231, 0xD337,
+    0x3CD6, 0x8231, 0xD338,
+    0x3CD7, 0x8231, 0xD339,
+    0x3CD8, 0x8231, 0xD430,
+    0x3CD9, 0x8231, 0xD431,
+    0x3CDA, 0x8231, 0xD432,
+    0x3CDB, 0x8231, 0xD433,
+    0x3CDC, 0x8231, 0xD434,
+    0x3CDD, 0x8231, 0xD435,
+    0x3CDE, 0x8231, 0xD436,
+    0x3CDF, 0x8231, 0xD437,
+    0x4057, 0x8232, 0xAF33,
+    0x4058, 0x8232, 0xAF34,
+    0x4059, 0x8232, 0xAF35,
+    0x405A, 0x8232, 0xAF36,
+    0x405B, 0x8232, 0xAF37,
+    0x405C, 0x8232, 0xAF38,
+    0x405D, 0x8232, 0xAF39,
+    0x405E, 0x8232, 0xB030,
+    0x405F, 0x8232, 0xB031,
+    0x4060, 0x8232, 0xB032,
+    0x4061, 0x8232, 0xB033,
+    0x4062, 0x8232, 0xB034,
+    0x4063, 0x8232, 0xB035,
+    0x4064, 0x8232, 0xB036,
+    0x4065, 0x8232, 0xB037,
+    0x4066, 0x8232, 0xB038,
+    0x4067, 0x8232, 0xB039,
+    0x4068, 0x8232, 0xB130,
+    0x4069, 0x8232, 0xB131,
+    0x406A, 0x8232, 0xB132,
+    0x406B, 0x8232, 0xB133,
+    0x406C, 0x8232, 0xB134,
+    0x406D, 0x8232, 0xB135,
+    0x406E, 0x8232, 0xB136,
+    0x406F, 0x8232, 0xB137,
+    0x4070, 0x8232, 0xB138,
+    0x4071, 0x8232, 0xB139,
+    0x4072, 0x8232, 0xB230,
+    0x4073, 0x8232, 0xB231,
+    0x4074, 0x8232, 0xB232,
+    0x4075, 0x8232, 0xB233,
+    0x4076, 0x8232, 0xB234,
+    0x4077, 0x8232, 0xB235,
+    0x4078, 0x8232, 0xB236,
+    0x4079, 0x8232, 0xB237,
+    0x407A, 0x8232, 0xB238,
+    0x407B, 0x8232, 0xB239,
+    0x407C, 0x8232, 0xB330,
+    0x407D, 0x8232, 0xB331,
+    0x407E, 0x8232, 0xB332,
+    0x407F, 0x8232, 0xB333,
+    0x4080, 0x8232, 0xB334,
+    0x4081, 0x8232, 0xB335,
+    0x4082, 0x8232, 0xB336,
+    0x4083, 0x8232, 0xB337,
+    0x4084, 0x8232, 0xB338,
+    0x4085, 0x8232, 0xB339,
+    0x4086, 0x8232, 0xB430,
+    0x4087, 0x8232, 0xB431,
+    0x4088, 0x8232, 0xB432,
+    0x4089, 0x8232, 0xB433,
+    0x408A, 0x8232, 0xB434,
+    0x408B, 0x8232, 0xB435,
+    0x408C, 0x8232, 0xB436,
+    0x408D, 0x8232, 0xB437,
+    0x408E, 0x8232, 0xB438,
+    0x408F, 0x8232, 0xB439,
+    0x4090, 0x8232, 0xB530,
+    0x4091, 0x8232, 0xB531,
+    0x4092, 0x8232, 0xB532,
+    0x4093, 0x8232, 0xB533,
+    0x4094, 0x8232, 0xB534,
+    0x4095, 0x8232, 0xB535,
+    0x4096, 0x8232, 0xB536,
+    0x4097, 0x8232, 0xB537,
+    0x4098, 0x8232, 0xB538,
+    0x4099, 0x8232, 0xB539,
+    0x409A, 0x8232, 0xB630,
+    0x409B, 0x8232, 0xB631,
+    0x409C, 0x8232, 0xB632,
+    0x409D, 0x8232, 0xB633,
+    0x409E, 0x8232, 0xB634,
+    0x409F, 0x8232, 0xB635,
+    0x40A0, 0x8232, 0xB636,
+    0x40A1, 0x8232, 0xB637,
+    0x40A2, 0x8232, 0xB638,
+    0x40A3, 0x8232, 0xB639,
+    0x40A4, 0x8232, 0xB730,
+    0x40A5, 0x8232, 0xB731,
+    0x40A6, 0x8232, 0xB732,
+    0x40A7, 0x8232, 0xB733,
+    0x40A8, 0x8232, 0xB734,
+    0x40A9, 0x8232, 0xB735,
+    0x40AA, 0x8232, 0xB736,
+    0x40AB, 0x8232, 0xB737,
+    0x40AC, 0x8232, 0xB738,
+    0x40AD, 0x8232, 0xB739,
+    0x40AE, 0x8232, 0xB830,
+    0x40AF, 0x8232, 0xB831,
+    0x40B0, 0x8232, 0xB832,
+    0x40B1, 0x8232, 0xB833,
+    0x40B2, 0x8232, 0xB834,
+    0x40B3, 0x8232, 0xB835,
+    0x40B4, 0x8232, 0xB836,
+    0x40B5, 0x8232, 0xB837,
+    0x40B6, 0x8232, 0xB838,
+    0x40B7, 0x8232, 0xB839,
+    0x40B8, 0x8232, 0xB930,
+    0x40B9, 0x8232, 0xB931,
+    0x40BA, 0x8232, 0xB932,
+    0x40BB, 0x8232, 0xB933,
+    0x40BC, 0x8232, 0xB934,
+    0x40BD, 0x8232, 0xB935,
+    0x40BE, 0x8232, 0xB936,
+    0x40BF, 0x8232, 0xB937,
+    0x40C0, 0x8232, 0xB938,
+    0x40C1, 0x8232, 0xB939,
+    0x40C2, 0x8232, 0xBA30,
+    0x40C3, 0x8232, 0xBA31,
+    0x40C4, 0x8232, 0xBA32,
+    0x40C5, 0x8232, 0xBA33,
+    0x40C6, 0x8232, 0xBA34,
+    0x40C7, 0x8232, 0xBA35,
+    0x40C8, 0x8232, 0xBA36,
+    0x40C9, 0x8232, 0xBA37,
+    0x40CA, 0x8232, 0xBA38,
+    0x40CB, 0x8232, 0xBA39,
+    0x40CC, 0x8232, 0xBB30,
+    0x40CD, 0x8232, 0xBB31,
+    0x40CE, 0x8232, 0xBB32,
+    0x40CF, 0x8232, 0xBB33,
+    0x40D0, 0x8232, 0xBB34,
+    0x40D1, 0x8232, 0xBB35,
+    0x40D2, 0x8232, 0xBB36,
+    0x40D3, 0x8232, 0xBB37,
+    0x40D4, 0x8232, 0xBB38,
+    0x40D5, 0x8232, 0xBB39,
+    0x40D6, 0x8232, 0xBC30,
+    0x40D7, 0x8232, 0xBC31,
+    0x40D8, 0x8232, 0xBC32,
+    0x40D9, 0x8232, 0xBC33,
+    0x40DA, 0x8232, 0xBC34,
+    0x40DB, 0x8232, 0xBC35,
+    0x40DC, 0x8232, 0xBC36,
+    0x40DD, 0x8232, 0xBC37,
+    0x40DE, 0x8232, 0xBC38,
+    0x40DF, 0x8232, 0xBC39,
+    0x40E0, 0x8232, 0xBD30,
+    0x40E1, 0x8232, 0xBD31,
+    0x40E2, 0x8232, 0xBD32,
+    0x40E3, 0x8232, 0xBD33,
+    0x40E4, 0x8232, 0xBD34,
+    0x40E5, 0x8232, 0xBD35,
+    0x40E6, 0x8232, 0xBD36,
+    0x40E7, 0x8232, 0xBD37,
+    0x40E8, 0x8232, 0xBD38,
+    0x40E9, 0x8232, 0xBD39,
+    0x40EA, 0x8232, 0xBE30,
+    0x40EB, 0x8232, 0xBE31,
+    0x40EC, 0x8232, 0xBE32,
+    0x40ED, 0x8232, 0xBE33,
+    0x40EE, 0x8232, 0xBE34,
+    0x40EF, 0x8232, 0xBE35,
+    0x40F0, 0x8232, 0xBE36,
+    0x40F1, 0x8232, 0xBE37,
+    0x40F2, 0x8232, 0xBE38,
+    0x40F3, 0x8232, 0xBE39,
+    0x40F4, 0x8232, 0xBF30,
+    0x40F5, 0x8232, 0xBF31,
+    0x40F6, 0x8232, 0xBF32,
+    0x40F7, 0x8232, 0xBF33,
+    0x40F8, 0x8232, 0xBF34,
+    0x40F9, 0x8232, 0xBF35,
+    0x40FA, 0x8232, 0xBF36,
+    0x40FB, 0x8232, 0xBF37,
+    0x40FC, 0x8232, 0xBF38,
+    0x40FD, 0x8232, 0xBF39,
+    0x40FE, 0x8232, 0xC030,
+    0x40FF, 0x8232, 0xC031,
+    0x4100, 0x8232, 0xC032,
+    0x4101, 0x8232, 0xC033,
+    0x4102, 0x8232, 0xC034,
+    0x4103, 0x8232, 0xC035,
+    0x4104, 0x8232, 0xC036,
+    0x4105, 0x8232, 0xC037,
+    0x4106, 0x8232, 0xC038,
+    0x4107, 0x8232, 0xC039,
+    0x4108, 0x8232, 0xC130,
+    0x4109, 0x8232, 0xC131,
+    0x410A, 0x8232, 0xC132,
+    0x410B, 0x8232, 0xC133,
+    0x410C, 0x8232, 0xC134,
+    0x410D, 0x8232, 0xC135,
+    0x410E, 0x8232, 0xC136,
+    0x410F, 0x8232, 0xC137,
+    0x4110, 0x8232, 0xC138,
+    0x4111, 0x8232, 0xC139,
+    0x4112, 0x8232, 0xC230,
+    0x4113, 0x8232, 0xC231,
+    0x4114, 0x8232, 0xC232,
+    0x4115, 0x8232, 0xC233,
+    0x4116, 0x8232, 0xC234,
+    0x4117, 0x8232, 0xC235,
+    0x4118, 0x8232, 0xC236,
+    0x4119, 0x8232, 0xC237,
+    0x411A, 0x8232, 0xC238,
+    0x411B, 0x8232, 0xC239,
+    0x411C, 0x8232, 0xC330,
+    0x411D, 0x8232, 0xC331,
+    0x411E, 0x8232, 0xC332,
+    0x411F, 0x8232, 0xC333,
+    0x4120, 0x8232, 0xC334,
+    0x4121, 0x8232, 0xC335,
+    0x4122, 0x8232, 0xC336,
+    0x4123, 0x8232, 0xC337,
+    0x4124, 0x8232, 0xC338,
+    0x4125, 0x8232, 0xC339,
+    0x4126, 0x8232, 0xC430,
+    0x4127, 0x8232, 0xC431,
+    0x4128, 0x8232, 0xC432,
+    0x4129, 0x8232, 0xC433,
+    0x412A, 0x8232, 0xC434,
+    0x412B, 0x8232, 0xC435,
+    0x412C, 0x8232, 0xC436,
+    0x412D, 0x8232, 0xC437,
+    0x412E, 0x8232, 0xC438,
+    0x412F, 0x8232, 0xC439,
+    0x4130, 0x8232, 0xC530,
+    0x4131, 0x8232, 0xC531,
+    0x4132, 0x8232, 0xC532,
+    0x4133, 0x8232, 0xC533,
+    0x4134, 0x8232, 0xC534,
+    0x4135, 0x8232, 0xC535,
+    0x4136, 0x8232, 0xC536,
+    0x4137, 0x8232, 0xC537,
+    0x4138, 0x8232, 0xC538,
+    0x4139, 0x8232, 0xC539,
+    0x413A, 0x8232, 0xC630,
+    0x413B, 0x8232, 0xC631,
+    0x413C, 0x8232, 0xC632,
+    0x413D, 0x8232, 0xC633,
+    0x413E, 0x8232, 0xC634,
+    0x413F, 0x8232, 0xC635,
+    0x4140, 0x8232, 0xC636,
+    0x4141, 0x8232, 0xC637,
+    0x4142, 0x8232, 0xC638,
+    0x4143, 0x8232, 0xC639,
+    0x4144, 0x8232, 0xC730,
+    0x4145, 0x8232, 0xC731,
+    0x4146, 0x8232, 0xC732,
+    0x4147, 0x8232, 0xC733,
+    0x4148, 0x8232, 0xC734,
+    0x4149, 0x8232, 0xC735,
+    0x414A, 0x8232, 0xC736,
+    0x414B, 0x8232, 0xC737,
+    0x414C, 0x8232, 0xC738,
+    0x414D, 0x8232, 0xC739,
+    0x414E, 0x8232, 0xC830,
+    0x414F, 0x8232, 0xC831,
+    0x4150, 0x8232, 0xC832,
+    0x4151, 0x8232, 0xC833,
+    0x4152, 0x8232, 0xC834,
+    0x4153, 0x8232, 0xC835,
+    0x4154, 0x8232, 0xC836,
+    0x4155, 0x8232, 0xC837,
+    0x4156, 0x8232, 0xC838,
+    0x4157, 0x8232, 0xC839,
+    0x4158, 0x8232, 0xC930,
+    0x4159, 0x8232, 0xC931,
+    0x415A, 0x8232, 0xC932,
+    0x415B, 0x8232, 0xC933,
+    0x415C, 0x8232, 0xC934,
+    0x415D, 0x8232, 0xC935,
+    0x415E, 0x8232, 0xC936,
+    0x4338, 0x8232, 0xF838,
+    0x4339, 0x8232, 0xF839,
+    0x433A, 0x8232, 0xF930,
+    0x433B, 0x8232, 0xF931,
+    0x433C, 0x8232, 0xF932,
+    0x433D, 0x8232, 0xF933,
+    0x433E, 0x8232, 0xF934,
+    0x433F, 0x8232, 0xF935,
+    0x4340, 0x8232, 0xF936,
+    0x4341, 0x8232, 0xF937,
+    0x4342, 0x8232, 0xF938,
+    0x4343, 0x8232, 0xF939,
+    0x4344, 0x8232, 0xFA30,
+    0x4345, 0x8232, 0xFA31,
+    0x4346, 0x8232, 0xFA32,
+    0x4347, 0x8232, 0xFA33,
+    0x4348, 0x8232, 0xFA34,
+    0x4349, 0x8232, 0xFA35,
+    0x434A, 0x8232, 0xFA36,
+    0x434B, 0x8232, 0xFA37,
+    0x434C, 0x8232, 0xFA38,
+    0x434D, 0x8232, 0xFA39,
+    0x434E, 0x8232, 0xFB30,
+    0x434F, 0x8232, 0xFB31,
+    0x4350, 0x8232, 0xFB32,
+    0x4351, 0x8232, 0xFB33,
+    0x4352, 0x8232, 0xFB34,
+    0x4353, 0x8232, 0xFB35,
+    0x4354, 0x8232, 0xFB36,
+    0x4355, 0x8232, 0xFB37,
+    0x4356, 0x8232, 0xFB38,
+    0x4357, 0x8232, 0xFB39,
+    0x4358, 0x8232, 0xFC30,
+    0x4359, 0x8232, 0xFC31,
+    0x435A, 0x8232, 0xFC32,
+    0x435B, 0x8232, 0xFC33,
+    0x435C, 0x8232, 0xFC34,
+    0x435D, 0x8232, 0xFC35,
+    0x435E, 0x8232, 0xFC36,
+    0x435F, 0x8232, 0xFC37,
+    0x4360, 0x8232, 0xFC38,
+    0x4361, 0x8232, 0xFC39,
+    0x4362, 0x8232, 0xFD30,
+    0x4363, 0x8232, 0xFD31,
+    0x4364, 0x8232, 0xFD32,
+    0x4365, 0x8232, 0xFD33,
+    0x4366, 0x8232, 0xFD34,
+    0x4367, 0x8232, 0xFD35,
+    0x4368, 0x8232, 0xFD36,
+    0x4369, 0x8232, 0xFD37,
+    0x436A, 0x8232, 0xFD38,
+    0x436B, 0x8232, 0xFD39,
+    0x436C, 0x8232, 0xFE30,
+    0x436D, 0x8232, 0xFE31,
+    0x436E, 0x8232, 0xFE32,
+    0x436F, 0x8232, 0xFE33,
+    0x4370, 0x8232, 0xFE34,
+    0x4371, 0x8232, 0xFE35,
+    0x4372, 0x8232, 0xFE36,
+    0x4373, 0x8232, 0xFE37,
+    0x4374, 0x8232, 0xFE38,
+    0x4375, 0x8232, 0xFE39,
+    0x4376, 0x8233, 0x8130,
+    0x4377, 0x8233, 0x8131,
+    0x4378, 0x8233, 0x8132,
+    0x4379, 0x8233, 0x8133,
+    0x437A, 0x8233, 0x8134,
+    0x437B, 0x8233, 0x8135,
+    0x437C, 0x8233, 0x8136,
+    0x437D, 0x8233, 0x8137,
+    0x437E, 0x8233, 0x8138,
+    0x437F, 0x8233, 0x8139,
+    0x4380, 0x8233, 0x8230,
+    0x4381, 0x8233, 0x8231,
+    0x4382, 0x8233, 0x8232,
+    0x4383, 0x8233, 0x8233,
+    0x4384, 0x8233, 0x8234,
+    0x4385, 0x8233, 0x8235,
+    0x4386, 0x8233, 0x8236,
+    0x4387, 0x8233, 0x8237,
+    0x4388, 0x8233, 0x8238,
+    0x4389, 0x8233, 0x8239,
+    0x438A, 0x8233, 0x8330,
+    0x438B, 0x8233, 0x8331,
+    0x438C, 0x8233, 0x8332,
+    0x438D, 0x8233, 0x8333,
+    0x438E, 0x8233, 0x8334,
+    0x438F, 0x8233, 0x8335,
+    0x4390, 0x8233, 0x8336,
+    0x4391, 0x8233, 0x8337,
+    0x4392, 0x8233, 0x8338,
+    0x4393, 0x8233, 0x8339,
+    0x4394, 0x8233, 0x8430,
+    0x4395, 0x8233, 0x8431,
+    0x4396, 0x8233, 0x8432,
+    0x4397, 0x8233, 0x8433,
+    0x4398, 0x8233, 0x8434,
+    0x4399, 0x8233, 0x8435,
+    0x439A, 0x8233, 0x8436,
+    0x439B, 0x8233, 0x8437,
+    0x439C, 0x8233, 0x8438,
+    0x439D, 0x8233, 0x8439,
+    0x439E, 0x8233, 0x8530,
+    0x439F, 0x8233, 0x8531,
+    0x43A0, 0x8233, 0x8532,
+    0x43A1, 0x8233, 0x8533,
+    0x43A2, 0x8233, 0x8534,
+    0x43A3, 0x8233, 0x8535,
+    0x43A4, 0x8233, 0x8536,
+    0x43A5, 0x8233, 0x8537,
+    0x43A6, 0x8233, 0x8538,
+    0x43A7, 0x8233, 0x8539,
+    0x43A8, 0x8233, 0x8630,
+    0x43A9, 0x8233, 0x8631,
+    0x43AA, 0x8233, 0x8632,
+    0x43AB, 0x8233, 0x8633,
+    0x43AD, 0x8233, 0x8634,
+    0x43AE, 0x8233, 0x8635,
+    0x43AF, 0x8233, 0x8636,
+    0x43B0, 0x8233, 0x8637,
+    0x43B2, 0x8233, 0x8638,
+    0x43B3, 0x8233, 0x8639,
+    0x43B4, 0x8233, 0x8730,
+    0x43B5, 0x8233, 0x8731,
+    0x43B6, 0x8233, 0x8732,
+    0x43B7, 0x8233, 0x8733,
+    0x43B8, 0x8233, 0x8734,
+    0x43B9, 0x8233, 0x8735,
+    0x43BA, 0x8233, 0x8736,
+    0x43BB, 0x8233, 0x8737,
+    0x43BC, 0x8233, 0x8738,
+    0x43BD, 0x8233, 0x8739,
+    0x43BE, 0x8233, 0x8830,
+    0x43BF, 0x8233, 0x8831,
+    0x43C0, 0x8233, 0x8832,
+    0x43C1, 0x8233, 0x8833,
+    0x43C2, 0x8233, 0x8834,
+    0x43C3, 0x8233, 0x8835,
+    0x43C4, 0x8233, 0x8836,
+    0x43C5, 0x8233, 0x8837,
+    0x43C6, 0x8233, 0x8838,
+    0x43C7, 0x8233, 0x8839,
+    0x43C8, 0x8233, 0x8930,
+    0x43C9, 0x8233, 0x8931,
+    0x43CA, 0x8233, 0x8932,
+    0x43CB, 0x8233, 0x8933,
+    0x43CC, 0x8233, 0x8934,
+    0x43CD, 0x8233, 0x8935,
+    0x43CE, 0x8233, 0x8936,
+    0x43CF, 0x8233, 0x8937,
+    0x43D0, 0x8233, 0x8938,
+    0x43D1, 0x8233, 0x8939,
+    0x43D2, 0x8233, 0x8A30,
+    0x43D3, 0x8233, 0x8A31,
+    0x43D4, 0x8233, 0x8A32,
+    0x43D5, 0x8233, 0x8A33,
+    0x43D6, 0x8233, 0x8A34,
+    0x43D7, 0x8233, 0x8A35,
+    0x43D8, 0x8233, 0x8A36,
+    0x43D9, 0x8233, 0x8A37,
+    0x43DA, 0x8233, 0x8A38,
+    0x43DB, 0x8233, 0x8A39,
+    0x43DC, 0x8233, 0x8B30,
+    0x43DE, 0x8233, 0x8B31,
+    0x43DF, 0x8233, 0x8B32,
+    0x43E0, 0x8233, 0x8B33,
+    0x43E1, 0x8233, 0x8B34,
+    0x43E2, 0x8233, 0x8B35,
+    0x43E3, 0x8233, 0x8B36,
+    0x43E4, 0x8233, 0x8B37,
+    0x43E5, 0x8233, 0x8B38,
+    0x43E6, 0x8233, 0x8B39,
+    0x43E7, 0x8233, 0x8C30,
+    0x43E8, 0x8233, 0x8C31,
+    0x43E9, 0x8233, 0x8C32,
+    0x43EA, 0x8233, 0x8C33,
+    0x43EB, 0x8233, 0x8C34,
+    0x43EC, 0x8233, 0x8C35,
+    0x43ED, 0x8233, 0x8C36,
+    0x43EE, 0x8233, 0x8C37,
+    0x43EF, 0x8233, 0x8C38,
+    0x43F0, 0x8233, 0x8C39,
+    0x43F1, 0x8233, 0x8D30,
+    0x43F2, 0x8233, 0x8D31,
+    0x43F3, 0x8233, 0x8D32,
+    0x43F4, 0x8233, 0x8D33,
+    0x43F5, 0x8233, 0x8D34,
+    0x43F6, 0x8233, 0x8D35,
+    0x43F7, 0x8233, 0x8D36,
+    0x43F8, 0x8233, 0x8D37,
+    0x43F9, 0x8233, 0x8D38,
+    0x43FA, 0x8233, 0x8D39,
+    0x43FB, 0x8233, 0x8E30,
+    0x43FC, 0x8233, 0x8E31,
+    0x43FD, 0x8233, 0x8E32,
+    0x43FE, 0x8233, 0x8E33,
+    0x43FF, 0x8233, 0x8E34,
+    0x4400, 0x8233, 0x8E35,
+    0x4401, 0x8233, 0x8E36,
+    0x4402, 0x8233, 0x8E37,
+    0x4403, 0x8233, 0x8E38,
+    0x4404, 0x8233, 0x8E39,
+    0x4405, 0x8233, 0x8F30,
+    0x4406, 0x8233, 0x8F31,
+    0x4407, 0x8233, 0x8F32,
+    0x4408, 0x8233, 0x8F33,
+    0x4409, 0x8233, 0x8F34,
+    0x440A, 0x8233, 0x8F35,
+    0x440B, 0x8233, 0x8F36,
+    0x440C, 0x8233, 0x8F37,
+    0x440D, 0x8233, 0x8F38,
+    0x440E, 0x8233, 0x8F39,
+    0x440F, 0x8233, 0x9030,
+    0x4410, 0x8233, 0x9031,
+    0x4411, 0x8233, 0x9032,
+    0x4412, 0x8233, 0x9033,
+    0x4413, 0x8233, 0x9034,
+    0x4414, 0x8233, 0x9035,
+    0x4415, 0x8233, 0x9036,
+    0x4416, 0x8233, 0x9037,
+    0x4417, 0x8233, 0x9038,
+    0x4418, 0x8233, 0x9039,
+    0x4419, 0x8233, 0x9130,
+    0x441A, 0x8233, 0x9131,
+    0x441B, 0x8233, 0x9132,
+    0x441C, 0x8233, 0x9133,
+    0x441D, 0x8233, 0x9134,
+    0x441E, 0x8233, 0x9135,
+    0x441F, 0x8233, 0x9136,
+    0x4420, 0x8233, 0x9137,
+    0x4421, 0x8233, 0x9138,
+    0x4422, 0x8233, 0x9139,
+    0x4423, 0x8233, 0x9230,
+    0x4424, 0x8233, 0x9231,
+    0x4425, 0x8233, 0x9232,
+    0x4426, 0x8233, 0x9233,
+    0x4427, 0x8233, 0x9234,
+    0x4428, 0x8233, 0x9235,
+    0x4429, 0x8233, 0x9236,
+    0x442A, 0x8233, 0x9237,
+    0x442B, 0x8233, 0x9238,
+    0x442C, 0x8233, 0x9239,
+    0x442D, 0x8233, 0x9330,
+    0x442E, 0x8233, 0x9331,
+    0x442F, 0x8233, 0x9332,
+    0x4430, 0x8233, 0x9333,
+    0x4431, 0x8233, 0x9334,
+    0x4432, 0x8233, 0x9335,
+    0x4433, 0x8233, 0x9336,
+    0x4434, 0x8233, 0x9337,
+    0x4435, 0x8233, 0x9338,
+    0x4436, 0x8233, 0x9339,
+    0x4437, 0x8233, 0x9430,
+    0x4438, 0x8233, 0x9431,
+    0x4439, 0x8233, 0x9432,
+    0x443A, 0x8233, 0x9433,
+    0x443B, 0x8233, 0x9434,
+    0x443C, 0x8233, 0x9435,
+    0x443D, 0x8233, 0x9436,
+    0x443E, 0x8233, 0x9437,
+    0x443F, 0x8233, 0x9438,
+    0x4440, 0x8233, 0x9439,
+    0x4441, 0x8233, 0x9530,
+    0x4442, 0x8233, 0x9531,
+    0x4443, 0x8233, 0x9532,
+    0x4444, 0x8233, 0x9533,
+    0x4445, 0x8233, 0x9534,
+    0x4446, 0x8233, 0x9535,
+    0x4447, 0x8233, 0x9536,
+    0x4448, 0x8233, 0x9537,
+    0x4449, 0x8233, 0x9538,
+    0x444A, 0x8233, 0x9539,
+    0x444B, 0x8233, 0x9630,
+    0x444C, 0x8233, 0x9631,
+    0x444D, 0x8233, 0x9632,
+    0x444E, 0x8233, 0x9633,
+    0x444F, 0x8233, 0x9634,
+    0x4450, 0x8233, 0x9635,
+    0x4451, 0x8233, 0x9636,
+    0x4452, 0x8233, 0x9637,
+    0x4453, 0x8233, 0x9638,
+    0x4454, 0x8233, 0x9639,
+    0x4455, 0x8233, 0x9730,
+    0x4456, 0x8233, 0x9731,
+    0x4457, 0x8233, 0x9732,
+    0x4458, 0x8233, 0x9733,
+    0x4459, 0x8233, 0x9734,
+    0x445A, 0x8233, 0x9735,
+    0x445B, 0x8233, 0x9736,
+    0x445C, 0x8233, 0x9737,
+    0x445D, 0x8233, 0x9738,
+    0x445E, 0x8233, 0x9739,
+    0x445F, 0x8233, 0x9830,
+    0x4460, 0x8233, 0x9831,
+    0x4461, 0x8233, 0x9832,
+    0x4462, 0x8233, 0x9833,
+    0x4463, 0x8233, 0x9834,
+    0x4464, 0x8233, 0x9835,
+    0x4465, 0x8233, 0x9836,
+    0x4466, 0x8233, 0x9837,
+    0x4467, 0x8233, 0x9838,
+    0x4468, 0x8233, 0x9839,
+    0x4469, 0x8233, 0x9930,
+    0x446A, 0x8233, 0x9931,
+    0x446B, 0x8233, 0x9932,
+    0x446C, 0x8233, 0x9933,
+    0x446D, 0x8233, 0x9934,
+    0x446E, 0x8233, 0x9935,
+    0x446F, 0x8233, 0x9936,
+    0x4470, 0x8233, 0x9937,
+    0x4471, 0x8233, 0x9938,
+    0x4472, 0x8233, 0x9939,
+    0x4473, 0x8233, 0x9A30,
+    0x4474, 0x8233, 0x9A31,
+    0x4475, 0x8233, 0x9A32,
+    0x4476, 0x8233, 0x9A33,
+    0x4477, 0x8233, 0x9A34,
+    0x4478, 0x8233, 0x9A35,
+    0x4479, 0x8233, 0x9A36,
+    0x447A, 0x8233, 0x9A37,
+    0x447B, 0x8233, 0x9A38,
+    0x447C, 0x8233, 0x9A39,
+    0x447D, 0x8233, 0x9B30,
+    0x447E, 0x8233, 0x9B31,
+    0x447F, 0x8233, 0x9B32,
+    0x4480, 0x8233, 0x9B33,
+    0x4481, 0x8233, 0x9B34,
+    0x4482, 0x8233, 0x9B35,
+    0x4483, 0x8233, 0x9B36,
+    0x4484, 0x8233, 0x9B37,
+    0x4485, 0x8233, 0x9B38,
+    0x4486, 0x8233, 0x9B39,
+    0x4487, 0x8233, 0x9C30,
+    0x4488, 0x8233, 0x9C31,
+    0x4489, 0x8233, 0x9C32,
+    0x448A, 0x8233, 0x9C33,
+    0x448B, 0x8233, 0x9C34,
+    0x448C, 0x8233, 0x9C35,
+    0x448D, 0x8233, 0x9C36,
+    0x448E, 0x8233, 0x9C37,
+    0x448F, 0x8233, 0x9C38,
+    0x4490, 0x8233, 0x9C39,
+    0x4491, 0x8233, 0x9D30,
+    0x4492, 0x8233, 0x9D31,
+    0x4493, 0x8233, 0x9D32,
+    0x4494, 0x8233, 0x9D33,
+    0x4495, 0x8233, 0x9D34,
+    0x4496, 0x8233, 0x9D35,
+    0x4497, 0x8233, 0x9D36,
+    0x4498, 0x8233, 0x9D37,
+    0x4499, 0x8233, 0x9D38,
+    0x449A, 0x8233, 0x9D39,
+    0x449B, 0x8233, 0x9E30,
+    0x449C, 0x8233, 0x9E31,
+    0x449D, 0x8233, 0x9E32,
+    0x449E, 0x8233, 0x9E33,
+    0x449F, 0x8233, 0x9E34,
+    0x44A0, 0x8233, 0x9E35,
+    0x44A1, 0x8233, 0x9E36,
+    0x44A2, 0x8233, 0x9E37,
+    0x44A3, 0x8233, 0x9E38,
+    0x44A4, 0x8233, 0x9E39,
+    0x44A5, 0x8233, 0x9F30,
+    0x44A6, 0x8233, 0x9F31,
+    0x44A7, 0x8233, 0x9F32,
+    0x44A8, 0x8233, 0x9F33,
+    0x44A9, 0x8233, 0x9F34,
+    0x44AA, 0x8233, 0x9F35,
+    0x44AB, 0x8233, 0x9F36,
+    0x44AC, 0x8233, 0x9F37,
+    0x44AD, 0x8233, 0x9F38,
+    0x44AE, 0x8233, 0x9F39,
+    0x44AF, 0x8233, 0xA030,
+    0x44B0, 0x8233, 0xA031,
+    0x44B1, 0x8233, 0xA032,
+    0x44B2, 0x8233, 0xA033,
+    0x44B3, 0x8233, 0xA034,
+    0x44B4, 0x8233, 0xA035,
+    0x44B5, 0x8233, 0xA036,
+    0x44B6, 0x8233, 0xA037,
+    0x44B7, 0x8233, 0xA038,
+    0x44B8, 0x8233, 0xA039,
+    0x44B9, 0x8233, 0xA130,
+    0x44BA, 0x8233, 0xA131,
+    0x44BB, 0x8233, 0xA132,
+    0x44BC, 0x8233, 0xA133,
+    0x44BD, 0x8233, 0xA134,
+    0x44BE, 0x8233, 0xA135,
+    0x44BF, 0x8233, 0xA136,
+    0x44C0, 0x8233, 0xA137,
+    0x44C1, 0x8233, 0xA138,
+    0x44C2, 0x8233, 0xA139,
+    0x44C3, 0x8233, 0xA230,
+    0x44C4, 0x8233, 0xA231,
+    0x44C5, 0x8233, 0xA232,
+    0x44C6, 0x8233, 0xA233,
+    0x44C7, 0x8233, 0xA234,
+    0x44C8, 0x8233, 0xA235,
+    0x44C9, 0x8233, 0xA236,
+    0x44CA, 0x8233, 0xA237,
+    0x44CB, 0x8233, 0xA238,
+    0x44CC, 0x8233, 0xA239,
+    0x44CD, 0x8233, 0xA330,
+    0x44CE, 0x8233, 0xA331,
+    0x44CF, 0x8233, 0xA332,
+    0x44D0, 0x8233, 0xA333,
+    0x44D1, 0x8233, 0xA334,
+    0x44D2, 0x8233, 0xA335,
+    0x44D3, 0x8233, 0xA336,
+    0x44D4, 0x8233, 0xA337,
+    0x44D5, 0x8233, 0xA338,
+    0x464D, 0x8233, 0xC932,
+    0x464E, 0x8233, 0xC933,
+    0x464F, 0x8233, 0xC934,
+    0x4650, 0x8233, 0xC935,
+    0x4651, 0x8233, 0xC936,
+    0x4652, 0x8233, 0xC937,
+    0x4653, 0x8233, 0xC938,
+    0x4654, 0x8233, 0xC939,
+    0x4655, 0x8233, 0xCA30,
+    0x4656, 0x8233, 0xCA31,
+    0x4657, 0x8233, 0xCA32,
+    0x4658, 0x8233, 0xCA33,
+    0x4659, 0x8233, 0xCA34,
+    0x465A, 0x8233, 0xCA35,
+    0x465B, 0x8233, 0xCA36,
+    0x465C, 0x8233, 0xCA37,
+    0x465D, 0x8233, 0xCA38,
+    0x465E, 0x8233, 0xCA39,
+    0x465F, 0x8233, 0xCB30,
+    0x4660, 0x8233, 0xCB31,
+    0x4662, 0x8233, 0xCB32,
+    0x4663, 0x8233, 0xCB33,
+    0x4664, 0x8233, 0xCB34,
+    0x4665, 0x8233, 0xCB35,
+    0x4666, 0x8233, 0xCB36,
+    0x4667, 0x8233, 0xCB37,
+    0x4668, 0x8233, 0xCB38,
+    0x4669, 0x8233, 0xCB39,
+    0x466A, 0x8233, 0xCC30,
+    0x466B, 0x8233, 0xCC31,
+    0x466C, 0x8233, 0xCC32,
+    0x466D, 0x8233, 0xCC33,
+    0x466E, 0x8233, 0xCC34,
+    0x466F, 0x8233, 0xCC35,
+    0x4670, 0x8233, 0xCC36,
+    0x4671, 0x8233, 0xCC37,
+    0x4672, 0x8233, 0xCC38,
+    0x4673, 0x8233, 0xCC39,
+    0x4674, 0x8233, 0xCD30,
+    0x4675, 0x8233, 0xCD31,
+    0x4676, 0x8233, 0xCD32,
+    0x4677, 0x8233, 0xCD33,
+    0x4678, 0x8233, 0xCD34,
+    0x4679, 0x8233, 0xCD35,
+    0x467A, 0x8233, 0xCD36,
+    0x467B, 0x8233, 0xCD37,
+    0x467C, 0x8233, 0xCD38,
+    0x467D, 0x8233, 0xCD39,
+    0x467E, 0x8233, 0xCE30,
+    0x467F, 0x8233, 0xCE31,
+    0x4680, 0x8233, 0xCE32,
+    0x4681, 0x8233, 0xCE33,
+    0x4682, 0x8233, 0xCE34,
+    0x4683, 0x8233, 0xCE35,
+    0x4684, 0x8233, 0xCE36,
+    0x4685, 0x8233, 0xCE37,
+    0x4686, 0x8233, 0xCE38,
+    0x4687, 0x8233, 0xCE39,
+    0x4688, 0x8233, 0xCF30,
+    0x4689, 0x8233, 0xCF31,
+    0x468A, 0x8233, 0xCF32,
+    0x468B, 0x8233, 0xCF33,
+    0x468C, 0x8233, 0xCF34,
+    0x468D, 0x8233, 0xCF35,
+    0x468E, 0x8233, 0xCF36,
+    0x468F, 0x8233, 0xCF37,
+    0x4690, 0x8233, 0xCF38,
+    0x4691, 0x8233, 0xCF39,
+    0x4692, 0x8233, 0xD030,
+    0x4693, 0x8233, 0xD031,
+    0x4694, 0x8233, 0xD032,
+    0x4695, 0x8233, 0xD033,
+    0x4696, 0x8233, 0xD034,
+    0x4697, 0x8233, 0xD035,
+    0x4698, 0x8233, 0xD036,
+    0x4699, 0x8233, 0xD037,
+    0x469A, 0x8233, 0xD038,
+    0x469B, 0x8233, 0xD039,
+    0x469C, 0x8233, 0xD130,
+    0x469D, 0x8233, 0xD131,
+    0x469E, 0x8233, 0xD132,
+    0x469F, 0x8233, 0xD133,
+    0x46A0, 0x8233, 0xD134,
+    0x46A1, 0x8233, 0xD135,
+    0x46A2, 0x8233, 0xD136,
+    0x46A3, 0x8233, 0xD137,
+    0x46A4, 0x8233, 0xD138,
+    0x46A5, 0x8233, 0xD139,
+    0x46A6, 0x8233, 0xD230,
+    0x46A7, 0x8233, 0xD231,
+    0x46A8, 0x8233, 0xD232,
+    0x46A9, 0x8233, 0xD233,
+    0x46AA, 0x8233, 0xD234,
+    0x46AB, 0x8233, 0xD235,
+    0x46AC, 0x8233, 0xD236,
+    0x46AD, 0x8233, 0xD237,
+    0x46AE, 0x8233, 0xD238,
+    0x46AF, 0x8233, 0xD239,
+    0x46B0, 0x8233, 0xD330,
+    0x46B1, 0x8233, 0xD331,
+    0x46B2, 0x8233, 0xD332,
+    0x46B3, 0x8233, 0xD333,
+    0x46B4, 0x8233, 0xD334,
+    0x46B5, 0x8233, 0xD335,
+    0x46B6, 0x8233, 0xD336,
+    0x46B7, 0x8233, 0xD337,
+    0x46B8, 0x8233, 0xD338,
+    0x46B9, 0x8233, 0xD339,
+    0x46BA, 0x8233, 0xD430,
+    0x46BB, 0x8233, 0xD431,
+    0x46BC, 0x8233, 0xD432,
+    0x46BD, 0x8233, 0xD433,
+    0x46BE, 0x8233, 0xD434,
+    0x46BF, 0x8233, 0xD435,
+    0x46C0, 0x8233, 0xD436,
+    0x46C1, 0x8233, 0xD437,
+    0x46C2, 0x8233, 0xD438,
+    0x46C3, 0x8233, 0xD439,
+    0x46C4, 0x8233, 0xD530,
+    0x46C5, 0x8233, 0xD531,
+    0x46C6, 0x8233, 0xD532,
+    0x46C7, 0x8233, 0xD533,
+    0x46C8, 0x8233, 0xD534,
+    0x46C9, 0x8233, 0xD535,
+    0x46CA, 0x8233, 0xD536,
+    0x46CB, 0x8233, 0xD537,
+    0x46CC, 0x8233, 0xD538,
+    0x46CD, 0x8233, 0xD539,
+    0x46CE, 0x8233, 0xD630,
+    0x46CF, 0x8233, 0xD631,
+    0x46D0, 0x8233, 0xD632,
+    0x46D1, 0x8233, 0xD633,
+    0x46D2, 0x8233, 0xD634,
+    0x46D3, 0x8233, 0xD635,
+    0x46D4, 0x8233, 0xD636,
+    0x46D5, 0x8233, 0xD637,
+    0x46D6, 0x8233, 0xD638,
+    0x46D7, 0x8233, 0xD639,
+    0x46D8, 0x8233, 0xD730,
+    0x46D9, 0x8233, 0xD731,
+    0x46DA, 0x8233, 0xD732,
+    0x46DB, 0x8233, 0xD733,
+    0x46DC, 0x8233, 0xD734,
+    0x46DD, 0x8233, 0xD735,
+    0x46DE, 0x8233, 0xD736,
+    0x46DF, 0x8233, 0xD737,
+    0x46E0, 0x8233, 0xD738,
+    0x46E1, 0x8233, 0xD739,
+    0x46E2, 0x8233, 0xD830,
+    0x46E3, 0x8233, 0xD831,
+    0x46E4, 0x8233, 0xD832,
+    0x46E5, 0x8233, 0xD833,
+    0x46E6, 0x8233, 0xD834,
+    0x46E7, 0x8233, 0xD835,
+    0x46E8, 0x8233, 0xD836,
+    0x46E9, 0x8233, 0xD837,
+    0x46EA, 0x8233, 0xD838,
+    0x46EB, 0x8233, 0xD839,
+    0x46EC, 0x8233, 0xD930,
+    0x46ED, 0x8233, 0xD931,
+    0x46EE, 0x8233, 0xD932,
+    0x46EF, 0x8233, 0xD933,
+    0x46F0, 0x8233, 0xD934,
+    0x46F1, 0x8233, 0xD935,
+    0x46F2, 0x8233, 0xD936,
+    0x46F3, 0x8233, 0xD937,
+    0x46F4, 0x8233, 0xD938,
+    0x46F5, 0x8233, 0xD939,
+    0x46F6, 0x8233, 0xDA30,
+    0x46F7, 0x8233, 0xDA31,
+    0x46F8, 0x8233, 0xDA32,
+    0x46F9, 0x8233, 0xDA33,
+    0x46FA, 0x8233, 0xDA34,
+    0x46FB, 0x8233, 0xDA35,
+    0x46FC, 0x8233, 0xDA36,
+    0x46FD, 0x8233, 0xDA37,
+    0x46FE, 0x8233, 0xDA38,
+    0x46FF, 0x8233, 0xDA39,
+    0x4700, 0x8233, 0xDB30,
+    0x4701, 0x8233, 0xDB31,
+    0x4702, 0x8233, 0xDB32,
+    0x4703, 0x8233, 0xDB33,
+    0x4704, 0x8233, 0xDB34,
+    0x4705, 0x8233, 0xDB35,
+    0x4706, 0x8233, 0xDB36,
+    0x4707, 0x8233, 0xDB37,
+    0x4708, 0x8233, 0xDB38,
+    0x4709, 0x8233, 0xDB39,
+    0x470A, 0x8233, 0xDC30,
+    0x470B, 0x8233, 0xDC31,
+    0x470C, 0x8233, 0xDC32,
+    0x470D, 0x8233, 0xDC33,
+    0x470E, 0x8233, 0xDC34,
+    0x470F, 0x8233, 0xDC35,
+    0x4710, 0x8233, 0xDC36,
+    0x4711, 0x8233, 0xDC37,
+    0x4712, 0x8233, 0xDC38,
+    0x4713, 0x8233, 0xDC39,
+    0x4714, 0x8233, 0xDD30,
+    0x4715, 0x8233, 0xDD31,
+    0x4716, 0x8233, 0xDD32,
+    0x4717, 0x8233, 0xDD33,
+    0x4718, 0x8233, 0xDD34,
+    0x4719, 0x8233, 0xDD35,
+    0x471A, 0x8233, 0xDD36,
+    0x471B, 0x8233, 0xDD37,
+    0x471C, 0x8233, 0xDD38,
+    0x471D, 0x8233, 0xDD39,
+    0x471E, 0x8233, 0xDE30,
+    0x471F, 0x8233, 0xDE31,
+    0x4720, 0x8233, 0xDE32,
+    0x4721, 0x8233, 0xDE33,
+    0x4722, 0x8233, 0xDE34,
+    0x4724, 0x8233, 0xDE35,
+    0x4725, 0x8233, 0xDE36,
+    0x4726, 0x8233, 0xDE37,
+    0x4727, 0x8233, 0xDE38,
+    0x4728, 0x8233, 0xDE39,
+    0x472A, 0x8233, 0xDF30,
+    0x472B, 0x8233, 0xDF31,
+    0x472C, 0x8233, 0xDF32,
+    0x472D, 0x8233, 0xDF33,
+    0x472E, 0x8233, 0xDF34,
+    0x472F, 0x8233, 0xDF35,
+    0x4730, 0x8233, 0xDF36,
+    0x4731, 0x8233, 0xDF37,
+    0x4732, 0x8233, 0xDF38,
+    0x4733, 0x8233, 0xDF39,
+    0x4734, 0x8233, 0xE030,
+    0x4735, 0x8233, 0xE031,
+    0x4736, 0x8233, 0xE032,
+    0x4737, 0x8233, 0xE033,
+    0x4738, 0x8233, 0xE034,
+    0x4739, 0x8233, 0xE035,
+    0x473A, 0x8233, 0xE036,
+    0x473B, 0x8233, 0xE037,
+    0x473C, 0x8233, 0xE038,
+    0x473D, 0x8233, 0xE039,
+    0x473E, 0x8233, 0xE130,
+    0x473F, 0x8233, 0xE131,
+    0x4740, 0x8233, 0xE132,
+    0x4741, 0x8233, 0xE133,
+    0x4742, 0x8233, 0xE134,
+    0x4743, 0x8233, 0xE135,
+    0x4744, 0x8233, 0xE136,
+    0x4745, 0x8233, 0xE137,
+    0x4746, 0x8233, 0xE138,
+    0x4747, 0x8233, 0xE139,
+    0x4748, 0x8233, 0xE230,
+    0x4749, 0x8233, 0xE231,
+    0x474A, 0x8233, 0xE232,
+    0x474B, 0x8233, 0xE233,
+    0x474C, 0x8233, 0xE234,
+    0x474D, 0x8233, 0xE235,
+    0x474E, 0x8233, 0xE236,
+    0x474F, 0x8233, 0xE237,
+    0x4750, 0x8233, 0xE238,
+    0x4751, 0x8233, 0xE239,
+    0x4752, 0x8233, 0xE330,
+    0x4753, 0x8233, 0xE331,
+    0x4754, 0x8233, 0xE332,
+    0x4755, 0x8233, 0xE333,
+    0x4756, 0x8233, 0xE334,
+    0x4757, 0x8233, 0xE335,
+    0x4758, 0x8233, 0xE336,
+    0x4759, 0x8233, 0xE337,
+    0x475A, 0x8233, 0xE338,
+    0x475B, 0x8233, 0xE339,
+    0x475C, 0x8233, 0xE430,
+    0x475D, 0x8233, 0xE431,
+    0x475E, 0x8233, 0xE432,
+    0x475F, 0x8233, 0xE433,
+    0x4760, 0x8233, 0xE434,
+    0x4761, 0x8233, 0xE435,
+    0x4762, 0x8233, 0xE436,
+    0x4763, 0x8233, 0xE437,
+    0x4764, 0x8233, 0xE438,
+    0x4765, 0x8233, 0xE439,
+    0x4766, 0x8233, 0xE530,
+    0x4767, 0x8233, 0xE531,
+    0x4768, 0x8233, 0xE532,
+    0x4769, 0x8233, 0xE533,
+    0x476A, 0x8233, 0xE534,
+    0x476B, 0x8233, 0xE535,
+    0x476C, 0x8233, 0xE536,
+    0x476D, 0x8233, 0xE537,
+    0x476E, 0x8233, 0xE538,
+    0x476F, 0x8233, 0xE539,
+    0x4770, 0x8233, 0xE630,
+    0x4771, 0x8233, 0xE631,
+    0x4772, 0x8233, 0xE632,
+    0x4773, 0x8233, 0xE633,
+    0x4774, 0x8233, 0xE634,
+    0x4775, 0x8233, 0xE635,
+    0x4776, 0x8233, 0xE636,
+    0x4777, 0x8233, 0xE637,
+    0x4778, 0x8233, 0xE638,
+    0x4779, 0x8233, 0xE639,
+    0x477A, 0x8233, 0xE730,
+    0x477B, 0x8233, 0xE731,
+    0x477D, 0x8233, 0xE732,
+    0x477E, 0x8233, 0xE733,
+    0x477F, 0x8233, 0xE734,
+    0x4780, 0x8233, 0xE735,
+    0x4781, 0x8233, 0xE736,
+    0x4782, 0x8233, 0xE737,
+    0x4783, 0x8233, 0xE738,
+    0x4784, 0x8233, 0xE739,
+    0x4785, 0x8233, 0xE830,
+    0x4786, 0x8233, 0xE831,
+    0x4787, 0x8233, 0xE832,
+    0x4788, 0x8233, 0xE833,
+    0x4789, 0x8233, 0xE834,
+    0x478A, 0x8233, 0xE835,
+    0x478B, 0x8233, 0xE836,
+    0x478C, 0x8233, 0xE837,
+    0x4948, 0x8234, 0x9639,
+    0x4949, 0x8234, 0x9730,
+    0x494A, 0x8234, 0x9731,
+    0x494B, 0x8234, 0x9732,
+    0x494C, 0x8234, 0x9733,
+    0x494D, 0x8234, 0x9734,
+    0x494E, 0x8234, 0x9735,
+    0x494F, 0x8234, 0x9736,
+    0x4950, 0x8234, 0x9737,
+    0x4951, 0x8234, 0x9738,
+    0x4952, 0x8234, 0x9739,
+    0x4953, 0x8234, 0x9830,
+    0x4954, 0x8234, 0x9831,
+    0x4955, 0x8234, 0x9832,
+    0x4956, 0x8234, 0x9833,
+    0x4957, 0x8234, 0x9834,
+    0x4958, 0x8234, 0x9835,
+    0x4959, 0x8234, 0x9836,
+    0x495A, 0x8234, 0x9837,
+    0x495B, 0x8234, 0x9838,
+    0x495C, 0x8234, 0x9839,
+    0x495D, 0x8234, 0x9930,
+    0x495E, 0x8234, 0x9931,
+    0x495F, 0x8234, 0x9932,
+    0x4960, 0x8234, 0x9933,
+    0x4961, 0x8234, 0x9934,
+    0x4962, 0x8234, 0x9935,
+    0x4963, 0x8234, 0x9936,
+    0x4964, 0x8234, 0x9937,
+    0x4965, 0x8234, 0x9938,
+    0x4966, 0x8234, 0x9939,
+    0x4967, 0x8234, 0x9A30,
+    0x4968, 0x8234, 0x9A31,
+    0x4969, 0x8234, 0x9A32,
+    0x496A, 0x8234, 0x9A33,
+    0x496B, 0x8234, 0x9A34,
+    0x496C, 0x8234, 0x9A35,
+    0x496D, 0x8234, 0x9A36,
+    0x496E, 0x8234, 0x9A37,
+    0x496F, 0x8234, 0x9A38,
+    0x4970, 0x8234, 0x9A39,
+    0x4971, 0x8234, 0x9B30,
+    0x4972, 0x8234, 0x9B31,
+    0x4973, 0x8234, 0x9B32,
+    0x4974, 0x8234, 0x9B33,
+    0x4975, 0x8234, 0x9B34,
+    0x4976, 0x8234, 0x9B35,
+    0x4977, 0x8234, 0x9B36,
+    0x4978, 0x8234, 0x9B37,
+    0x4979, 0x8234, 0x9B38,
+    0x497B, 0x8234, 0x9B39,
+    0x497C, 0x8234, 0x9C30,
+    0x497E, 0x8234, 0x9C31,
+    0x497F, 0x8234, 0x9C32,
+    0x4980, 0x8234, 0x9C33,
+    0x4981, 0x8234, 0x9C34,
+    0x4984, 0x8234, 0x9C35,
+    0x4987, 0x8234, 0x9C36,
+    0x4988, 0x8234, 0x9C37,
+    0x4989, 0x8234, 0x9C38,
+    0x498A, 0x8234, 0x9C39,
+    0x498B, 0x8234, 0x9D30,
+    0x498C, 0x8234, 0x9D31,
+    0x498D, 0x8234, 0x9D32,
+    0x498E, 0x8234, 0x9D33,
+    0x498F, 0x8234, 0x9D34,
+    0x4990, 0x8234, 0x9D35,
+    0x4991, 0x8234, 0x9D36,
+    0x4992, 0x8234, 0x9D37,
+    0x4993, 0x8234, 0x9D38,
+    0x4994, 0x8234, 0x9D39,
+    0x4995, 0x8234, 0x9E30,
+    0x4996, 0x8234, 0x9E31,
+    0x4997, 0x8234, 0x9E32,
+    0x4998, 0x8234, 0x9E33,
+    0x4999, 0x8234, 0x9E34,
+    0x499A, 0x8234, 0x9E35,
+    0x499C, 0x8234, 0x9E36,
+    0x499D, 0x8234, 0x9E37,
+    0x499E, 0x8234, 0x9E38,
+    0x49A0, 0x8234, 0x9E39,
+    0x49A1, 0x8234, 0x9F30,
+    0x49A2, 0x8234, 0x9F31,
+    0x49A3, 0x8234, 0x9F32,
+    0x49A4, 0x8234, 0x9F33,
+    0x49A5, 0x8234, 0x9F34,
+    0x49A6, 0x8234, 0x9F35,
+    0x49A7, 0x8234, 0x9F36,
+    0x49A8, 0x8234, 0x9F37,
+    0x49A9, 0x8234, 0x9F38,
+    0x49AA, 0x8234, 0x9F39,
+    0x49AB, 0x8234, 0xA030,
+    0x49AC, 0x8234, 0xA031,
+    0x49AD, 0x8234, 0xA032,
+    0x49AE, 0x8234, 0xA033,
+    0x49AF, 0x8234, 0xA034,
+    0x49B0, 0x8234, 0xA035,
+    0x49B1, 0x8234, 0xA036,
+    0x49B2, 0x8234, 0xA037,
+    0x49B3, 0x8234, 0xA038,
+    0x49B4, 0x8234, 0xA039,
+    0x49B5, 0x8234, 0xA130,
+    0x4C78, 0x8234, 0xE734,
+    0x4C79, 0x8234, 0xE735,
+    0x4C7A, 0x8234, 0xE736,
+    0x4C7B, 0x8234, 0xE737,
+    0x4C7C, 0x8234, 0xE738,
+    0x4C7D, 0x8234, 0xE739,
+    0x4C7E, 0x8234, 0xE830,
+    0x4C7F, 0x8234, 0xE831,
+    0x4C80, 0x8234, 0xE832,
+    0x4C81, 0x8234, 0xE833,
+    0x4C82, 0x8234, 0xE834,
+    0x4C83, 0x8234, 0xE835,
+    0x4C84, 0x8234, 0xE836,
+    0x4C85, 0x8234, 0xE837,
+    0x4C86, 0x8234, 0xE838,
+    0x4C87, 0x8234, 0xE839,
+    0x4C88, 0x8234, 0xE930,
+    0x4C89, 0x8234, 0xE931,
+    0x4C8A, 0x8234, 0xE932,
+    0x4C8B, 0x8234, 0xE933,
+    0x4C8C, 0x8234, 0xE934,
+    0x4C8D, 0x8234, 0xE935,
+    0x4C8E, 0x8234, 0xE936,
+    0x4C8F, 0x8234, 0xE937,
+    0x4C90, 0x8234, 0xE938,
+    0x4C91, 0x8234, 0xE939,
+    0x4C92, 0x8234, 0xEA30,
+    0x4C93, 0x8234, 0xEA31,
+    0x4C94, 0x8234, 0xEA32,
+    0x4C95, 0x8234, 0xEA33,
+    0x4C96, 0x8234, 0xEA34,
+    0x4C97, 0x8234, 0xEA35,
+    0x4C98, 0x8234, 0xEA36,
+    0x4C99, 0x8234, 0xEA37,
+    0x4C9A, 0x8234, 0xEA38,
+    0x4C9B, 0x8234, 0xEA39,
+    0x4C9C, 0x8234, 0xEB30,
+    0x4C9D, 0x8234, 0xEB31,
+    0x4C9E, 0x8234, 0xEB32,
+    0x4CA4, 0x8234, 0xEB33,
+    0x4CA5, 0x8234, 0xEB34,
+    0x4CA6, 0x8234, 0xEB35,
+    0x4CA7, 0x8234, 0xEB36,
+    0x4CA8, 0x8234, 0xEB37,
+    0x4CA9, 0x8234, 0xEB38,
+    0x4CAA, 0x8234, 0xEB39,
+    0x4CAB, 0x8234, 0xEC30,
+    0x4CAC, 0x8234, 0xEC31,
+    0x4CAD, 0x8234, 0xEC32,
+    0x4CAE, 0x8234, 0xEC33,
+    0x4CAF, 0x8234, 0xEC34,
+    0x4CB0, 0x8234, 0xEC35,
+    0x4CB1, 0x8234, 0xEC36,
+    0x4CB2, 0x8234, 0xEC37,
+    0x4CB3, 0x8234, 0xEC38,
+    0x4CB4, 0x8234, 0xEC39,
+    0x4CB5, 0x8234, 0xED30,
+    0x4CB6, 0x8234, 0xED31,
+    0x4CB7, 0x8234, 0xED32,
+    0x4CB8, 0x8234, 0xED33,
+    0x4CB9, 0x8234, 0xED34,
+    0x4CBA, 0x8234, 0xED35,
+    0x4CBB, 0x8234, 0xED36,
+    0x4CBC, 0x8234, 0xED37,
+    0x4CBD, 0x8234, 0xED38,
+    0x4CBE, 0x8234, 0xED39,
+    0x4CBF, 0x8234, 0xEE30,
+    0x4CC0, 0x8234, 0xEE31,
+    0x4CC1, 0x8234, 0xEE32,
+    0x4CC2, 0x8234, 0xEE33,
+    0x4CC3, 0x8234, 0xEE34,
+    0x4CC4, 0x8234, 0xEE35,
+    0x4CC5, 0x8234, 0xEE36,
+    0x4CC6, 0x8234, 0xEE37,
+    0x4CC7, 0x8234, 0xEE38,
+    0x4CC8, 0x8234, 0xEE39,
+    0x4CC9, 0x8234, 0xEF30,
+    0x4CCA, 0x8234, 0xEF31,
+    0x4CCB, 0x8234, 0xEF32,
+    0x4CCC, 0x8234, 0xEF33,
+    0x4CCD, 0x8234, 0xEF34,
+    0x4CCE, 0x8234, 0xEF35,
+    0x4CCF, 0x8234, 0xEF36,
+    0x4CD0, 0x8234, 0xEF37,
+    0x4CD1, 0x8234, 0xEF38,
+    0x4CD2, 0x8234, 0xEF39,
+    0x4CD3, 0x8234, 0xF030,
+    0x4CD4, 0x8234, 0xF031,
+    0x4CD5, 0x8234, 0xF032,
+    0x4CD6, 0x8234, 0xF033,
+    0x4CD7, 0x8234, 0xF034,
+    0x4CD8, 0x8234, 0xF035,
+    0x4CD9, 0x8234, 0xF036,
+    0x4CDA, 0x8234, 0xF037,
+    0x4CDB, 0x8234, 0xF038,
+    0x4CDC, 0x8234, 0xF039,
+    0x4CDD, 0x8234, 0xF130,
+    0x4CDE, 0x8234, 0xF131,
+    0x4CDF, 0x8234, 0xF132,
+    0x4CE0, 0x8234, 0xF133,
+    0x4CE1, 0x8234, 0xF134,
+    0x4CE2, 0x8234, 0xF135,
+    0x4CE3, 0x8234, 0xF136,
+    0x4CE4, 0x8234, 0xF137,
+    0x4CE5, 0x8234, 0xF138,
+    0x4CE6, 0x8234, 0xF139,
+    0x4CE7, 0x8234, 0xF230,
+    0x4CE8, 0x8234, 0xF231,
+    0x4CE9, 0x8234, 0xF232,
+    0x4CEA, 0x8234, 0xF233,
+    0x4CEB, 0x8234, 0xF234,
+    0x4CEC, 0x8234, 0xF235,
+    0x4CED, 0x8234, 0xF236,
+    0x4CEE, 0x8234, 0xF237,
+    0x4CEF, 0x8234, 0xF238,
+    0x4CF0, 0x8234, 0xF239,
+    0x4CF1, 0x8234, 0xF330,
+    0x4CF2, 0x8234, 0xF331,
+    0x4CF3, 0x8234, 0xF332,
+    0x4CF4, 0x8234, 0xF333,
+    0x4CF5, 0x8234, 0xF334,
+    0x4CF6, 0x8234, 0xF335,
+    0x4CF7, 0x8234, 0xF336,
+    0x4CF8, 0x8234, 0xF337,
+    0x4CF9, 0x8234, 0xF338,
+    0x4CFA, 0x8234, 0xF339,
+    0x4CFB, 0x8234, 0xF430,
+    0x4CFC, 0x8234, 0xF431,
+    0x4CFD, 0x8234, 0xF432,
+    0x4CFE, 0x8234, 0xF433,
+    0x4CFF, 0x8234, 0xF434,
+    0x4D00, 0x8234, 0xF435,
+    0x4D01, 0x8234, 0xF436,
+    0x4D02, 0x8234, 0xF437,
+    0x4D03, 0x8234, 0xF438,
+    0x4D04, 0x8234, 0xF439,
+    0x4D05, 0x8234, 0xF530,
+    0x4D06, 0x8234, 0xF531,
+    0x4D07, 0x8234, 0xF532,
+    0x4D08, 0x8234, 0xF533,
+    0x4D09, 0x8234, 0xF534,
+    0x4D0A, 0x8234, 0xF535,
+    0x4D0B, 0x8234, 0xF536,
+    0x4D0C, 0x8234, 0xF537,
+    0x4D0D, 0x8234, 0xF538,
+    0x4D0E, 0x8234, 0xF539,
+    0x4D0F, 0x8234, 0xF630,
+    0x4D10, 0x8234, 0xF631,
+    0x4D11, 0x8234, 0xF632,
+    0x4D12, 0x8234, 0xF633,
+    0x4D1A, 0x8234, 0xF634,
+    0x4D1B, 0x8234, 0xF635,
+    0x4D1C, 0x8234, 0xF636,
+    0x4D1D, 0x8234, 0xF637,
+    0x4D1E, 0x8234, 0xF638,
+    0x4D1F, 0x8234, 0xF639,
+    0x4D20, 0x8234, 0xF730,
+    0x4D21, 0x8234, 0xF731,
+    0x4D22, 0x8234, 0xF732,
+    0x4D23, 0x8234, 0xF733,
+    0x4D24, 0x8234, 0xF734,
+    0x4D25, 0x8234, 0xF735,
+    0x4D26, 0x8234, 0xF736,
+    0x4D27, 0x8234, 0xF737,
+    0x4D28, 0x8234, 0xF738,
+    0x4D29, 0x8234, 0xF739,
+    0x4D2A, 0x8234, 0xF830,
+    0x4D2B, 0x8234, 0xF831,
+    0x4D2C, 0x8234, 0xF832,
+    0x4D2D, 0x8234, 0xF833,
+    0x4D2E, 0x8234, 0xF834,
+    0x4D2F, 0x8234, 0xF835,
+    0x4D30, 0x8234, 0xF836,
+    0x4D31, 0x8234, 0xF837,
+    0x4D32, 0x8234, 0xF838,
+    0x4D33, 0x8234, 0xF839,
+    0x4D34, 0x8234, 0xF930,
+    0x4D35, 0x8234, 0xF931,
+    0x4D36, 0x8234, 0xF932,
+    0x4D37, 0x8234, 0xF933,
+    0x4D38, 0x8234, 0xF934,
+    0x4D39, 0x8234, 0xF935,
+    0x4D3A, 0x8234, 0xF936,
+    0x4D3B, 0x8234, 0xF937,
+    0x4D3C, 0x8234, 0xF938,
+    0x4D3D, 0x8234, 0xF939,
+    0x4D3E, 0x8234, 0xFA30,
+    0x4D3F, 0x8234, 0xFA31,
+    0x4D40, 0x8234, 0xFA32,
+    0x4D41, 0x8234, 0xFA33,
+    0x4D42, 0x8234, 0xFA34,
+    0x4D43, 0x8234, 0xFA35,
+    0x4D44, 0x8234, 0xFA36,
+    0x4D45, 0x8234, 0xFA37,
+    0x4D46, 0x8234, 0xFA38,
+    0x4D47, 0x8234, 0xFA39,
+    0x4D48, 0x8234, 0xFB30,
+    0x4D49, 0x8234, 0xFB31,
+    0x4D4A, 0x8234, 0xFB32,
+    0x4D4B, 0x8234, 0xFB33,
+    0x4D4C, 0x8234, 0xFB34,
+    0x4D4D, 0x8234, 0xFB35,
+    0x4D4E, 0x8234, 0xFB36,
+    0x4D4F, 0x8234, 0xFB37,
+    0x4D50, 0x8234, 0xFB38,
+    0x4D51, 0x8234, 0xFB39,
+    0x4D52, 0x8234, 0xFC30,
+    0x4D53, 0x8234, 0xFC31,
+    0x4D54, 0x8234, 0xFC32,
+    0x4D55, 0x8234, 0xFC33,
+    0x4D56, 0x8234, 0xFC34,
+    0x4D57, 0x8234, 0xFC35,
+    0x4D58, 0x8234, 0xFC36,
+    0x4D59, 0x8234, 0xFC37,
+    0x4D5A, 0x8234, 0xFC38,
+    0x4D5B, 0x8234, 0xFC39,
+    0x4D5C, 0x8234, 0xFD30,
+    0x4D5D, 0x8234, 0xFD31,
+    0x4D5E, 0x8234, 0xFD32,
+    0x4D5F, 0x8234, 0xFD33,
+    0x4D60, 0x8234, 0xFD34,
+    0x4D61, 0x8234, 0xFD35,
+    0x4D62, 0x8234, 0xFD36,
+    0x4D63, 0x8234, 0xFD37,
+    0x4D64, 0x8234, 0xFD38,
+    0x4D65, 0x8234, 0xFD39,
+    0x4D66, 0x8234, 0xFE30,
+    0x4D67, 0x8234, 0xFE31,
+    0x4D68, 0x8234, 0xFE32,
+    0x4D69, 0x8234, 0xFE33,
+    0x4D6A, 0x8234, 0xFE34,
+    0x4D6B, 0x8234, 0xFE35,
+    0x4D6C, 0x8234, 0xFE36,
+    0x4D6D, 0x8234, 0xFE37,
+    0x4D6E, 0x8234, 0xFE38,
+    0x4D6F, 0x8234, 0xFE39,
+    0x4D70, 0x8235, 0x8130,
+    0x4D71, 0x8235, 0x8131,
+    0x4D72, 0x8235, 0x8132,
+    0x4D73, 0x8235, 0x8133,
+    0x4D74, 0x8235, 0x8134,
+    0x4D75, 0x8235, 0x8135,
+    0x4D76, 0x8235, 0x8136,
+    0x4D77, 0x8235, 0x8137,
+    0x4D78, 0x8235, 0x8138,
+    0x4D79, 0x8235, 0x8139,
+    0x4D7A, 0x8235, 0x8230,
+    0x4D7B, 0x8235, 0x8231,
+    0x4D7C, 0x8235, 0x8232,
+    0x4D7D, 0x8235, 0x8233,
+    0x4D7E, 0x8235, 0x8234,
+    0x4D7F, 0x8235, 0x8235,
+    0x4D80, 0x8235, 0x8236,
+    0x4D81, 0x8235, 0x8237,
+    0x4D82, 0x8235, 0x8238,
+    0x4D83, 0x8235, 0x8239,
+    0x4D84, 0x8235, 0x8330,
+    0x4D85, 0x8235, 0x8331,
+    0x4D86, 0x8235, 0x8332,
+    0x4D87, 0x8235, 0x8333,
+    0x4D88, 0x8235, 0x8334,
+    0x4D89, 0x8235, 0x8335,
+    0x4D8A, 0x8235, 0x8336,
+    0x4D8B, 0x8235, 0x8337,
+    0x4D8C, 0x8235, 0x8338,
+    0x4D8D, 0x8235, 0x8339,
+    0x4D8E, 0x8235, 0x8430,
+    0x4D8F, 0x8235, 0x8431,
+    0x4D90, 0x8235, 0x8432,
+    0x4D91, 0x8235, 0x8433,
+    0x4D92, 0x8235, 0x8434,
+    0x4D93, 0x8235, 0x8435,
+    0x4D94, 0x8235, 0x8436,
+    0x4D95, 0x8235, 0x8437,
+    0x4D96, 0x8235, 0x8438,
+    0x4D97, 0x8235, 0x8439,
+    0x4D98, 0x8235, 0x8530,
+    0x4D99, 0x8235, 0x8531,
+    0x4D9A, 0x8235, 0x8532,
+    0x4D9B, 0x8235, 0x8533,
+    0x4D9C, 0x8235, 0x8534,
+    0x4D9D, 0x8235, 0x8535,
+    0x4D9E, 0x8235, 0x8536,
+    0x4D9F, 0x8235, 0x8537,
+    0x4DA0, 0x8235, 0x8538,
+    0x4DA1, 0x8235, 0x8539,
+    0x4DA2, 0x8235, 0x8630,
+    0x4DA3, 0x8235, 0x8631,
+    0x4DA4, 0x8235, 0x8632,
+    0x4DA5, 0x8235, 0x8633,
+    0x4DA6, 0x8235, 0x8634,
+    0x4DA7, 0x8235, 0x8635,
+    0x4DA8, 0x8235, 0x8636,
+    0x4DA9, 0x8235, 0x8637,
+    0x4DAA, 0x8235, 0x8638,
+    0x4DAB, 0x8235, 0x8639,
+    0x4DAC, 0x8235, 0x8730,
+    0x4DAD, 0x8235, 0x8731,
+    0x4DAF, 0x8235, 0x8732,
+    0x4DB0, 0x8235, 0x8733,
+    0x4DB1, 0x8235, 0x8734,
+    0x4DB2, 0x8235, 0x8735,
+    0x4DB3, 0x8235, 0x8736,
+    0x4DB4, 0x8235, 0x8737,
+    0x4DB5, 0x8235, 0x8738,
+    0x4DB6, 0x8235, 0x8739,
+    0x4DB7, 0x8235, 0x8830,
+    0x4DB8, 0x8235, 0x8831,
+    0x4DB9, 0x8235, 0x8832,
+    0x4DBA, 0x8235, 0x8833,
+    0x4DBB, 0x8235, 0x8834,
+    0x4DBC, 0x8235, 0x8835,
+    0x4DBD, 0x8235, 0x8836,
+    0x4DBE, 0x8235, 0x8837,
+    0x4DBF, 0x8235, 0x8838,
+    0x4DC0, 0x8235, 0x8839,
+    0x4DC1, 0x8235, 0x8930,
+    0x4DC2, 0x8235, 0x8931,
+    0x4DC3, 0x8235, 0x8932,
+    0x4DC4, 0x8235, 0x8933,
+    0x4DC5, 0x8235, 0x8934,
+    0x4DC6, 0x8235, 0x8935,
+    0x4DC7, 0x8235, 0x8936,
+    0x4DC8, 0x8235, 0x8937,
+    0x4DC9, 0x8235, 0x8938,
+    0x4DCA, 0x8235, 0x8939,
+    0x4DCB, 0x8235, 0x8A30,
+    0x4DCC, 0x8235, 0x8A31,
+    0x4DCD, 0x8235, 0x8A32,
+    0x4DCE, 0x8235, 0x8A33,
+    0x4DCF, 0x8235, 0x8A34,
+    0x4DD0, 0x8235, 0x8A35,
+    0x4DD1, 0x8235, 0x8A36,
+    0x4DD2, 0x8235, 0x8A37,
+    0x4DD3, 0x8235, 0x8A38,
+    0x4DD4, 0x8235, 0x8A39,
+    0x4DD5, 0x8235, 0x8B30,
+    0x4DD6, 0x8235, 0x8B31,
+    0x4DD7, 0x8235, 0x8B32,
+    0x4DD8, 0x8235, 0x8B33,
+    0x4DD9, 0x8235, 0x8B34,
+    0x4DDA, 0x8235, 0x8B35,
+    0x4DDB, 0x8235, 0x8B36,
+    0x4DDC, 0x8235, 0x8B37,
+    0x4DDD, 0x8235, 0x8B38,
+    0x4DDE, 0x8235, 0x8B39,
+    0x4DDF, 0x8235, 0x8C30,
+    0x4DE0, 0x8235, 0x8C31,
+    0x4DE1, 0x8235, 0x8C32,
+    0x4DE2, 0x8235, 0x8C33,
+    0x4DE3, 0x8235, 0x8C34,
+    0x4DE4, 0x8235, 0x8C35,
+    0x4DE5, 0x8235, 0x8C36,
+    0x4DE6, 0x8235, 0x8C37,
+    0x4DE7, 0x8235, 0x8C38,
+    0x4DE8, 0x8235, 0x8C39,
+    0x4DE9, 0x8235, 0x8D30,
+    0x4DEA, 0x8235, 0x8D31,
+    0x4DEB, 0x8235, 0x8D32,
+    0x4DEC, 0x8235, 0x8D33,
+    0x4DED, 0x8235, 0x8D34,
+    0x4DEE, 0x8235, 0x8D35,
+    0x4DEF, 0x8235, 0x8D36,
+    0x4DF0, 0x8235, 0x8D37,
+    0x4DF1, 0x8235, 0x8D38,
+    0x4DF2, 0x8235, 0x8D39,
+    0x4DF3, 0x8235, 0x8E30,
+    0x4DF4, 0x8235, 0x8E31,
+    0x4DF5, 0x8235, 0x8E32,
+    0x4DF6, 0x8235, 0x8E33,
+    0x4DF7, 0x8235, 0x8E34,
+    0x4DF8, 0x8235, 0x8E35,
+    0x4DF9, 0x8235, 0x8E36,
+    0x4DFA, 0x8235, 0x8E37,
+    0x4DFB, 0x8235, 0x8E38,
+    0x4DFC, 0x8235, 0x8E39,
+    0x4DFD, 0x8235, 0x8F30,
+    0x4DFE, 0x8235, 0x8F31,
+    0x4DFF, 0x8235, 0x8F32,
+    0xE76C, 0x8336, 0xC739,
+    0xE7C8, 0x8336, 0xC830,
+    0xE7E7, 0x8336, 0xC831,
+    0xE7E8, 0x8336, 0xC832,
+    0xE7E9, 0x8336, 0xC833,
+    0xE7EA, 0x8336, 0xC834,
+    0xE7EB, 0x8336, 0xC835,
+    0xE7EC, 0x8336, 0xC836,
+    0xE7ED, 0x8336, 0xC837,
+    0xE7EE, 0x8336, 0xC838,
+    0xE7EF, 0x8336, 0xC839,
+    0xE7F0, 0x8336, 0xC930,
+    0xE7F1, 0x8336, 0xC931,
+    0xE7F2, 0x8336, 0xC932,
+    0xE7F3, 0x8336, 0xC933,
+    0xE815, 0x8336, 0xC934,
+    0xE819, 0x8336, 0xC935,
+    0xE81A, 0x8336, 0xC936,
+    0xE81B, 0x8336, 0xC937,
+    0xE81C, 0x8336, 0xC938,
+    0xE81D, 0x8336, 0xC939,
+    0xE81F, 0x8336, 0xCA30,
+    0xE820, 0x8336, 0xCA31,
+    0xE821, 0x8336, 0xCA32,
+    0xE822, 0x8336, 0xCA33,
+    0xE823, 0x8336, 0xCA34,
+    0xE824, 0x8336, 0xCA35,
+    0xE825, 0x8336, 0xCA36,
+    0xE827, 0x8336, 0xCA37,
+    0xE828, 0x8336, 0xCA38,
+    0xE829, 0x8336, 0xCA39,
+    0xE82A, 0x8336, 0xCB30,
+    0xE82D, 0x8336, 0xCB31,
+    0xE82E, 0x8336, 0xCB32,
+    0xE82F, 0x8336, 0xCB33,
+    0xE830, 0x8336, 0xCB34,
+    0xE833, 0x8336, 0xCB35,
+    0xE834, 0x8336, 0xCB36,
+    0xE835, 0x8336, 0xCB37,
+    0xE836, 0x8336, 0xCB38,
+    0xE837, 0x8336, 0xCB39,
+    0xE838, 0x8336, 0xCC30,
+    0xE839, 0x8336, 0xCC31,
+    0xE83A, 0x8336, 0xCC32,
+    0xE83C, 0x8336, 0xCC33,
+    0xE83D, 0x8336, 0xCC34,
+    0xE83E, 0x8336, 0xCC35,
+    0xE83F, 0x8336, 0xCC36,
+    0xE840, 0x8336, 0xCC37,
+    0xE841, 0x8336, 0xCC38,
+    0xE842, 0x8336, 0xCC39,
+    0xE844, 0x8336, 0xCD30,
+    0xE845, 0x8336, 0xCD31,
+    0xE846, 0x8336, 0xCD32,
+    0xE847, 0x8336, 0xCD33,
+    0xE848, 0x8336, 0xCD34,
+    0xE849, 0x8336, 0xCD35,
+    0xE84A, 0x8336, 0xCD36,
+    0xE84B, 0x8336, 0xCD37,
+    0xE84C, 0x8336, 0xCD38,
+    0xE84D, 0x8336, 0xCD39,
+    0xE84E, 0x8336, 0xCE30,
+    0xE84F, 0x8336, 0xCE31,
+    0xE850, 0x8336, 0xCE32,
+    0xE851, 0x8336, 0xCE33,
+    0xE852, 0x8336, 0xCE34,
+    0xE853, 0x8336, 0xCE35,
+    0xE856, 0x8336, 0xCE36,
+    0xE857, 0x8336, 0xCE37,
+    0xE858, 0x8336, 0xCE38,
+    0xE859, 0x8336, 0xCE39,
+    0xE85A, 0x8336, 0xCF30,
+    0xE85B, 0x8336, 0xCF31,
+    0xE85C, 0x8336, 0xCF32,
+    0xE85D, 0x8336, 0xCF33,
+    0xE85E, 0x8336, 0xCF34,
+    0xE85F, 0x8336, 0xCF35,
+    0xE860, 0x8336, 0xCF36,
+    0xE861, 0x8336, 0xCF37,
+    0xE862, 0x8336, 0xCF38,
+    0xE863, 0x8336, 0xCF39,
+    0xF92D, 0x8430, 0x8535,
+    0xF92E, 0x8430, 0x8536,
+    0xF92F, 0x8430, 0x8537,
+    0xF930, 0x8430, 0x8538,
+    0xF931, 0x8430, 0x8539,
+    0xF932, 0x8430, 0x8630,
+    0xF933, 0x8430, 0x8631,
+    0xF934, 0x8430, 0x8632,
+    0xF935, 0x8430, 0x8633,
+    0xF936, 0x8430, 0x8634,
+    0xF937, 0x8430, 0x8635,
+    0xF938, 0x8430, 0x8636,
+    0xF939, 0x8430, 0x8637,
+    0xF93A, 0x8430, 0x8638,
+    0xF93B, 0x8430, 0x8639,
+    0xF93C, 0x8430, 0x8730,
+    0xF93D, 0x8430, 0x8731,
+    0xF93E, 0x8430, 0x8732,
+    0xF93F, 0x8430, 0x8733,
+    0xF940, 0x8430, 0x8734,
+    0xF941, 0x8430, 0x8735,
+    0xF942, 0x8430, 0x8736,
+    0xF943, 0x8430, 0x8737,
+    0xF944, 0x8430, 0x8738,
+    0xF945, 0x8430, 0x8739,
+    0xF946, 0x8430, 0x8830,
+    0xF947, 0x8430, 0x8831,
+    0xF948, 0x8430, 0x8832,
+    0xF949, 0x8430, 0x8833,
+    0xF94A, 0x8430, 0x8834,
+    0xF94B, 0x8430, 0x8835,
+    0xF94C, 0x8430, 0x8836,
+    0xF94D, 0x8430, 0x8837,
+    0xF94E, 0x8430, 0x8838,
+    0xF94F, 0x8430, 0x8839,
+    0xF950, 0x8430, 0x8930,
+    0xF951, 0x8430, 0x8931,
+    0xF952, 0x8430, 0x8932,
+    0xF953, 0x8430, 0x8933,
+    0xF954, 0x8430, 0x8934,
+    0xF955, 0x8430, 0x8935,
+    0xF956, 0x8430, 0x8936,
+    0xF957, 0x8430, 0x8937,
+    0xF958, 0x8430, 0x8938,
+    0xF959, 0x8430, 0x8939,
+    0xF95A, 0x8430, 0x8A30,
+    0xF95B, 0x8430, 0x8A31,
+    0xF95C, 0x8430, 0x8A32,
+    0xF95D, 0x8430, 0x8A33,
+    0xF95E, 0x8430, 0x8A34,
+    0xF95F, 0x8430, 0x8A35,
+    0xF960, 0x8430, 0x8A36,
+    0xF961, 0x8430, 0x8A37,
+    0xF962, 0x8430, 0x8A38,
+    0xF963, 0x8430, 0x8A39,
+    0xF964, 0x8430, 0x8B30,
+    0xF965, 0x8430, 0x8B31,
+    0xF966, 0x8430, 0x8B32,
+    0xF967, 0x8430, 0x8B33,
+    0xF968, 0x8430, 0x8B34,
+    0xF969, 0x8430, 0x8B35,
+    0xF96A, 0x8430, 0x8B36,
+    0xF96B, 0x8430, 0x8B37,
+    0xF96C, 0x8430, 0x8B38,
+    0xF96D, 0x8430, 0x8B39,
+    0xF96E, 0x8430, 0x8C30,
+    0xF96F, 0x8430, 0x8C31,
+    0xF970, 0x8430, 0x8C32,
+    0xF971, 0x8430, 0x8C33,
+    0xF972, 0x8430, 0x8C34,
+    0xF973, 0x8430, 0x8C35,
+    0xF974, 0x8430, 0x8C36,
+    0xF975, 0x8430, 0x8C37,
+    0xF976, 0x8430, 0x8C38,
+    0xF977, 0x8430, 0x8C39,
+    0xF978, 0x8430, 0x8D30,
+    0xF97A, 0x8430, 0x8D31,
+    0xF97B, 0x8430, 0x8D32,
+    0xF97C, 0x8430, 0x8D33,
+    0xF97D, 0x8430, 0x8D34,
+    0xF97E, 0x8430, 0x8D35,
+    0xF97F, 0x8430, 0x8D36,
+    0xF980, 0x8430, 0x8D37,
+    0xF981, 0x8430, 0x8D38,
+    0xF982, 0x8430, 0x8D39,
+    0xF983, 0x8430, 0x8E30,
+    0xF984, 0x8430, 0x8E31,
+    0xF985, 0x8430, 0x8E32,
+    0xF986, 0x8430, 0x8E33,
+    0xF987, 0x8430, 0x8E34,
+    0xF988, 0x8430, 0x8E35,
+    0xF989, 0x8430, 0x8E36,
+    0xF98A, 0x8430, 0x8E37,
+    0xF98B, 0x8430, 0x8E38,
+    0xF98C, 0x8430, 0x8E39,
+    0xF98D, 0x8430, 0x8F30,
+    0xF98E, 0x8430, 0x8F31,
+    0xF98F, 0x8430, 0x8F32,
+    0xF990, 0x8430, 0x8F33,
+    0xF991, 0x8430, 0x8F34,
+    0xF992, 0x8430, 0x8F35,
+    0xF993, 0x8430, 0x8F36,
+    0xF994, 0x8430, 0x8F37,
+    0xF996, 0x8430, 0x8F38,
+    0xF997, 0x8430, 0x8F39,
+    0xF998, 0x8430, 0x9030,
+    0xF999, 0x8430, 0x9031,
+    0xF99A, 0x8430, 0x9032,
+    0xF99B, 0x8430, 0x9033,
+    0xF99C, 0x8430, 0x9034,
+    0xF99D, 0x8430, 0x9035,
+    0xF99E, 0x8430, 0x9036,
+    0xF99F, 0x8430, 0x9037,
+    0xF9A0, 0x8430, 0x9038,
+    0xF9A1, 0x8430, 0x9039,
+    0xF9A2, 0x8430, 0x9130,
+    0xF9A3, 0x8430, 0x9131,
+    0xF9A4, 0x8430, 0x9132,
+    0xF9A5, 0x8430, 0x9133,
+    0xF9A6, 0x8430, 0x9134,
+    0xF9A7, 0x8430, 0x9135,
+    0xF9A8, 0x8430, 0x9136,
+    0xF9A9, 0x8430, 0x9137,
+    0xF9AA, 0x8430, 0x9138,
+    0xF9AB, 0x8430, 0x9139,
+    0xF9AC, 0x8430, 0x9230,
+    0xF9AD, 0x8430, 0x9231,
+    0xF9AE, 0x8430, 0x9232,
+    0xF9AF, 0x8430, 0x9233,
+    0xF9B0, 0x8430, 0x9234,
+    0xF9B1, 0x8430, 0x9235,
+    0xF9B2, 0x8430, 0x9236,
+    0xF9B3, 0x8430, 0x9237,
+    0xF9B4, 0x8430, 0x9238,
+    0xF9B5, 0x8430, 0x9239,
+    0xF9B6, 0x8430, 0x9330,
+    0xF9B7, 0x8430, 0x9331,
+    0xF9B8, 0x8430, 0x9332,
+    0xF9B9, 0x8430, 0x9333,
+    0xF9BA, 0x8430, 0x9334,
+    0xF9BB, 0x8430, 0x9335,
+    0xF9BC, 0x8430, 0x9336,
+    0xF9BD, 0x8430, 0x9337,
+    0xF9BE, 0x8430, 0x9338,
+    0xF9BF, 0x8430, 0x9339,
+    0xF9C0, 0x8430, 0x9430,
+    0xF9C1, 0x8430, 0x9431,
+    0xF9C2, 0x8430, 0x9432,
+    0xF9C3, 0x8430, 0x9433,
+    0xF9C4, 0x8430, 0x9434,
+    0xF9C5, 0x8430, 0x9435,
+    0xF9C6, 0x8430, 0x9436,
+    0xF9C7, 0x8430, 0x9437,
+    0xF9C8, 0x8430, 0x9438,
+    0xF9C9, 0x8430, 0x9439,
+    0xF9CA, 0x8430, 0x9530,
+    0xF9CB, 0x8430, 0x9531,
+    0xF9CC, 0x8430, 0x9532,
+    0xF9CD, 0x8430, 0x9533,
+    0xF9CE, 0x8430, 0x9534,
+    0xF9CF, 0x8430, 0x9535,
+    0xF9D0, 0x8430, 0x9536,
+    0xF9D1, 0x8430, 0x9537,
+    0xF9D2, 0x8430, 0x9538,
+    0xF9D3, 0x8430, 0x9539,
+    0xF9D4, 0x8430, 0x9630,
+    0xF9D5, 0x8430, 0x9631,
+    0xF9D6, 0x8430, 0x9632,
+    0xF9D7, 0x8430, 0x9633,
+    0xF9D8, 0x8430, 0x9634,
+    0xF9D9, 0x8430, 0x9635,
+    0xF9DA, 0x8430, 0x9636,
+    0xF9DB, 0x8430, 0x9637,
+    0xF9DC, 0x8430, 0x9638,
+    0xF9DD, 0x8430, 0x9639,
+    0xF9DE, 0x8430, 0x9730,
+    0xF9DF, 0x8430, 0x9731,
+    0xF9E0, 0x8430, 0x9732,
+    0xF9E1, 0x8430, 0x9733,
+    0xF9E2, 0x8430, 0x9734,
+    0xF9E3, 0x8430, 0x9735,
+    0xF9E4, 0x8430, 0x9736,
+    0xF9E5, 0x8430, 0x9737,
+    0xF9E6, 0x8430, 0x9738,
+    0xF9E8, 0x8430, 0x9739,
+    0xF9E9, 0x8430, 0x9830,
+    0xF9EA, 0x8430, 0x9831,
+    0xF9EB, 0x8430, 0x9832,
+    0xF9EC, 0x8430, 0x9833,
+    0xF9ED, 0x8430, 0x9834,
+    0xF9EE, 0x8430, 0x9835,
+    0xF9EF, 0x8430, 0x9836,
+    0xF9F0, 0x8430, 0x9837,
+    0xF9F2, 0x8430, 0x9838,
+    0xF9F3, 0x8430, 0x9839,
+    0xF9F4, 0x8430, 0x9930,
+    0xF9F5, 0x8430, 0x9931,
+    0xF9F6, 0x8430, 0x9932,
+    0xF9F7, 0x8430, 0x9933,
+    0xF9F8, 0x8430, 0x9934,
+    0xF9F9, 0x8430, 0x9935,
+    0xF9FA, 0x8430, 0x9936,
+    0xF9FB, 0x8430, 0x9937,
+    0xF9FC, 0x8430, 0x9938,
+    0xF9FD, 0x8430, 0x9939,
+    0xF9FE, 0x8430, 0x9A30,
+    0xF9FF, 0x8430, 0x9A31,
+    0xFA00, 0x8430, 0x9A32,
+    0xFA01, 0x8430, 0x9A33,
+    0xFA02, 0x8430, 0x9A34,
+    0xFA03, 0x8430, 0x9A35,
+    0xFA04, 0x8430, 0x9A36,
+    0xFA05, 0x8430, 0x9A37,
+    0xFA06, 0x8430, 0x9A38,
+    0xFA07, 0x8430, 0x9A39,
+    0xFA08, 0x8430, 0x9B30,
+    0xFA09, 0x8430, 0x9B31,
+    0xFA0A, 0x8430, 0x9B32,
+    0xFA0B, 0x8430, 0x9B33,
+    0xFA10, 0x8430, 0x9B34,
+    0xFA12, 0x8430, 0x9B35,
+    0xFA15, 0x8430, 0x9B36,
+    0xFA16, 0x8430, 0x9B37,
+    0xFA17, 0x8430, 0x9B38,
+    0xFA19, 0x8430, 0x9B39,
+    0xFA1A, 0x8430, 0x9C30,
+    0xFA1B, 0x8430, 0x9C31,
+    0xFA1C, 0x8430, 0x9C32,
+    0xFA1D, 0x8430, 0x9C33,
+    0xFA1E, 0x8430, 0x9C34,
+    0xFA22, 0x8430, 0x9C35,
+    0xFA25, 0x8430, 0x9C36,
+    0xFA26, 0x8430, 0x9C37,
+    0xFE32, 0x8431, 0x8538,
+    0xFE45, 0x8431, 0x8539,
+    0xFE46, 0x8431, 0x8630,
+    0xFE47, 0x8431, 0x8631,
+    0xFE48, 0x8431, 0x8632,
+    0xFE53, 0x8431, 0x8633,
+    0xFE58, 0x8431, 0x8634,
+    0xFE67, 0x8431, 0x8635,
+    0xFE6C, 0x8431, 0x8636,
+    0xFE6D, 0x8431, 0x8637,
+    0xFE6E, 0x8431, 0x8638,
+    0xFE6F, 0x8431, 0x8639,
+    0xFE70, 0x8431, 0x8730,
+    0xFE71, 0x8431, 0x8731,
+    0xFE72, 0x8431, 0x8732,
+    0xFE73, 0x8431, 0x8733,
+    0xFE74, 0x8431, 0x8734,
+    0xFE75, 0x8431, 0x8735,
+    0xFE76, 0x8431, 0x8736,
+    0xFE77, 0x8431, 0x8737,
+    0xFE78, 0x8431, 0x8738,
+    0xFE79, 0x8431, 0x8739,
+    0xFE7A, 0x8431, 0x8830,
+    0xFE7B, 0x8431, 0x8831,
+    0xFE7C, 0x8431, 0x8832,
+    0xFE7D, 0x8431, 0x8833,
+    0xFE7E, 0x8431, 0x8834,
+    0xFE7F, 0x8431, 0x8835,
+    0xFE80, 0x8431, 0x8836,
+    0xFE81, 0x8431, 0x8837,
+    0xFE82, 0x8431, 0x8838,
+    0xFE83, 0x8431, 0x8839,
+    0xFE84, 0x8431, 0x8930,
+    0xFE85, 0x8431, 0x8931,
+    0xFE86, 0x8431, 0x8932,
+    0xFE87, 0x8431, 0x8933,
+    0xFE88, 0x8431, 0x8934,
+    0xFE89, 0x8431, 0x8935,
+    0xFE8A, 0x8431, 0x8936,
+    0xFE8B, 0x8431, 0x8937,
+    0xFE8C, 0x8431, 0x8938,
+    0xFE8D, 0x8431, 0x8939,
+    0xFE8E, 0x8431, 0x8A30,
+    0xFE8F, 0x8431, 0x8A31,
+    0xFE90, 0x8431, 0x8A32,
+    0xFE91, 0x8431, 0x8A33,
+    0xFE92, 0x8431, 0x8A34,
+    0xFE93, 0x8431, 0x8A35,
+    0xFE94, 0x8431, 0x8A36,
+    0xFE95, 0x8431, 0x8A37,
+    0xFE96, 0x8431, 0x8A38,
+    0xFE97, 0x8431, 0x8A39,
+    0xFE98, 0x8431, 0x8B30,
+    0xFE99, 0x8431, 0x8B31,
+    0xFE9A, 0x8431, 0x8B32,
+    0xFE9B, 0x8431, 0x8B33,
+    0xFE9C, 0x8431, 0x8B34,
+    0xFE9D, 0x8431, 0x8B35,
+    0xFE9E, 0x8431, 0x8B36,
+    0xFE9F, 0x8431, 0x8B37,
+    0xFEA0, 0x8431, 0x8B38,
+    0xFEA1, 0x8431, 0x8B39,
+    0xFEA2, 0x8431, 0x8C30,
+    0xFEA3, 0x8431, 0x8C31,
+    0xFEA4, 0x8431, 0x8C32,
+    0xFEA5, 0x8431, 0x8C33,
+    0xFEA6, 0x8431, 0x8C34,
+    0xFEA7, 0x8431, 0x8C35,
+    0xFEA8, 0x8431, 0x8C36,
+    0xFEA9, 0x8431, 0x8C37,
+    0xFEAA, 0x8431, 0x8C38,
+    0xFEAB, 0x8431, 0x8C39,
+    0xFEAC, 0x8431, 0x8D30,
+    0xFEAD, 0x8431, 0x8D31,
+    0xFEAE, 0x8431, 0x8D32,
+    0xFEAF, 0x8431, 0x8D33,
+    0xFEB0, 0x8431, 0x8D34,
+    0xFEB1, 0x8431, 0x8D35,
+    0xFEB2, 0x8431, 0x8D36,
+    0xFEB3, 0x8431, 0x8D37,
+    0xFEB4, 0x8431, 0x8D38,
+    0xFEB5, 0x8431, 0x8D39,
+    0xFEB6, 0x8431, 0x8E30,
+    0xFEB7, 0x8431, 0x8E31,
+    0xFEB8, 0x8431, 0x8E32,
+    0xFEB9, 0x8431, 0x8E33,
+    0xFEBA, 0x8431, 0x8E34,
+    0xFEBB, 0x8431, 0x8E35,
+    0xFEBC, 0x8431, 0x8E36,
+    0xFEBD, 0x8431, 0x8E37,
+    0xFEBE, 0x8431, 0x8E38,
+    0xFEBF, 0x8431, 0x8E39,
+    0xFEC0, 0x8431, 0x8F30,
+    0xFEC1, 0x8431, 0x8F31,
+    0xFEC2, 0x8431, 0x8F32,
+    0xFEC3, 0x8431, 0x8F33,
+    0xFEC4, 0x8431, 0x8F34,
+    0xFEC5, 0x8431, 0x8F35,
+    0xFEC6, 0x8431, 0x8F36,
+    0xFEC7, 0x8431, 0x8F37,
+    0xFEC8, 0x8431, 0x8F38,
+    0xFEC9, 0x8431, 0x8F39,
+    0xFECA, 0x8431, 0x9030,
+    0xFECB, 0x8431, 0x9031,
+    0xFECC, 0x8431, 0x9032,
+    0xFECD, 0x8431, 0x9033,
+    0xFECE, 0x8431, 0x9034,
+    0xFECF, 0x8431, 0x9035,
+    0xFED0, 0x8431, 0x9036,
+    0xFED1, 0x8431, 0x9037,
+    0xFED2, 0x8431, 0x9038,
+    0xFED3, 0x8431, 0x9039,
+    0xFED4, 0x8431, 0x9130,
+    0xFED5, 0x8431, 0x9131,
+    0xFED6, 0x8431, 0x9132,
+    0xFED7, 0x8431, 0x9133,
+    0xFED8, 0x8431, 0x9134,
+    0xFED9, 0x8431, 0x9135,
+    0xFEDA, 0x8431, 0x9136,
+    0xFEDB, 0x8431, 0x9137,
+    0xFEDC, 0x8431, 0x9138,
+    0xFEDD, 0x8431, 0x9139,
+    0xFEDE, 0x8431, 0x9230,
+    0xFEDF, 0x8431, 0x9231,
+    0xFEE0, 0x8431, 0x9232,
+    0xFEE1, 0x8431, 0x9233,
+    0xFEE2, 0x8431, 0x9234,
+    0xFEE3, 0x8431, 0x9235,
+    0xFEE4, 0x8431, 0x9236,
+    0xFEE5, 0x8431, 0x9237,
+    0xFEE6, 0x8431, 0x9238,
+    0xFEE7, 0x8431, 0x9239,
+    0xFEE8, 0x8431, 0x9330,
+    0xFEE9, 0x8431, 0x9331,
+    0xFEEA, 0x8431, 0x9332,
+    0xFEEB, 0x8431, 0x9333,
+    0xFEEC, 0x8431, 0x9334,
+    0xFEED, 0x8431, 0x9335,
+    0xFEEE, 0x8431, 0x9336,
+    0xFEEF, 0x8431, 0x9337,
+    0xFEF0, 0x8431, 0x9338,
+    0xFEF1, 0x8431, 0x9339,
+    0xFEF2, 0x8431, 0x9430,
+    0xFEF3, 0x8431, 0x9431,
+    0xFEF4, 0x8431, 0x9432,
+    0xFEF5, 0x8431, 0x9433,
+    0xFEF6, 0x8431, 0x9434,
+    0xFEF7, 0x8431, 0x9435,
+    0xFEF8, 0x8431, 0x9436,
+    0xFEF9, 0x8431, 0x9437,
+    0xFEFA, 0x8431, 0x9438,
+    0xFEFB, 0x8431, 0x9439,
+    0xFEFC, 0x8431, 0x9530,
+    0xFEFD, 0x8431, 0x9531,
+    0xFEFE, 0x8431, 0x9532,
+    0xFEFF, 0x8431, 0x9533,
+    0xFF00, 0x8431, 0x9534,
+    0xFF5F, 0x8431, 0x9535,
+    0xFF60, 0x8431, 0x9536,
+    0xFF61, 0x8431, 0x9537,
+    0xFF62, 0x8431, 0x9538,
+    0xFF63, 0x8431, 0x9539,
+    0xFF64, 0x8431, 0x9630,
+    0xFF65, 0x8431, 0x9631,
+    0xFF66, 0x8431, 0x9632,
+    0xFF67, 0x8431, 0x9633,
+    0xFF68, 0x8431, 0x9634,
+    0xFF69, 0x8431, 0x9635,
+    0xFF6A, 0x8431, 0x9636,
+    0xFF6B, 0x8431, 0x9637,
+    0xFF6C, 0x8431, 0x9638,
+    0xFF6D, 0x8431, 0x9639,
+    0xFF6E, 0x8431, 0x9730,
+    0xFF6F, 0x8431, 0x9731,
+    0xFF70, 0x8431, 0x9732,
+    0xFF71, 0x8431, 0x9733,
+    0xFF72, 0x8431, 0x9734,
+    0xFF73, 0x8431, 0x9735,
+    0xFF74, 0x8431, 0x9736,
+    0xFF75, 0x8431, 0x9737,
+    0xFF76, 0x8431, 0x9738,
+    0xFF77, 0x8431, 0x9739,
+    0xFF78, 0x8431, 0x9830,
+    0xFF79, 0x8431, 0x9831,
+    0xFF7A, 0x8431, 0x9832,
+    0xFF7B, 0x8431, 0x9833,
+    0xFF7C, 0x8431, 0x9834,
+    0xFF7D, 0x8431, 0x9835,
+    0xFF7E, 0x8431, 0x9836,
+    0xFF7F, 0x8431, 0x9837,
+    0xFF80, 0x8431, 0x9838,
+    0xFF81, 0x8431, 0x9839,
+    0xFF82, 0x8431, 0x9930,
+    0xFF83, 0x8431, 0x9931,
+    0xFF84, 0x8431, 0x9932,
+    0xFF85, 0x8431, 0x9933,
+    0xFF86, 0x8431, 0x9934,
+    0xFF87, 0x8431, 0x9935,
+    0xFF88, 0x8431, 0x9936,
+    0xFF89, 0x8431, 0x9937,
+    0xFF8A, 0x8431, 0x9938,
+    0xFF8B, 0x8431, 0x9939,
+    0xFF8C, 0x8431, 0x9A30,
+    0xFF8D, 0x8431, 0x9A31,
+    0xFF8E, 0x8431, 0x9A32,
+    0xFF8F, 0x8431, 0x9A33,
+    0xFF90, 0x8431, 0x9A34,
+    0xFF91, 0x8431, 0x9A35,
+    0xFF92, 0x8431, 0x9A36,
+    0xFF93, 0x8431, 0x9A37,
+    0xFF94, 0x8431, 0x9A38,
+    0xFF95, 0x8431, 0x9A39,
+    0xFF96, 0x8431, 0x9B30,
+    0xFF97, 0x8431, 0x9B31,
+    0xFF98, 0x8431, 0x9B32,
+    0xFF99, 0x8431, 0x9B33,
+    0xFF9A, 0x8431, 0x9B34,
+    0xFF9B, 0x8431, 0x9B35,
+    0xFF9C, 0x8431, 0x9B36,
+    0xFF9D, 0x8431, 0x9B37,
+    0xFF9E, 0x8431, 0x9B38,
+    0xFF9F, 0x8431, 0x9B39,
+    0xFFA0, 0x8431, 0x9C30,
+    0xFFA1, 0x8431, 0x9C31,
+    0xFFA2, 0x8431, 0x9C32,
+    0xFFA3, 0x8431, 0x9C33,
+    0xFFA4, 0x8431, 0x9C34,
+    0xFFA5, 0x8431, 0x9C35,
+    0xFFA6, 0x8431, 0x9C36,
+    0xFFA7, 0x8431, 0x9C37,
+    0xFFA8, 0x8431, 0x9C38,
+    0xFFA9, 0x8431, 0x9C39,
+    0xFFAA, 0x8431, 0x9D30,
+    0xFFAB, 0x8431, 0x9D31,
+    0xFFAC, 0x8431, 0x9D32,
+    0xFFAD, 0x8431, 0x9D33,
+    0xFFAE, 0x8431, 0x9D34,
+    0xFFAF, 0x8431, 0x9D35,
+    0xFFB0, 0x8431, 0x9D36,
+    0xFFB1, 0x8431, 0x9D37,
+    0xFFB2, 0x8431, 0x9D38,
+    0xFFB3, 0x8431, 0x9D39,
+    0xFFB4, 0x8431, 0x9E30,
+    0xFFB5, 0x8431, 0x9E31,
+    0xFFB6, 0x8431, 0x9E32,
+    0xFFB7, 0x8431, 0x9E33,
+    0xFFB8, 0x8431, 0x9E34,
+    0xFFB9, 0x8431, 0x9E35,
+    0xFFBA, 0x8431, 0x9E36,
+    0xFFBB, 0x8431, 0x9E37,
+    0xFFBC, 0x8431, 0x9E38,
+    0xFFBD, 0x8431, 0x9E39,
+    0xFFBE, 0x8431, 0x9F30,
+    0xFFBF, 0x8431, 0x9F31,
+    0xFFC0, 0x8431, 0x9F32,
+    0xFFC1, 0x8431, 0x9F33,
+    0xFFC2, 0x8431, 0x9F34,
+    0xFFC3, 0x8431, 0x9F35,
+    0xFFC4, 0x8431, 0x9F36,
+    0xFFC5, 0x8431, 0x9F37,
+    0xFFC6, 0x8431, 0x9F38,
+    0xFFC7, 0x8431, 0x9F39,
+    0xFFC8, 0x8431, 0xA030,
+    0xFFC9, 0x8431, 0xA031,
+    0xFFCA, 0x8431, 0xA032,
+    0xFFCB, 0x8431, 0xA033,
+    0xFFCC, 0x8431, 0xA034,
+    0xFFCD, 0x8431, 0xA035,
+    0xFFCE, 0x8431, 0xA036,
+    0xFFCF, 0x8431, 0xA037,
+    0xFFD0, 0x8431, 0xA038,
+    0xFFD1, 0x8431, 0xA039,
+    0xFFD2, 0x8431, 0xA130,
+    0xFFD3, 0x8431, 0xA131,
+    0xFFD4, 0x8431, 0xA132,
+    0xFFD5, 0x8431, 0xA133,
+    0xFFD6, 0x8431, 0xA134,
+    0xFFD7, 0x8431, 0xA135,
+    0xFFD8, 0x8431, 0xA136,
+    0xFFD9, 0x8431, 0xA137,
+    0xFFDA, 0x8431, 0xA138,
+    0xFFDB, 0x8431, 0xA139,
+    0xFFDC, 0x8431, 0xA230,
+    0xFFDD, 0x8431, 0xA231,
+    0xFFDE, 0x8431, 0xA232,
+    0xFFDF, 0x8431, 0xA233
+};
diff --git a/backend/gb2312.c b/backend/gb2312.c
deleted file mode 100644 (file)
index 1259f68..0000000
+++ /dev/null
@@ -1,1624 +0,0 @@
-/*
-    libzint - the open source barcode library
-    Copyright (C) 2008-2020 Robin Stuart <rstuart114@gmail.com>
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-    1. Redistributions of source code must retain the above copyright
-       notice, this list of conditions and the following disclaimer.
-    2. Redistributions in binary form must reproduce the above copyright
-       notice, this list of conditions and the following disclaimer in the
-       documentation and/or other materials provided with the distribution.
-    3. Neither the name of the project nor the names of its contributors
-       may be used to endorse or promote products derived from this software
-       without specific prior written permission.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
-    ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-    ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-    SUCH DAMAGE.
- */
-/* vim: set ts=4 sw=4 et : */
-/*
- * Adapted from GNU LIBICONV library and patched to add 2 duplicate mappings
- * for compatibility with GB 18030 subset:
- * 1) U+00B7 to 0xA1A4 (duplicate of U+30FB)
- * 2) U+2014 to 0xA1AA (duplicate of U+2015)
- */
-/*
- * Copyright (C) 1999-2001, 2012, 2016 Free Software Foundation, Inc.
- * This file is part of the GNU LIBICONV Library.
- *
- * The GNU LIBICONV Library is free software; you can redistribute it
- * and/or modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * The GNU LIBICONV Library is distributed in the hope that it will be
- * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with the GNU LIBICONV Library; see the file COPYING.LIB.
- * If not, see <https://www.gnu.org/licenses/>.
- */
-#include <string.h>
-#ifdef _MSC_VER
-#include <malloc.h>
-#endif
-#include "common.h"
-#include "gb2312.h"
-
-INTERNAL int utf_to_eci(const int eci, const unsigned char source[], unsigned char dest[], size_t *length); /* Convert Unicode to other encodings */
-
-/*
- * GB2312.1980-0 (libiconv-1.16/lib/gb2312.h)
- */
-
-/* ZINT: Table converted from GB 2312 to EUC-CN values using tools/cnv_gb2312.php:
- *
-while ($line = fgets(STDIN)) {
-    echo preg_replace_callback('/0x([0-9a-f]{4})/', function ($matches) {
-        return '0x' . dechex(hexdec($matches[1]) + 0x8080);
-    }, $line);
-}
- */
-static const unsigned short gb2312_2charset[7445] = {
-  0xa1e8, 0xa1ec, 0xa1a7, 0xa1e3, 0xa1c0, 0xa1c1, 0xa8a4, 0xa8a2,
-  0xa8a8, 0xa8a6, 0xa8ba, 0xa8ac, 0xa8aa, 0xa8b0, 0xa8ae, 0xa1c2,
-  0xa8b4, 0xa8b2, 0xa8b9, 0xa8a1, 0xa8a5, 0xa8a7, 0xa8a9, 0xa8ad,
-  0xa8b1, 0xa8a3, 0xa8ab, 0xa8af, 0xa8b3, 0xa8b5, 0xa8b6, 0xa8b7,
-  0xa8b8, 0xa1a6, 0xa1a5, 0xa6a1, 0xa6a2, 0xa6a3, 0xa6a4, 0xa6a5,
-  0xa6a6, 0xa6a7, 0xa6a8, 0xa6a9, 0xa6aa, 0xa6ab, 0xa6ac, 0xa6ad,
-  0xa6ae, 0xa6af, 0xa6b0, 0xa6b1, 0xa6b2, 0xa6b3, 0xa6b4, 0xa6b5,
-  0xa6b6, 0xa6b7, 0xa6b8, 0xa6c1, 0xa6c2, 0xa6c3, 0xa6c4, 0xa6c5,
-  0xa6c6, 0xa6c7, 0xa6c8, 0xa6c9, 0xa6ca, 0xa6cb, 0xa6cc, 0xa6cd,
-  0xa6ce, 0xa6cf, 0xa6d0, 0xa6d1, 0xa6d2, 0xa6d3, 0xa6d4, 0xa6d5,
-  0xa6d6, 0xa6d7, 0xa6d8, 0xa7a7, 0xa7a1, 0xa7a2, 0xa7a3, 0xa7a4,
-  0xa7a5, 0xa7a6, 0xa7a8, 0xa7a9, 0xa7aa, 0xa7ab, 0xa7ac, 0xa7ad,
-  0xa7ae, 0xa7af, 0xa7b0, 0xa7b1, 0xa7b2, 0xa7b3, 0xa7b4, 0xa7b5,
-  0xa7b6, 0xa7b7, 0xa7b8, 0xa7b9, 0xa7ba, 0xa7bb, 0xa7bc, 0xa7bd,
-  0xa7be, 0xa7bf, 0xa7c0, 0xa7c1, 0xa7d1, 0xa7d2, 0xa7d3, 0xa7d4,
-  0xa7d5, 0xa7d6, 0xa7d8, 0xa7d9, 0xa7da, 0xa7db, 0xa7dc, 0xa7dd,
-  0xa7de, 0xa7df, 0xa7e0, 0xa7e1, 0xa7e2, 0xa7e3, 0xa7e4, 0xa7e5,
-  0xa7e6, 0xa7e7, 0xa7e8, 0xa7e9, 0xa7ea, 0xa7eb, 0xa7ec, 0xa7ed,
-  0xa7ee, 0xa7ef, 0xa7f0, 0xa7f1, 0xa7d7, 0xa1aa, 0xa1ac, 0xa1ae,
-  0xa1af, 0xa1b0, 0xa1b1, 0xa1ad, 0xa1eb, 0xa1e4, 0xa1e5, 0xa1f9,
-  0xa1e6, 0xa1ed, 0xa2f1, 0xa2f2, 0xa2f3, 0xa2f4, 0xa2f5, 0xa2f6,
-  0xa2f7, 0xa2f8, 0xa2f9, 0xa2fa, 0xa2fb, 0xa2fc, 0xa1fb, 0xa1fc,
-  0xa1fa, 0xa1fd, 0xa1ca, 0xa1c7, 0xa1c6, 0xa1cc, 0xa1d8, 0xa1de,
-  0xa1cf, 0xa1ce, 0xa1c4, 0xa1c5, 0xa1c9, 0xa1c8, 0xa1d2, 0xa1d3,
-  0xa1e0, 0xa1df, 0xa1c3, 0xa1cb, 0xa1d7, 0xa1d6, 0xa1d5, 0xa1d9,
-  0xa1d4, 0xa1dc, 0xa1dd, 0xa1da, 0xa1db, 0xa1d1, 0xa1cd, 0xa1d0,
-  0xa2d9, 0xa2da, 0xa2db, 0xa2dc, 0xa2dd, 0xa2de, 0xa2df, 0xa2e0,
-  0xa2e1, 0xa2e2, 0xa2c5, 0xa2c6, 0xa2c7, 0xa2c8, 0xa2c9, 0xa2ca,
-  0xa2cb, 0xa2cc, 0xa2cd, 0xa2ce, 0xa2cf, 0xa2d0, 0xa2d1, 0xa2d2,
-  0xa2d3, 0xa2d4, 0xa2d5, 0xa2d6, 0xa2d7, 0xa2d8, 0xa2b1, 0xa2b2,
-  0xa2b3, 0xa2b4, 0xa2b5, 0xa2b6, 0xa2b7, 0xa2b8, 0xa2b9, 0xa2ba,
-  0xa2bb, 0xa2bc, 0xa2bd, 0xa2be, 0xa2bf, 0xa2c0, 0xa2c1, 0xa2c2,
-  0xa2c3, 0xa2c4, 0xa9a4, 0xa9a5, 0xa9a6, 0xa9a7, 0xa9a8, 0xa9a9,
-  0xa9aa, 0xa9ab, 0xa9ac, 0xa9ad, 0xa9ae, 0xa9af, 0xa9b0, 0xa9b1,
-  0xa9b2, 0xa9b3, 0xa9b4, 0xa9b5, 0xa9b6, 0xa9b7, 0xa9b8, 0xa9b9,
-  0xa9ba, 0xa9bb, 0xa9bc, 0xa9bd, 0xa9be, 0xa9bf, 0xa9c0, 0xa9c1,
-  0xa9c2, 0xa9c3, 0xa9c4, 0xa9c5, 0xa9c6, 0xa9c7, 0xa9c8, 0xa9c9,
-  0xa9ca, 0xa9cb, 0xa9cc, 0xa9cd, 0xa9ce, 0xa9cf, 0xa9d0, 0xa9d1,
-  0xa9d2, 0xa9d3, 0xa9d4, 0xa9d5, 0xa9d6, 0xa9d7, 0xa9d8, 0xa9d9,
-  0xa9da, 0xa9db, 0xa9dc, 0xa9dd, 0xa9de, 0xa9df, 0xa9e0, 0xa9e1,
-  0xa9e2, 0xa9e3, 0xa9e4, 0xa9e5, 0xa9e6, 0xa9e7, 0xa9e8, 0xa9e9,
-  0xa9ea, 0xa9eb, 0xa9ec, 0xa9ed, 0xa9ee, 0xa9ef, 0xa1f6, 0xa1f5,
-  0xa1f8, 0xa1f7, 0xa1f4, 0xa1f3, 0xa1f0, 0xa1f2, 0xa1f1, 0xa1ef,
-  0xa1ee, 0xa1e2, 0xa1e1, 0xa1a1, 0xa1a2, 0xa1a3, 0xa1a8, 0xa1a9,
-  0xa1b4, 0xa1b5, 0xa1b6, 0xa1b7, 0xa1b8, 0xa1b9, 0xa1ba, 0xa1bb,
-  0xa1be, 0xa1bf, 0xa1fe, 0xa1b2, 0xa1b3, 0xa1bc, 0xa1bd, 0xa4a1,
-  0xa4a2, 0xa4a3, 0xa4a4, 0xa4a5, 0xa4a6, 0xa4a7, 0xa4a8, 0xa4a9,
-  0xa4aa, 0xa4ab, 0xa4ac, 0xa4ad, 0xa4ae, 0xa4af, 0xa4b0, 0xa4b1,
-  0xa4b2, 0xa4b3, 0xa4b4, 0xa4b5, 0xa4b6, 0xa4b7, 0xa4b8, 0xa4b9,
-  0xa4ba, 0xa4bb, 0xa4bc, 0xa4bd, 0xa4be, 0xa4bf, 0xa4c0, 0xa4c1,
-  0xa4c2, 0xa4c3, 0xa4c4, 0xa4c5, 0xa4c6, 0xa4c7, 0xa4c8, 0xa4c9,
-  0xa4ca, 0xa4cb, 0xa4cc, 0xa4cd, 0xa4ce, 0xa4cf, 0xa4d0, 0xa4d1,
-  0xa4d2, 0xa4d3, 0xa4d4, 0xa4d5, 0xa4d6, 0xa4d7, 0xa4d8, 0xa4d9,
-  0xa4da, 0xa4db, 0xa4dc, 0xa4dd, 0xa4de, 0xa4df, 0xa4e0, 0xa4e1,
-  0xa4e2, 0xa4e3, 0xa4e4, 0xa4e5, 0xa4e6, 0xa4e7, 0xa4e8, 0xa4e9,
-  0xa4ea, 0xa4eb, 0xa4ec, 0xa4ed, 0xa4ee, 0xa4ef, 0xa4f0, 0xa4f1,
-  0xa4f2, 0xa4f3, 0xa5a1, 0xa5a2, 0xa5a3, 0xa5a4, 0xa5a5, 0xa5a6,
-  0xa5a7, 0xa5a8, 0xa5a9, 0xa5aa, 0xa5ab, 0xa5ac, 0xa5ad, 0xa5ae,
-  0xa5af, 0xa5b0, 0xa5b1, 0xa5b2, 0xa5b3, 0xa5b4, 0xa5b5, 0xa5b6,
-  0xa5b7, 0xa5b8, 0xa5b9, 0xa5ba, 0xa5bb, 0xa5bc, 0xa5bd, 0xa5be,
-  0xa5bf, 0xa5c0, 0xa5c1, 0xa5c2, 0xa5c3, 0xa5c4, 0xa5c5, 0xa5c6,
-  0xa5c7, 0xa5c8, 0xa5c9, 0xa5ca, 0xa5cb, 0xa5cc, 0xa5cd, 0xa5ce,
-  0xa5cf, 0xa5d0, 0xa5d1, 0xa5d2, 0xa5d3, 0xa5d4, 0xa5d5, 0xa5d6,
-  0xa5d7, 0xa5d8, 0xa5d9, 0xa5da, 0xa5db, 0xa5dc, 0xa5dd, 0xa5de,
-  0xa5df, 0xa5e0, 0xa5e1, 0xa5e2, 0xa5e3, 0xa5e4, 0xa5e5, 0xa5e6,
-  0xa5e7, 0xa5e8, 0xa5e9, 0xa5ea, 0xa5eb, 0xa5ec, 0xa5ed, 0xa5ee,
-  0xa5ef, 0xa5f0, 0xa5f1, 0xa5f2, 0xa5f3, 0xa5f4, 0xa5f5, 0xa5f6,
-  0xa1a4, 0xa8c5, 0xa8c6, 0xa8c7, 0xa8c8, 0xa8c9, 0xa8ca, 0xa8cb,
-  0xa8cc, 0xa8cd, 0xa8ce, 0xa8cf, 0xa8d0, 0xa8d1, 0xa8d2, 0xa8d3,
-  0xa8d4, 0xa8d5, 0xa8d6, 0xa8d7, 0xa8d8, 0xa8d9, 0xa8da, 0xa8db,
-  0xa8dc, 0xa8dd, 0xa8de, 0xa8df, 0xa8e0, 0xa8e1, 0xa8e2, 0xa8e3,
-  0xa8e4, 0xa8e5, 0xa8e6, 0xa8e7, 0xa8e8, 0xa8e9, 0xa2e5, 0xa2e6,
-  0xa2e7, 0xa2e8, 0xa2e9, 0xa2ea, 0xa2eb, 0xa2ec, 0xa2ed, 0xa2ee,
-  0xd2bb, 0xb6a1, 0xc6df, 0xcdf2, 0xd5c9, 0xc8fd, 0xc9cf, 0xcfc2,
-  0xd8a2, 0xb2bb, 0xd3eb, 0xd8a4, 0xb3f3, 0xd7a8, 0xc7d2, 0xd8a7,
-  0xcac0, 0xc7f0, 0xb1fb, 0xd2b5, 0xb4d4, 0xb6ab, 0xcbbf, 0xd8a9,
-  0xb6aa, 0xc1bd, 0xd1cf, 0xc9a5, 0xd8ad, 0xb8f6, 0xd1be, 0xe3dc,
-  0xd6d0, 0xb7e1, 0xb4ae, 0xc1d9, 0xd8bc, 0xcde8, 0xb5a4, 0xceaa,
-  0xd6f7, 0xc0f6, 0xbed9, 0xd8af, 0xc4cb, 0xbec3, 0xd8b1, 0xc3b4,
-  0xd2e5, 0xd6ae, 0xceda, 0xd5a7, 0xbaf5, 0xb7a6, 0xc0d6, 0xc6b9,
-  0xc5d2, 0xc7c7, 0xb9d4, 0xb3cb, 0xd2d2, 0xd8bf, 0xbec5, 0xc6f2,
-  0xd2b2, 0xcfb0, 0xcfe7, 0xcae9, 0xd8c0, 0xc2f2, 0xc2d2, 0xc8e9,
-  0xc7ac, 0xc1cb, 0xd3e8, 0xd5f9, 0xcac2, 0xb6fe, 0xd8a1, 0xd3da,
-  0xbff7, 0xd4c6, 0xbba5, 0xd8c1, 0xcee5, 0xbeae, 0xd8a8, 0xd1c7,
-  0xd0a9, 0xd8bd, 0xd9ef, 0xcdf6, 0xbfba, 0xbdbb, 0xbaa5, 0xd2e0,
-  0xb2fa, 0xbae0, 0xc4b6, 0xcfed, 0xbea9, 0xcda4, 0xc1c1, 0xc7d7,
-  0xd9f1, 0xd9f4, 0xc8cb, 0xd8e9, 0xd2da, 0xcab2, 0xc8ca, 0xd8ec,
-  0xd8ea, 0xd8c6, 0xbdf6, 0xc6cd, 0xb3f0, 0xd8eb, 0xbdf1, 0xbde9,
-  0xc8d4, 0xb4d3, 0xc2d8, 0xb2d6, 0xd7d0, 0xcacb, 0xcbfb, 0xd5cc,
-  0xb8b6, 0xcfc9, 0xd9da, 0xd8f0, 0xc7aa, 0xd8ee, 0xb4fa, 0xc1ee,
-  0xd2d4, 0xd8ed, 0xd2c7, 0xd8ef, 0xc3c7, 0xd1f6, 0xd6d9, 0xd8f2,
-  0xd8f5, 0xbcfe, 0xbcdb, 0xc8ce, 0xb7dd, 0xb7c2, 0xc6f3, 0xd8f8,
-  0xd2c1, 0xcee9, 0xbcbf, 0xb7fc, 0xb7a5, 0xd0dd, 0xd6da, 0xd3c5,
-  0xbbef, 0xbbe1, 0xd8f1, 0xc9a1, 0xceb0, 0xb4ab, 0xd8f3, 0xc9cb,
-  0xd8f6, 0xc2d7, 0xd8f7, 0xceb1, 0xd8f9, 0xb2ae, 0xb9c0, 0xd9a3,
-  0xb0e9, 0xc1e6, 0xc9ec, 0xcbc5, 0xcbc6, 0xd9a4, 0xb5e8, 0xb5ab,
-  0xcebb, 0xb5cd, 0xd7a1, 0xd7f4, 0xd3d3, 0xcce5, 0xbace, 0xd9a2,
-  0xd9dc, 0xd3e0, 0xd8fd, 0xb7f0, 0xd7f7, 0xd8fe, 0xd8fa, 0xd9a1,
-  0xc4e3, 0xd3b6, 0xd8f4, 0xd9dd, 0xd8fb, 0xc5e5, 0xc0d0, 0xd1f0,
-  0xb0db, 0xbcd1, 0xd9a6, 0xd9a5, 0xd9ac, 0xd9ae, 0xd9ab, 0xcab9,
-  0xd9a9, 0xd6b6, 0xb3de, 0xd9a8, 0xc0fd, 0xcacc, 0xd9aa, 0xd9a7,
-  0xd9b0, 0xb6b1, 0xb9a9, 0xd2c0, 0xcfc0, 0xc2c2, 0xbdc4, 0xd5ec,
-  0xb2e0, 0xc7c8, 0xbfeb, 0xd9ad, 0xd9af, 0xceea, 0xbaee, 0xc7d6,
-  0xb1e3, 0xb4d9, 0xb6ed, 0xd9b4, 0xbfa1, 0xd9de, 0xc7ce, 0xc0fe,
-  0xd9b8, 0xcbd7, 0xb7fd, 0xd9b5, 0xd9b7, 0xb1a3, 0xd3e1, 0xd9b9,
-  0xd0c5, 0xd9b6, 0xd9b1, 0xd9b2, 0xc1a9, 0xd9b3, 0xbcf3, 0xd0de,
-  0xb8a9, 0xbee3, 0xd9bd, 0xd9ba, 0xb0b3, 0xd9c2, 0xd9c4, 0xb1b6,
-  0xd9bf, 0xb5b9, 0xbef3, 0xccc8, 0xbaf2, 0xd2d0, 0xd9c3, 0xbde8,
-  0xb3ab, 0xd9c5, 0xbeeb, 0xd9c6, 0xd9bb, 0xc4df, 0xd9be, 0xd9c1,
-  0xd9c0, 0xd5ae, 0xd6b5, 0xc7e3, 0xd9c8, 0xbcd9, 0xd9ca, 0xd9bc,
-  0xd9cb, 0xc6ab, 0xd9c9, 0xd7f6, 0xcda3, 0xbda1, 0xd9cc, 0xc5bc,
-  0xcdb5, 0xd9cd, 0xd9c7, 0xb3a5, 0xbffe, 0xb8b5, 0xc0fc, 0xb0f8,
-  0xb4f6, 0xd9ce, 0xd9cf, 0xb4a2, 0xd9d0, 0xb4df, 0xb0c1, 0xd9d1,
-  0xc9b5, 0xcff1, 0xd9d2, 0xc1c5, 0xd9d6, 0xc9ae, 0xd9d5, 0xd9d4,
-  0xd9d7, 0xcbdb, 0xbda9, 0xc6a7, 0xd9d3, 0xd9d8, 0xd9d9, 0xc8e5,
-  0xc0dc, 0xb6f9, 0xd8a3, 0xd4ca, 0xd4aa, 0xd0d6, 0xb3e4, 0xd5d7,
-  0xcfc8, 0xb9e2, 0xbfcb, 0xc3e2, 0xb6d2, 0xcdc3, 0xd9ee, 0xd9f0,
-  0xb5b3, 0xb6b5, 0xbea4, 0xc8eb, 0xc8ab, 0xb0cb, 0xb9ab, 0xc1f9,
-  0xd9e2, 0xc0bc, 0xb9b2, 0xb9d8, 0xd0cb, 0xb1f8, 0xc6e4, 0xbedf,
-  0xb5e4, 0xd7c8, 0xd1f8, 0xbce6, 0xcade, 0xbcbd, 0xd9e6, 0xd8e7,
-  0xc4da, 0xb8d4, 0xc8bd, 0xb2e1, 0xd4d9, 0xc3b0, 0xc3e1, 0xdaa2,
-  0xc8df, 0xd0b4, 0xbefc, 0xc5a9, 0xb9da, 0xdaa3, 0xd4a9, 0xdaa4,
-  0xd9fb, 0xb6ac, 0xb7eb, 0xb1f9, 0xd9fc, 0xb3e5, 0xbef6, 0xbff6,
-  0xd2b1, 0xc0e4, 0xb6b3, 0xd9fe, 0xd9fd, 0xbebb, 0xc6e0, 0xd7bc,
-  0xdaa1, 0xc1b9, 0xb5f2, 0xc1e8, 0xbcf5, 0xb4d5, 0xc1dd, 0xc4fd,
-  0xbcb8, 0xb7b2, 0xb7ef, 0xd9ec, 0xc6be, 0xbfad, 0xbbcb, 0xb5ca,
-  0xdbc9, 0xd0d7, 0xcdb9, 0xb0bc, 0xb3f6, 0xbbf7, 0xdbca, 0xbaaf,
-  0xd4e4, 0xb5b6, 0xb5f3, 0xd8d6, 0xc8d0, 0xb7d6, 0xc7d0, 0xd8d7,
-  0xbfaf, 0xdbbb, 0xd8d8, 0xd0cc, 0xbbae, 0xebbe, 0xc1d0, 0xc1f5,
-  0xd4f2, 0xb8d5, 0xb4b4, 0xb3f5, 0xc9be, 0xc5d0, 0xc5d9, 0xc0fb,
-  0xb1f0, 0xd8d9, 0xb9ce, 0xb5bd, 0xd8da, 0xd6c6, 0xcba2, 0xc8af,
-  0xc9b2, 0xb4cc, 0xbfcc, 0xb9f4, 0xd8db, 0xd8dc, 0xb6e7, 0xbcc1,
-  0xccea, 0xcff7, 0xd8dd, 0xc7b0, 0xb9d0, 0xbda3, 0xccde, 0xc6ca,
-  0xd8e0, 0xd8de, 0xd8df, 0xb0fe, 0xbee7, 0xcaa3, 0xbcf4, 0xb8b1,
-  0xb8ee, 0xd8e2, 0xbdcb, 0xd8e4, 0xd8e3, 0xc5fc, 0xd8e5, 0xd8e6,
-  0xc1a6, 0xc8b0, 0xb0ec, 0xb9a6, 0xbcd3, 0xcef1, 0xdbbd, 0xc1d3,
-  0xb6af, 0xd6fa, 0xc5ac, 0xbdd9, 0xdbbe, 0xdbbf, 0xc0f8, 0xbea2,
-  0xc0cd, 0xdbc0, 0xcac6, 0xb2aa, 0xd3c2, 0xc3e3, 0xd1ab, 0xdbc2,
-  0xc0d5, 0xdbc3, 0xbfb1, 0xc4bc, 0xc7da, 0xdbc4, 0xd9e8, 0xc9d7,
-  0xb9b4, 0xcef0, 0xd4c8, 0xb0fc, 0xb4d2, 0xd0d9, 0xd9e9, 0xdecb,
-  0xd9eb, 0xd8b0, 0xbbaf, 0xb1b1, 0xb3d7, 0xd8ce, 0xd4d1, 0xbdb3,
-  0xbfef, 0xcfbb, 0xd8d0, 0xb7cb, 0xd8d1, 0xc6a5, 0xc7f8, 0xd2bd,
-  0xd8d2, 0xc4e4, 0xcaae, 0xc7a7, 0xd8a6, 0xc9fd, 0xcee7, 0xbbdc,
-  0xb0eb, 0xbbaa, 0xd0ad, 0xb1b0, 0xd7e4, 0xd7bf, 0xb5a5, 0xc2f4,
-  0xc4cf, 0xb2a9, 0xb2b7, 0xb1e5, 0xdfb2, 0xd5bc, 0xbfa8, 0xc2ac,
-  0xd8d5, 0xc2b1, 0xd8d4, 0xced4, 0xdae0, 0xcec0, 0xd8b4, 0xc3ae,
-  0xd3a1, 0xcea3, 0xbcb4, 0xc8b4, 0xc2d1, 0xbeed, 0xd0b6, 0xdae1,
-  0xc7e4, 0xb3a7, 0xb6f2, 0xccfc, 0xc0fa, 0xc0f7, 0xd1b9, 0xd1e1,
-  0xd8c7, 0xb2de, 0xc0e5, 0xbaf1, 0xd8c8, 0xd4ad, 0xcfe1, 0xd8c9,
-  0xd8ca, 0xcfc3, 0xb3f8, 0xbec7, 0xd8cb, 0xdbcc, 0xc8a5, 0xcfd8,
-  0xc8fe, 0xb2ce, 0xd3d6, 0xb2e6, 0xbcb0, 0xd3d1, 0xcbab, 0xb7b4,
-  0xb7a2, 0xcae5, 0xc8a1, 0xcadc, 0xb1e4, 0xd0f0, 0xc5d1, 0xdbc5,
-  0xb5fe, 0xbfda, 0xb9c5, 0xbee4, 0xc1ed, 0xdfb6, 0xdfb5, 0xd6bb,
-  0xbdd0, 0xd5d9, 0xb0c8, 0xb6a3, 0xbfc9, 0xcca8, 0xdfb3, 0xcab7,
-  0xd3d2, 0xd8cf, 0xd2b6, 0xbac5, 0xcbbe, 0xccbe, 0xdfb7, 0xb5f0,
-  0xdfb4, 0xd3f5, 0xb3d4, 0xb8f7, 0xdfba, 0xbacf, 0xbcaa, 0xb5f5,
-  0xcdac, 0xc3fb, 0xbaf3, 0xc0f4, 0xcdc2, 0xcff2, 0xdfb8, 0xcfc5,
-  0xc2c0, 0xdfb9, 0xc2f0, 0xbefd, 0xc1df, 0xcdcc, 0xd2f7, 0xb7cd,
-  0xdfc1, 0xdfc4, 0xb7f1, 0xb0c9, 0xb6d6, 0xb7d4, 0xbaac, 0xccfd,
-  0xbfd4, 0xcbb1, 0xc6f4, 0xd6a8, 0xdfc5, 0xcee2, 0xb3b3, 0xcefc,
-  0xb4b5, 0xcec7, 0xbaf0, 0xcee1, 0xd1bd, 0xdfc0, 0xb4f4, 0xb3ca,
-  0xb8e6, 0xdfbb, 0xc4c5, 0xdfbc, 0xdfbd, 0xdfbe, 0xc5bb, 0xdfbf,
-  0xdfc2, 0xd4b1, 0xdfc3, 0xc7ba, 0xced8, 0xc4d8, 0xdfca, 0xdfcf,
-  0xd6dc, 0xdfc9, 0xdfda, 0xceb6, 0xbac7, 0xdfce, 0xdfc8, 0xc5de,
-  0xc9eb, 0xbaf4, 0xc3fc, 0xbed7, 0xdfc6, 0xdfcd, 0xc5d8, 0xd5a6,
-  0xbacd, 0xbecc, 0xd3bd, 0xb8c0, 0xd6e4, 0xdfc7, 0xb9be, 0xbfa7,
-  0xc1fc, 0xdfcb, 0xdfcc, 0xdfd0, 0xdfdb, 0xdfe5, 0xdfd7, 0xdfd6,
-  0xd7c9, 0xdfe3, 0xdfe4, 0xe5eb, 0xd2a7, 0xdfd2, 0xbfa9, 0xd4db,
-  0xbfc8, 0xdfd4, 0xcfcc, 0xdfdd, 0xd1ca, 0xdfde, 0xb0a7, 0xc6b7,
-  0xdfd3, 0xbae5, 0xb6df, 0xcddb, 0xb9fe, 0xd4d5, 0xdfdf, 0xcfec,
-  0xb0a5, 0xdfe7, 0xdfd1, 0xd1c6, 0xdfd5, 0xdfd8, 0xdfd9, 0xdfdc,
-  0xbba9, 0xdfe0, 0xdfe1, 0xdfe2, 0xdfe6, 0xdfe8, 0xd3b4, 0xb8e7,
-  0xc5b6, 0xdfea, 0xc9da, 0xc1a8, 0xc4c4, 0xbfde, 0xcff8, 0xd5dc,
-  0xdfee, 0xb2b8, 0xbadf, 0xdfec, 0xdbc1, 0xd1e4, 0xcbf4, 0xb4bd,
-  0xb0a6, 0xdff1, 0xccc6, 0xdff2, 0xdfed, 0xdfe9, 0xdfeb, 0xdfef,
-  0xdff0, 0xbbbd, 0xdff3, 0xdff4, 0xbba3, 0xcadb, 0xcea8, 0xe0a7,
-  0xb3aa, 0xe0a6, 0xe0a1, 0xdffe, 0xcdd9, 0xdffc, 0xdffa, 0xbfd0,
-  0xd7c4, 0xc9cc, 0xdff8, 0xb0a1, 0xdffd, 0xdffb, 0xe0a2, 0xe0a8,
-  0xb7c8, 0xc6a1, 0xc9b6, 0xc0b2, 0xdff5, 0xc5be, 0xd8c4, 0xdff9,
-  0xc4f6, 0xe0a3, 0xe0a4, 0xe0a5, 0xd0a5, 0xe0b4, 0xcce4, 0xe0b1,
-  0xbfa6, 0xe0af, 0xceb9, 0xe0ab, 0xc9c6, 0xc0ae, 0xe0ae, 0xbaed,
-  0xbab0, 0xe0a9, 0xdff6, 0xe0b3, 0xe0b8, 0xb4ad, 0xe0b9, 0xcfb2,
-  0xbac8, 0xe0b0, 0xd0fa, 0xe0ac, 0xd4fb, 0xdff7, 0xc5e7, 0xe0ad,
-  0xd3f7, 0xe0b6, 0xe0b7, 0xe0c4, 0xd0e1, 0xe0bc, 0xe0c9, 0xe0ca,
-  0xe0be, 0xe0aa, 0xc9a4, 0xe0c1, 0xe0b2, 0xcac8, 0xe0c3, 0xe0b5,
-  0xcecb, 0xcbc3, 0xe0cd, 0xe0c6, 0xe0c2, 0xe0cb, 0xe0ba, 0xe0bf,
-  0xe0c0, 0xe0c5, 0xe0c7, 0xe0c8, 0xe0cc, 0xe0bb, 0xcbd4, 0xe0d5,
-  0xe0d6, 0xe0d2, 0xe0d0, 0xbcce, 0xe0d1, 0xb8c2, 0xd8c5, 0xd0ea,
-  0xc2ef, 0xe0cf, 0xe0bd, 0xe0d4, 0xe0d3, 0xe0d7, 0xe0dc, 0xe0d8,
-  0xd6f6, 0xb3b0, 0xd7ec, 0xcbbb, 0xe0da, 0xcefb, 0xbad9, 0xe0e1,
-  0xe0dd, 0xd2ad, 0xe0e2, 0xe0db, 0xe0d9, 0xe0df, 0xe0e0, 0xe0de,
-  0xe0e4, 0xc6f7, 0xd8ac, 0xd4eb, 0xe0e6, 0xcac9, 0xe0e5, 0xb8c1,
-  0xe0e7, 0xe0e8, 0xe0e9, 0xe0e3, 0xbabf, 0xcce7, 0xe0ea, 0xcff9,
-  0xe0eb, 0xc8c2, 0xbdc0, 0xc4d2, 0xe0ec, 0xe0ed, 0xc7f4, 0xcbc4,
-  0xe0ee, 0xbbd8, 0xd8b6, 0xd2f2, 0xe0ef, 0xcdc5, 0xb6da, 0xe0f1,
-  0xd4b0, 0xc0a7, 0xb4d1, 0xcea7, 0xe0f0, 0xe0f2, 0xb9cc, 0xb9fa,
-  0xcdbc, 0xe0f3, 0xc6d4, 0xe0f4, 0xd4b2, 0xc8a6, 0xe0f6, 0xe0f5,
-  0xe0f7, 0xcdc1, 0xcaa5, 0xd4da, 0xdbd7, 0xdbd9, 0xdbd8, 0xb9e7,
-  0xdbdc, 0xdbdd, 0xb5d8, 0xdbda, 0xdbdb, 0xb3a1, 0xdbdf, 0xbbf8,
-  0xd6b7, 0xdbe0, 0xbef9, 0xb7bb, 0xdbd0, 0xccae, 0xbfb2, 0xbbb5,
-  0xd7f8, 0xbfd3, 0xbfe9, 0xbce1, 0xccb3, 0xdbde, 0xb0d3, 0xceeb,
-  0xb7d8, 0xd7b9, 0xc6c2, 0xc0a4, 0xccb9, 0xdbe7, 0xdbe1, 0xc6ba,
-  0xdbe3, 0xdbe8, 0xc5f7, 0xdbea, 0xdbe9, 0xbfc0, 0xdbe6, 0xdbe5,
-  0xb4b9, 0xc0ac, 0xc2a2, 0xdbe2, 0xdbe4, 0xd0cd, 0xdbed, 0xc0dd,
-  0xdbf2, 0xb6e2, 0xdbf3, 0xdbd2, 0xb9b8, 0xd4ab, 0xdbec, 0xbfd1,
-  0xdbf0, 0xdbd1, 0xb5e6, 0xdbeb, 0xbfe5, 0xdbee, 0xdbf1, 0xdbf9,
-  0xb9a1, 0xb0a3, 0xc2f1, 0xb3c7, 0xdbef, 0xdbf8, 0xc6d2, 0xdbf4,
-  0xdbf5, 0xdbf7, 0xdbf6, 0xdbfe, 0xd3f2, 0xb2ba, 0xdbfd, 0xdca4,
-  0xdbfb, 0xdbfa, 0xdbfc, 0xc5e0, 0xbbf9, 0xdca3, 0xdca5, 0xccc3,
-  0xb6d1, 0xddc0, 0xdca1, 0xdca2, 0xc7b5, 0xb6e9, 0xdca7, 0xdca6,
-  0xdca9, 0xb1a4, 0xb5cc, 0xbfb0, 0xd1df, 0xb6c2, 0xdca8, 0xcbfa,
-  0xebf3, 0xcbdc, 0xcbfe, 0xccc1, 0xc8fb, 0xdcaa, 0xccee, 0xdcab,
-  0xdbd3, 0xdcaf, 0xdcac, 0xbeb3, 0xcafb, 0xdcad, 0xc9ca, 0xc4b9,
-  0xc7bd, 0xdcae, 0xd4f6, 0xd0e6, 0xc4ab, 0xb6d5, 0xdbd4, 0xb1da,
-  0xdbd5, 0xdbd6, 0xbabe, 0xc8c0, 0xcabf, 0xc8c9, 0xd7b3, 0xc9f9,
-  0xbfc7, 0xbaf8, 0xd2bc, 0xe2ba, 0xb4a6, 0xb1b8, 0xb8b4, 0xcfc4,
-  0xd9e7, 0xcfa6, 0xcde2, 0xd9ed, 0xb6e0, 0xd2b9, 0xb9bb, 0xe2b9,
-  0xe2b7, 0xb4f3, 0xccec, 0xccab, 0xb7f2, 0xd8b2, 0xd1eb, 0xbabb,
-  0xcaa7, 0xcdb7, 0xd2c4, 0xbfe4, 0xbcd0, 0xb6e1, 0xdec5, 0xdec6,
-  0xdbbc, 0xd1d9, 0xc6e6, 0xc4ce, 0xb7ee, 0xb7dc, 0xbffc, 0xd7e0,
-  0xc6f5, 0xb1bc, 0xdec8, 0xbdb1, 0xccd7, 0xdeca, 0xdec9, 0xb5ec,
-  0xc9dd, 0xb0c2, 0xc5ae, 0xc5ab, 0xc4cc, 0xbce9, 0xcbfd, 0xbac3,
-  0xe5f9, 0xc8e7, 0xe5fa, 0xcdfd, 0xd7b1, 0xb8be, 0xc2e8, 0xc8d1,
-  0xe5fb, 0xb6ca, 0xbccb, 0xd1fd, 0xe6a1, 0xc3ee, 0xe6a4, 0xe5fe,
-  0xe6a5, 0xcdd7, 0xb7c1, 0xe5fc, 0xe5fd, 0xe6a3, 0xc4dd, 0xe6a8,
-  0xe6a7, 0xc3c3, 0xc6de, 0xe6aa, 0xc4b7, 0xe6a2, 0xcabc, 0xbde3,
-  0xb9c3, 0xe6a6, 0xd0d5, 0xceaf, 0xe6a9, 0xe6b0, 0xd2a6, 0xbdaa,
-  0xe6ad, 0xe6af, 0xc0d1, 0xd2cc, 0xbca7, 0xe6b1, 0xd2f6, 0xd7cb,
-  0xcdfe, 0xcdde, 0xc2a6, 0xe6ab, 0xe6ac, 0xbdbf, 0xe6ae, 0xe6b3,
-  0xe6b2, 0xe6b6, 0xe6b8, 0xc4ef, 0xc4c8, 0xbeea, 0xc9ef, 0xe6b7,
-  0xb6f0, 0xc3e4, 0xd3e9, 0xe6b4, 0xe6b5, 0xc8a2, 0xe6bd, 0xe6b9,
-  0xc6c5, 0xcdf1, 0xe6bb, 0xe6bc, 0xbbe9, 0xe6be, 0xe6ba, 0xc0b7,
-  0xd3a4, 0xe6bf, 0xc9f4, 0xe6c3, 0xe6c4, 0xd0f6, 0xc3bd, 0xc3c4,
-  0xe6c2, 0xe6c1, 0xe6c7, 0xcfb1, 0xebf4, 0xe6ca, 0xe6c5, 0xbcde,
-  0xc9a9, 0xbcb5, 0xcfd3, 0xe6c8, 0xe6c9, 0xe6ce, 0xe6d0, 0xe6d1,
-  0xe6cb, 0xb5d5, 0xe6cc, 0xe6cf, 0xc4db, 0xe6c6, 0xe6cd, 0xe6d2,
-  0xe6d4, 0xe6d3, 0xe6d5, 0xd9f8, 0xe6d6, 0xe6d7, 0xd7d3, 0xe6dd,
-  0xe6de, 0xbfd7, 0xd4d0, 0xd7d6, 0xb4e6, 0xcbef, 0xe6da, 0xd8c3,
-  0xd7ce, 0xd0a2, 0xc3cf, 0xe6df, 0xbcbe, 0xb9c2, 0xe6db, 0xd1a7,
-  0xbaa2, 0xc2cf, 0xd8ab, 0xcaeb, 0xe5ee, 0xe6dc, 0xb7f5, 0xc8e6,
-  0xc4f5, 0xe5b2, 0xc4fe, 0xcbfc, 0xe5b3, 0xd5ac, 0xd3ee, 0xcad8,
-  0xb0b2, 0xcbce, 0xcdea, 0xbaea, 0xe5b5, 0xe5b4, 0xd7da, 0xb9d9,
-  0xd6e6, 0xb6a8, 0xcdf0, 0xd2cb, 0xb1a6, 0xcab5, 0xb3e8, 0xc9f3,
-  0xbfcd, 0xd0fb, 0xcad2, 0xe5b6, 0xbbc2, 0xcfdc, 0xb9ac, 0xd4d7,
-  0xbaa6, 0xd1e7, 0xcffc, 0xbcd2, 0xe5b7, 0xc8dd, 0xbfed, 0xb1f6,
-  0xcbde, 0xbcc5, 0xbcc4, 0xd2fa, 0xc3dc, 0xbfdc, 0xb8bb, 0xc3c2,
-  0xbaae, 0xd4a2, 0xc7de, 0xc4af, 0xb2ec, 0xb9d1, 0xe5bb, 0xc1c8,
-  0xd5af, 0xe5bc, 0xe5be, 0xb4e7, 0xb6d4, 0xcbc2, 0xd1b0, 0xb5bc,
-  0xcad9, 0xb7e2, 0xc9e4, 0xbdab, 0xcebe, 0xd7f0, 0xd0a1, 0xc9d9,
-  0xb6fb, 0xe6d8, 0xbce2, 0xb3be, 0xc9d0, 0xe6d9, 0xb3a2, 0xdecc,
-  0xd3c8, 0xdecd, 0xd2a2, 0xdece, 0xbecd, 0xdecf, 0xcaac, 0xd2fc,
-  0xb3df, 0xe5ea, 0xc4e1, 0xbea1, 0xceb2, 0xc4f2, 0xbed6, 0xc6a8,
-  0xb2e3, 0xbed3, 0xc7fc, 0xcceb, 0xbdec, 0xcedd, 0xcaba, 0xc6c1,
-  0xe5ec, 0xd0bc, 0xd5b9, 0xe5ed, 0xcaf4, 0xcdc0, 0xc2c5, 0xe5ef,
-  0xc2c4, 0xe5f0, 0xe5f8, 0xcdcd, 0xc9bd, 0xd2d9, 0xe1a8, 0xd3ec,
-  0xcbea, 0xc6f1, 0xe1ac, 0xe1a7, 0xe1a9, 0xe1aa, 0xe1af, 0xb2ed,
-  0xe1ab, 0xb8da, 0xe1ad, 0xe1ae, 0xe1b0, 0xb5ba, 0xe1b1, 0xe1b3,
-  0xe1b8, 0xd1d2, 0xe1b6, 0xe1b5, 0xc1eb, 0xe1b7, 0xd4c0, 0xe1b2,
-  0xe1ba, 0xb0b6, 0xe1b4, 0xbff9, 0xe1b9, 0xe1bb, 0xe1be, 0xe1bc,
-  0xd6c5, 0xcfbf, 0xe1bd, 0xe1bf, 0xc2cd, 0xb6eb, 0xd3f8, 0xc7cd,
-  0xb7e5, 0xbefe, 0xe1c0, 0xe1c1, 0xe1c7, 0xb3e7, 0xc6e9, 0xb4de,
-  0xd1c2, 0xe1c8, 0xe1c6, 0xe1c5, 0xe1c3, 0xe1c2, 0xb1c0, 0xd5b8,
-  0xe1c4, 0xe1cb, 0xe1cc, 0xe1ca, 0xeffa, 0xe1d3, 0xe1d2, 0xc7b6,
-  0xe1c9, 0xe1ce, 0xe1d0, 0xe1d4, 0xe1d1, 0xe1cd, 0xe1cf, 0xe1d5,
-  0xe1d6, 0xe1d7, 0xe1d8, 0xe1da, 0xe1db, 0xcea1, 0xe7dd, 0xb4a8,
-  0xd6dd, 0xd1b2, 0xb3b2, 0xb9a4, 0xd7f3, 0xc7c9, 0xbede, 0xb9ae,
-  0xced7, 0xb2ee, 0xdbcf, 0xbcba, 0xd2d1, 0xcbc8, 0xb0cd, 0xcfef,
-  0xd9e3, 0xbded, 0xb1d2, 0xcad0, 0xb2bc, 0xcba7, 0xb7ab, 0xcaa6,
-  0xcfa3, 0xe0f8, 0xd5ca, 0xe0fb, 0xe0fa, 0xc5c1, 0xccfb, 0xc1b1,
-  0xe0f9, 0xd6e3, 0xb2af, 0xd6c4, 0xb5db, 0xb4f8, 0xd6a1, 0xcfaf,
-  0xb0ef, 0xe0fc, 0xe1a1, 0xb3a3, 0xe0fd, 0xe0fe, 0xc3b1, 0xc3dd,
-  0xe1a2, 0xb7f9, 0xbbcf, 0xe1a3, 0xc4bb, 0xe1a4, 0xe1a5, 0xe1a6,
-  0xb4b1, 0xb8c9, 0xc6bd, 0xc4ea, 0xb2a2, 0xd0d2, 0xe7db, 0xbbc3,
-  0xd3d7, 0xd3c4, 0xb9e3, 0xe2cf, 0xd7af, 0xc7ec, 0xb1d3, 0xb4b2,
-  0xe2d1, 0xd0f2, 0xc2ae, 0xe2d0, 0xbfe2, 0xd3a6, 0xb5d7, 0xe2d2,
-  0xb5ea, 0xc3ed, 0xb8fd, 0xb8ae, 0xc5d3, 0xb7cf, 0xe2d4, 0xe2d3,
-  0xb6c8, 0xd7f9, 0xcda5, 0xe2d8, 0xe2d6, 0xcafc, 0xbfb5, 0xd3b9,
-  0xe2d5, 0xe2d7, 0xc1ae, 0xc0c8, 0xe2db, 0xe2da, 0xc0aa, 0xc1ce,
-  0xe2dc, 0xe2dd, 0xe2de, 0xdbc8, 0xd1d3, 0xcda2, 0xbda8, 0xdec3,
-  0xd8a5, 0xbfaa, 0xdbcd, 0xd2ec, 0xc6fa, 0xc5aa, 0xdec4, 0xb1d7,
-  0xdfae, 0xcabd, 0xdfb1, 0xb9ad, 0xd2fd, 0xb8a5, 0xbaeb, 0xb3da,
-  0xb5dc, 0xd5c5, 0xc3d6, 0xcfd2, 0xbba1, 0xe5f3, 0xe5f2, 0xe5f4,
-  0xcde4, 0xc8f5, 0xb5af, 0xc7bf, 0xe5f6, 0xecb0, 0xe5e6, 0xb9e9,
-  0xb5b1, 0xc2bc, 0xe5e8, 0xe5e7, 0xe5e9, 0xd2cd, 0xe1ea, 0xd0ce,
-  0xcdae, 0xd1e5, 0xb2ca, 0xb1eb, 0xb1f2, 0xc5ed, 0xd5c3, 0xd3b0,
-  0xe1dc, 0xe1dd, 0xd2db, 0xb3b9, 0xb1cb, 0xcdf9, 0xd5f7, 0xe1de,
-  0xbeb6, 0xb4fd, 0xe1df, 0xbadc, 0xe1e0, 0xbbb2, 0xc2c9, 0xe1e1,
-  0xd0ec, 0xcdbd, 0xe1e2, 0xb5c3, 0xc5c7, 0xe1e3, 0xe1e4, 0xd3f9,
-  0xe1e5, 0xd1ad, 0xe1e6, 0xcea2, 0xe1e7, 0xb5c2, 0xe1e8, 0xbbd5,
-  0xd0c4, 0xe2e0, 0xb1d8, 0xd2e4, 0xe2e1, 0xbcc9, 0xc8cc, 0xe2e3,
-  0xecfe, 0xecfd, 0xdfaf, 0xe2e2, 0xd6be, 0xcdfc, 0xc3a6, 0xe3c3,
-  0xd6d2, 0xe2e7, 0xe2e8, 0xd3c7, 0xe2ec, 0xbfec, 0xe2ed, 0xe2e5,
-  0xb3c0, 0xc4ee, 0xe2ee, 0xd0c3, 0xbaf6, 0xe2e9, 0xb7de, 0xbbb3,
-  0xccac, 0xcbcb, 0xe2e4, 0xe2e6, 0xe2ea, 0xe2eb, 0xe2f7, 0xe2f4,
-  0xd4f5, 0xe2f3, 0xc5ad, 0xd5fa, 0xc5c2, 0xb2c0, 0xe2ef, 0xe2f2,
-  0xc1af, 0xcbbc, 0xb5a1, 0xe2f9, 0xbcb1, 0xe2f1, 0xd0d4, 0xd4b9,
-  0xe2f5, 0xb9d6, 0xe2f6, 0xc7d3, 0xe2f0, 0xd7dc, 0xeda1, 0xe2f8,
-  0xeda5, 0xe2fe, 0xcad1, 0xc1b5, 0xbbd0, 0xbfd6, 0xbae3, 0xcba1,
-  0xeda6, 0xeda3, 0xeda2, 0xbbd6, 0xeda7, 0xd0f4, 0xeda4, 0xbade,
-  0xb6f7, 0xe3a1, 0xb6b2, 0xccf1, 0xb9a7, 0xcfa2, 0xc7a1, 0xbfd2,
-  0xb6f1, 0xe2fa, 0xe2fb, 0xe2fd, 0xe2fc, 0xc4d5, 0xe3a2, 0xd3c1,
-  0xe3a7, 0xc7c4, 0xcfa4, 0xe3a9, 0xbab7, 0xe3a8, 0xbbda, 0xe3a3,
-  0xe3a4, 0xe3aa, 0xe3a6, 0xcef2, 0xd3c6, 0xbbbc, 0xd4c3, 0xc4fa,
-  0xeda8, 0xd0fc, 0xe3a5, 0xc3f5, 0xe3ad, 0xb1af, 0xe3b2, 0xbcc2,
-  0xe3ac, 0xb5bf, 0xc7e9, 0xe3b0, 0xbeaa, 0xcdef, 0xbbf3, 0xcce8,
-  0xe3af, 0xe3b1, 0xcfa7, 0xe3ae, 0xcea9, 0xbbdd, 0xb5eb, 0xbee5,
-  0xb2d2, 0xb3cd, 0xb1b9, 0xe3ab, 0xb2d1, 0xb5ac, 0xb9df, 0xb6e8,
-  0xcfeb, 0xe3b7, 0xbbcc, 0xc8c7, 0xd0ca, 0xe3b8, 0xb3ee, 0xeda9,
-  0xd3fa, 0xd3e4, 0xedaa, 0xe3b9, 0xd2e2, 0xe3b5, 0xd3de, 0xb8d0,
-  0xe3b3, 0xe3b6, 0xb7df, 0xe3b4, 0xc0a2, 0xe3ba, 0xd4b8, 0xb4c8,
-  0xe3bb, 0xbbc5, 0xc9f7, 0xc9e5, 0xc4bd, 0xedab, 0xc2fd, 0xbbdb,
-  0xbfae, 0xcebf, 0xe3bc, 0xbfb6, 0xb1ef, 0xd4f7, 0xe3be, 0xedad,
-  0xe3bf, 0xbaa9, 0xedac, 0xe3bd, 0xe3c0, 0xbab6, 0xb6ae, 0xd0b8,
-  0xb0c3, 0xedae, 0xedaf, 0xc0c1, 0xe3c1, 0xc5b3, 0xe3c2, 0xdcb2,
-  0xedb0, 0xb8ea, 0xceec, 0xeaa7, 0xd0e7, 0xcaf9, 0xc8d6, 0xcfb7,
-  0xb3c9, 0xced2, 0xbde4, 0xe3de, 0xbbf2, 0xeaa8, 0xd5bd, 0xc6dd,
-  0xeaa9, 0xeaaa, 0xeaac, 0xeaab, 0xeaae, 0xeaad, 0xbdd8, 0xeaaf,
-  0xc2be, 0xb4c1, 0xb4f7, 0xbba7, 0xece6, 0xece5, 0xb7bf, 0xcbf9,
-  0xb1e2, 0xece7, 0xc9c8, 0xece8, 0xece9, 0xcad6, 0xded0, 0xb2c5,
-  0xd4fa, 0xc6cb, 0xb0c7, 0xb4f2, 0xc8d3, 0xcdd0, 0xbfb8, 0xbfdb,
-  0xc7a4, 0xd6b4, 0xc0a9, 0xded1, 0xc9a8, 0xd1ef, 0xc5a4, 0xb0e7,
-  0xb3b6, 0xc8c5, 0xb0e2, 0xb7f6, 0xc5fa, 0xb6f3, 0xd5d2, 0xb3d0,
-  0xbcbc, 0xb3ad, 0xbef1, 0xb0d1, 0xd2d6, 0xcae3, 0xd7a5, 0xcdb6,
-  0xb6b6, 0xbfb9, 0xd5db, 0xb8a7, 0xc5d7, 0xded2, 0xbfd9, 0xc2d5,
-  0xc7c0, 0xbba4, 0xb1a8, 0xc5ea, 0xc5fb, 0xcca7, 0xb1a7, 0xb5d6,
-  0xc4a8, 0xded3, 0xd1ba, 0xb3e9, 0xc3f2, 0xb7f7, 0xd6f4, 0xb5a3,
-  0xb2f0, 0xc4b4, 0xc4e9, 0xc0ad, 0xded4, 0xb0e8, 0xc5c4, 0xc1e0,
-  0xb9d5, 0xbedc, 0xcdd8, 0xb0ce, 0xcdcf, 0xded6, 0xbed0, 0xd7be,
-  0xded5, 0xd5d0, 0xb0dd, 0xc4e2, 0xc2a3, 0xbcf0, 0xd3b5, 0xc0b9,
-  0xc5a1, 0xb2a6, 0xd4f1, 0xc0a8, 0xcac3, 0xded7, 0xd5fc, 0xb9b0,
-  0xc8ad, 0xcba9, 0xded9, 0xbfbd, 0xc6b4, 0xd7a7, 0xcab0, 0xc4c3,
-  0xb3d6, 0xb9d2, 0xd6b8, 0xeafc, 0xb0b4, 0xbfe6, 0xccf4, 0xcdda,
-  0xd6bf, 0xc2ce, 0xcece, 0xcca2, 0xd0ae, 0xc4d3, 0xb5b2, 0xded8,
-  0xd5f5, 0xbcb7, 0xbbd3, 0xb0a4, 0xc5b2, 0xb4ec, 0xd5f1, 0xeafd,
-  0xdeda, 0xcda6, 0xcdec, 0xcee6, 0xdedc, 0xcdb1, 0xc0a6, 0xd7bd,
-  0xdedb, 0xb0c6, 0xbab4, 0xc9d3, 0xc4f3, 0xbee8, 0xb2b6, 0xc0cc,
-  0xcbf0, 0xbcf1, 0xbbbb, 0xb5b7, 0xc5f5, 0xdee6, 0xdee3, 0xbedd,
-  0xdedf, 0xb4b7, 0xbddd, 0xdee0, 0xc4ed, 0xcfc6, 0xb5e0, 0xb6de,
-  0xcada, 0xb5f4, 0xdee5, 0xd5c6, 0xdee1, 0xcccd, 0xc6fe, 0xc5c5,
-  0xd2b4, 0xbef2, 0xc2d3, 0xccbd, 0xb3b8, 0xbdd3, 0xbfd8, 0xcdc6,
-  0xd1da, 0xb4eb, 0xdee4, 0xdedd, 0xdee7, 0xeafe, 0xc2b0, 0xdee2,
-  0xd6c0, 0xb5a7, 0xb2f4, 0xdee8, 0xdef2, 0xdeed, 0xdef1, 0xc8e0,
-  0xd7e1, 0xdeef, 0xc3e8, 0xcce1, 0xb2e5, 0xd2be, 0xdeee, 0xdeeb,
-  0xced5, 0xb4a7, 0xbfab, 0xbebe, 0xbdd2, 0xdee9, 0xd4ae, 0xdede,
-  0xdeea, 0xc0bf, 0xdeec, 0xb2f3, 0xb8e9, 0xc2a7, 0xbdc1, 0xdef5,
-  0xdef8, 0xb2ab, 0xb4a4, 0xb4ea, 0xc9a6, 0xdef6, 0xcbd1, 0xb8e3,
-  0xdef7, 0xdefa, 0xdef9, 0xccc2, 0xb0e1, 0xb4ee, 0xe5ba, 0xd0af,
-  0xb2eb, 0xeba1, 0xdef4, 0xc9e3, 0xdef3, 0xb0da, 0xd2a1, 0xb1f7,
-  0xccaf, 0xdef0, 0xcba4, 0xd5aa, 0xdefb, 0xb4dd, 0xc4a6, 0xdefd,
-  0xc3fe, 0xc4a1, 0xdfa1, 0xc1cc, 0xdefc, 0xbeef, 0xc6b2, 0xb3c5,
-  0xc8f6, 0xcbba, 0xdefe, 0xdfa4, 0xd7b2, 0xb3b7, 0xc1c3, 0xc7cb,
-  0xb2a5, 0xb4e9, 0xd7ab, 0xc4ec, 0xdfa2, 0xdfa3, 0xdfa5, 0xbab3,
-  0xdfa6, 0xc0de, 0xc9c3, 0xb2d9, 0xc7e6, 0xdfa7, 0xc7dc, 0xdfa8,
-  0xeba2, 0xcbd3, 0xdfaa, 0xdfa9, 0xb2c1, 0xc5ca, 0xdfab, 0xd4dc,
-  0xc8c1, 0xdfac, 0xbef0, 0xdfad, 0xd6a7, 0xeab7, 0xebb6, 0xcad5,
-  0xd8fc, 0xb8c4, 0xb9a5, 0xb7c5, 0xd5fe, 0xb9ca, 0xd0a7, 0xf4cd,
-  0xb5d0, 0xc3f4, 0xbec8, 0xebb7, 0xb0bd, 0xbdcc, 0xc1b2, 0xb1d6,
-  0xb3a8, 0xb8d2, 0xc9a2, 0xb6d8, 0xebb8, 0xbeb4, 0xcafd, 0xc7c3,
-  0xd5fb, 0xb7f3, 0xcec4, 0xd5ab, 0xb1f3, 0xecb3, 0xb0df, 0xecb5,
-  0xb6b7, 0xc1cf, 0xf5fa, 0xd0b1, 0xd5e5, 0xced3, 0xbdef, 0xb3e2,
-  0xb8ab, 0xd5b6, 0xedbd, 0xb6cf, 0xcbb9, 0xd0c2, 0xb7bd, 0xecb6,
-  0xcaa9, 0xc5d4, 0xecb9, 0xecb8, 0xc2c3, 0xecb7, 0xd0fd, 0xecba,
-  0xecbb, 0xd7e5, 0xecbc, 0xecbd, 0xc6ec, 0xcede, 0xbcc8, 0xc8d5,
-  0xb5a9, 0xbec9, 0xd6bc, 0xd4e7, 0xd1ae, 0xd0f1, 0xeab8, 0xeab9,
-  0xeaba, 0xbab5, 0xcab1, 0xbff5, 0xcdfa, 0xeac0, 0xb0ba, 0xeabe,
-  0xc0a5, 0xeabb, 0xb2fd, 0xc3f7, 0xbbe8, 0xd2d7, 0xcef4, 0xeabf,
-  0xeabc, 0xeac3, 0xd0c7, 0xd3b3, 0xb4ba, 0xc3c1, 0xd7f2, 0xd5d1,
-  0xcac7, 0xeac5, 0xeac4, 0xeac7, 0xeac6, 0xd6e7, 0xcfd4, 0xeacb,
-  0xbbce, 0xbdfa, 0xc9ce, 0xeacc, 0xc9b9, 0xcffe, 0xeaca, 0xd4ce,
-  0xeacd, 0xeacf, 0xcded, 0xeac9, 0xeace, 0xceee, 0xbbde, 0xb3bf,
-  0xc6d5, 0xbeb0, 0xcefa, 0xc7e7, 0xbea7, 0xead0, 0xd6c7, 0xc1c0,
-  0xd4dd, 0xead1, 0xcfbe, 0xead2, 0xcaee, 0xc5af, 0xb0b5, 0xead4,
-  0xead3, 0xf4df, 0xc4ba, 0xb1a9, 0xe5df, 0xead5, 0xcaef, 0xead6,
-  0xead7, 0xc6d8, 0xead8, 0xead9, 0xd4bb, 0xc7fa, 0xd2b7, 0xb8fc,
-  0xeac2, 0xb2dc, 0xc2fc, 0xd4f8, 0xcce6, 0xd7ee, 0xd4c2, 0xd3d0,
-  0xebc3, 0xc5f3, 0xb7fe, 0xebd4, 0xcbb7, 0xebde, 0xc0ca, 0xcdfb,
-  0xb3af, 0xc6da, 0xebfc, 0xc4be, 0xceb4, 0xc4a9, 0xb1be, 0xd4fd,
-  0xcaf5, 0xd6ec, 0xc6d3, 0xb6e4, 0xbbfa, 0xd0e0, 0xc9b1, 0xd4d3,
-  0xc8a8, 0xb8cb, 0xe8be, 0xc9bc, 0xe8bb, 0xc0ee, 0xd0d3, 0xb2c4,
-  0xb4e5, 0xe8bc, 0xd5c8, 0xb6c5, 0xe8bd, 0xcaf8, 0xb8dc, 0xccf5,
-  0xc0b4, 0xd1ee, 0xe8bf, 0xe8c2, 0xbabc, 0xb1ad, 0xbddc, 0xeabd,
-  0xe8c3, 0xe8c6, 0xe8cb, 0xe8cc, 0xcbc9, 0xb0e5, 0xbcab, 0xb9b9,
-  0xe8c1, 0xcdf7, 0xe8ca, 0xcef6, 0xd5ed, 0xc1d6, 0xe8c4, 0xc3b6,
-  0xb9fb, 0xd6a6, 0xe8c8, 0xcae0, 0xd4e6, 0xe8c0, 0xe8c5, 0xe8c7,
-  0xc7b9, 0xb7e3, 0xe8c9, 0xbfdd, 0xe8d2, 0xe8d7, 0xe8d5, 0xbcdc,
-  0xbccf, 0xe8db, 0xe8de, 0xe8da, 0xb1fa, 0xb0d8, 0xc4b3, 0xb8cc,
-  0xc6e2, 0xc8be, 0xc8e1, 0xe8cf, 0xe8d4, 0xe8d6, 0xb9f1, 0xe8d8,
-  0xd7f5, 0xc4fb, 0xe8dc, 0xb2e9, 0xe8d1, 0xbced, 0xbfc2, 0xe8cd,
-  0xd6f9, 0xc1f8, 0xb2f1, 0xe8df, 0xcac1, 0xe8d9, 0xd5a4, 0xb1ea,
-  0xd5bb, 0xe8ce, 0xe8d0, 0xb6b0, 0xe8d3, 0xe8dd, 0xc0b8, 0xcaf7,
-  0xcba8, 0xc6dc, 0xc0f5, 0xe8e9, 0xd0a3, 0xe8f2, 0xd6ea, 0xe8e0,
-  0xe8e1, 0xd1f9, 0xbacb, 0xb8f9, 0xb8f1, 0xd4d4, 0xe8ef, 0xe8ee,
-  0xe8ec, 0xb9f0, 0xccd2, 0xe8e6, 0xcea6, 0xbff2, 0xb0b8, 0xe8f1,
-  0xe8f0, 0xd7c0, 0xe8e4, 0xcda9, 0xc9a3, 0xbbb8, 0xbddb, 0xe8ea,
-  0xe8e2, 0xe8e3, 0xe8e5, 0xb5b5, 0xe8e7, 0xc7c5, 0xe8eb, 0xe8ed,
-  0xbdb0, 0xd7ae, 0xe8f8, 0xe8f5, 0xcdb0, 0xe8f6, 0xc1ba, 0xe8e8,
-  0xc3b7, 0xb0f0, 0xe8f4, 0xe8f7, 0xb9a3, 0xc9d2, 0xc3ce, 0xcee0,
-  0xc0e6, 0xcbf3, 0xccdd, 0xd0b5, 0xcae1, 0xe8f3, 0xbcec, 0xe8f9,
-  0xc3de, 0xc6e5, 0xb9f7, 0xb0f4, 0xd7d8, 0xbcac, 0xc5ef, 0xccc4,
-  0xe9a6, 0xc9ad, 0xe9a2, 0xc0e2, 0xbfc3, 0xe8fe, 0xb9d7, 0xe8fb,
-  0xe9a4, 0xd2ce, 0xe9a3, 0xd6b2, 0xd7b5, 0xe9a7, 0xbdb7, 0xe8fc,
-  0xe8fd, 0xe9a1, 0xcdd6, 0xd2ac, 0xe9b2, 0xe9a9, 0xb4aa, 0xb4bb,
-  0xe9ab, 0xd0a8, 0xe9a5, 0xb3fe, 0xe9ac, 0xc0e3, 0xe9aa, 0xe9b9,
-  0xe9b8, 0xe9ae, 0xe8fa, 0xe9a8, 0xbfac, 0xe9b1, 0xe9ba, 0xc2a5,
-  0xe9af, 0xb8c5, 0xe9ad, 0xd3dc, 0xe9b4, 0xe9b5, 0xe9b7, 0xe9c7,
-  0xc0c6, 0xe9c5, 0xe9b0, 0xe9bb, 0xb0f1, 0xe9bc, 0xd5a5, 0xe9be,
-  0xe9bf, 0xe9c1, 0xc1f1, 0xc8b6, 0xe9bd, 0xe9c2, 0xe9c3, 0xe9b3,
-  0xe9b6, 0xbbb1, 0xe9c0, 0xbcf7, 0xe9c4, 0xe9c6, 0xe9ca, 0xe9ce,
-  0xb2db, 0xe9c8, 0xb7ae, 0xe9cb, 0xe9cc, 0xd5c1, 0xc4a3, 0xe9d8,
-  0xbae1, 0xe9c9, 0xd3a3, 0xe9d4, 0xe9d7, 0xe9d0, 0xe9cf, 0xc7c1,
-  0xe9d2, 0xe9d9, 0xb3c8, 0xe9d3, 0xcff0, 0xe9cd, 0xb3f7, 0xe9d6,
-  0xe9da, 0xccb4, 0xcfad, 0xe9d5, 0xe9dc, 0xe9db, 0xe9de, 0xe9d1,
-  0xe9dd, 0xe9df, 0xc3ca, 0xc7b7, 0xb4ce, 0xbbb6, 0xd0c0, 0xeca3,
-  0xc5b7, 0xd3fb, 0xeca4, 0xeca5, 0xc6db, 0xbfee, 0xeca6, 0xeca7,
-  0xd0aa, 0xc7b8, 0xb8e8, 0xeca8, 0xd6b9, 0xd5fd, 0xb4cb, 0xb2bd,
-  0xcee4, 0xc6e7, 0xcde1, 0xb4f5, 0xcbc0, 0xbcdf, 0xe9e2, 0xe9e3,
-  0xd1ea, 0xe9e5, 0xb4f9, 0xe9e4, 0xd1b3, 0xcae2, 0xb2d0, 0xe9e8,
-  0xe9e6, 0xe9e7, 0xd6b3, 0xe9e9, 0xe9ea, 0xe9eb, 0xe9ec, 0xecaf,
-  0xc5b9, 0xb6ce, 0xd2f3, 0xb5ee, 0xbbd9, 0xecb1, 0xd2e3, 0xcee3,
-  0xc4b8, 0xc3bf, 0xb6be, 0xd8b9, 0xb1c8, 0xb1cf, 0xb1d1, 0xc5fe,
-  0xb1d0, 0xc3ab, 0xd5b1, 0xeba4, 0xbac1, 0xccba, 0xeba5, 0xeba7,
-  0xeba8, 0xeba6, 0xeba9, 0xebab, 0xebaa, 0xebac, 0xcacf, 0xd8b5,
-  0xc3f1, 0xc3a5, 0xc6f8, 0xebad, 0xc4ca, 0xebae, 0xebaf, 0xebb0,
-  0xb7d5, 0xb7fa, 0xebb1, 0xc7e2, 0xebb3, 0xbaa4, 0xd1f5, 0xb0b1,
-  0xebb2, 0xebb4, 0xb5aa, 0xc2c8, 0xc7e8, 0xebb5, 0xcbae, 0xe3df,
-  0xd3c0, 0xd9db, 0xcda1, 0xd6ad, 0xc7f3, 0xd9e0, 0xbbe3, 0xbaba,
-  0xe3e2, 0xcfab, 0xe3e0, 0xc9c7, 0xbab9, 0xd1b4, 0xe3e1, 0xc8ea,
-  0xb9af, 0xbdad, 0xb3d8, 0xcedb, 0xccc0, 0xe3e8, 0xe3e9, 0xcdf4,
-  0xccad, 0xbcb3, 0xe3ea, 0xe3eb, 0xd0da, 0xc6fb, 0xb7da, 0xc7df,
-  0xd2ca, 0xced6, 0xe3e4, 0xe3ec, 0xc9f2, 0xb3c1, 0xe3e7, 0xc6e3,
-  0xe3e5, 0xedb3, 0xe3e6, 0xc9b3, 0xc5e6, 0xb9b5, 0xc3bb, 0xe3e3,
-  0xc5bd, 0xc1a4, 0xc2d9, 0xb2d7, 0xe3ed, 0xbba6, 0xc4ad, 0xe3f0,
-  0xbeda, 0xe3fb, 0xe3f5, 0xbad3, 0xb7d0, 0xd3cd, 0xd6ce, 0xd5d3,
-  0xb9c1, 0xd5b4, 0xd1d8, 0xd0b9, 0xc7f6, 0xc8aa, 0xb2b4, 0xc3da,
-  0xe3ee, 0xe3fc, 0xe3ef, 0xb7a8, 0xe3f7, 0xe3f4, 0xb7ba, 0xc5a2,
-  0xe3f6, 0xc5dd, 0xb2a8, 0xc6fc, 0xc4e0, 0xd7a2, 0xc0e1, 0xe3f9,
-  0xe3fa, 0xe3fd, 0xcca9, 0xe3f3, 0xd3be, 0xb1c3, 0xedb4, 0xe3f1,
-  0xe3f2, 0xe3f8, 0xd0ba, 0xc6c3, 0xd4f3, 0xe3fe, 0xbde0, 0xe4a7,
-  0xe4a6, 0xd1f3, 0xe4a3, 0xe4a9, 0xc8f7, 0xcfb4, 0xe4a8, 0xe4ae,
-  0xc2e5, 0xb6b4, 0xbdf2, 0xe4a2, 0xbae9, 0xe4aa, 0xe4ac, 0xb6fd,
-  0xd6de, 0xe4b2, 0xe4ad, 0xe4a1, 0xbbee, 0xcddd, 0xc7a2, 0xc5c9,
-  0xc1f7, 0xe4a4, 0xc7b3, 0xbdac, 0xbdbd, 0xe4a5, 0xd7c7, 0xb2e2,
-  0xe4ab, 0xbcc3, 0xe4af, 0xbbeb, 0xe4b0, 0xc5a8, 0xe4b1, 0xd5e3,
-  0xbfa3, 0xe4ba, 0xe4b7, 0xe4bb, 0xe4bd, 0xc6d6, 0xbac6, 0xc0cb,
-  0xb8a1, 0xe4b4, 0xd4a1, 0xbaa3, 0xbdfe, 0xe4bc, 0xcdbf, 0xc4f9,
-  0xcffb, 0xc9e6, 0xd3bf, 0xcfd1, 0xe4b3, 0xe4b8, 0xe4b9, 0xcce9,
-  0xccce, 0xc0d4, 0xe4b5, 0xc1b0, 0xe4b6, 0xced0, 0xbbc1, 0xb5d3,
-  0xc8f3, 0xbda7, 0xd5c7, 0xc9ac, 0xb8a2, 0xe4ca, 0xe4cc, 0xd1c4,
-  0xd2ba, 0xbaad, 0xbad4, 0xe4c3, 0xb5ed, 0xd7cd, 0xe4c0, 0xcffd,
-  0xe4bf, 0xc1dc, 0xccca, 0xcae7, 0xc4d7, 0xccd4, 0xe4c8, 0xe4c7,
-  0xe4c1, 0xe4c4, 0xb5ad, 0xd3d9, 0xe4c6, 0xd2f9, 0xb4e3, 0xbbb4,
-  0xc9ee, 0xb4be, 0xbbec, 0xd1cd, 0xcced, 0xedb5, 0xc7e5, 0xd4a8,
-  0xe4cb, 0xd7d5, 0xe4c2, 0xbda5, 0xe4c5, 0xd3e6, 0xe4c9, 0xc9f8,
-  0xe4be, 0xd3e5, 0xc7fe, 0xb6c9, 0xd4fc, 0xb2b3, 0xe4d7, 0xcec2,
-  0xe4cd, 0xcebc, 0xb8db, 0xe4d6, 0xbfca, 0xd3ce, 0xc3ec, 0xc5c8,
-  0xe4d8, 0xcdc4, 0xe4cf, 0xe4d4, 0xe4d5, 0xbafe, 0xcfe6, 0xd5bf,
-  0xe4d2, 0xe4d0, 0xe4ce, 0xcde5, 0xcaaa, 0xc0a3, 0xbda6, 0xe4d3,
-  0xb8c8, 0xe4e7, 0xd4b4, 0xe4db, 0xc1ef, 0xe4e9, 0xd2e7, 0xe4df,
-  0xe4e0, 0xcfaa, 0xcbdd, 0xe4da, 0xe4d1, 0xe4e5, 0xc8dc, 0xe4e3,
-  0xc4e7, 0xe4e2, 0xe4e1, 0xb3fc, 0xe4e8, 0xb5e1, 0xd7cc, 0xe4e6,
-  0xbbac, 0xd7d2, 0xcccf, 0xebf8, 0xe4e4, 0xb9f6, 0xd6cd, 0xe4d9,
-  0xe4dc, 0xc2fa, 0xe4de, 0xc2cb, 0xc0c4, 0xc2d0, 0xb1f5, 0xccb2,
-  0xb5ce, 0xe4ef, 0xc6af, 0xc6e1, 0xe4f5, 0xc2a9, 0xc0ec, 0xd1dd,
-  0xe4ee, 0xc4ae, 0xe4ed, 0xe4f6, 0xe4f4, 0xc2fe, 0xe4dd, 0xe4f0,
-  0xcafe, 0xd5c4, 0xe4f1, 0xd1fa, 0xe4eb, 0xe4ec, 0xe4f2, 0xceab,
-  0xc5cb, 0xc7b1, 0xc2ba, 0xe4ea, 0xc1ca, 0xccb6, 0xb3b1, 0xe4fb,
-  0xe4f3, 0xe4fa, 0xe4fd, 0xe4fc, 0xb3ce, 0xb3ba, 0xe4f7, 0xe4f9,
-  0xe4f8, 0xc5ec, 0xc0bd, 0xd4e8, 0xe5a2, 0xb0c4, 0xe5a4, 0xe5a3,
-  0xbca4, 0xe5a5, 0xe5a1, 0xe4fe, 0xb1f4, 0xe5a8, 0xe5a9, 0xe5a6,
-  0xe5a7, 0xe5aa, 0xc6d9, 0xe5ab, 0xe5ad, 0xe5ac, 0xe5af, 0xe5ae,
-  0xb9e0, 0xe5b0, 0xe5b1, 0xbbf0, 0xece1, 0xc3f0, 0xb5c6, 0xbbd2,
-  0xc1e9, 0xd4ee, 0xbec4, 0xd7c6, 0xd4d6, 0xb2d3, 0xecbe, 0xeac1,
-  0xc2af, 0xb4b6, 0xd1d7, 0xb3b4, 0xc8b2, 0xbfbb, 0xecc0, 0xd6cb,
-  0xecbf, 0xecc1, 0xecc5, 0xbee6, 0xccbf, 0xc5da, 0xbebc, 0xecc6,
-  0xb1fe, 0xecc4, 0xd5a8, 0xb5e3, 0xecc2, 0xc1b6, 0xb3e3, 0xecc3,
-  0xcbb8, 0xc0c3, 0xccfe, 0xc1d2, 0xecc8, 0xbae6, 0xc0d3, 0xd6f2,
-  0xd1cc, 0xbfbe, 0xb7b3, 0xc9d5, 0xecc7, 0xbbe2, 0xcccc, 0xbdfd,
-  0xc8c8, 0xcfa9, 0xcde9, 0xc5eb, 0xb7e9, 0xd1c9, 0xbab8, 0xecc9,
-  0xecca, 0xbbc0, 0xeccb, 0xece2, 0xb1ba, 0xb7d9, 0xbdb9, 0xeccc,
-  0xd1e6, 0xeccd, 0xc8bb, 0xecd1, 0xecd3, 0xbbcd, 0xbce5, 0xeccf,
-  0xc9b7, 0xc3ba, 0xece3, 0xd5d5, 0xecd0, 0xd6f3, 0xecd2, 0xecce,
-  0xecd4, 0xecd5, 0xc9bf, 0xcfa8, 0xd0dc, 0xd1ac, 0xc8db, 0xecd6,
-  0xcef5, 0xcaec, 0xecda, 0xecd9, 0xb0be, 0xecd7, 0xecd8, 0xece4,
-  0xc8bc, 0xc1c7, 0xecdc, 0xd1e0, 0xecdb, 0xd4ef, 0xecdd, 0xdbc6,
-  0xecde, 0xb1ac, 0xecdf, 0xece0, 0xd7a6, 0xc5c0, 0xebbc, 0xb0ae,
-  0xbef4, 0xb8b8, 0xd2af, 0xb0d6, 0xb5f9, 0xd8b3, 0xcbac, 0xe3dd,
-  0xc6ac, 0xb0e6, 0xc5c6, 0xebb9, 0xebba, 0xebbb, 0xd1c0, 0xc5a3,
-  0xeaf2, 0xc4b2, 0xc4b5, 0xc0ce, 0xeaf3, 0xc4c1, 0xceef, 0xeaf0,
-  0xeaf4, 0xc9fc, 0xc7a3, 0xccd8, 0xcefe, 0xeaf5, 0xeaf6, 0xcfac,
-  0xc0e7, 0xeaf7, 0xb6bf, 0xeaf8, 0xeaf9, 0xeafa, 0xeafb, 0xeaf1,
-  0xc8ae, 0xe1eb, 0xb7b8, 0xe1ec, 0xe1ed, 0xd7b4, 0xe1ee, 0xe1ef,
-  0xd3cc, 0xe1f1, 0xbff1, 0xe1f0, 0xb5d2, 0xb1b7, 0xe1f3, 0xe1f2,
-  0xbafc, 0xe1f4, 0xb9b7, 0xbed1, 0xc4fc, 0xbadd, 0xbdc6, 0xe1f5,
-  0xe1f7, 0xb6c0, 0xcfc1, 0xcaa8, 0xe1f6, 0xd5f8, 0xd3fc, 0xe1f8,
-  0xe1fc, 0xe1f9, 0xe1fa, 0xc0ea, 0xe1fe, 0xe2a1, 0xc0c7, 0xe1fb,
-  0xe1fd, 0xe2a5, 0xc1d4, 0xe2a3, 0xe2a8, 0xb2fe, 0xe2a2, 0xc3cd,
-  0xb2c2, 0xe2a7, 0xe2a6, 0xe2a4, 0xe2a9, 0xe2ab, 0xd0c9, 0xd6ed,
-  0xc3a8, 0xe2ac, 0xcfd7, 0xe2ae, 0xbaef, 0xe9e0, 0xe2ad, 0xe2aa,
-  0xbbab, 0xd4b3, 0xe2b0, 0xe2af, 0xe9e1, 0xe2b1, 0xe2b2, 0xe2b3,
-  0xcca1, 0xe2b4, 0xe2b5, 0xd0fe, 0xc2ca, 0xd3f1, 0xcdf5, 0xe7e0,
-  0xe7e1, 0xbec1, 0xc2ea, 0xe7e4, 0xe7e3, 0xcde6, 0xc3b5, 0xe7e2,
-  0xbbb7, 0xcfd6, 0xc1e1, 0xe7e9, 0xe7e8, 0xe7f4, 0xb2a3, 0xe7ea,
-  0xe7e6, 0xe7ec, 0xe7eb, 0xc9ba, 0xd5e4, 0xe7e5, 0xb7a9, 0xe7e7,
-  0xe7ee, 0xe7f3, 0xd6e9, 0xe7ed, 0xe7f2, 0xe7f1, 0xb0e0, 0xe7f5,
-  0xc7f2, 0xc0c5, 0xc0ed, 0xc1f0, 0xe7f0, 0xe7f6, 0xcbf6, 0xe8a2,
-  0xe8a1, 0xd7c1, 0xe7fa, 0xe7f9, 0xe7fb, 0xe7f7, 0xe7fe, 0xe7fd,
-  0xe7fc, 0xc1d5, 0xc7d9, 0xc5fd, 0xc5c3, 0xc7ed, 0xe8a3, 0xe8a6,
-  0xe8a5, 0xe8a7, 0xbaf7, 0xe7f8, 0xe8a4, 0xc8f0, 0xc9aa, 0xe8a9,
-  0xb9e5, 0xd1fe, 0xe8a8, 0xe8aa, 0xe8ad, 0xe8ae, 0xc1a7, 0xe8af,
-  0xe8b0, 0xe8ac, 0xe8b4, 0xe8ab, 0xe8b1, 0xe8b5, 0xe8b2, 0xe8b3,
-  0xe8b7, 0xe8b6, 0xb9cf, 0xf0ac, 0xf0ad, 0xc6b0, 0xb0ea, 0xc8bf,
-  0xcddf, 0xcecd, 0xeab1, 0xeab2, 0xc6bf, 0xb4c9, 0xeab3, 0xd5e7,
-  0xddf9, 0xeab4, 0xeab5, 0xeab6, 0xb8ca, 0xdfb0, 0xc9f5, 0xccf0,
-  0xc9fa, 0xc9fb, 0xd3c3, 0xcba6, 0xb8a6, 0xf0ae, 0xb1c2, 0xe5b8,
-  0xccef, 0xd3c9, 0xbcd7, 0xc9ea, 0xb5e7, 0xc4d0, 0xb5e9, 0xeeae,
-  0xbbad, 0xe7de, 0xeeaf, 0xb3a9, 0xeeb2, 0xeeb1, 0xbde7, 0xeeb0,
-  0xceb7, 0xc5cf, 0xc1f4, 0xdbce, 0xeeb3, 0xd0f3, 0xc2d4, 0xc6e8,
-  0xb7ac, 0xeeb4, 0xb3eb, 0xbbfb, 0xeeb5, 0xe7dc, 0xeeb6, 0xbdae,
-  0xf1e2, 0xcae8, 0xd2c9, 0xf0da, 0xf0db, 0xf0dc, 0xc1c6, 0xb8ed,
-  0xbece, 0xf0de, 0xc5b1, 0xf0dd, 0xd1f1, 0xf0e0, 0xb0cc, 0xbdea,
-  0xd2df, 0xf0df, 0xb4af, 0xb7e8, 0xf0e6, 0xf0e5, 0xc6a3, 0xf0e1,
-  0xf0e2, 0xb4c3, 0xf0e3, 0xd5ee, 0xccdb, 0xbed2, 0xbcb2, 0xf0e8,
-  0xf0e7, 0xf0e4, 0xb2a1, 0xd6a2, 0xd3b8, 0xbeb7, 0xc8ac, 0xf0ea,
-  0xd1f7, 0xd6cc, 0xbadb, 0xf0e9, 0xb6bb, 0xcdb4, 0xc6a6, 0xc1a1,
-  0xf0eb, 0xf0ee, 0xf0ed, 0xf0f0, 0xf0ec, 0xbbbe, 0xf0ef, 0xccb5,
-  0xf0f2, 0xb3d5, 0xb1d4, 0xf0f3, 0xf0f4, 0xf0f6, 0xb4e1, 0xf0f1,
-  0xf0f7, 0xf0fa, 0xf0f8, 0xf0f5, 0xf0fd, 0xf0f9, 0xf0fc, 0xf0fe,
-  0xf1a1, 0xcec1, 0xf1a4, 0xf1a3, 0xc1f6, 0xf0fb, 0xcadd, 0xb4f1,
-  0xb1f1, 0xccb1, 0xf1a6, 0xf1a7, 0xf1ac, 0xd5ce, 0xf1a9, 0xc8b3,
-  0xf1a2, 0xf1ab, 0xf1a8, 0xf1a5, 0xf1aa, 0xb0a9, 0xf1ad, 0xf1af,
-  0xf1b1, 0xf1b0, 0xf1ae, 0xd1a2, 0xf1b2, 0xf1b3, 0xb9ef, 0xb5c7,
-  0xb0d7, 0xb0d9, 0xd4ed, 0xb5c4, 0xbdd4, 0xbbca, 0xf0a7, 0xb8de,
-  0xf0a8, 0xb0a8, 0xf0a9, 0xcdee, 0xf0aa, 0xf0ab, 0xc6a4, 0xd6e5,
-  0xf1e4, 0xf1e5, 0xc3f3, 0xd3db, 0xd6d1, 0xc5e8, 0xd3af, 0xd2e6,
-  0xeec1, 0xb0bb, 0xd5b5, 0xd1ce, 0xbce0, 0xbad0, 0xbff8, 0xb8c7,
-  0xb5c1, 0xc5cc, 0xcaa2, 0xc3cb, 0xeec2, 0xc4bf, 0xb6a2, 0xedec,
-  0xc3a4, 0xd6b1, 0xcfe0, 0xedef, 0xc5ce, 0xb6dc, 0xcaa1, 0xeded,
-  0xedf0, 0xedf1, 0xc3bc, 0xbfb4, 0xedee, 0xedf4, 0xedf2, 0xd5e6,
-  0xc3df, 0xedf3, 0xedf6, 0xd5a3, 0xd1a3, 0xedf5, 0xc3d0, 0xedf7,
-  0xbff4, 0xbeec, 0xedf8, 0xccf7, 0xd1db, 0xd7c5, 0xd5f6, 0xedfc,
-  0xedfb, 0xedf9, 0xedfa, 0xedfd, 0xbea6, 0xcbaf, 0xeea1, 0xb6bd,
-  0xeea2, 0xc4c0, 0xedfe, 0xbdde, 0xb2c7, 0xb6c3, 0xeea5, 0xd8ba,
-  0xeea3, 0xeea6, 0xc3e9, 0xb3f2, 0xeea7, 0xeea4, 0xcfb9, 0xeea8,
-  0xc2f7, 0xeea9, 0xeeaa, 0xdeab, 0xc6b3, 0xc7c6, 0xd6f5, 0xb5c9,
-  0xcbb2, 0xeeab, 0xcdab, 0xeeac, 0xd5b0, 0xeead, 0xf6c4, 0xdbc7,
-  0xb4a3, 0xc3ac, 0xf1e6, 0xcab8, 0xd2d3, 0xd6aa, 0xeff2, 0xbed8,
-  0xbdc3, 0xeff3, 0xb6cc, 0xb0ab, 0xcaaf, 0xedb6, 0xedb7, 0xcef9,
-  0xb7af, 0xbff3, 0xedb8, 0xc2eb, 0xc9b0, 0xedb9, 0xc6f6, 0xbfb3,
-  0xedbc, 0xc5f8, 0xd1d0, 0xd7a9, 0xedba, 0xedbb, 0xd1e2, 0xedbf,
-  0xedc0, 0xedc4, 0xedc8, 0xedc6, 0xedce, 0xd5e8, 0xedc9, 0xedc7,
-  0xedbe, 0xc5e9, 0xc6c6, 0xc9e9, 0xd4d2, 0xedc1, 0xedc2, 0xedc3,
-  0xedc5, 0xc0f9, 0xb4a1, 0xb9e8, 0xedd0, 0xedd1, 0xedca, 0xedcf,
-  0xcef8, 0xcbb6, 0xedcc, 0xedcd, 0xcff5, 0xedd2, 0xc1f2, 0xd3b2,
-  0xedcb, 0xc8b7, 0xbcef, 0xc5f0, 0xedd6, 0xb5ef, 0xc2b5, 0xb0ad,
-  0xcbe9, 0xb1ae, 0xedd4, 0xcdeb, 0xb5e2, 0xedd5, 0xedd3, 0xedd7,
-  0xb5fa, 0xedd8, 0xedd9, 0xeddc, 0xb1cc, 0xc5f6, 0xbcee, 0xedda,
-  0xccbc, 0xb2ea, 0xeddb, 0xc4eb, 0xb4c5, 0xb0f5, 0xeddf, 0xc0da,
-  0xb4e8, 0xc5cd, 0xeddd, 0xbfc4, 0xedde, 0xc4a5, 0xede0, 0xede1,
-  0xede3, 0xc1d7, 0xbbc7, 0xbdb8, 0xede2, 0xede4, 0xede6, 0xede5,
-  0xede7, 0xcabe, 0xecea, 0xc0f1, 0xc9e7, 0xeceb, 0xc6ee, 0xecec,
-  0xc6ed, 0xeced, 0xecf0, 0xd7e6, 0xecf3, 0xecf1, 0xecee, 0xecef,
-  0xd7a3, 0xc9f1, 0xcbee, 0xecf4, 0xecf2, 0xcfe9, 0xecf6, 0xc6b1,
-  0xbcc0, 0xecf5, 0xb5bb, 0xbbf6, 0xecf7, 0xd9f7, 0xbdfb, 0xc2bb,
-  0xecf8, 0xecf9, 0xb8a3, 0xecfa, 0xecfb, 0xecfc, 0xd3ed, 0xd8ae,
-  0xc0eb, 0xc7dd, 0xbacc, 0xd0e3, 0xcbbd, 0xcdba, 0xb8d1, 0xb1fc,
-  0xc7ef, 0xd6d6, 0xbfc6, 0xc3eb, 0xeff5, 0xc3d8, 0xd7e2, 0xeff7,
-  0xb3d3, 0xc7d8, 0xd1ed, 0xd6c8, 0xeff8, 0xeff6, 0xbbfd, 0xb3c6,
-  0xbdd5, 0xd2c6, 0xbbe0, 0xcfa1, 0xeffc, 0xeffb, 0xeff9, 0xb3cc,
-  0xc9d4, 0xcbb0, 0xeffe, 0xb0de, 0xd6c9, 0xeffd, 0xb3ed, 0xf6d5,
-  0xcec8, 0xf0a2, 0xf0a1, 0xb5be, 0xbcda, 0xbbfc, 0xb8e5, 0xc4c2,
-  0xf0a3, 0xcbeb, 0xf0a6, 0xd1a8, 0xbebf, 0xc7ee, 0xf1b6, 0xf1b7,
-  0xbfd5, 0xb4a9, 0xf1b8, 0xcdbb, 0xc7d4, 0xd5ad, 0xf1b9, 0xf1ba,
-  0xc7cf, 0xd2a4, 0xd6cf, 0xf1bb, 0xbdd1, 0xb4b0, 0xbebd, 0xb4dc,
-  0xced1, 0xbfdf, 0xf1bd, 0xbffa, 0xf1bc, 0xf1bf, 0xf1be, 0xf1c0,
-  0xf1c1, 0xc1fe, 0xc1a2, 0xcafa, 0xd5be, 0xbeba, 0xbeb9, 0xd5c2,
-  0xbfa2, 0xcdaf, 0xf1b5, 0xbddf, 0xb6cb, 0xd6f1, 0xf3c3, 0xf3c4,
-  0xb8cd, 0xf3c6, 0xf3c7, 0xb0ca, 0xf3c5, 0xf3c9, 0xcbf1, 0xf3cb,
-  0xd0a6, 0xb1ca, 0xf3c8, 0xf3cf, 0xb5d1, 0xf3d7, 0xf3d2, 0xf3d4,
-  0xf3d3, 0xb7fb, 0xb1bf, 0xf3ce, 0xf3ca, 0xb5da, 0xf3d0, 0xf3d1,
-  0xf3d5, 0xf3cd, 0xbce3, 0xc1fd, 0xf3d6, 0xf3da, 0xf3cc, 0xb5c8,
-  0xbdee, 0xf3dc, 0xb7a4, 0xbff0, 0xd6fe, 0xcdb2, 0xb4f0, 0xb2df,
-  0xf3d8, 0xf3d9, 0xc9b8, 0xf3dd, 0xf3de, 0xf3e1, 0xf3df, 0xf3e3,
-  0xf3e2, 0xf3db, 0xbfea, 0xb3ef, 0xf3e0, 0xc7a9, 0xbcf2, 0xf3eb,
-  0xb9bf, 0xf3e4, 0xb2ad, 0xbbfe, 0xcbe3, 0xf3ed, 0xf3e9, 0xb9dc,
-  0xf3ee, 0xf3e5, 0xf3e6, 0xf3ea, 0xc2e1, 0xf3ec, 0xf3ef, 0xf3e8,
-  0xbcfd, 0xcfe4, 0xf3f0, 0xf3e7, 0xf3f2, 0xd7ad, 0xc6aa, 0xf3f3,
-  0xf3f1, 0xc2a8, 0xb8dd, 0xf3f5, 0xf3f4, 0xb4db, 0xf3f6, 0xf3f7,
-  0xf3f8, 0xc0ba, 0xc0e9, 0xc5f1, 0xf3fb, 0xf3fa, 0xb4d8, 0xf3fe,
-  0xf3f9, 0xf3fc, 0xf3fd, 0xf4a1, 0xf4a3, 0xbbc9, 0xf4a2, 0xf4a4,
-  0xb2be, 0xf4a6, 0xf4a5, 0xbcae, 0xc3d7, 0xd9e1, 0xc0e0, 0xf4cc,
-  0xd7d1, 0xb7db, 0xf4ce, 0xc1a3, 0xc6c9, 0xb4d6, 0xd5b3, 0xf4d0,
-  0xf4cf, 0xf4d1, 0xcbda, 0xf4d2, 0xd4c1, 0xd6e0, 0xb7e0, 0xc1b8,
-  0xc1bb, 0xf4d3, 0xbeac, 0xb4e2, 0xf4d4, 0xf4d5, 0xbeab, 0xf4d6,
-  0xf4db, 0xf4d7, 0xf4da, 0xbafd, 0xf4d8, 0xf4d9, 0xb8e2, 0xccc7,
-  0xf4dc, 0xb2da, 0xc3d3, 0xd4e3, 0xbfb7, 0xf4dd, 0xc5b4, 0xf4e9,
-  0xcfb5, 0xcec9, 0xcbd8, 0xcbf7, 0xbdf4, 0xd7cf, 0xc0db, 0xd0f5,
-  0xf4ea, 0xf4eb, 0xf4ec, 0xf7e3, 0xb7b1, 0xf4ed, 0xd7eb, 0xf4ee,
-  0xe6f9, 0xbec0, 0xe6fa, 0xbaec, 0xe6fb, 0xcfcb, 0xe6fc, 0xd4bc,
-  0xbcb6, 0xe6fd, 0xe6fe, 0xbccd, 0xc8d2, 0xceb3, 0xe7a1, 0xb4bf,
-  0xe7a2, 0xc9b4, 0xb8d9, 0xc4c9, 0xd7dd, 0xc2da, 0xb7d7, 0xd6bd,
-  0xcec6, 0xb7c4, 0xc5a6, 0xe7a3, 0xcfdf, 0xe7a4, 0xe7a5, 0xe7a6,
-  0xc1b7, 0xd7e9, 0xc9f0, 0xcfb8, 0xd6af, 0xd6d5, 0xe7a7, 0xb0ed,
-  0xe7a8, 0xe7a9, 0xc9dc, 0xd2ef, 0xbead, 0xe7aa, 0xb0f3, 0xc8de,
-  0xbde1, 0xe7ab, 0xc8c6, 0xe7ac, 0xbbe6, 0xb8f8, 0xd1a4, 0xe7ad,
-  0xc2e7, 0xbef8, 0xbdca, 0xcdb3, 0xe7ae, 0xe7af, 0xbeee, 0xd0e5,
-  0xcbe7, 0xccd0, 0xbccc, 0xe7b0, 0xbca8, 0xd0f7, 0xe7b1, 0xd0f8,
-  0xe7b2, 0xe7b3, 0xb4c2, 0xe7b4, 0xe7b5, 0xc9fe, 0xceac, 0xc3e0,
-  0xe7b7, 0xb1c1, 0xb3f1, 0xe7b8, 0xe7b9, 0xd7db, 0xd5c0, 0xe7ba,
-  0xc2cc, 0xd7ba, 0xe7bb, 0xe7bc, 0xe7bd, 0xbcea, 0xc3e5, 0xc0c2,
-  0xe7be, 0xe7bf, 0xbca9, 0xe7c0, 0xe7c1, 0xe7b6, 0xb6d0, 0xe7c2,
-  0xe7c3, 0xe7c4, 0xbbba, 0xb5de, 0xc2c6, 0xb1e0, 0xe7c5, 0xd4b5,
-  0xe7c6, 0xb8bf, 0xe7c8, 0xe7c7, 0xb7ec, 0xe7c9, 0xb2f8, 0xe7ca,
-  0xe7cb, 0xe7cc, 0xe7cd, 0xe7ce, 0xe7cf, 0xe7d0, 0xd3a7, 0xcbf5,
-  0xe7d1, 0xe7d2, 0xe7d3, 0xe7d4, 0xc9c9, 0xe7d5, 0xe7d6, 0xe7d7,
-  0xe7d8, 0xe7d9, 0xbdc9, 0xe7da, 0xf3be, 0xb8d7, 0xc8b1, 0xf3bf,
-  0xf3c0, 0xf3c1, 0xb9de, 0xcdf8, 0xd8e8, 0xbab1, 0xc2de, 0xeeb7,
-  0xb7a3, 0xeeb9, 0xeeb8, 0xb0d5, 0xeebb, 0xd5d6, 0xd7ef, 0xd6c3,
-  0xeebd, 0xcaf0, 0xeebc, 0xeebe, 0xeec0, 0xeebf, 0xd1f2, 0xc7bc,
-  0xc3c0, 0xb8e1, 0xc1e7, 0xf4c6, 0xd0df, 0xf4c7, 0xcfdb, 0xc8ba,
-  0xf4c8, 0xf4c9, 0xf4ca, 0xf4cb, 0xd9fa, 0xb8fe, 0xe5f1, 0xd3f0,
-  0xf4e0, 0xcecc, 0xb3e1, 0xf1b4, 0xd2ee, 0xf4e1, 0xcfe8, 0xf4e2,
-  0xc7cc, 0xb5d4, 0xb4e4, 0xf4e4, 0xf4e3, 0xf4e5, 0xf4e6, 0xf4e7,
-  0xbab2, 0xb0bf, 0xf4e8, 0xb7ad, 0xd2ed, 0xd2ab, 0xc0cf, 0xbfbc,
-  0xeba3, 0xd5df, 0xeac8, 0xf1f3, 0xb6f8, 0xcba3, 0xc4cd, 0xf1e7,
-  0xf1e8, 0xb8fb, 0xf1e9, 0xbac4, 0xd4c5, 0xb0d2, 0xf1ea, 0xf1eb,
-  0xf1ec, 0xf1ed, 0xf1ee, 0xf1ef, 0xf1f1, 0xf1f0, 0xc5d5, 0xf1f2,
-  0xb6fa, 0xf1f4, 0xd2ae, 0xdec7, 0xcbca, 0xb3dc, 0xb5a2, 0xb9a2,
-  0xc4f4, 0xf1f5, 0xf1f6, 0xc1c4, 0xc1fb, 0xd6b0, 0xf1f7, 0xf1f8,
-  0xc1aa, 0xc6b8, 0xbedb, 0xf1f9, 0xb4cf, 0xf1fa, 0xedb2, 0xedb1,
-  0xcbe0, 0xd2de, 0xcbc1, 0xd5d8, 0xc8e2, 0xc0df, 0xbca1, 0xebc1,
-  0xd0a4, 0xd6e2, 0xb6c7, 0xb8d8, 0xebc0, 0xb8ce, 0xebbf, 0xb3a6,
-  0xb9c9, 0xd6ab, 0xb7f4, 0xb7ca, 0xbce7, 0xb7be, 0xebc6, 0xebc7,
-  0xb0b9, 0xbfcf, 0xebc5, 0xd3fd, 0xebc8, 0xebc9, 0xb7ce, 0xebc2,
-  0xebc4, 0xc9f6, 0xd6d7, 0xd5cd, 0xd0b2, 0xebcf, 0xceb8, 0xebd0,
-  0xb5a8, 0xb1b3, 0xebd2, 0xcca5, 0xc5d6, 0xebd3, 0xebd1, 0xc5df,
-  0xebce, 0xcaa4, 0xebd5, 0xb0fb, 0xbafa, 0xd8b7, 0xf1e3, 0xebca,
-  0xebcb, 0xebcc, 0xebcd, 0xebd6, 0xe6c0, 0xebd9, 0xbfe8, 0xd2c8,
-  0xebd7, 0xebdc, 0xb8ec, 0xebd8, 0xbdba, 0xd0d8, 0xb0b7, 0xebdd,
-  0xc4dc, 0xd6ac, 0xb4e0, 0xc2f6, 0xbcb9, 0xebda, 0xebdb, 0xd4e0,
-  0xc6ea, 0xc4d4, 0xebdf, 0xc5a7, 0xd9f5, 0xb2b1, 0xebe4, 0xbdc5,
-  0xebe2, 0xebe3, 0xb8ac, 0xcdd1, 0xebe5, 0xebe1, 0xc1b3, 0xc6a2,
-  0xccf3, 0xebe6, 0xc0b0, 0xd2b8, 0xebe7, 0xb8af, 0xb8ad, 0xebe8,
-  0xc7bb, 0xcdf3, 0xebea, 0xebeb, 0xebed, 0xd0c8, 0xebf2, 0xebee,
-  0xebf1, 0xc8f9, 0xd1fc, 0xebec, 0xebe9, 0xb8b9, 0xcfd9, 0xc4e5,
-  0xebef, 0xebf0, 0xccda, 0xcdc8, 0xb0f2, 0xebf6, 0xebf5, 0xb2b2,
-  0xb8e0, 0xebf7, 0xb1ec, 0xccc5, 0xc4a4, 0xcfa5, 0xebf9, 0xeca2,
-  0xc5f2, 0xebfa, 0xc9c5, 0xe2df, 0xebfe, 0xcdce, 0xeca1, 0xb1db,
-  0xd3b7, 0xd2dc, 0xebfd, 0xebfb, 0xb3bc, 0xeab0, 0xd7d4, 0xf4ab,
-  0xb3f4, 0xd6c1, 0xd6c2, 0xd5e9, 0xbeca, 0xf4a7, 0xd2a8, 0xf4a8,
-  0xf4a9, 0xf4aa, 0xbecb, 0xd3df, 0xc9e0, 0xc9e1, 0xf3c2, 0xcae6,
-  0xccf2, 0xe2b6, 0xcbb4, 0xcee8, 0xd6db, 0xf4ad, 0xf4ae, 0xf4af,
-  0xf4b2, 0xbabd, 0xf4b3, 0xb0e3, 0xf4b0, 0xf4b1, 0xbda2, 0xb2d5,
-  0xf4b6, 0xf4b7, 0xb6e6, 0xb2b0, 0xcfcf, 0xf4b4, 0xb4ac, 0xf4b5,
-  0xf4b8, 0xf4b9, 0xcda7, 0xf4ba, 0xf4bb, 0xf4bc, 0xcbd2, 0xf4bd,
-  0xf4be, 0xf4bf, 0xf4de, 0xc1bc, 0xbce8, 0xc9ab, 0xd1de, 0xe5f5,
-  0xdcb3, 0xd2d5, 0xdcb4, 0xb0ac, 0xdcb5, 0xbdda, 0xdcb9, 0xd8c2,
-  0xdcb7, 0xd3f3, 0xc9d6, 0xdcba, 0xdcb6, 0xdcbb, 0xc3a2, 0xdcbc,
-  0xdcc5, 0xdcbd, 0xcedf, 0xd6a5, 0xdccf, 0xdccd, 0xdcd2, 0xbde6,
-  0xc2ab, 0xdcb8, 0xdccb, 0xdcce, 0xdcbe, 0xb7d2, 0xb0c5, 0xdcc7,
-  0xd0be, 0xdcc1, 0xbba8, 0xb7bc, 0xdccc, 0xdcc6, 0xdcbf, 0xc7db,
-  0xd1bf, 0xdcc0, 0xdcca, 0xdcd0, 0xcead, 0xdcc2, 0xdcc3, 0xdcc8,
-  0xdcc9, 0xb2d4, 0xdcd1, 0xcbd5, 0xd4b7, 0xdcdb, 0xdcdf, 0xcca6,
-  0xdce6, 0xc3e7, 0xdcdc, 0xbfc1, 0xdcd9, 0xb0fa, 0xb9b6, 0xdce5,
-  0xdcd3, 0xdcc4, 0xdcd6, 0xc8f4, 0xbfe0, 0xc9bb, 0xb1bd, 0xd3a2,
-  0xdcda, 0xdcd5, 0xc6bb, 0xdcde, 0xd7c2, 0xc3af, 0xb7b6, 0xc7d1,
-  0xc3a9, 0xdce2, 0xdcd8, 0xdceb, 0xdcd4, 0xdcdd, 0xbea5, 0xdcd7,
-  0xdce0, 0xdce3, 0xdce4, 0xdcf8, 0xdce1, 0xdda2, 0xdce7, 0xbceb,
-  0xb4c4, 0xc3a3, 0xb2e7, 0xdcfa, 0xdcf2, 0xdcef, 0xdcfc, 0xdcee,
-  0xd2f0, 0xb2e8, 0xc8d7, 0xc8e3, 0xdcfb, 0xdced, 0xdcf7, 0xdcf5,
-  0xbea3, 0xdcf4, 0xb2dd, 0xdcf3, 0xbcf6, 0xdce8, 0xbbc4, 0xc0f3,
-  0xbcd4, 0xdce9, 0xdcea, 0xdcf1, 0xdcf6, 0xdcf9, 0xb5b4, 0xc8d9,
-  0xbbe7, 0xdcfe, 0xdcfd, 0xd3ab, 0xdda1, 0xdda3, 0xdda5, 0xd2f1,
-  0xdda4, 0xdda6, 0xdda7, 0xd2a9, 0xbac9, 0xdda9, 0xddb6, 0xddb1,
-  0xddb4, 0xddb0, 0xc6ce, 0xc0f2, 0xc9af, 0xdcec, 0xddae, 0xddb7,
-  0xdcf0, 0xddaf, 0xddb8, 0xddac, 0xddb9, 0xddb3, 0xddad, 0xc4aa,
-  0xdda8, 0xc0b3, 0xc1ab, 0xddaa, 0xddab, 0xddb2, 0xbbf1, 0xddb5,
-  0xd3a8, 0xddba, 0xddbb, 0xc3a7, 0xddd2, 0xddbc, 0xddd1, 0xb9bd,
-  0xbed5, 0xbefa, 0xbaca, 0xddca, 0xddc5, 0xddbf, 0xb2cb, 0xddc3,
-  0xddcb, 0xb2a4, 0xddd5, 0xddbe, 0xc6d0, 0xddd0, 0xddd4, 0xc1e2,
-  0xb7c6, 0xddce, 0xddcf, 0xddc4, 0xddbd, 0xddcd, 0xccd1, 0xddc9,
-  0xddc2, 0xc3c8, 0xc6bc, 0xceae, 0xddcc, 0xddc8, 0xddc1, 0xddc6,
-  0xc2dc, 0xd3a9, 0xd3aa, 0xddd3, 0xcff4, 0xc8f8, 0xdde6, 0xddc7,
-  0xdde0, 0xc2e4, 0xdde1, 0xddd7, 0xd6f8, 0xddd9, 0xddd8, 0xb8f0,
-  0xddd6, 0xc6cf, 0xb6ad, 0xdde2, 0xbaf9, 0xd4e1, 0xdde7, 0xb4d0,
-  0xddda, 0xbffb, 0xdde3, 0xdddf, 0xdddd, 0xb5d9, 0xdddb, 0xdddc,
-  0xddde, 0xbdaf, 0xdde4, 0xdde5, 0xddf5, 0xc3c9, 0xcbe2, 0xddf2,
-  0xd8e1, 0xc6d1, 0xddf4, 0xd5f4, 0xddf3, 0xddf0, 0xddec, 0xddef,
-  0xdde8, 0xd0ee, 0xc8d8, 0xddee, 0xdde9, 0xddea, 0xcbf2, 0xdded,
-  0xb1cd, 0xc0b6, 0xbcbb, 0xddf1, 0xddf7, 0xddf6, 0xddeb, 0xc5ee,
-  0xddfb, 0xdea4, 0xdea3, 0xddf8, 0xc3ef, 0xc2fb, 0xd5e1, 0xceb5,
-  0xddfd, 0xb2cc, 0xc4e8, 0xcadf, 0xc7be, 0xddfa, 0xddfc, 0xddfe,
-  0xdea2, 0xb0aa, 0xb1ce, 0xdeac, 0xdea6, 0xbdb6, 0xc8ef, 0xdea1,
-  0xdea5, 0xdea9, 0xdea8, 0xdea7, 0xdead, 0xd4cc, 0xdeb3, 0xdeaa,
-  0xdeae, 0xc0d9, 0xb1a1, 0xdeb6, 0xdeb1, 0xdeb2, 0xd1a6, 0xdeb5,
-  0xdeaf, 0xdeb0, 0xd0bd, 0xdeb4, 0xcaed, 0xdeb9, 0xdeb8, 0xdeb7,
-  0xdebb, 0xbde5, 0xb2d8, 0xc3ea, 0xdeba, 0xc5ba, 0xdebc, 0xccd9,
-  0xb7aa, 0xd4e5, 0xdebd, 0xdebf, 0xc4a2, 0xdec1, 0xdebe, 0xdec0,
-  0xd5ba, 0xdec2, 0xf2ae, 0xbba2, 0xc2b2, 0xc5b0, 0xc2c7, 0xf2af,
-  0xd0e9, 0xd3dd, 0xebbd, 0xb3e6, 0xf2b0, 0xf2b1, 0xcaad, 0xbae7,
-  0xf2b3, 0xf2b5, 0xf2b4, 0xcbe4, 0xcfba, 0xf2b2, 0xcab4, 0xd2cf,
-  0xc2ec, 0xcec3, 0xf2b8, 0xb0f6, 0xf2b7, 0xf2be, 0xb2cf, 0xd1c1,
-  0xf2ba, 0xf2bc, 0xd4e9, 0xf2bb, 0xf2b6, 0xf2bf, 0xf2bd, 0xf2b9,
-  0xf2c7, 0xf2c4, 0xf2c6, 0xf2ca, 0xf2c2, 0xf2c0, 0xf2c5, 0xd6fb,
-  0xf2c1, 0xc7f9, 0xc9df, 0xf2c8, 0xb9c6, 0xb5b0, 0xf2c3, 0xf2c9,
-  0xf2d0, 0xf2d6, 0xbbd7, 0xf2d5, 0xcddc, 0xd6eb, 0xf2d2, 0xf2d4,
-  0xb8f2, 0xf2cb, 0xf2ce, 0xc2f9, 0xd5dd, 0xf2cc, 0xf2cd, 0xf2cf,
-  0xf2d3, 0xf2d9, 0xd3bc, 0xb6ea, 0xcaf1, 0xb7e4, 0xf2d7, 0xf2d8,
-  0xf2da, 0xf2dd, 0xf2db, 0xf2dc, 0xd1d1, 0xf2d1, 0xcdc9, 0xcecf,
-  0xd6a9, 0xf2e3, 0xc3db, 0xf2e0, 0xc0af, 0xf2ec, 0xf2de, 0xf2e1,
-  0xf2e8, 0xf2e2, 0xf2e7, 0xf2e6, 0xf2e9, 0xf2df, 0xf2e4, 0xf2ea,
-  0xd3ac, 0xf2e5, 0xb2f5, 0xf2f2, 0xd0ab, 0xf2f5, 0xbbc8, 0xf2f9,
-  0xf2f0, 0xf2f6, 0xf2f8, 0xf2fa, 0xf2f3, 0xf2f1, 0xbafb, 0xb5fb,
-  0xf2ef, 0xf2f7, 0xf2ed, 0xf2ee, 0xf2eb, 0xf3a6, 0xf3a3, 0xf3a2,
-  0xf2f4, 0xc8da, 0xf2fb, 0xf3a5, 0xc3f8, 0xf2fd, 0xf3a7, 0xf3a9,
-  0xf3a4, 0xf2fc, 0xf3ab, 0xf3aa, 0xc2dd, 0xf3ae, 0xf3b0, 0xf3a1,
-  0xf3b1, 0xf3ac, 0xf3af, 0xf2fe, 0xf3ad, 0xf3b2, 0xf3b4, 0xf3a8,
-  0xf3b3, 0xf3b5, 0xd0b7, 0xf3b8, 0xd9f9, 0xf3b9, 0xf3b7, 0xc8e4,
-  0xf3b6, 0xf3ba, 0xf3bb, 0xb4c0, 0xeec3, 0xf3bc, 0xf3bd, 0xd1aa,
-  0xf4ac, 0xd0c6, 0xd0d0, 0xd1dc, 0xcfce, 0xbdd6, 0xd1c3, 0xbae2,
-  0xe1e9, 0xd2c2, 0xf1c2, 0xb2b9, 0xb1ed, 0xf1c3, 0xc9c0, 0xb3c4,
-  0xd9f2, 0xcba5, 0xf1c4, 0xd6d4, 0xf1c5, 0xf4c0, 0xf1c6, 0xd4ac,
-  0xf1c7, 0xb0c0, 0xf4c1, 0xf4c2, 0xb4fc, 0xc5db, 0xccbb, 0xd0e4,
-  0xcde0, 0xf1c8, 0xd9f3, 0xb1bb, 0xcfae, 0xb8a4, 0xf1ca, 0xf1cb,
-  0xb2c3, 0xc1d1, 0xd7b0, 0xf1c9, 0xf1cc, 0xf1ce, 0xd9f6, 0xd2e1,
-  0xd4a3, 0xf4c3, 0xc8b9, 0xf4c4, 0xf1cd, 0xf1cf, 0xbfe3, 0xf1d0,
-  0xf1d4, 0xf1d6, 0xf1d1, 0xc9d1, 0xc5e1, 0xc2e3, 0xb9fc, 0xf1d3,
-  0xf1d5, 0xb9d3, 0xf1db, 0xbad6, 0xb0fd, 0xf1d9, 0xf1d8, 0xf1d2,
-  0xf1da, 0xf1d7, 0xc8ec, 0xcdca, 0xf1dd, 0xe5bd, 0xf1dc, 0xf1de,
-  0xf1df, 0xcfe5, 0xf4c5, 0xbdf3, 0xf1e0, 0xf1e1, 0xcef7, 0xd2aa,
-  0xf1fb, 0xb8b2, 0xbcfb, 0xb9db, 0xb9e6, 0xc3d9, 0xcad3, 0xeae8,
-  0xc0c0, 0xbef5, 0xeae9, 0xeaea, 0xeaeb, 0xeaec, 0xeaed, 0xeaee,
-  0xeaef, 0xbdc7, 0xf5fb, 0xf5fd, 0xf5fe, 0xf5fc, 0xbde2, 0xf6a1,
-  0xb4a5, 0xf6a2, 0xf6a3, 0xecb2, 0xd1d4, 0xd9ea, 0xf6a4, 0xeeba,
-  0xd5b2, 0xd3fe, 0xccdc, 0xcac4, 0xe5c0, 0xf6a5, 0xbeaf, 0xc6a9,
-  0xdaa5, 0xbcc6, 0xb6a9, 0xb8bc, 0xc8cf, 0xbca5, 0xdaa6, 0xdaa7,
-  0xccd6, 0xc8c3, 0xdaa8, 0xc6fd, 0xd1b5, 0xd2e9, 0xd1b6, 0xbcc7,
-  0xbdb2, 0xbbe4, 0xdaa9, 0xdaaa, 0xd1c8, 0xdaab, 0xd0ed, 0xb6ef,
-  0xc2db, 0xcbcf, 0xb7ed, 0xc9e8, 0xb7c3, 0xbef7, 0xd6a4, 0xdaac,
-  0xdaad, 0xc6c0, 0xd7e7, 0xcab6, 0xd5a9, 0xcbdf, 0xd5ef, 0xdaae,
-  0xd6df, 0xb4ca, 0xdab0, 0xdaaf, 0xd2eb, 0xdab1, 0xdab2, 0xdab3,
-  0xcad4, 0xdab4, 0xcaab, 0xdab5, 0xdab6, 0xb3cf, 0xd6ef, 0xdab7,
-  0xbbb0, 0xb5ae, 0xdab8, 0xdab9, 0xb9ee, 0xd1af, 0xd2e8, 0xdaba,
-  0xb8c3, 0xcfea, 0xb2ef, 0xdabb, 0xdabc, 0xbdeb, 0xcedc, 0xd3ef,
-  0xdabd, 0xcef3, 0xdabe, 0xd3d5, 0xbbe5, 0xdabf, 0xcbb5, 0xcbd0,
-  0xdac0, 0xc7eb, 0xd6ee, 0xdac1, 0xc5b5, 0xb6c1, 0xdac2, 0xb7cc,
-  0xbfce, 0xdac3, 0xdac4, 0xcbad, 0xdac5, 0xb5f7, 0xdac6, 0xc1c2,
-  0xd7bb, 0xdac7, 0xccb8, 0xd2ea, 0xc4b1, 0xdac8, 0xb5fd, 0xbbd1,
-  0xdac9, 0xd0b3, 0xdaca, 0xdacb, 0xcebd, 0xdacc, 0xdacd, 0xdace,
-  0xb2f7, 0xdad1, 0xdacf, 0xd1e8, 0xdad0, 0xc3d5, 0xdad2, 0xdad3,
-  0xdad4, 0xdad5, 0xd0bb, 0xd2a5, 0xb0f9, 0xdad6, 0xc7ab, 0xdad7,
-  0xbdf7, 0xc3a1, 0xdad8, 0xdad9, 0xc3fd, 0xccb7, 0xdada, 0xdadb,
-  0xc0be, 0xc6d7, 0xdadc, 0xdadd, 0xc7b4, 0xdade, 0xdadf, 0xb9c8,
-  0xbbed, 0xb6b9, 0xf4f8, 0xf4f9, 0xcde3, 0xf5b9, 0xebe0, 0xcff3,
-  0xbbbf, 0xbac0, 0xd4a5, 0xe1d9, 0xf5f4, 0xb1aa, 0xb2f2, 0xf5f5,
-  0xf5f7, 0xbad1, 0xf5f6, 0xc3b2, 0xf5f9, 0xf5f8, 0xb1b4, 0xd5ea,
-  0xb8ba, 0xb9b1, 0xb2c6, 0xd4f0, 0xcfcd, 0xb0dc, 0xd5cb, 0xbbf5,
-  0xd6ca, 0xb7b7, 0xccb0, 0xc6b6, 0xb1e1, 0xb9ba, 0xd6fc, 0xb9e1,
-  0xb7a1, 0xbcfa, 0xeada, 0xeadb, 0xccf9, 0xb9f3, 0xeadc, 0xb4fb,
-  0xc3b3, 0xb7d1, 0xbad8, 0xeadd, 0xd4f4, 0xeade, 0xbcd6, 0xbbdf,
-  0xeadf, 0xc1de, 0xc2b8, 0xd4df, 0xd7ca, 0xeae0, 0xeae1, 0xeae4,
-  0xeae2, 0xeae3, 0xc9de, 0xb8b3, 0xb6c4, 0xeae5, 0xcaea, 0xc9cd,
-  0xb4cd, 0xe2d9, 0xc5e2, 0xeae6, 0xc0b5, 0xd7b8, 0xeae7, 0xd7ac,
-  0xc8fc, 0xd8d3, 0xd8cd, 0xd4de, 0xd4f9, 0xc9c4, 0xd3ae, 0xb8d3,
-  0xb3e0, 0xc9e2, 0xf4f6, 0xbad5, 0xf4f7, 0xd7df, 0xf4f1, 0xb8b0,
-  0xd5d4, 0xb8cf, 0xc6f0, 0xb3c3, 0xf4f2, 0xb3ac, 0xd4bd, 0xc7f7,
-  0xf4f4, 0xf4f3, 0xcccb, 0xc8a4, 0xf4f5, 0xd7e3, 0xc5bf, 0xf5c0,
-  0xf5bb, 0xf5c3, 0xf5c2, 0xd6ba, 0xf5c1, 0xd4be, 0xf5c4, 0xf5cc,
-  0xb0cf, 0xb5f8, 0xf5c9, 0xf5ca, 0xc5dc, 0xf5c5, 0xf5c6, 0xf5c7,
-  0xf5cb, 0xbee0, 0xf5c8, 0xb8fa, 0xf5d0, 0xf5d3, 0xbfe7, 0xb9f2,
-  0xf5bc, 0xf5cd, 0xc2b7, 0xccf8, 0xbcf9, 0xf5ce, 0xf5cf, 0xf5d1,
-  0xb6e5, 0xf5d2, 0xf5d5, 0xf5bd, 0xf5d4, 0xd3bb, 0xb3ec, 0xcca4,
-  0xf5d6, 0xf5d7, 0xbee1, 0xf5d8, 0xccdf, 0xf5db, 0xb2c8, 0xd7d9,
-  0xf5d9, 0xf5da, 0xf5dc, 0xf5e2, 0xf5e0, 0xf5df, 0xf5dd, 0xf5e1,
-  0xf5de, 0xf5e4, 0xf5e5, 0xcce3, 0xe5bf, 0xb5b8, 0xf5e3, 0xf5e8,
-  0xcca3, 0xf5e6, 0xf5e7, 0xf5be, 0xb1c4, 0xf5bf, 0xb5c5, 0xb2e4,
-  0xf5ec, 0xf5e9, 0xb6d7, 0xf5ed, 0xf5ea, 0xf5eb, 0xb4da, 0xd4ea,
-  0xf5ee, 0xb3f9, 0xf5ef, 0xf5f1, 0xf5f0, 0xf5f2, 0xf5f3, 0xc9ed,
-  0xb9aa, 0xc7fb, 0xb6e3, 0xccc9, 0xeaa6, 0xb3b5, 0xd4fe, 0xb9ec,
-  0xd0f9, 0xe9ed, 0xd7aa, 0xe9ee, 0xc2d6, 0xc8ed, 0xbae4, 0xe9ef,
-  0xe9f0, 0xe9f1, 0xd6e1, 0xe9f2, 0xe9f3, 0xe9f5, 0xe9f4, 0xe9f6,
-  0xe9f7, 0xc7e1, 0xe9f8, 0xd4d8, 0xe9f9, 0xbdce, 0xe9fa, 0xe9fb,
-  0xbdcf, 0xe9fc, 0xb8a8, 0xc1be, 0xe9fd, 0xb1b2, 0xbbd4, 0xb9f5,
-  0xe9fe, 0xeaa1, 0xeaa2, 0xeaa3, 0xb7f8, 0xbcad, 0xcae4, 0xe0ce,
-  0xd4af, 0xcfbd, 0xd5b7, 0xeaa4, 0xd5de, 0xeaa5, 0xd0c1, 0xb9bc,
-  0xb4c7, 0xb1d9, 0xc0b1, 0xb1e6, 0xb1e7, 0xb1e8, 0xb3bd, 0xc8e8,
-  0xe5c1, 0xb1df, 0xc1c9, 0xb4ef, 0xc7a8, 0xd3d8, 0xc6f9, 0xd1b8,
-  0xb9fd, 0xc2f5, 0xd3ad, 0xd4cb, 0xbdfc, 0xe5c2, 0xb7b5, 0xe5c3,
-  0xbbb9, 0xd5e2, 0xbdf8, 0xd4b6, 0xcea5, 0xc1ac, 0xb3d9, 0xccf6,
-  0xe5c6, 0xe5c4, 0xe5c8, 0xe5ca, 0xe5c7, 0xb5cf, 0xc6c8, 0xb5fc,
-  0xe5c5, 0xcaf6, 0xe5c9, 0xc3d4, 0xb1c5, 0xbca3, 0xd7b7, 0xcdcb,
-  0xcbcd, 0xcaca, 0xccd3, 0xe5cc, 0xe5cb, 0xc4e6, 0xd1a1, 0xd1b7,
-  0xe5cd, 0xe5d0, 0xcdb8, 0xd6f0, 0xe5cf, 0xb5dd, 0xcdbe, 0xe5d1,
-  0xb6ba, 0xcda8, 0xb9e4, 0xcac5, 0xb3d1, 0xcbd9, 0xd4ec, 0xe5d2,
-  0xb7ea, 0xe5ce, 0xe5d5, 0xb4fe, 0xe5d6, 0xe5d3, 0xe5d4, 0xd2dd,
-  0xc2df, 0xb1c6, 0xd3e2, 0xb6dd, 0xcbec, 0xe5d7, 0xd3f6, 0xb1e9,
-  0xb6f4, 0xe5da, 0xe5d8, 0xe5d9, 0xb5c0, 0xd2c5, 0xe5dc, 0xe5de,
-  0xe5dd, 0xc7b2, 0xd2a3, 0xe5db, 0xd4e2, 0xd5da, 0xe5e0, 0xd7f1,
-  0xe5e1, 0xb1dc, 0xd1fb, 0xe5e2, 0xe5e4, 0xe5e3, 0xe5e5, 0xd2d8,
-  0xb5cb, 0xe7df, 0xdaf5, 0xdaf8, 0xdaf6, 0xdaf7, 0xdafa, 0xd0cf,
-  0xc4c7, 0xb0ee, 0xd0b0, 0xdaf9, 0xd3ca, 0xbaaa, 0xdba2, 0xc7f1,
-  0xdafc, 0xdafb, 0xc9db, 0xdafd, 0xdba1, 0xd7de, 0xdafe, 0xc1da,
-  0xdba5, 0xd3f4, 0xdba7, 0xdba4, 0xdba8, 0xbdbc, 0xc0c9, 0xdba3,
-  0xdba6, 0xd6a3, 0xdba9, 0xdbad, 0xdbae, 0xdbac, 0xbac2, 0xbfa4,
-  0xdbab, 0xdbaa, 0xd4c7, 0xb2bf, 0xdbaf, 0xb9f9, 0xdbb0, 0xb3bb,
-  0xb5a6, 0xb6bc, 0xdbb1, 0xb6f5, 0xdbb2, 0xb1c9, 0xdbb4, 0xdbb3,
-  0xdbb5, 0xdbb7, 0xdbb6, 0xdbb8, 0xdbb9, 0xdbba, 0xd3cf, 0xf4fa,
-  0xc7f5, 0xd7c3, 0xc5e4, 0xf4fc, 0xf4fd, 0xf4fb, 0xbec6, 0xd0ef,
-  0xb7d3, 0xd4cd, 0xccaa, 0xf5a2, 0xf5a1, 0xbaa8, 0xf4fe, 0xcbd6,
-  0xf5a4, 0xc0d2, 0xb3ea, 0xcdaa, 0xf5a5, 0xf5a3, 0xbdb4, 0xf5a8,
-  0xf5a9, 0xbdcd, 0xc3b8, 0xbfe1, 0xcbe1, 0xf5aa, 0xf5a6, 0xf5a7,
-  0xc4f0, 0xf5ac, 0xb4bc, 0xd7ed, 0xb4d7, 0xf5ab, 0xf5ae, 0xf5ad,
-  0xf5af, 0xd0d1, 0xc3d1, 0xc8a9, 0xf5b0, 0xf5b1, 0xf5b2, 0xf5b3,
-  0xf5b4, 0xf5b5, 0xf5b7, 0xf5b6, 0xf5b8, 0xb2c9, 0xd3d4, 0xcacd,
-  0xc0ef, 0xd6d8, 0xd2b0, 0xc1bf, 0xbdf0, 0xb8aa, 0xbcf8, 0xf6c6,
-  0xf6c7, 0xf6c8, 0xf6c9, 0xf6ca, 0xf6cc, 0xf6cb, 0xf7e9, 0xf6cd,
-  0xf6ce, 0xeec4, 0xeec5, 0xeec6, 0xd5eb, 0xb6a4, 0xeec8, 0xeec7,
-  0xeec9, 0xeeca, 0xc7a5, 0xeecb, 0xeecc, 0xb7b0, 0xb5f6, 0xeecd,
-  0xeecf, 0xeece, 0xb8c6, 0xeed0, 0xeed1, 0xeed2, 0xb6db, 0xb3ae,
-  0xd6d3, 0xc4c6, 0xb1b5, 0xb8d6, 0xeed3, 0xeed4, 0xd4bf, 0xc7d5,
-  0xbefb, 0xced9, 0xb9b3, 0xeed6, 0xeed5, 0xeed8, 0xeed7, 0xc5a5,
-  0xeed9, 0xeeda, 0xc7ae, 0xeedb, 0xc7af, 0xeedc, 0xb2a7, 0xeedd,
-  0xeede, 0xeedf, 0xeee0, 0xeee1, 0xd7ea, 0xeee2, 0xeee3, 0xbcd8,
-  0xeee4, 0xd3cb, 0xccfa, 0xb2ac, 0xc1e5, 0xeee5, 0xc7a6, 0xc3ad,
-  0xeee6, 0xeee7, 0xeee8, 0xeee9, 0xeeea, 0xeeeb, 0xeeec, 0xeeed,
-  0xeeee, 0xeeef, 0xeef0, 0xeef1, 0xeef2, 0xeef4, 0xeef3, 0xeef5,
-  0xcdad, 0xc2c1, 0xeef6, 0xeef7, 0xeef8, 0xd5a1, 0xeef9, 0xcfb3,
-  0xeefa, 0xeefb, 0xeefc, 0xeefd, 0xefa1, 0xeefe, 0xefa2, 0xb8f5,
-  0xc3fa, 0xefa3, 0xefa4, 0xbdc2, 0xd2bf, 0xb2f9, 0xefa5, 0xefa6,
-  0xefa7, 0xd2f8, 0xefa8, 0xd6fd, 0xefa9, 0xc6cc, 0xefaa, 0xefab,
-  0xc1b4, 0xefac, 0xcffa, 0xcbf8, 0xefae, 0xefad, 0xb3fa, 0xb9f8,
-  0xefaf, 0xefb0, 0xd0e2, 0xefb1, 0xefb2, 0xb7e6, 0xd0bf, 0xefb3,
-  0xefb4, 0xefb5, 0xc8f1, 0xcce0, 0xefb6, 0xefb7, 0xefb8, 0xefb9,
-  0xefba, 0xd5e0, 0xefbb, 0xb4ed, 0xc3aa, 0xefbc, 0xefbd, 0xefbe,
-  0xefbf, 0xcefd, 0xefc0, 0xc2e0, 0xb4b8, 0xd7b6, 0xbdf5, 0xcfc7,
-  0xefc3, 0xefc1, 0xefc2, 0xefc4, 0xb6a7, 0xbcfc, 0xbee2, 0xc3cc,
-  0xefc5, 0xefc6, 0xefc7, 0xefcf, 0xefc8, 0xefc9, 0xefca, 0xc7c2,
-  0xeff1, 0xb6cd, 0xefcb, 0xefcc, 0xefcd, 0xb6c6, 0xc3be, 0xefce,
-  0xefd0, 0xefd1, 0xefd2, 0xd5f2, 0xefd3, 0xc4f7, 0xefd4, 0xc4f8,
-  0xefd5, 0xefd6, 0xb8e4, 0xb0f7, 0xefd7, 0xefd8, 0xefd9, 0xefda,
-  0xefdb, 0xefdc, 0xefdd, 0xefde, 0xbeb5, 0xefe1, 0xefdf, 0xefe0,
-  0xefe2, 0xefe3, 0xc1cd, 0xefe4, 0xefe5, 0xefe6, 0xefe7, 0xefe8,
-  0xefe9, 0xefea, 0xefeb, 0xefec, 0xc0d8, 0xefed, 0xc1ad, 0xefee,
-  0xefef, 0xeff0, 0xcfe2, 0xb3a4, 0xc3c5, 0xe3c5, 0xc9c1, 0xe3c6,
-  0xb1d5, 0xceca, 0xb4b3, 0xc8f2, 0xe3c7, 0xcfd0, 0xe3c8, 0xbce4,
-  0xe3c9, 0xe3ca, 0xc3c6, 0xd5a2, 0xc4d6, 0xb9eb, 0xcec5, 0xe3cb,
-  0xc3f6, 0xe3cc, 0xb7a7, 0xb8f3, 0xbad2, 0xe3cd, 0xe3ce, 0xd4c4,
-  0xe3cf, 0xe3d0, 0xd1cb, 0xe3d1, 0xe3d2, 0xe3d3, 0xe3d4, 0xd1d6,
-  0xe3d5, 0xb2fb, 0xc0bb, 0xe3d6, 0xc0ab, 0xe3d7, 0xe3d8, 0xe3d9,
-  0xe3da, 0xe3db, 0xb8b7, 0xdae2, 0xb6d3, 0xdae4, 0xdae3, 0xdae6,
-  0xc8ee, 0xdae5, 0xb7c0, 0xd1f4, 0xd2f5, 0xd5f3, 0xbdd7, 0xd7e8,
-  0xdae8, 0xdae7, 0xb0a2, 0xcdd3, 0xdae9, 0xb8bd, 0xbcca, 0xc2bd,
-  0xc2a4, 0xb3c2, 0xdaea, 0xc2aa, 0xc4b0, 0xbdb5, 0xcfde, 0xdaeb,
-  0xc9c2, 0xb1dd, 0xdaec, 0xb6b8, 0xd4ba, 0xb3fd, 0xdaed, 0xd4c9,
-  0xcfd5, 0xc5e3, 0xdaee, 0xdaef, 0xdaf0, 0xc1ea, 0xccd5, 0xcfdd,
-  0xd3e7, 0xc2a1, 0xdaf1, 0xcbe5, 0xdaf2, 0xcbe6, 0xd2fe, 0xb8f4,
-  0xdaf3, 0xb0af, 0xcfb6, 0xd5cf, 0xcbed, 0xdaf4, 0xe3c4, 0xc1a5,
-  0xf6bf, 0xf6c0, 0xf6c1, 0xc4d1, 0xc8b8, 0xd1e3, 0xd0db, 0xd1c5,
-  0xbcaf, 0xb9cd, 0xeff4, 0xb4c6, 0xd3ba, 0xf6c2, 0xb3fb, 0xf6c3,
-  0xb5f1, 0xf6c5, 0xd3ea, 0xf6a7, 0xd1a9, 0xf6a9, 0xf6a8, 0xc1e3,
-  0xc0d7, 0xb1a2, 0xceed, 0xd0e8, 0xf6ab, 0xcff6, 0xf6aa, 0xd5f0,
-  0xf6ac, 0xc3b9, 0xbbf4, 0xf6ae, 0xf6ad, 0xc4de, 0xc1d8, 0xcbaa,
-  0xcfbc, 0xf6af, 0xf6b0, 0xf6b1, 0xc2b6, 0xb0d4, 0xc5f9, 0xf6b2,
-  0xc7e0, 0xf6a6, 0xbeb8, 0xbeb2, 0xb5e5, 0xb7c7, 0xbfbf, 0xc3d2,
-  0xc3e6, 0xd8cc, 0xb8ef, 0xbdf9, 0xd1a5, 0xb0d0, 0xf7b0, 0xf7b1,
-  0xd0ac, 0xb0b0, 0xf7b2, 0xf7b3, 0xf7b4, 0xc7ca, 0xbecf, 0xf7b7,
-  0xf7b6, 0xb1de, 0xf7b5, 0xf7b8, 0xf7b9, 0xcea4, 0xc8cd, 0xbaab,
-  0xe8b8, 0xe8b9, 0xe8ba, 0xbec2, 0xd2f4, 0xd4cf, 0xc9d8, 0xd2b3,
-  0xb6a5, 0xc7ea, 0xf1fc, 0xcfee, 0xcbb3, 0xd0eb, 0xe7ef, 0xcde7,
-  0xb9cb, 0xb6d9, 0xf1fd, 0xb0e4, 0xcbcc, 0xf1fe, 0xd4a4, 0xc2ad,
-  0xc1ec, 0xc6c4, 0xbeb1, 0xf2a1, 0xbcd5, 0xf2a2, 0xf2a3, 0xf2a4,
-  0xd2c3, 0xc6b5, 0xcdc7, 0xf2a5, 0xd3b1, 0xbfc5, 0xcce2, 0xf2a6,
-  0xf2a7, 0xd1d5, 0xb6ee, 0xf2a8, 0xf2a9, 0xb5df, 0xf2aa, 0xf2ab,
-  0xb2fc, 0xf2ac, 0xf2ad, 0xc8a7, 0xb7e7, 0xeca9, 0xecaa, 0xecab,
-  0xecac, 0xc6ae, 0xecad, 0xecae, 0xb7c9, 0xcab3, 0xe2b8, 0xf7cf,
-  0xf7d0, 0xb2cd, 0xf7d1, 0xf7d3, 0xf7d2, 0xe2bb, 0xbca2, 0xe2bc,
-  0xe2bd, 0xe2be, 0xe2bf, 0xe2c0, 0xe2c1, 0xb7b9, 0xd2fb, 0xbda4,
-  0xcace, 0xb1a5, 0xcbc7, 0xe2c2, 0xb6fc, 0xc8c4, 0xe2c3, 0xbdc8,
-  0xb1fd, 0xe2c4, 0xb6f6, 0xe2c5, 0xc4d9, 0xe2c6, 0xcfda, 0xb9dd,
-  0xe2c7, 0xc0a1, 0xe2c8, 0xb2f6, 0xe2c9, 0xc1f3, 0xe2ca, 0xe2cb,
-  0xc2f8, 0xe2cc, 0xe2cd, 0xe2ce, 0xcad7, 0xd8b8, 0xd9e5, 0xcfe3,
-  0xf0a5, 0xdcb0, 0xc2ed, 0xd4a6, 0xcdd4, 0xd1b1, 0xb3db, 0xc7fd,
-  0xb2b5, 0xc2bf, 0xe6e0, 0xcabb, 0xe6e1, 0xe6e2, 0xbed4, 0xe6e3,
-  0xd7a4, 0xcdd5, 0xe6e5, 0xbcdd, 0xe6e4, 0xe6e6, 0xe6e7, 0xc2ee,
-  0xbdbe, 0xe6e8, 0xc2e6, 0xbaa7, 0xe6e9, 0xe6ea, 0xb3d2, 0xd1e9,
-  0xbfa5, 0xe6eb, 0xc6ef, 0xe6ec, 0xe6ed, 0xe6ee, 0xc6ad, 0xe6ef,
-  0xc9a7, 0xe6f0, 0xe6f1, 0xe6f2, 0xe5b9, 0xe6f3, 0xe6f4, 0xc2e2,
-  0xe6f5, 0xe6f6, 0xd6e8, 0xe6f7, 0xe6f8, 0xb9c7, 0xf7bb, 0xf7ba,
-  0xf7be, 0xf7bc, 0xbaa1, 0xf7bf, 0xf7c0, 0xf7c2, 0xf7c1, 0xf7c4,
-  0xf7c3, 0xf7c5, 0xf7c6, 0xf7c7, 0xcbe8, 0xb8df, 0xf7d4, 0xf7d5,
-  0xf7d6, 0xf7d8, 0xf7da, 0xf7d7, 0xf7db, 0xf7d9, 0xd7d7, 0xf7dc,
-  0xf7dd, 0xf7de, 0xf7df, 0xf7e0, 0xdbcb, 0xd8aa, 0xe5f7, 0xb9ed,
-  0xbffd, 0xbbea, 0xf7c9, 0xc6c7, 0xf7c8, 0xf7ca, 0xf7cc, 0xf7cb,
-  0xf7cd, 0xceba, 0xf7ce, 0xc4a7, 0xd3e3, 0xf6cf, 0xc2b3, 0xf6d0,
-  0xf6d1, 0xf6d2, 0xf6d3, 0xf6d4, 0xf6d6, 0xb1ab, 0xf6d7, 0xf6d8,
-  0xf6d9, 0xf6da, 0xf6db, 0xf6dc, 0xf6dd, 0xf6de, 0xcfca, 0xf6df,
-  0xf6e0, 0xf6e1, 0xf6e2, 0xf6e3, 0xf6e4, 0xc0f0, 0xf6e5, 0xf6e6,
-  0xf6e7, 0xf6e8, 0xf6e9, 0xf6ea, 0xf6eb, 0xf6ec, 0xf6ed, 0xf6ee,
-  0xf6ef, 0xf6f0, 0xf6f1, 0xf6f2, 0xf6f3, 0xf6f4, 0xbea8, 0xf6f5,
-  0xf6f6, 0xf6f7, 0xf6f8, 0xc8fa, 0xf6f9, 0xf6fa, 0xf6fb, 0xf6fc,
-  0xf6fd, 0xf6fe, 0xf7a1, 0xf7a2, 0xf7a3, 0xf7a4, 0xf7a5, 0xf7a6,
-  0xf7a7, 0xf7a8, 0xb1ee, 0xf7a9, 0xf7aa, 0xf7ab, 0xf7ac, 0xf7ad,
-  0xc1db, 0xf7ae, 0xf7af, 0xc4f1, 0xf0af, 0xbca6, 0xf0b0, 0xc3f9,
-  0xc5b8, 0xd1bb, 0xf0b1, 0xf0b2, 0xf0b3, 0xf0b4, 0xf0b5, 0xd1bc,
-  0xd1ec, 0xf0b7, 0xf0b6, 0xd4a7, 0xcdd2, 0xf0b8, 0xf0ba, 0xf0b9,
-  0xf0bb, 0xf0bc, 0xb8eb, 0xf0bd, 0xbae8, 0xf0be, 0xf0bf, 0xbee9,
-  0xf0c0, 0xb6ec, 0xf0c1, 0xf0c2, 0xf0c3, 0xf0c4, 0xc8b5, 0xf0c5,
-  0xf0c6, 0xf0c7, 0xc5f4, 0xf0c8, 0xf0c9, 0xf0ca, 0xf7bd, 0xf0cb,
-  0xf0cc, 0xf0cd, 0xf0ce, 0xf0cf, 0xbad7, 0xf0d0, 0xf0d1, 0xf0d2,
-  0xf0d3, 0xf0d4, 0xf0d5, 0xf0d6, 0xf0d8, 0xd3a5, 0xf0d7, 0xf0d9,
-  0xf5ba, 0xc2b9, 0xf7e4, 0xf7e5, 0xf7e6, 0xf7e7, 0xf7e8, 0xc2b4,
-  0xf7ea, 0xf7eb, 0xc2f3, 0xf4f0, 0xf4ef, 0xc2e9, 0xf7e1, 0xf7e2,
-  0xbbc6, 0xd9e4, 0xcaf2, 0xc0e8, 0xf0a4, 0xbada, 0xc7ad, 0xc4ac,
-  0xf7ec, 0xf7ed, 0xf7ee, 0xf7f0, 0xf7ef, 0xf7f1, 0xf7f4, 0xf7f3,
-  0xf7f2, 0xf7f5, 0xf7f6, 0xede9, 0xedea, 0xedeb, 0xf6bc, 0xf6bd,
-  0xf6be, 0xb6a6, 0xd8be, 0xb9c4, 0xd8bb, 0xdcb1, 0xcaf3, 0xf7f7,
-  0xf7f8, 0xf7f9, 0xf7fb, 0xf7fa, 0xb1c7, 0xf7fc, 0xf7fd, 0xf7fe,
-  0xc6eb, 0xecb4, 0xb3dd, 0xf6b3, 0xf6b4, 0xc1e4, 0xf6b5, 0xf6b6,
-  0xf6b7, 0xf6b8, 0xf6b9, 0xf6ba, 0xc8a3, 0xf6bb, 0xc1fa, 0xb9a8,
-  0xede8, 0xb9ea, 0xd9df, 0xa3a1, 0xa3a2, 0xa3a3, 0xa1e7, 0xa3a5,
-  0xa3a6, 0xa3a7, 0xa3a8, 0xa3a9, 0xa3aa, 0xa3ab, 0xa3ac, 0xa3ad,
-  0xa3ae, 0xa3af, 0xa3b0, 0xa3b1, 0xa3b2, 0xa3b3, 0xa3b4, 0xa3b5,
-  0xa3b6, 0xa3b7, 0xa3b8, 0xa3b9, 0xa3ba, 0xa3bb, 0xa3bc, 0xa3bd,
-  0xa3be, 0xa3bf, 0xa3c0, 0xa3c1, 0xa3c2, 0xa3c3, 0xa3c4, 0xa3c5,
-  0xa3c6, 0xa3c7, 0xa3c8, 0xa3c9, 0xa3ca, 0xa3cb, 0xa3cc, 0xa3cd,
-  0xa3ce, 0xa3cf, 0xa3d0, 0xa3d1, 0xa3d2, 0xa3d3, 0xa3d4, 0xa3d5,
-  0xa3d6, 0xa3d7, 0xa3d8, 0xa3d9, 0xa3da, 0xa3db, 0xa3dc, 0xa3dd,
-  0xa3de, 0xa3df, 0xa3e0, 0xa3e1, 0xa3e2, 0xa3e3, 0xa3e4, 0xa3e5,
-  0xa3e6, 0xa3e7, 0xa3e8, 0xa3e9, 0xa3ea, 0xa3eb, 0xa3ec, 0xa3ed,
-  0xa3ee, 0xa3ef, 0xa3f0, 0xa3f1, 0xa3f2, 0xa3f3, 0xa3f4, 0xa3f5,
-  0xa3f6, 0xa3f7, 0xa3f8, 0xa3f9, 0xa3fa, 0xa3fb, 0xa3fc, 0xa3fd,
-  0xa1ab, 0xa1e9, 0xa1ea, 0xa3fe, 0xa3a4,
-};
-
-typedef struct {
-  unsigned short indx; /* index into big table */
-  unsigned short used; /* bitmask of used entries */
-} Summary16;
-
-static const Summary16 gb2312_uni2indx_page00[70] = {
-  /* 0x0000 */
-  {    0, 0x0000 }, {    0, 0x0000 }, {    0, 0x0000 }, {    0, 0x0000 },
-  {    0, 0x0000 }, {    0, 0x0000 }, {    0, 0x0000 }, {    0, 0x0000 },
-  {    0, 0x0000 }, {    0, 0x0000 }, {    0, 0x0190 }, {    3, 0x0003 },
-  {    5, 0x0000 }, {    5, 0x0080 }, {    6, 0x3703 }, {   13, 0x168c },
-  /* 0x0100 */
-  {   19, 0x0002 }, {   20, 0x0808 }, {   22, 0x0800 }, {   23, 0x0000 },
-  {   23, 0x2000 }, {   24, 0x0000 }, {   24, 0x0800 }, {   25, 0x0000 },
-  {   25, 0x0000 }, {   25, 0x0000 }, {   25, 0x0000 }, {   25, 0x0000 },
-  {   25, 0x4000 }, {   26, 0x1555 }, {   33, 0x0000 }, {   33, 0x0000 },
-  /* 0x0200 */
-  {   33, 0x0000 }, {   33, 0x0000 }, {   33, 0x0000 }, {   33, 0x0000 },
-  {   33, 0x0000 }, {   33, 0x0000 }, {   33, 0x0000 }, {   33, 0x0000 },
-  {   33, 0x0000 }, {   33, 0x0000 }, {   33, 0x0000 }, {   33, 0x0000 },
-  {   33, 0x0280 }, {   35, 0x0000 }, {   35, 0x0000 }, {   35, 0x0000 },
-  /* 0x0300 */
-  {   35, 0x0000 }, {   35, 0x0000 }, {   35, 0x0000 }, {   35, 0x0000 },
-  {   35, 0x0000 }, {   35, 0x0000 }, {   35, 0x0000 }, {   35, 0x0000 },
-  {   35, 0x0000 }, {   35, 0xfffe }, {   50, 0x03fb }, {   59, 0xfffe },
-  {   74, 0x03fb }, {   83, 0x0000 }, {   83, 0x0000 }, {   83, 0x0000 },
-  /* 0x0400 */
-  {   83, 0x0002 }, {   84, 0xffff }, {  100, 0xffff }, {  116, 0xffff },
-  {  132, 0xffff }, {  148, 0x0002 },
-};
-static const Summary16 gb2312_uni2indx_page20[101] = {
-  /* 0x2000 */
-  {  149, 0x0000 }, {  149, 0x3360 }, {  155, 0x0040 }, {  156, 0x080d },
-  {  160, 0x0000 }, {  160, 0x0000 }, {  160, 0x0000 }, {  160, 0x0000 },
-  {  160, 0x0000 }, {  160, 0x0000 }, {  160, 0x0000 }, {  160, 0x0000 },
-  {  160, 0x0000 }, {  160, 0x0000 }, {  160, 0x0000 }, {  160, 0x0000 },
-  /* 0x2100 */
-  {  160, 0x0008 }, {  161, 0x0040 }, {  162, 0x0000 }, {  162, 0x0000 },
-  {  162, 0x0000 }, {  162, 0x0000 }, {  162, 0x0fff }, {  174, 0x0000 },
-  {  174, 0x0000 }, {  174, 0x000f }, {  178, 0x0000 }, {  178, 0x0000 },
-  {  178, 0x0000 }, {  178, 0x0000 }, {  178, 0x0000 }, {  178, 0x0000 },
-  /* 0x2200 */
-  {  178, 0x8100 }, {  180, 0x6402 }, {  184, 0x4fa1 }, {  192, 0x20f0 },
-  {  197, 0x1100 }, {  199, 0x0000 }, {  199, 0xc033 }, {  205, 0x0000 },
-  {  205, 0x0000 }, {  205, 0x0200 }, {  206, 0x0020 }, {  207, 0x0000 },
-  {  207, 0x0000 }, {  207, 0x0000 }, {  207, 0x0000 }, {  207, 0x0000 },
-  /* 0x2300 */
-  {  207, 0x0000 }, {  207, 0x0004 }, {  208, 0x0000 }, {  208, 0x0000 },
-  {  208, 0x0000 }, {  208, 0x0000 }, {  208, 0x0000 }, {  208, 0x0000 },
-  {  208, 0x0000 }, {  208, 0x0000 }, {  208, 0x0000 }, {  208, 0x0000 },
-  {  208, 0x0000 }, {  208, 0x0000 }, {  208, 0x0000 }, {  208, 0x0000 },
-  /* 0x2400 */
-  {  208, 0x0000 }, {  208, 0x0000 }, {  208, 0x0000 }, {  208, 0x0000 },
-  {  208, 0x0000 }, {  208, 0x0000 }, {  208, 0x03ff }, {  218, 0xfff0 },
-  {  230, 0xffff }, {  246, 0x0fff }, {  258, 0x0000 }, {  258, 0x0000 },
-  {  258, 0x0000 }, {  258, 0x0000 }, {  258, 0x0000 }, {  258, 0x0000 },
-  /* 0x2500 */
-  {  258, 0xffff }, {  274, 0xffff }, {  290, 0xffff }, {  306, 0xffff },
-  {  322, 0x0fff }, {  334, 0x0000 }, {  334, 0x0000 }, {  334, 0x0000 },
-  {  334, 0x0000 }, {  334, 0x0000 }, {  334, 0x0003 }, {  336, 0x000c },
-  {  338, 0xc8c0 }, {  343, 0x0000 }, {  343, 0x0000 }, {  343, 0x0000 },
-  /* 0x2600 */
-  {  343, 0x0060 }, {  345, 0x0000 }, {  345, 0x0000 }, {  345, 0x0000 },
-  {  345, 0x0005 },
-};
-static const Summary16 gb2312_uni2indx_page30[35] = {
-  /* 0x3000 */
-  {  347, 0xff2f }, {  360, 0x00fb }, {  367, 0x0000 }, {  367, 0x0000 },
-  {  367, 0xfffe }, {  382, 0xffff }, {  398, 0xffff }, {  414, 0xffff },
-  {  430, 0xffff }, {  446, 0x000f }, {  450, 0xfffe }, {  465, 0xffff },
-  {  481, 0xffff }, {  497, 0xffff }, {  513, 0xffff }, {  529, 0x087f },
-  /* 0x3100 */
-  {  537, 0xffe0 }, {  548, 0xffff }, {  564, 0x03ff }, {  574, 0x0000 },
-  {  574, 0x0000 }, {  574, 0x0000 }, {  574, 0x0000 }, {  574, 0x0000 },
-  {  574, 0x0000 }, {  574, 0x0000 }, {  574, 0x0000 }, {  574, 0x0000 },
-  {  574, 0x0000 }, {  574, 0x0000 }, {  574, 0x0000 }, {  574, 0x0000 },
-  /* 0x3200 */
-  {  574, 0x0000 }, {  574, 0x0000 }, {  574, 0x03ff },
-};
-static const Summary16 gb2312_uni2indx_page4e[1263] = {
-  /* 0x4e00 */
-  {  584, 0x7f8b }, {  595, 0x7f7b }, {  608, 0x3db4 }, {  617, 0xef55 },
-  {  628, 0xfba8 }, {  638, 0xf35d }, {  649, 0x0243 }, {  653, 0x400b },
-  {  657, 0xfb40 }, {  665, 0x8d3e }, {  674, 0x7bf7 }, {  687, 0x8c2c },
-  {  693, 0x6eff }, {  706, 0xe3fa }, {  717, 0x1d3a }, {  725, 0xa8ed },
-  /* 0x4f00 */
-  {  734, 0xe602 }, {  740, 0xcf83 }, {  749, 0x8cf5 }, {  758, 0x3555 },
-  {  766, 0xe048 }, {  771, 0xffab }, {  784, 0x92b9 }, {  792, 0xd859 },
-  {  800, 0xab18 }, {  807, 0x2892 }, {  812, 0xd7e9 }, {  823, 0x8020 },
-  {  825, 0xc438 }, {  831, 0xf583 }, {  840, 0xe74a }, {  849, 0x450a },
-  /* 0x5000 */
-  {  854, 0xb000 }, {  857, 0x9714 }, {  864, 0x7762 }, {  873, 0x5400 },
-  {  876, 0xd188 }, {  882, 0x1420 }, {  885, 0x1020 }, {  887, 0xc8c0 },
-  {  892, 0x2121 }, {  896, 0x0000 }, {  896, 0x13a8 }, {  902, 0x0c04 },
-  {  905, 0x8000 }, {  906, 0x0440 }, {  908, 0x70c0 }, {  913, 0x0828 },
-  /* 0x5100 */
-  {  916, 0x08c0 }, {  919, 0x0004 }, {  920, 0x0002 }, {  921, 0x8000 },
-  {  922, 0x2b7b }, {  932, 0x1472 }, {  938, 0x7924 }, {  945, 0x3bfb },
-  {  957, 0x3327 }, {  965, 0x1ae4 }, {  972, 0x9835 }, {  979, 0x38ef },
-  {  989, 0x9ad1 }, {  997, 0x2802 }, { 1000, 0xa813 }, { 1006, 0xbf69 },
-  /* 0x5200 */
-  { 1017, 0x65cf }, { 1027, 0x2fc6 }, { 1036, 0x6b11 }, { 1043, 0xafc9 },
-  { 1053, 0x340f }, { 1060, 0x5053 }, { 1066, 0x86a2 }, { 1072, 0xa004 },
-  { 1075, 0x0106 }, { 1078, 0xe809 }, { 1084, 0x3f0f }, { 1094, 0xc00e },
-  { 1099, 0x0a88 }, { 1103, 0x8145 }, { 1108, 0x0010 }, { 1109, 0xc601 },
-  /* 0x5300 */
-  { 1114, 0xa161 }, { 1120, 0x26e1 }, { 1127, 0x444b }, { 1133, 0xce00 },
-  { 1138, 0xc7aa }, { 1147, 0xd4ee }, { 1157, 0xcadf }, { 1168, 0x85bb },
-  { 1177, 0x3a74 }, { 1185, 0xa520 }, { 1190, 0x436c }, { 1197, 0x8840 },
-  { 1200, 0x3f06 }, { 1208, 0x8bd2 }, { 1216, 0xff79 }, { 1229, 0x3bef },
-  /* 0x5400 */
-  { 1241, 0xf75a }, { 1252, 0xe8ef }, { 1263, 0xfbcb }, { 1275, 0x5b36 },
-  { 1284, 0x0d49 }, { 1290, 0x1bfd }, { 1301, 0x0154 }, { 1305, 0x39ee },
-  { 1315, 0xd855 }, { 1323, 0x2e75 }, { 1332, 0xbfd8 }, { 1343, 0xa91a },
-  { 1350, 0xf3d7 }, { 1362, 0xf6bf }, { 1375, 0x67e0 }, { 1383, 0xb40c },
-  /* 0x5500 */
-  { 1389, 0x82c2 }, { 1394, 0x0813 }, { 1398, 0xd49d }, { 1407, 0xd08b },
-  { 1414, 0x065a }, { 1420, 0x1061 }, { 1424, 0x74f2 }, { 1433, 0x59e0 },
-  { 1440, 0x8f9f }, { 1451, 0xb312 }, { 1458, 0x0080 }, { 1459, 0x6aaa },
-  { 1467, 0x3230 }, { 1472, 0xb05e }, { 1480, 0x9d7a }, { 1490, 0x60ac },
-  /* 0x5600 */
-  { 1496, 0xd303 }, { 1503, 0xc900 }, { 1507, 0x3098 }, { 1512, 0x8a56 },
-  { 1519, 0x7000 }, { 1522, 0x1390 }, { 1527, 0x1f14 }, { 1534, 0x1842 },
-  { 1538, 0xc060 }, { 1542, 0x0008 }, { 1543, 0x8008 }, { 1545, 0x1080 },
-  { 1547, 0x0400 }, { 1548, 0xec90 }, { 1555, 0x2817 }, { 1561, 0xe633 },
-  /* 0x5700 */
-  { 1570, 0x0758 }, { 1576, 0x9000 }, { 1578, 0xf708 }, { 1586, 0x4e09 },
-  { 1592, 0xf485 }, { 1600, 0xfc83 }, { 1609, 0xaf53 }, { 1619, 0x18c8 },
-  { 1624, 0x187c }, { 1631, 0x080c }, { 1634, 0x6adf }, { 1645, 0x0114 },
-  { 1648, 0xc80c }, { 1653, 0xa734 }, { 1661, 0xa011 }, { 1665, 0x2710 },
-  /* 0x5800 */
-  { 1670, 0x28c5 }, { 1676, 0x4222 }, { 1680, 0x0413 }, { 1684, 0x0021 },
-  { 1686, 0x3010 }, { 1689, 0x4112 }, { 1693, 0x1820 }, { 1696, 0x4000 },
-  { 1697, 0x022b }, { 1702, 0xc60c }, { 1708, 0x0300 }, { 1710, 0x1000 },
-  { 1711, 0x0022 }, { 1713, 0x0022 }, { 1715, 0x5810 }, { 1719, 0x0249 },
-  /* 0x5900 */
-  { 1723, 0xa094 }, { 1728, 0x9670 }, { 1735, 0xeeb0 }, { 1744, 0x1792 },
-  { 1751, 0xcb96 }, { 1760, 0x05f2 }, { 1767, 0x0025 }, { 1770, 0x2358 },
-  { 1776, 0x25de }, { 1785, 0x42cc }, { 1791, 0xcf38 }, { 1800, 0x4a04 },
-  { 1804, 0x0c40 }, { 1807, 0x359f }, { 1817, 0x1128 }, { 1821, 0x8a00 },
-  /* 0x5a00 */
-  { 1824, 0x13fa }, { 1833, 0x910a }, { 1838, 0x0229 }, { 1842, 0x1056 },
-  { 1847, 0x0641 }, { 1851, 0x0420 }, { 1853, 0x0484 }, { 1856, 0x84f0 },
-  { 1862, 0x0000 }, { 1862, 0x0c04 }, { 1865, 0x0400 }, { 1866, 0x412c },
-  { 1871, 0x1206 }, { 1875, 0x1154 }, { 1880, 0x0a4b }, { 1886, 0x0002 },
-  /* 0x5b00 */
-  { 1887, 0x0200 }, { 1888, 0x00c0 }, { 1890, 0x0000 }, { 1890, 0x0094 },
-  { 1893, 0x0001 }, { 1894, 0xbfbb }, { 1907, 0x167c }, { 1915, 0x242b },
-  { 1921, 0x9bbb }, { 1932, 0x7fa8 }, { 1942, 0x0c7f }, { 1951, 0xe379 },
-  { 1961, 0x10f4 }, { 1967, 0xe00d }, { 1973, 0x4132 }, { 1978, 0x9f01 },
-  /* 0x5c00 */
-  { 1985, 0x8652 }, { 1991, 0x3572 }, { 1999, 0x10b4 }, { 2004, 0xff12 },
-  { 2014, 0xcf27 }, { 2024, 0x4223 }, { 2029, 0xc06b }, { 2036, 0x8602 },
-  { 2040, 0x3106 }, { 2045, 0x1fd3 }, { 2055, 0x3a0c }, { 2061, 0xa1aa },
-  { 2068, 0x0812 }, { 2071, 0x0204 }, { 2073, 0x2572 }, { 2080, 0x0801 },
-  /* 0x5d00 */
-  { 2082, 0x40cc }, { 2087, 0x4850 }, { 2091, 0x62d0 }, { 2097, 0x6010 },
-  { 2100, 0x1c80 }, { 2104, 0x2900 }, { 2107, 0x9a00 }, { 2111, 0x0010 },
-  { 2112, 0x0004 }, { 2113, 0x2200 }, { 2115, 0x0000 }, { 2115, 0x0080 },
-  { 2116, 0x2020 }, { 2118, 0x6800 }, { 2121, 0xcbe6 }, { 2131, 0x609e },
-  /* 0x5e00 */
-  { 2138, 0x916e }, { 2146, 0x3f73 }, { 2157, 0x60c0 }, { 2161, 0x3982 },
-  { 2167, 0x1034 }, { 2171, 0x4830 }, { 2175, 0x0006 }, { 2177, 0xbd5c },
-  { 2187, 0x8cd1 }, { 2194, 0xd6fb }, { 2206, 0x20e1 }, { 2211, 0x43e8 },
-  { 2218, 0x0600 }, { 2220, 0x084e }, { 2225, 0x0500 }, { 2227, 0xc4d0 },
-  /* 0x5f00 */
-  { 2233, 0x8d1f }, { 2242, 0x89aa }, { 2249, 0xa6e1 }, { 2257, 0x1602 },
-  { 2261, 0x0001 }, { 2262, 0x21ed }, { 2270, 0x3656 }, { 2278, 0x1a8b },
-  { 2285, 0x1fb7 }, { 2296, 0x13a5 }, { 2303, 0x6502 }, { 2308, 0x30a0 },
-  { 2312, 0xb278 }, { 2320, 0x23c7 }, { 2328, 0x6c93 }, { 2336, 0xe922 },
-  /* 0x6000 */
-  { 2343, 0xe47f }, { 2354, 0x3a74 }, { 2362, 0x8fe3 }, { 2372, 0x9820 },
-  { 2376, 0x280e }, { 2381, 0x2625 }, { 2387, 0xbf9c }, { 2398, 0xbf49 },
-  { 2408, 0x3218 }, { 2413, 0xac54 }, { 2420, 0xb949 }, { 2428, 0x1916 },
-  { 2434, 0x0c60 }, { 2438, 0xb522 }, { 2445, 0xfbc1 }, { 2455, 0x0659 },
-  /* 0x6100 */
-  { 2461, 0xe343 }, { 2469, 0x8420 }, { 2472, 0x08d9 }, { 2478, 0x8000 },
-  { 2479, 0x5500 }, { 2483, 0x2022 }, { 2486, 0x0184 }, { 2489, 0x00a1 },
-  { 2492, 0x4800 }, { 2494, 0x2010 }, { 2496, 0x1380 }, { 2500, 0x4080 },
-  { 2502, 0x0d04 }, { 2506, 0x0016 }, { 2509, 0x0040 }, { 2510, 0x8020 },
-  /* 0x6200 */
-  { 2512, 0xfd40 }, { 2520, 0x8de7 }, { 2530, 0x5436 }, { 2537, 0xe098 },
-  { 2543, 0x7b8b }, { 2553, 0x091e }, { 2559, 0xfec8 }, { 2569, 0xd249 },
-  { 2576, 0x0611 }, { 2580, 0x8dee }, { 2590, 0x1937 }, { 2598, 0xba22 },
-  { 2605, 0x77f4 }, { 2616, 0x9fdd }, { 2628, 0xf3ec }, { 2639, 0xf0da },
-  /* 0x6300 */
-  { 2648, 0x4386 }, { 2654, 0xec42 }, { 2661, 0x8d3f }, { 2671, 0x2604 },
-  { 2675, 0xfa6c }, { 2685, 0xc021 }, { 2689, 0x628e }, { 2696, 0x0cc2 },
-  { 2701, 0xd785 }, { 2710, 0x0145 }, { 2714, 0x77ad }, { 2725, 0x5599 },
-  { 2733, 0xe250 }, { 2739, 0x4045 }, { 2743, 0x260b }, { 2749, 0xa154 },
-  /* 0x6400 */
-  { 2755, 0x9827 }, { 2762, 0x5819 }, { 2768, 0x3443 }, { 2774, 0xa410 },
-  { 2778, 0x05f2 }, { 2785, 0x4114 }, { 2789, 0x2280 }, { 2792, 0x0700 },
-  { 2795, 0x00b4 }, { 2799, 0x4266 }, { 2805, 0x7210 }, { 2810, 0x15a1 },
-  { 2816, 0x6025 }, { 2821, 0x4185 }, { 2826, 0x0054 }, { 2829, 0x0000 },
-  /* 0x6500 */
-  { 2829, 0x0201 }, { 2831, 0x0104 }, { 2833, 0xc820 }, { 2837, 0xcb70 },
-  { 2845, 0x9320 }, { 2850, 0x6a62 }, { 2857, 0x184c }, { 2862, 0x0095 },
-  { 2866, 0x1880 }, { 2869, 0x9a8b }, { 2877, 0xaab2 }, { 2885, 0x3201 },
-  { 2889, 0xd87a }, { 2898, 0x00c4 }, { 2901, 0xf3e5 }, { 2912, 0x04c3 },
-  /* 0x6600 */
-  { 2917, 0xd44d }, { 2925, 0xa238 }, { 2931, 0xa1a1 }, { 2937, 0x5072 },
-  { 2943, 0x980a }, { 2948, 0x84fc }, { 2956, 0xc152 }, { 2962, 0x44d1 },
-  { 2968, 0x1094 }, { 2972, 0x20c2 }, { 2976, 0x4180 }, { 2979, 0x4210 },
-  { 2982, 0x0000 }, { 2982, 0x3a00 }, { 2986, 0x0240 }, { 2988, 0xd29d },
-  /* 0x6700 */
-  { 2997, 0x2f01 }, { 3003, 0xa8b1 }, { 3010, 0xbd40 }, { 3017, 0x2432 },
-  { 3022, 0xd34d }, { 3031, 0xd04b }, { 3038, 0xa723 }, { 3046, 0xd0ad },
-  { 3054, 0x0a92 }, { 3059, 0x75a1 }, { 3067, 0xadac }, { 3076, 0x01e9 },
-  { 3082, 0x801a }, { 3086, 0x771f }, { 3097, 0x9225 }, { 3103, 0xa01b },
-  /* 0x6800 */
-  { 3109, 0xdfa1 }, { 3119, 0x20ca }, { 3124, 0x0602 }, { 3127, 0x738c },
-  { 3135, 0x577f }, { 3147, 0x003b }, { 3152, 0x0bff }, { 3163, 0x00d0 },
-  { 3166, 0x806a }, { 3171, 0x0088 }, { 3173, 0xa1c4 }, { 3179, 0x0029 },
-  { 3182, 0x2a05 }, { 3187, 0x0524 }, { 3191, 0x4009 }, { 3194, 0x1623 },
-  /* 0x6900 */
-  { 3200, 0x6822 }, { 3205, 0x8005 }, { 3208, 0x2011 }, { 3211, 0xa211 },
-  { 3216, 0x0004 }, { 3217, 0x6490 }, { 3222, 0x4849 }, { 3227, 0x1382 },
-  { 3232, 0x23d5 }, { 3240, 0x1930 }, { 3245, 0x2980 }, { 3249, 0x0892 },
-  { 3253, 0x5402 }, { 3257, 0x8811 }, { 3261, 0x2001 }, { 3263, 0xa004 },
-  /* 0x6a00 */
-  { 3266, 0x0400 }, { 3267, 0x8180 }, { 3270, 0x8502 }, { 3274, 0x6022 },
-  { 3278, 0x0090 }, { 3280, 0x0b01 }, { 3284, 0x0022 }, { 3286, 0x1202 },
-  { 3289, 0x4011 }, { 3292, 0x0083 }, { 3295, 0x1a01 }, { 3299, 0x0000 },
-  { 3299, 0x0000 }, { 3299, 0x0000 }, { 3299, 0x0000 }, { 3299, 0x0000 },
-  /* 0x6b00 */
-  { 3299, 0x0000 }, { 3299, 0x0000 }, { 3299, 0x009f }, { 3305, 0x4684 },
-  { 3310, 0x12c8 }, { 3315, 0x0200 }, { 3316, 0x04fc }, { 3323, 0x1a00 },
-  { 3326, 0x2ede }, { 3336, 0x0c4c }, { 3341, 0x0402 }, { 3343, 0x80b8 },
-  { 3348, 0xa826 }, { 3354, 0x0afc }, { 3362, 0x8c02 }, { 3366, 0x2228 },
-  /* 0x6c00 */
-  { 3370, 0xa0e0 }, { 3375, 0x8f7b }, { 3386, 0xc7d6 }, { 3396, 0x2135 },
-  { 3402, 0x06c7 }, { 3409, 0xf8b1 }, { 3418, 0x0713 }, { 3424, 0x6255 },
-  { 3431, 0x936e }, { 3440, 0x8a19 }, { 3446, 0x6efa }, { 3457, 0xfb0e },
-  { 3467, 0x1630 }, { 3472, 0x48f9 }, { 3480, 0xcd2f }, { 3490, 0x7deb },
-  /* 0x6d00 */
-  { 3502, 0x5892 }, { 3508, 0x4e84 }, { 3514, 0x4ca0 }, { 3519, 0x7a2e },
-  { 3528, 0xedea }, { 3539, 0x561e }, { 3547, 0xc649 }, { 3554, 0x1190 },
-  { 3558, 0x5324 }, { 3564, 0xe83a }, { 3572, 0xcfdb }, { 3584, 0x8124 },
-  { 3588, 0x18f1 }, { 3595, 0x6342 }, { 3601, 0x5853 }, { 3608, 0x1a8a },
-  /* 0x6e00 */
-  { 3614, 0x7420 }, { 3619, 0x24d3 }, { 3626, 0xaa3b }, { 3635, 0x0514 },
-  { 3639, 0x6018 }, { 3643, 0x8958 }, { 3649, 0x4800 }, { 3651, 0xc000 },
-  { 3653, 0x8268 }, { 3658, 0x9101 }, { 3662, 0x84a4 }, { 3667, 0x2cd6 },
-  { 3675, 0x8886 }, { 3680, 0xc4ba }, { 3688, 0x0377 }, { 3696, 0x0210 },
-  /* 0x6f00 */
-  { 3698, 0x8244 }, { 3702, 0x0038 }, { 3705, 0xae11 }, { 3712, 0x404a },
-  { 3716, 0x28c0 }, { 3720, 0x5100 }, { 3723, 0x6044 }, { 3727, 0x1514 },
-  { 3732, 0x7310 }, { 3738, 0x1000 }, { 3739, 0x0082 }, { 3741, 0x0248 },
-  { 3744, 0x0205 }, { 3747, 0x4006 }, { 3750, 0xc003 }, { 3754, 0x0000 },
-  /* 0x7000 */
-  { 3754, 0x0000 }, { 3754, 0x0c02 }, { 3757, 0x0008 }, { 3758, 0x0220 },
-  { 3760, 0x9000 }, { 3762, 0x4000 }, { 3763, 0xb800 }, { 3767, 0xd161 },
-  { 3774, 0x4621 }, { 3779, 0x3274 }, { 3786, 0xf800 }, { 3791, 0x3b8a },
-  { 3799, 0x050f }, { 3805, 0x8b00 }, { 3809, 0xbbd0 }, { 3818, 0x2280 },
-  /* 0x7100 */
-  { 3821, 0x0600 }, { 3823, 0x0769 }, { 3830, 0x8040 }, { 3832, 0x0043 },
-  { 3835, 0x5420 }, { 3839, 0x5000 }, { 3841, 0x41d0 }, { 3846, 0x250c },
-  { 3851, 0x8410 }, { 3854, 0x8310 }, { 3858, 0x1101 }, { 3861, 0x0228 },
-  { 3864, 0x4008 }, { 3866, 0x0030 }, { 3868, 0x40a1 }, { 3872, 0x0200 },
-  /* 0x7200 */
-  { 3873, 0x0040 }, { 3874, 0x2000 }, { 3875, 0x1500 }, { 3878, 0xabe3 },
-  { 3888, 0x3180 }, { 3892, 0xaa44 }, { 3898, 0xc2c6 }, { 3905, 0xc624 },
-  { 3911, 0xac13 }, { 3918, 0x8004 }, { 3920, 0xb000 }, { 3923, 0x03d1 },
-  { 3929, 0x611e }, { 3936, 0x4285 }, { 3941, 0xf303 }, { 3949, 0x1d9f },
-  /* 0x7300 */
-  { 3959, 0x440a }, { 3963, 0x78e8 }, { 3971, 0x5e26 }, { 3979, 0xc392 },
-  { 3986, 0x2000 }, { 3987, 0x0085 }, { 3990, 0xb001 }, { 3994, 0x4000 },
-  { 3995, 0x4a90 }, { 4000, 0x8842 }, { 4004, 0xca04 }, { 4009, 0x0c8d },
-  { 4015, 0xa705 }, { 4022, 0x4203 }, { 4026, 0x22a1 }, { 4031, 0x0004 },
-  /* 0x7400 */
-  { 4032, 0x8668 }, { 4038, 0x0c01 }, { 4041, 0x5564 }, { 4048, 0x1079 },
-  { 4054, 0x0002 }, { 4055, 0xdea0 }, { 4063, 0x2000 }, { 4064, 0x40c1 },
-  { 4068, 0x488b }, { 4074, 0x5001 }, { 4077, 0x0380 }, { 4080, 0x0400 },
-  { 4081, 0x0000 }, { 4081, 0x5004 }, { 4084, 0xc05d }, { 4091, 0x80d0 },
-  /* 0x7500 */
-  { 4095, 0xa010 }, { 4098, 0x970a }, { 4105, 0xbb20 }, { 4112, 0x4daf },
-  { 4122, 0xd921 }, { 4129, 0x1e10 }, { 4134, 0x0460 }, { 4137, 0x8314 },
-  { 4142, 0x8848 }, { 4146, 0xa6d6 }, { 4155, 0xd83b }, { 4164, 0x733f },
-  { 4175, 0x27bc }, { 4184, 0x4974 }, { 4191, 0x0ddc }, { 4199, 0x9213 },
-  /* 0x7600 */
-  { 4205, 0x142b }, { 4211, 0x8ba1 }, { 4218, 0x2e75 }, { 4227, 0xd139 },
-  { 4235, 0x3009 }, { 4239, 0x5050 }, { 4243, 0x8808 }, { 4246, 0x6900 },
-  { 4250, 0x49d4 }, { 4257, 0x024a }, { 4261, 0x4010 }, { 4263, 0x8016 },
-  { 4267, 0xe564 }, { 4275, 0x89d7 }, { 4284, 0xc020 }, { 4287, 0x5316 },
-  /* 0x7700 */
-  { 4294, 0x2b92 }, { 4301, 0x8600 }, { 4304, 0xa345 }, { 4311, 0x15e0 },
-  { 4317, 0x008b }, { 4321, 0x0c03 }, { 4325, 0x196e }, { 4333, 0xe200 },
-  { 4337, 0x7031 }, { 4343, 0x8006 }, { 4346, 0x16a5 }, { 4353, 0xa829 },
-  { 4359, 0x2000 }, { 4360, 0x1880 }, { 4363, 0x7aac }, { 4372, 0xe148 },
-  /* 0x7800 */
-  { 4378, 0x3207 }, { 4384, 0xb5d6 }, { 4394, 0x32e8 }, { 4401, 0x5f91 },
-  { 4410, 0x50a1 }, { 4415, 0x20e5 }, { 4421, 0x7c00 }, { 4426, 0x1080 },
-  { 4428, 0x7280 }, { 4433, 0x9d8a }, { 4441, 0x00aa }, { 4445, 0x421f },
-  { 4452, 0x0e22 }, { 4457, 0x0231 }, { 4461, 0x1100 }, { 4463, 0x0494 },
-  /* 0x7900 */
-  { 4467, 0x0022 }, { 4469, 0x4008 }, { 4471, 0x0010 }, { 4472, 0x5c10 },
-  { 4477, 0x0343 }, { 4482, 0xfcc8 }, { 4491, 0xa1a5 }, { 4498, 0x0580 },
-  { 4501, 0x8433 }, { 4507, 0x0400 }, { 4508, 0x0080 }, { 4509, 0x6e08 },
-  { 4515, 0x2a4b }, { 4522, 0x8126 }, { 4527, 0xaad8 }, { 4535, 0x2901 },
-  /* 0x7a00 */
-  { 4539, 0x684d }, { 4546, 0x4490 }, { 4550, 0x0009 }, { 4552, 0xba88 },
-  { 4559, 0x0040 }, { 4560, 0x0082 }, { 4562, 0x0000 }, { 4562, 0x87d1 },
-  { 4570, 0x215b }, { 4577, 0xb1e6 }, { 4586, 0x3161 }, { 4592, 0x8008 },
-  { 4594, 0x0800 }, { 4595, 0xc240 }, { 4599, 0xa069 }, { 4605, 0xa600 },
-  /* 0x7b00 */
-  { 4609, 0x8d58 }, { 4616, 0x4a32 }, { 4622, 0x5d71 }, { 4631, 0x550a },
-  { 4637, 0x9aa0 }, { 4643, 0x2d57 }, { 4652, 0x4005 }, { 4655, 0x4aa6 },
-  { 4662, 0x2021 }, { 4665, 0x30b1 }, { 4671, 0x3fc6 }, { 4681, 0x0112 },
-  { 4684, 0x10c2 }, { 4688, 0x260a }, { 4693, 0x4462 }, { 4698, 0x5082 },
-  /* 0x7c00 */
-  { 4702, 0x9880 }, { 4706, 0x8040 }, { 4708, 0x04c0 }, { 4711, 0x8100 },
-  { 4713, 0x2003 }, { 4716, 0x0000 }, { 4716, 0x0000 }, { 4716, 0x3818 },
-  { 4721, 0x0200 }, { 4722, 0xf1a6 }, { 4731, 0x4434 }, { 4736, 0x720e },
-  { 4743, 0x35a2 }, { 4750, 0x92e0 }, { 4756, 0x8101 }, { 4759, 0x0900 },
-  /* 0x7d00 */
-  { 4761, 0x0400 }, { 4762, 0x0000 }, { 4762, 0x8885 }, { 4767, 0x0000 },
-  { 4767, 0x0000 }, { 4767, 0x0000 }, { 4767, 0x4000 }, { 4768, 0x0080 },
-  { 4769, 0x0000 }, { 4769, 0x0000 }, { 4769, 0x4040 }, { 4771, 0x0000 },
-  { 4771, 0x0000 }, { 4771, 0x0000 }, { 4771, 0x0000 }, { 4771, 0x0000 },
-  /* 0x7e00 */
-  { 4771, 0x0000 }, { 4771, 0x0000 }, { 4771, 0x0000 }, { 4771, 0x0800 },
-  { 4772, 0x0082 }, { 4774, 0x0000 }, { 4774, 0x0000 }, { 4774, 0x0000 },
-  { 4774, 0x0004 }, { 4775, 0x8800 }, { 4777, 0xbfff }, { 4792, 0xe7ef },
-  { 4805, 0xffff }, { 4821, 0xffbf }, { 4836, 0xefef }, { 4850, 0xfdff },
-  /* 0x7f00 */
-  { 4865, 0xfbff }, { 4880, 0xbffe }, { 4894, 0xffff }, { 4910, 0x057f },
-  { 4919, 0x0034 }, { 4922, 0x85b3 }, { 4930, 0x4706 }, { 4936, 0x4216 },
-  { 4941, 0x5402 }, { 4945, 0xe410 }, { 4950, 0x8092 }, { 4954, 0xb305 },
-  { 4961, 0x5422 }, { 4966, 0x8130 }, { 4970, 0x4263 }, { 4976, 0x180b },
-  /* 0x8000 */
-  { 4981, 0x387b }, { 4990, 0x13f5 }, { 4999, 0x07e5 }, { 5007, 0xa9ea },
-  { 5016, 0x3c4c }, { 5023, 0x0514 }, { 5027, 0x0600 }, { 5029, 0x8002 },
-  { 5031, 0x1ad9 }, { 5039, 0xbd48 }, { 5047, 0xee37 }, { 5058, 0xf496 },
-  { 5067, 0x705f }, { 5076, 0x7ec0 }, { 5084, 0xbfb2 }, { 5095, 0x355f },
-  /* 0x8100 */
-  { 5105, 0xe644 }, { 5112, 0x455f }, { 5121, 0x9000 }, { 5123, 0x4146 },
-  { 5128, 0x1d40 }, { 5133, 0x063b }, { 5140, 0x62a1 }, { 5146, 0xfe13 },
-  { 5156, 0x8505 }, { 5161, 0x3902 }, { 5166, 0x0548 }, { 5170, 0x0c08 },
-  { 5173, 0x144f }, { 5180, 0x0000 }, { 5180, 0x3488 }, { 5185, 0x5818 },
-  /* 0x8200 */
-  { 5190, 0x3077 }, { 5198, 0xd815 }, { 5205, 0xbd0e }, { 5214, 0x4bfb },
-  { 5225, 0x8a90 }, { 5230, 0x8500 }, { 5233, 0xc100 }, { 5236, 0xe61d },
-  { 5245, 0xed14 }, { 5253, 0xb386 }, { 5261, 0xff72 }, { 5273, 0x639b },
-  { 5282, 0xfd92 }, { 5292, 0xd9be }, { 5303, 0x887b }, { 5311, 0x0a92 },
-  /* 0x8300 */
-  { 5316, 0xd3fe }, { 5328, 0x1cb2 }, { 5335, 0xb980 }, { 5341, 0x177a },
-  { 5350, 0x82c9 }, { 5356, 0xdc17 }, { 5365, 0xfffb }, { 5380, 0x3980 },
-  { 5385, 0x4260 }, { 5389, 0x590c }, { 5395, 0x0f01 }, { 5400, 0x37df },
-  { 5412, 0x94a3 }, { 5419, 0xb150 }, { 5425, 0x0623 }, { 5430, 0x2307 },
-  /* 0x8400 */
-  { 5436, 0xf85a }, { 5445, 0x3102 }, { 5449, 0x01f0 }, { 5454, 0x3102 },
-  { 5458, 0x0040 }, { 5459, 0x1e82 }, { 5465, 0x3a0a }, { 5471, 0x056a },
-  { 5477, 0x5b84 }, { 5484, 0x1280 }, { 5487, 0x8002 }, { 5489, 0xa714 },
-  { 5496, 0x2612 }, { 5501, 0xa04b }, { 5507, 0x1069 }, { 5512, 0x9001 },
-  /* 0x8500 */
-  { 5515, 0x1000 }, { 5516, 0x848a }, { 5521, 0x1802 }, { 5524, 0x3f80 },
-  { 5531, 0x0708 }, { 5535, 0x4240 }, { 5538, 0x0110 }, { 5540, 0x4e14 },
-  { 5546, 0x80b0 }, { 5550, 0x1800 }, { 5552, 0xc510 }, { 5557, 0x0281 },
-  { 5560, 0x8202 }, { 5563, 0x1029 }, { 5567, 0x0210 }, { 5569, 0x8800 },
-  /* 0x8600 */
-  { 5571, 0x0020 }, { 5572, 0x0042 }, { 5574, 0x0280 }, { 5576, 0x1100 },
-  { 5578, 0xe000 }, { 5581, 0x4413 }, { 5586, 0x5804 }, { 5590, 0xfe02 },
-  { 5598, 0x3c07 }, { 5605, 0x3028 }, { 5609, 0x9798 }, { 5617, 0x0473 },
-  { 5623, 0xced1 }, { 5632, 0xcb13 }, { 5640, 0x6210 }, { 5644, 0x431f },
-  /* 0x8700 */
-  { 5652, 0x278d }, { 5660, 0x55ac }, { 5668, 0x422e }, { 5674, 0xc892 },
-  { 5680, 0x5380 }, { 5685, 0x0288 }, { 5688, 0x4039 }, { 5693, 0x7851 },
-  { 5700, 0x292c }, { 5706, 0x8088 }, { 5709, 0xb900 }, { 5714, 0x2428 },
-  { 5718, 0x0c41 }, { 5722, 0x080e }, { 5726, 0x4421 }, { 5730, 0x4200 },
-  /* 0x8800 */
-  { 5732, 0x0408 }, { 5734, 0x0868 }, { 5738, 0x0006 }, { 5740, 0x1204 },
-  { 5743, 0x3031 }, { 5748, 0x0290 }, { 5751, 0x5b3e }, { 5761, 0xe085 },
-  { 5767, 0x2936 }, { 5774, 0x1044 }, { 5777, 0x2814 }, { 5781, 0x1082 },
-  { 5784, 0x4266 }, { 5790, 0x8334 }, { 5796, 0x013c }, { 5801, 0x531b },
-  /* 0x8900 */
-  { 5809, 0x0404 }, { 5811, 0x0e0d }, { 5817, 0x0c22 }, { 5821, 0x0051 },
-  { 5824, 0x0012 }, { 5826, 0xc000 }, { 5828, 0x0040 }, { 5829, 0x8800 },
-  { 5831, 0x004a }, { 5834, 0x0000 }, { 5834, 0x0000 }, { 5834, 0x0000 },
-  { 5834, 0xdff6 }, { 5847, 0x5447 }, { 5854, 0x8868 }, { 5859, 0x0008 },
-  /* 0x8a00 */
-  { 5860, 0x0081 }, { 5862, 0x0000 }, { 5862, 0x0000 }, { 5862, 0x4000 },
-  { 5863, 0x0100 }, { 5864, 0x0000 }, { 5864, 0x0000 }, { 5864, 0x0200 },
-  { 5865, 0x0600 }, { 5867, 0x0008 }, { 5868, 0x0000 }, { 5868, 0x0000 },
-  { 5868, 0x0000 }, { 5868, 0x0000 }, { 5868, 0x0000 }, { 5868, 0x0000 },
-  /* 0x8b00 */
-  { 5868, 0x0080 }, { 5869, 0x0000 }, { 5869, 0x0040 }, { 5870, 0x0000 },
-  { 5870, 0x0000 }, { 5870, 0x0000 }, { 5870, 0x1040 }, { 5872, 0x0000 },
-  { 5872, 0x0000 }, { 5872, 0x0000 }, { 5872, 0xefff }, { 5887, 0xf7fd },
-  { 5901, 0xff7f }, { 5916, 0xfffe }, { 5931, 0xfbff }, { 5946, 0xffff },
-  /* 0x8c00 */
-  { 5962, 0xfdff }, { 5977, 0xbfff }, { 5992, 0xffff }, { 6008, 0x00ff },
-  { 6016, 0x12c2 }, { 6021, 0x0420 }, { 6023, 0x0c06 }, { 6027, 0x0708 },
-  { 6031, 0x1624 }, { 6036, 0x0110 }, { 6038, 0x0000 }, { 6038, 0x0000 },
-  { 6038, 0x0000 }, { 6038, 0x0000 }, { 6038, 0x0000 }, { 6038, 0x0000 },
-  /* 0x8d00 */
-  { 6038, 0x0000 }, { 6038, 0xe000 }, { 6041, 0xfffe }, { 6056, 0xffff },
-  { 6072, 0xffff }, { 6088, 0x7f79 }, { 6100, 0x28df }, { 6109, 0x00f9 },
-  { 6115, 0x0c32 }, { 6120, 0x8012 }, { 6123, 0x0008 }, { 6124, 0xd53a },
-  { 6133, 0xd858 }, { 6140, 0xecc2 }, { 6148, 0x9d18 }, { 6155, 0x2fa8 },
-  /* 0x8e00 */
-  { 6163, 0x9620 }, { 6168, 0xe010 }, { 6172, 0xd60c }, { 6179, 0x2622 },
-  { 6184, 0x0f97 }, { 6193, 0x0206 }, { 6196, 0xb240 }, { 6201, 0x9055 },
-  { 6207, 0x80a2 }, { 6211, 0x5011 }, { 6215, 0x9800 }, { 6218, 0x0404 },
-  { 6220, 0x4000 }, { 6221, 0x0000 }, { 6221, 0x0000 }, { 6221, 0x0000 },
-  /* 0x8f00 */
-  { 6221, 0x0000 }, { 6221, 0x0000 }, { 6221, 0x0000 }, { 6221, 0x0000 },
-  { 6221, 0x0000 }, { 6221, 0x0000 }, { 6221, 0xfbc0 }, { 6230, 0xffff },
-  { 6246, 0xeffe }, { 6260, 0xdffb }, { 6274, 0x0b08 }, { 6278, 0x6243 },
-  { 6284, 0x41b6 }, { 6291, 0xfb3b }, { 6303, 0x6f74 }, { 6313, 0x2389 },
-  /* 0x9000 */
-  { 6319, 0xae7f }, { 6331, 0xecd7 }, { 6342, 0xe047 }, { 6349, 0x5960 },
-  { 6355, 0xa096 }, { 6361, 0x098f }, { 6368, 0x612c }, { 6374, 0xa030 },
-  { 6378, 0x090d }, { 6383, 0x2aaa }, { 6390, 0xd44e }, { 6398, 0x4f7b },
-  { 6409, 0xc4b2 }, { 6416, 0x388b }, { 6423, 0xa9c6 }, { 6431, 0x6110 },
-  /* 0x9100 */
-  { 6435, 0x0014 }, { 6437, 0x4200 }, { 6439, 0x800c }, { 6442, 0x0202 },
-  { 6444, 0xfe48 }, { 6453, 0x6485 }, { 6459, 0xd63e }, { 6469, 0xe3f7 },
-  { 6481, 0x3aa0 }, { 6487, 0x0c07 }, { 6492, 0xe40c }, { 6498, 0x0430 },
-  { 6501, 0xf680 }, { 6508, 0x1002 }, { 6510, 0x0000 }, { 6510, 0x0000 },
-  /* 0x9200 */
-  { 6510, 0x0000 }, { 6510, 0x0000 }, { 6510, 0x0000 }, { 6510, 0x0000 },
-  { 6510, 0x0000 }, { 6510, 0x0000 }, { 6510, 0x0000 }, { 6510, 0x0010 },
-  { 6511, 0x4000 }, { 6512, 0x0000 }, { 6512, 0x4000 }, { 6513, 0x0000 },
-  { 6513, 0x0100 }, { 6514, 0x0000 }, { 6514, 0x0000 }, { 6514, 0x0000 },
-  /* 0x9300 */
-  { 6514, 0x0000 }, { 6514, 0x0000 }, { 6514, 0x0000 }, { 6514, 0x4000 },
-  { 6515, 0x0000 }, { 6515, 0x0000 }, { 6515, 0x0400 }, { 6516, 0x0000 },
-  { 6516, 0x8000 }, { 6517, 0x0000 }, { 6517, 0x0000 }, { 6517, 0x0000 },
-  { 6517, 0x0400 }, { 6518, 0x0040 }, { 6519, 0x0000 }, { 6519, 0x0000 },
-  /* 0x9400 */
-  { 6519, 0x0000 }, { 6519, 0x0000 }, { 6519, 0x0000 }, { 6519, 0x4000 },
-  { 6520, 0x0000 }, { 6520, 0x0000 }, { 6520, 0x0800 }, { 6521, 0x0000 },
-  { 6521, 0xffe0 }, { 6532, 0xfebd }, { 6545, 0xffff }, { 6561, 0xffff },
-  { 6577, 0x7f7f }, { 6591, 0xfbe7 }, { 6604, 0xffbf }, { 6619, 0xf7ff },
-  /* 0x9500 */
-  { 6634, 0xffff }, { 6650, 0xefff }, { 6665, 0xff7e }, { 6679, 0xdff7 },
-  { 6693, 0xf6f7 }, { 6706, 0xfbdf }, { 6720, 0xbffe }, { 6734, 0x804f },
-  { 6740, 0x0000 }, { 6740, 0x0000 }, { 6740, 0x0000 }, { 6740, 0x0000 },
-  { 6740, 0x0000 }, { 6740, 0x0000 }, { 6740, 0xef00 }, { 6747, 0x7fff },
-  /* 0x9600 */
-  { 6762, 0xff7f }, { 6777, 0xb6f7 }, { 6789, 0x4406 }, { 6793, 0xb87e },
-  { 6803, 0x3bf5 }, { 6814, 0x8831 }, { 6819, 0x1796 }, { 6827, 0x00f4 },
-  { 6832, 0xa960 }, { 6838, 0x1391 }, { 6844, 0x0080 }, { 6845, 0x7249 },
-  { 6852, 0xf2f3 }, { 6863, 0x0024 }, { 6865, 0x8701 }, { 6870, 0x42c8 },
-  /* 0x9700 */
-  { 6875, 0xe3d3 }, { 6885, 0x5048 }, { 6889, 0x2400 }, { 6891, 0x4305 },
-  { 6896, 0x0000 }, { 6896, 0x4a4c }, { 6902, 0x0227 }, { 6907, 0x1058 },
-  { 6911, 0x2820 }, { 6914, 0x0116 }, { 6918, 0xa809 }, { 6923, 0x0014 },
-  { 6925, 0x0000 }, { 6925, 0x0000 }, { 6925, 0x3ec0 }, { 6932, 0x0068 },
-  /* 0x9800 */
-  { 6935, 0x0000 }, { 6935, 0x0000 }, { 6935, 0x0000 }, { 6935, 0x0000 },
-  { 6935, 0x0000 }, { 6935, 0x0000 }, { 6935, 0x0000 }, { 6935, 0xffe0 },
-  { 6946, 0xb7ff }, { 6960, 0xfddb }, { 6973, 0x00f7 }, { 6980, 0x0000 },
-  { 6980, 0x4000 }, { 6981, 0xc72e }, { 6990, 0x0180 }, { 6992, 0x0000 },
-  /* 0x9900 */
-  { 6992, 0x2000 }, { 6993, 0x0001 }, { 6994, 0x4000 }, { 6995, 0x0000 },
-  { 6995, 0x0000 }, { 6995, 0x0030 }, { 6997, 0xffa8 }, { 7008, 0xb4f7 },
-  { 7019, 0xadf3 }, { 7030, 0x03ff }, { 7040, 0x0120 }, { 7042, 0x0000 },
-  { 7042, 0x0000 }, { 7042, 0x0000 }, { 7042, 0x0000 }, { 7042, 0x0000 },
-  /* 0x9a00 */
-  { 7042, 0x0000 }, { 7042, 0x0000 }, { 7042, 0x0000 }, { 7042, 0x0000 },
-  { 7042, 0x0000 }, { 7042, 0x0000 }, { 7042, 0xf000 }, { 7046, 0xfffb },
-  { 7061, 0x9df7 }, { 7073, 0xfdcf }, { 7086, 0x01bf }, { 7094, 0x15c3 },
-  { 7101, 0x1827 }, { 7107, 0x810a }, { 7111, 0xa842 }, { 7116, 0x0a00 },
-  /* 0x9b00 */
-  { 7118, 0x8108 }, { 7121, 0x8008 }, { 7123, 0x8008 }, { 7125, 0x1804 },
-  { 7128, 0xa3be }, { 7138, 0x0012 }, { 7140, 0x0000 }, { 7140, 0x0000 },
-  { 7140, 0x0000 }, { 7140, 0x0000 }, { 7140, 0x0000 }, { 7140, 0x0000 },
-  { 7140, 0x0000 }, { 7140, 0x0000 }, { 7140, 0x0000 }, { 7140, 0x0000 },
-  /* 0x9c00 */
-  { 7140, 0x0000 }, { 7140, 0x0000 }, { 7140, 0x0000 }, { 7140, 0x0000 },
-  { 7140, 0x0000 }, { 7140, 0x0000 }, { 7140, 0x0000 }, { 7140, 0x9000 },
-  { 7142, 0x69e6 }, { 7151, 0xdc37 }, { 7161, 0x6bff }, { 7174, 0x3dff },
-  { 7187, 0xfcf8 }, { 7198, 0xf3f9 }, { 7210, 0x0004 },
-};
-static const Summary16 gb2312_uni2indx_page9e[27] = {
-  /* 0x9e00 */
-  { 7211, 0x0000 }, { 7211, 0x8000 }, { 7212, 0xbf6f }, { 7225, 0xe7ee },
-  { 7237, 0xdffe }, { 7251, 0x5da2 }, { 7259, 0x3fd8 }, { 7269, 0xc00b },
-  { 7274, 0x0984 }, { 7278, 0xa00c }, { 7282, 0x0040 }, { 7283, 0x6910 },
-  { 7288, 0xe210 }, { 7293, 0xb912 }, { 7300, 0x86a5 }, { 7307, 0x5a00 },
-  /* 0x9f00 */
-  { 7311, 0x6800 }, { 7314, 0x0289 }, { 7318, 0x9005 }, { 7322, 0x6a80 },
-  { 7327, 0x0010 }, { 7328, 0x0003 }, { 7330, 0x0000 }, { 7330, 0x8000 },
-  { 7331, 0x1ff9 }, { 7342, 0x8e00 }, { 7346, 0x0001 },
-};
-static const Summary16 gb2312_uni2indx_pageff[15] = {
-  /* 0xff00 */
-  { 7347, 0xfffe }, { 7362, 0xffff }, { 7378, 0xffff }, { 7394, 0xffff },
-  { 7410, 0xffff }, { 7426, 0x7fff }, { 7441, 0x0000 }, { 7441, 0x0000 },
-  { 7441, 0x0000 }, { 7441, 0x0000 }, { 7441, 0x0000 }, { 7441, 0x0000 },
-  { 7441, 0x0000 }, { 7441, 0x0000 }, { 7441, 0x002b },
-};
-
-INTERNAL int gb2312_wctomb_zint(unsigned int* r, unsigned int wc) {
-    const Summary16 *summary = NULL;
-    if (wc < 0x0460) {
-        if (wc == 0x00b7) { /* ZINT: Patched to duplicate map to 0xA1A4 */
-            *r = 0xA1A4;
-            return 2;
-        }
-        summary = &gb2312_uni2indx_page00[(wc>>4)];
-    } else if (wc >= 0x2000 && wc < 0x2650) {
-        if (wc == 0x2014) { /* ZINT: Patched to duplicate map to 0xA1AA */
-            *r = 0xA1AA;
-            return 2;
-        }
-        summary = &gb2312_uni2indx_page20[(wc>>4)-0x200];
-    } else if (wc >= 0x3000 && wc < 0x3230) {
-        summary = &gb2312_uni2indx_page30[(wc>>4)-0x300];
-    } else if (wc >= 0x4e00 && wc < 0x9cf0) {
-        summary = &gb2312_uni2indx_page4e[(wc>>4)-0x4e0];
-    } else if (wc >= 0x9e00 && wc < 0x9fb0) {
-        summary = &gb2312_uni2indx_page9e[(wc>>4)-0x9e0];
-    } else if (wc >= 0xff00 && wc < 0xfff0) {
-        summary = &gb2312_uni2indx_pageff[(wc>>4)-0xff0];
-    }
-    if (summary) {
-        unsigned short used = summary->used;
-        unsigned int i = wc & 0x0f;
-        if (used & ((unsigned short) 1 << i)) {
-            /* Keep in 'used' only the bits 0..i-1. */
-            used &= ((unsigned short) 1 << i) - 1;
-            /* Add 'summary->indx' and the number of bits set in 'used'. */
-            used = (used & 0x5555) + ((used & 0xaaaa) >> 1);
-            used = (used & 0x3333) + ((used & 0xcccc) >> 2);
-            used = (used & 0x0f0f) + ((used & 0xf0f0) >> 4);
-            used = (used & 0x00ff) + (used >> 8);
-            *r = gb2312_2charset[summary->indx + used];
-            return 2;
-        }
-    }
-    return 0;
-}
-
-/* Convert UTF-8 string to GB 2312 (EUC-CN) and place in array of ints */
-INTERNAL int gb2312_utf8tomb(struct zint_symbol *symbol, const unsigned char source[], size_t* p_length, unsigned int* gbdata) {
-    int error_number;
-    unsigned int i, length;
-#ifndef _MSC_VER
-    unsigned int utfdata[*p_length + 1];
-#else
-    unsigned int* utfdata = (unsigned int*) _alloca((*p_length + 1) * sizeof(unsigned int));
-#endif
-
-    error_number = utf8_to_unicode(symbol, source, utfdata, p_length, 1 /*disallow_4byte*/);
-    if (error_number != 0) {
-        return error_number;
-    }
-
-    for (i = 0, length = *p_length; i < length; i++) {
-        if (utfdata[i] < 0x80) {
-            gbdata[i] = utfdata[i];
-        } else {
-            if (!gb2312_wctomb_zint(gbdata + i, utfdata[i])) {
-                strcpy(symbol->errtxt, "810: Invalid character in input data");
-                return ZINT_ERROR_INVALID_DATA;
-            }
-        }
-    }
-
-    return 0;
-}
-
-/* Convert UTF-8 string to single byte ECI and place in array of ints */
-INTERNAL int gb2312_utf8tosb(int eci, const unsigned char source[], size_t* p_length, unsigned int* gbdata, int full_multibyte) {
-    int error_number;
-#ifndef _MSC_VER
-    unsigned char single_byte[*p_length + 1];
-#else
-    unsigned char* single_byte = (unsigned char*) _alloca(*p_length + 1);
-#endif
-
-    error_number = utf_to_eci(eci, source, single_byte, p_length);
-    if (error_number != 0) {
-        /* Note not setting `symbol->errtxt`, up to caller */
-        return error_number;
-    }
-
-    gb2312_cpy(single_byte, p_length, gbdata, full_multibyte);
-
-    return 0;
-}
-
-/* If `full_multibyte` set, copy byte input stream to array of ints, putting double-bytes that match GRIDMATRIX Chinese mode in a single entry.
- * If `full_multibyte` not set, do a straight copy */
-INTERNAL void gb2312_cpy(const unsigned char source[], size_t* p_length, unsigned int* gbdata, int full_multibyte) {
-    unsigned int i, j, length;
-    unsigned char c1, c2;
-
-    if (full_multibyte) {
-        for (i = 0, j = 0, length = *p_length; i < length; i++, j++) {
-            if (length - i >= 2) {
-                c1 = source[i];
-                c2 = source[i + 1];
-                if (((c1 >= 0xA1 && c1 <= 0xA9) || (c1 >= 0xB0 && c1 <= 0xF7)) && c2 >= 0xA1 && c2 <= 0xFE) {
-                    /* This may or may not be valid GB 2312 (EUC-CN), but don't care as long as it can be encoded in GRIDMATRIX Chinese mode */
-                    gbdata[j] = (c1 << 8) | c2;
-                    i++;
-                } else {
-                    gbdata[j] = c1;
-                }
-            } else {
-                gbdata[j] = source[i];
-            }
-        }
-        *p_length = j;
-    } else {
-        /* Straight copy */
-        for (i = 0, length = *p_length; i < length; i++) {
-            gbdata[i] = source[i];
-        }
-    }
-}
index b3ca91b..909748f 100644 (file)
@@ -1,7 +1,7 @@
-/*  gb2312.h - Unicode to GB 2312-1980 (EUC-CN)
+/*  gb2312.h - Unicode to GB 2312-1980 lookup table
 
     libzint - the open source barcode library
-    Copyright (C) 2009-2020 Robin Stuart <rstuart114@gmail.com>
+    Copyright (C) 2009-2017 Robin Stuart <rstuart114@gmail.com>
 
     Redistribution and use in source and binary forms, with or without
     modification, are permitted provided that the following conditions
     OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     SUCH DAMAGE.
  */
-/* vim: set ts=4 sw=4 et : */
 
-#ifndef GB2312_H
-#define GB2312_H
+static const unsigned short int gb2312_lookup[] = {
+    0x00A4, 0xA1E8,
+    0x00A7, 0xA1EC,
+    0x00A8, 0xA1A7,
+    0x00B0, 0xA1E3,
+    0x00B1, 0xA1C0,
+    0x00B7, 0xA1A4,
+    0x00D7, 0xA1C1,
+    0x00E0, 0xA8A4,
+    0x00E1, 0xA8A2,
+    0x00E8, 0xA8A8,
+    0x00E9, 0xA8A6,
+    0x00EA, 0xA8BA,
+    0x00EC, 0xA8AC,
+    0x00ED, 0xA8AA,
+    0x00F2, 0xA8B0,
+    0x00F3, 0xA8AE,
+    0x00F7, 0xA1C2,
+    0x00F9, 0xA8B4,
+    0x00FA, 0xA8B2,
+    0x00FC, 0xA8B9,
+    0x0101, 0xA8A1,
+    0x0113, 0xA8A5,
+    0x011B, 0xA8A7,
+    0x012B, 0xA8A9,
+    0x014D, 0xA8AD,
+    0x016B, 0xA8B1,
+    0x01CE, 0xA8A3,
+    0x01D0, 0xA8AB,
+    0x01D2, 0xA8AF,
+    0x01D4, 0xA8B3,
+    0x01D6, 0xA8B5,
+    0x01D8, 0xA8B6,
+    0x01DA, 0xA8B7,
+    0x01DC, 0xA8B8,
+    0x02C7, 0xA1A6,
+    0x02C9, 0xA1A5,
+    0x0391, 0xA6A1,
+    0x0392, 0xA6A2,
+    0x0393, 0xA6A3,
+    0x0394, 0xA6A4,
+    0x0395, 0xA6A5,
+    0x0396, 0xA6A6,
+    0x0397, 0xA6A7,
+    0x0398, 0xA6A8,
+    0x0399, 0xA6A9,
+    0x039A, 0xA6AA,
+    0x039B, 0xA6AB,
+    0x039C, 0xA6AC,
+    0x039D, 0xA6AD,
+    0x039E, 0xA6AE,
+    0x039F, 0xA6AF,
+    0x03A0, 0xA6B0,
+    0x03A1, 0xA6B1,
+    0x03A3, 0xA6B2,
+    0x03A4, 0xA6B3,
+    0x03A5, 0xA6B4,
+    0x03A6, 0xA6B5,
+    0x03A7, 0xA6B6,
+    0x03A8, 0xA6B7,
+    0x03A9, 0xA6B8,
+    0x03B1, 0xA6C1,
+    0x03B2, 0xA6C2,
+    0x03B3, 0xA6C3,
+    0x03B4, 0xA6C4,
+    0x03B5, 0xA6C5,
+    0x03B6, 0xA6C6,
+    0x03B7, 0xA6C7,
+    0x03B8, 0xA6C8,
+    0x03B9, 0xA6C9,
+    0x03BA, 0xA6CA,
+    0x03BB, 0xA6CB,
+    0x03BC, 0xA6CC,
+    0x03BD, 0xA6CD,
+    0x03BE, 0xA6CE,
+    0x03BF, 0xA6CF,
+    0x03C0, 0xA6D0,
+    0x03C1, 0xA6D1,
+    0x03C3, 0xA6D2,
+    0x03C4, 0xA6D3,
+    0x03C5, 0xA6D4,
+    0x03C6, 0xA6D5,
+    0x03C7, 0xA6D6,
+    0x03C8, 0xA6D7,
+    0x03C9, 0xA6D8,
+    0x0401, 0xA7A7,
+    0x0410, 0xA7A1,
+    0x0411, 0xA7A2,
+    0x0412, 0xA7A3,
+    0x0413, 0xA7A4,
+    0x0414, 0xA7A5,
+    0x0415, 0xA7A6,
+    0x0416, 0xA7A8,
+    0x0417, 0xA7A9,
+    0x0418, 0xA7AA,
+    0x0419, 0xA7AB,
+    0x041A, 0xA7AC,
+    0x041B, 0xA7AD,
+    0x041C, 0xA7AE,
+    0x041D, 0xA7AF,
+    0x041E, 0xA7B0,
+    0x041F, 0xA7B1,
+    0x0420, 0xA7B2,
+    0x0421, 0xA7B3,
+    0x0422, 0xA7B4,
+    0x0423, 0xA7B5,
+    0x0424, 0xA7B6,
+    0x0425, 0xA7B7,
+    0x0426, 0xA7B8,
+    0x0427, 0xA7B9,
+    0x0428, 0xA7BA,
+    0x0429, 0xA7BB,
+    0x042A, 0xA7BC,
+    0x042B, 0xA7BD,
+    0x042C, 0xA7BE,
+    0x042D, 0xA7BF,
+    0x042E, 0xA7C0,
+    0x042F, 0xA7C1,
+    0x0430, 0xA7D1,
+    0x0431, 0xA7D2,
+    0x0432, 0xA7D3,
+    0x0433, 0xA7D4,
+    0x0434, 0xA7D5,
+    0x0435, 0xA7D6,
+    0x0436, 0xA7D8,
+    0x0437, 0xA7D9,
+    0x0438, 0xA7DA,
+    0x0439, 0xA7DB,
+    0x043A, 0xA7DC,
+    0x043B, 0xA7DD,
+    0x043C, 0xA7DE,
+    0x043D, 0xA7DF,
+    0x043E, 0xA7E0,
+    0x043F, 0xA7E1,
+    0x0440, 0xA7E2,
+    0x0441, 0xA7E3,
+    0x0442, 0xA7E4,
+    0x0443, 0xA7E5,
+    0x0444, 0xA7E6,
+    0x0445, 0xA7E7,
+    0x0446, 0xA7E8,
+    0x0447, 0xA7E9,
+    0x0448, 0xA7EA,
+    0x0449, 0xA7EB,
+    0x044A, 0xA7EC,
+    0x044B, 0xA7ED,
+    0x044C, 0xA7EE,
+    0x044D, 0xA7EF,
+    0x044E, 0xA7F0,
+    0x044F, 0xA7F1,
+    0x0451, 0xA7D7,
+    0x2014, 0xA1AA,
+    0x2016, 0xA1AC,
+    0x2018, 0xA1AE,
+    0x2019, 0xA1AF,
+    0x201C, 0xA1B0,
+    0x201D, 0xA1B1,
+    0x2026, 0xA1AD,
+    0x2030, 0xA1EB,
+    0x2032, 0xA1E4,
+    0x2033, 0xA1E5,
+    0x203B, 0xA1F9,
+    0x2103, 0xA1E6,
+    0x2116, 0xA1ED,
+    0x2160, 0xA2F1,
+    0x2161, 0xA2F2,
+    0x2162, 0xA2F3,
+    0x2163, 0xA2F4,
+    0x2164, 0xA2F5,
+    0x2165, 0xA2F6,
+    0x2166, 0xA2F7,
+    0x2167, 0xA2F8,
+    0x2168, 0xA2F9,
+    0x2169, 0xA2FA,
+    0x216A, 0xA2FB,
+    0x216B, 0xA2FC,
+    0x2190, 0xA1FB,
+    0x2191, 0xA1FC,
+    0x2192, 0xA1FA,
+    0x2193, 0xA1FD,
+    0x2208, 0xA1CA,
+    0x220F, 0xA1C7,
+    0x2211, 0xA1C6,
+    0x221A, 0xA1CC,
+    0x221D, 0xA1D8,
+    0x221E, 0xA1DE,
+    0x2220, 0xA1CF,
+    0x2225, 0xA1CE,
+    0x2227, 0xA1C4,
+    0x2228, 0xA1C5,
+    0x2229, 0xA1C9,
+    0x222A, 0xA1C8,
+    0x222B, 0xA1D2,
+    0x222E, 0xA1D3,
+    0x2234, 0xA1E0,
+    0x2235, 0xA1DF,
+    0x2236, 0xA1C3,
+    0x2237, 0xA1CB,
+    0x223D, 0xA1D7,
+    0x2248, 0xA1D6,
+    0x224C, 0xA1D5,
+    0x2260, 0xA1D9,
+    0x2261, 0xA1D4,
+    0x2264, 0xA1DC,
+    0x2265, 0xA1DD,
+    0x226E, 0xA1DA,
+    0x226F, 0xA1DB,
+    0x2299, 0xA1D1,
+    0x22A5, 0xA1CD,
+    0x2312, 0xA1D0,
+    0x2460, 0xA2D9,
+    0x2461, 0xA2DA,
+    0x2462, 0xA2DB,
+    0x2463, 0xA2DC,
+    0x2464, 0xA2DD,
+    0x2465, 0xA2DE,
+    0x2466, 0xA2DF,
+    0x2467, 0xA2E0,
+    0x2468, 0xA2E1,
+    0x2469, 0xA2E2,
+    0x2474, 0xA2C5,
+    0x2475, 0xA2C6,
+    0x2476, 0xA2C7,
+    0x2477, 0xA2C8,
+    0x2478, 0xA2C9,
+    0x2479, 0xA2CA,
+    0x247A, 0xA2CB,
+    0x247B, 0xA2CC,
+    0x247C, 0xA2CD,
+    0x247D, 0xA2CE,
+    0x247E, 0xA2CF,
+    0x247F, 0xA2D0,
+    0x2480, 0xA2D1,
+    0x2481, 0xA2D2,
+    0x2482, 0xA2D3,
+    0x2483, 0xA2D4,
+    0x2484, 0xA2D5,
+    0x2485, 0xA2D6,
+    0x2486, 0xA2D7,
+    0x2487, 0xA2D8,
+    0x2488, 0xA2B1,
+    0x2489, 0xA2B2,
+    0x248A, 0xA2B3,
+    0x248B, 0xA2B4,
+    0x248C, 0xA2B5,
+    0x248D, 0xA2B6,
+    0x248E, 0xA2B7,
+    0x248F, 0xA2B8,
+    0x2490, 0xA2B9,
+    0x2491, 0xA2BA,
+    0x2492, 0xA2BB,
+    0x2493, 0xA2BC,
+    0x2494, 0xA2BD,
+    0x2495, 0xA2BE,
+    0x2496, 0xA2BF,
+    0x2497, 0xA2C0,
+    0x2498, 0xA2C1,
+    0x2499, 0xA2C2,
+    0x249A, 0xA2C3,
+    0x249B, 0xA2C4,
+    0x2500, 0xA9A4,
+    0x2501, 0xA9A5,
+    0x2502, 0xA9A6,
+    0x2503, 0xA9A7,
+    0x2504, 0xA9A8,
+    0x2505, 0xA9A9,
+    0x2506, 0xA9AA,
+    0x2507, 0xA9AB,
+    0x2508, 0xA9AC,
+    0x2509, 0xA9AD,
+    0x250A, 0xA9AE,
+    0x250B, 0xA9AF,
+    0x250C, 0xA9B0,
+    0x250D, 0xA9B1,
+    0x250E, 0xA9B2,
+    0x250F, 0xA9B3,
+    0x2510, 0xA9B4,
+    0x2511, 0xA9B5,
+    0x2512, 0xA9B6,
+    0x2513, 0xA9B7,
+    0x2514, 0xA9B8,
+    0x2515, 0xA9B9,
+    0x2516, 0xA9BA,
+    0x2517, 0xA9BB,
+    0x2518, 0xA9BC,
+    0x2519, 0xA9BD,
+    0x251A, 0xA9BE,
+    0x251B, 0xA9BF,
+    0x251C, 0xA9C0,
+    0x251D, 0xA9C1,
+    0x251E, 0xA9C2,
+    0x251F, 0xA9C3,
+    0x2520, 0xA9C4,
+    0x2521, 0xA9C5,
+    0x2522, 0xA9C6,
+    0x2523, 0xA9C7,
+    0x2524, 0xA9C8,
+    0x2525, 0xA9C9,
+    0x2526, 0xA9CA,
+    0x2527, 0xA9CB,
+    0x2528, 0xA9CC,
+    0x2529, 0xA9CD,
+    0x252A, 0xA9CE,
+    0x252B, 0xA9CF,
+    0x252C, 0xA9D0,
+    0x252D, 0xA9D1,
+    0x252E, 0xA9D2,
+    0x252F, 0xA9D3,
+    0x2530, 0xA9D4,
+    0x2531, 0xA9D5,
+    0x2532, 0xA9D6,
+    0x2533, 0xA9D7,
+    0x2534, 0xA9D8,
+    0x2535, 0xA9D9,
+    0x2536, 0xA9DA,
+    0x2537, 0xA9DB,
+    0x2538, 0xA9DC,
+    0x2539, 0xA9DD,
+    0x253A, 0xA9DE,
+    0x253B, 0xA9DF,
+    0x253C, 0xA9E0,
+    0x253D, 0xA9E1,
+    0x253E, 0xA9E2,
+    0x253F, 0xA9E3,
+    0x2540, 0xA9E4,
+    0x2541, 0xA9E5,
+    0x2542, 0xA9E6,
+    0x2543, 0xA9E7,
+    0x2544, 0xA9E8,
+    0x2545, 0xA9E9,
+    0x2546, 0xA9EA,
+    0x2547, 0xA9EB,
+    0x2548, 0xA9EC,
+    0x2549, 0xA9ED,
+    0x254A, 0xA9EE,
+    0x254B, 0xA9EF,
+    0x25A0, 0xA1F6,
+    0x25A1, 0xA1F5,
+    0x25B2, 0xA1F8,
+    0x25B3, 0xA1F7,
+    0x25C6, 0xA1F4,
+    0x25C7, 0xA1F3,
+    0x25CB, 0xA1F0,
+    0x25CE, 0xA1F2,
+    0x25CF, 0xA1F1,
+    0x2605, 0xA1EF,
+    0x2606, 0xA1EE,
+    0x2640, 0xA1E2,
+    0x2642, 0xA1E1,
+    0x3000, 0xA1A1,
+    0x3001, 0xA1A2,
+    0x3002, 0xA1A3,
+    0x3003, 0xA1A8,
+    0x3005, 0xA1A9,
+    0x3008, 0xA1B4,
+    0x3009, 0xA1B5,
+    0x300A, 0xA1B6,
+    0x300B, 0xA1B7,
+    0x300C, 0xA1B8,
+    0x300D, 0xA1B9,
+    0x300E, 0xA1BA,
+    0x300F, 0xA1BB,
+    0x3010, 0xA1BE,
+    0x3011, 0xA1BF,
+    0x3013, 0xA1FE,
+    0x3014, 0xA1B2,
+    0x3015, 0xA1B3,
+    0x3016, 0xA1BC,
+    0x3017, 0xA1BD,
+    0x3041, 0xA4A1,
+    0x3042, 0xA4A2,
+    0x3043, 0xA4A3,
+    0x3044, 0xA4A4,
+    0x3045, 0xA4A5,
+    0x3046, 0xA4A6,
+    0x3047, 0xA4A7,
+    0x3048, 0xA4A8,
+    0x3049, 0xA4A9,
+    0x304A, 0xA4AA,
+    0x304B, 0xA4AB,
+    0x304C, 0xA4AC,
+    0x304D, 0xA4AD,
+    0x304E, 0xA4AE,
+    0x304F, 0xA4AF,
+    0x3050, 0xA4B0,
+    0x3051, 0xA4B1,
+    0x3052, 0xA4B2,
+    0x3053, 0xA4B3,
+    0x3054, 0xA4B4,
+    0x3055, 0xA4B5,
+    0x3056, 0xA4B6,
+    0x3057, 0xA4B7,
+    0x3058, 0xA4B8,
+    0x3059, 0xA4B9,
+    0x305A, 0xA4BA,
+    0x305B, 0xA4BB,
+    0x305C, 0xA4BC,
+    0x305D, 0xA4BD,
+    0x305E, 0xA4BE,
+    0x305F, 0xA4BF,
+    0x3060, 0xA4C0,
+    0x3061, 0xA4C1,
+    0x3062, 0xA4C2,
+    0x3063, 0xA4C3,
+    0x3064, 0xA4C4,
+    0x3065, 0xA4C5,
+    0x3066, 0xA4C6,
+    0x3067, 0xA4C7,
+    0x3068, 0xA4C8,
+    0x3069, 0xA4C9,
+    0x306A, 0xA4CA,
+    0x306B, 0xA4CB,
+    0x306C, 0xA4CC,
+    0x306D, 0xA4CD,
+    0x306E, 0xA4CE,
+    0x306F, 0xA4CF,
+    0x3070, 0xA4D0,
+    0x3071, 0xA4D1,
+    0x3072, 0xA4D2,
+    0x3073, 0xA4D3,
+    0x3074, 0xA4D4,
+    0x3075, 0xA4D5,
+    0x3076, 0xA4D6,
+    0x3077, 0xA4D7,
+    0x3078, 0xA4D8,
+    0x3079, 0xA4D9,
+    0x307A, 0xA4DA,
+    0x307B, 0xA4DB,
+    0x307C, 0xA4DC,
+    0x307D, 0xA4DD,
+    0x307E, 0xA4DE,
+    0x307F, 0xA4DF,
+    0x3080, 0xA4E0,
+    0x3081, 0xA4E1,
+    0x3082, 0xA4E2,
+    0x3083, 0xA4E3,
+    0x3084, 0xA4E4,
+    0x3085, 0xA4E5,
+    0x3086, 0xA4E6,
+    0x3087, 0xA4E7,
+    0x3088, 0xA4E8,
+    0x3089, 0xA4E9,
+    0x308A, 0xA4EA,
+    0x308B, 0xA4EB,
+    0x308C, 0xA4EC,
+    0x308D, 0xA4ED,
+    0x308E, 0xA4EE,
+    0x308F, 0xA4EF,
+    0x3090, 0xA4F0,
+    0x3091, 0xA4F1,
+    0x3092, 0xA4F2,
+    0x3093, 0xA4F3,
+    0x30A1, 0xA5A1,
+    0x30A2, 0xA5A2,
+    0x30A3, 0xA5A3,
+    0x30A4, 0xA5A4,
+    0x30A5, 0xA5A5,
+    0x30A6, 0xA5A6,
+    0x30A7, 0xA5A7,
+    0x30A8, 0xA5A8,
+    0x30A9, 0xA5A9,
+    0x30AA, 0xA5AA,
+    0x30AB, 0xA5AB,
+    0x30AC, 0xA5AC,
+    0x30AD, 0xA5AD,
+    0x30AE, 0xA5AE,
+    0x30AF, 0xA5AF,
+    0x30B0, 0xA5B0,
+    0x30B1, 0xA5B1,
+    0x30B2, 0xA5B2,
+    0x30B3, 0xA5B3,
+    0x30B4, 0xA5B4,
+    0x30B5, 0xA5B5,
+    0x30B6, 0xA5B6,
+    0x30B7, 0xA5B7,
+    0x30B8, 0xA5B8,
+    0x30B9, 0xA5B9,
+    0x30BA, 0xA5BA,
+    0x30BB, 0xA5BB,
+    0x30BC, 0xA5BC,
+    0x30BD, 0xA5BD,
+    0x30BE, 0xA5BE,
+    0x30BF, 0xA5BF,
+    0x30C0, 0xA5C0,
+    0x30C1, 0xA5C1,
+    0x30C2, 0xA5C2,
+    0x30C3, 0xA5C3,
+    0x30C4, 0xA5C4,
+    0x30C5, 0xA5C5,
+    0x30C6, 0xA5C6,
+    0x30C7, 0xA5C7,
+    0x30C8, 0xA5C8,
+    0x30C9, 0xA5C9,
+    0x30CA, 0xA5CA,
+    0x30CB, 0xA5CB,
+    0x30CC, 0xA5CC,
+    0x30CD, 0xA5CD,
+    0x30CE, 0xA5CE,
+    0x30CF, 0xA5CF,
+    0x30D0, 0xA5D0,
+    0x30D1, 0xA5D1,
+    0x30D2, 0xA5D2,
+    0x30D3, 0xA5D3,
+    0x30D4, 0xA5D4,
+    0x30D5, 0xA5D5,
+    0x30D6, 0xA5D6,
+    0x30D7, 0xA5D7,
+    0x30D8, 0xA5D8,
+    0x30D9, 0xA5D9,
+    0x30DA, 0xA5DA,
+    0x30DB, 0xA5DB,
+    0x30DC, 0xA5DC,
+    0x30DD, 0xA5DD,
+    0x30DE, 0xA5DE,
+    0x30DF, 0xA5DF,
+    0x30E0, 0xA5E0,
+    0x30E1, 0xA5E1,
+    0x30E2, 0xA5E2,
+    0x30E3, 0xA5E3,
+    0x30E4, 0xA5E4,
+    0x30E5, 0xA5E5,
+    0x30E6, 0xA5E6,
+    0x30E7, 0xA5E7,
+    0x30E8, 0xA5E8,
+    0x30E9, 0xA5E9,
+    0x30EA, 0xA5EA,
+    0x30EB, 0xA5EB,
+    0x30EC, 0xA5EC,
+    0x30ED, 0xA5ED,
+    0x30EE, 0xA5EE,
+    0x30EF, 0xA5EF,
+    0x30F0, 0xA5F0,
+    0x30F1, 0xA5F1,
+    0x30F2, 0xA5F2,
+    0x30F3, 0xA5F3,
+    0x30F4, 0xA5F4,
+    0x30F5, 0xA5F5,
+    0x30F6, 0xA5F6,
+    0x3105, 0xA8C5,
+    0x3106, 0xA8C6,
+    0x3107, 0xA8C7,
+    0x3108, 0xA8C8,
+    0x3109, 0xA8C9,
+    0x310A, 0xA8CA,
+    0x310B, 0xA8CB,
+    0x310C, 0xA8CC,
+    0x310D, 0xA8CD,
+    0x310E, 0xA8CE,
+    0x310F, 0xA8CF,
+    0x3110, 0xA8D0,
+    0x3111, 0xA8D1,
+    0x3112, 0xA8D2,
+    0x3113, 0xA8D3,
+    0x3114, 0xA8D4,
+    0x3115, 0xA8D5,
+    0x3116, 0xA8D6,
+    0x3117, 0xA8D7,
+    0x3118, 0xA8D8,
+    0x3119, 0xA8D9,
+    0x311A, 0xA8DA,
+    0x311B, 0xA8DB,
+    0x311C, 0xA8DC,
+    0x311D, 0xA8DD,
+    0x311E, 0xA8DE,
+    0x311F, 0xA8DF,
+    0x3120, 0xA8E0,
+    0x3121, 0xA8E1,
+    0x3122, 0xA8E2,
+    0x3123, 0xA8E3,
+    0x3124, 0xA8E4,
+    0x3125, 0xA8E5,
+    0x3126, 0xA8E6,
+    0x3127, 0xA8E7,
+    0x3128, 0xA8E8,
+    0x3129, 0xA8E9,
+    0x3220, 0xA2E5,
+    0x3221, 0xA2E6,
+    0x3222, 0xA2E7,
+    0x3223, 0xA2E8,
+    0x3224, 0xA2E9,
+    0x3225, 0xA2EA,
+    0x3226, 0xA2EB,
+    0x3227, 0xA2EC,
+    0x3228, 0xA2ED,
+    0x3229, 0xA2EE,
+    0x4E00, 0xD2BB,
+    0x4E01, 0xB6A1,
+    0x4E03, 0xC6DF,
+    0x4E07, 0xCDF2,
+    0x4E08, 0xD5C9,
+    0x4E09, 0xC8FD,
+    0x4E0A, 0xC9CF,
+    0x4E0B, 0xCFC2,
+    0x4E0C, 0xD8A2,
+    0x4E0D, 0xB2BB,
+    0x4E0E, 0xD3EB,
+    0x4E10, 0xD8A4,
+    0x4E11, 0xB3F3,
+    0x4E13, 0xD7A8,
+    0x4E14, 0xC7D2,
+    0x4E15, 0xD8A7,
+    0x4E16, 0xCAC0,
+    0x4E18, 0xC7F0,
+    0x4E19, 0xB1FB,
+    0x4E1A, 0xD2B5,
+    0x4E1B, 0xB4D4,
+    0x4E1C, 0xB6AB,
+    0x4E1D, 0xCBBF,
+    0x4E1E, 0xD8A9,
+    0x4E22, 0xB6AA,
+    0x4E24, 0xC1BD,
+    0x4E25, 0xD1CF,
+    0x4E27, 0xC9A5,
+    0x4E28, 0xD8AD,
+    0x4E2A, 0xB8F6,
+    0x4E2B, 0xD1BE,
+    0x4E2C, 0xE3DC,
+    0x4E2D, 0xD6D0,
+    0x4E30, 0xB7E1,
+    0x4E32, 0xB4AE,
+    0x4E34, 0xC1D9,
+    0x4E36, 0xD8BC,
+    0x4E38, 0xCDE8,
+    0x4E39, 0xB5A4,
+    0x4E3A, 0xCEAA,
+    0x4E3B, 0xD6F7,
+    0x4E3D, 0xC0F6,
+    0x4E3E, 0xBED9,
+    0x4E3F, 0xD8AF,
+    0x4E43, 0xC4CB,
+    0x4E45, 0xBEC3,
+    0x4E47, 0xD8B1,
+    0x4E48, 0xC3B4,
+    0x4E49, 0xD2E5,
+    0x4E4B, 0xD6AE,
+    0x4E4C, 0xCEDA,
+    0x4E4D, 0xD5A7,
+    0x4E4E, 0xBAF5,
+    0x4E4F, 0xB7A6,
+    0x4E50, 0xC0D6,
+    0x4E52, 0xC6B9,
+    0x4E53, 0xC5D2,
+    0x4E54, 0xC7C7,
+    0x4E56, 0xB9D4,
+    0x4E58, 0xB3CB,
+    0x4E59, 0xD2D2,
+    0x4E5C, 0xD8BF,
+    0x4E5D, 0xBEC5,
+    0x4E5E, 0xC6F2,
+    0x4E5F, 0xD2B2,
+    0x4E60, 0xCFB0,
+    0x4E61, 0xCFE7,
+    0x4E66, 0xCAE9,
+    0x4E69, 0xD8C0,
+    0x4E70, 0xC2F2,
+    0x4E71, 0xC2D2,
+    0x4E73, 0xC8E9,
+    0x4E7E, 0xC7AC,
+    0x4E86, 0xC1CB,
+    0x4E88, 0xD3E8,
+    0x4E89, 0xD5F9,
+    0x4E8B, 0xCAC2,
+    0x4E8C, 0xB6FE,
+    0x4E8D, 0xD8A1,
+    0x4E8E, 0xD3DA,
+    0x4E8F, 0xBFF7,
+    0x4E91, 0xD4C6,
+    0x4E92, 0xBBA5,
+    0x4E93, 0xD8C1,
+    0x4E94, 0xCEE5,
+    0x4E95, 0xBEAE,
+    0x4E98, 0xD8A8,
+    0x4E9A, 0xD1C7,
+    0x4E9B, 0xD0A9,
+    0x4E9F, 0xD8BD,
+    0x4EA0, 0xD9EF,
+    0x4EA1, 0xCDF6,
+    0x4EA2, 0xBFBA,
+    0x4EA4, 0xBDBB,
+    0x4EA5, 0xBAA5,
+    0x4EA6, 0xD2E0,
+    0x4EA7, 0xB2FA,
+    0x4EA8, 0xBAE0,
+    0x4EA9, 0xC4B6,
+    0x4EAB, 0xCFED,
+    0x4EAC, 0xBEA9,
+    0x4EAD, 0xCDA4,
+    0x4EAE, 0xC1C1,
+    0x4EB2, 0xC7D7,
+    0x4EB3, 0xD9F1,
+    0x4EB5, 0xD9F4,
+    0x4EBA, 0xC8CB,
+    0x4EBB, 0xD8E9,
+    0x4EBF, 0xD2DA,
+    0x4EC0, 0xCAB2,
+    0x4EC1, 0xC8CA,
+    0x4EC2, 0xD8EC,
+    0x4EC3, 0xD8EA,
+    0x4EC4, 0xD8C6,
+    0x4EC5, 0xBDF6,
+    0x4EC6, 0xC6CD,
+    0x4EC7, 0xB3F0,
+    0x4EC9, 0xD8EB,
+    0x4ECA, 0xBDF1,
+    0x4ECB, 0xBDE9,
+    0x4ECD, 0xC8D4,
+    0x4ECE, 0xB4D3,
+    0x4ED1, 0xC2D8,
+    0x4ED3, 0xB2D6,
+    0x4ED4, 0xD7D0,
+    0x4ED5, 0xCACB,
+    0x4ED6, 0xCBFB,
+    0x4ED7, 0xD5CC,
+    0x4ED8, 0xB8B6,
+    0x4ED9, 0xCFC9,
+    0x4EDD, 0xD9DA,
+    0x4EDE, 0xD8F0,
+    0x4EDF, 0xC7AA,
+    0x4EE1, 0xD8EE,
+    0x4EE3, 0xB4FA,
+    0x4EE4, 0xC1EE,
+    0x4EE5, 0xD2D4,
+    0x4EE8, 0xD8ED,
+    0x4EEA, 0xD2C7,
+    0x4EEB, 0xD8EF,
+    0x4EEC, 0xC3C7,
+    0x4EF0, 0xD1F6,
+    0x4EF2, 0xD6D9,
+    0x4EF3, 0xD8F2,
+    0x4EF5, 0xD8F5,
+    0x4EF6, 0xBCFE,
+    0x4EF7, 0xBCDB,
+    0x4EFB, 0xC8CE,
+    0x4EFD, 0xB7DD,
+    0x4EFF, 0xB7C2,
+    0x4F01, 0xC6F3,
+    0x4F09, 0xD8F8,
+    0x4F0A, 0xD2C1,
+    0x4F0D, 0xCEE9,
+    0x4F0E, 0xBCBF,
+    0x4F0F, 0xB7FC,
+    0x4F10, 0xB7A5,
+    0x4F11, 0xD0DD,
+    0x4F17, 0xD6DA,
+    0x4F18, 0xD3C5,
+    0x4F19, 0xBBEF,
+    0x4F1A, 0xBBE1,
+    0x4F1B, 0xD8F1,
+    0x4F1E, 0xC9A1,
+    0x4F1F, 0xCEB0,
+    0x4F20, 0xB4AB,
+    0x4F22, 0xD8F3,
+    0x4F24, 0xC9CB,
+    0x4F25, 0xD8F6,
+    0x4F26, 0xC2D7,
+    0x4F27, 0xD8F7,
+    0x4F2A, 0xCEB1,
+    0x4F2B, 0xD8F9,
+    0x4F2F, 0xB2AE,
+    0x4F30, 0xB9C0,
+    0x4F32, 0xD9A3,
+    0x4F34, 0xB0E9,
+    0x4F36, 0xC1E6,
+    0x4F38, 0xC9EC,
+    0x4F3A, 0xCBC5,
+    0x4F3C, 0xCBC6,
+    0x4F3D, 0xD9A4,
+    0x4F43, 0xB5E8,
+    0x4F46, 0xB5AB,
+    0x4F4D, 0xCEBB,
+    0x4F4E, 0xB5CD,
+    0x4F4F, 0xD7A1,
+    0x4F50, 0xD7F4,
+    0x4F51, 0xD3D3,
+    0x4F53, 0xCCE5,
+    0x4F55, 0xBACE,
+    0x4F57, 0xD9A2,
+    0x4F58, 0xD9DC,
+    0x4F59, 0xD3E0,
+    0x4F5A, 0xD8FD,
+    0x4F5B, 0xB7F0,
+    0x4F5C, 0xD7F7,
+    0x4F5D, 0xD8FE,
+    0x4F5E, 0xD8FA,
+    0x4F5F, 0xD9A1,
+    0x4F60, 0xC4E3,
+    0x4F63, 0xD3B6,
+    0x4F64, 0xD8F4,
+    0x4F65, 0xD9DD,
+    0x4F67, 0xD8FB,
+    0x4F69, 0xC5E5,
+    0x4F6C, 0xC0D0,
+    0x4F6F, 0xD1F0,
+    0x4F70, 0xB0DB,
+    0x4F73, 0xBCD1,
+    0x4F74, 0xD9A6,
+    0x4F76, 0xD9A5,
+    0x4F7B, 0xD9AC,
+    0x4F7C, 0xD9AE,
+    0x4F7E, 0xD9AB,
+    0x4F7F, 0xCAB9,
+    0x4F83, 0xD9A9,
+    0x4F84, 0xD6B6,
+    0x4F88, 0xB3DE,
+    0x4F89, 0xD9A8,
+    0x4F8B, 0xC0FD,
+    0x4F8D, 0xCACC,
+    0x4F8F, 0xD9AA,
+    0x4F91, 0xD9A7,
+    0x4F94, 0xD9B0,
+    0x4F97, 0xB6B1,
+    0x4F9B, 0xB9A9,
+    0x4F9D, 0xD2C0,
+    0x4FA0, 0xCFC0,
+    0x4FA3, 0xC2C2,
+    0x4FA5, 0xBDC4,
+    0x4FA6, 0xD5EC,
+    0x4FA7, 0xB2E0,
+    0x4FA8, 0xC7C8,
+    0x4FA9, 0xBFEB,
+    0x4FAA, 0xD9AD,
+    0x4FAC, 0xD9AF,
+    0x4FAE, 0xCEEA,
+    0x4FAF, 0xBAEE,
+    0x4FB5, 0xC7D6,
+    0x4FBF, 0xB1E3,
+    0x4FC3, 0xB4D9,
+    0x4FC4, 0xB6ED,
+    0x4FC5, 0xD9B4,
+    0x4FCA, 0xBFA1,
+    0x4FCE, 0xD9DE,
+    0x4FCF, 0xC7CE,
+    0x4FD0, 0xC0FE,
+    0x4FD1, 0xD9B8,
+    0x4FD7, 0xCBD7,
+    0x4FD8, 0xB7FD,
+    0x4FDA, 0xD9B5,
+    0x4FDC, 0xD9B7,
+    0x4FDD, 0xB1A3,
+    0x4FDE, 0xD3E1,
+    0x4FDF, 0xD9B9,
+    0x4FE1, 0xD0C5,
+    0x4FE3, 0xD9B6,
+    0x4FE6, 0xD9B1,
+    0x4FE8, 0xD9B2,
+    0x4FE9, 0xC1A9,
+    0x4FEA, 0xD9B3,
+    0x4FED, 0xBCF3,
+    0x4FEE, 0xD0DE,
+    0x4FEF, 0xB8A9,
+    0x4FF1, 0xBEE3,
+    0x4FF3, 0xD9BD,
+    0x4FF8, 0xD9BA,
+    0x4FFA, 0xB0B3,
+    0x4FFE, 0xD9C2,
+    0x500C, 0xD9C4,
+    0x500D, 0xB1B6,
+    0x500F, 0xD9BF,
+    0x5012, 0xB5B9,
+    0x5014, 0xBEF3,
+    0x5018, 0xCCC8,
+    0x5019, 0xBAF2,
+    0x501A, 0xD2D0,
+    0x501C, 0xD9C3,
+    0x501F, 0xBDE8,
+    0x5021, 0xB3AB,
+    0x5025, 0xD9C5,
+    0x5026, 0xBEEB,
+    0x5028, 0xD9C6,
+    0x5029, 0xD9BB,
+    0x502A, 0xC4DF,
+    0x502C, 0xD9BE,
+    0x502D, 0xD9C1,
+    0x502E, 0xD9C0,
+    0x503A, 0xD5AE,
+    0x503C, 0xD6B5,
+    0x503E, 0xC7E3,
+    0x5043, 0xD9C8,
+    0x5047, 0xBCD9,
+    0x5048, 0xD9CA,
+    0x504C, 0xD9BC,
+    0x504E, 0xD9CB,
+    0x504F, 0xC6AB,
+    0x5055, 0xD9C9,
+    0x505A, 0xD7F6,
+    0x505C, 0xCDA3,
+    0x5065, 0xBDA1,
+    0x506C, 0xD9CC,
+    0x5076, 0xC5BC,
+    0x5077, 0xCDB5,
+    0x507B, 0xD9CD,
+    0x507E, 0xD9C7,
+    0x507F, 0xB3A5,
+    0x5080, 0xBFFE,
+    0x5085, 0xB8B5,
+    0x5088, 0xC0FC,
+    0x508D, 0xB0F8,
+    0x50A3, 0xB4F6,
+    0x50A5, 0xD9CE,
+    0x50A7, 0xD9CF,
+    0x50A8, 0xB4A2,
+    0x50A9, 0xD9D0,
+    0x50AC, 0xB4DF,
+    0x50B2, 0xB0C1,
+    0x50BA, 0xD9D1,
+    0x50BB, 0xC9B5,
+    0x50CF, 0xCFF1,
+    0x50D6, 0xD9D2,
+    0x50DA, 0xC1C5,
+    0x50E6, 0xD9D6,
+    0x50E7, 0xC9AE,
+    0x50EC, 0xD9D5,
+    0x50ED, 0xD9D4,
+    0x50EE, 0xD9D7,
+    0x50F3, 0xCBDB,
+    0x50F5, 0xBDA9,
+    0x50FB, 0xC6A7,
+    0x5106, 0xD9D3,
+    0x5107, 0xD9D8,
+    0x510B, 0xD9D9,
+    0x5112, 0xC8E5,
+    0x5121, 0xC0DC,
+    0x513F, 0xB6F9,
+    0x5140, 0xD8A3,
+    0x5141, 0xD4CA,
+    0x5143, 0xD4AA,
+    0x5144, 0xD0D6,
+    0x5145, 0xB3E4,
+    0x5146, 0xD5D7,
+    0x5148, 0xCFC8,
+    0x5149, 0xB9E2,
+    0x514B, 0xBFCB,
+    0x514D, 0xC3E2,
+    0x5151, 0xB6D2,
+    0x5154, 0xCDC3,
+    0x5155, 0xD9EE,
+    0x5156, 0xD9F0,
+    0x515A, 0xB5B3,
+    0x515C, 0xB6B5,
+    0x5162, 0xBEA4,
+    0x5165, 0xC8EB,
+    0x5168, 0xC8AB,
+    0x516B, 0xB0CB,
+    0x516C, 0xB9AB,
+    0x516D, 0xC1F9,
+    0x516E, 0xD9E2,
+    0x5170, 0xC0BC,
+    0x5171, 0xB9B2,
+    0x5173, 0xB9D8,
+    0x5174, 0xD0CB,
+    0x5175, 0xB1F8,
+    0x5176, 0xC6E4,
+    0x5177, 0xBEDF,
+    0x5178, 0xB5E4,
+    0x5179, 0xD7C8,
+    0x517B, 0xD1F8,
+    0x517C, 0xBCE6,
+    0x517D, 0xCADE,
+    0x5180, 0xBCBD,
+    0x5181, 0xD9E6,
+    0x5182, 0xD8E7,
+    0x5185, 0xC4DA,
+    0x5188, 0xB8D4,
+    0x5189, 0xC8BD,
+    0x518C, 0xB2E1,
+    0x518D, 0xD4D9,
+    0x5192, 0xC3B0,
+    0x5195, 0xC3E1,
+    0x5196, 0xDAA2,
+    0x5197, 0xC8DF,
+    0x5199, 0xD0B4,
+    0x519B, 0xBEFC,
+    0x519C, 0xC5A9,
+    0x51A0, 0xB9DA,
+    0x51A2, 0xDAA3,
+    0x51A4, 0xD4A9,
+    0x51A5, 0xDAA4,
+    0x51AB, 0xD9FB,
+    0x51AC, 0xB6AC,
+    0x51AF, 0xB7EB,
+    0x51B0, 0xB1F9,
+    0x51B1, 0xD9FC,
+    0x51B2, 0xB3E5,
+    0x51B3, 0xBEF6,
+    0x51B5, 0xBFF6,
+    0x51B6, 0xD2B1,
+    0x51B7, 0xC0E4,
+    0x51BB, 0xB6B3,
+    0x51BC, 0xD9FE,
+    0x51BD, 0xD9FD,
+    0x51C0, 0xBEBB,
+    0x51C4, 0xC6E0,
+    0x51C6, 0xD7BC,
+    0x51C7, 0xDAA1,
+    0x51C9, 0xC1B9,
+    0x51CB, 0xB5F2,
+    0x51CC, 0xC1E8,
+    0x51CF, 0xBCF5,
+    0x51D1, 0xB4D5,
+    0x51DB, 0xC1DD,
+    0x51DD, 0xC4FD,
+    0x51E0, 0xBCB8,
+    0x51E1, 0xB7B2,
+    0x51E4, 0xB7EF,
+    0x51EB, 0xD9EC,
+    0x51ED, 0xC6BE,
+    0x51EF, 0xBFAD,
+    0x51F0, 0xBBCB,
+    0x51F3, 0xB5CA,
+    0x51F5, 0xDBC9,
+    0x51F6, 0xD0D7,
+    0x51F8, 0xCDB9,
+    0x51F9, 0xB0BC,
+    0x51FA, 0xB3F6,
+    0x51FB, 0xBBF7,
+    0x51FC, 0xDBCA,
+    0x51FD, 0xBAAF,
+    0x51FF, 0xD4E4,
+    0x5200, 0xB5B6,
+    0x5201, 0xB5F3,
+    0x5202, 0xD8D6,
+    0x5203, 0xC8D0,
+    0x5206, 0xB7D6,
+    0x5207, 0xC7D0,
+    0x5208, 0xD8D7,
+    0x520A, 0xBFAF,
+    0x520D, 0xDBBB,
+    0x520E, 0xD8D8,
+    0x5211, 0xD0CC,
+    0x5212, 0xBBAE,
+    0x5216, 0xEBBE,
+    0x5217, 0xC1D0,
+    0x5218, 0xC1F5,
+    0x5219, 0xD4F2,
+    0x521A, 0xB8D5,
+    0x521B, 0xB4B4,
+    0x521D, 0xB3F5,
+    0x5220, 0xC9BE,
+    0x5224, 0xC5D0,
+    0x5228, 0xC5D9,
+    0x5229, 0xC0FB,
+    0x522B, 0xB1F0,
+    0x522D, 0xD8D9,
+    0x522E, 0xB9CE,
+    0x5230, 0xB5BD,
+    0x5233, 0xD8DA,
+    0x5236, 0xD6C6,
+    0x5237, 0xCBA2,
+    0x5238, 0xC8AF,
+    0x5239, 0xC9B2,
+    0x523A, 0xB4CC,
+    0x523B, 0xBFCC,
+    0x523D, 0xB9F4,
+    0x523F, 0xD8DB,
+    0x5240, 0xD8DC,
+    0x5241, 0xB6E7,
+    0x5242, 0xBCC1,
+    0x5243, 0xCCEA,
+    0x524A, 0xCFF7,
+    0x524C, 0xD8DD,
+    0x524D, 0xC7B0,
+    0x5250, 0xB9D0,
+    0x5251, 0xBDA3,
+    0x5254, 0xCCDE,
+    0x5256, 0xC6CA,
+    0x525C, 0xD8E0,
+    0x525E, 0xD8DE,
+    0x5261, 0xD8DF,
+    0x5265, 0xB0FE,
+    0x5267, 0xBEE7,
+    0x5269, 0xCAA3,
+    0x526A, 0xBCF4,
+    0x526F, 0xB8B1,
+    0x5272, 0xB8EE,
+    0x527D, 0xD8E2,
+    0x527F, 0xBDCB,
+    0x5281, 0xD8E4,
+    0x5282, 0xD8E3,
+    0x5288, 0xC5FC,
+    0x5290, 0xD8E5,
+    0x5293, 0xD8E6,
+    0x529B, 0xC1A6,
+    0x529D, 0xC8B0,
+    0x529E, 0xB0EC,
+    0x529F, 0xB9A6,
+    0x52A0, 0xBCD3,
+    0x52A1, 0xCEF1,
+    0x52A2, 0xDBBD,
+    0x52A3, 0xC1D3,
+    0x52A8, 0xB6AF,
+    0x52A9, 0xD6FA,
+    0x52AA, 0xC5AC,
+    0x52AB, 0xBDD9,
+    0x52AC, 0xDBBE,
+    0x52AD, 0xDBBF,
+    0x52B1, 0xC0F8,
+    0x52B2, 0xBEA2,
+    0x52B3, 0xC0CD,
+    0x52BE, 0xDBC0,
+    0x52BF, 0xCAC6,
+    0x52C3, 0xB2AA,
+    0x52C7, 0xD3C2,
+    0x52C9, 0xC3E3,
+    0x52CB, 0xD1AB,
+    0x52D0, 0xDBC2,
+    0x52D2, 0xC0D5,
+    0x52D6, 0xDBC3,
+    0x52D8, 0xBFB1,
+    0x52DF, 0xC4BC,
+    0x52E4, 0xC7DA,
+    0x52F0, 0xDBC4,
+    0x52F9, 0xD9E8,
+    0x52FA, 0xC9D7,
+    0x52FE, 0xB9B4,
+    0x52FF, 0xCEF0,
+    0x5300, 0xD4C8,
+    0x5305, 0xB0FC,
+    0x5306, 0xB4D2,
+    0x5308, 0xD0D9,
+    0x530D, 0xD9E9,
+    0x530F, 0xDECB,
+    0x5310, 0xD9EB,
+    0x5315, 0xD8B0,
+    0x5316, 0xBBAF,
+    0x5317, 0xB1B1,
+    0x5319, 0xB3D7,
+    0x531A, 0xD8CE,
+    0x531D, 0xD4D1,
+    0x5320, 0xBDB3,
+    0x5321, 0xBFEF,
+    0x5323, 0xCFBB,
+    0x5326, 0xD8D0,
+    0x532A, 0xB7CB,
+    0x532E, 0xD8D1,
+    0x5339, 0xC6A5,
+    0x533A, 0xC7F8,
+    0x533B, 0xD2BD,
+    0x533E, 0xD8D2,
+    0x533F, 0xC4E4,
+    0x5341, 0xCAAE,
+    0x5343, 0xC7A7,
+    0x5345, 0xD8A6,
+    0x5347, 0xC9FD,
+    0x5348, 0xCEE7,
+    0x5349, 0xBBDC,
+    0x534A, 0xB0EB,
+    0x534E, 0xBBAA,
+    0x534F, 0xD0AD,
+    0x5351, 0xB1B0,
+    0x5352, 0xD7E4,
+    0x5353, 0xD7BF,
+    0x5355, 0xB5A5,
+    0x5356, 0xC2F4,
+    0x5357, 0xC4CF,
+    0x535A, 0xB2A9,
+    0x535C, 0xB2B7,
+    0x535E, 0xB1E5,
+    0x535F, 0xDFB2,
+    0x5360, 0xD5BC,
+    0x5361, 0xBFA8,
+    0x5362, 0xC2AC,
+    0x5363, 0xD8D5,
+    0x5364, 0xC2B1,
+    0x5366, 0xD8D4,
+    0x5367, 0xCED4,
+    0x5369, 0xDAE0,
+    0x536B, 0xCEC0,
+    0x536E, 0xD8B4,
+    0x536F, 0xC3AE,
+    0x5370, 0xD3A1,
+    0x5371, 0xCEA3,
+    0x5373, 0xBCB4,
+    0x5374, 0xC8B4,
+    0x5375, 0xC2D1,
+    0x5377, 0xBEED,
+    0x5378, 0xD0B6,
+    0x537A, 0xDAE1,
+    0x537F, 0xC7E4,
+    0x5382, 0xB3A7,
+    0x5384, 0xB6F2,
+    0x5385, 0xCCFC,
+    0x5386, 0xC0FA,
+    0x5389, 0xC0F7,
+    0x538B, 0xD1B9,
+    0x538C, 0xD1E1,
+    0x538D, 0xD8C7,
+    0x5395, 0xB2DE,
+    0x5398, 0xC0E5,
+    0x539A, 0xBAF1,
+    0x539D, 0xD8C8,
+    0x539F, 0xD4AD,
+    0x53A2, 0xCFE1,
+    0x53A3, 0xD8C9,
+    0x53A5, 0xD8CA,
+    0x53A6, 0xCFC3,
+    0x53A8, 0xB3F8,
+    0x53A9, 0xBEC7,
+    0x53AE, 0xD8CB,
+    0x53B6, 0xDBCC,
+    0x53BB, 0xC8A5,
+    0x53BF, 0xCFD8,
+    0x53C1, 0xC8FE,
+    0x53C2, 0xB2CE,
+    0x53C8, 0xD3D6,
+    0x53C9, 0xB2E6,
+    0x53CA, 0xBCB0,
+    0x53CB, 0xD3D1,
+    0x53CC, 0xCBAB,
+    0x53CD, 0xB7B4,
+    0x53D1, 0xB7A2,
+    0x53D4, 0xCAE5,
+    0x53D6, 0xC8A1,
+    0x53D7, 0xCADC,
+    0x53D8, 0xB1E4,
+    0x53D9, 0xD0F0,
+    0x53DB, 0xC5D1,
+    0x53DF, 0xDBC5,
+    0x53E0, 0xB5FE,
+    0x53E3, 0xBFDA,
+    0x53E4, 0xB9C5,
+    0x53E5, 0xBEE4,
+    0x53E6, 0xC1ED,
+    0x53E8, 0xDFB6,
+    0x53E9, 0xDFB5,
+    0x53EA, 0xD6BB,
+    0x53EB, 0xBDD0,
+    0x53EC, 0xD5D9,
+    0x53ED, 0xB0C8,
+    0x53EE, 0xB6A3,
+    0x53EF, 0xBFC9,
+    0x53F0, 0xCCA8,
+    0x53F1, 0xDFB3,
+    0x53F2, 0xCAB7,
+    0x53F3, 0xD3D2,
+    0x53F5, 0xD8CF,
+    0x53F6, 0xD2B6,
+    0x53F7, 0xBAC5,
+    0x53F8, 0xCBBE,
+    0x53F9, 0xCCBE,
+    0x53FB, 0xDFB7,
+    0x53FC, 0xB5F0,
+    0x53FD, 0xDFB4,
+    0x5401, 0xD3F5,
+    0x5403, 0xB3D4,
+    0x5404, 0xB8F7,
+    0x5406, 0xDFBA,
+    0x5408, 0xBACF,
+    0x5409, 0xBCAA,
+    0x540A, 0xB5F5,
+    0x540C, 0xCDAC,
+    0x540D, 0xC3FB,
+    0x540E, 0xBAF3,
+    0x540F, 0xC0F4,
+    0x5410, 0xCDC2,
+    0x5411, 0xCFF2,
+    0x5412, 0xDFB8,
+    0x5413, 0xCFC5,
+    0x5415, 0xC2C0,
+    0x5416, 0xDFB9,
+    0x5417, 0xC2F0,
+    0x541B, 0xBEFD,
+    0x541D, 0xC1DF,
+    0x541E, 0xCDCC,
+    0x541F, 0xD2F7,
+    0x5420, 0xB7CD,
+    0x5421, 0xDFC1,
+    0x5423, 0xDFC4,
+    0x5426, 0xB7F1,
+    0x5427, 0xB0C9,
+    0x5428, 0xB6D6,
+    0x5429, 0xB7D4,
+    0x542B, 0xBAAC,
+    0x542C, 0xCCFD,
+    0x542D, 0xBFD4,
+    0x542E, 0xCBB1,
+    0x542F, 0xC6F4,
+    0x5431, 0xD6A8,
+    0x5432, 0xDFC5,
+    0x5434, 0xCEE2,
+    0x5435, 0xB3B3,
+    0x5438, 0xCEFC,
+    0x5439, 0xB4B5,
+    0x543B, 0xCEC7,
+    0x543C, 0xBAF0,
+    0x543E, 0xCEE1,
+    0x5440, 0xD1BD,
+    0x5443, 0xDFC0,
+    0x5446, 0xB4F4,
+    0x5448, 0xB3CA,
+    0x544A, 0xB8E6,
+    0x544B, 0xDFBB,
+    0x5450, 0xC4C5,
+    0x5452, 0xDFBC,
+    0x5453, 0xDFBD,
+    0x5454, 0xDFBE,
+    0x5455, 0xC5BB,
+    0x5456, 0xDFBF,
+    0x5457, 0xDFC2,
+    0x5458, 0xD4B1,
+    0x5459, 0xDFC3,
+    0x545B, 0xC7BA,
+    0x545C, 0xCED8,
+    0x5462, 0xC4D8,
+    0x5464, 0xDFCA,
+    0x5466, 0xDFCF,
+    0x5468, 0xD6DC,
+    0x5471, 0xDFC9,
+    0x5472, 0xDFDA,
+    0x5473, 0xCEB6,
+    0x5475, 0xBAC7,
+    0x5476, 0xDFCE,
+    0x5477, 0xDFC8,
+    0x5478, 0xC5DE,
+    0x547B, 0xC9EB,
+    0x547C, 0xBAF4,
+    0x547D, 0xC3FC,
+    0x5480, 0xBED7,
+    0x5482, 0xDFC6,
+    0x5484, 0xDFCD,
+    0x5486, 0xC5D8,
+    0x548B, 0xD5A6,
+    0x548C, 0xBACD,
+    0x548E, 0xBECC,
+    0x548F, 0xD3BD,
+    0x5490, 0xB8C0,
+    0x5492, 0xD6E4,
+    0x5494, 0xDFC7,
+    0x5495, 0xB9BE,
+    0x5496, 0xBFA7,
+    0x5499, 0xC1FC,
+    0x549A, 0xDFCB,
+    0x549B, 0xDFCC,
+    0x549D, 0xDFD0,
+    0x54A3, 0xDFDB,
+    0x54A4, 0xDFE5,
+    0x54A6, 0xDFD7,
+    0x54A7, 0xDFD6,
+    0x54A8, 0xD7C9,
+    0x54A9, 0xDFE3,
+    0x54AA, 0xDFE4,
+    0x54AB, 0xE5EB,
+    0x54AC, 0xD2A7,
+    0x54AD, 0xDFD2,
+    0x54AF, 0xBFA9,
+    0x54B1, 0xD4DB,
+    0x54B3, 0xBFC8,
+    0x54B4, 0xDFD4,
+    0x54B8, 0xCFCC,
+    0x54BB, 0xDFDD,
+    0x54BD, 0xD1CA,
+    0x54BF, 0xDFDE,
+    0x54C0, 0xB0A7,
+    0x54C1, 0xC6B7,
+    0x54C2, 0xDFD3,
+    0x54C4, 0xBAE5,
+    0x54C6, 0xB6DF,
+    0x54C7, 0xCDDB,
+    0x54C8, 0xB9FE,
+    0x54C9, 0xD4D5,
+    0x54CC, 0xDFDF,
+    0x54CD, 0xCFEC,
+    0x54CE, 0xB0A5,
+    0x54CF, 0xDFE7,
+    0x54D0, 0xDFD1,
+    0x54D1, 0xD1C6,
+    0x54D2, 0xDFD5,
+    0x54D3, 0xDFD8,
+    0x54D4, 0xDFD9,
+    0x54D5, 0xDFDC,
+    0x54D7, 0xBBA9,
+    0x54D9, 0xDFE0,
+    0x54DA, 0xDFE1,
+    0x54DC, 0xDFE2,
+    0x54DD, 0xDFE6,
+    0x54DE, 0xDFE8,
+    0x54DF, 0xD3B4,
+    0x54E5, 0xB8E7,
+    0x54E6, 0xC5B6,
+    0x54E7, 0xDFEA,
+    0x54E8, 0xC9DA,
+    0x54E9, 0xC1A8,
+    0x54EA, 0xC4C4,
+    0x54ED, 0xBFDE,
+    0x54EE, 0xCFF8,
+    0x54F2, 0xD5DC,
+    0x54F3, 0xDFEE,
+    0x54FA, 0xB2B8,
+    0x54FC, 0xBADF,
+    0x54FD, 0xDFEC,
+    0x54FF, 0xDBC1,
+    0x5501, 0xD1E4,
+    0x5506, 0xCBF4,
+    0x5507, 0xB4BD,
+    0x5509, 0xB0A6,
+    0x550F, 0xDFF1,
+    0x5510, 0xCCC6,
+    0x5511, 0xDFF2,
+    0x5514, 0xDFED,
+    0x551B, 0xDFE9,
+    0x5520, 0xDFEB,
+    0x5522, 0xDFEF,
+    0x5523, 0xDFF0,
+    0x5524, 0xBBBD,
+    0x5527, 0xDFF3,
+    0x552A, 0xDFF4,
+    0x552C, 0xBBA3,
+    0x552E, 0xCADB,
+    0x552F, 0xCEA8,
+    0x5530, 0xE0A7,
+    0x5531, 0xB3AA,
+    0x5533, 0xE0A6,
+    0x5537, 0xE0A1,
+    0x553C, 0xDFFE,
+    0x553E, 0xCDD9,
+    0x553F, 0xDFFC,
+    0x5541, 0xDFFA,
+    0x5543, 0xBFD0,
+    0x5544, 0xD7C4,
+    0x5546, 0xC9CC,
+    0x5549, 0xDFF8,
+    0x554A, 0xB0A1,
+    0x5550, 0xDFFD,
+    0x5555, 0xDFFB,
+    0x5556, 0xE0A2,
+    0x555C, 0xE0A8,
+    0x5561, 0xB7C8,
+    0x5564, 0xC6A1,
+    0x5565, 0xC9B6,
+    0x5566, 0xC0B2,
+    0x5567, 0xDFF5,
+    0x556A, 0xC5BE,
+    0x556C, 0xD8C4,
+    0x556D, 0xDFF9,
+    0x556E, 0xC4F6,
+    0x5575, 0xE0A3,
+    0x5576, 0xE0A4,
+    0x5577, 0xE0A5,
+    0x5578, 0xD0A5,
+    0x557B, 0xE0B4,
+    0x557C, 0xCCE4,
+    0x557E, 0xE0B1,
+    0x5580, 0xBFA6,
+    0x5581, 0xE0AF,
+    0x5582, 0xCEB9,
+    0x5583, 0xE0AB,
+    0x5584, 0xC9C6,
+    0x5587, 0xC0AE,
+    0x5588, 0xE0AE,
+    0x5589, 0xBAED,
+    0x558A, 0xBAB0,
+    0x558B, 0xE0A9,
+    0x558F, 0xDFF6,
+    0x5591, 0xE0B3,
+    0x5594, 0xE0B8,
+    0x5598, 0xB4AD,
+    0x5599, 0xE0B9,
+    0x559C, 0xCFB2,
+    0x559D, 0xBAC8,
+    0x559F, 0xE0B0,
+    0x55A7, 0xD0FA,
+    0x55B1, 0xE0AC,
+    0x55B3, 0xD4FB,
+    0x55B5, 0xDFF7,
+    0x55B7, 0xC5E7,
+    0x55B9, 0xE0AD,
+    0x55BB, 0xD3F7,
+    0x55BD, 0xE0B6,
+    0x55BE, 0xE0B7,
+    0x55C4, 0xE0C4,
+    0x55C5, 0xD0E1,
+    0x55C9, 0xE0BC,
+    0x55CC, 0xE0C9,
+    0x55CD, 0xE0CA,
+    0x55D1, 0xE0BE,
+    0x55D2, 0xE0AA,
+    0x55D3, 0xC9A4,
+    0x55D4, 0xE0C1,
+    0x55D6, 0xE0B2,
+    0x55DC, 0xCAC8,
+    0x55DD, 0xE0C3,
+    0x55DF, 0xE0B5,
+    0x55E1, 0xCECB,
+    0x55E3, 0xCBC3,
+    0x55E4, 0xE0CD,
+    0x55E5, 0xE0C6,
+    0x55E6, 0xE0C2,
+    0x55E8, 0xE0CB,
+    0x55EA, 0xE0BA,
+    0x55EB, 0xE0BF,
+    0x55EC, 0xE0C0,
+    0x55EF, 0xE0C5,
+    0x55F2, 0xE0C7,
+    0x55F3, 0xE0C8,
+    0x55F5, 0xE0CC,
+    0x55F7, 0xE0BB,
+    0x55FD, 0xCBD4,
+    0x55FE, 0xE0D5,
+    0x5600, 0xE0D6,
+    0x5601, 0xE0D2,
+    0x5608, 0xE0D0,
+    0x5609, 0xBCCE,
+    0x560C, 0xE0D1,
+    0x560E, 0xB8C2,
+    0x560F, 0xD8C5,
+    0x5618, 0xD0EA,
+    0x561B, 0xC2EF,
+    0x561E, 0xE0CF,
+    0x561F, 0xE0BD,
+    0x5623, 0xE0D4,
+    0x5624, 0xE0D3,
+    0x5627, 0xE0D7,
+    0x562C, 0xE0DC,
+    0x562D, 0xE0D8,
+    0x5631, 0xD6F6,
+    0x5632, 0xB3B0,
+    0x5634, 0xD7EC,
+    0x5636, 0xCBBB,
+    0x5639, 0xE0DA,
+    0x563B, 0xCEFB,
+    0x563F, 0xBAD9,
+    0x564C, 0xE0E1,
+    0x564D, 0xE0DD,
+    0x564E, 0xD2AD,
+    0x5654, 0xE0E2,
+    0x5657, 0xE0DB,
+    0x5658, 0xE0D9,
+    0x5659, 0xE0DF,
+    0x565C, 0xE0E0,
+    0x5662, 0xE0DE,
+    0x5664, 0xE0E4,
+    0x5668, 0xC6F7,
+    0x5669, 0xD8AC,
+    0x566A, 0xD4EB,
+    0x566B, 0xE0E6,
+    0x566C, 0xCAC9,
+    0x5671, 0xE0E5,
+    0x5676, 0xB8C1,
+    0x567B, 0xE0E7,
+    0x567C, 0xE0E8,
+    0x5685, 0xE0E9,
+    0x5686, 0xE0E3,
+    0x568E, 0xBABF,
+    0x568F, 0xCCE7,
+    0x5693, 0xE0EA,
+    0x56A3, 0xCFF9,
+    0x56AF, 0xE0EB,
+    0x56B7, 0xC8C2,
+    0x56BC, 0xBDC0,
+    0x56CA, 0xC4D2,
+    0x56D4, 0xE0EC,
+    0x56D7, 0xE0ED,
+    0x56DA, 0xC7F4,
+    0x56DB, 0xCBC4,
+    0x56DD, 0xE0EE,
+    0x56DE, 0xBBD8,
+    0x56DF, 0xD8B6,
+    0x56E0, 0xD2F2,
+    0x56E1, 0xE0EF,
+    0x56E2, 0xCDC5,
+    0x56E4, 0xB6DA,
+    0x56EB, 0xE0F1,
+    0x56ED, 0xD4B0,
+    0x56F0, 0xC0A7,
+    0x56F1, 0xB4D1,
+    0x56F4, 0xCEA7,
+    0x56F5, 0xE0F0,
+    0x56F9, 0xE0F2,
+    0x56FA, 0xB9CC,
+    0x56FD, 0xB9FA,
+    0x56FE, 0xCDBC,
+    0x56FF, 0xE0F3,
+    0x5703, 0xC6D4,
+    0x5704, 0xE0F4,
+    0x5706, 0xD4B2,
+    0x5708, 0xC8A6,
+    0x5709, 0xE0F6,
+    0x570A, 0xE0F5,
+    0x571C, 0xE0F7,
+    0x571F, 0xCDC1,
+    0x5723, 0xCAA5,
+    0x5728, 0xD4DA,
+    0x5729, 0xDBD7,
+    0x572A, 0xDBD9,
+    0x572C, 0xDBD8,
+    0x572D, 0xB9E7,
+    0x572E, 0xDBDC,
+    0x572F, 0xDBDD,
+    0x5730, 0xB5D8,
+    0x5733, 0xDBDA,
+    0x5739, 0xDBDB,
+    0x573A, 0xB3A1,
+    0x573B, 0xDBDF,
+    0x573E, 0xBBF8,
+    0x5740, 0xD6B7,
+    0x5742, 0xDBE0,
+    0x5747, 0xBEF9,
+    0x574A, 0xB7BB,
+    0x574C, 0xDBD0,
+    0x574D, 0xCCAE,
+    0x574E, 0xBFB2,
+    0x574F, 0xBBB5,
+    0x5750, 0xD7F8,
+    0x5751, 0xBFD3,
+    0x5757, 0xBFE9,
+    0x575A, 0xBCE1,
+    0x575B, 0xCCB3,
+    0x575C, 0xDBDE,
+    0x575D, 0xB0D3,
+    0x575E, 0xCEEB,
+    0x575F, 0xB7D8,
+    0x5760, 0xD7B9,
+    0x5761, 0xC6C2,
+    0x5764, 0xC0A4,
+    0x5766, 0xCCB9,
+    0x5768, 0xDBE7,
+    0x5769, 0xDBE1,
+    0x576A, 0xC6BA,
+    0x576B, 0xDBE3,
+    0x576D, 0xDBE8,
+    0x576F, 0xC5F7,
+    0x5773, 0xDBEA,
+    0x5776, 0xDBE9,
+    0x5777, 0xBFC0,
+    0x577B, 0xDBE6,
+    0x577C, 0xDBE5,
+    0x5782, 0xB4B9,
+    0x5783, 0xC0AC,
+    0x5784, 0xC2A2,
+    0x5785, 0xDBE2,
+    0x5786, 0xDBE4,
+    0x578B, 0xD0CD,
+    0x578C, 0xDBED,
+    0x5792, 0xC0DD,
+    0x5793, 0xDBF2,
+    0x579B, 0xB6E2,
+    0x57A0, 0xDBF3,
+    0x57A1, 0xDBD2,
+    0x57A2, 0xB9B8,
+    0x57A3, 0xD4AB,
+    0x57A4, 0xDBEC,
+    0x57A6, 0xBFD1,
+    0x57A7, 0xDBF0,
+    0x57A9, 0xDBD1,
+    0x57AB, 0xB5E6,
+    0x57AD, 0xDBEB,
+    0x57AE, 0xBFE5,
+    0x57B2, 0xDBEE,
+    0x57B4, 0xDBF1,
+    0x57B8, 0xDBF9,
+    0x57C2, 0xB9A1,
+    0x57C3, 0xB0A3,
+    0x57CB, 0xC2F1,
+    0x57CE, 0xB3C7,
+    0x57CF, 0xDBEF,
+    0x57D2, 0xDBF8,
+    0x57D4, 0xC6D2,
+    0x57D5, 0xDBF4,
+    0x57D8, 0xDBF5,
+    0x57D9, 0xDBF7,
+    0x57DA, 0xDBF6,
+    0x57DD, 0xDBFE,
+    0x57DF, 0xD3F2,
+    0x57E0, 0xB2BA,
+    0x57E4, 0xDBFD,
+    0x57ED, 0xDCA4,
+    0x57EF, 0xDBFB,
+    0x57F4, 0xDBFA,
+    0x57F8, 0xDBFC,
+    0x57F9, 0xC5E0,
+    0x57FA, 0xBBF9,
+    0x57FD, 0xDCA3,
+    0x5800, 0xDCA5,
+    0x5802, 0xCCC3,
+    0x5806, 0xB6D1,
+    0x5807, 0xDDC0,
+    0x580B, 0xDCA1,
+    0x580D, 0xDCA2,
+    0x5811, 0xC7B5,
+    0x5815, 0xB6E9,
+    0x5819, 0xDCA7,
+    0x581E, 0xDCA6,
+    0x5820, 0xDCA9,
+    0x5821, 0xB1A4,
+    0x5824, 0xB5CC,
+    0x582A, 0xBFB0,
+    0x5830, 0xD1DF,
+    0x5835, 0xB6C2,
+    0x5844, 0xDCA8,
+    0x584C, 0xCBFA,
+    0x584D, 0xEBF3,
+    0x5851, 0xCBDC,
+    0x5854, 0xCBFE,
+    0x5858, 0xCCC1,
+    0x585E, 0xC8FB,
+    0x5865, 0xDCAA,
+    0x586B, 0xCCEE,
+    0x586C, 0xDCAB,
+    0x587E, 0xDBD3,
+    0x5880, 0xDCAF,
+    0x5881, 0xDCAC,
+    0x5883, 0xBEB3,
+    0x5885, 0xCAFB,
+    0x5889, 0xDCAD,
+    0x5892, 0xC9CA,
+    0x5893, 0xC4B9,
+    0x5899, 0xC7BD,
+    0x589A, 0xDCAE,
+    0x589E, 0xD4F6,
+    0x589F, 0xD0E6,
+    0x58A8, 0xC4AB,
+    0x58A9, 0xB6D5,
+    0x58BC, 0xDBD4,
+    0x58C1, 0xB1DA,
+    0x58C5, 0xDBD5,
+    0x58D1, 0xDBD6,
+    0x58D5, 0xBABE,
+    0x58E4, 0xC8C0,
+    0x58EB, 0xCABF,
+    0x58EC, 0xC8C9,
+    0x58EE, 0xD7B3,
+    0x58F0, 0xC9F9,
+    0x58F3, 0xBFC7,
+    0x58F6, 0xBAF8,
+    0x58F9, 0xD2BC,
+    0x5902, 0xE2BA,
+    0x5904, 0xB4A6,
+    0x5907, 0xB1B8,
+    0x590D, 0xB8B4,
+    0x590F, 0xCFC4,
+    0x5914, 0xD9E7,
+    0x5915, 0xCFA6,
+    0x5916, 0xCDE2,
+    0x5919, 0xD9ED,
+    0x591A, 0xB6E0,
+    0x591C, 0xD2B9,
+    0x591F, 0xB9BB,
+    0x5924, 0xE2B9,
+    0x5925, 0xE2B7,
+    0x5927, 0xB4F3,
+    0x5929, 0xCCEC,
+    0x592A, 0xCCAB,
+    0x592B, 0xB7F2,
+    0x592D, 0xD8B2,
+    0x592E, 0xD1EB,
+    0x592F, 0xBABB,
+    0x5931, 0xCAA7,
+    0x5934, 0xCDB7,
+    0x5937, 0xD2C4,
+    0x5938, 0xBFE4,
+    0x5939, 0xBCD0,
+    0x593A, 0xB6E1,
+    0x593C, 0xDEC5,
+    0x5941, 0xDEC6,
+    0x5942, 0xDBBC,
+    0x5944, 0xD1D9,
+    0x5947, 0xC6E6,
+    0x5948, 0xC4CE,
+    0x5949, 0xB7EE,
+    0x594B, 0xB7DC,
+    0x594E, 0xBFFC,
+    0x594F, 0xD7E0,
+    0x5951, 0xC6F5,
+    0x5954, 0xB1BC,
+    0x5955, 0xDEC8,
+    0x5956, 0xBDB1,
+    0x5957, 0xCCD7,
+    0x5958, 0xDECA,
+    0x595A, 0xDEC9,
+    0x5960, 0xB5EC,
+    0x5962, 0xC9DD,
+    0x5965, 0xB0C2,
+    0x5973, 0xC5AE,
+    0x5974, 0xC5AB,
+    0x5976, 0xC4CC,
+    0x5978, 0xBCE9,
+    0x5979, 0xCBFD,
+    0x597D, 0xBAC3,
+    0x5981, 0xE5F9,
+    0x5982, 0xC8E7,
+    0x5983, 0xE5FA,
+    0x5984, 0xCDFD,
+    0x5986, 0xD7B1,
+    0x5987, 0xB8BE,
+    0x5988, 0xC2E8,
+    0x598A, 0xC8D1,
+    0x598D, 0xE5FB,
+    0x5992, 0xB6CA,
+    0x5993, 0xBCCB,
+    0x5996, 0xD1FD,
+    0x5997, 0xE6A1,
+    0x5999, 0xC3EE,
+    0x599E, 0xE6A4,
+    0x59A3, 0xE5FE,
+    0x59A4, 0xE6A5,
+    0x59A5, 0xCDD7,
+    0x59A8, 0xB7C1,
+    0x59A9, 0xE5FC,
+    0x59AA, 0xE5FD,
+    0x59AB, 0xE6A3,
+    0x59AE, 0xC4DD,
+    0x59AF, 0xE6A8,
+    0x59B2, 0xE6A7,
+    0x59B9, 0xC3C3,
+    0x59BB, 0xC6DE,
+    0x59BE, 0xE6AA,
+    0x59C6, 0xC4B7,
+    0x59CA, 0xE6A2,
+    0x59CB, 0xCABC,
+    0x59D0, 0xBDE3,
+    0x59D1, 0xB9C3,
+    0x59D2, 0xE6A6,
+    0x59D3, 0xD0D5,
+    0x59D4, 0xCEAF,
+    0x59D7, 0xE6A9,
+    0x59D8, 0xE6B0,
+    0x59DA, 0xD2A6,
+    0x59DC, 0xBDAA,
+    0x59DD, 0xE6AD,
+    0x59E3, 0xE6AF,
+    0x59E5, 0xC0D1,
+    0x59E8, 0xD2CC,
+    0x59EC, 0xBCA7,
+    0x59F9, 0xE6B1,
+    0x59FB, 0xD2F6,
+    0x59FF, 0xD7CB,
+    0x5A01, 0xCDFE,
+    0x5A03, 0xCDDE,
+    0x5A04, 0xC2A6,
+    0x5A05, 0xE6AB,
+    0x5A06, 0xE6AC,
+    0x5A07, 0xBDBF,
+    0x5A08, 0xE6AE,
+    0x5A09, 0xE6B3,
+    0x5A0C, 0xE6B2,
+    0x5A11, 0xE6B6,
+    0x5A13, 0xE6B8,
+    0x5A18, 0xC4EF,
+    0x5A1C, 0xC4C8,
+    0x5A1F, 0xBEEA,
+    0x5A20, 0xC9EF,
+    0x5A23, 0xE6B7,
+    0x5A25, 0xB6F0,
+    0x5A29, 0xC3E4,
+    0x5A31, 0xD3E9,
+    0x5A32, 0xE6B4,
+    0x5A34, 0xE6B5,
+    0x5A36, 0xC8A2,
+    0x5A3C, 0xE6BD,
+    0x5A40, 0xE6B9,
+    0x5A46, 0xC6C5,
+    0x5A49, 0xCDF1,
+    0x5A4A, 0xE6BB,
+    0x5A55, 0xE6BC,
+    0x5A5A, 0xBBE9,
+    0x5A62, 0xE6BE,
+    0x5A67, 0xE6BA,
+    0x5A6A, 0xC0B7,
+    0x5A74, 0xD3A4,
+    0x5A75, 0xE6BF,
+    0x5A76, 0xC9F4,
+    0x5A77, 0xE6C3,
+    0x5A7A, 0xE6C4,
+    0x5A7F, 0xD0F6,
+    0x5A92, 0xC3BD,
+    0x5A9A, 0xC3C4,
+    0x5A9B, 0xE6C2,
+    0x5AAA, 0xE6C1,
+    0x5AB2, 0xE6C7,
+    0x5AB3, 0xCFB1,
+    0x5AB5, 0xEBF4,
+    0x5AB8, 0xE6CA,
+    0x5ABE, 0xE6C5,
+    0x5AC1, 0xBCDE,
+    0x5AC2, 0xC9A9,
+    0x5AC9, 0xBCB5,
+    0x5ACC, 0xCFD3,
+    0x5AD2, 0xE6C8,
+    0x5AD4, 0xE6C9,
+    0x5AD6, 0xE6CE,
+    0x5AD8, 0xE6D0,
+    0x5ADC, 0xE6D1,
+    0x5AE0, 0xE6CB,
+    0x5AE1, 0xB5D5,
+    0x5AE3, 0xE6CC,
+    0x5AE6, 0xE6CF,
+    0x5AE9, 0xC4DB,
+    0x5AEB, 0xE6C6,
+    0x5AF1, 0xE6CD,
+    0x5B09, 0xE6D2,
+    0x5B16, 0xE6D4,
+    0x5B17, 0xE6D3,
+    0x5B32, 0xE6D5,
+    0x5B34, 0xD9F8,
+    0x5B37, 0xE6D6,
+    0x5B40, 0xE6D7,
+    0x5B50, 0xD7D3,
+    0x5B51, 0xE6DD,
+    0x5B53, 0xE6DE,
+    0x5B54, 0xBFD7,
+    0x5B55, 0xD4D0,
+    0x5B57, 0xD7D6,
+    0x5B58, 0xB4E6,
+    0x5B59, 0xCBEF,
+    0x5B5A, 0xE6DA,
+    0x5B5B, 0xD8C3,
+    0x5B5C, 0xD7CE,
+    0x5B5D, 0xD0A2,
+    0x5B5F, 0xC3CF,
+    0x5B62, 0xE6DF,
+    0x5B63, 0xBCBE,
+    0x5B64, 0xB9C2,
+    0x5B65, 0xE6DB,
+    0x5B66, 0xD1A7,
+    0x5B69, 0xBAA2,
+    0x5B6A, 0xC2CF,
+    0x5B6C, 0xD8AB,
+    0x5B70, 0xCAEB,
+    0x5B71, 0xE5EE,
+    0x5B73, 0xE6DC,
+    0x5B75, 0xB7F5,
+    0x5B7A, 0xC8E6,
+    0x5B7D, 0xC4F5,
+    0x5B80, 0xE5B2,
+    0x5B81, 0xC4FE,
+    0x5B83, 0xCBFC,
+    0x5B84, 0xE5B3,
+    0x5B85, 0xD5AC,
+    0x5B87, 0xD3EE,
+    0x5B88, 0xCAD8,
+    0x5B89, 0xB0B2,
+    0x5B8B, 0xCBCE,
+    0x5B8C, 0xCDEA,
+    0x5B8F, 0xBAEA,
+    0x5B93, 0xE5B5,
+    0x5B95, 0xE5B4,
+    0x5B97, 0xD7DA,
+    0x5B98, 0xB9D9,
+    0x5B99, 0xD6E6,
+    0x5B9A, 0xB6A8,
+    0x5B9B, 0xCDF0,
+    0x5B9C, 0xD2CB,
+    0x5B9D, 0xB1A6,
+    0x5B9E, 0xCAB5,
+    0x5BA0, 0xB3E8,
+    0x5BA1, 0xC9F3,
+    0x5BA2, 0xBFCD,
+    0x5BA3, 0xD0FB,
+    0x5BA4, 0xCAD2,
+    0x5BA5, 0xE5B6,
+    0x5BA6, 0xBBC2,
+    0x5BAA, 0xCFDC,
+    0x5BAB, 0xB9AC,
+    0x5BB0, 0xD4D7,
+    0x5BB3, 0xBAA6,
+    0x5BB4, 0xD1E7,
+    0x5BB5, 0xCFFC,
+    0x5BB6, 0xBCD2,
+    0x5BB8, 0xE5B7,
+    0x5BB9, 0xC8DD,
+    0x5BBD, 0xBFED,
+    0x5BBE, 0xB1F6,
+    0x5BBF, 0xCBDE,
+    0x5BC2, 0xBCC5,
+    0x5BC4, 0xBCC4,
+    0x5BC5, 0xD2FA,
+    0x5BC6, 0xC3DC,
+    0x5BC7, 0xBFDC,
+    0x5BCC, 0xB8BB,
+    0x5BD0, 0xC3C2,
+    0x5BD2, 0xBAAE,
+    0x5BD3, 0xD4A2,
+    0x5BDD, 0xC7DE,
+    0x5BDE, 0xC4AF,
+    0x5BDF, 0xB2EC,
+    0x5BE1, 0xB9D1,
+    0x5BE4, 0xE5BB,
+    0x5BE5, 0xC1C8,
+    0x5BE8, 0xD5AF,
+    0x5BEE, 0xE5BC,
+    0x5BF0, 0xE5BE,
+    0x5BF8, 0xB4E7,
+    0x5BF9, 0xB6D4,
+    0x5BFA, 0xCBC2,
+    0x5BFB, 0xD1B0,
+    0x5BFC, 0xB5BC,
+    0x5BFF, 0xCAD9,
+    0x5C01, 0xB7E2,
+    0x5C04, 0xC9E4,
+    0x5C06, 0xBDAB,
+    0x5C09, 0xCEBE,
+    0x5C0A, 0xD7F0,
+    0x5C0F, 0xD0A1,
+    0x5C11, 0xC9D9,
+    0x5C14, 0xB6FB,
+    0x5C15, 0xE6D8,
+    0x5C16, 0xBCE2,
+    0x5C18, 0xB3BE,
+    0x5C1A, 0xC9D0,
+    0x5C1C, 0xE6D9,
+    0x5C1D, 0xB3A2,
+    0x5C22, 0xDECC,
+    0x5C24, 0xD3C8,
+    0x5C25, 0xDECD,
+    0x5C27, 0xD2A2,
+    0x5C2C, 0xDECE,
+    0x5C31, 0xBECD,
+    0x5C34, 0xDECF,
+    0x5C38, 0xCAAC,
+    0x5C39, 0xD2FC,
+    0x5C3A, 0xB3DF,
+    0x5C3B, 0xE5EA,
+    0x5C3C, 0xC4E1,
+    0x5C3D, 0xBEA1,
+    0x5C3E, 0xCEB2,
+    0x5C3F, 0xC4F2,
+    0x5C40, 0xBED6,
+    0x5C41, 0xC6A8,
+    0x5C42, 0xB2E3,
+    0x5C45, 0xBED3,
+    0x5C48, 0xC7FC,
+    0x5C49, 0xCCEB,
+    0x5C4A, 0xBDEC,
+    0x5C4B, 0xCEDD,
+    0x5C4E, 0xCABA,
+    0x5C4F, 0xC6C1,
+    0x5C50, 0xE5EC,
+    0x5C51, 0xD0BC,
+    0x5C55, 0xD5B9,
+    0x5C59, 0xE5ED,
+    0x5C5E, 0xCAF4,
+    0x5C60, 0xCDC0,
+    0x5C61, 0xC2C5,
+    0x5C63, 0xE5EF,
+    0x5C65, 0xC2C4,
+    0x5C66, 0xE5F0,
+    0x5C6E, 0xE5F8,
+    0x5C6F, 0xCDCD,
+    0x5C71, 0xC9BD,
+    0x5C79, 0xD2D9,
+    0x5C7A, 0xE1A8,
+    0x5C7F, 0xD3EC,
+    0x5C81, 0xCBEA,
+    0x5C82, 0xC6F1,
+    0x5C88, 0xE1AC,
+    0x5C8C, 0xE1A7,
+    0x5C8D, 0xE1A9,
+    0x5C90, 0xE1AA,
+    0x5C91, 0xE1AF,
+    0x5C94, 0xB2ED,
+    0x5C96, 0xE1AB,
+    0x5C97, 0xB8DA,
+    0x5C98, 0xE1AD,
+    0x5C99, 0xE1AE,
+    0x5C9A, 0xE1B0,
+    0x5C9B, 0xB5BA,
+    0x5C9C, 0xE1B1,
+    0x5CA2, 0xE1B3,
+    0x5CA3, 0xE1B8,
+    0x5CA9, 0xD1D2,
+    0x5CAB, 0xE1B6,
+    0x5CAC, 0xE1B5,
+    0x5CAD, 0xC1EB,
+    0x5CB1, 0xE1B7,
+    0x5CB3, 0xD4C0,
+    0x5CB5, 0xE1B2,
+    0x5CB7, 0xE1BA,
+    0x5CB8, 0xB0B6,
+    0x5CBD, 0xE1B4,
+    0x5CBF, 0xBFF9,
+    0x5CC1, 0xE1B9,
+    0x5CC4, 0xE1BB,
+    0x5CCB, 0xE1BE,
+    0x5CD2, 0xE1BC,
+    0x5CD9, 0xD6C5,
+    0x5CE1, 0xCFBF,
+    0x5CE4, 0xE1BD,
+    0x5CE5, 0xE1BF,
+    0x5CE6, 0xC2CD,
+    0x5CE8, 0xB6EB,
+    0x5CEA, 0xD3F8,
+    0x5CED, 0xC7CD,
+    0x5CF0, 0xB7E5,
+    0x5CFB, 0xBEFE,
+    0x5D02, 0xE1C0,
+    0x5D03, 0xE1C1,
+    0x5D06, 0xE1C7,
+    0x5D07, 0xB3E7,
+    0x5D0E, 0xC6E9,
+    0x5D14, 0xB4DE,
+    0x5D16, 0xD1C2,
+    0x5D1B, 0xE1C8,
+    0x5D1E, 0xE1C6,
+    0x5D24, 0xE1C5,
+    0x5D26, 0xE1C3,
+    0x5D27, 0xE1C2,
+    0x5D29, 0xB1C0,
+    0x5D2D, 0xD5B8,
+    0x5D2E, 0xE1C4,
+    0x5D34, 0xE1CB,
+    0x5D3D, 0xE1CC,
+    0x5D3E, 0xE1CA,
+    0x5D47, 0xEFFA,
+    0x5D4A, 0xE1D3,
+    0x5D4B, 0xE1D2,
+    0x5D4C, 0xC7B6,
+    0x5D58, 0xE1C9,
+    0x5D5B, 0xE1CE,
+    0x5D5D, 0xE1D0,
+    0x5D69, 0xE1D4,
+    0x5D6B, 0xE1D1,
+    0x5D6C, 0xE1CD,
+    0x5D6F, 0xE1CF,
+    0x5D74, 0xE1D5,
+    0x5D82, 0xE1D6,
+    0x5D99, 0xE1D7,
+    0x5D9D, 0xE1D8,
+    0x5DB7, 0xE1DA,
+    0x5DC5, 0xE1DB,
+    0x5DCD, 0xCEA1,
+    0x5DDB, 0xE7DD,
+    0x5DDD, 0xB4A8,
+    0x5DDE, 0xD6DD,
+    0x5DE1, 0xD1B2,
+    0x5DE2, 0xB3B2,
+    0x5DE5, 0xB9A4,
+    0x5DE6, 0xD7F3,
+    0x5DE7, 0xC7C9,
+    0x5DE8, 0xBEDE,
+    0x5DE9, 0xB9AE,
+    0x5DEB, 0xCED7,
+    0x5DEE, 0xB2EE,
+    0x5DEF, 0xDBCF,
+    0x5DF1, 0xBCBA,
+    0x5DF2, 0xD2D1,
+    0x5DF3, 0xCBC8,
+    0x5DF4, 0xB0CD,
+    0x5DF7, 0xCFEF,
+    0x5DFD, 0xD9E3,
+    0x5DFE, 0xBDED,
+    0x5E01, 0xB1D2,
+    0x5E02, 0xCAD0,
+    0x5E03, 0xB2BC,
+    0x5E05, 0xCBA7,
+    0x5E06, 0xB7AB,
+    0x5E08, 0xCAA6,
+    0x5E0C, 0xCFA3,
+    0x5E0F, 0xE0F8,
+    0x5E10, 0xD5CA,
+    0x5E11, 0xE0FB,
+    0x5E14, 0xE0FA,
+    0x5E15, 0xC5C1,
+    0x5E16, 0xCCFB,
+    0x5E18, 0xC1B1,
+    0x5E19, 0xE0F9,
+    0x5E1A, 0xD6E3,
+    0x5E1B, 0xB2AF,
+    0x5E1C, 0xD6C4,
+    0x5E1D, 0xB5DB,
+    0x5E26, 0xB4F8,
+    0x5E27, 0xD6A1,
+    0x5E2D, 0xCFAF,
+    0x5E2E, 0xB0EF,
+    0x5E31, 0xE0FC,
+    0x5E37, 0xE1A1,
+    0x5E38, 0xB3A3,
+    0x5E3B, 0xE0FD,
+    0x5E3C, 0xE0FE,
+    0x5E3D, 0xC3B1,
+    0x5E42, 0xC3DD,
+    0x5E44, 0xE1A2,
+    0x5E45, 0xB7F9,
+    0x5E4C, 0xBBCF,
+    0x5E54, 0xE1A3,
+    0x5E55, 0xC4BB,
+    0x5E5B, 0xE1A4,
+    0x5E5E, 0xE1A5,
+    0x5E61, 0xE1A6,
+    0x5E62, 0xB4B1,
+    0x5E72, 0xB8C9,
+    0x5E73, 0xC6BD,
+    0x5E74, 0xC4EA,
+    0x5E76, 0xB2A2,
+    0x5E78, 0xD0D2,
+    0x5E7A, 0xE7DB,
+    0x5E7B, 0xBBC3,
+    0x5E7C, 0xD3D7,
+    0x5E7D, 0xD3C4,
+    0x5E7F, 0xB9E3,
+    0x5E80, 0xE2CF,
+    0x5E84, 0xD7AF,
+    0x5E86, 0xC7EC,
+    0x5E87, 0xB1D3,
+    0x5E8A, 0xB4B2,
+    0x5E8B, 0xE2D1,
+    0x5E8F, 0xD0F2,
+    0x5E90, 0xC2AE,
+    0x5E91, 0xE2D0,
+    0x5E93, 0xBFE2,
+    0x5E94, 0xD3A6,
+    0x5E95, 0xB5D7,
+    0x5E96, 0xE2D2,
+    0x5E97, 0xB5EA,
+    0x5E99, 0xC3ED,
+    0x5E9A, 0xB8FD,
+    0x5E9C, 0xB8AE,
+    0x5E9E, 0xC5D3,
+    0x5E9F, 0xB7CF,
+    0x5EA0, 0xE2D4,
+    0x5EA5, 0xE2D3,
+    0x5EA6, 0xB6C8,
+    0x5EA7, 0xD7F9,
+    0x5EAD, 0xCDA5,
+    0x5EB3, 0xE2D8,
+    0x5EB5, 0xE2D6,
+    0x5EB6, 0xCAFC,
+    0x5EB7, 0xBFB5,
+    0x5EB8, 0xD3B9,
+    0x5EB9, 0xE2D5,
+    0x5EBE, 0xE2D7,
+    0x5EC9, 0xC1AE,
+    0x5ECA, 0xC0C8,
+    0x5ED1, 0xE2DB,
+    0x5ED2, 0xE2DA,
+    0x5ED3, 0xC0AA,
+    0x5ED6, 0xC1CE,
+    0x5EDB, 0xE2DC,
+    0x5EE8, 0xE2DD,
+    0x5EEA, 0xE2DE,
+    0x5EF4, 0xDBC8,
+    0x5EF6, 0xD1D3,
+    0x5EF7, 0xCDA2,
+    0x5EFA, 0xBDA8,
+    0x5EFE, 0xDEC3,
+    0x5EFF, 0xD8A5,
+    0x5F00, 0xBFAA,
+    0x5F01, 0xDBCD,
+    0x5F02, 0xD2EC,
+    0x5F03, 0xC6FA,
+    0x5F04, 0xC5AA,
+    0x5F08, 0xDEC4,
+    0x5F0A, 0xB1D7,
+    0x5F0B, 0xDFAE,
+    0x5F0F, 0xCABD,
+    0x5F11, 0xDFB1,
+    0x5F13, 0xB9AD,
+    0x5F15, 0xD2FD,
+    0x5F17, 0xB8A5,
+    0x5F18, 0xBAEB,
+    0x5F1B, 0xB3DA,
+    0x5F1F, 0xB5DC,
+    0x5F20, 0xD5C5,
+    0x5F25, 0xC3D6,
+    0x5F26, 0xCFD2,
+    0x5F27, 0xBBA1,
+    0x5F29, 0xE5F3,
+    0x5F2A, 0xE5F2,
+    0x5F2D, 0xE5F4,
+    0x5F2F, 0xCDE4,
+    0x5F31, 0xC8F5,
+    0x5F39, 0xB5AF,
+    0x5F3A, 0xC7BF,
+    0x5F3C, 0xE5F6,
+    0x5F40, 0xECB0,
+    0x5F50, 0xE5E6,
+    0x5F52, 0xB9E9,
+    0x5F53, 0xB5B1,
+    0x5F55, 0xC2BC,
+    0x5F56, 0xE5E8,
+    0x5F57, 0xE5E7,
+    0x5F58, 0xE5E9,
+    0x5F5D, 0xD2CD,
+    0x5F61, 0xE1EA,
+    0x5F62, 0xD0CE,
+    0x5F64, 0xCDAE,
+    0x5F66, 0xD1E5,
+    0x5F69, 0xB2CA,
+    0x5F6A, 0xB1EB,
+    0x5F6C, 0xB1F2,
+    0x5F6D, 0xC5ED,
+    0x5F70, 0xD5C3,
+    0x5F71, 0xD3B0,
+    0x5F73, 0xE1DC,
+    0x5F77, 0xE1DD,
+    0x5F79, 0xD2DB,
+    0x5F7B, 0xB3B9,
+    0x5F7C, 0xB1CB,
+    0x5F80, 0xCDF9,
+    0x5F81, 0xD5F7,
+    0x5F82, 0xE1DE,
+    0x5F84, 0xBEB6,
+    0x5F85, 0xB4FD,
+    0x5F87, 0xE1DF,
+    0x5F88, 0xBADC,
+    0x5F89, 0xE1E0,
+    0x5F8A, 0xBBB2,
+    0x5F8B, 0xC2C9,
+    0x5F8C, 0xE1E1,
+    0x5F90, 0xD0EC,
+    0x5F92, 0xCDBD,
+    0x5F95, 0xE1E2,
+    0x5F97, 0xB5C3,
+    0x5F98, 0xC5C7,
+    0x5F99, 0xE1E3,
+    0x5F9C, 0xE1E4,
+    0x5FA1, 0xD3F9,
+    0x5FA8, 0xE1E5,
+    0x5FAA, 0xD1AD,
+    0x5FAD, 0xE1E6,
+    0x5FAE, 0xCEA2,
+    0x5FB5, 0xE1E7,
+    0x5FB7, 0xB5C2,
+    0x5FBC, 0xE1E8,
+    0x5FBD, 0xBBD5,
+    0x5FC3, 0xD0C4,
+    0x5FC4, 0xE2E0,
+    0x5FC5, 0xB1D8,
+    0x5FC6, 0xD2E4,
+    0x5FC9, 0xE2E1,
+    0x5FCC, 0xBCC9,
+    0x5FCD, 0xC8CC,
+    0x5FCF, 0xE2E3,
+    0x5FD0, 0xECFE,
+    0x5FD1, 0xECFD,
+    0x5FD2, 0xDFAF,
+    0x5FD6, 0xE2E2,
+    0x5FD7, 0xD6BE,
+    0x5FD8, 0xCDFC,
+    0x5FD9, 0xC3A6,
+    0x5FDD, 0xE3C3,
+    0x5FE0, 0xD6D2,
+    0x5FE1, 0xE2E7,
+    0x5FE4, 0xE2E8,
+    0x5FE7, 0xD3C7,
+    0x5FEA, 0xE2EC,
+    0x5FEB, 0xBFEC,
+    0x5FED, 0xE2ED,
+    0x5FEE, 0xE2E5,
+    0x5FF1, 0xB3C0,
+    0x5FF5, 0xC4EE,
+    0x5FF8, 0xE2EE,
+    0x5FFB, 0xD0C3,
+    0x5FFD, 0xBAF6,
+    0x5FFE, 0xE2E9,
+    0x5FFF, 0xB7DE,
+    0x6000, 0xBBB3,
+    0x6001, 0xCCAC,
+    0x6002, 0xCBCB,
+    0x6003, 0xE2E4,
+    0x6004, 0xE2E6,
+    0x6005, 0xE2EA,
+    0x6006, 0xE2EB,
+    0x600A, 0xE2F7,
+    0x600D, 0xE2F4,
+    0x600E, 0xD4F5,
+    0x600F, 0xE2F3,
+    0x6012, 0xC5AD,
+    0x6014, 0xD5FA,
+    0x6015, 0xC5C2,
+    0x6016, 0xB2C0,
+    0x6019, 0xE2EF,
+    0x601B, 0xE2F2,
+    0x601C, 0xC1AF,
+    0x601D, 0xCBBC,
+    0x6020, 0xB5A1,
+    0x6021, 0xE2F9,
+    0x6025, 0xBCB1,
+    0x6026, 0xE2F1,
+    0x6027, 0xD0D4,
+    0x6028, 0xD4B9,
+    0x6029, 0xE2F5,
+    0x602A, 0xB9D6,
+    0x602B, 0xE2F6,
+    0x602F, 0xC7D3,
+    0x6035, 0xE2F0,
+    0x603B, 0xD7DC,
+    0x603C, 0xEDA1,
+    0x603F, 0xE2F8,
+    0x6041, 0xEDA5,
+    0x6042, 0xE2FE,
+    0x6043, 0xCAD1,
+    0x604B, 0xC1B5,
+    0x604D, 0xBBD0,
+    0x6050, 0xBFD6,
+    0x6052, 0xBAE3,
+    0x6055, 0xCBA1,
+    0x6059, 0xEDA6,
+    0x605A, 0xEDA3,
+    0x605D, 0xEDA2,
+    0x6062, 0xBBD6,
+    0x6063, 0xEDA7,
+    0x6064, 0xD0F4,
+    0x6067, 0xEDA4,
+    0x6068, 0xBADE,
+    0x6069, 0xB6F7,
+    0x606A, 0xE3A1,
+    0x606B, 0xB6B2,
+    0x606C, 0xCCF1,
+    0x606D, 0xB9A7,
+    0x606F, 0xCFA2,
+    0x6070, 0xC7A1,
+    0x6073, 0xBFD2,
+    0x6076, 0xB6F1,
+    0x6078, 0xE2FA,
+    0x6079, 0xE2FB,
+    0x607A, 0xE2FD,
+    0x607B, 0xE2FC,
+    0x607C, 0xC4D5,
+    0x607D, 0xE3A2,
+    0x607F, 0xD3C1,
+    0x6083, 0xE3A7,
+    0x6084, 0xC7C4,
+    0x6089, 0xCFA4,
+    0x608C, 0xE3A9,
+    0x608D, 0xBAB7,
+    0x6092, 0xE3A8,
+    0x6094, 0xBBDA,
+    0x6096, 0xE3A3,
+    0x609A, 0xE3A4,
+    0x609B, 0xE3AA,
+    0x609D, 0xE3A6,
+    0x609F, 0xCEF2,
+    0x60A0, 0xD3C6,
+    0x60A3, 0xBBBC,
+    0x60A6, 0xD4C3,
+    0x60A8, 0xC4FA,
+    0x60AB, 0xEDA8,
+    0x60AC, 0xD0FC,
+    0x60AD, 0xE3A5,
+    0x60AF, 0xC3F5,
+    0x60B1, 0xE3AD,
+    0x60B2, 0xB1AF,
+    0x60B4, 0xE3B2,
+    0x60B8, 0xBCC2,
+    0x60BB, 0xE3AC,
+    0x60BC, 0xB5BF,
+    0x60C5, 0xC7E9,
+    0x60C6, 0xE3B0,
+    0x60CA, 0xBEAA,
+    0x60CB, 0xCDEF,
+    0x60D1, 0xBBF3,
+    0x60D5, 0xCCE8,
+    0x60D8, 0xE3AF,
+    0x60DA, 0xE3B1,
+    0x60DC, 0xCFA7,
+    0x60DD, 0xE3AE,
+    0x60DF, 0xCEA9,
+    0x60E0, 0xBBDD,
+    0x60E6, 0xB5EB,
+    0x60E7, 0xBEE5,
+    0x60E8, 0xB2D2,
+    0x60E9, 0xB3CD,
+    0x60EB, 0xB1B9,
+    0x60EC, 0xE3AB,
+    0x60ED, 0xB2D1,
+    0x60EE, 0xB5AC,
+    0x60EF, 0xB9DF,
+    0x60F0, 0xB6E8,
+    0x60F3, 0xCFEB,
+    0x60F4, 0xE3B7,
+    0x60F6, 0xBBCC,
+    0x60F9, 0xC8C7,
+    0x60FA, 0xD0CA,
+    0x6100, 0xE3B8,
+    0x6101, 0xB3EE,
+    0x6106, 0xEDA9,
+    0x6108, 0xD3FA,
+    0x6109, 0xD3E4,
+    0x610D, 0xEDAA,
+    0x610E, 0xE3B9,
+    0x610F, 0xD2E2,
+    0x6115, 0xE3B5,
+    0x611A, 0xD3DE,
+    0x611F, 0xB8D0,
+    0x6120, 0xE3B3,
+    0x6123, 0xE3B6,
+    0x6124, 0xB7DF,
+    0x6126, 0xE3B4,
+    0x6127, 0xC0A2,
+    0x612B, 0xE3BA,
+    0x613F, 0xD4B8,
+    0x6148, 0xB4C8,
+    0x614A, 0xE3BB,
+    0x614C, 0xBBC5,
+    0x614E, 0xC9F7,
+    0x6151, 0xC9E5,
+    0x6155, 0xC4BD,
+    0x615D, 0xEDAB,
+    0x6162, 0xC2FD,
+    0x6167, 0xBBDB,
+    0x6168, 0xBFAE,
+    0x6170, 0xCEBF,
+    0x6175, 0xE3BC,
+    0x6177, 0xBFB6,
+    0x618B, 0xB1EF,
+    0x618E, 0xD4F7,
+    0x6194, 0xE3BE,
+    0x619D, 0xEDAD,
+    0x61A7, 0xE3BF,
+    0x61A8, 0xBAA9,
+    0x61A9, 0xEDAC,
+    0x61AC, 0xE3BD,
+    0x61B7, 0xE3C0,
+    0x61BE, 0xBAB6,
+    0x61C2, 0xB6AE,
+    0x61C8, 0xD0B8,
+    0x61CA, 0xB0C3,
+    0x61CB, 0xEDAE,
+    0x61D1, 0xEDAF,
+    0x61D2, 0xC0C1,
+    0x61D4, 0xE3C1,
+    0x61E6, 0xC5B3,
+    0x61F5, 0xE3C2,
+    0x61FF, 0xDCB2,
+    0x6206, 0xEDB0,
+    0x6208, 0xB8EA,
+    0x620A, 0xCEEC,
+    0x620B, 0xEAA7,
+    0x620C, 0xD0E7,
+    0x620D, 0xCAF9,
+    0x620E, 0xC8D6,
+    0x620F, 0xCFB7,
+    0x6210, 0xB3C9,
+    0x6211, 0xCED2,
+    0x6212, 0xBDE4,
+    0x6215, 0xE3DE,
+    0x6216, 0xBBF2,
+    0x6217, 0xEAA8,
+    0x6218, 0xD5BD,
+    0x621A, 0xC6DD,
+    0x621B, 0xEAA9,
+    0x621F, 0xEAAA,
+    0x6221, 0xEAAC,
+    0x6222, 0xEAAB,
+    0x6224, 0xEAAE,
+    0x6225, 0xEAAD,
+    0x622A, 0xBDD8,
+    0x622C, 0xEAAF,
+    0x622E, 0xC2BE,
+    0x6233, 0xB4C1,
+    0x6234, 0xB4F7,
+    0x6237, 0xBBA7,
+    0x623D, 0xECE6,
+    0x623E, 0xECE5,
+    0x623F, 0xB7BF,
+    0x6240, 0xCBF9,
+    0x6241, 0xB1E2,
+    0x6243, 0xECE7,
+    0x6247, 0xC9C8,
+    0x6248, 0xECE8,
+    0x6249, 0xECE9,
+    0x624B, 0xCAD6,
+    0x624C, 0xDED0,
+    0x624D, 0xB2C5,
+    0x624E, 0xD4FA,
+    0x6251, 0xC6CB,
+    0x6252, 0xB0C7,
+    0x6253, 0xB4F2,
+    0x6254, 0xC8D3,
+    0x6258, 0xCDD0,
+    0x625B, 0xBFB8,
+    0x6263, 0xBFDB,
+    0x6266, 0xC7A4,
+    0x6267, 0xD6B4,
+    0x6269, 0xC0A9,
+    0x626A, 0xDED1,
+    0x626B, 0xC9A8,
+    0x626C, 0xD1EF,
+    0x626D, 0xC5A4,
+    0x626E, 0xB0E7,
+    0x626F, 0xB3B6,
+    0x6270, 0xC8C5,
+    0x6273, 0xB0E2,
+    0x6276, 0xB7F6,
+    0x6279, 0xC5FA,
+    0x627C, 0xB6F3,
+    0x627E, 0xD5D2,
+    0x627F, 0xB3D0,
+    0x6280, 0xBCBC,
+    0x6284, 0xB3AD,
+    0x6289, 0xBEF1,
+    0x628A, 0xB0D1,
+    0x6291, 0xD2D6,
+    0x6292, 0xCAE3,
+    0x6293, 0xD7A5,
+    0x6295, 0xCDB6,
+    0x6296, 0xB6B6,
+    0x6297, 0xBFB9,
+    0x6298, 0xD5DB,
+    0x629A, 0xB8A7,
+    0x629B, 0xC5D7,
+    0x629F, 0xDED2,
+    0x62A0, 0xBFD9,
+    0x62A1, 0xC2D5,
+    0x62A2, 0xC7C0,
+    0x62A4, 0xBBA4,
+    0x62A5, 0xB1A8,
+    0x62A8, 0xC5EA,
+    0x62AB, 0xC5FB,
+    0x62AC, 0xCCA7,
+    0x62B1, 0xB1A7,
+    0x62B5, 0xB5D6,
+    0x62B9, 0xC4A8,
+    0x62BB, 0xDED3,
+    0x62BC, 0xD1BA,
+    0x62BD, 0xB3E9,
+    0x62BF, 0xC3F2,
+    0x62C2, 0xB7F7,
+    0x62C4, 0xD6F4,
+    0x62C5, 0xB5A3,
+    0x62C6, 0xB2F0,
+    0x62C7, 0xC4B4,
+    0x62C8, 0xC4E9,
+    0x62C9, 0xC0AD,
+    0x62CA, 0xDED4,
+    0x62CC, 0xB0E8,
+    0x62CD, 0xC5C4,
+    0x62CE, 0xC1E0,
+    0x62D0, 0xB9D5,
+    0x62D2, 0xBEDC,
+    0x62D3, 0xCDD8,
+    0x62D4, 0xB0CE,
+    0x62D6, 0xCDCF,
+    0x62D7, 0xDED6,
+    0x62D8, 0xBED0,
+    0x62D9, 0xD7BE,
+    0x62DA, 0xDED5,
+    0x62DB, 0xD5D0,
+    0x62DC, 0xB0DD,
+    0x62DF, 0xC4E2,
+    0x62E2, 0xC2A3,
+    0x62E3, 0xBCF0,
+    0x62E5, 0xD3B5,
+    0x62E6, 0xC0B9,
+    0x62E7, 0xC5A1,
+    0x62E8, 0xB2A6,
+    0x62E9, 0xD4F1,
+    0x62EC, 0xC0A8,
+    0x62ED, 0xCAC3,
+    0x62EE, 0xDED7,
+    0x62EF, 0xD5FC,
+    0x62F1, 0xB9B0,
+    0x62F3, 0xC8AD,
+    0x62F4, 0xCBA9,
+    0x62F6, 0xDED9,
+    0x62F7, 0xBFBD,
+    0x62FC, 0xC6B4,
+    0x62FD, 0xD7A7,
+    0x62FE, 0xCAB0,
+    0x62FF, 0xC4C3,
+    0x6301, 0xB3D6,
+    0x6302, 0xB9D2,
+    0x6307, 0xD6B8,
+    0x6308, 0xEAFC,
+    0x6309, 0xB0B4,
+    0x630E, 0xBFE6,
+    0x6311, 0xCCF4,
+    0x6316, 0xCDDA,
+    0x631A, 0xD6BF,
+    0x631B, 0xC2CE,
+    0x631D, 0xCECE,
+    0x631E, 0xCCA2,
+    0x631F, 0xD0AE,
+    0x6320, 0xC4D3,
+    0x6321, 0xB5B2,
+    0x6322, 0xDED8,
+    0x6323, 0xD5F5,
+    0x6324, 0xBCB7,
+    0x6325, 0xBBD3,
+    0x6328, 0xB0A4,
+    0x632A, 0xC5B2,
+    0x632B, 0xB4EC,
+    0x632F, 0xD5F1,
+    0x6332, 0xEAFD,
+    0x6339, 0xDEDA,
+    0x633A, 0xCDA6,
+    0x633D, 0xCDEC,
+    0x6342, 0xCEE6,
+    0x6343, 0xDEDC,
+    0x6345, 0xCDB1,
+    0x6346, 0xC0A6,
+    0x6349, 0xD7BD,
+    0x634B, 0xDEDB,
+    0x634C, 0xB0C6,
+    0x634D, 0xBAB4,
+    0x634E, 0xC9D3,
+    0x634F, 0xC4F3,
+    0x6350, 0xBEE8,
+    0x6355, 0xB2B6,
+    0x635E, 0xC0CC,
+    0x635F, 0xCBF0,
+    0x6361, 0xBCF1,
+    0x6362, 0xBBBB,
+    0x6363, 0xB5B7,
+    0x6367, 0xC5F5,
+    0x6369, 0xDEE6,
+    0x636D, 0xDEE3,
+    0x636E, 0xBEDD,
+    0x6371, 0xDEDF,
+    0x6376, 0xB4B7,
+    0x6377, 0xBDDD,
+    0x637A, 0xDEE0,
+    0x637B, 0xC4ED,
+    0x6380, 0xCFC6,
+    0x6382, 0xB5E0,
+    0x6387, 0xB6DE,
+    0x6388, 0xCADA,
+    0x6389, 0xB5F4,
+    0x638A, 0xDEE5,
+    0x638C, 0xD5C6,
+    0x638E, 0xDEE1,
+    0x638F, 0xCCCD,
+    0x6390, 0xC6FE,
+    0x6392, 0xC5C5,
+    0x6396, 0xD2B4,
+    0x6398, 0xBEF2,
+    0x63A0, 0xC2D3,
+    0x63A2, 0xCCBD,
+    0x63A3, 0xB3B8,
+    0x63A5, 0xBDD3,
+    0x63A7, 0xBFD8,
+    0x63A8, 0xCDC6,
+    0x63A9, 0xD1DA,
+    0x63AA, 0xB4EB,
+    0x63AC, 0xDEE4,
+    0x63AD, 0xDEDD,
+    0x63AE, 0xDEE7,
+    0x63B0, 0xEAFE,
+    0x63B3, 0xC2B0,
+    0x63B4, 0xDEE2,
+    0x63B7, 0xD6C0,
+    0x63B8, 0xB5A7,
+    0x63BA, 0xB2F4,
+    0x63BC, 0xDEE8,
+    0x63BE, 0xDEF2,
+    0x63C4, 0xDEED,
+    0x63C6, 0xDEF1,
+    0x63C9, 0xC8E0,
+    0x63CD, 0xD7E1,
+    0x63CE, 0xDEEF,
+    0x63CF, 0xC3E8,
+    0x63D0, 0xCCE1,
+    0x63D2, 0xB2E5,
+    0x63D6, 0xD2BE,
+    0x63DE, 0xDEEE,
+    0x63E0, 0xDEEB,
+    0x63E1, 0xCED5,
+    0x63E3, 0xB4A7,
+    0x63E9, 0xBFAB,
+    0x63EA, 0xBEBE,
+    0x63ED, 0xBDD2,
+    0x63F2, 0xDEE9,
+    0x63F4, 0xD4AE,
+    0x63F6, 0xDEDE,
+    0x63F8, 0xDEEA,
+    0x63FD, 0xC0BF,
+    0x63FF, 0xDEEC,
+    0x6400, 0xB2F3,
+    0x6401, 0xB8E9,
+    0x6402, 0xC2A7,
+    0x6405, 0xBDC1,
+    0x640B, 0xDEF5,
+    0x640C, 0xDEF8,
+    0x640F, 0xB2AB,
+    0x6410, 0xB4A4,
+    0x6413, 0xB4EA,
+    0x6414, 0xC9A6,
+    0x641B, 0xDEF6,
+    0x641C, 0xCBD1,
+    0x641E, 0xB8E3,
+    0x6420, 0xDEF7,
+    0x6421, 0xDEFA,
+    0x6426, 0xDEF9,
+    0x642A, 0xCCC2,
+    0x642C, 0xB0E1,
+    0x642D, 0xB4EE,
+    0x6434, 0xE5BA,
+    0x643A, 0xD0AF,
+    0x643D, 0xB2EB,
+    0x643F, 0xEBA1,
+    0x6441, 0xDEF4,
+    0x6444, 0xC9E3,
+    0x6445, 0xDEF3,
+    0x6446, 0xB0DA,
+    0x6447, 0xD2A1,
+    0x6448, 0xB1F7,
+    0x644A, 0xCCAF,
+    0x6452, 0xDEF0,
+    0x6454, 0xCBA4,
+    0x6458, 0xD5AA,
+    0x645E, 0xDEFB,
+    0x6467, 0xB4DD,
+    0x6469, 0xC4A6,
+    0x646D, 0xDEFD,
+    0x6478, 0xC3FE,
+    0x6479, 0xC4A1,
+    0x647A, 0xDFA1,
+    0x6482, 0xC1CC,
+    0x6484, 0xDEFC,
+    0x6485, 0xBEEF,
+    0x6487, 0xC6B2,
+    0x6491, 0xB3C5,
+    0x6492, 0xC8F6,
+    0x6495, 0xCBBA,
+    0x6496, 0xDEFE,
+    0x6499, 0xDFA4,
+    0x649E, 0xD7B2,
+    0x64A4, 0xB3B7,
+    0x64A9, 0xC1C3,
+    0x64AC, 0xC7CB,
+    0x64AD, 0xB2A5,
+    0x64AE, 0xB4E9,
+    0x64B0, 0xD7AB,
+    0x64B5, 0xC4EC,
+    0x64B7, 0xDFA2,
+    0x64B8, 0xDFA3,
+    0x64BA, 0xDFA5,
+    0x64BC, 0xBAB3,
+    0x64C0, 0xDFA6,
+    0x64C2, 0xC0DE,
+    0x64C5, 0xC9C3,
+    0x64CD, 0xB2D9,
+    0x64CE, 0xC7E6,
+    0x64D0, 0xDFA7,
+    0x64D2, 0xC7DC,
+    0x64D7, 0xDFA8,
+    0x64D8, 0xEBA2,
+    0x64DE, 0xCBD3,
+    0x64E2, 0xDFAA,
+    0x64E4, 0xDFA9,
+    0x64E6, 0xB2C1,
+    0x6500, 0xC5CA,
+    0x6509, 0xDFAB,
+    0x6512, 0xD4DC,
+    0x6518, 0xC8C1,
+    0x6525, 0xDFAC,
+    0x652B, 0xBEF0,
+    0x652E, 0xDFAD,
+    0x652F, 0xD6A7,
+    0x6534, 0xEAB7,
+    0x6535, 0xEBB6,
+    0x6536, 0xCAD5,
+    0x6538, 0xD8FC,
+    0x6539, 0xB8C4,
+    0x653B, 0xB9A5,
+    0x653E, 0xB7C5,
+    0x653F, 0xD5FE,
+    0x6545, 0xB9CA,
+    0x6548, 0xD0A7,
+    0x6549, 0xF4CD,
+    0x654C, 0xB5D0,
+    0x654F, 0xC3F4,
+    0x6551, 0xBEC8,
+    0x6555, 0xEBB7,
+    0x6556, 0xB0BD,
+    0x6559, 0xBDCC,
+    0x655B, 0xC1B2,
+    0x655D, 0xB1D6,
+    0x655E, 0xB3A8,
+    0x6562, 0xB8D2,
+    0x6563, 0xC9A2,
+    0x6566, 0xB6D8,
+    0x656B, 0xEBB8,
+    0x656C, 0xBEB4,
+    0x6570, 0xCAFD,
+    0x6572, 0xC7C3,
+    0x6574, 0xD5FB,
+    0x6577, 0xB7F3,
+    0x6587, 0xCEC4,
+    0x658B, 0xD5AB,
+    0x658C, 0xB1F3,
+    0x6590, 0xECB3,
+    0x6591, 0xB0DF,
+    0x6593, 0xECB5,
+    0x6597, 0xB6B7,
+    0x6599, 0xC1CF,
+    0x659B, 0xF5FA,
+    0x659C, 0xD0B1,
+    0x659F, 0xD5E5,
+    0x65A1, 0xCED3,
+    0x65A4, 0xBDEF,
+    0x65A5, 0xB3E2,
+    0x65A7, 0xB8AB,
+    0x65A9, 0xD5B6,
+    0x65AB, 0xEDBD,
+    0x65AD, 0xB6CF,
+    0x65AF, 0xCBB9,
+    0x65B0, 0xD0C2,
+    0x65B9, 0xB7BD,
+    0x65BC, 0xECB6,
+    0x65BD, 0xCAA9,
+    0x65C1, 0xC5D4,
+    0x65C3, 0xECB9,
+    0x65C4, 0xECB8,
+    0x65C5, 0xC2C3,
+    0x65C6, 0xECB7,
+    0x65CB, 0xD0FD,
+    0x65CC, 0xECBA,
+    0x65CE, 0xECBB,
+    0x65CF, 0xD7E5,
+    0x65D2, 0xECBC,
+    0x65D6, 0xECBD,
+    0x65D7, 0xC6EC,
+    0x65E0, 0xCEDE,
+    0x65E2, 0xBCC8,
+    0x65E5, 0xC8D5,
+    0x65E6, 0xB5A9,
+    0x65E7, 0xBEC9,
+    0x65E8, 0xD6BC,
+    0x65E9, 0xD4E7,
+    0x65EC, 0xD1AE,
+    0x65ED, 0xD0F1,
+    0x65EE, 0xEAB8,
+    0x65EF, 0xEAB9,
+    0x65F0, 0xEABA,
+    0x65F1, 0xBAB5,
+    0x65F6, 0xCAB1,
+    0x65F7, 0xBFF5,
+    0x65FA, 0xCDFA,
+    0x6600, 0xEAC0,
+    0x6602, 0xB0BA,
+    0x6603, 0xEABE,
+    0x6606, 0xC0A5,
+    0x660A, 0xEABB,
+    0x660C, 0xB2FD,
+    0x660E, 0xC3F7,
+    0x660F, 0xBBE8,
+    0x6613, 0xD2D7,
+    0x6614, 0xCEF4,
+    0x6615, 0xEABF,
+    0x6619, 0xEABC,
+    0x661D, 0xEAC3,
+    0x661F, 0xD0C7,
+    0x6620, 0xD3B3,
+    0x6625, 0xB4BA,
+    0x6627, 0xC3C1,
+    0x6628, 0xD7F2,
+    0x662D, 0xD5D1,
+    0x662F, 0xCAC7,
+    0x6631, 0xEAC5,
+    0x6634, 0xEAC4,
+    0x6635, 0xEAC7,
+    0x6636, 0xEAC6,
+    0x663C, 0xD6E7,
+    0x663E, 0xCFD4,
+    0x6641, 0xEACB,
+    0x6643, 0xBBCE,
+    0x664B, 0xBDFA,
+    0x664C, 0xC9CE,
+    0x664F, 0xEACC,
+    0x6652, 0xC9B9,
+    0x6653, 0xCFFE,
+    0x6654, 0xEACA,
+    0x6655, 0xD4CE,
+    0x6656, 0xEACD,
+    0x6657, 0xEACF,
+    0x665A, 0xCDED,
+    0x665F, 0xEAC9,
+    0x6661, 0xEACE,
+    0x6664, 0xCEEE,
+    0x6666, 0xBBDE,
+    0x6668, 0xB3BF,
+    0x666E, 0xC6D5,
+    0x666F, 0xBEB0,
+    0x6670, 0xCEFA,
+    0x6674, 0xC7E7,
+    0x6676, 0xBEA7,
+    0x6677, 0xEAD0,
+    0x667A, 0xD6C7,
+    0x667E, 0xC1C0,
+    0x6682, 0xD4DD,
+    0x6684, 0xEAD1,
+    0x6687, 0xCFBE,
+    0x668C, 0xEAD2,
+    0x6691, 0xCAEE,
+    0x6696, 0xC5AF,
+    0x6697, 0xB0B5,
+    0x669D, 0xEAD4,
+    0x66A7, 0xEAD3,
+    0x66A8, 0xF4DF,
+    0x66AE, 0xC4BA,
+    0x66B4, 0xB1A9,
+    0x66B9, 0xE5DF,
+    0x66BE, 0xEAD5,
+    0x66D9, 0xCAEF,
+    0x66DB, 0xEAD6,
+    0x66DC, 0xEAD7,
+    0x66DD, 0xC6D8,
+    0x66E6, 0xEAD8,
+    0x66E9, 0xEAD9,
+    0x66F0, 0xD4BB,
+    0x66F2, 0xC7FA,
+    0x66F3, 0xD2B7,
+    0x66F4, 0xB8FC,
+    0x66F7, 0xEAC2,
+    0x66F9, 0xB2DC,
+    0x66FC, 0xC2FC,
+    0x66FE, 0xD4F8,
+    0x66FF, 0xCCE6,
+    0x6700, 0xD7EE,
+    0x6708, 0xD4C2,
+    0x6709, 0xD3D0,
+    0x670A, 0xEBC3,
+    0x670B, 0xC5F3,
+    0x670D, 0xB7FE,
+    0x6710, 0xEBD4,
+    0x6714, 0xCBB7,
+    0x6715, 0xEBDE,
+    0x6717, 0xC0CA,
+    0x671B, 0xCDFB,
+    0x671D, 0xB3AF,
+    0x671F, 0xC6DA,
+    0x6726, 0xEBFC,
+    0x6728, 0xC4BE,
+    0x672A, 0xCEB4,
+    0x672B, 0xC4A9,
+    0x672C, 0xB1BE,
+    0x672D, 0xD4FD,
+    0x672F, 0xCAF5,
+    0x6731, 0xD6EC,
+    0x6734, 0xC6D3,
+    0x6735, 0xB6E4,
+    0x673A, 0xBBFA,
+    0x673D, 0xD0E0,
+    0x6740, 0xC9B1,
+    0x6742, 0xD4D3,
+    0x6743, 0xC8A8,
+    0x6746, 0xB8CB,
+    0x6748, 0xE8BE,
+    0x6749, 0xC9BC,
+    0x674C, 0xE8BB,
+    0x674E, 0xC0EE,
+    0x674F, 0xD0D3,
+    0x6750, 0xB2C4,
+    0x6751, 0xB4E5,
+    0x6753, 0xE8BC,
+    0x6756, 0xD5C8,
+    0x675C, 0xB6C5,
+    0x675E, 0xE8BD,
+    0x675F, 0xCAF8,
+    0x6760, 0xB8DC,
+    0x6761, 0xCCF5,
+    0x6765, 0xC0B4,
+    0x6768, 0xD1EE,
+    0x6769, 0xE8BF,
+    0x676A, 0xE8C2,
+    0x676D, 0xBABC,
+    0x676F, 0xB1AD,
+    0x6770, 0xBDDC,
+    0x6772, 0xEABD,
+    0x6773, 0xE8C3,
+    0x6775, 0xE8C6,
+    0x6777, 0xE8CB,
+    0x677C, 0xE8CC,
+    0x677E, 0xCBC9,
+    0x677F, 0xB0E5,
+    0x6781, 0xBCAB,
+    0x6784, 0xB9B9,
+    0x6787, 0xE8C1,
+    0x6789, 0xCDF7,
+    0x678B, 0xE8CA,
+    0x6790, 0xCEF6,
+    0x6795, 0xD5ED,
+    0x6797, 0xC1D6,
+    0x6798, 0xE8C4,
+    0x679A, 0xC3B6,
+    0x679C, 0xB9FB,
+    0x679D, 0xD6A6,
+    0x679E, 0xE8C8,
+    0x67A2, 0xCAE0,
+    0x67A3, 0xD4E6,
+    0x67A5, 0xE8C0,
+    0x67A7, 0xE8C5,
+    0x67A8, 0xE8C7,
+    0x67AA, 0xC7B9,
+    0x67AB, 0xB7E3,
+    0x67AD, 0xE8C9,
+    0x67AF, 0xBFDD,
+    0x67B0, 0xE8D2,
+    0x67B3, 0xE8D7,
+    0x67B5, 0xE8D5,
+    0x67B6, 0xBCDC,
+    0x67B7, 0xBCCF,
+    0x67B8, 0xE8DB,
+    0x67C1, 0xE8DE,
+    0x67C3, 0xE8DA,
+    0x67C4, 0xB1FA,
+    0x67CF, 0xB0D8,
+    0x67D0, 0xC4B3,
+    0x67D1, 0xB8CC,
+    0x67D2, 0xC6E2,
+    0x67D3, 0xC8BE,
+    0x67D4, 0xC8E1,
+    0x67D8, 0xE8CF,
+    0x67D9, 0xE8D4,
+    0x67DA, 0xE8D6,
+    0x67DC, 0xB9F1,
+    0x67DD, 0xE8D8,
+    0x67DE, 0xD7F5,
+    0x67E0, 0xC4FB,
+    0x67E2, 0xE8DC,
+    0x67E5, 0xB2E9,
+    0x67E9, 0xE8D1,
+    0x67EC, 0xBCED,
+    0x67EF, 0xBFC2,
+    0x67F0, 0xE8CD,
+    0x67F1, 0xD6F9,
+    0x67F3, 0xC1F8,
+    0x67F4, 0xB2F1,
+    0x67FD, 0xE8DF,
+    0x67FF, 0xCAC1,
+    0x6800, 0xE8D9,
+    0x6805, 0xD5A4,
+    0x6807, 0xB1EA,
+    0x6808, 0xD5BB,
+    0x6809, 0xE8CE,
+    0x680A, 0xE8D0,
+    0x680B, 0xB6B0,
+    0x680C, 0xE8D3,
+    0x680E, 0xE8DD,
+    0x680F, 0xC0B8,
+    0x6811, 0xCAF7,
+    0x6813, 0xCBA8,
+    0x6816, 0xC6DC,
+    0x6817, 0xC0F5,
+    0x681D, 0xE8E9,
+    0x6821, 0xD0A3,
+    0x6829, 0xE8F2,
+    0x682A, 0xD6EA,
+    0x6832, 0xE8E0,
+    0x6833, 0xE8E1,
+    0x6837, 0xD1F9,
+    0x6838, 0xBACB,
+    0x6839, 0xB8F9,
+    0x683C, 0xB8F1,
+    0x683D, 0xD4D4,
+    0x683E, 0xE8EF,
+    0x6840, 0xE8EE,
+    0x6841, 0xE8EC,
+    0x6842, 0xB9F0,
+    0x6843, 0xCCD2,
+    0x6844, 0xE8E6,
+    0x6845, 0xCEA6,
+    0x6846, 0xBFF2,
+    0x6848, 0xB0B8,
+    0x6849, 0xE8F1,
+    0x684A, 0xE8F0,
+    0x684C, 0xD7C0,
+    0x684E, 0xE8E4,
+    0x6850, 0xCDA9,
+    0x6851, 0xC9A3,
+    0x6853, 0xBBB8,
+    0x6854, 0xBDDB,
+    0x6855, 0xE8EA,
+    0x6860, 0xE8E2,
+    0x6861, 0xE8E3,
+    0x6862, 0xE8E5,
+    0x6863, 0xB5B5,
+    0x6864, 0xE8E7,
+    0x6865, 0xC7C5,
+    0x6866, 0xE8EB,
+    0x6867, 0xE8ED,
+    0x6868, 0xBDB0,
+    0x6869, 0xD7AE,
+    0x686B, 0xE8F8,
+    0x6874, 0xE8F5,
+    0x6876, 0xCDB0,
+    0x6877, 0xE8F6,
+    0x6881, 0xC1BA,
+    0x6883, 0xE8E8,
+    0x6885, 0xC3B7,
+    0x6886, 0xB0F0,
+    0x688F, 0xE8F4,
+    0x6893, 0xE8F7,
+    0x6897, 0xB9A3,
+    0x68A2, 0xC9D2,
+    0x68A6, 0xC3CE,
+    0x68A7, 0xCEE0,
+    0x68A8, 0xC0E6,
+    0x68AD, 0xCBF3,
+    0x68AF, 0xCCDD,
+    0x68B0, 0xD0B5,
+    0x68B3, 0xCAE1,
+    0x68B5, 0xE8F3,
+    0x68C0, 0xBCEC,
+    0x68C2, 0xE8F9,
+    0x68C9, 0xC3DE,
+    0x68CB, 0xC6E5,
+    0x68CD, 0xB9F7,
+    0x68D2, 0xB0F4,
+    0x68D5, 0xD7D8,
+    0x68D8, 0xBCAC,
+    0x68DA, 0xC5EF,
+    0x68E0, 0xCCC4,
+    0x68E3, 0xE9A6,
+    0x68EE, 0xC9AD,
+    0x68F0, 0xE9A2,
+    0x68F1, 0xC0E2,
+    0x68F5, 0xBFC3,
+    0x68F9, 0xE8FE,
+    0x68FA, 0xB9D7,
+    0x68FC, 0xE8FB,
+    0x6901, 0xE9A4,
+    0x6905, 0xD2CE,
+    0x690B, 0xE9A3,
+    0x690D, 0xD6B2,
+    0x690E, 0xD7B5,
+    0x6910, 0xE9A7,
+    0x6912, 0xBDB7,
+    0x691F, 0xE8FC,
+    0x6920, 0xE8FD,
+    0x6924, 0xE9A1,
+    0x692D, 0xCDD6,
+    0x6930, 0xD2AC,
+    0x6934, 0xE9B2,
+    0x6939, 0xE9A9,
+    0x693D, 0xB4AA,
+    0x693F, 0xB4BB,
+    0x6942, 0xE9AB,
+    0x6954, 0xD0A8,
+    0x6957, 0xE9A5,
+    0x695A, 0xB3FE,
+    0x695D, 0xE9AC,
+    0x695E, 0xC0E3,
+    0x6960, 0xE9AA,
+    0x6963, 0xE9B9,
+    0x6966, 0xE9B8,
+    0x696B, 0xE9AE,
+    0x696E, 0xE8FA,
+    0x6971, 0xE9A8,
+    0x6977, 0xBFAC,
+    0x6978, 0xE9B1,
+    0x6979, 0xE9BA,
+    0x697C, 0xC2A5,
+    0x6980, 0xE9AF,
+    0x6982, 0xB8C5,
+    0x6984, 0xE9AD,
+    0x6986, 0xD3DC,
+    0x6987, 0xE9B4,
+    0x6988, 0xE9B5,
+    0x6989, 0xE9B7,
+    0x698D, 0xE9C7,
+    0x6994, 0xC0C6,
+    0x6995, 0xE9C5,
+    0x6998, 0xE9B0,
+    0x699B, 0xE9BB,
+    0x699C, 0xB0F1,
+    0x69A7, 0xE9BC,
+    0x69A8, 0xD5A5,
+    0x69AB, 0xE9BE,
+    0x69AD, 0xE9BF,
+    0x69B1, 0xE9C1,
+    0x69B4, 0xC1F1,
+    0x69B7, 0xC8B6,
+    0x69BB, 0xE9BD,
+    0x69C1, 0xE9C2,
+    0x69CA, 0xE9C3,
+    0x69CC, 0xE9B3,
+    0x69CE, 0xE9B6,
+    0x69D0, 0xBBB1,
+    0x69D4, 0xE9C0,
+    0x69DB, 0xBCF7,
+    0x69DF, 0xE9C4,
+    0x69E0, 0xE9C6,
+    0x69ED, 0xE9CA,
+    0x69F2, 0xE9CE,
+    0x69FD, 0xB2DB,
+    0x69FF, 0xE9C8,
+    0x6A0A, 0xB7AE,
+    0x6A17, 0xE9CB,
+    0x6A18, 0xE9CC,
+    0x6A1F, 0xD5C1,
+    0x6A21, 0xC4A3,
+    0x6A28, 0xE9D8,
+    0x6A2A, 0xBAE1,
+    0x6A2F, 0xE9C9,
+    0x6A31, 0xD3A3,
+    0x6A35, 0xE9D4,
+    0x6A3D, 0xE9D7,
+    0x6A3E, 0xE9D0,
+    0x6A44, 0xE9CF,
+    0x6A47, 0xC7C1,
+    0x6A50, 0xE9D2,
+    0x6A58, 0xE9D9,
+    0x6A59, 0xB3C8,
+    0x6A5B, 0xE9D3,
+    0x6A61, 0xCFF0,
+    0x6A65, 0xE9CD,
+    0x6A71, 0xB3F7,
+    0x6A79, 0xE9D6,
+    0x6A7C, 0xE9DA,
+    0x6A80, 0xCCB4,
+    0x6A84, 0xCFAD,
+    0x6A8E, 0xE9D5,
+    0x6A90, 0xE9DC,
+    0x6A91, 0xE9DB,
+    0x6A97, 0xE9DE,
+    0x6AA0, 0xE9D1,
+    0x6AA9, 0xE9DD,
+    0x6AAB, 0xE9DF,
+    0x6AAC, 0xC3CA,
+    0x6B20, 0xC7B7,
+    0x6B21, 0xB4CE,
+    0x6B22, 0xBBB6,
+    0x6B23, 0xD0C0,
+    0x6B24, 0xECA3,
+    0x6B27, 0xC5B7,
+    0x6B32, 0xD3FB,
+    0x6B37, 0xECA4,
+    0x6B39, 0xECA5,
+    0x6B3A, 0xC6DB,
+    0x6B3E, 0xBFEE,
+    0x6B43, 0xECA6,
+    0x6B46, 0xECA7,
+    0x6B47, 0xD0AA,
+    0x6B49, 0xC7B8,
+    0x6B4C, 0xB8E8,
+    0x6B59, 0xECA8,
+    0x6B62, 0xD6B9,
+    0x6B63, 0xD5FD,
+    0x6B64, 0xB4CB,
+    0x6B65, 0xB2BD,
+    0x6B66, 0xCEE4,
+    0x6B67, 0xC6E7,
+    0x6B6A, 0xCDE1,
+    0x6B79, 0xB4F5,
+    0x6B7B, 0xCBC0,
+    0x6B7C, 0xBCDF,
+    0x6B81, 0xE9E2,
+    0x6B82, 0xE9E3,
+    0x6B83, 0xD1EA,
+    0x6B84, 0xE9E5,
+    0x6B86, 0xB4F9,
+    0x6B87, 0xE9E4,
+    0x6B89, 0xD1B3,
+    0x6B8A, 0xCAE2,
+    0x6B8B, 0xB2D0,
+    0x6B8D, 0xE9E8,
+    0x6B92, 0xE9E6,
+    0x6B93, 0xE9E7,
+    0x6B96, 0xD6B3,
+    0x6B9A, 0xE9E9,
+    0x6B9B, 0xE9EA,
+    0x6BA1, 0xE9EB,
+    0x6BAA, 0xE9EC,
+    0x6BB3, 0xECAF,
+    0x6BB4, 0xC5B9,
+    0x6BB5, 0xB6CE,
+    0x6BB7, 0xD2F3,
+    0x6BBF, 0xB5EE,
+    0x6BC1, 0xBBD9,
+    0x6BC2, 0xECB1,
+    0x6BC5, 0xD2E3,
+    0x6BCB, 0xCEE3,
+    0x6BCD, 0xC4B8,
+    0x6BCF, 0xC3BF,
+    0x6BD2, 0xB6BE,
+    0x6BD3, 0xD8B9,
+    0x6BD4, 0xB1C8,
+    0x6BD5, 0xB1CF,
+    0x6BD6, 0xB1D1,
+    0x6BD7, 0xC5FE,
+    0x6BD9, 0xB1D0,
+    0x6BDB, 0xC3AB,
+    0x6BE1, 0xD5B1,
+    0x6BEA, 0xEBA4,
+    0x6BEB, 0xBAC1,
+    0x6BEF, 0xCCBA,
+    0x6BF3, 0xEBA5,
+    0x6BF5, 0xEBA7,
+    0x6BF9, 0xEBA8,
+    0x6BFD, 0xEBA6,
+    0x6C05, 0xEBA9,
+    0x6C06, 0xEBAB,
+    0x6C07, 0xEBAA,
+    0x6C0D, 0xEBAC,
+    0x6C0F, 0xCACF,
+    0x6C10, 0xD8B5,
+    0x6C11, 0xC3F1,
+    0x6C13, 0xC3A5,
+    0x6C14, 0xC6F8,
+    0x6C15, 0xEBAD,
+    0x6C16, 0xC4CA,
+    0x6C18, 0xEBAE,
+    0x6C19, 0xEBAF,
+    0x6C1A, 0xEBB0,
+    0x6C1B, 0xB7D5,
+    0x6C1F, 0xB7FA,
+    0x6C21, 0xEBB1,
+    0x6C22, 0xC7E2,
+    0x6C24, 0xEBB3,
+    0x6C26, 0xBAA4,
+    0x6C27, 0xD1F5,
+    0x6C28, 0xB0B1,
+    0x6C29, 0xEBB2,
+    0x6C2A, 0xEBB4,
+    0x6C2E, 0xB5AA,
+    0x6C2F, 0xC2C8,
+    0x6C30, 0xC7E8,
+    0x6C32, 0xEBB5,
+    0x6C34, 0xCBAE,
+    0x6C35, 0xE3DF,
+    0x6C38, 0xD3C0,
+    0x6C3D, 0xD9DB,
+    0x6C40, 0xCDA1,
+    0x6C41, 0xD6AD,
+    0x6C42, 0xC7F3,
+    0x6C46, 0xD9E0,
+    0x6C47, 0xBBE3,
+    0x6C49, 0xBABA,
+    0x6C4A, 0xE3E2,
+    0x6C50, 0xCFAB,
+    0x6C54, 0xE3E0,
+    0x6C55, 0xC9C7,
+    0x6C57, 0xBAB9,
+    0x6C5B, 0xD1B4,
+    0x6C5C, 0xE3E1,
+    0x6C5D, 0xC8EA,
+    0x6C5E, 0xB9AF,
+    0x6C5F, 0xBDAD,
+    0x6C60, 0xB3D8,
+    0x6C61, 0xCEDB,
+    0x6C64, 0xCCC0,
+    0x6C68, 0xE3E8,
+    0x6C69, 0xE3E9,
+    0x6C6A, 0xCDF4,
+    0x6C70, 0xCCAD,
+    0x6C72, 0xBCB3,
+    0x6C74, 0xE3EA,
+    0x6C76, 0xE3EB,
+    0x6C79, 0xD0DA,
+    0x6C7D, 0xC6FB,
+    0x6C7E, 0xB7DA,
+    0x6C81, 0xC7DF,
+    0x6C82, 0xD2CA,
+    0x6C83, 0xCED6,
+    0x6C85, 0xE3E4,
+    0x6C86, 0xE3EC,
+    0x6C88, 0xC9F2,
+    0x6C89, 0xB3C1,
+    0x6C8C, 0xE3E7,
+    0x6C8F, 0xC6E3,
+    0x6C90, 0xE3E5,
+    0x6C93, 0xEDB3,
+    0x6C94, 0xE3E6,
+    0x6C99, 0xC9B3,
+    0x6C9B, 0xC5E6,
+    0x6C9F, 0xB9B5,
+    0x6CA1, 0xC3BB,
+    0x6CA3, 0xE3E3,
+    0x6CA4, 0xC5BD,
+    0x6CA5, 0xC1A4,
+    0x6CA6, 0xC2D9,
+    0x6CA7, 0xB2D7,
+    0x6CA9, 0xE3ED,
+    0x6CAA, 0xBBA6,
+    0x6CAB, 0xC4AD,
+    0x6CAD, 0xE3F0,
+    0x6CAE, 0xBEDA,
+    0x6CB1, 0xE3FB,
+    0x6CB2, 0xE3F5,
+    0x6CB3, 0xBAD3,
+    0x6CB8, 0xB7D0,
+    0x6CB9, 0xD3CD,
+    0x6CBB, 0xD6CE,
+    0x6CBC, 0xD5D3,
+    0x6CBD, 0xB9C1,
+    0x6CBE, 0xD5B4,
+    0x6CBF, 0xD1D8,
+    0x6CC4, 0xD0B9,
+    0x6CC5, 0xC7F6,
+    0x6CC9, 0xC8AA,
+    0x6CCA, 0xB2B4,
+    0x6CCC, 0xC3DA,
+    0x6CD0, 0xE3EE,
+    0x6CD3, 0xE3FC,
+    0x6CD4, 0xE3EF,
+    0x6CD5, 0xB7A8,
+    0x6CD6, 0xE3F7,
+    0x6CD7, 0xE3F4,
+    0x6CDB, 0xB7BA,
+    0x6CDE, 0xC5A2,
+    0x6CE0, 0xE3F6,
+    0x6CE1, 0xC5DD,
+    0x6CE2, 0xB2A8,
+    0x6CE3, 0xC6FC,
+    0x6CE5, 0xC4E0,
+    0x6CE8, 0xD7A2,
+    0x6CEA, 0xC0E1,
+    0x6CEB, 0xE3F9,
+    0x6CEE, 0xE3FA,
+    0x6CEF, 0xE3FD,
+    0x6CF0, 0xCCA9,
+    0x6CF1, 0xE3F3,
+    0x6CF3, 0xD3BE,
+    0x6CF5, 0xB1C3,
+    0x6CF6, 0xEDB4,
+    0x6CF7, 0xE3F1,
+    0x6CF8, 0xE3F2,
+    0x6CFA, 0xE3F8,
+    0x6CFB, 0xD0BA,
+    0x6CFC, 0xC6C3,
+    0x6CFD, 0xD4F3,
+    0x6CFE, 0xE3FE,
+    0x6D01, 0xBDE0,
+    0x6D04, 0xE4A7,
+    0x6D07, 0xE4A6,
+    0x6D0B, 0xD1F3,
+    0x6D0C, 0xE4A3,
+    0x6D0E, 0xE4A9,
+    0x6D12, 0xC8F7,
+    0x6D17, 0xCFB4,
+    0x6D19, 0xE4A8,
+    0x6D1A, 0xE4AE,
+    0x6D1B, 0xC2E5,
+    0x6D1E, 0xB6B4,
+    0x6D25, 0xBDF2,
+    0x6D27, 0xE4A2,
+    0x6D2A, 0xBAE9,
+    0x6D2B, 0xE4AA,
+    0x6D2E, 0xE4AC,
+    0x6D31, 0xB6FD,
+    0x6D32, 0xD6DE,
+    0x6D33, 0xE4B2,
+    0x6D35, 0xE4AD,
+    0x6D39, 0xE4A1,
+    0x6D3B, 0xBBEE,
+    0x6D3C, 0xCDDD,
+    0x6D3D, 0xC7A2,
+    0x6D3E, 0xC5C9,
+    0x6D41, 0xC1F7,
+    0x6D43, 0xE4A4,
+    0x6D45, 0xC7B3,
+    0x6D46, 0xBDAC,
+    0x6D47, 0xBDBD,
+    0x6D48, 0xE4A5,
+    0x6D4A, 0xD7C7,
+    0x6D4B, 0xB2E2,
+    0x6D4D, 0xE4AB,
+    0x6D4E, 0xBCC3,
+    0x6D4F, 0xE4AF,
+    0x6D51, 0xBBEB,
+    0x6D52, 0xE4B0,
+    0x6D53, 0xC5A8,
+    0x6D54, 0xE4B1,
+    0x6D59, 0xD5E3,
+    0x6D5A, 0xBFA3,
+    0x6D5C, 0xE4BA,
+    0x6D5E, 0xE4B7,
+    0x6D60, 0xE4BB,
+    0x6D63, 0xE4BD,
+    0x6D66, 0xC6D6,
+    0x6D69, 0xBAC6,
+    0x6D6A, 0xC0CB,
+    0x6D6E, 0xB8A1,
+    0x6D6F, 0xE4B4,
+    0x6D74, 0xD4A1,
+    0x6D77, 0xBAA3,
+    0x6D78, 0xBDFE,
+    0x6D7C, 0xE4BC,
+    0x6D82, 0xCDBF,
+    0x6D85, 0xC4F9,
+    0x6D88, 0xCFFB,
+    0x6D89, 0xC9E6,
+    0x6D8C, 0xD3BF,
+    0x6D8E, 0xCFD1,
+    0x6D91, 0xE4B3,
+    0x6D93, 0xE4B8,
+    0x6D94, 0xE4B9,
+    0x6D95, 0xCCE9,
+    0x6D9B, 0xCCCE,
+    0x6D9D, 0xC0D4,
+    0x6D9E, 0xE4B5,
+    0x6D9F, 0xC1B0,
+    0x6DA0, 0xE4B6,
+    0x6DA1, 0xCED0,
+    0x6DA3, 0xBBC1,
+    0x6DA4, 0xB5D3,
+    0x6DA6, 0xC8F3,
+    0x6DA7, 0xBDA7,
+    0x6DA8, 0xD5C7,
+    0x6DA9, 0xC9AC,
+    0x6DAA, 0xB8A2,
+    0x6DAB, 0xE4CA,
+    0x6DAE, 0xE4CC,
+    0x6DAF, 0xD1C4,
+    0x6DB2, 0xD2BA,
+    0x6DB5, 0xBAAD,
+    0x6DB8, 0xBAD4,
+    0x6DBF, 0xE4C3,
+    0x6DC0, 0xB5ED,
+    0x6DC4, 0xD7CD,
+    0x6DC5, 0xE4C0,
+    0x6DC6, 0xCFFD,
+    0x6DC7, 0xE4BF,
+    0x6DCB, 0xC1DC,
+    0x6DCC, 0xCCCA,
+    0x6DD1, 0xCAE7,
+    0x6DD6, 0xC4D7,
+    0x6DD8, 0xCCD4,
+    0x6DD9, 0xE4C8,
+    0x6DDD, 0xE4C7,
+    0x6DDE, 0xE4C1,
+    0x6DE0, 0xE4C4,
+    0x6DE1, 0xB5AD,
+    0x6DE4, 0xD3D9,
+    0x6DE6, 0xE4C6,
+    0x6DEB, 0xD2F9,
+    0x6DEC, 0xB4E3,
+    0x6DEE, 0xBBB4,
+    0x6DF1, 0xC9EE,
+    0x6DF3, 0xB4BE,
+    0x6DF7, 0xBBEC,
+    0x6DF9, 0xD1CD,
+    0x6DFB, 0xCCED,
+    0x6DFC, 0xEDB5,
+    0x6E05, 0xC7E5,
+    0x6E0A, 0xD4A8,
+    0x6E0C, 0xE4CB,
+    0x6E0D, 0xD7D5,
+    0x6E0E, 0xE4C2,
+    0x6E10, 0xBDA5,
+    0x6E11, 0xE4C5,
+    0x6E14, 0xD3E6,
+    0x6E16, 0xE4C9,
+    0x6E17, 0xC9F8,
+    0x6E1A, 0xE4BE,
+    0x6E1D, 0xD3E5,
+    0x6E20, 0xC7FE,
+    0x6E21, 0xB6C9,
+    0x6E23, 0xD4FC,
+    0x6E24, 0xB2B3,
+    0x6E25, 0xE4D7,
+    0x6E29, 0xCEC2,
+    0x6E2B, 0xE4CD,
+    0x6E2D, 0xCEBC,
+    0x6E2F, 0xB8DB,
+    0x6E32, 0xE4D6,
+    0x6E34, 0xBFCA,
+    0x6E38, 0xD3CE,
+    0x6E3A, 0xC3EC,
+    0x6E43, 0xC5C8,
+    0x6E44, 0xE4D8,
+    0x6E4D, 0xCDC4,
+    0x6E4E, 0xE4CF,
+    0x6E53, 0xE4D4,
+    0x6E54, 0xE4D5,
+    0x6E56, 0xBAFE,
+    0x6E58, 0xCFE6,
+    0x6E5B, 0xD5BF,
+    0x6E5F, 0xE4D2,
+    0x6E6B, 0xE4D0,
+    0x6E6E, 0xE4CE,
+    0x6E7E, 0xCDE5,
+    0x6E7F, 0xCAAA,
+    0x6E83, 0xC0A3,
+    0x6E85, 0xBDA6,
+    0x6E86, 0xE4D3,
+    0x6E89, 0xB8C8,
+    0x6E8F, 0xE4E7,
+    0x6E90, 0xD4B4,
+    0x6E98, 0xE4DB,
+    0x6E9C, 0xC1EF,
+    0x6E9F, 0xE4E9,
+    0x6EA2, 0xD2E7,
+    0x6EA5, 0xE4DF,
+    0x6EA7, 0xE4E0,
+    0x6EAA, 0xCFAA,
+    0x6EAF, 0xCBDD,
+    0x6EB1, 0xE4DA,
+    0x6EB2, 0xE4D1,
+    0x6EB4, 0xE4E5,
+    0x6EB6, 0xC8DC,
+    0x6EB7, 0xE4E3,
+    0x6EBA, 0xC4E7,
+    0x6EBB, 0xE4E2,
+    0x6EBD, 0xE4E1,
+    0x6EC1, 0xB3FC,
+    0x6EC2, 0xE4E8,
+    0x6EC7, 0xB5E1,
+    0x6ECB, 0xD7CC,
+    0x6ECF, 0xE4E6,
+    0x6ED1, 0xBBAC,
+    0x6ED3, 0xD7D2,
+    0x6ED4, 0xCCCF,
+    0x6ED5, 0xEBF8,
+    0x6ED7, 0xE4E4,
+    0x6EDA, 0xB9F6,
+    0x6EDE, 0xD6CD,
+    0x6EDF, 0xE4D9,
+    0x6EE0, 0xE4DC,
+    0x6EE1, 0xC2FA,
+    0x6EE2, 0xE4DE,
+    0x6EE4, 0xC2CB,
+    0x6EE5, 0xC0C4,
+    0x6EE6, 0xC2D0,
+    0x6EE8, 0xB1F5,
+    0x6EE9, 0xCCB2,
+    0x6EF4, 0xB5CE,
+    0x6EF9, 0xE4EF,
+    0x6F02, 0xC6AF,
+    0x6F06, 0xC6E1,
+    0x6F09, 0xE4F5,
+    0x6F0F, 0xC2A9,
+    0x6F13, 0xC0EC,
+    0x6F14, 0xD1DD,
+    0x6F15, 0xE4EE,
+    0x6F20, 0xC4AE,
+    0x6F24, 0xE4ED,
+    0x6F29, 0xE4F6,
+    0x6F2A, 0xE4F4,
+    0x6F2B, 0xC2FE,
+    0x6F2D, 0xE4DD,
+    0x6F2F, 0xE4F0,
+    0x6F31, 0xCAFE,
+    0x6F33, 0xD5C4,
+    0x6F36, 0xE4F1,
+    0x6F3E, 0xD1FA,
+    0x6F46, 0xE4EB,
+    0x6F47, 0xE4EC,
+    0x6F4B, 0xE4F2,
+    0x6F4D, 0xCEAB,
+    0x6F58, 0xC5CB,
+    0x6F5C, 0xC7B1,
+    0x6F5E, 0xC2BA,
+    0x6F62, 0xE4EA,
+    0x6F66, 0xC1CA,
+    0x6F6D, 0xCCB6,
+    0x6F6E, 0xB3B1,
+    0x6F72, 0xE4FB,
+    0x6F74, 0xE4F3,
+    0x6F78, 0xE4FA,
+    0x6F7A, 0xE4FD,
+    0x6F7C, 0xE4FC,
+    0x6F84, 0xB3CE,
+    0x6F88, 0xB3BA,
+    0x6F89, 0xE4F7,
+    0x6F8C, 0xE4F9,
+    0x6F8D, 0xE4F8,
+    0x6F8E, 0xC5EC,
+    0x6F9C, 0xC0BD,
+    0x6FA1, 0xD4E8,
+    0x6FA7, 0xE5A2,
+    0x6FB3, 0xB0C4,
+    0x6FB6, 0xE5A4,
+    0x6FB9, 0xE5A3,
+    0x6FC0, 0xBCA4,
+    0x6FC2, 0xE5A5,
+    0x6FC9, 0xE5A1,
+    0x6FD1, 0xE4FE,
+    0x6FD2, 0xB1F4,
+    0x6FDE, 0xE5A8,
+    0x6FE0, 0xE5A9,
+    0x6FE1, 0xE5A6,
+    0x6FEE, 0xE5A7,
+    0x6FEF, 0xE5AA,
+    0x7011, 0xC6D9,
+    0x701A, 0xE5AB,
+    0x701B, 0xE5AD,
+    0x7023, 0xE5AC,
+    0x7035, 0xE5AF,
+    0x7039, 0xE5AE,
+    0x704C, 0xB9E0,
+    0x704F, 0xE5B0,
+    0x705E, 0xE5B1,
+    0x706B, 0xBBF0,
+    0x706C, 0xECE1,
+    0x706D, 0xC3F0,
+    0x706F, 0xB5C6,
+    0x7070, 0xBBD2,
+    0x7075, 0xC1E9,
+    0x7076, 0xD4EE,
+    0x7078, 0xBEC4,
+    0x707C, 0xD7C6,
+    0x707E, 0xD4D6,
+    0x707F, 0xB2D3,
+    0x7080, 0xECBE,
+    0x7085, 0xEAC1,
+    0x7089, 0xC2AF,
+    0x708A, 0xB4B6,
+    0x708E, 0xD1D7,
+    0x7092, 0xB3B4,
+    0x7094, 0xC8B2,
+    0x7095, 0xBFBB,
+    0x7096, 0xECC0,
+    0x7099, 0xD6CB,
+    0x709C, 0xECBF,
+    0x709D, 0xECC1,
+    0x70AB, 0xECC5,
+    0x70AC, 0xBEE6,
+    0x70AD, 0xCCBF,
+    0x70AE, 0xC5DA,
+    0x70AF, 0xBEBC,
+    0x70B1, 0xECC6,
+    0x70B3, 0xB1FE,
+    0x70B7, 0xECC4,
+    0x70B8, 0xD5A8,
+    0x70B9, 0xB5E3,
+    0x70BB, 0xECC2,
+    0x70BC, 0xC1B6,
+    0x70BD, 0xB3E3,
+    0x70C0, 0xECC3,
+    0x70C1, 0xCBB8,
+    0x70C2, 0xC0C3,
+    0x70C3, 0xCCFE,
+    0x70C8, 0xC1D2,
+    0x70CA, 0xECC8,
+    0x70D8, 0xBAE6,
+    0x70D9, 0xC0D3,
+    0x70DB, 0xD6F2,
+    0x70DF, 0xD1CC,
+    0x70E4, 0xBFBE,
+    0x70E6, 0xB7B3,
+    0x70E7, 0xC9D5,
+    0x70E8, 0xECC7,
+    0x70E9, 0xBBE2,
+    0x70EB, 0xCCCC,
+    0x70EC, 0xBDFD,
+    0x70ED, 0xC8C8,
+    0x70EF, 0xCFA9,
+    0x70F7, 0xCDE9,
+    0x70F9, 0xC5EB,
+    0x70FD, 0xB7E9,
+    0x7109, 0xD1C9,
+    0x710A, 0xBAB8,
+    0x7110, 0xECC9,
+    0x7113, 0xECCA,
+    0x7115, 0xBBC0,
+    0x7116, 0xECCB,
+    0x7118, 0xECE2,
+    0x7119, 0xB1BA,
+    0x711A, 0xB7D9,
+    0x7126, 0xBDB9,
+    0x712F, 0xECCC,
+    0x7130, 0xD1E6,
+    0x7131, 0xECCD,
+    0x7136, 0xC8BB,
+    0x7145, 0xECD1,
+    0x714A, 0xECD3,
+    0x714C, 0xBBCD,
+    0x714E, 0xBCE5,
+    0x715C, 0xECCF,
+    0x715E, 0xC9B7,
+    0x7164, 0xC3BA,
+    0x7166, 0xECE3,
+    0x7167, 0xD5D5,
+    0x7168, 0xECD0,
+    0x716E, 0xD6F3,
+    0x7172, 0xECD2,
+    0x7173, 0xECCE,
+    0x7178, 0xECD4,
+    0x717A, 0xECD5,
+    0x717D, 0xC9BF,
+    0x7184, 0xCFA8,
+    0x718A, 0xD0DC,
+    0x718F, 0xD1AC,
+    0x7194, 0xC8DB,
+    0x7198, 0xECD6,
+    0x7199, 0xCEF5,
+    0x719F, 0xCAEC,
+    0x71A0, 0xECDA,
+    0x71A8, 0xECD9,
+    0x71AC, 0xB0BE,
+    0x71B3, 0xECD7,
+    0x71B5, 0xECD8,
+    0x71B9, 0xECE4,
+    0x71C3, 0xC8BC,
+    0x71CE, 0xC1C7,
+    0x71D4, 0xECDC,
+    0x71D5, 0xD1E0,
+    0x71E0, 0xECDB,
+    0x71E5, 0xD4EF,
+    0x71E7, 0xECDD,
+    0x71EE, 0xDBC6,
+    0x71F9, 0xECDE,
+    0x7206, 0xB1AC,
+    0x721D, 0xECDF,
+    0x7228, 0xECE0,
+    0x722A, 0xD7A6,
+    0x722C, 0xC5C0,
+    0x7230, 0xEBBC,
+    0x7231, 0xB0AE,
+    0x7235, 0xBEF4,
+    0x7236, 0xB8B8,
+    0x7237, 0xD2AF,
+    0x7238, 0xB0D6,
+    0x7239, 0xB5F9,
+    0x723B, 0xD8B3,
+    0x723D, 0xCBAC,
+    0x723F, 0xE3DD,
+    0x7247, 0xC6AC,
+    0x7248, 0xB0E6,
+    0x724C, 0xC5C6,
+    0x724D, 0xEBB9,
+    0x7252, 0xEBBA,
+    0x7256, 0xEBBB,
+    0x7259, 0xD1C0,
+    0x725B, 0xC5A3,
+    0x725D, 0xEAF2,
+    0x725F, 0xC4B2,
+    0x7261, 0xC4B5,
+    0x7262, 0xC0CE,
+    0x7266, 0xEAF3,
+    0x7267, 0xC4C1,
+    0x7269, 0xCEEF,
+    0x726E, 0xEAF0,
+    0x726F, 0xEAF4,
+    0x7272, 0xC9FC,
+    0x7275, 0xC7A3,
+    0x7279, 0xCCD8,
+    0x727A, 0xCEFE,
+    0x727E, 0xEAF5,
+    0x727F, 0xEAF6,
+    0x7280, 0xCFAC,
+    0x7281, 0xC0E7,
+    0x7284, 0xEAF7,
+    0x728A, 0xB6BF,
+    0x728B, 0xEAF8,
+    0x728D, 0xEAF9,
+    0x728F, 0xEAFA,
+    0x7292, 0xEAFB,
+    0x729F, 0xEAF1,
+    0x72AC, 0xC8AE,
+    0x72AD, 0xE1EB,
+    0x72AF, 0xB7B8,
+    0x72B0, 0xE1EC,
+    0x72B4, 0xE1ED,
+    0x72B6, 0xD7B4,
+    0x72B7, 0xE1EE,
+    0x72B8, 0xE1EF,
+    0x72B9, 0xD3CC,
+    0x72C1, 0xE1F1,
+    0x72C2, 0xBFF1,
+    0x72C3, 0xE1F0,
+    0x72C4, 0xB5D2,
+    0x72C8, 0xB1B7,
+    0x72CD, 0xE1F3,
+    0x72CE, 0xE1F2,
+    0x72D0, 0xBAFC,
+    0x72D2, 0xE1F4,
+    0x72D7, 0xB9B7,
+    0x72D9, 0xBED1,
+    0x72DE, 0xC4FC,
+    0x72E0, 0xBADD,
+    0x72E1, 0xBDC6,
+    0x72E8, 0xE1F5,
+    0x72E9, 0xE1F7,
+    0x72EC, 0xB6C0,
+    0x72ED, 0xCFC1,
+    0x72EE, 0xCAA8,
+    0x72EF, 0xE1F6,
+    0x72F0, 0xD5F8,
+    0x72F1, 0xD3FC,
+    0x72F2, 0xE1F8,
+    0x72F3, 0xE1FC,
+    0x72F4, 0xE1F9,
+    0x72F7, 0xE1FA,
+    0x72F8, 0xC0EA,
+    0x72FA, 0xE1FE,
+    0x72FB, 0xE2A1,
+    0x72FC, 0xC0C7,
+    0x7301, 0xE1FB,
+    0x7303, 0xE1FD,
+    0x730A, 0xE2A5,
+    0x730E, 0xC1D4,
+    0x7313, 0xE2A3,
+    0x7315, 0xE2A8,
+    0x7316, 0xB2FE,
+    0x7317, 0xE2A2,
+    0x731B, 0xC3CD,
+    0x731C, 0xB2C2,
+    0x731D, 0xE2A7,
+    0x731E, 0xE2A6,
+    0x7321, 0xE2A4,
+    0x7322, 0xE2A9,
+    0x7325, 0xE2AB,
+    0x7329, 0xD0C9,
+    0x732A, 0xD6ED,
+    0x732B, 0xC3A8,
+    0x732C, 0xE2AC,
+    0x732E, 0xCFD7,
+    0x7331, 0xE2AE,
+    0x7334, 0xBAEF,
+    0x7337, 0xE9E0,
+    0x7338, 0xE2AD,
+    0x7339, 0xE2AA,
+    0x733E, 0xBBAB,
+    0x733F, 0xD4B3,
+    0x734D, 0xE2B0,
+    0x7350, 0xE2AF,
+    0x7352, 0xE9E1,
+    0x7357, 0xE2B1,
+    0x7360, 0xE2B2,
+    0x736C, 0xE2B3,
+    0x736D, 0xCCA1,
+    0x736F, 0xE2B4,
+    0x737E, 0xE2B5,
+    0x7384, 0xD0FE,
+    0x7387, 0xC2CA,
+    0x7389, 0xD3F1,
+    0x738B, 0xCDF5,
+    0x738E, 0xE7E0,
+    0x7391, 0xE7E1,
+    0x7396, 0xBEC1,
+    0x739B, 0xC2EA,
+    0x739F, 0xE7E4,
+    0x73A2, 0xE7E3,
+    0x73A9, 0xCDE6,
+    0x73AB, 0xC3B5,
+    0x73AE, 0xE7E2,
+    0x73AF, 0xBBB7,
+    0x73B0, 0xCFD6,
+    0x73B2, 0xC1E1,
+    0x73B3, 0xE7E9,
+    0x73B7, 0xE7E8,
+    0x73BA, 0xE7F4,
+    0x73BB, 0xB2A3,
+    0x73C0, 0xE7EA,
+    0x73C2, 0xE7E6,
+    0x73C8, 0xE7EC,
+    0x73C9, 0xE7EB,
+    0x73CA, 0xC9BA,
+    0x73CD, 0xD5E4,
+    0x73CF, 0xE7E5,
+    0x73D0, 0xB7A9,
+    0x73D1, 0xE7E7,
+    0x73D9, 0xE7EE,
+    0x73DE, 0xE7F3,
+    0x73E0, 0xD6E9,
+    0x73E5, 0xE7ED,
+    0x73E7, 0xE7F2,
+    0x73E9, 0xE7F1,
+    0x73ED, 0xB0E0,
+    0x73F2, 0xE7F5,
+    0x7403, 0xC7F2,
+    0x7405, 0xC0C5,
+    0x7406, 0xC0ED,
+    0x7409, 0xC1F0,
+    0x740A, 0xE7F0,
+    0x740F, 0xE7F6,
+    0x7410, 0xCBF6,
+    0x741A, 0xE8A2,
+    0x741B, 0xE8A1,
+    0x7422, 0xD7C1,
+    0x7425, 0xE7FA,
+    0x7426, 0xE7F9,
+    0x7428, 0xE7FB,
+    0x742A, 0xE7F7,
+    0x742C, 0xE7FE,
+    0x742E, 0xE7FD,
+    0x7430, 0xE7FC,
+    0x7433, 0xC1D5,
+    0x7434, 0xC7D9,
+    0x7435, 0xC5FD,
+    0x7436, 0xC5C3,
+    0x743C, 0xC7ED,
+    0x7441, 0xE8A3,
+    0x7455, 0xE8A6,
+    0x7457, 0xE8A5,
+    0x7459, 0xE8A7,
+    0x745A, 0xBAF7,
+    0x745B, 0xE7F8,
+    0x745C, 0xE8A4,
+    0x745E, 0xC8F0,
+    0x745F, 0xC9AA,
+    0x746D, 0xE8A9,
+    0x7470, 0xB9E5,
+    0x7476, 0xD1FE,
+    0x7477, 0xE8A8,
+    0x747E, 0xE8AA,
+    0x7480, 0xE8AD,
+    0x7481, 0xE8AE,
+    0x7483, 0xC1A7,
+    0x7487, 0xE8AF,
+    0x748B, 0xE8B0,
+    0x748E, 0xE8AC,
+    0x7490, 0xE8B4,
+    0x749C, 0xE8AB,
+    0x749E, 0xE8B1,
+    0x74A7, 0xE8B5,
+    0x74A8, 0xE8B2,
+    0x74A9, 0xE8B3,
+    0x74BA, 0xE8B7,
+    0x74D2, 0xE8B6,
+    0x74DC, 0xB9CF,
+    0x74DE, 0xF0AC,
+    0x74E0, 0xF0AD,
+    0x74E2, 0xC6B0,
+    0x74E3, 0xB0EA,
+    0x74E4, 0xC8BF,
+    0x74E6, 0xCDDF,
+    0x74EE, 0xCECD,
+    0x74EF, 0xEAB1,
+    0x74F4, 0xEAB2,
+    0x74F6, 0xC6BF,
+    0x74F7, 0xB4C9,
+    0x74FF, 0xEAB3,
+    0x7504, 0xD5E7,
+    0x750D, 0xDDF9,
+    0x750F, 0xEAB4,
+    0x7511, 0xEAB5,
+    0x7513, 0xEAB6,
+    0x7518, 0xB8CA,
+    0x7519, 0xDFB0,
+    0x751A, 0xC9F5,
+    0x751C, 0xCCF0,
+    0x751F, 0xC9FA,
+    0x7525, 0xC9FB,
+    0x7528, 0xD3C3,
+    0x7529, 0xCBA6,
+    0x752B, 0xB8A6,
+    0x752C, 0xF0AE,
+    0x752D, 0xB1C2,
+    0x752F, 0xE5B8,
+    0x7530, 0xCCEF,
+    0x7531, 0xD3C9,
+    0x7532, 0xBCD7,
+    0x7533, 0xC9EA,
+    0x7535, 0xB5E7,
+    0x7537, 0xC4D0,
+    0x7538, 0xB5E9,
+    0x753A, 0xEEAE,
+    0x753B, 0xBBAD,
+    0x753E, 0xE7DE,
+    0x7540, 0xEEAF,
+    0x7545, 0xB3A9,
+    0x7548, 0xEEB2,
+    0x754B, 0xEEB1,
+    0x754C, 0xBDE7,
+    0x754E, 0xEEB0,
+    0x754F, 0xCEB7,
+    0x7554, 0xC5CF,
+    0x7559, 0xC1F4,
+    0x755A, 0xDBCE,
+    0x755B, 0xEEB3,
+    0x755C, 0xD0F3,
+    0x7565, 0xC2D4,
+    0x7566, 0xC6E8,
+    0x756A, 0xB7AC,
+    0x7572, 0xEEB4,
+    0x7574, 0xB3EB,
+    0x7578, 0xBBFB,
+    0x7579, 0xEEB5,
+    0x757F, 0xE7DC,
+    0x7583, 0xEEB6,
+    0x7586, 0xBDAE,
+    0x758B, 0xF1E2,
+    0x758F, 0xCAE8,
+    0x7591, 0xD2C9,
+    0x7592, 0xF0DA,
+    0x7594, 0xF0DB,
+    0x7596, 0xF0DC,
+    0x7597, 0xC1C6,
+    0x7599, 0xB8ED,
+    0x759A, 0xBECE,
+    0x759D, 0xF0DE,
+    0x759F, 0xC5B1,
+    0x75A0, 0xF0DD,
+    0x75A1, 0xD1F1,
+    0x75A3, 0xF0E0,
+    0x75A4, 0xB0CC,
+    0x75A5, 0xBDEA,
+    0x75AB, 0xD2DF,
+    0x75AC, 0xF0DF,
+    0x75AE, 0xB4AF,
+    0x75AF, 0xB7E8,
+    0x75B0, 0xF0E6,
+    0x75B1, 0xF0E5,
+    0x75B2, 0xC6A3,
+    0x75B3, 0xF0E1,
+    0x75B4, 0xF0E2,
+    0x75B5, 0xB4C3,
+    0x75B8, 0xF0E3,
+    0x75B9, 0xD5EE,
+    0x75BC, 0xCCDB,
+    0x75BD, 0xBED2,
+    0x75BE, 0xBCB2,
+    0x75C2, 0xF0E8,
+    0x75C3, 0xF0E7,
+    0x75C4, 0xF0E4,
+    0x75C5, 0xB2A1,
+    0x75C7, 0xD6A2,
+    0x75C8, 0xD3B8,
+    0x75C9, 0xBEB7,
+    0x75CA, 0xC8AC,
+    0x75CD, 0xF0EA,
+    0x75D2, 0xD1F7,
+    0x75D4, 0xD6CC,
+    0x75D5, 0xBADB,
+    0x75D6, 0xF0E9,
+    0x75D8, 0xB6BB,
+    0x75DB, 0xCDB4,
+    0x75DE, 0xC6A6,
+    0x75E2, 0xC1A1,
+    0x75E3, 0xF0EB,
+    0x75E4, 0xF0EE,
+    0x75E6, 0xF0ED,
+    0x75E7, 0xF0F0,
+    0x75E8, 0xF0EC,
+    0x75EA, 0xBBBE,
+    0x75EB, 0xF0EF,
+    0x75F0, 0xCCB5,
+    0x75F1, 0xF0F2,
+    0x75F4, 0xB3D5,
+    0x75F9, 0xB1D4,
+    0x75FC, 0xF0F3,
+    0x75FF, 0xF0F4,
+    0x7600, 0xF0F6,
+    0x7601, 0xB4E1,
+    0x7603, 0xF0F1,
+    0x7605, 0xF0F7,
+    0x760A, 0xF0FA,
+    0x760C, 0xF0F8,
+    0x7610, 0xF0F5,
+    0x7615, 0xF0FD,
+    0x7617, 0xF0F9,
+    0x7618, 0xF0FC,
+    0x7619, 0xF0FE,
+    0x761B, 0xF1A1,
+    0x761F, 0xCEC1,
+    0x7620, 0xF1A4,
+    0x7622, 0xF1A3,
+    0x7624, 0xC1F6,
+    0x7625, 0xF0FB,
+    0x7626, 0xCADD,
+    0x7629, 0xB4F1,
+    0x762A, 0xB1F1,
+    0x762B, 0xCCB1,
+    0x762D, 0xF1A6,
+    0x7630, 0xF1A7,
+    0x7633, 0xF1AC,
+    0x7634, 0xD5CE,
+    0x7635, 0xF1A9,
+    0x7638, 0xC8B3,
+    0x763C, 0xF1A2,
+    0x763E, 0xF1AB,
+    0x763F, 0xF1A8,
+    0x7640, 0xF1A5,
+    0x7643, 0xF1AA,
+    0x764C, 0xB0A9,
+    0x764D, 0xF1AD,
+    0x7654, 0xF1AF,
+    0x7656, 0xF1B1,
+    0x765C, 0xF1B0,
+    0x765E, 0xF1AE,
+    0x7663, 0xD1A2,
+    0x766B, 0xF1B2,
+    0x766F, 0xF1B3,
+    0x7678, 0xB9EF,
+    0x767B, 0xB5C7,
+    0x767D, 0xB0D7,
+    0x767E, 0xB0D9,
+    0x7682, 0xD4ED,
+    0x7684, 0xB5C4,
+    0x7686, 0xBDD4,
+    0x7687, 0xBBCA,
+    0x7688, 0xF0A7,
+    0x768B, 0xB8DE,
+    0x768E, 0xF0A8,
+    0x7691, 0xB0A8,
+    0x7693, 0xF0A9,
+    0x7696, 0xCDEE,
+    0x7699, 0xF0AA,
+    0x76A4, 0xF0AB,
+    0x76AE, 0xC6A4,
+    0x76B1, 0xD6E5,
+    0x76B2, 0xF1E4,
+    0x76B4, 0xF1E5,
+    0x76BF, 0xC3F3,
+    0x76C2, 0xD3DB,
+    0x76C5, 0xD6D1,
+    0x76C6, 0xC5E8,
+    0x76C8, 0xD3AF,
+    0x76CA, 0xD2E6,
+    0x76CD, 0xEEC1,
+    0x76CE, 0xB0BB,
+    0x76CF, 0xD5B5,
+    0x76D0, 0xD1CE,
+    0x76D1, 0xBCE0,
+    0x76D2, 0xBAD0,
+    0x76D4, 0xBFF8,
+    0x76D6, 0xB8C7,
+    0x76D7, 0xB5C1,
+    0x76D8, 0xC5CC,
+    0x76DB, 0xCAA2,
+    0x76DF, 0xC3CB,
+    0x76E5, 0xEEC2,
+    0x76EE, 0xC4BF,
+    0x76EF, 0xB6A2,
+    0x76F1, 0xEDEC,
+    0x76F2, 0xC3A4,
+    0x76F4, 0xD6B1,
+    0x76F8, 0xCFE0,
+    0x76F9, 0xEDEF,
+    0x76FC, 0xC5CE,
+    0x76FE, 0xB6DC,
+    0x7701, 0xCAA1,
+    0x7704, 0xEDED,
+    0x7707, 0xEDF0,
+    0x7708, 0xEDF1,
+    0x7709, 0xC3BC,
+    0x770B, 0xBFB4,
+    0x770D, 0xEDEE,
+    0x7719, 0xEDF4,
+    0x771A, 0xEDF2,
+    0x771F, 0xD5E6,
+    0x7720, 0xC3DF,
+    0x7722, 0xEDF3,
+    0x7726, 0xEDF6,
+    0x7728, 0xD5A3,
+    0x7729, 0xD1A3,
+    0x772D, 0xEDF5,
+    0x772F, 0xC3D0,
+    0x7735, 0xEDF7,
+    0x7736, 0xBFF4,
+    0x7737, 0xBEEC,
+    0x7738, 0xEDF8,
+    0x773A, 0xCCF7,
+    0x773C, 0xD1DB,
+    0x7740, 0xD7C5,
+    0x7741, 0xD5F6,
+    0x7743, 0xEDFC,
+    0x7747, 0xEDFB,
+    0x7750, 0xEDF9,
+    0x7751, 0xEDFA,
+    0x775A, 0xEDFD,
+    0x775B, 0xBEA6,
+    0x7761, 0xCBAF,
+    0x7762, 0xEEA1,
+    0x7763, 0xB6BD,
+    0x7765, 0xEEA2,
+    0x7766, 0xC4C0,
+    0x7768, 0xEDFE,
+    0x776B, 0xBDDE,
+    0x776C, 0xB2C7,
+    0x7779, 0xB6C3,
+    0x777D, 0xEEA5,
+    0x777E, 0xD8BA,
+    0x777F, 0xEEA3,
+    0x7780, 0xEEA6,
+    0x7784, 0xC3E9,
+    0x7785, 0xB3F2,
+    0x778C, 0xEEA7,
+    0x778D, 0xEEA4,
+    0x778E, 0xCFB9,
+    0x7791, 0xEEA8,
+    0x7792, 0xC2F7,
+    0x779F, 0xEEA9,
+    0x77A0, 0xEEAA,
+    0x77A2, 0xDEAB,
+    0x77A5, 0xC6B3,
+    0x77A7, 0xC7C6,
+    0x77A9, 0xD6F5,
+    0x77AA, 0xB5C9,
+    0x77AC, 0xCBB2,
+    0x77B0, 0xEEAB,
+    0x77B3, 0xCDAB,
+    0x77B5, 0xEEAC,
+    0x77BB, 0xD5B0,
+    0x77BD, 0xEEAD,
+    0x77BF, 0xF6C4,
+    0x77CD, 0xDBC7,
+    0x77D7, 0xB4A3,
+    0x77DB, 0xC3AC,
+    0x77DC, 0xF1E6,
+    0x77E2, 0xCAB8,
+    0x77E3, 0xD2D3,
+    0x77E5, 0xD6AA,
+    0x77E7, 0xEFF2,
+    0x77E9, 0xBED8,
+    0x77EB, 0xBDC3,
+    0x77EC, 0xEFF3,
+    0x77ED, 0xB6CC,
+    0x77EE, 0xB0AB,
+    0x77F3, 0xCAAF,
+    0x77F6, 0xEDB6,
+    0x77F8, 0xEDB7,
+    0x77FD, 0xCEF9,
+    0x77FE, 0xB7AF,
+    0x77FF, 0xBFF3,
+    0x7800, 0xEDB8,
+    0x7801, 0xC2EB,
+    0x7802, 0xC9B0,
+    0x7809, 0xEDB9,
+    0x780C, 0xC6F6,
+    0x780D, 0xBFB3,
+    0x7811, 0xEDBC,
+    0x7812, 0xC5F8,
+    0x7814, 0xD1D0,
+    0x7816, 0xD7A9,
+    0x7817, 0xEDBA,
+    0x7818, 0xEDBB,
+    0x781A, 0xD1E2,
+    0x781C, 0xEDBF,
+    0x781D, 0xEDC0,
+    0x781F, 0xEDC4,
+    0x7823, 0xEDC8,
+    0x7825, 0xEDC6,
+    0x7826, 0xEDCE,
+    0x7827, 0xD5E8,
+    0x7829, 0xEDC9,
+    0x782C, 0xEDC7,
+    0x782D, 0xEDBE,
+    0x7830, 0xC5E9,
+    0x7834, 0xC6C6,
+    0x7837, 0xC9E9,
+    0x7838, 0xD4D2,
+    0x7839, 0xEDC1,
+    0x783A, 0xEDC2,
+    0x783B, 0xEDC3,
+    0x783C, 0xEDC5,
+    0x783E, 0xC0F9,
+    0x7840, 0xB4A1,
+    0x7845, 0xB9E8,
+    0x7847, 0xEDD0,
+    0x784C, 0xEDD1,
+    0x784E, 0xEDCA,
+    0x7850, 0xEDCF,
+    0x7852, 0xCEF8,
+    0x7855, 0xCBB6,
+    0x7856, 0xEDCC,
+    0x7857, 0xEDCD,
+    0x785D, 0xCFF5,
+    0x786A, 0xEDD2,
+    0x786B, 0xC1F2,
+    0x786C, 0xD3B2,
+    0x786D, 0xEDCB,
+    0x786E, 0xC8B7,
+    0x7877, 0xBCEF,
+    0x787C, 0xC5F0,
+    0x7887, 0xEDD6,
+    0x7889, 0xB5EF,
+    0x788C, 0xC2B5,
+    0x788D, 0xB0AD,
+    0x788E, 0xCBE9,
+    0x7891, 0xB1AE,
+    0x7893, 0xEDD4,
+    0x7897, 0xCDEB,
+    0x7898, 0xB5E2,
+    0x789A, 0xEDD5,
+    0x789B, 0xEDD3,
+    0x789C, 0xEDD7,
+    0x789F, 0xB5FA,
+    0x78A1, 0xEDD8,
+    0x78A3, 0xEDD9,
+    0x78A5, 0xEDDC,
+    0x78A7, 0xB1CC,
+    0x78B0, 0xC5F6,
+    0x78B1, 0xBCEE,
+    0x78B2, 0xEDDA,
+    0x78B3, 0xCCBC,
+    0x78B4, 0xB2EA,
+    0x78B9, 0xEDDB,
+    0x78BE, 0xC4EB,
+    0x78C1, 0xB4C5,
+    0x78C5, 0xB0F5,
+    0x78C9, 0xEDDF,
+    0x78CA, 0xC0DA,
+    0x78CB, 0xB4E8,
+    0x78D0, 0xC5CD,
+    0x78D4, 0xEDDD,
+    0x78D5, 0xBFC4,
+    0x78D9, 0xEDDE,
+    0x78E8, 0xC4A5,
+    0x78EC, 0xEDE0,
+    0x78F2, 0xEDE1,
+    0x78F4, 0xEDE3,
+    0x78F7, 0xC1D7,
+    0x78FA, 0xBBC7,
+    0x7901, 0xBDB8,
+    0x7905, 0xEDE2,
+    0x7913, 0xEDE4,
+    0x791E, 0xEDE6,
+    0x7924, 0xEDE5,
+    0x7934, 0xEDE7,
+    0x793A, 0xCABE,
+    0x793B, 0xECEA,
+    0x793C, 0xC0F1,
+    0x793E, 0xC9E7,
+    0x7940, 0xECEB,
+    0x7941, 0xC6EE,
+    0x7946, 0xECEC,
+    0x7948, 0xC6ED,
+    0x7949, 0xECED,
+    0x7953, 0xECF0,
+    0x7956, 0xD7E6,
+    0x7957, 0xECF3,
+    0x795A, 0xECF1,
+    0x795B, 0xECEE,
+    0x795C, 0xECEF,
+    0x795D, 0xD7A3,
+    0x795E, 0xC9F1,
+    0x795F, 0xCBEE,
+    0x7960, 0xECF4,
+    0x7962, 0xECF2,
+    0x7965, 0xCFE9,
+    0x7967, 0xECF6,
+    0x7968, 0xC6B1,
+    0x796D, 0xBCC0,
+    0x796F, 0xECF5,
+    0x7977, 0xB5BB,
+    0x7978, 0xBBF6,
+    0x797A, 0xECF7,
+    0x7980, 0xD9F7,
+    0x7981, 0xBDFB,
+    0x7984, 0xC2BB,
+    0x7985, 0xECF8,
+    0x798A, 0xECF9,
+    0x798F, 0xB8A3,
+    0x799A, 0xECFA,
+    0x79A7, 0xECFB,
+    0x79B3, 0xECFC,
+    0x79B9, 0xD3ED,
+    0x79BA, 0xD8AE,
+    0x79BB, 0xC0EB,
+    0x79BD, 0xC7DD,
+    0x79BE, 0xBACC,
+    0x79C0, 0xD0E3,
+    0x79C1, 0xCBBD,
+    0x79C3, 0xCDBA,
+    0x79C6, 0xB8D1,
+    0x79C9, 0xB1FC,
+    0x79CB, 0xC7EF,
+    0x79CD, 0xD6D6,
+    0x79D1, 0xBFC6,
+    0x79D2, 0xC3EB,
+    0x79D5, 0xEFF5,
+    0x79D8, 0xC3D8,
+    0x79DF, 0xD7E2,
+    0x79E3, 0xEFF7,
+    0x79E4, 0xB3D3,
+    0x79E6, 0xC7D8,
+    0x79E7, 0xD1ED,
+    0x79E9, 0xD6C8,
+    0x79EB, 0xEFF8,
+    0x79ED, 0xEFF6,
+    0x79EF, 0xBBFD,
+    0x79F0, 0xB3C6,
+    0x79F8, 0xBDD5,
+    0x79FB, 0xD2C6,
+    0x79FD, 0xBBE0,
+    0x7A00, 0xCFA1,
+    0x7A02, 0xEFFC,
+    0x7A03, 0xEFFB,
+    0x7A06, 0xEFF9,
+    0x7A0B, 0xB3CC,
+    0x7A0D, 0xC9D4,
+    0x7A0E, 0xCBB0,
+    0x7A14, 0xEFFE,
+    0x7A17, 0xB0DE,
+    0x7A1A, 0xD6C9,
+    0x7A1E, 0xEFFD,
+    0x7A20, 0xB3ED,
+    0x7A23, 0xF6D5,
+    0x7A33, 0xCEC8,
+    0x7A37, 0xF0A2,
+    0x7A39, 0xF0A1,
+    0x7A3B, 0xB5BE,
+    0x7A3C, 0xBCDA,
+    0x7A3D, 0xBBFC,
+    0x7A3F, 0xB8E5,
+    0x7A46, 0xC4C2,
+    0x7A51, 0xF0A3,
+    0x7A57, 0xCBEB,
+    0x7A70, 0xF0A6,
+    0x7A74, 0xD1A8,
+    0x7A76, 0xBEBF,
+    0x7A77, 0xC7EE,
+    0x7A78, 0xF1B6,
+    0x7A79, 0xF1B7,
+    0x7A7A, 0xBFD5,
+    0x7A7F, 0xB4A9,
+    0x7A80, 0xF1B8,
+    0x7A81, 0xCDBB,
+    0x7A83, 0xC7D4,
+    0x7A84, 0xD5AD,
+    0x7A86, 0xF1B9,
+    0x7A88, 0xF1BA,
+    0x7A8D, 0xC7CF,
+    0x7A91, 0xD2A4,
+    0x7A92, 0xD6CF,
+    0x7A95, 0xF1BB,
+    0x7A96, 0xBDD1,
+    0x7A97, 0xB4B0,
+    0x7A98, 0xBEBD,
+    0x7A9C, 0xB4DC,
+    0x7A9D, 0xCED1,
+    0x7A9F, 0xBFDF,
+    0x7AA0, 0xF1BD,
+    0x7AA5, 0xBFFA,
+    0x7AA6, 0xF1BC,
+    0x7AA8, 0xF1BF,
+    0x7AAC, 0xF1BE,
+    0x7AAD, 0xF1C0,
+    0x7AB3, 0xF1C1,
+    0x7ABF, 0xC1FE,
+    0x7ACB, 0xC1A2,
+    0x7AD6, 0xCAFA,
+    0x7AD9, 0xD5BE,
+    0x7ADE, 0xBEBA,
+    0x7ADF, 0xBEB9,
+    0x7AE0, 0xD5C2,
+    0x7AE3, 0xBFA2,
+    0x7AE5, 0xCDAF,
+    0x7AE6, 0xF1B5,
+    0x7AED, 0xBDDF,
+    0x7AEF, 0xB6CB,
+    0x7AF9, 0xD6F1,
+    0x7AFA, 0xF3C3,
+    0x7AFD, 0xF3C4,
+    0x7AFF, 0xB8CD,
+    0x7B03, 0xF3C6,
+    0x7B04, 0xF3C7,
+    0x7B06, 0xB0CA,
+    0x7B08, 0xF3C5,
+    0x7B0A, 0xF3C9,
+    0x7B0B, 0xCBF1,
+    0x7B0F, 0xF3CB,
+    0x7B11, 0xD0A6,
+    0x7B14, 0xB1CA,
+    0x7B15, 0xF3C8,
+    0x7B19, 0xF3CF,
+    0x7B1B, 0xB5D1,
+    0x7B1E, 0xF3D7,
+    0x7B20, 0xF3D2,
+    0x7B24, 0xF3D4,
+    0x7B25, 0xF3D3,
+    0x7B26, 0xB7FB,
+    0x7B28, 0xB1BF,
+    0x7B2A, 0xF3CE,
+    0x7B2B, 0xF3CA,
+    0x7B2C, 0xB5DA,
+    0x7B2E, 0xF3D0,
+    0x7B31, 0xF3D1,
+    0x7B33, 0xF3D5,
+    0x7B38, 0xF3CD,
+    0x7B3A, 0xBCE3,
+    0x7B3C, 0xC1FD,
+    0x7B3E, 0xF3D6,
+    0x7B45, 0xF3DA,
+    0x7B47, 0xF3CC,
+    0x7B49, 0xB5C8,
+    0x7B4B, 0xBDEE,
+    0x7B4C, 0xF3DC,
+    0x7B4F, 0xB7A4,
+    0x7B50, 0xBFF0,
+    0x7B51, 0xD6FE,
+    0x7B52, 0xCDB2,
+    0x7B54, 0xB4F0,
+    0x7B56, 0xB2DF,
+    0x7B58, 0xF3D8,
+    0x7B5A, 0xF3D9,
+    0x7B5B, 0xC9B8,
+    0x7B5D, 0xF3DD,
+    0x7B60, 0xF3DE,
+    0x7B62, 0xF3E1,
+    0x7B6E, 0xF3DF,
+    0x7B71, 0xF3E3,
+    0x7B72, 0xF3E2,
+    0x7B75, 0xF3DB,
+    0x7B77, 0xBFEA,
+    0x7B79, 0xB3EF,
+    0x7B7B, 0xF3E0,
+    0x7B7E, 0xC7A9,
+    0x7B80, 0xBCF2,
+    0x7B85, 0xF3EB,
+    0x7B8D, 0xB9BF,
+    0x7B90, 0xF3E4,
+    0x7B94, 0xB2AD,
+    0x7B95, 0xBBFE,
+    0x7B97, 0xCBE3,
+    0x7B9C, 0xF3ED,
+    0x7B9D, 0xF3E9,
+    0x7BA1, 0xB9DC,
+    0x7BA2, 0xF3EE,
+    0x7BA6, 0xF3E5,
+    0x7BA7, 0xF3E6,
+    0x7BA8, 0xF3EA,
+    0x7BA9, 0xC2E1,
+    0x7BAA, 0xF3EC,
+    0x7BAB, 0xF3EF,
+    0x7BAC, 0xF3E8,
+    0x7BAD, 0xBCFD,
+    0x7BB1, 0xCFE4,
+    0x7BB4, 0xF3F0,
+    0x7BB8, 0xF3E7,
+    0x7BC1, 0xF3F2,
+    0x7BC6, 0xD7AD,
+    0x7BC7, 0xC6AA,
+    0x7BCC, 0xF3F3,
+    0x7BD1, 0xF3F1,
+    0x7BD3, 0xC2A8,
+    0x7BD9, 0xB8DD,
+    0x7BDA, 0xF3F5,
+    0x7BDD, 0xF3F4,
+    0x7BE1, 0xB4DB,
+    0x7BE5, 0xF3F6,
+    0x7BE6, 0xF3F7,
+    0x7BEA, 0xF3F8,
+    0x7BEE, 0xC0BA,
+    0x7BF1, 0xC0E9,
+    0x7BF7, 0xC5F1,
+    0x7BFC, 0xF3FB,
+    0x7BFE, 0xF3FA,
+    0x7C07, 0xB4D8,
+    0x7C0B, 0xF3FE,
+    0x7C0C, 0xF3F9,
+    0x7C0F, 0xF3FC,
+    0x7C16, 0xF3FD,
+    0x7C1F, 0xF4A1,
+    0x7C26, 0xF4A3,
+    0x7C27, 0xBBC9,
+    0x7C2A, 0xF4A2,
+    0x7C38, 0xF4A4,
+    0x7C3F, 0xB2BE,
+    0x7C40, 0xF4A6,
+    0x7C41, 0xF4A5,
+    0x7C4D, 0xBCAE,
+    0x7C73, 0xC3D7,
+    0x7C74, 0xD9E1,
+    0x7C7B, 0xC0E0,
+    0x7C7C, 0xF4CC,
+    0x7C7D, 0xD7D1,
+    0x7C89, 0xB7DB,
+    0x7C91, 0xF4CE,
+    0x7C92, 0xC1A3,
+    0x7C95, 0xC6C9,
+    0x7C97, 0xB4D6,
+    0x7C98, 0xD5B3,
+    0x7C9C, 0xF4D0,
+    0x7C9D, 0xF4CF,
+    0x7C9E, 0xF4D1,
+    0x7C9F, 0xCBDA,
+    0x7CA2, 0xF4D2,
+    0x7CA4, 0xD4C1,
+    0x7CA5, 0xD6E0,
+    0x7CAA, 0xB7E0,
+    0x7CAE, 0xC1B8,
+    0x7CB1, 0xC1BB,
+    0x7CB2, 0xF4D3,
+    0x7CB3, 0xBEAC,
+    0x7CB9, 0xB4E2,
+    0x7CBC, 0xF4D4,
+    0x7CBD, 0xF4D5,
+    0x7CBE, 0xBEAB,
+    0x7CC1, 0xF4D6,
+    0x7CC5, 0xF4DB,
+    0x7CC7, 0xF4D7,
+    0x7CC8, 0xF4DA,
+    0x7CCA, 0xBAFD,
+    0x7CCC, 0xF4D8,
+    0x7CCD, 0xF4D9,
+    0x7CD5, 0xB8E2,
+    0x7CD6, 0xCCC7,
+    0x7CD7, 0xF4DC,
+    0x7CD9, 0xB2DA,
+    0x7CDC, 0xC3D3,
+    0x7CDF, 0xD4E3,
+    0x7CE0, 0xBFB7,
+    0x7CE8, 0xF4DD,
+    0x7CEF, 0xC5B4,
+    0x7CF8, 0xF4E9,
+    0x7CFB, 0xCFB5,
+    0x7D0A, 0xCEC9,
+    0x7D20, 0xCBD8,
+    0x7D22, 0xCBF7,
+    0x7D27, 0xBDF4,
+    0x7D2B, 0xD7CF,
+    0x7D2F, 0xC0DB,
+    0x7D6E, 0xD0F5,
+    0x7D77, 0xF4EA,
+    0x7DA6, 0xF4EB,
+    0x7DAE, 0xF4EC,
+    0x7E3B, 0xF7E3,
+    0x7E41, 0xB7B1,
+    0x7E47, 0xF4ED,
+    0x7E82, 0xD7EB,
+    0x7E9B, 0xF4EE,
+    0x7E9F, 0xE6F9,
+    0x7EA0, 0xBEC0,
+    0x7EA1, 0xE6FA,
+    0x7EA2, 0xBAEC,
+    0x7EA3, 0xE6FB,
+    0x7EA4, 0xCFCB,
+    0x7EA5, 0xE6FC,
+    0x7EA6, 0xD4BC,
+    0x7EA7, 0xBCB6,
+    0x7EA8, 0xE6FD,
+    0x7EA9, 0xE6FE,
+    0x7EAA, 0xBCCD,
+    0x7EAB, 0xC8D2,
+    0x7EAC, 0xCEB3,
+    0x7EAD, 0xE7A1,
+    0x7EAF, 0xB4BF,
+    0x7EB0, 0xE7A2,
+    0x7EB1, 0xC9B4,
+    0x7EB2, 0xB8D9,
+    0x7EB3, 0xC4C9,
+    0x7EB5, 0xD7DD,
+    0x7EB6, 0xC2DA,
+    0x7EB7, 0xB7D7,
+    0x7EB8, 0xD6BD,
+    0x7EB9, 0xCEC6,
+    0x7EBA, 0xB7C4,
+    0x7EBD, 0xC5A6,
+    0x7EBE, 0xE7A3,
+    0x7EBF, 0xCFDF,
+    0x7EC0, 0xE7A4,
+    0x7EC1, 0xE7A5,
+    0x7EC2, 0xE7A6,
+    0x7EC3, 0xC1B7,
+    0x7EC4, 0xD7E9,
+    0x7EC5, 0xC9F0,
+    0x7EC6, 0xCFB8,
+    0x7EC7, 0xD6AF,
+    0x7EC8, 0xD6D5,
+    0x7EC9, 0xE7A7,
+    0x7ECA, 0xB0ED,
+    0x7ECB, 0xE7A8,
+    0x7ECC, 0xE7A9,
+    0x7ECD, 0xC9DC,
+    0x7ECE, 0xD2EF,
+    0x7ECF, 0xBEAD,
+    0x7ED0, 0xE7AA,
+    0x7ED1, 0xB0F3,
+    0x7ED2, 0xC8DE,
+    0x7ED3, 0xBDE1,
+    0x7ED4, 0xE7AB,
+    0x7ED5, 0xC8C6,
+    0x7ED7, 0xE7AC,
+    0x7ED8, 0xBBE6,
+    0x7ED9, 0xB8F8,
+    0x7EDA, 0xD1A4,
+    0x7EDB, 0xE7AD,
+    0x7EDC, 0xC2E7,
+    0x7EDD, 0xBEF8,
+    0x7EDE, 0xBDCA,
+    0x7EDF, 0xCDB3,
+    0x7EE0, 0xE7AE,
+    0x7EE1, 0xE7AF,
+    0x7EE2, 0xBEEE,
+    0x7EE3, 0xD0E5,
+    0x7EE5, 0xCBE7,
+    0x7EE6, 0xCCD0,
+    0x7EE7, 0xBCCC,
+    0x7EE8, 0xE7B0,
+    0x7EE9, 0xBCA8,
+    0x7EEA, 0xD0F7,
+    0x7EEB, 0xE7B1,
+    0x7EED, 0xD0F8,
+    0x7EEE, 0xE7B2,
+    0x7EEF, 0xE7B3,
+    0x7EF0, 0xB4C2,
+    0x7EF1, 0xE7B4,
+    0x7EF2, 0xE7B5,
+    0x7EF3, 0xC9FE,
+    0x7EF4, 0xCEAC,
+    0x7EF5, 0xC3E0,
+    0x7EF6, 0xE7B7,
+    0x7EF7, 0xB1C1,
+    0x7EF8, 0xB3F1,
+    0x7EFA, 0xE7B8,
+    0x7EFB, 0xE7B9,
+    0x7EFC, 0xD7DB,
+    0x7EFD, 0xD5C0,
+    0x7EFE, 0xE7BA,
+    0x7EFF, 0xC2CC,
+    0x7F00, 0xD7BA,
+    0x7F01, 0xE7BB,
+    0x7F02, 0xE7BC,
+    0x7F03, 0xE7BD,
+    0x7F04, 0xBCEA,
+    0x7F05, 0xC3E5,
+    0x7F06, 0xC0C2,
+    0x7F07, 0xE7BE,
+    0x7F08, 0xE7BF,
+    0x7F09, 0xBCA9,
+    0x7F0B, 0xE7C0,
+    0x7F0C, 0xE7C1,
+    0x7F0D, 0xE7B6,
+    0x7F0E, 0xB6D0,
+    0x7F0F, 0xE7C2,
+    0x7F11, 0xE7C3,
+    0x7F12, 0xE7C4,
+    0x7F13, 0xBBBA,
+    0x7F14, 0xB5DE,
+    0x7F15, 0xC2C6,
+    0x7F16, 0xB1E0,
+    0x7F17, 0xE7C5,
+    0x7F18, 0xD4B5,
+    0x7F19, 0xE7C6,
+    0x7F1A, 0xB8BF,
+    0x7F1B, 0xE7C8,
+    0x7F1C, 0xE7C7,
+    0x7F1D, 0xB7EC,
+    0x7F1F, 0xE7C9,
+    0x7F20, 0xB2F8,
+    0x7F21, 0xE7CA,
+    0x7F22, 0xE7CB,
+    0x7F23, 0xE7CC,
+    0x7F24, 0xE7CD,
+    0x7F25, 0xE7CE,
+    0x7F26, 0xE7CF,
+    0x7F27, 0xE7D0,
+    0x7F28, 0xD3A7,
+    0x7F29, 0xCBF5,
+    0x7F2A, 0xE7D1,
+    0x7F2B, 0xE7D2,
+    0x7F2C, 0xE7D3,
+    0x7F2D, 0xE7D4,
+    0x7F2E, 0xC9C9,
+    0x7F2F, 0xE7D5,
+    0x7F30, 0xE7D6,
+    0x7F31, 0xE7D7,
+    0x7F32, 0xE7D8,
+    0x7F33, 0xE7D9,
+    0x7F34, 0xBDC9,
+    0x7F35, 0xE7DA,
+    0x7F36, 0xF3BE,
+    0x7F38, 0xB8D7,
+    0x7F3A, 0xC8B1,
+    0x7F42, 0xF3BF,
+    0x7F44, 0xF3C0,
+    0x7F45, 0xF3C1,
+    0x7F50, 0xB9DE,
+    0x7F51, 0xCDF8,
+    0x7F54, 0xD8E8,
+    0x7F55, 0xBAB1,
+    0x7F57, 0xC2DE,
+    0x7F58, 0xEEB7,
+    0x7F5A, 0xB7A3,
+    0x7F5F, 0xEEB9,
+    0x7F61, 0xEEB8,
+    0x7F62, 0xB0D5,
+    0x7F68, 0xEEBB,
+    0x7F69, 0xD5D6,
+    0x7F6A, 0xD7EF,
+    0x7F6E, 0xD6C3,
+    0x7F71, 0xEEBD,
+    0x7F72, 0xCAF0,
+    0x7F74, 0xEEBC,
+    0x7F79, 0xEEBE,
+    0x7F7E, 0xEEC0,
+    0x7F81, 0xEEBF,
+    0x7F8A, 0xD1F2,
+    0x7F8C, 0xC7BC,
+    0x7F8E, 0xC3C0,
+    0x7F94, 0xB8E1,
+    0x7F9A, 0xC1E7,
+    0x7F9D, 0xF4C6,
+    0x7F9E, 0xD0DF,
+    0x7F9F, 0xF4C7,
+    0x7FA1, 0xCFDB,
+    0x7FA4, 0xC8BA,
+    0x7FA7, 0xF4C8,
+    0x7FAF, 0xF4C9,
+    0x7FB0, 0xF4CA,
+    0x7FB2, 0xF4CB,
+    0x7FB8, 0xD9FA,
+    0x7FB9, 0xB8FE,
+    0x7FBC, 0xE5F1,
+    0x7FBD, 0xD3F0,
+    0x7FBF, 0xF4E0,
+    0x7FC1, 0xCECC,
+    0x7FC5, 0xB3E1,
+    0x7FCA, 0xF1B4,
+    0x7FCC, 0xD2EE,
+    0x7FCE, 0xF4E1,
+    0x7FD4, 0xCFE8,
+    0x7FD5, 0xF4E2,
+    0x7FD8, 0xC7CC,
+    0x7FDF, 0xB5D4,
+    0x7FE0, 0xB4E4,
+    0x7FE1, 0xF4E4,
+    0x7FE5, 0xF4E3,
+    0x7FE6, 0xF4E5,
+    0x7FE9, 0xF4E6,
+    0x7FEE, 0xF4E7,
+    0x7FF0, 0xBAB2,
+    0x7FF1, 0xB0BF,
+    0x7FF3, 0xF4E8,
+    0x7FFB, 0xB7AD,
+    0x7FFC, 0xD2ED,
+    0x8000, 0xD2AB,
+    0x8001, 0xC0CF,
+    0x8003, 0xBFBC,
+    0x8004, 0xEBA3,
+    0x8005, 0xD5DF,
+    0x8006, 0xEAC8,
+    0x800B, 0xF1F3,
+    0x800C, 0xB6F8,
+    0x800D, 0xCBA3,
+    0x8010, 0xC4CD,
+    0x8012, 0xF1E7,
+    0x8014, 0xF1E8,
+    0x8015, 0xB8FB,
+    0x8016, 0xF1E9,
+    0x8017, 0xBAC4,
+    0x8018, 0xD4C5,
+    0x8019, 0xB0D2,
+    0x801C, 0xF1EA,
+    0x8020, 0xF1EB,
+    0x8022, 0xF1EC,
+    0x8025, 0xF1ED,
+    0x8026, 0xF1EE,
+    0x8027, 0xF1EF,
+    0x8028, 0xF1F1,
+    0x8029, 0xF1F0,
+    0x802A, 0xC5D5,
+    0x8031, 0xF1F2,
+    0x8033, 0xB6FA,
+    0x8035, 0xF1F4,
+    0x8036, 0xD2AE,
+    0x8037, 0xDEC7,
+    0x8038, 0xCBCA,
+    0x803B, 0xB3DC,
+    0x803D, 0xB5A2,
+    0x803F, 0xB9A2,
+    0x8042, 0xC4F4,
+    0x8043, 0xF1F5,
+    0x8046, 0xF1F6,
+    0x804A, 0xC1C4,
+    0x804B, 0xC1FB,
+    0x804C, 0xD6B0,
+    0x804D, 0xF1F7,
+    0x8052, 0xF1F8,
+    0x8054, 0xC1AA,
+    0x8058, 0xC6B8,
+    0x805A, 0xBEDB,
+    0x8069, 0xF1F9,
+    0x806A, 0xB4CF,
+    0x8071, 0xF1FA,
+    0x807F, 0xEDB2,
+    0x8080, 0xEDB1,
+    0x8083, 0xCBE0,
+    0x8084, 0xD2DE,
+    0x8086, 0xCBC1,
+    0x8087, 0xD5D8,
+    0x8089, 0xC8E2,
+    0x808B, 0xC0DF,
+    0x808C, 0xBCA1,
+    0x8093, 0xEBC1,
+    0x8096, 0xD0A4,
+    0x8098, 0xD6E2,
+    0x809A, 0xB6C7,
+    0x809B, 0xB8D8,
+    0x809C, 0xEBC0,
+    0x809D, 0xB8CE,
+    0x809F, 0xEBBF,
+    0x80A0, 0xB3A6,
+    0x80A1, 0xB9C9,
+    0x80A2, 0xD6AB,
+    0x80A4, 0xB7F4,
+    0x80A5, 0xB7CA,
+    0x80A9, 0xBCE7,
+    0x80AA, 0xB7BE,
+    0x80AB, 0xEBC6,
+    0x80AD, 0xEBC7,
+    0x80AE, 0xB0B9,
+    0x80AF, 0xBFCF,
+    0x80B1, 0xEBC5,
+    0x80B2, 0xD3FD,
+    0x80B4, 0xEBC8,
+    0x80B7, 0xEBC9,
+    0x80BA, 0xB7CE,
+    0x80BC, 0xEBC2,
+    0x80BD, 0xEBC4,
+    0x80BE, 0xC9F6,
+    0x80BF, 0xD6D7,
+    0x80C0, 0xD5CD,
+    0x80C1, 0xD0B2,
+    0x80C2, 0xEBCF,
+    0x80C3, 0xCEB8,
+    0x80C4, 0xEBD0,
+    0x80C6, 0xB5A8,
+    0x80CC, 0xB1B3,
+    0x80CD, 0xEBD2,
+    0x80CE, 0xCCA5,
+    0x80D6, 0xC5D6,
+    0x80D7, 0xEBD3,
+    0x80D9, 0xEBD1,
+    0x80DA, 0xC5DF,
+    0x80DB, 0xEBCE,
+    0x80DC, 0xCAA4,
+    0x80DD, 0xEBD5,
+    0x80DE, 0xB0FB,
+    0x80E1, 0xBAFA,
+    0x80E4, 0xD8B7,
+    0x80E5, 0xF1E3,
+    0x80E7, 0xEBCA,
+    0x80E8, 0xEBCB,
+    0x80E9, 0xEBCC,
+    0x80EA, 0xEBCD,
+    0x80EB, 0xEBD6,
+    0x80EC, 0xE6C0,
+    0x80ED, 0xEBD9,
+    0x80EF, 0xBFE8,
+    0x80F0, 0xD2C8,
+    0x80F1, 0xEBD7,
+    0x80F2, 0xEBDC,
+    0x80F3, 0xB8EC,
+    0x80F4, 0xEBD8,
+    0x80F6, 0xBDBA,
+    0x80F8, 0xD0D8,
+    0x80FA, 0xB0B7,
+    0x80FC, 0xEBDD,
+    0x80FD, 0xC4DC,
+    0x8102, 0xD6AC,
+    0x8106, 0xB4E0,
+    0x8109, 0xC2F6,
+    0x810A, 0xBCB9,
+    0x810D, 0xEBDA,
+    0x810E, 0xEBDB,
+    0x810F, 0xD4E0,
+    0x8110, 0xC6EA,
+    0x8111, 0xC4D4,
+    0x8112, 0xEBDF,
+    0x8113, 0xC5A7,
+    0x8114, 0xD9F5,
+    0x8116, 0xB2B1,
+    0x8118, 0xEBE4,
+    0x811A, 0xBDC5,
+    0x811E, 0xEBE2,
+    0x812C, 0xEBE3,
+    0x812F, 0xB8AC,
+    0x8131, 0xCDD1,
+    0x8132, 0xEBE5,
+    0x8136, 0xEBE1,
+    0x8138, 0xC1B3,
+    0x813E, 0xC6A2,
+    0x8146, 0xCCF3,
+    0x8148, 0xEBE6,
+    0x814A, 0xC0B0,
+    0x814B, 0xD2B8,
+    0x814C, 0xEBE7,
+    0x8150, 0xB8AF,
+    0x8151, 0xB8AD,
+    0x8153, 0xEBE8,
+    0x8154, 0xC7BB,
+    0x8155, 0xCDF3,
+    0x8159, 0xEBEA,
+    0x815A, 0xEBEB,
+    0x8160, 0xEBED,
+    0x8165, 0xD0C8,
+    0x8167, 0xEBF2,
+    0x8169, 0xEBEE,
+    0x816D, 0xEBF1,
+    0x816E, 0xC8F9,
+    0x8170, 0xD1FC,
+    0x8171, 0xEBEC,
+    0x8174, 0xEBE9,
+    0x8179, 0xB8B9,
+    0x817A, 0xCFD9,
+    0x817B, 0xC4E5,
+    0x817C, 0xEBEF,
+    0x817D, 0xEBF0,
+    0x817E, 0xCCDA,
+    0x817F, 0xCDC8,
+    0x8180, 0xB0F2,
+    0x8182, 0xEBF6,
+    0x8188, 0xEBF5,
+    0x818A, 0xB2B2,
+    0x818F, 0xB8E0,
+    0x8191, 0xEBF7,
+    0x8198, 0xB1EC,
+    0x819B, 0xCCC5,
+    0x819C, 0xC4A4,
+    0x819D, 0xCFA5,
+    0x81A3, 0xEBF9,
+    0x81A6, 0xECA2,
+    0x81A8, 0xC5F2,
+    0x81AA, 0xEBFA,
+    0x81B3, 0xC9C5,
+    0x81BA, 0xE2DF,
+    0x81BB, 0xEBFE,
+    0x81C0, 0xCDCE,
+    0x81C1, 0xECA1,
+    0x81C2, 0xB1DB,
+    0x81C3, 0xD3B7,
+    0x81C6, 0xD2DC,
+    0x81CA, 0xEBFD,
+    0x81CC, 0xEBFB,
+    0x81E3, 0xB3BC,
+    0x81E7, 0xEAB0,
+    0x81EA, 0xD7D4,
+    0x81EC, 0xF4AB,
+    0x81ED, 0xB3F4,
+    0x81F3, 0xD6C1,
+    0x81F4, 0xD6C2,
+    0x81FB, 0xD5E9,
+    0x81FC, 0xBECA,
+    0x81FE, 0xF4A7,
+    0x8200, 0xD2A8,
+    0x8201, 0xF4A8,
+    0x8202, 0xF4A9,
+    0x8204, 0xF4AA,
+    0x8205, 0xBECB,
+    0x8206, 0xD3DF,
+    0x820C, 0xC9E0,
+    0x820D, 0xC9E1,
+    0x8210, 0xF3C2,
+    0x8212, 0xCAE6,
+    0x8214, 0xCCF2,
+    0x821B, 0xE2B6,
+    0x821C, 0xCBB4,
+    0x821E, 0xCEE8,
+    0x821F, 0xD6DB,
+    0x8221, 0xF4AD,
+    0x8222, 0xF4AE,
+    0x8223, 0xF4AF,
+    0x8228, 0xF4B2,
+    0x822A, 0xBABD,
+    0x822B, 0xF4B3,
+    0x822C, 0xB0E3,
+    0x822D, 0xF4B0,
+    0x822F, 0xF4B1,
+    0x8230, 0xBDA2,
+    0x8231, 0xB2D5,
+    0x8233, 0xF4B6,
+    0x8234, 0xF4B7,
+    0x8235, 0xB6E6,
+    0x8236, 0xB2B0,
+    0x8237, 0xCFCF,
+    0x8238, 0xF4B4,
+    0x8239, 0xB4AC,
+    0x823B, 0xF4B5,
+    0x823E, 0xF4B8,
+    0x8244, 0xF4B9,
+    0x8247, 0xCDA7,
+    0x8249, 0xF4BA,
+    0x824B, 0xF4BB,
+    0x824F, 0xF4BC,
+    0x8258, 0xCBD2,
+    0x825A, 0xF4BD,
+    0x825F, 0xF4BE,
+    0x8268, 0xF4BF,
+    0x826E, 0xF4DE,
+    0x826F, 0xC1BC,
+    0x8270, 0xBCE8,
+    0x8272, 0xC9AB,
+    0x8273, 0xD1DE,
+    0x8274, 0xE5F5,
+    0x8279, 0xDCB3,
+    0x827A, 0xD2D5,
+    0x827D, 0xDCB4,
+    0x827E, 0xB0AC,
+    0x827F, 0xDCB5,
+    0x8282, 0xBDDA,
+    0x8284, 0xDCB9,
+    0x8288, 0xD8C2,
+    0x828A, 0xDCB7,
+    0x828B, 0xD3F3,
+    0x828D, 0xC9D6,
+    0x828E, 0xDCBA,
+    0x828F, 0xDCB6,
+    0x8291, 0xDCBB,
+    0x8292, 0xC3A2,
+    0x8297, 0xDCBC,
+    0x8298, 0xDCC5,
+    0x8299, 0xDCBD,
+    0x829C, 0xCEDF,
+    0x829D, 0xD6A5,
+    0x829F, 0xDCCF,
+    0x82A1, 0xDCCD,
+    0x82A4, 0xDCD2,
+    0x82A5, 0xBDE6,
+    0x82A6, 0xC2AB,
+    0x82A8, 0xDCB8,
+    0x82A9, 0xDCCB,
+    0x82AA, 0xDCCE,
+    0x82AB, 0xDCBE,
+    0x82AC, 0xB7D2,
+    0x82AD, 0xB0C5,
+    0x82AE, 0xDCC7,
+    0x82AF, 0xD0BE,
+    0x82B0, 0xDCC1,
+    0x82B1, 0xBBA8,
+    0x82B3, 0xB7BC,
+    0x82B4, 0xDCCC,
+    0x82B7, 0xDCC6,
+    0x82B8, 0xDCBF,
+    0x82B9, 0xC7DB,
+    0x82BD, 0xD1BF,
+    0x82BE, 0xDCC0,
+    0x82C1, 0xDCCA,
+    0x82C4, 0xDCD0,
+    0x82C7, 0xCEAD,
+    0x82C8, 0xDCC2,
+    0x82CA, 0xDCC3,
+    0x82CB, 0xDCC8,
+    0x82CC, 0xDCC9,
+    0x82CD, 0xB2D4,
+    0x82CE, 0xDCD1,
+    0x82CF, 0xCBD5,
+    0x82D1, 0xD4B7,
+    0x82D2, 0xDCDB,
+    0x82D3, 0xDCDF,
+    0x82D4, 0xCCA6,
+    0x82D5, 0xDCE6,
+    0x82D7, 0xC3E7,
+    0x82D8, 0xDCDC,
+    0x82DB, 0xBFC1,
+    0x82DC, 0xDCD9,
+    0x82DE, 0xB0FA,
+    0x82DF, 0xB9B6,
+    0x82E0, 0xDCE5,
+    0x82E1, 0xDCD3,
+    0x82E3, 0xDCC4,
+    0x82E4, 0xDCD6,
+    0x82E5, 0xC8F4,
+    0x82E6, 0xBFE0,
+    0x82EB, 0xC9BB,
+    0x82EF, 0xB1BD,
+    0x82F1, 0xD3A2,
+    0x82F4, 0xDCDA,
+    0x82F7, 0xDCD5,
+    0x82F9, 0xC6BB,
+    0x82FB, 0xDCDE,
+    0x8301, 0xD7C2,
+    0x8302, 0xC3AF,
+    0x8303, 0xB7B6,
+    0x8304, 0xC7D1,
+    0x8305, 0xC3A9,
+    0x8306, 0xDCE2,
+    0x8307, 0xDCD8,
+    0x8308, 0xDCEB,
+    0x8309, 0xDCD4,
+    0x830C, 0xDCDD,
+    0x830E, 0xBEA5,
+    0x830F, 0xDCD7,
+    0x8311, 0xDCE0,
+    0x8314, 0xDCE3,
+    0x8315, 0xDCE4,
+    0x8317, 0xDCF8,
+    0x831A, 0xDCE1,
+    0x831B, 0xDDA2,
+    0x831C, 0xDCE7,
+    0x8327, 0xBCEB,
+    0x8328, 0xB4C4,
+    0x832B, 0xC3A3,
+    0x832C, 0xB2E7,
+    0x832D, 0xDCFA,
+    0x832F, 0xDCF2,
+    0x8331, 0xDCEF,
+    0x8333, 0xDCFC,
+    0x8334, 0xDCEE,
+    0x8335, 0xD2F0,
+    0x8336, 0xB2E8,
+    0x8338, 0xC8D7,
+    0x8339, 0xC8E3,
+    0x833A, 0xDCFB,
+    0x833C, 0xDCED,
+    0x8340, 0xDCF7,
+    0x8343, 0xDCF5,
+    0x8346, 0xBEA3,
+    0x8347, 0xDCF4,
+    0x8349, 0xB2DD,
+    0x834F, 0xDCF3,
+    0x8350, 0xBCF6,
+    0x8351, 0xDCE8,
+    0x8352, 0xBBC4,
+    0x8354, 0xC0F3,
+    0x835A, 0xBCD4,
+    0x835B, 0xDCE9,
+    0x835C, 0xDCEA,
+    0x835E, 0xDCF1,
+    0x835F, 0xDCF6,
+    0x8360, 0xDCF9,
+    0x8361, 0xB5B4,
+    0x8363, 0xC8D9,
+    0x8364, 0xBBE7,
+    0x8365, 0xDCFE,
+    0x8366, 0xDCFD,
+    0x8367, 0xD3AB,
+    0x8368, 0xDDA1,
+    0x8369, 0xDDA3,
+    0x836A, 0xDDA5,
+    0x836B, 0xD2F1,
+    0x836C, 0xDDA4,
+    0x836D, 0xDDA6,
+    0x836E, 0xDDA7,
+    0x836F, 0xD2A9,
+    0x8377, 0xBAC9,
+    0x8378, 0xDDA9,
+    0x837B, 0xDDB6,
+    0x837C, 0xDDB1,
+    0x837D, 0xDDB4,
+    0x8385, 0xDDB0,
+    0x8386, 0xC6CE,
+    0x8389, 0xC0F2,
+    0x838E, 0xC9AF,
+    0x8392, 0xDCEC,
+    0x8393, 0xDDAE,
+    0x8398, 0xDDB7,
+    0x839B, 0xDCF0,
+    0x839C, 0xDDAF,
+    0x839E, 0xDDB8,
+    0x83A0, 0xDDAC,
+    0x83A8, 0xDDB9,
+    0x83A9, 0xDDB3,
+    0x83AA, 0xDDAD,
+    0x83AB, 0xC4AA,
+    0x83B0, 0xDDA8,
+    0x83B1, 0xC0B3,
+    0x83B2, 0xC1AB,
+    0x83B3, 0xDDAA,
+    0x83B4, 0xDDAB,
+    0x83B6, 0xDDB2,
+    0x83B7, 0xBBF1,
+    0x83B8, 0xDDB5,
+    0x83B9, 0xD3A8,
+    0x83BA, 0xDDBA,
+    0x83BC, 0xDDBB,
+    0x83BD, 0xC3A7,
+    0x83C0, 0xDDD2,
+    0x83C1, 0xDDBC,
+    0x83C5, 0xDDD1,
+    0x83C7, 0xB9BD,
+    0x83CA, 0xBED5,
+    0x83CC, 0xBEFA,
+    0x83CF, 0xBACA,
+    0x83D4, 0xDDCA,
+    0x83D6, 0xDDC5,
+    0x83D8, 0xDDBF,
+    0x83DC, 0xB2CB,
+    0x83DD, 0xDDC3,
+    0x83DF, 0xDDCB,
+    0x83E0, 0xB2A4,
+    0x83E1, 0xDDD5,
+    0x83E5, 0xDDBE,
+    0x83E9, 0xC6D0,
+    0x83EA, 0xDDD0,
+    0x83F0, 0xDDD4,
+    0x83F1, 0xC1E2,
+    0x83F2, 0xB7C6,
+    0x83F8, 0xDDCE,
+    0x83F9, 0xDDCF,
+    0x83FD, 0xDDC4,
+    0x8401, 0xDDBD,
+    0x8403, 0xDDCD,
+    0x8404, 0xCCD1,
+    0x8406, 0xDDC9,
+    0x840B, 0xDDC2,
+    0x840C, 0xC3C8,
+    0x840D, 0xC6BC,
+    0x840E, 0xCEAE,
+    0x840F, 0xDDCC,
+    0x8411, 0xDDC8,
+    0x8418, 0xDDC1,
+    0x841C, 0xDDC6,
+    0x841D, 0xC2DC,
+    0x8424, 0xD3A9,
+    0x8425, 0xD3AA,
+    0x8426, 0xDDD3,
+    0x8427, 0xCFF4,
+    0x8428, 0xC8F8,
+    0x8431, 0xDDE6,
+    0x8438, 0xDDC7,
+    0x843C, 0xDDE0,
+    0x843D, 0xC2E4,
+    0x8446, 0xDDE1,
+    0x8451, 0xDDD7,
+    0x8457, 0xD6F8,
+    0x8459, 0xDDD9,
+    0x845A, 0xDDD8,
+    0x845B, 0xB8F0,
+    0x845C, 0xDDD6,
+    0x8461, 0xC6CF,
+    0x8463, 0xB6AD,
+    0x8469, 0xDDE2,
+    0x846B, 0xBAF9,
+    0x846C, 0xD4E1,
+    0x846D, 0xDDE7,
+    0x8471, 0xB4D0,
+    0x8473, 0xDDDA,
+    0x8475, 0xBFFB,
+    0x8476, 0xDDE3,
+    0x8478, 0xDDDF,
+    0x847A, 0xDDDD,
+    0x8482, 0xB5D9,
+    0x8487, 0xDDDB,
+    0x8488, 0xDDDC,
+    0x8489, 0xDDDE,
+    0x848B, 0xBDAF,
+    0x848C, 0xDDE4,
+    0x848E, 0xDDE5,
+    0x8497, 0xDDF5,
+    0x8499, 0xC3C9,
+    0x849C, 0xCBE2,
+    0x84A1, 0xDDF2,
+    0x84AF, 0xD8E1,
+    0x84B2, 0xC6D1,
+    0x84B4, 0xDDF4,
+    0x84B8, 0xD5F4,
+    0x84B9, 0xDDF3,
+    0x84BA, 0xDDF0,
+    0x84BD, 0xDDEC,
+    0x84BF, 0xDDEF,
+    0x84C1, 0xDDE8,
+    0x84C4, 0xD0EE,
+    0x84C9, 0xC8D8,
+    0x84CA, 0xDDEE,
+    0x84CD, 0xDDE9,
+    0x84D0, 0xDDEA,
+    0x84D1, 0xCBF2,
+    0x84D3, 0xDDED,
+    0x84D6, 0xB1CD,
+    0x84DD, 0xC0B6,
+    0x84DF, 0xBCBB,
+    0x84E0, 0xDDF1,
+    0x84E3, 0xDDF7,
+    0x84E5, 0xDDF6,
+    0x84E6, 0xDDEB,
+    0x84EC, 0xC5EE,
+    0x84F0, 0xDDFB,
+    0x84FC, 0xDEA4,
+    0x84FF, 0xDEA3,
+    0x850C, 0xDDF8,
+    0x8511, 0xC3EF,
+    0x8513, 0xC2FB,
+    0x8517, 0xD5E1,
+    0x851A, 0xCEB5,
+    0x851F, 0xDDFD,
+    0x8521, 0xB2CC,
+    0x852B, 0xC4E8,
+    0x852C, 0xCADF,
+    0x8537, 0xC7BE,
+    0x8538, 0xDDFA,
+    0x8539, 0xDDFC,
+    0x853A, 0xDDFE,
+    0x853B, 0xDEA2,
+    0x853C, 0xB0AA,
+    0x853D, 0xB1CE,
+    0x8543, 0xDEAC,
+    0x8548, 0xDEA6,
+    0x8549, 0xBDB6,
+    0x854A, 0xC8EF,
+    0x8556, 0xDEA1,
+    0x8559, 0xDEA5,
+    0x855E, 0xDEA9,
+    0x8564, 0xDEA8,
+    0x8568, 0xDEA7,
+    0x8572, 0xDEAD,
+    0x8574, 0xD4CC,
+    0x8579, 0xDEB3,
+    0x857A, 0xDEAA,
+    0x857B, 0xDEAE,
+    0x857E, 0xC0D9,
+    0x8584, 0xB1A1,
+    0x8585, 0xDEB6,
+    0x8587, 0xDEB1,
+    0x858F, 0xDEB2,
+    0x859B, 0xD1A6,
+    0x859C, 0xDEB5,
+    0x85A4, 0xDEAF,
+    0x85A8, 0xDEB0,
+    0x85AA, 0xD0BD,
+    0x85AE, 0xDEB4,
+    0x85AF, 0xCAED,
+    0x85B0, 0xDEB9,
+    0x85B7, 0xDEB8,
+    0x85B9, 0xDEB7,
+    0x85C1, 0xDEBB,
+    0x85C9, 0xBDE5,
+    0x85CF, 0xB2D8,
+    0x85D0, 0xC3EA,
+    0x85D3, 0xDEBA,
+    0x85D5, 0xC5BA,
+    0x85DC, 0xDEBC,
+    0x85E4, 0xCCD9,
+    0x85E9, 0xB7AA,
+    0x85FB, 0xD4E5,
+    0x85FF, 0xDEBD,
+    0x8605, 0xDEBF,
+    0x8611, 0xC4A2,
+    0x8616, 0xDEC1,
+    0x8627, 0xDEBE,
+    0x8629, 0xDEC0,
+    0x8638, 0xD5BA,
+    0x863C, 0xDEC2,
+    0x864D, 0xF2AE,
+    0x864E, 0xBBA2,
+    0x864F, 0xC2B2,
+    0x8650, 0xC5B0,
+    0x8651, 0xC2C7,
+    0x8654, 0xF2AF,
+    0x865A, 0xD0E9,
+    0x865E, 0xD3DD,
+    0x8662, 0xEBBD,
+    0x866B, 0xB3E6,
+    0x866C, 0xF2B0,
+    0x866E, 0xF2B1,
+    0x8671, 0xCAAD,
+    0x8679, 0xBAE7,
+    0x867A, 0xF2B3,
+    0x867B, 0xF2B5,
+    0x867C, 0xF2B4,
+    0x867D, 0xCBE4,
+    0x867E, 0xCFBA,
+    0x867F, 0xF2B2,
+    0x8680, 0xCAB4,
+    0x8681, 0xD2CF,
+    0x8682, 0xC2EC,
+    0x868A, 0xCEC3,
+    0x868B, 0xF2B8,
+    0x868C, 0xB0F6,
+    0x868D, 0xF2B7,
+    0x8693, 0xF2BE,
+    0x8695, 0xB2CF,
+    0x869C, 0xD1C1,
+    0x869D, 0xF2BA,
+    0x86A3, 0xF2BC,
+    0x86A4, 0xD4E9,
+    0x86A7, 0xF2BB,
+    0x86A8, 0xF2B6,
+    0x86A9, 0xF2BF,
+    0x86AA, 0xF2BD,
+    0x86AC, 0xF2B9,
+    0x86AF, 0xF2C7,
+    0x86B0, 0xF2C4,
+    0x86B1, 0xF2C6,
+    0x86B4, 0xF2CA,
+    0x86B5, 0xF2C2,
+    0x86B6, 0xF2C0,
+    0x86BA, 0xF2C5,
+    0x86C0, 0xD6FB,
+    0x86C4, 0xF2C1,
+    0x86C6, 0xC7F9,
+    0x86C7, 0xC9DF,
+    0x86C9, 0xF2C8,
+    0x86CA, 0xB9C6,
+    0x86CB, 0xB5B0,
+    0x86CE, 0xF2C3,
+    0x86CF, 0xF2C9,
+    0x86D0, 0xF2D0,
+    0x86D1, 0xF2D6,
+    0x86D4, 0xBBD7,
+    0x86D8, 0xF2D5,
+    0x86D9, 0xCDDC,
+    0x86DB, 0xD6EB,
+    0x86DE, 0xF2D2,
+    0x86DF, 0xF2D4,
+    0x86E4, 0xB8F2,
+    0x86E9, 0xF2CB,
+    0x86ED, 0xF2CE,
+    0x86EE, 0xC2F9,
+    0x86F0, 0xD5DD,
+    0x86F1, 0xF2CC,
+    0x86F2, 0xF2CD,
+    0x86F3, 0xF2CF,
+    0x86F4, 0xF2D3,
+    0x86F8, 0xF2D9,
+    0x86F9, 0xD3BC,
+    0x86FE, 0xB6EA,
+    0x8700, 0xCAF1,
+    0x8702, 0xB7E4,
+    0x8703, 0xF2D7,
+    0x8707, 0xF2D8,
+    0x8708, 0xF2DA,
+    0x8709, 0xF2DD,
+    0x870A, 0xF2DB,
+    0x870D, 0xF2DC,
+    0x8712, 0xD1D1,
+    0x8713, 0xF2D1,
+    0x8715, 0xCDC9,
+    0x8717, 0xCECF,
+    0x8718, 0xD6A9,
+    0x871A, 0xF2E3,
+    0x871C, 0xC3DB,
+    0x871E, 0xF2E0,
+    0x8721, 0xC0AF,
+    0x8722, 0xF2EC,
+    0x8723, 0xF2DE,
+    0x8725, 0xF2E1,
+    0x8729, 0xF2E8,
+    0x872E, 0xF2E2,
+    0x8731, 0xF2E7,
+    0x8734, 0xF2E6,
+    0x8737, 0xF2E9,
+    0x873B, 0xF2DF,
+    0x873E, 0xF2E4,
+    0x873F, 0xF2EA,
+    0x8747, 0xD3AC,
+    0x8748, 0xF2E5,
+    0x8749, 0xB2F5,
+    0x874C, 0xF2F2,
+    0x874E, 0xD0AB,
+    0x8753, 0xF2F5,
+    0x8757, 0xBBC8,
+    0x8759, 0xF2F9,
+    0x8760, 0xF2F0,
+    0x8763, 0xF2F6,
+    0x8764, 0xF2F8,
+    0x8765, 0xF2FA,
+    0x876E, 0xF2F3,
+    0x8770, 0xF2F1,
+    0x8774, 0xBAFB,
+    0x8776, 0xB5FB,
+    0x877B, 0xF2EF,
+    0x877C, 0xF2F7,
+    0x877D, 0xF2ED,
+    0x877E, 0xF2EE,
+    0x8782, 0xF2EB,
+    0x8783, 0xF3A6,
+    0x8785, 0xF3A3,
+    0x8788, 0xF3A2,
+    0x878B, 0xF2F4,
+    0x878D, 0xC8DA,
+    0x8793, 0xF2FB,
+    0x8797, 0xF3A5,
+    0x879F, 0xC3F8,
+    0x87A8, 0xF2FD,
+    0x87AB, 0xF3A7,
+    0x87AC, 0xF3A9,
+    0x87AD, 0xF3A4,
+    0x87AF, 0xF2FC,
+    0x87B3, 0xF3AB,
+    0x87B5, 0xF3AA,
+    0x87BA, 0xC2DD,
+    0x87BD, 0xF3AE,
+    0x87C0, 0xF3B0,
+    0x87C6, 0xF3A1,
+    0x87CA, 0xF3B1,
+    0x87CB, 0xF3AC,
+    0x87D1, 0xF3AF,
+    0x87D2, 0xF2FE,
+    0x87D3, 0xF3AD,
+    0x87DB, 0xF3B2,
+    0x87E0, 0xF3B4,
+    0x87E5, 0xF3A8,
+    0x87EA, 0xF3B3,
+    0x87EE, 0xF3B5,
+    0x87F9, 0xD0B7,
+    0x87FE, 0xF3B8,
+    0x8803, 0xD9F9,
+    0x880A, 0xF3B9,
+    0x8813, 0xF3B7,
+    0x8815, 0xC8E4,
+    0x8816, 0xF3B6,
+    0x881B, 0xF3BA,
+    0x8821, 0xF3BB,
+    0x8822, 0xB4C0,
+    0x8832, 0xEEC3,
+    0x8839, 0xF3BC,
+    0x883C, 0xF3BD,
+    0x8840, 0xD1AA,
+    0x8844, 0xF4AC,
+    0x8845, 0xD0C6,
+    0x884C, 0xD0D0,
+    0x884D, 0xD1DC,
+    0x8854, 0xCFCE,
+    0x8857, 0xBDD6,
+    0x8859, 0xD1C3,
+    0x8861, 0xBAE2,
+    0x8862, 0xE1E9,
+    0x8863, 0xD2C2,
+    0x8864, 0xF1C2,
+    0x8865, 0xB2B9,
+    0x8868, 0xB1ED,
+    0x8869, 0xF1C3,
+    0x886B, 0xC9C0,
+    0x886C, 0xB3C4,
+    0x886E, 0xD9F2,
+    0x8870, 0xCBA5,
+    0x8872, 0xF1C4,
+    0x8877, 0xD6D4,
+    0x887D, 0xF1C5,
+    0x887E, 0xF4C0,
+    0x887F, 0xF1C6,
+    0x8881, 0xD4AC,
+    0x8882, 0xF1C7,
+    0x8884, 0xB0C0,
+    0x8885, 0xF4C1,
+    0x8888, 0xF4C2,
+    0x888B, 0xB4FC,
+    0x888D, 0xC5DB,
+    0x8892, 0xCCBB,
+    0x8896, 0xD0E4,
+    0x889C, 0xCDE0,
+    0x88A2, 0xF1C8,
+    0x88A4, 0xD9F3,
+    0x88AB, 0xB1BB,
+    0x88AD, 0xCFAE,
+    0x88B1, 0xB8A4,
+    0x88B7, 0xF1CA,
+    0x88BC, 0xF1CB,
+    0x88C1, 0xB2C3,
+    0x88C2, 0xC1D1,
+    0x88C5, 0xD7B0,
+    0x88C6, 0xF1C9,
+    0x88C9, 0xF1CC,
+    0x88CE, 0xF1CE,
+    0x88D2, 0xD9F6,
+    0x88D4, 0xD2E1,
+    0x88D5, 0xD4A3,
+    0x88D8, 0xF4C3,
+    0x88D9, 0xC8B9,
+    0x88DF, 0xF4C4,
+    0x88E2, 0xF1CD,
+    0x88E3, 0xF1CF,
+    0x88E4, 0xBFE3,
+    0x88E5, 0xF1D0,
+    0x88E8, 0xF1D4,
+    0x88F0, 0xF1D6,
+    0x88F1, 0xF1D1,
+    0x88F3, 0xC9D1,
+    0x88F4, 0xC5E1,
+    0x88F8, 0xC2E3,
+    0x88F9, 0xB9FC,
+    0x88FC, 0xF1D3,
+    0x88FE, 0xF1D5,
+    0x8902, 0xB9D3,
+    0x890A, 0xF1DB,
+    0x8910, 0xBAD6,
+    0x8912, 0xB0FD,
+    0x8913, 0xF1D9,
+    0x8919, 0xF1D8,
+    0x891A, 0xF1D2,
+    0x891B, 0xF1DA,
+    0x8921, 0xF1D7,
+    0x8925, 0xC8EC,
+    0x892A, 0xCDCA,
+    0x892B, 0xF1DD,
+    0x8930, 0xE5BD,
+    0x8934, 0xF1DC,
+    0x8936, 0xF1DE,
+    0x8941, 0xF1DF,
+    0x8944, 0xCFE5,
+    0x895E, 0xF4C5,
+    0x895F, 0xBDF3,
+    0x8966, 0xF1E0,
+    0x897B, 0xF1E1,
+    0x897F, 0xCEF7,
+    0x8981, 0xD2AA,
+    0x8983, 0xF1FB,
+    0x8986, 0xB8B2,
+    0x89C1, 0xBCFB,
+    0x89C2, 0xB9DB,
+    0x89C4, 0xB9E6,
+    0x89C5, 0xC3D9,
+    0x89C6, 0xCAD3,
+    0x89C7, 0xEAE8,
+    0x89C8, 0xC0C0,
+    0x89C9, 0xBEF5,
+    0x89CA, 0xEAE9,
+    0x89CB, 0xEAEA,
+    0x89CC, 0xEAEB,
+    0x89CE, 0xEAEC,
+    0x89CF, 0xEAED,
+    0x89D0, 0xEAEE,
+    0x89D1, 0xEAEF,
+    0x89D2, 0xBDC7,
+    0x89D6, 0xF5FB,
+    0x89DA, 0xF5FD,
+    0x89DC, 0xF5FE,
+    0x89DE, 0xF5FC,
+    0x89E3, 0xBDE2,
+    0x89E5, 0xF6A1,
+    0x89E6, 0xB4A5,
+    0x89EB, 0xF6A2,
+    0x89EF, 0xF6A3,
+    0x89F3, 0xECB2,
+    0x8A00, 0xD1D4,
+    0x8A07, 0xD9EA,
+    0x8A3E, 0xF6A4,
+    0x8A48, 0xEEBA,
+    0x8A79, 0xD5B2,
+    0x8A89, 0xD3FE,
+    0x8A8A, 0xCCDC,
+    0x8A93, 0xCAC4,
+    0x8B07, 0xE5C0,
+    0x8B26, 0xF6A5,
+    0x8B66, 0xBEAF,
+    0x8B6C, 0xC6A9,
+    0x8BA0, 0xDAA5,
+    0x8BA1, 0xBCC6,
+    0x8BA2, 0xB6A9,
+    0x8BA3, 0xB8BC,
+    0x8BA4, 0xC8CF,
+    0x8BA5, 0xBCA5,
+    0x8BA6, 0xDAA6,
+    0x8BA7, 0xDAA7,
+    0x8BA8, 0xCCD6,
+    0x8BA9, 0xC8C3,
+    0x8BAA, 0xDAA8,
+    0x8BAB, 0xC6FD,
+    0x8BAD, 0xD1B5,
+    0x8BAE, 0xD2E9,
+    0x8BAF, 0xD1B6,
+    0x8BB0, 0xBCC7,
+    0x8BB2, 0xBDB2,
+    0x8BB3, 0xBBE4,
+    0x8BB4, 0xDAA9,
+    0x8BB5, 0xDAAA,
+    0x8BB6, 0xD1C8,
+    0x8BB7, 0xDAAB,
+    0x8BB8, 0xD0ED,
+    0x8BB9, 0xB6EF,
+    0x8BBA, 0xC2DB,
+    0x8BBC, 0xCBCF,
+    0x8BBD, 0xB7ED,
+    0x8BBE, 0xC9E8,
+    0x8BBF, 0xB7C3,
+    0x8BC0, 0xBEF7,
+    0x8BC1, 0xD6A4,
+    0x8BC2, 0xDAAC,
+    0x8BC3, 0xDAAD,
+    0x8BC4, 0xC6C0,
+    0x8BC5, 0xD7E7,
+    0x8BC6, 0xCAB6,
+    0x8BC8, 0xD5A9,
+    0x8BC9, 0xCBDF,
+    0x8BCA, 0xD5EF,
+    0x8BCB, 0xDAAE,
+    0x8BCC, 0xD6DF,
+    0x8BCD, 0xB4CA,
+    0x8BCE, 0xDAB0,
+    0x8BCF, 0xDAAF,
+    0x8BD1, 0xD2EB,
+    0x8BD2, 0xDAB1,
+    0x8BD3, 0xDAB2,
+    0x8BD4, 0xDAB3,
+    0x8BD5, 0xCAD4,
+    0x8BD6, 0xDAB4,
+    0x8BD7, 0xCAAB,
+    0x8BD8, 0xDAB5,
+    0x8BD9, 0xDAB6,
+    0x8BDA, 0xB3CF,
+    0x8BDB, 0xD6EF,
+    0x8BDC, 0xDAB7,
+    0x8BDD, 0xBBB0,
+    0x8BDE, 0xB5AE,
+    0x8BDF, 0xDAB8,
+    0x8BE0, 0xDAB9,
+    0x8BE1, 0xB9EE,
+    0x8BE2, 0xD1AF,
+    0x8BE3, 0xD2E8,
+    0x8BE4, 0xDABA,
+    0x8BE5, 0xB8C3,
+    0x8BE6, 0xCFEA,
+    0x8BE7, 0xB2EF,
+    0x8BE8, 0xDABB,
+    0x8BE9, 0xDABC,
+    0x8BEB, 0xBDEB,
+    0x8BEC, 0xCEDC,
+    0x8BED, 0xD3EF,
+    0x8BEE, 0xDABD,
+    0x8BEF, 0xCEF3,
+    0x8BF0, 0xDABE,
+    0x8BF1, 0xD3D5,
+    0x8BF2, 0xBBE5,
+    0x8BF3, 0xDABF,
+    0x8BF4, 0xCBB5,
+    0x8BF5, 0xCBD0,
+    0x8BF6, 0xDAC0,
+    0x8BF7, 0xC7EB,
+    0x8BF8, 0xD6EE,
+    0x8BF9, 0xDAC1,
+    0x8BFA, 0xC5B5,
+    0x8BFB, 0xB6C1,
+    0x8BFC, 0xDAC2,
+    0x8BFD, 0xB7CC,
+    0x8BFE, 0xBFCE,
+    0x8BFF, 0xDAC3,
+    0x8C00, 0xDAC4,
+    0x8C01, 0xCBAD,
+    0x8C02, 0xDAC5,
+    0x8C03, 0xB5F7,
+    0x8C04, 0xDAC6,
+    0x8C05, 0xC1C2,
+    0x8C06, 0xD7BB,
+    0x8C07, 0xDAC7,
+    0x8C08, 0xCCB8,
+    0x8C0A, 0xD2EA,
+    0x8C0B, 0xC4B1,
+    0x8C0C, 0xDAC8,
+    0x8C0D, 0xB5FD,
+    0x8C0E, 0xBBD1,
+    0x8C0F, 0xDAC9,
+    0x8C10, 0xD0B3,
+    0x8C11, 0xDACA,
+    0x8C12, 0xDACB,
+    0x8C13, 0xCEBD,
+    0x8C14, 0xDACC,
+    0x8C15, 0xDACD,
+    0x8C16, 0xDACE,
+    0x8C17, 0xB2F7,
+    0x8C18, 0xDAD1,
+    0x8C19, 0xDACF,
+    0x8C1A, 0xD1E8,
+    0x8C1B, 0xDAD0,
+    0x8C1C, 0xC3D5,
+    0x8C1D, 0xDAD2,
+    0x8C1F, 0xDAD3,
+    0x8C20, 0xDAD4,
+    0x8C21, 0xDAD5,
+    0x8C22, 0xD0BB,
+    0x8C23, 0xD2A5,
+    0x8C24, 0xB0F9,
+    0x8C25, 0xDAD6,
+    0x8C26, 0xC7AB,
+    0x8C27, 0xDAD7,
+    0x8C28, 0xBDF7,
+    0x8C29, 0xC3A1,
+    0x8C2A, 0xDAD8,
+    0x8C2B, 0xDAD9,
+    0x8C2C, 0xC3FD,
+    0x8C2D, 0xCCB7,
+    0x8C2E, 0xDADA,
+    0x8C2F, 0xDADB,
+    0x8C30, 0xC0BE,
+    0x8C31, 0xC6D7,
+    0x8C32, 0xDADC,
+    0x8C33, 0xDADD,
+    0x8C34, 0xC7B4,
+    0x8C35, 0xDADE,
+    0x8C36, 0xDADF,
+    0x8C37, 0xB9C8,
+    0x8C41, 0xBBED,
+    0x8C46, 0xB6B9,
+    0x8C47, 0xF4F8,
+    0x8C49, 0xF4F9,
+    0x8C4C, 0xCDE3,
+    0x8C55, 0xF5B9,
+    0x8C5A, 0xEBE0,
+    0x8C61, 0xCFF3,
+    0x8C62, 0xBBBF,
+    0x8C6A, 0xBAC0,
+    0x8C6B, 0xD4A5,
+    0x8C73, 0xE1D9,
+    0x8C78, 0xF5F4,
+    0x8C79, 0xB1AA,
+    0x8C7A, 0xB2F2,
+    0x8C82, 0xF5F5,
+    0x8C85, 0xF5F7,
+    0x8C89, 0xBAD1,
+    0x8C8A, 0xF5F6,
+    0x8C8C, 0xC3B2,
+    0x8C94, 0xF5F9,
+    0x8C98, 0xF5F8,
+    0x8D1D, 0xB1B4,
+    0x8D1E, 0xD5EA,
+    0x8D1F, 0xB8BA,
+    0x8D21, 0xB9B1,
+    0x8D22, 0xB2C6,
+    0x8D23, 0xD4F0,
+    0x8D24, 0xCFCD,
+    0x8D25, 0xB0DC,
+    0x8D26, 0xD5CB,
+    0x8D27, 0xBBF5,
+    0x8D28, 0xD6CA,
+    0x8D29, 0xB7B7,
+    0x8D2A, 0xCCB0,
+    0x8D2B, 0xC6B6,
+    0x8D2C, 0xB1E1,
+    0x8D2D, 0xB9BA,
+    0x8D2E, 0xD6FC,
+    0x8D2F, 0xB9E1,
+    0x8D30, 0xB7A1,
+    0x8D31, 0xBCFA,
+    0x8D32, 0xEADA,
+    0x8D33, 0xEADB,
+    0x8D34, 0xCCF9,
+    0x8D35, 0xB9F3,
+    0x8D36, 0xEADC,
+    0x8D37, 0xB4FB,
+    0x8D38, 0xC3B3,
+    0x8D39, 0xB7D1,
+    0x8D3A, 0xBAD8,
+    0x8D3B, 0xEADD,
+    0x8D3C, 0xD4F4,
+    0x8D3D, 0xEADE,
+    0x8D3E, 0xBCD6,
+    0x8D3F, 0xBBDF,
+    0x8D40, 0xEADF,
+    0x8D41, 0xC1DE,
+    0x8D42, 0xC2B8,
+    0x8D43, 0xD4DF,
+    0x8D44, 0xD7CA,
+    0x8D45, 0xEAE0,
+    0x8D46, 0xEAE1,
+    0x8D47, 0xEAE4,
+    0x8D48, 0xEAE2,
+    0x8D49, 0xEAE3,
+    0x8D4A, 0xC9DE,
+    0x8D4B, 0xB8B3,
+    0x8D4C, 0xB6C4,
+    0x8D4D, 0xEAE5,
+    0x8D4E, 0xCAEA,
+    0x8D4F, 0xC9CD,
+    0x8D50, 0xB4CD,
+    0x8D53, 0xE2D9,
+    0x8D54, 0xC5E2,
+    0x8D55, 0xEAE6,
+    0x8D56, 0xC0B5,
+    0x8D58, 0xD7B8,
+    0x8D59, 0xEAE7,
+    0x8D5A, 0xD7AC,
+    0x8D5B, 0xC8FC,
+    0x8D5C, 0xD8D3,
+    0x8D5D, 0xD8CD,
+    0x8D5E, 0xD4DE,
+    0x8D60, 0xD4F9,
+    0x8D61, 0xC9C4,
+    0x8D62, 0xD3AE,
+    0x8D63, 0xB8D3,
+    0x8D64, 0xB3E0,
+    0x8D66, 0xC9E2,
+    0x8D67, 0xF4F6,
+    0x8D6B, 0xBAD5,
+    0x8D6D, 0xF4F7,
+    0x8D70, 0xD7DF,
+    0x8D73, 0xF4F1,
+    0x8D74, 0xB8B0,
+    0x8D75, 0xD5D4,
+    0x8D76, 0xB8CF,
+    0x8D77, 0xC6F0,
+    0x8D81, 0xB3C3,
+    0x8D84, 0xF4F2,
+    0x8D85, 0xB3AC,
+    0x8D8A, 0xD4BD,
+    0x8D8B, 0xC7F7,
+    0x8D91, 0xF4F4,
+    0x8D94, 0xF4F3,
+    0x8D9F, 0xCCCB,
+    0x8DA3, 0xC8A4,
+    0x8DB1, 0xF4F5,
+    0x8DB3, 0xD7E3,
+    0x8DB4, 0xC5BF,
+    0x8DB5, 0xF5C0,
+    0x8DB8, 0xF5BB,
+    0x8DBA, 0xF5C3,
+    0x8DBC, 0xF5C2,
+    0x8DBE, 0xD6BA,
+    0x8DBF, 0xF5C1,
+    0x8DC3, 0xD4BE,
+    0x8DC4, 0xF5C4,
+    0x8DC6, 0xF5CC,
+    0x8DCB, 0xB0CF,
+    0x8DCC, 0xB5F8,
+    0x8DCE, 0xF5C9,
+    0x8DCF, 0xF5CA,
+    0x8DD1, 0xC5DC,
+    0x8DD6, 0xF5C5,
+    0x8DD7, 0xF5C6,
+    0x8DDA, 0xF5C7,
+    0x8DDB, 0xF5CB,
+    0x8DDD, 0xBEE0,
+    0x8DDE, 0xF5C8,
+    0x8DDF, 0xB8FA,
+    0x8DE3, 0xF5D0,
+    0x8DE4, 0xF5D3,
+    0x8DE8, 0xBFE7,
+    0x8DEA, 0xB9F2,
+    0x8DEB, 0xF5BC,
+    0x8DEC, 0xF5CD,
+    0x8DEF, 0xC2B7,
+    0x8DF3, 0xCCF8,
+    0x8DF5, 0xBCF9,
+    0x8DF7, 0xF5CE,
+    0x8DF8, 0xF5CF,
+    0x8DF9, 0xF5D1,
+    0x8DFA, 0xB6E5,
+    0x8DFB, 0xF5D2,
+    0x8DFD, 0xF5D5,
+    0x8E05, 0xF5BD,
+    0x8E09, 0xF5D4,
+    0x8E0A, 0xD3BB,
+    0x8E0C, 0xB3EC,
+    0x8E0F, 0xCCA4,
+    0x8E14, 0xF5D6,
+    0x8E1D, 0xF5D7,
+    0x8E1E, 0xBEE1,
+    0x8E1F, 0xF5D8,
+    0x8E22, 0xCCDF,
+    0x8E23, 0xF5DB,
+    0x8E29, 0xB2C8,
+    0x8E2A, 0xD7D9,
+    0x8E2C, 0xF5D9,
+    0x8E2E, 0xF5DA,
+    0x8E2F, 0xF5DC,
+    0x8E31, 0xF5E2,
+    0x8E35, 0xF5E0,
+    0x8E39, 0xF5DF,
+    0x8E3A, 0xF5DD,
+    0x8E3D, 0xF5E1,
+    0x8E40, 0xF5DE,
+    0x8E41, 0xF5E4,
+    0x8E42, 0xF5E5,
+    0x8E44, 0xCCE3,
+    0x8E47, 0xE5BF,
+    0x8E48, 0xB5B8,
+    0x8E49, 0xF5E3,
+    0x8E4A, 0xF5E8,
+    0x8E4B, 0xCCA3,
+    0x8E51, 0xF5E6,
+    0x8E52, 0xF5E7,
+    0x8E59, 0xF5BE,
+    0x8E66, 0xB1C4,
+    0x8E69, 0xF5BF,
+    0x8E6C, 0xB5C5,
+    0x8E6D, 0xB2E4,
+    0x8E6F, 0xF5EC,
+    0x8E70, 0xF5E9,
+    0x8E72, 0xB6D7,
+    0x8E74, 0xF5ED,
+    0x8E76, 0xF5EA,
+    0x8E7C, 0xF5EB,
+    0x8E7F, 0xB4DA,
+    0x8E81, 0xD4EA,
+    0x8E85, 0xF5EE,
+    0x8E87, 0xB3F9,
+    0x8E8F, 0xF5EF,
+    0x8E90, 0xF5F1,
+    0x8E94, 0xF5F0,
+    0x8E9C, 0xF5F2,
+    0x8E9E, 0xF5F3,
+    0x8EAB, 0xC9ED,
+    0x8EAC, 0xB9AA,
+    0x8EAF, 0xC7FB,
+    0x8EB2, 0xB6E3,
+    0x8EBA, 0xCCC9,
+    0x8ECE, 0xEAA6,
+    0x8F66, 0xB3B5,
+    0x8F67, 0xD4FE,
+    0x8F68, 0xB9EC,
+    0x8F69, 0xD0F9,
+    0x8F6B, 0xE9ED,
+    0x8F6C, 0xD7AA,
+    0x8F6D, 0xE9EE,
+    0x8F6E, 0xC2D6,
+    0x8F6F, 0xC8ED,
+    0x8F70, 0xBAE4,
+    0x8F71, 0xE9EF,
+    0x8F72, 0xE9F0,
+    0x8F73, 0xE9F1,
+    0x8F74, 0xD6E1,
+    0x8F75, 0xE9F2,
+    0x8F76, 0xE9F3,
+    0x8F77, 0xE9F5,
+    0x8F78, 0xE9F4,
+    0x8F79, 0xE9F6,
+    0x8F7A, 0xE9F7,
+    0x8F7B, 0xC7E1,
+    0x8F7C, 0xE9F8,
+    0x8F7D, 0xD4D8,
+    0x8F7E, 0xE9F9,
+    0x8F7F, 0xBDCE,
+    0x8F81, 0xE9FA,
+    0x8F82, 0xE9FB,
+    0x8F83, 0xBDCF,
+    0x8F84, 0xE9FC,
+    0x8F85, 0xB8A8,
+    0x8F86, 0xC1BE,
+    0x8F87, 0xE9FD,
+    0x8F88, 0xB1B2,
+    0x8F89, 0xBBD4,
+    0x8F8A, 0xB9F5,
+    0x8F8B, 0xE9FE,
+    0x8F8D, 0xEAA1,
+    0x8F8E, 0xEAA2,
+    0x8F8F, 0xEAA3,
+    0x8F90, 0xB7F8,
+    0x8F91, 0xBCAD,
+    0x8F93, 0xCAE4,
+    0x8F94, 0xE0CE,
+    0x8F95, 0xD4AF,
+    0x8F96, 0xCFBD,
+    0x8F97, 0xD5B7,
+    0x8F98, 0xEAA4,
+    0x8F99, 0xD5DE,
+    0x8F9A, 0xEAA5,
+    0x8F9B, 0xD0C1,
+    0x8F9C, 0xB9BC,
+    0x8F9E, 0xB4C7,
+    0x8F9F, 0xB1D9,
+    0x8FA3, 0xC0B1,
+    0x8FA8, 0xB1E6,
+    0x8FA9, 0xB1E7,
+    0x8FAB, 0xB1E8,
+    0x8FB0, 0xB3BD,
+    0x8FB1, 0xC8E8,
+    0x8FB6, 0xE5C1,
+    0x8FB9, 0xB1DF,
+    0x8FBD, 0xC1C9,
+    0x8FBE, 0xB4EF,
+    0x8FC1, 0xC7A8,
+    0x8FC2, 0xD3D8,
+    0x8FC4, 0xC6F9,
+    0x8FC5, 0xD1B8,
+    0x8FC7, 0xB9FD,
+    0x8FC8, 0xC2F5,
+    0x8FCE, 0xD3AD,
+    0x8FD0, 0xD4CB,
+    0x8FD1, 0xBDFC,
+    0x8FD3, 0xE5C2,
+    0x8FD4, 0xB7B5,
+    0x8FD5, 0xE5C3,
+    0x8FD8, 0xBBB9,
+    0x8FD9, 0xD5E2,
+    0x8FDB, 0xBDF8,
+    0x8FDC, 0xD4B6,
+    0x8FDD, 0xCEA5,
+    0x8FDE, 0xC1AC,
+    0x8FDF, 0xB3D9,
+    0x8FE2, 0xCCF6,
+    0x8FE4, 0xE5C6,
+    0x8FE5, 0xE5C4,
+    0x8FE6, 0xE5C8,
+    0x8FE8, 0xE5CA,
+    0x8FE9, 0xE5C7,
+    0x8FEA, 0xB5CF,
+    0x8FEB, 0xC6C8,
+    0x8FED, 0xB5FC,
+    0x8FEE, 0xE5C5,
+    0x8FF0, 0xCAF6,
+    0x8FF3, 0xE5C9,
+    0x8FF7, 0xC3D4,
+    0x8FF8, 0xB1C5,
+    0x8FF9, 0xBCA3,
+    0x8FFD, 0xD7B7,
+    0x9000, 0xCDCB,
+    0x9001, 0xCBCD,
+    0x9002, 0xCACA,
+    0x9003, 0xCCD3,
+    0x9004, 0xE5CC,
+    0x9005, 0xE5CB,
+    0x9006, 0xC4E6,
+    0x9009, 0xD1A1,
+    0x900A, 0xD1B7,
+    0x900B, 0xE5CD,
+    0x900D, 0xE5D0,
+    0x900F, 0xCDB8,
+    0x9010, 0xD6F0,
+    0x9011, 0xE5CF,
+    0x9012, 0xB5DD,
+    0x9014, 0xCDBE,
+    0x9016, 0xE5D1,
+    0x9017, 0xB6BA,
+    0x901A, 0xCDA8,
+    0x901B, 0xB9E4,
+    0x901D, 0xCAC5,
+    0x901E, 0xB3D1,
+    0x901F, 0xCBD9,
+    0x9020, 0xD4EC,
+    0x9021, 0xE5D2,
+    0x9022, 0xB7EA,
+    0x9026, 0xE5CE,
+    0x902D, 0xE5D5,
+    0x902E, 0xB4FE,
+    0x902F, 0xE5D6,
+    0x9035, 0xE5D3,
+    0x9036, 0xE5D4,
+    0x9038, 0xD2DD,
+    0x903B, 0xC2DF,
+    0x903C, 0xB1C6,
+    0x903E, 0xD3E2,
+    0x9041, 0xB6DD,
+    0x9042, 0xCBEC,
+    0x9044, 0xE5D7,
+    0x9047, 0xD3F6,
+    0x904D, 0xB1E9,
+    0x904F, 0xB6F4,
+    0x9050, 0xE5DA,
+    0x9051, 0xE5D8,
+    0x9052, 0xE5D9,
+    0x9053, 0xB5C0,
+    0x9057, 0xD2C5,
+    0x9058, 0xE5DC,
+    0x905B, 0xE5DE,
+    0x9062, 0xE5DD,
+    0x9063, 0xC7B2,
+    0x9065, 0xD2A3,
+    0x9068, 0xE5DB,
+    0x906D, 0xD4E2,
+    0x906E, 0xD5DA,
+    0x9074, 0xE5E0,
+    0x9075, 0xD7F1,
+    0x907D, 0xE5E1,
+    0x907F, 0xB1DC,
+    0x9080, 0xD1FB,
+    0x9082, 0xE5E2,
+    0x9083, 0xE5E4,
+    0x9088, 0xE5E3,
+    0x908B, 0xE5E5,
+    0x9091, 0xD2D8,
+    0x9093, 0xB5CB,
+    0x9095, 0xE7DF,
+    0x9097, 0xDAF5,
+    0x9099, 0xDAF8,
+    0x909B, 0xDAF6,
+    0x909D, 0xDAF7,
+    0x90A1, 0xDAFA,
+    0x90A2, 0xD0CF,
+    0x90A3, 0xC4C7,
+    0x90A6, 0xB0EE,
+    0x90AA, 0xD0B0,
+    0x90AC, 0xDAF9,
+    0x90AE, 0xD3CA,
+    0x90AF, 0xBAAA,
+    0x90B0, 0xDBA2,
+    0x90B1, 0xC7F1,
+    0x90B3, 0xDAFC,
+    0x90B4, 0xDAFB,
+    0x90B5, 0xC9DB,
+    0x90B6, 0xDAFD,
+    0x90B8, 0xDBA1,
+    0x90B9, 0xD7DE,
+    0x90BA, 0xDAFE,
+    0x90BB, 0xC1DA,
+    0x90BE, 0xDBA5,
+    0x90C1, 0xD3F4,
+    0x90C4, 0xDBA7,
+    0x90C5, 0xDBA4,
+    0x90C7, 0xDBA8,
+    0x90CA, 0xBDBC,
+    0x90CE, 0xC0C9,
+    0x90CF, 0xDBA3,
+    0x90D0, 0xDBA6,
+    0x90D1, 0xD6A3,
+    0x90D3, 0xDBA9,
+    0x90D7, 0xDBAD,
+    0x90DB, 0xDBAE,
+    0x90DC, 0xDBAC,
+    0x90DD, 0xBAC2,
+    0x90E1, 0xBFA4,
+    0x90E2, 0xDBAB,
+    0x90E6, 0xDBAA,
+    0x90E7, 0xD4C7,
+    0x90E8, 0xB2BF,
+    0x90EB, 0xDBAF,
+    0x90ED, 0xB9F9,
+    0x90EF, 0xDBB0,
+    0x90F4, 0xB3BB,
+    0x90F8, 0xB5A6,
+    0x90FD, 0xB6BC,
+    0x90FE, 0xDBB1,
+    0x9102, 0xB6F5,
+    0x9104, 0xDBB2,
+    0x9119, 0xB1C9,
+    0x911E, 0xDBB4,
+    0x9122, 0xDBB3,
+    0x9123, 0xDBB5,
+    0x912F, 0xDBB7,
+    0x9131, 0xDBB6,
+    0x9139, 0xDBB8,
+    0x9143, 0xDBB9,
+    0x9146, 0xDBBA,
+    0x9149, 0xD3CF,
+    0x914A, 0xF4FA,
+    0x914B, 0xC7F5,
+    0x914C, 0xD7C3,
+    0x914D, 0xC5E4,
+    0x914E, 0xF4FC,
+    0x914F, 0xF4FD,
+    0x9150, 0xF4FB,
+    0x9152, 0xBEC6,
+    0x9157, 0xD0EF,
+    0x915A, 0xB7D3,
+    0x915D, 0xD4CD,
+    0x915E, 0xCCAA,
+    0x9161, 0xF5A2,
+    0x9162, 0xF5A1,
+    0x9163, 0xBAA8,
+    0x9164, 0xF4FE,
+    0x9165, 0xCBD6,
+    0x9169, 0xF5A4,
+    0x916A, 0xC0D2,
+    0x916C, 0xB3EA,
+    0x916E, 0xCDAA,
+    0x916F, 0xF5A5,
+    0x9170, 0xF5A3,
+    0x9171, 0xBDB4,
+    0x9172, 0xF5A8,
+    0x9174, 0xF5A9,
+    0x9175, 0xBDCD,
+    0x9176, 0xC3B8,
+    0x9177, 0xBFE1,
+    0x9178, 0xCBE1,
+    0x9179, 0xF5AA,
+    0x917D, 0xF5A6,
+    0x917E, 0xF5A7,
+    0x917F, 0xC4F0,
+    0x9185, 0xF5AC,
+    0x9187, 0xB4BC,
+    0x9189, 0xD7ED,
+    0x918B, 0xB4D7,
+    0x918C, 0xF5AB,
+    0x918D, 0xF5AE,
+    0x9190, 0xF5AD,
+    0x9191, 0xF5AF,
+    0x9192, 0xD0D1,
+    0x919A, 0xC3D1,
+    0x919B, 0xC8A9,
+    0x91A2, 0xF5B0,
+    0x91A3, 0xF5B1,
+    0x91AA, 0xF5B2,
+    0x91AD, 0xF5B3,
+    0x91AE, 0xF5B4,
+    0x91AF, 0xF5B5,
+    0x91B4, 0xF5B7,
+    0x91B5, 0xF5B6,
+    0x91BA, 0xF5B8,
+    0x91C7, 0xB2C9,
+    0x91C9, 0xD3D4,
+    0x91CA, 0xCACD,
+    0x91CC, 0xC0EF,
+    0x91CD, 0xD6D8,
+    0x91CE, 0xD2B0,
+    0x91CF, 0xC1BF,
+    0x91D1, 0xBDF0,
+    0x91DC, 0xB8AA,
+    0x9274, 0xBCF8,
+    0x928E, 0xF6C6,
+    0x92AE, 0xF6C7,
+    0x92C8, 0xF6C8,
+    0x933E, 0xF6C9,
+    0x936A, 0xF6CA,
+    0x938F, 0xF6CC,
+    0x93CA, 0xF6CB,
+    0x93D6, 0xF7E9,
+    0x943E, 0xF6CD,
+    0x946B, 0xF6CE,
+    0x9485, 0xEEC4,
+    0x9486, 0xEEC5,
+    0x9487, 0xEEC6,
+    0x9488, 0xD5EB,
+    0x9489, 0xB6A4,
+    0x948A, 0xEEC8,
+    0x948B, 0xEEC7,
+    0x948C, 0xEEC9,
+    0x948D, 0xEECA,
+    0x948E, 0xC7A5,
+    0x948F, 0xEECB,
+    0x9490, 0xEECC,
+    0x9492, 0xB7B0,
+    0x9493, 0xB5F6,
+    0x9494, 0xEECD,
+    0x9495, 0xEECF,
+    0x9497, 0xEECE,
+    0x9499, 0xB8C6,
+    0x949A, 0xEED0,
+    0x949B, 0xEED1,
+    0x949C, 0xEED2,
+    0x949D, 0xB6DB,
+    0x949E, 0xB3AE,
+    0x949F, 0xD6D3,
+    0x94A0, 0xC4C6,
+    0x94A1, 0xB1B5,
+    0x94A2, 0xB8D6,
+    0x94A3, 0xEED3,
+    0x94A4, 0xEED4,
+    0x94A5, 0xD4BF,
+    0x94A6, 0xC7D5,
+    0x94A7, 0xBEFB,
+    0x94A8, 0xCED9,
+    0x94A9, 0xB9B3,
+    0x94AA, 0xEED6,
+    0x94AB, 0xEED5,
+    0x94AC, 0xEED8,
+    0x94AD, 0xEED7,
+    0x94AE, 0xC5A5,
+    0x94AF, 0xEED9,
+    0x94B0, 0xEEDA,
+    0x94B1, 0xC7AE,
+    0x94B2, 0xEEDB,
+    0x94B3, 0xC7AF,
+    0x94B4, 0xEEDC,
+    0x94B5, 0xB2A7,
+    0x94B6, 0xEEDD,
+    0x94B7, 0xEEDE,
+    0x94B8, 0xEEDF,
+    0x94B9, 0xEEE0,
+    0x94BA, 0xEEE1,
+    0x94BB, 0xD7EA,
+    0x94BC, 0xEEE2,
+    0x94BD, 0xEEE3,
+    0x94BE, 0xBCD8,
+    0x94BF, 0xEEE4,
+    0x94C0, 0xD3CB,
+    0x94C1, 0xCCFA,
+    0x94C2, 0xB2AC,
+    0x94C3, 0xC1E5,
+    0x94C4, 0xEEE5,
+    0x94C5, 0xC7A6,
+    0x94C6, 0xC3AD,
+    0x94C8, 0xEEE6,
+    0x94C9, 0xEEE7,
+    0x94CA, 0xEEE8,
+    0x94CB, 0xEEE9,
+    0x94CC, 0xEEEA,
+    0x94CD, 0xEEEB,
+    0x94CE, 0xEEEC,
+    0x94D0, 0xEEED,
+    0x94D1, 0xEEEE,
+    0x94D2, 0xEEEF,
+    0x94D5, 0xEEF0,
+    0x94D6, 0xEEF1,
+    0x94D7, 0xEEF2,
+    0x94D8, 0xEEF4,
+    0x94D9, 0xEEF3,
+    0x94DB, 0xEEF5,
+    0x94DC, 0xCDAD,
+    0x94DD, 0xC2C1,
+    0x94DE, 0xEEF6,
+    0x94DF, 0xEEF7,
+    0x94E0, 0xEEF8,
+    0x94E1, 0xD5A1,
+    0x94E2, 0xEEF9,
+    0x94E3, 0xCFB3,
+    0x94E4, 0xEEFA,
+    0x94E5, 0xEEFB,
+    0x94E7, 0xEEFC,
+    0x94E8, 0xEEFD,
+    0x94E9, 0xEFA1,
+    0x94EA, 0xEEFE,
+    0x94EB, 0xEFA2,
+    0x94EC, 0xB8F5,
+    0x94ED, 0xC3FA,
+    0x94EE, 0xEFA3,
+    0x94EF, 0xEFA4,
+    0x94F0, 0xBDC2,
+    0x94F1, 0xD2BF,
+    0x94F2, 0xB2F9,
+    0x94F3, 0xEFA5,
+    0x94F4, 0xEFA6,
+    0x94F5, 0xEFA7,
+    0x94F6, 0xD2F8,
+    0x94F7, 0xEFA8,
+    0x94F8, 0xD6FD,
+    0x94F9, 0xEFA9,
+    0x94FA, 0xC6CC,
+    0x94FC, 0xEFAA,
+    0x94FD, 0xEFAB,
+    0x94FE, 0xC1B4,
+    0x94FF, 0xEFAC,
+    0x9500, 0xCFFA,
+    0x9501, 0xCBF8,
+    0x9502, 0xEFAE,
+    0x9503, 0xEFAD,
+    0x9504, 0xB3FA,
+    0x9505, 0xB9F8,
+    0x9506, 0xEFAF,
+    0x9507, 0xEFB0,
+    0x9508, 0xD0E2,
+    0x9509, 0xEFB1,
+    0x950A, 0xEFB2,
+    0x950B, 0xB7E6,
+    0x950C, 0xD0BF,
+    0x950D, 0xEFB3,
+    0x950E, 0xEFB4,
+    0x950F, 0xEFB5,
+    0x9510, 0xC8F1,
+    0x9511, 0xCCE0,
+    0x9512, 0xEFB6,
+    0x9513, 0xEFB7,
+    0x9514, 0xEFB8,
+    0x9515, 0xEFB9,
+    0x9516, 0xEFBA,
+    0x9517, 0xD5E0,
+    0x9518, 0xEFBB,
+    0x9519, 0xB4ED,
+    0x951A, 0xC3AA,
+    0x951B, 0xEFBC,
+    0x951D, 0xEFBD,
+    0x951E, 0xEFBE,
+    0x951F, 0xEFBF,
+    0x9521, 0xCEFD,
+    0x9522, 0xEFC0,
+    0x9523, 0xC2E0,
+    0x9524, 0xB4B8,
+    0x9525, 0xD7B6,
+    0x9526, 0xBDF5,
+    0x9528, 0xCFC7,
+    0x9529, 0xEFC3,
+    0x952A, 0xEFC1,
+    0x952B, 0xEFC2,
+    0x952C, 0xEFC4,
+    0x952D, 0xB6A7,
+    0x952E, 0xBCFC,
+    0x952F, 0xBEE2,
+    0x9530, 0xC3CC,
+    0x9531, 0xEFC5,
+    0x9532, 0xEFC6,
+    0x9534, 0xEFC7,
+    0x9535, 0xEFCF,
+    0x9536, 0xEFC8,
+    0x9537, 0xEFC9,
+    0x9538, 0xEFCA,
+    0x9539, 0xC7C2,
+    0x953A, 0xEFF1,
+    0x953B, 0xB6CD,
+    0x953C, 0xEFCB,
+    0x953E, 0xEFCC,
+    0x953F, 0xEFCD,
+    0x9540, 0xB6C6,
+    0x9541, 0xC3BE,
+    0x9542, 0xEFCE,
+    0x9544, 0xEFD0,
+    0x9545, 0xEFD1,
+    0x9546, 0xEFD2,
+    0x9547, 0xD5F2,
+    0x9549, 0xEFD3,
+    0x954A, 0xC4F7,
+    0x954C, 0xEFD4,
+    0x954D, 0xC4F8,
+    0x954E, 0xEFD5,
+    0x954F, 0xEFD6,
+    0x9550, 0xB8E4,
+    0x9551, 0xB0F7,
+    0x9552, 0xEFD7,
+    0x9553, 0xEFD8,
+    0x9554, 0xEFD9,
+    0x9556, 0xEFDA,
+    0x9557, 0xEFDB,
+    0x9558, 0xEFDC,
+    0x9559, 0xEFDD,
+    0x955B, 0xEFDE,
+    0x955C, 0xBEB5,
+    0x955D, 0xEFE1,
+    0x955E, 0xEFDF,
+    0x955F, 0xEFE0,
+    0x9561, 0xEFE2,
+    0x9562, 0xEFE3,
+    0x9563, 0xC1CD,
+    0x9564, 0xEFE4,
+    0x9565, 0xEFE5,
+    0x9566, 0xEFE6,
+    0x9567, 0xEFE7,
+    0x9568, 0xEFE8,
+    0x9569, 0xEFE9,
+    0x956A, 0xEFEA,
+    0x956B, 0xEFEB,
+    0x956C, 0xEFEC,
+    0x956D, 0xC0D8,
+    0x956F, 0xEFED,
+    0x9570, 0xC1AD,
+    0x9571, 0xEFEE,
+    0x9572, 0xEFEF,
+    0x9573, 0xEFF0,
+    0x9576, 0xCFE2,
+    0x957F, 0xB3A4,
+    0x95E8, 0xC3C5,
+    0x95E9, 0xE3C5,
+    0x95EA, 0xC9C1,
+    0x95EB, 0xE3C6,
+    0x95ED, 0xB1D5,
+    0x95EE, 0xCECA,
+    0x95EF, 0xB4B3,
+    0x95F0, 0xC8F2,
+    0x95F1, 0xE3C7,
+    0x95F2, 0xCFD0,
+    0x95F3, 0xE3C8,
+    0x95F4, 0xBCE4,
+    0x95F5, 0xE3C9,
+    0x95F6, 0xE3CA,
+    0x95F7, 0xC3C6,
+    0x95F8, 0xD5A2,
+    0x95F9, 0xC4D6,
+    0x95FA, 0xB9EB,
+    0x95FB, 0xCEC5,
+    0x95FC, 0xE3CB,
+    0x95FD, 0xC3F6,
+    0x95FE, 0xE3CC,
+    0x9600, 0xB7A7,
+    0x9601, 0xB8F3,
+    0x9602, 0xBAD2,
+    0x9603, 0xE3CD,
+    0x9604, 0xE3CE,
+    0x9605, 0xD4C4,
+    0x9606, 0xE3CF,
+    0x9608, 0xE3D0,
+    0x9609, 0xD1CB,
+    0x960A, 0xE3D1,
+    0x960B, 0xE3D2,
+    0x960C, 0xE3D3,
+    0x960D, 0xE3D4,
+    0x960E, 0xD1D6,
+    0x960F, 0xE3D5,
+    0x9610, 0xB2FB,
+    0x9611, 0xC0BB,
+    0x9612, 0xE3D6,
+    0x9614, 0xC0AB,
+    0x9615, 0xE3D7,
+    0x9616, 0xE3D8,
+    0x9617, 0xE3D9,
+    0x9619, 0xE3DA,
+    0x961A, 0xE3DB,
+    0x961C, 0xB8B7,
+    0x961D, 0xDAE2,
+    0x961F, 0xB6D3,
+    0x9621, 0xDAE4,
+    0x9622, 0xDAE3,
+    0x962A, 0xDAE6,
+    0x962E, 0xC8EE,
+    0x9631, 0xDAE5,
+    0x9632, 0xB7C0,
+    0x9633, 0xD1F4,
+    0x9634, 0xD2F5,
+    0x9635, 0xD5F3,
+    0x9636, 0xBDD7,
+    0x963B, 0xD7E8,
+    0x963C, 0xDAE8,
+    0x963D, 0xDAE7,
+    0x963F, 0xB0A2,
+    0x9640, 0xCDD3,
+    0x9642, 0xDAE9,
+    0x9644, 0xB8BD,
+    0x9645, 0xBCCA,
+    0x9646, 0xC2BD,
+    0x9647, 0xC2A4,
+    0x9648, 0xB3C2,
+    0x9649, 0xDAEA,
+    0x964B, 0xC2AA,
+    0x964C, 0xC4B0,
+    0x964D, 0xBDB5,
+    0x9650, 0xCFDE,
+    0x9654, 0xDAEB,
+    0x9655, 0xC9C2,
+    0x965B, 0xB1DD,
+    0x965F, 0xDAEC,
+    0x9661, 0xB6B8,
+    0x9662, 0xD4BA,
+    0x9664, 0xB3FD,
+    0x9667, 0xDAED,
+    0x9668, 0xD4C9,
+    0x9669, 0xCFD5,
+    0x966A, 0xC5E3,
+    0x966C, 0xDAEE,
+    0x9672, 0xDAEF,
+    0x9674, 0xDAF0,
+    0x9675, 0xC1EA,
+    0x9676, 0xCCD5,
+    0x9677, 0xCFDD,
+    0x9685, 0xD3E7,
+    0x9686, 0xC2A1,
+    0x9688, 0xDAF1,
+    0x968B, 0xCBE5,
+    0x968D, 0xDAF2,
+    0x968F, 0xCBE6,
+    0x9690, 0xD2FE,
+    0x9694, 0xB8F4,
+    0x9697, 0xDAF3,
+    0x9698, 0xB0AF,
+    0x9699, 0xCFB6,
+    0x969C, 0xD5CF,
+    0x96A7, 0xCBED,
+    0x96B0, 0xDAF4,
+    0x96B3, 0xE3C4,
+    0x96B6, 0xC1A5,
+    0x96B9, 0xF6BF,
+    0x96BC, 0xF6C0,
+    0x96BD, 0xF6C1,
+    0x96BE, 0xC4D1,
+    0x96C0, 0xC8B8,
+    0x96C1, 0xD1E3,
+    0x96C4, 0xD0DB,
+    0x96C5, 0xD1C5,
+    0x96C6, 0xBCAF,
+    0x96C7, 0xB9CD,
+    0x96C9, 0xEFF4,
+    0x96CC, 0xB4C6,
+    0x96CD, 0xD3BA,
+    0x96CE, 0xF6C2,
+    0x96CF, 0xB3FB,
+    0x96D2, 0xF6C3,
+    0x96D5, 0xB5F1,
+    0x96E0, 0xF6C5,
+    0x96E8, 0xD3EA,
+    0x96E9, 0xF6A7,
+    0x96EA, 0xD1A9,
+    0x96EF, 0xF6A9,
+    0x96F3, 0xF6A8,
+    0x96F6, 0xC1E3,
+    0x96F7, 0xC0D7,
+    0x96F9, 0xB1A2,
+    0x96FE, 0xCEED,
+    0x9700, 0xD0E8,
+    0x9701, 0xF6AB,
+    0x9704, 0xCFF6,
+    0x9706, 0xF6AA,
+    0x9707, 0xD5F0,
+    0x9708, 0xF6AC,
+    0x9709, 0xC3B9,
+    0x970D, 0xBBF4,
+    0x970E, 0xF6AE,
+    0x970F, 0xF6AD,
+    0x9713, 0xC4DE,
+    0x9716, 0xC1D8,
+    0x971C, 0xCBAA,
+    0x971E, 0xCFBC,
+    0x972A, 0xF6AF,
+    0x972D, 0xF6B0,
+    0x9730, 0xF6B1,
+    0x9732, 0xC2B6,
+    0x9738, 0xB0D4,
+    0x9739, 0xC5F9,
+    0x973E, 0xF6B2,
+    0x9752, 0xC7E0,
+    0x9753, 0xF6A6,
+    0x9756, 0xBEB8,
+    0x9759, 0xBEB2,
+    0x975B, 0xB5E5,
+    0x975E, 0xB7C7,
+    0x9760, 0xBFBF,
+    0x9761, 0xC3D2,
+    0x9762, 0xC3E6,
+    0x9765, 0xD8CC,
+    0x9769, 0xB8EF,
+    0x9773, 0xBDF9,
+    0x9774, 0xD1A5,
+    0x9776, 0xB0D0,
+    0x977C, 0xF7B0,
+    0x9785, 0xF7B1,
+    0x978B, 0xD0AC,
+    0x978D, 0xB0B0,
+    0x9791, 0xF7B2,
+    0x9792, 0xF7B3,
+    0x9794, 0xF7B4,
+    0x9798, 0xC7CA,
+    0x97A0, 0xBECF,
+    0x97A3, 0xF7B7,
+    0x97AB, 0xF7B6,
+    0x97AD, 0xB1DE,
+    0x97AF, 0xF7B5,
+    0x97B2, 0xF7B8,
+    0x97B4, 0xF7B9,
+    0x97E6, 0xCEA4,
+    0x97E7, 0xC8CD,
+    0x97E9, 0xBAAB,
+    0x97EA, 0xE8B8,
+    0x97EB, 0xE8B9,
+    0x97EC, 0xE8BA,
+    0x97ED, 0xBEC2,
+    0x97F3, 0xD2F4,
+    0x97F5, 0xD4CF,
+    0x97F6, 0xC9D8,
+    0x9875, 0xD2B3,
+    0x9876, 0xB6A5,
+    0x9877, 0xC7EA,
+    0x9878, 0xF1FC,
+    0x9879, 0xCFEE,
+    0x987A, 0xCBB3,
+    0x987B, 0xD0EB,
+    0x987C, 0xE7EF,
+    0x987D, 0xCDE7,
+    0x987E, 0xB9CB,
+    0x987F, 0xB6D9,
+    0x9880, 0xF1FD,
+    0x9881, 0xB0E4,
+    0x9882, 0xCBCC,
+    0x9883, 0xF1FE,
+    0x9884, 0xD4A4,
+    0x9885, 0xC2AD,
+    0x9886, 0xC1EC,
+    0x9887, 0xC6C4,
+    0x9888, 0xBEB1,
+    0x9889, 0xF2A1,
+    0x988A, 0xBCD5,
+    0x988C, 0xF2A2,
+    0x988D, 0xF2A3,
+    0x988F, 0xF2A4,
+    0x9890, 0xD2C3,
+    0x9891, 0xC6B5,
+    0x9893, 0xCDC7,
+    0x9894, 0xF2A5,
+    0x9896, 0xD3B1,
+    0x9897, 0xBFC5,
+    0x9898, 0xCCE2,
+    0x989A, 0xF2A6,
+    0x989B, 0xF2A7,
+    0x989C, 0xD1D5,
+    0x989D, 0xB6EE,
+    0x989E, 0xF2A8,
+    0x989F, 0xF2A9,
+    0x98A0, 0xB5DF,
+    0x98A1, 0xF2AA,
+    0x98A2, 0xF2AB,
+    0x98A4, 0xB2FC,
+    0x98A5, 0xF2AC,
+    0x98A6, 0xF2AD,
+    0x98A7, 0xC8A7,
+    0x98CE, 0xB7E7,
+    0x98D1, 0xECA9,
+    0x98D2, 0xECAA,
+    0x98D3, 0xECAB,
+    0x98D5, 0xECAC,
+    0x98D8, 0xC6AE,
+    0x98D9, 0xECAD,
+    0x98DA, 0xECAE,
+    0x98DE, 0xB7C9,
+    0x98DF, 0xCAB3,
+    0x98E7, 0xE2B8,
+    0x98E8, 0xF7CF,
+    0x990D, 0xF7D0,
+    0x9910, 0xB2CD,
+    0x992E, 0xF7D1,
+    0x9954, 0xF7D3,
+    0x9955, 0xF7D2,
+    0x9963, 0xE2BB,
+    0x9965, 0xBCA2,
+    0x9967, 0xE2BC,
+    0x9968, 0xE2BD,
+    0x9969, 0xE2BE,
+    0x996A, 0xE2BF,
+    0x996B, 0xE2C0,
+    0x996C, 0xE2C1,
+    0x996D, 0xB7B9,
+    0x996E, 0xD2FB,
+    0x996F, 0xBDA4,
+    0x9970, 0xCACE,
+    0x9971, 0xB1A5,
+    0x9972, 0xCBC7,
+    0x9974, 0xE2C2,
+    0x9975, 0xB6FC,
+    0x9976, 0xC8C4,
+    0x9977, 0xE2C3,
+    0x997A, 0xBDC8,
+    0x997C, 0xB1FD,
+    0x997D, 0xE2C4,
+    0x997F, 0xB6F6,
+    0x9980, 0xE2C5,
+    0x9981, 0xC4D9,
+    0x9984, 0xE2C6,
+    0x9985, 0xCFDA,
+    0x9986, 0xB9DD,
+    0x9987, 0xE2C7,
+    0x9988, 0xC0A1,
+    0x998A, 0xE2C8,
+    0x998B, 0xB2F6,
+    0x998D, 0xE2C9,
+    0x998F, 0xC1F3,
+    0x9990, 0xE2CA,
+    0x9991, 0xE2CB,
+    0x9992, 0xC2F8,
+    0x9993, 0xE2CC,
+    0x9994, 0xE2CD,
+    0x9995, 0xE2CE,
+    0x9996, 0xCAD7,
+    0x9997, 0xD8B8,
+    0x9998, 0xD9E5,
+    0x9999, 0xCFE3,
+    0x99A5, 0xF0A5,
+    0x99A8, 0xDCB0,
+    0x9A6C, 0xC2ED,
+    0x9A6D, 0xD4A6,
+    0x9A6E, 0xCDD4,
+    0x9A6F, 0xD1B1,
+    0x9A70, 0xB3DB,
+    0x9A71, 0xC7FD,
+    0x9A73, 0xB2B5,
+    0x9A74, 0xC2BF,
+    0x9A75, 0xE6E0,
+    0x9A76, 0xCABB,
+    0x9A77, 0xE6E1,
+    0x9A78, 0xE6E2,
+    0x9A79, 0xBED4,
+    0x9A7A, 0xE6E3,
+    0x9A7B, 0xD7A4,
+    0x9A7C, 0xCDD5,
+    0x9A7D, 0xE6E5,
+    0x9A7E, 0xBCDD,
+    0x9A7F, 0xE6E4,
+    0x9A80, 0xE6E6,
+    0x9A81, 0xE6E7,
+    0x9A82, 0xC2EE,
+    0x9A84, 0xBDBE,
+    0x9A85, 0xE6E8,
+    0x9A86, 0xC2E6,
+    0x9A87, 0xBAA7,
+    0x9A88, 0xE6E9,
+    0x9A8A, 0xE6EA,
+    0x9A8B, 0xB3D2,
+    0x9A8C, 0xD1E9,
+    0x9A8F, 0xBFA5,
+    0x9A90, 0xE6EB,
+    0x9A91, 0xC6EF,
+    0x9A92, 0xE6EC,
+    0x9A93, 0xE6ED,
+    0x9A96, 0xE6EE,
+    0x9A97, 0xC6AD,
+    0x9A98, 0xE6EF,
+    0x9A9A, 0xC9A7,
+    0x9A9B, 0xE6F0,
+    0x9A9C, 0xE6F1,
+    0x9A9D, 0xE6F2,
+    0x9A9E, 0xE5B9,
+    0x9A9F, 0xE6F3,
+    0x9AA0, 0xE6F4,
+    0x9AA1, 0xC2E2,
+    0x9AA2, 0xE6F5,
+    0x9AA3, 0xE6F6,
+    0x9AA4, 0xD6E8,
+    0x9AA5, 0xE6F7,
+    0x9AA7, 0xE6F8,
+    0x9AA8, 0xB9C7,
+    0x9AB0, 0xF7BB,
+    0x9AB1, 0xF7BA,
+    0x9AB6, 0xF7BE,
+    0x9AB7, 0xF7BC,
+    0x9AB8, 0xBAA1,
+    0x9ABA, 0xF7BF,
+    0x9ABC, 0xF7C0,
+    0x9AC0, 0xF7C2,
+    0x9AC1, 0xF7C1,
+    0x9AC2, 0xF7C4,
+    0x9AC5, 0xF7C3,
+    0x9ACB, 0xF7C5,
+    0x9ACC, 0xF7C6,
+    0x9AD1, 0xF7C7,
+    0x9AD3, 0xCBE8,
+    0x9AD8, 0xB8DF,
+    0x9ADF, 0xF7D4,
+    0x9AE1, 0xF7D5,
+    0x9AE6, 0xF7D6,
+    0x9AEB, 0xF7D8,
+    0x9AED, 0xF7DA,
+    0x9AEF, 0xF7D7,
+    0x9AF9, 0xF7DB,
+    0x9AFB, 0xF7D9,
+    0x9B03, 0xD7D7,
+    0x9B08, 0xF7DC,
+    0x9B0F, 0xF7DD,
+    0x9B13, 0xF7DE,
+    0x9B1F, 0xF7DF,
+    0x9B23, 0xF7E0,
+    0x9B2F, 0xDBCB,
+    0x9B32, 0xD8AA,
+    0x9B3B, 0xE5F7,
+    0x9B3C, 0xB9ED,
+    0x9B41, 0xBFFD,
+    0x9B42, 0xBBEA,
+    0x9B43, 0xF7C9,
+    0x9B44, 0xC6C7,
+    0x9B45, 0xF7C8,
+    0x9B47, 0xF7CA,
+    0x9B48, 0xF7CC,
+    0x9B49, 0xF7CB,
+    0x9B4D, 0xF7CD,
+    0x9B4F, 0xCEBA,
+    0x9B51, 0xF7CE,
+    0x9B54, 0xC4A7,
+    0x9C7C, 0xD3E3,
+    0x9C7F, 0xF6CF,
+    0x9C81, 0xC2B3,
+    0x9C82, 0xF6D0,
+    0x9C85, 0xF6D1,
+    0x9C86, 0xF6D2,
+    0x9C87, 0xF6D3,
+    0x9C88, 0xF6D4,
+    0x9C8B, 0xF6D6,
+    0x9C8D, 0xB1AB,
+    0x9C8E, 0xF6D7,
+    0x9C90, 0xF6D8,
+    0x9C91, 0xF6D9,
+    0x9C92, 0xF6DA,
+    0x9C94, 0xF6DB,
+    0x9C95, 0xF6DC,
+    0x9C9A, 0xF6DD,
+    0x9C9B, 0xF6DE,
+    0x9C9C, 0xCFCA,
+    0x9C9E, 0xF6DF,
+    0x9C9F, 0xF6E0,
+    0x9CA0, 0xF6E1,
+    0x9CA1, 0xF6E2,
+    0x9CA2, 0xF6E3,
+    0x9CA3, 0xF6E4,
+    0x9CA4, 0xC0F0,
+    0x9CA5, 0xF6E5,
+    0x9CA6, 0xF6E6,
+    0x9CA7, 0xF6E7,
+    0x9CA8, 0xF6E8,
+    0x9CA9, 0xF6E9,
+    0x9CAB, 0xF6EA,
+    0x9CAD, 0xF6EB,
+    0x9CAE, 0xF6EC,
+    0x9CB0, 0xF6ED,
+    0x9CB1, 0xF6EE,
+    0x9CB2, 0xF6EF,
+    0x9CB3, 0xF6F0,
+    0x9CB4, 0xF6F1,
+    0x9CB5, 0xF6F2,
+    0x9CB6, 0xF6F3,
+    0x9CB7, 0xF6F4,
+    0x9CB8, 0xBEA8,
+    0x9CBA, 0xF6F5,
+    0x9CBB, 0xF6F6,
+    0x9CBC, 0xF6F7,
+    0x9CBD, 0xF6F8,
+    0x9CC3, 0xC8FA,
+    0x9CC4, 0xF6F9,
+    0x9CC5, 0xF6FA,
+    0x9CC6, 0xF6FB,
+    0x9CC7, 0xF6FC,
+    0x9CCA, 0xF6FD,
+    0x9CCB, 0xF6FE,
+    0x9CCC, 0xF7A1,
+    0x9CCD, 0xF7A2,
+    0x9CCE, 0xF7A3,
+    0x9CCF, 0xF7A4,
+    0x9CD0, 0xF7A5,
+    0x9CD3, 0xF7A6,
+    0x9CD4, 0xF7A7,
+    0x9CD5, 0xF7A8,
+    0x9CD6, 0xB1EE,
+    0x9CD7, 0xF7A9,
+    0x9CD8, 0xF7AA,
+    0x9CD9, 0xF7AB,
+    0x9CDC, 0xF7AC,
+    0x9CDD, 0xF7AD,
+    0x9CDE, 0xC1DB,
+    0x9CDF, 0xF7AE,
+    0x9CE2, 0xF7AF,
+    0x9E1F, 0xC4F1,
+    0x9E20, 0xF0AF,
+    0x9E21, 0xBCA6,
+    0x9E22, 0xF0B0,
+    0x9E23, 0xC3F9,
+    0x9E25, 0xC5B8,
+    0x9E26, 0xD1BB,
+    0x9E28, 0xF0B1,
+    0x9E29, 0xF0B2,
+    0x9E2A, 0xF0B3,
+    0x9E2B, 0xF0B4,
+    0x9E2C, 0xF0B5,
+    0x9E2D, 0xD1BC,
+    0x9E2F, 0xD1EC,
+    0x9E31, 0xF0B7,
+    0x9E32, 0xF0B6,
+    0x9E33, 0xD4A7,
+    0x9E35, 0xCDD2,
+    0x9E36, 0xF0B8,
+    0x9E37, 0xF0BA,
+    0x9E38, 0xF0B9,
+    0x9E39, 0xF0BB,
+    0x9E3A, 0xF0BC,
+    0x9E3D, 0xB8EB,
+    0x9E3E, 0xF0BD,
+    0x9E3F, 0xBAE8,
+    0x9E41, 0xF0BE,
+    0x9E42, 0xF0BF,
+    0x9E43, 0xBEE9,
+    0x9E44, 0xF0C0,
+    0x9E45, 0xB6EC,
+    0x9E46, 0xF0C1,
+    0x9E47, 0xF0C2,
+    0x9E48, 0xF0C3,
+    0x9E49, 0xF0C4,
+    0x9E4A, 0xC8B5,
+    0x9E4B, 0xF0C5,
+    0x9E4C, 0xF0C6,
+    0x9E4E, 0xF0C7,
+    0x9E4F, 0xC5F4,
+    0x9E51, 0xF0C8,
+    0x9E55, 0xF0C9,
+    0x9E57, 0xF0CA,
+    0x9E58, 0xF7BD,
+    0x9E5A, 0xF0CB,
+    0x9E5B, 0xF0CC,
+    0x9E5C, 0xF0CD,
+    0x9E5E, 0xF0CE,
+    0x9E63, 0xF0CF,
+    0x9E64, 0xBAD7,
+    0x9E66, 0xF0D0,
+    0x9E67, 0xF0D1,
+    0x9E68, 0xF0D2,
+    0x9E69, 0xF0D3,
+    0x9E6A, 0xF0D4,
+    0x9E6B, 0xF0D5,
+    0x9E6C, 0xF0D6,
+    0x9E6D, 0xF0D8,
+    0x9E70, 0xD3A5,
+    0x9E71, 0xF0D7,
+    0x9E73, 0xF0D9,
+    0x9E7E, 0xF5BA,
+    0x9E7F, 0xC2B9,
+    0x9E82, 0xF7E4,
+    0x9E87, 0xF7E5,
+    0x9E88, 0xF7E6,
+    0x9E8B, 0xF7E7,
+    0x9E92, 0xF7E8,
+    0x9E93, 0xC2B4,
+    0x9E9D, 0xF7EA,
+    0x9E9F, 0xF7EB,
+    0x9EA6, 0xC2F3,
+    0x9EB4, 0xF4F0,
+    0x9EB8, 0xF4EF,
+    0x9EBB, 0xC2E9,
+    0x9EBD, 0xF7E1,
+    0x9EBE, 0xF7E2,
+    0x9EC4, 0xBBC6,
+    0x9EC9, 0xD9E4,
+    0x9ECD, 0xCAF2,
+    0x9ECE, 0xC0E8,
+    0x9ECF, 0xF0A4,
+    0x9ED1, 0xBADA,
+    0x9ED4, 0xC7AD,
+    0x9ED8, 0xC4AC,
+    0x9EDB, 0xF7EC,
+    0x9EDC, 0xF7ED,
+    0x9EDD, 0xF7EE,
+    0x9EDF, 0xF7F0,
+    0x9EE0, 0xF7EF,
+    0x9EE2, 0xF7F1,
+    0x9EE5, 0xF7F4,
+    0x9EE7, 0xF7F3,
+    0x9EE9, 0xF7F2,
+    0x9EEA, 0xF7F5,
+    0x9EEF, 0xF7F6,
+    0x9EF9, 0xEDE9,
+    0x9EFB, 0xEDEA,
+    0x9EFC, 0xEDEB,
+    0x9EFE, 0xF6BC,
+    0x9F0B, 0xF6BD,
+    0x9F0D, 0xF6BE,
+    0x9F0E, 0xB6A6,
+    0x9F10, 0xD8BE,
+    0x9F13, 0xB9C4,
+    0x9F17, 0xD8BB,
+    0x9F19, 0xDCB1,
+    0x9F20, 0xCAF3,
+    0x9F22, 0xF7F7,
+    0x9F2C, 0xF7F8,
+    0x9F2F, 0xF7F9,
+    0x9F37, 0xF7FB,
+    0x9F39, 0xF7FA,
+    0x9F3B, 0xB1C7,
+    0x9F3D, 0xF7FC,
+    0x9F3E, 0xF7FD,
+    0x9F44, 0xF7FE,
+    0x9F50, 0xC6EB,
+    0x9F51, 0xECB4,
+    0x9F7F, 0xB3DD,
+    0x9F80, 0xF6B3,
+    0x9F83, 0xF6B4,
+    0x9F84, 0xC1E4,
+    0x9F85, 0xF6B5,
+    0x9F86, 0xF6B6,
+    0x9F87, 0xF6B7,
+    0x9F88, 0xF6B8,
+    0x9F89, 0xF6B9,
+    0x9F8A, 0xF6BA,
+    0x9F8B, 0xC8A3,
+    0x9F8C, 0xF6BB,
+    0x9F99, 0xC1FA,
+    0x9F9A, 0xB9A8,
+    0x9F9B, 0xEDE8,
+    0x9F9F, 0xB9EA,
+    0x9FA0, 0xD9DF,
+    0xFF01, 0xA3A1,
+    0xFF02, 0xA3A2,
+    0xFF03, 0xA3A3,
+    0xFF04, 0xA1E7,
+    0xFF05, 0xA3A5,
+    0xFF06, 0xA3A6,
+    0xFF07, 0xA3A7,
+    0xFF08, 0xA3A8,
+    0xFF09, 0xA3A9,
+    0xFF0A, 0xA3AA,
+    0xFF0B, 0xA3AB,
+    0xFF0C, 0xA3AC,
+    0xFF0D, 0xA3AD,
+    0xFF0E, 0xA3AE,
+    0xFF0F, 0xA3AF,
+    0xFF10, 0xA3B0,
+    0xFF11, 0xA3B1,
+    0xFF12, 0xA3B2,
+    0xFF13, 0xA3B3,
+    0xFF14, 0xA3B4,
+    0xFF15, 0xA3B5,
+    0xFF16, 0xA3B6,
+    0xFF17, 0xA3B7,
+    0xFF18, 0xA3B8,
+    0xFF19, 0xA3B9,
+    0xFF1A, 0xA3BA,
+    0xFF1B, 0xA3BB,
+    0xFF1C, 0xA3BC,
+    0xFF1D, 0xA3BD,
+    0xFF1E, 0xA3BE,
+    0xFF1F, 0xA3BF,
+    0xFF20, 0xA3C0,
+    0xFF21, 0xA3C1,
+    0xFF22, 0xA3C2,
+    0xFF23, 0xA3C3,
+    0xFF24, 0xA3C4,
+    0xFF25, 0xA3C5,
+    0xFF26, 0xA3C6,
+    0xFF27, 0xA3C7,
+    0xFF28, 0xA3C8,
+    0xFF29, 0xA3C9,
+    0xFF2A, 0xA3CA,
+    0xFF2B, 0xA3CB,
+    0xFF2C, 0xA3CC,
+    0xFF2D, 0xA3CD,
+    0xFF2E, 0xA3CE,
+    0xFF2F, 0xA3CF,
+    0xFF30, 0xA3D0,
+    0xFF31, 0xA3D1,
+    0xFF32, 0xA3D2,
+    0xFF33, 0xA3D3,
+    0xFF34, 0xA3D4,
+    0xFF35, 0xA3D5,
+    0xFF36, 0xA3D6,
+    0xFF37, 0xA3D7,
+    0xFF38, 0xA3D8,
+    0xFF39, 0xA3D9,
+    0xFF3A, 0xA3DA,
+    0xFF3B, 0xA3DB,
+    0xFF3C, 0xA3DC,
+    0xFF3D, 0xA3DD,
+    0xFF3E, 0xA3DE,
+    0xFF3F, 0xA3DF,
+    0xFF40, 0xA3E0,
+    0xFF41, 0xA3E1,
+    0xFF42, 0xA3E2,
+    0xFF43, 0xA3E3,
+    0xFF44, 0xA3E4,
+    0xFF45, 0xA3E5,
+    0xFF46, 0xA3E6,
+    0xFF47, 0xA3E7,
+    0xFF48, 0xA3E8,
+    0xFF49, 0xA3E9,
+    0xFF4A, 0xA3EA,
+    0xFF4B, 0xA3EB,
+    0xFF4C, 0xA3EC,
+    0xFF4D, 0xA3ED,
+    0xFF4E, 0xA3EE,
+    0xFF4F, 0xA3EF,
+    0xFF50, 0xA3F0,
+    0xFF51, 0xA3F1,
+    0xFF52, 0xA3F2,
+    0xFF53, 0xA3F3,
+    0xFF54, 0xA3F4,
+    0xFF55, 0xA3F5,
+    0xFF56, 0xA3F6,
+    0xFF57, 0xA3F7,
+    0xFF58, 0xA3F8,
+    0xFF59, 0xA3F9,
+    0xFF5A, 0xA3FA,
+    0xFF5B, 0xA3FB,
+    0xFF5C, 0xA3FC,
+    0xFF5D, 0xA3FD,
+    0xFF5E, 0xA1AB,
+    0xFFE0, 0xA1E9,
+    0xFFE1, 0xA1EA,
+    0xFFE3, 0xA3FE,
+    0xFFE5, 0xA3A4
+};
 
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
-INTERNAL int gb2312_wctomb_zint(unsigned int* r, unsigned int wc);
-INTERNAL int gb2312_utf8tomb(struct zint_symbol *symbol, const unsigned char source[], size_t* p_length, unsigned int* gbdata);
-INTERNAL int gb2312_utf8tosb(int eci, const unsigned char source[], size_t* p_length, unsigned int* gbdata, int full_multibyte);
-INTERNAL void gb2312_cpy(const unsigned char source[], size_t* p_length, unsigned int* gbdata, int full_multibyte);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* GB2312_H */
index 13c5ed0..a2fdc75 100644 (file)
@@ -91,7 +91,7 @@ static int general_field_next_none(char* general_field, int i, int general_field
 
 /* Attempts to apply encoding rules from sections 7.2.5.5.1 to 7.2.5.5.3
  * of ISO/IEC 24724:2011 (same as sections 5.4.1 to 5.4.3 of ISO/IEC 24723:2010) */
-INTERNAL int general_field_encode(char* general_field, int* p_mode, int* p_last_digit, char binary_string[]) {
+int general_field_encode(char* general_field, int* p_mode, int* p_last_digit, char binary_string[]) {
     int i, d1, d2;
     int mode = *p_mode;
     int last_digit = 0; /* Set to odd remaining digit at end if any */
index 11db071..18be2f3 100644 (file)
@@ -39,7 +39,7 @@
 #ifdef __cplusplus
 extern "C" {
 #endif /* __cplusplus */
-    INTERNAL int general_field_encode(char* general_field, int* p_mode, int* p_last_digit, char binary_string[]);
+    extern int general_field_encode(char* general_field, int* p_mode, int* p_last_digit, char binary_string[]);
 #ifdef __cplusplus
 }
 #endif /* __cplusplus */
index c5b19ee..c02aefe 100644 (file)
@@ -2,7 +2,7 @@
 
 /*
     libzint - the open source barcode library
-    Copyright (C) 2009 - 2020 Robin Stuart <rstuart114@gmail.com>
+    Copyright (C) 2009-2017 Robin Stuart <rstuart114@gmail.com>
 
     Redistribution and use in source and binary forms, with or without
     modification, are permitted provided that the following conditions
@@ -29,9 +29,9 @@
     OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     SUCH DAMAGE.
  */
-/* vim: set ts=4 sw=4 et : */
 
 #include <stdio.h>
+#include <stdlib.h>
 #include <string.h>
 #include "common.h"
 #include <math.h>
 #include <malloc.h>
 #endif
 
-#define SSET    "0123456789ABCDEF"
+#define SSET   "0123456789ABCDEF"
 
 /* Index of transparent color, -1 for no transparent color
  * This might be set into a variable if transparency is activated as an option
  */
 #define TRANSPARENT_INDEX (-1)
 
+/* Used bit depth, may be changed for bigger pallet in future */
+#define DESTINATION_IMAGE_BITS 1
+#include <stdlib.h>
+
 typedef struct s_statestruct {
     unsigned char * pOut;
     unsigned char *pIn;
@@ -62,30 +66,8 @@ typedef struct s_statestruct {
     unsigned short NodeAxon[4096];
     unsigned short NodeNext[4096];
     unsigned char NodePix[4096];
-    unsigned char colourCode[10];
-    unsigned char colourPaletteIndex[10];
-    int colourCount;
 } statestruct;
 
-/* Transform a Pixel to a lzw colourmap index and move to next pixel.
- * All colour values are listed in colourCode with corresponding palette index
- */
-static unsigned char NextPaletteIndex(statestruct *pState)
-{
-    unsigned char pixelColour;
-    int colourIndex;
-    pixelColour = *(pState->pIn);
-    (pState->pIn)++;
-    (pState->InLen)--;
-    for (colourIndex = 0; colourIndex < pState->colourCount; colourIndex++) {
-        if (pixelColour == pState->colourCode[colourIndex])
-            return pState->colourPaletteIndex[colourIndex];
-
-    }
-    return 0; /* Not reached */
-}
-
-
 static char BufferNextByte(statestruct *pState) {
     (pState->OutPosCur)++;
     /* Check if this position is a byte count position
@@ -102,7 +84,6 @@ static char BufferNextByte(statestruct *pState) {
     }
     if (pState->OutPosCur >= pState->OutLength)
         return 1;
-
     (pState->pOut)[pState->OutPosCur] = 0x00;
     return 0;
 }
@@ -129,7 +110,7 @@ static char AddCodeToBuffer(statestruct *pState, unsigned short CodeIn, unsigned
     /* The remaining bits of CodeIn fit in the current byte. */
     if (CodeBits > 0) {
         (pState->pOut)[pState->OutPosCur] |= (unsigned char)
-            (CodeIn << (8 - pState->OutBitsFree));
+                (CodeIn << (8 - pState->OutBitsFree));
         pState->OutBitsFree -= CodeBits;
     }
     return 0;
@@ -142,7 +123,7 @@ static void FlushStringTable(statestruct *pState) {
     }
 }
 
-static unsigned short FindPixelOutlet(statestruct *pState, unsigned short HeadNode, unsigned char Byte) {
+unsigned short FindPixelOutlet(statestruct *pState, unsigned short HeadNode, unsigned char Byte) {
     unsigned short Outlet;
 
     Outlet = (pState->NodeAxon)[HeadNode];
@@ -162,14 +143,18 @@ static char NextCode(statestruct *pState, unsigned char * pPixelValueCur, unsign
     if ((pState->InLen) == 0)
         return AddCodeToBuffer(pState, UpNode, CodeBits);
 
-    *pPixelValueCur = NextPaletteIndex(pState);
+    *pPixelValueCur = (*(pState->pIn)) - '0';
+    (pState->pIn)++;
+    (pState->InLen)--;
     /* Follow the string table and the data stream to the end of the longest string that has a code */
     while (0 != (DownNode = FindPixelOutlet(pState, UpNode, *pPixelValueCur))) {
         UpNode = DownNode;
         if ((pState->InLen) == 0)
             return AddCodeToBuffer(pState, UpNode, CodeBits);
 
-        *pPixelValueCur = NextPaletteIndex(pState);
+        *pPixelValueCur = (*(pState->pIn)) - '0';
+        (pState->pIn)++;
+        (pState->InLen)--;
     }
     /* Submit 'UpNode' which is the code of the longest string */
     if (AddCodeToBuffer(pState, UpNode, CodeBits))
@@ -191,125 +176,103 @@ static char NextCode(statestruct *pState, unsigned char * pPixelValueCur, unsign
     return 1;
 }
 
-static int gif_lzw(statestruct *pState, int paletteBitSize) {
+int gif_lzw(unsigned char *pOut, int OutLength, unsigned char *pIn, int InLen) {
     unsigned char PixelValueCur;
     unsigned char CodeBits;
     unsigned short Pos;
+    statestruct State;
 
+    State.pIn = pIn;
+    State.InLen = InLen;
+    State.pOut = pOut;
+    State.OutLength = OutLength;
     // > Get first data byte
-    if (pState->InLen == 0)
+    if (State.InLen == 0)
         return 0;
-    PixelValueCur = NextPaletteIndex(pState);
-    /* Number of bits per data item (=pixel)
-     * We need at least a value of 2, otherwise the cc and eoi code consumes
-     * the whole string table
-     */
-    if (paletteBitSize == 1)
-        paletteBitSize = 2;
-
-    /* initial size of compression codes */
-    CodeBits = paletteBitSize+1;
-    pState->ClearCode = (1 << paletteBitSize);
-    pState->FreeCode = pState->ClearCode+2;
-    pState->OutBitsFree = 8;
-    pState->OutPosCur = -1;
-    pState->fByteCountByteSet = 0;
-
-    if (BufferNextByte(pState))
+
+    PixelValueCur = (unsigned char) ((*(State.pIn)) - '0');
+    (State.pIn)++;
+    (State.InLen)--;
+    CodeBits = 3;
+    State.ClearCode = 4;
+    State.FreeCode = 6;
+    State.OutBitsFree = 8;
+    State.OutPosCur = -1;
+    State.fByteCountByteSet = 0;
+
+    if (BufferNextByte(&State))
         return 0;
 
-    for (Pos = 0; Pos < pState->ClearCode; Pos++)
-        (pState->NodePix)[Pos] = (unsigned char) Pos;
+    for (Pos = 0; Pos < State.ClearCode; Pos++)
+        State.NodePix[Pos] = (unsigned char) Pos;
 
-    FlushStringTable(pState);
+    FlushStringTable(&State);
 
     /* Write what the GIF specification calls the "code size". */
-    (pState->pOut)[pState->OutPosCur] = paletteBitSize;
+    (State.pOut)[State.OutPosCur] = 2;
     /* Reserve first bytecount byte */
-    if (BufferNextByte(pState))
+    if (BufferNextByte(&State))
         return 0;
-    pState->OutByteCountPos = pState->OutPosCur;
-    if (BufferNextByte(pState))
+    State.OutByteCountPos = State.OutPosCur;
+    if (BufferNextByte(&State))
         return 0;
-    pState->fByteCountByteSet = 1;
+    State.fByteCountByteSet = 1;
     /* Submit one 'ClearCode' as the first code */
-    if (AddCodeToBuffer(pState, pState->ClearCode, CodeBits))
+    if (AddCodeToBuffer(&State, State.ClearCode, CodeBits))
         return 0;
 
     for (;;) {
         char Res;
         /* generate and save the next code, which may consist of multiple input pixels. */
-        Res = NextCode(pState, &PixelValueCur, CodeBits);
+        Res = NextCode(&State, &PixelValueCur, CodeBits);
         if (Res < 0)
             return 0;
         //* Check for end of data stream */
         if (!Res) {
             /* submit 'eoi' as the last item of the code stream */
-            if (AddCodeToBuffer(pState, (unsigned short) (pState->ClearCode + 1), CodeBits))
+            if (AddCodeToBuffer(&State, (unsigned short) (State.ClearCode + 1), CodeBits))
                 return 0;
-            pState->fByteCountByteSet = 0;
-            if (pState->OutBitsFree < 8) {
-                if (BufferNextByte(pState))
+            State.fByteCountByteSet = 0;
+            if (State.OutBitsFree < 8) {
+                if (BufferNextByte(&State))
                     return 0;
             }
             // > Update last bytecount byte;
-            if (pState->OutByteCountPos < pState->OutPosCur) {
-                (pState->pOut)[pState->OutByteCountPos] = (unsigned char) (pState->OutPosCur - pState->OutByteCountPos - 1);
+            if (State.OutByteCountPos < State.OutPosCur) {
+                (State.pOut)[State.OutByteCountPos] = (unsigned char) (State.OutPosCur - State.OutByteCountPos - 1);
             }
-            pState->OutPosCur++;
-            return pState->OutPosCur;
+            State.OutPosCur++;
+            return State.OutPosCur;
         }
         /* Check for currently last code */
-        if (pState->FreeCode == (1U << CodeBits))
+        if (State.FreeCode == (1U << CodeBits))
             CodeBits++;
-        pState->FreeCode++;
+        State.FreeCode++;
         /* Check for full stringtable */
-        if (pState->FreeCode == 0xfff) {
-            FlushStringTable(pState);
-            if (AddCodeToBuffer(pState, pState->ClearCode, CodeBits))
+        if (State.FreeCode == 0xfff) {
+            FlushStringTable(&State);
+            if (AddCodeToBuffer(&State, State.ClearCode, CodeBits))
                 return 0;
 
-            CodeBits = (unsigned char) (1 + paletteBitSize);
-            pState->FreeCode = (unsigned short) (pState->ClearCode + 2);
+            CodeBits = (unsigned char) (1 + 2);
+            State.FreeCode = (unsigned short) (State.ClearCode + 2);
         }
     }
 }
 
-/*
- * Called function to save in gif format
- */
-INTERNAL int gif_pixel_plot(struct zint_symbol *symbol, char *pixelbuf) {
-    unsigned char outbuf[10];
+int gif_pixel_plot(struct zint_symbol *symbol, char *pixelbuf) {
+    char outbuf[10];
     FILE *gif_file;
     unsigned short usTemp;
     int byte_out;
-    int colourCount;
-    unsigned char paletteRGB[10][3];
-    int paletteCount, paletteCountCur, paletteIndex;
-    int pixelIndex;
-    int paletteBitSize;
-    int paletteSize;
-    statestruct State;
-
-    unsigned char backgroundColourIndex;
-    unsigned char RGBCur[3];
-
-    int colourIndex;
-
-    int fFound;
-
-    unsigned char pixelColour;
-
-    /* Allow for overhead of 4 == code size + byte count + overflow byte + zero terminator */
-    unsigned int lzoutbufSize = symbol->bitmap_height * symbol->bitmap_width + 4;
 #ifdef _MSC_VER
     char * lzwoutbuf;
 #endif
 
 #ifndef _MSC_VER
-    char lzwoutbuf[lzoutbufSize];
+    char lzwoutbuf[symbol->bitmap_height * symbol->bitmap_width];
 #else
-    lzwoutbuf = (char *) _alloca(lzoutbufSize);
+    lzwoutbuf = (char *) _alloca((symbol->bitmap_height * symbol->bitmap_width) * sizeof (char));
 #endif /* _MSC_VER */
 
     /* Open output file in binary mode */
@@ -327,147 +290,18 @@ INTERNAL int gif_pixel_plot(struct zint_symbol *symbol, char *pixelbuf) {
             return ZINT_ERROR_FILE_ACCESS;
         }
     }
-
-    /*
-     * Build a table of the used palette items.
-     * Currently, there are the following 10 colour codes:
-     * '0': standard background
-     * '1': standard foreground
-     * 'W': white
-     * 'C': cyan
-     * 'B': blue
-     * 'M': magenta
-     * 'R': red
-     * 'Y': yellow
-     * 'G': green
-     * 'K': black
-     * '0' and '1' may be identical to one of the other values
-     *
-     * A data structure is set up as follows:
-     * state.colourCode: list of colour codes
-     * paletteIndex: palette index of the corresponding colour code
-     *  There are colourCount entries in the upper lists.
-     * paletteRGB: RGB value at the palette position
-     *  There are paletteCount entries.
-     *  This value is smaller to colourCount, if multiple colour codes have the
-     *  same RGB value and point to the same palette value.
-     * Example:
-     *  0 1 W K are present. 0 is equal to white, while 1 is blue
-     *  The resulting tables are:
-     *  paletteItem: ['0']=0 (white), ['1']=1 (blue), ['W']=0 (white),
-     *               ['K']=2 (black)
-     *  Thus, there are 4 colour codes and 3 palette entries.
-
+    /*ImageWidth = 2;
+    ImageHeight = 2;
+    rotated_bitmap[0] = 1;
+    rotated_bitmap[1] = 1;
+    rotated_bitmap[2] = 0;
+    rotated_bitmap[3] = 0;
      */
-    colourCount = 0;
-    paletteCount = 0;
-    /* loop over all pixels */
-    for ( pixelIndex = 0; pixelIndex < (symbol->bitmap_height * symbol->bitmap_width); pixelIndex++)
-    {
-        fFound = 0;
-        /* get pixel colour code */
-        pixelColour = pixelbuf[pixelIndex];
-        /* look, if colour code is already in colour list */
-        for (colourIndex = 0; colourIndex < colourCount; colourIndex++) {
-            if ((State.colourCode)[colourIndex] == pixelColour) {
-                fFound = 1;
-                break;
-            }
-        }
-        /* If colour is already present, go to next colour code */
-        if (fFound)
-            continue;
-
-        /* Colour code not present - add colour code */
-        /* Get RGB value */
-        switch (pixelColour) {
-            case '0': /* standard background */
-                RGBCur[0] = (unsigned char) (16 * ctoi(symbol->bgcolour[0])) + ctoi(symbol->bgcolour[1]);
-                RGBCur[1] = (unsigned char) (16 * ctoi(symbol->bgcolour[2])) + ctoi(symbol->bgcolour[3]);
-                RGBCur[2] = (unsigned char) (16 * ctoi(symbol->bgcolour[4])) + ctoi(symbol->bgcolour[5]);
-                break;
-            case '1': /* standard foreground */
-                RGBCur[0] = (unsigned char) (16 * ctoi(symbol->fgcolour[0])) + ctoi(symbol->fgcolour[1]);
-                RGBCur[1] = (unsigned char) (16 * ctoi(symbol->fgcolour[2])) + ctoi(symbol->fgcolour[3]);
-                RGBCur[2] = (unsigned char) (16 * ctoi(symbol->fgcolour[4])) + ctoi(symbol->fgcolour[5]);
-                break;
-            case 'W': /* white */
-                RGBCur[0] = 255; RGBCur[1] = 255; RGBCur[2] = 255;
-                break;
-            case 'C': /* cyan */
-                RGBCur[0] = 0; RGBCur[1] = 255; RGBCur[2] = 255;
-                break;
-            case 'B': /* blue */
-                RGBCur[0] = 0; RGBCur[1] = 0; RGBCur[2] = 255;
-                break;
-            case 'M': /* magenta */
-                RGBCur[0] = 255; RGBCur[1] = 0; RGBCur[2] = 255;
-                break;
-            case 'R': /* red */
-                RGBCur[0] = 255; RGBCur[1] = 0; RGBCur[2] = 0;
-                break;
-            case 'Y': /* yellow */
-                RGBCur[0] = 255; RGBCur[1] = 255; RGBCur[2] = 0;
-                break;
-            case 'G': /* green */
-                RGBCur[0] = 0; RGBCur[1] = 255; RGBCur[2] = 0;
-                break;
-            case 'K': /* black */
-                RGBCur[0] = 0; RGBCur[1] = 0; RGBCur[2] = 0;
-                break;
-            default: /* error case - return  */
-                strcpy(symbol->errtxt, "611: unknown pixel colour");
-                return ZINT_ERROR_INVALID_DATA;
-        }
-        /* Search, if RGB value is already present */
-        fFound = 0;
-        for (paletteIndex = 0; paletteIndex < paletteCount; paletteIndex++) {
-            if (RGBCur[0] == paletteRGB[paletteIndex][0]
-                && RGBCur[1] == paletteRGB[paletteIndex][1]
-                && RGBCur[2] == paletteRGB[paletteIndex][2])
-            {
-                fFound = 1;
-                break;
-            }
-        }
-        /* RGB not present, add it */
-        if (!fFound) {
-            paletteIndex = paletteCount;
-            paletteRGB[paletteIndex][0] = RGBCur[0];
-            paletteRGB[paletteIndex][1] = RGBCur[1];
-
-            paletteRGB[paletteIndex][2] = RGBCur[2];
-
-            paletteCount++;
-        }
-        /* Add palette index to current colour code */
-        (State.colourCode)[colourCount] = pixelColour;
-        (State.colourPaletteIndex)[colourCount] = paletteIndex;
-        colourCount++;
-    }
-    State.colourCount = colourCount;
-
-    /* find palette bit size from palette size*/
-
-    /* 1,2 -> 1, 3,4 ->2, 5,6,7,8->3 */
-    paletteBitSize = 0;
-    paletteCountCur = paletteCount-1;
-    while (paletteCountCur != 0) {
-        paletteBitSize++;
-        paletteCountCur >>= 1;
-    }
-    /* Minimum is 1 */
-    if (paletteBitSize == 0)
-        paletteBitSize = 1;
-
-    /* palette size 2 ^ bit size */
-    paletteSize = 1<<paletteBitSize;
 
     /* GIF signature (6) */
     memcpy(outbuf, "GIF87a", 6);
     if (TRANSPARENT_INDEX != -1)
         outbuf[4] = '9';
-
     fwrite(outbuf, 6, 1, gif_file);
     /* Screen Descriptor (7) */
     /* Screen Width */
@@ -480,37 +314,23 @@ INTERNAL int gif_pixel_plot(struct zint_symbol *symbol, char *pixelbuf) {
     outbuf[3] = (unsigned char) ((0xff00 & usTemp) / 0x100);
     /* write ImageBits-1 to the three least significant bits of byte 5  of
      * the Screen Descriptor
-     * Bits 76543210
-     *      1        : Global colour map
-     *       111     : 8 bit colour depth of the palette
-     *          0    : Not ordered in decreasing importance
-     *           xxx : palette bit zize - 1
-     */
-    outbuf[4] = (unsigned char) (0xf0 | (0x7 & (paletteBitSize - 1)));
-
-    /*
-     * Background colour index
-     * Default to 0. If colour code 0 or K is present, it is used as index
      */
-
-    backgroundColourIndex = 0;
-    for (colourIndex = 0; colourIndex < colourCount; colourIndex++) {
-        if ((State.colourCode)[colourIndex] == '0' || (State.colourCode)[colourIndex] == 'W') {
-            backgroundColourIndex = (State.colourPaletteIndex)[colourIndex];
-            break;
-        }
-    }
-    outbuf[5] = backgroundColourIndex;
+    outbuf[4] = (unsigned char) (0xf0 | (0x7 & (DESTINATION_IMAGE_BITS - 1)));
+    /*  Background color = colortable index 0 */
+    outbuf[5] = 0x00;
     /* Byte 7 must be 0x00  */
     outbuf[6] = 0x00;
     fwrite(outbuf, 7, 1, gif_file);
-    /* Global Color Table (paletteSize*3) */
-    fwrite(paletteRGB, 3*paletteCount, 1, gif_file);
-    /* add unused palette items to fill palette size */
-    for (paletteIndex = paletteCount; paletteIndex < paletteSize; paletteIndex++) {
-        unsigned char RGBCur[3] = {0,0,0};
-        fwrite(RGBCur, 3, 1, gif_file);
-    }
+    /* Global Color Table (6) */
+    /* RGB 0 color */
+    outbuf[0] = (unsigned char) (16 * ctoi(symbol->bgcolour[0])) + ctoi(symbol->bgcolour[1]);
+    outbuf[1] = (unsigned char) (16 * ctoi(symbol->bgcolour[2])) + ctoi(symbol->bgcolour[3]);
+    outbuf[2] = (unsigned char) (16 * ctoi(symbol->bgcolour[4])) + ctoi(symbol->bgcolour[5]);
+    /* RGB 1 color */
+    outbuf[3] = (unsigned char) (16 * ctoi(symbol->fgcolour[0])) + ctoi(symbol->fgcolour[1]);
+    outbuf[4] = (unsigned char) (16 * ctoi(symbol->fgcolour[2])) + ctoi(symbol->fgcolour[3]);
+    outbuf[5] = (unsigned char) (16 * ctoi(symbol->fgcolour[4])) + ctoi(symbol->fgcolour[5]);
+    fwrite(outbuf, 6, 1, gif_file);
 
     /* Graphic control extension (8) */
     /* A graphic control extension block is used for overlay gifs.
@@ -559,17 +379,15 @@ INTERNAL int gif_pixel_plot(struct zint_symbol *symbol, char *pixelbuf) {
      * information on the local color table.
      * There is no local color table if its most significant bit is reset.
      */
-    outbuf[9] = 0x00;
+    outbuf[9] = (unsigned char) (0 | (0x7 & (DESTINATION_IMAGE_BITS - 1)));
     fwrite(outbuf, 10, 1, gif_file);
 
-    /* prepare state array */
-    State.pIn = (unsigned char *) pixelbuf;
-    State.InLen = symbol->bitmap_height * symbol->bitmap_width;
-    State.pOut = (unsigned char *) lzwoutbuf;
-    State.OutLength = lzoutbufSize;
-
     /* call lzw encoding */
-    byte_out = gif_lzw(&State, paletteBitSize);
+    byte_out = gif_lzw(
+            (unsigned char *) lzwoutbuf,
+            symbol->bitmap_height * symbol->bitmap_width,
+            (unsigned char *) pixelbuf,
+            symbol->bitmap_height * symbol->bitmap_width);
     if (byte_out <= 0) {
         fclose(gif_file);
         return ZINT_ERROR_MEMORY;
index 627057d..3ef4bd6 100644 (file)
@@ -1,7 +1,7 @@
 /*  gridmtx.c - Grid Matrix
 
     libzint - the open source barcode library
-    Copyright (C) 2009-2020 Robin Stuart <rstuart114@gmail.com>
+    Copyright (C) 2009-2017 Robin Stuart <rstuart114@gmail.com>
 
     Redistribution and use in source and binary forms, with or without
     modification, are permitted provided that the following conditions
     OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     SUCH DAMAGE.
  */
-/* vim: set ts=4 sw=4 et : */
 
-/* This file implements Grid Matrix as specified in
+/* This file impliments Grid Matrix as specified in
    AIM Global Document Number AIMD014 Rev. 1.63 Revised 9 Dec 2008 */
 
 #include <stdio.h>
 #include <string.h>
+#include <stdlib.h>
 #ifdef _MSC_VER
 #include <malloc.h>
 #endif
 #include "gridmtx.h"
 #include "gb2312.h"
 
-/* define_mode() stuff */
-
-/* Bits multiplied by this for costs, so as to be whole integer divisible by 2 and 3 */
-#define GM_MULT 6
-
-static const char numeral_nondigits[] = " +-.,"; /* Non-digit numeral set, excluding EOL (carriage return/linefeed) */
-
-/* Whether in numeral or not. If in numeral, *p_numeral_end is set to position after numeral, and *p_numeral_cost is set to per-numeral cost */
-static int in_numeral(const unsigned int gbdata[], const size_t length, const unsigned int posn, unsigned int* p_numeral_end, unsigned int* p_numeral_cost) {
-    unsigned int i, digit_cnt, nondigit, nondigit_posn;
-
-    if (posn < *p_numeral_end) {
-        return 1;
-    }
-
-    /* Attempt to calculate the average 'cost' of using numeric mode in number of bits (times GM_MULT) */
+int number_lat(int gbdata[], const size_t length, const size_t position) {
+    /* Attempt to calculate the 'cost' of using numeric mode from a given position in number of bits */
     /* Also ensures that numeric mode is not selected when it cannot be used: for example in
        a string which has "2.2.0" (cannot have more than one non-numeric character for each
        block of three numeric characters) */
-    for (i = posn, digit_cnt = 0, nondigit = 0, nondigit_posn = 0; i < length && i < posn + 4 && digit_cnt < 3; i++) {
-        if (gbdata[i] >= '0' && gbdata[i] <= '9') {
-            digit_cnt++;
-        } else if (strchr(numeral_nondigits, gbdata[i])) {
-            if (nondigit) {
-                break;
-            }
-            nondigit = 1;
-            nondigit_posn = i;
-        } else if (i < length - 1 && gbdata[i] == 13 && gbdata[i + 1] == 10) {
-            if (nondigit) {
-                break;
+    size_t sp;
+    int numb = 0, nonum = 0;
+    int tally = 0;
+
+    sp = position;
+
+    do {
+        int done = 0;
+
+        if ((gbdata[sp] >= '0') && (gbdata[sp] <= '9')) {
+            numb++;
+            done = 1;
+        }
+        switch (gbdata[sp]) {
+            case ' ':
+            case '+':
+            case '-':
+            case '.':
+            case ',':
+                nonum++;
+                done = 1;
+        }
+        if ((sp + 1) < length) {
+            if ((gbdata[sp] == 0x13) && (gbdata[sp + 1] == 0x10)) {
+                nonum++;
+                done = 1;
+                sp++;
             }
-            i++;
-            nondigit = 2;
-            nondigit_posn = i;
+        }
+
+        if (done == 0) {
+            tally += 80;
         } else {
-            break;
+            if (numb == 3) {
+                if (nonum == 0) {
+                    tally += 10;
+                }
+                if (nonum == 1) {
+                    tally += 20;
+                }
+                if (nonum > 1) {
+                    tally += 80;
+                }
+                numb = 0;
+                nonum = 0;
+            }
         }
+
+        sp++;
+    } while ((sp < length) && (sp <= (position + 8)));
+
+    if (numb == 0) {
+        tally += 80;
     }
-    if (digit_cnt == 0) { /* Must have at least one digit */
-        *p_numeral_end = 0;
-        return 0;
+
+    if (numb > 1) {
+        if (nonum == 0) {
+            tally += 10;
+        }
+        if (nonum == 1) {
+            tally += 20;
+        }
+        if (nonum > 1) {
+            tally += 80;
+        }
     }
-    if (nondigit && nondigit_posn == i - 1) { /* Non-digit can't be at end */
-        nondigit = 0;
+
+    return tally;
+}
+
+static int seek_forward(int gbdata[], const size_t length, const size_t position, int current_mode) {
+    /* In complete contrast to the method recommended in Annex D of the ANSI standard this
+       code uses a look-ahead test in the same manner as Data Matrix. This decision was made
+       because the "official" algorithm does not provide clear methods for dealing with all
+       possible combinations of input data */
+
+    int number_count, byte_count, mixed_count, upper_count, lower_count, chinese_count;
+    int    best_mode;
+   size_t sp;
+    int best_count, last = -1;
+    int debug = 0;
+
+    if (gbdata[position] > 0xff) {
+        return GM_CHINESE;
     }
-    *p_numeral_end = posn + digit_cnt + nondigit;
-    /* Calculate per-numeral cost where 120 == (10 + 10) * GM_MULT, 60 == 10 * GM_MULT */
-    if (digit_cnt == 3) {
-        *p_numeral_cost = nondigit == 2 ? 24 /* (120 / 5) */ : nondigit == 1 ? 30 /* (120 / 4) */ : 20 /* (60 / 3) */;
-    } else if (digit_cnt == 2) {
-        *p_numeral_cost = nondigit == 2 ? 30 /* (120 / 4) */ : nondigit == 1 ? 40 /* (120 / 3) */ : 30 /* (60 / 2) */;
-    } else {
-        *p_numeral_cost = nondigit == 2 ? 40 /* (120 / 3) */ : nondigit == 1 ? 60 /* (120 / 2) */ : 60 /* (60 / 1) */;
+
+    switch (current_mode) {
+        case GM_CHINESE:
+            number_count = 13;
+            byte_count = 13;
+            mixed_count = 13;
+            upper_count = 13;
+            lower_count = 13;
+            chinese_count = 0;
+            break;
+        case GM_NUMBER:
+            number_count = 0;
+            byte_count = 10;
+            mixed_count = 10;
+            upper_count = 10;
+            lower_count = 10;
+            chinese_count = 10;
+            break;
+        case GM_LOWER:
+            number_count = 5;
+            byte_count = 7;
+            mixed_count = 7;
+            upper_count = 5;
+            lower_count = 0;
+            chinese_count = 5;
+            break;
+        case GM_UPPER:
+            number_count = 5;
+            byte_count = 7;
+            mixed_count = 7;
+            upper_count = 0;
+            lower_count = 5;
+            chinese_count = 5;
+            break;
+        case GM_MIXED:
+            number_count = 10;
+            byte_count = 10;
+            mixed_count = 0;
+            upper_count = 10;
+            lower_count = 10;
+            chinese_count = 10;
+            break;
+        case GM_BYTE:
+            number_count = 4;
+            byte_count = 0;
+            mixed_count = 4;
+            upper_count = 4;
+            lower_count = 4;
+            chinese_count = 4;
+            break;
+        default: /* Start of symbol */
+            number_count = 4;
+            byte_count = 4;
+            mixed_count = 4;
+            upper_count = 4;
+            lower_count = 4;
+            chinese_count = 4;
     }
-    return 1;
-}
 
-/* Encoding modes */
-#define GM_CHINESE  'H'
-#define GM_NUMBER   'N'
-#define GM_LOWER    'L'
-#define GM_UPPER    'U'
-#define GM_MIXED    'M'
-#define GM_BYTE     'B'
-/* Note Control is a submode of Lower, Upper and Mixed modes */
-
-/* Indexes into mode_types array */
-#define GM_H   0 /* Chinese (Hanzi) */
-#define GM_N   1 /* Numeral */
-#define GM_L   2 /* Lower case */
-#define GM_U   3 /* Upper case */
-#define GM_M   4 /* Mixed */
-#define GM_B   5 /* Byte */
-
-#define GM_NUM_MODES 6
-
-/* Initial mode costs */
-static unsigned int head_costs[GM_NUM_MODES] = {
-/*  H            N (+pad prefix)    L            U            M            B (+byte count) */
-    4 * GM_MULT, (4 + 2) * GM_MULT, 4 * GM_MULT, 4 * GM_MULT, 4 * GM_MULT, (4 + 9) * GM_MULT
-};
-
-static unsigned int* gm_head_costs(unsigned int state[]) {
-    (void)state; /* Unused */
-    return head_costs;
-}
+    for (sp = position; (sp < length) && (sp <= (position + 8)); sp++) {
 
-/* Cost of switching modes from k to j - see AIMD014 Rev. 1.63 Table 9 – Type conversion codes */
-static unsigned int gm_switch_cost(unsigned int state[], const int k, const int j) {
-    static const unsigned int switch_costs[GM_NUM_MODES][GM_NUM_MODES] = {
-        /*      H             N                   L             U             M             B  */
-        /*H*/ {            0, (13 + 2) * GM_MULT, 13 * GM_MULT, 13 * GM_MULT, 13 * GM_MULT, (13 + 9) * GM_MULT },
-        /*N*/ { 10 * GM_MULT,                  0, 10 * GM_MULT, 10 * GM_MULT, 10 * GM_MULT, (10 + 9) * GM_MULT },
-        /*L*/ {  5 * GM_MULT,  (5 + 2) * GM_MULT,            0,  5 * GM_MULT,  7 * GM_MULT,  (7 + 9) * GM_MULT },
-        /*U*/ {  5 * GM_MULT,  (5 + 2) * GM_MULT,  5 * GM_MULT,            0,  7 * GM_MULT,  (7 + 9) * GM_MULT },
-        /*M*/ { 10 * GM_MULT, (10 + 2) * GM_MULT, 10 * GM_MULT, 10 * GM_MULT,            0, (10 + 9) * GM_MULT },
-        /*B*/ {  4 * GM_MULT,  (4 + 2) * GM_MULT,  4 * GM_MULT,  4 * GM_MULT,  4 * GM_MULT,                  0 },
-    };
-
-    (void)state; /* Unused */
-    return switch_costs[k][j];
-}
+        int done = 0;
 
-/* Final end-of-data cost - see AIMD014 Rev. 1.63 Table 9 – Type conversion codes */
-static unsigned int gm_eod_cost(unsigned int state[], const int k) {
-    static const unsigned int eod_costs[GM_NUM_MODES] = {
-    /*  H             N             L            U            M             B  */
-        13 * GM_MULT, 10 * GM_MULT, 5 * GM_MULT, 5 * GM_MULT, 10 * GM_MULT, 4 * GM_MULT
-    };
+        if (gbdata[sp] >= 0xff) {
+            byte_count += 17;
+            mixed_count += 23;
+            upper_count += 18;
+            lower_count += 18;
+            chinese_count += 13;
+            done = 1;
+        }
 
-    (void)state; /* Unused */
-    return eod_costs[k];
-}
+        if ((gbdata[sp] >= 'a') && (gbdata[sp] <= 'z')) {
+            byte_count += 8;
+            mixed_count += 6;
+            upper_count += 10;
+            lower_count += 5;
+            chinese_count += 13;
+            done = 1;
+        }
 
-/* Calculate cost of encoding current character */
-static void gm_cur_cost(unsigned int state[], const unsigned int gbdata[], const size_t length, const int i, char* char_modes, unsigned int prev_costs[], unsigned int cur_costs[]) {
-    int cm_i = i * GM_NUM_MODES;
-    int double_byte, space, numeric, lower, upper, control, double_digit, eol;
-    unsigned int* p_numeral_end = &state[0];
-    unsigned int* p_numeral_cost = &state[1];
-    unsigned int* p_byte_count = &state[2];
-
-    double_byte = gbdata[i] > 0xFF;
-    space = gbdata[i] == ' ';
-    numeric = gbdata[i] >= '0' && gbdata[i] <= '9';
-    lower = gbdata[i] >= 'a' && gbdata[i] <= 'z';
-    upper = gbdata[i] >= 'A' && gbdata[i] <= 'Z';
-    control = !space && !numeric && !lower && !upper && gbdata[i] < 0x7F; /* Exclude DEL */
-    double_digit = i < (int) length - 1 && numeric && gbdata[i + 1] >= '0' && gbdata[i + 1] <= '9';
-    eol = i < (int) length - 1 && gbdata[i] == 13 && gbdata[i + 1] == 10;
-
-    /* Hanzi mode can encode anything */
-    cur_costs[GM_H] = prev_costs[GM_H] + (double_digit || eol ? 39 : 78); /* (6.5 : 13) * GM_MULT */
-    char_modes[cm_i + GM_H] = GM_CHINESE;
-
-    /* Byte mode can encode anything */
-    if (*p_byte_count == 512 || (double_byte && *p_byte_count == 511)) {
-        cur_costs[GM_B] = head_costs[GM_B];
-        if (double_byte && *p_byte_count == 511) {
-            cur_costs[GM_B] += 48; /* 8 * GM_MULT */
-            double_byte = 0; /* Splitting double-byte so mark as single */
+        if ((gbdata[sp] >= 'A') && (gbdata[sp] <= 'Z')) {
+            byte_count += 8;
+            mixed_count += 6;
+            upper_count += 5;
+            lower_count += 10;
+            chinese_count += 13;
+            done = 1;
         }
-        *p_byte_count = 0;
-    }
-    cur_costs[GM_B] += prev_costs[GM_B] + (double_byte ? 96 : 48); /* (16 : 8) * GM_MULT */
-    char_modes[cm_i + GM_B] = GM_BYTE;
-    *p_byte_count += double_byte ? 2 : 1;
 
-    if (in_numeral(gbdata, length, i, p_numeral_end, p_numeral_cost)) {
-        cur_costs[GM_N] = prev_costs[GM_N] + *p_numeral_cost;
-        char_modes[cm_i + GM_N] = GM_NUMBER;
-    }
+        if ((gbdata[sp] >= '0') && (gbdata[sp] <= '9')) {
+            byte_count += 8;
+            mixed_count += 6;
+            upper_count += 8;
+            lower_count += 8;
+            chinese_count += 13;
+            done = 1;
+        }
 
-    if (control) {
-        cur_costs[GM_L] = prev_costs[GM_L] + 78; /* (7 + 6) * GM_MULT */
-        char_modes[cm_i + GM_L] = GM_LOWER;
-        cur_costs[GM_U] = prev_costs[GM_U] + 78; /* (7 + 6) * GM_MULT */
-        char_modes[cm_i + GM_U] = GM_UPPER;
-        cur_costs[GM_M] = prev_costs[GM_M] + 96; /* (10 + 6) * GM_MULT */
-        char_modes[cm_i + GM_M] = GM_MIXED;
-    } else {
-        if (lower || space) {
-            cur_costs[GM_L] = prev_costs[GM_L] + 30; /* 5 * GM_MULT */
-            char_modes[cm_i + GM_L] = GM_LOWER;
+        if (gbdata[sp] == ' ') {
+            byte_count += 8;
+            mixed_count += 6;
+            upper_count += 5;
+            lower_count += 5;
+            chinese_count += 13;
+            done = 1;
         }
-        if (upper || space) {
-            cur_costs[GM_U] = prev_costs[GM_U] + 30; /* 5 * GM_MULT */
-            char_modes[cm_i + GM_U] = GM_UPPER;
+
+        if (done == 0) {
+            /* Control character */
+            byte_count += 8;
+            mixed_count += 16;
+            upper_count += 13;
+            lower_count += 13;
+            chinese_count += 13;
         }
-        if (numeric || lower || upper || space) {
-            cur_costs[GM_M] = prev_costs[GM_M] + 36; /* 6 * GM_MULT */
-            char_modes[cm_i + GM_M] = GM_MIXED;
+
+        if (gbdata[sp] >= 0x7f) {
+            mixed_count += 20;
+            upper_count += 20;
+            lower_count += 20;
         }
     }
-}
 
-/* Calculate optimized encoding modes */
-static void define_mode(char* mode, const unsigned int gbdata[], const size_t length, const int debug) {
-    static const char mode_types[] = { GM_CHINESE, GM_NUMBER, GM_LOWER, GM_UPPER, GM_MIXED, GM_BYTE }; /* Must be in same order as GM_H etc */
-    unsigned int state[3] = { 0 /*numeral_end*/, 0 /*numeral_cost*/, 0 /*byte_count*/ };
+    /* Adjust for <end of line> */
+    for (sp = position; (sp < (length - 1)) && (sp <= (position + 7)); sp++) {
+        if ((gbdata[sp] == 0x13) && (gbdata[sp + 1] == 0x10)) {
+            chinese_count -= 13;
+        }
+    }
+
+    /* Adjust for double digits */
+    for (sp = position; (sp < (length - 1)) && (sp <= (position + 7)); sp++) {
+        if (sp != last) {
+            if (((gbdata[sp] >= '0') && (gbdata[sp] <= '9')) && ((gbdata[sp + 1] >= '0') && (gbdata[sp + 1] <= '9'))) {
+                chinese_count -= 13;
+                last = (int)(sp + 1);
+            }
+        }
+    }
+
+    /* Numeric mode is more complex */
+    number_count += number_lat(gbdata, length, position);
+
+    if (debug) {
+        printf("C %d / B %d / M %d / U %d / L %d / N %d\n", chinese_count, byte_count, mixed_count, upper_count, lower_count, number_count);
+    }
+
+    best_count = chinese_count;
+    best_mode = GM_CHINESE;
+
+    if (byte_count <= best_count) {
+        best_count = byte_count;
+        best_mode = GM_BYTE;
+    }
+
+    if (mixed_count <= best_count) {
+        best_count = mixed_count;
+        best_mode = GM_MIXED;
+    }
+
+    if (upper_count <= best_count) {
+        best_count = upper_count;
+        best_mode = GM_UPPER;
+    }
+
+    if (lower_count <= best_count) {
+        best_count = lower_count;
+        best_mode = GM_LOWER;
+    }
+
+    if (number_count <= best_count) {
+        best_count = number_count;
+        best_mode = GM_NUMBER;
+    }
 
-    pn_define_mode(mode, gbdata, length, debug, state, mode_types, GM_NUM_MODES, gm_head_costs, gm_switch_cost, gm_eod_cost, gm_cur_cost);
+    return best_mode;
 }
 
 /* Add the length indicator for byte encoded blocks */
 static void add_byte_count(char binary[], const size_t byte_count_posn, const int byte_count) {
-    /* AIMD014 6.3.7: "Let L be the number of bytes of input data to be encoded in the 8-bit binary data set.
-     * First output (L-1) as a 9-bit binary prefix to record the number of bytes..." */
-    bin_append_posn(byte_count - 1, 9, binary, byte_count_posn);
+    int p;
+
+    for (p = 0; p < 8; p++) {
+        if (byte_count & (0x100 >> p)) {
+            binary[byte_count_posn + p] = '0';
+        } else {
+            binary[byte_count_posn + p] = '1';
+        }
+    }
 }
 
 /* Add a control character to the data stream */
-static void add_shift_char(char binary[], int shifty, int debug) {
-    int i;
+void add_shift_char(char binary[], int shifty) {
+    int i, debug = 0;
     int glyph = 0;
 
     for (i = 0; i < 64; i++) {
         if (shift_set[i] == shifty) {
             glyph = i;
-            break;
         }
     }
 
-    if (debug & ZINT_DEBUG_PRINT) {
+    if (debug) {
         printf("SHIFT [%d] ", glyph);
     }
 
     bin_append(glyph, 6, binary);
 }
 
-static int gm_encode(unsigned int gbdata[], const size_t length, char binary[], const int reader, const int eci, int debug) {
+static int gm_encode(int gbdata[], const size_t length, char binary[],const int reader,const int eci, int debug) {
     /* Create a binary stream representation of the input data.
        7 sets are defined - Chinese characters, Numerals, Lower case letters, Upper case letters,
        Mixed numerals and latters, Control characters and 8-bit binary data */
-    unsigned int sp;
-    int current_mode, last_mode;
-    unsigned int glyph = 0;
+    int sp, current_mode, last_mode, glyph = 0;
     int c1, c2, done;
     int p = 0, ppos;
     int numbuf[3], punt = 0;
     size_t number_pad_posn, byte_count_posn = 0;
     int byte_count = 0;
     int shift;
-#ifndef _MSC_VER
-    char mode[length];
-#else
-    char* mode = (char*) _alloca(length);
-#endif
 
     strcpy(binary, "");
 
@@ -300,10 +382,8 @@ static int gm_encode(unsigned int gbdata[], const size_t length, char binary[],
         }
     }
 
-    define_mode(mode, gbdata, length, debug);
-
     do {
-        int next_mode = mode[sp];
+        int next_mode = seek_forward(gbdata, length, sp, current_mode);
 
         if (next_mode != current_mode) {
             switch (current_mode) {
@@ -411,7 +491,7 @@ static int gm_encode(unsigned int gbdata[], const size_t length, char binary[],
                     }
                     break;
             }
-            if (debug & ZINT_DEBUG_PRINT) {
+            if (debug) {
                 switch (next_mode) {
                     case GM_CHINESE: printf("CHIN ");
                         break;
@@ -439,21 +519,22 @@ static int gm_encode(unsigned int gbdata[], const size_t length, char binary[],
                     c1 = (gbdata[sp] & 0xff00) >> 8;
                     c2 = gbdata[sp] & 0xff;
 
-                    if ((c1 >= 0xa1) && (c1 <= 0xa9)) {
+                    if ((c1 >= 0xa0) && (c1 <= 0xa9)) {
                         glyph = (0x60 * (c1 - 0xa1)) + (c2 - 0xa0);
-                    } else if ((c1 >= 0xb0) && (c1 <= 0xf7)) {
+                    }
+                    if ((c1 >= 0xb0) && (c1 <= 0xf7)) {
                         glyph = (0x60 * (c1 - 0xb0 + 9)) + (c2 - 0xa0);
                     }
-                    done = 1; /* GB 2312 always within above ranges */
+                    done = 1;
                 }
                 if (!(done)) {
                     if (sp != (length - 1)) {
-                        if ((gbdata[sp] == 13) && (gbdata[sp + 1] == 10)) {
+                        if ((gbdata[sp] == 0x13) && (gbdata[sp + 1] == 0x10)) {
                             /* End of Line */
                             glyph = 7776;
                             sp++;
-                            done = 1;
                         }
+                        done = 1;
                     }
                 }
                 if (!(done)) {
@@ -463,7 +544,6 @@ static int gm_encode(unsigned int gbdata[], const size_t length, char binary[],
                             /* Two digits */
                             glyph = 8033 + (10 * (gbdata[sp] - '0')) + (gbdata[sp + 1] - '0');
                             sp++;
-                            done = 1;
                         }
                     }
                 }
@@ -472,7 +552,7 @@ static int gm_encode(unsigned int gbdata[], const size_t length, char binary[],
                     glyph = 7777 + gbdata[sp];
                 }
 
-                if (debug & ZINT_DEBUG_PRINT) {
+                if (debug) {
                     printf("[%d] ", glyph);
                 }
 
@@ -498,26 +578,29 @@ static int gm_encode(unsigned int gbdata[], const size_t length, char binary[],
                 do {
                     if ((gbdata[sp] >= '0') && (gbdata[sp] <= '9')) {
                         numbuf[p] = gbdata[sp];
+                        sp++;
                         p++;
-                    } else if (strchr(numeral_nondigits, gbdata[sp])) {
-                        if (ppos != -1) {
-                            break;
-                        }
-                        punt = gbdata[sp];
-                        ppos = p;
-                    } else if (sp < (length - 1) && (gbdata[sp] == 13) && (gbdata[sp + 1] == 10)) {
-                        /* <end of line> */
-                        if (ppos != -1) {
+                    }
+                    switch (gbdata[sp]) {
+                        case ' ':
+                        case '+':
+                        case '-':
+                        case '.':
+                        case ',':
+                            punt = gbdata[sp];
+                            sp++;
+                            ppos = p;
                             break;
+                    }
+                    if (sp < (length - 1)) {
+                        if ((gbdata[sp] == 0x13) && (gbdata[sp + 1] == 0x10)) {
+                            /* <end of line> */
+                            punt = gbdata[sp];
+                            sp += 2;
+                            ppos = p;
                         }
-                        punt = gbdata[sp];
-                        sp++;
-                        ppos = p;
-                    } else {
-                        break;
                     }
-                    sp++;
-                } while ((p < 3) && (sp < length) && mode[sp] == GM_NUMBER);
+                } while ((p < 3) && (sp < length));
 
                 if (ppos != -1) {
                     switch (punt) {
@@ -531,13 +614,13 @@ static int gm_encode(unsigned int gbdata[], const size_t length, char binary[],
                             break;
                         case ',': glyph = 12;
                             break;
-                        case 13: glyph = 15;
+                        case 0x13: glyph = 15;
                             break;
                     }
                     glyph += ppos;
                     glyph += 1000;
 
-                    if (debug & ZINT_DEBUG_PRINT) {
+                    if (debug) {
                         printf("[%d] ", glyph);
                     }
 
@@ -545,7 +628,7 @@ static int gm_encode(unsigned int gbdata[], const size_t length, char binary[],
                 }
 
                 glyph = (100 * (numbuf[0] - '0')) + (10 * (numbuf[1] - '0')) + (numbuf[2] - '0');
-                if (debug & ZINT_DEBUG_PRINT) {
+                if (debug) {
                     printf("[%d] ", glyph);
                 }
 
@@ -558,14 +641,8 @@ static int gm_encode(unsigned int gbdata[], const size_t length, char binary[],
                     byte_count_posn = strlen(binary);
                     strcat(binary, "LLLLLLLLL");
                 }
-                glyph = gbdata[sp];
-                if (byte_count == 512 || (glyph > 0xFF && byte_count == 511)) {
+                if (byte_count == 512) {
                     /* Maximum byte block size is 512 bytes. If longer is needed then start a new block */
-                    if (glyph > 0xFF && byte_count == 511) { /* Split double-byte */
-                        bin_append(glyph >> 8, 8, binary);
-                        glyph &= 0xFF;
-                        byte_count++;
-                    }
                     add_byte_count(binary, byte_count_posn, byte_count);
                     bin_append(7, 4, binary);
                     byte_count_posn = strlen(binary);
@@ -573,15 +650,13 @@ static int gm_encode(unsigned int gbdata[], const size_t length, char binary[],
                     byte_count = 0;
                 }
 
-                if (debug & ZINT_DEBUG_PRINT) {
+                glyph = gbdata[sp];
+                if (debug) {
                     printf("[%d] ", glyph);
                 }
-                bin_append(glyph, glyph > 0xFF ? 16 : 8, binary);
+                bin_append(glyph, 8, binary);
                 sp++;
                 byte_count++;
-                if (glyph > 0xFF) {
-                    byte_count++;
-                }
                 break;
 
             case GM_MIXED:
@@ -602,7 +677,7 @@ static int gm_encode(unsigned int gbdata[], const size_t length, char binary[],
                 if (shift == 0) {
                     /* Mixed Mode character */
                     glyph = posn(EUROPIUM, gbdata[sp]);
-                    if (debug & ZINT_DEBUG_PRINT) {
+                    if (debug) {
                         printf("[%d] ", glyph);
                     }
 
@@ -610,7 +685,7 @@ static int gm_encode(unsigned int gbdata[], const size_t length, char binary[],
                 } else {
                     /* Shift Mode character */
                     bin_append(1014, 10, binary); /* shift indicator */
-                    add_shift_char(binary, gbdata[sp], debug);
+                    add_shift_char(binary, gbdata[sp]);
                 }
 
                 sp++;
@@ -628,7 +703,7 @@ static int gm_encode(unsigned int gbdata[], const size_t length, char binary[],
                 if (shift == 0) {
                     /* Upper Case character */
                     glyph = posn("ABCDEFGHIJKLMNOPQRSTUVWXYZ ", gbdata[sp]);
-                    if (debug & ZINT_DEBUG_PRINT) {
+                    if (debug) {
                         printf("[%d] ", glyph);
                     }
 
@@ -636,7 +711,7 @@ static int gm_encode(unsigned int gbdata[], const size_t length, char binary[],
                 } else {
                     /* Shift Mode character */
                     bin_append(125, 7, binary); /* shift indicator */
-                    add_shift_char(binary, gbdata[sp], debug);
+                    add_shift_char(binary, gbdata[sp]);
                 }
 
                 sp++;
@@ -654,7 +729,7 @@ static int gm_encode(unsigned int gbdata[], const size_t length, char binary[],
                 if (shift == 0) {
                     /* Lower Case character */
                     glyph = posn("abcdefghijklmnopqrstuvwxyz ", gbdata[sp]);
-                    if (debug & ZINT_DEBUG_PRINT) {
+                    if (debug) {
                         printf("[%d] ", glyph);
                     }
 
@@ -662,7 +737,7 @@ static int gm_encode(unsigned int gbdata[], const size_t length, char binary[],
                 } else {
                     /* Shift Mode character */
                     bin_append(125, 7, binary); /* shift indicator */
-                    add_shift_char(binary, gbdata[sp], debug);
+                    add_shift_char(binary, gbdata[sp]);
                 }
 
                 sp++;
@@ -711,9 +786,10 @@ static int gm_encode(unsigned int gbdata[], const size_t length, char binary[],
 
     /* Add padding bits if required */
     p = 7 - (strlen(binary) % 7);
-    if (p % 7) {
-        bin_append(0, p, binary);
+    if (p == 7) {
+        p = 0;
     }
+    bin_append(0, p, binary);
 
     if (strlen(binary) > 9191) {
         return ZINT_ERROR_TOO_LONG;
@@ -721,11 +797,11 @@ static int gm_encode(unsigned int gbdata[], const size_t length, char binary[],
     return 0;
 }
 
-static void gm_add_ecc(const char binary[], const size_t data_posn, const int layers, const int ecc_level, unsigned char word[]) {
+static void gm_add_ecc(const char binary[], const size_t data_posn, const int layers, const int ecc_level, int word[]) {
     int data_cw, i, j, wp, p;
     int n1, b1, n2, b2, e1, b3, e2;
     int block_size, ecc_size;
-    unsigned char data[1320], block[130];
+    int data[1320], block[130];
     unsigned char data_block[115], ecc_block[70];
 
     data_cw = gm_data_codewords[((layers - 1) * 5) + (ecc_level - 1)];
@@ -734,8 +810,8 @@ static void gm_add_ecc(const char binary[], const size_t data_posn, const int la
         data[i] = 0;
     }
 
-    /* Convert from binary stream to 7-bit codewords */
-    for (i = 0; i < (int) data_posn; i++) {
+    /* Convert from binary sream to 7-bit codewords */
+    for (i = 0; i < data_posn; i++) {
         for (p = 0; p < 7; p++) {
             if (binary[i * 7 + p] == '1') {
                 data[i] += (0x40 >> p);
@@ -808,7 +884,7 @@ static void gm_add_ecc(const char binary[], const size_t data_posn, const int la
     }
 }
 
-static void place_macromodule(char grid[], int x, int y, int word1, int word2, int size) {
+void place_macromodule(char grid[], int x, int y, int word1, int word2, int size) {
     int i, j;
 
     i = (x * 6) + 1;
@@ -858,7 +934,7 @@ static void place_macromodule(char grid[], int x, int y, int word1, int word2, i
     }
 }
 
-static void place_data_in_grid(unsigned char word[], char grid[], int modules, int size) {
+void place_data_in_grid(int word[], char grid[], int modules, int size) {
     int x, y, macromodule, offset;
 
     offset = 13 - ((modules - 1) / 2);
@@ -871,7 +947,7 @@ static void place_data_in_grid(unsigned char word[], char grid[], int modules, i
 }
 
 /* Place the layer ID into each macromodule */
-static void place_layer_id(char* grid, int size, int layers, int modules, int ecc_level) {
+void place_layer_id(char* grid, int size, int layers, int modules, int ecc_level) {
     int i, j, layer, start, stop;
 
 #ifndef _MSC_VER
@@ -924,48 +1000,55 @@ static void place_layer_id(char* grid, int size, int layers, int modules, int ec
     }
 }
 
-INTERNAL int grid_matrix(struct zint_symbol *symbol, const unsigned char source[], size_t length) {
+int grid_matrix(struct zint_symbol *symbol, const unsigned char source[], size_t length) {
     int size, modules, error_number;
     int auto_layers, min_layers, layers, auto_ecc_level, min_ecc_level, ecc_level;
     int x, y, i;
-    int full_multibyte;
     char binary[9300];
     int data_cw, input_latch = 0;
-    unsigned char word[1460];
-    int data_max, reader = 0;
+    int word[1460], data_max, reader = 0;
 
 #ifndef _MSC_VER
-    unsigned int gbdata[length + 1];
+    int utfdata[length + 1];
+    int gbdata[length + 1];
 #else
     char* grid;
-    unsigned int* gbdata = (unsigned int *) _alloca((length + 1) * sizeof (unsigned int));
+    int* utfdata = (int *) _alloca((length + 1) * sizeof (int));
+    int* gbdata = (int *) _alloca((length + 1) * sizeof (int));
 #endif
 
     for (i = 0; i < 1460; i++) {
         word[i] = 0;
     }
 
-    full_multibyte = symbol->option_3 == ZINT_FULL_MULTIBYTE; /* If set use Hanzi mode in DATA_MODE or for single-byte Latin */
-
-    if ((symbol->input_mode & 0x07) == DATA_MODE) {
-        gb2312_cpy(source, &length, gbdata, full_multibyte);
+    if ((symbol->input_mode == DATA_MODE) || (symbol->eci != 0)) {
+        for (i = 0; i < length; i++) {
+            gbdata[i] = (int) source[i];
+        }
     } else {
-        int done = 0;
-        if (symbol->eci != 29) { /* Unless ECI 29 (GB) */
-            /* Try single byte (Latin) conversion first */
-            int error_number = gb2312_utf8tosb(symbol->eci && symbol->eci <= 899 ? symbol->eci : 3, source, &length, gbdata, full_multibyte);
-            if (error_number == 0) {
-                done = 1;
-            } else if (symbol->eci && symbol->eci <= 899) {
-                strcpy(symbol->errtxt, "575: Invalid characters in input data");
-                return error_number;
-            }
+        /* Convert Unicode input to GB-2312 */
+        error_number = utf8toutf16(symbol, source, utfdata, &length);
+        if (error_number != 0) {
+            return error_number;
         }
-        if (!done) {
-            /* Try GB 2312 (EUC-CN) */
-            int error_number = gb2312_utf8tomb(symbol, source, &length, gbdata);
-            if (error_number != 0) {
-                return error_number;
+
+        for (i = 0; i < length; i++) {
+            if (utfdata[i] <= 0xff) {
+                gbdata[i] = utfdata[i];
+            } else {
+                int j = 0;
+                int glyph = 0;
+                do {
+                    if (gb2312_lookup[j * 2] == utfdata[i]) {
+                        glyph = gb2312_lookup[(j * 2) + 1];
+                    }
+                    j++;
+                } while ((j < 7445) && (glyph == 0));
+                if (glyph == 0) {
+                    strcpy(symbol->errtxt, "530: Invalid character in input data");
+                    return ZINT_ERROR_INVALID_DATA;
+                }
+                gbdata[i] = glyph;
             }
         }
     }
@@ -999,17 +1082,6 @@ INTERNAL int grid_matrix(struct zint_symbol *symbol, const unsigned char source[
         }
     }
     layers = auto_layers;
-
-    if ((symbol->option_2 >= 1) && (symbol->option_2 <= 13)) {
-        input_latch = 1;
-        if (symbol->option_2 >= min_layers) {
-            layers = symbol->option_2;
-        } else {
-            strcpy(symbol->errtxt, "534: Input data too long for selected symbol size");
-            return ZINT_ERROR_TOO_LONG;
-        }
-    }
-
     auto_ecc_level = 3;
     if (layers == 1) {
         auto_ecc_level = 5;
@@ -1017,34 +1089,51 @@ INTERNAL int grid_matrix(struct zint_symbol *symbol, const unsigned char source[
     if ((layers == 2) || (layers == 3)) {
         auto_ecc_level = 4;
     }
-    ecc_level = auto_ecc_level;
-
     min_ecc_level = 1;
     if (layers == 1) {
         min_ecc_level = 4;
     }
-    if (layers == 2) {
+    if ((layers == 2) || (layers == 3)) {
         min_ecc_level = 2;
     }
+    ecc_level = auto_ecc_level;
 
-    if ((symbol->option_1 >= 1) && (symbol->option_1 <= 5)) {
-        if (symbol->option_1 >= min_ecc_level) {
-            ecc_level = symbol->option_1;
+    if ((symbol->option_2 >= 1) && (symbol->option_2 <= 13)) {
+        input_latch = 1;
+        if (symbol->option_2 > min_layers) {
+            layers = symbol->option_2;
         } else {
-            ecc_level = min_ecc_level;
+            strcpy(symbol->errtxt, "534: Input data too long for selected symbol size");
+            return ZINT_ERROR_TOO_LONG;
         }
     }
-    if (data_cw > gm_data_codewords[(5 * (layers - 1)) + (ecc_level - 1)]) {
-        if (input_latch && ecc_level > min_ecc_level) { /* If layers user-specified (option_2), try reducing ECC level first */
-            do {
-                ecc_level--;
-            } while ((data_cw > gm_data_codewords[(5 * (layers - 1)) + (ecc_level - 1)]) && (ecc_level > min_ecc_level));
+
+    if (input_latch == 1) {
+        auto_ecc_level = 3;
+        if (layers == 1) {
+            auto_ecc_level = 5;
+        }
+        if ((layers == 2) || (layers == 3)) {
+            auto_ecc_level = 4;
         }
-        while (data_cw > gm_data_codewords[(5 * (layers - 1)) + (ecc_level - 1)] && (layers < 13)) {
+        ecc_level = auto_ecc_level;
+        if (data_cw > gm_data_codewords[(5 * (layers - 1)) + (ecc_level - 1)]) {
             layers++;
         }
-        while (data_cw > gm_data_codewords[(5 * (layers - 1)) + (ecc_level - 1)] && ecc_level > 1) { /* ECC min level 1 for layers > 2 */
-            ecc_level--;
+    }
+
+    if (input_latch == 0) {
+        if ((symbol->option_1 >= 1) && (symbol->option_1 <= 5)) {
+            if (symbol->option_1 > min_ecc_level) {
+                ecc_level = symbol->option_1;
+            } else {
+                ecc_level = min_ecc_level;
+            }
+        }
+        if (data_cw > gm_data_codewords[(5 * (layers - 1)) + (ecc_level - 1)]) {
+            do {
+                layers++;
+            } while ((data_cw > gm_data_codewords[(5 * (layers - 1)) + (ecc_level - 1)]) && (layers <= 13));
         }
     }
 
@@ -1066,9 +1155,6 @@ INTERNAL int grid_matrix(struct zint_symbol *symbol, const unsigned char source[
     }
 
     gm_add_ecc(binary, data_cw, layers, ecc_level, word);
-#ifdef ZINT_TEST
-    if (symbol->debug & ZINT_DEBUG_TEST) debug_test_codeword_dump(symbol, word, data_cw);
-#endif
     size = 6 + (layers * 12);
     modules = 1 + (layers * 2);
 
@@ -1121,3 +1207,5 @@ INTERNAL int grid_matrix(struct zint_symbol *symbol, const unsigned char source[
 
     return 0;
 }
+
+
index f0d58c8..b7f70ab 100644 (file)
     OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     SUCH DAMAGE.
  */
-/* vim: set ts=4 sw=4 et : */
+
+#define GM_NUMBER      1
+#define GM_LOWER       2
+#define GM_UPPER       3
+#define GM_MIXED       4
+#define GM_CONTROL     5
+#define GM_BYTE                6
+#define GM_CHINESE     7
 
 #define EUROPIUM       "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz "
 
index 39791f8..5015c49 100644 (file)
@@ -2,7 +2,7 @@
 
 /*
     libzint - the open source barcode library
-    Copyright (C) 2009 - 2020 Robin Stuart <rstuart114@gmail.com>
+    Copyright (C) 2009-2017 Robin Stuart <rstuart114@gmail.com>
 
     Redistribution and use in source and binary forms, with or without
     modification, are permitted provided that the following conditions
@@ -32,6 +32,7 @@
 /* vim: set ts=4 sw=4 et : */
 
 #include <string.h>
+#include <stdlib.h>
 #include <stdio.h>
 #ifdef _MSC_VER
 #include <malloc.h>
@@ -43,7 +44,7 @@
    to be bulletproof, nor does it report very accurately what problem was found
    or where, but should prevent some of the more common encoding errors */
 
-static void itostr(char ai_string[], int ai_value) {
+void itostr(char ai_string[], int ai_value) {
     int thou, hund, ten, unit;
     char temp[2];
 
@@ -69,7 +70,7 @@ static void itostr(char ai_string[], int ai_value) {
     strcat(ai_string, ")");
 }
 
-INTERNAL int gs1_verify(struct zint_symbol *symbol, const unsigned char source[], const size_t src_len, char reduced[]) {
+int gs1_verify(struct zint_symbol *symbol, const unsigned char source[], const size_t src_len, char reduced[]) {
     int i, j, last_ai, ai_latch;
     char ai_string[7]; /* 6 char max "(NNNN)" */
     int bracket_level, max_bracket_level, ai_length, max_ai_length, min_ai_length;
@@ -92,7 +93,7 @@ INTERNAL int gs1_verify(struct zint_symbol *symbol, const unsigned char source[]
 #endif
 
     /* Detect extended ASCII characters */
-    for (i = 0; i < (int) src_len; i++) {
+    for (i = 0; i < src_len; i++) {
         if (source[i] >= 128) {
             strcpy(symbol->errtxt, "250: Extended ASCII characters are not supported by GS1");
             return ZINT_ERROR_INVALID_DATA;
@@ -105,10 +106,6 @@ INTERNAL int gs1_verify(struct zint_symbol *symbol, const unsigned char source[]
             strcpy(symbol->errtxt, "251: Control characters are not supported by GS1");
             return ZINT_ERROR_INVALID_DATA;
         }
-        if (source[i] == 127) {
-            strcpy(symbol->errtxt, "263: DEL characters are not supported by GS1");
-            return ZINT_ERROR_INVALID_DATA;
-        }
     }
 
     if (source[0] != '[') {
@@ -124,7 +121,7 @@ INTERNAL int gs1_verify(struct zint_symbol *symbol, const unsigned char source[]
     min_ai_length = 5;
     j = 0;
     ai_latch = 0;
-    for (i = 0; i < (int) src_len; i++) {
+    for (i = 0; i < src_len; i++) {
         ai_length += j;
         if (((j == 1) && (source[i] != ']')) && ((source[i] < '0') || (source[i] > '9'))) {
             ai_latch = 1;
@@ -181,7 +178,7 @@ INTERNAL int gs1_verify(struct zint_symbol *symbol, const unsigned char source[]
     }
 
     ai_count = 0;
-    for (i = 1; i < (int) src_len; i++) {
+    for (i = 1; i < src_len; i++) {
         if (source[i - 1] == '[') {
             ai_location[ai_count] = i;
             j = 0;
@@ -206,7 +203,7 @@ INTERNAL int gs1_verify(struct zint_symbol *symbol, const unsigned char source[]
         data_length[i] = 0;
         do {
             data_length[i]++;
-        } while ((source[data_location[i] + data_length[i] - 1] != '[') && (data_location[i] + data_length[i] <= (int) src_len));
+        } while ((source[data_location[i] + data_length[i] - 1] != '[') && (data_location[i] + data_length[i] <= src_len));
         data_length[i]--;
     }
 
@@ -494,7 +491,7 @@ INTERNAL int gs1_verify(struct zint_symbol *symbol, const unsigned char source[]
         }
         
         if (ai_value[i] == 253) { // GDTI
-            if ((data_length[i] < 13) || (data_length[i] > 30)) {
+            if ((data_length[i] < 14) || (data_length[i] > 30)) {
                 error_latch = 1;
             } else {
                 error_latch = 0;
@@ -502,7 +499,7 @@ INTERNAL int gs1_verify(struct zint_symbol *symbol, const unsigned char source[]
         }
         
         if (ai_value[i] == 255) { // GCN
-            if ((data_length[i] < 13) || (data_length[i] > 25)) {
+            if ((data_length[i] < 14) || (data_length[i] > 25)) {
                 error_latch = 1;
             } else {
                 error_latch = 0;
@@ -665,7 +662,7 @@ INTERNAL int gs1_verify(struct zint_symbol *symbol, const unsigned char source[]
     j = 0;
     last_ai = 0;
     ai_latch = 1;
-    for (i = 0; i < (int) src_len; i++) {
+    for (i = 0; i < src_len; i++) {
         if ((source[i] != '[') && (source[i] != ']')) {
             reduced[j++] = source[i];
         }
index 15dff6b..b055cf5 100644 (file)
@@ -1,7 +1,7 @@
 /*  hanxin.c - Han Xin Code
 
     libzint - the open source barcode library
-    Copyright (C) 2009-2020 Robin Stuart <rstuart114@gmail.com>
+    Copyright (C) 2009-2019 Robin Stuart <rstuart114@gmail.com>
 
     Redistribution and use in source and binary forms, with or without
     modification, are permitted provided that the following conditions
     OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     SUCH DAMAGE.
  */
-/* vim: set ts=4 sw=4 et : */
 
-/* This code attempts to implement Han Xin Code according to ISO/IEC 20830 (draft 2019-10-10) (previously AIMD-015:2010 (Rev 0.8)) */
+/* This code attempts to implement Han Xin Code according to AIMD-015:2010 (Rev 0.8) */
 
 #include <stdio.h>
 #include <string.h>
+#include <stdlib.h>
 #ifdef _MSC_VER
 #include <malloc.h>
 #endif
@@ -45,7 +45,7 @@
 #include "assert.h"
 
 /* Find which submode to use for a text character */
-static int getsubmode(unsigned int input) {
+int getsubmode(char input) {
     int submode = 2;
 
     if ((input >= '0') && (input <= '9')) {
@@ -63,104 +63,83 @@ static int getsubmode(unsigned int input) {
     return submode;
 }
 
-/* Return length of terminator for encoding mode */
-static int terminator_length(char mode) {
-    int result = 0;
-
-    switch (mode) {
-        case 'n':
-            result = 10;
-            break;
-        case 't':
-            result = 6;
-            break;
-        case '1':
-        case '2':
-            result = 12;
-            break;
-        case 'd':
-            result = 15;
-            break;
-    }
-
-    return result;
-}
-
-/* Calculate the length of the binary string */
-static int calculate_binlength(char mode[], unsigned int source[], const size_t length, int eci) {
+/* Calculate the approximate length of the binary string */
+static int calculate_binlength(char mode[], int source[], const size_t length, int eci) {
     size_t i;
-    char lastmode = '\0';
+    char lastmode = 't';
     int est_binlen = 0;
     int submode = 1;
-    int numeric_run = 0;
 
     if (eci != 0) {
-        est_binlen += 4;
-        if (eci <= 127) {
-            est_binlen += 8;
-        } else if ((eci >= 128) && (eci <= 16383)) {
-            est_binlen += 16;
-        } else {
-            est_binlen += 24;
-        }
+        est_binlen += 12;
     }
 
     i = 0;
     do {
-        if (mode[i] != lastmode) {
-            if (i > 0) {
-                est_binlen += terminator_length(lastmode);
-            }
-            /* GB 4-byte has indicator for each character (and no terminator) so not included here */
-            /* Region1/Region2 have special terminator to go directly into each other's mode so not included here */
-            if (mode[i] != 'f' || ((mode[i] == '1' && lastmode == '2') || (mode[i] == '2' && lastmode == '1'))) {
-                est_binlen += 4;
-            }
-            if (mode[i] == 'b') { /* Byte mode has byte count (and no terminator) */
-                est_binlen += 13;
-            }
-            lastmode = mode[i];
-            submode = 1;
-            numeric_run = 0;
-        }
         switch (mode[i]) {
             case 'n':
-                if (numeric_run % 3 == 0) {
-                    est_binlen += 10;
+                if (lastmode != 'n') {
+                    est_binlen += 14;
+                    lastmode = 'n';
                 }
-                numeric_run++;
+                est_binlen += 4;
                 break;
             case 't':
-                if (getsubmode(source[i]) != submode) {
+                if (lastmode != 't') {
+                    est_binlen += 10;
+                    lastmode = 't';
+                    submode = 1;
+                }
+                if (getsubmode((char) source[i]) != submode) {
                     est_binlen += 6;
-                    submode = getsubmode(source[i]);
+                    submode = getsubmode((char) source[i]);
                 }
                 est_binlen += 6;
                 break;
             case 'b':
-                est_binlen += source[i] > 0xFF ? 16 : 8;
+                if (lastmode != 'b') {
+                    est_binlen += 17;
+                    lastmode = 'b';
+                }
+                est_binlen += 8;
                 break;
             case '1':
+                if (lastmode != '1') {
+                    est_binlen += 16;
+                    lastmode = '1';
+                }
+                est_binlen += 12;
+                break;
             case '2':
+                if (lastmode != '2') {
+                    est_binlen += 16;
+                    lastmode = '2';
+                }
                 est_binlen += 12;
                 break;
             case 'd':
+                if (lastmode != 'd') {
+                    est_binlen += 16;
+                    lastmode = 'd';
+                }
                 est_binlen += 15;
                 break;
             case 'f':
-                est_binlen += 25;
+                if (lastmode != 'f') {
+                    est_binlen += 4;
+                    lastmode = 'f';
+                }
+                est_binlen += 21;
                 i++;
                 break;
         }
         i++;
     } while (i < length);
 
-    est_binlen += terminator_length(lastmode);
-
     return est_binlen;
 }
 
-static int isRegion1(unsigned int glyph) {
+int isRegion1(int glyph) {
     int first_byte, second_byte;
     int valid = 0;
 
@@ -186,7 +165,7 @@ static int isRegion1(unsigned int glyph) {
     return valid;
 }
 
-static int isRegion2(unsigned int glyph) {
+int isRegion2(int glyph) {
     int first_byte, second_byte;
     int valid = 0;
 
@@ -202,7 +181,7 @@ static int isRegion2(unsigned int glyph) {
     return valid;
 }
 
-static int isDoubleByte(unsigned int glyph) {
+int isDoubleByte(int glyph) {
     int first_byte, second_byte;
     int valid = 0;
 
@@ -222,7 +201,7 @@ static int isDoubleByte(unsigned int glyph) {
     return valid;
 }
 
-static int isFourByte(unsigned int glyph, unsigned int glyph2) {
+int isFourByte(int glyph, int glyph2) {
     int first_byte, second_byte;
     int third_byte, fourth_byte;
     int valid = 0;
@@ -245,9 +224,70 @@ static int isFourByte(unsigned int glyph, unsigned int glyph2) {
     return valid;
 }
 
+/* Calculate mode switching */
+static void hx_define_mode(char mode[], int source[], const size_t length) {
+    size_t i;
+    char lastmode = 't';
+
+    i = 0;
+    do {
+        int done = 0;
+
+        if (isRegion1(source[i])) {
+            mode[i] = '1';
+            done = 1;
+            i++;
+        }
+
+        if ((done == 0) && (isRegion2(source[i]))) {
+            mode[i] = '2';
+            done = 1;
+            i++;
+        }
+
+        if ((done == 0) && (isDoubleByte(source[i]))) {
+            mode[i] = 'd';
+            done = 1;
+            i++;
+        }
+
+        if ((done == 0) && (i < length - 1)) {
+            if (isFourByte(source[i], source[i + 1])) {
+                mode[i] = 'f';
+                mode[i + 1] = 'f';
+                done = 1;
+                i += 2;
+            }
+        }
+
+        if (done == 0) {
+            if ((source[i] >= '0') && (source[i] <= '9')) {
+                mode[i] = 'n';
+                if (lastmode != 'n') {
+                    lastmode = 'n';
+                }
+            } else {
+                if ((source[i] <= 127) && ((source[i] <= 27) || (source[i] >= 32))) {
+                    mode[i] = 't';
+                    if (lastmode != 't') {
+                        lastmode = 't';
+                    }
+                } else {
+                    mode[i] = 'b';
+                    if (lastmode != 'b') {
+                        lastmode = 'b';
+                    }
+                }
+            }
+            i++;
+        }
+    } while (i < length);
+    mode[length] = '\0';
+}
+
 /* Convert Text 1 sub-mode character to encoding value, as given in table 3 */
-static int lookup_text1(unsigned int input) {
-    int encoding_value = -1;
+int lookup_text1(char input) {
+    int encoding_value = 0;
 
     if ((input >= '0') && (input <= '9')) {
         encoding_value = input - '0';
@@ -265,10 +305,10 @@ static int lookup_text1(unsigned int input) {
 }
 
 /* Convert Text 2 sub-mode character to encoding value, as given in table 4 */
-static int lookup_text2(unsigned int input) {
-    int encoding_value = -1;
+int lookup_text2(char input) {
+    int encoding_value = 0;
 
-    if (input <= 27) {
+    if ((input >= 0) && (input <= 27)) {
         encoding_value = input;
     }
 
@@ -276,10 +316,6 @@ static int lookup_text2(unsigned int input) {
         encoding_value = input - ' ' + 28;
     }
 
-    if ((input >= ':') && (input <= '@')) {
-        encoding_value = input - ':' + 44;
-    }
-
     if ((input >= '[') && (input <= 96)) {
         encoding_value = input - '[' + 51;
     }
@@ -291,162 +327,9 @@ static int lookup_text2(unsigned int input) {
     return encoding_value;
 }
 
-/* hx_define_mode() stuff */
-
-/* Bits multiplied by this for costs, so as to be whole integer divisible by 2 and 3 */
-#define HX_MULT 6
-
-/* Whether in numeric or not. If in numeric, *p_end is set to position after numeric, and *p_cost is set to per-numeric cost */
-static int in_numeric(const unsigned int gbdata[], const size_t length, const unsigned int posn, unsigned int* p_end, unsigned int* p_cost) {
-    unsigned int i, digit_cnt;
-
-    if (posn < *p_end) {
-        return 1;
-    }
-
-    /* Attempt to calculate the average 'cost' of using numeric mode in number of bits (times HX_MULT) */
-    for (i = posn; i < length && i < posn + 4 && gbdata[i] >= '0' && gbdata[i] <= '9'; i++);
-
-    digit_cnt = i - posn;
-
-    if (digit_cnt == 0) {
-        *p_end = 0;
-        return 0;
-    }
-    *p_end = i;
-    *p_cost = digit_cnt == 1 ? 60 /* 10 * HX_MULT */ : digit_cnt == 2 ? 30 /* (10 / 2) * HX_MULT */ : 20 /* (10 / 3) * HX_MULT */;
-    return 1;
-}
-
-/* Whether in four-byte or not. If in four-byte, *p_fourbyte is set to position after four-byte, and *p_fourbyte_cost is set to per-position cost */
-static int in_fourbyte(const unsigned int gbdata[], const size_t length, const unsigned int posn, unsigned int* p_end, unsigned int* p_cost) {
-    if (posn < *p_end) {
-        return 1;
-    }
-
-    if (posn == length - 1 || !isFourByte(gbdata[posn], gbdata[posn + 1])) {
-        *p_end = 0;
-        return 0;
-    }
-    *p_end = posn + 2;
-    *p_cost = 75; /* ((4 + 21) / 2) * HX_MULT */
-    return 1;
-}
-
-/* Indexes into mode_types array */
-#define HX_N   0 /* Numeric */
-#define HX_T   1 /* Text */
-#define HX_B   2 /* Binary */
-#define HX_1   3 /* Common Chinese Region One */
-#define HX_2   4 /* Common Chinese Region Two */
-#define HX_D   5 /* GB 18030 2-byte Region */
-#define HX_F   6 /* GB 18030 4-byte Region */
-/* Note Unicode, GS1 and URI modes not implemented */
-
-#define HX_NUM_MODES 7
-
-/* Initial mode costs */
-static unsigned int* hx_head_costs(unsigned int state[]) {
-    static unsigned int head_costs[HX_NUM_MODES] = {
-    /*  N            T            B                   1            2            D            F */
-        4 * HX_MULT, 4 * HX_MULT, (4 + 13) * HX_MULT, 4 * HX_MULT, 4 * HX_MULT, 4 * HX_MULT, 0
-    };
-
-    (void)state; /* Unused */
-    return head_costs;
-}
-
-/* Cost of switching modes from k to j */
-static unsigned int hx_switch_cost(unsigned int state[], const int k, const int j) {
-    static const unsigned int switch_costs[HX_NUM_MODES][HX_NUM_MODES] = {
-        /*      N                   T                   B                        1                   2                   D                   F */
-        /*N*/ {                  0, (10 + 4) * HX_MULT, (10 + 4 + 13) * HX_MULT, (10 + 4) * HX_MULT, (10 + 4) * HX_MULT, (10 + 4) * HX_MULT, 10 * HX_MULT },
-        /*T*/ {  (6 + 4) * HX_MULT,                  0,  (6 + 4 + 13) * HX_MULT,  (6 + 4) * HX_MULT,  (6 + 4) * HX_MULT,  (6 + 4) * HX_MULT,  6 * HX_MULT },
-        /*B*/ {        4 * HX_MULT,        4 * HX_MULT,                       0,        4 * HX_MULT,        4 * HX_MULT,        4 * HX_MULT,  0 },
-        /*1*/ { (12 + 4) * HX_MULT, (12 + 4) * HX_MULT, (12 + 4 + 13) * HX_MULT,                  0,       12 * HX_MULT, (12 + 4) * HX_MULT, 12 * HX_MULT },
-        /*2*/ { (12 + 4) * HX_MULT, (12 + 4) * HX_MULT, (12 + 4 + 13) * HX_MULT,       12 * HX_MULT,                  0, (12 + 4) * HX_MULT, 12 * HX_MULT },
-        /*D*/ { (15 + 4) * HX_MULT, (15 + 4) * HX_MULT, (15 + 4 + 13) * HX_MULT, (15 + 4) * HX_MULT, (15 + 4) * HX_MULT,                  0, 15 * HX_MULT },
-        /*F*/ {        4 * HX_MULT,        4 * HX_MULT,      (4 + 13) * HX_MULT,        4 * HX_MULT,        4 * HX_MULT,        4 * HX_MULT,  0 },
-    };
-
-    (void)state; /* Unused */
-    return switch_costs[k][j];
-}
-
-/* Final end-of-data costs */
-static unsigned int hx_eod_cost(unsigned int state[], const int k) {
-    static const unsigned int eod_costs[HX_NUM_MODES] = {
-    /*  N             T            B  1             2             D             F */
-        10 * HX_MULT, 6 * HX_MULT, 0, 12 * HX_MULT, 12 * HX_MULT, 15 * HX_MULT, 0
-    };
-
-    (void)state; /* Unused */
-    return eod_costs[k];
-}
-
-/* Calculate cost of encoding character */
-static void hx_cur_cost(unsigned int state[], const unsigned int gbdata[], const size_t length, const int i, char* char_modes, unsigned int prev_costs[], unsigned int cur_costs[]) {
-    int cm_i = i * HX_NUM_MODES;
-    int text1, text2;
-    unsigned int* p_numeric_end = &state[0];
-    unsigned int* p_numeric_cost = &state[1];
-    unsigned int* p_text_submode = &state[2];
-    unsigned int* p_fourbyte_end = &state[3];
-    unsigned int* p_fourbyte_cost = &state[4];
-
-    if (in_numeric(gbdata, length, i, p_numeric_end, p_numeric_cost)) {
-        cur_costs[HX_N] = prev_costs[HX_N] + *p_numeric_cost;
-        char_modes[cm_i + HX_N] = 'n';
-    }
-
-    text1 = lookup_text1(gbdata[i]) != -1;
-    text2 = lookup_text2(gbdata[i]) != -1;
-
-    if (text1 || text2) {
-        if ((*p_text_submode == 1 && text2) || (*p_text_submode == 2 && text1)) {
-            cur_costs[HX_T] = prev_costs[HX_T] + 72; /* (6 + 6) * HX_MULT */
-            *p_text_submode = text2 ? 2 : 1;
-        } else {
-            cur_costs[HX_T] = prev_costs[HX_T] + 36; /* 6 * HX_MULT */
-        }
-        char_modes[cm_i + HX_T] = 't';
-    } else {
-        *p_text_submode = 1;
-    }
-
-    /* Binary mode can encode anything */
-    cur_costs[HX_B] = prev_costs[HX_B] + (gbdata[i] > 0xFF ? 96 : 48); /* (16 : 8) * HX_MULT */
-    char_modes[cm_i + HX_B] = 'b';
-
-    if (isRegion1(gbdata[i])) {
-        cur_costs[HX_1] = prev_costs[HX_1] + 72; /* 12 * HX_MULT */
-        char_modes[cm_i + HX_1] = '1';
-    }
-    if (isRegion2(gbdata[i])) {
-        cur_costs[HX_2] = prev_costs[HX_2] + 72; /* 12 * HX_MULT */
-        char_modes[cm_i + HX_2] = '2';
-    }
-    if (isDoubleByte(gbdata[i])) {
-        cur_costs[HX_D] = prev_costs[HX_D] + 90; /* 15 * HX_MULT */
-        char_modes[cm_i + HX_D] = 'd';
-    }
-    if (in_fourbyte(gbdata, length, i, p_fourbyte_end, p_fourbyte_cost)) {
-        cur_costs[HX_F] = prev_costs[HX_F] + *p_fourbyte_cost;
-        char_modes[cm_i + HX_F] = 'f';
-    }
-}
-
-/* Calculate optimized encoding modes */
-static void hx_define_mode(char* mode, const unsigned int gbdata[], const size_t length, const int debug) {
-    static const char mode_types[] = { 'n', 't', 'b', '1', '2', 'd', 'f' }; /* Must be in same order as HX_N etc */
-    unsigned int state[5] = { 0 /*numeric_end*/, 0 /*numeric_cost*/, 1 /*text_submode*/, 0 /*fourbyte_end*/, 0 /*fourbyte_cost*/ };
-
-    pn_define_mode(mode, gbdata, length, debug, state, mode_types, HX_NUM_MODES, hx_head_costs, hx_switch_cost, hx_eod_cost, hx_cur_cost);
-}
-
 /* Convert input data to binary stream */
-static void calculate_binary(char binary[], char mode[], unsigned int source[], const size_t length, const int eci, int debug) {
-    unsigned int position = 0;
+static void calculate_binary(char binary[], char mode[], int source[], const size_t length, const int eci, int debug) {
+    int position = 0;
     int i, count, encoding_value;
     int first_byte, second_byte;
     int third_byte, fourth_byte;
@@ -471,13 +354,9 @@ static void calculate_binary(char binary[], char mode[], unsigned int source[],
 
     do {
         int block_length = 0;
-        int double_byte = 0;
         do {
-            if (mode[position] == 'b' && source[position + block_length] > 0xFF) {
-                double_byte++;
-            }
             block_length++;
-        } while (position + block_length < length && mode[position + block_length] == mode[position]);
+        } while (mode[position + block_length] == mode[position]);
 
         switch (mode[position]) {
             case 'n':
@@ -485,11 +364,10 @@ static void calculate_binary(char binary[], char mode[], unsigned int source[],
                 /* Mode indicator */
                 bin_append(1, 4, binary);
 
-                if (debug & ZINT_DEBUG_PRINT) {
+                if (debug) {
                     printf("Numeric\n");
                 }
 
-                count = 0; /* Suppress gcc -Wmaybe-uninitialized */
                 i = 0;
 
                 while (i < block_length) {
@@ -513,7 +391,7 @@ static void calculate_binary(char binary[], char mode[], unsigned int source[],
 
                     bin_append(encoding_value, 10, binary);
 
-                    if (debug & ZINT_DEBUG_PRINT) {
+                    if (debug) {
                         printf("0x%4x (%d)", encoding_value, encoding_value);
                     }
 
@@ -533,18 +411,20 @@ static void calculate_binary(char binary[], char mode[], unsigned int source[],
                         break;
                 }
 
-                if (debug & ZINT_DEBUG_PRINT) {
+                if (debug) {
                     printf(" (TERM %d)\n", count);
                 }
 
                 break;
             case 't':
                 /* Text mode */
-                /* Mode indicator */
-                bin_append(2, 4, binary);
+                if (position != 0) {
+                    /* Mode indicator */
+                    bin_append(2, 4, binary);
 
-                if (debug & ZINT_DEBUG_PRINT) {
-                    printf("Text\n");
+                    if (debug) {
+                        printf("Text\n");
+                    }
                 }
 
                 submode = 1;
@@ -553,24 +433,24 @@ static void calculate_binary(char binary[], char mode[], unsigned int source[],
 
                 while (i < block_length) {
 
-                    if (getsubmode(source[i + position]) != submode) {
+                    if (getsubmode((char) source[i + position]) != submode) {
                         /* Change submode */
                         bin_append(62, 6, binary);
-                        submode = getsubmode(source[i + position]);
-                        if (debug & ZINT_DEBUG_PRINT) {
+                        submode = getsubmode((char) source[i + position]);
+                        if (debug) {
                             printf("SWITCH ");
                         }
                     }
 
                     if (submode == 1) {
-                        encoding_value = lookup_text1(source[i + position]);
+                        encoding_value = lookup_text1((char) source[i + position]);
                     } else {
-                        encoding_value = lookup_text2(source[i + position]);
+                        encoding_value = lookup_text2((char) source[i + position]);
                     }
 
                     bin_append(encoding_value, 6, binary);
 
-                    if (debug & ZINT_DEBUG_PRINT) {
+                    if (debug) {
                         printf("%.2x [ASC %.2x] ", encoding_value, source[i + position]);
                     }
                     i++;
@@ -579,7 +459,7 @@ static void calculate_binary(char binary[], char mode[], unsigned int source[],
                 /* Terminator */
                 bin_append(63, 6, binary);
 
-                if (debug & ZINT_DEBUG_PRINT) {
+                if (debug) {
                     printf("\n");
                 }
                 break;
@@ -589,10 +469,10 @@ static void calculate_binary(char binary[], char mode[], unsigned int source[],
                 bin_append(3, 4, binary);
 
                 /* Count indicator */
-                bin_append(block_length + double_byte, 13, binary);
+                bin_append(block_length, 13, binary);
 
-                if (debug & ZINT_DEBUG_PRINT) {
-                    printf("Binary (length %d)\n", block_length + double_byte);
+                if (debug) {
+                    printf("Binary (length %d)\n", block_length);
                 }
 
                 i = 0;
@@ -600,27 +480,25 @@ static void calculate_binary(char binary[], char mode[], unsigned int source[],
                 while (i < block_length) {
 
                     /* 8-bit bytes with no conversion */
-                    bin_append(source[i + position], source[i + position] > 0xFF ? 16 : 8, binary);
+                    bin_append(source[i + position], 8, binary);
 
-                    if (debug & ZINT_DEBUG_PRINT) {
+                    if (debug) {
                         printf("%d ", source[i + position]);
                     }
 
                     i++;
                 }
 
-                if (debug & ZINT_DEBUG_PRINT) {
+                if (debug) {
                     printf("\n");
                 }
                 break;
             case '1':
                 /* Region 1 encoding */
                 /* Mode indicator */
-                if (position == 0 || mode[position - 1] != '2') { /* Unless previous mode Region 2 */
-                    bin_append(4, 4, binary);
-                }
+                bin_append(4, 4, binary);
 
-                if (debug & ZINT_DEBUG_PRINT) {
+                if (debug) {
                     printf("Region 1\n");
                 }
 
@@ -645,7 +523,7 @@ static void calculate_binary(char binary[], char mode[], unsigned int source[],
                         glyph = (second_byte - 0xa1) + 0xfca;
                     }
 
-                    if (debug & ZINT_DEBUG_PRINT) {
+                    if (debug) {
                         printf("%.4x [GB %.4x] ", glyph, source[i + position]);
                     }
 
@@ -654,9 +532,9 @@ static void calculate_binary(char binary[], char mode[], unsigned int source[],
                 }
 
                 /* Terminator */
-                bin_append(position == length - 1 || mode[position + 1] != '2' ? 4095 : 4094, 12, binary);
+                bin_append(4095, 12, binary);
 
-                if (debug & ZINT_DEBUG_PRINT) {
+                if (debug) {
                     printf("\n");
                 }
 
@@ -664,11 +542,9 @@ static void calculate_binary(char binary[], char mode[], unsigned int source[],
             case '2':
                 /* Region 2 encoding */
                 /* Mode indicator */
-                if (position == 0 || mode[position - 1] != '1') { /* Unless previous mode Region 1 */
-                    bin_append(5, 4, binary);
-                }
+                bin_append(5, 4, binary);
 
-                if (debug & ZINT_DEBUG_PRINT) {
+                if (debug) {
                     printf("Region 2\n");
                 }
 
@@ -680,7 +556,7 @@ static void calculate_binary(char binary[], char mode[], unsigned int source[],
 
                     glyph = (0x5e * (first_byte - 0xd8)) + (second_byte - 0xa1);
 
-                    if (debug & ZINT_DEBUG_PRINT) {
+                    if (debug) {
                         printf("%.4x [GB %.4x] ", glyph, source[i + position]);
                     }
 
@@ -689,9 +565,9 @@ static void calculate_binary(char binary[], char mode[], unsigned int source[],
                 }
 
                 /* Terminator */
-                bin_append(position == length - 1 || mode[position + 1] != '1' ? 4095 : 4094, 12, binary);
+                bin_append(4095, 12, binary);
 
-                if (debug & ZINT_DEBUG_PRINT) {
+                if (debug) {
                     printf("\n");
                 }
                 break;
@@ -700,7 +576,7 @@ static void calculate_binary(char binary[], char mode[], unsigned int source[],
                 /* Mode indicator */
                 bin_append(6, 4, binary);
 
-                if (debug & ZINT_DEBUG_PRINT) {
+                if (debug) {
                     printf("Double byte\n");
                 }
 
@@ -716,7 +592,7 @@ static void calculate_binary(char binary[], char mode[], unsigned int source[],
                         glyph = (0xbe * (first_byte - 0x81)) + (second_byte - 0x41);
                     }
 
-                    if (debug & ZINT_DEBUG_PRINT) {
+                    if (debug) {
                         printf("%.4x ", glyph);
                     }
 
@@ -729,13 +605,13 @@ static void calculate_binary(char binary[], char mode[], unsigned int source[],
                 /* Terminator sequence of length 12 is a mistake
                    - confirmed by Wang Yi */
 
-                if (debug & ZINT_DEBUG_PRINT) {
+                if (debug) {
                     printf("\n");
                 }
                 break;
             case 'f':
                 /* Four-byte encoding */
-                if (debug & ZINT_DEBUG_PRINT) {
+                if (debug) {
                     printf("Four byte\n");
                 }
 
@@ -754,7 +630,7 @@ static void calculate_binary(char binary[], char mode[], unsigned int source[],
                     glyph = (0x3138 * (first_byte - 0x81)) + (0x04ec * (second_byte - 0x30)) +
                             (0x0a * (third_byte - 0x81)) + (fourth_byte - 0x30);
 
-                    if (debug & ZINT_DEBUG_PRINT) {
+                    if (debug) {
                         printf("%d ", glyph);
                     }
 
@@ -764,7 +640,7 @@ static void calculate_binary(char binary[], char mode[], unsigned int source[],
 
                 /* No terminator */
 
-                if (debug & ZINT_DEBUG_PRINT) {
+                if (debug) {
                     printf("\n");
                 }
                 break;
@@ -777,7 +653,7 @@ static void calculate_binary(char binary[], char mode[], unsigned int source[],
 }
 
 /* Finder pattern for top left of symbol */
-static void hx_place_finder_top_left(unsigned char* grid, int size) {
+void hx_place_finder_top_left(unsigned char* grid, int size) {
     int xp, yp;
     int x = 0, y = 0;
     char finder[] = {0x7F, 0x40, 0x5F, 0x50, 0x57, 0x57, 0x57};
@@ -794,7 +670,7 @@ static void hx_place_finder_top_left(unsigned char* grid, int size) {
 }
 
 /* Finder pattern for top right and bottom left of symbol */
-static void hx_place_finder(unsigned char* grid, int size, int x, int y) {
+void hx_place_finder(unsigned char* grid, int size, int x, int y) {
     int xp, yp;
     char finder[] = {0x7F, 0x01, 0x7D, 0x05, 0x75, 0x75, 0x75};
 
@@ -810,7 +686,7 @@ static void hx_place_finder(unsigned char* grid, int size, int x, int y) {
 }
 
 /* Finder pattern for bottom right of symbol */
-static void hx_place_finder_bottom_right(unsigned char* grid, int size) {
+void hx_place_finder_bottom_right(unsigned char* grid, int size) {
     int xp, yp;
     int x = size - 7, y = size - 7;
     char finder[] = {0x75, 0x75, 0x75, 0x05, 0x7D, 0x01, 0x7F};
@@ -827,7 +703,7 @@ static void hx_place_finder_bottom_right(unsigned char* grid, int size) {
 }
 
 /* Avoid plotting outside symbol or over finder patterns */
-static void hx_safe_plot(unsigned char *grid, int size, int x, int y, int value) {
+void hx_safe_plot(unsigned char *grid, int size, int x, int y, int value) {
     if ((x >= 0) && (x < size)) {
         if ((y >= 0) && (y < size)) {
             if (grid[(y * size) + x] == 0) {
@@ -838,7 +714,7 @@ static void hx_safe_plot(unsigned char *grid, int size, int x, int y, int value)
 }
 
 /* Plot an alignment pattern around top and right of a module */
-static void hx_plot_alignment(unsigned char *grid, int size, int x, int y, int w, int h) {
+void hx_plot_alignment(unsigned char *grid, int size, int x, int y, int w, int h) {
     int i;
     hx_safe_plot(grid, size, x, y, 0x11);
     hx_safe_plot(grid, size, x - 1, y + 1, 0x10);
@@ -857,7 +733,7 @@ static void hx_plot_alignment(unsigned char *grid, int size, int x, int y, int w
 }
 
 /* Plot assistant alignment patterns */
-static void hx_plot_assistant(unsigned char *grid, int size, int x, int y) {
+void hx_plot_assistant(unsigned char *grid, int size, int x, int y) {
     hx_safe_plot(grid, size, x - 1, y - 1, 0x10);
     hx_safe_plot(grid, size, x, y - 1, 0x10);
     hx_safe_plot(grid, size, x + 1, y - 1, 0x10);
@@ -870,7 +746,7 @@ static void hx_plot_assistant(unsigned char *grid, int size, int x, int y) {
 }
 
 /* Put static elements in the grid */
-static void hx_setup_grid(unsigned char* grid, int size, int version) {
+void hx_setup_grid(unsigned char* grid, int size, int version) {
     int i, j;
 
     for (i = 0; i < size; i++) {
@@ -1028,7 +904,7 @@ static void hx_setup_grid(unsigned char* grid, int size, int version) {
 }
 
 /* Calculate error correction codes */
-static void hx_add_ecc(unsigned char fullstream[], unsigned char datastream[], int data_codewords, int version, int ecc_level) {
+void hx_add_ecc(unsigned char fullstream[], unsigned char datastream[], int version, int ecc_level) {
     unsigned char data_block[180];
     unsigned char ecc_block[36];
     int i, j, block;
@@ -1045,8 +921,8 @@ static void hx_add_ecc(unsigned char fullstream[], unsigned char datastream[], i
             for (j = 0; j < data_length; j++) {
                 input_position++;
                 output_position++;
-                data_block[j] = input_position < data_codewords ? datastream[input_position] : 0;
-                fullstream[output_position] = data_block[j];
+                data_block[j] = datastream[input_position];
+                fullstream[output_position] = datastream[input_position];
             }
 
             rs_init_gf(0x163); // x^8 + x^6 + x^5 + x + 1 = 0
@@ -1063,7 +939,7 @@ static void hx_add_ecc(unsigned char fullstream[], unsigned char datastream[], i
 }
 
 /* Rearrange data in batches of 13 codewords (section 5.8.2) */
-static void make_picket_fence(unsigned char fullstream[], unsigned char picket_fence[], int streamsize) {
+void make_picket_fence(unsigned char fullstream[], unsigned char picket_fence[], int streamsize) {
     int i, start;
     int output_position = 0;
 
@@ -1078,7 +954,7 @@ static void make_picket_fence(unsigned char fullstream[], unsigned char picket_f
 }
 
 /* Evaluate a bitmask according to table 9 */
-static int hx_evaluate(unsigned char *eval, int size, int pattern) {
+int hx_evaluate(unsigned char *eval, int size, int pattern) {
     int x, y, block, weight;
     int result = 0;
     char state;
@@ -1095,9 +971,7 @@ static int hx_evaluate(unsigned char *eval, int size, int pattern) {
      * desired pattern.*/
     for (x = 0; x < size; x++) {
         for (y = 0; y < size; y++) {
-            if (eval[(y * size) + x] & 0xf0) {
-                local[(y * size) + x] = 0;
-            } else if ((eval[(y * size) + x] & (0x01 << pattern)) != 0) {
+            if ((eval[(y * size) + x] & (0x01 << pattern)) != 0) {
                 local[(y * size) + x] = '1';
             } else {
                 local[(y * size) + x] = '0';
@@ -1109,9 +983,6 @@ static int hx_evaluate(unsigned char *eval, int size, int pattern) {
     /* Vertical */
     for (x = 0; x < size; x++) {
         for (y = 0; y < (size - 7); y++) {
-            if (local[(y * size) + x] == 0) {
-                continue;
-            }
             p = 0;
             for (weight = 0; weight < 7; weight++) {
                 if (local[((y + weight) * size) + x] == '1') {
@@ -1128,7 +999,7 @@ static int hx_evaluate(unsigned char *eval, int size, int pattern) {
                         if (local[(b * size) + x] == '0') {
                             beforeCount++;
                         } else {
-                            break;
+                            beforeCount = 0;
                         }
                     }
                 }
@@ -1141,7 +1012,7 @@ static int hx_evaluate(unsigned char *eval, int size, int pattern) {
                         if (local[(a * size) + x] == '0') {
                             afterCount++;
                         } else {
-                            break;
+                            afterCount = 0;
                         }
                     }
                 }
@@ -1158,9 +1029,6 @@ static int hx_evaluate(unsigned char *eval, int size, int pattern) {
     /* Horizontal */
     for (y = 0; y < size; y++) {
         for (x = 0; x < (size - 7); x++) {
-            if (local[(y * size) + x] == 0) {
-                continue;
-            }
             p = 0;
             for (weight = 0; weight < 7; weight++) {
                 if (local[(y * size) + x + weight] == '1') {
@@ -1177,7 +1045,7 @@ static int hx_evaluate(unsigned char *eval, int size, int pattern) {
                         if (local[(y * size) + b] == '0') {
                             beforeCount++;
                         } else {
-                            break;
+                            beforeCount = 0;
                         }
                     }
                 }
@@ -1190,7 +1058,7 @@ static int hx_evaluate(unsigned char *eval, int size, int pattern) {
                         if (local[(y * size) + a] == '0') {
                             afterCount++;
                         } else {
-                            break;
+                            afterCount = 0;
                         }
                     }
                 }
@@ -1209,31 +1077,23 @@ static int hx_evaluate(unsigned char *eval, int size, int pattern) {
      * position of the module.” - however i being the length of the run of the
      * same colour (i.e. "block" below) in the same fashion as ISO/IEC 18004
      * makes more sense. -- Confirmed by Wang Yi */
-    /* Fixed in ISO/IEC 20830 (draft 2019-10-10) section 5.8.3.2 "In Table 12 below, i refers to the modules with same color." */
 
     /* Vertical */
     for (x = 0; x < size; x++) {
+        state = local[x];
         block = 0;
-        state = 0;
         for (y = 0; y < size; y++) {
-            if (local[(y * size) + x] == 0) {
-                if (block >= 3) {
-                    result += (3 + block) * 4;
-                }
-                block = 0;
-                state = 0;
-            } else if (local[(y * size) + x] == state || state == 0) {
+            if (local[(y * size) + x] == state) {
                 block++;
-                state = local[(y * size) + x];
             } else {
-                if (block >= 3) {
+                if (block > 3) {
                     result += (3 + block) * 4;
                 }
-                block = 1;
+                block = 0;
                 state = local[(y * size) + x];
             }
         }
-        if (block >= 3) {
+        if (block > 3) {
             result += (3 + block) * 4;
         }
     }
@@ -1243,24 +1103,17 @@ static int hx_evaluate(unsigned char *eval, int size, int pattern) {
         state = local[y * size];
         block = 0;
         for (x = 0; x < size; x++) {
-            if (local[(y * size) + x] == 0) {
-                if (block >= 3) {
-                    result += (3 + block) * 4;
-                }
-                block = 0;
-                state = 0;
-            } else if (local[(y * size) + x] == state || state == 0) {
+            if (local[(y * size) + x] == state) {
                 block++;
-                state = local[(y * size) + x];
             } else {
-                if (block >= 3) {
+                if (block > 3) {
                     result += (3 + block) * 4;
                 }
-                block = 1;
+                block = 0;
                 state = local[(y * size) + x];
             }
         }
-        if (block >= 3) {
+        if (block > 3) {
             result += (3 + block) * 4;
         }
     }
@@ -1269,8 +1122,7 @@ static int hx_evaluate(unsigned char *eval, int size, int pattern) {
 }
 
 /* Apply the four possible bitmasks for evaluation */
-/* TODO: Haven't been able to replicate (or even get close to) the penalty scores in ISO/IEC 20830 (draft 2019-10-10) Annex K examples */
-static int hx_apply_bitmask(unsigned char *grid, int size) {
+int hx_apply_bitmask(unsigned char *grid, int size) {
     int x, y;
     int i, j;
     int pattern, penalty[4];
@@ -1279,8 +1131,8 @@ static int hx_apply_bitmask(unsigned char *grid, int size) {
     unsigned char p;
 
 #ifndef _MSC_VER
-    unsigned char mask[(unsigned int)(size * size)]; /* Cast to suppress gcc -Walloc-size-larger-than */
-    unsigned char eval[(unsigned int)(size * size)];
+    unsigned char mask[size * size];
+    unsigned char eval[size * size];
 #else
     unsigned char* mask = (unsigned char *) _alloca((size * size) * sizeof (unsigned char));
     unsigned char* eval = (unsigned char *) _alloca((size * size) * sizeof (unsigned char));
@@ -1310,10 +1162,8 @@ static int hx_apply_bitmask(unsigned char *grid, int size) {
     // apply data masks to grid, result in eval
     for (x = 0; x < size; x++) {
         for (y = 0; y < size; y++) {
-            if (grid[(y * size) + x] & 0xf0) {
-                p = 0xf0;
-            } else if (grid[(y * size) + x] & 0x01) {
-                p = 0x0f;
+            if (grid[(y * size) + x] & 0x01) {
+                p = 0xff;
             } else {
                 p = 0x00;
             }
@@ -1372,11 +1222,10 @@ static int hx_apply_bitmask(unsigned char *grid, int size) {
 }
 
 /* Han Xin Code - main */
-INTERNAL int han_xin(struct zint_symbol *symbol, const unsigned char source[], size_t length) {
+int han_xin(struct zint_symbol *symbol, const unsigned char source[], size_t length) {
     int est_binlen;
     int ecc_level = symbol->option_1;
     int i, j, version;
-    int full_multibyte;
     int data_codewords = 0, size;
     int codewords;
     int bitmask;
@@ -1386,10 +1235,12 @@ INTERNAL int han_xin(struct zint_symbol *symbol, const unsigned char source[], s
     unsigned char fi_ecc[4];
 
 #ifndef _MSC_VER
-    unsigned int gbdata[(length + 1) * 2];
+    int utfdata[length + 1];
+    int gbdata[(length + 1) * 2];
     char mode[length + 1];
 #else
-    unsigned int* gbdata = (unsigned int *) _alloca(((length + 1) * 2) * sizeof (unsigned int));
+    int* utfdata = (int *) _alloca((length + 1) * sizeof (int));
+    int* gbdata = (int *) _alloca(((length + 1) * 2) * sizeof (int));
     char* mode = (char *) _alloca((length + 1) * sizeof (char));
     char* binary;
     unsigned char *datastream;
@@ -1398,39 +1249,105 @@ INTERNAL int han_xin(struct zint_symbol *symbol, const unsigned char source[], s
     unsigned char *grid;
 #endif
 
-    full_multibyte = symbol->option_3 == ZINT_FULL_MULTIBYTE; /* If set use Hanzi mode in DATA_MODE or for single-byte Latin */
-
-    if ((symbol->input_mode & 0x07) == DATA_MODE) {
-        gb18030_cpy(source, &length, gbdata, full_multibyte);
+    if ((symbol->input_mode == DATA_MODE) || (symbol->eci != 0)) {
+        for (i = 0; i < length; i++) {
+            gbdata[i] = (int) source[i];
+        }
     } else {
-        int done = 0;
-        if (symbol->eci != 29) { /* Unless ECI 29 (GB) */
-            /* Try single byte (Latin) conversion first */
-            int error_number = gb18030_utf8tosb(symbol->eci && symbol->eci <= 899 ? symbol->eci : 3, source, &length, gbdata, full_multibyte);
-            if (error_number == 0) {
+        int posn;
+        /* Convert Unicode input to GB-18030 */
+        int error_number = utf8toutf16(symbol, source, utfdata, &length);
+        if (error_number != 0) {
+            return error_number;
+        }
+
+        posn = 0;
+        for (i = 0; i < length; i++) {
+            int done = 0;
+            gbdata[posn] = 0;
+
+            /* Single byte characters in range U+0000 -> U+007F */
+            if (utfdata[i] <= 0x7f) {
+                gbdata[posn] = utfdata[i];
+                posn++;
                 done = 1;
-            } else if (symbol->eci && symbol->eci <= 899) {
-                strcpy(symbol->errtxt, "575: Invalid characters in input data");
-                return error_number;
             }
-        }
-        if (!done) {
-            /* Try GB 18030 */
-            int error_number = gb18030_utf8tomb(symbol, source, &length, gbdata);
-            if (error_number != 0) {
-                return error_number;
+
+            /* Two bytes characters in GB-2312 */
+            if (done == 0) {
+                j = 0;
+                do {
+                    if (gb2312_lookup[j * 2] == utfdata[i]) {
+                        gbdata[posn] = gb2312_lookup[(j * 2) + 1];
+                        posn++;
+                        done = 1;
+                    }
+                    j++;
+                } while ((j < 7445) && (done == 0));
+            }
+
+            /* Two byte characters in GB-18030 */
+            if (done == 0) {
+                j = 0;
+                do {
+                    if (gb18030_twobyte_lookup[j * 2] == utfdata[i]) {
+                        gbdata[posn] = gb18030_twobyte_lookup[(j * 2) + 1];
+                        posn++;
+                        done = 1;
+                    }
+                    j++;
+                } while ((j < 16495) && (done == 0));
+            }
+
+            /* Four byte characters in range U+0080 -> U+FFFF */
+            if (done == 0) {
+                j = 0;
+                do {
+                    if (gb18030_fourbyte_lookup[j * 3] == utfdata[i]) {
+                        gbdata[posn] = gb18030_fourbyte_lookup[(j * 3) + 1];
+                        gbdata[posn + 1] = gb18030_fourbyte_lookup[(j * 3) + 2];
+                        posn += 2;
+                        done = 1;
+                    }
+                    j++;
+                } while ((j < 6793) && (done == 0));
+            }
+
+            /* Supplementary planes U+10000 -> U+1FFFF */
+            if (done == 0) {
+                if (utfdata[i] >= 0x10000 && utfdata[i] < 0x110000) {
+                    /* algorithm from libiconv-1.15\lib\gb18030.h */
+                    int j, r3, r2, r1, r0;
+
+                    j = utfdata[i] - 0x10000;
+                    r3 = (j % 10) + 0x30; j = j / 10;
+                    r2 = (j % 126) + 0x81; j = j / 126;
+                    r1 = (j % 10) + 0x30; j = j / 10;
+                    r0 = j + 0x90;
+                    gbdata[posn] = (r0 << 8) + r1;
+                    gbdata[posn + 1] = (r2 << 8) + r3;
+                    posn += 2;
+                    done = 1;
+                }
+            }
+
+            /* Character not found */
+            if (done == 0) {
+                strcpy(symbol->errtxt, "540: Unknown character in input data");
+                return ZINT_ERROR_INVALID_DATA;
             }
         }
+        length = posn;
     }
 
-    hx_define_mode(mode, gbdata, length, symbol->debug);
+    hx_define_mode(mode, gbdata, length);
 
     est_binlen = calculate_binlength(mode, gbdata, length, symbol->eci);
 
 #ifndef _MSC_VER
-    char binary[est_binlen + 1];
+    char binary[est_binlen + 10];
 #else
-    binary = (char *) _alloca((est_binlen + 1) * sizeof (char));
+    binary = (char *) _alloca((est_binlen + 10) * sizeof (char));
 #endif
     memset(binary, 0, (est_binlen + 1) * sizeof (char));
 
@@ -1498,21 +1415,19 @@ INTERNAL int han_xin(struct zint_symbol *symbol, const unsigned char source[], s
 
     /* If there is spare capacity, increase the level of ECC */
 
-    if (symbol->option_1 == -1 || symbol->option_1 != ecc_level) { /* Unless explicitly specified (within min/max bounds) by user */
-        if ((ecc_level == 1) && (codewords < hx_data_codewords_L2[version - 1])) {
-            ecc_level = 2;
-            data_codewords = hx_data_codewords_L2[version - 1];
-        }
+    if ((ecc_level == 1) && (codewords < hx_data_codewords_L2[version - 1])) {
+        ecc_level = 2;
+        data_codewords = hx_data_codewords_L2[version - 1];
+    }
 
-        if ((ecc_level == 2) && (codewords < hx_data_codewords_L3[version - 1])) {
-            ecc_level = 3;
-            data_codewords = hx_data_codewords_L3[version - 1];
-        }
+    if ((ecc_level == 2) && (codewords < hx_data_codewords_L3[version - 1])) {
+        ecc_level = 3;
+        data_codewords = hx_data_codewords_L3[version - 1];
+    }
 
-        if ((ecc_level == 3) && (codewords < hx_data_codewords_L4[version - 1])) {
-            ecc_level = 4;
-            data_codewords = hx_data_codewords_L4[version - 1];
-        }
+    if ((ecc_level == 3) && (codewords < hx_data_codewords_L4[version - 1])) {
+        ecc_level = 4;
+        data_codewords = hx_data_codewords_L4[version - 1];
     }
 
     size = (version * 2) + 21;
@@ -1539,7 +1454,7 @@ INTERNAL int han_xin(struct zint_symbol *symbol, const unsigned char source[], s
         }
     }
 
-    if (symbol->debug & ZINT_DEBUG_PRINT) {
+    if (symbol->debug) {
         printf("Datastream length: %d\n", data_codewords);
         printf("Datastream:\n");
         for (i = 0; i < data_codewords; i++) {
@@ -1547,13 +1462,10 @@ INTERNAL int han_xin(struct zint_symbol *symbol, const unsigned char source[], s
         }
         printf("\n");
     }
-#ifdef ZINT_TEST
-    if (symbol->debug & ZINT_DEBUG_TEST) debug_test_codeword_dump(symbol, datastream, data_codewords);
-#endif
 
     hx_setup_grid(grid, size, version);
 
-    hx_add_ecc(fullstream, datastream, data_codewords, version, ecc_level);
+    hx_add_ecc(fullstream, datastream, version, ecc_level);
 
     make_picket_fence(fullstream, picket_fence, hx_total_codewords[version - 1]);
 
@@ -1606,6 +1518,8 @@ INTERNAL int han_xin(struct zint_symbol *symbol, const unsigned char source[], s
         }
     }
 
+
+
     for (i = 0; i < 3; i++) {
         for (j = 0; j < 4; j++) {
             if (function_information[(i * 4) + j] == '1') {
@@ -1663,3 +1577,5 @@ INTERNAL int han_xin(struct zint_symbol *symbol, const unsigned char source[], s
 
     return 0;
 }
+
+
index 1b90efe..09f41c8 100644 (file)
@@ -2,7 +2,7 @@
 
 /*
     libzint - the open source barcode library
-    Copyright (C) 2008 - 2020 Robin Stuart <rstuart114@gmail.com>
+    Copyright (C) 2008-2017 Robin Stuart <rstuart114@gmail.com>
 
     Redistribution and use in source and binary forms, with or without
     modification, are permitted provided that the following conditions
     OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     SUCH DAMAGE.
  */
-/* vim: set ts=4 sw=4 et : */
 
 /*  The function "USPS_MSB_Math_CRC11GenerateFrameCheckSequence"
     is Copyright (C) 2006 United States Postal Service */
 
+#include <string.h>
+#include <stdlib.h>
 #include <stdio.h>
 #include "common.h"
 #include "large.h"
 
-#define SODIUM  "0123456789-"
+#define SODIUM "0123456789-"
 
 /* The following lookup tables were generated using the code in Appendix C */
 
@@ -201,14 +202,14 @@ static const unsigned short int AppxD_IV[130] = {
  ** USPS_MSB_Math_CRC11GenerateFrameCheckSequence
  **
  ** Inputs:
- **   ByteAttayPtr is the address of a 13 byte array holding 102 bits which
+ **   ByteAttayPtr is the address of a 13 byte array holding 102 bytes which
  **   are right justified - ie: the leftmost 2 bits of the first byte do not
  **   hold data and must be set to zero.
  **
  ** Outputs:
  **   return unsigned short - 11 bit Frame Check Sequence (right justified)
  ***************************************************************************/
-static unsigned short USPS_MSB_Math_CRC11GenerateFrameCheckSequence(unsigned char *ByteArrayPtr) {
+extern unsigned short USPS_MSB_Math_CRC11GenerateFrameCheckSequence(unsigned char *ByteArrayPtr) {
     unsigned short GeneratorPolynomial = 0x0F35;
     unsigned short FrameCheckSequence = 0x07FF;
     unsigned short Data;
@@ -242,19 +243,20 @@ static unsigned short USPS_MSB_Math_CRC11GenerateFrameCheckSequence(unsigned cha
     return FrameCheckSequence;
 }
 
-INTERNAL int imail(struct zint_symbol *symbol, unsigned char source[], int length) {
+int imail(struct zint_symbol *symbol, unsigned char source[], int length) {
     char data_pattern[200];
     int error_number;
     int i, j, read;
-    char zip[35], tracker[35], temp[2];
-    large_int accum;
-    large_int byte_array_reg;
+    char zip[35], tracker[35], zip_adder[11], temp[2];
+    short int accum[112], x_reg[112], y_reg[112];
     unsigned char byte_array[13];
     unsigned short usps_crc;
     int codeword[10];
     unsigned short characters[10];
     short int bar_map[130];
-    int zip_len, len;
+    int zip_len;
+
+    error_number = 0;
 
     if (length > 32) {
         strcpy(symbol->errtxt, "450: Input too long");
@@ -315,62 +317,185 @@ INTERNAL int imail(struct zint_symbol *symbol, unsigned char source[], int lengt
 
     /* Routing code first */
 
-    large_load_str_u64(&accum, (unsigned char *) zip, zip_len);
+    for (i = 0; i < 112; i++) {
+        accum[i] = 0;
+    }
+
+    for (read = 0; read < zip_len; read++) {
+
+        binary_multiply(accum, "10");
+        binary_load(x_reg, "0", 1);
+
+        for (i = 0; i < 4; i++) {
+            if (ctoi(zip[read]) & (0x01 << i)) x_reg[i] = 1;
+        }
+
+        binary_add(accum, x_reg);
+    }
 
     /* add weight to routing code */
+
+    for (i = 0; i < 112; i++) {
+        x_reg[i] = accum[i];
+    }
+
     if (zip_len > 9) {
-        large_add_u64(&accum, 1000100001);
-    } else if (zip_len > 5) {
-        large_add_u64(&accum, 100001);
-    } else if (zip_len > 0) {
-        large_add_u64(&accum, 1);
+        strcpy(zip_adder, "1000100001");
+    } else {
+        if (zip_len > 5) {
+            strcpy(zip_adder, "100001");
+        } else {
+            if (zip_len > 0) {
+                strcpy(zip_adder, "1");
+            } else {
+                strcpy(zip_adder, "0");
+            }
+        }
+    }
+
+    for (i = 0; i < 112; i++) {
+        accum[i] = 0;
+    }
+
+    for (read = 0; read < strlen(zip_adder); read++) {
+
+        binary_multiply(accum, "10");
+        binary_load(y_reg, "0", 1);
+
+        for (i = 0; i < 4; i++) {
+            if (ctoi(zip_adder[read]) & (0x01 << i)) y_reg[i] = 1;
+        }
+
+        binary_add(accum, y_reg);
     }
 
+    binary_add(accum, x_reg);
+
     /* tracking code */
 
     /* multiply by 10 */
-    large_mul_u64(&accum, 10);
+    binary_multiply(accum, "10");
+    binary_load(y_reg, "0", 1);
 
     /* add first digit of tracker */
-    large_add_u64(&accum, ctoi(tracker[0]));
+    for (i = 0; i < 4; i++) {
+        if (ctoi(tracker[0]) & (0x01 << i)) y_reg[i] = 1;
+    }
+
+    binary_add(accum, y_reg);
 
     /* multiply by 5 */
-    large_mul_u64(&accum, 5);
+    binary_multiply(accum, "5");
+    binary_load(y_reg, "0", 1);
 
     /* add second digit */
-    large_add_u64(&accum, ctoi(tracker[1]));
+    for (i = 0; i < 4; i++) {
+        if (ctoi(tracker[1]) & (0x01 << i)) y_reg[i] = 1;
+    }
+
+    binary_add(accum, y_reg);
 
     /* and then the rest */
 
-    for (read = 2, len = strlen(tracker); read < len; read++) {
+    for (read = 2; read < strlen(tracker); read++) {
 
-        large_mul_u64(&accum, 10);
-        large_add_u64(&accum, ctoi(tracker[read]));
-    }
+        binary_multiply(accum, "10");
+        binary_load(y_reg, "0", 1);
 
-    /* *** Step 2 - Generation of 11-bit CRC on Binary Data *** */
+        for (i = 0; i < 4; i++) {
+            if (ctoi(tracker[read]) & (0x01 << i)) y_reg[i] = 1;
+        }
 
-    large_load(&byte_array_reg, &accum);
+        binary_add(accum, y_reg);
+    }
 
-    large_unset_bit(&byte_array_reg, 102);
-    large_unset_bit(&byte_array_reg, 103);
+    /* *** Step 2 - Generation of 11-bit CRC on Binary Data *** */
 
-    large_uchar_array(&byte_array_reg, byte_array, 13, 8 /*bits*/);
+    accum[103] = 0;
+    accum[102] = 0;
+
+    memset(byte_array, 0, 13);
+    for (j = 0; j < 13; j++) {
+        i = 96 - (8 * j);
+        byte_array[j] = 0;
+        byte_array[j] += accum[i];
+        byte_array[j] += 2 * accum[i + 1];
+        byte_array[j] += 4 * accum[i + 2];
+        byte_array[j] += 8 * accum[i + 3];
+        byte_array[j] += 16 * accum[i + 4];
+        byte_array[j] += 32 * accum[i + 5];
+        byte_array[j] += 64 * accum[i + 6];
+        byte_array[j] += 128 * accum[i + 7];
+    }
 
     usps_crc = USPS_MSB_Math_CRC11GenerateFrameCheckSequence(byte_array);
 
     /* *** Step 3 - Conversion from Binary Data to Codewords *** */
 
     /* start with codeword J which is base 636 */
-    codeword[9] = large_div_u64(&accum, 636);
+    for (i = 0; i < 112; i++) {
+        x_reg[i] = 0;
+        y_reg[i] = 0;
+    }
+
+    x_reg[101] = 1;
+    x_reg[98] = 1;
+    x_reg[97] = 1;
+    x_reg[96] = 1;
+    x_reg[95] = 1;
+    x_reg[94] = 1;
+
+    for (i = 92; i >= 0; i--) {
+        y_reg[i] = !islarger(x_reg, accum);
+        if (y_reg[i] == 1) {
+            binary_subtract(accum, x_reg);
+        }
+        shiftdown(x_reg);
+    }
+
+    codeword[9] = (accum[9] * 512) + (accum[8] * 256) + (accum[7] * 128) + (accum[6] * 64) +
+            (accum[5] * 32) + (accum[4] * 16) + (accum[3] * 8) + (accum[2] * 4) +
+            (accum[1] * 2) + accum[0];
 
     /* then codewords I to B with base 1365 */
 
     for (j = 8; j > 0; j--) {
-        codeword[j] = large_div_u64(&accum, 1365);
+        for (i = 0; i < 112; i++) {
+            accum[i] = y_reg[i];
+            y_reg[i] = 0;
+            x_reg[i] = 0;
+        }
+        x_reg[101] = 1;
+        x_reg[99] = 1;
+        x_reg[97] = 1;
+        x_reg[95] = 1;
+        x_reg[93] = 1;
+        x_reg[91] = 1;
+        for (i = 91; i >= 0; i--) {
+            y_reg[i] = !islarger(x_reg, accum);
+            if (y_reg[i] == 1) {
+                binary_subtract(accum, x_reg);
+            }
+            shiftdown(x_reg);
+        }
+
+        codeword[j] = (accum[10] * 1024) + (accum[9] * 512) + (accum[8] * 256) +
+                (accum[7] * 128) + (accum[6] * 64) + (accum[5] * 32) +
+                (accum[4] * 16) + (accum[3] * 8) + (accum[2] * 4) +
+                (accum[1] * 2) + accum[0];
     }
 
-    codeword[0] = large_lo(&accum);
+    codeword[0] = (y_reg[10] * 1024) + (y_reg[9] * 512) + (y_reg[8] * 256) +
+            (y_reg[7] * 128) + (y_reg[6] * 64) + (y_reg[5] * 32) +
+            (y_reg[4] * 16) + (y_reg[3] * 8) + (y_reg[2] * 4) +
+            (y_reg[1] * 2) + y_reg[0];
+
+    for (i = 0; i < 8; i++) {
+        if (codeword[i] == 1365) {
+            codeword[i] = 0;
+            codeword[i + 1]++;
+        }
+    }
 
     /* *** Step 4 - Inserting Additional Information into Codewords *** */
 
@@ -421,7 +546,7 @@ INTERNAL int imail(struct zint_symbol *symbol, unsigned char source[], int lengt
 
     /* Translate 4-state data pattern to symbol */
     read = 0;
-    for (i = 0, len = strlen(data_pattern); i < len; i++) {
+    for (i = 0; i < strlen(data_pattern); i++) {
         if ((data_pattern[i] == '1') || (data_pattern[i] == '0')) {
             set_module(symbol, 0, read);
         }
@@ -440,3 +565,4 @@ INTERNAL int imail(struct zint_symbol *symbol, unsigned char source[], int lengt
     symbol->width = read - 1;
     return error_number;
 }
+
index 6f7d7af..32e7e28 100644 (file)
@@ -2,7 +2,7 @@
 
 /*
     libzint - the open source barcode library
-    Copyright (C) 2008 - 2020 Robin Stuart <rstuart114@gmail.com>
+    Copyright (C) 2008-2017 Robin Stuart <rstuart114@gmail.com>
 
     Redistribution and use in source and binary forms, with or without
     modification, are permitted provided that the following conditions
     OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     SUCH DAMAGE.
  */
-/* vim: set ts=4 sw=4 et : */
-
-/* `large_mul_u64()` and `large_div_u64()` are adapted from articles by F. W. Jacob
- *   https://www.codeproject.com/Tips/618570/UInt-Multiplication-Squaring
- *   "This article, along with any associated source code and files, is licensed under The BSD License"
- *   http://www.codeproject.com/Tips/785014/UInt-Division-Modulus
- *   "This article, along with any associated source code and files, is licensed under The BSD License"
- *
- * These in turn are based on Hacker's Delight (2nd Edition, 2012) by Henry S. Warren, Jr.
- *   "You are free to use, copy, and distribute any of the code on this web site, whether modified by you or not."
- *   https://web.archive.org/web/20190716204559/http://www.hackersdelight.org/permissions.htm
- *
- * `clz_u64()` and other bits and pieces are adapted from r128.h by Alan Hickman (fahickman)
- *   https://github.com/fahickman/r128/blob/master/r128.h
- *   "R128 is released into the public domain. See LICENSE for details." LICENSE is The Unlicense.
- */
+
 #include <stdio.h>
-#ifdef _MSC_VER
-#include <malloc.h>
-#endif
+#include <string.h>
 #include "common.h"
 #include "large.h"
 
-#define MASK32  0xFFFFFFFF
-
-/* Convert decimal string `s` of (at most) length `length` to 64-bit and place in 128-bit `t` */
-INTERNAL void large_load_str_u64(large_int *t, const unsigned char *s, int length) {
-    uint64_t val = 0;
-    const unsigned char *se = s + length;
-    for (; s < se && *s >= '0' && *s <= '9'; s++) {
-        val *= 10;
-        val += *s - '0';
+void binary_add(short int accumulator[], short int input_buffer[]) { /* Binary addition */
+    int i, carry;
+    carry = 0;
+
+    for (i = 0; i < 112; i++) {
+        int done = 0;
+        if (((input_buffer[i] == 0) && (accumulator[i] == 0))
+                && ((carry == 0) && (done == 0))) {
+            accumulator[i] = 0;
+            carry = 0;
+            done = 1;
+        }
+        if (((input_buffer[i] == 0) && (accumulator[i] == 0))
+                && ((carry == 1) && (done == 0))) {
+            accumulator[i] = 1;
+            carry = 0;
+            done = 1;
+        }
+        if (((input_buffer[i] == 0) && (accumulator[i] == 1))
+                && ((carry == 0) && (done == 0))) {
+            accumulator[i] = 1;
+            carry = 0;
+            done = 1;
+        }
+        if (((input_buffer[i] == 0) && (accumulator[i] == 1))
+                && ((carry == 1) && (done == 0))) {
+            accumulator[i] = 0;
+            carry = 1;
+            done = 1;
+        }
+        if (((input_buffer[i] == 1) && (accumulator[i] == 0))
+                && ((carry == 0) && (done == 0))) {
+            accumulator[i] = 1;
+            carry = 0;
+            done = 1;
+        }
+        if (((input_buffer[i] == 1) && (accumulator[i] == 0))
+                && ((carry == 1) && (done == 0))) {
+            accumulator[i] = 0;
+            carry = 1;
+            done = 1;
+        }
+        if (((input_buffer[i] == 1) && (accumulator[i] == 1))
+                && ((carry == 0) && (done == 0))) {
+            accumulator[i] = 0;
+            carry = 1;
+            done = 1;
+        }
+        if (((input_buffer[i] == 1) && (accumulator[i] == 1))
+                && ((carry == 1) && (done == 0))) {
+            accumulator[i] = 1;
+            carry = 1;
+            done = 1;
+        }
     }
-    t->lo = val;
-    t->hi = 0;
 }
 
-/* Add 128-bit `s` to 128-bit `t` */
-INTERNAL void large_add(large_int *t, const large_int *s) {
-    t->lo += s->lo;
-    t->hi += s->hi + (t->lo < s->lo);
-}
-
-/* Add 64-bit `s` to 128-bit `t` */
-INTERNAL void large_add_u64(large_int *t, uint64_t s) {
-    t->lo += s;
-    if (t->lo < s) {
-        t->hi++;
-    }
-}
+void binary_subtract(short int accumulator[], short int input_buffer[]) {
+    /* 2's compliment subtraction */
+    /* take input_buffer from accumulator and put answer in accumulator */
+    int i;
+    short int sub_buffer[112];
 
-/* Subtract 64-bit `s` from 128-bit `t` */
-INTERNAL void large_sub_u64(large_int *t, uint64_t s) {
-    uint64_t r = t->lo - s;
-    if (r > t->lo) {
-        t->hi--;
+    for (i = 0; i < 112; i++) {
+        if (input_buffer[i] == 0) {
+            sub_buffer[i] = 1;
+        } else {
+            sub_buffer[i] = 0;
+        }
     }
-    t->lo = r;
-}
-
-/* Multiply 128-bit `t` by 64-bit `s`
- * See Jacob `mult64to128()` and Warren Section 8-2
- * Note '0' denotes low 32-bits, '1' high 32-bits
- * if   p00 == s0 * tlo0
- *      k00 == carry of p00
- *      p01 == s0 * tlo1
- *      k01 == carry of (p01 + k00)
- *      p10 == s1 * tlo0
- *      k10 == carry of p10
- *      p11 == s1 * tlo1 (unmasked, i.e. including unshifted carry if any)
- * then t->lo == (p01 + p10 + k00) << 32 + p00
- * and  t->hi == p11 + k10 + k01 + thi * s
- *
- *      (thi)      tlo1      tlo0
- * x                 s1        s0
- *      -------------------------
- *                            p00
- *      k01        p01 + k00
- *                 p10
- *      p11 + k10
- */
-INTERNAL void large_mul_u64(large_int *t, uint64_t s) {
-    uint64_t thi = t->hi;
-    uint64_t tlo0 = t->lo & MASK32;
-    uint64_t tlo1 = t->lo >> 32;
-
-    uint64_t s0 = s & MASK32;
-    uint64_t s1 = s >> 32;
+    binary_add(accumulator, sub_buffer);
 
-    uint64_t tmp = s0 * tlo0; /* p00 (unmasked) */
-    uint64_t p00 = tmp & MASK32;
-    uint64_t k10;
+    sub_buffer[0] = 1;
 
-    tmp = (s1 * tlo0) + (tmp >> 32); /* (p10 + k00) (p10 unmasked) */
-    k10 = tmp >> 32;
-
-    tmp = (s0 * tlo1) + (tmp & MASK32); /* (p01 + p10 + k00) (p01 unmasked) */
-
-    t->lo = (tmp << 32) + p00; /* (p01 + p10 + k00) << 32 + p00 (note any carry from unmasked p01 shifted out) */
-    t->hi = (s1 * tlo1) + k10 + (tmp >> 32) + thi * s; /* p11 + k10 + k01 + thi * s */
-}
-
-/* Count leading zeroes. See Hickman `r128__clz64()` */
-STATIC_UNLESS_ZINT_TEST int clz_u64(uint64_t x) {
-   uint64_t n = 64, y;
-   y = x >> 32; if (y) { n -= 32; x = y; }
-   y = x >> 16; if (y) { n -= 16; x = y; }
-   y = x >>  8; if (y) { n -=  8; x = y; }
-   y = x >>  4; if (y) { n -=  4; x = y; }
-   y = x >>  2; if (y) { n -=  2; x = y; }
-   y = x >>  1; if (y) { n -=  1; x = y; }
-   return (int) (n - x);
+    for (i = 1; i < 112; i++) {
+        sub_buffer[i] = 0;
+    }
+    binary_add(accumulator, sub_buffer);
 }
 
-/* Divide 128-bit dividend `t` by 64-bit divisor `v`
- * See Jacob `divmod128by128/64()` and Warren Section 9–2 (divmu64.c.txt)
- * Note digits are 32-bit parts */
-INTERNAL uint64_t large_div_u64(large_int *t, uint64_t v) {
-    const uint64_t b = 0x100000000; /* Number base (2**32) */
-    uint64_t qhi = 0; /* High digit of returned quotient */
-
-    uint64_t tnhi, tnlo, tnlo1, tnlo0, vn1, vn0; /* Normalized forms of (parts of) t and v */
-    uint64_t rnhilo1; /* Remainder after dividing 1st 3 digits of t by v */
-    uint64_t qhat1, qhat0; /* Estimated quotient digits */
-    uint64_t rhat; /* Remainder of estimated quotient digit */
-    uint64_t tmp;
-    int norm_shift;
-
-    /* Deal with single-digit (i.e. 32-bit) divisor here */
-    if (v < b) {
-        qhi = t->hi / v;
-        tmp = ((t->hi - qhi * v) << 32) + (t->lo >> 32); /* k * b + tlo1 */
-        qhat1 = tmp / v;
-        tmp = ((tmp - qhat1 * v) << 32) + (t->lo & MASK32); /* k * b + tlo0 */
-        qhat0 = tmp / v;
-        t->lo = (qhat1 << 32) | qhat0;
-        t->hi = qhi;
-        return tmp - qhat0 * v;
+void binary_multiply(short int reg[], char data[]) {
+    /* Multiply the contents of reg[] by a number */
+    short int temp[112] = {0};
+    short int accum[112] = {0};
+    int i;
+    
+    binary_load(temp, data, strlen(data));
+    
+    for (i = 0; i < 102; i++) {
+        if (temp[i] == 1) {
+            binary_add(accum, reg);
+        }
+        shiftup(reg);
     }
-
-    /* Main algorithm requires t->hi < v */
-    if (t->hi >= v) {
-        qhi = t->hi / v;
-        t->hi %= v;
+    
+    for (i = 0; i < 112; i++) {
+        reg[i] = accum[i];
     }
+}
 
-    /* Normalize by shifting v left just enough so that its high-order
-     * bit is on, and shift t left the same amount. Note don't need extra
-     * high-end digit for dividend as t->hi < v */
-
-    norm_shift = clz_u64(v);
-    v <<= norm_shift;
-    vn1 = v >> 32;
-    vn0 = v & MASK32;
-
-    if (norm_shift > 0) {
-        tnhi = (t->hi << norm_shift) | (t->lo >> (64 - norm_shift));
-        tnlo = t->lo << norm_shift;
-    } else {
-        tnhi = t->hi;
-        tnlo = t->lo;
-    }
+void shiftdown(short int buffer[]) {
+    int i;
 
-    tnlo1 = tnlo >> 32;
-    tnlo0 = tnlo & MASK32;
+    buffer[102] = 0;
+    buffer[103] = 0;
 
-    /* Compute qhat1 estimate */
+    for (i = 0; i < 102; i++) {
+        buffer[i] = buffer[i + 1];
+    }
+}
 
-    qhat1 = tnhi / vn1; /* Divide first digit of v into first 2 digits of t */
-    rhat = tnhi % vn1;
+void shiftup(short int buffer[]) {
+    int i;
 
-    /* Loop until qhat1 one digit and <= (rhat * b + 3rd digit of t) / vn0 */
-    for (tmp = qhat1 * vn0; qhat1 >= b || tmp > (rhat << 32) + tnlo1; tmp -= vn0) {
-        --qhat1;
-        rhat += vn1;
-        if (rhat >= b) { /* Must check here as (rhat << 32) would overflow */
-            break; /* qhat1 * vn0 < b * b (since vn0 < b) */
-        }
+    for (i = 102; i > 0; i--) {
+        buffer[i] = buffer[i - 1];
     }
-    /* Note qhat1 will be exact as have fully divided by 2-digit divisor
-     * (can only be too high by 1 (and require "add back" step) if divisor at least 3 digits) */
 
-    rnhilo1 = (tnhi << 32) + tnlo1 - (qhat1 * v); /* Note high digit (if any) of both tnhi and (qhat1 * v) shifted out */
+    buffer[0] = 0;
+}
 
-    /* Compute qhat0 estimate */
+short int islarger(short int accum[], short int reg[]) {
+    /* Returns 1 if accum[] is larger than reg[], else 0 */
+    int i, latch, larger;
+    latch = 0;
+    i = 103;
+    larger = 0;
 
-    qhat0 = rnhilo1 / vn1; /* Divide first digit of v into 2-digit remains of first 3 digits of t */
-    rhat = rnhilo1 % vn1;
 
-    /* Loop until qhat0 one digit and <= (rhat * b + 4th digit of t) / vn0 */
-    for (tmp = qhat0 * vn0; qhat0 >= b || tmp > (rhat << 32) + tnlo0; tmp -= vn0) {
-        --qhat0;
-        rhat += vn1;
-        if (rhat >= b) {
-            break;
+    do {
+        if ((accum[i] == 1) && (reg[i] == 0)) {
+            latch = 1;
+            larger = 1;
         }
-    }
-    /* Similarly qhat0 will be exact */
-
-    t->lo = (qhat1 << 32) | qhat0;
-    t->hi = qhi;
+        if ((accum[i] == 0) && (reg[i] == 1)) {
+            latch = 1;
+        }
+        i--;
+    } while ((latch == 0) && (i >= 0));
 
-    /* Unnormalize remainder */
-    return ((rnhilo1 << 32) + tnlo0 - (qhat0 * v)) >> norm_shift;
+    return larger;
 }
 
-/* Unset a bit (zero-based) */
-INTERNAL void large_unset_bit(large_int *t, int bit) {
-    if (bit < 64) {
-        t->lo &= ~(((uint64_t) 1) << bit);
-    } else if (bit < 128) {
-        t->hi &= ~(((uint64_t) 1) << (bit - 64));
-    }
-}
+void binary_load(short int reg[], char data[], const size_t src_len) {
+       size_t    read;
+       int       i;
+    short int temp[112] = {0};
 
-/* Ouput large_int into an unsigned int array of size `size`, each element containing `bits` bits */
-INTERNAL void large_uint_array(const large_int *t, unsigned int *uint_array, int size, int bits) {
-    int i, j;
-    uint64_t mask;
-    if (bits <= 0) {
-        bits = 8;
-    } else if (bits > 32) {
-        bits = 32;
-    }
-    mask = ~(((uint64_t) -1) << bits);
-    for (i = 0, j = 0; i < size && j < 64; i++, j += bits) {
-        uint_array[size - 1 - i] = (t->lo >> j) & mask; /* Little-endian order */
+    for (i = 0; i < 112; i++) {
+        reg[i] = 0;
     }
-    if (i < size) {
-        if (j != 64) {
-            j -= 64;
-            /* (first j bits of t->hi) << (bits - j) | (last (bits - j) bits of t->lo) */
-            uint_array[size - i] = ((t->hi & ~((((uint64_t) -1) << j))) << (bits - j)) | (t->lo >> (64 - (bits - j)) & mask);
-        } else {
-            j = 0;
-        }
-        for (; i < size && j < 64; i++, j += bits) {
-            uint_array[size - 1 - i] = (t->hi >> j) & mask;
+
+    for (read = 0; read < src_len; read++) {
+
+        for (i = 0; i < 112; i++) {
+            temp[i] = reg[i];
         }
-        if (i < size && j != 128) {
-            uint_array[size - 1 - i] = t->hi >> (j - bits) & mask;
+
+        for (i = 0; i < 9; i++) {
+            binary_add(reg, temp);
         }
-    }
-}
 
-/* As `large_uint_array()` above, except output to unsigned char array */
-INTERNAL void large_uchar_array(const large_int *t, unsigned char *uchar_array, int size, int bits) {
-    int i;
-#ifndef _MSC_VER
-    unsigned int uint_array[size ? size : 1]; /* Avoid run-time warning if size is 0 */
-#else
-    unsigned int *uint_array = (unsigned int *) _alloca((size ? size : 1) * sizeof(unsigned int));
-#endif
+        for (i = 0; i < 112; i++) {
+            temp[i] = 0;
+        }
 
-    large_uint_array(t, uint_array, size, bits);
+        for (i = 0; i < 4; i++) {
+                if (ctoi(data[read]) & (0x01 << i)) temp[i] = 1;
+        }
 
-    for (i = 0; i < size; i++) {
-        uchar_array[i] = uint_array[i];
+        binary_add(reg, temp);
     }
 }
 
-/* Output formatted large_int to stdout */
-INTERNAL void large_print(large_int *t) {
-    char buf[35]; /* 2 (0x) + 32 (hex) + 1 */
 
-    puts(large_dump(t, buf));
-}
-
-/* Format large_int into buffer, which should be at least 35 chars in size */
-INTERNAL char *large_dump(large_int *t, char *buf) {
-    unsigned int tlo1 = large_lo(t) >> 32;
-    unsigned int tlo0 = large_lo(t) & MASK32;
-    unsigned int thi1 = large_hi(t) >> 32;
-    unsigned int thi0 = large_hi(t) & MASK32;
-
-    if (thi1) {
-        sprintf(buf, "0x%X%08X%08X%08X", thi1, thi0, tlo1, tlo0);
-    } else if (thi0) {
-        sprintf(buf, "0x%X%08X%08X", thi0, tlo1, tlo0);
-    } else if (tlo1) {
-        sprintf(buf, "0x%X%08X", tlo1, tlo0);
-    } else {
-        sprintf(buf, "0x%X", tlo0);
-    }
-    return buf;
-}
index 06325f5..01f89aa 100644 (file)
@@ -2,7 +2,7 @@
 
 /*
     libzint - the open source barcode library
-    Copyright (C) 2008 - 2020 Robin Stuart <rstuart114@gmail.com>
+    Copyright (C) 2008-2017 Robin Stuart <rstuart114@gmail.com>
 
     Redistribution and use in source and binary forms, with or without
     modification, are permitted provided that the following conditions
     OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     SUCH DAMAGE.
 */
-/* vim: set ts=4 sw=4 et : */
 #ifndef __LARGE_H
 #define __LARGE_H
 
-#ifndef _MSC_VER
-#include <stdint.h>
-#else
-#include "ms_stdint.h"
-#endif
-
 #ifdef __cplusplus
 extern "C" {
 #endif /* __cplusplus */
 
-typedef struct { uint64_t lo; uint64_t hi; } large_int;
-
-#define large_lo(s) ((s)->lo)
-#define large_hi(s) ((s)->hi)
-
-/* Set 128-bit `t` from 128-bit `s` */
-#define large_load(t, s) do { (t)->lo = (s)->lo; (t)->hi = (s)->hi; } while (0)
-
-/* Set 128-bit `t` from 64-bit `s` */
-#define large_load_u64(t, s) do { (t)->lo = (s); (t)->hi = 0; } while (0)
-
-INTERNAL void large_load_str_u64(large_int *t, const unsigned char *s, int length);
-
-INTERNAL void large_add(large_int *t, const large_int *s);
-INTERNAL void large_add_u64(large_int *t, uint64_t s);
-
-INTERNAL void large_sub_u64(large_int *t, uint64_t s);
-
-INTERNAL void large_mul_u64(large_int *t, uint64_t s);
-
-INTERNAL uint64_t large_div_u64(large_int *t, uint64_t v);
-
-INTERNAL void large_unset_bit(large_int *t, int bit);
-
-INTERNAL void large_uint_array(const large_int *t, unsigned int *uint_array, int size, int bits);
-INTERNAL void large_uchar_array(const large_int *t, unsigned char *uchar_array, int size, int bits);
-
-INTERNAL void large_print(large_int *t);
-INTERNAL char *large_dump(large_int *t, char *buf);
+extern void binary_load(short int reg[], char data[], const size_t src_len);
+extern void binary_add(short int accumulator[], short int input_buffer[]);
+extern void binary_subtract(short int accumulator[], short int input_buffer[]);
+extern void shiftdown(short int buffer[]);
+extern void shiftup(short int buffer[]);
+extern short int islarger(short int accum[], short int reg[]);
+extern void binary_multiply(short int reg[], char data[]);
 
 #ifdef __cplusplus
 }
 #endif /* __cplusplus */
 
 #endif /* __LARGE_H */
+
index a9714af..48a9c62 100644 (file)
@@ -1,7 +1,7 @@
 /*  library.c - external functions of libzint
 
     libzint - the open source barcode library
-    Copyright (C) 2009 - 2020 Robin Stuart <rstuart114@gmail.com>
+    Copyright (C) 2009-2019 Robin Stuart <rstuart114@gmail.com>
 
     Redistribution and use in source and binary forms, with or without
     modification, are permitted provided that the following conditions
@@ -31,6 +31,8 @@
 /* vim: set ts=4 sw=4 et : */
 
 #include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
 #include <errno.h>
 #ifdef _MSC_VER
 #include <malloc.h>
@@ -38,7 +40,7 @@
 #include "common.h"
 #include "gs1.h"
 
-#define TECHNETIUM  "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%"
+#define TECHNETIUM     "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%"
 
 struct zint_symbol *ZBarcode_Create() {
     struct zint_symbol *symbol;
@@ -60,21 +62,24 @@ struct zint_symbol *ZBarcode_Create() {
     symbol->scale = 1.0;
     symbol->option_1 = -1;
     symbol->option_2 = 0;
-    symbol->option_3 = 0;
+    symbol->option_3 = 928; // PDF_MAX
     symbol->show_hrt = 1; // Show human readable text
     symbol->fontsize = 8;
     symbol->input_mode = DATA_MODE;
+    strcpy(symbol->primary, "");
+    memset(&(symbol->encoded_data[0][0]), 0, sizeof (symbol->encoded_data));
+    memset(&(symbol->row_height[0]), 0, sizeof (symbol->row_height));
     symbol->bitmap = NULL;
     symbol->bitmap_width = 0;
     symbol->bitmap_height = 0;
     symbol->eci = 0; // Default 0 uses ECI 3
     symbol->dot_size = 4.0 / 5.0;
-    symbol->vector = NULL;
     symbol->debug = 0;
     return symbol;
 }
 
-INTERNAL void vector_free(struct zint_symbol *symbol); /* Free vector structures */
+extern void render_free(struct zint_symbol *symbol); /* Free render structures */
+extern void vector_free(struct zint_symbol *symbol); /* Free vector structures */
 
 void ZBarcode_Clear(struct zint_symbol *symbol) {
     int i, j;
@@ -96,6 +101,7 @@ void ZBarcode_Clear(struct zint_symbol *symbol) {
     symbol->bitmap_height = 0;
 
     // If there is a rendered version, ensure its memory is released
+    render_free(symbol);
     vector_free(symbol);
 }
 
@@ -104,82 +110,84 @@ void ZBarcode_Delete(struct zint_symbol *symbol) {
         free(symbol->bitmap);
 
     // If there is a rendered version, ensure its memory is released
+    render_free(symbol);
     vector_free(symbol);
 
     free(symbol);
 }
 
-INTERNAL int get_best_eci(unsigned char source[], size_t length); /* Calculate suitable ECI mode */
-INTERNAL int utf_to_eci(const int eci, const unsigned char source[], unsigned char dest[], size_t *length); /* Convert Unicode to other encodings */
-
-
-INTERNAL int eanx(struct zint_symbol *symbol, unsigned char source[], int length); /* EAN system barcodes */
-INTERNAL int c39(struct zint_symbol *symbol, unsigned char source[], const size_t length); /* Code 3 from 9 (or Code 39) */
-INTERNAL int pharmazentral(struct zint_symbol *symbol, unsigned char source[], int length); /* Pharmazentral Nummer (PZN) */
-INTERNAL int ec39(struct zint_symbol *symbol, unsigned char source[], int length); /* Extended Code 3 from 9 (or Code 39+) */
-INTERNAL int codabar(struct zint_symbol *symbol, unsigned char source[], int length); /* Codabar - a simple substitution cipher */
-INTERNAL int matrix_two_of_five(struct zint_symbol *symbol, unsigned char source[], int length); /* Code 2 of 5 Standard (& Matrix) */
-INTERNAL int industrial_two_of_five(struct zint_symbol *symbol, unsigned char source[], int length); /* Code 2 of 5 Industrial */
-INTERNAL int iata_two_of_five(struct zint_symbol *symbol, unsigned char source[], int length); /* Code 2 of 5 IATA */
-INTERNAL int interleaved_two_of_five(struct zint_symbol *symbol, const unsigned char source[], size_t length); /* Code 2 of 5 Interleaved */
-INTERNAL int logic_two_of_five(struct zint_symbol *symbol, unsigned char source[], int length); /* Code 2 of 5 Data Logic */
-INTERNAL int itf14(struct zint_symbol *symbol, unsigned char source[], int length); /* ITF-14 */
-INTERNAL int dpleit(struct zint_symbol *symbol, unsigned char source[], int length); /* Deutsche Post Leitcode */
-INTERNAL int dpident(struct zint_symbol *symbol, unsigned char source[], int length); /* Deutsche Post Identcode */
-INTERNAL int c93(struct zint_symbol *symbol, unsigned char source[], int length); /* Code 93 - a re-working of Code 39+, generates 2 check digits */
-INTERNAL int code_128(struct zint_symbol *symbol, const unsigned char source[], const size_t length); /* Code 128 and NVE-18 */
-INTERNAL int ean_128(struct zint_symbol *symbol, unsigned char source[], const size_t length); /* EAN-128 (GS1-128) */
-INTERNAL int code_11(struct zint_symbol *symbol, unsigned char source[], int length); /* Code 11 */
-INTERNAL int msi_handle(struct zint_symbol *symbol, unsigned char source[], int length); /* MSI Plessey */
-INTERNAL int telepen(struct zint_symbol *symbol, unsigned char source[], const size_t length); /* Telepen ASCII */
-INTERNAL int telepen_num(struct zint_symbol *symbol, unsigned char source[], const size_t length); /* Telepen Numeric */
-INTERNAL int plessey(struct zint_symbol *symbol, unsigned char source[], const size_t length); /* Plessey Code */
-INTERNAL int pharma_one(struct zint_symbol *symbol, unsigned char source[], int length); /* Pharmacode One Track */
-INTERNAL int flattermarken(struct zint_symbol *symbol, unsigned char source[], int length); /* Flattermarken */
-INTERNAL int fim(struct zint_symbol *symbol, unsigned char source[], int length); /* Facing Identification Mark */
-INTERNAL int pharma_two(struct zint_symbol *symbol, unsigned char source[], int length); /* Pharmacode Two Track */
-INTERNAL int post_plot(struct zint_symbol *symbol, unsigned char source[], int length); /* Postnet */
-INTERNAL int planet_plot(struct zint_symbol *symbol, unsigned char source[], int length); /* PLANET */
-INTERNAL int imail(struct zint_symbol *symbol, unsigned char source[], int length); /* Intelligent Mail (aka USPS OneCode) */
-INTERNAL int royal_plot(struct zint_symbol *symbol, unsigned char source[], int length); /* RM4SCC */
-INTERNAL int australia_post(struct zint_symbol *symbol, unsigned char source[], int length); /* Australia Post 4-state */
-INTERNAL int code16k(struct zint_symbol *symbol, unsigned char source[],const size_t length); /* Code 16k */
-INTERNAL int pdf417enc(struct zint_symbol *symbol, unsigned char source[], const size_t length); /* PDF417 */
-INTERNAL int micro_pdf417(struct zint_symbol *symbol, unsigned char chaine[], const size_t length); /* Micro PDF417 */
-INTERNAL int maxicode(struct zint_symbol *symbol, unsigned char source[], int length); /* Maxicode */
-INTERNAL int rss14(struct zint_symbol *symbol, unsigned char source[], int length); /* RSS-14 */
-INTERNAL int rsslimited(struct zint_symbol *symbol, unsigned char source[], int length); /* RSS Limited */
-INTERNAL int rssexpanded(struct zint_symbol *symbol, unsigned char source[], int length); /* RSS Expanded */
-INTERNAL int composite(struct zint_symbol *symbol, unsigned char source[], int length); /* Composite Symbology */
-INTERNAL int kix_code(struct zint_symbol *symbol, unsigned char source[], int length); /* TNT KIX Code */
-INTERNAL int aztec(struct zint_symbol *symbol, unsigned char source[], const size_t length); /* Aztec Code */
-INTERNAL int code32(struct zint_symbol *symbol, unsigned char source[], int length); /* Italian Pharmacode */
-INTERNAL int daft_code(struct zint_symbol *symbol, unsigned char source[], int length); /* DAFT Code */
-INTERNAL int ean_14(struct zint_symbol *symbol, unsigned char source[], int length); /* EAN-14 */
-INTERNAL int nve_18(struct zint_symbol *symbol, unsigned char source[], int length); /* NVE-18 */
-INTERNAL int microqr(struct zint_symbol *symbol, const unsigned char source[], size_t length); /* Micro QR Code */
-INTERNAL int aztec_runes(struct zint_symbol *symbol, unsigned char source[], int length); /* Aztec Runes */
-INTERNAL int korea_post(struct zint_symbol *symbol, unsigned char source[], int length); /* Korea Post */
-INTERNAL int japan_post(struct zint_symbol *symbol, unsigned char source[], int length); /* Japanese Post */
-INTERNAL int code_49(struct zint_symbol *symbol, unsigned char source[], const int length); /* Code 49 */
-INTERNAL int channel_code(struct zint_symbol *symbol, unsigned char source[], int length); /* Channel Code */
-INTERNAL int code_one(struct zint_symbol *symbol, unsigned char source[], int length); /* Code One */
-INTERNAL int grid_matrix(struct zint_symbol *symbol, const unsigned char source[], size_t length); /* Grid Matrix */
-INTERNAL int han_xin(struct zint_symbol * symbol, const unsigned char source[], size_t length); /* Han Xin */
-INTERNAL int dotcode(struct zint_symbol * symbol, const unsigned char source[], int length); /* DotCode */
-INTERNAL int codablock(struct zint_symbol * symbol, const unsigned char source[], const size_t length); /* Codablock */
-INTERNAL int upnqr(struct zint_symbol *symbol, const unsigned char source[], size_t length); /* UPNQR */
-INTERNAL int qr_code(struct zint_symbol *symbol, const unsigned char source[], size_t length); /* QR Code */
-INTERNAL int dmatrix(struct zint_symbol *symbol, const unsigned char source[], const size_t in_length); /* Data Matrix (IEC16022) */
-INTERNAL int vin(struct zint_symbol *symbol, const unsigned char source[], const size_t in_length); /* VIN Code (Vehicle Identification Number) */
-INTERNAL int mailmark(struct zint_symbol *symbol, const unsigned char source[], const size_t in_length); /* Royal Mail 4-state Mailmark */
-INTERNAL int ultracode(struct zint_symbol *symbol, const unsigned char source[], const size_t in_length); /* Ultracode */
-INTERNAL int rmqr(struct zint_symbol *symbol, const unsigned char source[], const size_t in_length); /* rMQR */
-
-INTERNAL int plot_raster(struct zint_symbol *symbol, int rotate_angle, int file_type); /* Plot to PNG/BMP/PCX */
-INTERNAL int plot_vector(struct zint_symbol *symbol, int rotate_angle, int file_type); /* Plot to EPS/EMF/SVG */
-
-static void error_tag(char error_string[], int error_number) {
+extern int get_best_eci(unsigned char source[], size_t length); /* Calculate suitable ECI mode */
+extern int utf_to_eci(const int eci, const unsigned char source[], unsigned char dest[], size_t *length); /* Convert Unicode to other encodings */
+
+
+extern int eanx(struct zint_symbol *symbol, unsigned char source[], int length); /* EAN system barcodes */
+extern int c39(struct zint_symbol *symbol, unsigned char source[], const size_t length); /* Code 3 from 9 (or Code 39) */
+extern int pharmazentral(struct zint_symbol *symbol, unsigned char source[], int length); /* Pharmazentral Nummer (PZN) */
+extern int ec39(struct zint_symbol *symbol, unsigned char source[], int length); /* Extended Code 3 from 9 (or Code 39+) */
+extern int codabar(struct zint_symbol *symbol, unsigned char source[], int length); /* Codabar - a simple substitution cipher */
+extern int matrix_two_of_five(struct zint_symbol *symbol, unsigned char source[], int length); /* Code 2 of 5 Standard (& Matrix) */
+extern int industrial_two_of_five(struct zint_symbol *symbol, unsigned char source[], int length); /* Code 2 of 5 Industrial */
+extern int iata_two_of_five(struct zint_symbol *symbol, unsigned char source[], int length); /* Code 2 of 5 IATA */
+extern int interleaved_two_of_five(struct zint_symbol *symbol, const unsigned char source[], size_t length); /* Code 2 of 5 Interleaved */
+extern int logic_two_of_five(struct zint_symbol *symbol, unsigned char source[], int length); /* Code 2 of 5 Data Logic */
+extern int itf14(struct zint_symbol *symbol, unsigned char source[], int length); /* ITF-14 */
+extern int dpleit(struct zint_symbol *symbol, unsigned char source[], int length); /* Deutsche Post Leitcode */
+extern int dpident(struct zint_symbol *symbol, unsigned char source[], int length); /* Deutsche Post Identcode */
+extern int c93(struct zint_symbol *symbol, unsigned char source[], int length); /* Code 93 - a re-working of Code 39+, generates 2 check digits */
+extern int code_128(struct zint_symbol *symbol, unsigned char source[], const size_t length); /* Code 128 and NVE-18 */
+extern int ean_128(struct zint_symbol *symbol, unsigned char source[], const size_t length); /* EAN-128 (GS1-128) */
+extern int code_11(struct zint_symbol *symbol, unsigned char source[], int length); /* Code 11 */
+extern int msi_handle(struct zint_symbol *symbol, unsigned char source[], int length); /* MSI Plessey */
+extern int telepen(struct zint_symbol *symbol, unsigned char source[], const size_t length); /* Telepen ASCII */
+extern int telepen_num(struct zint_symbol *symbol, unsigned char source[], const size_t length); /* Telepen Numeric */
+extern int plessey(struct zint_symbol *symbol, unsigned char source[], const size_t length); /* Plessey Code */
+extern int pharma_one(struct zint_symbol *symbol, unsigned char source[], int length); /* Pharmacode One Track */
+extern int flattermarken(struct zint_symbol *symbol, unsigned char source[], int length); /* Flattermarken */
+extern int fim(struct zint_symbol *symbol, unsigned char source[], int length); /* Facing Identification Mark */
+extern int pharma_two(struct zint_symbol *symbol, unsigned char source[], int length); /* Pharmacode Two Track */
+extern int post_plot(struct zint_symbol *symbol, unsigned char source[], int length); /* Postnet */
+extern int planet_plot(struct zint_symbol *symbol, unsigned char source[], int length); /* PLANET */
+extern int imail(struct zint_symbol *symbol, unsigned char source[], int length); /* Intelligent Mail (aka USPS OneCode) */
+extern int royal_plot(struct zint_symbol *symbol, unsigned char source[], int length); /* RM4SCC */
+extern int australia_post(struct zint_symbol *symbol, unsigned char source[], int length); /* Australia Post 4-state */
+extern int code16k(struct zint_symbol *symbol, unsigned char source[],const size_t length); /* Code 16k */
+extern int pdf417enc(struct zint_symbol *symbol, unsigned char source[], const size_t length); /* PDF417 */
+extern int micro_pdf417(struct zint_symbol *symbol, unsigned char chaine[], const size_t length); /* Micro PDF417 */
+extern int maxicode(struct zint_symbol *symbol, unsigned char source[], int length); /* Maxicode */
+extern int rss14(struct zint_symbol *symbol, unsigned char source[], int length); /* RSS-14 */
+extern int rsslimited(struct zint_symbol *symbol, unsigned char source[], int length); /* RSS Limited */
+extern int rssexpanded(struct zint_symbol *symbol, unsigned char source[], int length); /* RSS Expanded */
+extern int composite(struct zint_symbol *symbol, unsigned char source[], int length); /* Composite Symbology */
+extern int kix_code(struct zint_symbol *symbol, unsigned char source[], int length); /* TNT KIX Code */
+extern int aztec(struct zint_symbol *symbol, unsigned char source[], const size_t length); /* Aztec Code */
+extern int code32(struct zint_symbol *symbol, unsigned char source[], int length); /* Italian Pharmacode */
+extern int daft_code(struct zint_symbol *symbol, unsigned char source[], int length); /* DAFT Code */
+extern int ean_14(struct zint_symbol *symbol, unsigned char source[], int length); /* EAN-14 */
+extern int nve_18(struct zint_symbol *symbol, unsigned char source[], int length); /* NVE-18 */
+extern int microqr(struct zint_symbol *symbol, const unsigned char source[], size_t length); /* Micro QR Code */
+extern int aztec_runes(struct zint_symbol *symbol, unsigned char source[], int length); /* Aztec Runes */
+extern int korea_post(struct zint_symbol *symbol, unsigned char source[], int length); /* Korea Post */
+extern int japan_post(struct zint_symbol *symbol, unsigned char source[], int length); /* Japanese Post */
+extern int code_49(struct zint_symbol *symbol, unsigned char source[], const int length); /* Code 49 */
+extern int channel_code(struct zint_symbol *symbol, unsigned char source[], int length); /* Channel Code */
+extern int code_one(struct zint_symbol *symbol, unsigned char source[], int length); /* Code One */
+extern int grid_matrix(struct zint_symbol *symbol, const unsigned char source[], size_t length); /* Grid Matrix */
+extern int han_xin(struct zint_symbol * symbol, const unsigned char source[], size_t length); /* Han Xin */
+extern int dotcode(struct zint_symbol * symbol, const unsigned char source[], int length); /* DotCode */
+extern int codablock(struct zint_symbol * symbol, const unsigned char source[], const size_t length); /* Codablock */
+extern int upnqr(struct zint_symbol *symbol, const unsigned char source[], size_t length); /* UPNQR */
+extern int qr_code(struct zint_symbol *symbol, const unsigned char source[], size_t length); /* QR Code */
+extern int dmatrix(struct zint_symbol *symbol, const unsigned char source[], const size_t in_length); /* Data Matrix (IEC16022) */
+extern int vin(struct zint_symbol *symbol, const unsigned char source[], const size_t in_length); /* VIN Code (Vehicle Identification Number) */
+extern int mailmark(struct zint_symbol *symbol, const unsigned char source[], const size_t in_length); /* Royal Mail 4-state Mailmark */
+extern int ultracode(struct zint_symbol *symbol, const unsigned char source[], const size_t in_length); /* Ultracode */
+
+extern int plot_raster(struct zint_symbol *symbol, int rotate_angle, int file_type); /* Plot to PNG/BMP/PCX */
+extern int plot_vector(struct zint_symbol *symbol, int rotate_angle, int file_type); /* Plot to EPS/EMF/SVG */
+
+extern int render_plot(struct zint_symbol *symbol, float width, float height); /* Plot to gLabels - depreciated */
+
+void error_tag(char error_string[], int error_number) {
 
     if (error_number != 0) {
         char error_buffer[100];
@@ -196,7 +204,7 @@ static void error_tag(char error_string[], int error_number) {
 }
 
 /* Output a hexadecimal representation of the rendered symbol */
-static int dump_plot(struct zint_symbol *symbol) {
+int dump_plot(struct zint_symbol *symbol) {
     FILE *f;
     int i, r;
     char hex[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8',
@@ -377,7 +385,7 @@ static void check_row_heights(struct zint_symbol *symbol) {
 
 static int check_force_gs1(const int symbology) {
     /* Returns 1 if symbology MUST have GS1 data */
-
+    
     int result = is_composite(symbology);
 
     switch (symbology) {
@@ -389,7 +397,7 @@ static int check_force_gs1(const int symbology) {
             result = 1;
             break;
     }
-
+    
     return result;
 }
 
@@ -406,8 +414,6 @@ static int gs1_compliant(const int symbology) {
         case BARCODE_CODE49:
         case BARCODE_QRCODE:
         case BARCODE_DOTCODE:
-        case BARCODE_RMQR:
-        case BARCODE_ULTRA:
             result = 1;
             break;
     }
@@ -434,7 +440,6 @@ static int is_matrix(const int symbology) {
         case BARCODE_HANXIN:
         case BARCODE_DOTCODE:
         case BARCODE_UPNQR:
-        case BARCODE_RMQR:
             result = 1;
             break;
     }
@@ -444,7 +449,7 @@ static int is_matrix(const int symbology) {
 
 static int is_linear(const int symbology) {
     /* Returns 1 if symbology is linear (1 dimensional) */
-
+    
     int result = 0;
     switch (symbology) {
         case BARCODE_CODE11:
@@ -501,7 +506,7 @@ static int is_linear(const int symbology) {
             result = 1;
             break;
     }
-
+    
     return result;
 }
 
@@ -628,7 +633,6 @@ int ZBarcode_ValidID(int symbol_id) {
         case BARCODE_VIN:
         case BARCODE_MAILMARK:
         case BARCODE_ULTRA:
-        case BARCODE_RMQR:
             result = 1;
             break;
     }
@@ -636,13 +640,11 @@ int ZBarcode_ValidID(int symbol_id) {
     return result;
 }
 
-static int reduced_charset(struct zint_symbol *symbol, const unsigned char *source, size_t in_length);
-
-static int extended_or_reduced_charset(struct zint_symbol *symbol, const unsigned char *source, const int length) {
+static int extended_charset(struct zint_symbol *symbol, const unsigned char *source, const int length) {
     int error_number = 0;
-
+        
+    /* These are the "elite" standards which can support multiple character sets */
     switch (symbol->symbology) {
-        /* These are the "elite" standards which have support for specific character sets */
         case BARCODE_QRCODE: error_number = qr_code(symbol, source, length);
             break;
         case BARCODE_MICROQR: error_number = microqr(symbol, source, length);
@@ -653,17 +655,13 @@ static int extended_or_reduced_charset(struct zint_symbol *symbol, const unsigne
             break;
         case BARCODE_UPNQR: error_number = upnqr(symbol, source, length);
             break;
-        case BARCODE_RMQR: error_number = rmqr(symbol, source, length);
-            break;
-        default: error_number = reduced_charset(symbol, source, length);
-            break;
     }
 
     return error_number;
 }
 
 static int reduced_charset(struct zint_symbol *symbol, const unsigned char *source, size_t in_length) {
-    /* These are the "norm" standards which only support Latin-1 at most, though a few support ECI */
+    /* These are the "norm" standards which only support Latin-1 at most */
     int error_number = 0;
 
 #ifndef _MSC_VER
@@ -671,15 +669,23 @@ static int reduced_charset(struct zint_symbol *symbol, const unsigned char *sour
 #else
     unsigned char* preprocessed = (unsigned char*) _alloca(in_length + 1);
 #endif
-
-    if (symbol->symbology == BARCODE_ITF14) {
+    
+    if (symbol->symbology == BARCODE_CODE16K) {
+        symbol->whitespace_width = 16;
+        symbol->border_width = 2;
+        if (!(symbol->output_options & BARCODE_BIND)) {
+            symbol->output_options += BARCODE_BIND;
+        }
+    }
+    else
+        if (symbol->symbology == BARCODE_ITF14) {
         symbol->whitespace_width = 20;
         symbol->border_width = 8;
         if (!(symbol->output_options & BARCODE_BOX)) {
             symbol->output_options += BARCODE_BOX;
         }
     }
-
+    
     switch (symbol->input_mode & 0x07) {
         case DATA_MODE:
         case GS1_MODE:
@@ -687,19 +693,18 @@ static int reduced_charset(struct zint_symbol *symbol, const unsigned char *sour
             preprocessed[in_length] = '\0';
             break;
         case UNICODE_MODE:
-            /* Prior check ensures ECI only set for those that support it */
-            error_number = utf_to_eci(symbol->eci && symbol->eci <= 899 ? symbol->eci : 3, source, preprocessed, &in_length);
+            error_number = utf_to_eci(symbol->eci, source, preprocessed, &in_length);
             if (error_number != 0) {
                 strcpy(symbol->errtxt, "204: Invalid characters in input data");
                 return error_number;
             }
             break;
     }
-
+    
     if ((symbol->height == 0) && is_linear(symbol->symbology)) {
         symbol->height = 50;
     }
-
+    
     switch (symbol->symbology) {
         case BARCODE_C25MATRIX: error_number = matrix_two_of_five(symbol, preprocessed, in_length);
             break;
@@ -862,7 +867,7 @@ static int reduced_charset(struct zint_symbol *symbol, const unsigned char *sour
     return error_number;
 }
 
-static void strip_bom(unsigned char *source, int *input_length) {
+void strip_bom(unsigned char *source, int *input_length) {
     int i;
 
     if (*input_length > 3) {
@@ -876,7 +881,7 @@ static void strip_bom(unsigned char *source, int *input_length) {
     }
 }
 
-static int escape_char_process(struct zint_symbol *symbol, unsigned char *input_string, int *length) {
+int escape_char_process(struct zint_symbol *symbol, unsigned char *input_string, int *length) {
     int error_number;
     int in_posn, out_posn;
     int hex1, hex2;
@@ -889,13 +894,9 @@ static int escape_char_process(struct zint_symbol *symbol, unsigned char *input_
 
     in_posn = 0;
     out_posn = 0;
-
+    
     do {
         if (input_string[in_posn] == '\\') {
-            if (in_posn + 1 >= *length) {
-                strcpy(symbol->errtxt, "236: Incomplete escape character in input data");
-                return ZINT_ERROR_INVALID_DATA;
-            }
             switch (input_string[in_posn + 1]) {
                 case '0': escaped_string[out_posn] = 0x00; /* Null */
                     in_posn += 2;
@@ -940,7 +941,7 @@ static int escape_char_process(struct zint_symbol *symbol, unsigned char *input_
                     hex1 = ctoi(input_string[in_posn + 2]);
                     hex2 = ctoi(input_string[in_posn + 3]);
                     if ((hex1 >= 0) && (hex2 >= 0)) {
-                        if (hex1 > 7 && (symbol->input_mode & 0x07) == UNICODE_MODE) {
+                        if (hex1 > 7 && (symbol->input_mode & UNICODE_MODE) != 0) {
                             // Convert to UTF-8
                             escaped_string[out_posn] = 0xc0 + (hex1 >> 2);
                             out_posn++;
@@ -967,11 +968,11 @@ static int escape_char_process(struct zint_symbol *symbol, unsigned char *input_
         }
         out_posn++;
     } while (in_posn < *length);
-
+    
     memcpy(input_string, escaped_string, out_posn);
     input_string[out_posn] = '\0';
     *length = out_posn;
-
+    
     error_number = 0;
 
     return error_number;
@@ -979,6 +980,7 @@ static int escape_char_process(struct zint_symbol *symbol, unsigned char *input_
 
 int ZBarcode_Encode(struct zint_symbol *symbol, const unsigned char *source, int in_length) {
     int error_number, error_buffer, i;
+    int input_mode = symbol->input_mode;
 #ifdef _MSC_VER
     unsigned char* local_source;
 #endif
@@ -1123,7 +1125,7 @@ int ZBarcode_Encode(struct zint_symbol *symbol, const unsigned char *source, int
         }
     }
     /* Everything from 128 up is Zint-specific */
-    if (symbol->symbology > 145) {
+    if (symbol->symbology >= 145) {
         strcpy(symbol->errtxt, "216: Symbology out of range, using Code 128");
         symbol->symbology = BARCODE_CODE128;
         error_number = ZINT_WARN_INVALID_OPTION;
@@ -1144,10 +1146,6 @@ int ZBarcode_Encode(struct zint_symbol *symbol, const unsigned char *source, int
         error_number = ZINT_ERROR_INVALID_OPTION;
     }
 
-    if ((symbol->input_mode & 0x07) > 2) {
-        symbol->input_mode = DATA_MODE; /* Reset completely */
-    }
-
     if (error_number > 4) {
         error_tag(symbol->errtxt, error_number);
         return error_number;
@@ -1159,19 +1157,16 @@ int ZBarcode_Encode(struct zint_symbol *symbol, const unsigned char *source, int
     local_source[in_length] = '\0';
 
     /* Start acting on input mode */
-    if (symbol->input_mode & ESCAPE_MODE) {
+    if (input_mode & ESCAPE_MODE) {
         error_number = escape_char_process(symbol, local_source, &in_length);
         if (error_number != 0) {
             error_tag(symbol->errtxt, error_number);
             return error_number;
         }
+        input_mode -= ESCAPE_MODE;
     }
 
-    if ((symbol->input_mode & 0x07) == UNICODE_MODE) {
-        strip_bom(local_source, &in_length);
-    }
-
-    if (((symbol->input_mode & 0x07) == GS1_MODE) || (check_force_gs1(symbol->symbology))) {
+    if ((input_mode == GS1_MODE) || (check_force_gs1(symbol->symbology))) {
         if (gs1_compliant(symbol->symbology) == 1) {
             // Reduce input for composite and non-forced symbologies, others (EAN128 and RSS_EXP based) will handle it themselves
             if (is_composite(symbol->symbology) || !check_force_gs1(symbol->symbology)) {
@@ -1195,21 +1190,68 @@ int ZBarcode_Encode(struct zint_symbol *symbol, const unsigned char *source, int
         }
     }
 
-    error_number = extended_or_reduced_charset(symbol, local_source, in_length);
+    if ((input_mode < 0) || (input_mode > 2)) {
+        input_mode = DATA_MODE;
+    }
+    
+    if ((symbol->eci != 0) && (symbol->eci != 26)) {
+        input_mode = DATA_MODE;
+    }
+
+    if (input_mode == UNICODE_MODE) {
+        strip_bom(local_source, &in_length);
+    }
+    
+    switch (symbol->symbology) {
+        case BARCODE_QRCODE:
+        case BARCODE_MICROQR:
+        case BARCODE_GRIDMATRIX:
+        case BARCODE_HANXIN:
+        case BARCODE_UPNQR:
+            error_number = extended_charset(symbol, local_source, in_length);
+            break;
+        default:
+            error_number = reduced_charset(symbol, local_source, in_length);
+            break;
+    }
 
-    if ((error_number == ZINT_ERROR_INVALID_DATA) && symbol->eci == 0 && supports_eci(symbol->symbology)
-            && (symbol->input_mode & 0x07) == UNICODE_MODE) {
+    if ((error_number == ZINT_ERROR_INVALID_DATA) && (supports_eci(symbol->symbology)
+            && (input_mode == UNICODE_MODE))) {
         /* Try another ECI mode */
         symbol->eci = get_best_eci(local_source, in_length);
 
-        error_number = extended_or_reduced_charset(symbol, local_source, in_length);
-
+        switch (symbol->symbology) {
+            case BARCODE_QRCODE:
+            case BARCODE_MICROQR:
+            case BARCODE_GRIDMATRIX:
+            case BARCODE_HANXIN:
+                {
+#ifndef _MSC_VER
+                    unsigned char temp[in_length + 1];
+#else
+                    unsigned char *temp = (unsigned char*) _alloca(in_length + 1);
+#endif
+                    size_t temp_len = in_length;
+                    memcpy(temp, local_source, temp_len);
+                    temp[temp_len] = '\0';
+                    error_number = utf_to_eci(symbol->eci, local_source, temp, &temp_len);
+                    if (error_number == 0) {
+                        in_length = (int) temp_len;
+                        memcpy(local_source, temp, in_length);
+                        local_source[in_length] = '\0';
+                        error_number = extended_charset(symbol, local_source, in_length);
+                    }
+                }
+                break;
+            default:
+                error_number = reduced_charset(symbol, local_source, in_length);
+                break;
+        }
+        
         if (error_number == 0) {
             error_number = ZINT_WARN_USES_ECI;
-            if (!(symbol->debug & ZINT_DEBUG_TEST)) {
-                strcpy(symbol->errtxt, "222: Encoded data includes ECI");
-            }
-            if (symbol->debug & ZINT_DEBUG_PRINT) printf("Data ECI %d\n", symbol->eci);
+            strcpy(symbol->errtxt, "222: Encoded data includes ECI");
+            if (symbol->debug) printf("Data ECI %d\n", symbol->eci);
         }
     }
 
@@ -1227,7 +1269,7 @@ int ZBarcode_Encode(struct zint_symbol *symbol, const unsigned char *source, int
     }
     error_tag(symbol->errtxt, error_number);
 
-    if (error_number < 5) {
+    if (error_number <= 5) {
         check_row_heights(symbol);
     }
 
@@ -1299,7 +1341,7 @@ int ZBarcode_Print(struct zint_symbol *symbol, int rotate_angle) {
             error_number = dump_plot(symbol);
         } else
             if (!(strcmp(output, "EPS"))) {
-            error_number = plot_vector(symbol, rotate_angle, OUT_EPS_FILE);
+            error_number = plot_vector(symbol, rotate_angle, OUT_EPS_FILE);  
         } else
             if (!(strcmp(output, "SVG"))) {
             error_number = plot_vector(symbol, rotate_angle, OUT_SVG_FILE);
@@ -1336,14 +1378,6 @@ int ZBarcode_Buffer(struct zint_symbol *symbol, int rotate_angle) {
             return ZINT_ERROR_INVALID_OPTION;
     }
 
-    if (symbol->output_options & BARCODE_DOTTY_MODE) {
-        if (!(is_matrix(symbol->symbology))) {
-            strcpy(symbol->errtxt, "237: Selected symbology cannot be rendered as dots");
-            error_tag(symbol->errtxt, ZINT_ERROR_INVALID_OPTION);
-            return ZINT_ERROR_INVALID_OPTION;
-        }
-    }
-
     error_number = plot_raster(symbol, rotate_angle, OUT_BUFFER);
     error_tag(symbol->errtxt, error_number);
     return error_number;
@@ -1364,14 +1398,6 @@ int ZBarcode_Buffer_Vector(struct zint_symbol *symbol, int rotate_angle) {
             return ZINT_ERROR_INVALID_OPTION;
     }
 
-    if (symbol->output_options & BARCODE_DOTTY_MODE) {
-        if (!(is_matrix(symbol->symbology))) {
-            strcpy(symbol->errtxt, "238: Selected symbology cannot be rendered as dots");
-            error_tag(symbol->errtxt, ZINT_ERROR_INVALID_OPTION);
-            return ZINT_ERROR_INVALID_OPTION;
-        }
-    }
-
     error_number = plot_vector(symbol, rotate_angle, OUT_BUFFER);
     error_tag(symbol->errtxt, error_number);
     return error_number;
@@ -1408,7 +1434,7 @@ int ZBarcode_Encode_and_Buffer(struct zint_symbol *symbol, unsigned char *input,
     if (error_number == 0) {
         error_number = first_err;
     }
-
+    
     return error_number;
 }
 
@@ -1426,21 +1452,20 @@ int ZBarcode_Encode_and_Buffer_Vector(struct zint_symbol *symbol, unsigned char
     if (error_number == 0) {
         error_number = first_err;
     }
-
+    
     return error_number;
 }
 
 int ZBarcode_Encode_File(struct zint_symbol *symbol, char *filename) {
     FILE *file;
     unsigned char *buffer;
-    long fileLen;
-    size_t n;
-    int nRead = 0;
+    unsigned long fileLen;
+    unsigned int nRead = 0, n = 0;
     int ret;
 
     if (!strcmp(filename, "-")) {
         file = stdin;
-        fileLen = 7900;
+        fileLen = 7100;
     } else {
         file = fopen(filename, "rb");
         if (!file) {
@@ -1454,19 +1479,13 @@ int ZBarcode_Encode_File(struct zint_symbol *symbol, char *filename) {
         fileLen = ftell(file);
         fseek(file, 0, SEEK_SET);
 
-        if (fileLen > 7900) {
-            /* The largest amount of data that can be encoded is 7827 numeric digits in Han Xin Code */
+        if (fileLen > 7100) {
+            /* The largest amount of data that can be encoded is 7089 numeric digits in QR Code */
             strcpy(symbol->errtxt, "230: Input file too long");
             error_tag(symbol->errtxt, ZINT_ERROR_INVALID_DATA);
             fclose(file);
             return ZINT_ERROR_INVALID_DATA;
         }
-        if (fileLen <= 0) {
-            strcpy(symbol->errtxt, "235: Input file empty or unseekable");
-            error_tag(symbol->errtxt, ZINT_ERROR_INVALID_DATA);
-            fclose(file);
-            return ZINT_ERROR_INVALID_DATA;
-        }
     }
 
     /* Allocate memory */
@@ -1474,9 +1493,8 @@ int ZBarcode_Encode_File(struct zint_symbol *symbol, char *filename) {
     if (!buffer) {
         strcpy(symbol->errtxt, "231: Internal memory error");
         error_tag(symbol->errtxt, ZINT_ERROR_MEMORY);
-        if (strcmp(filename, "-")) {
+        if (strcmp(filename, "-"))
             fclose(file);
-        }
         return ZINT_ERROR_MEMORY;
     }
 
@@ -1486,18 +1504,12 @@ int ZBarcode_Encode_File(struct zint_symbol *symbol, char *filename) {
         n = fread(buffer + nRead, 1, fileLen - nRead, file);
         if (ferror(file)) {
             strcpy(symbol->errtxt, strerror(errno));
-            if (strcmp(filename, "-")) {
-                fclose(file);
-            }
-            free(buffer);
             return ZINT_ERROR_INVALID_DATA;
         }
         nRead += n;
     } while (!feof(file) && (0 < n) && (nRead < fileLen));
 
-    if (strcmp(filename, "-")) {
-        fclose(file);
-    }
+    fclose(file);
     ret = ZBarcode_Encode(symbol, buffer, nRead);
     free(buffer);
     return ret;
@@ -1511,13 +1523,13 @@ int ZBarcode_Encode_File_and_Print(struct zint_symbol *symbol, char *filename, i
     if (error_number >= 5) {
         return error_number;
     }
-
+    
     first_err = error_number;
     error_number = ZBarcode_Print(symbol, rotate_angle);
     if (error_number == 0) {
         error_number = first_err;
     }
-
+    
     return error_number;
 }
 
@@ -1529,7 +1541,7 @@ int ZBarcode_Encode_File_and_Buffer(struct zint_symbol *symbol, char *filename,
     if (error_number >= 5) {
         return error_number;
     }
-
+    
     first_err = error_number;
     error_number = ZBarcode_Buffer(symbol, rotate_angle);
     if (error_number == 0) {
@@ -1547,7 +1559,7 @@ int ZBarcode_Encode_File_and_Buffer_Vector(struct zint_symbol *symbol, char *fil
     if (error_number >= 5) {
         return error_number;
     }
-
+    
     first_err = error_number;
     error_number = ZBarcode_Buffer_Vector(symbol, rotate_angle);
     if (error_number == 0) {
@@ -1557,6 +1569,22 @@ int ZBarcode_Encode_File_and_Buffer_Vector(struct zint_symbol *symbol, char *fil
     return error_number;
 }
 
+/*
+ * Rendering support, initially added by Sam Lown.
+ *
+ * Converts encoded data into an intermediate format to be interpreted
+ * in other applications using this library.
+ *
+ * If the width and height are not set to zero, the barcode will be resized to those
+ * dimensions. The symbol->scale and symbol->height values are totally ignored in this case.
+ *
+ */
+int ZBarcode_Render(struct zint_symbol *symbol, const float width, const float height) {
+    // Send the request to the render_plot method
+    return render_plot(symbol, width, height);
+}
+
 int ZBarcode_Version() {
     return (ZINT_VERSION_MAJOR * 10000) + (ZINT_VERSION_MINOR * 100) + ZINT_VERSION_RELEASE;
 }
+
index ba08f73..016f3de 100644 (file)
@@ -7,8 +7,8 @@ VS_VERSION_INFO         VERSIONINFO
 #else\r
 VS_VERSION_INFO                VERSIONINFO\r
 #endif\r
-  FILEVERSION          2,8,1,0\r
-  PRODUCTVERSION       2,8,1,0\r
+  FILEVERSION          2,6,0,0\r
+  PRODUCTVERSION       2,6,0,0\r
   FILEFLAGSMASK                VS_FFI_FILEFLAGSMASK\r
 #ifdef _DEBUG\r
   FILEFLAGS            VS_FF_DEBUG\r
@@ -25,12 +25,12 @@ BEGIN
     //language ID = U.S. English, char set = Windows, Multilingual\r
     BEGIN\r
       VALUE "FileDescription", "libzint barcode library\0"\r
-      VALUE "FileVersion",     "2.8.1.0\0"\r
+      VALUE "FileVersion",     "2.6.0.0\0"\r
       VALUE "InternalName",    "zint.dll\0"\r
-      VALUE "LegalCopyright",  "Copyright © 2020 Robin Stuart & BogDan Vatra\0"\r
+      VALUE "LegalCopyright",  "Copyright © 2017 Robin Stuart & BogDan Vatra\0"\r
       VALUE "OriginalFilename",        "zint.dll\0"\r
       VALUE "ProductName",     "libzint\0"\r
-      VALUE "ProductVersion",  "2.8.1.0\0"\r
+      VALUE "ProductVersion",  "2.6.0.0\0"\r
       VALUE "License",  "BSD License version 3\0"\r
       VALUE "WWW", "http://www.sourceforge.net/projects/zint"      \r
     END\r
index 6e0588f..0aebc22 100644 (file)
@@ -2,7 +2,7 @@
 
 /*
     libzint - the open source barcode library
-    Copyright (C) 2008 - 2020 Robin Stuart <rstuart114@gmail.com>
+    Copyright (C) 2008-2018 Robin Stuart <rstuart114@gmail.com>
 
     Redistribution and use in source and binary forms, with or without
     modification, are permitted provided that the following conditions
@@ -29,7 +29,6 @@
     OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     SUCH DAMAGE.
  */
-/* vim: set ts=4 sw=4 et : */
 
 /* 
  * Developed in accordance with "Royal Mail Mailmark barcode C encoding and deconding instructions"
@@ -40,6 +39,7 @@
  */
 
 #include <string.h>
+#include <stdlib.h>
 #include <stdio.h>
 #ifdef _MSC_VER
 #include <malloc.h>
@@ -81,7 +81,7 @@ static const unsigned short extender_group_l[26] = {
     2, 5, 7, 8, 13, 14, 15, 16, 21, 22, 23, 0, 1, 3, 4, 6, 9, 10, 11, 12, 17, 18, 19, 20, 24, 25
 };
 
-static int verify_character(char input, char type) {
+int verify_character(char input, char type) {
     int val = 0;
     
     switch (type) {
@@ -106,7 +106,7 @@ static int verify_character(char input, char type) {
     }
 }
 
-static int verify_postcode(char* postcode, int type) {
+int verify_postcode(char* postcode, int type) {
     int i;
     char pattern[11];
     
@@ -122,7 +122,7 @@ static int verify_postcode(char* postcode, int type) {
 }
 
 /* Royal Mail Mailmark */
-INTERNAL int mailmark(struct zint_symbol *symbol, const unsigned char source[], const size_t in_length) {
+int mailmark(struct zint_symbol *symbol, const unsigned char source[], const size_t in_length) {
     
     char local_source[28];
     int format;
@@ -133,16 +133,18 @@ INTERNAL int mailmark(struct zint_symbol *symbol, const unsigned char source[],
     char postcode[10];
     int postcode_type;
     char pattern[10];
-    large_int destination_postcode;
-    large_int b;
-    large_int cdv;
+    short int destination_postcode[112];
+    short int a[112];
+    short int b[112];
+    short int temp[112];
+    short int cdv[112];
     unsigned char data[26];
     int data_top, data_step;
     unsigned char check[7];
     short int extender[27];
     char bar[80];
     int check_count;
-    int i, j, len;
+    int i, j;
     int length = (int) in_length;
     
     if (length > 26) {
@@ -168,7 +170,7 @@ INTERNAL int mailmark(struct zint_symbol *symbol, const unsigned char source[],
     
     to_upper((unsigned char*) local_source);
     
-    if (symbol->debug & ZINT_DEBUG_PRINT) {
+    if (symbol->debug) {
         printf("Producing Mailmark %s\n", local_source);
     }
     
@@ -240,6 +242,7 @@ INTERNAL int mailmark(struct zint_symbol *symbol, const unsigned char source[],
      * 7 = International designation
      */
     
+    postcode_type = 0;
     if (strcmp(postcode, "XY11     ") == 0) {
         postcode_type = 7;
     } else {
@@ -277,107 +280,164 @@ INTERNAL int mailmark(struct zint_symbol *symbol, const unsigned char source[],
     }
     
     // Convert postcode to internal user field
-
-    large_load_u64(&destination_postcode, 0);
-
+    for (i = 0; i < 112; i++) {
+        destination_postcode[i] = 0;
+        a[i] = 0;
+        b[i] = 0;
+    }
+    
     if (postcode_type != 7) {
         strcpy(pattern, postcode_format[postcode_type - 1]);
 
-        large_load_u64(&b, 0);
-
+        binary_load(b, "0", 1);
+        
         for (i = 0; i < 9; i++) {
             switch (pattern[i]) {
                 case 'F':
-                    large_mul_u64(&b, 26);
-                    large_add_u64(&b, posn(SET_F, postcode[i]));
+                    binary_multiply(b, "26");
+                    
+                    binary_load(temp, "0", 1);
+                    for (j = 0; j < 5; j++) {
+                        if (posn(SET_F, postcode[i]) & (0x01 << j)) temp[j] = 1;
+                    }
+
+                    binary_add(b, temp);
                     break;
                 case 'L':
-                    large_mul_u64(&b, 20);
-                    large_add_u64(&b, posn(SET_L, postcode[i]));
+                    binary_multiply(b, "20");
+                    
+                    binary_load(temp, "0", 1);
+                    for (j = 0; j < 5; j++) {
+                        if (posn(SET_L, postcode[i]) & (0x01 << j)) temp[j] = 1;
+                    }
+
+                    binary_add(b, temp);
                     break;
                 case 'N':
-                    large_mul_u64(&b, 10);
-                    large_add_u64(&b, posn(SET_N, postcode[i]));
+                    binary_multiply(b, "10");
+                    
+                    binary_load(temp, "0", 1);
+                    for (j = 0; j < 4; j++) {
+                        if (posn(SET_N, postcode[i]) & (0x01 << j)) temp[j] = 1;
+                    }
+
+                    binary_add(b, temp);
                     break;
-                // case 'S' ignored as value is 0
+                // case 'S' ignorred as value is 0
             }
         }
-
-        large_load(&destination_postcode, &b);
-
+        
         // destination_postcode = a + b
-        large_load_u64(&b, 1);
+        binary_load(destination_postcode, "0", 1);
+        binary_add(destination_postcode, b);
+        
+        binary_load(a, "1", 1);
         if (postcode_type == 1) {
-            large_add(&destination_postcode, &b);
+            binary_add(destination_postcode, a);
         }
-        large_add_u64(&b, 5408000000);
+        binary_load(temp, "5408000000", 10);
+        binary_add(a, temp);
         if (postcode_type == 2) {
-            large_add(&destination_postcode, &b);
+            binary_add(destination_postcode, a);
         }
-        large_add_u64(&b, 5408000000);
+        binary_load(temp, "5408000000", 10);
+        binary_add(a, temp);
         if (postcode_type == 3) {
-            large_add(&destination_postcode, &b);
+            binary_add(destination_postcode, a);
         }
-        large_add_u64(&b, 54080000000);
+        binary_load(temp, "54080000000", 11);
+        binary_add(a, temp);
         if (postcode_type == 4) {
-            large_add(&destination_postcode, &b);
+            binary_add(destination_postcode, a);
         }
-        large_add_u64(&b, 140608000000);
+        binary_load(temp, "140608000000", 12);
+        binary_add(a, temp);
         if (postcode_type == 5) {
-            large_add(&destination_postcode, &b);
+            binary_add(destination_postcode, a);
         }
-        large_add_u64(&b, 208000000);
+        binary_load(temp, "208000000", 9);
+        binary_add(a, temp);
         if (postcode_type == 6) {
-            large_add(&destination_postcode, &b);
+            binary_add(destination_postcode, a);
         }
     }
     
     // Conversion from Internal User Fields to Consolidated Data Value
     // Set CDV to 0
-    large_load_u64(&cdv, 0);
-
+    binary_load(cdv, "0", 1);
+    
     // Add Destination Post Code plus DPS
-    large_add(&cdv, &destination_postcode);
-
+    binary_add(cdv, destination_postcode);
+    
     // Multiply by 100,000,000
-    large_mul_u64(&cdv, 100000000);
-
+    binary_multiply(cdv, "100000000");
+    
     // Add Item ID
-    large_add_u64(&cdv, item_id);
-
+    binary_load(temp, "0", 1);
+    for (i = 0; i < 31; i++) {
+        if (0x01 & (item_id >> i)) temp[i] = 1;
+    }
+    binary_add(cdv, temp);
+    
     if (length == 22) {  
         // Barcode C - Multiply by 100
-        large_mul_u64(&cdv, 100);
+        binary_multiply(cdv, "100");
     } else {
         // Barcode L - Multiply by 1,000,000
-        large_mul_u64(&cdv, 1000000);
+        binary_multiply(cdv, "1000000");
     }
-
+    
     // Add Supply Chain ID
-    large_add_u64(&cdv, supply_chain_id);
-
+    binary_load(temp, "0", 1);
+    for (i = 0; i < 20; i++) {
+        if (0x01 & (supply_chain_id >> i)) temp[i] = 1;
+    }
+    binary_add(cdv, temp);
+    
     // Multiply by 15
-    large_mul_u64(&cdv, 15);
-
+    binary_multiply(cdv, "15");
+    
     // Add Class
-    large_add_u64(&cdv, mail_class);
-
+    binary_load(temp, "0", 1);
+    for (i = 0; i < 4; i++) {
+        if (0x01 & (mail_class >> i)) temp[i] = 1;
+    }
+    binary_add(cdv, temp);
+    
     // Multiply by 5
-    large_mul_u64(&cdv, 5);
-
+    binary_multiply(cdv, "5");
+    
     // Add Format
-    large_add_u64(&cdv, format);
-
+    binary_load(temp, "0", 1);
+    for (i = 0; i < 4; i++) {
+        if (0x01 & (format >> i)) temp[i] = 1;
+    }
+    binary_add(cdv, temp);
+    
     // Multiply by 4
-    large_mul_u64(&cdv, 4);
-
+    binary_multiply(cdv, "4");
+    
     // Add Version ID
-    large_add_u64(&cdv, version_id);
-
-    if (symbol->debug & ZINT_DEBUG_PRINT) {
+    binary_load(temp, "0", 1);
+    for (i = 0; i < 4; i++) {
+        if (0x01 & (version_id >> i)) temp[i] = 1;
+    }
+    binary_add(cdv, temp);
+    
+    if (symbol->debug) {
         printf("DPC type %d\n", postcode_type);
         printf("CDV: ");
-        large_print(&cdv);
+        for (i = 96; i >= 0; i-= 4) {
+            j = 0;
+
+            j += cdv[i];
+            j += cdv[i + 1] * 2;
+            j += cdv[i + 2] * 4;
+            j += cdv[i + 3] * 8;
+
+            printf("%c", itoc(j));
+        }
+        printf("\n");
     }
     
     
@@ -392,13 +452,49 @@ INTERNAL int mailmark(struct zint_symbol *symbol, const unsigned char source[],
     }
     
     // Conversion from Consolidated Data Value to Data Numbers
-
+    for (i = 0; i < 112; i++) {
+        b[i] = cdv[i];
+    }
+    
     for (j = data_top; j >= (data_step + 1); j--) {
-        data[j] = large_div_u64(&cdv, 32);
+        for (i = 0; i < 112; i++) {
+            cdv[i] = b[i];
+            b[i] = 0;
+            a[i] = 0;
+        }
+        a[96] = 1;
+        for (i = 91; i >= 0; i--) {
+            b[i] = !islarger(a, cdv);
+            if (b[i] == 1) {
+                binary_subtract(cdv, a);
+            }
+            shiftdown(a);
+        }
+
+        data[j] = (cdv[4] * 16) + (cdv[3] * 8) + (cdv[2] * 4) +
+                (cdv[1] * 2) + cdv[0];
     }
     
     for (j = data_step; j >= 0; j--) {
-        data[j] = large_div_u64(&cdv, 30);
+        for (i = 0; i < 112; i++) {
+            cdv[i] = b[i];
+            b[i] = 0;
+            a[i] = 0;
+        }
+        a[95] = 1;
+        a[94] = 1;
+        a[93] = 1;
+        a[92] = 1;
+        for (i = 91; i >= 0; i--) {
+            b[i] = !islarger(a, cdv);
+            if (b[i] == 1) {
+                binary_subtract(cdv, a);
+            }
+            shiftdown(a);
+        }
+
+        data[j] = (cdv[4] * 16) + (cdv[3] * 8) + (cdv[2] * 4) +
+                (cdv[1] * 2) + cdv[0];
     }
     
     // Generation of Reed-Solomon Check Numbers
@@ -412,7 +508,7 @@ INTERNAL int mailmark(struct zint_symbol *symbol, const unsigned char source[],
         data[data_top + i] = check[check_count - i];
     }
     
-    if (symbol->debug & ZINT_DEBUG_PRINT) {
+    if (symbol->debug) {
         printf("Codewords:  ");
         for (i = 0; i <= data_top + check_count; i++) {
             printf("%d  ", (int) data[i]);
@@ -470,13 +566,13 @@ INTERNAL int mailmark(struct zint_symbol *symbol, const unsigned char source[],
     
     bar[(length * 3)] = '\0';
     
-    if (symbol->debug & ZINT_DEBUG_PRINT) {
+    if (symbol->debug) {
         printf("Bar pattern: %s\n", bar);
     }
     
     /* Translate 4-state data pattern to symbol */
     j = 0;
-    for (i = 0, len = strlen(bar); i < len; i++) {
+    for (i = 0; i < strlen(bar); i++) {
         if ((bar[i] == 'F') || (bar[i] == 'A')) {
             set_module(symbol, 0, j);
         }
index cf7200f..25a61c4 100644 (file)
@@ -2,7 +2,7 @@
 
 /*
     libzint - the open source barcode library
-    Copyright (C) 2010-2020 Robin Stuart <rstuart114@gmail.com>
+    Copyright (C) 2010-2017 Robin Stuart <rstuart114@gmail.com>
 
     Redistribution and use in source and binary forms, with or without
     modification, are permitted provided that the following conditions
     OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     SUCH DAMAGE.
  */
-/* vim: set ts=4 sw=4 et : */
 
 /* Includes corrections thanks to Monica Swanson @ Source Technologies */
 #include "common.h"
 #include "maxicode.h"
 #include "reedsol.h"
 #include <string.h>
+#include <stdlib.h>
 
-static int maxi_codeword[144];
+int maxi_codeword[144];
 
 /* Handles error correction of primary message */
-static void maxi_do_primary_check() {
+void maxi_do_primary_check() {
     unsigned char data[15];
     unsigned char results[15];
     int j;
@@ -61,7 +61,7 @@ static void maxi_do_primary_check() {
 }
 
 /* Handles error correction of odd characters in secondary */
-static void maxi_do_secondary_chk_odd(int ecclen) {
+void maxi_do_secondary_chk_odd(int ecclen) {
     unsigned char data[100];
     unsigned char results[30];
     int j;
@@ -85,7 +85,7 @@ static void maxi_do_secondary_chk_odd(int ecclen) {
 }
 
 /* Handles error correction of even characters in secondary */
-static void maxi_do_secondary_chk_even(int ecclen) {
+void maxi_do_secondary_chk_even(int ecclen) {
     unsigned char data[100];
     unsigned char results[30];
     int j;
@@ -109,7 +109,7 @@ static void maxi_do_secondary_chk_even(int ecclen) {
 }
 
 /* Moves everything up so that a shift or latch can be inserted */
-static void maxi_bump(int set[], int character[], int bump_posn) {
+void maxi_bump(int set[], int character[], int bump_posn) {
     int i;
 
     for (i = 143; i > bump_posn; i--) {
@@ -119,7 +119,7 @@ static void maxi_bump(int set[], int character[], int bump_posn) {
 }
 
 /* If the value is present in  array, return the value, else return badvalue */
-static int value_in_array(int val, int arr[], int badvalue, int arrLength) {
+int value_in_array(int val, int arr[], int badvalue, int arrLength){
     int i;
     for(i = 0; i < arrLength; i++){
         if(arr[i] == val) return val;
@@ -128,7 +128,7 @@ static int value_in_array(int val, int arr[], int badvalue, int arrLength) {
 }
 
 /* Choose the best set from previous and next set in the range of the setval array, if no value can be found we return setval[0] */
-static int bestSurroundingSet(int index, int length, int set[], int setval[], int setLength) {
+int bestSurroundingSet(int index, int length, int set[], int setval[], int setLength) {
     int badValue = -1;
     int option1 = value_in_array(set[index - 1], setval, badValue, setLength);
     if (index + 1 < length) {
@@ -146,7 +146,7 @@ static int bestSurroundingSet(int index, int length, int set[], int setval[], in
 }
 
 /* Format text according to Appendix A */
-static int maxi_text_process(int mode, unsigned char source[], int length, int eci) {
+int maxi_text_process(int mode, unsigned char source[], int length, int eci) {
     /* This code doesn't make use of [Lock in C], [Lock in D]
     and [Lock in E] and so is not always the most efficient at
     compressing data, but should suffice for most applications */
@@ -293,7 +293,7 @@ static int maxi_text_process(int mode, unsigned char source[], int length, int e
     }
     /* Number compression not allowed in primary message */
     count = 0;
-    for (i = j; i < 144; i++) {
+    for (i = j; i < 143; i++) {
         if ((set[i] == 1) && ((character[i] >= 48) && (character[i] <= 57))) {
             /* Character is a number */
             count++;
@@ -425,7 +425,7 @@ static int maxi_text_process(int mode, unsigned char source[], int length, int e
     do {
         if (set[i] == 6) {
             /* Number compression */
-            char substring[10];
+            char substring[11];
             int value;
 
             for (j = 0; j < 9; j++) {
@@ -442,7 +442,7 @@ static int maxi_text_process(int mode, unsigned char source[], int length, int e
             character[i + 5] = (value & 0x3f);
 
             i += 6;
-            for (j = i; j < 141; j++) {
+            for (j = i; j < 140; j++) {
                 set[j] = set[j + 3];
                 character[j] = character[j + 3];
             }
@@ -450,7 +450,7 @@ static int maxi_text_process(int mode, unsigned char source[], int length, int e
         } else {
             i++;
         }
-    } while (i <= 135); /* 144 - 9 */
+    } while (i <= 143);
 
     /* Insert ECI at the beginning of message if needed */
     /* Encode ECI assignment numbers according to table 3 */
@@ -533,7 +533,7 @@ static int maxi_text_process(int mode, unsigned char source[], int length, int e
 }
 
 /* Format structured primary for Mode 2 */
-static void maxi_do_primary_2(char postcode[], int country, int service) {
+void maxi_do_primary_2(char postcode[], int country, int service) {
     size_t postcode_length;
    int    postcode_num, i;
 
@@ -559,7 +559,7 @@ static void maxi_do_primary_2(char postcode[], int country, int service) {
 }
 
 /* Format structured primary for Mode 3 */
-static void maxi_do_primary_3(char postcode[], int country, int service) {
+void maxi_do_primary_3(char postcode[], int country, int service) {
     int i, h;
 
     h = strlen(postcode);
@@ -589,7 +589,7 @@ static void maxi_do_primary_3(char postcode[], int country, int service) {
     maxi_codeword[9] = ((service & 0x3f0) >> 4);
 }
 
-INTERNAL int maxicode(struct zint_symbol *symbol, unsigned char local_source[], const int length) {
+int maxicode(struct zint_symbol *symbol, unsigned char local_source[], const int length) {
     int i, j, block, bit, mode, lp = 0;
     int bit_pattern[7], internal_error = 0, eclen;
     char postcode[12], countrystr[4], servicestr[4];
@@ -734,3 +734,5 @@ INTERNAL int maxicode(struct zint_symbol *symbol, unsigned char local_source[],
 
     return internal_error;
 }
+
+
index 51e77eb..8092633 100644 (file)
@@ -2,7 +2,7 @@
 
 /*
     libzint - the open source barcode library
-    Copyright (C) 2008 - 2020 Robin Stuart <rstuart114@gmail.com>
+    Copyright (C) 2008-2017 Robin Stuart <rstuart114@gmail.com>
 
     Redistribution and use in source and binary forms, with or without
     modification, are permitted provided that the following conditions
     OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     SUCH DAMAGE.
  */
-/* vim: set ts=4 sw=4 et : */
 
 #include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
 #include "common.h"
 
-INTERNAL int c39(struct zint_symbol *symbol, unsigned char source[], const size_t length);
-
+extern int c39(struct zint_symbol *symbol, unsigned char source[], const size_t length);
 /* Codabar table checked against EN 798:1995 */
 
-#define CALCIUM         "0123456789-$:/.+ABCD"
-#define CALCIUM_INNER   "0123456789-$:/.+"
+#define CALCIUM        "0123456789-$:/.+ABCD"
 
 static const char *CodaTable[20] = {
     "11111221", "11112211", "11121121", "22111111", "11211211", "21111211",
@@ -47,7 +46,7 @@ static const char *CodaTable[20] = {
     "21212111", "11212121", "11221211", "12121121", "11121221", "11122211"
 };
 
-INTERNAL int pharma_one(struct zint_symbol *symbol, unsigned char source[], int length) {
+int pharma_one(struct zint_symbol *symbol, unsigned char source[], int length) {
     /* "Pharmacode can represent only a single integer from 3 to 131070. Unlike other
        commonly used one-dimensional barcode schemes, pharmacode does not store the data in a
        form corresponding to the human-readable digits; the number is encoded in binary, rather
@@ -107,7 +106,7 @@ INTERNAL int pharma_one(struct zint_symbol *symbol, unsigned char source[], int
     return error_number;
 }
 
-static int pharma_two_calc(struct zint_symbol *symbol, unsigned char source[], char dest[]) {
+int pharma_two_calc(struct zint_symbol *symbol, unsigned char source[], char dest[]) {
     /* This code uses the Two Track Pharamacode defined in the document at
        http://www.laetus.com/laetus.php?request=file&id=69 and using a modified
        algorithm from the One Track system. This standard accepts integet values
@@ -152,7 +151,7 @@ static int pharma_two_calc(struct zint_symbol *symbol, unsigned char source[], c
     return error_number;
 }
 
-INTERNAL int pharma_two(struct zint_symbol *symbol, unsigned char source[], int length) {
+int pharma_two(struct zint_symbol *symbol, unsigned char source[], int length) {
     /* Draws the patterns for two track pharmacode */
     char height_pattern[200];
     unsigned int loopey, h;
@@ -193,11 +192,10 @@ INTERNAL int pharma_two(struct zint_symbol *symbol, unsigned char source[], int
 }
 
 /* The Codabar system consisting of simple substitution */
-INTERNAL int codabar(struct zint_symbol *symbol, unsigned char source[], int length) {
+int codabar(struct zint_symbol *symbol, unsigned char source[], int length) {
 
     int i, error_number;
     char dest[512];
-    int add_checksum, count, checksum;
 
     strcpy(dest, "");
 
@@ -205,52 +203,26 @@ INTERNAL int codabar(struct zint_symbol *symbol, unsigned char source[], int len
         strcpy(symbol->errtxt, "356: Input too long");
         return ZINT_ERROR_TOO_LONG;
     }
-    /* BS EN 798:1995 4.2 "'Codabar' symbols shall consist of ... b) start character;
-     * c) one or more symbol characters representing data ... d) stop character ..." */
-    if (length < 3) {
-        strcpy(symbol->errtxt, "362: Input too short");
-        return ZINT_ERROR_TOO_LONG;
-    }
     to_upper(source);
-
+    error_number = is_sane(CALCIUM, source, length);
+    if (error_number == ZINT_ERROR_INVALID_DATA) {
+        strcpy(symbol->errtxt, "357: Invalid characters in data");
+        return error_number;
+    }
     /* Codabar must begin and end with the characters A, B, C or D */
     if ((source[0] != 'A') && (source[0] != 'B') && (source[0] != 'C')
             && (source[0] != 'D')) {
-        strcpy(symbol->errtxt, "358: Does not begin with \"A\", \"B\", \"C\" or \"D\"");
+        strcpy(symbol->errtxt, "358: Invalid characters in data");
         return ZINT_ERROR_INVALID_DATA;
     }
+
     if ((source[length - 1] != 'A') && (source[length - 1] != 'B') &&
             (source[length - 1] != 'C') && (source[length - 1] != 'D')) {
-        strcpy(symbol->errtxt, "359: Does not end with \"A\", \"B\", \"C\" or \"D\"");
+        strcpy(symbol->errtxt, "359: Invalid characters in data");
         return ZINT_ERROR_INVALID_DATA;
     }
 
-    /* And must not use A, B, C or D otherwise (BS EN 798:1995 4.3.2) */
-    error_number = is_sane(CALCIUM_INNER, source + 1, length - 2);
-    if (error_number) {
-        strcpy(symbol->errtxt, "363: Cannot contain \"A\", \"B\", \"C\" or \"D\"");
-        return error_number;
-    }
-
-    add_checksum = symbol->option_2 == 1;
-    if (add_checksum) {
-        count = 0;
-    }
-
     for (i = 0; i < length; i++) {
-        if (add_checksum) {
-            count += strchr(CALCIUM, source[i]) - CALCIUM;
-            if (i + 1 == length) {
-                checksum = count % 16;
-                if (checksum) {
-                    checksum = 16 - checksum;
-                }
-                if (symbol->debug & ZINT_DEBUG_PRINT) {
-                    printf("Codabar: %s, count %d, checksum %d\n", source, count, checksum);
-                }
-                strcat(dest, CodaTable[checksum]);
-            }
-        }
         lookup(CALCIUM, CodaTable, source[i], dest);
     }
 
@@ -260,7 +232,7 @@ INTERNAL int codabar(struct zint_symbol *symbol, unsigned char source[], int len
 }
 
 /* Italian Pharmacode */
-INTERNAL int code32(struct zint_symbol *symbol, unsigned char source[], int length) {
+int code32(struct zint_symbol *symbol, unsigned char source[], int length) {
     int i, zeroes, error_number, checksum, checkpart, checkdigit;
     char localstr[10], risultante[7];
     long int pharmacode, devisor;
@@ -281,10 +253,11 @@ INTERNAL int code32(struct zint_symbol *symbol, unsigned char source[], int leng
     /* Add leading zeros as required */
     zeroes = 8 - length;
     memset(localstr, '0', zeroes);
-    ustrcpy(localstr + zeroes, source);
+    strcpy(localstr + zeroes, (char*) source);
 
     /* Calculate the check digit */
     checksum = 0;
+    checkpart = 0;
     for (i = 0; i < 4; i++) {
         checkpart = ctoi(localstr[i * 2]);
         checksum += checkpart;
@@ -327,8 +300,10 @@ INTERNAL int code32(struct zint_symbol *symbol, unsigned char source[], int leng
     }
 
     /* Override the normal text output with the Pharmacode number */
-    ustrcpy(symbol->text, "A");
-    ustrcat(symbol->text, localstr);
+    strcpy((char*) symbol->text, "A");
+    strcat((char*) symbol->text, (char*) localstr);
 
     return error_number;
 }
+
+
diff --git a/backend/output.c b/backend/output.c
deleted file mode 100644 (file)
index 07c9885..0000000
+++ /dev/null
@@ -1,114 +0,0 @@
-/*  output.c - Common routines for raster/vector
-
-    libzint - the open source barcode library
-    Copyright (C) 2020 Robin Stuart <rstuart114@gmail.com>
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-    1. Redistributions of source code must retain the above copyright
-       notice, this list of conditions and the following disclaimer.
-    2. Redistributions in binary form must reproduce the above copyright
-       notice, this list of conditions and the following disclaimer in the
-       documentation and/or other materials provided with the distribution.
-    3. Neither the name of the project nor the names of its contributors
-       may be used to endorse or promote products derived from this software
-       without specific prior written permission.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
-    ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-    ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-    SUCH DAMAGE.
- */
-/* vim: set ts=4 sw=4 et : */
-
-#include <string.h>
-#include "common.h"
-#include "output.h"
-
-#define SSET "0123456789ABCDEF"
-
-/* Check colour options are good. Note: using raster.c error nos 651-654 */
-INTERNAL int check_colour_options(struct zint_symbol *symbol) {
-    int error_number;
-
-    if (strlen(symbol->fgcolour) != 6) {
-        strcpy(symbol->errtxt, "651: Malformed foreground colour target");
-        return ZINT_ERROR_INVALID_OPTION;
-    }
-    if (strlen(symbol->bgcolour) != 6) {
-        strcpy(symbol->errtxt, "652: Malformed background colour target");
-        return ZINT_ERROR_INVALID_OPTION;
-    }
-
-    to_upper((unsigned char *) symbol->fgcolour);
-    to_upper((unsigned char *) symbol->bgcolour);
-
-    error_number = is_sane(SSET, (unsigned char *) symbol->fgcolour, strlen(symbol->fgcolour));
-    if (error_number == ZINT_ERROR_INVALID_DATA) {
-        strcpy(symbol->errtxt, "653: Malformed foreground colour target");
-        return ZINT_ERROR_INVALID_OPTION;
-    }
-
-    error_number = is_sane(SSET, (unsigned char *) symbol->bgcolour, strlen(symbol->fgcolour));
-    if (error_number == ZINT_ERROR_INVALID_DATA) {
-        strcpy(symbol->errtxt, "654: Malformed background colour target");
-        return ZINT_ERROR_INVALID_OPTION;
-    }
-
-    return 0;
-}
-
-/* Return minimum quiet zones for each symbology */
-static void quiet_zones(struct zint_symbol *symbol, int *left, int *right, int *top, int *bottom) {
-    *left = *right = *top = *bottom = 0;
-
-    switch (symbol->symbology) {
-        case BARCODE_CODE16K:
-            /* BS EN 12323:2005 Section 4.5 c) */
-            *left = 10;
-            *right = 1;
-            break;
-        case BARCODE_CODE49:
-            /* ANSI/AIM BC6-2000 Section 2.4 */
-            *left = 10;
-            *right = 1;
-            break;
-        case BARCODE_CODABLOCKF:
-        case BARCODE_HIBC_BLOCKF:
-            /* AIM ISS-X-24 Section 4.6.1 */
-            *left = 10;
-            *right = 10;
-            break;
-        /* TODO: others */
-    }
-}
-
-/* Set left (x), top (y), right and bottom offsets for whitespace */
-INTERNAL void set_whitespace_offsets(struct zint_symbol *symbol, int *xoffset, int *yoffset, int *roffset, int *boffset) {
-    int qz_left, qz_right, qz_top, qz_bottom;
-
-    quiet_zones(symbol, &qz_left, &qz_right, &qz_top, &qz_bottom);
-
-    *xoffset = symbol->whitespace_width + qz_left;
-    *roffset = symbol->whitespace_width + qz_right;
-    if (symbol->output_options & BARCODE_BOX) {
-        *xoffset += symbol->border_width;
-        *roffset += symbol->border_width;
-    }
-
-    *yoffset = qz_top;
-    *boffset = qz_bottom;
-    if (symbol->output_options & (BARCODE_BOX | BARCODE_BIND)) {
-        *yoffset += symbol->border_width;
-        *boffset += symbol->border_width;
-    }
-}
diff --git a/backend/output.h b/backend/output.h
deleted file mode 100644 (file)
index 7e5ecd6..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-/*  output.h - Common routines for raster/vector
-
-    libzint - the open source barcode library
-    Copyright (C) 2020 Robin Stuart <rstuart114@gmail.com>
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-    1. Redistributions of source code must retain the above copyright
-       notice, this list of conditions and the following disclaimer.
-    2. Redistributions in binary form must reproduce the above copyright
-       notice, this list of conditions and the following disclaimer in the
-       documentation and/or other materials provided with the distribution.
-    3. Neither the name of the project nor the names of its contributors
-       may be used to endorse or promote products derived from this software
-       without specific prior written permission.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
-    ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-    ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-    SUCH DAMAGE.
- */
-/* vim: set ts=4 sw=4 et : */
-
-#ifndef OUTPUT_H
-#define OUTPUT_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
-INTERNAL int check_colour_options(struct zint_symbol *symbol);
-INTERNAL void set_whitespace_offsets(struct zint_symbol *symbol, int *xoffset, int *yoffset, int *roffset, int *boffset);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* OUTPUT_H */
index 22bd3bd..4505a53 100644 (file)
@@ -1,9 +1,8 @@
 /* pcx.c - Handles output to ZSoft PCX file */
-/* ZSoft PCX File Format Technical Reference Manual http://bespin.org/~qz/pc-gpe/pcx.txt */
 
 /*
     libzint - the open source barcode library
-    Copyright (C) 2009 - 2020 Robin Stuart <rstuart114@gmail.com>
+    Copyright (C) 2009-2017 Robin Stuart <rstuart114@gmail.com>
 
     Redistribution and use in source and binary forms, with or without
     modification, are permitted provided that the following conditions
@@ -30,9 +29,9 @@
     OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     SUCH DAMAGE.
  */
-/* vim: set ts=4 sw=4 et : */
 
 #include <stdio.h>
+#include <stdlib.h>
 #include <string.h>
 #include "common.h"
 #include "pcx.h"        /* PCX header structure */
 #include <malloc.h>
 #endif
 
-INTERNAL int pcx_pixel_plot(struct zint_symbol *symbol, char *pixelbuf) {
+#define SSET   "0123456789ABCDEF"
+
+int pcx_pixel_plot(struct zint_symbol *symbol, char *pixelbuf) {
     int fgred, fggrn, fgblu, bgred, bggrn, bgblu;
     int row, column, i, colour;
     int run_count;
     FILE *pcx_file;
     pcx_header_t header;
-    int bytes_per_line = symbol->bitmap_width + (symbol->bitmap_width & 1); // Must be even
-    unsigned char previous;
 #ifdef _MSC_VER
     unsigned char* rle_row;
 #endif
 
 #ifndef _MSC_VER
-    unsigned char rle_row[bytes_per_line];
+    unsigned char rle_row[symbol->bitmap_width];
 #else
-    rle_row = (unsigned char *) _alloca(bytes_per_line);
+    rle_row = (unsigned char *) _alloca((symbol->bitmap_width * 6) * sizeof (unsigned char));
 #endif /* _MSC_VER */
 
-    rle_row[bytes_per_line - 1] = 0; // Will remain zero if bitmap_width odd
-
     fgred = (16 * ctoi(symbol->fgcolour[0])) + ctoi(symbol->fgcolour[1]);
     fggrn = (16 * ctoi(symbol->fgcolour[2])) + ctoi(symbol->fgcolour[3]);
     fgblu = (16 * ctoi(symbol->fgcolour[4])) + ctoi(symbol->fgcolour[5]);
@@ -89,7 +86,11 @@ INTERNAL int pcx_pixel_plot(struct zint_symbol *symbol, char *pixelbuf) {
     header.reserved = 0;
     header.number_of_planes = 3;
 
-    header.bytes_per_line = bytes_per_line;
+    if (symbol->bitmap_width % 2) {
+        header.bytes_per_line = symbol->bitmap_width + 1;
+    } else {
+        header.bytes_per_line = symbol->bitmap_width;
+    }
 
     header.palette_info = 1; // Colour
     header.horiz_screen_size = 0;
@@ -122,97 +123,46 @@ INTERNAL int pcx_pixel_plot(struct zint_symbol *symbol, char *pixelbuf) {
             for (column = 0; column < symbol->bitmap_width; column++) {
                 switch (colour) {
                     case 0:
-                        switch(pixelbuf[(row * symbol->bitmap_width) + column]) {
-                            case 'W': // White
-                            case 'M': // Magenta
-                            case 'R': // Red
-                            case 'Y': // Yellow
-                                rle_row[column] = 255;
-                                break;
-                            case 'C': // Cyan
-                            case 'B': // Blue
-                            case 'G': // Green
-                            case 'K': // Black
-                                rle_row[column] = 0;
-                                break;
-                            case '1':
-                                rle_row[column] = fgred;
-                                break;
-                            default:
-                                rle_row[column] = bgred;
-                                break;
+                        if (pixelbuf[(row * symbol->bitmap_width) + column] == '1') {
+                            rle_row[column] = fgred;
+                        } else {
+                            rle_row[column] = bgred;
                         }
                         break;
                     case 1:
-                        switch(pixelbuf[(row * symbol->bitmap_width) + column]) {
-                            case 'W': // White
-                            case 'C': // Cyan
-                            case 'Y': // Yellow
-                            case 'G': // Green
-                                rle_row[column] = 255;
-                                break;
-                            case 'B': // Blue
-                            case 'M': // Magenta
-                            case 'R': // Red
-                            case 'K': // Black
-                                rle_row[column] = 0;
-                                break;
-                            case '1':
-                                rle_row[column] = fggrn;
-                                break;
-                            default:
-                                rle_row[column] = bggrn;
-                                break;
+                        if (pixelbuf[(row * symbol->bitmap_width) + column] == '1') {
+                            rle_row[column] = fggrn;
+                        } else {
+                            rle_row[column] = bggrn;
                         }
                         break;
                     case 2:
-                        switch(pixelbuf[(row * symbol->bitmap_width) + column]) {
-                            case 'W': // White
-                            case 'C': // Cyan
-                            case 'B': // Blue
-                            case 'M': // Magenta
-                                rle_row[column] = 255;
-                                break;
-                            case 'R': // Red
-                            case 'Y': // Yellow
-                            case 'G': // Green
-                            case 'K': // Black
-                                rle_row[column] = 0;
-                                break;
-                            case '1':
-                                rle_row[column] = fgblu;
-                                break;
-                            default:
-                                rle_row[column] = bgblu;
-                                break;
+                        if (pixelbuf[(row * symbol->bitmap_width) + column] == '1') {
+                            rle_row[column] = fgblu;
+                        } else {
+                            rle_row[column] = bgblu;
                         }
                         break;
                 }
             }
 
-            /* Based on ImageMagick/coders/pcx.c PCXWritePixels()
-             * Copyright 1999-2020 ImageMagick Studio LLC */
-            previous = rle_row[0];
             run_count = 1;
-            for (column = 1; column < bytes_per_line; column++) { // Note going up to bytes_per_line
-                if ((previous == rle_row[column]) && (run_count < 63)) {
+            for (column = 1; column < symbol->bitmap_width; column++) {
+                if ((rle_row[column - 1] == rle_row[column]) && (run_count < 63)) {
                     run_count++;
                 } else {
-                    if (run_count > 1 || (previous & 0xc0) == 0xc0) {
-                        run_count += 0xc0;
-                        fputc(run_count, pcx_file);
-                    }
-                    fputc(previous, pcx_file);
-                    previous = rle_row[column];
+                    run_count += 0xc0;
+                    fputc(run_count, pcx_file);
+                    fputc(rle_row[column - 1], pcx_file);
                     run_count = 1;
                 }
             }
 
-            if (run_count > 1 || (previous & 0xc0) == 0xc0) {
+            if (run_count > 1) {
                 run_count += 0xc0;
                 fputc(run_count, pcx_file);
+                fputc(rle_row[column - 1], pcx_file);
             }
-            fputc(previous, pcx_file);
         }
     }
 
@@ -220,3 +170,4 @@ INTERNAL int pcx_pixel_plot(struct zint_symbol *symbol, char *pixelbuf) {
 
     return 0;
 }
+
index eb39741..bbfcae6 100644 (file)
@@ -1,7 +1,7 @@
 /* pdf417.c - Handles PDF417 stacked symbology */
 
 /*  Zint - A barcode generating program using libpng
-    Copyright (C) 2008-2020 Robin Stuart <rstuart114@gmail.com>
+    Copyright (C) 2008-2017 Robin Stuart <rstuart114@gmail.com>
     Portions Copyright (C) 2004 Grandzebu
     Bug Fixes thanks to KL Chin <klchin@users.sourceforge.net>
 
@@ -30,7 +30,6 @@
     OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     SUCH DAMAGE.
  */
-/* vim: set ts=4 sw=4 et : */
 
 /*  This code is adapted from "Code barre PDF 417 / PDF 417 barcode" v2.5.0
     which is Copyright (C) 2004 (Grandzebu).
@@ -44,6 +43,7 @@
 
 #include <stdio.h>
 #include <string.h>
+#include <stdlib.h>
 #include <math.h>
 #ifndef _MSC_VER
 #include <stdint.h>
@@ -81,14 +81,11 @@ static const char MicroAutosize[56] = {
     1, 14, 2, 7, 3, 25, 8, 16, 5, 17, 9, 6, 10, 11, 28, 12, 19, 13, 29, 20, 30, 21, 22, 31, 23, 32, 33, 34
 };
 
-#define PDF417_MAX_LEN          2710    /* ISO/IEC 15438:2015 5.1.1 c) 3) Max possible number of characters at error correction level 0 (Numeric Compaction mode) */
-#define MICRO_PDF417_MAX_LEN    366     /* ISO/IEC 24728:2006 5.1.1 c) 3) Max possible number of characters (Numeric Compaction mode) */
-
-static int liste[2][PDF417_MAX_LEN]; /* global */
+int liste[2][1000]; /* global */
 
 /* 866 */
 
-static int quelmode(char codeascii) {
+int quelmode(char codeascii) {
     int mode = BYT;
     if ((codeascii == '\t') || (codeascii == '\n') || (codeascii == '\r') || ((codeascii >= ' ') && (codeascii <= '~'))) {
         mode = TEX;
@@ -102,7 +99,7 @@ static int quelmode(char codeascii) {
 }
 
 /* 844 */
-static void regroupe(int *indexliste) {
+void regroupe(int *indexliste) {
 
     /* bring together same type blocks */
     if (*(indexliste) > 1) {
@@ -130,7 +127,7 @@ static void regroupe(int *indexliste) {
 }
 
 /* 478 */
-static void pdfsmooth(int *indexliste) {
+void pdfsmooth(int *indexliste) {
     int i, crnt, last, next, length;
 
     for (i = 0; i < *(indexliste); i++) {
@@ -226,12 +223,12 @@ static void pdfsmooth(int *indexliste) {
 }
 
 /* 547 */
-static void textprocess(int *chainemc, int *mclength, char chaine[], int start, int length) {
-    int j, indexlistet, curtable, listet[2][PDF417_MAX_LEN], chainet[PDF417_MAX_LEN], wnet;
+void textprocess(int *chainemc, int *mclength, char chaine[], int start, int length) {
+    int j, indexlistet, curtable, listet[2][5000], chainet[5000], wnet;
 
     wnet = 0;
 
-    for (j = 0; j < PDF417_MAX_LEN; j++) {
+    for (j = 0; j < 1000; j++) {
         listet[0][j] = 0;
     }
     /* listet will contain the table numbers and the value of each characters */
@@ -417,7 +414,7 @@ static void textprocess(int *chainemc, int *mclength, char chaine[], int start,
 }
 
 /* 671 */
-INTERNAL void byteprocess(int *chainemc, int *mclength, unsigned char chaine[], int start, int length) {
+void byteprocess(int *chainemc, int *mclength, unsigned char chaine[], int start, int length) {
     int debug = 0;
 
     if (debug) printf("\nEntering byte mode at position %d\n", start);
@@ -442,7 +439,7 @@ INTERNAL void byteprocess(int *chainemc, int *mclength, unsigned char chaine[],
         len = 0;
 
         while (len < length) {
-            uint64_t total;
+                       uint64_t total;
             unsigned int chunkLen = length - len;
             if (6 <= chunkLen) /* Take groups of 6 */ {
                 chunkLen = 6;
@@ -485,7 +482,7 @@ INTERNAL void byteprocess(int *chainemc, int *mclength, unsigned char chaine[],
 }
 
 /* 712 */
-static void numbprocess(int *chainemc, int *mclength, char chaine[], int start, int length) {
+void numbprocess(int *chainemc, int *mclength, char chaine[], int start, int length) {
     int j, loop, dummy[100], diviseur, nombre;
     char chainemod[50], chainemult[100], temp;
 
@@ -520,7 +517,7 @@ static void numbprocess(int *chainemc, int *mclength, char chaine[], int start,
             while (strlen(chainemod) != 0) {
                 nombre *= 10;
                 nombre += ctoi(chainemod[0]);
-                for (loop = 0; loop < (int)strlen(chainemod); loop++) {
+                for (loop = 0; loop < strlen(chainemod); loop++) {
                     chainemod[loop] = chainemod[loop + 1];
                 }
                 if (nombre < diviseur) {
@@ -555,34 +552,30 @@ static void numbprocess(int *chainemc, int *mclength, char chaine[], int start,
 /* 366 */
 static int pdf417(struct zint_symbol *symbol, unsigned char chaine[], const size_t length) {
     int i, k, j, indexchaine, indexliste, mode, longueur, loop, mccorrection[520], offset;
-    int total, chainemc[PDF417_MAX_LEN], mclength, c1, c2, c3, dummy[35], calcheight;
+    int total, chainemc[2700], mclength, c1, c2, c3, dummy[35], calcheight;
     char pattern[580];
     int debug = symbol->debug;
 
-    if (length > PDF417_MAX_LEN) {
-        return 2;
-    }
-
     /* 456 */
     indexliste = 0;
     indexchaine = 0;
 
     mode = quelmode(chaine[indexchaine]);
 
-    for (i = 0; i < PDF417_MAX_LEN; i++) {
+    for (i = 0; i < 1000; i++) {
         liste[0][i] = 0;
     }
 
     /* 463 */
     do {
         liste[1][indexliste] = mode;
-        while ((liste[1][indexliste] == mode) && (indexchaine < (int)length)) {
+        while ((liste[1][indexliste] == mode) && (indexchaine < length)) {
             liste[0][indexliste]++;
             indexchaine++;
             mode = quelmode(chaine[indexchaine]);
         }
         indexliste++;
-    } while (indexchaine < (int)length);
+    } while (indexchaine < length);
 
     /* 474 */
     pdfsmooth(&indexliste);
@@ -819,7 +812,7 @@ static int pdf417(struct zint_symbol *symbol, unsigned char chaine[], const size
             bin_append(0x3FA29, 18, pattern); /* Row Stop */
         }
 
-        for (loop = 0; loop < (int)strlen(pattern); loop++) {
+        for (loop = 0; loop < strlen(pattern); loop++) {
             if (pattern[loop] == '1') {
                 set_module(symbol, i, loop);
             }
@@ -844,7 +837,7 @@ static int pdf417(struct zint_symbol *symbol, unsigned char chaine[], const size
 }
 
 /* 345 */
-INTERNAL int pdf417enc(struct zint_symbol *symbol, unsigned char source[], const size_t length) {
+int pdf417enc(struct zint_symbol *symbol, unsigned char source[], const size_t length) {
     int codeerr, error_number;
 
     error_number = 0;
@@ -897,19 +890,14 @@ INTERNAL int pdf417enc(struct zint_symbol *symbol, unsigned char source[], const
 }
 
 /* like PDF417 only much smaller! */
-INTERNAL int micro_pdf417(struct zint_symbol *symbol, unsigned char chaine[], const size_t length) {
+int micro_pdf417(struct zint_symbol *symbol, unsigned char chaine[], const size_t length) {
     int i, k, j, indexchaine, indexliste, mode, longueur, mccorrection[50], offset;
-    int total, chainemc[PDF417_MAX_LEN], mclength, dummy[5], codeerr;
+    int total, chainemc[2700], mclength, dummy[5], codeerr;
     char pattern[580];
     int variant, LeftRAPStart, CentreRAPStart, RightRAPStart, StartCluster;
     int LeftRAP, CentreRAP, RightRAP, Cluster, loop, calcheight;
     int debug = 0;
 
-    if (length > MICRO_PDF417_MAX_LEN) {
-        strcpy(symbol->errtxt, "474: Input data too long");
-        return ZINT_ERROR_TOO_LONG;
-    }
-
     /* Encoding starts out the same as PDF417, so use the same code */
     codeerr = 0;
 
@@ -919,20 +907,20 @@ INTERNAL int micro_pdf417(struct zint_symbol *symbol, unsigned char chaine[], co
 
     mode = quelmode(chaine[indexchaine]);
 
-    for (i = 0; i < PDF417_MAX_LEN; i++) {
+    for (i = 0; i < 1000; i++) {
         liste[0][i] = 0;
     }
 
     /* 463 */
     do {
         liste[1][indexliste] = mode;
-        while ((liste[1][indexliste] == mode) && (indexchaine < (int)length)) {
+        while ((liste[1][indexliste] == mode) && (indexchaine < length)) {
             liste[0][indexliste]++;
             indexchaine++;
             mode = quelmode(chaine[indexchaine]);
         }
         indexliste++;
-    } while (indexchaine < (int)length);
+    } while (indexchaine < length);
 
     /* 474 */
     pdfsmooth(&indexliste);
@@ -1285,7 +1273,7 @@ INTERNAL int micro_pdf417(struct zint_symbol *symbol, unsigned char chaine[], co
         if (debug) printf("%s\n", pattern);
 
         /* so now pattern[] holds the string of '1's and '0's. - copy this to the symbol */
-        for (loop = 0; loop < (int)strlen(pattern); loop++) {
+        for (loop = 0; loop < strlen(pattern); loop++) {
             if (pattern[loop] == '1') {
                 set_module(symbol, i, loop);
             }
@@ -1325,3 +1313,5 @@ INTERNAL int micro_pdf417(struct zint_symbol *symbol, unsigned char chaine[], co
 
     return codeerr;
 }
+
+
index dcc7eaf..83278cb 100644 (file)
@@ -2,7 +2,7 @@
 
 /*
     libzint - the open source barcode library
-    Copyright (C) 2008 - 2020 Robin Stuart <rstuart114@gmail.com>
+    Copyright (C) 2008-2017 Robin Stuart <rstuart114@gmail.com>
 
     Redistribution and use in source and binary forms, with or without
     modification, are permitted provided that the following conditions
     OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     SUCH DAMAGE.
  */
-/* vim: set ts=4 sw=4 et : */
 
 #include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
 #include "common.h"
 
-#define SSET    "0123456789ABCDEF"
 
+#define SSET   "0123456789ABCDEF"
 static const char *PlessTable[16] = {
     "13131313", "31131313", "13311313", "31311313", "13133113", "31133113",
     "13313113", "31313113", "13131331", "31131331", "13311331", "31311331", "13133131",
@@ -48,7 +49,7 @@ static const char *MSITable[10] = {
 };
 
 /* Not MSI/Plessey but the older Plessey standard */
-INTERNAL int plessey(struct zint_symbol *symbol, unsigned char source[], const size_t length) {
+int plessey(struct zint_symbol *symbol, unsigned char source[], const size_t length) {
 
     unsigned int i;
     unsigned char *checkptr;
@@ -110,9 +111,9 @@ INTERNAL int plessey(struct zint_symbol *symbol, unsigned char source[], const s
 }
 
 /* Plain MSI Plessey - does not calculate any check character */
-static int msi_plessey(struct zint_symbol *symbol, unsigned char source[], const int length) {
+int msi_plessey(struct zint_symbol *symbol, unsigned char source[], const size_t length) {
 
-    int i;
+       size_t i;
     char dest[512]; /* 2 + 55 * 8 + 3 + 1 ~ 512 */
 
     if (length > 55) {
@@ -137,10 +138,10 @@ static int msi_plessey(struct zint_symbol *symbol, unsigned char source[], const
 
 /* MSI Plessey with Modulo 10 check digit - algorithm from Barcode Island
  * http://www.barcodeisland.com/ */
-static int msi_plessey_mod10(struct zint_symbol *symbol, unsigned char source[], int length) {
+int msi_plessey_mod10(struct zint_symbol *symbol, unsigned char source[], int length) {
 
-    int i, wright, pump, n;
-    unsigned long dau, pedwar;
+
+    unsigned long i, wright, dau, pedwar, pump, n;
     char un[200], tri[32];
     int error_number, h;
     char dest[1000];
@@ -204,10 +205,10 @@ static int msi_plessey_mod10(struct zint_symbol *symbol, unsigned char source[],
 
 /* MSI Plessey with two Modulo 10 check digits - algorithm from
  * Barcode Island http://www.barcodeisland.com/ */
-static int msi_plessey_mod1010(struct zint_symbol *symbol, unsigned char source[], const int src_len) {
+int msi_plessey_mod1010(struct zint_symbol *symbol, unsigned char source[], const unsigned int src_len) {
+
 
-    int i, n, wright, pump;
-    unsigned long dau, pedwar, chwech;
+    unsigned long i, n, wright, dau, pedwar, pump, chwech;
     char un[16], tri[32];
     int error_number, h;
     char dest[1000];
@@ -308,10 +309,9 @@ static int msi_plessey_mod1010(struct zint_symbol *symbol, unsigned char source[
 
 /* Calculate a Modulo 11 check digit using the system discussed on Wikipedia -
     see http://en.wikipedia.org/wiki/Talk:MSI_Barcode */
-static int msi_plessey_mod11(struct zint_symbol *symbol, unsigned char source[], const int src_len) {
+int msi_plessey_mod11(struct zint_symbol *symbol, unsigned char source[], const unsigned int src_len) {
     /* uses the IBM weight system */
-    int i, weight, check;
-    unsigned long x;
+    int i, weight, x, check;
     int error_number;
     char dest[1000];
 
@@ -367,17 +367,16 @@ static int msi_plessey_mod11(struct zint_symbol *symbol, unsigned char source[],
 
 /* Combining the Barcode Island and Wikipedia code
  * Verified against http://www.bokai.com/BarcodeJSP/applet/BarcodeSampleApplet.htm */
-static int msi_plessey_mod1110(struct zint_symbol *symbol, unsigned char source[], const int src_len) {
+int msi_plessey_mod1110(struct zint_symbol *symbol, unsigned char source[], const unsigned int src_len) {
     /* Weighted using the IBM system */
-    int i, weight, check, wright, pump;
-    unsigned long x, dau, pedwar;
-    int h;
-    int si;
+    unsigned long i, weight, x, check, wright, dau, pedwar, pump;
+    size_t h;
+    long si;
     char un[16], tri[16];
     int error_number;
     char dest[1000];
     unsigned char temp[32];
-    int temp_len;
+    unsigned int temp_len;
 
     error_number = 0;
 
@@ -463,7 +462,7 @@ static int msi_plessey_mod1110(struct zint_symbol *symbol, unsigned char source[
     return error_number;
 }
 
-INTERNAL int msi_handle(struct zint_symbol *symbol, unsigned char source[], int length) {
+int msi_handle(struct zint_symbol *symbol, unsigned char source[], int length) {
     int error_number;
 
     error_number = is_sane(NEON, source, length);
@@ -492,3 +491,4 @@ INTERNAL int msi_handle(struct zint_symbol *symbol, unsigned char source[], int
 
     return error_number;
 }
+
index f2e41f1..62ccf2f 100644 (file)
@@ -29,7 +29,6 @@
     OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     SUCH DAMAGE.
  */
-/* vim: set ts=4 sw=4 et : */
 
 #include <stdio.h>
 #ifdef _MSC_VER
@@ -72,7 +71,7 @@ static void writepng_error_handler(png_structp png_ptr, png_const_charp msg) {
     longjmp(graphic->jmpbuf, 1);
 }
 
-INTERNAL int png_pixel_plot(struct zint_symbol *symbol, char *pixelbuf) {
+int png_pixel_plot(struct zint_symbol *symbol, char *pixelbuf) {
     struct mainprog_info_type wpng_info;
     struct mainprog_info_type *graphic;
     png_structp png_ptr;
@@ -159,46 +158,6 @@ INTERNAL int png_pixel_plot(struct zint_symbol *symbol, char *pixelbuf) {
         for (column = 0; column < symbol->bitmap_width; column++) {
             i = column * 3;
             switch (*(pixelbuf + (symbol->bitmap_width * row) + column)) {
-                case 'W': // White
-                    outdata[i] = 255;
-                    outdata[i + 1] = 255;
-                    outdata[i + 2] = 255;
-                    break;
-                case 'C': // Cyan
-                    outdata[i] = 0;
-                    outdata[i + 1] = 255;
-                    outdata[i + 2] = 255;
-                    break;
-                case 'B': // Blue
-                    outdata[i] = 0;
-                    outdata[i + 1] = 0;
-                    outdata[i + 2] = 255;
-                    break;
-                case 'M': // Magenta
-                    outdata[i] = 255;
-                    outdata[i + 1] = 0;
-                    outdata[i + 2] = 255;
-                    break;
-                case 'R': // Red
-                    outdata[i] = 255;
-                    outdata[i + 1] = 0;
-                    outdata[i + 2] = 0;
-                    break;
-                case 'Y': // Yellow
-                    outdata[i] = 255;
-                    outdata[i + 1] = 255;
-                    outdata[i + 2] = 0;
-                    break;
-                case 'G': // Green
-                    outdata[i] = 0;
-                    outdata[i + 1] = 255;
-                    outdata[i + 2] = 0;
-                    break;
-                case 'K': // Black
-                    outdata[i] = 0;
-                    outdata[i + 1] = 0;
-                    outdata[i + 2] = 0;
-                    break;
                 case '1':
                     outdata[i] = fgred;
                     outdata[i + 1] = fggrn;
@@ -230,3 +189,5 @@ INTERNAL int png_pixel_plot(struct zint_symbol *symbol, char *pixelbuf) {
     return 0;
 }
 #endif /* NO_PNG */
+
+
index b90743d..08f0dbf 100644 (file)
@@ -2,7 +2,7 @@
 
 /*
     libzint - the open source barcode library
-    Copyright (C) 2008 - 2020 Robin Stuart <rstuart114@gmail.com>
+    Copyright (C) 2008-2017 Robin Stuart <rstuart114@gmail.com>
     Including bug fixes by Bryan Hatton
 
     Redistribution and use in source and binary forms, with or without
     OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     SUCH DAMAGE.
  */
-/* vim: set ts=4 sw=4 et : */
 
+#include <string.h>
+#include <stdlib.h>
 #include <stdio.h>
 #ifdef _MSC_VER
 #include <malloc.h>
 #endif
 #include "common.h"
 
-#define DAFTSET "DAFT"
+#define DAFTSET        "DAFT"
 #define KRSET "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
 #define KASUTSET "1234567890-abcdefgh"
 #define CHKASUTSET "0123456789-abcdefgh"
@@ -84,10 +85,12 @@ static const char *JapanTable[19] = {
 };
 
 /* Handles the PostNet system used for Zip codes in the US */
-static int postnet(struct zint_symbol *symbol, unsigned char source[], char dest[], int length) {
-    int i, sum, check_digit;
+int postnet(struct zint_symbol *symbol, unsigned char source[], char dest[], int length) {
+    unsigned int i, sum, check_digit;
     int error_number;
 
+    error_number = 0;
+
     if (length != 5 && length != 9 && length != 11) {
         strcpy(symbol->errtxt, "480: Input wrong length");
         return ZINT_ERROR_TOO_LONG;
@@ -117,12 +120,14 @@ static int postnet(struct zint_symbol *symbol, unsigned char source[], char dest
 }
 
 /* Puts PostNet barcodes into the pattern matrix */
-INTERNAL int post_plot(struct zint_symbol *symbol, unsigned char source[], int length) {
+int post_plot(struct zint_symbol *symbol, unsigned char source[], int length) {
     char height_pattern[256]; /* 5 + 38 * 5 + 5 + 5 +  1 ~ 256 */
     unsigned int loopey, h;
     int writer;
     int error_number;
 
+    error_number = 0;
+
     error_number = postnet(symbol, source, height_pattern, length);
     if (error_number != 0) {
         return error_number;
@@ -146,10 +151,12 @@ INTERNAL int post_plot(struct zint_symbol *symbol, unsigned char source[], int l
 }
 
 /* Handles the PLANET  system used for item tracking in the US */
-static int planet(struct zint_symbol *symbol, unsigned char source[], char dest[], int length) {
-    int i, sum, check_digit;
+int planet(struct zint_symbol *symbol, unsigned char source[], char dest[], int length) {
+    unsigned int i, sum, check_digit;
     int error_number;
 
+    error_number = 0;
+
     if (length != 11 && length != 13) {
         strcpy(symbol->errtxt, "482: Input wrong length");
         return ZINT_ERROR_TOO_LONG;
@@ -179,12 +186,14 @@ static int planet(struct zint_symbol *symbol, unsigned char source[], char dest[
 }
 
 /* Puts PLANET barcodes into the pattern matrix */
-INTERNAL int planet_plot(struct zint_symbol *symbol, unsigned char source[], int length) {
+int planet_plot(struct zint_symbol *symbol, unsigned char source[], int length) {
     char height_pattern[256]; /* 5 + 38 * 5 + 5 + 5 +  1 ~ 256 */
     unsigned int loopey, h;
     int writer;
     int error_number;
 
+    error_number = 0;
+
     error_number = planet(symbol, source, height_pattern, length);
     if (error_number != 0) {
         return error_number;
@@ -207,10 +216,11 @@ INTERNAL int planet_plot(struct zint_symbol *symbol, unsigned char source[], int
 }
 
 /* Korean Postal Authority */
-INTERNAL int korea_post(struct zint_symbol *symbol, unsigned char source[], int length) {
+int korea_post(struct zint_symbol *symbol, unsigned char source[], int length) {
     int total, loop, check, zeroes, error_number;
     char localstr[8], dest[80];
 
+    error_number = 0;
     if (length > 6) {
         strcpy(symbol->errtxt, "484: Input too long");
         return ZINT_ERROR_TOO_LONG;
@@ -246,7 +256,8 @@ INTERNAL int korea_post(struct zint_symbol *symbol, unsigned char source[], int
 
 /* The simplest barcode symbology ever! Supported by MS Word, so here it is!
     glyphs from http://en.wikipedia.org/wiki/Facing_Identification_Mark */
-INTERNAL int fim(struct zint_symbol *symbol, unsigned char source[], int length) {
+int fim(struct zint_symbol *symbol, unsigned char source[], int length) {
+
 
     char dest[16] = {0};
 
@@ -283,8 +294,8 @@ INTERNAL int fim(struct zint_symbol *symbol, unsigned char source[], int length)
 }
 
 /* Handles the 4 State barcodes used in the UK by Royal Mail */
-static char rm4scc(char source[], unsigned char dest[], int length) {
-    int i;
+char rm4scc(char source[], unsigned char dest[], int length) {
+    unsigned int i;
     int top, bottom, row, column, check_digit;
     char values[3], set_copy[] = KRSET;
 
@@ -320,13 +331,15 @@ static char rm4scc(char source[], unsigned char dest[], int length) {
 }
 
 /* Puts RM4SCC into the data matrix */
-INTERNAL int royal_plot(struct zint_symbol *symbol, unsigned char source[], int length) {
+int royal_plot(struct zint_symbol *symbol, unsigned char source[], int length) {
     char height_pattern[210];
-    int loopey, h;
+    unsigned int loopey, h;
     int writer;
     int error_number;
     strcpy(height_pattern, "");
 
+    error_number = 0;
+
     if (length > 50) {
         strcpy(symbol->errtxt, "488: Input too long");
         return ZINT_ERROR_TOO_LONG;
@@ -364,13 +377,15 @@ INTERNAL int royal_plot(struct zint_symbol *symbol, unsigned char source[], int
 /* Handles Dutch Post TNT KIX symbols
    The same as RM4SCC but without check digit
    Specification at http://www.tntpost.nl/zakelijk/klantenservice/downloads/kIX_code/download.aspx */
-INTERNAL int kix_code(struct zint_symbol *symbol, unsigned char source[], int length) {
+int kix_code(struct zint_symbol *symbol, unsigned char source[], int length) {
     char height_pattern[75], localstr[20];
-    int loopey;
+    unsigned int loopey;
     int writer, i, h;
-    int error_number;
+    int error_number; /* zeroes; */
     strcpy(height_pattern, "");
 
+    error_number = 0;
+
     if (length > 18) {
         strcpy(symbol->errtxt, "490: Input too long");
         return ZINT_ERROR_TOO_LONG;
@@ -412,12 +427,13 @@ INTERNAL int kix_code(struct zint_symbol *symbol, unsigned char source[], int le
 }
 
 /* Handles DAFT Code symbols */
-INTERNAL int daft_code(struct zint_symbol *symbol, unsigned char source[], int length) {
+int daft_code(struct zint_symbol *symbol, unsigned char source[], int length) {
     char height_pattern[100];
     unsigned int loopey, h;
     int writer, i, error_number;
     strcpy(height_pattern, "");
 
+    error_number = 0;
     if (length > 50) {
         strcpy(symbol->errtxt, "492: Input too long");
         return ZINT_ERROR_TOO_LONG;
@@ -468,10 +484,12 @@ INTERNAL int daft_code(struct zint_symbol *symbol, unsigned char source[], int l
 }
 
 /* Flattermarken - Not really a barcode symbology! */
-INTERNAL int flattermarken(struct zint_symbol *symbol, unsigned char source[], int length) {
+int flattermarken(struct zint_symbol *symbol, unsigned char source[], int length) {
     int loop, error_number;
     char dest[512]; /* 90 * 4 + 1 ~ */
 
+    error_number = 0;
+
     if (length > 90) {
         strcpy(symbol->errtxt, "494: Input too long");
         return ZINT_ERROR_TOO_LONG;
@@ -491,7 +509,7 @@ INTERNAL int flattermarken(struct zint_symbol *symbol, unsigned char source[], i
 }
 
 /* Japanese Postal Code (Kasutama Barcode) */
-INTERNAL int japan_post(struct zint_symbol *symbol, unsigned char source[], int length) {
+int japan_post(struct zint_symbol *symbol, unsigned char source[], int length) {
     int error_number, h;
     char pattern[69];
     int writer, loopey, inter_posn, i, sum, check;
@@ -509,6 +527,7 @@ INTERNAL int japan_post(struct zint_symbol *symbol, unsigned char source[], int
         return ZINT_ERROR_TOO_LONG;
     }
 
+    inter_posn = 0;
     error_number = 0;
 
     strcpy(local_source, (char*) source);
@@ -563,9 +582,11 @@ INTERNAL int japan_post(struct zint_symbol *symbol, unsigned char source[], int
     }
     if (check <= 9) {
         check_char = check + '0';
-    } else if (check == 10) {
+    }
+    if (check == 10) {
         check_char = '-';
-    } else {
+    }
+    if (check >= 11) {
         check_char = (check - 11) + 'a';
     }
     strcat(pattern, JapanTable[posn(KASUTSET, check_char)]);
index 31a2f39..a8006ff 100644 (file)
@@ -29,7 +29,6 @@
     OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     SUCH DAMAGE.
  */
-/* vim: set ts=4 sw=4 et : */
 
 #include <locale.h>
 #include <string.h>
 #include <math.h>
 #include "common.h"
 
-void colour_to_pscolor(int option, int colour, char* output) {
-    strcpy(output, "");
-    if ((option & CMYK_COLOUR) == 0) {
-        // Use RGB colour space
-        switch(colour) {
-            case 0: // White
-                strcat(output, "1.00 1.00 1.00");
-                break;
-            case 1: // Cyan
-                strcat(output, "0.00 1.00 1.00");
-                break;
-            case 2: // Blue
-                strcat(output, "0.00 0.00 1.00");
-                break;
-            case 3: // Magenta
-                strcat(output, "1.00 0.00 1.00");
-                break;
-            case 4: // Red
-                strcat(output, "1.00 0.00 0.00");
-                break;
-            case 5: // Yellow
-                strcat(output, "1.00 1.00 0.00");
-                break;
-            case 6: // Green
-                strcat(output, "0.00 1.00 0.00");
-                break;
-            default: // Black
-                strcat(output, "0.00 0.00 0.00");
-                break;
-        }
-        strcat(output, " setrgbcolor");
-    } else {
-        // Use CMYK colour space
-        switch(colour) {
-            case 0: // White
-                strcat(output, "0.00 0.00 0.00 0.00");
-                break;
-            case 1: // Cyan
-                strcat(output, "1.00 0.00 0.00 0.00");
-                break;
-            case 2: // Blue
-                strcat(output, "1.00 1.00 0.00 0.00");
-                break;
-            case 3: // Magenta
-                strcat(output, "0.00 1.00 0.00 0.00");
-                break;
-            case 4: // Red
-                strcat(output, "0.00 1.00 1.00 0.00");
-                break;
-            case 5: // Yellow
-                strcat(output, "0.00 0.00 1.00 0.00");
-                break;
-            case 6: // Green
-                strcat(output, "1.00 0.00 1.00 0.00");
-                break;
-            default: // Black
-                strcat(output, "0.00 0.00 0.00 1.00");
-                break;
-        }
-        strcat(output, " setcmykcolor");
-    }
-}
-
-INTERNAL int ps_plot(struct zint_symbol *symbol) {
+int ps_plot(struct zint_symbol *symbol) {
     FILE *feps;
     int fgred, fggrn, fgblu, bgred, bggrn, bgblu;
     float red_ink, green_ink, blue_ink, red_paper, green_paper, blue_paper;
@@ -110,9 +46,7 @@ INTERNAL int ps_plot(struct zint_symbol *symbol) {
     int error_number = 0;
     float ax, ay, bx, by, cx, cy, dx, dy, ex, ey, fx, fy;
     float radius;
-    int colour_index, colour_rect_counter;
-    char ps_color[30];
-
+    
     struct zint_vector_rect *rect;
     struct zint_vector_hexagon *hex;
     struct zint_vector_circle *circle;
@@ -218,42 +152,19 @@ INTERNAL int ps_plot(struct zint_symbol *symbol) {
     fprintf(feps, "%.2f 0.00 TB 0.00 %.2f TR\n", symbol->vector->height, symbol->vector->width);
 
     fprintf(feps, "TE\n");
-    if (symbol->symbology != BARCODE_ULTRA) {
-        if ((symbol->output_options & CMYK_COLOUR) == 0) {
-            fprintf(feps, "%.2f %.2f %.2f setrgbcolor\n", red_ink, green_ink, blue_ink);
-        } else {
-            fprintf(feps, "%.2f %.2f %.2f %.2f setcmykcolor\n", cyan_ink, magenta_ink, yellow_ink, black_ink);
-        }
+    if ((symbol->output_options & CMYK_COLOUR) == 0) {
+        fprintf(feps, "%.2f %.2f %.2f setrgbcolor\n", red_ink, green_ink, blue_ink);
+    } else {
+        fprintf(feps, "%.2f %.2f %.2f %.2f setcmykcolor\n", cyan_ink, magenta_ink, yellow_ink, black_ink);
     }
-
+    
     // Rectangles
-    if (symbol->symbology == BARCODE_ULTRA) {
-        for (colour_index = 0; colour_index <= 7; colour_index++) {
-            colour_rect_counter = 0;
-            rect = symbol->vector->rectangles;
-            while (rect) {
-                if (rect->colour == colour_index) {
-                    if (colour_rect_counter == 0) {
-                        //Set new colour
-                        colour_to_pscolor(symbol->output_options, colour_index, ps_color);
-                        fprintf(feps, "%s\n", ps_color);
-                    }
-                    colour_rect_counter++;
-                    fprintf(feps, "%.2f %.2f TB %.2f %.2f TR\n", rect->height, (symbol->vector->height - rect->y) - rect->height, rect->x, rect->width);
-                    fprintf(feps, "TE\n");
-                }
-                rect = rect->next;
-            }
-        }
-    } else {
-        rect = symbol->vector->rectangles;
-        while (rect) {
-            fprintf(feps, "%.2f %.2f TB %.2f %.2f TR\n", rect->height, (symbol->vector->height - rect->y) - rect->height, rect->x, rect->width);
-            fprintf(feps, "TE\n");
-            rect = rect->next;
-        }
+    rect = symbol->vector->rectangles;
+    while (rect) {
+        fprintf(feps, "%.2f %.2f TB %.2f %.2f TR\n", rect->height, (symbol->vector->height - rect->y) - rect->height, rect->x, rect->width);
+        rect = rect->next;
     }
-
+    
     // Hexagons
     hex = symbol->vector->hexagons;
     while (hex) {
@@ -273,7 +184,7 @@ INTERNAL int ps_plot(struct zint_symbol *symbol) {
         fprintf(feps, "%.2f %.2f %.2f %.2f %.2f %.2f %.2f %.2f %.2f %.2f %.2f %.2f TH\n", ax, ay, bx, by, cx, cy, dx, dy, ex, ey, fx, fy);
         hex = hex->next;
     }
-
+    
     // Circles
     circle = symbol->vector->circles;
     while (circle) {
@@ -298,7 +209,7 @@ INTERNAL int ps_plot(struct zint_symbol *symbol) {
         }
         circle = circle->next;
     }
-
+    
     // Text
     string = symbol->vector->strings;
     while (string) {
@@ -313,8 +224,8 @@ INTERNAL int ps_plot(struct zint_symbol *symbol) {
         fprintf(feps, "setmatrix\n");
         string = string->next;
     }
-
-    //fprintf(feps, "\nshowpage\n");
+    
+    fprintf(feps, "\nshowpage\n");
 
     if (symbol->output_options & BARCODE_STDOUT) {
         fflush(feps);
index 40a1c32..6793d6f 100644 (file)
@@ -1,7 +1,8 @@
-/* qr.c Handles QR Code, Micro QR Code, UPNQR and rMQR
+/* qr.c Handles QR Code */
 
+/*
     libzint - the open source barcode library
-    Copyright (C) 2009 - 2020 Robin Stuart <rstuart114@gmail.com>
+    Copyright (C) 2009 -2017 Robin Stuart <rstuart114@gmail.com>
 
     Redistribution and use in source and binary forms, with or without
     modification, are permitted provided that the following conditions
@@ -28,7 +29,6 @@
     OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     SUCH DAMAGE.
  */
-/* vim: set ts=4 sw=4 et : */
 
 #include <string.h>
 #ifdef _MSC_VER
 #include "sjis.h"
 #include "qr.h"
 #include "reedsol.h"
+#include <stdlib.h>     /* abs */
 #include <assert.h>
 
-INTERNAL int utf_to_eci(const int eci, const unsigned char source[], unsigned char dest[], size_t *length); /* Convert Unicode to other encodings */
+extern int utf_to_eci(const int eci, const unsigned char source[], unsigned char dest[], size_t *length); /* Convert Unicode to other encodings */
 
 /* Returns true if input glyph is in the Alphanumeric set */
-static int is_alpha(const unsigned int glyph, const int gs1) {
+static int in_alpha(const int glyph) {
     int retval = 0;
+    char cglyph = (char) glyph;
 
-    if ((glyph >= '0') && (glyph <= '9')) {
+    if ((cglyph >= '0') && (cglyph <= '9')) {
         retval = 1;
-    } else if ((glyph >= 'A') && (glyph <= 'Z')) {
-        retval = 1;
-    } else if (gs1 && glyph == '[') {
+    }
+    if ((cglyph >= 'A') && (cglyph <= 'Z')) {
         retval = 1;
-    } else {
-        switch (glyph) {
-            case ' ':
-            case '$':
-            case '%':
-            case '*':
-            case '+':
-            case '-':
-            case '.':
-            case '/':
-            case ':':
-                retval = 1;
-                break;
-        }
     }
-
-    return retval;
-}
-
-/* Bits multiplied by this for costs, so as to be whole integer divisible by 2 and 3 */
-#define QR_MULT 6
-
-/* Whether in numeric or not. If in numeric, *p_end is set to position after numeric, and *p_cost is set to per-numeric cost */
-static int in_numeric(const unsigned int jisdata[], const size_t length, const unsigned int posn, unsigned int* p_end, unsigned int* p_cost) {
-    unsigned int i, digit_cnt;
-
-    if (posn < *p_end) {
-        return 1;
+    switch (cglyph) {
+        case ' ':
+        case '$':
+        case '%':
+        case '*':
+        case '+':
+        case '-':
+        case '.':
+        case '/':
+        case ':':
+            retval = 1;
+            break;
     }
 
-    /* Attempt to calculate the average 'cost' of using numeric mode in number of bits (times QR_MULT) */
-    for (i = posn; i < length && i < posn + 4 && jisdata[i] >= '0' && jisdata[i] <= '9'; i++);
-
-    digit_cnt = i - posn;
-
-    if (digit_cnt == 0) {
-        *p_end = 0;
-        return 0;
-    }
-    *p_end = i;
-    *p_cost = digit_cnt == 1 ? 24 /* 4 * QR_MULT */ : digit_cnt == 2 ? 21 /* (7 / 2) * QR_MULT */ : 20 /* (10 / 3) * QR_MULT) */;
-    return 1;
+    return retval;
 }
 
-/* Whether in alpha or not. If in alpha, *p_end is set to position after alpha, and *p_cost is set to per-alpha cost. For GS1, *p_pcent set if 2nd char percent */
-static int in_alpha(const unsigned int jisdata[], const size_t length, const unsigned int posn, unsigned int* p_end, unsigned int* p_cost, unsigned int* p_pcent, unsigned int gs1) {
-    int two_alphas;
+static void define_mode(char mode[],const int jisdata[], const size_t length,const int gs1) {
+    /* Values placed into mode[] are: K = Kanji, B = Binary, A = Alphanumeric, N = Numeric */
+    size_t i;
+    int    mlen, j;
 
-    if (posn < *p_end) {
-        if (gs1 && *p_pcent) {
-            /* Previous 2nd char was a percent, so allow for second half of doubled-up percent here */
-            two_alphas = posn < length - 1 && is_alpha(jisdata[posn + 1], gs1);
-            *p_cost = two_alphas ? 33 /* (11 / 2) * QR_MULT */ : 36 /* 6 * QR_MULT */;
-            *p_pcent = 0;
+    for (i = 0; i < length; i++) {
+        if (jisdata[i] > 0xff) {
+            mode[i] = 'K';
+        } else {
+            mode[i] = 'B';
+            if (in_alpha(jisdata[i])) {
+                mode[i] = 'A';
+            }
+            if (gs1 && (jisdata[i] == '[')) {
+                mode[i] = 'A';
+            }
+            if ((jisdata[i] >= '0') && (jisdata[i] <= '9')) {
+                mode[i] = 'N';
+            }
         }
-        return 1;
-    }
-
-    /* Attempt to calculate the average 'cost' of using alphanumeric mode in number of bits (times QR_MULT) */
-    if (!is_alpha(jisdata[posn], gs1)) {
-        *p_end = 0;
-        *p_pcent = 0;
-        return 0;
-    }
-
-    if (gs1 && jisdata[posn] == '%') { /* Must double-up so counts as 2 chars */
-        *p_end = posn + 1;
-        *p_cost = 66; /* 11 * QR_MULT */
-        *p_pcent = 0;
-        return 1;
     }
 
-    two_alphas = posn < length - 1 && is_alpha(jisdata[posn + 1], gs1);
-
-    *p_end = two_alphas ? posn + 2 : posn + 1;
-    *p_cost = two_alphas ? 33 /* (11 / 2) * QR_MULT */ : 36 /* 6 * QR_MULT */;
-    *p_pcent = two_alphas && gs1 && jisdata[posn + 1] == '%'; /* 2nd char is percent */
-    return 1;
-}
-
-/* Indexes into mode_types array (and state array) */
-#define QR_N   0 /* Numeric */
-#define QR_A   1 /* Alphanumeric */
-#define QR_B   2 /* Byte */
-#define QR_K   3 /* Kanji */
-
-static const char mode_types[] = { 'N', 'A', 'B', 'K', }; /* Must be in same order as QR_N etc */
-
-#define QR_NUM_MODES 4
-
-/* Indexes into state array (0..3 head costs) */
-#define QR_VER      4   /* Version */
-#define QR_GS1      5   /* GS1 mode (boolean) */
-#define QR_N_END    6   /* Numeric end index */
-#define QR_N_COST   7   /* Numeric cost */
-#define QR_A_END    8   /* Alpha end index */
-#define QR_A_COST   9   /* Alpha cost */
-#define QR_A_PCENT  10  /* Alpha 2nd char percent (GS1-specific) */
-
-/* Costs set to this for invalid MICROQR modes for versions M1 and M2.
- * 128 is the max number of data bits for M4-L (ISO/IEC 18004:2015 Table 7) */
-#define QR_MICROQR_MAX 774 /* (128 + 1) * QR_MULT */
-
-/* Initial mode costs */
-static unsigned int* qr_head_costs(unsigned int state[]) {
-    static const int head_costs[7][QR_NUM_MODES] = {
-        /* N                    A                   B                   K */
-        { (10 + 4) * QR_MULT,  (9 + 4) * QR_MULT,  (8 + 4) * QR_MULT,  (8 + 4) * QR_MULT, }, /* QR */
-        { (12 + 4) * QR_MULT, (11 + 4) * QR_MULT, (16 + 4) * QR_MULT, (10 + 4) * QR_MULT, },
-        { (14 + 4) * QR_MULT, (13 + 4) * QR_MULT, (16 + 4) * QR_MULT, (12 + 4) * QR_MULT, },
-        {        3 * QR_MULT,     QR_MICROQR_MAX,     QR_MICROQR_MAX,     QR_MICROQR_MAX, }, /* MICROQR */
-        {  (4 + 1) * QR_MULT,  (3 + 1) * QR_MULT,     QR_MICROQR_MAX,     QR_MICROQR_MAX, },
-        {  (5 + 2) * QR_MULT,  (4 + 2) * QR_MULT,  (4 + 2) * QR_MULT,  (3 + 2) * QR_MULT, },
-        {  (6 + 3) * QR_MULT,  (5 + 3) * QR_MULT,  (5 + 3) * QR_MULT,  (4 + 3) * QR_MULT, }
-    };
-    int version;
-
-    /* Head costs kept in states 0..3 */
-    if (state[QR_N] != 0) { /* Numeric non-zero in all configs */
-        return state; /* Already set */
-    }
-
-    version = state[QR_VER];
-
-    if (version < RMQR_VERSION) { /* QRCODE */
-        if (version < 10) {
-            memcpy(state, head_costs, QR_NUM_MODES * sizeof(unsigned int));
-        } else if (version < 27) {
-            memcpy(state, head_costs + 1, QR_NUM_MODES * sizeof(unsigned int));
-        } else {
-            memcpy(state, head_costs + 2, QR_NUM_MODES * sizeof(unsigned int));
+    /* If less than 6 numeric digits together then don't use numeric mode */
+    for (i = 0; i < length; i++) {
+        if (mode[i] == 'N') {
+            if (((i != 0) && (mode[i - 1] != 'N')) || (i == 0)) {
+                mlen = 0;
+                while (((mlen + i) < length) && (mode[mlen + i] == 'N')) {
+                    mlen++;
+                };
+                if (mlen < 6) {
+                    for (j = 0; j < mlen; j++) {
+                        mode[i + j] = 'A';
+                    }
+                }
+            }
         }
-    } else if (version < MICROQR_VERSION) { /* RMQR */
-        version -= RMQR_VERSION;
-        state[QR_N] = (rmqr_numeric_cci[version] + 3) * QR_MULT;
-        state[QR_A] = (rmqr_alphanum_cci[version] + 3) * QR_MULT;
-        state[QR_B] = (rmqr_byte_cci[version] + 3) * QR_MULT;
-        state[QR_K] = (rmqr_kanji_cci[version] + 3) * QR_MULT;
-    } else { /* MICROQR */
-        memcpy(state, head_costs + 3 + (version - MICROQR_VERSION), QR_NUM_MODES * sizeof(unsigned int));
     }
 
-    return state;
-}
-
-/* Costs of switching modes from k to j */
-static unsigned int qr_switch_cost(unsigned int state[], const int k, const int j) {
-    (void)k; /* Unused */
-    return state[j]; /* Same as head cost */
-}
-
-/* Calculate cost of encoding character */
-static void qr_cur_cost(unsigned int state[], const unsigned int jisdata[], const size_t length, const int i, char* char_modes, unsigned int prev_costs[], unsigned int cur_costs[]) {
-    int cm_i = i * QR_NUM_MODES, m1, m2;
-    unsigned int version = state[QR_VER];
-    unsigned int gs1 = state[QR_GS1];
-    unsigned int* p_numeric_end = &state[QR_N_END];
-    unsigned int* p_numeric_cost = &state[QR_N_COST];
-    unsigned int* p_alpha_end = &state[QR_A_END];
-    unsigned int* p_alpha_cost = &state[QR_A_COST];
-    unsigned int* p_alpha_pcent = &state[QR_A_PCENT];
-
-    m1 = version == MICROQR_VERSION;
-    m2 = version == MICROQR_VERSION + 1;
-
-    if (jisdata[i] > 0xFF) {
-        cur_costs[QR_B] = prev_costs[QR_B] + ((m1 || m2) ? QR_MICROQR_MAX : 96); /* 16 * QR_MULT */
-        char_modes[cm_i + QR_B] = 'B';
-        cur_costs[QR_K] = prev_costs[QR_K] + ((m1 || m2) ? QR_MICROQR_MAX : 78); /* 13 * QR_MULT */
-        char_modes[cm_i + QR_K] = 'K';
-    } else {
-        if (in_numeric(jisdata, length, i, p_numeric_end, p_numeric_cost)) {
-            cur_costs[QR_N] = prev_costs[QR_N] + *p_numeric_cost;
-            char_modes[cm_i + QR_N] = 'N';
-        }
-        if (in_alpha(jisdata, length, i, p_alpha_end, p_alpha_cost, p_alpha_pcent, gs1)) {
-            cur_costs[QR_A] = prev_costs[QR_A] + (m1 ? QR_MICROQR_MAX : *p_alpha_cost);
-            char_modes[cm_i + QR_A] = 'A';
+    /* If less than 4 alphanumeric characters together then don't use alphanumeric mode */
+    for (i = 0; i < length; i++) {
+        if (mode[i] == 'A') {
+            if (((i != 0) && (mode[i - 1] != 'A')) || (i == 0)) {
+                mlen = 0;
+                while (((mlen + i) < length) && (mode[mlen + i] == 'A')) {
+                    mlen++;
+                };
+                if (mlen < 4) {
+                    for (j = 0; j < mlen; j++) {
+                        mode[i + j] = 'B';
+                    }
+                }
+            }
         }
-        cur_costs[QR_B] = prev_costs[QR_B] + ((m1 || m2) ? QR_MICROQR_MAX : 48); /* 8 * QR_MULT */
-        char_modes[cm_i + QR_B] = 'B';
     }
 }
 
-static void qr_define_mode(char mode[], const unsigned int jisdata[], const size_t length, const int gs1, const int version, const int debug) {
-    unsigned int state[11] = {
-        0 /*N*/, 0 /*A*/, 0 /*B*/, 0 /*K*/,
-        (unsigned int) version, (unsigned int) gs1,
-        0 /*numeric_end*/, 0 /*numeric_cost*/, 0 /*alpha_end*/, 0 /*alpha_cost*/, 0 /*alpha_pcent*/
-    };
+/* Choose from three numbers based on version */
+static int tribus(const int version,const int a,const int b,const int c) {
+    int RetVal;
 
-    pn_define_mode(mode, jisdata, length, debug, state, mode_types, QR_NUM_MODES, qr_head_costs, qr_switch_cost, NULL, qr_cur_cost);
-}
+    RetVal = c;
 
-/* Return mode indicator bits based on version */
-static int mode_bits(const int version) {
-    if (version < RMQR_VERSION) {
-        return 4; /* QRCODE */
+    if (version < 10) {
+        RetVal = a;
     }
-    if (version < MICROQR_VERSION) {
-        return 3; /* RMQR */
-    }
-    return version - MICROQR_VERSION; /* MICROQR */
-}
-
-/* Return character count indicator bits based on version and mode */
-static int cci_bits(const int version, const int mode) {
-    static const int cci_bits[7][QR_NUM_MODES] = {
-        /* N   A   B   K */
-        { 10,  9,  8,  8, }, /* QRCODE */
-        { 12, 11, 16, 10, },
-        { 14, 13, 16, 12, },
-        {  3,  0,  0,  0, }, /* MICROQR */
-        {  4,  3,  0,  0, },
-        {  5,  4,  4,  3, },
-        {  6,  5,  5,  4, }
-    };
-    static const unsigned short int* rmqr_ccis[QR_NUM_MODES] = {
-        rmqr_numeric_cci, rmqr_alphanum_cci, rmqr_byte_cci, rmqr_kanji_cci,
-    };
-    int mode_index = strchr(mode_types, mode) - mode_types;
-
-    if (version < RMQR_VERSION) { /* QRCODE */
-        if (version < 10) {
-            return cci_bits[0][mode_index];
-        }
-        if (version < 27) {
-            return cci_bits[1][mode_index];
-        }
-        return cci_bits[2][mode_index];
-    }
-    if (version < MICROQR_VERSION) { /* RMQR */
-        return rmqr_ccis[mode_index][version - RMQR_VERSION];
-    }
-    return cci_bits[3 + (version - MICROQR_VERSION)][mode_index]; /* MICROQR */
-}
 
-/* Returns mode indicator based on version and mode */
-static const char* mode_indicator(const int version, const int mode) {
-    static const char* mode_indicators[6][QR_NUM_MODES] = {
-        /*    N       A       B       K */
-        { "0001", "0010", "0100", "1000", }, /* QRCODE */
-        {  "001",  "010",  "011",  "100", }, /* RMQR */
-        {     "",     "",     "",     "", }, /* MICROQR */
-        {    "0",    "1",     "",     "", },
-        {   "00",   "01",   "10",   "11", },
-        {  "000",  "001",  "010",  "011", },
-    };
-
-    int mode_index = strchr(mode_types, mode) - mode_types;
-
-    if (version < RMQR_VERSION) {
-        return mode_indicators[0][mode_index]; /* QRCODE */
+    if ((version >= 10) && (version <= 26)) {
+        RetVal = b;
     }
-    if (version < MICROQR_VERSION) {
-        return mode_indicators[1][mode_index] /* RMQR */;
-    }
-    return mode_indicators[2 + version - MICROQR_VERSION][mode_index]; /* MICROQR */
-}
 
-/* Returns terminator bits based on version */
-static int terminator_bits(const int version) {
-    if (version < RMQR_VERSION) {
-        return 4; /* QRCODE */
-    }
-    if (version < MICROQR_VERSION) {
-        return 3; /* RMQR */
-    }
-    return 3 + (version - MICROQR_VERSION) * 2; /* MICROQR (Note not actually using this at the moment) */
+    return RetVal;
 }
 
 /* Convert input data to a binary stream and add padding */
-static void qr_binary(unsigned char datastream[], const int version, const int target_codewords, const char mode[], const unsigned int jisdata[], const size_t length,
-            const int gs1, const int eci, const int est_binlen, const int debug) {
-    unsigned int position = 0;
+static void qr_binary(int datastream[], const int version, const int target_binlen, const char mode[], const int jisdata[], const size_t length, const int gs1, const int eci, const int est_binlen,const int debug) {
+    int position = 0;
     int i;
-    int termbits, padbits;
+    char padbits;
     int current_binlen, current_bytes;
     int toggle, percent;
     int percent_count;
@@ -341,15 +162,11 @@ static void qr_binary(unsigned char datastream[], const int version, const int t
 #endif
     strcpy(binary, "");
 
-    if (gs1) { /* Not applicable to MICROQR */
-        if (version < RMQR_VERSION) {
-            strcat(binary, "0101"); /* FNC1 */
-        } else {
-            strcat(binary, "101");
-        }
+    if (gs1) {
+        strcat(binary, "0101"); /* FNC1 */
     }
 
-    if (eci != 0) { /* Not applicable to RMQR or MICROQR */
+    if (eci != 0) {
         strcat(binary, "0111"); /* ECI (Table 4) */
         if (eci <= 127) {
             bin_append(eci, 8, binary); /* 000000 to 000127 */
@@ -360,8 +177,8 @@ static void qr_binary(unsigned char datastream[], const int version, const int t
         }
     }
 
-    if (debug & ZINT_DEBUG_PRINT) {
-        for (i = 0; i < (int) length; i++) {
+    if (debug) {
+        for (i = 0; i < length; i++) {
             printf("%c", mode[i]);
         }
         printf("\n");
@@ -372,11 +189,7 @@ static void qr_binary(unsigned char datastream[], const int version, const int t
     do {
         char data_block = mode[position];
         int short_data_block_length = 0;
-        int double_byte = 0;
         do {
-            if (data_block == 'B' && jisdata[position + short_data_block_length] > 0xFF) {
-                double_byte++;
-            }
             short_data_block_length++;
         } while (((short_data_block_length + position) < length)
                 && (mode[position + short_data_block_length] == data_block));
@@ -385,18 +198,18 @@ static void qr_binary(unsigned char datastream[], const int version, const int t
             case 'K':
                 /* Kanji mode */
                 /* Mode indicator */
-                strcat(binary, mode_indicator(version, data_block));
+                strcat(binary, "1000");
 
                 /* Character count indicator */
-                bin_append(short_data_block_length, cci_bits(version, data_block), binary);
+                bin_append(short_data_block_length, tribus(version, 8, 10, 12), binary);
 
-                if (debug & ZINT_DEBUG_PRINT) {
+                if (debug) {
                     printf("Kanji block (length %d)\n\t", short_data_block_length);
                 }
 
                 /* Character representation */
                 for (i = 0; i < short_data_block_length; i++) {
-                    unsigned int jis = jisdata[position + i];
+                    int jis = jisdata[position + i];
                     int prod;
 
                     if (jis >= 0x8140 && jis <= 0x9ffc)
@@ -409,12 +222,12 @@ static void qr_binary(unsigned char datastream[], const int version, const int t
 
                     bin_append(prod, 13, binary);
 
-                    if (debug & ZINT_DEBUG_PRINT) {
-                        printf("0x%04X ", prod);
+                    if (debug) {
+                        printf("0x%4X ", prod);
                     }
                 }
 
-                if (debug & ZINT_DEBUG_PRINT) {
+                if (debug) {
                     printf("\n");
                 }
 
@@ -422,31 +235,31 @@ static void qr_binary(unsigned char datastream[], const int version, const int t
             case 'B':
                 /* Byte mode */
                 /* Mode indicator */
-                strcat(binary, mode_indicator(version, data_block));
+                strcat(binary, "0100");
 
                 /* Character count indicator */
-                bin_append(short_data_block_length + double_byte, cci_bits(version, data_block), binary);
+                bin_append(short_data_block_length, tribus(version, 8, 16, 16), binary);
 
-                if (debug & ZINT_DEBUG_PRINT) {
-                    printf("Byte block (length %d)\n\t", short_data_block_length + double_byte);
+                if (debug) {
+                    printf("Byte block (length %d)\n\t", short_data_block_length);
                 }
 
                 /* Character representation */
                 for (i = 0; i < short_data_block_length; i++) {
-                    unsigned int byte = jisdata[position + i];
+                    int byte = jisdata[position + i];
 
                     if (gs1 && (byte == '[')) {
                         byte = 0x1d; /* FNC1 */
                     }
 
-                    bin_append(byte, byte > 0xFF ? 16 : 8, binary);
+                    bin_append(byte, 8, binary);
 
-                    if (debug & ZINT_DEBUG_PRINT) {
-                        printf("0x%02X(%d) ", byte, byte);
+                    if (debug) {
+                        printf("0x%2X(%d) ", byte, byte);
                     }
                 }
 
-                if (debug & ZINT_DEBUG_PRINT) {
+                if (debug) {
                     printf("\n");
                 }
 
@@ -454,21 +267,19 @@ static void qr_binary(unsigned char datastream[], const int version, const int t
             case 'A':
                 /* Alphanumeric mode */
                 /* Mode indicator */
-                strcat(binary, mode_indicator(version, data_block));
+                strcat(binary, "0010");
 
                 percent_count = 0;
-                if (gs1) {
-                    for (i = 0; i < short_data_block_length; i++) {
-                        if (jisdata[position + i] == '%') {
-                            percent_count++;
-                        }
+                for (i = 0; i < short_data_block_length; i++) {
+                    if (gs1 && (jisdata[position + i] == '%')) {
+                        percent_count++;
                     }
                 }
-
+                
                 /* Character count indicator */
-                bin_append(short_data_block_length + percent_count, cci_bits(version, data_block), binary);
+                bin_append(short_data_block_length + percent_count, tribus(version, 9, 11, 13), binary);
 
-                if (debug & ZINT_DEBUG_PRINT) {
+                if (debug) {
                     printf("Alpha block (length %d)\n\t", short_data_block_length + percent_count);
                 }
 
@@ -541,12 +352,12 @@ static void qr_binary(unsigned char datastream[], const int version, const int t
 
                     bin_append(prod, 1 + (5 * count), binary);
 
-                    if (debug & ZINT_DEBUG_PRINT) {
-                        printf("0x%X ", prod);
+                    if (debug) {
+                        printf("0x%4X ", prod);
                     }
-                }
+                };
 
-                if (debug & ZINT_DEBUG_PRINT) {
+                if (debug) {
                     printf("\n");
                 }
 
@@ -554,12 +365,12 @@ static void qr_binary(unsigned char datastream[], const int version, const int t
             case 'N':
                 /* Numeric mode */
                 /* Mode indicator */
-                strcat(binary, mode_indicator(version, data_block));
+                strcat(binary, "0001");
 
                 /* Character count indicator */
-                bin_append(short_data_block_length, cci_bits(version, data_block), binary);
+                bin_append(short_data_block_length, tribus(version, 10, 12, 14), binary);
 
-                if (debug & ZINT_DEBUG_PRINT) {
+                if (debug) {
                     printf("Number block (length %d)\n\t", short_data_block_length);
                 }
 
@@ -587,14 +398,14 @@ static void qr_binary(unsigned char datastream[], const int version, const int t
 
                     bin_append(prod, 1 + (3 * count), binary);
 
-                    if (debug & ZINT_DEBUG_PRINT) {
-                        printf("0x%X(%d) ", prod, prod);
+                    if (debug) {
+                        printf("0x%4X (%d)", prod, prod);
                     }
 
                     i += count;
                 };
 
-                if (debug & ZINT_DEBUG_PRINT) {
+                if (debug) {
                     printf("\n");
                 }
 
@@ -604,34 +415,19 @@ static void qr_binary(unsigned char datastream[], const int version, const int t
         position += short_data_block_length;
     } while (position < length);
 
-    if (version >= MICROQR_VERSION && version < MICROQR_VERSION + 4) {
-        /* MICROQR does its own terminating/padding */
-        strcpy((char*)datastream, binary);
-        return;
-    }
-
     /* Terminator */
-    current_binlen = (int)strlen(binary);
-    termbits = 8 - current_binlen % 8;
-    if (termbits == 8) {
-        termbits = 0;
-    }
-    current_bytes = (current_binlen + termbits) / 8;
-    if (termbits || current_bytes < target_codewords) {
-        int max_termbits = terminator_bits(version);
-        termbits = termbits < max_termbits && current_bytes == target_codewords ? termbits : max_termbits;
-        bin_append(0, termbits, binary);
-        current_binlen += termbits;
-    }
+    strcat(binary, "0000");
 
-    /* Padding bits */
-    padbits = 8 - current_binlen % 8;
+    current_binlen = (int)strlen(binary);
+    padbits = 8 - (current_binlen % 8);
     if (padbits == 8) {
         padbits = 0;
     }
-    if (padbits) {
-        current_bytes = (current_binlen + padbits) / 8;
-        bin_append(0, padbits, binary);
+    current_bytes = (current_binlen + padbits) / 8;
+
+    /* Padding bits */
+    for (i = 0; i < padbits; i++) {
+        strcat(binary, "0");
     }
 
     /* Put data into 8-bit codewords */
@@ -647,7 +443,7 @@ static void qr_binary(unsigned char datastream[], const int version, const int t
 
     /* Add pad codewords */
     toggle = 0;
-    for (i = current_bytes; i < target_codewords; i++) {
+    for (i = current_bytes; i < target_binlen; i++) {
         if (toggle == 0) {
             datastream[i] = 0xec;
             toggle = 1;
@@ -657,52 +453,35 @@ static void qr_binary(unsigned char datastream[], const int version, const int t
         }
     }
 
-    if (debug & ZINT_DEBUG_PRINT) {
+    if (debug) {
         printf("Resulting codewords:\n\t");
-        for (i = 0; i < target_codewords; i++) {
-            printf("0x%02X ", datastream[i]);
+        for (i = 0; i < target_binlen; i++) {
+            printf("0x%2X ", datastream[i]);
         }
         printf("\n");
     }
 }
 
 /* Split data into blocks, add error correction and then interleave the blocks and error correction data */
-static void add_ecc(unsigned char fullstream[], const unsigned char datastream[], const int version, const int data_cw, const int blocks, int debug) {
-    int ecc_cw;
-    int short_data_block_length;
-    int qty_long_blocks;
-    int qty_short_blocks;
-    int ecc_block_length;
-    int i, j, length_this_block, posn;
-#ifdef _MSC_VER
-    unsigned char* data_block;
-    unsigned char* ecc_block;
-    unsigned char* interleaved_data;
-    unsigned char* interleaved_ecc;
-#endif
-
-    if (version < RMQR_VERSION) {
-        ecc_cw = qr_total_codewords[version - 1] - data_cw;
-    } else {
-        ecc_cw = rmqr_total_codewords[version - RMQR_VERSION] - data_cw;
-    }
-
-    short_data_block_length = data_cw / blocks;
-    qty_long_blocks = data_cw % blocks;
-    qty_short_blocks = blocks - qty_long_blocks;
-    ecc_block_length = ecc_cw / blocks;
+static void add_ecc(int fullstream[],const int datastream[],const int version,const int data_cw,const int blocks) {
+    int ecc_cw = qr_total_codewords[version - 1] - data_cw;
+    int short_data_block_length = data_cw / blocks;
+    int qty_long_blocks = data_cw % blocks;
+    int qty_short_blocks = blocks - qty_long_blocks;
+    int ecc_block_length = ecc_cw / blocks;
+    int i, j, length_this_block, posn, debug = 0;
 
 
 #ifndef _MSC_VER
-    unsigned char data_block[short_data_block_length + 1];
-    unsigned char ecc_block[ecc_block_length];
-    unsigned char interleaved_data[data_cw];
-    unsigned char interleaved_ecc[ecc_cw];
+    unsigned char data_block[short_data_block_length + 2];
+    unsigned char ecc_block[ecc_block_length + 2];
+    int interleaved_data[data_cw + 2];
+    int interleaved_ecc[ecc_cw + 2];
 #else
-    data_block = (unsigned char *) _alloca(short_data_block_length + 1);
-    ecc_block = (unsigned char *) _alloca(ecc_block_length);
-    interleaved_data = (unsigned char *) _alloca(data_cw);
-    interleaved_ecc = (unsigned char *) _alloca(ecc_cw);
+    unsigned char* data_block = (unsigned char *) _alloca(short_data_block_length + 2);
+    unsigned char* ecc_block = (unsigned char *) _alloca(ecc_block_length + 2);
+    int* interleaved_data = (int *) _alloca((data_cw + 2) * sizeof (int));
+    int* interleaved_ecc = (int *) _alloca((ecc_cw + 2) * sizeof (int));
 #endif
 
     posn = 0;
@@ -719,7 +498,7 @@ static void add_ecc(unsigned char fullstream[], const unsigned char datastream[]
         }
 
         for (j = 0; j < length_this_block; j++) {
-            data_block[j] = datastream[posn + j];
+            data_block[j] = (unsigned char) datastream[posn + j];
         }
 
         rs_init_gf(0x11d);
@@ -727,7 +506,7 @@ static void add_ecc(unsigned char fullstream[], const unsigned char datastream[]
         rs_encode(length_this_block, data_block, ecc_block);
         rs_free();
 
-        if (debug & ZINT_DEBUG_PRINT) {
+        if (debug) {
             printf("Block %d: ", i + 1);
             for (j = 0; j < length_this_block; j++) {
                 printf("%2X ", data_block[j]);
@@ -743,29 +522,28 @@ static void add_ecc(unsigned char fullstream[], const unsigned char datastream[]
         }
 
         for (j = 0; j < short_data_block_length; j++) {
-            interleaved_data[(j * blocks) + i] = data_block[j];
+            interleaved_data[(j * blocks) + i] = (int) data_block[j];
         }
 
         if (i >= qty_short_blocks) {
-            /* NOLINT suppress clang-tidy warning: data_block[short_data_block_length] set for i >= qty_short_blocks */
-            interleaved_data[(short_data_block_length * blocks) + (i - qty_short_blocks)] = data_block[short_data_block_length]; // NOLINT
+            interleaved_data[(short_data_block_length * blocks) + (i - qty_short_blocks)] = (int) data_block[short_data_block_length];
         }
 
         for (j = 0; j < ecc_block_length; j++) {
-            interleaved_ecc[(j * blocks) + i] = ecc_block[ecc_block_length - j - 1];
+            interleaved_ecc[(j * blocks) + i] = (int) ecc_block[ecc_block_length - j - 1];
         }
 
         posn += length_this_block;
     }
 
     for (j = 0; j < data_cw; j++) {
-        fullstream[j] = interleaved_data[j]; // NOLINT suppress clang-tidy warning: interleaved_data[data_cw] fully set
+        fullstream[j] = interleaved_data[j];
     }
     for (j = 0; j < ecc_cw; j++) {
-        fullstream[j + data_cw] = interleaved_ecc[j]; // NOLINT suppress clang-tidy warning: interleaved_ecc[ecc_cw] fully set
+        fullstream[j + data_cw] = interleaved_ecc[j];
     }
 
-    if (debug & ZINT_DEBUG_PRINT) {
+    if (debug) {
         printf("\nData Stream: \n");
         for (j = 0; j < (data_cw + ecc_cw); j++) {
             printf("%2X ", fullstream[j]);
@@ -882,7 +660,7 @@ static void setup_grid(unsigned char* grid,const int size,const int version) {
     }
 }
 
-static int cwbit(const unsigned char* fullstream, const int i) {
+static int cwbit(const int* fullstream,const int i) {
     int resultant = 0;
 
     if (fullstream[(i / 8)] & (0x80 >> (i % 8))) {
@@ -892,36 +670,35 @@ static int cwbit(const unsigned char* fullstream, const int i) {
     return resultant;
 }
 
-static void populate_grid(unsigned char* grid, const int h_size, const int v_size, const unsigned char* fullstream, const int cw) {
+static void populate_grid(unsigned char* grid,const int size,const int* fullstream,const int cw) {
     int direction = 1; /* up */
     int row = 0; /* right hand side */
 
     int i, n, y;
 
     n = cw * 8;
-    y = v_size - 1;
+    y = size - 1;
     i = 0;
-    while (i < n) {
-        int x = (h_size - 2) - (row * 2);
-
-        if ((x < 6) && (v_size == h_size))
+    do {
+        int x = (size - 2) - (row * 2);
+        if (x < 6)
             x--; /* skip over vertical timing pattern */
 
-        if (!(grid[(y * h_size) + (x + 1)] & 0xf0)) {
+        if (!(grid[(y * size) + (x + 1)] & 0xf0)) {
             if (cwbit(fullstream, i)) {
-                grid[(y * h_size) + (x + 1)] = 0x01;
+                grid[(y * size) + (x + 1)] = 0x01;
             } else {
-                grid[(y * h_size) + (x + 1)] = 0x00;
+                grid[(y * size) + (x + 1)] = 0x00;
             }
             i++;
         }
 
         if (i < n) {
-            if (!(grid[(y * h_size) + x] & 0xf0)) {
+            if (!(grid[(y * size) + x] & 0xf0)) {
                 if (cwbit(fullstream, i)) {
-                    grid[(y * h_size) + x] = 0x01;
+                    grid[(y * size) + x] = 0x01;
                 } else {
-                    grid[(y * h_size) + x] = 0x00;
+                    grid[(y * size) + x] = 0x00;
                 }
                 i++;
             }
@@ -938,18 +715,18 @@ static void populate_grid(unsigned char* grid, const int h_size, const int v_siz
             y = 0;
             direction = 0;
         }
-        if (y == v_size) {
+        if (y == size) {
             /* reached the bottom */
             row++;
-            y = v_size - 1;
+            y = size - 1;
             direction = 1;
         }
-    }
+    } while (i < n);
 }
 
 #ifdef ZINTLOG
 
-static int append_log(char log) {
+int append_log(char log) {
     FILE *file;
 
     file = fopen("zintlog.txt", "a+");
@@ -958,7 +735,7 @@ static int append_log(char log) {
     return 0;
 }
 
-static int write_log(char log[]) {
+int write_log(char log[]) {
     FILE *file;
 
     file = fopen("zintlog.txt", "a+");
@@ -1072,10 +849,9 @@ static int evaluate(unsigned char *eval,const int size,const int pattern) {
     /* Test 2: Block of modules in same color */
     for (x = 0; x < size - 1; x++) {
         for (y = 0; y < size - 1; y++) {
-            /* NOLINT suppress clang-tidy warning: local[size * size] fully set */
-            if (((local[(y * size) + x] == local[((y + 1) * size) + x]) && // NOLINT
+            if (((local[(y * size) + x] == local[((y + 1) * size) + x]) &&
                     (local[(y * size) + x] == local[(y * size) + (x + 1)])) &&
-                    (local[(y * size) + x] == local[((y + 1) * size) + (x + 1)])) { // NOLINT
+                    (local[(y * size) + x] == local[((y + 1) * size) + (x + 1)])) {
                 result += 3;
             }
         }
@@ -1413,6 +1189,122 @@ static void add_version_info(unsigned char *grid,const int size,const int versio
     }
 }
 
+/* Implements a custom optimisation algorithm, more efficient than that
+   given in Annex J. */
+static void applyOptimisation(const int version,char inputMode[], const size_t inputLength) {
+
+
+    int blockCount = 0, block;
+    int i, j;
+    char currentMode = ' '; // Null
+    int *blockLength;
+    char *blockMode;
+
+    for (i = 0; i < inputLength; i++) {
+        if (inputMode[i] != currentMode) {
+            currentMode = inputMode[i];
+            blockCount++;
+        }
+    }
+
+    blockLength = (int*) malloc(sizeof (int)*blockCount);
+    assert(blockLength);
+    if (!blockLength) return;
+    blockMode = (char*) malloc(sizeof (char)*blockCount);
+    assert(blockMode);
+    if (!blockMode) {
+        free(blockLength);
+        return;
+    }
+
+    j = -1;
+    currentMode = ' '; // Null
+    for (i = 0; i < inputLength; i++) {
+        if (inputMode[i] != currentMode) {
+            j++;
+            blockLength[j] = 1;
+            blockMode[j] = inputMode[i];
+            currentMode = inputMode[i];
+        } else {
+            blockLength[j]++;
+        }
+    }
+
+    if (blockCount > 1) {
+        // Search forward
+        for (i = 0; i <= (blockCount - 2); i++) {
+            if (blockMode[i] == 'B') {
+                switch (blockMode[i + 1]) {
+                    case 'K':
+                        if (blockLength[i + 1] < tribus(version, 4, 5, 6)) {
+                            blockMode[i + 1] = 'B';
+                        }
+                        break;
+                    case 'A':
+                        if (blockLength[i + 1] < tribus(version, 7, 8, 9)) {
+                            blockMode[i + 1] = 'B';
+                        }
+                        break;
+                    case 'N':
+                        if (blockLength[i + 1] < tribus(version, 3, 4, 5)) {
+                            blockMode[i + 1] = 'B';
+                        }
+                        break;
+                }
+            }
+
+            if ((blockMode[i] == 'A')
+                    && (blockMode[i + 1] == 'N')) {
+                if (blockLength[i + 1] < tribus(version, 6, 8, 10)) {
+                    blockMode[i + 1] = 'A';
+                }
+            }
+        }
+
+        // Search backward
+        for (i = blockCount - 1; i > 0; i--) {
+            if (blockMode[i] == 'B') {
+                switch (blockMode[i - 1]) {
+                    case 'K':
+                        if (blockLength[i - 1] < tribus(version, 4, 5, 6)) {
+                            blockMode[i - 1] = 'B';
+                        }
+                        break;
+                    case 'A':
+                        if (blockLength[i - 1] < tribus(version, 7, 8, 9)) {
+                            blockMode[i - 1] = 'B';
+                        }
+                        break;
+                    case 'N':
+                        if (blockLength[i - 1] < tribus(version, 3, 4, 5)) {
+                            blockMode[i - 1] = 'B';
+                        }
+                        break;
+                }
+            }
+
+            if ((blockMode[i] == 'A')
+                    && (blockMode[i - 1] == 'N')) {
+                if (blockLength[i - 1] < tribus(version, 6, 8, 10)) {
+                    blockMode[i - 1] = 'A';
+                }
+            }
+        }
+    }
+
+    j = 0;
+    for (block = 0; block < blockCount; block++) {
+        currentMode = blockMode[block];
+        for (i = 0; i < blockLength[block]; i++) {
+            inputMode[j] = currentMode;
+            j++;
+        }
+    }
+
+    free(blockLength);
+    free(blockMode);
+}
+
 static size_t blockLength(const size_t start,const char inputMode[],const size_t inputLength) {
     /* Find the length of the block starting from 'start' */
     size_t i;
@@ -1429,47 +1321,38 @@ static size_t blockLength(const size_t start,const char inputMode[],const size_t
     return count;
 }
 
-static int getBinaryLength(const int version, char inputMode[], const unsigned int inputData[], const size_t inputLength, const int gs1, const int eci, const int debug) {
+static int getBinaryLength(const int version,char inputMode[],const int inputData[],const size_t inputLength,const int gs1,const int eci) {
     /* Calculate the actual bitlength of the proposed binary string */
-    size_t i, j;
+    size_t i;
     char currentMode;
+    int    j;
     int count = 0;
     int alphalength;
-    int blocklength;
+    int percent = 0;
 
-    qr_define_mode(inputMode, inputData, inputLength, gs1, version, debug);
+    applyOptimisation(version, inputMode, inputLength);
 
     currentMode = ' '; // Null
 
-    if (gs1 == 1) { /* Not applicable to MICROQR */
-        if (version < RMQR_VERSION) {
-            count += 4;
-        } else {
-            count += 3;
-        }
+    if (gs1 == 1) {
+        count += 4;
     }
 
-    if (eci != 0) { // RMQR and MICROQR do not support ECI
-        count += 4;
-        if (eci <= 127) {
-            count += 8;
-        } else if (eci <= 16383) {
-            count += 16;
-        } else {
-            count += 24;
-        }
+    if (eci != 0) {
+        count += 12;
     }
 
     for (i = 0; i < inputLength; i++) {
         if (inputMode[i] != currentMode) {
-            count += mode_bits(version) + cci_bits(version, inputMode[i]);
-            blocklength = blockLength(i, inputMode, inputLength);
+            count += 4;
             switch (inputMode[i]) {
                 case 'K':
-                    count += (blocklength * 13);
+                    count += tribus(version, 8, 10, 12);
+                    count += (blockLength(i, inputMode, inputLength) * 13);
                     break;
                 case 'B':
-                    for (j = i; j < (i + blocklength); j++) {
+                    count += tribus(version, 8, 16, 16);
+                    for (j = i; j < (i + blockLength(i, inputMode, inputLength)); j++) {
                         if (inputData[j] > 0xff) {
                             count += 16;
                         } else {
@@ -1478,15 +1361,15 @@ static int getBinaryLength(const int version, char inputMode[], const unsigned i
                     }
                     break;
                 case 'A':
-                    alphalength = blocklength;
-                    if (gs1) {
-                        // In alphanumeric mode % becomes %%
-                        for (j = i; j < (i + blocklength); j++) {
-                            if (inputData[j] == '%') {
-                                alphalength++;
-                            }
+                    count += tribus(version, 9, 11, 13);
+                    alphalength = blockLength(i, inputMode, inputLength);
+                    // In alphanumeric mode % becomes %%
+                    for (j = i; j < (i + alphalength); j++) {
+                        if (inputData[j] == '%') {
+                            percent++;
                         }
                     }
+                    alphalength += percent;
                     switch (alphalength % 2) {
                         case 0:
                             count += (alphalength / 2) * 11;
@@ -1498,16 +1381,17 @@ static int getBinaryLength(const int version, char inputMode[], const unsigned i
                     }
                     break;
                 case 'N':
-                    switch (blocklength % 3) {
+                    count += tribus(version, 10, 12, 14);
+                    switch (blockLength(i, inputMode, inputLength) % 3) {
                         case 0:
-                            count += (blocklength / 3) * 10;
+                            count += (blockLength(i, inputMode, inputLength) / 3) * 10;
                             break;
                         case 1:
-                            count += ((blocklength - 1) / 3) * 10;
+                            count += ((blockLength(i, inputMode, inputLength) - 1) / 3) * 10;
                             count += 4;
                             break;
                         case 2:
-                            count += ((blocklength - 2) / 3) * 10;
+                            count += ((blockLength(i, inputMode, inputLength) - 2) / 3) * 10;
                             count += 7;
                             break;
                     }
@@ -1517,64 +1401,71 @@ static int getBinaryLength(const int version, char inputMode[], const unsigned i
         }
     }
 
-    if (debug & ZINT_DEBUG_PRINT) {
-        printf("Estimated Binary Length: %d (version %d, eci %d, gs1 %d)\n", count, version, eci, gs1);
-    }
-
     return count;
 }
 
-INTERNAL int qr_code(struct zint_symbol *symbol, const unsigned char source[], size_t length) {
+int qr_code(struct zint_symbol *symbol, const unsigned char source[], size_t length) {
     int i, j, est_binlen;
-    int ecc_level, autosize, version, max_cw, target_codewords, blocks, size;
+    int ecc_level, autosize, version, max_cw, target_binlen, blocks, size;
     int bitmask, gs1;
-    int full_multibyte;
     int canShrink;
 
 #ifndef _MSC_VER
-    unsigned int jisdata[length + 1];
+    int utfdata[length + 1];
+    int jisdata[length + 1];
     char mode[length + 1];
 #else
-    unsigned char* datastream;
-    unsigned char* fullstream;
+    int* datastream;
+    int* fullstream;
     unsigned char* grid;
-    unsigned int* jisdata = (unsigned int *) _alloca((length + 1) * sizeof (unsigned int));
+    int* utfdata = (int *) _alloca((length + 1) * sizeof (int));
+    int* jisdata = (int *) _alloca((length + 1) * sizeof (int));
     char* mode = (char *) _alloca(length + 1);
 #endif
 
-    gs1 = ((symbol->input_mode & 0x07) == GS1_MODE);
-    full_multibyte = symbol->option_3 == ZINT_FULL_MULTIBYTE; /* If set use Kanji mode in DATA_MODE or for single-byte Latin */
+    gs1 = (symbol->input_mode == GS1_MODE);
 
-    if ((symbol->input_mode & 0x07) == DATA_MODE) {
-        sjis_cpy(source, &length, jisdata, full_multibyte);
+    if ((symbol->input_mode == DATA_MODE) || (symbol->eci != 0)) {
+        for (i = 0; i < length; i++) {
+            jisdata[i] = (int) source[i];
+        }
     } else {
-        int done = 0;
-        if (symbol->eci != 20) { /* Unless ECI 20 (Shift JIS) */
-            /* Try single byte (Latin) conversion first */
-            int error_number = sjis_utf8tosb(symbol->eci && symbol->eci <= 899 ? symbol->eci : 3, source, &length, jisdata, full_multibyte);
-            if (error_number == 0) {
-                done = 1;
-            } else if (symbol->eci && symbol->eci <= 899) {
-                strcpy(symbol->errtxt, "575: Invalid characters in input data");
-                return error_number;
-            }
+        /* Convert Unicode input to Shift-JIS */
+        int error_number = utf8toutf16(symbol, source, utfdata, &length);
+        if (error_number != 0) {
+            return error_number;
         }
-        if (!done) {
-            /* Try Shift-JIS */
-            int error_number = sjis_utf8tomb(symbol, source, &length, jisdata);
-            if (error_number != 0) {
-                return error_number;
+
+        for (i = 0; i < length; i++) {
+            if (utfdata[i] <= 0xff) {
+                jisdata[i] = utfdata[i];
+            } else {
+                int glyph = 0;
+                j = 0;
+                do {
+                    if (sjis_lookup[j * 2] == utfdata[i]) {
+                        glyph = sjis_lookup[(j * 2) + 1];
+                    }
+                    j++;
+                } while ((j < 6843) && (glyph == 0));
+                if (glyph == 0) {
+                    strcpy(symbol->errtxt, "560: Invalid character in input data");
+                    return ZINT_ERROR_INVALID_DATA;
+                }
+                jisdata[i] = glyph;
             }
         }
     }
 
-    est_binlen = getBinaryLength(40, mode, jisdata, length, gs1, symbol->eci, symbol->debug);
+    define_mode(mode, jisdata, length, gs1);
+    est_binlen = getBinaryLength(40, mode, jisdata, length, gs1, symbol->eci);
 
     ecc_level = LEVEL_L;
     max_cw = 2956;
     if ((symbol->option_1 >= 1) && (symbol->option_1 <= 4)) {
         switch (symbol->option_1) {
-            case 1:
+            case 1: ecc_level = LEVEL_L;
+                max_cw = 2956;
                 break;
             case 2: ecc_level = LEVEL_M;
                 max_cw = 2334;
@@ -1618,9 +1509,6 @@ INTERNAL int qr_code(struct zint_symbol *symbol, const unsigned char source[], s
                 break;
         }
     }
-    if (autosize != 40) {
-        est_binlen = getBinaryLength(autosize, mode, jisdata, length, gs1, symbol->eci, symbol->debug);
-    }
 
     // Now see if the optimised binary will fit in a smaller symbol.
     canShrink = 1;
@@ -1629,7 +1517,7 @@ INTERNAL int qr_code(struct zint_symbol *symbol, const unsigned char source[], s
         if (autosize == 1) {
             canShrink = 0;
         } else {
-            est_binlen = getBinaryLength(autosize - 1, mode, jisdata, length, gs1, symbol->eci, symbol->debug);
+            est_binlen = getBinaryLength(autosize - 1, mode, jisdata, length, gs1, symbol->eci);
 
             switch (ecc_level) {
                 case LEVEL_L:
@@ -1659,7 +1547,7 @@ INTERNAL int qr_code(struct zint_symbol *symbol, const unsigned char source[], s
                 autosize--;
             } else {
                 // Data did not fit in the smaller symbol, revert to original size
-                est_binlen = getBinaryLength(autosize, mode, jisdata, length, gs1, symbol->eci, symbol->debug);
+                est_binlen = getBinaryLength(autosize, mode, jisdata, length, gs1, symbol->eci);
             }
         }
     } while (canShrink == 1);
@@ -1673,7 +1561,7 @@ INTERNAL int qr_code(struct zint_symbol *symbol, const unsigned char source[], s
          */
         if (symbol->option_2 > version) {
             version = symbol->option_2;
-            est_binlen = getBinaryLength(symbol->option_2, mode, jisdata, length, gs1, symbol->eci, symbol->debug);
+            est_binlen = getBinaryLength(symbol->option_2, mode, jisdata, length, gs1, symbol->eci);
         }
 
         if (symbol->option_2 < version) {
@@ -1681,47 +1569,42 @@ INTERNAL int qr_code(struct zint_symbol *symbol, const unsigned char source[], s
             return ZINT_ERROR_TOO_LONG;
         }
     }
-
-    /* Ensure maxium error correction capacity unless user-specified */
-    if (symbol->option_1 == -1 || symbol->option_1 != ecc_level) {
-        if (est_binlen <= qr_data_codewords_M[version - 1] * 8) {
-            ecc_level = LEVEL_M;
-        }
-        if (est_binlen <= qr_data_codewords_Q[version - 1] * 8) {
-            ecc_level = LEVEL_Q;
-        }
-        if (est_binlen <= qr_data_codewords_H[version - 1] * 8) {
-            ecc_level = LEVEL_H;
-        }
+    
+    /* Ensure maxium error correction capacity */
+    if (est_binlen <= qr_data_codewords_M[version - 1] * 8) {
+        ecc_level = LEVEL_M;
+    }
+    if (est_binlen <= qr_data_codewords_Q[version - 1] * 8) {
+        ecc_level = LEVEL_Q;
+    }
+    if (est_binlen <= qr_data_codewords_H[version - 1] * 8) {
+        ecc_level = LEVEL_H;
     }
 
-    target_codewords = qr_data_codewords_L[version - 1];
+    target_binlen = qr_data_codewords_L[version - 1];
     blocks = qr_blocks_L[version - 1];
     switch (ecc_level) {
-        case LEVEL_M: target_codewords = qr_data_codewords_M[version - 1];
+        case LEVEL_M: target_binlen = qr_data_codewords_M[version - 1];
             blocks = qr_blocks_M[version - 1];
             break;
-        case LEVEL_Q: target_codewords = qr_data_codewords_Q[version - 1];
+        case LEVEL_Q: target_binlen = qr_data_codewords_Q[version - 1];
             blocks = qr_blocks_Q[version - 1];
             break;
-        case LEVEL_H: target_codewords = qr_data_codewords_H[version - 1];
+        case LEVEL_H: target_binlen = qr_data_codewords_H[version - 1];
             blocks = qr_blocks_H[version - 1];
             break;
     }
 
 #ifndef _MSC_VER
-    unsigned char datastream[target_codewords + 1];
-    unsigned char fullstream[qr_total_codewords[version - 1] + 1];
+    int datastream[target_binlen + 1];
+    int fullstream[qr_total_codewords[version - 1] + 1];
 #else
-    datastream = (unsigned char *) _alloca(target_codewords + 1);
-    fullstream = (unsigned char *) _alloca(qr_total_codewords[version - 1] + 1);
+    datastream = (int *) _alloca((target_binlen + 1) * sizeof (int));
+    fullstream = (int *) _alloca((qr_total_codewords[version - 1] + 1) * sizeof (int));
 #endif
 
-    qr_binary(datastream, version, target_codewords, mode, jisdata, length, gs1, symbol->eci, est_binlen, symbol->debug);
-#ifdef ZINT_TEST
-    if (symbol->debug & ZINT_DEBUG_TEST) debug_test_codeword_dump(symbol, datastream, target_codewords);
-#endif
-    add_ecc(fullstream, datastream, version, target_codewords, blocks, symbol->debug);
+    qr_binary(datastream, version, target_binlen, mode, jisdata, length, gs1, symbol->eci, est_binlen, symbol->debug);
+    add_ecc(fullstream, datastream, version, target_binlen, blocks);
 
     size = qr_sizes[version - 1];
 #ifndef _MSC_VER
@@ -1737,7 +1620,7 @@ INTERNAL int qr_code(struct zint_symbol *symbol, const unsigned char source[], s
     }
 
     setup_grid(grid, size, version);
-    populate_grid(grid, size, size, fullstream, qr_total_codewords[version - 1]);
+    populate_grid(grid, size, fullstream, qr_total_codewords[version - 1]);
 
     if (version >= 7) {
         add_version_info(grid, size, version);
@@ -1747,6 +1630,8 @@ INTERNAL int qr_code(struct zint_symbol *symbol, const unsigned char source[], s
 
     add_format_info(grid, size, ecc_level, bitmask);
 
+
+
     symbol->width = size;
     symbol->rows = size;
 
@@ -1762,87 +1647,435 @@ INTERNAL int qr_code(struct zint_symbol *symbol, const unsigned char source[], s
     return 0;
 }
 
-static void micro_qr_m1(struct zint_symbol *symbol, char binary_data[]) {
-    int i, j, latch;
-    int bits_total, bits_left;
-    int data_codewords, ecc_codewords;
-    unsigned char data_blocks[4], ecc_blocks[3];
+/* NOTE: From this point forward concerns Micro QR Code only */
 
-    bits_total = 20;
-    latch = 0;
+static int micro_qr_intermediate(char binary[], const int jisdata[], const char mode[], const size_t length, int *kanji_used, int *alphanum_used, int *byte_used,const int debug) {
+    /* Convert input data to an "intermediate stage" where data is binary encoded but
+       control information is not */
+    int position = 0;
+    int i;
+    char buffer[2];
 
-    /* Add terminator */
-    bits_left = bits_total - (int)strlen(binary_data);
-    if (bits_left <= 3) {
-        for (i = 0; i < bits_left; i++) {
-            strcat(binary_data, "0");
-        }
-        latch = 1;
-    } else {
-        strcat(binary_data, "000");
-    }
+    strcpy(binary, "");
 
-    if (latch == 0) {
-        /* Manage last (4-bit) block */
-        bits_left = bits_total - (int)strlen(binary_data);
-        if (bits_left <= 4) {
-            for (i = 0; i < bits_left; i++) {
-                strcat(binary_data, "0");
-            }
-            latch = 1;
+    if (debug) {
+        for (i = 0; i < length; i++) {
+            printf("%c", mode[i]);
         }
+        printf("\n");
     }
 
-    if (latch == 0) {
-        /* Complete current byte */
-        int remainder = 8 - (strlen(binary_data) % 8);
-        if (remainder == 8) {
-            remainder = 0;
-        }
-        for (i = 0; i < remainder; i++) {
-            strcat(binary_data, "0");
+    do {
+        char data_block;
+        int short_data_block_length = 0;
+        if (strlen(binary) > 128) {
+            return ZINT_ERROR_TOO_LONG;
         }
 
-        /* Add padding */
-        bits_left = bits_total - (int)strlen(binary_data);
-        if (bits_left > 4) {
-            remainder = (bits_left - 4) / 8;
-            for (i = 0; i < remainder; i++) {
-                strcat(binary_data, (i & 1) ? "00010001" : "11101100");
-            }
-        }
-        bin_append(0, 4, binary_data);
-    }
+        data_block = mode[position];
+        do {
+            short_data_block_length++;
+        } while (((short_data_block_length + position) < length) && (mode[position + short_data_block_length] == data_block));
 
-    data_codewords = 3;
-    ecc_codewords = 2;
+        switch (data_block) {
+            case 'K':
+                /* Kanji mode */
+                /* Mode indicator */
+                strcat(binary, "K");
+                *kanji_used = 1;
 
-    /* Copy data into codewords */
-    for (i = 0; i < (data_codewords - 1); i++) {
-        data_blocks[i] = 0;
-        for (j = 0; j < 8; j++) {
-            if (binary_data[(i * 8) + j] == '1') {
-                data_blocks[i] += 0x80 >> j;
-            }
-        }
-    }
-    data_blocks[2] = 0;
-    for (j = 0; j < 4; j++) {
-        if (binary_data[16 + j] == '1') {
-            data_blocks[2] += 0x80 >> j;
-        }
-    }
-#ifdef ZINT_TEST
-    if (symbol->debug & ZINT_DEBUG_TEST) debug_test_codeword_dump(symbol, data_blocks, data_codewords);
-#else
-    (void)symbol; /* Unused */
-#endif
+                /* Character count indicator */
+                buffer[0] = short_data_block_length;
+                buffer[1] = '\0';
+                strcat(binary, buffer);
 
-    /* Calculate Reed-Solomon error codewords */
-    rs_init_gf(0x11d);
-    rs_init_code(ecc_codewords, 0);
-    rs_encode(data_codewords, data_blocks, ecc_blocks);
-    rs_free();
+                if (debug) {
+                    printf("Kanji block (length %d)\n\t", short_data_block_length);
+                }
+
+                /* Character representation */
+                for (i = 0; i < short_data_block_length; i++) {
+                    int jis = jisdata[position + i];
+                    int prod;
+
+                    if (jis >= 0x8140 && jis <= 0x9ffc)
+                        jis -= 0x8140;
+
+                    else if (jis >= 0xe040 && jis <= 0xebbf)
+                        jis -= 0xc140;
+
+                    prod = ((jis >> 8) * 0xc0) + (jis & 0xff);
+
+                    bin_append(prod, 13, binary);
+
+                    if (debug) {
+                        printf("0x%4X ", prod);
+                    }
+
+                    if (strlen(binary) > 128) {
+                        return ZINT_ERROR_TOO_LONG;
+                    }
+                }
+
+                if (debug) {
+                    printf("\n");
+                }
+
+                break;
+            case 'B':
+                /* Byte mode */
+                /* Mode indicator */
+                strcat(binary, "B");
+                *byte_used = 1;
+
+                /* Character count indicator */
+                buffer[0] = short_data_block_length;
+                buffer[1] = '\0';
+                strcat(binary, buffer);
+
+                if (debug) {
+                    printf("Byte block (length %d)\n\t", short_data_block_length);
+                }
+
+                /* Character representation */
+                for (i = 0; i < short_data_block_length; i++) {
+                    int byte = jisdata[position + i];
+
+                    bin_append(byte, 8, binary);
+
+                    if (debug) {
+                        printf("0x%4X ", byte);
+                    }
+
+                    if (strlen(binary) > 128) {
+                        return ZINT_ERROR_TOO_LONG;
+                    }
+                }
+
+                if (debug) {
+                    printf("\n");
+                }
+
+                break;
+            case 'A':
+                /* Alphanumeric mode */
+                /* Mode indicator */
+                strcat(binary, "A");
+                *alphanum_used = 1;
+
+                /* Character count indicator */
+                buffer[0] = short_data_block_length;
+                buffer[1] = '\0';
+                strcat(binary, buffer);
+
+                if (debug) {
+                    printf("Alpha block (length %d)\n\t", short_data_block_length);
+                }
+
+                /* Character representation */
+                i = 0;
+                while (i < short_data_block_length) {
+                    int count;
+                    int first = 0, prod;
+
+                    first = posn(RHODIUM, (char) jisdata[position + i]);
+                    count = 1;
+                    prod = first;
+
+                    if (i + 1 < short_data_block_length && mode[position + i + 1] == 'A') {
+                        int second = posn(RHODIUM, (char) jisdata[position + i + 1]);
+                        count = 2;
+                        prod = (first * 45) + second;
+                    }
+
+                    bin_append(prod, 1 + (5 * count), binary);
+
+                    if (debug) {
+                        printf("0x%4X ", prod);
+                    }
+
+                    if (strlen(binary) > 128) {
+                        return ZINT_ERROR_TOO_LONG;
+                    }
+
+                    i += 2;
+                };
+
+                if (debug) {
+                    printf("\n");
+                }
+
+                break;
+            case 'N':
+                /* Numeric mode */
+                /* Mode indicator */
+                strcat(binary, "N");
+
+                /* Character count indicator */
+                buffer[0] = short_data_block_length;
+                buffer[1] = '\0';
+                strcat(binary, buffer);
+
+                if (debug) {
+                    printf("Number block (length %d)\n\t", short_data_block_length);
+                }
+
+                /* Character representation */
+                i = 0;
+                while (i < short_data_block_length) {
+                    int count;
+                    int first = 0, prod;
+
+                    first = posn(NEON, (char) jisdata[position + i]);
+                    count = 1;
+                    prod = first;
+
+                    if (i + 1 < short_data_block_length && mode[position + i + 1] == 'N') {
+                        int second = posn(NEON, (char) jisdata[position + i + 1]);
+                        count = 2;
+                        prod = (prod * 10) + second;
+                    }
+
+                    if (i + 2 < short_data_block_length && mode[position + i + 2] == 'N') {
+                        int third = posn(NEON, (char) jisdata[position + i + 2]);
+                        count = 3;
+                        prod = (prod * 10) + third;
+                    }
+
+                    bin_append(prod, 1 + (3 * count), binary);
+
+                    if (debug) {
+                        printf("0x%4X (%d)", prod, prod);
+                    }
+
+                    if (strlen(binary) > 128) {
+                        return ZINT_ERROR_TOO_LONG;
+                    }
+
+                    i += 3;
+                };
+
+                if (debug) {
+                    printf("\n");
+                }
+
+                break;
+        }
+
+        position += short_data_block_length;
+    } while (position < length - 1);
+
+    return 0;
+}
+
+static void get_bitlength(int count[],const char stream[]) {
+    size_t length;
+    int    i;
+
+    length = strlen(stream);
+
+    for (i = 0; i < 4; i++) {
+        count[i] = 0;
+    }
+
+    i = 0;
+    do {
+        if ((stream[i] == '0') || (stream[i] == '1')) {
+            count[0]++;
+            count[1]++;
+            count[2]++;
+            count[3]++;
+            i++;
+        } else {
+            switch (stream[i]) {
+                case 'K':
+                    count[2] += 5;
+                    count[3] += 7;
+                    i += 2;
+                    break;
+                case 'B':
+                    count[2] += 6;
+                    count[3] += 8;
+                    i += 2;
+                    break;
+                case 'A':
+                    count[1] += 4;
+                    count[2] += 6;
+                    count[3] += 8;
+                    i += 2;
+                    break;
+                case 'N':
+                    count[0] += 3;
+                    count[1] += 5;
+                    count[2] += 7;
+                    count[3] += 9;
+                    i += 2;
+                    break;
+            }
+        }
+    } while (i < length);
+}
+
+static void microqr_expand_binary(const char binary_stream[], char full_stream[],const int version) {
+    int    i;
+    size_t length;
+
+    length = strlen(binary_stream);
+
+    i = 0;
+    do {
+        switch (binary_stream[i]) {
+            case '1': strcat(full_stream, "1");
+                i++;
+                break;
+            case '0': strcat(full_stream, "0");
+                i++;
+                break;
+            case 'N':
+                /* Numeric Mode */
+                /* Mode indicator */
+                switch (version) {
+                    case 1: strcat(full_stream, "0");
+                        break;
+                    case 2: strcat(full_stream, "00");
+                        break;
+                    case 3: strcat(full_stream, "000");
+                        break;
+                }
+
+                /* Character count indicator */
+                bin_append(binary_stream[i + 1], 3 + version, full_stream); /* version = 0..3 */
+
+                i += 2;
+                break;
+            case 'A':
+                /* Alphanumeric Mode */
+                /* Mode indicator */
+                switch (version) {
+                    case 1: strcat(full_stream, "1");
+                        break;
+                    case 2: strcat(full_stream, "01");
+                        break;
+                    case 3: strcat(full_stream, "001");
+                        break;
+                }
+
+                /* Character count indicator */
+                bin_append(binary_stream[i + 1], 2 + version, full_stream); /* version = 1..3 */
+
+                i += 2;
+                break;
+            case 'B':
+                /* Byte Mode */
+                /* Mode indicator */
+                switch (version) {
+                    case 2: strcat(full_stream, "10");
+                        break;
+                    case 3: strcat(full_stream, "010");
+                        break;
+                }
+
+                /* Character count indicator */
+                bin_append(binary_stream[i + 1], 2 + version, full_stream); /* version = 2..3 */
+
+                i += 2;
+                break;
+            case 'K':
+                /* Kanji Mode */
+                /* Mode indicator */
+                switch (version) {
+                    case 2: strcat(full_stream, "11");
+                        break;
+                    case 3: strcat(full_stream, "011");
+                        break;
+                }
+
+                /* Character count indicator */
+                bin_append(binary_stream[i + 1], 1 + version, full_stream); /* version = 2..3 */
+
+                i += 2;
+                break;
+        }
+
+    } while (i < length);
+}
+
+static void micro_qr_m1(char binary_data[]) {
+    int i, j, latch;
+    int bits_total, bits_left;
+    int data_codewords, ecc_codewords;
+    unsigned char data_blocks[4], ecc_blocks[3];
+
+    bits_total = 20;
+    latch = 0;
+
+    /* Add terminator */
+    bits_left = bits_total - (int)strlen(binary_data);
+    if (bits_left <= 3) {
+        for (i = 0; i < bits_left; i++) {
+            strcat(binary_data, "0");
+        }
+        latch = 1;
+    } else {
+        strcat(binary_data, "000");
+    }
+
+    if (latch == 0) {
+        /* Manage last (4-bit) block */
+        bits_left = bits_total - (int)strlen(binary_data);
+        if (bits_left <= 4) {
+            for (i = 0; i < bits_left; i++) {
+                strcat(binary_data, "0");
+            }
+            latch = 1;
+        }
+    }
+
+    if (latch == 0) {
+        /* Complete current byte */
+        int remainder = 8 - (strlen(binary_data) % 8);
+        if (remainder == 8) {
+            remainder = 0;
+        }
+        for (i = 0; i < remainder; i++) {
+            strcat(binary_data, "0");
+        }
+
+        /* Add padding */
+        bits_left = bits_total - (int)strlen(binary_data);
+        if (bits_left > 4) {
+            remainder = (bits_left - 4) / 8;
+            for (i = 0; i < remainder; i++) {
+                strcat(binary_data, (i & 1) ? "00010001" : "11101100");
+            }
+        }
+        bin_append(0, 4, binary_data);
+    }
+
+    data_codewords = 3;
+    ecc_codewords = 2;
+
+    /* Copy data into codewords */
+    for (i = 0; i < (data_codewords - 1); i++) {
+        data_blocks[i] = 0;
+        for (j = 0; j < 8; j++) {
+            if (binary_data[(i * 8) + j] == '1') {
+                data_blocks[i] += 0x80 >> j;
+            }
+        }
+    }
+    data_blocks[2] = 0;
+    for (j = 0; j < 4; j++) {
+        if (binary_data[16 + j] == '1') {
+            data_blocks[2] += 0x80 >> j;
+        }
+    }
+
+    /* Calculate Reed-Solomon error codewords */
+    rs_init_gf(0x11d);
+    rs_init_code(ecc_codewords, 0);
+    rs_encode(data_codewords, data_blocks, ecc_blocks);
+    rs_free();
 
     /* Add Reed-Solomon codewords to binary data */
     for (i = 0; i < ecc_codewords; i++) {
@@ -1850,7 +2083,7 @@ static void micro_qr_m1(struct zint_symbol *symbol, char binary_data[]) {
     }
 }
 
-static void micro_qr_m2(struct zint_symbol *symbol, char binary_data[], const int ecc_mode) {
+static void micro_qr_m2(char binary_data[],const int ecc_mode) {
     int i, j, latch;
     int bits_total=0, bits_left;
     int data_codewords=0, ecc_codewords=0;
@@ -1915,11 +2148,6 @@ static void micro_qr_m2(struct zint_symbol *symbol, char binary_data[], const in
             }
         }
     }
-#ifdef ZINT_TEST
-    if (symbol->debug & ZINT_DEBUG_TEST) debug_test_codeword_dump(symbol, data_blocks, data_codewords);
-#else
-    (void)symbol; /* Unused */
-#endif
 
     /* Calculate Reed-Solomon error codewords */
     rs_init_gf(0x11d);
@@ -1935,7 +2163,7 @@ static void micro_qr_m2(struct zint_symbol *symbol, char binary_data[], const in
     return;
 }
 
-static void micro_qr_m3(struct zint_symbol *symbol, char binary_data[], const int ecc_mode) {
+static void micro_qr_m3(char binary_data[],const int ecc_mode) {
     int i, j, latch;
     int bits_total=0, bits_left;
     int data_codewords=0, ecc_codewords=0;
@@ -2032,11 +2260,6 @@ static void micro_qr_m3(struct zint_symbol *symbol, char binary_data[], const in
             }
         }
     }
-#ifdef ZINT_TEST
-    if (symbol->debug & ZINT_DEBUG_TEST) debug_test_codeword_dump(symbol, data_blocks, data_codewords);
-#else
-    (void)symbol; /* Unused */
-#endif
 
     /* Calculate Reed-Solomon error codewords */
     rs_init_gf(0x11d);
@@ -2052,7 +2275,7 @@ static void micro_qr_m3(struct zint_symbol *symbol, char binary_data[], const in
     return;
 }
 
-static void micro_qr_m4(struct zint_symbol *symbol, char binary_data[], const int ecc_mode) {
+static void micro_qr_m4(char binary_data[],const int ecc_mode) {
     int i, j, latch;
     int bits_total=0, bits_left;
     int data_codewords=0, ecc_codewords=0;
@@ -2124,11 +2347,6 @@ static void micro_qr_m4(struct zint_symbol *symbol, char binary_data[], const in
             }
         }
     }
-#ifdef ZINT_TEST
-    if (symbol->debug & ZINT_DEBUG_TEST) debug_test_codeword_dump(symbol, data_blocks, data_codewords);
-#else
-    (void)symbol; /* Unused */
-#endif
 
     /* Calculate Reed-Solomon error codewords */
     rs_init_gf(0x11d);
@@ -2180,8 +2398,8 @@ static void micro_setup_grid(unsigned char* grid,const int size) {
 static void micro_populate_grid(unsigned char* grid,const int size,const char full_stream[]) {
     int direction = 1; /* up */
     int row = 0; /* right hand side */
-    size_t n, i;
-    int y;
+    size_t n;
+    int i, y;
 
     n = strlen(full_stream);
     y = size - 1;
@@ -2345,18 +2563,20 @@ static int micro_apply_bitmask(unsigned char *grid,const int size) {
     return best_pattern;
 }
 
-INTERNAL int microqr(struct zint_symbol *symbol, const unsigned char source[], size_t length) {
-    size_t i, size, j;
+int microqr(struct zint_symbol *symbol, const unsigned char source[], size_t length) {
+    size_t i;
+    int    j, size;
+    char binary_stream[200];
     char full_stream[200];
-    int full_multibyte;
+    int utfdata[40];
 
-    unsigned int jisdata[40];
+    int jisdata[40];
     char mode[40];
-    int alpha_used = 0, byte_or_kanji_used = 0;
+    int error_number, kanji_used = 0, alphanum_used = 0, byte_used = 0;
     int version_valid[4];
     int binary_count[4];
     int ecc_level, autoversion, version;
-    int bitmask, format, format_full;
+    int n_count, a_count, bitmask, format, format_full;
 #ifdef _MSC_VER
     unsigned char* grid;
 #endif
@@ -2386,61 +2606,90 @@ INTERNAL int microqr(struct zint_symbol *symbol, const unsigned char source[], s
         ecc_level = symbol->option_1;
     }
 
-    full_multibyte = symbol->option_3 == ZINT_FULL_MULTIBYTE; /* If set use Kanji mode in DATA_MODE or for single-byte Latin */
+    for (i = 0; i < 4; i++) {
+        version_valid[i] = 1;
+    }
 
-    if ((symbol->input_mode & 0x07) == DATA_MODE) {
-        sjis_cpy(source, &length, jisdata, full_multibyte);
+    if (symbol->input_mode == DATA_MODE) {
+        for (i = 0; i < length; i++) {
+            jisdata[i] = (int) source[i];
+        }
     } else {
-        /* Try ISO 8859-1 conversion first */
-        int error_number = sjis_utf8tosb(3, source, &length, jisdata, full_multibyte);
+        /* Convert Unicode input to Shift-JIS */
+        error_number = utf8toutf16(symbol, source, utfdata, &length);
         if (error_number != 0) {
-            /* Try Shift-JIS */
-            error_number = sjis_utf8tomb(symbol, source, &length, jisdata);
-            if (error_number != 0) {
-                return error_number;
-            }
+            return error_number;
         }
-    }
 
-    /* Determine if alpha (excluding numerics), byte or kanji used */
-    for (i = 0; i < length && (alpha_used == 0 || byte_or_kanji_used == 0); i++) {
-        if (jisdata[i] < '0' || jisdata[i] > '9') {
-            if (is_alpha(jisdata[i], 0 /*gs1*/)) {
-                alpha_used = 1;
+        for (i = 0; i < length; i++) {
+            if (utfdata[i] <= 0xff) {
+                jisdata[i] = utfdata[i];
             } else {
-                byte_or_kanji_used = 1;
+                int glyph = 0;
+                j = 0;
+                do {
+                    if (sjis_lookup[j * 2] == utfdata[i]) {
+                        glyph = sjis_lookup[(j * 2) + 1];
+                    }
+                    j++;
+                } while ((j < 6843) && (glyph == 0));
+                if (glyph == 0) {
+                    strcpy(symbol->errtxt, "563: Invalid character in input data");
+                    return ZINT_ERROR_INVALID_DATA;
+                }
+                jisdata[i] = glyph;
             }
         }
     }
 
-    for (i = 0; i < 4; i++) {
-        version_valid[i] = 1;
+    define_mode(mode, jisdata, length, 0);
+
+    n_count = 0;
+    a_count = 0;
+    for (i = 0; i < length; i++) {
+        if ((jisdata[i] >= '0') && (jisdata[i] <= '9')) {
+            n_count++;
+        }
+        if (in_alpha(jisdata[i])) {
+            a_count++;
+        }
     }
 
-    /* Eliminate possible versions depending on type of content */
-    if (byte_or_kanji_used) {
-        version_valid[0] = 0;
-        version_valid[1] = 0;
-    } else if (alpha_used) {
-        version_valid[0] = 0;
+    if (a_count == length) {
+        /* All data can be encoded in Alphanumeric mode */
+        for (i = 0; i < length; i++) {
+            mode[i] = 'A';
+        }
     }
 
-    /* Eliminate possible versions depending on error correction level specified */
-    if (ecc_level == LEVEL_Q) {
+    if (n_count == length) {
+        /* All data can be encoded in Numeric mode */
+        for (i = 0; i < length; i++) {
+            mode[i] = 'N';
+        }
+    }
+
+    error_number = micro_qr_intermediate(binary_stream, jisdata, mode, length, &kanji_used, &alphanum_used, &byte_used, symbol->debug);
+    if (error_number != 0) {
+        strcpy(symbol->errtxt, "564: Input data too long");
+        return error_number;
+    }
+
+    get_bitlength(binary_count, binary_stream);
+
+    /* Eliminate possivle versions depending on type of content */
+    if (byte_used) {
         version_valid[0] = 0;
         version_valid[1] = 0;
-        version_valid[2] = 0;
-    } else if (ecc_level == LEVEL_M) {
+    }
+
+    if (alphanum_used) {
         version_valid[0] = 0;
     }
 
-    /* Determine length of binary data */
-    for (i = 0; i < 4; i++) {
-        if (version_valid[i]) {
-            binary_count[i] = getBinaryLength(MICROQR_VERSION + i, mode, jisdata, length, 0 /*gs1*/, 0 /*eci*/, symbol->debug);
-        } else {
-            binary_count[i] = 128 + 1;
-        }
+    if (kanji_used) {
+        version_valid[0] = 0;
+        version_valid[1] = 0;
     }
 
     /* Eliminate possible versions depending on length of binary data */
@@ -2458,13 +2707,19 @@ INTERNAL int microqr(struct zint_symbol *symbol, const unsigned char source[], s
         return ZINT_ERROR_TOO_LONG;
     }
 
-    /* Eliminate possible versions depending on binary length and error correction level specified */
+    /* Eliminate possible versions depending on error correction level specified */
     if (ecc_level == LEVEL_Q) {
+        version_valid[0] = 0;
+        version_valid[1] = 0;
+        version_valid[2] = 0;
         if (binary_count[3] > 80) {
             strcpy(symbol->errtxt, "567: Input data too long");
             return ZINT_ERROR_TOO_LONG;
         }
-    } else if (ecc_level == LEVEL_M) {
+    }
+
+    if (ecc_level == LEVEL_M) {
+        version_valid[0] = 0;
         if (binary_count[1] > 32) {
             version_valid[1] = 0;
         }
@@ -2499,38 +2754,39 @@ INTERNAL int microqr(struct zint_symbol *symbol, const unsigned char source[], s
         }
     }
 
-    /* If there is enough unused space then increase the error correction level, unless user-specified */
-    if (symbol->option_1 == -1 || symbol->option_1 != ecc_level) {
-        if (version == 3) {
-            if (binary_count[3] <= 112) {
-                ecc_level = LEVEL_M;
-            }
-            if (binary_count[3] <= 80) {
-                ecc_level = LEVEL_Q;
-            }
-        } else if (version == 2) {
-            if (binary_count[2] <= 68) {
-                ecc_level = LEVEL_M;
-            }
-        } else if (version == 1) {
-            if (binary_count[1] <= 32) {
-                ecc_level = LEVEL_M;
-            }
+    /* If there is enough unused space then increase the error correction level */
+    if (version == 3) {
+        if (binary_count[3] <= 112) {
+            ecc_level = LEVEL_M;
+        }
+        if (binary_count[3] <= 80) {
+            ecc_level = LEVEL_Q;
         }
     }
 
-    qr_define_mode(mode, jisdata, length, 0 /*gs1*/, MICROQR_VERSION + version, symbol->debug);
+    if (version == 2) {
+        if (binary_count[2] <= 68) {
+            ecc_level = LEVEL_M;
+        }
+    }
 
-    qr_binary((unsigned char*)full_stream, MICROQR_VERSION + version, 0 /*target_codewords*/, mode, jisdata, length, 0 /*gs1*/, 0 /*eci*/, binary_count[version], symbol->debug);
+    if (version == 1) {
+        if (binary_count[1] <= 32) {
+            ecc_level = LEVEL_M;
+        }
+    }
+
+    strcpy(full_stream, "");
+    microqr_expand_binary(binary_stream, full_stream, version);
 
     switch (version) {
-        case 0: micro_qr_m1(symbol, full_stream);
+        case 0: micro_qr_m1(full_stream);
             break;
-        case 1: micro_qr_m2(symbol, full_stream, ecc_level);
+        case 1: micro_qr_m2(full_stream, ecc_level);
             break;
-        case 2: micro_qr_m3(symbol, full_stream, ecc_level);
+        case 2: micro_qr_m3(full_stream, ecc_level);
             break;
-        case 3: micro_qr_m4(symbol, full_stream, ecc_level);
+        case 3: micro_qr_m4(full_stream, ecc_level);
             break;
     }
 
@@ -2643,19 +2899,19 @@ INTERNAL int microqr(struct zint_symbol *symbol, const unsigned char source[], s
 }
 
 /* For UPNQR the symbol size and error correction capacity is fixed */
-INTERNAL int upnqr(struct zint_symbol *symbol, const unsigned char source[], size_t length) {
+int upnqr(struct zint_symbol *symbol, const unsigned char source[], size_t length) {
     int i, j, est_binlen;
-    int ecc_level, version, target_codewords, blocks, size;
+    int ecc_level, version, target_binlen, blocks, size;
     int bitmask, error_number;
 
 #ifndef _MSC_VER
-    unsigned int jisdata[length + 1];
+    int jisdata[length + 1];
     char mode[length + 1];
 #else
-    unsigned char* datastream;
-    unsigned char* fullstream;
+    int* datastream;
+    int* fullstream;
     unsigned char* grid;
-    unsigned int* jisdata = (unsigned int *) _alloca((length + 1) * sizeof (unsigned int));
+    int* jisdata = (int *) _alloca((length + 1) * sizeof (int));
     char* mode = (char *) _alloca(length + 1);
 #endif
 
@@ -2665,13 +2921,11 @@ INTERNAL int upnqr(struct zint_symbol *symbol, const unsigned char source[], siz
     unsigned char* preprocessed = (unsigned char*) _alloca(length + 1);
 #endif
 
-    symbol->eci = 4; /* Set before any processing */
-
-    switch (symbol->input_mode & 0x07) {
+    switch(symbol->input_mode) {
         case DATA_MODE:
             /* Input is already in ISO-8859-2 format */
-            for (i = 0; i < (int) length; i++) {
-                jisdata[i] = source[i];
+            for (i = 0; i < length; i++) {
+                jisdata[i] = (int) source[i];
                 mode[i] = 'B';
             }
             break;
@@ -2685,14 +2939,15 @@ INTERNAL int upnqr(struct zint_symbol *symbol, const unsigned char source[], siz
                 strcpy(symbol->errtxt, "572: Invalid characters in input data");
                 return error_number;
             }
-            for (i = 0; i < (int) length; i++) {
-                jisdata[i] = preprocessed[i];
+            for (i = 0; i < length; i++) {
+                jisdata[i] = (int) preprocessed[i];
                 mode[i] = 'B';
             }
             break;
     }
 
-    est_binlen = getBinaryLength(15, mode, jisdata, length, 0, symbol->eci, symbol->debug);
+    symbol->eci = 4;
+    est_binlen = getBinaryLength(15, mode, jisdata, length, 0, symbol->eci);
 
     ecc_level = LEVEL_M;
 
@@ -2703,21 +2958,19 @@ INTERNAL int upnqr(struct zint_symbol *symbol, const unsigned char source[], siz
 
     version = 15; // 77 x 77
 
-    target_codewords = qr_data_codewords_M[version - 1];
+    target_binlen = qr_data_codewords_M[version - 1];
     blocks = qr_blocks_M[version - 1];
+
 #ifndef _MSC_VER
-    unsigned char datastream[target_codewords + 1];
-    unsigned char fullstream[qr_total_codewords[version - 1] + 1];
+    int datastream[target_binlen + 1];
+    int fullstream[qr_total_codewords[version - 1] + 1];
 #else
-    datastream = (unsigned char *) _alloca(target_codewords + 1);
-    fullstream = (unsigned char *) _alloca(qr_total_codewords[version - 1] + 1);
+    datastream = (int *) _alloca((target_binlen + 1) * sizeof (int));
+    fullstream = (int *) _alloca((qr_total_codewords[version - 1] + 1) * sizeof (int));
 #endif
 
-    qr_binary(datastream, version, target_codewords, mode, jisdata, length, 0, symbol->eci, est_binlen, symbol->debug);
-#ifdef ZINT_TEST
-    if (symbol->debug & ZINT_DEBUG_TEST) debug_test_codeword_dump(symbol, datastream, target_codewords);
-#endif
-    add_ecc(fullstream, datastream, version, target_codewords, blocks, symbol->debug);
+    qr_binary(datastream, version, target_binlen, mode, jisdata, length, 0, symbol->eci, est_binlen, symbol->debug);
+    add_ecc(fullstream, datastream, version, target_binlen, blocks);
 
     size = qr_sizes[version - 1];
 #ifndef _MSC_VER
@@ -2733,7 +2986,7 @@ INTERNAL int upnqr(struct zint_symbol *symbol, const unsigned char source[], siz
     }
 
     setup_grid(grid, size, version);
-    populate_grid(grid, size, size, fullstream, qr_total_codewords[version - 1]);
+    populate_grid(grid, size, fullstream, qr_total_codewords[version - 1]);
 
     add_version_info(grid, size, version);
 
@@ -2756,352 +3009,4 @@ INTERNAL int upnqr(struct zint_symbol *symbol, const unsigned char source[], siz
     return 0;
 }
 
-static void setup_rmqr_grid(unsigned char* grid, const int h_size, const int v_size) {
-    int i, j;
-    char alignment[] = {0x1F, 0x11, 0x15, 0x11, 0x1F};
-    int h_version, finder_position;
-
-    /* Add timing patterns - top and bottom */
-    for (i = 0; i < h_size; i++) {
-        if (i % 2) {
-            grid[i] = 0x20;
-            grid[((v_size - 1) * h_size) + i] = 0x20;
-        } else {
-            grid[i] = 0x21;
-            grid[((v_size - 1) * h_size) + i] = 0x21;
-        }
-    }
-
-    /* Add timing patterns - left and right */
-    for (i = 0; i < v_size; i++) {
-        if (i % 2) {
-            grid[i * h_size] = 0x20;
-            grid[(i * h_size) + (h_size - 1)] = 0x20;
-        } else {
-            grid[i * h_size] = 0x21;
-            grid[(i * h_size) + (h_size - 1)] = 0x21;
-        }
-    }
-
-    /* Add finder pattern */
-    place_finder(grid, h_size, 0, 0); // This works because finder is always top left
-
-    /* Add finder sub-pattern to bottom right */
-    for (i = 0; i < 5; i++) {
-        for (j = 0; j < 5; j++) {
-            if (alignment[j] & 0x10 >> i) {
-                grid[((v_size - 5) * h_size) + (h_size * i) + (h_size - 5) + j] = 0x11;
-            } else {
-                grid[((v_size - 5) * h_size) + (h_size * i) + (h_size - 5) + j] = 0x10;
-            }
-        }
-    }
-
-    /* Add corner finder pattern - bottom left */
-    grid[(v_size - 2) * h_size] = 0x11;
-    grid[((v_size - 2) * h_size) + 1] = 0x10;
-    grid[((v_size - 1) * h_size) + 1] = 0x11;
-
-    /* Add corner finder pattern - top right */
-    grid[h_size - 2] = 0x11;
-    grid[(h_size * 2) - 2] = 0x10;
-    grid[(h_size * 2) - 1] = 0x11;
-
-    /* Add seperator */
-    for (i = 0; i < 7; i++) {
-        grid[(i * h_size) + 7] = 0x20;
-    }
-    if (v_size > 7) {
-        // Note for v_size = 9 this overrides the bottom right corner finder pattern
-        for(i = 0; i < 8; i++) {
-            grid[(7 * h_size) + i] = 0x20;
-        }
-    }
-
-    /* Add alignment patterns */
-    if (h_size > 27) {
-        for(i = 0; i < 5; i++) {
-            if (h_size == rmqr_width[i]) {
-                h_version = i;
-            }
-        }
-
-        for(i = 0; i < 4; i++) {
-            finder_position = rmqr_table_d1[(h_version * 4) + i];
-
-            if (finder_position != 0) {
-                for (j = 0; j < v_size; j++) {
-                    if (j % 2) {
-                        grid[(j * h_size) + finder_position] = 0x10;
-                    } else {
-                        grid[(j * h_size) + finder_position] = 0x11;
-                    }
-                }
-
-                // Top square
-                grid[h_size + finder_position - 1] = 0x11;
-                grid[(h_size * 2) + finder_position - 1] = 0x11;
-                grid[h_size + finder_position + 1] = 0x11;
-                grid[(h_size * 2) + finder_position + 1] = 0x11;
-
-                // Bottom square
-                grid[(h_size * (v_size - 3)) + finder_position - 1] = 0x11;
-                grid[(h_size * (v_size - 2)) + finder_position - 1] = 0x11;
-                grid[(h_size * (v_size - 3)) + finder_position + 1] = 0x11;
-                grid[(h_size * (v_size - 2)) + finder_position + 1] = 0x11;
-            }
-        }
-    }
-
-    /* Reserve space for format information */
-    for (i = 0; i < 5; i++) {
-        for (j = 0; j < 3; j++) {
-            grid[(h_size * (i + 1)) + j + 8] = 0x20;
-            grid[(h_size * (v_size - 6)) + (h_size * i) + j + (h_size - 8)] = 0x20;
-        }
-    }
-    grid[(h_size * 1) + 11] = 0x20;
-    grid[(h_size * 2) + 11] = 0x20;
-    grid[(h_size * 3) + 11] = 0x20;
-    grid[(h_size * (v_size - 6)) + (h_size - 5)] = 0x20;
-    grid[(h_size * (v_size - 6)) + (h_size - 4)] = 0x20;
-    grid[(h_size * (v_size - 6)) + (h_size - 3)] = 0x20;
-}
-
-/* rMQR according to 2018 draft standard */
-INTERNAL int rmqr(struct zint_symbol *symbol, const unsigned char source[], size_t length) {
-    int i, j, est_binlen;
-    int ecc_level, autosize, version, max_cw, target_codewords, blocks, h_size, v_size;
-    int gs1;
-    int full_multibyte;
-    int footprint, best_footprint, format_data;
-    unsigned int left_format_info, right_format_info;
-
-#ifndef _MSC_VER
-    unsigned int jisdata[length + 1];
-    char mode[length + 1];
-#else
-    unsigned char* datastream;
-    unsigned char* fullstream;
-    unsigned char* grid;
-    unsigned int* jisdata = (unsigned int *) _alloca((length + 1) * sizeof (unsigned int));
-    char* mode = (char *) _alloca(length + 1);
-#endif
-
-    gs1 = ((symbol->input_mode & 0x07) == GS1_MODE);
-    full_multibyte = symbol->option_3 == ZINT_FULL_MULTIBYTE; /* If set use Kanji mode in DATA_MODE or for single-byte Latin */
-
-    if ((symbol->input_mode & 0x07) == DATA_MODE) {
-        sjis_cpy(source, &length, jisdata, full_multibyte);
-    } else {
-        /* Try ISO 8859-1 conversion first */
-        int error_number = sjis_utf8tosb(3, source, &length, jisdata, full_multibyte);
-        if (error_number != 0) {
-            /* Try Shift-JIS */
-            error_number = sjis_utf8tomb(symbol, source, &length, jisdata);
-            if (error_number != 0) {
-                return error_number;
-            }
-        }
-    }
-
-    est_binlen = getBinaryLength(RMQR_VERSION + 31, mode, jisdata, length, gs1, 0 /*eci*/, symbol->debug);
-
-    ecc_level = LEVEL_M;
-    max_cw = 152;
-    if (symbol->option_1 == 1) {
-        strcpy(symbol->errtxt, "576: Error correction level L not available in rMQR");
-        return ZINT_ERROR_INVALID_OPTION;
-    }
-
-    if (symbol->option_1 == 3) {
-        strcpy(symbol->errtxt, "577: Error correction level Q not available in rMQR");
-        return ZINT_ERROR_INVALID_OPTION;
-    }
-
-    if (symbol->option_1 == 4) {
-        ecc_level = LEVEL_H;
-        max_cw = 76;
-    }
-
-    if (est_binlen > (8 * max_cw)) {
-        strcpy(symbol->errtxt, "578: Input too long for selected error correction level");
-        return ZINT_ERROR_TOO_LONG;
-    }
-
-    if ((symbol->option_2 < 0) || (symbol->option_2 > 38)) {
-        strcpy(symbol->errtxt, "579: Invalid rMQR symbol size");
-        return ZINT_ERROR_INVALID_OPTION;
-    }
-
-    version = 31; // Set default to keep compiler happy
-
-    if (symbol->option_2 == 0) {
-        // Automatic symbol size
-        autosize = 31;
-        best_footprint = rmqr_height[31] * rmqr_width[31];
-        for (version = 30; version >= 0; version--) {
-            est_binlen = getBinaryLength(RMQR_VERSION + version, mode, jisdata, length, gs1, 0 /*eci*/, symbol->debug);
-            footprint = rmqr_height[version] * rmqr_width[version];
-            if (ecc_level == LEVEL_M) {
-                if (8 * rmqr_data_codewords_M[version] >= est_binlen) {
-                    if (footprint < best_footprint) {
-                        autosize = version;
-                        best_footprint = footprint;
-                    }
-                }
-            } else {
-                if (8 * rmqr_data_codewords_H[version] >= est_binlen) {
-                    if (footprint < best_footprint) {
-                        autosize = version;
-                        best_footprint = footprint;
-                    }
-                }
-            }
-        }
-        version = autosize;
-        est_binlen = getBinaryLength(RMQR_VERSION + version, mode, jisdata, length, gs1, 0 /*eci*/, symbol->debug);
-    }
-
-    if ((symbol->option_2 >= 1) && (symbol->option_2 <= 32)) {
-        // User specified symbol size
-        version = symbol->option_2 - 1;
-        est_binlen = getBinaryLength(RMQR_VERSION + version, mode, jisdata, length, gs1, 0 /*eci*/, symbol->debug);
-    }
-
-    if (symbol->option_2 >= 33) {
-        // User has specified symbol height only
-        version = rmqr_fixed_height_upper_bound[symbol->option_2 - 32];
-        for(i = version - 1; i > rmqr_fixed_height_upper_bound[symbol->option_2 - 33]; i--) {
-            est_binlen = getBinaryLength(RMQR_VERSION + i, mode, jisdata, length, gs1, 0 /*eci*/, symbol->debug);
-            if (ecc_level == LEVEL_M) {
-                if (8 * rmqr_data_codewords_M[i] >= est_binlen) {
-                    version = i;
-                }
-            } else {
-                if (8 * rmqr_data_codewords_H[i] >= est_binlen) {
-                    version = i;
-                }
-            }
-        }
-        est_binlen = getBinaryLength(RMQR_VERSION + version, mode, jisdata, length, gs1, 0 /*eci*/, symbol->debug);
-    }
-
-    if (symbol->option_1 == -1) {
-        // Detect if there is enough free space to increase ECC level
-        if (est_binlen < (rmqr_data_codewords_H[version] * 8)) {
-            ecc_level = LEVEL_H;
-        }
-    }
-
-    if (ecc_level == LEVEL_M) {
-        target_codewords = rmqr_data_codewords_M[version];
-        blocks = rmqr_blocks_M[version];
-    } else {
-        target_codewords = rmqr_data_codewords_H[version];
-        blocks = rmqr_blocks_H[version];
-    }
 
-    if (est_binlen > (target_codewords * 8)) {
-        // User has selected a symbol too small for the data
-        strcpy(symbol->errtxt, "580: Input too long for selected symbol size");
-        return ZINT_ERROR_TOO_LONG;
-    }
-
-    if (symbol->debug & ZINT_DEBUG_PRINT) {
-        printf("Minimum codewords = %d\n", est_binlen / 8);
-        printf("Selected version: %d = R%dx%d-", (version + 1), rmqr_height[version], rmqr_width[version]);
-        if (ecc_level == LEVEL_M) {
-            printf("M\n");
-        } else {
-            printf("H\n");
-        }
-        printf("Number of data codewords in symbol = %d\n", target_codewords);
-        printf("Number of ECC blocks = %d\n", blocks);
-    }
-
-#ifndef _MSC_VER
-    unsigned char datastream[target_codewords + 1];
-    unsigned char fullstream[rmqr_total_codewords[version] + 1];
-#else
-    datastream = (unsigned char *) _alloca((target_codewords + 1) * sizeof (unsigned char));
-    fullstream = (unsigned char *) _alloca((rmqr_total_codewords[version] + 1) * sizeof (unsigned char));
-#endif
-
-    qr_binary(datastream, RMQR_VERSION + version, target_codewords, mode, jisdata, length, gs1, 0 /*eci*/, est_binlen, symbol->debug);
-#ifdef ZINT_TEST
-    if (symbol->debug & ZINT_DEBUG_TEST) debug_test_codeword_dump(symbol, datastream, target_codewords);
-#endif
-    add_ecc(fullstream, datastream, RMQR_VERSION + version, target_codewords, blocks, symbol->debug);
-
-    h_size = rmqr_width[version];
-    v_size = rmqr_height[version];
-
-#ifndef _MSC_VER
-    unsigned char grid[h_size * v_size];
-#else
-    grid = (unsigned char *) _alloca((h_size * v_size) * sizeof (unsigned char));
-#endif
-
-    for (i = 0; i < v_size; i++) {
-        for (j = 0; j < h_size; j++) {
-            grid[(i * h_size) + j] = 0;
-        }
-    }
-
-    setup_rmqr_grid(grid, h_size, v_size);
-    populate_grid(grid, h_size, v_size, fullstream, rmqr_total_codewords[version]);
-
-    /* apply bitmask */
-    for (i = 0; i < v_size; i++) {
-        for (j = 0; j < h_size; j++) {
-            if ((grid[(i * h_size) + j] & 0xf0) == 0) {
-                // This is a data module
-                if (((i / 2) + (j / 3)) % 2 == 0) { // < This is the data mask from section 7.8.2
-                    // This module needs to be changed
-                    if (grid[(i * h_size) + j] == 0x01) {
-                        grid[(i * h_size) + j] = 0x00;
-                    } else {
-                        grid[(i * h_size) + j] = 0x01;
-                    }
-                }
-            }
-        }
-    }
-
-    /* add format information */
-    format_data = version;
-    if (ecc_level == LEVEL_H) {
-        format_data += 32;
-    }
-    left_format_info = rmqr_format_info_left[format_data];
-    right_format_info = rmqr_format_info_right[format_data];
-
-    for (i = 0; i < 5; i++) {
-        for (j = 0; j < 3; j++) {
-            grid[(h_size * (i + 1)) + j + 8] = (left_format_info >> ((j * 5) + i)) & 0x01;
-            grid[(h_size * (v_size - 6)) + (h_size * i) + j + (h_size - 8)] = (right_format_info >> ((j * 5) + i)) & 0x01;
-        }
-    }
-    grid[(h_size * 1) + 11] = (left_format_info >> 15) & 0x01;
-    grid[(h_size * 2) + 11] = (left_format_info >> 16) & 0x01;
-    grid[(h_size * 3) + 11] = (left_format_info >> 17) & 0x01;
-    grid[(h_size * (v_size - 6)) + (h_size - 5)] = (right_format_info >> 15) & 0x01;
-    grid[(h_size * (v_size - 6)) + (h_size - 4)] = (right_format_info >> 16) & 0x01;
-    grid[(h_size * (v_size - 6)) + (h_size - 3)] = (right_format_info >> 17) & 0x01;
-
-
-    symbol->width = h_size;
-    symbol->rows = v_size;
-
-    for (i = 0; i < v_size; i++) {
-        for (j = 0; j < h_size; j++) {
-            if (grid[(i * h_size) + j] & 0x01) {
-                set_module(symbol, i, j);
-            }
-        }
-        symbol->row_height[i] = 1;
-    }
-
-    return 0;
-}
index b19ded6..c5a23c9 100644 (file)
@@ -1,7 +1,8 @@
-/* qr.h Data for QR Code, Micro QR Code and rMQR
+/* qr.h Data for QR Code */
 
+/*
     libzint - the open source barcode library
-    Copyright (C) 2008-2019 Robin Stuart <rstuart114@gmail.com>
+    Copyright (C) 2008-2017 Robin Stuart <rstuart114@gmail.com>
     Copyright (C) 2006 Kentaro Fukuchi <fukuchi@megaui.net>
 
     Redistribution and use in source and binary forms, with or without
     SUCH DAMAGE.
  */
 
-#define LEVEL_L    1
-#define LEVEL_M    2
-#define LEVEL_Q    3
-#define LEVEL_H    4
+#define LEVEL_L        1
+#define LEVEL_M        2
+#define LEVEL_Q        3
+#define LEVEL_H        4
 
 #define RHODIUM "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:"
 
-#define RMQR_VERSION    100
-#define MICROQR_VERSION 200
-
 /* From ISO/IEC 18004:2006 Table 7 */
 static const unsigned short int qr_data_codewords_L[] = {
     19, 34, 55, 80, 108, 136, 156, 194, 232, 274, 324, 370, 428, 461, 523, 589, 647,
@@ -71,92 +69,6 @@ static const unsigned short int qr_total_codewords[] = {
     2185, 2323, 2465, 2611, 2761, 2876, 3034, 3196, 3362, 3532, 3706
 };
 
-static const unsigned short int rmqr_height[] = {
-    7, 7, 7, 7, 7,
-    9, 9, 9, 9, 9,
-    11, 11, 11, 11, 11, 11,
-    13, 13, 13, 13, 13, 13,
-    15, 15, 15, 15, 15,
-    17, 17, 17, 17, 17
-};
-
-static const unsigned short int rmqr_width[] = {
-    43, 59, 77, 99, 139,
-    43, 59, 77, 99, 139,
-    27, 43, 59, 77, 99, 139,
-    27, 43, 59, 77, 99, 139,
-    43, 59, 77, 99, 139,
-    43, 59, 77, 99, 139
-};
-
-static const unsigned short int rmqr_data_codewords_M[] = {
-    6, 12, 20, 28, 44, // R7x
-    12, 21, 31, 42, 63, // R9x
-    7, 19, 31, 43, 57, 84, // R11x
-    12, 27, 38, 53, 73, 106, // R13x
-    33, 48, 67, 88, 127, // R15x
-    39, 56, 78, 100, 152 // R17x
-};
-
-static const unsigned short int rmqr_data_codewords_H[] = {
-    3, 7, 10, 14, 24, // R7x
-    7, 11, 17, 22, 33, // R9x
-    5, 11, 15, 23, 29, 42, // R11x
-    7, 13, 20, 29, 35, 54, // R13x
-    15, 26, 31, 48, 69, // R15x
-    21, 28, 38, 56, 76 // R17x
-};
-
-static const short int rmqr_fixed_height_upper_bound[] = {
-    -1, 4, 9, 15, 21, 26, 31
-};
-
-static const unsigned short int rmqr_total_codewords[] = {
-    13, 21, 32, 44, 68, // R7x
-    21, 33, 49, 66, 99, // R9x
-    15, 31, 47, 67, 89, 132, // R11x
-    21, 41, 60, 85, 113, 166, // R13x
-    51, 74, 103, 136, 199, // R15x
-    61, 88, 122, 160, 232 // R17x
-};
-
-
-static const unsigned short int rmqr_numeric_cci[] = {
-    4, 5, 6, 7, 7,
-    5, 6, 7, 7, 8,
-    5, 6, 7, 7, 8, 8,
-    5, 7, 7, 8, 8, 8,
-    7, 7, 8, 8, 9,
-    7, 8, 8, 8, 9
-};
-
-static const unsigned short int rmqr_alphanum_cci[] = {
-    4, 5, 5, 6, 6,
-    5, 5, 6, 6, 7,
-    4, 5, 6, 6, 7, 7,
-    5, 6, 6, 7, 7, 8,
-    6, 7, 7, 7, 8,
-    6, 7, 7, 8, 8
-};
-
-static const unsigned short int rmqr_byte_cci[] = {
-    3, 4, 5, 5, 6,
-    4, 5, 5, 6, 6,
-    3, 5, 5, 6, 6, 7,
-    4, 5, 6, 6, 7, 7,
-    6, 6, 7, 7, 7,
-    6, 6, 7, 7, 8
-};
-
-static const unsigned short int rmqr_kanji_cci[] = {
-    2, 3, 4, 5, 5,
-    3, 4, 5, 5, 6,
-    2, 4, 5, 5, 6, 6,
-    3, 5, 5, 6, 6, 7,
-    5, 5, 6, 6, 7,
-    5, 6, 6, 6, 7
-};
-
 static const char qr_blocks_L[] = {
     1, 1, 1, 1, 1, 2, 2, 2, 2, 4, 4, 4, 4, 4, 6, 6, 6, 6, 7, 8, 8, 9, 9, 10, 12, 12,
     12, 13, 14, 15, 16, 17, 18, 19, 19, 20, 21, 22, 24, 25
@@ -177,24 +89,6 @@ static const char qr_blocks_H[] = {
     32, 35, 37, 40, 42, 45, 48, 51, 54, 57, 60, 63, 66, 70, 74, 77, 81
 };
 
-static const char rmqr_blocks_M[] = {
-    1, 1, 1, 1, 1, // R7x
-    1, 1, 1, 1, 2, // R9x
-    1, 1, 1, 1, 2, 2, // R11x
-    1, 1, 1, 2, 2, 3, // R13x
-    1, 1, 2, 2, 3, // R15x
-    1, 2, 2, 3, 4 // R17x
-};
-
-static const char rmqr_blocks_H[] = {
-    1, 1, 1, 1, 2, // R7x
-    1, 1, 2, 2, 3, // R9x
-    1, 1, 2, 2, 2, 3, // R11x
-    1, 1, 2, 2, 3, 4, // R13x
-    2, 2, 3, 4, 5, // R15x
-    2, 2, 3, 4, 6 // R17x
-};
-
 static const unsigned short int qr_sizes[] = {
     21, 25, 29, 33, 37, 41, 45, 49, 53, 57, 61, 65, 69, 73, 77, 81, 85, 89, 93, 97,
     101, 105, 109, 113, 117, 121, 125, 129, 133, 137, 141, 145, 149, 153, 157, 161, 165, 169, 173, 177
@@ -208,7 +102,6 @@ static const char qr_align_loopsize[] = {
     0, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7
 };
 
-// Table E1 - Row/column coordinates of center module of alignment patterns
 static const unsigned short int qr_table_e1[] = {
     6, 18, 0, 0, 0, 0, 0,
     6, 22, 0, 0, 0, 0, 0,
@@ -251,15 +144,6 @@ static const unsigned short int qr_table_e1[] = {
     6, 30, 58, 86, 114, 142, 170
 };
 
-// Table D1 - Column coordinates of centre module of alignment patterns
-static const unsigned short int rmqr_table_d1[] = {
-    21, 0, 0, 0,
-    19, 39, 0, 0,
-    25, 51, 0, 0,
-    23, 49, 75, 0,
-    27, 55, 83, 111
-};
-
 static const unsigned int qr_annex_c[] = {
     /* Format information bit sequences */
     0x5412, 0x5125, 0x5e7c, 0x5b4b, 0x45f9, 0x40ce, 0x4f97, 0x4aa0, 0x77c4, 0x72f3, 0x7daa, 0x789d,
@@ -281,25 +165,3 @@ static const unsigned int qr_annex_c1[] = {
     0x7c16, 0x7921, 0x06de, 0x03e9, 0x0cb0, 0x0987, 0x1735, 0x1202, 0x1d5b, 0x186c, 0x2508, 0x203f, 0x2f66, 0x2a51, 0x34e3,
     0x31d4, 0x3e8d, 0x3bba
 };
-
-static const unsigned int rmqr_format_info_left[] = {
-    /* rMQR format information for finder pattern side */
-    0x1FAB2, 0x1E597, 0x1DBDD, 0x1C4F8, 0x1B86C, 0x1A749, 0x19903, 0x18626, 0x17F0E, 0x1602B,
-    0x15E61, 0x14144, 0x13DD0, 0x122F5, 0x11CBF, 0x1039A, 0x0F1CA, 0x0EEEF, 0x0D0A5, 0x0CF80,
-    0x0B314, 0x0AC31, 0x0927B, 0x08D5E, 0x07476, 0x06B53, 0x05519, 0x04A3C, 0x036A8, 0x0298D,
-    0x017C7, 0x008E2, 0x3F367, 0x3EC42, 0x3D208, 0x3CD2D, 0x3B1B9, 0x3AE9C, 0x390D6, 0x38FF3,
-    0x376DB, 0x369FE, 0x357B4, 0x34891, 0x33405, 0x32B20, 0x3156A, 0x30A4F, 0x2F81F, 0x2E73A,
-    0x2D970, 0x2C655, 0x2BAC1, 0x2A5E4, 0x29BAE, 0x2848B, 0x27DA3, 0x26286, 0x25CCC, 0x243E9,
-    0x23F7D, 0x22058, 0x21E12, 0x20137
-};
-
-static const unsigned int rmqr_format_info_right[] = {
-    /* rMQR format information for subfinder pattern side */
-    0x20A7B, 0x2155E, 0x22B14, 0x23431, 0x248A5, 0x25780, 0x269CA, 0x276EF, 0x28FC7, 0x290E2,
-    0x2AEA8, 0x2B18D, 0x2CD19, 0x2D23C, 0x2EC76, 0x2F353, 0x30103, 0x31E26, 0x3206C, 0x33F49,
-    0x343DD, 0x35CF8, 0x362B2, 0x37D97, 0x384BF, 0x39B9A, 0x3A5D0, 0x3BAF5, 0x3C661, 0x3D944,
-    0x3E70E, 0x3F82B, 0x003AE, 0x01C8B, 0x022C1, 0x03DE4, 0x04170, 0x05E55, 0x0601F, 0x07F3A,
-    0x08612, 0x09937, 0x0A77D, 0x0B858, 0x0C4CC, 0x0DBE9, 0x0E5A3, 0x0FA86, 0x108D6, 0x117F3,
-    0x129B9, 0x1369C, 0x14A08, 0x1552D, 0x16B67, 0x17442, 0x18D6A, 0x1924F, 0x1AC05, 0x1B320,
-    0x1CFB4, 0x1D091, 0x1EEDB, 0x1F1FE
-};
index 434ab8f..d609e30 100644 (file)
@@ -2,7 +2,7 @@
 
 /*
     libzint - the open source barcode library
-    Copyright (C) 2009 - 2020 Robin Stuart <rstuart114@gmail.com>
+    Copyright (C) 2009-2017 Robin Stuart <rstuart114@gmail.com>
 
     Redistribution and use in source and binary forms, with or without
     modification, are permitted provided that the following conditions
@@ -36,9 +36,9 @@
 #include <fcntl.h>
 #include <io.h>
 #endif
+#include <stdlib.h>
 #include <string.h>
 #include "common.h"
-#include "output.h"
 
 #ifdef _MSC_VER
 #include <malloc.h>
 
 #define SSET   "0123456789ABCDEF"
 
-#define DEFAULT_INK '1'
-#define DEFAULT_PAPER '0'
-
 #ifndef NO_PNG
-INTERNAL int png_pixel_plot(struct zint_symbol *symbol, char *pixelbuf);
+extern int png_pixel_plot(struct zint_symbol *symbol, char *pixelbuf);
 #endif /* NO_PNG */
-INTERNAL int bmp_pixel_plot(struct zint_symbol *symbol, char *pixelbuf);
-INTERNAL int pcx_pixel_plot(struct zint_symbol *symbol, char *pixelbuf);
-INTERNAL int gif_pixel_plot(struct zint_symbol *symbol, char *pixelbuf);
-INTERNAL int tif_pixel_plot(struct zint_symbol *symbol, char *pixelbuf);
-
-static const char ultra_colour[] = "WCBMRYGK";
+extern int bmp_pixel_plot(struct zint_symbol *symbol, char *pixelbuf);
+extern int pcx_pixel_plot(struct zint_symbol *symbol, char *pixelbuf);
+extern int gif_pixel_plot(struct zint_symbol *symbol, char *pixelbuf);
+extern int tif_pixel_plot(struct zint_symbol *symbol, char *pixelbuf);
 
-static int buffer_plot(struct zint_symbol *symbol, char *pixelbuf) {
+void buffer_plot(struct zint_symbol *symbol, char *pixelbuf) {
     /* Place pixelbuffer into symbol */
     int fgred, fggrn, fgblu, bgred, bggrn, bgblu;
     int row, column, i;
 
-    if (symbol->bitmap != NULL) {
-        free(symbol->bitmap);
-        symbol->bitmap = NULL;
-    }
-    symbol->bitmap = (unsigned char *) malloc(symbol->bitmap_width * symbol->bitmap_height * 3);
-    if (symbol->bitmap == NULL) {
-        strcpy(symbol->errtxt, "661: Insufficient memory for bitmap buffer");
-        return ZINT_ERROR_MEMORY;
-    }
+    symbol->bitmap = (char *) malloc(symbol->bitmap_width * symbol->bitmap_height * 3);
 
     fgred = (16 * ctoi(symbol->fgcolour[0])) + ctoi(symbol->fgcolour[1]);
     fggrn = (16 * ctoi(symbol->fgcolour[2])) + ctoi(symbol->fgcolour[3]);
@@ -82,57 +69,17 @@ static int buffer_plot(struct zint_symbol *symbol, char *pixelbuf) {
     bgred = (16 * ctoi(symbol->bgcolour[0])) + ctoi(symbol->bgcolour[1]);
     bggrn = (16 * ctoi(symbol->bgcolour[2])) + ctoi(symbol->bgcolour[3]);
     bgblu = (16 * ctoi(symbol->bgcolour[4])) + ctoi(symbol->bgcolour[5]);
-    
+
     for (row = 0; row < symbol->bitmap_height; row++) {
         for (column = 0; column < symbol->bitmap_width; column++) {
             i = ((row * symbol->bitmap_width) + column) * 3;
             switch (*(pixelbuf + (symbol->bitmap_width * row) + column)) {
-                case 'W': // White
-                    symbol->bitmap[i] = 255;
-                    symbol->bitmap[i + 1] = 255;
-                    symbol->bitmap[i + 2] = 255;
-                    break;
-                case 'C': // Cyan
-                    symbol->bitmap[i] = 0;
-                    symbol->bitmap[i + 1] = 255;
-                    symbol->bitmap[i + 2] = 255;
-                    break;
-                case 'B': // Blue
-                    symbol->bitmap[i] = 0;
-                    symbol->bitmap[i + 1] = 0;
-                    symbol->bitmap[i + 2] = 255;
-                    break;
-                case 'M': // Magenta
-                    symbol->bitmap[i] = 255;
-                    symbol->bitmap[i + 1] = 0;
-                    symbol->bitmap[i + 2] = 255;
-                    break;
-                case 'R': // Red
-                    symbol->bitmap[i] = 255;
-                    symbol->bitmap[i + 1] = 0;
-                    symbol->bitmap[i + 2] = 0;
-                    break;
-                case 'Y': // Yellow
-                    symbol->bitmap[i] = 255;
-                    symbol->bitmap[i + 1] = 255;
-                    symbol->bitmap[i + 2] = 0;
-                    break;
-                case 'G': // Green
-                    symbol->bitmap[i] = 0;
-                    symbol->bitmap[i + 1] = 255;
-                    symbol->bitmap[i + 2] = 0;
-                    break;
-                case 'K': // Black
-                    symbol->bitmap[i] = 0;
-                    symbol->bitmap[i + 1] = 0;
-                    symbol->bitmap[i + 2] = 0;
-                    break;
-                case DEFAULT_INK:
+                case '1':
                     symbol->bitmap[i] = fgred;
                     symbol->bitmap[i + 1] = fggrn;
                     symbol->bitmap[i + 2] = fgblu;
                     break;
-                default: // DEFAULT_PAPER
+                default:
                     symbol->bitmap[i] = bgred;
                     symbol->bitmap[i + 1] = bggrn;
                     symbol->bitmap[i + 2] = bgblu;
@@ -141,15 +88,18 @@ static int buffer_plot(struct zint_symbol *symbol, char *pixelbuf) {
             }
         }
     }
-
-    return 0;
 }
 
-static int save_raster_image_to_file(struct zint_symbol *symbol, int image_height, int image_width, char *pixelbuf, int rotate_angle, int image_type) {
+int save_raster_image_to_file(struct zint_symbol *symbol, int image_height, int image_width, char *pixelbuf, int rotate_angle, int image_type) {
     int error_number;
     int row, column;
 
-    char *rotated_pixbuf = pixelbuf;
+    char *rotated_pixbuf;
+
+    if (!(rotated_pixbuf = (char *) malloc(image_width * image_height))) {
+        strcpy(symbol->errtxt, "650: Insufficient memory for pixel buffer");
+        return ZINT_ERROR_ENCODING_PROBLEM;
+    }
 
     switch (rotate_angle) {
         case 0:
@@ -164,17 +114,42 @@ static int save_raster_image_to_file(struct zint_symbol *symbol, int image_heigh
             break;
     }
 
-    if (rotate_angle) {
-        if (!(rotated_pixbuf = (char *) malloc(image_width * image_height))) {
-            strcpy(symbol->errtxt, "650: Insufficient memory for pixel buffer");
-            return ZINT_ERROR_ENCODING_PROBLEM;
-        }
+    /* sort out colour options */
+    to_upper((unsigned char*) symbol->fgcolour);
+    to_upper((unsigned char*) symbol->bgcolour);
+
+    if (strlen(symbol->fgcolour) != 6) {
+        strcpy(symbol->errtxt, "651: Malformed foreground colour target");
+        free(rotated_pixbuf);
+        return ZINT_ERROR_INVALID_OPTION;
+    }
+    if (strlen(symbol->bgcolour) != 6) {
+        strcpy(symbol->errtxt, "652: Malformed background colour target");
+        free(rotated_pixbuf);
+        return ZINT_ERROR_INVALID_OPTION;
+    }
+    error_number = is_sane(SSET, (unsigned char*) symbol->fgcolour, strlen(symbol->fgcolour));
+    if (error_number == ZINT_ERROR_INVALID_DATA) {
+        strcpy(symbol->errtxt, "653: Malformed foreground colour target");
+        free(rotated_pixbuf);
+        return ZINT_ERROR_INVALID_OPTION;
+    }
+    error_number = is_sane(SSET, (unsigned char*) symbol->bgcolour, strlen(symbol->fgcolour));
+    if (error_number == ZINT_ERROR_INVALID_DATA) {
+        strcpy(symbol->errtxt, "654: Malformed background colour target");
+        free(rotated_pixbuf);
+        return ZINT_ERROR_INVALID_OPTION;
     }
 
     /* Rotate image before plotting */
     switch (rotate_angle) {
         case 0: /* Plot the right way up */
-            /* Nothing to do */
+            for (row = 0; row < image_height; row++) {
+                for (column = 0; column < image_width; column++) {
+                    rotated_pixbuf[(row * image_width) + column] =
+                            pixelbuf[(image_width * row) + column];
+                }
+            }
             break;
         case 90: /* Plot 90 degrees clockwise */
             for (row = 0; row < image_width; row++) {
@@ -204,15 +179,14 @@ static int save_raster_image_to_file(struct zint_symbol *symbol, int image_heigh
 
     switch (image_type) {
         case OUT_BUFFER:
-            error_number = buffer_plot(symbol, rotated_pixbuf);
+            buffer_plot(symbol, rotated_pixbuf);
+            error_number = 0;
             break;
         case OUT_PNG_FILE:
 #ifndef NO_PNG
             error_number = png_pixel_plot(symbol, rotated_pixbuf);
 #else
-            if (rotate_angle) {
-                free(rotated_pixbuf);
-            }
+            free(rotated_pixbuf);
             return ZINT_ERROR_INVALID_OPTION;
 #endif
             break;
@@ -230,13 +204,11 @@ static int save_raster_image_to_file(struct zint_symbol *symbol, int image_heigh
             break;
     }
 
-    if (rotate_angle) {
-        free(rotated_pixbuf);
-    }
+    free(rotated_pixbuf);
     return error_number;
 }
 
-static void draw_bar(char *pixelbuf, int xpos, int xlen, int ypos, int ylen, int image_width, int image_height, char fill) {
+void draw_bar(char *pixelbuf, int xpos, int xlen, int ypos, int ylen, int image_width, int image_height) {
     /* Draw a rectangle */
     int i, j, png_ypos;
 
@@ -246,12 +218,12 @@ static void draw_bar(char *pixelbuf, int xpos, int xlen, int ypos, int ylen, int
 
     for (i = (xpos); i < (xpos + xlen); i++) {
         for (j = (png_ypos); j < (png_ypos + ylen); j++) {
-            *(pixelbuf + (image_width * j) + i) = fill;
+            *(pixelbuf + (image_width * j) + i) = '1';
         }
     }
 }
 
-static void draw_circle(char *pixelbuf, int image_width, int image_height, int x0, int y0, float radius, char fill) {
+void draw_circle(char *pixelbuf, int image_width, int image_height, int x0, int y0, float radius, char fill) {
     int x, y;
     int radius_i = (int) radius;
 
@@ -267,7 +239,7 @@ static void draw_circle(char *pixelbuf, int image_width, int image_height, int x
     }
 }
 
-static void draw_bullseye(char *pixelbuf, int image_width, int image_height, int xoffset, int yoffset, int scaler) {
+void draw_bullseye(char *pixelbuf, int image_width, int image_height, int xoffset, int yoffset, int scaler) {
     /* Central bullseye in Maxicode symbols */
     float x = 14.5 * scaler;
     float y = 15.0 * scaler;
@@ -275,29 +247,29 @@ static void draw_bullseye(char *pixelbuf, int image_width, int image_height, int
         x = 16.0 * scaler;
         y = 16.5 * scaler;
     }
-
-    draw_circle(pixelbuf, image_width, image_height, x + xoffset, y + yoffset, (4.571 * scaler) + 1, DEFAULT_INK);
-    draw_circle(pixelbuf, image_width, image_height, x + xoffset, y + yoffset, (3.779 * scaler) + 1, DEFAULT_PAPER);
-    draw_circle(pixelbuf, image_width, image_height, x + xoffset, y + yoffset, (2.988 * scaler) + 1, DEFAULT_INK);
-    draw_circle(pixelbuf, image_width, image_height, x + xoffset, y + yoffset, (2.196 * scaler) + 1, DEFAULT_PAPER);
-    draw_circle(pixelbuf, image_width, image_height, x + xoffset, y + yoffset, (1.394 * scaler) + 1, DEFAULT_INK);
-    draw_circle(pixelbuf, image_width, image_height, x + xoffset, y + yoffset, (0.602 * scaler) + 1, DEFAULT_PAPER);
+    
+    draw_circle(pixelbuf, image_width, image_height, x + xoffset, y + yoffset, (4.571 * scaler) + 1, '1');
+    draw_circle(pixelbuf, image_width, image_height, x + xoffset, y + yoffset, (3.779 * scaler) + 1, '0');
+    draw_circle(pixelbuf, image_width, image_height, x + xoffset, y + yoffset, (2.988 * scaler) + 1, '1');
+    draw_circle(pixelbuf, image_width, image_height, x + xoffset, y + yoffset, (2.196 * scaler) + 1, '0');
+    draw_circle(pixelbuf, image_width, image_height, x + xoffset, y + yoffset, (1.394 * scaler) + 1, '1');
+    draw_circle(pixelbuf, image_width, image_height, x + xoffset, y + yoffset, (0.602 * scaler) + 1, '0');
 }
 
-static void draw_hexagon(char *pixelbuf, int image_width, char *scaled_hexagon, int hexagon_size, int xposn, int yposn) {
+void draw_hexagon(char *pixelbuf, int image_width, char *scaled_hexagon, int hexagon_size, int xposn, int yposn) {
     /* Put a hexagon into the pixel buffer */
     int i, j;
 
     for (i = 0; i < hexagon_size; i++) {
         for (j = 0; j < hexagon_size; j++) {
-            if (scaled_hexagon[(i * hexagon_size) + j] == DEFAULT_INK) {
-                *(pixelbuf + (image_width * i) + (image_width * yposn) + xposn + j) = DEFAULT_INK;
+            if (scaled_hexagon[(i * hexagon_size) + j] == '1') {
+                *(pixelbuf + (image_width * i) + (image_width * yposn) + xposn + j) = '1';
             }
         }
     }
 }
 
-static void draw_letter(char *pixelbuf, unsigned char letter, int xposn, int yposn, int textflags, int image_width, int image_height) {
+void draw_letter(char *pixelbuf, unsigned char letter, int xposn, int yposn, int textflags, int image_width, int image_height) {
     /* Put a letter into a position */
     int skip;
 
@@ -342,7 +314,7 @@ static void draw_letter(char *pixelbuf, unsigned char letter, int xposn, int ypo
                 for (y = 0; y < max_y; y++) {
                     for (x = 0; x < max_x; x++) {
                         if (small_font[(glyph_no * 9) + y] & (0x10 >> x)) {
-                            *(pixelbuf + (y * image_width) + (yposn * image_width) + xposn + x) = DEFAULT_INK;
+                            *(pixelbuf + (y * image_width) + (yposn * image_width) + xposn + x) = '1';
                         }
                     }
                 }
@@ -366,13 +338,13 @@ static void draw_letter(char *pixelbuf, unsigned char letter, int xposn, int ypo
                 for (y = 0; y < max_y; y++) {
                     char * pixelPtr = linePtr;
                     int extra_dot = 0;
-                    for (x = 0; x < max_x; x++) {
+                    for (x = 0; x < 7; x++) {
                         if (ascii_font[(glyph_no * 14) + y] & (0x40 >> x)) {
-                            *pixelPtr = DEFAULT_INK;
+                            *pixelPtr = '1';
                             extra_dot = 1;
                         } else {
                             if (extra_dot) {
-                                *pixelPtr = DEFAULT_INK;
+                                *pixelPtr = '1';
                             }
 
                             extra_dot = 0;
@@ -382,7 +354,7 @@ static void draw_letter(char *pixelbuf, unsigned char letter, int xposn, int ypo
                     }
 
                     if (extra_dot) {
-                        *pixelPtr = DEFAULT_INK;
+                        *pixelPtr = '1';
                     }
 
                     linePtr += image_width;
@@ -390,7 +362,7 @@ static void draw_letter(char *pixelbuf, unsigned char letter, int xposn, int ypo
             }
                 break;
 
-            default: // regular font 7x14
+            default: // regular font 7x15
                 max_x = 7;
                 max_y = 14;
 
@@ -403,9 +375,9 @@ static void draw_letter(char *pixelbuf, unsigned char letter, int xposn, int ypo
                 }
 
                 for (y = 0; y < max_y; y++) {
-                    for (x = 0; x < max_x; x++) {
+                    for (x = 0; x < 7; x++) {
                         if (ascii_font[(glyph_no * 14) + y] & (0x40 >> x)) {
-                            *(pixelbuf + (y * image_width) + (yposn * image_width) + xposn + x) = DEFAULT_INK;
+                            *(pixelbuf + (y * image_width) + (yposn * image_width) + xposn + x) = '1';
                         }
                     }
                 }
@@ -415,7 +387,7 @@ static void draw_letter(char *pixelbuf, unsigned char letter, int xposn, int ypo
 }
 
 /* Plot a string into the pixel buffer */
-static void draw_string(char *pixbuf, char input_string[], int xposn, int yposn, int textflags, int image_width, int image_height) {
+void draw_string(char *pixbuf, char input_string[], int xposn, int yposn, int textflags, int image_width, int image_height) {
     int i, string_length, string_left_hand, letter_width = 7;
 
     switch (textflags) {
@@ -436,13 +408,12 @@ static void draw_string(char *pixbuf, char input_string[], int xposn, int yposn,
     string_left_hand = xposn - ((letter_width * string_length) / 2);
 
     for (i = 0; i < string_length; i++) {
-        // NOLINTNEXTLINE(clang-analyzer-core.CallAndMessage) suppress false positive about 2nd arg input_string[i] being uninitialized
         draw_letter(pixbuf, input_string[i], string_left_hand + (i * letter_width), yposn, textflags, image_width, image_height);
     }
 
 }
 
-static void plot_hexline(char *scaled_hexagon, int hexagon_size, float start_x, float start_y, float end_x, float end_y) {
+void plot_hexline(char *scaled_hexagon, int hexagon_size, float start_x, float start_y, float end_x, float end_y) {
     /* Draw a straight line from start to end */
     int i;
     float inc_x, inc_y;
@@ -454,12 +425,12 @@ static void plot_hexline(char *scaled_hexagon, int hexagon_size, float start_x,
         float this_x = start_x + ((float)i * inc_x);
         float this_y = start_y + ((float)i * inc_y);
         if (((this_x >= 0) && (this_x < hexagon_size)) && ((this_y >= 0) && (this_y < hexagon_size))) {
-                scaled_hexagon[(hexagon_size * (int)this_y) + (int)this_x] = DEFAULT_INK;
+                scaled_hexagon[(hexagon_size * (int)this_y) + (int)this_x] = '1';
         }
     }
 }
 
-static void plot_hexagon(char *scaled_hexagon, int hexagon_size) {
+void plot_hexagon(char *scaled_hexagon, int hexagon_size) {
     /* Create a hexagon shape and fill it */
     int line, i;
 
@@ -498,49 +469,47 @@ static void plot_hexagon(char *scaled_hexagon, int hexagon_size) {
 
     /* Fill hexagon */
     for (line = 0; line < hexagon_size; line++) {
-        char ink = DEFAULT_PAPER;
+        char ink = '0';
         for (i = 0; i < hexagon_size; i++) {
-            if (scaled_hexagon[(hexagon_size * line) + i] == DEFAULT_INK) {
+            if (scaled_hexagon[(hexagon_size * line) + i] == '1') {
                 if (i < (hexagon_size / 2)) {
-                    ink = DEFAULT_INK;
+                    ink = '1';
                 } else {
-                    ink = DEFAULT_PAPER;
+                    ink = '0';
                 }
             }
 
-            if (ink == DEFAULT_INK) {
+            if (ink == '1') {
                 scaled_hexagon[(hexagon_size * line) + i] = ink;
             }
         }
     }
 }
 
-static int plot_raster_maxicode(struct zint_symbol *symbol, int rotate_angle, int data_type) {
+int plot_raster_maxicode(struct zint_symbol *symbol, int rotate_angle, int data_type) {
     /* Plot a MaxiCode symbol with hexagons and bullseye */
-    int row, column, xposn;
+    int i, row, column, xposn;
     int image_height, image_width;
     char *pixelbuf;
     int error_number;
     int xoffset, yoffset;
-    int roffset, boffset;
     float scaler = symbol->scale;
     char *scaled_hexagon;
     int hexagon_size;
 
-    if (scaler <= 0) {
-        scaler = 0.5;
-    }
-
-    set_whitespace_offsets(symbol, &xoffset, &yoffset, &roffset, &boffset);
-
-    image_width = (300 + 2 * (xoffset + roffset)) * scaler;
-    image_height = (300 + 2 * (yoffset + boffset)) * scaler;
+    xoffset = symbol->border_width + symbol->whitespace_width;
+    yoffset = symbol->border_width;
+    image_width = (300 + (2 * xoffset * 2)) * scaler;
+    image_height = (300 + (2 * yoffset * 2)) * scaler;
 
     if (!(pixelbuf = (char *) malloc(image_width * image_height))) {
         strcpy(symbol->errtxt, "655: Insufficient memory for pixel buffer");
         return ZINT_ERROR_ENCODING_PROBLEM;
+    } else {
+        for (i = 0; i < (image_width * image_height); i++) {
+            *(pixelbuf + i) = '0';
+        }
     }
-    memset(pixelbuf, DEFAULT_PAPER, image_width * image_height);
 
     hexagon_size = (int)(scaler * 10);
 
@@ -548,8 +517,11 @@ static int plot_raster_maxicode(struct zint_symbol *symbol, int rotate_angle, in
         strcpy(symbol->errtxt, "656: Insufficient memory for pixel buffer");
         free(pixelbuf);
         return ZINT_ERROR_ENCODING_PROBLEM;
+    } else {
+        for (i = 0; i < (hexagon_size * hexagon_size); i++) {
+            *(scaled_hexagon + i) = '0';
+        }
     }
-    memset(scaled_hexagon, DEFAULT_PAPER, hexagon_size * hexagon_size);
 
     plot_hexagon(scaled_hexagon, hexagon_size);
 
@@ -577,14 +549,14 @@ static int plot_raster_maxicode(struct zint_symbol *symbol, int rotate_angle, in
 
     if ((symbol->output_options & BARCODE_BOX) || (symbol->output_options & BARCODE_BIND)) {
         /* boundary bars */
-        draw_bar(pixelbuf, 0, image_width, 0, symbol->border_width * 2, image_width, image_height, DEFAULT_INK);
-        draw_bar(pixelbuf, 0, image_width, 300 + (symbol->border_width * 2), symbol->border_width * 2, image_width, image_height, DEFAULT_INK);
+        draw_bar(pixelbuf, 0, image_width, 0, symbol->border_width * 2, image_width, image_height);
+        draw_bar(pixelbuf, 0, image_width, 300 + (symbol->border_width * 2), symbol->border_width * 2, image_width, image_height);
     }
 
     if (symbol->output_options & BARCODE_BOX) {
         /* side bars */
-        draw_bar(pixelbuf, 0, symbol->border_width * 2, 0, image_height, image_width, image_height, DEFAULT_INK);
-        draw_bar(pixelbuf, 300 + ((symbol->border_width + symbol->whitespace_width + symbol->whitespace_width) * 2), symbol->border_width * 2, 0, image_height, image_width, image_height, DEFAULT_INK);
+        draw_bar(pixelbuf, 0, symbol->border_width * 2, 0, image_height, image_width, image_height);
+        draw_bar(pixelbuf, 300 + ((symbol->border_width + symbol->whitespace_width + symbol->whitespace_width) * 2), symbol->border_width * 2, 0, image_height, image_width, image_height);
     }
 
     error_number = save_raster_image_to_file(symbol, image_height, image_width, pixelbuf, rotate_angle, data_type);
@@ -594,7 +566,7 @@ static int plot_raster_maxicode(struct zint_symbol *symbol, int rotate_angle, in
 }
 
 /* Convert UTF-8 to Latin1 Codepage for the interpretation line */
-static void to_latin1(unsigned char source[], unsigned char preprocessed[]) {
+void to_latin1(unsigned char source[], unsigned char preprocessed[]) {
     int j, i, input_length;
 
     input_length = ustrlen(source);
@@ -632,21 +604,20 @@ static void to_latin1(unsigned char source[], unsigned char preprocessed[]) {
     return;
 }
 
-static int plot_raster_dotty(struct zint_symbol *symbol, int rotate_angle, int data_type) {
+int plot_raster_dotty(struct zint_symbol *symbol, int rotate_angle, int data_type) {
     float scaler = 2 * symbol->scale;
     char *scaled_pixelbuf;
     int r, i;
     int scale_width, scale_height;
     int error_number = 0;
     int xoffset, yoffset, image_width, image_height;
-    int roffset, boffset;
 
     symbol->height = symbol->rows; // This is true because only 2d matrix symbols are processed here
 
-    set_whitespace_offsets(symbol, &xoffset, &yoffset, &roffset, &boffset);
-
-    image_width = symbol->width + xoffset + roffset;
-    image_height = symbol->height + yoffset + boffset;
+    xoffset = symbol->border_width + symbol->whitespace_width;
+    yoffset = symbol->border_width;
+    image_width = symbol->width + xoffset + xoffset;
+    image_height = symbol->height + yoffset + yoffset;
 
     if (scaler < 2.0) {
         scaler = 2.0;
@@ -658,8 +629,11 @@ static int plot_raster_dotty(struct zint_symbol *symbol, int rotate_angle, int d
     if (!(scaled_pixelbuf = (char *) malloc(scale_width * scale_height))) {
         strcpy(symbol->errtxt, "657: Insufficient memory for pixel buffer");
         return ZINT_ERROR_ENCODING_PROBLEM;
+    } else {
+        for (i = 0; i < (scale_width * scale_height); i++) {
+            *(scaled_pixelbuf + i) = '0';
+        }
     }
-    memset(scaled_pixelbuf, DEFAULT_PAPER, scale_width * scale_height);
 
     /* Plot the body of the symbol to the pixel buffer */
     for (r = 0; r < symbol->rows; r++) {
@@ -669,7 +643,7 @@ static int plot_raster_dotty(struct zint_symbol *symbol, int rotate_angle, int d
                         (int) ((i + xoffset) * scaler) + (scaler / 2.0),
                         (int) ((r + yoffset) * scaler) + (scaler / 2.0),
                         (symbol->dot_size / 2.0) * scaler,
-                        DEFAULT_INK);
+                        '1');
             }
         }
     }
@@ -680,12 +654,11 @@ static int plot_raster_dotty(struct zint_symbol *symbol, int rotate_angle, int d
     return error_number;
 }
 
-static int plot_raster_default(struct zint_symbol *symbol, int rotate_angle, int data_type) {
+int plot_raster_default(struct zint_symbol *symbol, int rotate_angle, int data_type) {
     int textdone, main_width, comp_offset, large_bar_count;
     char textpart[10], addon[6];
     float addon_text_posn, preset_height, large_bar_height;
     int i, r, textoffset, yoffset, xoffset, latch, image_width, image_height;
-    int roffset, boffset;
     char *pixelbuf;
     int addon_latch = 0, textflags = 0;
     int block_width, textpos;
@@ -711,24 +684,26 @@ static int plot_raster_default(struct zint_symbol *symbol, int rotate_angle, int
         if (is_extendable(symbol->symbology)) {
             /* For these symbols use dummy text to ensure formatting is done
              * properly even if no text is required */
-            for (i = 0; i < (int) ustrlen(symbol->text); i++) {
+            for (i = 0; i < ustrlen(symbol->text); i++) {
                 if (symbol->text[i] == '+') {
                     local_text[i] = '+';
                 } else {
                     local_text[i] = ' ';
                 }
+                local_text[ustrlen(symbol->text)] = '\0';
             }
-            local_text[ustrlen(symbol->text)] = '\0';
         } else {
             /* For everything else, just remove the text */
-            memset(local_text, 0, ustrlen(symbol->text) + 1); /* Note using memset() here to suppress clang-tidy false positives */
+            local_text[0] = '\0';
         }
     }
 
     textdone = 0;
     main_width = symbol->width;
+    strcpy(addon, "");
     comp_offset = 0;
     addon_text_posn = 0.0;
+    row_height = 0;
     if (symbol->output_options & SMALL_TEXT) {
         textflags = 1;
     } else if (symbol->output_options & BOLD_TEXT) {
@@ -794,7 +769,7 @@ static int plot_raster_default(struct zint_symbol *symbol, int rotate_angle, int
     r = 0;
     /* Isolate add-on text */
     if (is_extendable(symbol->symbology)) {
-        for (i = 0; i < (int) ustrlen(local_text); i++) {
+        for (i = 0; i < ustrlen(local_text); i++) {
             if (latch == 1) {
                 addon[r] = local_text[i];
                 r++;
@@ -812,18 +787,25 @@ static int plot_raster_default(struct zint_symbol *symbol, int rotate_angle, int
         textoffset = 0;
     }
 
-    set_whitespace_offsets(symbol, &xoffset, &yoffset, &roffset, &boffset);
-
-    image_width = 2 * (symbol->width + xoffset + roffset);
-    image_height = 2 * (symbol->height + textoffset + yoffset + boffset);
+    xoffset = symbol->border_width + symbol->whitespace_width;
+    yoffset = symbol->border_width;
+    image_width = 2 * (symbol->width + xoffset + xoffset);
+    image_height = 2 * (symbol->height + textoffset + yoffset + yoffset);
 
     if (!(pixelbuf = (char *) malloc(image_width * image_height))) {
         strcpy(symbol->errtxt, "658: Insufficient memory for pixel buffer");
         return ZINT_ERROR_ENCODING_PROBLEM;
+    } else {
+        for (i = 0; i < (image_width * image_height); i++) {
+            *(pixelbuf + i) = '0';
+        }
     }
-    memset(pixelbuf, DEFAULT_PAPER, image_width * image_height);
 
-    default_text_posn = image_height - 17;
+    if ((symbol->output_options & BARCODE_BOX) || (symbol->output_options & BARCODE_BIND)) {
+        default_text_posn = image_height - 17;
+    } else {
+        default_text_posn = image_height - 17 - symbol->border_width - symbol->border_width;
+    }
 
     row_posn = textoffset + yoffset;
     next_yposn = textoffset + yoffset;
@@ -834,7 +816,6 @@ static int plot_raster_default(struct zint_symbol *symbol, int rotate_angle, int
         int plot_yposn;
         int plot_height;
         int this_row = symbol->rows - r - 1; /* invert r otherwise plots upside down */
-        int module_fill;
         row_posn += row_height;
         plot_yposn = next_yposn;
         if (symbol->row_height[this_row] == 0) {
@@ -846,27 +827,30 @@ static int plot_raster_default(struct zint_symbol *symbol, int rotate_angle, int
         plot_height = next_yposn - plot_yposn;
 
         i = 0;
+        if (module_is_set(symbol, this_row, 0)) {
+            latch = 1;
+        } else {
+            latch = 0;
+        }
 
         do {
-            module_fill = module_is_set(symbol, this_row, i);
             block_width = 0;
             do {
                 block_width++;
-            } while ((i + block_width < symbol->width) && module_is_set(symbol, this_row, i + block_width) == module_is_set(symbol, this_row, i));
-
+            } while ((i + block_width < symbol->width )&& module_is_set(symbol, this_row, i + block_width) == module_is_set(symbol, this_row, i));
             if ((addon_latch == 0) && (r == 0) && (i > main_width)) {
                 plot_height = (int) (row_height - 5.0);
                 plot_yposn = (int) (row_posn - 5.0);
                 addon_text_posn = row_posn + row_height - 8.0;
                 addon_latch = 1;
             }
-            if (module_fill) {
+            if (latch == 1) {
                 /* a bar */
-                if (symbol->symbology == BARCODE_ULTRA) {
-                    draw_bar(pixelbuf, (i + xoffset) * 2, block_width * 2, plot_yposn * 2, plot_height * 2, image_width, image_height, ultra_colour[module_fill]);
-                } else {
-                    draw_bar(pixelbuf, (i + xoffset) * 2, block_width * 2, plot_yposn * 2, plot_height * 2, image_width, image_height, DEFAULT_INK);
-                }
+                draw_bar(pixelbuf, (i + xoffset) * 2, block_width * 2, plot_yposn * 2, plot_height * 2, image_width, image_height);
+                latch = 0;
+            } else {
+                /* a space */
+                latch = 1;
             }
             i += block_width;
 
@@ -882,12 +866,12 @@ static int plot_raster_default(struct zint_symbol *symbol, int rotate_angle, int
             case 8: /* EAN-8 */
             case 11:
             case 14:
-                draw_bar(pixelbuf, (0 + xoffset) * 2, 1 * 2, (4 + (int) yoffset) * 2, 5 * 2, image_width, image_height, DEFAULT_INK);
-                draw_bar(pixelbuf, (2 + xoffset) * 2, 1 * 2, (4 + (int) yoffset) * 2, 5 * 2, image_width, image_height, DEFAULT_INK);
-                draw_bar(pixelbuf, (32 + xoffset) * 2, 1 * 2, (4 + (int) yoffset) * 2, 5 * 2, image_width, image_height, DEFAULT_INK);
-                draw_bar(pixelbuf, (34 + xoffset) * 2, 1 * 2, (4 + (int) yoffset) * 2, 5 * 2, image_width, image_height, DEFAULT_INK);
-                draw_bar(pixelbuf, (64 + xoffset) * 2, 1 * 2, (4 + (int) yoffset) * 2, 5 * 2, image_width, image_height, DEFAULT_INK);
-                draw_bar(pixelbuf, (66 + xoffset) * 2, 1 * 2, (4 + (int) yoffset) * 2, 5 * 2, image_width, image_height, DEFAULT_INK);
+                draw_bar(pixelbuf, (0 + xoffset) * 2, 1 * 2, (4 + (int) yoffset) * 2, 5 * 2, image_width, image_height);
+                draw_bar(pixelbuf, (2 + xoffset) * 2, 1 * 2, (4 + (int) yoffset) * 2, 5 * 2, image_width, image_height);
+                draw_bar(pixelbuf, (32 + xoffset) * 2, 1 * 2, (4 + (int) yoffset) * 2, 5 * 2, image_width, image_height);
+                draw_bar(pixelbuf, (34 + xoffset) * 2, 1 * 2, (4 + (int) yoffset) * 2, 5 * 2, image_width, image_height);
+                draw_bar(pixelbuf, (64 + xoffset) * 2, 1 * 2, (4 + (int) yoffset) * 2, 5 * 2, image_width, image_height);
+                draw_bar(pixelbuf, (66 + xoffset) * 2, 1 * 2, (4 + (int) yoffset) * 2, 5 * 2, image_width, image_height);
                 for (i = 0; i < 4; i++) {
                     textpart[i] = local_text[i];
                 }
@@ -917,12 +901,12 @@ static int plot_raster_default(struct zint_symbol *symbol, int rotate_angle, int
             case 13: /* EAN 13 */
             case 16:
             case 19:
-                draw_bar(pixelbuf, (0 + xoffset) * 2, 1 * 2, (4 + (int) yoffset) * 2, 5 * 2, image_width, image_height, DEFAULT_INK);
-                draw_bar(pixelbuf, (2 + xoffset) * 2, 1 * 2, (4 + (int) yoffset) * 2, 5 * 2, image_width, image_height, DEFAULT_INK);
-                draw_bar(pixelbuf, (46 + xoffset) * 2, 1 * 2, (4 + (int) yoffset) * 2, 5 * 2, image_width, image_height, DEFAULT_INK);
-                draw_bar(pixelbuf, (48 + xoffset) * 2, 1 * 2, (4 + (int) yoffset) * 2, 5 * 2, image_width, image_height, DEFAULT_INK);
-                draw_bar(pixelbuf, (92 + xoffset) * 2, 1 * 2, (4 + (int) yoffset) * 2, 5 * 2, image_width, image_height, DEFAULT_INK);
-                draw_bar(pixelbuf, (94 + xoffset) * 2, 1 * 2, (4 + (int) yoffset) * 2, 5 * 2, image_width, image_height, DEFAULT_INK);
+                draw_bar(pixelbuf, (0 + xoffset) * 2, 1 * 2, (4 + (int) yoffset) * 2, 5 * 2, image_width, image_height);
+                draw_bar(pixelbuf, (2 + xoffset) * 2, 1 * 2, (4 + (int) yoffset) * 2, 5 * 2, image_width, image_height);
+                draw_bar(pixelbuf, (46 + xoffset) * 2, 1 * 2, (4 + (int) yoffset) * 2, 5 * 2, image_width, image_height);
+                draw_bar(pixelbuf, (48 + xoffset) * 2, 1 * 2, (4 + (int) yoffset) * 2, 5 * 2, image_width, image_height);
+                draw_bar(pixelbuf, (92 + xoffset) * 2, 1 * 2, (4 + (int) yoffset) * 2, 5 * 2, image_width, image_height);
+                draw_bar(pixelbuf, (94 + xoffset) * 2, 1 * 2, (4 + (int) yoffset) * 2, 5 * 2, image_width, image_height);
 
                 textpart[0] = local_text[0];
                 textpart[1] = '\0';
@@ -965,10 +949,10 @@ static int plot_raster_default(struct zint_symbol *symbol, int rotate_angle, int
             block_width = 0;
             do {
                 block_width++;
-            } while ((i + block_width < symbol->width) && module_is_set(symbol, symbol->rows - 1, i + block_width) == module_is_set(symbol, symbol->rows - 1, i));
+            } while (module_is_set(symbol, symbol->rows - 1, i + block_width) == module_is_set(symbol, symbol->rows - 1, i));
             if (latch == 1) {
                 /* a bar */
-                draw_bar(pixelbuf, (i + xoffset - comp_offset) * 2, block_width * 2, (4 + (int) yoffset) * 2, 5 * 2, image_width, image_height, DEFAULT_INK);
+                draw_bar(pixelbuf, (i + xoffset - comp_offset) * 2, block_width * 2, (4 + (int) yoffset) * 2, 5 * 2, image_width, image_height);
                 latch = 0;
             } else {
                 /* a space */
@@ -976,18 +960,18 @@ static int plot_raster_default(struct zint_symbol *symbol, int rotate_angle, int
             }
             i += block_width;
         } while (i < 11 + comp_offset);
-        draw_bar(pixelbuf, (46 + xoffset) * 2, 1 * 2, (4 + (int) yoffset) * 2, 5 * 2, image_width, image_height, DEFAULT_INK);
-        draw_bar(pixelbuf, (48 + xoffset) * 2, 1 * 2, (4 + (int) yoffset) * 2, 5 * 2, image_width, image_height, DEFAULT_INK);
+        draw_bar(pixelbuf, (46 + xoffset) * 2, 1 * 2, (4 + (int) yoffset) * 2, 5 * 2, image_width, image_height);
+        draw_bar(pixelbuf, (48 + xoffset) * 2, 1 * 2, (4 + (int) yoffset) * 2, 5 * 2, image_width, image_height);
         latch = 1;
         i = 85 + comp_offset;
         do {
             block_width = 0;
             do {
                 block_width++;
-            } while ((i + block_width < symbol->width) && module_is_set(symbol, symbol->rows - 1, i + block_width) == module_is_set(symbol, symbol->rows - 1, i));
+            } while (module_is_set(symbol, symbol->rows - 1, i + block_width) == module_is_set(symbol, symbol->rows - 1, i));
             if (latch == 1) {
                 /* a bar */
-                draw_bar(pixelbuf, (i + xoffset - comp_offset) * 2, block_width * 2, (4 + (int) yoffset) * 2, 5 * 2, image_width, image_height, DEFAULT_INK);
+                draw_bar(pixelbuf, (i + xoffset - comp_offset) * 2, block_width * 2, (4 + (int) yoffset) * 2, 5 * 2, image_width, image_height);
                 latch = 0;
             } else {
                 /* a space */
@@ -1030,11 +1014,11 @@ static int plot_raster_default(struct zint_symbol *symbol, int rotate_angle, int
     } else if ((symbol->symbology == BARCODE_UPCE) || (symbol->symbology == BARCODE_UPCE_CHK)
             || (symbol->symbology == BARCODE_UPCE_CC)) {
         /* guard bar extensions and text formatting for UPCE */
-        draw_bar(pixelbuf, (0 + xoffset) * 2, 1 * 2, (4 + (int) yoffset) * 2, 5 * 2, image_width, image_height, DEFAULT_INK);
-        draw_bar(pixelbuf, (2 + xoffset) * 2, 1 * 2, (4 + (int) yoffset) * 2, 5 * 2, image_width, image_height, DEFAULT_INK);
-        draw_bar(pixelbuf, (46 + xoffset) * 2, 1 * 2, (4 + (int) yoffset) * 2, 5 * 2, image_width, image_height, DEFAULT_INK);
-        draw_bar(pixelbuf, (48 + xoffset) * 2, 1 * 2, (4 + (int) yoffset) * 2, 5 * 2, image_width, image_height, DEFAULT_INK);
-        draw_bar(pixelbuf, (50 + xoffset) * 2, 1 * 2, (4 + (int) yoffset) * 2, 5 * 2, image_width, image_height, DEFAULT_INK);
+        draw_bar(pixelbuf, (0 + xoffset) * 2, 1 * 2, (4 + (int) yoffset) * 2, 5 * 2, image_width, image_height);
+        draw_bar(pixelbuf, (2 + xoffset) * 2, 1 * 2, (4 + (int) yoffset) * 2, 5 * 2, image_width, image_height);
+        draw_bar(pixelbuf, (46 + xoffset) * 2, 1 * 2, (4 + (int) yoffset) * 2, 5 * 2, image_width, image_height);
+        draw_bar(pixelbuf, (48 + xoffset) * 2, 1 * 2, (4 + (int) yoffset) * 2, 5 * 2, image_width, image_height);
+        draw_bar(pixelbuf, (50 + xoffset) * 2, 1 * 2, (4 + (int) yoffset) * 2, 5 * 2, image_width, image_height);
 
         textpart[0] = local_text[0];
         textpart[1] = '\0';
@@ -1069,28 +1053,23 @@ static int plot_raster_default(struct zint_symbol *symbol, int rotate_angle, int
     /* Put boundary bars or box around symbol */
     if ((symbol->output_options & BARCODE_BOX) || (symbol->output_options & BARCODE_BIND)) {
         /* boundary bars */
-        if ((symbol->output_options & BARCODE_BOX) || (symbol->symbology != BARCODE_CODABLOCKF && symbol->symbology != BARCODE_HIBC_BLOCKF)) {
-            draw_bar(pixelbuf, 0, (symbol->width + xoffset + roffset) * 2, textoffset * 2, symbol->border_width * 2, image_width, image_height, DEFAULT_INK);
-            draw_bar(pixelbuf, 0, (symbol->width + xoffset + roffset) * 2, (textoffset + symbol->height + symbol->border_width) * 2, symbol->border_width * 2, image_width, image_height, DEFAULT_INK);
+        if (symbol->symbology != BARCODE_CODABLOCKF) {
+            draw_bar(pixelbuf, 0, (symbol->width + xoffset + xoffset) * 2, textoffset * 2, symbol->border_width * 2, image_width, image_height);
+            draw_bar(pixelbuf, 0, (symbol->width + xoffset + xoffset) * 2, (textoffset + symbol->height + symbol->border_width) * 2, symbol->border_width * 2, image_width, image_height);
         } else {
-            draw_bar(pixelbuf, xoffset * 2, symbol->width * 2, textoffset * 2, symbol->border_width * 2, image_width, image_height, DEFAULT_INK);
-            draw_bar(pixelbuf, xoffset * 2, symbol->width * 2, (textoffset + symbol->height + symbol->border_width) * 2, symbol->border_width * 2, image_width, image_height, DEFAULT_INK);
+            draw_bar(pixelbuf, xoffset * 2, symbol->width * 2, textoffset * 2, symbol->border_width * 2, image_width, image_height);
+            draw_bar(pixelbuf, xoffset * 2, symbol->width * 2, (textoffset + symbol->height + symbol->border_width) * 2, symbol->border_width * 2, image_width, image_height);
         }
         if ((symbol->output_options & BARCODE_BIND) != 0) {
             if ((symbol->rows > 1) && (is_stackable(symbol->symbology) == 1)) {
-                double sep_height = 1;
-                if (symbol->option_3 > 0 && symbol->option_3 <= 4) {
-                    sep_height = symbol->option_3;
-                }
                 /* row binding */
-                if (symbol->symbology != BARCODE_CODABLOCKF && symbol->symbology != BARCODE_HIBC_BLOCKF) {
+                if (symbol->symbology != BARCODE_CODABLOCKF) {
                     for (r = 1; r < symbol->rows; r++) {
-                        draw_bar(pixelbuf, xoffset * 2, symbol->width * 2, ((r * row_height) + textoffset + yoffset - sep_height / 2) * 2, sep_height * 2, image_width, image_height, DEFAULT_INK);
+                        draw_bar(pixelbuf, xoffset * 2, symbol->width * 2, ((r * row_height) + textoffset + yoffset - 1) * 2, 2 * 2, image_width, image_height);
                     }
                 } else {
                     for (r = 1; r < symbol->rows; r++) {
-                        /* Avoid 11-module start and 13-module stop chars */
-                        draw_bar(pixelbuf, (xoffset + 11) * 2, (symbol->width - 24) * 2, ((r * row_height) + textoffset + yoffset - sep_height / 2) * 2, sep_height * 2, image_width, image_height, DEFAULT_INK);
+                        draw_bar(pixelbuf, (xoffset + 11) * 2 , (symbol->width - 25) * 2, ((r * row_height) + textoffset + yoffset - 1) * 2, 2 * 2, image_width, image_height);
                     }
                 }
             }
@@ -1099,8 +1078,8 @@ static int plot_raster_default(struct zint_symbol *symbol, int rotate_angle, int
 
     if (symbol->output_options & BARCODE_BOX) {
         /* side bars */
-        draw_bar(pixelbuf, 0, symbol->border_width * 2, textoffset * 2, (symbol->height + (2 * symbol->border_width)) * 2, image_width, image_height, DEFAULT_INK);
-        draw_bar(pixelbuf, (symbol->width + xoffset + roffset - symbol->border_width) * 2, symbol->border_width * 2, textoffset * 2, (symbol->height + (2 * symbol->border_width)) * 2, image_width, image_height, DEFAULT_INK);
+        draw_bar(pixelbuf, 0, symbol->border_width * 2, textoffset * 2, (symbol->height + (2 * symbol->border_width)) * 2, image_width, image_height);
+        draw_bar(pixelbuf, (symbol->width + xoffset + xoffset - symbol->border_width) * 2, symbol->border_width * 2, textoffset * 2, (symbol->height + (2 * symbol->border_width)) * 2, image_width, image_height);
     }
 
     /* Put the human readable text at the bottom */
@@ -1110,52 +1089,44 @@ static int plot_raster_default(struct zint_symbol *symbol, int rotate_angle, int
     }
 
 
-    if (scaler <= 0) {
+    if (scaler == 0) {
         scaler = 0.5;
     }
+    scale_width = image_width * scaler;
+    scale_height = image_height * scaler;
 
-    if (scaler != 1.0) {
-        scale_width = image_width * scaler;
-        scale_height = image_height * scaler;
-
-        /* Apply scale options by creating another pixel buffer */
-        if (!(scaled_pixelbuf = (char *) malloc(scale_width * scale_height))) {
-            free(pixelbuf);
-            strcpy(symbol->errtxt, "659: Insufficient memory for pixel buffer");
-            return ZINT_ERROR_ENCODING_PROBLEM;
+    /* Apply scale options by creating another pixel buffer */
+    if (!(scaled_pixelbuf = (char *) malloc(scale_width * scale_height))) {
+        free(pixelbuf);
+        strcpy(symbol->errtxt, "659: Insufficient memory for pixel buffer");
+        return ZINT_ERROR_ENCODING_PROBLEM;
+    } else {
+        for (i = 0; i < (scale_width * scale_height); i++) {
+            *(scaled_pixelbuf + i) = '0';
         }
-        memset(scaled_pixelbuf, DEFAULT_PAPER, scale_width * scale_height);
+    }
 
-        for (vert = 0; vert < scale_height; vert++) {
-            for (horiz = 0; horiz < scale_width; horiz++) {
-                *(scaled_pixelbuf + (vert * scale_width) + horiz) = *(pixelbuf + ((int) (vert / scaler) * image_width) + (int) (horiz / scaler));
-            }
+    for (vert = 0; vert < scale_height; vert++) {
+        for (horiz = 0; horiz < scale_width; horiz++) {
+            *(scaled_pixelbuf + (vert * scale_width) + horiz) = *(pixelbuf + ((int) (vert / scaler) * image_width) + (int) (horiz / scaler));
         }
-
-        error_number = save_raster_image_to_file(symbol, scale_height, scale_width, scaled_pixelbuf, rotate_angle, data_type);
-        free(scaled_pixelbuf);
-    } else {
-        error_number = save_raster_image_to_file(symbol, image_height, image_width, pixelbuf, rotate_angle, data_type);
     }
+
+    error_number = save_raster_image_to_file(symbol, scale_height, scale_width, scaled_pixelbuf, rotate_angle, data_type);
+    free(scaled_pixelbuf);
     free(pixelbuf);
     return error_number;
 }
 
-INTERNAL int plot_raster(struct zint_symbol *symbol, int rotate_angle, int file_type) {
+int plot_raster(struct zint_symbol *symbol, int rotate_angle, int file_type) {
     int error;
 
 #ifdef NO_PNG
     if (file_type == OUT_PNG_FILE) {
-        strcpy(symbol->errtxt, "660: PNG format disabled at compile time");
         return ZINT_ERROR_INVALID_OPTION;
     }
 #endif /* NO_PNG */
 
-    error = check_colour_options(symbol);
-    if (error != 0) {
-        return error;
-    }
-
     if (symbol->output_options & BARCODE_DOTTY_MODE) {
         error = plot_raster_dotty(symbol, rotate_angle, file_type);
     } else {
@@ -1168,3 +1139,5 @@ INTERNAL int plot_raster(struct zint_symbol *symbol, int rotate_angle, int file_
 
     return error;
 }
+
+
index 6d908e4..b161080 100644 (file)
@@ -28,7 +28,6 @@
     OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     SUCH DAMAGE.
  */
-/* vim: set ts=4 sw=4 et : */
 
 // It is not written with high efficiency in mind, so is probably
 // not suitable for real-time encoding.  The aim was to keep it
 // malloc/free can be avoided by using static arrays of a suitable
 // size.
 
-#ifdef _MSC_VER
+#include <stdio.h>             // only needed for debug (main)
 #include <malloc.h>
-#endif
-#include "common.h"
 #include "reedsol.h"
 static int logmod; // 2**symsize - 1
 static int rlen;
@@ -69,7 +66,7 @@ static int *logt = NULL, *alog = NULL, *rspoly = NULL;
 // polynomial.  e.g. for ECC200 (8-bit symbols) the polynomial is
 // a**8 + a**5 + a**3 + a**2 + 1, which translates to 0x12d.
 
-INTERNAL void rs_init_gf(const int poly) {
+void rs_init_gf(const int poly) {
     int m, b, p, v;
 
     // Find the top bit, and hence the symbol size
@@ -104,7 +101,7 @@ INTERNAL void rs_init_gf(const int poly) {
 // (x + 2**i)*(x + 2**(i+1))*...   [nsym terms]
 // For ECC200, index is 1.
 
-INTERNAL void rs_init_code(const int nsym, int index) {
+void rs_init_code(const int nsym, int index) {
     int i, k;
 
     rspoly = (int *) malloc(sizeof (int) * (nsym + 1));
@@ -124,11 +121,11 @@ INTERNAL void rs_init_code(const int nsym, int index) {
     }
 }
 
-INTERNAL void rs_encode(const size_t len, const unsigned char *data, unsigned char *res) {
+void rs_encode(const size_t len,const unsigned char *data, unsigned char *res) {
     int i, k;
     for (i = 0; i < rlen; i++)
         res[i] = 0;
-    for (i = 0; i < (int) len; i++) {
+    for (i = 0; i < len; i++) {
         int m = res[rlen - 1] ^ data[i];
         for (k = rlen - 1; k > 0; k--) {
             if (m && rspoly[k])
@@ -144,7 +141,7 @@ INTERNAL void rs_encode(const size_t len, const unsigned char *data, unsigned ch
 }
 
 /* The same as above but for larger bitlengths - Aztec code compatible */
-INTERNAL void rs_encode_long(const int len, const unsigned int *data, unsigned int *res) {
+void rs_encode_long(const int len, const unsigned int *data, unsigned int *res) {
     int i, k;
     for (i = 0; i < rlen; i++)
         res[i] = 0;
@@ -164,9 +161,10 @@ INTERNAL void rs_encode_long(const int len, const unsigned int *data, unsigned i
 }
 
 /* Free memory */
-INTERNAL void rs_free(void) {
+void rs_free(void) {
     free(logt);
     free(alog);
     free(rspoly);
     rspoly = NULL;
 }
+
index d0703c9..73630f1 100644 (file)
@@ -29,7 +29,6 @@
     SUCH DAMAGE.
 
  */
-/* vim: set ts=4 sw=4 et : */
 
 #ifndef __REEDSOL_H
 #define __REEDSOL_H
 extern "C" {
 #endif /* __cplusplus */
 
-INTERNAL void rs_init_gf(const int poly);
-INTERNAL void rs_init_code(const int nsym,int index);
-INTERNAL void rs_encode(const size_t len,const unsigned char *data, unsigned char *res);
-INTERNAL void rs_encode_long(const int len,const unsigned int *data, unsigned int *res);
-INTERNAL void rs_free(void);
+extern void rs_init_gf(const int poly);
+extern void rs_init_code(const int nsym,int index);
+extern void rs_encode(const size_t len,const unsigned char *data, unsigned char *res);
+extern void rs_encode_long(const int len,const unsigned int *data, unsigned int *res);
+    extern void rs_free(void);
 
 #ifdef __cplusplus
 }
 #endif /* __cplusplus */
 
 #endif                         /* __REEDSOL_H */
+
diff --git a/backend/render.c b/backend/render.c
new file mode 100644 (file)
index 0000000..72cdaaf
--- /dev/null
@@ -0,0 +1,858 @@
+/*
+ * render.c - Generic Rendered Format
+ *
+ * Initiall written by Sam Lown for use in gLabels. Converts encoded
+ * data into a generic internal structure of lines and characters
+ * usable in external applications.
+ */
+
+/*
+    libzint - the open source barcode library
+    Copyright (C) 2009-2017 Robin Stuart <rstuart114@gmail.com>
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions
+    are met:
+
+    1. Redistributions of source code must retain the above copyright
+       notice, this list of conditions and the following disclaimer.
+    2. Redistributions in binary form must reproduce the above copyright
+       notice, this list of conditions and the following disclaimer in the
+       documentation and/or other materials provided with the distribution.
+    3. Neither the name of the project nor the names of its contributors
+       may be used to endorse or promote products derived from this software
+       without specific prior written permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+    ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+    ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+    SUCH DAMAGE.
+ */
+
+#include <locale.h>
+#include <string.h>
+#include <stdlib.h>
+#include <stdio.h>
+#ifdef _MSC_VER
+#include <malloc.h>
+#endif
+#include "common.h"
+
+#define   GL_CONST  2.8346
+
+struct zint_render_line *render_plot_create_line(float x, float y, float width, float length);
+int render_plot_add_line(struct zint_symbol *symbol, struct zint_render_line *line, struct zint_render_line **last_line);
+struct zint_render_ring *render_plot_create_ring(float x, float y, float radius, float line_width);
+int render_plot_add_ring(struct zint_symbol *symbol, struct zint_render_ring *ring, struct zint_render_ring **last_ring);
+struct zint_render_hexagon *render_plot_create_hexagon(float x, float y, float height);
+int render_plot_add_hexagon(struct zint_symbol *symbol, struct zint_render_hexagon *hexagon, struct zint_render_hexagon **last_hexagon);
+
+int render_plot_add_string(struct zint_symbol *symbol, unsigned char *text, float x, float y, float fsize, float width, struct zint_render_string **last_string);
+void render_free(struct zint_symbol *symbol);
+
+int render_plot(struct zint_symbol *symbol, float width, float height) {
+    struct zint_render *render;
+    struct zint_render_line *line, *last_line = NULL;
+    struct zint_render_string *last_string = NULL;
+    struct zint_render_ring *last_ring = NULL;
+    struct zint_render_hexagon *last_hexagon = NULL;
+
+    int i, r, latch;
+    float textpos, large_bar_height, preset_height, row_height, row_posn = 0.0;
+    // int error_number = 0;
+    int text_offset, text_height, xoffset, yoffset, textdone, main_symbol_width_x, addon_width_x;
+    char addon[6];
+    int large_bar_count, symbol_lead_in, total_symbol_width_x, total_area_width_x;
+    float addon_text_posn;
+    float default_text_posn;
+    float scaler;
+    const char *locale = NULL;
+    int hide_text = 0;
+    float symbol_aspect = 1;
+    float x_dimension;
+    int upceanflag = 0;
+
+    // Free any previous rendering structures
+    render_free(symbol);
+    // Allocate memory for the rendered version
+    render = symbol->rendered = (struct zint_render *) malloc(sizeof (struct zint_render));
+    if (!symbol->rendered) return ZINT_ERROR_MEMORY;
+    render->lines = NULL;
+    render->strings = NULL;
+    render->rings = NULL;
+    render->hexagons = NULL;
+
+    locale = setlocale(LC_ALL, "C");
+
+    row_height = 0;
+    textdone = 0;
+    textpos = 0.0;
+    main_symbol_width_x = symbol->width;
+    strcpy(addon, "");
+    symbol_lead_in = 0;
+    addon_text_posn = 0.0;
+    addon_width_x = 0;
+
+    /*
+     * Determine if there will be any addon texts and text height
+     */
+    latch = 0;
+    r = 0;
+    /* Isolate add-on text */
+    if (is_extendable(symbol->symbology)) {
+        for(i = 0; i < (int)ustrlen(symbol->text); i++) {
+            if (latch == 1) {
+                addon[r] = symbol->text[i];
+                r++;
+            }
+            if (symbol->text[i] == '+') {
+                latch = 1;
+            }
+        }
+    }
+    addon[r] = '\0';
+
+
+    /*
+     * Calculate the width of the barcode, especially if there are any extra
+     * borders or white space to add.
+     */
+
+    while (!(module_is_set(symbol, symbol->rows - 1, symbol_lead_in))) {
+        symbol_lead_in++;
+    }
+
+    /* Certain symbols need whitespace otherwise characters get chopped off the sides */
+    if ((((symbol->symbology == BARCODE_EANX) && (symbol->rows == 1)) || (symbol->symbology == BARCODE_EANX_CC))
+            || (symbol->symbology == BARCODE_ISBNX)) {
+        switch (ustrlen(symbol->text)) {
+            case 13: /* EAN 13 */
+            case 16:
+            case 19:
+                if (symbol->whitespace_width == 0) {
+                    symbol->whitespace_width = 10;
+                }
+                main_symbol_width_x = 96 + symbol_lead_in;
+                upceanflag = 13;
+                break;
+            case 2:
+                main_symbol_width_x = 22 + symbol_lead_in;
+                upceanflag = 2;
+                break;
+            case 5:
+                main_symbol_width_x = 49 + symbol_lead_in;
+                upceanflag = 5;
+                break;
+            default:
+                main_symbol_width_x = 68 + symbol_lead_in;
+                upceanflag = 8;
+        }
+        switch (ustrlen(symbol->text)) {
+            case 11:
+            case 16:
+                /* EAN-2 add-on */
+                addon_width_x = 31;
+                break;
+            case 14:
+            case 19:
+                /* EAN-5 add-on */
+                addon_width_x = 58;
+                break;
+        }
+    }
+    else if (((symbol->symbology == BARCODE_UPCA) && (symbol->rows == 1)) || (symbol->symbology == BARCODE_UPCA_CC)) {
+        upceanflag = 12;
+        if (symbol->whitespace_width < 10) {
+            symbol->whitespace_width = 10;
+            main_symbol_width_x = 96 + symbol_lead_in;
+        }
+        switch (ustrlen(symbol->text)) {
+            case 15:
+                /* EAN-2 add-on */
+                addon_width_x = 31;
+                break;
+            case 18:
+                /* EAN-5 add-on */
+                addon_width_x = 58;
+                break;
+        }
+    }
+    else if (((symbol->symbology == BARCODE_UPCE) && (symbol->rows == 1)) || (symbol->symbology == BARCODE_UPCE_CC)) {
+        upceanflag = 6;
+        if (symbol->whitespace_width == 0) {
+            symbol->whitespace_width = 10;
+            main_symbol_width_x = 51 + symbol_lead_in;
+        }
+        switch (ustrlen(symbol->text)) {
+            case 11:
+                /* EAN-2 add-on */
+                addon_width_x = 31;
+                break;
+            case 14:
+                /* EAN-5 add-on */
+                addon_width_x = 58;
+                break;
+        }
+    }
+
+    if ((!symbol->show_hrt) || (ustrlen(symbol->text) == 0)) {
+        hide_text = 1;
+        text_height = text_offset = 0.0;
+    }
+    else {
+        text_height = upceanflag ? 11.0 : 9.0;
+        text_offset = 2.0;
+    }
+    if (symbol->output_options & SMALL_TEXT)
+        text_height *= 0.8;
+
+    total_symbol_width_x = 0.0 + main_symbol_width_x + addon_width_x;
+    total_area_width_x = total_symbol_width_x + (2 * (symbol->border_width + symbol->whitespace_width));
+
+    xoffset = symbol->border_width + symbol->whitespace_width;
+    yoffset = symbol->border_width;
+
+
+    // Determine if height should be overridden
+    large_bar_count = 0;
+    preset_height = 0.0;
+    for (i = 0; i < symbol->rows; i++) {
+        preset_height += symbol->row_height[i];
+        if (symbol->row_height[i] == 0) {
+            large_bar_count++;
+        }
+    }
+
+
+    /* Set minimum size of symbol */
+    /* Barcode must be at least 2mm high by 2mm across */
+    if (width < (2.0 * GL_CONST)) {
+        width = (2.0 * GL_CONST);
+    }
+    x_dimension = width / total_area_width_x / GL_CONST;
+    if (height < ((x_dimension * ((2 * symbol->border_width) + text_offset + text_height)) + 2.0) * GL_CONST) {
+        height = ((x_dimension * ((2 * symbol->border_width) + text_offset + text_height)) + 2.0) * GL_CONST;
+    }
+
+    if (symbol->symbology == BARCODE_CODABAR) {
+        /* The minimum X-dimension of Codabar is 0.191mm. The minimum bar height is 5mm */
+        if (x_dimension < 0.191) {
+            x_dimension = 0.191;
+            width = 0.191 * GL_CONST * total_area_width_x;
+        }
+        if (height < ((x_dimension * ((2 * symbol->border_width) + text_offset + text_height)) + 5.0) * GL_CONST) {
+            height = ((x_dimension * ((2 * symbol->border_width) + text_offset + text_height)) + 5.0) * GL_CONST;
+        }
+    }
+    else if (symbol->symbology == BARCODE_CODE49) {
+        /* The minimum X-dimension of Code 49 is 0.191mm */
+        if (x_dimension < 0.191) {
+            float encoded_symbol_aspect;
+            x_dimension = 0.191;
+            width = 0.191 * GL_CONST * total_area_width_x;
+            encoded_symbol_aspect = total_area_width_x;
+            encoded_symbol_aspect /= (preset_height + (2 * yoffset) + text_offset + text_height);
+            height = width / encoded_symbol_aspect;
+        }
+    }
+
+    if (upceanflag != 0) {
+        /* The X-dimension of UPC/EAN symbols is fixed at 0.330mm */
+        /* The phrase before is questionable. It may scale in certain percentages (80% - 200%).
+           see https://internationalbarcodes.com/ean-13-specifications/ */
+        // Can now cope with sizes between 80% and 200%, enforces correct aspect ratio
+        /* NOTE: This code will need adjustment before it correctly deals with composite symbols */
+        //x_dimension = 0.330;
+        if (x_dimension < 0.26) {
+            x_dimension = 0.26;
+        }
+        if (x_dimension > 0.66) {
+            x_dimension = 0.66;
+        }
+        width = x_dimension * GL_CONST * total_area_width_x;
+
+        switch (upceanflag) {
+            case 6:
+            case 12:
+            case 13:
+                /* UPC-A, UPC-E and EAN-13 */
+                /* Height of bars should be 22.85mm */
+                height = ((x_dimension * ((2 * symbol->border_width) + text_offset + text_height)) + (22.85 * (x_dimension / 0.33))) * GL_CONST;
+                break;
+            case 8:
+                /* EAN-8 */
+                /* Height of bars should be 18.23mm */
+                height = ((x_dimension * ((2 * symbol->border_width) + text_offset + text_height)) + (18.23 * (x_dimension / 0.33))) * GL_CONST;
+                break;
+            default:
+                /* EAN-2 and EAN-5 */
+                /* Height of bars should be 21.10mm */
+                height = ((x_dimension * ((2 * symbol->border_width) + text_offset + text_height)) + (21.10 * (x_dimension / 0.33))) * GL_CONST;
+        }
+    }
+
+    if (symbol->symbology == BARCODE_ONECODE) {
+        /* The size of USPS Intelligent Mail barcode is fixed */
+        x_dimension = 0.508;
+        width = 0.508 * GL_CONST * total_area_width_x;
+        height = 4.064 * GL_CONST;
+    }
+    else if ((symbol->symbology == BARCODE_POSTNET) || (symbol->symbology == BARCODE_PLANET)) {
+        /* The size of PostNet and PLANET are fized */
+        x_dimension = 0.508;
+        width = 0.508 * GL_CONST * total_area_width_x;
+        height = 2.921 * GL_CONST;
+    }
+    else if (((symbol->symbology == BARCODE_AUSPOST) || (symbol->symbology == BARCODE_AUSREPLY)) ||
+            ((symbol->symbology == BARCODE_AUSROUTE) || (symbol->symbology == BARCODE_AUSREDIRECT))) {
+        /* Australia Post use the same sizes as USPS */
+        x_dimension = 0.508;
+        width = 0.508 * GL_CONST * total_area_width_x;
+        height = 4.064 * GL_CONST;
+    }
+    else if ((symbol->symbology == BARCODE_RM4SCC) || (symbol->symbology == BARCODE_KIX)) {
+        /* Royal Mail and KIX Code uses 22 bars per inch */
+        x_dimension = 0.577;
+        width = 0.577 * GL_CONST * total_area_width_x;
+        height = 5.22 * GL_CONST;
+    }
+
+
+    if (large_bar_count == 0) {
+        float required_aspect = width / height;
+        symbol_aspect = (total_symbol_width_x + (2 * xoffset)) / (preset_height + (2 * yoffset) + text_offset + text_height);
+        symbol->height = (int) preset_height;
+        if (required_aspect > symbol_aspect) {
+            /* the area is too wide */
+            scaler = height / (preset_height + (2 * yoffset) + text_offset + text_height);
+            render->width = symbol_aspect * height;
+            render->height = height;
+        } else {
+            /* the area is too high */
+            scaler = width / (total_symbol_width_x + (2 * xoffset));
+            render->width = width;
+            render->height = width / symbol_aspect;
+        }
+    } else {
+        scaler = width / (total_symbol_width_x + (2 * xoffset));
+        symbol->height = (int) ((height / scaler) - ((2 * yoffset) + text_offset + text_height));
+
+        render->width = width;
+        render->height = height;
+    }
+    large_bar_height = (symbol->height - preset_height) / large_bar_count;
+
+    if ((symbol->output_options & BARCODE_BOX) || (symbol->output_options & BARCODE_BIND)) {
+        default_text_posn = (symbol->height + text_offset + symbol->border_width + symbol->border_width) * scaler;
+    } else {
+        default_text_posn = (symbol->height + text_offset + symbol->border_width) * scaler;
+    }
+
+
+    if (symbol->symbology == BARCODE_MAXICODE) {
+        struct zint_render_ring *ring;
+        /* Maxicode is a fixed size */
+        scaler = GL_CONST; /* Converts from millimeters to the scale used by glabels */
+        render->width = 28.16 * scaler;
+        render->height = 26.86 * scaler;
+
+        /* Central bullseye pattern */
+        ring = render_plot_create_ring(13.64 * scaler, 13.43 * scaler, 0.85 * scaler, 0.67 * scaler);
+        render_plot_add_ring(symbol, ring, &last_ring);
+        ring = render_plot_create_ring(13.64 * scaler, 13.43 * scaler, 2.20 * scaler, 0.67 * scaler);
+        render_plot_add_ring(symbol, ring, &last_ring);
+        ring = render_plot_create_ring(13.64 * scaler, 13.43 * scaler, 3.54 * scaler, 0.67 * scaler);
+        render_plot_add_ring(symbol, ring, &last_ring);
+
+        /* Hexagons */
+        for (r = 0; r < symbol->rows; r++) {
+            for (i = 0; i < symbol->width; i++) {
+                if (module_is_set(symbol, r, i)) {
+                    struct zint_render_hexagon *hexagon = render_plot_create_hexagon(((i * 0.88) + ((r & 1) ? 1.76 : 1.32)) * scaler, ((r * 0.76) + 0.76) * scaler, 1. * scaler);
+                    render_plot_add_hexagon(symbol, hexagon, &last_hexagon);
+                }
+            }
+        }
+
+    } else {
+        /* everything else uses rectangles (or squares) */
+        /* Works from the bottom of the symbol up */
+        int addon_latch = 0;
+
+        for (r = 0; r < symbol->rows; r++) {
+            int this_row = r;
+            if (symbol->row_height[this_row] == 0) {
+                row_height = large_bar_height;
+            } else {
+                row_height = symbol->row_height[this_row];
+            }
+            row_posn = 0;
+            for (i = 0; i < r; i++) {
+                if (symbol->row_height[i] == 0) {
+                    row_posn += large_bar_height;
+                } else {
+                    row_posn += symbol->row_height[i];
+                }
+            }
+            row_posn += yoffset;
+
+            i = 0;
+            if (module_is_set(symbol, this_row, 0)) {
+                latch = 1;
+            } else {
+                latch = 0;
+            }
+
+            do {
+                int block_width = 0;
+                do {
+                    block_width++;
+                } while (module_is_set(symbol, this_row, i + block_width) == module_is_set(symbol, this_row, i));
+                if ((addon_latch == 0) && (r == (symbol->rows - 1)) && (i > main_symbol_width_x)) {
+                    addon_text_posn = row_posn * scaler;
+                    addon_latch = 1;
+                }
+                if (latch == 1) {
+                    /* a bar */
+                    if (addon_latch == 0) {
+                        line = render_plot_create_line((i + xoffset) * scaler, (row_posn) * scaler, block_width * scaler, row_height * scaler);
+                    } else {
+                        line = render_plot_create_line((i + xoffset) * scaler, (row_posn + 10.0) * scaler, block_width * scaler, (row_height - 5.0) * scaler);
+                    }
+                    latch = 0;
+
+                    render_plot_add_line(symbol, line, &last_line);
+                } else {
+                    /* a space */
+                    latch = 1;
+                }
+                i += block_width;
+
+            } while (i < symbol->width);
+        }
+    }
+    /* That's done the actual data area, everything else is human-friendly */
+
+
+    /* Add the text */
+    xoffset -= symbol_lead_in;
+    row_posn = (row_posn + large_bar_height) * scaler;
+
+    if (!hide_text) {
+        char textpart[10];
+        float textwidth;
+        if (upceanflag == 8) {
+            /* guard bar extensions and text formatting for EAN-8 */
+            i = 0;
+            for (line = symbol->rendered->lines; line != NULL; line = line->next) {
+                switch (i) {
+                    case 0:
+                    case 1:
+                    case 10:
+                    case 11:
+                    case 20:
+                    case 21:
+                        line->length += (5.0 * scaler);
+                        break;
+                }
+                i++;
+            }
+
+            for (i = 0; i < 4; i++) {
+                textpart[i] = symbol->text[i];
+            }
+            textpart[4] = '\0';
+            textpos = 17;
+            textwidth = 4.0 * 8.5;
+            render_plot_add_string(symbol, (unsigned char *) textpart, (textpos + xoffset) * scaler, default_text_posn, text_height * scaler, textwidth * scaler, &last_string);
+            for (i = 0; i < 4; i++) {
+                textpart[i] = symbol->text[i + 4];
+            }
+            textpart[4] = '\0';
+            textpos = 50;
+            render_plot_add_string(symbol, (unsigned char *) textpart, (textpos + xoffset) * scaler, default_text_posn, text_height * scaler, textwidth * scaler, &last_string);
+            textdone = 1;
+            switch (strlen(addon)) {
+                case 2:
+                    textpos = xoffset + 86;
+                    textwidth = 2.0 * 8.5;
+                    render_plot_add_string(symbol, (unsigned char *) addon, textpos * scaler, addon_text_posn * scaler, text_height * scaler, textwidth * scaler, &last_string);
+                    break;
+                case 5:
+                    textpos = xoffset + 100;
+                    textwidth = 5.0 * 8.5;
+                    render_plot_add_string(symbol, (unsigned char *) addon, textpos * scaler, addon_text_posn * scaler, text_height * scaler, textwidth * scaler, &last_string);
+                    break;
+            }
+
+        }
+
+        if (upceanflag == 13) {
+            /* guard bar extensions and text formatting for EAN-13 */
+            i = 0;
+            for (line = symbol->rendered->lines; line != NULL; line = line->next) {
+                switch (i) {
+                    case 0:
+                    case 1:
+                    case 14:
+                    case 15:
+                    case 28:
+                    case 29:
+                        line->length += (5.0 * scaler);
+                        break;
+                }
+                i++;
+            }
+
+            textpart[0] = symbol->text[0];
+            textpart[1] = '\0';
+            textpos = -5; // 7
+            textwidth = 8.5;
+            render_plot_add_string(symbol, (unsigned char *) textpart, (textpos + xoffset) * scaler, default_text_posn, text_height * scaler, textwidth * scaler, &last_string);
+
+            for (i = 0; i < 6; i++) {
+                textpart[i] = symbol->text[i + 1];
+            }
+            textpart[6] = '\0';
+            textpos = 25;
+            textwidth = 6.0 * 8.5;
+            render_plot_add_string(symbol, (unsigned char *) textpart, (textpos + xoffset) * scaler, default_text_posn, text_height * scaler, textwidth * scaler, &last_string);
+            for (i = 0; i < 6; i++) {
+                textpart[i] = symbol->text[i + 7];
+            }
+            textpart[6] = '\0';
+            textpos = 72;
+            render_plot_add_string(symbol, (unsigned char *) textpart, (textpos + xoffset) * scaler, default_text_posn, text_height * scaler, textwidth * scaler, &last_string);
+            textdone = 1;
+            switch (strlen(addon)) {
+                case 2:
+                    textpos = xoffset + 114;
+                    textwidth = 2.0 * 8.5;
+                    render_plot_add_string(symbol, (unsigned char *) addon, textpos * scaler, addon_text_posn * scaler, text_height * scaler, textwidth * scaler, &last_string);
+                    break;
+                case 5:
+                    textpos = xoffset + 128;
+                    textwidth = 5.0 * 8.5;
+                    render_plot_add_string(symbol, (unsigned char *) addon, textpos * scaler, addon_text_posn * scaler, text_height * scaler, textwidth * scaler, &last_string);
+                    break;
+            }
+        }
+
+        if (upceanflag == 12) {
+            /* guard bar extensions and text formatting for UPCA */
+            i = 0;
+            for (line = symbol->rendered->lines; line != NULL; line = line->next) {
+                switch (i) {
+                    case 0:
+                    case 1:
+                    case 2:
+                    case 3:
+                    case 14:
+                    case 15:
+                    case 26:
+                    case 27:
+                    case 28:
+                    case 29:
+                        line->length += (5.0 * scaler);
+                        break;
+                }
+                i++;
+            }
+
+            textpart[0] = symbol->text[0];
+            textpart[1] = '\0';
+            textpos = -5;
+            textwidth = 6.2;
+            render_plot_add_string(symbol, (unsigned char *) textpart, (textpos + xoffset) * scaler, default_text_posn + (2.0 * scaler), text_height * (8.0 / 11.0) * scaler, textwidth * scaler, &last_string);
+            for (i = 0; i < 5; i++) {
+                textpart[i] = symbol->text[i + 1];
+            }
+            textpart[5] = '\0';
+            textpos = 27;
+            textwidth = 5.0 * 8.5;
+            render_plot_add_string(symbol, (unsigned char *) textpart, (textpos + xoffset) * scaler, default_text_posn, text_height * scaler, textwidth * scaler, &last_string);
+            for (i = 0; i < 5; i++) {
+                textpart[i] = symbol->text[i + 6];
+            }
+            textpos = 68;
+            render_plot_add_string(symbol, (unsigned char *) textpart, (textpos + xoffset) * scaler, default_text_posn, text_height * scaler, textwidth * scaler, &last_string);
+            textpart[0] = symbol->text[11];
+            textpart[1] = '\0';
+            textpos = 100;
+            textwidth = 6.2;
+            render_plot_add_string(symbol, (unsigned char *) textpart, (textpos + xoffset) * scaler, default_text_posn + (2.0 * scaler), text_height * (8.0 / 11.0) * scaler, textwidth * scaler, &last_string);
+            textdone = 1;
+            switch (strlen(addon)) {
+                case 2:
+                    textpos = xoffset + 116;
+                    textwidth = 2.0 * 8.5;
+                    render_plot_add_string(symbol, (unsigned char *) addon, textpos * scaler, addon_text_posn * scaler, text_height * scaler, textwidth * scaler, &last_string);
+                    break;
+                case 5:
+                    textpos = xoffset + 130;
+                    textwidth = 5.0 * 8.5;
+                    render_plot_add_string(symbol, (unsigned char *) addon, textpos * scaler, addon_text_posn * scaler, text_height * scaler, textwidth * scaler, &last_string);
+                    break;
+            }
+        }
+
+        if (upceanflag == 6) {
+            /* guard bar extensions and text formatting for UPCE */
+            i = 0;
+            for (line = symbol->rendered->lines; line != NULL; line = line->next) {
+                switch (i) {
+                    case 0:
+                    case 1:
+                    case 14:
+                    case 15:
+                    case 16:
+                        line->length += (5.0 * scaler);
+                        break;
+                }
+                i++;
+            }
+
+            textpart[0] = symbol->text[0];
+            textpart[1] = '\0';
+            textpos = -5;
+            textwidth = 6.2;
+            render_plot_add_string(symbol, (unsigned char *) textpart, (textpos + xoffset) * scaler, default_text_posn + (2.0 * scaler), text_height * (8.0 / 11.0) * scaler, textwidth * scaler, &last_string);
+            for (i = 0; i < 6; i++) {
+                textpart[i] = symbol->text[i + 1];
+            }
+            textpart[6] = '\0';
+            textpos = 24;
+            textwidth = 6.0 * 8.5;
+            render_plot_add_string(symbol, (unsigned char *) textpart, (textpos + xoffset) * scaler, default_text_posn, text_height * scaler, textwidth * scaler, &last_string);
+            textpart[0] = symbol->text[7];
+            textpart[1] = '\0';
+            textpos = 55;
+            textwidth = 6.2;
+            render_plot_add_string(symbol, (unsigned char *) textpart, (textpos + xoffset) * scaler, default_text_posn + (2.0 * scaler), text_height * (8.0 / 11.0) * scaler, textwidth * scaler, &last_string);
+            textdone = 1;
+            switch (strlen(addon)) {
+                case 2:
+                    textpos = xoffset + 70;
+                    textwidth = 2.0 * 8.5;
+                    render_plot_add_string(symbol, (unsigned char *) addon, textpos * scaler, addon_text_posn * scaler, text_height * scaler, textwidth * scaler, &last_string);
+                    break;
+                case 5:
+                    textpos = xoffset + 84;
+                    textwidth = 5.0 * 8.5;
+                    render_plot_add_string(symbol, (unsigned char *) addon, textpos * scaler, addon_text_posn * scaler, text_height * scaler, textwidth * scaler, &last_string);
+                    break;
+            }
+        }
+
+        /* Put normal human readable text at the bottom (and centered) */
+        if (textdone == 0) {
+            // caculate start xoffset to center text
+            render_plot_add_string(symbol, symbol->text, ((symbol->width / 2.0) + xoffset) * scaler, default_text_posn, text_height * scaler, symbol->width * scaler, &last_string);
+        }
+    }
+
+    switch (symbol->symbology) {
+        case BARCODE_MAXICODE:
+            /* Do nothing! */
+            break;
+        default:
+            if ((symbol->output_options & BARCODE_BIND) != 0) {
+                if ((symbol->rows > 1) && (is_stackable(symbol->symbology) == 1)) {
+                    /* row binding */
+                    for (r = 1; r < symbol->rows; r++) {
+                        line = render_plot_create_line(xoffset * scaler, ((r * row_height) + yoffset - 1) * scaler, symbol->width * scaler, 2.0 * scaler);
+                        render_plot_add_line(symbol, line, &last_line);
+                    }
+                }
+            }
+            if ((symbol->output_options & BARCODE_BOX) || (symbol->output_options & BARCODE_BIND)) {
+                line = render_plot_create_line(0, 0, (symbol->width + xoffset + xoffset) * scaler, symbol->border_width * scaler);
+                render_plot_add_line(symbol, line, &last_line);
+                line = render_plot_create_line(0, (symbol->height + symbol->border_width) * scaler, (symbol->width + xoffset + xoffset) * scaler, symbol->border_width * scaler);
+                render_plot_add_line(symbol, line, &last_line);
+            }
+            if (symbol->output_options & BARCODE_BOX) {
+                /* side bars */
+                line = render_plot_create_line(0, 0, symbol->border_width * scaler, (symbol->height + (2 * symbol->border_width)) * scaler);
+                render_plot_add_line(symbol, line, &last_line);
+                line = render_plot_create_line((symbol->width + xoffset + xoffset - symbol->border_width) * scaler, 0, symbol->border_width * scaler, (symbol->height + (2 * symbol->border_width)) * scaler);
+                render_plot_add_line(symbol, line, &last_line);
+            }
+            break;
+    }
+
+    if (locale)
+        setlocale(LC_ALL, locale);
+
+    return 1;
+}
+
+/*
+ * Create a new line with its memory allocated ready for adding to the
+ * rendered structure.
+ *
+ * This is much quicker than writing out each line manually (in some cases!)
+ */
+struct zint_render_line *render_plot_create_line(float x, float y, float width, float length) {
+    struct zint_render_line *line;
+
+    line = (struct zint_render_line*) malloc(sizeof (struct zint_render_line));
+    if (!line) return NULL;
+
+    line->next = NULL;
+    line->x = x;
+    line->y = y;
+    line->width = width;
+    line->length = length;
+
+    return line;
+}
+
+/*
+ * Add the line to the current rendering and update the last line's
+ * next value.
+ */
+int render_plot_add_line(struct zint_symbol *symbol, struct zint_render_line *line, struct zint_render_line **last_line) {
+    if (!line) return ZINT_ERROR_MEMORY;
+    if (*last_line)
+        (*last_line)->next = line;
+    else
+        symbol->rendered->lines = line; // first line
+
+    *last_line = line;
+    return 1;
+}
+
+struct zint_render_ring *render_plot_create_ring(float x, float y, float radius, float line_width) {
+    struct zint_render_ring *ring;
+
+    ring = (struct zint_render_ring *) malloc(sizeof (struct zint_render_ring));
+    if (!ring) return NULL;
+    ring->next = NULL;
+    ring->x = x;
+    ring->y = y;
+    ring->radius = radius;
+    ring->line_width = line_width;
+
+    return ring;
+}
+
+int render_plot_add_ring(struct zint_symbol *symbol, struct zint_render_ring *ring, struct zint_render_ring **last_ring) {
+    if (!ring) return ZINT_ERROR_MEMORY;
+    if (*last_ring)
+        (*last_ring)->next = ring;
+    else
+        symbol->rendered->rings = ring; // first ring
+
+    *last_ring = ring;
+    return 1;
+}
+
+struct zint_render_hexagon *render_plot_create_hexagon(float x, float y, float height) {
+    struct zint_render_hexagon *hexagon;
+
+    hexagon = (struct zint_render_hexagon*) malloc(sizeof (struct zint_render_hexagon));
+    if (!hexagon) return NULL;
+    hexagon->next = NULL;
+    hexagon->x = x;
+    hexagon->y = y;
+    hexagon->height = height;
+
+    return hexagon;
+}
+
+int render_plot_add_hexagon(struct zint_symbol *symbol, struct zint_render_hexagon *hexagon, struct zint_render_hexagon **last_hexagon) {
+    if (!hexagon) return ZINT_ERROR_MEMORY;
+    if (*last_hexagon)
+        (*last_hexagon)->next = hexagon;
+    else
+        symbol->rendered->hexagons = hexagon; // first hexagon
+
+    *last_hexagon = hexagon;
+    return 1;
+}
+
+/*
+ * Add a string structure to the symbol.
+ * Coordinates assumed to be from top-center.
+ */
+int render_plot_add_string(struct zint_symbol *symbol,
+        unsigned char *text, float x, float y, float fsize, float width,
+        struct zint_render_string **last_string) {
+    struct zint_render_string *string;
+
+    string = (struct zint_render_string*) malloc(sizeof (struct zint_render_string));
+    string->next = NULL;
+    string->x = x;
+    string->y = y;
+    string->width = width;
+    string->fsize = fsize;
+    string->length = ustrlen(text);
+    string->text = (unsigned char*) malloc(sizeof (unsigned char) * (ustrlen(text) + 1));
+    ustrcpy(string->text, text);
+
+    if (*last_string)
+        (*last_string)->next = string;
+    else
+        symbol->rendered->strings = string; // First character
+    *last_string = string;
+
+    return 1;
+}
+
+/*
+ * Free the data structures created by render_plot
+ */
+void render_free(struct zint_symbol *symbol) {
+  if (symbol->rendered != NULL) {
+    struct zint_render_line *line;
+    struct zint_render_string *string;
+    struct zint_render_ring *ring;
+    struct zint_render_hexagon *hexagon;
+
+    // Free lines
+    line = symbol->rendered->lines;
+    while (line) {
+      struct zint_render_line *l = line;
+      line = line->next;
+      free(l);
+    }
+    // Free Strings
+    string = symbol->rendered->strings;
+    while (string) {
+      struct zint_render_string *s = string;
+      string = string->next;
+      free(s->text);
+      free(s);
+    }
+
+    // Free Rings
+    ring = symbol->rendered->rings;
+    while (ring) {
+      struct zint_render_ring *r = ring;
+      ring = ring->next;
+      free(r);
+    }
+
+    // Free Hexagons
+    hexagon = symbol->rendered->hexagons;
+    while (hexagon) {
+      struct zint_render_hexagon *h = hexagon;
+      hexagon = hexagon->next;
+      free(h);
+    }
+
+    // Free Render
+    free(symbol->rendered);
+    symbol->rendered = NULL;
+  }
+}
+
+
index d71177b..b6b331a 100644 (file)
@@ -2,7 +2,7 @@
 
 /*
     libzint - the open source barcode library
-    Copyright (C) 2008-2020 Robin Stuart <rstuart114@gmail.com>
+    Copyright (C) 2008-2019 Robin Stuart <rstuart114@gmail.com>
 
     Redistribution and use in source and binary forms, with or without
     modification, are permitted provided that the following conditions
@@ -64,6 +64,8 @@
  */
 
 #include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
 #ifdef _MSC_VER
 #include <malloc.h>
 #endif
@@ -77,7 +79,7 @@
  * combins(n,r): returns the number of Combinations of r selected from n:
  *   Combinations = n! / ((n - r)! * r!)
  **********************************************************************/
-static int combins(int n, int r) {
+int combins(int n, int r) {
     int i, j;
     int maxDenom, minDenom;
     int val;
@@ -118,7 +120,7 @@ static int combins(int n, int r) {
  * Return:
  * static int widths[] = element widths
  **********************************************************************/
-static void getRSSwidths(int val, int n, int elements, int maxWidth, int noNarrow) {
+void getRSSwidths(int val, int n, int elements, int maxWidth, int noNarrow) {
     int bar;
     int elmWidth;
     int mxwElement;
@@ -159,13 +161,12 @@ static void getRSSwidths(int val, int n, int elements, int maxWidth, int noNarro
 }
 
 /* GS1 DataBar-14 */
-INTERNAL int rss14(struct zint_symbol *symbol, unsigned char source[], int src_len) {
-    int error_number = 0, i, j;
-    large_int accum;
-    uint64_t left_pair, right_pair;
-    int data_character[4] = {0}, data_group[4] = {0}, v_odd[4], v_even[4];
+int rss14(struct zint_symbol *symbol, unsigned char source[], int src_len) {
+    int error_number = 0, i, j, mask;
+    short int accum[112], left_reg[112], right_reg[112], x_reg[112], y_reg[112];
+    int data_character[4], data_group[4], v_odd[4], v_even[4];
     int data_widths[8][4], checksum, c_left, c_right, total_widths[46], writer;
-    char latch;
+    char latch, temp[32];
     int separator_row;
 
     separator_row = 0;
@@ -191,25 +192,110 @@ INTERNAL int rss14(struct zint_symbol *symbol, unsigned char source[], int src_l
             break;
     }
 
-    large_load_str_u64(&accum, source, src_len);
+    for (i = 0; i < 112; i++) {
+        accum[i] = 0;
+        x_reg[i] = 0;
+        y_reg[i] = 0;
+    }
+
+    for (i = 0; i < 4; i++) {
+        data_character[i] = 0;
+        data_group[i] = 0;
+    }
 
+    binary_load(accum, (char*) source, src_len);
+    strcpy(temp, "10000000000000");
     if (symbol->option_1 == 2) {
         /* Add symbol linkage flag */
-        large_add_u64(&accum, 10000000000000);
+        binary_load(y_reg, temp, strlen(temp));
+        binary_add(accum, y_reg);
+        for (i = 0; i < 112; i++) {
+            y_reg[i] = 0;
+        }
     }
 
     /* Calculate left and right pair values */
+    strcpy(temp, "4537077");
+    binary_load(x_reg, temp, strlen(temp));
+
+    for (i = 0; i < 24; i++) {
+        shiftup(x_reg);
+    }
+
+    for (i = 24; i >= 0; i--) {
+        y_reg[i] = !islarger(x_reg, accum);
+        if (y_reg[i] == 1) {
+            binary_subtract(accum, x_reg);
+        }
+        shiftdown(x_reg);
+    }
 
-    right_pair = large_div_u64(&accum, 4537077);
-    left_pair = large_lo(&accum);
+    for (i = 0; i < 112; i++) {
+        left_reg[i] = y_reg[i];
+        right_reg[i] = accum[i];
+    }
 
     /* Calculate four data characters */
+    strcpy(temp, "1597");
+    binary_load(x_reg, temp, strlen(temp));
+    for (i = 0; i < 112; i++) {
+        accum[i] = left_reg[i];
+    }
 
-    data_character[0] = left_pair / 1597;
-    data_character[1] = left_pair % 1597;
+    for (i = 0; i < 24; i++) {
+        shiftup(x_reg);
+    }
+
+    for (i = 24; i >= 0; i--) {
+        y_reg[i] = !islarger(x_reg, accum);
+        if (y_reg[i] == 1) {
+            binary_subtract(accum, x_reg);
+        }
+        shiftdown(x_reg);
+    }
+
+    data_character[0] = 0;
+    data_character[1] = 0;
+    mask = 0x2000;
+    for (i = 13; i >= 0; i--) {
+        if (y_reg[i] == 1) {
+            data_character[0] += mask;
+        }
+        if (accum[i] == 1) {
+            data_character[1] += mask;
+        }
+        mask = mask >> 1;
+    }
+    strcpy(temp, "1597");
+    binary_load(x_reg, temp, strlen(temp));
+    for (i = 0; i < 112; i++) {
+        accum[i] = right_reg[i];
+    }
 
-    data_character[2] = right_pair / 1597;
-    data_character[3] = right_pair % 1597;
+    for (i = 0; i < 24; i++) {
+        shiftup(x_reg);
+    }
+
+    for (i = 24; i >= 0; i--) {
+        y_reg[i] = !islarger(x_reg, accum);
+        if (y_reg[i] == 1) {
+            binary_subtract(accum, x_reg);
+        }
+        shiftdown(x_reg);
+    }
+
+    data_character[2] = 0;
+    data_character[3] = 0;
+    mask = 0x2000;
+    for (i = 13; i >= 0; i--) {
+        if (y_reg[i] == 1) {
+            data_character[2] += mask;
+        }
+        if (accum[i] == 1) {
+            data_character[3] += mask;
+        }
+        mask = mask >> 1;
+    }
 
     /* Calculate odd and even subset values */
 
@@ -482,7 +568,7 @@ INTERNAL int rss14(struct zint_symbol *symbol, unsigned char source[], int src_l
         }
         symbol->row_height[symbol->rows] = 7;
         /* separator pattern */
-        for (i = 1; i < 46; i++) {
+        for (i = 4; i < 46; i++) {
             if (module_is_set(symbol, symbol->rows - 2, i) == module_is_set(symbol, symbol->rows, i)) {
                 if (!(module_is_set(symbol, symbol->rows - 2, i))) {
                     set_module(symbol, symbol->rows - 1, i);
@@ -493,9 +579,6 @@ INTERNAL int rss14(struct zint_symbol *symbol, unsigned char source[], int src_l
                 }
             }
         }
-        unset_module(symbol, symbol->rows - 1, 1);
-        unset_module(symbol, symbol->rows - 1, 2);
-        unset_module(symbol, symbol->rows - 1, 3);
         symbol->row_height[symbol->rows - 1] = 1;
         if (symbol->symbology == BARCODE_RSS14STACK_CC) {
             /* separator pattern for composite symbol */
@@ -649,14 +732,13 @@ INTERNAL int rss14(struct zint_symbol *symbol, unsigned char source[], int src_l
 }
 
 /* GS1 DataBar Limited */
-INTERNAL int rsslimited(struct zint_symbol *symbol, unsigned char source[], int src_len) {
-    int error_number = 0, i;
-    large_int accum;
-    uint64_t left_character, right_character;
+int rsslimited(struct zint_symbol *symbol, unsigned char source[], int src_len) {
+    int error_number = 0, i, mask;
+    short int accum[112], left_reg[112], right_reg[112], x_reg[112], y_reg[112];
     int left_group, right_group, left_odd, left_even, right_odd, right_even;
-    int left_widths[14], right_widths[14];
+    int left_character, right_character, left_widths[14], right_widths[14];
     int checksum, check_elements[14], total_widths[46], writer, j, check_digit, count;
-    char latch, hrt[15];
+    char latch, hrt[15], temp[32];
     int separator_row;
 
     separator_row = 0;
@@ -684,60 +766,172 @@ INTERNAL int rsslimited(struct zint_symbol *symbol, unsigned char source[], int
         symbol->rows += 1;
     }
 
-    large_load_str_u64(&accum, source, src_len);
+    for (i = 0; i < 112; i++) {
+        accum[i] = 0;
+        x_reg[i] = 0;
+        y_reg[i] = 0;
+    }
 
+    binary_load(accum, (char*) source, src_len);
     if (symbol->option_1 == 2) {
         /* Add symbol linkage flag */
-        large_add_u64(&accum, 2015133531096);
+        strcpy(temp, "2015133531096");
+        binary_load(y_reg, temp, strlen(temp));
+        binary_add(accum, y_reg);
+        for (i = 0; i < 112; i++) {
+            y_reg[i] = 0;
+        }
     }
 
     /* Calculate left and right pair values */
+    strcpy(temp, "2013571");
+    binary_load(x_reg, temp, strlen(temp));
 
-    right_character = large_div_u64(&accum, 2013571);
-    left_character = large_lo(&accum);
+    for (i = 0; i < 24; i++) {
+        shiftup(x_reg);
+    }
 
-    if (left_character >= 1996939) {
-        left_group = 6;
-        left_character -= 1996939;
-    } else if (left_character >= 1979845) {
-        left_group = 5;
-        left_character -= 1979845;
-    } else if (left_character >= 1491021) {
-        left_group = 4;
-        left_character -= 1491021;
-    } else if (left_character >= 1000776) {
-        left_group = 3;
-        left_character -= 1000776;
-    } else if (left_character >= 820064) {
-        left_group = 2;
-        left_character -= 820064;
-    } else if (left_character >= 183064) {
-        left_group = 1;
-        left_character -= 183064;
-    } else {
-        left_group = 0;
+    for (i = 24; i >= 0; i--) {
+        y_reg[i] = !islarger(x_reg, accum);
+        if (y_reg[i] == 1) {
+            binary_subtract(accum, x_reg);
+        }
+        shiftdown(x_reg);
     }
 
-    if (right_character >= 1996939) {
-        right_group = 6;
-        right_character -= 1996939;
-    } else if (right_character >= 1979845) {
-        right_group = 5;
-        right_character -= 1979845;
-    } else if (right_character >= 1491021) {
-        right_group = 4;
-        right_character -= 1491021;
-    } else if (right_character >= 1000776) {
-        right_group = 3;
-        right_character -= 1000776;
-    } else if (right_character >= 820064) {
-        right_group = 2;
-        right_character -= 820064;
-    } else if (right_character >= 183064) {
+    for (i = 0; i < 112; i++) {
+        left_reg[i] = y_reg[i];
+        right_reg[i] = accum[i];
+    }
+
+    left_group = 0;
+    strcpy(temp, "183063");
+    binary_load(accum, temp, strlen(temp));
+    if (islarger(left_reg, accum)) {
+        left_group = 1;
+    }
+    strcpy(temp, "820063");
+    binary_load(accum, temp, strlen(temp));
+    if (islarger(left_reg, accum)) {
+        left_group = 2;
+    }
+    strcpy(temp, "1000775");
+    binary_load(accum, temp, strlen(temp));
+    if (islarger(left_reg, accum)) {
+        left_group = 3;
+    }
+    strcpy(temp, "1491020");
+    binary_load(accum, temp, strlen(temp));
+    if (islarger(left_reg, accum)) {
+        left_group = 4;
+    }
+    strcpy(temp, "1979844");
+    binary_load(accum, temp, strlen(temp));
+    if (islarger(left_reg, accum)) {
+        left_group = 5;
+    }
+    strcpy(temp, "1996938");
+    binary_load(accum, temp, strlen(temp));
+    if (islarger(left_reg, accum)) {
+        left_group = 6;
+    }
+    right_group = 0;
+    strcpy(temp, "183063");
+    binary_load(accum, temp, strlen(temp));
+    if (islarger(right_reg, accum)) {
         right_group = 1;
-        right_character -= 183064;
-    } else {
-        right_group = 0;
+    }
+    strcpy(temp, "820063");
+    binary_load(accum, temp, strlen(temp));
+    if (islarger(right_reg, accum)) {
+        right_group = 2;
+    }
+    strcpy(temp, "1000775");
+    binary_load(accum, temp, strlen(temp));
+    if (islarger(right_reg, accum)) {
+        right_group = 3;
+    }
+    strcpy(temp, "1491020");
+    binary_load(accum, temp, strlen(temp));
+    if (islarger(right_reg, accum)) {
+        right_group = 4;
+    }
+    strcpy(temp, "1979844");
+    binary_load(accum, temp, strlen(temp));
+    if (islarger(right_reg, accum)) {
+        right_group = 5;
+    }
+    strcpy(temp, "1996938");
+    binary_load(accum, temp, strlen(temp));
+    if (islarger(right_reg, accum)) {
+        right_group = 6;
+    }
+
+    switch (left_group) {
+        case 1: strcpy(temp, "183064");
+            binary_load(accum, temp, strlen(temp));
+            binary_subtract(left_reg, accum);
+            break;
+        case 2: strcpy(temp, "820064");
+            binary_load(accum, temp, strlen(temp));
+            binary_subtract(left_reg, accum);
+            break;
+        case 3: strcpy(temp, "1000776");
+            binary_load(accum, temp, strlen(temp));
+            binary_subtract(left_reg, accum);
+            break;
+        case 4: strcpy(temp, "1491021");
+            binary_load(accum, temp, strlen(temp));
+            binary_subtract(left_reg, accum);
+            break;
+        case 5: strcpy(temp, "1979845");
+            binary_load(accum, temp, strlen(temp));
+            binary_subtract(left_reg, accum);
+            break;
+        case 6: strcpy(temp, "1996939");
+            binary_load(accum, temp, strlen(temp));
+            binary_subtract(left_reg, accum);
+            break;
+    }
+
+    switch (right_group) {
+        case 1: strcpy(temp, "183064");
+            binary_load(accum, temp, strlen(temp));
+            binary_subtract(right_reg, accum);
+            break;
+        case 2: strcpy(temp, "820064");
+            binary_load(accum, temp, strlen(temp));
+            binary_subtract(right_reg, accum);
+            break;
+        case 3: strcpy(temp, "1000776");
+            binary_load(accum, temp, strlen(temp));
+            binary_subtract(right_reg, accum);
+            break;
+        case 4: strcpy(temp, "1491021");
+            binary_load(accum, temp, strlen(temp));
+            binary_subtract(right_reg, accum);
+            break;
+        case 5: strcpy(temp, "1979845");
+            binary_load(accum, temp, strlen(temp));
+            binary_subtract(right_reg, accum);
+            break;
+        case 6: strcpy(temp, "1996939");
+            binary_load(accum, temp, strlen(temp));
+            binary_subtract(right_reg, accum);
+            break;
+    }
+
+    left_character = 0;
+    right_character = 0;
+    mask = 0x800000;
+    for (i = 23; i >= 0; i--) {
+        if (left_reg[i] == 1) {
+            left_character += mask;
+        }
+        if (right_reg[i] == 1) {
+            right_character += mask;
+        }
+        mask = mask >> 1;
     }
 
     left_odd = left_character / t_even_ltd[left_group];
@@ -864,8 +1058,8 @@ INTERNAL int rsslimited(struct zint_symbol *symbol, unsigned char source[], int
 }
 
 /* Handles all data encodation from section 7.2.5 of ISO/IEC 24724 */
-static int rss_binary_string(struct zint_symbol *symbol, char source[], char binary_string[]) {
-    int encoding_method, i, j, read_posn, last_digit, debug = (symbol->debug & ZINT_DEBUG_PRINT), mode = NUMERIC;
+int rss_binary_string(struct zint_symbol *symbol, char source[], char binary_string[]) {
+    int encoding_method, i, j, read_posn, last_digit, debug = symbol->debug, mode = NUMERIC;
     int symbol_characters, characters_per_row;
 #ifndef _MSC_VER
     char general_field[strlen(source) + 1];
@@ -1189,7 +1383,7 @@ static int rss_binary_string(struct zint_symbol *symbol, char source[], char bin
     rest of the data (if any) goes into a general-purpose data compaction field */
 
     j = 0;
-    for (i = read_posn; i < (int) strlen(source); i++) {
+    for (i = read_posn; i < strlen(source); i++) {
         general_field[j] = source[i];
         j++;
     }
@@ -1316,7 +1510,7 @@ static int rss_binary_string(struct zint_symbol *symbol, char source[], char bin
 }
 
 /* GS1 DataBar Expanded */
-INTERNAL int rssexpanded(struct zint_symbol *symbol, unsigned char source[], int src_len) {
+int rssexpanded(struct zint_symbol *symbol, unsigned char source[], int src_len) {
     int i, j, k, p, data_chars, vs[21], group[21], v_odd[21], v_even[21];
     char substring[21][14], latch;
     int char_widths[21][8], checksum, check_widths[8], c_group;
@@ -1763,3 +1957,5 @@ INTERNAL int rssexpanded(struct zint_symbol *symbol, unsigned char source[], int
 
     return 0;
 }
+
+
diff --git a/backend/sjis.c b/backend/sjis.c
deleted file mode 100644 (file)
index daa8aae..0000000
+++ /dev/null
@@ -1,1591 +0,0 @@
-/*
-    libzint - the open source barcode library
-    Copyright (C) 2008-2020 Robin Stuart <rstuart114@gmail.com>
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-    1. Redistributions of source code must retain the above copyright
-       notice, this list of conditions and the following disclaimer.
-    2. Redistributions in binary form must reproduce the above copyright
-       notice, this list of conditions and the following disclaimer in the
-       documentation and/or other materials provided with the distribution.
-    3. Neither the name of the project nor the names of its contributors
-       may be used to endorse or promote products derived from this software
-       without specific prior written permission.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
-    ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-    ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-    SUCH DAMAGE.
- */
-/* vim: set ts=4 sw=4 et : */
-/*
- * Adapted from the GNU LIBICONV library and patched to make compatible with
- * https://www.unicode.org/Public/MAPPINGS/OBSOLETE/EASTASIA/JIS/SHIFTJIS.TXT
- * with the exception of one duplicate mapping to reverse solidus 0x815F
- * and the mapping of user-defined PUA codepoints U+E000..E757.
- */
-/*
- * Copyright (C) 1999-2002, 2016 Free Software Foundation, Inc.
- * This file is part of the GNU LIBICONV Library.
- *
- * The GNU LIBICONV Library is free software; you can redistribute it
- * and/or modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * The GNU LIBICONV Library is distributed in the hope that it will be
- * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with the GNU LIBICONV Library; see the file COPYING.LIB.
- * If not, see <https://www.gnu.org/licenses/>.
- */
-#include <string.h>
-#ifdef _MSC_VER
-#include <malloc.h>
-#endif
-#include "common.h"
-#include "sjis.h"
-
-INTERNAL int utf_to_eci(const int eci, const unsigned char source[], unsigned char dest[], size_t *length); /* Convert Unicode to other encodings */
-
-/*
- * JISX0201.1976-0 (libiconv-1.16/lib/jisx0201.h)
- */
-
-static int jisx0201_wctomb(unsigned int* r, unsigned int wc) {
-    if (wc < 0x0080 && !(wc == 0x005c || wc == 0x007e)) {
-        *r = wc;
-        return 1;
-    }
-    if (wc == 0x00a5) {
-        *r = 0x5c;
-        return 1;
-    }
-    if (wc == 0x203e) {
-        *r = 0x7e;
-        return 1;
-    }
-    if (wc >= 0xff61 && wc < 0xffa0) {
-        *r = wc - 0xfec0;
-        return 1;
-    }
-    return 0;
-}
-
-/*
- * JISX0208.1990-0 (libiconv-1.16/lib/jisx0208.h)
- */
-
-/* ZINT: Table converted from JIS X 0208 to Shift JIS values using tools/cnv_sjis.php:
- * 
-while ($line = fgets(STDIN)) {
-    echo preg_replace_callback('/0x([0-9a-f]{4})/', function ($matches) {
-        $dec = hexdec($matches[1]);
-        $c1 = $dec >> 8;
-        $c2 = ($dec & 0xFF);
-        $t1 = ($c1 - 0x21) >> 1;
-        $t2 = ((($c1 - 0x21) & 1) ? 0x5e : 0) + ($c2 - 0x21);
-        $r = (($t1 < 0x1f ? ($t1 + 0x81) : ($t1 + 0xc1)) << 8) | ($t2 < 0x3f ? ($t2 + 0x40) : ($t2 + 0x41));
-        return '0x' . dechex($r);
-    }, $line);
-}
- */
-static const unsigned short jisx0208_2charset[6879] = {
-  0x8191, 0x8192, 0x8198, 0x814e, 0x81ca, 0x818b, 0x817d, 0x814c,
-  0x81f7, 0x817e, 0x8180, 0x839f, 0x83a0, 0x83a1, 0x83a2, 0x83a3,
-  0x83a4, 0x83a5, 0x83a6, 0x83a7, 0x83a8, 0x83a9, 0x83aa, 0x83ab,
-  0x83ac, 0x83ad, 0x83ae, 0x83af, 0x83b0, 0x83b1, 0x83b2, 0x83b3,
-  0x83b4, 0x83b5, 0x83b6, 0x83bf, 0x83c0, 0x83c1, 0x83c2, 0x83c3,
-  0x83c4, 0x83c5, 0x83c6, 0x83c7, 0x83c8, 0x83c9, 0x83ca, 0x83cb,
-  0x83cc, 0x83cd, 0x83ce, 0x83cf, 0x83d0, 0x83d1, 0x83d2, 0x83d3,
-  0x83d4, 0x83d5, 0x83d6, 0x8446, 0x8440, 0x8441, 0x8442, 0x8443,
-  0x8444, 0x8445, 0x8447, 0x8448, 0x8449, 0x844a, 0x844b, 0x844c,
-  0x844d, 0x844e, 0x844f, 0x8450, 0x8451, 0x8452, 0x8453, 0x8454,
-  0x8455, 0x8456, 0x8457, 0x8458, 0x8459, 0x845a, 0x845b, 0x845c,
-  0x845d, 0x845e, 0x845f, 0x8460, 0x8470, 0x8471, 0x8472, 0x8473,
-  0x8474, 0x8475, 0x8477, 0x8478, 0x8479, 0x847a, 0x847b, 0x847c,
-  0x847d, 0x847e, 0x8480, 0x8481, 0x8482, 0x8483, 0x8484, 0x8485,
-  0x8486, 0x8487, 0x8488, 0x8489, 0x848a, 0x848b, 0x848c, 0x848d,
-  0x848e, 0x848f, 0x8490, 0x8491, 0x8476, 0x815d, 0x815c, 0x8161,
-  0x8165, 0x8166, 0x8167, 0x8168, 0x81f5, 0x81f6, 0x8164, 0x8163,
-  0x81f1, 0x818c, 0x818d, 0x81a6, 0x818e, 0x81f0, 0x81a9, 0x81aa,
-  0x81a8, 0x81ab, 0x81cb, 0x81cc, 0x81cd, 0x81dd, 0x81ce, 0x81de,
-  0x81b8, 0x81b9, 0x817c, 0x81e3, 0x81e5, 0x8187, 0x81da, 0x81c8,
-  0x81c9, 0x81bf, 0x81be, 0x81e7, 0x81e8, 0x8188, 0x81e6, 0x81e4,
-  0x81e0, 0x8182, 0x81df, 0x8185, 0x8186, 0x81e1, 0x81e2, 0x81bc,
-  0x81bd, 0x81ba, 0x81bb, 0x81db, 0x81dc, 0x849f, 0x84aa, 0x84a0,
-  0x84ab, 0x84a1, 0x84ac, 0x84a2, 0x84ad, 0x84a4, 0x84af, 0x84a3,
-  0x84ae, 0x84a5, 0x84ba, 0x84b5, 0x84b0, 0x84a7, 0x84bc, 0x84b7,
-  0x84b2, 0x84a6, 0x84b6, 0x84bb, 0x84b1, 0x84a8, 0x84b8, 0x84bd,
-  0x84b3, 0x84a9, 0x84b9, 0x84be, 0x84b4, 0x81a1, 0x81a0, 0x81a3,
-  0x81a2, 0x81a5, 0x81a4, 0x819f, 0x819e, 0x819b, 0x819d, 0x819c,
-  0x81fc, 0x819a, 0x8199, 0x818a, 0x8189, 0x81f4, 0x81f3, 0x81f2,
-  0x8140, 0x8141, 0x8142, 0x8156, 0x8158, 0x8159, 0x815a, 0x8171,
-  0x8172, 0x8173, 0x8174, 0x8175, 0x8176, 0x8177, 0x8178, 0x8179,
-  0x817a, 0x81a7, 0x81ac, 0x816b, 0x816c, 0x8160, 0x829f, 0x82a0,
-  0x82a1, 0x82a2, 0x82a3, 0x82a4, 0x82a5, 0x82a6, 0x82a7, 0x82a8,
-  0x82a9, 0x82aa, 0x82ab, 0x82ac, 0x82ad, 0x82ae, 0x82af, 0x82b0,
-  0x82b1, 0x82b2, 0x82b3, 0x82b4, 0x82b5, 0x82b6, 0x82b7, 0x82b8,
-  0x82b9, 0x82ba, 0x82bb, 0x82bc, 0x82bd, 0x82be, 0x82bf, 0x82c0,
-  0x82c1, 0x82c2, 0x82c3, 0x82c4, 0x82c5, 0x82c6, 0x82c7, 0x82c8,
-  0x82c9, 0x82ca, 0x82cb, 0x82cc, 0x82cd, 0x82ce, 0x82cf, 0x82d0,
-  0x82d1, 0x82d2, 0x82d3, 0x82d4, 0x82d5, 0x82d6, 0x82d7, 0x82d8,
-  0x82d9, 0x82da, 0x82db, 0x82dc, 0x82dd, 0x82de, 0x82df, 0x82e0,
-  0x82e1, 0x82e2, 0x82e3, 0x82e4, 0x82e5, 0x82e6, 0x82e7, 0x82e8,
-  0x82e9, 0x82ea, 0x82eb, 0x82ec, 0x82ed, 0x82ee, 0x82ef, 0x82f0,
-  0x82f1, 0x814a, 0x814b, 0x8154, 0x8155, 0x8340, 0x8341, 0x8342,
-  0x8343, 0x8344, 0x8345, 0x8346, 0x8347, 0x8348, 0x8349, 0x834a,
-  0x834b, 0x834c, 0x834d, 0x834e, 0x834f, 0x8350, 0x8351, 0x8352,
-  0x8353, 0x8354, 0x8355, 0x8356, 0x8357, 0x8358, 0x8359, 0x835a,
-  0x835b, 0x835c, 0x835d, 0x835e, 0x835f, 0x8360, 0x8361, 0x8362,
-  0x8363, 0x8364, 0x8365, 0x8366, 0x8367, 0x8368, 0x8369, 0x836a,
-  0x836b, 0x836c, 0x836d, 0x836e, 0x836f, 0x8370, 0x8371, 0x8372,
-  0x8373, 0x8374, 0x8375, 0x8376, 0x8377, 0x8378, 0x8379, 0x837a,
-  0x837b, 0x837c, 0x837d, 0x837e, 0x8380, 0x8381, 0x8382, 0x8383,
-  0x8384, 0x8385, 0x8386, 0x8387, 0x8388, 0x8389, 0x838a, 0x838b,
-  0x838c, 0x838d, 0x838e, 0x838f, 0x8390, 0x8391, 0x8392, 0x8393,
-  0x8394, 0x8395, 0x8396, 0x8145, 0x815b, 0x8152, 0x8153, 0x88ea,
-  0x929a, 0x8eb5, 0x969c, 0x8fe4, 0x8e4f, 0x8fe3, 0x89ba, 0x9573,
-  0x975e, 0x98a0, 0x894e, 0x8a8e, 0x98a1, 0x90a2, 0x99c0, 0x8b75,
-  0x95b8, 0x8fe5, 0x97bc, 0x95c0, 0x98a2, 0x9286, 0x98a3, 0x8bf8,
-  0x98a4, 0x8adb, 0x924f, 0x8ee5, 0x98a5, 0x98a6, 0x98a7, 0x9454,
-  0x8b76, 0x9456, 0x93e1, 0x8cc1, 0x9652, 0xe568, 0x98a8, 0x8fe6,
-  0x98a9, 0x89b3, 0x8be3, 0x8cee, 0x96e7, 0x9ba4, 0x9790, 0x93fb,
-  0x8aa3, 0x8b54, 0x98aa, 0x98ab, 0x97b9, 0x975c, 0x9188, 0x98ad,
-  0x8e96, 0x93f1, 0x98b0, 0x895d, 0x8cdd, 0x8cdc, 0x88e4, 0x986a,
-  0x9869, 0x8db1, 0x889f, 0x98b1, 0x98b2, 0x98b3, 0x9653, 0x98b4,
-  0x8cf0, 0x88e5, 0x9692, 0x8b9c, 0x8b9d, 0x8b9e, 0x92e0, 0x97ba,
-  0x98b5, 0x98b6, 0x98b7, 0x906c, 0x8f59, 0x906d, 0x98bc, 0x98ba,
-  0x98bb, 0x8b77, 0x8da1, 0x89ee, 0x98b9, 0x98b8, 0x95a7, 0x8e65,
-  0x8e64, 0x91bc, 0x98bd, 0x9574, 0x90e5, 0x8157, 0x98be, 0x98c0,
-  0x91e3, 0x97df, 0x88c8, 0x98bf, 0x89bc, 0x8bc2, 0x9287, 0x8c8f,
-  0x98c1, 0x9443, 0x8ae9, 0x98c2, 0x88c9, 0x8cde, 0x8aea, 0x959a,
-  0x94b0, 0x8b78, 0x89ef, 0x98e5, 0x9360, 0x948c, 0x98c4, 0x94ba,
-  0x97e0, 0x904c, 0x8e66, 0x8e97, 0x89be, 0x92cf, 0x9241, 0x98c8,
-  0x88ca, 0x92e1, 0x8f5a, 0x8db2, 0x9743, 0x91cc, 0x89bd, 0x98c7,
-  0x975d, 0x98c3, 0x98c5, 0x8dec, 0x98c6, 0x9b43, 0x98ce, 0x98d1,
-  0x98cf, 0x89c0, 0x95b9, 0x98c9, 0x98cd, 0x8cf1, 0x8e67, 0x8aa4,
-  0x98d2, 0x98ca, 0x97e1, 0x8e98, 0x98cb, 0x98d0, 0x98d3, 0x98cc,
-  0x8b9f, 0x88cb, 0x8ba0, 0x89bf, 0x9b44, 0x9699, 0x958e, 0x8cf2,
-  0x904e, 0x97b5, 0x95d6, 0x8c57, 0x91a3, 0x89e2, 0x8f72, 0x98d7,
-  0x98dc, 0x98da, 0x98d5, 0x91ad, 0x98d8, 0x98db, 0x98d9, 0x95db,
-  0x98d6, 0x904d, 0x9693, 0x98dd, 0x98de, 0x8f43, 0x98eb, 0x946f,
-  0x9555, 0x98e6, 0x95ee, 0x89b4, 0x98ea, 0x98e4, 0x98ed, 0x9171,
-  0x8cc2, 0x947b, 0xe0c5, 0x98ec, 0x937c, 0x98e1, 0x8cf4, 0x8cf3,
-  0x98df, 0x8ed8, 0x98e7, 0x95ed, 0x926c, 0x98e3, 0x8c91, 0x98e0,
-  0x98e8, 0x98e2, 0x97cf, 0x98e9, 0x9860, 0x8be4, 0x8c90, 0x98ee,
-  0x98ef, 0x98f3, 0x88cc, 0x95ce, 0x98f2, 0x98f1, 0x98f5, 0x98f4,
-  0x92e2, 0x8c92, 0x98f6, 0x8ec3, 0x91a4, 0x92e3, 0x8bf4, 0x98f7,
-  0x8b55, 0x98f8, 0x98fa, 0x9654, 0x8c86, 0x8e50, 0x94f5, 0x98f9,
-  0x8dc3, 0x9762, 0x98fc, 0x9942, 0x98fb, 0x8dc2, 0x8f9d, 0x8c58,
-  0x9943, 0x8bcd, 0x9940, 0x9941, 0x93ad, 0x919c, 0x8ba1, 0x966c,
-  0x9944, 0x97bb, 0x9945, 0x9948, 0x9946, 0x916d, 0x9947, 0x9949,
-  0x994b, 0x994a, 0x95c6, 0x8b56, 0x994d, 0x994e, 0x89ad, 0x994c,
-  0x8ef2, 0x9951, 0x9950, 0x994f, 0x98d4, 0x9952, 0x8f9e, 0x9953,
-  0x9744, 0x96d7, 0x9955, 0x9954, 0x9957, 0x9956, 0x9958, 0x9959,
-  0x88f2, 0x8cb3, 0x8c5a, 0x8f5b, 0x929b, 0x8ba2, 0x90e6, 0x8cf5,
-  0x8d8e, 0x995b, 0x96c6, 0x9365, 0x8e99, 0x995a, 0x995c, 0x937d,
-  0x8a95, 0x995d, 0x93fc, 0x9153, 0x995f, 0x9960, 0x94aa, 0x8cf6,
-  0x985a, 0x9961, 0x8ba4, 0x95ba, 0x91b4, 0x8bef, 0x9354, 0x8c93,
-  0x9962, 0x9963, 0x93e0, 0x897e, 0x9966, 0x8dfb, 0x9965, 0x8dc4,
-  0x9967, 0xe3ec, 0x9968, 0x9660, 0x9969, 0x996a, 0x996b, 0x8fe7,
-  0x8eca, 0x8aa5, 0x996e, 0x996c, 0x96bb, 0x996d, 0x9579, 0x996f,
-  0x9970, 0x9971, 0x937e, 0x9975, 0x9973, 0x9974, 0x9972, 0x8de1,
-  0x9976, 0x96e8, 0x97e2, 0x9977, 0x90a6, 0x9978, 0x8f79, 0x9979,
-  0x929c, 0x97bd, 0x9380, 0x99c3, 0x997a, 0xeaa3, 0x8bc3, 0x997b,
-  0x967d, 0x8f88, 0x91fa, 0x997d, 0x93e2, 0x997e, 0x9980, 0x8a4d,
-  0x9981, 0x8ba5, 0x93ca, 0x899a, 0x8f6f, 0x949f, 0x9982, 0x9381,
-  0x906e, 0x9983, 0x95aa, 0x90d8, 0x8aa0, 0x8aa7, 0x9984, 0x9986,
-  0x8c59, 0x9985, 0x97f1, 0x8f89, 0x94bb, 0x95ca, 0x9987, 0x9798,
-  0x9988, 0x9989, 0x939e, 0x998a, 0x90a7, 0x8dfc, 0x8c94, 0x998b,
-  0x8e68, 0x8d8f, 0x92e4, 0x998d, 0x91a5, 0x8ded, 0x998e, 0x998f,
-  0x914f, 0x998c, 0x9991, 0x9655, 0x8d84, 0x9990, 0x8c95, 0x8ddc,
-  0x948d, 0x9994, 0x9992, 0x959b, 0x8fe8, 0x999b, 0x8a84, 0x9995,
-  0x9993, 0x916e, 0x9997, 0x9996, 0x8a63, 0x8c80, 0x999c, 0x97ab,
-  0x9998, 0x999d, 0x999a, 0x9999, 0x97cd, 0x8cf7, 0x89c1, 0x97f2,
-  0x8f95, 0x9377, 0x8d85, 0x99a0, 0x99a1, 0x97e3, 0x984a, 0x99a3,
-  0x8cf8, 0x99a2, 0x8a4e, 0x99a4, 0x9675, 0x92ba, 0x9745, 0x95d7,
-  0x99a5, 0xe8d3, 0x93ae, 0x99a6, 0x8aa8, 0x96b1, 0x8f9f, 0x99a7,
-  0x95e5, 0x99ab, 0x90a8, 0x99a8, 0x8bce, 0x99a9, 0x8aa9, 0x8c4d,
-  0x99ac, 0x99ad, 0x99ae, 0x99af, 0x8ed9, 0x8cf9, 0x96dc, 0x96e6,
-  0x93f5, 0x95ef, 0x99b0, 0x99b1, 0x99b3, 0x99b5, 0x99b4, 0x99b6,
-  0x89bb, 0x966b, 0x8dfa, 0x99b7, 0x9178, 0x8fa0, 0x8ba7, 0x99b8,
-  0x94d9, 0x99b9, 0x99ba, 0x99bb, 0x99bc, 0x9543, 0x8be6, 0x88e3,
-  0x93bd, 0x99bd, 0x8f5c, 0x90e7, 0x99bf, 0x99be, 0x8fa1, 0x8cdf,
-  0x99c1, 0x94bc, 0x99c2, 0x94da, 0x91b2, 0x91ec, 0x8ba6, 0x93ec,
-  0x9250, 0x948e, 0x966d, 0x99c4, 0x90e8, 0x8c54, 0x99c5, 0x99c6,
-  0x894b, 0x88f3, 0x8aeb, 0x91a6, 0x8b70, 0x9791, 0x99c9, 0x89b5,
-  0x99c8, 0x8ba8, 0x99ca, 0x96ef, 0x99cb, 0x97d0, 0x8cfa, 0x8cb4,
-  0x99cc, 0x99ce, 0x99cd, 0x907e, 0x8958, 0x897d, 0x99cf, 0x99d0,
-  0x8cb5, 0x99d1, 0x8b8e, 0x8e51, 0x99d2, 0x9694, 0x8db3, 0x8b79,
-  0x9746, 0x916f, 0x94bd, 0x8efb, 0x8f66, 0x8ee6, 0x8ef3, 0x8f96,
-  0x94be, 0x99d5, 0x8962, 0x9170, 0x8cfb, 0x8cc3, 0x8be5, 0x99d9,
-  0x9240, 0x91fc, 0x8ba9, 0x8fa2, 0x99da, 0x99d8, 0x89c2, 0x91e4,
-  0x8eb6, 0x8e6a, 0x8945, 0x8a90, 0x8d86, 0x8e69, 0x99db, 0x99dc,
-  0x8b68, 0x8a65, 0x8d87, 0x8b67, 0x92dd, 0x8944, 0x93af, 0x96bc,
-  0x8d40, 0x9799, 0x9366, 0x8cfc, 0x8c4e, 0x99e5, 0x8be1, 0x9669,
-  0x94db, 0x99e4, 0x8adc, 0x99df, 0x99e0, 0x99e2, 0x99e3, 0x8b7a,
-  0x9081, 0x95ab, 0x99e1, 0x99dd, 0x8ce1, 0x99de, 0x9843, 0x95f0,
-  0x92e6, 0x8ce0, 0x8d90, 0x99e6, 0x93db, 0x99ea, 0x8efc, 0x8ef4,
-  0x99ed, 0x99eb, 0x96a1, 0x99e8, 0x99f1, 0x99ec, 0x99ef, 0x8cc4,
-  0x96bd, 0x99f0, 0x99f2, 0x99f4, 0x8dee, 0x9861, 0x99e9, 0x99e7,
-  0x99f3, 0x99ee, 0x99f6, 0x9a42, 0x99f8, 0x99fc, 0x9a40, 0x99f9,
-  0x9a5d, 0x8de7, 0x8a50, 0x99f7, 0x9a44, 0x88f4, 0x9a43, 0x88a3,
-  0x9569, 0x9a41, 0x99fa, 0x99f5, 0x99fb, 0x8dc6, 0x9a45, 0x88f5,
-  0x9a4e, 0x9a46, 0x9a47, 0x8fa3, 0x9689, 0x9a4c, 0x9a4b, 0x934e,
-  0x9a4d, 0x9a4a, 0x8953, 0x8db4, 0x904f, 0x9a48, 0x9382, 0x9a49,
-  0x88a0, 0x9a53, 0x9742, 0x8fa5, 0x9a59, 0x9a58, 0x9a4f, 0x91c1,
-  0x9a50, 0x91ed, 0x9a55, 0x8fa4, 0x9a52, 0x96e2, 0x8c5b, 0x9a56,
-  0x9a57, 0x9a54, 0x9a5a, 0x9a51, 0x9a60, 0x9a65, 0x9a61, 0x9a5c,
-  0x9a66, 0x9150, 0x9a68, 0x8d41, 0x9a5e, 0x929d, 0x9a62, 0x9a5b,
-  0x8aab, 0x8aec, 0x8a85, 0x9a63, 0x9a5f, 0x8c96, 0x9a69, 0x9a67,
-  0x9172, 0x8b69, 0x8baa, 0x9a64, 0x8bf2, 0x8963, 0x9a6d, 0x9a6b,
-  0x9aa5, 0x9a70, 0x9a6a, 0x9a6e, 0x9a6c, 0x8e6b, 0x9a6f, 0x9a72,
-  0x9a77, 0x9a75, 0x9a74, 0x9251, 0x89c3, 0x9a71, 0x9a73, 0x8fa6,
-  0x8952, 0x9a76, 0x89dc, 0x9a82, 0x8ffa, 0x9a7d, 0x9a7b, 0x9a7c,
-  0x9a7e, 0x895c, 0x9158, 0x9a78, 0x9a79, 0x8a9a, 0x9a81, 0x8aed,
-  0x9a84, 0x9a80, 0x9a83, 0x95ac, 0x93d3, 0x94b6, 0x9a86, 0x9a85,
-  0x8a64, 0x9a87, 0x9a8a, 0x9a89, 0x9a88, 0x9458, 0x9a8b, 0x9a8c,
-  0x9a8e, 0x9a8d, 0x9a90, 0x9a93, 0x9a91, 0x9a8f, 0x9a92, 0x9a94,
-  0x9a95, 0x9a96, 0x9a97, 0x9a98, 0x9964, 0x8efa, 0x8e6c, 0x89f1,
-  0x88f6, 0x9263, 0x9a99, 0x8da2, 0x88cd, 0x907d, 0x9a9a, 0x8cc5,
-  0x8d91, 0x9a9c, 0x9a9b, 0x95de, 0x9a9d, 0x9a9f, 0x9a9e, 0x9aa0,
-  0x9aa1, 0x8c97, 0x8980, 0x9aa2, 0x9aa4, 0x9aa3, 0x9aa6, 0x9379,
-  0x9aa7, 0x88b3, 0x8ddd, 0x8c5c, 0x926e, 0x9aa8, 0x9aa9, 0x9aab,
-  0x9aac, 0x8de2, 0x8bcf, 0x9656, 0x9aaa, 0x9aad, 0x8dbf, 0x8d42,
-  0x9ab1, 0x8da3, 0x9252, 0x9aae, 0x92d8, 0x9ab2, 0x9082, 0x9ab0,
-  0x9ab3, 0x8c5e, 0x9ab4, 0x9ab5, 0x8d43, 0x8a5f, 0x9ab7, 0x9ab8,
-  0x9ab9, 0x9ab6, 0x9aaf, 0x9aba, 0x9abb, 0x9684, 0x8fe9, 0x9abd,
-  0x9abe, 0x9abc, 0x9ac0, 0x9457, 0x88e6, 0x9575, 0x9ac1, 0x8ffb,
-  0x8eb7, 0x947c, 0x8aee, 0x8de9, 0x9678, 0x93b0, 0x8c98, 0x91cd,
-  0x9abf, 0x9ac2, 0x91c2, 0x9ac3, 0x9ac4, 0x9ac6, 0x92e7, 0x8aac,
-  0xea9f, 0x8981, 0x95f1, 0x8fea, 0x9367, 0x8de4, 0x9acc, 0x95bb,
-  0x97db, 0x89f2, 0x9ac8, 0x9159, 0x9acb, 0x9383, 0x9368, 0x9384,
-  0x94b7, 0x92cb, 0x8dc7, 0x9ac7, 0x8996, 0x9355, 0x9ac9, 0x9ac5,
-  0x906f, 0x9acd, 0x8f6d, 0x8bab, 0x9ace, 0x95e6, 0x919d, 0x92c4,
-  0x9ad0, 0x966e, 0x9ad1, 0x9ad6, 0x95ad, 0x9ad5, 0x9acf, 0x9ad2,
-  0x9ad4, 0x8da4, 0x95c7, 0x9ad7, 0x9264, 0x89f3, 0x8feb, 0x9ad9,
-  0x9ad8, 0x8d88, 0x9ada, 0x9adc, 0x9adb, 0x9ade, 0x9ad3, 0x9ae0,
-  0x9adf, 0x9add, 0x8e6d, 0x9070, 0x9173, 0x9ae1, 0x90ba, 0x88eb,
-  0x9484, 0x92d9, 0x9ae3, 0x9ae2, 0x9ae4, 0x9ae5, 0x9ae6, 0x9ae7,
-  0x95cf, 0x9ae8, 0x89c4, 0x9ae9, 0x975b, 0x8a4f, 0x99c7, 0x8f67,
-  0x91bd, 0x9aea, 0x96e9, 0x96b2, 0x9aec, 0x91e5, 0x9356, 0x91be,
-  0x9576, 0x9aed, 0x9aee, 0x899b, 0x8eb8, 0x9aef, 0x88ce, 0x9af0,
-  0x9af1, 0x8982, 0x8aef, 0x93de, 0x95f2, 0x9af5, 0x9174, 0x9af4,
-  0x8c5f, 0x967a, 0x9af3, 0x9385, 0x9af7, 0x9af6, 0x9af9, 0x9af8,
-  0x899c, 0x9afa, 0x8fa7, 0x9afc, 0x9244, 0x9afb, 0x95b1, 0x8f97,
-  0x937a, 0x9b40, 0x8d44, 0x9b41, 0x9440, 0x94dc, 0x96cf, 0x9444,
-  0x9b4a, 0x8b57, 0x9764, 0x96ad, 0x9baa, 0x9b42, 0x9b45, 0x91c3,
-  0x9657, 0x9369, 0x9b46, 0x9685, 0x8dc8, 0x8fa8, 0x9b47, 0x8e6f,
-  0x8e6e, 0x88b7, 0x8cc6, 0x90a9, 0x88cf, 0x9b4b, 0x9b4c, 0x9b49,
-  0x8957, 0x8aad, 0x9b48, 0x96c3, 0x9550, 0x88a6, 0x88f7, 0x8e70,
-  0x88d0, 0x88a1, 0x9b51, 0x9b4f, 0x96ba, 0x9b52, 0x9b50, 0x9b4e,
-  0x9050, 0x9b4d, 0x95d8, 0x8ce2, 0x9b56, 0x9b57, 0x8fa9, 0x9b53,
-  0x984b, 0x946b, 0x9b55, 0x8da5, 0x9b58, 0x9577, 0x9b59, 0x9b54,
-  0x96b9, 0x947d, 0x9b5a, 0x9551, 0x9b5b, 0x9b5f, 0x9b5c, 0x89c5,
-  0x9b5e, 0x8eb9, 0x9b5d, 0x8c99, 0x9b6b, 0x9b64, 0x9b61, 0x9284,
-  0x9b60, 0x9b62, 0x9b63, 0x9b65, 0x9b66, 0x8af0, 0x9b68, 0x9b67,
-  0x9b69, 0x8fec, 0x9b6c, 0x92da, 0x8964, 0x9b6a, 0x9b6d, 0x9b6e,
-  0x9b71, 0x9b6f, 0x9b70, 0x8e71, 0x9b72, 0x8d45, 0x9b73, 0x8e9a,
-  0x91b6, 0x9b74, 0x9b75, 0x8e79, 0x8d46, 0x96d0, 0x8b47, 0x8cc7,
-  0x9b76, 0x8a77, 0x9b77, 0x91b7, 0x9b78, 0x9ba1, 0x9b79, 0x9b7a,
-  0x9b7b, 0x9b7d, 0x9b7e, 0x9b80, 0x91ee, 0x8946, 0x8ee7, 0x88c0,
-  0x9176, 0x8aae, 0x8eb3, 0x8d47, 0x9386, 0x8f40, 0x8aaf, 0x9288,
-  0x92e8, 0x88b6, 0x8b58, 0x95f3, 0x8ec0, 0x8b71, 0x90e9, 0x8eba,
-  0x9747, 0x9b81, 0x8b7b, 0x8dc9, 0x8a51, 0x8983, 0x8faa, 0x89c6,
-  0x9b82, 0x9765, 0x8f68, 0x8ee2, 0x9b83, 0x8af1, 0x93d0, 0x96a7,
-  0x9b84, 0x9b85, 0x9578, 0x9b87, 0x8aa6, 0x8bf5, 0x9b86, 0x8ab0,
-  0x9051, 0x9b8b, 0x8e40, 0x89c7, 0x9b8a, 0x9b88, 0x9b8c, 0x9b89,
-  0x944a, 0x9ecb, 0x9052, 0x9b8d, 0x97be, 0x9b8e, 0x9b90, 0x929e,
-  0x9b8f, 0x90a1, 0x8e9b, 0x91ce, 0x8ef5, 0x9595, 0x90ea, 0x8ecb,
-  0x9b91, 0x8fab, 0x9b92, 0x9b93, 0x88d1, 0x91b8, 0x9071, 0x9b94,
-  0x93b1, 0x8fac, 0x8fad, 0x9b95, 0x90eb, 0x8fae, 0x9b96, 0x9b97,
-  0x96de, 0x9b98, 0x8bc4, 0x8f41, 0x9b99, 0x9b9a, 0x8eda, 0x904b,
-  0x93f2, 0x9073, 0x94f6, 0x9441, 0x8bc7, 0x9b9b, 0x8b8f, 0x9b9c,
-  0x8bfc, 0x93cd, 0x89ae, 0x8e72, 0x9b9d, 0x9ba0, 0x9b9f, 0x8bfb,
-  0x9b9e, 0x9357, 0x91ae, 0x936a, 0x8ec6, 0x9177, 0x979a, 0x9ba2,
-  0x9ba3, 0x93d4, 0x8e52, 0x9ba5, 0x9ba6, 0x9ba7, 0x8af2, 0x9ba8,
-  0x9ba9, 0x89aa, 0x915a, 0x8ae2, 0x9bab, 0x96a6, 0x91d0, 0x8a78,
-  0x9bad, 0x9baf, 0x8add, 0x9bac, 0x9bae, 0x9bb1, 0x9bb0, 0x9bb2,
-  0x9bb3, 0x93bb, 0x8bac, 0x89e3, 0x9bb4, 0x9bb9, 0x9bb7, 0x95f5,
-  0x95f4, 0x9387, 0x9bb6, 0x8f73, 0x9bb5, 0x9092, 0x9bba, 0x8de8,
-  0x9bc0, 0x9bc1, 0x9bbb, 0x8a52, 0x9bbc, 0x9bc5, 0x9bc4, 0x9bc3,
-  0x9bbf, 0x9bbe, 0x9bc2, 0x95f6, 0x9bc9, 0x9bc6, 0x9bc8, 0x9792,
-  0x9bc7, 0x9bbd, 0x9093, 0x9bca, 0x8db5, 0x9bcb, 0x9bcc, 0x9bcf,
-  0x9bce, 0x9bcd, 0x9388, 0x9bb8, 0x9bd5, 0x9bd1, 0x9bd0, 0x9bd2,
-  0x9bd3, 0x9bd6, 0x97e4, 0x9bd7, 0x9bd4, 0x9bd8, 0x8ade, 0x9bd9,
-  0x9bdb, 0x9bda, 0x9bdc, 0x9bdd, 0x90ec, 0x8f42, 0x8f84, 0x9183,
-  0x8d48, 0x8db6, 0x8d49, 0x8b90, 0x9bde, 0x8db7, 0x8cc8, 0x9bdf,
-  0x96a4, 0x9462, 0x9be0, 0x8d4a, 0x8aaa, 0x9246, 0x8bd0, 0x8e73,
-  0x957a, 0x94bf, 0x9be1, 0x8af3, 0x9be4, 0x929f, 0x9be3, 0x9be2,
-  0x9be5, 0x92e9, 0x9083, 0x8e74, 0x90c8, 0x91d1, 0x8b41, 0x92a0,
-  0x9be6, 0x9be7, 0x8fed, 0x9658, 0x9bea, 0x9be9, 0x9be8, 0x959d,
-  0x9bf1, 0x9679, 0x9beb, 0x9bed, 0x968b, 0x9bec, 0x9bee, 0x94a6,
-  0x9bef, 0x95bc, 0x9bf0, 0x8ab1, 0x95bd, 0x944e, 0x9bf2, 0x9bf3,
-  0x8d4b, 0x8ab2, 0x9bf4, 0x8cb6, 0x9763, 0x9748, 0x8af4, 0x9bf6,
-  0x92a1, 0x8d4c, 0x8faf, 0x94dd, 0x8fb0, 0x8f98, 0x92ea, 0x95f7,
-  0x9358, 0x8d4d, 0x957b, 0x9bf7, 0x9378, 0x8dc0, 0x8cc9, 0x92eb,
-  0x88c1, 0x8f8e, 0x8d4e, 0x9766, 0x9bf8, 0x9bf9, 0x9470, 0x9bfa,
-  0x97f5, 0x984c, 0x9bfc, 0x9bfb, 0x8a66, 0x9c40, 0x9c43, 0x9c44,
-  0x9c42, 0x955f, 0x8fb1, 0x9c46, 0x9c45, 0x9c41, 0x9c47, 0x9c48,
-  0x9c49, 0x9c4c, 0x9c4a, 0x9c4b, 0x9c4d, 0x8984, 0x92ec, 0x9c4e,
-  0x8c9a, 0x89f4, 0x9455, 0x9c4f, 0x93f9, 0x95d9, 0x9c50, 0x984d,
-  0x9c51, 0x95be, 0x9c54, 0x989f, 0x98af, 0x8eae, 0x93f3, 0x9c55,
-  0x8b7c, 0x92a2, 0x88f8, 0x9c56, 0x95a4, 0x8d4f, 0x926f, 0x92ed,
-  0x96ed, 0x8cb7, 0x8cca, 0x9c57, 0x9c58, 0x9c5e, 0x8ee3, 0x92a3,
-  0x8bad, 0x9c59, 0x954a, 0x9265, 0x9c5a, 0x9c5b, 0x8bae, 0x9c5c,
-  0x9c5d, 0x9c5f, 0x9396, 0x9c60, 0x9c61, 0x9c62, 0x9c53, 0x9c52,
-  0x9c63, 0x8c60, 0x9546, 0x8dca, 0x9556, 0x92a4, 0x956a, 0x9c64,
-  0x8fb2, 0x8965, 0x9c65, 0x9c66, 0x96f0, 0x94de, 0x9c69, 0x899d,
-  0x90aa, 0x9c68, 0x9c67, 0x8c61, 0x91d2, 0x9c6d, 0x9c6b, 0x9c6a,
-  0x97a5, 0x8ce3, 0x8f99, 0x9c6c, 0x936b, 0x8f5d, 0x93be, 0x9c70,
-  0x9c6f, 0x9c6e, 0x9c71, 0x8ce4, 0x9c72, 0x959c, 0x8f7a, 0x9c73,
-  0x94f7, 0x93bf, 0x92a5, 0x934f, 0x9c74, 0x8b4a, 0x9053, 0x954b,
-  0x8af5, 0x9445, 0x9c75, 0x8e75, 0x9659, 0x965a, 0x899e, 0x9c7a,
-  0x9289, 0x9c77, 0x89f5, 0x9cab, 0x9c79, 0x944f, 0x9c78, 0x9c76,
-  0x8d9a, 0x9c7c, 0x9c83, 0x9c89, 0x9c81, 0x937b, 0x9c86, 0x957c,
-  0x9c80, 0x9c85, 0x97e5, 0x8e76, 0x91d3, 0x9c7d, 0x8b7d, 0x9c88,
-  0x90ab, 0x8985, 0x9c82, 0x89f6, 0x9c87, 0x8baf, 0x9c84, 0x9c8a,
-  0x9c8c, 0x9c96, 0x9c94, 0x9c91, 0x9c90, 0x97f6, 0x9c92, 0x8bb0,
-  0x8d50, 0x8f9a, 0x9c99, 0x9c8b, 0x9c8f, 0x9c7e, 0x89f8, 0x9c93,
-  0x9c95, 0x9270, 0x8da6, 0x89b6, 0x9c8d, 0x9c98, 0x9c97, 0x8bb1,
-  0x91a7, 0x8a86, 0x8c62, 0x9c8e, 0x9c9a, 0x9c9d, 0x9c9f, 0x8ebb,
-  0x9ca5, 0x92ee, 0x9c9b, 0x9ca3, 0x89f7, 0x9ca1, 0x9ca2, 0x9c9e,
-  0x9ca0, 0x8ce5, 0x9749, 0x8ab3, 0x8978, 0x9ca4, 0x9459, 0x88ab,
-  0x94df, 0x9c7b, 0x9caa, 0x9cae, 0x96e3, 0x9ca7, 0x9389, 0x9cac,
-  0x8fee, 0x9cad, 0x93d5, 0x9866, 0x9ca9, 0x9caf, 0x8d9b, 0x90c9,
-  0x88d2, 0x9ca8, 0x9ca6, 0x9179, 0x9c9c, 0x8e53, 0x91c4, 0x9cbb,
-  0x917a, 0x9cb6, 0x9cb3, 0x9cb4, 0x8ee4, 0x9cb7, 0x9cba, 0x9cb5,
-  0x8f44, 0x9cb8, 0x9cb2, 0x96fa, 0x96f9, 0x9cbc, 0x9cbd, 0x88d3,
-  0x9cb1, 0x8bf0, 0x88a4, 0x8ab4, 0x9cb9, 0x9cc1, 0x9cc0, 0x9cc5,
-  0x9cc6, 0x9cc4, 0x9cc7, 0x9cbf, 0x9cc3, 0x9cc8, 0x9cc9, 0x9cbe,
-  0x8e9c, 0x9cc2, 0x91d4, 0x8d51, 0x9cb0, 0x9054, 0x9cd6, 0x95e7,
-  0x9ccc, 0x9ccd, 0x9cce, 0x9cd5, 0x9cd4, 0x969d, 0x8ab5, 0x9cd2,
-  0x8c64, 0x8a53, 0x9ccf, 0x97b6, 0x9cd1, 0x88d4, 0x9cd3, 0x9cca,
-  0x9cd0, 0x9cd7, 0x8c63, 0x9ccb, 0x977c, 0x974a, 0x9cda, 0x9cde,
-  0x919e, 0x97f7, 0x9cdf, 0x9cdc, 0x9cd9, 0x9cd8, 0x9cdd, 0x95ae,
-  0x93b2, 0x8c65, 0x9ce0, 0x9cdb, 0x9ce1, 0x8c9b, 0x89af, 0x9ce9,
-  0x8ab6, 0x9ce7, 0x9ce8, 0x8da7, 0x9ce6, 0x9ce4, 0x9ce3, 0x9cea,
-  0x9ce2, 0x9cec, 0x89f9, 0x9cee, 0x9ced, 0x92a6, 0x9cf1, 0x9cef,
-  0x9ce5, 0x8c9c, 0x9cf0, 0x9cf4, 0x9cf3, 0x9cf5, 0x9cf2, 0x9cf6,
-  0x9cf7, 0x9cf8, 0x95e8, 0x9cfa, 0x9cf9, 0x8f5e, 0x90ac, 0x89e4,
-  0x89fa, 0x9cfb, 0x88bd, 0x90ca, 0x9cfc, 0xe6c1, 0x9d40, 0x8c81,
-  0x9d41, 0x90ed, 0x9d42, 0x9d43, 0x8b59, 0x9d44, 0x9d45, 0x9d46,
-  0x91d5, 0x8ccb, 0x96df, 0x965b, 0x8f8a, 0x9d47, 0x90ee, 0xe7bb,
-  0x94e0, 0x8ee8, 0x8dcb, 0x9d48, 0x91c5, 0x95a5, 0x91ef, 0x9d4b,
-  0x9d49, 0x9d4c, 0x9d4a, 0x9d4d, 0x95af, 0x88b5, 0x957d, 0x94e1,
-  0x9d4e, 0x9d51, 0x8fb3, 0x8b5a, 0x9d4f, 0x9d56, 0x8fb4, 0x9d50,
-  0x9463, 0x977d, 0x9d52, 0x9d53, 0x9d57, 0x938a, 0x9d54, 0x8d52,
-  0x90dc, 0x9d65, 0x94b2, 0x91f0, 0x94e2, 0x9dab, 0x95f8, 0x92ef,
-  0x9695, 0x9d5a, 0x899f, 0x928a, 0x9d63, 0x9253, 0x9d5d, 0x9d64,
-  0x9d5f, 0x9d66, 0x9d62, 0x9d61, 0x948f, 0x9d5b, 0x89fb, 0x9d59,
-  0x8b91, 0x91f1, 0x9d55, 0x9d58, 0x8d53, 0x90d9, 0x8fb5, 0x9d60,
-  0x9471, 0x8b92, 0x8a67, 0x8a87, 0x9040, 0x9d68, 0x9d6d, 0x9d69,
-  0x8c9d, 0x9d6e, 0x8e41, 0x8d89, 0x8f45, 0x9d5c, 0x8e9d, 0x9d6b,
-  0x8e77, 0x9d6c, 0x88c2, 0x9d67, 0x92a7, 0x8b93, 0x8bb2, 0x9d6a,
-  0x88a5, 0x8dc1, 0x9055, 0x92f0, 0x94d2, 0x9d70, 0x917d, 0x91a8,
-  0x8e4a, 0x9d71, 0x9d73, 0x9d6f, 0x95df, 0x92bb, 0x917b, 0x95f9,
-  0x8ecc, 0x9d80, 0x9d7e, 0x9098, 0x8c9e, 0x9d78, 0x8fb7, 0x93e6,
-  0x9450, 0x9d76, 0x917c, 0x8ef6, 0x9d7b, 0x8fb6, 0x9d75, 0x9d7a,
-  0x9472, 0x9d74, 0x8c40, 0x8a7c, 0x9d7c, 0x97a9, 0x8dcc, 0x9254,
-  0x9d79, 0x90da, 0x8d54, 0x9084, 0x8986, 0x915b, 0x9d77, 0x8b64,
-  0x8c66, 0x92cd, 0x9d7d, 0x917e, 0x9d81, 0x9d83, 0x91b5, 0x9d89,
-  0x9d84, 0x9d86, 0x9560, 0x92f1, 0x9d87, 0x974b, 0x9767, 0x8ab7,
-  0x88ac, 0x9d85, 0x9d82, 0x8af6, 0x8987, 0x9d88, 0x9768, 0x9d8c,
-  0x91b9, 0x9d93, 0x9d8d, 0x9d8a, 0x9d91, 0x9d72, 0x9d8e, 0x9d92,
-  0x94c0, 0x938b, 0x9d8b, 0x9d8f, 0x8c67, 0x8def, 0x90db, 0x9d97,
-  0x9345, 0x9d94, 0x9680, 0x9d95, 0x9d96, 0x96cc, 0x90a0, 0x8c82,
-  0x9d9d, 0x8e54, 0x9d9a, 0x9d99, 0x9451, 0x93b3, 0x9350, 0x9d9b,
-  0x9d9c, 0x958f, 0x9464, 0x8e42, 0x90ef, 0x966f, 0x8a68, 0x9da3,
-  0x9d9e, 0x9769, 0x9da5, 0x9da1, 0x9da2, 0x9180, 0x9da0, 0x9d5e,
-  0x9da4, 0x9d9f, 0x9da9, 0x9daa, 0x9346, 0x9dac, 0x8e43, 0x9da7,
-  0x8b5b, 0x9dad, 0x9da6, 0x9db1, 0x9db0, 0x9daf, 0x9db2, 0x9db4,
-  0x8fef, 0x9db3, 0x9db7, 0x9db5, 0x9db6, 0x9d90, 0x9db9, 0x9db8,
-  0x9d98, 0x9dba, 0x9dae, 0x8e78, 0x9dbb, 0x9dbc, 0x9dbe, 0x9dbd,
-  0x9dbf, 0x89fc, 0x8d55, 0x95fa, 0x90ad, 0x8ccc, 0x9dc1, 0x9dc4,
-  0x9571, 0x8b7e, 0x9dc3, 0x9dc2, 0x9473, 0x9dc5, 0x8bb3, 0x9dc7,
-  0x9dc6, 0x8ab8, 0x8e55, 0x93d6, 0x8c68, 0x9094, 0x9dc8, 0x90ae,
-  0x9347, 0x957e, 0x9dc9, 0x9dca, 0x9dcb, 0x95b6, 0x9b7c, 0x90c4,
-  0x956b, 0x8dd6, 0x94e3, 0x94c1, 0x936c, 0x97bf, 0x9dcd, 0x8ece,
-  0x9dce, 0x88b4, 0x8bd2, 0x90cb, 0x9580, 0x9dcf, 0x8e61, 0x9266,
-  0x8e7a, 0x9056, 0x9dd0, 0x95fb, 0x8997, 0x8e7b, 0x9dd3, 0x9dd1,
-  0x9dd4, 0x97b7, 0x9dd2, 0x90f9, 0x9dd5, 0x91b0, 0x9dd6, 0x8af8,
-  0x9dd8, 0x9dd7, 0x9dd9, 0x9dda, 0x8af9, 0x93fa, 0x9255, 0x8b8c,
-  0x8e7c, 0x9181, 0x8f7b, 0x88ae, 0x9ddb, 0x89a0, 0x9ddf, 0x8d56,
-  0x9dde, 0x8da9, 0x8fb8, 0x9ddd, 0x8fb9, 0x96be, 0x8da8, 0x88d5,
-  0x90cc, 0x9de4, 0x90af, 0x8966, 0x8f74, 0x9686, 0x8df0, 0x8fba,
-  0x90a5, 0x9de3, 0x9de1, 0x9de2, 0x928b, 0x9e45, 0x9de8, 0x8e9e,
-  0x8d57, 0x9de6, 0x9de7, 0x9057, 0x9de5, 0x8e4e, 0x9dea, 0x9de9,
-  0x9dee, 0x9def, 0x9deb, 0x8a41, 0x9dec, 0x9ded, 0x94d3, 0x9581,
-  0x8c69, 0x9df0, 0x90b0, 0x8fbb, 0x9271, 0x8bc5, 0x9df1, 0x9df5,
-  0x89c9, 0x9df2, 0x9df4, 0x9df3, 0x8f8b, 0x9267, 0x88c3, 0x9df6,
-  0x9df7, 0x92a8, 0x97ef, 0x8e62, 0x95e9, 0x965c, 0x9e41, 0x9df9,
-  0x9dfc, 0x9dfb, 0x9df8, 0x9e40, 0x93dc, 0x9dfa, 0x9e42, 0x8f8c,
-  0x9e43, 0x976a, 0x9498, 0x9e44, 0x9e46, 0x9e47, 0x9e48, 0x8bc8,
-  0x8967, 0x8d58, 0x9e49, 0x9e4a, 0x8f91, 0x9182, 0x99d6, 0x915d,
-  0x915c, 0x91d6, 0x8dc5, 0x98f0, 0x8c8e, 0x974c, 0x95fc, 0x959e,
-  0x9e4b, 0x8df1, 0x92bd, 0x9e4c, 0x984e, 0x965d, 0x92a9, 0x9e4d,
-  0x8afa, 0x9e4e, 0x9e4f, 0x96d8, 0x96a2, 0x9696, 0x967b, 0x8e44,
-  0x9e51, 0x8ee9, 0x9670, 0x9e53, 0x9e56, 0x9e55, 0x8af7, 0x8b80,
-  0x9e52, 0x9e54, 0x9e57, 0x9099, 0x979b, 0x88c7, 0x8dde, 0x91ba,
-  0x8edb, 0x8ff1, 0x9e5a, 0x936d, 0x9e58, 0x91a9, 0x9e59, 0x8ff0,
-  0x96db, 0x9e5b, 0x9e5c, 0x9788, 0x9e61, 0x8d59, 0x9474, 0x9e5e,
-  0x938c, 0x9ddc, 0x9de0, 0x8b6e, 0x9466, 0x9e60, 0x8fbc, 0x94c2,
-  0x9e66, 0x94f8, 0x9e5d, 0x9e63, 0x9e62, 0x90cd, 0x968d, 0x97d1,
-  0x9687, 0x89ca, 0x8e7d, 0x9867, 0x9e65, 0x9095, 0x9e64, 0x9e5f,
-  0x8ccd, 0x9e6b, 0x9e69, 0x89cb, 0x9e67, 0x9e6d, 0x9e73, 0x91c6,
-  0x95bf, 0x9e75, 0x9541, 0x9e74, 0x9490, 0x965e, 0x8ab9, 0x90f5,
-  0x8f5f, 0x92d1, 0x974d, 0x9e70, 0x9e6f, 0x9e71, 0x9e6e, 0x9e76,
-  0x9e6c, 0x9e6a, 0x9e72, 0x9e68, 0x928c, 0x96f6, 0x8ec4, 0x8df2,
-  0x8db8, 0x968f, 0x8a60, 0x92cc, 0x93c8, 0x8968, 0x90f0, 0x90b2,
-  0x8c49, 0x9e78, 0x8d5a, 0x8a9c, 0x9e7a, 0x8a94, 0x9e81, 0x9e7d,
-  0x90f1, 0x8a6a, 0x8daa, 0x8a69, 0x8dcd, 0x9e7b, 0x8c85, 0x8c6a,
-  0x938d, 0x9e79, 0x88c4, 0x9e7c, 0x9e7e, 0x8bcb, 0x8c4b, 0x8aba,
-  0x8b6a, 0x9e82, 0x8df7, 0x9691, 0x8e56, 0x9e83, 0x954f, 0x9e8f,
-  0x89b1, 0x9e84, 0x9e95, 0x9e85, 0x97c0, 0x9e8c, 0x947e, 0x9e94,
-  0x9e87, 0x88b2, 0x9e89, 0x8d5b, 0x9e8b, 0x9e8a, 0x9e86, 0x9e91,
-  0x8fbd, 0x9aeb, 0x8ce6, 0x979c, 0x9e88, 0x92f2, 0x8a42, 0x8dab,
-  0x9e80, 0x9e90, 0x8a81, 0x9e8e, 0x9e92, 0x938e, 0x8afc, 0x9eb0,
-  0x96c7, 0x9e97, 0x8afb, 0x9e9e, 0x965f, 0x9e9f, 0x9ea1, 0x9ea5,
-  0x9e99, 0x9249, 0x938f, 0x9ea9, 0x9e9c, 0x9ea6, 0x9ea0, 0x9058,
-  0x9eaa, 0x90b1, 0x9ea8, 0x8abb, 0x986f, 0x9e96, 0x9ea4, 0x88d6,
-  0x9e98, 0x96b8, 0x9e9d, 0x9041, 0x92c5, 0x9e93, 0x9ea3, 0x909a,
-  0x9ead, 0x8a91, 0x8c9f, 0x9eaf, 0x9e9a, 0x9eae, 0x9ea7, 0x9e9b,
-  0x9eab, 0x9eac, 0x9ebd, 0x93cc, 0x9ea2, 0x9eb9, 0x9ebb, 0x92d6,
-  0x976b, 0x9596, 0x9eb6, 0x91c8, 0x9ebc, 0x915e, 0x9eb3, 0x9ec0,
-  0x9ebf, 0x93ed, 0x9ebe, 0x93e8, 0x9ec2, 0x9eb5, 0x8bc6, 0x9eb8,
-  0x8f7c, 0x9480, 0x9eba, 0x8bc9, 0x9eb2, 0x9eb4, 0x9eb1, 0x984f,
-  0x8a79, 0x9eb7, 0x9ec1, 0x8a54, 0x8de5, 0x897c, 0x9ed2, 0x9850,
-  0x9ed5, 0x9059, 0x9ed4, 0x9ed3, 0x9ed0, 0x9ec4, 0x9ee1, 0x9ec3,
-  0x9ed6, 0x9ece, 0x9ec9, 0x9ec6, 0x9ec7, 0x9ecf, 0xeaa0, 0x9ecc,
-  0x8d5c, 0x92c6, 0x9184, 0x9eca, 0x9ec5, 0x9ec8, 0x976c, 0x968a,
-  0x9ecd, 0x9ed7, 0x9edf, 0x9ed8, 0x9ee5, 0x9ee3, 0x9ede, 0x9edd,
-  0x92ce, 0x9185, 0x9edb, 0x9ed9, 0x9ee0, 0x9ee6, 0x94f3, 0x9eec,
-  0x9ee7, 0x9eea, 0x9ee4, 0x9294, 0x9557, 0x9eda, 0x9ee2, 0x8fbe,
-  0x96cd, 0x9ef6, 0x9ee9, 0x8ca0, 0x89a1, 0x8a7e, 0x9ed1, 0x8fbf,
-  0x9eee, 0x9ef5, 0x8ef7, 0x8a92, 0x924d, 0x9eeb, 0x9ef0, 0x9ef4,
-  0x8bb4, 0x8b6b, 0x9ef2, 0x8b40, 0x93c9, 0x9ef1, 0x9ef3, 0x9eed,
-  0x9eef, 0x8a80, 0x9268, 0x9efa, 0x9ef8, 0x8ce7, 0x9ef7, 0x9f40,
-  0x9e77, 0x9ef9, 0x9efb, 0x9efc, 0x9f4b, 0x9f47, 0x9e8d, 0x9f46,
-  0x9f45, 0x9f42, 0x9ee8, 0x9f44, 0x9f43, 0x9f49, 0x9845, 0x9f4c,
-  0x8bf9, 0x9f48, 0x9f4a, 0x94a5, 0x9f4d, 0x9f51, 0x9f4e, 0x9793,
-  0x9f4f, 0x9edc, 0x9f52, 0x9f53, 0x8954, 0x9f55, 0x8c87, 0x8e9f,
-  0x8bd3, 0x89a2, 0x977e, 0x9f57, 0x9f56, 0x9f59, 0x8b5c, 0x8bd4,
-  0x8abc, 0x9f5c, 0x9f5b, 0x9f5d, 0x89cc, 0x9256, 0x9f5e, 0x8abd,
-  0x9f60, 0x9f5f, 0x9f61, 0x9f62, 0x9f63, 0x8e7e, 0x90b3, 0x8d9f,
-  0x9590, 0x95e0, 0x9863, 0x8e95, 0x8dce, 0x97f0, 0x9f64, 0x9f65,
-  0x8e80, 0x9f66, 0x9f67, 0x9f69, 0x9f68, 0x9677, 0x8f7d, 0x8eea,
-  0x8e63, 0x9f6a, 0x9f6c, 0x9042, 0x9f6b, 0x9f6d, 0x9f6e, 0x9f6f,
-  0x9f70, 0x9f71, 0x9f73, 0x9f72, 0x9f74, 0x89a3, 0x9269, 0x9f75,
-  0x8e45, 0x8a6b, 0x9f76, 0x9361, 0x9aca, 0x8b42, 0x9f77, 0x9f78,
-  0x95ea, 0x9688, 0x93c5, 0x9f79, 0x94e4, 0x94f9, 0x96d1, 0x9f7a,
-  0x9f7c, 0x9f7b, 0x9f7e, 0x9f7d, 0x9f81, 0x8e81, 0x96af, 0x9f82,
-  0x9f83, 0x8b43, 0x9f84, 0x9f86, 0x9f85, 0x9085, 0x9558, 0x8969,
-  0x94c3, 0x92f3, 0x8f60, 0x8b81, 0x94c4, 0x8eac, 0x9f88, 0x8abe,
-  0x8998, 0x93f0, 0x9f87, 0x8d5d, 0x9272, 0x9f89, 0x9f91, 0x9f8a,
-  0x91bf, 0x8b82, 0x9f92, 0x8c88, 0x8b44, 0x9f90, 0x9f8e, 0x9f8b,
-  0x9780, 0x92be, 0x93d7, 0x9f8c, 0x9f94, 0x9f93, 0x8c42, 0x89ab,
-  0x8db9, 0x9f8d, 0x9f8f, 0x9676, 0x91f2, 0x9697, 0x9f9c, 0x9f9d,
-  0x89cd, 0x95a6, 0x96fb, 0x9f9f, 0x8ea1, 0x8fc0, 0x9f98, 0x9f9e,
-  0x8988, 0x8bb5, 0x9f95, 0x9f9a, 0x90f2, 0x9491, 0x94e5, 0x9f97,
-  0x9640, 0x9f99, 0x9fa2, 0x9fa0, 0x9f9b, 0x9641, 0x9467, 0x8b83,
-  0x9344, 0x928d, 0x9fa3, 0x9fa1, 0x91d7, 0x9f96, 0x896a, 0x976d,
-  0x9fae, 0x9fad, 0x90f4, 0x9faa, 0x978c, 0x93b4, 0x9fa4, 0x92c3,
-  0x896b, 0x8d5e, 0x9fa7, 0x8f46, 0x9fac, 0x9fab, 0x9fa6, 0x9fa9,
-  0x8a88, 0x9fa8, 0x9468, 0x97ac, 0x8ff2, 0x90f3, 0x9fb4, 0x9fb2,
-  0x956c, 0x9faf, 0x9fb1, 0x8959, 0x8d5f, 0x9851, 0x8a5c, 0x9582,
-  0x9781, 0x8a43, 0x905a, 0x9fb3, 0x9fb8, 0x8fc1, 0x974f, 0x9fb5,
-  0x9fb0, 0x9fb6, 0x97dc, 0x9393, 0x93c0, 0x8a55, 0x8974, 0x9fbc,
-  0x9fbf, 0x97c1, 0x9784, 0x9fc6, 0x9fc0, 0x9fbd, 0x97d2, 0x9fc3,
-  0x8f69, 0x9fc5, 0x9fca, 0x9391, 0x9fc8, 0x9fc2, 0x9257, 0x9fc9,
-  0x9fbe, 0x9fc4, 0x9fcb, 0x88fa, 0x9fc1, 0x9fcc, 0x905b, 0x8f7e,
-  0x95a3, 0x8dac, 0x9fb9, 0x9fc7, 0x9359, 0x90b4, 0x8a89, 0x8dcf,
-  0x8fc2, 0x9fbb, 0x8f61, 0x8c6b, 0x9fba, 0x9fd0, 0x8f8d, 0x8cb8,
-  0x9fdf, 0x9fd9, 0x8b94, 0x936e, 0x9fd4, 0x9fdd, 0x88ad, 0x8951,
-  0x89b7, 0x9fd6, 0x91aa, 0x9fcd, 0x9fcf, 0x8d60, 0x9fe0, 0x9fdb,
-  0x9fd3, 0x9fda, 0x96a9, 0x9fd8, 0x9fdc, 0x8cce, 0x8fc3, 0x9258,
-  0x9fd2, 0x974e, 0x9fd5, 0x9fce, 0x9392, 0x9fd1, 0x9fd7, 0x9870,
-  0x8ebc, 0x969e, 0x9fe1, 0x94ac, 0x9fed, 0x8cb9, 0x8f80, 0x9fe3,
-  0x97ad, 0x8d61, 0x9ff0, 0x88ec, 0x9fee, 0x9fe2, 0x9fe8, 0x9fea,
-  0x976e, 0x9fe5, 0x934d, 0x9fe7, 0x9fef, 0x9fe9, 0x96c5, 0x9fe4,
-  0x8ea0, 0x9ffc, 0x8a8a, 0x9fe6, 0x9feb, 0x9fec, 0x91ea, 0x91d8,
-  0x9ff4, 0x9ffa, 0x9ff8, 0x9348, 0xe042, 0x9ff5, 0x9ff6, 0x9fde,
-  0x8b99, 0x9559, 0x8ebd, 0x8d97, 0x9852, 0x9ff2, 0xe041, 0x8989,
-  0x9186, 0x9499, 0x8abf, 0x97f8, 0x969f, 0x92d0, 0x9ff9, 0x9ffb,
-  0x9151, 0xe040, 0x9ff7, 0x9ff1, 0x8ac1, 0x8c89, 0xe04e, 0xe049,
-  0x90f6, 0x8a83, 0x8f81, 0xe052, 0xe04b, 0x92aa, 0xe048, 0x92d7,
-  0xe06b, 0xe045, 0xe044, 0xe04d, 0xe047, 0xe046, 0xe04c, 0x909f,
-  0xe043, 0xe04f, 0xe050, 0x8ac0, 0xe055, 0xe054, 0xe056, 0xe059,
-  0x9362, 0xe053, 0xe057, 0x8c83, 0x91f7, 0xe051, 0x945a, 0xe058,
-  0xe05d, 0xe05b, 0xe05e, 0xe061, 0xe05a, 0x8d8a, 0x9447, 0x9fb7,
-  0x9794, 0xe05c, 0xe060, 0x91f3, 0xe05f, 0xe04a, 0xe889, 0xe064,
-  0xe068, 0xe066, 0xe062, 0xe063, 0xe067, 0xe065, 0x956d, 0xe06d,
-  0xe06a, 0xe069, 0xe06c, 0x93d2, 0xe06e, 0x9295, 0x91eb, 0x90a3,
-  0xe06f, 0xe071, 0xe070, 0x9ff3, 0xe072, 0x93e5, 0xe073, 0x89ce,
-  0x9394, 0x8a44, 0x8b84, 0x8edc, 0x8dd0, 0x9846, 0x9086, 0x898a,
-  0xe075, 0xe074, 0xe078, 0x9259, 0xe07b, 0xe076, 0xe07a, 0xe079,
-  0x935f, 0x88d7, 0x97f3, 0xe07d, 0x8947, 0xe080, 0xe07e, 0xe07c,
-  0xe077, 0x9642, 0xe082, 0xe081, 0x898b, 0xe084, 0x95b0, 0xe083,
-  0x96b3, 0x8fc5, 0x9152, 0x8fc4, 0x97f9, 0xe08a, 0x90f7, 0xe086,
-  0xe08b, 0x898c, 0xe089, 0x9481, 0xe085, 0xe088, 0x8fc6, 0x94cf,
-  0xe08c, 0x8ecf, 0x90f8, 0xe08f, 0xe087, 0x8c46, 0xe08d, 0x976f,
-  0xe090, 0xeaa4, 0x8f6e, 0xe091, 0xe092, 0x944d, 0xe094, 0xe095,
-  0x9452, 0x9395, 0xe097, 0xe099, 0x97d3, 0xe096, 0xe098, 0x898d,
-  0xe093, 0x9a7a, 0xe09a, 0x9187, 0x8e57, 0xe09c, 0xe09b, 0x9043,
-  0x99d7, 0xe09d, 0xe09f, 0xe08e, 0xe09e, 0xe0a0, 0x949a, 0xe0a1,
-  0xe0a2, 0xe0a3, 0xe0a4, 0x92dc, 0xe0a6, 0xe0a5, 0xe0a7, 0xe0a8,
-  0x8edd, 0x9583, 0x96ea, 0xe0a9, 0xe0aa, 0x9175, 0x8ea2, 0xe0ab,
-  0xe0ac, 0xe0ad, 0x95d0, 0x94c5, 0xe0ae, 0x9476, 0x92ab, 0xe0af,
-  0x89e5, 0x8b8d, 0x96c4, 0x96b4, 0x89b2, 0x9853, 0x9671, 0x95a8,
-  0x90b5, 0xe0b0, 0x93c1, 0x8ca1, 0xe0b1, 0x8dd2, 0xe0b3, 0xe0b2,
-  0xe0b4, 0xe0b5, 0xe0b6, 0x8b5d, 0xe0b7, 0xe0b8, 0x8ca2, 0x94c6,
-  0xe0ba, 0x8ff3, 0xe0b9, 0x8bb6, 0xe0bb, 0xe0bd, 0xe0bc, 0xe0be,
-  0x8ccf, 0xe0bf, 0x8be7, 0x915f, 0x8d9d, 0xe0c1, 0xe0c2, 0xe0c0,
-  0x8eeb, 0x93c6, 0x8bb7, 0xe0c4, 0x924b, 0xe0c3, 0x9854, 0x9482,
-  0xe0c7, 0xe0c9, 0xe0c6, 0x96d2, 0xe0c8, 0xe0ca, 0x97c2, 0xe0ce,
-  0xe0cd, 0x9296, 0x944c, 0x8ca3, 0xe0cc, 0xe0cb, 0x9750, 0x9751,
-  0xe0cf, 0x898e, 0x8d96, 0x8e82, 0xe0d0, 0xe0d1, 0xe0d3, 0x8f62,
-  0xe0d5, 0xe0d4, 0xe0d6, 0x8a6c, 0xe0d8, 0xe0d7, 0xe0da, 0xe0d9,
-  0x8cba, 0x97a6, 0x8bca, 0x89a4, 0x8be8, 0x8adf, 0x97e6, 0xe0dc,
-  0xe0de, 0xe0df, 0x89cf, 0xe0db, 0x8e58, 0x92bf, 0xe0dd, 0xe0e2,
-  0x8eec, 0xe0e0, 0x8c5d, 0x94c7, 0xe0e1, 0xe0fc, 0xe0e7, 0x8cbb,
-  0x8b85, 0xe0e4, 0x979d, 0x97ae, 0x91f4, 0xe0e6, 0xe0e8, 0x97d4,
-  0x8bd5, 0x94fa, 0x9469, 0xe0e9, 0xe0eb, 0xe0ee, 0xe0ea, 0xe0ed,
-  0x8ce8, 0x896c, 0xe0ef, 0x9090, 0xe0ec, 0x97da, 0xe0f2, 0xeaa2,
-  0xe0f0, 0xe0f3, 0xe0e5, 0xe0f1, 0x8dba, 0xe0f4, 0xe0f5, 0x979e,
-  0xe0f6, 0xe0f7, 0xe0e3, 0xe0f8, 0x8ac2, 0x8ea3, 0xe0f9, 0xe0fa,
-  0xe0fb, 0x895a, 0xe140, 0x955a, 0xe141, 0x8aa2, 0xe142, 0xe143,
-  0xe144, 0xe146, 0xe147, 0xe145, 0x9572, 0xe149, 0xe148, 0xe14b,
-  0xe14a, 0xe14c, 0xe14d, 0xe14f, 0xe14e, 0x8d99, 0xe151, 0xe150,
-  0x8ac3, 0x9072, 0x935b, 0xe152, 0x90b6, 0x8e59, 0x8999, 0xe153,
-  0x9770, 0x95e1, 0xe154, 0x9363, 0x9752, 0x8d62, 0x905c, 0x926a,
-  0x99b2, 0x92ac, 0x89e6, 0xe155, 0xe156, 0xe15b, 0xe159, 0xe158,
-  0x9dc0, 0x8a45, 0xe157, 0x88d8, 0x94a8, 0x94c8, 0x97af, 0xe15c,
-  0xe15a, 0x927b, 0x90a4, 0x94a9, 0x954c, 0xe15e, 0x97aa, 0x8c6c,
-  0xe15f, 0xe15d, 0x94d4, 0xe160, 0xe161, 0x88d9, 0x8ff4, 0xe166,
-  0xe163, 0x93eb, 0xe162, 0x8b45, 0xe169, 0xe164, 0xe165, 0xe168,
-  0xe167, 0x9544, 0x9161, 0x9160, 0x8b5e, 0xe16a, 0xe16b, 0xe16c,
-  0xe16e, 0xe16d, 0x8975, 0xe176, 0x94e6, 0xe170, 0xe172, 0xe174,
-  0x905d, 0xe175, 0xe173, 0x8ebe, 0xe16f, 0xe171, 0x9561, 0x8fc7,
-  0xe178, 0xe177, 0xe179, 0x8ea4, 0x8dad, 0x9397, 0xe17a, 0x92c9,
-  0xe17c, 0x979f, 0xe17b, 0x9189, 0xe182, 0xe184, 0xe185, 0x9273,
-  0xe183, 0xe180, 0xe17d, 0xe17e, 0xe181, 0xe188, 0xe186, 0xe187,
-  0xe189, 0xe18b, 0xe18c, 0xe18d, 0xe18e, 0xe18a, 0xe190, 0xe18f,
-  0xe191, 0x97c3, 0xe194, 0xe192, 0xe193, 0x8ae0, 0x96fc, 0x95c8,
-  0xe196, 0xe195, 0xe197, 0xe198, 0xe19c, 0xe199, 0xe19a, 0xe19b,
-  0xe19d, 0xe19e, 0xe19f, 0xe1a0, 0xe1a1, 0x94ad, 0x936f, 0xe1a2,
-  0x9492, 0x9553, 0xe1a3, 0xe1a4, 0x9349, 0x8a46, 0x8d63, 0xe1a5,
-  0xe1a6, 0xe1a7, 0x8e48, 0xe1a9, 0xe1a8, 0xe1aa, 0xe1ab, 0x94e7,
-  0xe1ac, 0xe1ad, 0xea89, 0xe1ae, 0xe1af, 0xe1b0, 0x8e4d, 0xe1b1,
-  0x9475, 0x967e, 0x896d, 0x8976, 0xe1b2, 0xe1b4, 0xe1b3, 0x9390,
-  0x90b7, 0x9f58, 0xe1b5, 0x96bf, 0xe1b6, 0x8ac4, 0x94d5, 0xe1b7,
-  0xe1b8, 0xe1b9, 0x96da, 0x96d3, 0x92bc, 0x918a, 0xe1bb, 0x8f82,
-  0x8fc8, 0xe1be, 0xe1bd, 0xe1bc, 0x94fb, 0x8ac5, 0x8ca7, 0xe1c4,
-  0xe1c1, 0x905e, 0x96b0, 0xe1c0, 0xe1c2, 0xe1c3, 0xe1bf, 0xe1c5,
-  0xe1c6, 0x92ad, 0x8ae1, 0x9285, 0xe1c7, 0xe1c8, 0xe1cb, 0x9087,
-  0x93c2, 0xe1cc, 0x9672, 0xe1c9, 0xe1ca, 0xe1cf, 0xe1ce, 0xe1cd,
-  0xe1d1, 0xe1d0, 0xe1d2, 0xe1d4, 0xe1d3, 0x95cb, 0x8f75, 0x97c4,
-  0xe1d5, 0x93b5, 0xe1d6, 0xe1d7, 0xe1db, 0xe1d9, 0xe1da, 0xe1d8,
-  0xe1dc, 0xe1dd, 0xe1de, 0xe1df, 0x96b5, 0xe1e0, 0x96ee, 0xe1e1,
-  0x926d, 0x948a, 0x8be9, 0x925a, 0xe1e2, 0x8bb8, 0x90ce, 0xe1e3,
-  0x8dbb, 0xe1e4, 0xe1e5, 0x8ca4, 0x8dd3, 0xe1e7, 0x9375, 0x8dd4,
-  0x8b6d, 0x9643, 0x946a, 0x9376, 0x8d7b, 0xe1e9, 0x8fc9, 0x97b0,
-  0x8d64, 0x8ca5, 0x94a1, 0xe1eb, 0xe1ed, 0x8ce9, 0xe1ec, 0x92f4,
-  0xe1ef, 0x8a56, 0xe1ea, 0x94e8, 0x894f, 0x8dea, 0x9871, 0xe1ee,
-  0xe1f0, 0x95c9, 0x90d7, 0xe1f2, 0xe1f3, 0xe1f1, 0x8a6d, 0xe1f9,
-  0xe1f8, 0x8ea5, 0xe1fa, 0xe1f5, 0xe1fb, 0xe1f6, 0x94d6, 0xe1f4,
-  0xe1f7, 0xe241, 0xe240, 0x9681, 0xe1fc, 0x88e9, 0xe243, 0xe242,
-  0x8fca, 0xe244, 0x9162, 0xe246, 0xe245, 0xe247, 0xe1e6, 0xe1e8,
-  0xe249, 0xe248, 0x8ea6, 0x97e7, 0x8ed0, 0xe24a, 0x8c56, 0x8b5f,
-  0x8b46, 0x8e83, 0x9753, 0xe250, 0xe24f, 0x9163, 0xe24c, 0xe24e,
-  0x8f6a, 0x905f, 0xe24d, 0xe24b, 0x9449, 0x8fcb, 0x955b, 0x8dd5,
-  0x9398, 0xe251, 0xe252, 0xe268, 0x8bd6, 0x985c, 0x9154, 0xe253,
-  0x89d0, 0x92f5, 0x959f, 0xe254, 0x8b9a, 0xe255, 0xe257, 0xe258,
-  0x9448, 0xe259, 0xe25a, 0xe25b, 0x8bd7, 0x89d1, 0x93c3, 0x8f47,
-  0x8e84, 0xe25c, 0x8f48, 0x89c8, 0x9562, 0xe25d, 0x94e9, 0x9164,
-  0xe260, 0xe261, 0x9489, 0x9060, 0xe25e, 0x9281, 0xe25f, 0x8fcc,
-  0x88da, 0x8b48, 0xe262, 0x92f6, 0xe263, 0x90c5, 0x96ab, 0x9542,
-  0xe264, 0xe265, 0x9274, 0x97c5, 0xe267, 0xe266, 0x8eed, 0xe269,
-  0x88ee, 0xe26c, 0xe26a, 0x89d2, 0x8c6d, 0xe26b, 0x8d65, 0x8d92,
-  0x95e4, 0xe26d, 0x9673, 0xe26f, 0x90cf, 0x896e, 0x89b8, 0x88aa,
-  0xe26e, 0xe270, 0xe271, 0x8ff5, 0xe272, 0x8a6e, 0xe274, 0x8c8a,
-  0x8b86, 0xe275, 0x8bf3, 0xe276, 0x90fa, 0x93cb, 0x90de, 0x8df3,
-  0xe277, 0x9282, 0x918b, 0xe279, 0xe27b, 0xe278, 0xe27a, 0x8c41,
-  0xe27c, 0x8c45, 0x8b87, 0x9771, 0xe27e, 0xe280, 0x894d, 0xe283,
-  0x8a96, 0xe282, 0xe281, 0xe285, 0xe27d, 0xe286, 0x97a7, 0xe287,
-  0xe288, 0x9af2, 0xe28a, 0xe289, 0xe28b, 0xe28c, 0x97b3, 0xe28d,
-  0xe8ed, 0x8fcd, 0xe28e, 0xe28f, 0x8f76, 0x93b6, 0xe290, 0x9247,
-  0xe291, 0x925b, 0xe292, 0x8ba3, 0x995e, 0x927c, 0x8eb1, 0x8ac6,
-  0xe293, 0xe2a0, 0xe296, 0x8b88, 0xe295, 0xe2a2, 0xe294, 0x8fce,
-  0xe298, 0xe299, 0x934a, 0xe29a, 0x8a7d, 0x9079, 0x9584, 0xe29c,
-  0x91e6, 0xe297, 0xe29b, 0xe29d, 0x8df9, 0xe2a4, 0x954d, 0x94a4,
-  0x9399, 0x8bd8, 0xe2a3, 0xe2a1, 0x94b3, 0xe29e, 0x927d, 0x939b,
-  0x939a, 0x8df4, 0xe2b6, 0xe2a6, 0xe2a8, 0xe2ab, 0xe2ac, 0xe2a9,
-  0xe2aa, 0xe2a7, 0xe2a5, 0xe29f, 0x95cd, 0x89d3, 0xe2b3, 0xe2b0,
-  0xe2b5, 0xe2b4, 0x9493, 0x96a5, 0x8e5a, 0xe2ae, 0xe2b7, 0xe2b2,
-  0xe2b1, 0xe2ad, 0xe2af, 0x8ac7, 0x925c, 0x90fb, 0x94a0, 0xe2bc,
-  0x94a2, 0x90df, 0xe2b9, 0x94cd, 0xe2bd, 0x95d1, 0x927a, 0xe2b8,
-  0xe2ba, 0xe2bb, 0xe2be, 0x8ec2, 0x93c4, 0xe2c3, 0xe2c2, 0xe2bf,
-  0x9855, 0xe2c8, 0xe2cc, 0xe2c9, 0xe2c5, 0xe2c6, 0xe2cb, 0xe2c0,
-  0x99d3, 0xe2c7, 0xe2c1, 0xe2ca, 0xe2d0, 0x8ac8, 0xe2cd, 0xe2ce,
-  0xe2cf, 0xe2d2, 0xe2d1, 0x94f4, 0xe2d3, 0x97fa, 0x95eb, 0xe2d8,
-  0xe2d5, 0xe2d4, 0x90d0, 0xe2d7, 0xe2d9, 0xe2d6, 0xe2dd, 0xe2da,
-  0xe2db, 0xe2c4, 0xe2dc, 0xe2de, 0xe2df, 0x95c4, 0xe2e0, 0x96e0,
-  0x8bcc, 0x8c48, 0xe2e1, 0x95b2, 0x9088, 0x96ae, 0xe2e2, 0x97b1,
-  0x9494, 0x9165, 0x9453, 0x8f6c, 0x88be, 0xe2e7, 0xe2e5, 0xe2e3,
-  0x8a9f, 0x8fcf, 0xe2e8, 0xe2e6, 0xe2e4, 0xe2ec, 0xe2eb, 0xe2ea,
-  0xe2e9, 0xe2ed, 0xe2ee, 0x90b8, 0xe2ef, 0xe2f1, 0xe2f0, 0x8cd0,
-  0x9157, 0xe2f3, 0x939c, 0xe2f2, 0xe2f4, 0x95b3, 0x918c, 0x8d66,
-  0xe2f5, 0x97c6, 0xe2f7, 0xe2f8, 0xe2f9, 0xe2fa, 0x8e85, 0xe2fb,
-  0x8c6e, 0x8b8a, 0x8b49, 0xe340, 0x96f1, 0x8d67, 0xe2fc, 0xe343,
-  0x96e4, 0x945b, 0x9552, 0x8f83, 0xe342, 0x8ed1, 0x8d68, 0x8e86,
-  0x8b89, 0x95b4, 0xe341, 0x9166, 0x9661, 0x8df5, 0x8e87, 0x92db,
-  0xe346, 0x97dd, 0x8dd7, 0xe347, 0x9061, 0xe349, 0x8fd0, 0x8dae,
-  0xe348, 0x8f49, 0x8cbc, 0x9167, 0xe344, 0xe34a, 0xe345, 0x8c6f,
-  0xe34d, 0xe351, 0x8c8b, 0xe34c, 0xe355, 0x8d69, 0x978d, 0x88ba,
-  0xe352, 0x8b8b, 0xe34f, 0xe350, 0x939d, 0xe34e, 0xe34b, 0x8a47,
-  0x90e2, 0x8ca6, 0xe357, 0xe354, 0xe356, 0xe353, 0x8c70, 0x91b1,
-  0xe358, 0x918e, 0xe365, 0xe361, 0xe35b, 0xe35f, 0x8ef8, 0x88db,
-  0xe35a, 0xe362, 0xe366, 0x8d6a, 0x96d4, 0x92d4, 0xe35c, 0xe364,
-  0xe359, 0x925d, 0xe35e, 0x88bb, 0x96c8, 0xe35d, 0x8bd9, 0x94ea,
-  0x918d, 0x97ce, 0x8f8f, 0xe38e, 0xe367, 0x90fc, 0xe363, 0xe368,
-  0xe36a, 0x92f7, 0xe36d, 0xe369, 0x95d2, 0x8ac9, 0x96c9, 0x88dc,
-  0xe36c, 0x97fb, 0xe36b, 0x898f, 0x93ea, 0xe36e, 0xe375, 0xe36f,
-  0xe376, 0xe372, 0x949b, 0x8ec8, 0xe374, 0xe371, 0xe377, 0xe370,
-  0x8f63, 0x9644, 0x8f6b, 0xe373, 0xe380, 0xe37b, 0xe37e, 0xe37c,
-  0xe381, 0xe37a, 0xe360, 0x90d1, 0x94c9, 0xe37d, 0xe378, 0x9140,
-  0x8c71, 0x8f4a, 0x9044, 0x9155, 0xe384, 0xe386, 0xe387, 0xe383,
-  0xe385, 0xe379, 0xe382, 0xe38a, 0xe389, 0x969a, 0x8c4a, 0xe388,
-  0xe38c, 0xe38b, 0xe38f, 0xe391, 0x8e5b, 0xe38d, 0xe392, 0xe393,
-  0xe394, 0xe39a, 0x935a, 0xe396, 0xe395, 0xe397, 0xe398, 0xe399,
-  0xe39b, 0xe39c, 0x8aca, 0xe39d, 0xe39e, 0xe39f, 0xe3a0, 0xe3a1,
-  0xe3a2, 0xe3a3, 0xe3a4, 0xe3a6, 0xe3a5, 0xe3a7, 0xe3a8, 0xe3a9,
-  0xe3ac, 0xe3aa, 0xe3ab, 0x8ddf, 0x8c72, 0x9275, 0x94b1, 0x8f90,
-  0x946c, 0x94eb, 0xe3ad, 0x9ceb, 0xe3ae, 0xe3b0, 0x9785, 0xe3af,
-  0xe3b2, 0xe3b1, 0x9772, 0xe3b3, 0x94fc, 0xe3b4, 0xe3b7, 0xe3b6,
-  0xe3b5, 0xe3b8, 0x8c51, 0x9141, 0x8b60, 0xe3bc, 0xe3b9, 0xe3ba,
-  0xe3bd, 0xe3be, 0xe3bb, 0x8948, 0x89a5, 0xe3c0, 0xe3c1, 0xe3c2,
-  0x9782, 0x8f4b, 0xe3c4, 0xe3c3, 0x9089, 0xe3c5, 0xe3c6, 0xe3c7,
-  0x8ae3, 0x8acb, 0xe3c8, 0xe3c9, 0x967c, 0x9783, 0x9773, 0x9856,
-  0x8d6c, 0xe3cc, 0x8ed2, 0xe3cb, 0xe3cd, 0x8ea7, 0x91cf, 0xe3ce,
-  0x8d6b, 0x96d5, 0xe3cf, 0xe3d0, 0xe3d1, 0xe3d2, 0xe3d3, 0x8ea8,
-  0x96eb, 0xe3d5, 0x925e, 0xe3d4, 0xe3d7, 0xe3d6, 0xe3d8, 0x90b9,
-  0xe3d9, 0xe3da, 0x95b7, 0xe3db, 0x918f, 0xe3dc, 0xe3dd, 0x97fc,
-  0xe3e0, 0xe3df, 0xe3de, 0x92ae, 0xe3e1, 0x9045, 0xe3e2, 0xe3e3,
-  0x9857, 0xe3e4, 0xe3e5, 0xe3e7, 0xe3e6, 0x94a3, 0x93f7, 0x985d,
-  0x94a7, 0xe3e9, 0x8fd1, 0x9549, 0xe3ea, 0xe3e8, 0x8acc, 0x8cd2,
-  0x8e88, 0x94ec, 0x8ca8, 0x9662, 0xe3ed, 0xe3eb, 0x8d6d, 0x8d6e,
-  0x88e7, 0x8de6, 0x9478, 0x88dd, 0xe3f2, 0x925f, 0x9477, 0x91d9,
-  0xe3f4, 0xe3f0, 0xe3f3, 0xe3ee, 0xe3f1, 0x9645, 0x8cd3, 0x88fb,
-  0xe3ef, 0xe3f6, 0xe3f7, 0x93b7, 0x8bb9, 0xe445, 0x945c, 0x8e89,
-  0x8bba, 0x90c6, 0x9865, 0x96ac, 0xe3f5, 0x90d2, 0x8b72, 0xe3f8,
-  0xe3fa, 0xe3f9, 0xe3fb, 0x9245, 0x945d, 0x92af, 0xe442, 0xe441,
-  0xe3fc, 0x9074, 0x9585, 0xe444, 0xe443, 0x8d6f, 0x9872, 0xe454,
-  0xe448, 0xe449, 0x8eee, 0xe447, 0x8d98, 0xe446, 0xe44a, 0x92b0,
-  0x95a0, 0x9142, 0x91da, 0xe44e, 0xe44f, 0xe44b, 0xe44c, 0xe44d,
-  0x8d70, 0xe455, 0xe451, 0x9586, 0x968c, 0x9547, 0xe450, 0xe453,
-  0xe452, 0x9663, 0xe456, 0xe457, 0x9156, 0xe458, 0xe45a, 0xe45e,
-  0xe45b, 0xe459, 0x945e, 0xe45c, 0xe45d, 0x89b0, 0xe464, 0xe45f,
-  0xe460, 0xe461, 0x919f, 0xe463, 0xe462, 0xe465, 0xe466, 0xe467,
-  0x9062, 0x89e7, 0xe468, 0x97d5, 0x8ea9, 0x8f4c, 0x8e8a, 0x9276,
-  0xe469, 0xe46a, 0x8950, 0xe46b, 0xe46c, 0xe46d, 0xe46e, 0xe46f,
-  0x8bbb, 0x9da8, 0xe470, 0x90e3, 0xe471, 0x8ec9, 0xe472, 0x98ae,
-  0xe473, 0x95dc, 0x8ada, 0x9143, 0x8f77, 0x9591, 0x8f4d, 0xe474,
-  0x8d71, 0xe475, 0x94ca, 0xe484, 0xe477, 0x91c7, 0x9495, 0x8cbd,
-  0xe476, 0x9144, 0xe478, 0x92f8, 0xe47a, 0xe479, 0xe47c, 0xe47b,
-  0xe47d, 0xe480, 0xe47e, 0x8acd, 0xe481, 0xe482, 0xe483, 0x8daf,
-  0x97c7, 0xe485, 0x9046, 0x8990, 0xe486, 0xe487, 0xe488, 0x88f0,
-  0xe489, 0xe48a, 0x9587, 0x8ec5, 0xe48c, 0x8a48, 0x88b0, 0xe48b,
-  0xe48e, 0x946d, 0x9063, 0x89d4, 0x9646, 0x8c7c, 0x8bda, 0xe48d,
-  0x89e8, 0x8aa1, 0x8991, 0xe492, 0x97e8, 0x91db, 0x9563, 0xe49e,
-  0x89d5, 0xe49c, 0xe49a, 0xe491, 0xe48f, 0xe490, 0x8ee1, 0x8bea,
-  0x9297, 0x93cf, 0x8970, 0xe494, 0xe493, 0xe499, 0xe495, 0xe498,
-  0x96ce, 0xe497, 0x89d6, 0x8a9d, 0xe49b, 0xe49d, 0x8c73, 0xe4a1,
-  0xe4aa, 0xe4ab, 0x88a9, 0xe4b2, 0x88ef, 0xe4a9, 0xe4a8, 0xe4a3,
-  0xe4a2, 0xe4a0, 0xe49f, 0x9283, 0x91f9, 0xe4a5, 0xe4a4, 0xe4a7,
-  0x9190, 0x8c74, 0x8960, 0xe4a6, 0x8d72, 0x9191, 0xe4b8, 0xe4b9,
-  0x89d7, 0x89ac, 0xe4b6, 0xe4ac, 0xe4b4, 0xe4bb, 0xe4b5, 0xe4b3,
-  0xe496, 0xe4b1, 0xe4ad, 0x8ace, 0xe4af, 0xe4ba, 0xe4b0, 0xe4bc,
-  0xe4ae, 0x949c, 0x9789, 0xe4b7, 0xe4cd, 0xe4c5, 0x909b, 0x8b65,
-  0x8bdb, 0xe4c0, 0x89d9, 0x8fd2, 0xe4c3, 0x8dd8, 0x9370, 0xe4c8,
-  0x95ec, 0xe4bf, 0x89d8, 0x8cd4, 0x9548, 0xe4c9, 0xe4bd, 0xe4c6,
-  0xe4d0, 0xe4c1, 0xe4c2, 0x93b8, 0xe4c7, 0xe4c4, 0x9647, 0xe4ca,
-  0x88de, 0xe4be, 0xe4cc, 0xe4cb, 0x948b, 0xe4d2, 0xe4dd, 0x8a9e,
-  0xe4e0, 0xe4ce, 0xe4d3, 0x978e, 0xe4dc, 0x9774, 0x97a8, 0x9298,
-  0x8a8b, 0x9592, 0xe4e2, 0x939f, 0x88af, 0xe4db, 0xe4d7, 0x9192,
-  0xe4d1, 0xe4d9, 0xe4de, 0x944b, 0x88a8, 0xe4d6, 0xe4df, 0x9598,
-  0xe4da, 0xe4d5, 0x8fd3, 0x8f4e, 0x8eaa, 0x96d6, 0x9566, 0xe4e5,
-  0xe4ee, 0xe4d8, 0x8a97, 0x8ff6, 0xe4e3, 0xe4e8, 0x9193, 0xe4e4,
-  0xe4eb, 0x927e, 0xe4ec, 0x9775, 0xe4e1, 0x8a57, 0xe4e7, 0xe4ea,
-  0x96aa, 0xe4ed, 0xe4e6, 0xe4e9, 0x9648, 0x9840, 0xe4f1, 0xe4f8,
-  0xe4f0, 0x8ec1, 0xe4cf, 0x95cc, 0x96a0, 0xe4f7, 0xe4f6, 0xe4f2,
-  0xe4f3, 0x8955, 0xe4f5, 0xe4ef, 0x92d3, 0xe4f4, 0x88fc, 0x91a0,
-  0x95c1, 0xe4f9, 0xe540, 0x94d7, 0xe4fc, 0x8fd4, 0x8ec7, 0xe542,
-  0x8bbc, 0xe543, 0x9599, 0xe4fb, 0xe4d4, 0xe4fa, 0x986e, 0x93a0,
-  0x9593, 0xe54a, 0xe550, 0xe551, 0xe544, 0x9496, 0xe54e, 0xe546,
-  0xe548, 0xe552, 0xe547, 0xe54b, 0x8992, 0x93e3, 0xe54c, 0xe54f,
-  0xe545, 0x9145, 0xe549, 0x8e46, 0x9064, 0x8c4f, 0x96f2, 0x96f7,
-  0x8f92, 0xe556, 0xe554, 0x986d, 0xe553, 0x9795, 0xe555, 0xe557,
-  0xe558, 0xe55b, 0xe559, 0x93a1, 0xe55a, 0x94cb, 0xe54d, 0x8f93,
-  0xe55c, 0xe561, 0x9194, 0xe560, 0xe541, 0xe562, 0x9168, 0xe55d,
-  0xe55f, 0xe55e, 0x9f50, 0x9f41, 0xe564, 0xe563, 0x9796, 0xe1ba,
-  0xe565, 0xe566, 0xe567, 0x8cd5, 0x8b73, 0xe569, 0x997c, 0x8b95,
-  0x97b8, 0x8bf1, 0xe56a, 0xe56b, 0x928e, 0xe56c, 0x93f8, 0x88b8,
-  0x89e1, 0xe571, 0xe572, 0xe56d, 0x8e5c, 0xe56e, 0x9461, 0xe56f,
-  0xe570, 0xe57a, 0xe574, 0xe577, 0xe573, 0xe575, 0xe576, 0x8ed6,
-  0xe578, 0x9260, 0x8c75, 0x8a61, 0xe57b, 0x8a5e, 0xe581, 0xe57c,
-  0xe580, 0x94b8, 0xe57d, 0xe57e, 0x9567, 0x94d8, 0xe582, 0x91fb,
-  0xe58c, 0xe588, 0x89e9, 0xe586, 0x9649, 0xe587, 0xe584, 0xe585,
-  0xe58a, 0xe58d, 0xe58b, 0xe589, 0xe583, 0x9277, 0xe594, 0x96a8,
-  0xe592, 0xe593, 0xe58e, 0xe590, 0xe591, 0xe58f, 0x90e4, 0x9858,
-  0xe598, 0xe599, 0xe59f, 0x9049, 0xe59b, 0xe59e, 0xe596, 0xe595,
-  0xe5a0, 0x89da, 0xe59c, 0xe5a1, 0xe59d, 0xe59a, 0x92b1, 0xe597,
-  0x9488, 0xe5a5, 0x975a, 0xe5a4, 0xe5a3, 0xe5ac, 0xe5a6, 0xe5ae,
-  0x9786, 0xe5b1, 0xe5a8, 0xe5a9, 0xe5ad, 0xe5b0, 0xe5af, 0xe5a7,
-  0xe5aa, 0xe5bb, 0xe5b4, 0xe5b2, 0xe5b3, 0xe5b8, 0xe5b9, 0x8a49,
-  0x8b61, 0xe5b7, 0xe5a2, 0xe5b6, 0xe5ba, 0xe5b5, 0xe5bc, 0xe5be,
-  0xe5bd, 0xe5c0, 0xe5bf, 0xe579, 0xe5c4, 0xe5c1, 0xe5c2, 0xe5c3,
-  0xe5c5, 0x8c8c, 0xe5c7, 0xe5c6, 0x8f4f, 0x8d73, 0x9fa5, 0xe5c8,
-  0x8f70, 0x8a58, 0xe5c9, 0x8971, 0x8fd5, 0xe5ca, 0x8d74, 0xe5cb,
-  0x88df, 0x955c, 0xe5cc, 0x908a, 0xe5d3, 0xe5d0, 0x928f, 0xe5d1,
-  0xe5ce, 0x8bdc, 0xe5cd, 0xe5d4, 0x8c55, 0x91dc, 0xe5da, 0xe5d6,
-  0x91b3, 0xe5d5, 0xe5d8, 0xe5cf, 0xe5d9, 0xe5db, 0x94ed, 0xe5d7,
-  0xe5dc, 0xe5de, 0x8cd1, 0xe5d2, 0x88bf, 0xe5dd, 0x8dd9, 0x97f4,
-  0xe5df, 0xe5e0, 0x9195, 0x97a0, 0xe5e1, 0x9754, 0xe5e2, 0xe5e3,
-  0x95e2, 0xe5e4, 0x8dbe, 0x97a1, 0xe5e9, 0xe5ea, 0x8fd6, 0xe5e8,
-  0x9787, 0xe5e5, 0xe5e7, 0x90bb, 0x909e, 0xe5e6, 0xe5eb, 0x95a1,
-  0xe5ed, 0xe5ec, 0x8a8c, 0x964a, 0xe5ee, 0xe5fa, 0xe5f0, 0xe5f1,
-  0xe5f2, 0xe5f3, 0xe5f7, 0xe5f8, 0xe5f6, 0xe5f4, 0xe5ef, 0xe5f5,
-  0xe5f9, 0xe8b5, 0x89a6, 0xe5fc, 0x8bdd, 0xe5fb, 0xe641, 0xe640,
-  0xe643, 0xe642, 0xe644, 0x8f50, 0xe645, 0xe646, 0xe647, 0x90bc,
-  0x9776, 0xe648, 0x95a2, 0x9465, 0xe649, 0xe64a, 0x8ca9, 0x8b4b,
-  0xe64b, 0x8e8b, 0x9460, 0xe64c, 0x8a6f, 0xe64d, 0xe64f, 0x9797,
-  0xe64e, 0x9065, 0xe650, 0xe651, 0xe652, 0x8acf, 0xe653, 0xe654,
-  0xe655, 0xe656, 0x8a70, 0xe657, 0xe658, 0xe659, 0x89f0, 0x9047,
-  0xe65a, 0xe65b, 0xe65c, 0x8cbe, 0x92f9, 0xe65d, 0x8c76, 0x9075,
-  0xe660, 0x93a2, 0xe65f, 0x8c50, 0xe65e, 0x91f5, 0x8b4c, 0xe661,
-  0xe662, 0x8fd7, 0x8c8d, 0xe663, 0x964b, 0x90dd, 0x8b96, 0x96f3,
-  0x9169, 0xe664, 0x9066, 0x9290, 0x8fd8, 0xe665, 0xe668, 0xe669,
-  0x8dbc, 0x91c0, 0xe667, 0x8fd9, 0x955d, 0xe666, 0x8e8c, 0x8972,
-  0xe66d, 0x8c77, 0x8e8e, 0x8e8d, 0x986c, 0xe66c, 0xe66b, 0x9146,
-  0x8b6c, 0x9862, 0x8a59, 0x8fda, 0xe66a, 0xe66f, 0xe670, 0xe66e,
-  0x8cd6, 0x975f, 0x8e8f, 0x9446, 0xe673, 0x90be, 0x9261, 0x9755,
-  0xe676, 0x8cea, 0x90bd, 0xe672, 0xe677, 0x8ceb, 0xe674, 0xe675,
-  0xe671, 0x90e0, 0x93c7, 0x924e, 0x89db, 0x94ee, 0x8b62, 0x92b2,
-  0xe67a, 0xe678, 0x926b, 0x90bf, 0x8ad0, 0xe679, 0x907a, 0x97c8,
-  0x985f, 0xe67b, 0xe687, 0x92b3, 0xe686, 0xe683, 0xe68b, 0xe684,
-  0xe680, 0x92fa, 0xe67e, 0xe67c, 0x9740, 0x8e90, 0xe681, 0xe67d,
-  0xe685, 0x8f94, 0x8cbf, 0x91f8, 0x9664, 0x8979, 0x88e0, 0x93a3,
-  0xe689, 0xe688, 0x93e4, 0xe68d, 0xe682, 0xe68c, 0xe68e, 0x8caa,
-  0xe68a, 0x8d75, 0x8ed3, 0xe68f, 0x9777, 0xe692, 0xe695, 0xe693,
-  0x9554, 0xe690, 0x8bde, 0xe694, 0xe696, 0xe69a, 0xe697, 0xe699,
-  0xe698, 0xe69b, 0x8eaf, 0xe69d, 0xe69c, 0x9588, 0xe69f, 0x8c78,
-  0xe69e, 0xe6a0, 0xe6a1, 0x8b63, 0xe3bf, 0x8ff7, 0xe6a2, 0x8cec,
-  0xe6a3, 0xe6a4, 0x8e5d, 0x9dcc, 0xe6a5, 0xe6a6, 0x8f51, 0xe6a7,
-  0xe6a8, 0xe6a9, 0xe6aa, 0xe6ab, 0x924a, 0xe6ac, 0xe6ae, 0xe6ad,
-  0x93a4, 0xe6af, 0x964c, 0xe6b0, 0xe6b1, 0xe6b2, 0xe6b3, 0x93d8,
-  0x8fdb, 0xe6b4, 0x8d8b, 0x98ac, 0xe6b5, 0xe6b6, 0x955e, 0xe6b7,
-  0xe6bf, 0xe6b8, 0xe6ba, 0xe6b9, 0xe6bb, 0x9665, 0xe6bc, 0xe6bd,
-  0xe6be, 0xe6c0, 0x8a4c, 0x92e5, 0x9589, 0x8de0, 0x8d76, 0x956e,
-  0x89dd, 0x94cc, 0xe6c3, 0x8ad1, 0x90d3, 0xe6c2, 0xe6c7, 0x9299,
-  0x96e1, 0xe6c5, 0xe6c6, 0x8b4d, 0xe6c8, 0x9483, 0x91dd, 0x94ef,
-  0x935c, 0xe6c4, 0x9666, 0x89ea, 0xe6ca, 0x9847, 0x92c0, 0x9864,
-  0x8e91, 0xe6c9, 0x91af, 0xe6da, 0x9147, 0x93f6, 0x956f, 0xe6cd,
-  0x8e5e, 0x8e92, 0x8fdc, 0x9485, 0x8cab, 0xe6cc, 0xe6cb, 0x958a,
-  0x8ebf, 0x9371, 0xe6cf, 0xe6d0, 0x8d77, 0xe6ce, 0xe6d1, 0xe6d2,
-  0xe6d4, 0x91a1, 0xe6d3, 0x8ae4, 0xe6d6, 0xe6d5, 0xe6d7, 0xe6d9,
-  0xe6db, 0xe6dc, 0x90d4, 0x8ecd, 0xe6dd, 0x8a71, 0xe6de, 0x9196,
-  0xe6df, 0xe6e0, 0x958b, 0x8b4e, 0xe6e1, 0x92b4, 0x897a, 0xe6e2,
-  0x8eef, 0x9096, 0x91ab, 0xe6e5, 0xe6e4, 0xe6e3, 0xe6eb, 0xe6e9,
-  0xe6e6, 0xe6e8, 0xe6e7, 0xe6ea, 0x8b97, 0xe6ee, 0x90d5, 0xe6ef,
-  0x8cd7, 0xe6ec, 0xe6ed, 0x9848, 0x92b5, 0x9148, 0xe6f0, 0xe6f3,
-  0xe6f1, 0xe6f2, 0x9778, 0x93a5, 0xe6f6, 0xe6f4, 0xe6f5, 0xe6f7,
-  0xe748, 0xe6fa, 0xe6fb, 0xe6f9, 0xe6f8, 0x92fb, 0xe740, 0xe744,
-  0xe741, 0xe6fc, 0xe742, 0xe743, 0xe74a, 0xe745, 0x90d6, 0xe747,
-  0xe749, 0xe746, 0xe74c, 0x8f52, 0xe74b, 0xe74d, 0xe74e, 0xe751,
-  0xe750, 0xe74f, 0xe753, 0xe752, 0x96f4, 0xe755, 0xe754, 0xe756,
-  0xe757, 0xe759, 0xe758, 0x9067, 0xe75a, 0x8beb, 0xe75b, 0xe75d,
-  0xe75e, 0xe75f, 0xe75c, 0xe760, 0x8ed4, 0xe761, 0x8b4f, 0x8c52,
-  0x8cac, 0xe762, 0x93ee, 0x935d, 0xe763, 0xe766, 0x8eb2, 0xe765,
-  0xe764, 0x8c79, 0xe767, 0x8a72, 0xe769, 0x8dda, 0xe768, 0xe771,
-  0xe76b, 0xe76d, 0x95e3, 0xe76a, 0xe76c, 0xe770, 0xe76e, 0x8b50,
-  0xe76f, 0xe772, 0x9479, 0x97d6, 0x8f53, 0xe773, 0x9741, 0xe775,
-  0xe774, 0xe778, 0x9760, 0xe777, 0x8a8d, 0xe776, 0xe77b, 0xe77a,
-  0xe779, 0x9351, 0xe77c, 0xe77d, 0xe77e, 0x8d8c, 0x8c44, 0xe780,
-  0xe781, 0xe782, 0x9068, 0xe783, 0x8eab, 0xe784, 0xe785, 0x999f,
-  0x999e, 0xe786, 0xe390, 0xe787, 0x9243, 0x904a, 0x945f, 0xe788,
-  0x95d3, 0x92d2, 0x8d9e, 0x9248, 0x8949, 0x9698, 0x9076, 0x8c7d,
-  0x8bdf, 0x95d4, 0xe789, 0xe78b, 0xe78a, 0x89de, 0x93f4, 0xe78c,
-  0x9497, 0x9352, 0xe78d, 0x8f71, 0xe78f, 0x96c0, 0xe79e, 0xe791,
-  0xe792, 0x92c7, 0x91de, 0x9197, 0x93a6, 0xe790, 0x8b74, 0xe799,
-  0xe796, 0xe7a3, 0x93a7, 0x9280, 0xe793, 0x92fc, 0x9372, 0xe794,
-  0xe798, 0x9080, 0x9487, 0x92ca, 0x90c0, 0xe797, 0x91ac, 0x91a2,
-  0xe795, 0x88a7, 0x9841, 0xe79a, 0x91df, 0x8f54, 0x9069, 0xe79c,
-  0xe79b, 0x88ed, 0xe79d, 0x954e, 0xe7a5, 0x93d9, 0x908b, 0x9278,
-  0x8bf6, 0xe7a4, 0x9756, 0x895e, 0x95d5, 0x89df, 0xe79f, 0xe7a0,
-  0xe7a1, 0xe7a2, 0x93b9, 0x9242, 0x88e1, 0xe7a6, 0xe7a7, 0xeaa1,
-  0x91bb, 0xe7a8, 0x8993, 0x916b, 0x8cad, 0x9779, 0xe7a9, 0x934b,
-  0x9198, 0x8ed5, 0xe7aa, 0xe7ad, 0x8f85, 0xe7ab, 0x914a, 0x9149,
-  0x88e2, 0x97c9, 0xe7af, 0x94f0, 0xe7b1, 0xe7b0, 0xe7ae, 0xe284,
-  0x8ad2, 0xe78e, 0xe7b3, 0xe7b2, 0xe7b4, 0x9757, 0x93df, 0x964d,
-  0xe7b5, 0x8ed7, 0xe7b6, 0xe7b7, 0xe7b8, 0x9340, 0x88e8, 0x8d78,
-  0x9859, 0xe7bc, 0x8c53, 0xe7b9, 0xe7ba, 0x9594, 0x8a73, 0x9758,
-  0x8bbd, 0x9373, 0xe7bd, 0xe7be, 0xe7bf, 0x9341, 0xe7c1, 0xe7c0,
-  0x93d1, 0xe7c2, 0x8f55, 0x8ede, 0x947a, 0x9291, 0x8ef0, 0x908c,
-  0xe7c3, 0xe7c4, 0x907c, 0xe7c5, 0xe7c6, 0xe7c7, 0x978f, 0x8f56,
-  0xe7c9, 0xe7c8, 0x8d79, 0x8d93, 0x8e5f, 0xe7cc, 0x8f86, 0xe7cb,
-  0xe7ca, 0x91e7, 0x8ced, 0x90c1, 0x94ae, 0x8f58, 0xe7cd, 0x8fdd,
-  0xe7d0, 0xe7ce, 0xe7cf, 0xe7d2, 0xe7d1, 0x8ff8, 0xe7d3, 0xe7d4,
-  0xe7d5, 0x94ce, 0x8dd1, 0x8edf, 0xe7d6, 0xe7d7, 0x97a2, 0x8f64,
-  0x96ec, 0x97ca, 0xe7d8, 0x8be0, 0xe7d9, 0x9342, 0xe7dc, 0x8a98,
-  0x906a, 0xe7da, 0xe7db, 0x92de, 0x9674, 0x8bfa, 0xe7de, 0xe7df,
-  0xe7dd, 0xe7e1, 0x93dd, 0x8a62, 0xe7e5, 0xe7e2, 0xe7e4, 0xe7e0,
-  0xe86e, 0xe7e3, 0x97e9, 0x8cd8, 0xe7ed, 0x9353, 0xe7e8, 0xe7eb,
-  0xe7e9, 0xe7ee, 0xe7ef, 0xe7e7, 0xe7f4, 0x8994, 0xe7e6, 0x94ab,
-  0xe7ea, 0x8fde, 0x8d7a, 0x9667, 0x8be2, 0x8f65, 0x93ba, 0x914c,
-  0xe7f2, 0xe7ec, 0xe7f1, 0x96c1, 0x92b6, 0xe7f3, 0xe7f0, 0x914b,
-  0xe7f7, 0xe7f6, 0xe7f5, 0x964e, 0x8f9b, 0xe7f8, 0x95dd, 0x8973,
-  0x9565, 0x9292, 0x8b98, 0xe7fa, 0x8d7c, 0x8e4b, 0xe7f9, 0x908d,
-  0x908e, 0xe840, 0xe842, 0x8ff9, 0xe841, 0xe843, 0x8bd1, 0x9564,
-  0x8ee0, 0x9842, 0xe7fc, 0x8df6, 0x985e, 0xe845, 0xe844, 0xe846,
-  0xe7fb, 0x93e7, 0x9374, 0x92d5, 0xe84b, 0x9262, 0xe847, 0xe848,
-  0x8c4c, 0xe84a, 0x8cae, 0xe849, 0x8fdf, 0x8a99, 0xe84f, 0x8dbd,
-  0x9199, 0x92c8, 0x8a5a, 0xe84d, 0xe84e, 0x92c1, 0xe84c, 0xe850,
-  0xe856, 0xe859, 0xe858, 0x934c, 0xe851, 0xe852, 0xe855, 0xe857,
-  0x8bbe, 0xe85a, 0xe854, 0xe853, 0xe85e, 0xe85f, 0xe860, 0xe85d,
-  0xe85c, 0x8fe0, 0x93a8, 0xe85b, 0xe864, 0xe862, 0xe863, 0xe861,
-  0x91f6, 0xe865, 0xe866, 0xe868, 0x8ad3, 0xe867, 0x96f8, 0xe873,
-  0xe869, 0xe86c, 0xe86a, 0xe86b, 0xe86d, 0xe86f, 0xe870, 0xe871,
-  0xe874, 0xe872, 0xe875, 0xe877, 0xe876, 0x92b7, 0x96e5, 0xe878,
-  0x914d, 0xe879, 0x95c2, 0xe87a, 0x8a4a, 0x895b, 0x8ad5, 0x8ad4,
-  0xe87b, 0xe87c, 0xe87d, 0xe87e, 0xe880, 0x8ad6, 0x8a74, 0x8d7d,
-  0x94b4, 0xe882, 0xe881, 0xe883, 0x897b, 0xe886, 0xe885, 0xe884,
-  0xe887, 0xe88a, 0x88c5, 0xe888, 0xe88c, 0xe88b, 0xe88e, 0xe88d,
-  0xe88f, 0x93ac, 0xe890, 0xe891, 0xe893, 0xe892, 0x958c, 0xe894,
-  0xe895, 0x8de3, 0xe896, 0xe897, 0x9668, 0x916a, 0x88a2, 0x91c9,
-  0xe898, 0x958d, 0xe89b, 0xe899, 0x8d7e, 0xe89a, 0x8cc0, 0x95c3,
-  0xe89d, 0xe89f, 0xe89e, 0xe8a0, 0x8940, 0x9077, 0x8f9c, 0x8ad7,
-  0xe8a1, 0x9486, 0xe8a3, 0x8941, 0xe8a2, 0x92c2, 0x97cb, 0x93a9,
-  0xe89c, 0x97a4, 0x8caf, 0x977a, 0x8bf7, 0x97b2, 0x8c47, 0x91e0,
-  0xe440, 0xe8a4, 0x8a4b, 0x908f, 0x8a75, 0xe8a6, 0xe8a7, 0xe8a5,
-  0x8c84, 0x8ddb, 0x8fe1, 0x8942, 0x97d7, 0xe8a9, 0xe7ac, 0xe8a8,
-  0xe8ac, 0xe8aa, 0xe8ab, 0xe8ad, 0xe8ae, 0x97ea, 0xe8af, 0xe8b0,
-  0x90c7, 0x94b9, 0x909d, 0x8ae5, 0x9759, 0x89eb, 0x8f57, 0x8cd9,
-  0xe8b3, 0xe8b2, 0x8e93, 0xe8b4, 0xe8b1, 0x8e47, 0xe8b8, 0xe5ab,
-  0x99d4, 0x9097, 0xe8b6, 0x97a3, 0x93ef, 0x894a, 0x90e1, 0x8eb4,
-  0x95b5, 0x895f, 0x97eb, 0x978b, 0xe8b9, 0x9364, 0x8ef9, 0xe8ba,
-  0xe8bb, 0x906b, 0xe8bc, 0x97ec, 0xe8b7, 0xe8be, 0xe8c0, 0xe8bf,
-  0xe8bd, 0xe8c1, 0xe8c2, 0x919a, 0x89e0, 0xe8c3, 0x96b6, 0xe8c4,
-  0xe8c5, 0x9849, 0x9e50, 0xe8c6, 0xe8c7, 0xe8c8, 0xe8cc, 0xe8c9,
-  0xe8ca, 0xe8cb, 0xe8cd, 0x90c2, 0x96f5, 0x90c3, 0xe8ce, 0x94f1,
-  0xe8cf, 0xea72, 0x96ca, 0xe8d0, 0xe8d1, 0xe8d2, 0x8a76, 0xe8d4,
-  0x9078, 0xe8d5, 0x8c43, 0xe8d6, 0xe8da, 0xe8d8, 0xe8d9, 0x8a93,
-  0xe8d7, 0xe8db, 0xe8dc, 0x88c6, 0xe8dd, 0xe8de, 0x8fe2, 0xe8df,
-  0x8b66, 0xe8e2, 0xe8e1, 0xe8e0, 0xe691, 0x95da, 0xe8e3, 0xe8e4,
-  0xe8e5, 0xe8e6, 0xe8e7, 0xe8e8, 0x8ad8, 0xe8e9, 0xe8ea, 0x9442,
-  0xe8ec, 0x89b9, 0xe8ef, 0xe8ee, 0x8943, 0x8bbf, 0x95c5, 0x92b8,
-  0x8da0, 0x8d80, 0x8f87, 0x907b, 0xe8f1, 0xe8f0, 0x9761, 0x8ae6,
-  0x94d0, 0x93da, 0x909c, 0x97cc, 0x8c7a, 0xe8f4, 0xe8f3, 0x966a,
-  0x93aa, 0x896f, 0xe8f5, 0xe8f2, 0x9570, 0x978a, 0xe8f6, 0xe8f7,
-  0xe8f9, 0x91e8, 0x8a7a, 0x8a7b, 0xe8f8, 0x8ae7, 0x8cb0, 0x8ae8,
-  0x935e, 0x97de, 0x8cda, 0xe8fa, 0xe8fb, 0xe8fc, 0xe940, 0xe942,
-  0xe941, 0x9597, 0xe943, 0xe944, 0xe945, 0xe946, 0xe948, 0xe947,
-  0xe949, 0x94f2, 0xe3ca, 0x9048, 0x8b51, 0xe94a, 0xe94b, 0x99aa,
-  0x9f5a, 0x94d1, 0x88f9, 0x88b9, 0x8e94, 0x964f, 0x8ffc, 0xe94c,
-  0x96dd, 0xe94d, 0x977b, 0x8961, 0x8e60, 0xe94e, 0x89ec, 0xe94f,
-  0xe950, 0xe952, 0xe953, 0xe955, 0xe951, 0xe954, 0x8ad9, 0xe956,
-  0xe957, 0xe958, 0xe959, 0xe95a, 0xe95c, 0xe95b, 0xe95e, 0xe961,
-  0xe95d, 0xe95f, 0xe960, 0xe962, 0x8bc0, 0x8ef1, 0xe963, 0xe964,
-  0x8d81, 0xe965, 0x8a5d, 0x946e, 0xe966, 0xe967, 0x9279, 0x93e9,
-  0xe968, 0x949d, 0x91ca, 0x8977, 0x8bec, 0x8bed, 0x9293, 0xe96d,
-  0x8bee, 0x89ed, 0xe96c, 0xe96a, 0xe96b, 0xe969, 0xe977, 0xe96e,
-  0xe96f, 0xe970, 0xe971, 0xe973, 0xe972, 0x8f78, 0xe974, 0xe976,
-  0x8b52, 0xe975, 0x919b, 0x8cb1, 0xe978, 0x91cb, 0xe979, 0x93ab,
-  0xe97a, 0xe980, 0xe97d, 0xe97c, 0xe97e, 0xe97b, 0xe982, 0xe981,
-  0xe984, 0x8bc1, 0xe983, 0xe985, 0xe986, 0xe988, 0xe987, 0xe989,
-  0xe98b, 0xe98a, 0x8d9c, 0xe98c, 0xe98d, 0x8a5b, 0xe98e, 0xe98f,
-  0x9091, 0xe990, 0xe991, 0xe992, 0xe993, 0x8d82, 0xe994, 0xe995,
-  0xe996, 0xe997, 0xe998, 0x94af, 0xe99a, 0x9545, 0xe99b, 0xe999,
-  0xe99d, 0xe99c, 0xe99e, 0xe99f, 0xe9a0, 0xe9a1, 0xe9a2, 0xe9a3,
-  0xe9a4, 0xe9a5, 0xe9a6, 0xe9a7, 0xe9a8, 0xe9a9, 0xe9aa, 0xe9ab,
-  0xe9ac, 0x9f54, 0xe9ad, 0xe2f6, 0x8b53, 0x8a40, 0x8db0, 0xe9af,
-  0xe9ae, 0x96a3, 0xe9b1, 0xe9b2, 0xe9b0, 0xe9b3, 0x9682, 0xe9b4,
-  0x8b9b, 0x9844, 0xe9b5, 0xe9b7, 0x88bc, 0xe9b8, 0x95a9, 0xe9b6,
-  0xe9b9, 0xe9ba, 0xe9bb, 0xe9bc, 0xe9bd, 0x968e, 0x8e4c, 0x8df8,
-  0x914e, 0xe9be, 0xe9c1, 0xe9bf, 0xe9c2, 0x8cef, 0xe9c0, 0xe9c3,
-  0xe9c4, 0xe9c5, 0xe9c9, 0x8e49, 0x91e2, 0xe9ca, 0xe9c7, 0xe9c6,
-  0xe9c8, 0x8c7e, 0xe9ce, 0xe9cd, 0xe9cc, 0x88b1, 0xe9d8, 0xe9d4,
-  0xe9d5, 0xe9d1, 0xe9d7, 0xe9d3, 0x8a82, 0x986b, 0xe9d6, 0xe9d2,
-  0xe9d0, 0xe9cf, 0xe9da, 0xe9dd, 0xe9dc, 0xe9db, 0x9568, 0xe9d9,
-  0x88f1, 0xe9de, 0xe9e0, 0x8a8f, 0xe9cb, 0x8956, 0xe9e2, 0xe9e1,
-  0xe9df, 0x924c, 0x9690, 0x97d8, 0xe9e3, 0xe9e4, 0xe9e5, 0xe9e6,
-  0xe9e7, 0x92b9, 0xe9e8, 0x94b5, 0xe9ed, 0xe9e9, 0xe9ea, 0x9650,
-  0x96c2, 0x93ce, 0xe9ee, 0xe9ef, 0x93bc, 0xe9ec, 0xe9eb, 0x89a8,
-  0xe9f7, 0xe9f6, 0x8995, 0xe9f4, 0xe9f3, 0xe9f1, 0x8a9b, 0xe9f0,
-  0x8eb0, 0x89a7, 0x8d83, 0xe9fa, 0xe9f9, 0xe9f8, 0xe9f5, 0xe9fb,
-  0xe9fc, 0xea44, 0xea43, 0xea45, 0x894c, 0xea40, 0xea41, 0x8d94,
-  0x96b7, 0xea42, 0x9651, 0xea4a, 0xea46, 0xea4b, 0xea48, 0xea47,
-  0x8c7b, 0xea4c, 0xea4d, 0xea4e, 0xea49, 0xe9f2, 0xea4f, 0x92df,
-  0xea53, 0xea54, 0xea52, 0xea51, 0xea57, 0xea50, 0xea55, 0xea56,
-  0xea59, 0xea58, 0xea5b, 0xea5c, 0xea5d, 0x9868, 0xea5a, 0x91e9,
-  0x8deb, 0xea5e, 0xea5f, 0xea60, 0xea61, 0xea62, 0x8cb2, 0xea63,
-  0xea64, 0x8ead, 0xea65, 0xea66, 0xea67, 0xea68, 0xea6b, 0xea69,
-  0x985b, 0xea6a, 0x97ed, 0xea6c, 0x97d9, 0xea6d, 0x949e, 0xea6e,
-  0xea70, 0xea71, 0xea6f, 0x8d8d, 0x96cb, 0x9683, 0x9bf5, 0x9f80,
-  0x969b, 0x89a9, 0xea73, 0x8b6f, 0xea74, 0xea75, 0xea76, 0x8d95,
-  0xea77, 0xe0d2, 0x96d9, 0x91e1, 0xea78, 0xea7a, 0xea79, 0xea7b,
-  0xea7c, 0xea7d, 0xea7e, 0xea80, 0xea81, 0xea82, 0xea83, 0xea84,
-  0xea85, 0xea86, 0xea87, 0xea88, 0x9343, 0x8cdb, 0xea8a, 0x916c,
-  0xea8b, 0xea8c, 0x9540, 0xea8d, 0xea8e, 0xe256, 0xe6d8, 0xe8eb,
-  0xea8f, 0xea90, 0xea92, 0xea93, 0xea94, 0x97ee, 0xea91, 0xea95,
-  0xea96, 0xea98, 0xea97, 0xea9a, 0xea9b, 0xea99, 0x97b4, 0xea9c,
-  0xea9d, 0xe273, 0xea9e, 0x8149, 0x8194, 0x8190, 0x8193, 0x8195,
-  0x8169, 0x816a, 0x8196, 0x817b, 0x8143, 0x8144, 0x815e, 0x824f,
-  0x8250, 0x8251, 0x8252, 0x8253, 0x8254, 0x8255, 0x8256, 0x8257,
-  0x8258, 0x8146, 0x8147, 0x8183, 0x8181, 0x8184, 0x8148, 0x8197,
-  0x8260, 0x8261, 0x8262, 0x8263, 0x8264, 0x8265, 0x8266, 0x8267,
-  0x8268, 0x8269, 0x826a, 0x826b, 0x826c, 0x826d, 0x826e, 0x826f,
-  0x8270, 0x8271, 0x8272, 0x8273, 0x8274, 0x8275, 0x8276, 0x8277,
-  0x8278, 0x8279, 0x816d, 0x815f, 0x816e, 0x814f, 0x8151, 0x814d,
-  0x8281, 0x8282, 0x8283, 0x8284, 0x8285, 0x8286, 0x8287, 0x8288,
-  0x8289, 0x828a, 0x828b, 0x828c, 0x828d, 0x828e, 0x828f, 0x8290,
-  0x8291, 0x8292, 0x8293, 0x8294, 0x8295, 0x8296, 0x8297, 0x8298,
-  0x8299, 0x829a, 0x816f, 0x8162, 0x8170, 0x8150, 0x818f,
-};
-
-typedef struct {
-  unsigned short indx; /* index into big table */
-  unsigned short used; /* bitmask of used entries */
-} Summary16;
-
-static const Summary16 jisx0208_uni2indx_page00[16] = {
-  /* 0x0000 */
-  {    0, 0x0000 }, {    0, 0x0000 }, {    0, 0x0000 }, {    0, 0x0000 },
-  {    0, 0x0000 }, { 6843, 0x1000 }, {    0, 0x0000 }, {    0, 0x0000 }, /* ZINT: Patched reverse solidus (backslash) mapping U+005C to 0x815F */
-  {    0, 0x0000 }, {    0, 0x0000 }, {    0, 0x118c }, {    5, 0x0053 },
-  {    9, 0x0000 }, {    9, 0x0080 }, {   10, 0x0000 }, {   10, 0x0080 },
-};
-static const Summary16 jisx0208_uni2indx_page03[22] = {
-  /* 0x0300 */
-  {   11, 0x0000 }, {   11, 0x0000 }, {   11, 0x0000 }, {   11, 0x0000 },
-  {   11, 0x0000 }, {   11, 0x0000 }, {   11, 0x0000 }, {   11, 0x0000 },
-  {   11, 0x0000 }, {   11, 0xfffe }, {   26, 0x03fb }, {   35, 0xfffe },
-  {   50, 0x03fb }, {   59, 0x0000 }, {   59, 0x0000 }, {   59, 0x0000 },
-  /* 0x0400 */
-  {   59, 0x0002 }, {   60, 0xffff }, {   76, 0xffff }, {   92, 0xffff },
-  {  108, 0xffff }, {  124, 0x0002 },
-};
-static const Summary16 jisx0208_uni2indx_page20[50] = {
-  /* 0x2000 */
-  {  125, 0x0000 }, {  125, 0x3361 }, {  132, 0x0063 }, {  136, 0x080d },
-  {  140, 0x0000 }, {  140, 0x0000 }, {  140, 0x0000 }, {  140, 0x0000 },
-  {  140, 0x0000 }, {  140, 0x0000 }, {  140, 0x0000 }, {  140, 0x0000 },
-  {  140, 0x0000 }, {  140, 0x0000 }, {  140, 0x0000 }, {  140, 0x0000 },
-  /* 0x2100 */
-  {  140, 0x0008 }, {  141, 0x0000 }, {  141, 0x0800 }, {  142, 0x0000 },
-  {  142, 0x0000 }, {  142, 0x0000 }, {  142, 0x0000 }, {  142, 0x0000 },
-  {  142, 0x0000 }, {  142, 0x000f }, {  146, 0x0000 }, {  146, 0x0000 },
-  {  146, 0x0000 }, {  146, 0x0014 }, {  148, 0x0000 }, {  148, 0x0000 },
-  /* 0x2200 */
-  {  148, 0x098d }, {  154, 0x6404 }, {  158, 0x1f81 }, {  165, 0x2030 },
-  {  168, 0x0000 }, {  168, 0x0004 }, {  169, 0x0cc3 }, {  175, 0x0000 },
-  {  175, 0x00cc }, {  179, 0x0000 }, {  179, 0x0020 }, {  180, 0x0000 },
-  {  180, 0x0000 }, {  180, 0x0000 }, {  180, 0x0000 }, {  180, 0x0000 },
-  /* 0x2300 */
-  {  180, 0x0000 }, {  180, 0x0004 },
-};
-static const Summary16 jisx0208_uni2indx_page25[23] = {
-  /* 0x2500 */
-  {  181, 0x900f }, {  187, 0x3999 }, {  195, 0x9939 }, {  203, 0x9999 },
-  {  211, 0x0804 }, {  213, 0x0000 }, {  213, 0x0000 }, {  213, 0x0000 },
-  {  213, 0x0000 }, {  213, 0x0000 }, {  213, 0x0003 }, {  215, 0x300c },
-  {  219, 0xc8c0 }, {  224, 0x0000 }, {  224, 0x8000 }, {  225, 0x0000 },
-  /* 0x2600 */
-  {  225, 0x0060 }, {  227, 0x0000 }, {  227, 0x0000 }, {  227, 0x0000 },
-  {  227, 0x0005 }, {  229, 0x0000 }, {  229, 0xa400 },
-};
-static const Summary16 jisx0208_uni2indx_page30[16] = {
-  /* 0x3000 */
-  {  232, 0xffef }, {  247, 0x103f }, {  254, 0x0000 }, {  254, 0x0000 },
-  {  254, 0xfffe }, {  269, 0xffff }, {  285, 0xffff }, {  301, 0xffff },
-  {  317, 0xffff }, {  333, 0x780f }, {  341, 0xfffe }, {  356, 0xffff },
-  {  372, 0xffff }, {  388, 0xffff }, {  404, 0xffff }, {  420, 0x787f },
-};
-static const Summary16 jisx0208_uni2indx_page4e[1307] = {
-  /* 0x4e00 */
-  {  431, 0x6f8b }, {  441, 0x43f3 }, {  450, 0x2442 }, {  454, 0x9b46 },
-  {  462, 0xe82c }, {  469, 0xe3e0 }, {  477, 0x0004 }, {  478, 0x400a },
-  {  481, 0x5f65 }, {  491, 0xdb36 }, {  501, 0x7977 }, {  512, 0x0449 },
-  {  516, 0xecd7 }, {  527, 0xe3f0 }, {  536, 0x6038 }, {  541, 0x08c5 },
-  /* 0x4f00 */
-  {  546, 0xe602 }, {  552, 0x3403 }, {  557, 0x8000 }, {  558, 0x3551 },
-  {  565, 0xe0c8 }, {  571, 0x7eab }, {  582, 0x8200 }, {  584, 0x9869 },
-  {  591, 0xa948 }, {  597, 0x2942 }, {  602, 0xe803 }, {  608, 0x8060 },
-  {  611, 0x441c }, {  616, 0xad93 }, {  625, 0xc03a }, {  631, 0x4568 },
-  /* 0x5000 */
-  {  637, 0xaa60 }, {  643, 0x8656 }, {  650, 0x3f7a }, {  661, 0x0240 },
-  {  663, 0x8388 }, {  668, 0x1461 }, {  673, 0x1020 }, {  675, 0x2174 },
-  {  681, 0x2021 }, {  684, 0x0702 }, {  688, 0x3000 }, {  690, 0x40bc },
-  {  696, 0xa624 }, {  702, 0x4462 }, {  707, 0x60a8 }, {  712, 0x0a20 },
-  /* 0x5100 */
-  {  715, 0x0217 }, {  720, 0x8574 }, {  727, 0x0402 }, {  729, 0x9c84 },
-  {  735, 0x7bfb }, {  748, 0x1415 }, {  753, 0x7f24 }, {  762, 0x11e2 },
-  {  768, 0xb665 }, {  777, 0x02ef }, {  785, 0x1f75 }, {  795, 0x20ff },
-  {  804, 0x3a70 }, {  811, 0x3840 }, {  815, 0x26c3 }, {  822, 0x6763 },
-  /* 0x5200 */
-  {  831, 0x4dd9 }, {  840, 0x2092 }, {  844, 0x46b0 }, {  850, 0x0fc9 },
-  {  858, 0xbc98 }, {  866, 0x4850 }, {  870, 0x8638 }, {  876, 0xa03f },
-  {  884, 0x2388 }, {  889, 0x8816 }, {  894, 0x3e09 }, {  901, 0x5232 },
-  {  907, 0x22aa }, {  913, 0xe3a4 }, {  921, 0x00dd }, {  927, 0xc72c },
-  /* 0x5300 */
-  {  935, 0xa166 }, {  942, 0x26e1 }, {  949, 0x840b }, {  954, 0x8f0a },
-  {  961, 0x27eb }, {  971, 0x559e }, {  980, 0xc241 }, {  985, 0x89bb },
-  {  994, 0x0014 }, {  996, 0x8540 }, { 1000, 0x6361 }, { 1007, 0x0849 },
-  { 1011, 0x7f0c }, { 1020, 0x8ad0 }, { 1026, 0xff3e }, { 1039, 0x05cf },
-  /* 0x5400 */
-  { 1047, 0xff1a }, { 1058, 0xa803 }, { 1063, 0x7a41 }, { 1070, 0x7b40 },
-  { 1077, 0x4745 }, { 1084, 0x8002 }, { 1086, 0x0500 }, { 1088, 0x38eb },
-  { 1097, 0xd851 }, { 1104, 0x0005 }, { 1106, 0x9934 }, { 1113, 0x710c },
-  { 1119, 0x0397 }, { 1126, 0x0100 }, { 1127, 0x6366 }, { 1135, 0x2404 },
-  /* 0x5500 */
-  { 1138, 0x80d0 }, { 1142, 0x0051 }, { 1145, 0xc000 }, { 1147, 0x430a },
-  { 1152, 0x9071 }, { 1158, 0x30c8 }, { 1163, 0x0008 }, { 1164, 0x5800 },
-  { 1167, 0x0e99 }, { 1174, 0xf700 }, { 1181, 0x5f80 }, { 1188, 0x0041 },
-  { 1190, 0x00b0 }, { 1193, 0x9410 }, { 1197, 0x0018 }, { 1199, 0x6280 },
-  /* 0x5600 */
-  { 1203, 0x0240 }, { 1205, 0x09d0 }, { 1210, 0x8200 }, { 1212, 0x0156 },
-  { 1217, 0x5004 }, { 1220, 0x0801 }, { 1222, 0x1d10 }, { 1227, 0x0510 },
-  { 1230, 0x84c1 }, { 1235, 0x0010 }, { 1236, 0x4025 }, { 1240, 0x1050 },
-  { 1243, 0x410f }, { 1249, 0x4d8a }, { 1256, 0x4009 }, { 1259, 0xa60d },
-  /* 0x5700 */
-  { 1266, 0xab19 }, { 1274, 0x914c }, { 1280, 0x21c0 }, { 1284, 0x0981 },
-  { 1288, 0xc485 }, { 1294, 0x0003 }, { 1296, 0x0652 }, { 1301, 0x8000 },
-  { 1302, 0x0b04 }, { 1306, 0x0008 }, { 1307, 0x041d }, { 1312, 0x0009 },
-  { 1314, 0x4849 }, { 1319, 0x905c }, { 1325, 0x0009 }, { 1327, 0x1690 },
-  /* 0x5800 */
-  { 1332, 0x0c65 }, { 1338, 0x2220 }, { 1341, 0x8412 }, { 1345, 0x2433 },
-  { 1351, 0x0c03 }, { 1355, 0x4796 }, { 1363, 0x0a04 }, { 1366, 0x4225 },
-  { 1371, 0x0028 }, { 1373, 0x9088 }, { 1377, 0x4900 }, { 1380, 0x4f08 },
-  { 1386, 0x14a2 }, { 1391, 0xd3aa }, { 1400, 0xd830 }, { 1406, 0x3e87 },
-  /* 0x5900 */
-  { 1415, 0x8604 }, { 1419, 0x1f61 }, { 1427, 0x7ea4 }, { 1436, 0x4186 },
-  { 1441, 0xc390 }, { 1447, 0x05b3 }, { 1454, 0x57a5 }, { 1463, 0x2118 },
-  { 1467, 0x241e }, { 1473, 0x2a48 }, { 1478, 0x1128 }, { 1482, 0x4a04 },
-  { 1486, 0x0a40 }, { 1489, 0x161b }, { 1496, 0x0d60 }, { 1501, 0x8840 },
-  /* 0x5a00 */
-  { 1504, 0x020a }, { 1507, 0x9502 }, { 1512, 0x8221 }, { 1516, 0x1060 },
-  { 1519, 0x0243 }, { 1523, 0x0400 }, { 1524, 0x1444 }, { 1528, 0x8000 },
-  { 1529, 0x0000 }, { 1529, 0x0c04 }, { 1532, 0x0000 }, { 1532, 0x7000 },
-  { 1535, 0x1a06 }, { 1540, 0x00c1 }, { 1543, 0x024a }, { 1547, 0x0c00 },
-  /* 0x5b00 */
-  { 1549, 0x1a00 }, { 1552, 0x0040 }, { 1553, 0x1404 }, { 1556, 0x4045 },
-  { 1560, 0x0029 }, { 1563, 0xbdb3 }, { 1574, 0x0a78 }, { 1580, 0x052b },
-  { 1586, 0xbba9 }, { 1596, 0xbfa0 }, { 1605, 0x407c }, { 1611, 0x8379 },
-  { 1619, 0x12fc }, { 1627, 0xe81d }, { 1635, 0x4bf6 }, { 1645, 0xc569 },
-  /* 0x5c00 */
-  { 1653, 0xeff6 }, { 1666, 0x044a }, { 1670, 0x2115 }, { 1675, 0xff02 },
-  { 1684, 0xed63 }, { 1694, 0x402b }, { 1699, 0xd033 }, { 1706, 0x0242 },
-  { 1709, 0x1000 }, { 1710, 0x0013 }, { 1713, 0x1b02 }, { 1718, 0x59ca },
-  { 1726, 0x00a0 }, { 1728, 0x0200 }, { 1729, 0xa703 }, { 1736, 0x2c41 },
-  /* 0x5d00 */
-  { 1741, 0x4880 }, { 1744, 0x8ff2 }, { 1754, 0x0204 }, { 1756, 0x0000 },
-  { 1756, 0x5800 }, { 1759, 0x1005 }, { 1762, 0x9200 }, { 1765, 0x0048 },
-  { 1767, 0x1894 }, { 1772, 0x2001 }, { 1774, 0x5004 }, { 1777, 0x3480 },
-  { 1781, 0x3200 }, { 1784, 0x684c }, { 1790, 0x49ea }, { 1798, 0x68be },
-  /* 0x5e00 */
-  { 1807, 0x184c }, { 1812, 0x2e42 }, { 1818, 0xa820 }, { 1822, 0x21c9 },
-  { 1828, 0x50b9 }, { 1835, 0x80b0 }, { 1839, 0x001e }, { 1843, 0xff7c },
-  { 1856, 0x849a }, { 1862, 0x14e0 }, { 1867, 0x28c1 }, { 1872, 0x01e0 },
-  { 1876, 0x870e }, { 1883, 0xac49 }, { 1890, 0x130f }, { 1897, 0xdddb },
-  /* 0x5f00 */
-  { 1909, 0xbe1a }, { 1918, 0x89fb }, { 1928, 0xa2e0 }, { 1934, 0x51a2 },
-  { 1940, 0x5502 }, { 1945, 0x32ca }, { 1952, 0x3e46 }, { 1960, 0x928b },
-  { 1967, 0x1dbf }, { 1978, 0x438f }, { 1986, 0x6703 }, { 1993, 0x3218 },
-  { 1998, 0x3028 }, { 2002, 0x33c0 }, { 2008, 0x0811 }, { 2011, 0xa923 },
-  /* 0x6000 */
-  { 2018, 0xc000 }, { 2020, 0x3a65 }, { 2028, 0x8fe3 }, { 2038, 0x0402 },
-  { 2040, 0x2c4e }, { 2047, 0x8625 }, { 2053, 0xbf3d }, { 2065, 0x00a1 },
-  { 2068, 0x3a1a }, { 2075, 0x8cd4 }, { 2082, 0x06c9 }, { 2088, 0x317c },
-  { 2096, 0x00e0 }, { 2099, 0x950a }, { 2105, 0x018b }, { 2110, 0x0edb },
-  /* 0x6100 */
-  { 2119, 0xe34b }, { 2128, 0x8c20 }, { 2132, 0x1182 }, { 2136, 0xf010 },
-  { 2141, 0x7d94 }, { 2150, 0xa728 }, { 2157, 0xc9ac }, { 2165, 0x40fb },
-  { 2173, 0x4484 }, { 2177, 0x0653 }, { 2183, 0x5a90 }, { 2189, 0x4444 },
-  { 2193, 0x3fc8 }, { 2202, 0x0001 }, { 2203, 0x0048 }, { 2205, 0xf5d4 },
-  /* 0x6200 */
-  { 2215, 0x7701 }, { 2222, 0xec57 }, { 2232, 0xc442 }, { 2237, 0x891d },
-  { 2244, 0x6b83 }, { 2252, 0x4928 }, { 2257, 0x4109 }, { 2261, 0xd242 },
-  { 2267, 0x061d }, { 2273, 0x59fe }, { 2284, 0x1800 }, { 2286, 0x3a22 },
-  { 2292, 0xb7e4 }, { 2302, 0x3b9f }, { 2313, 0xf003 }, { 2319, 0xc0ea },
-  /* 0x6300 */
-  { 2326, 0x1386 }, { 2332, 0x8202 }, { 2335, 0x8980 }, { 2339, 0xe400 },
-  { 2343, 0xb200 }, { 2347, 0x10a1 }, { 2351, 0x4b80 }, { 2356, 0x0cc4 },
-  { 2361, 0xd309 }, { 2368, 0x8944 }, { 2373, 0x1faf }, { 2384, 0x4834 },
-  { 2389, 0x8259 }, { 2395, 0x0c45 }, { 2400, 0x420a }, { 2404, 0x0450 },
-  /* 0x6400 */
-  { 2407, 0xa040 }, { 2410, 0x10c8 }, { 2414, 0x3140 }, { 2418, 0x4450 },
-  { 2422, 0x4004 }, { 2424, 0x0100 }, { 2425, 0x8280 }, { 2428, 0x0540 },
-  { 2431, 0x0108 }, { 2433, 0x442c }, { 2438, 0x6a30 }, { 2444, 0x1a05 },
-  { 2449, 0x20a6 }, { 2454, 0x0514 }, { 2458, 0x90cf }, { 2466, 0x6456 },
-  /* 0x6500 */
-  { 2473, 0x0021 }, { 2475, 0x3100 }, { 2478, 0x9c18 }, { 2484, 0xcbf0 },
-  { 2493, 0xa120 }, { 2497, 0x63e2 }, { 2505, 0x104c }, { 2509, 0x01b5 },
-  { 2515, 0x538c }, { 2522, 0x9a83 }, { 2529, 0xb8b2 }, { 2537, 0x3281 },
-  { 2542, 0x987a }, { 2550, 0x0a84 }, { 2554, 0x33e7 }, { 2564, 0x0c02 },
-  /* 0x6600 */
-  { 2567, 0xd4cc }, { 2575, 0x9018 }, { 2579, 0xa1a1 }, { 2585, 0x9070 },
-  { 2590, 0x8a1e }, { 2597, 0xe004 }, { 2601, 0xc3d4 }, { 2609, 0x0451 },
-  { 2613, 0x439a }, { 2620, 0x21c2 }, { 2625, 0x4844 }, { 2629, 0x5310 },
-  { 2634, 0x0292 }, { 2638, 0x3640 }, { 2643, 0x0241 }, { 2646, 0xf3bd },
-  /* 0x6700 */
-  { 2658, 0xab09 }, { 2665, 0xe8f0 }, { 2673, 0x7dc0 }, { 2681, 0xa5d2 },
-  { 2689, 0xc242 }, { 2694, 0xd24b }, { 2702, 0xa43f }, { 2711, 0xd0af },
-  { 2720, 0x1aa0 }, { 2725, 0x34a1 }, { 2731, 0x8247 }, { 2737, 0x03d8 },
-  { 2743, 0xc452 }, { 2749, 0x651b }, { 2757, 0xd294 }, { 2764, 0xc83a },
-  /* 0x6800 */
-  { 2771, 0x001c }, { 2774, 0x40c8 }, { 2778, 0x0e06 }, { 2783, 0x3314 },
-  { 2789, 0x614f }, { 2797, 0xb21b }, { 2805, 0x0088 }, { 2807, 0xc0d0 },
-  { 2812, 0xa02a }, { 2817, 0xa898 }, { 2823, 0xa1c5 }, { 2830, 0x166b },
-  { 2838, 0x2e50 }, { 2844, 0x85b4 }, { 2851, 0xc08b }, { 2857, 0x0604 },
-  /* 0x6900 */
-  { 2860, 0xf933 }, { 2870, 0x1e04 }, { 2875, 0x056e }, { 2882, 0xa251 },
-  { 2888, 0x0400 }, { 2889, 0x7638 }, { 2897, 0xec07 }, { 2905, 0x73b8 },
-  { 2914, 0x4406 }, { 2918, 0x1832 }, { 2923, 0x4081 }, { 2926, 0xc816 },
-  { 2932, 0x7c8a }, { 2940, 0x6309 }, { 2946, 0x2980 }, { 2950, 0xaa04 },
-  /* 0x6a00 */
-  { 2955, 0x1c24 }, { 2960, 0xca9c }, { 2968, 0x4e0e }, { 2975, 0x2760 },
-  { 2981, 0x0990 }, { 2985, 0x8300 }, { 2988, 0x0046 }, { 2991, 0x8104 },
-  { 2994, 0x6011 }, { 2998, 0x1081 }, { 3001, 0x540d }, { 3007, 0x0908 },
-  { 3010, 0x000e }, { 3013, 0xcc0a }, { 3019, 0x0500 }, { 3021, 0x0c00 },
-  /* 0x6b00 */
-  { 3023, 0x0430 }, { 3026, 0xa044 }, { 3030, 0x008b }, { 3034, 0x6784 },
-  { 3041, 0x5288 }, { 3046, 0x8a19 }, { 3052, 0x865e }, { 3060, 0x8b18 },
-  { 3066, 0x2e59 }, { 3074, 0x4160 }, { 3078, 0x8c10 }, { 3082, 0x9cbe },
-  { 3092, 0x6861 }, { 3098, 0x891c }, { 3104, 0x9800 }, { 3107, 0x0008 },
-  /* 0x6c00 */
-  { 3108, 0x8100 }, { 3110, 0x089a }, { 3115, 0x0018 }, { 3117, 0x4190 },
-  { 3121, 0x4007 }, { 3125, 0xe4a1 }, { 3132, 0x0505 }, { 3136, 0x640d },
-  { 3142, 0x310e }, { 3148, 0x0e4d }, { 3155, 0x4806 }, { 3159, 0xff0a },
-  { 3169, 0x1632 }, { 3175, 0x2aa8 }, { 3181, 0x852e }, { 3188, 0x000b },
-  /* 0x6d00 */
-  { 3191, 0x1800 }, { 3193, 0xca84 }, { 3199, 0x0e20 }, { 3203, 0x696c },
-  { 3211, 0x0032 }, { 3214, 0x1600 }, { 3217, 0x5658 }, { 3224, 0x0390 },
-  { 3228, 0x5120 }, { 3232, 0x1a28 }, { 3237, 0x8000 }, { 3238, 0x1124 },
-  { 3242, 0x18e1 }, { 3248, 0x4326 }, { 3254, 0x5d52 }, { 3262, 0x0eaa },
-  /* 0x6e00 */
-  { 3269, 0x0fa0 }, { 3275, 0xae28 }, { 3282, 0xfa7b }, { 3294, 0x4500 },
-  { 3297, 0x6408 }, { 3301, 0x8940 }, { 3305, 0xc880 }, { 3309, 0xc044 },
-  { 3313, 0x9005 }, { 3317, 0xb141 }, { 3323, 0x8424 }, { 3327, 0x24c4 },
-  { 3332, 0x1a34 }, { 3338, 0x603a }, { 3344, 0x9000 }, { 3346, 0xc194 },
-  /* 0x6f00 */
-  { 3352, 0x8246 }, { 3357, 0x003a }, { 3361, 0x180d }, { 3366, 0xc106 },
-  { 3371, 0x0022 }, { 3373, 0x9910 }, { 3378, 0xe050 }, { 3383, 0x1511 },
-  { 3388, 0x4057 }, { 3394, 0x0082 }, { 3396, 0x041a }, { 3400, 0x020a },
-  { 3403, 0x004f }, { 3408, 0x8930 }, { 3413, 0xd813 }, { 3420, 0x444a },
-  /* 0x7000 */
-  { 3425, 0x8a02 }, { 3429, 0xed22 }, { 3437, 0x10c0 }, { 3440, 0x4005 },
-  { 3443, 0x1000 }, { 3444, 0x0102 }, { 3446, 0x8808 }, { 3449, 0x3101 },
-  { 3453, 0x4600 }, { 3456, 0x0204 }, { 3458, 0xf000 }, { 3462, 0x0708 },
-  { 3466, 0x8900 }, { 3469, 0xa200 }, { 3472, 0x0000 }, { 3472, 0x2202 },
-  /* 0x7100 */
-  { 3475, 0x0200 }, { 3476, 0x1610 }, { 3480, 0x0042 }, { 3482, 0x1040 },
-  { 3484, 0x5200 }, { 3487, 0x0260 }, { 3490, 0x52f4 }, { 3498, 0x2000 },
-  { 3499, 0x8510 }, { 3503, 0x8230 }, { 3507, 0x1100 }, { 3509, 0x4202 },
-  { 3512, 0x4308 }, { 3516, 0x80b5 }, { 3522, 0x70e1 }, { 3529, 0x9a20 },
-  /* 0x7200 */
-  { 3534, 0x2040 }, { 3536, 0x0801 }, { 3538, 0x3500 }, { 3542, 0xfc65 },
-  { 3552, 0x19c1 }, { 3558, 0xab04 }, { 3564, 0x0286 }, { 3568, 0x6214 },
-  { 3573, 0x0087 }, { 3577, 0x0044 }, { 3579, 0x9085 }, { 3584, 0x0244 },
-  { 3587, 0x405c }, { 3592, 0x0a85 }, { 3597, 0x3207 }, { 3603, 0x3380 },
-  /* 0x7300 */
-  { 3608, 0x0400 }, { 3609, 0xb8c0 }, { 3615, 0xce20 }, { 3621, 0xc0d0 },
-  { 3626, 0xc030 }, { 3630, 0x0080 }, { 3631, 0x0508 }, { 3634, 0x0d25 },
-  { 3640, 0x0a90 }, { 3644, 0x0040 }, { 3645, 0x0200 }, { 3646, 0x080c },
-  { 3649, 0x6505 }, { 3655, 0x4000 }, { 3656, 0x6421 }, { 3661, 0x4102 },
-  /* 0x7400 */
-  { 3664, 0x0268 }, { 3668, 0x0000 }, { 3668, 0x0024 }, { 3670, 0x847c },
-  { 3677, 0x0002 }, { 3678, 0xde20 }, { 3685, 0x8619 }, { 3691, 0x4049 },
-  { 3695, 0x0808 }, { 3697, 0x4000 }, { 3698, 0x0084 }, { 3700, 0x2001 },
-  { 3702, 0x8400 }, { 3704, 0x1010 }, { 3706, 0x42cd }, { 3713, 0x01c7 },
-  /* 0x7500 */
-  { 3719, 0x7038 }, { 3725, 0xd52a }, { 3733, 0x1968 }, { 3739, 0x1d8f },
-  { 3748, 0xbe50 }, { 3756, 0x3e12 }, { 3763, 0x2ef5 }, { 3773, 0x81d9 },
-  { 3780, 0xcec4 }, { 3788, 0x2412 }, { 3792, 0x0828 }, { 3795, 0x732e },
-  { 3804, 0x24ac }, { 3810, 0x4b34 }, { 3817, 0x020c }, { 3820, 0xd41d },
-  /* 0x7600 */
-  { 3828, 0x2a02 }, { 3832, 0x8000 }, { 3833, 0x0097 }, { 3838, 0x0811 },
-  { 3841, 0x11c4 }, { 3846, 0x1144 }, { 3850, 0x1786 }, { 3857, 0x7d45 },
-  { 3866, 0x49d9 }, { 3874, 0x0649 }, { 3879, 0x4000 }, { 3880, 0x8791 },
-  { 3887, 0x254c }, { 3893, 0xd8c4 }, { 3900, 0x44ba }, { 3907, 0x4914 },
-  /* 0x7700 */
-  { 3912, 0x1b92 }, { 3919, 0xc800 }, { 3922, 0x0271 }, { 3927, 0x1580 },
-  { 3931, 0x0081 }, { 3933, 0x0c00 }, { 3935, 0x096a }, { 3941, 0xc200 },
-  { 3944, 0x4800 }, { 3946, 0x4002 }, { 3948, 0x3021 }, { 3952, 0xba49 },
-  { 3960, 0x2080 }, { 3962, 0x1c80 }, { 3966, 0xe2ac }, { 3974, 0x1008 },
-  /* 0x7800 */
-  { 3976, 0x1004 }, { 3978, 0x0034 }, { 3981, 0x00e1 }, { 3985, 0x8414 },
-  { 3989, 0x0020 }, { 3990, 0x2000 }, { 3991, 0x9800 }, { 3994, 0x1014 },
-  { 3997, 0x70c2 }, { 4003, 0x04aa }, { 4008, 0x8688 }, { 4013, 0x5420 },
-  { 4017, 0x0c62 }, { 4022, 0x0413 }, { 4026, 0x9180 }, { 4030, 0x2010 },
-  /* 0x7900 */
-  { 4032, 0x4082 }, { 4035, 0x0206 }, { 4038, 0x1c40 }, { 4042, 0x5400 },
-  { 4045, 0x0383 }, { 4050, 0xe4e9 }, { 4059, 0x2125 }, { 4064, 0x8480 },
-  { 4067, 0xe433 }, { 4075, 0x2000 }, { 4076, 0x44c0 }, { 4080, 0xe609 },
-  { 4087, 0x0a03 }, { 4091, 0x8126 }, { 4096, 0x12da }, { 4103, 0x0801 },
-  /* 0x7a00 */
-  { 4105, 0x6901 }, { 4110, 0x9790 }, { 4117, 0x4001 }, { 4119, 0xf886 },
-  { 4127, 0xe24d }, { 4135, 0x0081 }, { 4137, 0x0a0e }, { 4142, 0xa651 },
-  { 4149, 0x011a }, { 4153, 0x81ec }, { 4160, 0xc600 }, { 4164, 0x8441 },
-  { 4168, 0xadb8 }, { 4177, 0xb62c }, { 4185, 0xa46f }, { 4194, 0x8741 },
-  /* 0x7b00 */
-  { 4200, 0x8d54 }, { 4207, 0x4b02 }, { 4212, 0x1161 }, { 4217, 0x0268 },
-  { 4221, 0xbb60 }, { 4229, 0x2057 }, { 4235, 0x50a0 }, { 4239, 0x0433 },
-  { 4244, 0xa8c0 }, { 4249, 0xb7b4 }, { 4259, 0x2402 }, { 4262, 0x0112 },
-  { 4265, 0x9ad3 }, { 4274, 0x2000 }, { 4275, 0x2271 }, { 4281, 0x00c8 },
-  /* 0x7c00 */
-  { 4284, 0x2081 }, { 4287, 0x809e }, { 4293, 0x0c8a }, { 4298, 0xe180 },
-  { 4303, 0xb009 }, { 4308, 0x8151 }, { 4313, 0x1031 }, { 4317, 0x4028 },
-  { 4320, 0x2a0e }, { 4326, 0x89a5 }, { 4333, 0x69b6 }, { 4342, 0x620e },
-  { 4348, 0x4425 }, { 4353, 0xd144 }, { 4359, 0x8085 }, { 4363, 0x4d54 },
-  /* 0x7d00 */
-  { 4370, 0x2c75 }, { 4378, 0x1fb1 }, { 4387, 0xd807 }, { 4394, 0x862d },
-  { 4401, 0xd87c }, { 4410, 0x4841 }, { 4414, 0x414e }, { 4420, 0x226e },
-  { 4427, 0x8200 }, { 4429, 0x9e08 }, { 4435, 0xf80c }, { 4442, 0xed37 },
-  { 4453, 0x8c80 }, { 4457, 0x7526 }, { 4465, 0x9313 }, { 4472, 0x0814 },
-  /* 0x7e00 */
-  { 4475, 0x0e32 }, { 4481, 0xc804 }, { 4485, 0x484e }, { 4491, 0x6ea6 },
-  { 4500, 0x2c4a }, { 4506, 0x6670 }, { 4513, 0x26c0 }, { 4518, 0xba01 },
-  { 4524, 0xd30c }, { 4531, 0x185d }, { 4538, 0x0000 }, { 4538, 0x0000 },
-  { 4538, 0x0000 }, { 4538, 0x0000 }, { 4538, 0x0000 }, { 4538, 0x0000 },
-  /* 0x7f00 */
-  { 4538, 0x0000 }, { 4538, 0x0000 }, { 4538, 0x0000 }, { 4538, 0x0540 },
-  { 4541, 0x7020 }, { 4545, 0x8133 }, { 4551, 0x4f81 }, { 4558, 0x03a5 },
-  { 4564, 0x55ec }, { 4573, 0x6410 }, { 4577, 0xc318 }, { 4583, 0x2344 },
-  { 4588, 0x1462 }, { 4593, 0x0034 }, { 4596, 0x0a43 }, { 4601, 0x1a09 },
-  /* 0x8000 */
-  { 4606, 0x187b }, { 4614, 0x13a5 }, { 4621, 0x0102 }, { 4623, 0xa848 },
-  { 4628, 0x0440 }, { 4630, 0xc544 }, { 4636, 0x8106 }, { 4640, 0xe2dd },
-  { 4650, 0x1af0 }, { 4657, 0x2d48 }, { 4663, 0xb626 }, { 4671, 0x0416 },
-  { 4675, 0x5058 }, { 4680, 0x6e40 }, { 4686, 0x8032 }, { 4690, 0x3112 },
-  /* 0x8100 */
-  { 4695, 0x07e4 }, { 4702, 0x0c00 }, { 4704, 0x8208 }, { 4707, 0x420a },
-  { 4711, 0x4840 }, { 4714, 0x803b }, { 4720, 0x4860 }, { 4724, 0x8713 },
-  { 4731, 0x850d }, { 4737, 0x3428 }, { 4742, 0x0319 }, { 4747, 0xe529 },
-  { 4755, 0x2345 }, { 4761, 0x870a }, { 4767, 0x25a9 }, { 4774, 0x5c18 },
-  /* 0x8200 */
-  { 4780, 0x77a6 }, { 4790, 0xd9c5 }, { 4799, 0x5e00 }, { 4804, 0x03e8 },
-  { 4810, 0x0081 }, { 4812, 0xa700 }, { 4817, 0xcd54 }, { 4825, 0x41c6 },
-  { 4831, 0x2800 }, { 4833, 0xa204 }, { 4837, 0xb860 }, { 4843, 0x2b0a },
-  { 4849, 0x0020 }, { 4850, 0xda9e }, { 4860, 0x08ea }, { 4866, 0x0e1a },
-  /* 0x8300 */
-  { 4872, 0x427c }, { 4879, 0x11c0 }, { 4883, 0x8908 }, { 4887, 0x0376 },
-  { 4894, 0x8621 }, { 4899, 0x0105 }, { 4902, 0x0000 }, { 4902, 0x18a8 },
-  { 4907, 0x46a0 }, { 4912, 0xc448 }, { 4917, 0x0d05 }, { 4922, 0x2022 },
-  { 4925, 0x5422 }, { 4930, 0x9148 }, { 4935, 0x8a01 }, { 4939, 0x2897 },
-  /* 0x8400 */
-  { 4946, 0x7898 }, { 4953, 0x0008 }, { 4954, 0x1605 }, { 4959, 0x3122 },
-  { 4964, 0x4240 }, { 4967, 0x0880 }, { 4969, 0xfa4e }, { 4979, 0x06a2 },
-  { 4984, 0x0814 }, { 4987, 0x9211 }, { 4992, 0x2002 }, { 4994, 0x9b04 },
-  { 5000, 0x2e52 }, { 5007, 0x0643 }, { 5012, 0x5000 }, { 5014, 0x9010 },
-  /* 0x8500 */
-  { 5017, 0x0041 }, { 5019, 0x85ba }, { 5027, 0x3042 }, { 5031, 0x2020 },
-  { 5033, 0x4f0b }, { 5041, 0x05a0 }, { 5045, 0x2708 }, { 5050, 0x4080 },
-  { 5052, 0x0591 }, { 5057, 0x1a93 }, { 5064, 0xdf50 }, { 5073, 0x0600 },
-  { 5075, 0xa202 }, { 5079, 0x3021 }, { 5083, 0x0630 }, { 5087, 0x4e80 },
-  /* 0x8600 */
-  { 5092, 0x0cc4 }, { 5097, 0x04c8 }, { 5101, 0xa004 }, { 5104, 0x8001 },
-  { 5106, 0x6000 }, { 5108, 0xd431 }, { 5115, 0x0880 }, { 5117, 0x0a02 },
-  { 5120, 0x1c00 }, { 5123, 0x0028 }, { 5125, 0x8e18 }, { 5131, 0x0041 },
-  { 5133, 0x6ad0 }, { 5140, 0xca10 }, { 5145, 0xf210 }, { 5151, 0x4b00 },
-  /* 0x8700 */
-  { 5155, 0x274d }, { 5163, 0x1506 }, { 5168, 0x0220 }, { 5170, 0x8890 },
-  { 5174, 0x5a00 }, { 5178, 0x82a8 }, { 5183, 0x4549 }, { 5189, 0x8150 },
-  { 5193, 0x2004 }, { 5195, 0x8000 }, { 5196, 0x8804 }, { 5199, 0x2c08 },
-  { 5203, 0x08d1 }, { 5208, 0x0005 }, { 5210, 0x8001 }, { 5212, 0x4ac4 },
-  /* 0x8800 */
-  { 5218, 0xe020 }, { 5222, 0x0062 }, { 5225, 0x008e }, { 5229, 0x0a42 },
-  { 5233, 0x3055 }, { 5239, 0x6a8c }, { 5246, 0x090e }, { 5251, 0xe0a5 },
-  { 5258, 0x2906 }, { 5263, 0x42c4 }, { 5268, 0x4814 }, { 5272, 0x80b3 },
-  { 5278, 0x803e }, { 5284, 0xb330 }, { 5291, 0x0102 }, { 5293, 0x731c },
-  /* 0x8900 */
-  { 5301, 0x1494 }, { 5306, 0x600d }, { 5311, 0x0c20 }, { 5314, 0x0940 },
-  { 5317, 0x301a }, { 5322, 0xc040 }, { 5325, 0xa451 }, { 5331, 0xc094 },
-  { 5336, 0x8dca }, { 5344, 0x05c8 }, { 5349, 0x96c2 }, { 5356, 0xa40c },
-  { 5361, 0x0001 }, { 5362, 0x3404 }, { 5366, 0x00c8 }, { 5369, 0x0110 },
-  /* 0x8a00 */
-  { 5371, 0x550d }, { 5378, 0xa9c9 }, { 5386, 0x2428 }, { 5390, 0x1c5a },
-  { 5397, 0x0142 }, { 5400, 0x4837 }, { 5407, 0x7a4d }, { 5416, 0x100f },
-  { 5421, 0x32b4 }, { 5428, 0x452a }, { 5434, 0x317b }, { 5443, 0x9205 },
-  { 5448, 0xb894 }, { 5455, 0x5c44 }, { 5461, 0x68d7 }, { 5470, 0x458a },
-  /* 0x8b00 */
-  { 5476, 0x5097 }, { 5483, 0x2ed1 }, { 5491, 0x1943 }, { 5497, 0x4208 },
-  { 5500, 0xd202 }, { 5505, 0x9d40 }, { 5511, 0x9840 }, { 5515, 0x2097 },
-  { 5521, 0x5409 }, { 5526, 0x064d }, { 5532, 0x0000 }, { 5532, 0x0000 },
-  { 5532, 0x0000 }, { 5532, 0x0000 }, { 5532, 0x0000 }, { 5532, 0x0000 },
-  /* 0x8c00 */
-  { 5532, 0x0000 }, { 5532, 0x0000 }, { 5532, 0x0000 }, { 5532, 0x8480 },
-  { 5535, 0x5542 }, { 5541, 0x0421 }, { 5544, 0x1c06 }, { 5549, 0x1700 },
-  { 5553, 0x7624 }, { 5560, 0x6110 }, { 5564, 0xff87 }, { 5576, 0xb9dd },
-  { 5587, 0x659f }, { 5597, 0x5c0a }, { 5603, 0x245d }, { 5610, 0x3c00 },
-  /* 0x8d00 */
-  { 5614, 0xadb0 }, { 5622, 0x0059 }, { 5626, 0x0000 }, { 5626, 0x0000 },
-  { 5626, 0x0000 }, { 5626, 0x0000 }, { 5626, 0x28d0 }, { 5631, 0x009b },
-  { 5636, 0x0422 }, { 5639, 0x0200 }, { 5640, 0x0108 }, { 5642, 0x4408 },
-  { 5645, 0x9804 }, { 5649, 0xac40 }, { 5654, 0x8d0a }, { 5660, 0x9028 },
-  /* 0x8e00 */
-  { 5664, 0x8700 }, { 5668, 0xe001 }, { 5672, 0x0400 }, { 5673, 0x0031 },
-  { 5676, 0x1794 }, { 5683, 0x8221 }, { 5687, 0x0019 }, { 5690, 0x1054 },
-  { 5694, 0x2cb2 }, { 5701, 0x021a }, { 5705, 0x9c02 }, { 5710, 0x4003 },
-  { 5713, 0x3d60 }, { 5720, 0x8804 }, { 5723, 0x080c }, { 5726, 0x7900 },
-  /* 0x8f00 */
-  { 5731, 0x1628 }, { 5736, 0xba3c }, { 5745, 0x8640 }, { 5749, 0xcb08 },
-  { 5755, 0x7274 }, { 5763, 0x9080 }, { 5766, 0x001e }, { 5770, 0x0000 },
-  { 5770, 0x0000 }, { 5770, 0xd800 }, { 5774, 0xe188 }, { 5780, 0x9c87 },
-  { 5788, 0x4034 }, { 5792, 0x0412 }, { 5795, 0xae64 }, { 5803, 0x2791 },
-  /* 0x9000 */
-  { 5810, 0xe86b }, { 5819, 0xe6fb }, { 5831, 0x408f }, { 5837, 0x5366 },
-  { 5845, 0xeea6 }, { 5855, 0x537f }, { 5866, 0xe32b }, { 5875, 0xb5e4 },
-  { 5884, 0x869f }, { 5893, 0x0002 }, { 5894, 0x8548 }, { 5899, 0x0122 },
-  { 5902, 0x4402 }, { 5905, 0x0800 }, { 5906, 0x2116 }, { 5911, 0x20a0 },
-  /* 0x9100 */
-  { 5914, 0x0004 }, { 5915, 0x0204 }, { 5917, 0x2000 }, { 5918, 0x0005 },
-  { 5920, 0x7e00 }, { 5926, 0x0154 }, { 5930, 0x162c }, { 5936, 0x01ac },
-  { 5941, 0x2a84 }, { 5946, 0x1085 }, { 5950, 0x8c14 }, { 5955, 0x0530 },
-  { 5959, 0xfbc3 }, { 5970, 0xb943 }, { 5978, 0x00ca }, { 5982, 0x9060 },
-  /* 0x9200 */
-  { 5986, 0x6000 }, { 5988, 0x4032 }, { 5992, 0x1200 }, { 5994, 0x8090 },
-  { 5997, 0x0b30 }, { 6002, 0x4c81 }, { 6007, 0x0054 }, { 6010, 0x4002 },
-  { 6012, 0x0029 }, { 6015, 0x1d6a }, { 6023, 0x2000 }, { 6024, 0x0280 },
-  { 6026, 0x8000 }, { 6027, 0x0004 }, { 6028, 0x2610 }, { 6032, 0x150c },
-  /* 0x9300 */
-  { 6037, 0x8040 }, { 6039, 0x0701 }, { 6043, 0xd94d }, { 6052, 0x0c24 },
-  { 6056, 0x2810 }, { 6059, 0x1850 }, { 6063, 0x5001 }, { 6066, 0x5020 },
-  { 6069, 0x1000 }, { 6070, 0x04d0 }, { 6074, 0x7080 }, { 6078, 0x0201 },
-  { 6080, 0x0108 }, { 6082, 0x21c3 }, { 6088, 0x0132 }, { 6092, 0x0000 },
-  /* 0x9400 */
-  { 6092, 0x0088 }, { 6094, 0x0719 }, { 6100, 0x0802 }, { 6102, 0x0560 },
-  { 6106, 0x0012 }, { 6108, 0x4c0e }, { 6114, 0x0405 }, { 6117, 0xf0a1 },
-  { 6124, 0x0002 }, { 6125, 0x0000 }, { 6125, 0x0000 }, { 6125, 0x0000 },
-  { 6125, 0x0000 }, { 6125, 0x0000 }, { 6125, 0x0000 }, { 6125, 0x0000 },
-  /* 0x9500 */
-  { 6125, 0x0000 }, { 6125, 0x0000 }, { 6125, 0x0000 }, { 6125, 0x0000 },
-  { 6125, 0x0000 }, { 6125, 0x0000 }, { 6125, 0x0000 }, { 6125, 0x0080 },
-  { 6126, 0x8e8d }, { 6134, 0x035a }, { 6140, 0x21bd }, { 6148, 0x5a04 },
-  { 6153, 0x3488 }, { 6158, 0x1170 }, { 6163, 0x0026 }, { 6166, 0x0000 },
-  /* 0x9600 */
-  { 6166, 0x0000 }, { 6166, 0x1000 }, { 6167, 0xc502 }, { 6172, 0x8804 },
-  { 6175, 0xb815 }, { 6182, 0xf801 }, { 6188, 0x147c }, { 6195, 0x25ed },
-  { 6204, 0xed60 }, { 6212, 0x1bb0 }, { 6219, 0x0589 }, { 6224, 0x1bd7 },
-  { 6234, 0x7af3 }, { 6245, 0x1a62 }, { 6251, 0x0d0c }, { 6256, 0x0ac5 },
-  /* 0x9700 */
-  { 6262, 0xe5d1 }, { 6271, 0x524a }, { 6277, 0x0490 }, { 6280, 0x6305 },
-  { 6286, 0x0354 }, { 6291, 0x5244 }, { 6296, 0x2b57 }, { 6305, 0x1612 },
-  { 6310, 0xa872 }, { 6317, 0x1101 }, { 6320, 0x2949 }, { 6326, 0x0018 },
-  { 6328, 0x0948 }, { 6332, 0x1008 }, { 6334, 0x6000 }, { 6336, 0x886c },
-  /* 0x9800 */
-  { 6342, 0x916e }, { 6350, 0x058f }, { 6357, 0x3012 }, { 6361, 0x3990 },
-  { 6367, 0xf840 }, { 6373, 0x4930 }, { 6378, 0x8880 }, { 6381, 0x001b },
-  { 6385, 0x0000 }, { 6385, 0x0000 }, { 6385, 0x8500 }, { 6388, 0x0042 },
-  { 6390, 0x0058 }, { 6393, 0x9800 }, { 6396, 0xea04 }, { 6402, 0x7014 },
-  /* 0x9900 */
-  { 6407, 0x1628 }, { 6412, 0x611d }, { 6419, 0x5113 }, { 6425, 0x6000 },
-  { 6427, 0x1a24 }, { 6432, 0x00a7 }, { 6437, 0x0000 }, { 6437, 0x0000 },
-  { 6437, 0x0000 }, { 6437, 0x03c0 }, { 6441, 0x7120 }, { 6446, 0x1018 },
-  { 6449, 0x0172 }, { 6454, 0xa927 }, { 6462, 0x6004 }, { 6465, 0x8906 },
-  /* 0x9a00 */
-  { 6470, 0xc022 }, { 6474, 0x020c }, { 6477, 0x0900 }, { 6479, 0x4081 },
-  { 6482, 0x202d }, { 6487, 0x8ca0 }, { 6492, 0x0e34 }, { 6498, 0x0000 },
-  { 6498, 0x0000 }, { 6498, 0x0000 }, { 6498, 0x2100 }, { 6500, 0x1101 },
-  { 6503, 0x8011 }, { 6506, 0xc11a }, { 6512, 0xec4c }, { 6520, 0x0892 },
-  /* 0x9b00 */
-  { 6524, 0x0040 }, { 6525, 0x8500 }, { 6528, 0xc7ac }, { 6537, 0x1806 },
-  { 6541, 0xe03e }, { 6549, 0x0512 }, { 6553, 0x8000 }, { 6554, 0x0010 },
-  { 6555, 0x4008 }, { 6557, 0x80ce }, { 6563, 0x6d01 }, { 6569, 0x0210 },
-  { 6571, 0x8641 }, { 6576, 0x0856 }, { 6581, 0x011e }, { 6586, 0x0027 },
-  /* 0x9c00 */
-  { 6590, 0x3750 }, { 6597, 0x083d }, { 6603, 0xe032 }, { 6609, 0x4e05 },
-  { 6615, 0x01c0 }, { 6618, 0x0484 }, { 6621, 0x0081 }, { 6623, 0x0140 },
-  { 6625, 0x0000 }, { 6625, 0x0000 }, { 6625, 0x0000 }, { 6625, 0x0000 },
-  { 6625, 0x0000 }, { 6625, 0x0000 }, { 6625, 0x1aa0 }, { 6630, 0x0059 },
-  /* 0x9d00 */
-  { 6634, 0x43c8 }, { 6640, 0x8824 }, { 6644, 0x1d48 }, { 6650, 0xc800 },
-  { 6653, 0x0152 }, { 6657, 0x7203 }, { 6663, 0x9013 }, { 6668, 0x0404 },
-  { 6670, 0x8280 }, { 6673, 0x0400 }, { 6674, 0x8a10 }, { 6678, 0x0d14 },
-  { 6683, 0x8056 }, { 6688, 0x0208 }, { 6690, 0xa040 }, { 6693, 0x2704 },
-  /* 0x9e00 */
-  { 6698, 0x0000 }, { 6698, 0x4c00 }, { 6701, 0x0000 }, { 6701, 0x0000 },
-  { 6701, 0x0000 }, { 6701, 0x0000 }, { 6701, 0x0000 }, { 6701, 0xa320 },
-  { 6706, 0x1902 }, { 6710, 0xa0ae }, { 6717, 0x2660 }, { 6722, 0xdf00 },
-  { 6729, 0xf010 }, { 6734, 0x7b15 }, { 6743, 0x8121 }, { 6747, 0x3ad0 },
-  /* 0x9f00 */
-  { 6754, 0x4180 }, { 6757, 0x0028 }, { 6759, 0x1003 }, { 6762, 0x4800 },
-  { 6764, 0xcc00 }, { 6768, 0x8014 }, { 6771, 0x14cf }, { 6779, 0x00c4 },
-  { 6782, 0x2000 }, { 6783, 0x3020 }, { 6786, 0x0001 },
-};
-
-static const Summary16 jisx0208_uni2indx_pageff[15] = {
-  /* 0xff00 */
-  { 6787, 0xdf7a }, { 6799, 0xffff }, { 6815, 0xffff }, { 6831, 0xffff },
-  { 6847, 0xffff }, { 6863, 0x3fff }, { 6877, 0x0000 }, { 6877, 0x0000 },
-  { 6877, 0x0000 }, { 6877, 0x0000 }, { 6877, 0x0000 }, { 6877, 0x0000 },
-  { 6877, 0x0000 }, { 6877, 0x0000 }, { 6877, 0x0028 },
-};
-
-static int jisx0208_wctomb(unsigned int* r, unsigned int wc) {
-    const Summary16 *summary = NULL;
-    if (wc < 0x0100) {
-        summary = &jisx0208_uni2indx_page00[(wc>>4)];
-    } else if (wc >= 0x0300 && wc < 0x0460) {
-        summary = &jisx0208_uni2indx_page03[(wc>>4)-0x030];
-    } else if (wc >= 0x2000 && wc < 0x2320) {
-        summary = &jisx0208_uni2indx_page20[(wc>>4)-0x200];
-    } else if (wc >= 0x2500 && wc < 0x2670) {
-        summary = &jisx0208_uni2indx_page25[(wc>>4)-0x250];
-    } else if (wc >= 0x3000 && wc < 0x3100) {
-        summary = &jisx0208_uni2indx_page30[(wc>>4)-0x300];
-    } else if (wc >= 0x4e00 && wc < 0x9fb0) {
-        summary = &jisx0208_uni2indx_page4e[(wc>>4)-0x4e0];
-    } else if (wc >= 0xff00 && wc < 0xfff0) {
-        summary = &jisx0208_uni2indx_pageff[(wc>>4)-0xff0];
-    }
-    if (summary) {
-        unsigned short used = summary->used;
-        unsigned int i = wc & 0x0f;
-        if (used & ((unsigned short) 1 << i)) {
-            /* Keep in 'used' only the bits 0..i-1. */
-            used &= ((unsigned short) 1 << i) - 1;
-            /* Add 'summary->indx' and the number of bits set in 'used'. */
-            used = (used & 0x5555) + ((used & 0xaaaa) >> 1);
-            used = (used & 0x3333) + ((used & 0xcccc) >> 2);
-            used = (used & 0x0f0f) + ((used & 0xf0f0) >> 4);
-            used = (used & 0x00ff) + (used >> 8);
-            *r = jisx0208_2charset[summary->indx + used];
-            return 2;
-        }
-    }
-    return 0;
-}
-
-/*
- * SHIFT_JIS (libiconv-1.16/lib/sjis.h)
- */
-
-/* Returns 1 or 2 on success, 0 if no mapping */
-INTERNAL int sjis_wctomb_zint(unsigned int* r, unsigned int wc) {
-    int ret;
-
-    /* Try JIS X 0201-1976. */
-    ret = jisx0201_wctomb(r, wc);
-    if (ret) {
-        return ret;
-    }
-
-    /* Try JIS X 0208-1990. */
-    /* ZINT: Note leaving mapping of full-width reverse solidus U+FF3C to 0x815F (duplicate of patched U+005C) to avoid having to regen tables */
-    ret = jisx0208_wctomb(r, wc);
-    if (ret) {
-        return ret;
-    }
-
-    /* User-defined range. See
-    * Ken Lunde's "CJKV Information Processing", table 4-66, p. 206. */
-    /* ZINT: https://file.allitebooks.com/20160708/CJKV%20Information%20Processing.pdf (table 4-86, p. 286, 2nd ed.) */
-    if (wc >= 0xe000 && wc < 0xe758) {
-        unsigned char c1, c2;
-        c1 = (unsigned int) (wc - 0xe000) / 188;
-        c2 = (unsigned int) (wc - 0xe000) % 188;
-        *r = ((c1 + 0xf0) << 8) | (c2 < 0x3f ? c2 + 0x40 : c2 + 0x41);
-        return 2;
-    }
-
-    return 0;
-}
-
-/* Convert UTF-8 string to Shift JIS and place in array of ints */
-INTERNAL int sjis_utf8tomb(struct zint_symbol *symbol, const unsigned char source[], size_t* p_length, unsigned int* jisdata) {
-    int error_number;
-    unsigned int i, length;
-#ifndef _MSC_VER
-    unsigned int utfdata[*p_length + 1];
-#else
-    unsigned int* utfdata = (unsigned int*) _alloca((*p_length + 1) * sizeof(unsigned int));
-#endif
-
-    error_number = utf8_to_unicode(symbol, source, utfdata, p_length, 1 /*disallow_4byte*/);
-    if (error_number != 0) {
-        return error_number;
-    }
-
-    for (i = 0, length = *p_length; i < length; i++) {
-        if (!sjis_wctomb_zint(jisdata + i, utfdata[i])) {
-            strcpy(symbol->errtxt, "800: Invalid character in input data");
-            return ZINT_ERROR_INVALID_DATA;
-        }
-    }
-
-    return 0;
-}
-
-/* Convert UTF-8 string to single byte ECI and place in array of ints */
-INTERNAL int sjis_utf8tosb(int eci, const unsigned char source[], size_t* p_length, unsigned int* jisdata, int full_multibyte) {
-    int error_number;
-#ifndef _MSC_VER
-    unsigned char single_byte[*p_length + 1];
-#else
-    unsigned char* single_byte = (unsigned char*) _alloca(*p_length + 1);
-#endif
-
-    error_number = utf_to_eci(eci, source, single_byte, p_length);
-    if (error_number != 0) {
-        // Note not setting `symbol->errtxt`, up to caller
-        return error_number;
-    }
-
-    sjis_cpy(single_byte, p_length, jisdata, full_multibyte);
-
-    return 0;
-}
-
-/* If `full_multibyte` set, copy byte input stream to array of ints, putting double-bytes that match QR Kanji mode in a single entry.
- * If `full_multibyte` not set, do a straight copy */
-INTERNAL void sjis_cpy(const unsigned char source[], size_t* p_length, unsigned int* jisdata, int full_multibyte) {
-    unsigned int i, j, jis, length;
-    unsigned char c;
-
-    if (full_multibyte) {
-        for (i = 0, j = 0, length = *p_length; i < length; i++, j++) {
-            c = source[i];
-            if (((c >= 0x81 && c <= 0x9F) || (c >= 0xE0 && c <= 0xEB)) && length - i >= 2) {
-                jis = (c << 8) | source[i + 1];
-                if ((jis >= 0x8140 && jis <= 0x9FFC) || (jis >= 0xE040 && jis <= 0xEBBF)) {
-                    /* This may or may not be valid Shift JIS, but don't care as long as it can be encoded in QR Kanji mode */
-                    jisdata[j] = jis;
-                    i++;
-                } else {
-                    jisdata[j] = c;
-                }
-            } else {
-                jisdata[j] = c;
-            }
-        }
-        *p_length = j;
-    } else {
-        /* Straight copy */
-        for (i = 0, length = *p_length; i < length; i++) {
-            jisdata[i] = source[i];
-        }
-    }
-}
index b019a1b..749e036 100644 (file)
@@ -1,7 +1,7 @@
-/*  sjis.h - Unicode to Shift JIS
+/*  sjis.h - Unicode to Shift JIS lookup table
 
     libzint - the open source barcode library
-    Copyright (C) 2009-2020 Robin Stuart <rstuart114@gmail.com>
+    Copyright (C) 2009-2017 Robin Stuart <rstuart114@gmail.com>
 
     Redistribution and use in source and binary forms, with or without
     modification, are permitted provided that the following conditions
     OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     SUCH DAMAGE.
  */
-/* vim: set ts=4 sw=4 et : */
 
-#ifndef SJIS_H
-#define SJIS_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
-INTERNAL int sjis_wctomb_zint(unsigned int* r, unsigned int wc);
-INTERNAL int sjis_utf8tomb(struct zint_symbol *symbol, const unsigned char source[], size_t* p_length, unsigned int* jisdata);
-INTERNAL int sjis_utf8tosb(int eci, const unsigned char source[], size_t* p_length, unsigned int* jisdata, int full_multibyte);
-INTERNAL void sjis_cpy(const unsigned char source[], size_t* p_length, unsigned int* jisdata, int full_multibyte);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
+/* Derived from :
+## Shift_JIS (JIS X 0208:1997 Appendix 1) vs Unicode mapping table
+##
+## Date: 06 Mar 2002 06:01:22 GMT
+## License:
+##     Copyright (C) 2001 earthian@tama.or.jp, All Rights Reserved.
+##     Copyright (C) 2001 I'O, All Rights Reserved.
+##     You can use, modify, distribute this table freely.
+ */
 
-#endif /* SJIS_H */
+static const unsigned short int sjis_lookup[] = {
+    0x005C, 0x815F, // REVERSE SOLIDUS
+    0x00A2, 0x8191, // CENT SIGN
+    0x00A3, 0x8192, // POUND SIGN
+    0x00A7, 0x8198, // SECTION SIGN
+    0x00A8, 0x814E, // DIAERESIS
+    0x00AC, 0x81CA, // NOT SIGN
+    0x00B0, 0x818B, // DEGREE SIGN
+    0x00B1, 0x817D, // PLUS-MINUS SIGN
+    0x00B4, 0x814C, // ACUTE ACCENT
+    0x00B6, 0x81F7, // PILCROW SIGN
+    0x00D7, 0x817E, // MULTIPLICATION SIGN
+    0x00F7, 0x8180, // DIVISION SIGN
+    0x0391, 0x839F, // GREEK CAPITAL LETTER ALPHA
+    0x0392, 0x83A0, // GREEK CAPITAL LETTER BETA
+    0x0393, 0x83A1, // GREEK CAPITAL LETTER GAMMA
+    0x0394, 0x83A2, // GREEK CAPITAL LETTER DELTA
+    0x0395, 0x83A3, // GREEK CAPITAL LETTER EPSILON
+    0x0396, 0x83A4, // GREEK CAPITAL LETTER ZETA
+    0x0397, 0x83A5, // GREEK CAPITAL LETTER ETA
+    0x0398, 0x83A6, // GREEK CAPITAL LETTER THETA
+    0x0399, 0x83A7, // GREEK CAPITAL LETTER IOTA
+    0x039A, 0x83A8, // GREEK CAPITAL LETTER KAPPA
+    0x039B, 0x83A9, // GREEK CAPITAL LETTER LAMDA
+    0x039C, 0x83AA, // GREEK CAPITAL LETTER MU
+    0x039D, 0x83AB, // GREEK CAPITAL LETTER NU
+    0x039E, 0x83AC, // GREEK CAPITAL LETTER XI
+    0x039F, 0x83AD, // GREEK CAPITAL LETTER OMICRON
+    0x03A0, 0x83AE, // GREEK CAPITAL LETTER PI
+    0x03A1, 0x83AF, // GREEK CAPITAL LETTER RHO
+    0x03A3, 0x83B0, // GREEK CAPITAL LETTER SIGMA
+    0x03A4, 0x83B1, // GREEK CAPITAL LETTER TAU
+    0x03A5, 0x83B2, // GREEK CAPITAL LETTER UPSILON
+    0x03A6, 0x83B3, // GREEK CAPITAL LETTER PHI
+    0x03A7, 0x83B4, // GREEK CAPITAL LETTER CHI
+    0x03A8, 0x83B5, // GREEK CAPITAL LETTER PSI
+    0x03A9, 0x83B6, // GREEK CAPITAL LETTER OMEGA
+    0x03B1, 0x83BF, // GREEK SMALL LETTER ALPHA
+    0x03B2, 0x83C0, // GREEK SMALL LETTER BETA
+    0x03B3, 0x83C1, // GREEK SMALL LETTER GAMMA
+    0x03B4, 0x83C2, // GREEK SMALL LETTER DELTA
+    0x03B5, 0x83C3, // GREEK SMALL LETTER EPSILON
+    0x03B6, 0x83C4, // GREEK SMALL LETTER ZETA
+    0x03B7, 0x83C5, // GREEK SMALL LETTER ETA
+    0x03B8, 0x83C6, // GREEK SMALL LETTER THETA
+    0x03B9, 0x83C7, // GREEK SMALL LETTER IOTA
+    0x03BA, 0x83C8, // GREEK SMALL LETTER KAPPA
+    0x03BB, 0x83C9, // GREEK SMALL LETTER LAMDA
+    0x03BC, 0x83CA, // GREEK SMALL LETTER MU
+    0x03BD, 0x83CB, // GREEK SMALL LETTER NU
+    0x03BE, 0x83CC, // GREEK SMALL LETTER XI
+    0x03BF, 0x83CD, // GREEK SMALL LETTER OMICRON
+    0x03C0, 0x83CE, // GREEK SMALL LETTER PI
+    0x03C1, 0x83CF, // GREEK SMALL LETTER RHO
+    0x03C3, 0x83D0, // GREEK SMALL LETTER SIGMA
+    0x03C4, 0x83D1, // GREEK SMALL LETTER TAU
+    0x03C5, 0x83D2, // GREEK SMALL LETTER UPSILON
+    0x03C6, 0x83D3, // GREEK SMALL LETTER PHI
+    0x03C7, 0x83D4, // GREEK SMALL LETTER CHI
+    0x03C8, 0x83D5, // GREEK SMALL LETTER PSI
+    0x03C9, 0x83D6, // GREEK SMALL LETTER OMEGA
+    0x0401, 0x8446, // CYRILLIC CAPITAL LETTER IO
+    0x0410, 0x8440, // CYRILLIC CAPITAL LETTER A
+    0x0411, 0x8441, // CYRILLIC CAPITAL LETTER BE
+    0x0412, 0x8442, // CYRILLIC CAPITAL LETTER VE
+    0x0413, 0x8443, // CYRILLIC CAPITAL LETTER GHE
+    0x0414, 0x8444, // CYRILLIC CAPITAL LETTER DE
+    0x0415, 0x8445, // CYRILLIC CAPITAL LETTER IE
+    0x0416, 0x8447, // CYRILLIC CAPITAL LETTER ZHE
+    0x0417, 0x8448, // CYRILLIC CAPITAL LETTER ZE
+    0x0418, 0x8449, // CYRILLIC CAPITAL LETTER I
+    0x0419, 0x844A, // CYRILLIC CAPITAL LETTER SHORT I
+    0x041A, 0x844B, // CYRILLIC CAPITAL LETTER KA
+    0x041B, 0x844C, // CYRILLIC CAPITAL LETTER EL
+    0x041C, 0x844D, // CYRILLIC CAPITAL LETTER EM
+    0x041D, 0x844E, // CYRILLIC CAPITAL LETTER EN
+    0x041E, 0x844F, // CYRILLIC CAPITAL LETTER O
+    0x041F, 0x8450, // CYRILLIC CAPITAL LETTER PE
+    0x0420, 0x8451, // CYRILLIC CAPITAL LETTER ER
+    0x0421, 0x8452, // CYRILLIC CAPITAL LETTER ES
+    0x0422, 0x8453, // CYRILLIC CAPITAL LETTER TE
+    0x0423, 0x8454, // CYRILLIC CAPITAL LETTER U
+    0x0424, 0x8455, // CYRILLIC CAPITAL LETTER EF
+    0x0425, 0x8456, // CYRILLIC CAPITAL LETTER HA
+    0x0426, 0x8457, // CYRILLIC CAPITAL LETTER TSE
+    0x0427, 0x8458, // CYRILLIC CAPITAL LETTER CHE
+    0x0428, 0x8459, // CYRILLIC CAPITAL LETTER SHA
+    0x0429, 0x845A, // CYRILLIC CAPITAL LETTER SHCHA
+    0x042B, 0x845C, // CYRILLIC CAPITAL LETTER YERU
+    0x042C, 0x845D, // CYRILLIC CAPITAL LETTER SOFT SIGN
+    0x042D, 0x845E, // CYRILLIC CAPITAL LETTER E
+    0x042E, 0x845F, // CYRILLIC CAPITAL LETTER YU
+    0x042F, 0x8460, // CYRILLIC CAPITAL LETTER YA
+    0x0430, 0x8470, // CYRILLIC SMALL LETTER A
+    0x0431, 0x8471, // CYRILLIC SMALL LETTER BE
+    0x0432, 0x8472, // CYRILLIC SMALL LETTER VE
+    0x0433, 0x8473, // CYRILLIC SMALL LETTER GHE
+    0x0434, 0x8474, // CYRILLIC SMALL LETTER DE
+    0x0435, 0x8475, // CYRILLIC SMALL LETTER IE
+    0x0436, 0x8477, // CYRILLIC SMALL LETTER ZHE
+    0x0437, 0x8478, // CYRILLIC SMALL LETTER ZE
+    0x0438, 0x8479, // CYRILLIC SMALL LETTER I
+    0x0439, 0x847A, // CYRILLIC SMALL LETTER SHORT I
+    0x043A, 0x847B, // CYRILLIC SMALL LETTER KA
+    0x043B, 0x847C, // CYRILLIC SMALL LETTER EL
+    0x043C, 0x847D, // CYRILLIC SMALL LETTER EM
+    0x043D, 0x847E, // CYRILLIC SMALL LETTER EN
+    0x043E, 0x8480, // CYRILLIC SMALL LETTER O
+    0x043F, 0x8481, // CYRILLIC SMALL LETTER PE
+    0x0440, 0x8482, // CYRILLIC SMALL LETTER ER
+    0x0441, 0x8483, // CYRILLIC SMALL LETTER ES
+    0x0442, 0x8484, // CYRILLIC SMALL LETTER TE
+    0x0443, 0x8485, // CYRILLIC SMALL LETTER U
+    0x0444, 0x8486, // CYRILLIC SMALL LETTER EF
+    0x0445, 0x8487, // CYRILLIC SMALL LETTER HA
+    0x0446, 0x8488, // CYRILLIC SMALL LETTER TSE
+    0x0447, 0x8489, // CYRILLIC SMALL LETTER CHE
+    0x0448, 0x848A, // CYRILLIC SMALL LETTER SHA
+    0x0449, 0x848B, // CYRILLIC SMALL LETTER SHCHA
+    0x044A, 0x848C, // CYRILLIC SMALL LETTER HARD SIGN
+    0x044B, 0x848D, // CYRILLIC SMALL LETTER YERU
+    0x044C, 0x848E, // CYRILLIC SMALL LETTER SOFT SIGN
+    0x044D, 0x848F, // CYRILLIC SMALL LETTER E
+    0x044E, 0x8490, // CYRILLIC SMALL LETTER YU
+    0x044F, 0x8491, // CYRILLIC SMALL LETTER YA
+    0x0451, 0x8476, // CYRILLIC SMALL LETTER IO
+    0x2010, 0x815D, // HYPHEN
+    0x2014, 0x815C, // EM DASH
+    0x2016, 0x8161, // DOUBLE VERTICAL LINE
+    0x2018, 0x8165, // LEFT SINGLE QUOTATION MARK
+    0x2019, 0x8166, // RIGHT SINGLE QUOTATION MARK
+    0x201C, 0x8167, // LEFT DOUBLE QUOTATION MARK
+    0x201D, 0x8168, // RIGHT DOUBLE QUOTATION MARK
+    0x2020, 0x81F5, // DAGGER
+    0x2021, 0x81F6, // DOUBLE DAGGER
+    0x2025, 0x8164, // TWO DOT LEADER
+    0x2026, 0x8163, // HORIZONTAL ELLIPSIS
+    0x2030, 0x81F1, // PER MILLE SIGN
+    0x2032, 0x818C, // PRIME
+    0x2033, 0x818D, // DOUBLE PRIME
+    0x203B, 0x81A6, // REFERENCE MARK
+    0x2103, 0x818E, // DEGREE CELSIUS
+    0x212B, 0x81F0, // ANGSTROM SIGN
+    0x2190, 0x81A9, // LEFTWARDS ARROW
+    0x2191, 0x81AA, // UPWARDS ARROW
+    0x2192, 0x81A8, // RIGHTWARDS ARROW
+    0x2193, 0x81AB, // DOWNWARDS ARROW
+    0x21D2, 0x81CB, // RIGHTWARDS DOUBLE ARROW
+    0x21D4, 0x81CC, // LEFT RIGHT DOUBLE ARROW
+    0x2200, 0x81CD, // FOR ALL
+    0x2202, 0x81DD, // PARTIAL DIFFERENTIAL
+    0x2203, 0x81CE, // THERE EXISTS
+    0x2207, 0x81DE, // NABLA
+    0x2208, 0x81B8, // ELEMENT OF
+    0x220B, 0x81B9, // CONTAINS AS MEMBER
+    0x2212, 0x817C, // MINUS SIGN
+    0x221A, 0x81E3, // SQUARE ROOT
+    0x221D, 0x81E5, // PROPORTIONAL TO
+    0x221E, 0x8187, // INFINITY
+    0x2220, 0x81DA, // ANGLE
+    0x2227, 0x81C8, // LOGICAL AND
+    0x2228, 0x81C9, // LOGICAL OR
+    0x2229, 0x81BF, // INTERSECTION
+    0x222A, 0x81BE, // UNION
+    0x222B, 0x81E7, // INTEGRAL
+    0x222C, 0x81E8, // DOUBLE INTEGRAL
+    0x2234, 0x8188, // THEREFORE
+    0x2235, 0x81E6, // BECAUSE
+    0x223D, 0x81E4, // REVERSED TILDE
+    0x2252, 0x81E0, // APPROXIMATELY EQUAL TO OR THE IMAGE OF
+    0x2260, 0x8182, // NOT EQUAL TO
+    0x2261, 0x81DF, // IDENTICAL TO
+    0x2266, 0x8185, // LESS-THAN OVER EQUAL TO
+    0x2267, 0x8186, // GREATER-THAN OVER EQUAL TO
+    0x226A, 0x81E1, // MUCH LESS-THAN
+    0x226B, 0x81E2, // MUCH GREATER-THAN
+    0x2282, 0x81BC, // SUBSET OF
+    0x2283, 0x81BD, // SUPERSET OF
+    0x2286, 0x81BA, // SUBSET OF OR EQUAL TO
+    0x2287, 0x81BB, // SUPERSET OF OR EQUAL TO
+    0x22A5, 0x81DB, // UP TACK
+    0x2312, 0x81DC, // ARC
+    0x2500, 0x849F, // BOX DRAWINGS LIGHT HORIZONTAL
+    0x2501, 0x84AA, // BOX DRAWINGS HEAVY HORIZONTAL
+    0x2502, 0x84A0, // BOX DRAWINGS LIGHT VERTICAL
+    0x2503, 0x84AB, // BOX DRAWINGS HEAVY VERTICAL
+    0x250C, 0x84A1, // BOX DRAWINGS LIGHT DOWN AND RIGHT
+    0x250F, 0x84AC, // BOX DRAWINGS HEAVY DOWN AND RIGHT
+    0x2510, 0x84A2, // BOX DRAWINGS LIGHT DOWN AND LEFT
+    0x2513, 0x84AD, // BOX DRAWINGS HEAVY DOWN AND LEFT
+    0x2514, 0x84A4, // BOX DRAWINGS LIGHT UP AND RIGHT
+    0x2517, 0x84AF, // BOX DRAWINGS HEAVY UP AND RIGHT
+    0x2518, 0x84A3, // BOX DRAWINGS LIGHT UP AND LEFT
+    0x251B, 0x84AE, // BOX DRAWINGS HEAVY UP AND LEFT
+    0x251C, 0x84A5, // BOX DRAWINGS LIGHT VERTICAL AND RIGHT
+    0x251D, 0x84BA, // BOX DRAWINGS VERTICAL LIGHT AND RIGHT HEAVY
+    0x2520, 0x84B5, // BOX DRAWINGS VERTICAL HEAVY AND RIGHT LIGHT
+    0x2523, 0x84B0, // BOX DRAWINGS HEAVY VERTICAL AND RIGHT
+    0x2524, 0x84A7, // BOX DRAWINGS LIGHT VERTICAL AND LEFT
+    0x2525, 0x84BC, // BOX DRAWINGS VERTICAL LIGHT AND LEFT HEAVY
+    0x2528, 0x84B7, // BOX DRAWINGS VERTICAL HEAVY AND LEFT LIGHT
+    0x252B, 0x84B2, // BOX DRAWINGS HEAVY VERTICAL AND LEFT
+    0x252C, 0x84A6, // BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
+    0x252F, 0x84B6, // BOX DRAWINGS DOWN LIGHT AND HORIZONTAL HEAVY
+    0x2530, 0x84BB, // BOX DRAWINGS DOWN HEAVY AND HORIZONTAL LIGHT
+    0x2533, 0x84B1, // BOX DRAWINGS HEAVY DOWN AND HORIZONTAL
+    0x2534, 0x84A8, // BOX DRAWINGS LIGHT UP AND HORIZONTAL
+    0x2537, 0x84B8, // BOX DRAWINGS UP LIGHT AND HORIZONTAL HEAVY
+    0x2538, 0x84BD, // BOX DRAWINGS UP HEAVY AND HORIZONTAL LIGHT
+    0x253B, 0x84B3, // BOX DRAWINGS HEAVY UP AND HORIZONTAL
+    0x253C, 0x84A9, // BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
+    0x253F, 0x84B9, // BOX DRAWINGS VERTICAL LIGHT AND HORIZONTAL HEAVY
+    0x2542, 0x84BE, // BOX DRAWINGS VERTICAL HEAVY AND HORIZONTAL LIGHT
+    0x254B, 0x84B4, // BOX DRAWINGS HEAVY VERTICAL AND HORIZONTAL
+    0x25A0, 0x81A1, // BLACK SQUARE
+    0x25A1, 0x81A0, // WHITE SQUARE
+    0x25B2, 0x81A3, // BLACK UP-POINTING TRIANGLE
+    0x25B3, 0x81A2, // WHITE UP-POINTING TRIANGLE
+    0x25BC, 0x81A5, // BLACK DOWN-POINTING TRIANGLE
+    0x25BD, 0x81A4, // WHITE DOWN-POINTING TRIANGLE
+    0x25C6, 0x819F, // BLACK DIAMOND
+    0x25C7, 0x819E, // WHITE DIAMOND
+    0x25CB, 0x819B, // WHITE CIRCLE
+    0x25CE, 0x819D, // BULLSEYE
+    0x25CF, 0x819C, // BLACK CIRCLE
+    0x25EF, 0x81FC, // LARGE CIRCLE
+    0x2605, 0x819A, // BLACK STAR
+    0x2606, 0x8199, // WHITE STAR
+    0x2640, 0x818A, // FEMALE SIGN
+    0x2642, 0x8189, // MALE SIGN
+    0x266A, 0x81F4, // EIGHTH NOTE
+    0x266D, 0x81F3, // MUSIC FLAT SIGN
+    0x266F, 0x81F2, // MUSIC SHARP SIGN
+    0x3000, 0x8140, // IDEOGRAPHIC SPACE
+    0x3001, 0x8141, // IDEOGRAPHIC COMMA
+    0x3002, 0x8142, // IDEOGRAPHIC FULL STOP
+    0x3003, 0x8156, // DITTO MARK
+    0x3005, 0x8158, // IDEOGRAPHIC ITERATION MARK
+    0x3006, 0x8159, // IDEOGRAPHIC CLOSING MARK
+    0x3007, 0x815A, // IDEOGRAPHIC NUMBER ZERO
+    0x3008, 0x8171, // LEFT ANGLE BRACKET
+    0x3009, 0x8172, // RIGHT ANGLE BRACKET
+    0x300A, 0x8173, // LEFT DOUBLE ANGLE BRACKET
+    0x300B, 0x8174, // RIGHT DOUBLE ANGLE BRACKET
+    0x300C, 0x8175, // LEFT CORNER BRACKET
+    0x300D, 0x8176, // RIGHT CORNER BRACKET
+    0x300E, 0x8177, // LEFT WHITE CORNER BRACKET
+    0x300F, 0x8178, // RIGHT WHITE CORNER BRACKET
+    0x3010, 0x8179, // LEFT BLACK LENTICULAR BRACKET
+    0x3011, 0x817A, // RIGHT BLACK LENTICULAR BRACKET
+    0x3012, 0x81A7, // POSTAL MARK
+    0x3013, 0x81AC, // GETA MARK
+    0x3014, 0x816B, // LEFT TORTOISE SHELL BRACKET
+    0x3015, 0x816C, // RIGHT TORTOISE SHELL BRACKET
+    0x301C, 0x8160, // WAVE DASH
+    0x3041, 0x829F, // HIRAGANA LETTER SMALL A
+    0x3042, 0x82A0, // HIRAGANA LETTER A
+    0x3043, 0x82A1, // HIRAGANA LETTER SMALL I
+    0x3044, 0x82A2, // HIRAGANA LETTER I
+    0x3045, 0x82A3, // HIRAGANA LETTER SMALL U
+    0x3046, 0x82A4, // HIRAGANA LETTER U
+    0x3047, 0x82A5, // HIRAGANA LETTER SMALL E
+    0x3048, 0x82A6, // HIRAGANA LETTER E
+    0x3049, 0x82A7, // HIRAGANA LETTER SMALL O
+    0x304A, 0x82A8, // HIRAGANA LETTER O
+    0x304B, 0x82A9, // HIRAGANA LETTER KA
+    0x304C, 0x82AA, // HIRAGANA LETTER GA
+    0x304D, 0x82AB, // HIRAGANA LETTER KI
+    0x304E, 0x82AC, // HIRAGANA LETTER GI
+    0x304F, 0x82AD, // HIRAGANA LETTER KU
+    0x3050, 0x82AE, // HIRAGANA LETTER GU
+    0x3051, 0x82AF, // HIRAGANA LETTER KE
+    0x3052, 0x82B0, // HIRAGANA LETTER GE
+    0x3053, 0x82B1, // HIRAGANA LETTER KO
+    0x3054, 0x82B2, // HIRAGANA LETTER GO
+    0x3055, 0x82B3, // HIRAGANA LETTER SA
+    0x3056, 0x82B4, // HIRAGANA LETTER ZA
+    0x3057, 0x82B5, // HIRAGANA LETTER SI
+    0x3058, 0x82B6, // HIRAGANA LETTER ZI
+    0x3059, 0x82B7, // HIRAGANA LETTER SU
+    0x305A, 0x82B8, // HIRAGANA LETTER ZU
+    0x305B, 0x82B9, // HIRAGANA LETTER SE
+    0x305C, 0x82BA, // HIRAGANA LETTER ZE
+    0x305D, 0x82BB, // HIRAGANA LETTER SO
+    0x305E, 0x82BC, // HIRAGANA LETTER ZO
+    0x305F, 0x82BD, // HIRAGANA LETTER TA
+    0x3060, 0x82BE, // HIRAGANA LETTER DA
+    0x3061, 0x82BF, // HIRAGANA LETTER TI
+    0x3062, 0x82C0, // HIRAGANA LETTER DI
+    0x3063, 0x82C1, // HIRAGANA LETTER SMALL TU
+    0x3064, 0x82C2, // HIRAGANA LETTER TU
+    0x3065, 0x82C3, // HIRAGANA LETTER DU
+    0x3066, 0x82C4, // HIRAGANA LETTER TE
+    0x3067, 0x82C5, // HIRAGANA LETTER DE
+    0x3068, 0x82C6, // HIRAGANA LETTER TO
+    0x3069, 0x82C7, // HIRAGANA LETTER DO
+    0x306A, 0x82C8, // HIRAGANA LETTER NA
+    0x306B, 0x82C9, // HIRAGANA LETTER NI
+    0x306C, 0x82CA, // HIRAGANA LETTER NU
+    0x306D, 0x82CB, // HIRAGANA LETTER NE
+    0x306E, 0x82CC, // HIRAGANA LETTER NO
+    0x306F, 0x82CD, // HIRAGANA LETTER HA
+    0x3070, 0x82CE, // HIRAGANA LETTER BA
+    0x3071, 0x82CF, // HIRAGANA LETTER PA
+    0x3072, 0x82D0, // HIRAGANA LETTER HI
+    0x3073, 0x82D1, // HIRAGANA LETTER BI
+    0x3074, 0x82D2, // HIRAGANA LETTER PI
+    0x3075, 0x82D3, // HIRAGANA LETTER HU
+    0x3076, 0x82D4, // HIRAGANA LETTER BU
+    0x3077, 0x82D5, // HIRAGANA LETTER PU
+    0x3078, 0x82D6, // HIRAGANA LETTER HE
+    0x3079, 0x82D7, // HIRAGANA LETTER BE
+    0x307A, 0x82D8, // HIRAGANA LETTER PE
+    0x307B, 0x82D9, // HIRAGANA LETTER HO
+    0x307C, 0x82DA, // HIRAGANA LETTER BO
+    0x307D, 0x82DB, // HIRAGANA LETTER PO
+    0x307E, 0x82DC, // HIRAGANA LETTER MA
+    0x307F, 0x82DD, // HIRAGANA LETTER MI
+    0x3080, 0x82DE, // HIRAGANA LETTER MU
+    0x3081, 0x82DF, // HIRAGANA LETTER ME
+    0x3082, 0x82E0, // HIRAGANA LETTER MO
+    0x3083, 0x82E1, // HIRAGANA LETTER SMALL YA
+    0x3084, 0x82E2, // HIRAGANA LETTER YA
+    0x3085, 0x82E3, // HIRAGANA LETTER SMALL YU
+    0x3086, 0x82E4, // HIRAGANA LETTER YU
+    0x3087, 0x82E5, // HIRAGANA LETTER SMALL YO
+    0x3088, 0x82E6, // HIRAGANA LETTER YO
+    0x3089, 0x82E7, // HIRAGANA LETTER RA
+    0x308A, 0x82E8, // HIRAGANA LETTER RI
+    0x308B, 0x82E9, // HIRAGANA LETTER RU
+    0x308C, 0x82EA, // HIRAGANA LETTER RE
+    0x308D, 0x82EB, // HIRAGANA LETTER RO
+    0x308E, 0x82EC, // HIRAGANA LETTER SMALL WA
+    0x308F, 0x82ED, // HIRAGANA LETTER WA
+    0x3090, 0x82EE, // HIRAGANA LETTER WI
+    0x3091, 0x82EF, // HIRAGANA LETTER WE
+    0x3092, 0x82F0, // HIRAGANA LETTER WO
+    0x3093, 0x82F1, // HIRAGANA LETTER N
+    0x309B, 0x814A, // KATAKANA-HIRAGANA VOICED SOUND MARK
+    0x309C, 0x814B, // KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
+    0x309D, 0x8154, // HIRAGANA ITERATION MARK
+    0x309E, 0x8155, // HIRAGANA VOICED ITERATION MARK
+    0x30A1, 0x8340, // KATAKANA LETTER SMALL A
+    0x30A2, 0x8341, // KATAKANA LETTER A
+    0x30A3, 0x8342, // KATAKANA LETTER SMALL I
+    0x30A4, 0x8343, // KATAKANA LETTER I
+    0x30A5, 0x8344, // KATAKANA LETTER SMALL U
+    0x30A6, 0x8345, // KATAKANA LETTER U
+    0x30A7, 0x8346, // KATAKANA LETTER SMALL E
+    0x30A8, 0x8347, // KATAKANA LETTER E
+    0x30A9, 0x8348, // KATAKANA LETTER SMALL O
+    0x30AA, 0x8349, // KATAKANA LETTER O
+    0x30AB, 0x834A, // KATAKANA LETTER KA
+    0x30AC, 0x834B, // KATAKANA LETTER GA
+    0x30AD, 0x834C, // KATAKANA LETTER KI
+    0x30AE, 0x834D, // KATAKANA LETTER GI
+    0x30AF, 0x834E, // KATAKANA LETTER KU
+    0x30B0, 0x834F, // KATAKANA LETTER GU
+    0x30B1, 0x8350, // KATAKANA LETTER KE
+    0x30B2, 0x8351, // KATAKANA LETTER GE
+    0x30B3, 0x8352, // KATAKANA LETTER KO
+    0x30B4, 0x8353, // KATAKANA LETTER GO
+    0x30B5, 0x8354, // KATAKANA LETTER SA
+    0x30B6, 0x8355, // KATAKANA LETTER ZA
+    0x30B7, 0x8356, // KATAKANA LETTER SI
+    0x30B8, 0x8357, // KATAKANA LETTER ZI
+    0x30B9, 0x8358, // KATAKANA LETTER SU
+    0x30BA, 0x8359, // KATAKANA LETTER ZU
+    0x30BB, 0x835A, // KATAKANA LETTER SE
+    0x30BD, 0x835C, // KATAKANA LETTER SO
+    0x30BE, 0x835D, // KATAKANA LETTER ZO
+    0x30BF, 0x835E, // KATAKANA LETTER TA
+    0x30C0, 0x835F, // KATAKANA LETTER DA
+    0x30C1, 0x8360, // KATAKANA LETTER TI
+    0x30C2, 0x8361, // KATAKANA LETTER DI
+    0x30C3, 0x8362, // KATAKANA LETTER SMALL TU
+    0x30C4, 0x8363, // KATAKANA LETTER TU
+    0x30C5, 0x8364, // KATAKANA LETTER DU
+    0x30C6, 0x8365, // KATAKANA LETTER TE
+    0x30C7, 0x8366, // KATAKANA LETTER DE
+    0x30C8, 0x8367, // KATAKANA LETTER TO
+    0x30C9, 0x8368, // KATAKANA LETTER DO
+    0x30CA, 0x8369, // KATAKANA LETTER NA
+    0x30CB, 0x836A, // KATAKANA LETTER NI
+    0x30CC, 0x836B, // KATAKANA LETTER NU
+    0x30CD, 0x836C, // KATAKANA LETTER NE
+    0x30CE, 0x836D, // KATAKANA LETTER NO
+    0x30CF, 0x836E, // KATAKANA LETTER HA
+    0x30D0, 0x836F, // KATAKANA LETTER BA
+    0x30D1, 0x8370, // KATAKANA LETTER PA
+    0x30D2, 0x8371, // KATAKANA LETTER HI
+    0x30D3, 0x8372, // KATAKANA LETTER BI
+    0x30D4, 0x8373, // KATAKANA LETTER PI
+    0x30D5, 0x8374, // KATAKANA LETTER HU
+    0x30D6, 0x8375, // KATAKANA LETTER BU
+    0x30D7, 0x8376, // KATAKANA LETTER PU
+    0x30D8, 0x8377, // KATAKANA LETTER HE
+    0x30D9, 0x8378, // KATAKANA LETTER BE
+    0x30DA, 0x8379, // KATAKANA LETTER PE
+    0x30DB, 0x837A, // KATAKANA LETTER HO
+    0x30DC, 0x837B, // KATAKANA LETTER BO
+    0x30DD, 0x837C, // KATAKANA LETTER PO
+    0x30DE, 0x837D, // KATAKANA LETTER MA
+    0x30DF, 0x837E, // KATAKANA LETTER MI
+    0x30E0, 0x8380, // KATAKANA LETTER MU
+    0x30E1, 0x8381, // KATAKANA LETTER ME
+    0x30E2, 0x8382, // KATAKANA LETTER MO
+    0x30E3, 0x8383, // KATAKANA LETTER SMALL YA
+    0x30E4, 0x8384, // KATAKANA LETTER YA
+    0x30E5, 0x8385, // KATAKANA LETTER SMALL YU
+    0x30E6, 0x8386, // KATAKANA LETTER YU
+    0x30E7, 0x8387, // KATAKANA LETTER SMALL YO
+    0x30E8, 0x8388, // KATAKANA LETTER YO
+    0x30E9, 0x8389, // KATAKANA LETTER RA
+    0x30EA, 0x838A, // KATAKANA LETTER RI
+    0x30EB, 0x838B, // KATAKANA LETTER RU
+    0x30EC, 0x838C, // KATAKANA LETTER RE
+    0x30ED, 0x838D, // KATAKANA LETTER RO
+    0x30EE, 0x838E, // KATAKANA LETTER SMALL WA
+    0x30EF, 0x838F, // KATAKANA LETTER WA
+    0x30F0, 0x8390, // KATAKANA LETTER WI
+    0x30F1, 0x8391, // KATAKANA LETTER WE
+    0x30F2, 0x8392, // KATAKANA LETTER WO
+    0x30F3, 0x8393, // KATAKANA LETTER N
+    0x30F4, 0x8394, // KATAKANA LETTER VU
+    0x30F5, 0x8395, // KATAKANA LETTER SMALL KA
+    0x30F6, 0x8396, // KATAKANA LETTER SMALL KE
+    0x30FB, 0x8145, // KATAKANA MIDDLE DOT
+    0x30FD, 0x8152, // KATAKANA ITERATION MARK
+    0x30FE, 0x8153, // KATAKANA VOICED ITERATION MARK
+    0x4E00, 0x88EA, // <cjk>
+    0x4E01, 0x929A, // <cjk>
+    0x4E03, 0x8EB5, // <cjk>
+    0x4E07, 0x969C, // <cjk>
+    0x4E08, 0x8FE4, // <cjk>
+    0x4E09, 0x8E4F, // <cjk>
+    0x4E0A, 0x8FE3, // <cjk>
+    0x4E0B, 0x89BA, // <cjk>
+    0x4E0D, 0x9573, // <cjk>
+    0x4E0E, 0x975E, // <cjk>
+    0x4E10, 0x98A0, // <cjk>
+    0x4E11, 0x894E, // <cjk>
+    0x4E14, 0x8A8E, // <cjk>
+    0x4E15, 0x98A1, // <cjk>
+    0x4E16, 0x90A2, // <cjk>
+    0x4E17, 0x99C0, // <cjk>
+    0x4E18, 0x8B75, // <cjk>
+    0x4E19, 0x95B8, // <cjk>
+    0x4E1E, 0x8FE5, // <cjk>
+    0x4E21, 0x97BC, // <cjk>
+    0x4E26, 0x95C0, // <cjk>
+    0x4E2A, 0x98A2, // <cjk>
+    0x4E2D, 0x9286, // <cjk>
+    0x4E31, 0x98A3, // <cjk>
+    0x4E32, 0x8BF8, // <cjk>
+    0x4E36, 0x98A4, // <cjk>
+    0x4E38, 0x8ADB, // <cjk>
+    0x4E39, 0x924F, // <cjk>
+    0x4E3B, 0x8EE5, // <cjk>
+    0x4E3C, 0x98A5, // <cjk>
+    0x4E3F, 0x98A6, // <cjk>
+    0x4E42, 0x98A7, // <cjk>
+    0x4E43, 0x9454, // <cjk>
+    0x4E45, 0x8B76, // <cjk>
+    0x4E4B, 0x9456, // <cjk>
+    0x4E4D, 0x93E1, // <cjk>
+    0x4E4E, 0x8CC1, // <cjk>
+    0x4E4F, 0x9652, // <cjk>
+    0x4E55, 0xE568, // <cjk>
+    0x4E56, 0x98A8, // <cjk>
+    0x4E57, 0x8FE6, // <cjk>
+    0x4E58, 0x98A9, // <cjk>
+    0x4E59, 0x89B3, // <cjk>
+    0x4E5D, 0x8BE3, // <cjk>
+    0x4E5E, 0x8CEE, // <cjk>
+    0x4E5F, 0x96E7, // <cjk>
+    0x4E62, 0x9BA4, // <cjk>
+    0x4E71, 0x9790, // <cjk>
+    0x4E73, 0x93FB, // <cjk>
+    0x4E7E, 0x8AA3, // <cjk>
+    0x4E80, 0x8B54, // <cjk>
+    0x4E82, 0x98AA, // <cjk>
+    0x4E85, 0x98AB, // <cjk>
+    0x4E86, 0x97B9, // <cjk>
+    0x4E88, 0x975C, // <cjk>
+    0x4E89, 0x9188, // <cjk>
+    0x4E8A, 0x98AD, // <cjk>
+    0x4E8B, 0x8E96, // <cjk>
+    0x4E8C, 0x93F1, // <cjk>
+    0x4E8E, 0x98B0, // <cjk>
+    0x4E91, 0x895D, // <cjk>
+    0x4E92, 0x8CDD, // <cjk>
+    0x4E94, 0x8CDC, // <cjk>
+    0x4E95, 0x88E4, // <cjk>
+    0x4E98, 0x986A, // <cjk>
+    0x4E99, 0x9869, // <cjk>
+    0x4E9B, 0x8DB1, // <cjk>
+    0x4E9C, 0x889F, // <cjk>
+    0x4E9E, 0x98B1, // <cjk>
+    0x4E9F, 0x98B2, // <cjk>
+    0x4EA0, 0x98B3, // <cjk>
+    0x4EA1, 0x9653, // <cjk>
+    0x4EA2, 0x98B4, // <cjk>
+    0x4EA4, 0x8CF0, // <cjk>
+    0x4EA5, 0x88E5, // <cjk>
+    0x4EA6, 0x9692, // <cjk>
+    0x4EA8, 0x8B9C, // <cjk>
+    0x4EAB, 0x8B9D, // <cjk>
+    0x4EAC, 0x8B9E, // <cjk>
+    0x4EAD, 0x92E0, // <cjk>
+    0x4EAE, 0x97BA, // <cjk>
+    0x4EB0, 0x98B5, // <cjk>
+    0x4EB3, 0x98B6, // <cjk>
+    0x4EB6, 0x98B7, // <cjk>
+    0x4EBA, 0x906C, // <cjk>
+    0x4EC0, 0x8F59, // <cjk>
+    0x4EC1, 0x906D, // <cjk>
+    0x4EC2, 0x98BC, // <cjk>
+    0x4EC4, 0x98BA, // <cjk>
+    0x4EC6, 0x98BB, // <cjk>
+    0x4EC7, 0x8B77, // <cjk>
+    0x4ECA, 0x8DA1, // <cjk>
+    0x4ECB, 0x89EE, // <cjk>
+    0x4ECD, 0x98B9, // <cjk>
+    0x4ECE, 0x98B8, // <cjk>
+    0x4ECF, 0x95A7, // <cjk>
+    0x4ED4, 0x8E65, // <cjk>
+    0x4ED5, 0x8E64, // <cjk>
+    0x4ED6, 0x91BC, // <cjk>
+    0x4ED7, 0x98BD, // <cjk>
+    0x4ED8, 0x9574, // <cjk>
+    0x4ED9, 0x90E5, // <cjk>
+    0x4EDD, 0x8157, // <cjk>
+    0x4EDE, 0x98BE, // <cjk>
+    0x4EDF, 0x98C0, // <cjk>
+    0x4EE3, 0x91E3, // <cjk>
+    0x4EE4, 0x97DF, // <cjk>
+    0x4EE5, 0x88C8, // <cjk>
+    0x4EED, 0x98BF, // <cjk>
+    0x4EEE, 0x89BC, // <cjk>
+    0x4EF0, 0x8BC2, // <cjk>
+    0x4EF2, 0x9287, // <cjk>
+    0x4EF6, 0x8C8F, // <cjk>
+    0x4EF7, 0x98C1, // <cjk>
+    0x4EFB, 0x9443, // <cjk>
+    0x4F01, 0x8AE9, // <cjk>
+    0x4F09, 0x98C2, // <cjk>
+    0x4F0A, 0x88C9, // <cjk>
+    0x4F0D, 0x8CDE, // <cjk>
+    0x4F0E, 0x8AEA, // <cjk>
+    0x4F0F, 0x959A, // <cjk>
+    0x4F10, 0x94B0, // <cjk>
+    0x4F11, 0x8B78, // <cjk>
+    0x4F1A, 0x89EF, // <cjk>
+    0x4F1C, 0x98E5, // <cjk>
+    0x4F1D, 0x9360, // <cjk>
+    0x4F2F, 0x948C, // <cjk>
+    0x4F30, 0x98C4, // <cjk>
+    0x4F34, 0x94BA, // <cjk>
+    0x4F36, 0x97E0, // <cjk>
+    0x4F38, 0x904C, // <cjk>
+    0x4F3A, 0x8E66, // <cjk>
+    0x4F3C, 0x8E97, // <cjk>
+    0x4F3D, 0x89BE, // <cjk>
+    0x4F43, 0x92CF, // <cjk>
+    0x4F46, 0x9241, // <cjk>
+    0x4F47, 0x98C8, // <cjk>
+    0x4F4D, 0x88CA, // <cjk>
+    0x4F4E, 0x92E1, // <cjk>
+    0x4F4F, 0x8F5A, // <cjk>
+    0x4F50, 0x8DB2, // <cjk>
+    0x4F51, 0x9743, // <cjk>
+    0x4F53, 0x91CC, // <cjk>
+    0x4F55, 0x89BD, // <cjk>
+    0x4F57, 0x98C7, // <cjk>
+    0x4F59, 0x975D, // <cjk>
+    0x4F5A, 0x98C3, // <cjk>
+    0x4F5B, 0x98C5, // <cjk>
+    0x4F5C, 0x8DEC, // <cjk>
+    0x4F5D, 0x98C6, // <cjk>
+    0x4F5E, 0x9B43, // <cjk>
+    0x4F69, 0x98CE, // <cjk>
+    0x4F6F, 0x98D1, // <cjk>
+    0x4F70, 0x98CF, // <cjk>
+    0x4F73, 0x89C0, // <cjk>
+    0x4F75, 0x95B9, // <cjk>
+    0x4F76, 0x98C9, // <cjk>
+    0x4F7B, 0x98CD, // <cjk>
+    0x4F7C, 0x8CF1, // <cjk>
+    0x4F7F, 0x8E67, // <cjk>
+    0x4F83, 0x8AA4, // <cjk>
+    0x4F86, 0x98D2, // <cjk>
+    0x4F88, 0x98CA, // <cjk>
+    0x4F8B, 0x97E1, // <cjk>
+    0x4F8D, 0x8E98, // <cjk>
+    0x4F8F, 0x98CB, // <cjk>
+    0x4F91, 0x98D0, // <cjk>
+    0x4F96, 0x98D3, // <cjk>
+    0x4F98, 0x98CC, // <cjk>
+    0x4F9B, 0x8B9F, // <cjk>
+    0x4F9D, 0x88CB, // <cjk>
+    0x4FA0, 0x8BA0, // <cjk>
+    0x4FA1, 0x89BF, // <cjk>
+    0x4FAB, 0x9B44, // <cjk>
+    0x4FAD, 0x9699, // <cjk>
+    0x4FAE, 0x958E, // <cjk>
+    0x4FAF, 0x8CF2, // <cjk>
+    0x4FB5, 0x904E, // <cjk>
+    0x4FB6, 0x97B5, // <cjk>
+    0x4FBF, 0x95D6, // <cjk>
+    0x4FC2, 0x8C57, // <cjk>
+    0x4FC3, 0x91A3, // <cjk>
+    0x4FC4, 0x89E2, // <cjk>
+    0x4FCA, 0x8F72, // <cjk>
+    0x4FCE, 0x98D7, // <cjk>
+    0x4FD0, 0x98DC, // <cjk>
+    0x4FD1, 0x98DA, // <cjk>
+    0x4FD4, 0x98D5, // <cjk>
+    0x4FD7, 0x91AD, // <cjk>
+    0x4FD8, 0x98D8, // <cjk>
+    0x4FDA, 0x98DB, // <cjk>
+    0x4FDB, 0x98D9, // <cjk>
+    0x4FDD, 0x95DB, // <cjk>
+    0x4FDF, 0x98D6, // <cjk>
+    0x4FE1, 0x904D, // <cjk>
+    0x4FE3, 0x9693, // <cjk>
+    0x4FE4, 0x98DD, // <cjk>
+    0x4FE5, 0x98DE, // <cjk>
+    0x4FEE, 0x8F43, // <cjk>
+    0x4FEF, 0x98EB, // <cjk>
+    0x4FF3, 0x946F, // <cjk>
+    0x4FF5, 0x9555, // <cjk>
+    0x4FF6, 0x98E6, // <cjk>
+    0x4FF8, 0x95EE, // <cjk>
+    0x4FFA, 0x89B4, // <cjk>
+    0x4FFE, 0x98EA, // <cjk>
+    0x5005, 0x98E4, // <cjk>
+    0x5006, 0x98ED, // <cjk>
+    0x5009, 0x9171, // <cjk>
+    0x500B, 0x8CC2, // <cjk>
+    0x500D, 0x947B, // <cjk>
+    0x500F, 0xE0C5, // <cjk>
+    0x5011, 0x98EC, // <cjk>
+    0x5012, 0x937C, // <cjk>
+    0x5014, 0x98E1, // <cjk>
+    0x5016, 0x8CF4, // <cjk>
+    0x5019, 0x8CF3, // <cjk>
+    0x501A, 0x98DF, // <cjk>
+    0x501F, 0x8ED8, // <cjk>
+    0x5021, 0x98E7, // <cjk>
+    0x5023, 0x95ED, // <cjk>
+    0x5024, 0x926C, // <cjk>
+    0x5025, 0x98E3, // <cjk>
+    0x5026, 0x8C91, // <cjk>
+    0x5028, 0x98E0, // <cjk>
+    0x5029, 0x98E8, // <cjk>
+    0x502A, 0x98E2, // <cjk>
+    0x502B, 0x97CF, // <cjk>
+    0x502C, 0x98E9, // <cjk>
+    0x502D, 0x9860, // <cjk>
+    0x5036, 0x8BE4, // <cjk>
+    0x5039, 0x8C90, // <cjk>
+    0x5043, 0x98EE, // <cjk>
+    0x5047, 0x98EF, // <cjk>
+    0x5048, 0x98F3, // <cjk>
+    0x5049, 0x88CC, // <cjk>
+    0x504F, 0x95CE, // <cjk>
+    0x5050, 0x98F2, // <cjk>
+    0x5055, 0x98F1, // <cjk>
+    0x5056, 0x98F5, // <cjk>
+    0x505A, 0x98F4, // <cjk>
+    0x505C, 0x92E2, // <cjk>
+    0x5065, 0x8C92, // <cjk>
+    0x506C, 0x98F6, // <cjk>
+    0x5072, 0x8EC3, // <cjk>
+    0x5074, 0x91A4, // <cjk>
+    0x5075, 0x92E3, // <cjk>
+    0x5076, 0x8BF4, // <cjk>
+    0x5078, 0x98F7, // <cjk>
+    0x507D, 0x8B55, // <cjk>
+    0x5080, 0x98F8, // <cjk>
+    0x5085, 0x98FA, // <cjk>
+    0x508D, 0x9654, // <cjk>
+    0x5091, 0x8C86, // <cjk>
+    0x5098, 0x8E50, // <cjk>
+    0x5099, 0x94F5, // <cjk>
+    0x509A, 0x98F9, // <cjk>
+    0x50AC, 0x8DC3, // <cjk>
+    0x50AD, 0x9762, // <cjk>
+    0x50B2, 0x98FC, // <cjk>
+    0x50B3, 0x9942, // <cjk>
+    0x50B4, 0x98FB, // <cjk>
+    0x50B5, 0x8DC2, // <cjk>
+    0x50B7, 0x8F9D, // <cjk>
+    0x50BE, 0x8C58, // <cjk>
+    0x50C2, 0x9943, // <cjk>
+    0x50C5, 0x8BCD, // <cjk>
+    0x50C9, 0x9940, // <cjk>
+    0x50CA, 0x9941, // <cjk>
+    0x50CD, 0x93AD, // <cjk>
+    0x50CF, 0x919C, // <cjk>
+    0x50D1, 0x8BA1, // <cjk>
+    0x50D5, 0x966C, // <cjk>
+    0x50D6, 0x9944, // <cjk>
+    0x50DA, 0x97BB, // <cjk>
+    0x50DE, 0x9945, // <cjk>
+    0x50E3, 0x9948, // <cjk>
+    0x50E5, 0x9946, // <cjk>
+    0x50E7, 0x916D, // <cjk>
+    0x50ED, 0x9947, // <cjk>
+    0x50EE, 0x9949, // <cjk>
+    0x50F5, 0x994B, // <cjk>
+    0x50F9, 0x994A, // <cjk>
+    0x50FB, 0x95C6, // <cjk>
+    0x5100, 0x8B56, // <cjk>
+    0x5101, 0x994D, // <cjk>
+    0x5102, 0x994E, // <cjk>
+    0x5104, 0x89AD, // <cjk>
+    0x5109, 0x994C, // <cjk>
+    0x5112, 0x8EF2, // <cjk>
+    0x5114, 0x9951, // <cjk>
+    0x5115, 0x9950, // <cjk>
+    0x5116, 0x994F, // <cjk>
+    0x5118, 0x98D4, // <cjk>
+    0x511A, 0x9952, // <cjk>
+    0x511F, 0x8F9E, // <cjk>
+    0x5121, 0x9953, // <cjk>
+    0x512A, 0x9744, // <cjk>
+    0x5132, 0x96D7, // <cjk>
+    0x5137, 0x9955, // <cjk>
+    0x513A, 0x9954, // <cjk>
+    0x513B, 0x9957, // <cjk>
+    0x513C, 0x9956, // <cjk>
+    0x513F, 0x9958, // <cjk>
+    0x5140, 0x9959, // <cjk>
+    0x5141, 0x88F2, // <cjk>
+    0x5143, 0x8CB3, // <cjk>
+    0x5144, 0x8C5A, // <cjk>
+    0x5146, 0x929B, // <cjk>
+    0x5147, 0x8BA2, // <cjk>
+    0x5148, 0x90E6, // <cjk>
+    0x5149, 0x8CF5, // <cjk>
+    0x514B, 0x8D8E, // <cjk>
+    0x514D, 0x96C6, // <cjk>
+    0x514E, 0x9365, // <cjk>
+    0x5150, 0x8E99, // <cjk>
+    0x5152, 0x995A, // <cjk>
+    0x5154, 0x995C, // <cjk>
+    0x515A, 0x937D, // <cjk>
+    0x515C, 0x8A95, // <cjk>
+    0x5162, 0x995D, // <cjk>
+    0x5165, 0x93FC, // <cjk>
+    0x5168, 0x9153, // <cjk>
+    0x5169, 0x995F, // <cjk>
+    0x516A, 0x9960, // <cjk>
+    0x516B, 0x94AA, // <cjk>
+    0x516C, 0x8CF6, // <cjk>
+    0x516D, 0x985A, // <cjk>
+    0x516E, 0x9961, // <cjk>
+    0x5171, 0x8BA4, // <cjk>
+    0x5175, 0x95BA, // <cjk>
+    0x5176, 0x91B4, // <cjk>
+    0x5177, 0x8BEF, // <cjk>
+    0x5178, 0x9354, // <cjk>
+    0x517C, 0x8C93, // <cjk>
+    0x5180, 0x9962, // <cjk>
+    0x5182, 0x9963, // <cjk>
+    0x5185, 0x93E0, // <cjk>
+    0x5186, 0x897E, // <cjk>
+    0x5189, 0x9966, // <cjk>
+    0x518A, 0x8DFB, // <cjk>
+    0x518C, 0x9965, // <cjk>
+    0x518D, 0x8DC4, // <cjk>
+    0x518F, 0x9967, // <cjk>
+    0x5190, 0xE3EC, // <cjk>
+    0x5191, 0x9968, // <cjk>
+    0x5192, 0x9660, // <cjk>
+    0x5193, 0x9969, // <cjk>
+    0x5195, 0x996A, // <cjk>
+    0x5196, 0x996B, // <cjk>
+    0x5197, 0x8FE7, // <cjk>
+    0x5199, 0x8ECA, // <cjk>
+    0x51A0, 0x8AA5, // <cjk>
+    0x51A2, 0x996E, // <cjk>
+    0x51A4, 0x996C, // <cjk>
+    0x51A5, 0x96BB, // <cjk>
+    0x51A6, 0x996D, // <cjk>
+    0x51A8, 0x9579, // <cjk>
+    0x51A9, 0x996F, // <cjk>
+    0x51AA, 0x9970, // <cjk>
+    0x51AB, 0x9971, // <cjk>
+    0x51AC, 0x937E, // <cjk>
+    0x51B0, 0x9975, // <cjk>
+    0x51B1, 0x9973, // <cjk>
+    0x51B2, 0x9974, // <cjk>
+    0x51B3, 0x9972, // <cjk>
+    0x51B4, 0x8DE1, // <cjk>
+    0x51B5, 0x9976, // <cjk>
+    0x51B6, 0x96E8, // <cjk>
+    0x51B7, 0x97E2, // <cjk>
+    0x51BD, 0x9977, // <cjk>
+    0x51C4, 0x90A6, // <cjk>
+    0x51C5, 0x9978, // <cjk>
+    0x51C6, 0x8F79, // <cjk>
+    0x51C9, 0x9979, // <cjk>
+    0x51CB, 0x929C, // <cjk>
+    0x51CC, 0x97BD, // <cjk>
+    0x51CD, 0x9380, // <cjk>
+    0x51D6, 0x99C3, // <cjk>
+    0x51DB, 0x997A, // <cjk>
+    0x51DC, 0xEAA3, // <cjk>
+    0x51DD, 0x8BC3, // <cjk>
+    0x51E0, 0x997B, // <cjk>
+    0x51E1, 0x967D, // <cjk>
+    0x51E6, 0x8F88, // <cjk>
+    0x51E7, 0x91FA, // <cjk>
+    0x51E9, 0x997D, // <cjk>
+    0x51EA, 0x93E2, // <cjk>
+    0x51ED, 0x997E, // <cjk>
+    0x51F0, 0x9980, // <cjk>
+    0x51F1, 0x8A4D, // <cjk>
+    0x51F5, 0x9981, // <cjk>
+    0x51F6, 0x8BA5, // <cjk>
+    0x51F8, 0x93CA, // <cjk>
+    0x51F9, 0x899A, // <cjk>
+    0x51FA, 0x8F6F, // <cjk>
+    0x51FD, 0x949F, // <cjk>
+    0x51FE, 0x9982, // <cjk>
+    0x5200, 0x9381, // <cjk>
+    0x5203, 0x906E, // <cjk>
+    0x5204, 0x9983, // <cjk>
+    0x5206, 0x95AA, // <cjk>
+    0x5207, 0x90D8, // <cjk>
+    0x5208, 0x8AA0, // <cjk>
+    0x520A, 0x8AA7, // <cjk>
+    0x520B, 0x9984, // <cjk>
+    0x520E, 0x9986, // <cjk>
+    0x5211, 0x8C59, // <cjk>
+    0x5214, 0x9985, // <cjk>
+    0x5217, 0x97F1, // <cjk>
+    0x521D, 0x8F89, // <cjk>
+    0x5224, 0x94BB, // <cjk>
+    0x5225, 0x95CA, // <cjk>
+    0x5227, 0x9987, // <cjk>
+    0x5229, 0x9798, // <cjk>
+    0x522A, 0x9988, // <cjk>
+    0x522E, 0x9989, // <cjk>
+    0x5230, 0x939E, // <cjk>
+    0x5233, 0x998A, // <cjk>
+    0x5236, 0x90A7, // <cjk>
+    0x5237, 0x8DFC, // <cjk>
+    0x5238, 0x8C94, // <cjk>
+    0x5239, 0x998B, // <cjk>
+    0x523A, 0x8E68, // <cjk>
+    0x523B, 0x8D8F, // <cjk>
+    0x5243, 0x92E4, // <cjk>
+    0x5244, 0x998D, // <cjk>
+    0x5247, 0x91A5, // <cjk>
+    0x524A, 0x8DED, // <cjk>
+    0x524B, 0x998E, // <cjk>
+    0x524C, 0x998F, // <cjk>
+    0x524D, 0x914F, // <cjk>
+    0x524F, 0x998C, // <cjk>
+    0x5254, 0x9991, // <cjk>
+    0x5256, 0x9655, // <cjk>
+    0x525B, 0x8D84, // <cjk>
+    0x525E, 0x9990, // <cjk>
+    0x5263, 0x8C95, // <cjk>
+    0x5264, 0x8DDC, // <cjk>
+    0x5265, 0x948D, // <cjk>
+    0x5269, 0x9994, // <cjk>
+    0x526A, 0x9992, // <cjk>
+    0x526F, 0x959B, // <cjk>
+    0x5270, 0x8FE8, // <cjk>
+    0x5271, 0x999B, // <cjk>
+    0x5272, 0x8A84, // <cjk>
+    0x5273, 0x9995, // <cjk>
+    0x5274, 0x9993, // <cjk>
+    0x5275, 0x916E, // <cjk>
+    0x527D, 0x9997, // <cjk>
+    0x527F, 0x9996, // <cjk>
+    0x5283, 0x8A63, // <cjk>
+    0x5287, 0x8C80, // <cjk>
+    0x5288, 0x999C, // <cjk>
+    0x5289, 0x97AB, // <cjk>
+    0x528D, 0x9998, // <cjk>
+    0x5291, 0x999D, // <cjk>
+    0x5292, 0x999A, // <cjk>
+    0x5294, 0x9999, // <cjk>
+    0x529B, 0x97CD, // <cjk>
+    0x529F, 0x8CF7, // <cjk>
+    0x52A0, 0x89C1, // <cjk>
+    0x52A3, 0x97F2, // <cjk>
+    0x52A9, 0x8F95, // <cjk>
+    0x52AA, 0x9377, // <cjk>
+    0x52AB, 0x8D85, // <cjk>
+    0x52AC, 0x99A0, // <cjk>
+    0x52AD, 0x99A1, // <cjk>
+    0x52B1, 0x97E3, // <cjk>
+    0x52B4, 0x984A, // <cjk>
+    0x52B5, 0x99A3, // <cjk>
+    0x52B9, 0x8CF8, // <cjk>
+    0x52BC, 0x99A2, // <cjk>
+    0x52BE, 0x8A4E, // <cjk>
+    0x52C1, 0x99A4, // <cjk>
+    0x52C3, 0x9675, // <cjk>
+    0x52C5, 0x92BA, // <cjk>
+    0x52C7, 0x9745, // <cjk>
+    0x52C9, 0x95D7, // <cjk>
+    0x52CD, 0x99A5, // <cjk>
+    0x52D2, 0xE8D3, // <cjk>
+    0x52D5, 0x93AE, // <cjk>
+    0x52D7, 0x99A6, // <cjk>
+    0x52D8, 0x8AA8, // <cjk>
+    0x52D9, 0x96B1, // <cjk>
+    0x52DD, 0x8F9F, // <cjk>
+    0x52DE, 0x99A7, // <cjk>
+    0x52DF, 0x95E5, // <cjk>
+    0x52E0, 0x99AB, // <cjk>
+    0x52E2, 0x90A8, // <cjk>
+    0x52E3, 0x99A8, // <cjk>
+    0x52E4, 0x8BCE, // <cjk>
+    0x52E6, 0x99A9, // <cjk>
+    0x52E7, 0x8AA9, // <cjk>
+    0x52F2, 0x8C4D, // <cjk>
+    0x52F3, 0x99AC, // <cjk>
+    0x52F5, 0x99AD, // <cjk>
+    0x52F8, 0x99AE, // <cjk>
+    0x52F9, 0x99AF, // <cjk>
+    0x52FA, 0x8ED9, // <cjk>
+    0x52FE, 0x8CF9, // <cjk>
+    0x52FF, 0x96DC, // <cjk>
+    0x5301, 0x96E6, // <cjk>
+    0x5302, 0x93F5, // <cjk>
+    0x5305, 0x95EF, // <cjk>
+    0x5306, 0x99B0, // <cjk>
+    0x5308, 0x99B1, // <cjk>
+    0x530D, 0x99B3, // <cjk>
+    0x530F, 0x99B5, // <cjk>
+    0x5310, 0x99B4, // <cjk>
+    0x5315, 0x99B6, // <cjk>
+    0x5316, 0x89BB, // <cjk>
+    0x5317, 0x966B, // <cjk>
+    0x5319, 0x8DFA, // <cjk>
+    0x531A, 0x99B7, // <cjk>
+    0x531D, 0x9178, // <cjk>
+    0x5320, 0x8FA0, // <cjk>
+    0x5321, 0x8BA7, // <cjk>
+    0x5323, 0x99B8, // <cjk>
+    0x532A, 0x94D9, // <cjk>
+    0x532F, 0x99B9, // <cjk>
+    0x5331, 0x99BA, // <cjk>
+    0x5333, 0x99BB, // <cjk>
+    0x5338, 0x99BC, // <cjk>
+    0x5339, 0x9543, // <cjk>
+    0x533A, 0x8BE6, // <cjk>
+    0x533B, 0x88E3, // <cjk>
+    0x533F, 0x93BD, // <cjk>
+    0x5340, 0x99BD, // <cjk>
+    0x5341, 0x8F5C, // <cjk>
+    0x5343, 0x90E7, // <cjk>
+    0x5345, 0x99BF, // <cjk>
+    0x5346, 0x99BE, // <cjk>
+    0x5347, 0x8FA1, // <cjk>
+    0x5348, 0x8CDF, // <cjk>
+    0x5349, 0x99C1, // <cjk>
+    0x534A, 0x94BC, // <cjk>
+    0x534D, 0x99C2, // <cjk>
+    0x5351, 0x94DA, // <cjk>
+    0x5352, 0x91B2, // <cjk>
+    0x5353, 0x91EC, // <cjk>
+    0x5354, 0x8BA6, // <cjk>
+    0x5357, 0x93EC, // <cjk>
+    0x5358, 0x9250, // <cjk>
+    0x535A, 0x948E, // <cjk>
+    0x535C, 0x966D, // <cjk>
+    0x535E, 0x99C4, // <cjk>
+    0x5360, 0x90E8, // <cjk>
+    0x5366, 0x8C54, // <cjk>
+    0x5369, 0x99C5, // <cjk>
+    0x536E, 0x99C6, // <cjk>
+    0x536F, 0x894B, // <cjk>
+    0x5370, 0x88F3, // <cjk>
+    0x5371, 0x8AEB, // <cjk>
+    0x5373, 0x91A6, // <cjk>
+    0x5374, 0x8B70, // <cjk>
+    0x5375, 0x9791, // <cjk>
+    0x5377, 0x99C9, // <cjk>
+    0x5378, 0x89B5, // <cjk>
+    0x537B, 0x99C8, // <cjk>
+    0x537F, 0x8BA8, // <cjk>
+    0x5382, 0x99CA, // <cjk>
+    0x5384, 0x96EF, // <cjk>
+    0x5396, 0x99CB, // <cjk>
+    0x5398, 0x97D0, // <cjk>
+    0x539A, 0x8CFA, // <cjk>
+    0x539F, 0x8CB4, // <cjk>
+    0x53A0, 0x99CC, // <cjk>
+    0x53A5, 0x99CE, // <cjk>
+    0x53A6, 0x99CD, // <cjk>
+    0x53A8, 0x907E, // <cjk>
+    0x53A9, 0x8958, // <cjk>
+    0x53AD, 0x897D, // <cjk>
+    0x53AE, 0x99CF, // <cjk>
+    0x53B0, 0x99D0, // <cjk>
+    0x53B3, 0x8CB5, // <cjk>
+    0x53B6, 0x99D1, // <cjk>
+    0x53BB, 0x8B8E, // <cjk>
+    0x53C2, 0x8E51, // <cjk>
+    0x53C3, 0x99D2, // <cjk>
+    0x53C8, 0x9694, // <cjk>
+    0x53C9, 0x8DB3, // <cjk>
+    0x53CA, 0x8B79, // <cjk>
+    0x53CB, 0x9746, // <cjk>
+    0x53CC, 0x916F, // <cjk>
+    0x53CD, 0x94BD, // <cjk>
+    0x53CE, 0x8EFB, // <cjk>
+    0x53D4, 0x8F66, // <cjk>
+    0x53D6, 0x8EE6, // <cjk>
+    0x53D7, 0x8EF3, // <cjk>
+    0x53D9, 0x8F96, // <cjk>
+    0x53DB, 0x94BE, // <cjk>
+    0x53DF, 0x99D5, // <cjk>
+    0x53E1, 0x8962, // <cjk>
+    0x53E2, 0x9170, // <cjk>
+    0x53E3, 0x8CFB, // <cjk>
+    0x53E4, 0x8CC3, // <cjk>
+    0x53E5, 0x8BE5, // <cjk>
+    0x53E8, 0x99D9, // <cjk>
+    0x53E9, 0x9240, // <cjk>
+    0x53EA, 0x91FC, // <cjk>
+    0x53EB, 0x8BA9, // <cjk>
+    0x53EC, 0x8FA2, // <cjk>
+    0x53ED, 0x99DA, // <cjk>
+    0x53EE, 0x99D8, // <cjk>
+    0x53EF, 0x89C2, // <cjk>
+    0x53F0, 0x91E4, // <cjk>
+    0x53F1, 0x8EB6, // <cjk>
+    0x53F2, 0x8E6A, // <cjk>
+    0x53F3, 0x8945, // <cjk>
+    0x53F6, 0x8A90, // <cjk>
+    0x53F7, 0x8D86, // <cjk>
+    0x53F8, 0x8E69, // <cjk>
+    0x53FA, 0x99DB, // <cjk>
+    0x5401, 0x99DC, // <cjk>
+    0x5403, 0x8B68, // <cjk>
+    0x5404, 0x8A65, // <cjk>
+    0x5408, 0x8D87, // <cjk>
+    0x5409, 0x8B67, // <cjk>
+    0x540A, 0x92DD, // <cjk>
+    0x540B, 0x8944, // <cjk>
+    0x540C, 0x93AF, // <cjk>
+    0x540D, 0x96BC, // <cjk>
+    0x540E, 0x8D40, // <cjk>
+    0x540F, 0x9799, // <cjk>
+    0x5410, 0x9366, // <cjk>
+    0x5411, 0x8CFC, // <cjk>
+    0x541B, 0x8C4E, // <cjk>
+    0x541D, 0x99E5, // <cjk>
+    0x541F, 0x8BE1, // <cjk>
+    0x5420, 0x9669, // <cjk>
+    0x5426, 0x94DB, // <cjk>
+    0x5429, 0x99E4, // <cjk>
+    0x542B, 0x8ADC, // <cjk>
+    0x542C, 0x99DF, // <cjk>
+    0x542D, 0x99E0, // <cjk>
+    0x542E, 0x99E2, // <cjk>
+    0x5436, 0x99E3, // <cjk>
+    0x5438, 0x8B7A, // <cjk>
+    0x5439, 0x9081, // <cjk>
+    0x543B, 0x95AB, // <cjk>
+    0x543C, 0x99E1, // <cjk>
+    0x543D, 0x99DD, // <cjk>
+    0x543E, 0x8CE1, // <cjk>
+    0x5440, 0x99DE, // <cjk>
+    0x5442, 0x9843, // <cjk>
+    0x5446, 0x95F0, // <cjk>
+    0x5448, 0x92E6, // <cjk>
+    0x5449, 0x8CE0, // <cjk>
+    0x544A, 0x8D90, // <cjk>
+    0x544E, 0x99E6, // <cjk>
+    0x5451, 0x93DB, // <cjk>
+    0x545F, 0x99EA, // <cjk>
+    0x5468, 0x8EFC, // <cjk>
+    0x546A, 0x8EF4, // <cjk>
+    0x5470, 0x99ED, // <cjk>
+    0x5471, 0x99EB, // <cjk>
+    0x5473, 0x96A1, // <cjk>
+    0x5475, 0x99E8, // <cjk>
+    0x5476, 0x99F1, // <cjk>
+    0x5477, 0x99EC, // <cjk>
+    0x547B, 0x99EF, // <cjk>
+    0x547C, 0x8CC4, // <cjk>
+    0x547D, 0x96BD, // <cjk>
+    0x5480, 0x99F0, // <cjk>
+    0x5484, 0x99F2, // <cjk>
+    0x5486, 0x99F4, // <cjk>
+    0x548B, 0x8DEE, // <cjk>
+    0x548C, 0x9861, // <cjk>
+    0x548E, 0x99E9, // <cjk>
+    0x548F, 0x99E7, // <cjk>
+    0x5490, 0x99F3, // <cjk>
+    0x5492, 0x99EE, // <cjk>
+    0x54A2, 0x99F6, // <cjk>
+    0x54A4, 0x9A42, // <cjk>
+    0x54A5, 0x99F8, // <cjk>
+    0x54A8, 0x99FC, // <cjk>
+    0x54AB, 0x9A40, // <cjk>
+    0x54AC, 0x99F9, // <cjk>
+    0x54AF, 0x9A5D, // <cjk>
+    0x54B2, 0x8DE7, // <cjk>
+    0x54B3, 0x8A50, // <cjk>
+    0x54B8, 0x99F7, // <cjk>
+    0x54BC, 0x9A44, // <cjk>
+    0x54BD, 0x88F4, // <cjk>
+    0x54BE, 0x9A43, // <cjk>
+    0x54C0, 0x88A3, // <cjk>
+    0x54C1, 0x9569, // <cjk>
+    0x54C2, 0x9A41, // <cjk>
+    0x54C4, 0x99FA, // <cjk>
+    0x54C7, 0x99F5, // <cjk>
+    0x54C8, 0x99FB, // <cjk>
+    0x54C9, 0x8DC6, // <cjk>
+    0x54D8, 0x9A45, // <cjk>
+    0x54E1, 0x88F5, // <cjk>
+    0x54E2, 0x9A4E, // <cjk>
+    0x54E5, 0x9A46, // <cjk>
+    0x54E6, 0x9A47, // <cjk>
+    0x54E8, 0x8FA3, // <cjk>
+    0x54E9, 0x9689, // <cjk>
+    0x54ED, 0x9A4C, // <cjk>
+    0x54EE, 0x9A4B, // <cjk>
+    0x54F2, 0x934E, // <cjk>
+    0x54FA, 0x9A4D, // <cjk>
+    0x54FD, 0x9A4A, // <cjk>
+    0x5504, 0x8953, // <cjk>
+    0x5506, 0x8DB4, // <cjk>
+    0x5507, 0x904F, // <cjk>
+    0x550F, 0x9A48, // <cjk>
+    0x5510, 0x9382, // <cjk>
+    0x5514, 0x9A49, // <cjk>
+    0x5516, 0x88A0, // <cjk>
+    0x552E, 0x9A53, // <cjk>
+    0x552F, 0x9742, // <cjk>
+    0x5531, 0x8FA5, // <cjk>
+    0x5533, 0x9A59, // <cjk>
+    0x5538, 0x9A58, // <cjk>
+    0x5539, 0x9A4F, // <cjk>
+    0x553E, 0x91C1, // <cjk>
+    0x5540, 0x9A50, // <cjk>
+    0x5544, 0x91ED, // <cjk>
+    0x5545, 0x9A55, // <cjk>
+    0x5546, 0x8FA4, // <cjk>
+    0x554C, 0x9A52, // <cjk>
+    0x554F, 0x96E2, // <cjk>
+    0x5556, 0x9A56, // <cjk>
+    0x5557, 0x9A57, // <cjk>
+    0x555C, 0x9A54, // <cjk>
+    0x555D, 0x9A5A, // <cjk>
+    0x5563, 0x9A51, // <cjk>
+    0x557B, 0x9A60, // <cjk>
+    0x557C, 0x9A65, // <cjk>
+    0x557E, 0x9A61, // <cjk>
+    0x5580, 0x9A5C, // <cjk>
+    0x5583, 0x9A66, // <cjk>
+    0x5584, 0x9150, // <cjk>
+    0x5587, 0x9A68, // <cjk>
+    0x5589, 0x8D41, // <cjk>
+    0x558A, 0x9A5E, // <cjk>
+    0x558B, 0x929D, // <cjk>
+    0x5598, 0x9A62, // <cjk>
+    0x559A, 0x8AAB, // <cjk>
+    0x559C, 0x8AEC, // <cjk>
+    0x559D, 0x8A85, // <cjk>
+    0x559E, 0x9A63, // <cjk>
+    0x559F, 0x9A5F, // <cjk>
+    0x55A7, 0x8C96, // <cjk>
+    0x55A8, 0x9A69, // <cjk>
+    0x55A9, 0x9A67, // <cjk>
+    0x55AA, 0x9172, // <cjk>
+    0x55AB, 0x8B69, // <cjk>
+    0x55AC, 0x8BAA, // <cjk>
+    0x55AE, 0x9A64, // <cjk>
+    0x55B0, 0x8BF2, // <cjk>
+    0x55B6, 0x8963, // <cjk>
+    0x55C4, 0x9A6D, // <cjk>
+    0x55C5, 0x9A6B, // <cjk>
+    0x55C7, 0x9AA5, // <cjk>
+    0x55D4, 0x9A70, // <cjk>
+    0x55DA, 0x9A6A, // <cjk>
+    0x55DC, 0x9A6E, // <cjk>
+    0x55DF, 0x9A6C, // <cjk>
+    0x55E3, 0x8E6B, // <cjk>
+    0x55E4, 0x9A6F, // <cjk>
+    0x55F7, 0x9A72, // <cjk>
+    0x55F9, 0x9A77, // <cjk>
+    0x55FD, 0x9A75, // <cjk>
+    0x55FE, 0x9A74, // <cjk>
+    0x5606, 0x9251, // <cjk>
+    0x5609, 0x89C3, // <cjk>
+    0x5614, 0x9A71, // <cjk>
+    0x5616, 0x9A73, // <cjk>
+    0x5617, 0x8FA6, // <cjk>
+    0x5618, 0x8952, // <cjk>
+    0x561B, 0x9A76, // <cjk>
+    0x5629, 0x89DC, // <cjk>
+    0x562F, 0x9A82, // <cjk>
+    0x5631, 0x8FFA, // <cjk>
+    0x5632, 0x9A7D, // <cjk>
+    0x5634, 0x9A7B, // <cjk>
+    0x5636, 0x9A7C, // <cjk>
+    0x5638, 0x9A7E, // <cjk>
+    0x5642, 0x895C, // <cjk>
+    0x564C, 0x9158, // <cjk>
+    0x564E, 0x9A78, // <cjk>
+    0x5650, 0x9A79, // <cjk>
+    0x565B, 0x8A9A, // <cjk>
+    0x5664, 0x9A81, // <cjk>
+    0x5668, 0x8AED, // <cjk>
+    0x566A, 0x9A84, // <cjk>
+    0x566B, 0x9A80, // <cjk>
+    0x566C, 0x9A83, // <cjk>
+    0x5674, 0x95AC, // <cjk>
+    0x5678, 0x93D3, // <cjk>
+    0x567A, 0x94B6, // <cjk>
+    0x5680, 0x9A86, // <cjk>
+    0x5686, 0x9A85, // <cjk>
+    0x5687, 0x8A64, // <cjk>
+    0x568A, 0x9A87, // <cjk>
+    0x568F, 0x9A8A, // <cjk>
+    0x5694, 0x9A89, // <cjk>
+    0x56A0, 0x9A88, // <cjk>
+    0x56A2, 0x9458, // <cjk>
+    0x56A5, 0x9A8B, // <cjk>
+    0x56AE, 0x9A8C, // <cjk>
+    0x56B4, 0x9A8E, // <cjk>
+    0x56B6, 0x9A8D, // <cjk>
+    0x56BC, 0x9A90, // <cjk>
+    0x56C0, 0x9A93, // <cjk>
+    0x56C1, 0x9A91, // <cjk>
+    0x56C2, 0x9A8F, // <cjk>
+    0x56C3, 0x9A92, // <cjk>
+    0x56C8, 0x9A94, // <cjk>
+    0x56CE, 0x9A95, // <cjk>
+    0x56D1, 0x9A96, // <cjk>
+    0x56D3, 0x9A97, // <cjk>
+    0x56D7, 0x9A98, // <cjk>
+    0x56D8, 0x9964, // <cjk>
+    0x56DA, 0x8EFA, // <cjk>
+    0x56DB, 0x8E6C, // <cjk>
+    0x56DE, 0x89F1, // <cjk>
+    0x56E0, 0x88F6, // <cjk>
+    0x56E3, 0x9263, // <cjk>
+    0x56EE, 0x9A99, // <cjk>
+    0x56F0, 0x8DA2, // <cjk>
+    0x56F2, 0x88CD, // <cjk>
+    0x56F3, 0x907D, // <cjk>
+    0x56F9, 0x9A9A, // <cjk>
+    0x56FA, 0x8CC5, // <cjk>
+    0x56FD, 0x8D91, // <cjk>
+    0x56FF, 0x9A9C, // <cjk>
+    0x5700, 0x9A9B, // <cjk>
+    0x5703, 0x95DE, // <cjk>
+    0x5704, 0x9A9D, // <cjk>
+    0x5708, 0x9A9F, // <cjk>
+    0x5709, 0x9A9E, // <cjk>
+    0x570B, 0x9AA0, // <cjk>
+    0x570D, 0x9AA1, // <cjk>
+    0x570F, 0x8C97, // <cjk>
+    0x5712, 0x8980, // <cjk>
+    0x5713, 0x9AA2, // <cjk>
+    0x5716, 0x9AA4, // <cjk>
+    0x5718, 0x9AA3, // <cjk>
+    0x571C, 0x9AA6, // <cjk>
+    0x571F, 0x9379, // <cjk>
+    0x5726, 0x9AA7, // <cjk>
+    0x5727, 0x88B3, // <cjk>
+    0x5728, 0x8DDD, // <cjk>
+    0x572D, 0x8C5C, // <cjk>
+    0x5730, 0x926E, // <cjk>
+    0x5737, 0x9AA8, // <cjk>
+    0x5738, 0x9AA9, // <cjk>
+    0x573B, 0x9AAB, // <cjk>
+    0x5740, 0x9AAC, // <cjk>
+    0x5742, 0x8DE2, // <cjk>
+    0x5747, 0x8BCF, // <cjk>
+    0x574A, 0x9656, // <cjk>
+    0x574E, 0x9AAA, // <cjk>
+    0x574F, 0x9AAD, // <cjk>
+    0x5750, 0x8DBF, // <cjk>
+    0x5751, 0x8D42, // <cjk>
+    0x5761, 0x9AB1, // <cjk>
+    0x5764, 0x8DA3, // <cjk>
+    0x5766, 0x9252, // <cjk>
+    0x5769, 0x9AAE, // <cjk>
+    0x576A, 0x92D8, // <cjk>
+    0x577F, 0x9AB2, // <cjk>
+    0x5782, 0x9082, // <cjk>
+    0x5788, 0x9AB0, // <cjk>
+    0x5789, 0x9AB3, // <cjk>
+    0x578B, 0x8C5E, // <cjk>
+    0x5793, 0x9AB4, // <cjk>
+    0x57A0, 0x9AB5, // <cjk>
+    0x57A2, 0x8D43, // <cjk>
+    0x57A3, 0x8A5F, // <cjk>
+    0x57A4, 0x9AB7, // <cjk>
+    0x57AA, 0x9AB8, // <cjk>
+    0x57B0, 0x9AB9, // <cjk>
+    0x57B3, 0x9AB6, // <cjk>
+    0x57C0, 0x9AAF, // <cjk>
+    0x57C3, 0x9ABA, // <cjk>
+    0x57C6, 0x9ABB, // <cjk>
+    0x57CB, 0x9684, // <cjk>
+    0x57CE, 0x8FE9, // <cjk>
+    0x57D2, 0x9ABD, // <cjk>
+    0x57D3, 0x9ABE, // <cjk>
+    0x57D4, 0x9ABC, // <cjk>
+    0x57D6, 0x9AC0, // <cjk>
+    0x57DC, 0x9457, // <cjk>
+    0x57DF, 0x88E6, // <cjk>
+    0x57E0, 0x9575, // <cjk>
+    0x57E3, 0x9AC1, // <cjk>
+    0x57F4, 0x8FFB, // <cjk>
+    0x57F7, 0x8EB7, // <cjk>
+    0x57F9, 0x947C, // <cjk>
+    0x57FA, 0x8AEE, // <cjk>
+    0x57FC, 0x8DE9, // <cjk>
+    0x5800, 0x9678, // <cjk>
+    0x5802, 0x93B0, // <cjk>
+    0x5805, 0x8C98, // <cjk>
+    0x5806, 0x91CD, // <cjk>
+    0x580A, 0x9ABF, // <cjk>
+    0x580B, 0x9AC2, // <cjk>
+    0x5815, 0x91C2, // <cjk>
+    0x5819, 0x9AC3, // <cjk>
+    0x581D, 0x9AC4, // <cjk>
+    0x5821, 0x9AC6, // <cjk>
+    0x5824, 0x92E7, // <cjk>
+    0x582A, 0x8AAC, // <cjk>
+    0x582F, 0xEA9F, // <cjk>
+    0x5830, 0x8981, // <cjk>
+    0x5831, 0x95F1, // <cjk>
+    0x5834, 0x8FEA, // <cjk>
+    0x5835, 0x9367, // <cjk>
+    0x583A, 0x8DE4, // <cjk>
+    0x583D, 0x9ACC, // <cjk>
+    0x5840, 0x95BB, // <cjk>
+    0x5841, 0x97DB, // <cjk>
+    0x584A, 0x89F2, // <cjk>
+    0x584B, 0x9AC8, // <cjk>
+    0x5851, 0x9159, // <cjk>
+    0x5852, 0x9ACB, // <cjk>
+    0x5854, 0x9383, // <cjk>
+    0x5857, 0x9368, // <cjk>
+    0x5858, 0x9384, // <cjk>
+    0x5859, 0x94B7, // <cjk>
+    0x585A, 0x92CB, // <cjk>
+    0x585E, 0x8DC7, // <cjk>
+    0x5862, 0x9AC7, // <cjk>
+    0x5869, 0x8996, // <cjk>
+    0x586B, 0x9355, // <cjk>
+    0x5870, 0x9AC9, // <cjk>
+    0x5872, 0x9AC5, // <cjk>
+    0x5875, 0x906F, // <cjk>
+    0x5879, 0x9ACD, // <cjk>
+    0x587E, 0x8F6D, // <cjk>
+    0x5883, 0x8BAB, // <cjk>
+    0x5885, 0x9ACE, // <cjk>
+    0x5893, 0x95E6, // <cjk>
+    0x5897, 0x919D, // <cjk>
+    0x589C, 0x92C4, // <cjk>
+    0x589F, 0x9AD0, // <cjk>
+    0x58A8, 0x966E, // <cjk>
+    0x58AB, 0x9AD1, // <cjk>
+    0x58AE, 0x9AD6, // <cjk>
+    0x58B3, 0x95AD, // <cjk>
+    0x58B8, 0x9AD5, // <cjk>
+    0x58B9, 0x9ACF, // <cjk>
+    0x58BA, 0x9AD2, // <cjk>
+    0x58BB, 0x9AD4, // <cjk>
+    0x58BE, 0x8DA4, // <cjk>
+    0x58C1, 0x95C7, // <cjk>
+    0x58C5, 0x9AD7, // <cjk>
+    0x58C7, 0x9264, // <cjk>
+    0x58CA, 0x89F3, // <cjk>
+    0x58CC, 0x8FEB, // <cjk>
+    0x58D1, 0x9AD9, // <cjk>
+    0x58D3, 0x9AD8, // <cjk>
+    0x58D5, 0x8D88, // <cjk>
+    0x58D7, 0x9ADA, // <cjk>
+    0x58D8, 0x9ADC, // <cjk>
+    0x58D9, 0x9ADB, // <cjk>
+    0x58DC, 0x9ADE, // <cjk>
+    0x58DE, 0x9AD3, // <cjk>
+    0x58DF, 0x9AE0, // <cjk>
+    0x58E4, 0x9ADF, // <cjk>
+    0x58E5, 0x9ADD, // <cjk>
+    0x58EB, 0x8E6D, // <cjk>
+    0x58EC, 0x9070, // <cjk>
+    0x58EE, 0x9173, // <cjk>
+    0x58EF, 0x9AE1, // <cjk>
+    0x58F0, 0x90BA, // <cjk>
+    0x58F1, 0x88EB, // <cjk>
+    0x58F2, 0x9484, // <cjk>
+    0x58F7, 0x92D9, // <cjk>
+    0x58F9, 0x9AE3, // <cjk>
+    0x58FA, 0x9AE2, // <cjk>
+    0x58FB, 0x9AE4, // <cjk>
+    0x58FC, 0x9AE5, // <cjk>
+    0x58FD, 0x9AE6, // <cjk>
+    0x5902, 0x9AE7, // <cjk>
+    0x5909, 0x95CF, // <cjk>
+    0x590A, 0x9AE8, // <cjk>
+    0x590F, 0x89C4, // <cjk>
+    0x5910, 0x9AE9, // <cjk>
+    0x5916, 0x8A4F, // <cjk>
+    0x5918, 0x99C7, // <cjk>
+    0x5919, 0x8F67, // <cjk>
+    0x591A, 0x91BD, // <cjk>
+    0x591B, 0x9AEA, // <cjk>
+    0x591C, 0x96E9, // <cjk>
+    0x5922, 0x96B2, // <cjk>
+    0x5925, 0x9AEC, // <cjk>
+    0x5927, 0x91E5, // <cjk>
+    0x5929, 0x9356, // <cjk>
+    0x592A, 0x91BE, // <cjk>
+    0x592B, 0x9576, // <cjk>
+    0x592C, 0x9AED, // <cjk>
+    0x592D, 0x9AEE, // <cjk>
+    0x592E, 0x899B, // <cjk>
+    0x5931, 0x8EB8, // <cjk>
+    0x5932, 0x9AEF, // <cjk>
+    0x5937, 0x88CE, // <cjk>
+    0x5938, 0x9AF0, // <cjk>
+    0x593E, 0x9AF1, // <cjk>
+    0x5944, 0x8982, // <cjk>
+    0x5947, 0x8AEF, // <cjk>
+    0x5948, 0x93DE, // <cjk>
+    0x5949, 0x95F2, // <cjk>
+    0x594E, 0x9AF5, // <cjk>
+    0x594F, 0x9174, // <cjk>
+    0x5950, 0x9AF4, // <cjk>
+    0x5951, 0x8C5F, // <cjk>
+    0x5954, 0x967A, // <cjk>
+    0x5955, 0x9AF3, // <cjk>
+    0x5957, 0x9385, // <cjk>
+    0x5958, 0x9AF7, // <cjk>
+    0x595A, 0x9AF6, // <cjk>
+    0x5960, 0x9AF9, // <cjk>
+    0x5962, 0x9AF8, // <cjk>
+    0x5965, 0x899C, // <cjk>
+    0x5967, 0x9AFA, // <cjk>
+    0x5968, 0x8FA7, // <cjk>
+    0x5969, 0x9AFC, // <cjk>
+    0x596A, 0x9244, // <cjk>
+    0x596C, 0x9AFB, // <cjk>
+    0x596E, 0x95B1, // <cjk>
+    0x5973, 0x8F97, // <cjk>
+    0x5974, 0x937A, // <cjk>
+    0x5978, 0x9B40, // <cjk>
+    0x597D, 0x8D44, // <cjk>
+    0x5981, 0x9B41, // <cjk>
+    0x5982, 0x9440, // <cjk>
+    0x5983, 0x94DC, // <cjk>
+    0x5984, 0x96CF, // <cjk>
+    0x598A, 0x9444, // <cjk>
+    0x598D, 0x9B4A, // <cjk>
+    0x5993, 0x8B57, // <cjk>
+    0x5996, 0x9764, // <cjk>
+    0x5999, 0x96AD, // <cjk>
+    0x599B, 0x9BAA, // <cjk>
+    0x599D, 0x9B42, // <cjk>
+    0x59A3, 0x9B45, // <cjk>
+    0x59A5, 0x91C3, // <cjk>
+    0x59A8, 0x9657, // <cjk>
+    0x59AC, 0x9369, // <cjk>
+    0x59B2, 0x9B46, // <cjk>
+    0x59B9, 0x9685, // <cjk>
+    0x59BB, 0x8DC8, // <cjk>
+    0x59BE, 0x8FA8, // <cjk>
+    0x59C6, 0x9B47, // <cjk>
+    0x59C9, 0x8E6F, // <cjk>
+    0x59CB, 0x8E6E, // <cjk>
+    0x59D0, 0x88B7, // <cjk>
+    0x59D1, 0x8CC6, // <cjk>
+    0x59D3, 0x90A9, // <cjk>
+    0x59D4, 0x88CF, // <cjk>
+    0x59D9, 0x9B4B, // <cjk>
+    0x59DA, 0x9B4C, // <cjk>
+    0x59DC, 0x9B49, // <cjk>
+    0x59E5, 0x8957, // <cjk>
+    0x59E6, 0x8AAD, // <cjk>
+    0x59E8, 0x9B48, // <cjk>
+    0x59EA, 0x96C3, // <cjk>
+    0x59EB, 0x9550, // <cjk>
+    0x59F6, 0x88A6, // <cjk>
+    0x59FB, 0x88F7, // <cjk>
+    0x59FF, 0x8E70, // <cjk>
+    0x5A01, 0x88D0, // <cjk>
+    0x5A03, 0x88A1, // <cjk>
+    0x5A09, 0x9B51, // <cjk>
+    0x5A11, 0x9B4F, // <cjk>
+    0x5A18, 0x96BA, // <cjk>
+    0x5A1A, 0x9B52, // <cjk>
+    0x5A1C, 0x9B50, // <cjk>
+    0x5A1F, 0x9B4E, // <cjk>
+    0x5A20, 0x9050, // <cjk>
+    0x5A25, 0x9B4D, // <cjk>
+    0x5A29, 0x95D8, // <cjk>
+    0x5A2F, 0x8CE2, // <cjk>
+    0x5A35, 0x9B56, // <cjk>
+    0x5A36, 0x9B57, // <cjk>
+    0x5A3C, 0x8FA9, // <cjk>
+    0x5A40, 0x9B53, // <cjk>
+    0x5A41, 0x984B, // <cjk>
+    0x5A46, 0x946B, // <cjk>
+    0x5A49, 0x9B55, // <cjk>
+    0x5A5A, 0x8DA5, // <cjk>
+    0x5A62, 0x9B58, // <cjk>
+    0x5A66, 0x9577, // <cjk>
+    0x5A6A, 0x9B59, // <cjk>
+    0x5A6C, 0x9B54, // <cjk>
+    0x5A7F, 0x96B9, // <cjk>
+    0x5A92, 0x947D, // <cjk>
+    0x5A9A, 0x9B5A, // <cjk>
+    0x5A9B, 0x9551, // <cjk>
+    0x5ABD, 0x9B5F, // <cjk>
+    0x5ABE, 0x9B5C, // <cjk>
+    0x5AC1, 0x89C5, // <cjk>
+    0x5AC2, 0x9B5E, // <cjk>
+    0x5AC9, 0x8EB9, // <cjk>
+    0x5ACB, 0x9B5D, // <cjk>
+    0x5ACC, 0x8C99, // <cjk>
+    0x5AD0, 0x9B6B, // <cjk>
+    0x5AD6, 0x9B64, // <cjk>
+    0x5AD7, 0x9B61, // <cjk>
+    0x5AE1, 0x9284, // <cjk>
+    0x5AE3, 0x9B60, // <cjk>
+    0x5AE6, 0x9B62, // <cjk>
+    0x5AE9, 0x9B63, // <cjk>
+    0x5AFA, 0x9B65, // <cjk>
+    0x5AFB, 0x9B66, // <cjk>
+    0x5B09, 0x8AF0, // <cjk>
+    0x5B0B, 0x9B68, // <cjk>
+    0x5B0C, 0x9B67, // <cjk>
+    0x5B16, 0x9B69, // <cjk>
+    0x5B22, 0x8FEC, // <cjk>
+    0x5B2A, 0x9B6C, // <cjk>
+    0x5B2C, 0x92DA, // <cjk>
+    0x5B30, 0x8964, // <cjk>
+    0x5B32, 0x9B6A, // <cjk>
+    0x5B36, 0x9B6D, // <cjk>
+    0x5B3E, 0x9B6E, // <cjk>
+    0x5B40, 0x9B71, // <cjk>
+    0x5B43, 0x9B6F, // <cjk>
+    0x5B45, 0x9B70, // <cjk>
+    0x5B50, 0x8E71, // <cjk>
+    0x5B51, 0x9B72, // <cjk>
+    0x5B54, 0x8D45, // <cjk>
+    0x5B55, 0x9B73, // <cjk>
+    0x5B57, 0x8E9A, // <cjk>
+    0x5B58, 0x91B6, // <cjk>
+    0x5B5A, 0x9B74, // <cjk>
+    0x5B5B, 0x9B75, // <cjk>
+    0x5B5C, 0x8E79, // <cjk>
+    0x5B5D, 0x8D46, // <cjk>
+    0x5B5F, 0x96D0, // <cjk>
+    0x5B63, 0x8B47, // <cjk>
+    0x5B64, 0x8CC7, // <cjk>
+    0x5B65, 0x9B76, // <cjk>
+    0x5B66, 0x8A77, // <cjk>
+    0x5B69, 0x9B77, // <cjk>
+    0x5B6B, 0x91B7, // <cjk>
+    0x5B70, 0x9B78, // <cjk>
+    0x5B71, 0x9BA1, // <cjk>
+    0x5B73, 0x9B79, // <cjk>
+    0x5B75, 0x9B7A, // <cjk>
+    0x5B78, 0x9B7B, // <cjk>
+    0x5B7A, 0x9B7D, // <cjk>
+    0x5B80, 0x9B7E, // <cjk>
+    0x5B83, 0x9B80, // <cjk>
+    0x5B85, 0x91EE, // <cjk>
+    0x5B87, 0x8946, // <cjk>
+    0x5B88, 0x8EE7, // <cjk>
+    0x5B89, 0x88C0, // <cjk>
+    0x5B8B, 0x9176, // <cjk>
+    0x5B8C, 0x8AAE, // <cjk>
+    0x5B8D, 0x8EB3, // <cjk>
+    0x5B8F, 0x8D47, // <cjk>
+    0x5B95, 0x9386, // <cjk>
+    0x5B97, 0x8F40, // <cjk>
+    0x5B98, 0x8AAF, // <cjk>
+    0x5B99, 0x9288, // <cjk>
+    0x5B9A, 0x92E8, // <cjk>
+    0x5B9B, 0x88B6, // <cjk>
+    0x5B9C, 0x8B58, // <cjk>
+    0x5B9D, 0x95F3, // <cjk>
+    0x5B9F, 0x8EC0, // <cjk>
+    0x5BA2, 0x8B71, // <cjk>
+    0x5BA3, 0x90E9, // <cjk>
+    0x5BA4, 0x8EBA, // <cjk>
+    0x5BA5, 0x9747, // <cjk>
+    0x5BA6, 0x9B81, // <cjk>
+    0x5BAE, 0x8B7B, // <cjk>
+    0x5BB0, 0x8DC9, // <cjk>
+    0x5BB3, 0x8A51, // <cjk>
+    0x5BB4, 0x8983, // <cjk>
+    0x5BB5, 0x8FAA, // <cjk>
+    0x5BB6, 0x89C6, // <cjk>
+    0x5BB8, 0x9B82, // <cjk>
+    0x5BB9, 0x9765, // <cjk>
+    0x5BBF, 0x8F68, // <cjk>
+    0x5BC2, 0x8EE2, // <cjk>
+    0x5BC3, 0x9B83, // <cjk>
+    0x5BC4, 0x8AF1, // <cjk>
+    0x5BC5, 0x93D0, // <cjk>
+    0x5BC6, 0x96A7, // <cjk>
+    0x5BC7, 0x9B84, // <cjk>
+    0x5BC9, 0x9B85, // <cjk>
+    0x5BCC, 0x9578, // <cjk>
+    0x5BD0, 0x9B87, // <cjk>
+    0x5BD2, 0x8AA6, // <cjk>
+    0x5BD3, 0x8BF5, // <cjk>
+    0x5BD4, 0x9B86, // <cjk>
+    0x5BDB, 0x8AB0, // <cjk>
+    0x5BDD, 0x9051, // <cjk>
+    0x5BDE, 0x9B8B, // <cjk>
+    0x5BDF, 0x8E40, // <cjk>
+    0x5BE1, 0x89C7, // <cjk>
+    0x5BE2, 0x9B8A, // <cjk>
+    0x5BE4, 0x9B88, // <cjk>
+    0x5BE5, 0x9B8C, // <cjk>
+    0x5BE6, 0x9B89, // <cjk>
+    0x5BE7, 0x944A, // <cjk>
+    0x5BE8, 0x9ECB, // <cjk>
+    0x5BE9, 0x9052, // <cjk>
+    0x5BEB, 0x9B8D, // <cjk>
+    0x5BEE, 0x97BE, // <cjk>
+    0x5BF0, 0x9B8E, // <cjk>
+    0x5BF3, 0x9B90, // <cjk>
+    0x5BF5, 0x929E, // <cjk>
+    0x5BF6, 0x9B8F, // <cjk>
+    0x5BF8, 0x90A1, // <cjk>
+    0x5BFA, 0x8E9B, // <cjk>
+    0x5BFE, 0x91CE, // <cjk>
+    0x5BFF, 0x8EF5, // <cjk>
+    0x5C01, 0x9595, // <cjk>
+    0x5C02, 0x90EA, // <cjk>
+    0x5C04, 0x8ECB, // <cjk>
+    0x5C05, 0x9B91, // <cjk>
+    0x5C06, 0x8FAB, // <cjk>
+    0x5C07, 0x9B92, // <cjk>
+    0x5C08, 0x9B93, // <cjk>
+    0x5C09, 0x88D1, // <cjk>
+    0x5C0A, 0x91B8, // <cjk>
+    0x5C0B, 0x9071, // <cjk>
+    0x5C0D, 0x9B94, // <cjk>
+    0x5C0E, 0x93B1, // <cjk>
+    0x5C0F, 0x8FAC, // <cjk>
+    0x5C11, 0x8FAD, // <cjk>
+    0x5C13, 0x9B95, // <cjk>
+    0x5C16, 0x90EB, // <cjk>
+    0x5C1A, 0x8FAE, // <cjk>
+    0x5C20, 0x9B96, // <cjk>
+    0x5C22, 0x9B97, // <cjk>
+    0x5C24, 0x96DE, // <cjk>
+    0x5C28, 0x9B98, // <cjk>
+    0x5C2D, 0x8BC4, // <cjk>
+    0x5C31, 0x8F41, // <cjk>
+    0x5C38, 0x9B99, // <cjk>
+    0x5C39, 0x9B9A, // <cjk>
+    0x5C3A, 0x8EDA, // <cjk>
+    0x5C3B, 0x904B, // <cjk>
+    0x5C3C, 0x93F2, // <cjk>
+    0x5C3D, 0x9073, // <cjk>
+    0x5C3E, 0x94F6, // <cjk>
+    0x5C3F, 0x9441, // <cjk>
+    0x5C40, 0x8BC7, // <cjk>
+    0x5C41, 0x9B9B, // <cjk>
+    0x5C45, 0x8B8F, // <cjk>
+    0x5C46, 0x9B9C, // <cjk>
+    0x5C48, 0x8BFC, // <cjk>
+    0x5C4A, 0x93CD, // <cjk>
+    0x5C4B, 0x89AE, // <cjk>
+    0x5C4D, 0x8E72, // <cjk>
+    0x5C4E, 0x9B9D, // <cjk>
+    0x5C4F, 0x9BA0, // <cjk>
+    0x5C50, 0x9B9F, // <cjk>
+    0x5C51, 0x8BFB, // <cjk>
+    0x5C53, 0x9B9E, // <cjk>
+    0x5C55, 0x9357, // <cjk>
+    0x5C5E, 0x91AE, // <cjk>
+    0x5C60, 0x936A, // <cjk>
+    0x5C61, 0x8EC6, // <cjk>
+    0x5C64, 0x9177, // <cjk>
+    0x5C65, 0x979A, // <cjk>
+    0x5C6C, 0x9BA2, // <cjk>
+    0x5C6E, 0x9BA3, // <cjk>
+    0x5C6F, 0x93D4, // <cjk>
+    0x5C71, 0x8E52, // <cjk>
+    0x5C76, 0x9BA5, // <cjk>
+    0x5C79, 0x9BA6, // <cjk>
+    0x5C8C, 0x9BA7, // <cjk>
+    0x5C90, 0x8AF2, // <cjk>
+    0x5C91, 0x9BA8, // <cjk>
+    0x5C94, 0x9BA9, // <cjk>
+    0x5CA1, 0x89AA, // <cjk>
+    0x5CA8, 0x915A, // <cjk>
+    0x5CA9, 0x8AE2, // <cjk>
+    0x5CAB, 0x9BAB, // <cjk>
+    0x5CAC, 0x96A6, // <cjk>
+    0x5CB1, 0x91D0, // <cjk>
+    0x5CB3, 0x8A78, // <cjk>
+    0x5CB6, 0x9BAD, // <cjk>
+    0x5CB7, 0x9BAF, // <cjk>
+    0x5CB8, 0x8ADD, // <cjk>
+    0x5CBB, 0x9BAC, // <cjk>
+    0x5CBC, 0x9BAE, // <cjk>
+    0x5CBE, 0x9BB1, // <cjk>
+    0x5CC5, 0x9BB0, // <cjk>
+    0x5CC7, 0x9BB2, // <cjk>
+    0x5CD9, 0x9BB3, // <cjk>
+    0x5CE0, 0x93BB, // <cjk>
+    0x5CE1, 0x8BAC, // <cjk>
+    0x5CE8, 0x89E3, // <cjk>
+    0x5CE9, 0x9BB4, // <cjk>
+    0x5CEA, 0x9BB9, // <cjk>
+    0x5CED, 0x9BB7, // <cjk>
+    0x5CEF, 0x95F5, // <cjk>
+    0x5CF0, 0x95F4, // <cjk>
+    0x5CF6, 0x9387, // <cjk>
+    0x5CFA, 0x9BB6, // <cjk>
+    0x5CFB, 0x8F73, // <cjk>
+    0x5CFD, 0x9BB5, // <cjk>
+    0x5D07, 0x9092, // <cjk>
+    0x5D0B, 0x9BBA, // <cjk>
+    0x5D0E, 0x8DE8, // <cjk>
+    0x5D11, 0x9BC0, // <cjk>
+    0x5D14, 0x9BC1, // <cjk>
+    0x5D15, 0x9BBB, // <cjk>
+    0x5D16, 0x8A52, // <cjk>
+    0x5D17, 0x9BBC, // <cjk>
+    0x5D18, 0x9BC5, // <cjk>
+    0x5D19, 0x9BC4, // <cjk>
+    0x5D1A, 0x9BC3, // <cjk>
+    0x5D1B, 0x9BBF, // <cjk>
+    0x5D1F, 0x9BBE, // <cjk>
+    0x5D22, 0x9BC2, // <cjk>
+    0x5D29, 0x95F6, // <cjk>
+    0x5D4B, 0x9BC9, // <cjk>
+    0x5D4C, 0x9BC6, // <cjk>
+    0x5D4E, 0x9BC8, // <cjk>
+    0x5D50, 0x9792, // <cjk>
+    0x5D52, 0x9BC7, // <cjk>
+    0x5D5C, 0x9BBD, // <cjk>
+    0x5D69, 0x9093, // <cjk>
+    0x5D6C, 0x9BCA, // <cjk>
+    0x5D6F, 0x8DB5, // <cjk>
+    0x5D73, 0x9BCB, // <cjk>
+    0x5D76, 0x9BCC, // <cjk>
+    0x5D82, 0x9BCF, // <cjk>
+    0x5D84, 0x9BCE, // <cjk>
+    0x5D87, 0x9BCD, // <cjk>
+    0x5D8B, 0x9388, // <cjk>
+    0x5D8C, 0x9BB8, // <cjk>
+    0x5D90, 0x9BD5, // <cjk>
+    0x5D9D, 0x9BD1, // <cjk>
+    0x5DA2, 0x9BD0, // <cjk>
+    0x5DAC, 0x9BD2, // <cjk>
+    0x5DAE, 0x9BD3, // <cjk>
+    0x5DB7, 0x9BD6, // <cjk>
+    0x5DBA, 0x97E4, // <cjk>
+    0x5DBC, 0x9BD7, // <cjk>
+    0x5DBD, 0x9BD4, // <cjk>
+    0x5DC9, 0x9BD8, // <cjk>
+    0x5DCC, 0x8ADE, // <cjk>
+    0x5DCD, 0x9BD9, // <cjk>
+    0x5DD2, 0x9BDB, // <cjk>
+    0x5DD3, 0x9BDA, // <cjk>
+    0x5DD6, 0x9BDC, // <cjk>
+    0x5DDB, 0x9BDD, // <cjk>
+    0x5DDD, 0x90EC, // <cjk>
+    0x5DDE, 0x8F42, // <cjk>
+    0x5DE1, 0x8F84, // <cjk>
+    0x5DE3, 0x9183, // <cjk>
+    0x5DE5, 0x8D48, // <cjk>
+    0x5DE6, 0x8DB6, // <cjk>
+    0x5DE7, 0x8D49, // <cjk>
+    0x5DE8, 0x8B90, // <cjk>
+    0x5DEB, 0x9BDE, // <cjk>
+    0x5DEE, 0x8DB7, // <cjk>
+    0x5DF1, 0x8CC8, // <cjk>
+    0x5DF2, 0x9BDF, // <cjk>
+    0x5DF3, 0x96A4, // <cjk>
+    0x5DF4, 0x9462, // <cjk>
+    0x5DF5, 0x9BE0, // <cjk>
+    0x5DF7, 0x8D4A, // <cjk>
+    0x5DFB, 0x8AAA, // <cjk>
+    0x5DFD, 0x9246, // <cjk>
+    0x5DFE, 0x8BD0, // <cjk>
+    0x5E02, 0x8E73, // <cjk>
+    0x5E03, 0x957A, // <cjk>
+    0x5E06, 0x94BF, // <cjk>
+    0x5E0B, 0x9BE1, // <cjk>
+    0x5E0C, 0x8AF3, // <cjk>
+    0x5E11, 0x9BE4, // <cjk>
+    0x5E16, 0x929F, // <cjk>
+    0x5E19, 0x9BE3, // <cjk>
+    0x5E1A, 0x9BE2, // <cjk>
+    0x5E1B, 0x9BE5, // <cjk>
+    0x5E1D, 0x92E9, // <cjk>
+    0x5E25, 0x9083, // <cjk>
+    0x5E2B, 0x8E74, // <cjk>
+    0x5E2D, 0x90C8, // <cjk>
+    0x5E2F, 0x91D1, // <cjk>
+    0x5E30, 0x8B41, // <cjk>
+    0x5E33, 0x92A0, // <cjk>
+    0x5E36, 0x9BE6, // <cjk>
+    0x5E37, 0x9BE7, // <cjk>
+    0x5E38, 0x8FED, // <cjk>
+    0x5E3D, 0x9658, // <cjk>
+    0x5E40, 0x9BEA, // <cjk>
+    0x5E43, 0x9BE9, // <cjk>
+    0x5E44, 0x9BE8, // <cjk>
+    0x5E45, 0x959D, // <cjk>
+    0x5E47, 0x9BF1, // <cjk>
+    0x5E4C, 0x9679, // <cjk>
+    0x5E4E, 0x9BEB, // <cjk>
+    0x5E54, 0x9BED, // <cjk>
+    0x5E55, 0x968B, // <cjk>
+    0x5E57, 0x9BEC, // <cjk>
+    0x5E5F, 0x9BEE, // <cjk>
+    0x5E61, 0x94A6, // <cjk>
+    0x5E62, 0x9BEF, // <cjk>
+    0x5E63, 0x95BC, // <cjk>
+    0x5E64, 0x9BF0, // <cjk>
+    0x5E72, 0x8AB1, // <cjk>
+    0x5E73, 0x95BD, // <cjk>
+    0x5E74, 0x944E, // <cjk>
+    0x5E75, 0x9BF2, // <cjk>
+    0x5E76, 0x9BF3, // <cjk>
+    0x5E78, 0x8D4B, // <cjk>
+    0x5E79, 0x8AB2, // <cjk>
+    0x5E7A, 0x9BF4, // <cjk>
+    0x5E7B, 0x8CB6, // <cjk>
+    0x5E7C, 0x9763, // <cjk>
+    0x5E7D, 0x9748, // <cjk>
+    0x5E7E, 0x8AF4, // <cjk>
+    0x5E7F, 0x9BF6, // <cjk>
+    0x5E81, 0x92A1, // <cjk>
+    0x5E83, 0x8D4C, // <cjk>
+    0x5E84, 0x8FAF, // <cjk>
+    0x5E87, 0x94DD, // <cjk>
+    0x5E8A, 0x8FB0, // <cjk>
+    0x5E8F, 0x8F98, // <cjk>
+    0x5E95, 0x92EA, // <cjk>
+    0x5E96, 0x95F7, // <cjk>
+    0x5E97, 0x9358, // <cjk>
+    0x5E9A, 0x8D4D, // <cjk>
+    0x5E9C, 0x957B, // <cjk>
+    0x5EA0, 0x9BF7, // <cjk>
+    0x5EA6, 0x9378, // <cjk>
+    0x5EA7, 0x8DC0, // <cjk>
+    0x5EAB, 0x8CC9, // <cjk>
+    0x5EAD, 0x92EB, // <cjk>
+    0x5EB5, 0x88C1, // <cjk>
+    0x5EB6, 0x8F8E, // <cjk>
+    0x5EB7, 0x8D4E, // <cjk>
+    0x5EB8, 0x9766, // <cjk>
+    0x5EC1, 0x9BF8, // <cjk>
+    0x5EC2, 0x9BF9, // <cjk>
+    0x5EC3, 0x9470, // <cjk>
+    0x5EC8, 0x9BFA, // <cjk>
+    0x5EC9, 0x97F5, // <cjk>
+    0x5ECA, 0x984C, // <cjk>
+    0x5ECF, 0x9BFC, // <cjk>
+    0x5ED0, 0x9BFB, // <cjk>
+    0x5ED3, 0x8A66, // <cjk>
+    0x5ED6, 0x9C40, // <cjk>
+    0x5EDA, 0x9C43, // <cjk>
+    0x5EDB, 0x9C44, // <cjk>
+    0x5EDD, 0x9C42, // <cjk>
+    0x5EDF, 0x955F, // <cjk>
+    0x5EE0, 0x8FB1, // <cjk>
+    0x5EE1, 0x9C46, // <cjk>
+    0x5EE2, 0x9C45, // <cjk>
+    0x5EE3, 0x9C41, // <cjk>
+    0x5EE8, 0x9C47, // <cjk>
+    0x5EE9, 0x9C48, // <cjk>
+    0x5EEC, 0x9C49, // <cjk>
+    0x5EF0, 0x9C4C, // <cjk>
+    0x5EF1, 0x9C4A, // <cjk>
+    0x5EF3, 0x9C4B, // <cjk>
+    0x5EF4, 0x9C4D, // <cjk>
+    0x5EF6, 0x8984, // <cjk>
+    0x5EF7, 0x92EC, // <cjk>
+    0x5EF8, 0x9C4E, // <cjk>
+    0x5EFA, 0x8C9A, // <cjk>
+    0x5EFB, 0x89F4, // <cjk>
+    0x5EFC, 0x9455, // <cjk>
+    0x5EFE, 0x9C4F, // <cjk>
+    0x5EFF, 0x93F9, // <cjk>
+    0x5F01, 0x95D9, // <cjk>
+    0x5F03, 0x9C50, // <cjk>
+    0x5F04, 0x984D, // <cjk>
+    0x5F09, 0x9C51, // <cjk>
+    0x5F0A, 0x95BE, // <cjk>
+    0x5F0B, 0x9C54, // <cjk>
+    0x5F0C, 0x989F, // <cjk>
+    0x5F0D, 0x98AF, // <cjk>
+    0x5F0F, 0x8EAE, // <cjk>
+    0x5F10, 0x93F3, // <cjk>
+    0x5F11, 0x9C55, // <cjk>
+    0x5F13, 0x8B7C, // <cjk>
+    0x5F14, 0x92A2, // <cjk>
+    0x5F15, 0x88F8, // <cjk>
+    0x5F16, 0x9C56, // <cjk>
+    0x5F17, 0x95A4, // <cjk>
+    0x5F18, 0x8D4F, // <cjk>
+    0x5F1B, 0x926F, // <cjk>
+    0x5F1F, 0x92ED, // <cjk>
+    0x5F25, 0x96ED, // <cjk>
+    0x5F26, 0x8CB7, // <cjk>
+    0x5F27, 0x8CCA, // <cjk>
+    0x5F29, 0x9C57, // <cjk>
+    0x5F2D, 0x9C58, // <cjk>
+    0x5F2F, 0x9C5E, // <cjk>
+    0x5F31, 0x8EE3, // <cjk>
+    0x5F35, 0x92A3, // <cjk>
+    0x5F37, 0x8BAD, // <cjk>
+    0x5F38, 0x9C59, // <cjk>
+    0x5F3C, 0x954A, // <cjk>
+    0x5F3E, 0x9265, // <cjk>
+    0x5F41, 0x9C5A, // <cjk>
+    0x5F4A, 0x8BAE, // <cjk>
+    0x5F4C, 0x9C5C, // <cjk>
+    0x5F4E, 0x9C5D, // <cjk>
+    0x5F51, 0x9C5F, // <cjk>
+    0x5F53, 0x9396, // <cjk>
+    0x5F56, 0x9C60, // <cjk>
+    0x5F57, 0x9C61, // <cjk>
+    0x5F59, 0x9C62, // <cjk>
+    0x5F5C, 0x9C53, // <cjk>
+    0x5F5D, 0x9C52, // <cjk>
+    0x5F61, 0x9C63, // <cjk>
+    0x5F62, 0x8C60, // <cjk>
+    0x5F66, 0x9546, // <cjk>
+    0x5F69, 0x8DCA, // <cjk>
+    0x5F6A, 0x9556, // <cjk>
+    0x5F6B, 0x92A4, // <cjk>
+    0x5F6C, 0x956A, // <cjk>
+    0x5F6D, 0x9C64, // <cjk>
+    0x5F70, 0x8FB2, // <cjk>
+    0x5F71, 0x8965, // <cjk>
+    0x5F73, 0x9C65, // <cjk>
+    0x5F77, 0x9C66, // <cjk>
+    0x5F79, 0x96F0, // <cjk>
+    0x5F7C, 0x94DE, // <cjk>
+    0x5F7F, 0x9C69, // <cjk>
+    0x5F80, 0x899D, // <cjk>
+    0x5F81, 0x90AA, // <cjk>
+    0x5F82, 0x9C68, // <cjk>
+    0x5F83, 0x9C67, // <cjk>
+    0x5F84, 0x8C61, // <cjk>
+    0x5F85, 0x91D2, // <cjk>
+    0x5F87, 0x9C6D, // <cjk>
+    0x5F88, 0x9C6B, // <cjk>
+    0x5F8A, 0x9C6A, // <cjk>
+    0x5F8B, 0x97A5, // <cjk>
+    0x5F8C, 0x8CE3, // <cjk>
+    0x5F90, 0x8F99, // <cjk>
+    0x5F91, 0x9C6C, // <cjk>
+    0x5F92, 0x936B, // <cjk>
+    0x5F93, 0x8F5D, // <cjk>
+    0x5F97, 0x93BE, // <cjk>
+    0x5F98, 0x9C70, // <cjk>
+    0x5F99, 0x9C6F, // <cjk>
+    0x5F9E, 0x9C6E, // <cjk>
+    0x5FA0, 0x9C71, // <cjk>
+    0x5FA1, 0x8CE4, // <cjk>
+    0x5FA8, 0x9C72, // <cjk>
+    0x5FA9, 0x959C, // <cjk>
+    0x5FAA, 0x8F7A, // <cjk>
+    0x5FAD, 0x9C73, // <cjk>
+    0x5FAE, 0x94F7, // <cjk>
+    0x5FB3, 0x93BF, // <cjk>
+    0x5FB4, 0x92A5, // <cjk>
+    0x5FB9, 0x934F, // <cjk>
+    0x5FBC, 0x9C74, // <cjk>
+    0x5FBD, 0x8B4A, // <cjk>
+    0x5FC3, 0x9053, // <cjk>
+    0x5FC5, 0x954B, // <cjk>
+    0x5FCC, 0x8AF5, // <cjk>
+    0x5FCD, 0x9445, // <cjk>
+    0x5FD6, 0x9C75, // <cjk>
+    0x5FD7, 0x8E75, // <cjk>
+    0x5FD8, 0x9659, // <cjk>
+    0x5FD9, 0x965A, // <cjk>
+    0x5FDC, 0x899E, // <cjk>
+    0x5FDD, 0x9C7A, // <cjk>
+    0x5FE0, 0x9289, // <cjk>
+    0x5FE4, 0x9C77, // <cjk>
+    0x5FEB, 0x89F5, // <cjk>
+    0x5FF0, 0x9CAB, // <cjk>
+    0x5FF1, 0x9C79, // <cjk>
+    0x5FF5, 0x944F, // <cjk>
+    0x5FF8, 0x9C78, // <cjk>
+    0x5FFB, 0x9C76, // <cjk>
+    0x5FFD, 0x8D9A, // <cjk>
+    0x5FFF, 0x9C7C, // <cjk>
+    0x600E, 0x9C83, // <cjk>
+    0x600F, 0x9C89, // <cjk>
+    0x6010, 0x9C81, // <cjk>
+    0x6012, 0x937B, // <cjk>
+    0x6015, 0x9C86, // <cjk>
+    0x6016, 0x957C, // <cjk>
+    0x6019, 0x9C80, // <cjk>
+    0x601B, 0x9C85, // <cjk>
+    0x601C, 0x97E5, // <cjk>
+    0x601D, 0x8E76, // <cjk>
+    0x6020, 0x91D3, // <cjk>
+    0x6021, 0x9C7D, // <cjk>
+    0x6025, 0x8B7D, // <cjk>
+    0x6026, 0x9C88, // <cjk>
+    0x6027, 0x90AB, // <cjk>
+    0x6028, 0x8985, // <cjk>
+    0x6029, 0x9C82, // <cjk>
+    0x602A, 0x89F6, // <cjk>
+    0x602B, 0x9C87, // <cjk>
+    0x602F, 0x8BAF, // <cjk>
+    0x6031, 0x9C84, // <cjk>
+    0x603A, 0x9C8A, // <cjk>
+    0x6041, 0x9C8C, // <cjk>
+    0x6042, 0x9C96, // <cjk>
+    0x6043, 0x9C94, // <cjk>
+    0x6046, 0x9C91, // <cjk>
+    0x604A, 0x9C90, // <cjk>
+    0x604B, 0x97F6, // <cjk>
+    0x604D, 0x9C92, // <cjk>
+    0x6050, 0x8BB0, // <cjk>
+    0x6052, 0x8D50, // <cjk>
+    0x6055, 0x8F9A, // <cjk>
+    0x6059, 0x9C99, // <cjk>
+    0x605A, 0x9C8B, // <cjk>
+    0x605F, 0x9C8F, // <cjk>
+    0x6060, 0x9C7E, // <cjk>
+    0x6062, 0x89F8, // <cjk>
+    0x6063, 0x9C93, // <cjk>
+    0x6064, 0x9C95, // <cjk>
+    0x6065, 0x9270, // <cjk>
+    0x6068, 0x8DA6, // <cjk>
+    0x6069, 0x89B6, // <cjk>
+    0x606A, 0x9C8D, // <cjk>
+    0x606B, 0x9C98, // <cjk>
+    0x606C, 0x9C97, // <cjk>
+    0x606D, 0x8BB1, // <cjk>
+    0x606F, 0x91A7, // <cjk>
+    0x6070, 0x8A86, // <cjk>
+    0x6075, 0x8C62, // <cjk>
+    0x6077, 0x9C8E, // <cjk>
+    0x6081, 0x9C9A, // <cjk>
+    0x6083, 0x9C9D, // <cjk>
+    0x6084, 0x9C9F, // <cjk>
+    0x6089, 0x8EBB, // <cjk>
+    0x608B, 0x9CA5, // <cjk>
+    0x608C, 0x92EE, // <cjk>
+    0x608D, 0x9C9B, // <cjk>
+    0x6092, 0x9CA3, // <cjk>
+    0x6094, 0x89F7, // <cjk>
+    0x6096, 0x9CA1, // <cjk>
+    0x6097, 0x9CA2, // <cjk>
+    0x609A, 0x9C9E, // <cjk>
+    0x609B, 0x9CA0, // <cjk>
+    0x609F, 0x8CE5, // <cjk>
+    0x60A0, 0x9749, // <cjk>
+    0x60A3, 0x8AB3, // <cjk>
+    0x60A6, 0x8978, // <cjk>
+    0x60A7, 0x9CA4, // <cjk>
+    0x60A9, 0x9459, // <cjk>
+    0x60AA, 0x88AB, // <cjk>
+    0x60B2, 0x94DF, // <cjk>
+    0x60B3, 0x9C7B, // <cjk>
+    0x60B4, 0x9CAA, // <cjk>
+    0x60B5, 0x9CAE, // <cjk>
+    0x60B6, 0x96E3, // <cjk>
+    0x60B8, 0x9CA7, // <cjk>
+    0x60BC, 0x9389, // <cjk>
+    0x60BD, 0x9CAC, // <cjk>
+    0x60C5, 0x8FEE, // <cjk>
+    0x60C6, 0x9CAD, // <cjk>
+    0x60C7, 0x93D5, // <cjk>
+    0x60D1, 0x9866, // <cjk>
+    0x60D3, 0x9CA9, // <cjk>
+    0x60D8, 0x9CAF, // <cjk>
+    0x60DA, 0x8D9B, // <cjk>
+    0x60DC, 0x90C9, // <cjk>
+    0x60DF, 0x88D2, // <cjk>
+    0x60E0, 0x9CA8, // <cjk>
+    0x60E1, 0x9CA6, // <cjk>
+    0x60E3, 0x9179, // <cjk>
+    0x60E7, 0x9C9C, // <cjk>
+    0x60E8, 0x8E53, // <cjk>
+    0x60F0, 0x91C4, // <cjk>
+    0x60F1, 0x9CBB, // <cjk>
+    0x60F3, 0x917A, // <cjk>
+    0x60F4, 0x9CB6, // <cjk>
+    0x60F6, 0x9CB3, // <cjk>
+    0x60F7, 0x9CB4, // <cjk>
+    0x60F9, 0x8EE4, // <cjk>
+    0x60FA, 0x9CB7, // <cjk>
+    0x60FB, 0x9CBA, // <cjk>
+    0x6100, 0x9CB5, // <cjk>
+    0x6101, 0x8F44, // <cjk>
+    0x6103, 0x9CB8, // <cjk>
+    0x6106, 0x9CB2, // <cjk>
+    0x6108, 0x96FA, // <cjk>
+    0x6109, 0x96F9, // <cjk>
+    0x610D, 0x9CBC, // <cjk>
+    0x610E, 0x9CBD, // <cjk>
+    0x610F, 0x88D3, // <cjk>
+    0x6115, 0x9CB1, // <cjk>
+    0x611A, 0x8BF0, // <cjk>
+    0x611B, 0x88A4, // <cjk>
+    0x611F, 0x8AB4, // <cjk>
+    0x6121, 0x9CB9, // <cjk>
+    0x6127, 0x9CC1, // <cjk>
+    0x6128, 0x9CC0, // <cjk>
+    0x612C, 0x9CC5, // <cjk>
+    0x6134, 0x9CC6, // <cjk>
+    0x613C, 0x9CC4, // <cjk>
+    0x613D, 0x9CC7, // <cjk>
+    0x613E, 0x9CBF, // <cjk>
+    0x613F, 0x9CC3, // <cjk>
+    0x6142, 0x9CC8, // <cjk>
+    0x6144, 0x9CC9, // <cjk>
+    0x6147, 0x9CBE, // <cjk>
+    0x6148, 0x8E9C, // <cjk>
+    0x614A, 0x9CC2, // <cjk>
+    0x614B, 0x91D4, // <cjk>
+    0x614C, 0x8D51, // <cjk>
+    0x614D, 0x9CB0, // <cjk>
+    0x614E, 0x9054, // <cjk>
+    0x6153, 0x9CD6, // <cjk>
+    0x6155, 0x95E7, // <cjk>
+    0x6158, 0x9CCC, // <cjk>
+    0x6159, 0x9CCD, // <cjk>
+    0x615A, 0x9CCE, // <cjk>
+    0x615D, 0x9CD5, // <cjk>
+    0x615F, 0x9CD4, // <cjk>
+    0x6162, 0x969D, // <cjk>
+    0x6163, 0x8AB5, // <cjk>
+    0x6165, 0x9CD2, // <cjk>
+    0x6167, 0x8C64, // <cjk>
+    0x6168, 0x8A53, // <cjk>
+    0x616B, 0x9CCF, // <cjk>
+    0x616E, 0x97B6, // <cjk>
+    0x616F, 0x9CD1, // <cjk>
+    0x6170, 0x88D4, // <cjk>
+    0x6171, 0x9CD3, // <cjk>
+    0x6173, 0x9CCA, // <cjk>
+    0x6174, 0x9CD0, // <cjk>
+    0x6175, 0x9CD7, // <cjk>
+    0x6176, 0x8C63, // <cjk>
+    0x6177, 0x9CCB, // <cjk>
+    0x617E, 0x977C, // <cjk>
+    0x6182, 0x974A, // <cjk>
+    0x6187, 0x9CDA, // <cjk>
+    0x618A, 0x9CDE, // <cjk>
+    0x618E, 0x919E, // <cjk>
+    0x6190, 0x97F7, // <cjk>
+    0x6191, 0x9CDF, // <cjk>
+    0x6194, 0x9CDC, // <cjk>
+    0x6196, 0x9CD9, // <cjk>
+    0x6199, 0x9CD8, // <cjk>
+    0x619A, 0x9CDD, // <cjk>
+    0x61A4, 0x95AE, // <cjk>
+    0x61A7, 0x93B2, // <cjk>
+    0x61A9, 0x8C65, // <cjk>
+    0x61AB, 0x9CE0, // <cjk>
+    0x61AC, 0x9CDB, // <cjk>
+    0x61AE, 0x9CE1, // <cjk>
+    0x61B2, 0x8C9B, // <cjk>
+    0x61B6, 0x89AF, // <cjk>
+    0x61BA, 0x9CE9, // <cjk>
+    0x61BE, 0x8AB6, // <cjk>
+    0x61C3, 0x9CE7, // <cjk>
+    0x61C6, 0x9CE8, // <cjk>
+    0x61C7, 0x8DA7, // <cjk>
+    0x61C8, 0x9CE6, // <cjk>
+    0x61C9, 0x9CE4, // <cjk>
+    0x61CA, 0x9CE3, // <cjk>
+    0x61CB, 0x9CEA, // <cjk>
+    0x61CC, 0x9CE2, // <cjk>
+    0x61CD, 0x9CEC, // <cjk>
+    0x61D0, 0x89F9, // <cjk>
+    0x61E3, 0x9CEE, // <cjk>
+    0x61E6, 0x9CED, // <cjk>
+    0x61F2, 0x92A6, // <cjk>
+    0x61F4, 0x9CF1, // <cjk>
+    0x61F6, 0x9CEF, // <cjk>
+    0x61F7, 0x9CE5, // <cjk>
+    0x61F8, 0x8C9C, // <cjk>
+    0x61FA, 0x9CF0, // <cjk>
+    0x61FC, 0x9CF4, // <cjk>
+    0x61FD, 0x9CF3, // <cjk>
+    0x61FE, 0x9CF5, // <cjk>
+    0x61FF, 0x9CF2, // <cjk>
+    0x6200, 0x9CF6, // <cjk>
+    0x6208, 0x9CF7, // <cjk>
+    0x6209, 0x9CF8, // <cjk>
+    0x620A, 0x95E8, // <cjk>
+    0x620C, 0x9CFA, // <cjk>
+    0x620D, 0x9CF9, // <cjk>
+    0x620E, 0x8F5E, // <cjk>
+    0x6210, 0x90AC, // <cjk>
+    0x6211, 0x89E4, // <cjk>
+    0x6212, 0x89FA, // <cjk>
+    0x6214, 0x9CFB, // <cjk>
+    0x6216, 0x88BD, // <cjk>
+    0x621A, 0x90CA, // <cjk>
+    0x621B, 0x9CFC, // <cjk>
+    0x621D, 0xE6C1, // <cjk>
+    0x621E, 0x9D40, // <cjk>
+    0x621F, 0x8C81, // <cjk>
+    0x6221, 0x9D41, // <cjk>
+    0x6226, 0x90ED, // <cjk>
+    0x622A, 0x9D42, // <cjk>
+    0x622E, 0x9D43, // <cjk>
+    0x622F, 0x8B59, // <cjk>
+    0x6230, 0x9D44, // <cjk>
+    0x6232, 0x9D45, // <cjk>
+    0x6233, 0x9D46, // <cjk>
+    0x6234, 0x91D5, // <cjk>
+    0x6238, 0x8CCB, // <cjk>
+    0x623B, 0x96DF, // <cjk>
+    0x6240, 0x8F8A, // <cjk>
+    0x6241, 0x9D47, // <cjk>
+    0x6247, 0x90EE, // <cjk>
+    0x6248, 0xE7BB, // <cjk>
+    0x6249, 0x94E0, // <cjk>
+    0x624B, 0x8EE8, // <cjk>
+    0x624D, 0x8DCB, // <cjk>
+    0x624E, 0x9D48, // <cjk>
+    0x6253, 0x91C5, // <cjk>
+    0x6255, 0x95A5, // <cjk>
+    0x6258, 0x91EF, // <cjk>
+    0x625B, 0x9D4B, // <cjk>
+    0x625E, 0x9D49, // <cjk>
+    0x6260, 0x9D4C, // <cjk>
+    0x6263, 0x9D4A, // <cjk>
+    0x6268, 0x9D4D, // <cjk>
+    0x626E, 0x95AF, // <cjk>
+    0x6271, 0x88B5, // <cjk>
+    0x6276, 0x957D, // <cjk>
+    0x6279, 0x94E1, // <cjk>
+    0x627C, 0x9D4E, // <cjk>
+    0x627E, 0x9D51, // <cjk>
+    0x627F, 0x8FB3, // <cjk>
+    0x6280, 0x8B5A, // <cjk>
+    0x6282, 0x9D4F, // <cjk>
+    0x6283, 0x9D56, // <cjk>
+    0x6284, 0x8FB4, // <cjk>
+    0x6289, 0x9D50, // <cjk>
+    0x628A, 0x9463, // <cjk>
+    0x6291, 0x977D, // <cjk>
+    0x6292, 0x9D52, // <cjk>
+    0x6293, 0x9D53, // <cjk>
+    0x6294, 0x9D57, // <cjk>
+    0x6295, 0x938A, // <cjk>
+    0x6296, 0x9D54, // <cjk>
+    0x6297, 0x8D52, // <cjk>
+    0x6298, 0x90DC, // <cjk>
+    0x629B, 0x9D65, // <cjk>
+    0x629C, 0x94B2, // <cjk>
+    0x629E, 0x91F0, // <cjk>
+    0x62AB, 0x94E2, // <cjk>
+    0x62AC, 0x9DAB, // <cjk>
+    0x62B1, 0x95F8, // <cjk>
+    0x62B5, 0x92EF, // <cjk>
+    0x62B9, 0x9695, // <cjk>
+    0x62BB, 0x9D5A, // <cjk>
+    0x62BC, 0x899F, // <cjk>
+    0x62BD, 0x928A, // <cjk>
+    0x62C2, 0x9D63, // <cjk>
+    0x62C5, 0x9253, // <cjk>
+    0x62C6, 0x9D5D, // <cjk>
+    0x62C7, 0x9D64, // <cjk>
+    0x62C8, 0x9D5F, // <cjk>
+    0x62C9, 0x9D66, // <cjk>
+    0x62CA, 0x9D62, // <cjk>
+    0x62CC, 0x9D61, // <cjk>
+    0x62CD, 0x948F, // <cjk>
+    0x62D0, 0x89FB, // <cjk>
+    0x62D1, 0x9D59, // <cjk>
+    0x62D2, 0x8B91, // <cjk>
+    0x62D3, 0x91F1, // <cjk>
+    0x62D4, 0x9D55, // <cjk>
+    0x62D7, 0x9D58, // <cjk>
+    0x62D8, 0x8D53, // <cjk>
+    0x62D9, 0x90D9, // <cjk>
+    0x62DB, 0x8FB5, // <cjk>
+    0x62DC, 0x9D60, // <cjk>
+    0x62DD, 0x9471, // <cjk>
+    0x62E0, 0x8B92, // <cjk>
+    0x62E1, 0x8A67, // <cjk>
+    0x62EC, 0x8A87, // <cjk>
+    0x62ED, 0x9040, // <cjk>
+    0x62EE, 0x9D68, // <cjk>
+    0x62EF, 0x9D6D, // <cjk>
+    0x62F1, 0x9D69, // <cjk>
+    0x62F3, 0x8C9D, // <cjk>
+    0x62F5, 0x9D6E, // <cjk>
+    0x62F6, 0x8E41, // <cjk>
+    0x62F7, 0x8D89, // <cjk>
+    0x62FE, 0x8F45, // <cjk>
+    0x62FF, 0x9D5C, // <cjk>
+    0x6301, 0x8E9D, // <cjk>
+    0x6302, 0x9D6B, // <cjk>
+    0x6307, 0x8E77, // <cjk>
+    0x6308, 0x9D6C, // <cjk>
+    0x6309, 0x88C2, // <cjk>
+    0x630C, 0x9D67, // <cjk>
+    0x6311, 0x92A7, // <cjk>
+    0x6319, 0x8B93, // <cjk>
+    0x631F, 0x8BB2, // <cjk>
+    0x6327, 0x9D6A, // <cjk>
+    0x6328, 0x88A5, // <cjk>
+    0x632B, 0x8DC1, // <cjk>
+    0x632F, 0x9055, // <cjk>
+    0x633A, 0x92F0, // <cjk>
+    0x633D, 0x94D2, // <cjk>
+    0x633E, 0x9D70, // <cjk>
+    0x633F, 0x917D, // <cjk>
+    0x6349, 0x91A8, // <cjk>
+    0x634C, 0x8E4A, // <cjk>
+    0x634D, 0x9D71, // <cjk>
+    0x634F, 0x9D73, // <cjk>
+    0x6350, 0x9D6F, // <cjk>
+    0x6355, 0x95DF, // <cjk>
+    0x6357, 0x92BB, // <cjk>
+    0x635C, 0x917B, // <cjk>
+    0x6367, 0x95F9, // <cjk>
+    0x6368, 0x8ECC, // <cjk>
+    0x6369, 0x9D80, // <cjk>
+    0x636B, 0x9D7E, // <cjk>
+    0x636E, 0x9098, // <cjk>
+    0x6372, 0x8C9E, // <cjk>
+    0x6376, 0x9D78, // <cjk>
+    0x6377, 0x8FB7, // <cjk>
+    0x637A, 0x93E6, // <cjk>
+    0x637B, 0x9450, // <cjk>
+    0x6380, 0x9D76, // <cjk>
+    0x6383, 0x917C, // <cjk>
+    0x6388, 0x8EF6, // <cjk>
+    0x6389, 0x9D7B, // <cjk>
+    0x638C, 0x8FB6, // <cjk>
+    0x638E, 0x9D75, // <cjk>
+    0x638F, 0x9D7A, // <cjk>
+    0x6392, 0x9472, // <cjk>
+    0x6396, 0x9D74, // <cjk>
+    0x6398, 0x8C40, // <cjk>
+    0x639B, 0x8A7C, // <cjk>
+    0x639F, 0x9D7C, // <cjk>
+    0x63A0, 0x97A9, // <cjk>
+    0x63A1, 0x8DCC, // <cjk>
+    0x63A2, 0x9254, // <cjk>
+    0x63A3, 0x9D79, // <cjk>
+    0x63A5, 0x90DA, // <cjk>
+    0x63A7, 0x8D54, // <cjk>
+    0x63A8, 0x9084, // <cjk>
+    0x63A9, 0x8986, // <cjk>
+    0x63AB, 0x9D77, // <cjk>
+    0x63AC, 0x8B64, // <cjk>
+    0x63B2, 0x8C66, // <cjk>
+    0x63B4, 0x92CD, // <cjk>
+    0x63B5, 0x9D7D, // <cjk>
+    0x63BB, 0x917E, // <cjk>
+    0x63BE, 0x9D81, // <cjk>
+    0x63C0, 0x9D83, // <cjk>
+    0x63C3, 0x91B5, // <cjk>
+    0x63C4, 0x9D89, // <cjk>
+    0x63C6, 0x9D84, // <cjk>
+    0x63C9, 0x9D86, // <cjk>
+    0x63CF, 0x9560, // <cjk>
+    0x63D0, 0x92F1, // <cjk>
+    0x63D2, 0x9D87, // <cjk>
+    0x63D6, 0x974B, // <cjk>
+    0x63DA, 0x9767, // <cjk>
+    0x63DB, 0x8AB7, // <cjk>
+    0x63E1, 0x88AC, // <cjk>
+    0x63E3, 0x9D85, // <cjk>
+    0x63E9, 0x9D82, // <cjk>
+    0x63EE, 0x8AF6, // <cjk>
+    0x63F4, 0x8987, // <cjk>
+    0x63F6, 0x9D88, // <cjk>
+    0x63FA, 0x9768, // <cjk>
+    0x6406, 0x9D8C, // <cjk>
+    0x640D, 0x91B9, // <cjk>
+    0x640F, 0x9D93, // <cjk>
+    0x6413, 0x9D8D, // <cjk>
+    0x6416, 0x9D8A, // <cjk>
+    0x6417, 0x9D91, // <cjk>
+    0x641C, 0x9D72, // <cjk>
+    0x6426, 0x9D8E, // <cjk>
+    0x6428, 0x9D92, // <cjk>
+    0x642C, 0x94C0, // <cjk>
+    0x642D, 0x938B, // <cjk>
+    0x6434, 0x9D8B, // <cjk>
+    0x6436, 0x9D8F, // <cjk>
+    0x643A, 0x8C67, // <cjk>
+    0x643E, 0x8DEF, // <cjk>
+    0x6442, 0x90DB, // <cjk>
+    0x644E, 0x9D97, // <cjk>
+    0x6458, 0x9345, // <cjk>
+    0x6467, 0x9D94, // <cjk>
+    0x6469, 0x9680, // <cjk>
+    0x646F, 0x9D95, // <cjk>
+    0x6476, 0x9D96, // <cjk>
+    0x6478, 0x96CC, // <cjk>
+    0x647A, 0x90A0, // <cjk>
+    0x6483, 0x8C82, // <cjk>
+    0x6488, 0x9D9D, // <cjk>
+    0x6492, 0x8E54, // <cjk>
+    0x6493, 0x9D9A, // <cjk>
+    0x6495, 0x9D99, // <cjk>
+    0x649A, 0x9451, // <cjk>
+    0x649E, 0x93B3, // <cjk>
+    0x64A4, 0x9350, // <cjk>
+    0x64A5, 0x9D9B, // <cjk>
+    0x64A9, 0x9D9C, // <cjk>
+    0x64AB, 0x958F, // <cjk>
+    0x64AD, 0x9464, // <cjk>
+    0x64AE, 0x8E42, // <cjk>
+    0x64B0, 0x90EF, // <cjk>
+    0x64B2, 0x966F, // <cjk>
+    0x64B9, 0x8A68, // <cjk>
+    0x64BB, 0x9DA3, // <cjk>
+    0x64BC, 0x9D9E, // <cjk>
+    0x64C1, 0x9769, // <cjk>
+    0x64C2, 0x9DA5, // <cjk>
+    0x64C5, 0x9DA1, // <cjk>
+    0x64C7, 0x9DA2, // <cjk>
+    0x64CD, 0x9180, // <cjk>
+    0x64D2, 0x9DA0, // <cjk>
+    0x64D4, 0x9D5E, // <cjk>
+    0x64D8, 0x9DA4, // <cjk>
+    0x64DA, 0x9D9F, // <cjk>
+    0x64E0, 0x9DA9, // <cjk>
+    0x64E1, 0x9DAA, // <cjk>
+    0x64E2, 0x9346, // <cjk>
+    0x64E3, 0x9DAC, // <cjk>
+    0x64E6, 0x8E43, // <cjk>
+    0x64E7, 0x9DA7, // <cjk>
+    0x64EF, 0x9DAD, // <cjk>
+    0x64F1, 0x9DA6, // <cjk>
+    0x64F2, 0x9DB1, // <cjk>
+    0x64F4, 0x9DB0, // <cjk>
+    0x64F6, 0x9DAF, // <cjk>
+    0x64FA, 0x9DB2, // <cjk>
+    0x64FD, 0x9DB4, // <cjk>
+    0x64FE, 0x8FEF, // <cjk>
+    0x6500, 0x9DB3, // <cjk>
+    0x6505, 0x9DB7, // <cjk>
+    0x6518, 0x9DB5, // <cjk>
+    0x651C, 0x9DB6, // <cjk>
+    0x651D, 0x9D90, // <cjk>
+    0x6523, 0x9DB9, // <cjk>
+    0x6524, 0x9DB8, // <cjk>
+    0x652A, 0x9D98, // <cjk>
+    0x652B, 0x9DBA, // <cjk>
+    0x652C, 0x9DAE, // <cjk>
+    0x652F, 0x8E78, // <cjk>
+    0x6534, 0x9DBB, // <cjk>
+    0x6535, 0x9DBC, // <cjk>
+    0x6536, 0x9DBE, // <cjk>
+    0x6537, 0x9DBD, // <cjk>
+    0x6538, 0x9DBF, // <cjk>
+    0x6539, 0x89FC, // <cjk>
+    0x653B, 0x8D55, // <cjk>
+    0x653E, 0x95FA, // <cjk>
+    0x653F, 0x90AD, // <cjk>
+    0x6545, 0x8CCC, // <cjk>
+    0x6548, 0x9DC1, // <cjk>
+    0x654D, 0x9DC4, // <cjk>
+    0x654F, 0x9571, // <cjk>
+    0x6551, 0x8B7E, // <cjk>
+    0x6555, 0x9DC3, // <cjk>
+    0x6556, 0x9DC2, // <cjk>
+    0x6557, 0x9473, // <cjk>
+    0x6558, 0x9DC5, // <cjk>
+    0x6559, 0x8BB3, // <cjk>
+    0x655D, 0x9DC7, // <cjk>
+    0x655E, 0x9DC6, // <cjk>
+    0x6562, 0x8AB8, // <cjk>
+    0x6563, 0x8E55, // <cjk>
+    0x6566, 0x93D6, // <cjk>
+    0x656C, 0x8C68, // <cjk>
+    0x6570, 0x9094, // <cjk>
+    0x6572, 0x9DC8, // <cjk>
+    0x6574, 0x90AE, // <cjk>
+    0x6575, 0x9347, // <cjk>
+    0x6577, 0x957E, // <cjk>
+    0x6578, 0x9DC9, // <cjk>
+    0x6582, 0x9DCA, // <cjk>
+    0x6583, 0x9DCB, // <cjk>
+    0x6587, 0x95B6, // <cjk>
+    0x6588, 0x9B7C, // <cjk>
+    0x6589, 0x90C4, // <cjk>
+    0x658C, 0x956B, // <cjk>
+    0x658E, 0x8DD6, // <cjk>
+    0x6590, 0x94E3, // <cjk>
+    0x6591, 0x94C1, // <cjk>
+    0x6597, 0x936C, // <cjk>
+    0x6599, 0x97BF, // <cjk>
+    0x659B, 0x9DCD, // <cjk>
+    0x659C, 0x8ECE, // <cjk>
+    0x659F, 0x9DCE, // <cjk>
+    0x65A1, 0x88B4, // <cjk>
+    0x65A4, 0x8BD2, // <cjk>
+    0x65A5, 0x90CB, // <cjk>
+    0x65A7, 0x9580, // <cjk>
+    0x65AB, 0x9DCF, // <cjk>
+    0x65AC, 0x8E61, // <cjk>
+    0x65AD, 0x9266, // <cjk>
+    0x65AF, 0x8E7A, // <cjk>
+    0x65B0, 0x9056, // <cjk>
+    0x65B7, 0x9DD0, // <cjk>
+    0x65B9, 0x95FB, // <cjk>
+    0x65BC, 0x8997, // <cjk>
+    0x65BD, 0x8E7B, // <cjk>
+    0x65C1, 0x9DD3, // <cjk>
+    0x65C3, 0x9DD1, // <cjk>
+    0x65C4, 0x9DD4, // <cjk>
+    0x65C5, 0x97B7, // <cjk>
+    0x65C6, 0x9DD2, // <cjk>
+    0x65CB, 0x90F9, // <cjk>
+    0x65CC, 0x9DD5, // <cjk>
+    0x65CF, 0x91B0, // <cjk>
+    0x65D2, 0x9DD6, // <cjk>
+    0x65D7, 0x8AF8, // <cjk>
+    0x65D9, 0x9DD8, // <cjk>
+    0x65DB, 0x9DD7, // <cjk>
+    0x65E0, 0x9DD9, // <cjk>
+    0x65E1, 0x9DDA, // <cjk>
+    0x65E2, 0x8AF9, // <cjk>
+    0x65E5, 0x93FA, // <cjk>
+    0x65E6, 0x9255, // <cjk>
+    0x65E7, 0x8B8C, // <cjk>
+    0x65E8, 0x8E7C, // <cjk>
+    0x65E9, 0x9181, // <cjk>
+    0x65EC, 0x8F7B, // <cjk>
+    0x65ED, 0x88AE, // <cjk>
+    0x65F1, 0x9DDB, // <cjk>
+    0x65FA, 0x89A0, // <cjk>
+    0x65FB, 0x9DDF, // <cjk>
+    0x6602, 0x8D56, // <cjk>
+    0x6603, 0x9DDE, // <cjk>
+    0x6606, 0x8DA9, // <cjk>
+    0x6607, 0x8FB8, // <cjk>
+    0x660A, 0x9DDD, // <cjk>
+    0x660C, 0x8FB9, // <cjk>
+    0x660E, 0x96BE, // <cjk>
+    0x660F, 0x8DA8, // <cjk>
+    0x6613, 0x88D5, // <cjk>
+    0x6614, 0x90CC, // <cjk>
+    0x661C, 0x9DE4, // <cjk>
+    0x661F, 0x90AF, // <cjk>
+    0x6620, 0x8966, // <cjk>
+    0x6625, 0x8F74, // <cjk>
+    0x6627, 0x9686, // <cjk>
+    0x6628, 0x8DF0, // <cjk>
+    0x662D, 0x8FBA, // <cjk>
+    0x662F, 0x90A5, // <cjk>
+    0x6634, 0x9DE3, // <cjk>
+    0x6635, 0x9DE1, // <cjk>
+    0x6636, 0x9DE2, // <cjk>
+    0x663C, 0x928B, // <cjk>
+    0x663F, 0x9E45, // <cjk>
+    0x6641, 0x9DE8, // <cjk>
+    0x6642, 0x8E9E, // <cjk>
+    0x6643, 0x8D57, // <cjk>
+    0x6644, 0x9DE6, // <cjk>
+    0x6649, 0x9DE7, // <cjk>
+    0x664B, 0x9057, // <cjk>
+    0x664F, 0x9DE5, // <cjk>
+    0x6652, 0x8E4E, // <cjk>
+    0x665D, 0x9DEA, // <cjk>
+    0x665E, 0x9DE9, // <cjk>
+    0x665F, 0x9DEE, // <cjk>
+    0x6662, 0x9DEF, // <cjk>
+    0x6664, 0x9DEB, // <cjk>
+    0x6666, 0x8A41, // <cjk>
+    0x6667, 0x9DEC, // <cjk>
+    0x6668, 0x9DED, // <cjk>
+    0x6669, 0x94D3, // <cjk>
+    0x666E, 0x9581, // <cjk>
+    0x666F, 0x8C69, // <cjk>
+    0x6670, 0x9DF0, // <cjk>
+    0x6674, 0x90B0, // <cjk>
+    0x6676, 0x8FBB, // <cjk>
+    0x667A, 0x9271, // <cjk>
+    0x6681, 0x8BC5, // <cjk>
+    0x6683, 0x9DF1, // <cjk>
+    0x6684, 0x9DF5, // <cjk>
+    0x6687, 0x89C9, // <cjk>
+    0x6688, 0x9DF2, // <cjk>
+    0x6689, 0x9DF4, // <cjk>
+    0x668E, 0x9DF3, // <cjk>
+    0x6691, 0x8F8B, // <cjk>
+    0x6696, 0x9267, // <cjk>
+    0x6697, 0x88C3, // <cjk>
+    0x6698, 0x9DF6, // <cjk>
+    0x669D, 0x9DF7, // <cjk>
+    0x66A2, 0x92A8, // <cjk>
+    0x66A6, 0x97EF, // <cjk>
+    0x66AB, 0x8E62, // <cjk>
+    0x66AE, 0x95E9, // <cjk>
+    0x66B4, 0x965C, // <cjk>
+    0x66B8, 0x9E41, // <cjk>
+    0x66B9, 0x9DF9, // <cjk>
+    0x66BC, 0x9DFC, // <cjk>
+    0x66BE, 0x9DFB, // <cjk>
+    0x66C1, 0x9DF8, // <cjk>
+    0x66C4, 0x9E40, // <cjk>
+    0x66C7, 0x93DC, // <cjk>
+    0x66C9, 0x9DFA, // <cjk>
+    0x66D6, 0x9E42, // <cjk>
+    0x66D9, 0x8F8C, // <cjk>
+    0x66DA, 0x9E43, // <cjk>
+    0x66DC, 0x976A, // <cjk>
+    0x66DD, 0x9498, // <cjk>
+    0x66E0, 0x9E44, // <cjk>
+    0x66E6, 0x9E46, // <cjk>
+    0x66E9, 0x9E47, // <cjk>
+    0x66F0, 0x9E48, // <cjk>
+    0x66F2, 0x8BC8, // <cjk>
+    0x66F3, 0x8967, // <cjk>
+    0x66F4, 0x8D58, // <cjk>
+    0x66F5, 0x9E49, // <cjk>
+    0x66F7, 0x9E4A, // <cjk>
+    0x66F8, 0x8F91, // <cjk>
+    0x66F9, 0x9182, // <cjk>
+    0x66FC, 0x99D6, // <cjk>
+    0x66FD, 0x915D, // <cjk>
+    0x66FE, 0x915C, // <cjk>
+    0x66FF, 0x91D6, // <cjk>
+    0x6700, 0x8DC5, // <cjk>
+    0x6703, 0x98F0, // <cjk>
+    0x6708, 0x8C8E, // <cjk>
+    0x6709, 0x974C, // <cjk>
+    0x670B, 0x95FC, // <cjk>
+    0x670D, 0x959E, // <cjk>
+    0x670F, 0x9E4B, // <cjk>
+    0x6714, 0x8DF1, // <cjk>
+    0x6715, 0x92BD, // <cjk>
+    0x6716, 0x9E4C, // <cjk>
+    0x6717, 0x984E, // <cjk>
+    0x671B, 0x965D, // <cjk>
+    0x671D, 0x92A9, // <cjk>
+    0x671E, 0x9E4D, // <cjk>
+    0x671F, 0x8AFA, // <cjk>
+    0x6726, 0x9E4E, // <cjk>
+    0x6727, 0x9E4F, // <cjk>
+    0x6728, 0x96D8, // <cjk>
+    0x672A, 0x96A2, // <cjk>
+    0x672B, 0x9696, // <cjk>
+    0x672C, 0x967B, // <cjk>
+    0x672D, 0x8E44, // <cjk>
+    0x672E, 0x9E51, // <cjk>
+    0x6731, 0x8EE9, // <cjk>
+    0x6734, 0x9670, // <cjk>
+    0x6736, 0x9E53, // <cjk>
+    0x6737, 0x9E56, // <cjk>
+    0x6738, 0x9E55, // <cjk>
+    0x673A, 0x8AF7, // <cjk>
+    0x673D, 0x8B80, // <cjk>
+    0x673F, 0x9E52, // <cjk>
+    0x6741, 0x9E54, // <cjk>
+    0x6746, 0x9E57, // <cjk>
+    0x6749, 0x9099, // <cjk>
+    0x674E, 0x979B, // <cjk>
+    0x674F, 0x88C7, // <cjk>
+    0x6750, 0x8DDE, // <cjk>
+    0x6751, 0x91BA, // <cjk>
+    0x6753, 0x8EDB, // <cjk>
+    0x6756, 0x8FF1, // <cjk>
+    0x6759, 0x9E5A, // <cjk>
+    0x675C, 0x936D, // <cjk>
+    0x675E, 0x9E58, // <cjk>
+    0x675F, 0x91A9, // <cjk>
+    0x6760, 0x9E59, // <cjk>
+    0x6761, 0x8FF0, // <cjk>
+    0x6762, 0x96DB, // <cjk>
+    0x6764, 0x9E5C, // <cjk>
+    0x6765, 0x9788, // <cjk>
+    0x676A, 0x9E61, // <cjk>
+    0x676D, 0x8D59, // <cjk>
+    0x676F, 0x9474, // <cjk>
+    0x6770, 0x9E5E, // <cjk>
+    0x6771, 0x938C, // <cjk>
+    0x6772, 0x9DDC, // <cjk>
+    0x6773, 0x9DE0, // <cjk>
+    0x6775, 0x8B6E, // <cjk>
+    0x6777, 0x9466, // <cjk>
+    0x677C, 0x9E60, // <cjk>
+    0x677E, 0x8FBC, // <cjk>
+    0x677F, 0x94C2, // <cjk>
+    0x6785, 0x9E66, // <cjk>
+    0x6787, 0x94F8, // <cjk>
+    0x6789, 0x9E5D, // <cjk>
+    0x678B, 0x9E63, // <cjk>
+    0x678C, 0x9E62, // <cjk>
+    0x6790, 0x90CD, // <cjk>
+    0x6795, 0x968D, // <cjk>
+    0x6797, 0x97D1, // <cjk>
+    0x679A, 0x9687, // <cjk>
+    0x679C, 0x89CA, // <cjk>
+    0x679D, 0x8E7D, // <cjk>
+    0x67A0, 0x9867, // <cjk>
+    0x67A1, 0x9E65, // <cjk>
+    0x67A2, 0x9095, // <cjk>
+    0x67A6, 0x9E64, // <cjk>
+    0x67A9, 0x9E5F, // <cjk>
+    0x67AF, 0x8CCD, // <cjk>
+    0x67B3, 0x9E6B, // <cjk>
+    0x67B4, 0x9E69, // <cjk>
+    0x67B6, 0x89CB, // <cjk>
+    0x67B7, 0x9E67, // <cjk>
+    0x67B8, 0x9E6D, // <cjk>
+    0x67B9, 0x9E73, // <cjk>
+    0x67C1, 0x91C6, // <cjk>
+    0x67C4, 0x95BF, // <cjk>
+    0x67C6, 0x9E75, // <cjk>
+    0x67CA, 0x9541, // <cjk>
+    0x67CE, 0x9E74, // <cjk>
+    0x67CF, 0x9490, // <cjk>
+    0x67D0, 0x965E, // <cjk>
+    0x67D1, 0x8AB9, // <cjk>
+    0x67D3, 0x90F5, // <cjk>
+    0x67D4, 0x8F5F, // <cjk>
+    0x67D8, 0x92D1, // <cjk>
+    0x67DA, 0x974D, // <cjk>
+    0x67DD, 0x9E70, // <cjk>
+    0x67DE, 0x9E6F, // <cjk>
+    0x67E2, 0x9E71, // <cjk>
+    0x67E4, 0x9E6E, // <cjk>
+    0x67E7, 0x9E76, // <cjk>
+    0x67E9, 0x9E6C, // <cjk>
+    0x67EC, 0x9E6A, // <cjk>
+    0x67EE, 0x9E72, // <cjk>
+    0x67EF, 0x9E68, // <cjk>
+    0x67F1, 0x928C, // <cjk>
+    0x67F3, 0x96F6, // <cjk>
+    0x67F4, 0x8EC4, // <cjk>
+    0x67F5, 0x8DF2, // <cjk>
+    0x67FB, 0x8DB8, // <cjk>
+    0x67FE, 0x968F, // <cjk>
+    0x67FF, 0x8A60, // <cjk>
+    0x6802, 0x92CC, // <cjk>
+    0x6803, 0x93C8, // <cjk>
+    0x6804, 0x8968, // <cjk>
+    0x6813, 0x90F0, // <cjk>
+    0x6816, 0x90B2, // <cjk>
+    0x6817, 0x8C49, // <cjk>
+    0x681E, 0x9E78, // <cjk>
+    0x6821, 0x8D5A, // <cjk>
+    0x6822, 0x8A9C, // <cjk>
+    0x6829, 0x9E7A, // <cjk>
+    0x682A, 0x8A94, // <cjk>
+    0x682B, 0x9E81, // <cjk>
+    0x6832, 0x9E7D, // <cjk>
+    0x6834, 0x90F1, // <cjk>
+    0x6838, 0x8A6A, // <cjk>
+    0x6839, 0x8DAA, // <cjk>
+    0x683C, 0x8A69, // <cjk>
+    0x683D, 0x8DCD, // <cjk>
+    0x6840, 0x9E7B, // <cjk>
+    0x6841, 0x8C85, // <cjk>
+    0x6842, 0x8C6A, // <cjk>
+    0x6843, 0x938D, // <cjk>
+    0x6846, 0x9E79, // <cjk>
+    0x6848, 0x88C4, // <cjk>
+    0x684D, 0x9E7C, // <cjk>
+    0x684E, 0x9E7E, // <cjk>
+    0x6850, 0x8BCB, // <cjk>
+    0x6851, 0x8C4B, // <cjk>
+    0x6853, 0x8ABA, // <cjk>
+    0x6854, 0x8B6A, // <cjk>
+    0x6859, 0x9E82, // <cjk>
+    0x685C, 0x8DF7, // <cjk>
+    0x685D, 0x9691, // <cjk>
+    0x685F, 0x8E56, // <cjk>
+    0x6863, 0x9E83, // <cjk>
+    0x6867, 0x954F, // <cjk>
+    0x6874, 0x9E8F, // <cjk>
+    0x6876, 0x89B1, // <cjk>
+    0x6877, 0x9E84, // <cjk>
+    0x687E, 0x9E95, // <cjk>
+    0x687F, 0x9E85, // <cjk>
+    0x6881, 0x97C0, // <cjk>
+    0x6883, 0x9E8C, // <cjk>
+    0x6885, 0x947E, // <cjk>
+    0x688D, 0x9E94, // <cjk>
+    0x688F, 0x9E87, // <cjk>
+    0x6893, 0x88B2, // <cjk>
+    0x6894, 0x9E89, // <cjk>
+    0x689B, 0x9E8B, // <cjk>
+    0x689D, 0x9E8A, // <cjk>
+    0x689F, 0x9E86, // <cjk>
+    0x68A0, 0x9E91, // <cjk>
+    0x68A2, 0x8FBD, // <cjk>
+    0x68A6, 0x9AEB, // <cjk>
+    0x68A7, 0x8CE6, // <cjk>
+    0x68A8, 0x979C, // <cjk>
+    0x68AD, 0x9E88, // <cjk>
+    0x68AF, 0x92F2, // <cjk>
+    0x68B0, 0x8A42, // <cjk>
+    0x68B1, 0x8DAB, // <cjk>
+    0x68B3, 0x9E80, // <cjk>
+    0x68B5, 0x9E90, // <cjk>
+    0x68B6, 0x8A81, // <cjk>
+    0x68B9, 0x9E8E, // <cjk>
+    0x68BA, 0x9E92, // <cjk>
+    0x68BC, 0x938E, // <cjk>
+    0x68C4, 0x8AFC, // <cjk>
+    0x68C6, 0x9EB0, // <cjk>
+    0x68C9, 0x96C7, // <cjk>
+    0x68CA, 0x9E97, // <cjk>
+    0x68CB, 0x8AFB, // <cjk>
+    0x68CD, 0x9E9E, // <cjk>
+    0x68D2, 0x965F, // <cjk>
+    0x68D4, 0x9E9F, // <cjk>
+    0x68D5, 0x9EA1, // <cjk>
+    0x68D7, 0x9EA5, // <cjk>
+    0x68D8, 0x9E99, // <cjk>
+    0x68DA, 0x9249, // <cjk>
+    0x68DF, 0x938F, // <cjk>
+    0x68E0, 0x9EA9, // <cjk>
+    0x68E1, 0x9E9C, // <cjk>
+    0x68E3, 0x9EA6, // <cjk>
+    0x68E7, 0x9EA0, // <cjk>
+    0x68EE, 0x9058, // <cjk>
+    0x68EF, 0x9EAA, // <cjk>
+    0x68F2, 0x90B1, // <cjk>
+    0x68F9, 0x9EA8, // <cjk>
+    0x68FA, 0x8ABB, // <cjk>
+    0x6900, 0x986F, // <cjk>
+    0x6901, 0x9E96, // <cjk>
+    0x6904, 0x9EA4, // <cjk>
+    0x6905, 0x88D6, // <cjk>
+    0x6908, 0x9E98, // <cjk>
+    0x690B, 0x96B8, // <cjk>
+    0x690C, 0x9E9D, // <cjk>
+    0x690D, 0x9041, // <cjk>
+    0x690E, 0x92C5, // <cjk>
+    0x690F, 0x9E93, // <cjk>
+    0x6912, 0x9EA3, // <cjk>
+    0x6919, 0x909A, // <cjk>
+    0x691A, 0x9EAD, // <cjk>
+    0x691B, 0x8A91, // <cjk>
+    0x691C, 0x8C9F, // <cjk>
+    0x6921, 0x9EAF, // <cjk>
+    0x6922, 0x9E9A, // <cjk>
+    0x6923, 0x9EAE, // <cjk>
+    0x6925, 0x9EA7, // <cjk>
+    0x6926, 0x9E9B, // <cjk>
+    0x6928, 0x9EAB, // <cjk>
+    0x692A, 0x9EAC, // <cjk>
+    0x6930, 0x9EBD, // <cjk>
+    0x6934, 0x93CC, // <cjk>
+    0x6936, 0x9EA2, // <cjk>
+    0x6939, 0x9EB9, // <cjk>
+    0x693D, 0x9EBB, // <cjk>
+    0x693F, 0x92D6, // <cjk>
+    0x694A, 0x976B, // <cjk>
+    0x6953, 0x9596, // <cjk>
+    0x6954, 0x9EB6, // <cjk>
+    0x6955, 0x91C8, // <cjk>
+    0x6959, 0x9EBC, // <cjk>
+    0x695A, 0x915E, // <cjk>
+    0x695C, 0x9EB3, // <cjk>
+    0x695D, 0x9EC0, // <cjk>
+    0x695E, 0x9EBF, // <cjk>
+    0x6960, 0x93ED, // <cjk>
+    0x6961, 0x9EBE, // <cjk>
+    0x6962, 0x93E8, // <cjk>
+    0x696A, 0x9EC2, // <cjk>
+    0x696B, 0x9EB5, // <cjk>
+    0x696D, 0x8BC6, // <cjk>
+    0x696E, 0x9EB8, // <cjk>
+    0x696F, 0x8F7C, // <cjk>
+    0x6973, 0x9480, // <cjk>
+    0x6974, 0x9EBA, // <cjk>
+    0x6975, 0x8BC9, // <cjk>
+    0x6977, 0x9EB2, // <cjk>
+    0x6978, 0x9EB4, // <cjk>
+    0x6979, 0x9EB1, // <cjk>
+    0x697C, 0x984F, // <cjk>
+    0x697D, 0x8A79, // <cjk>
+    0x697E, 0x9EB7, // <cjk>
+    0x6981, 0x9EC1, // <cjk>
+    0x6982, 0x8A54, // <cjk>
+    0x698A, 0x8DE5, // <cjk>
+    0x698E, 0x897C, // <cjk>
+    0x6991, 0x9ED2, // <cjk>
+    0x6994, 0x9850, // <cjk>
+    0x6995, 0x9ED5, // <cjk>
+    0x699B, 0x9059, // <cjk>
+    0x699C, 0x9ED4, // <cjk>
+    0x69A0, 0x9ED3, // <cjk>
+    0x69A7, 0x9ED0, // <cjk>
+    0x69AE, 0x9EC4, // <cjk>
+    0x69B1, 0x9EE1, // <cjk>
+    0x69B2, 0x9EC3, // <cjk>
+    0x69B4, 0x9ED6, // <cjk>
+    0x69BB, 0x9ECE, // <cjk>
+    0x69BE, 0x9EC9, // <cjk>
+    0x69BF, 0x9EC6, // <cjk>
+    0x69C1, 0x9EC7, // <cjk>
+    0x69C3, 0x9ECF, // <cjk>
+    0x69C7, 0xEAA0, // <cjk>
+    0x69CA, 0x9ECC, // <cjk>
+    0x69CB, 0x8D5C, // <cjk>
+    0x69CC, 0x92C6, // <cjk>
+    0x69CD, 0x9184, // <cjk>
+    0x69CE, 0x9ECA, // <cjk>
+    0x69D0, 0x9EC5, // <cjk>
+    0x69D3, 0x9EC8, // <cjk>
+    0x69D8, 0x976C, // <cjk>
+    0x69D9, 0x968A, // <cjk>
+    0x69DD, 0x9ECD, // <cjk>
+    0x69DE, 0x9ED7, // <cjk>
+    0x69E7, 0x9EDF, // <cjk>
+    0x69E8, 0x9ED8, // <cjk>
+    0x69EB, 0x9EE5, // <cjk>
+    0x69ED, 0x9EE3, // <cjk>
+    0x69F2, 0x9EDE, // <cjk>
+    0x69F9, 0x9EDD, // <cjk>
+    0x69FB, 0x92CE, // <cjk>
+    0x69FD, 0x9185, // <cjk>
+    0x69FF, 0x9EDB, // <cjk>
+    0x6A02, 0x9ED9, // <cjk>
+    0x6A05, 0x9EE0, // <cjk>
+    0x6A0A, 0x9EE6, // <cjk>
+    0x6A0B, 0x94F3, // <cjk>
+    0x6A0C, 0x9EEC, // <cjk>
+    0x6A12, 0x9EE7, // <cjk>
+    0x6A13, 0x9EEA, // <cjk>
+    0x6A14, 0x9EE4, // <cjk>
+    0x6A17, 0x9294, // <cjk>
+    0x6A19, 0x9557, // <cjk>
+    0x6A1B, 0x9EDA, // <cjk>
+    0x6A1E, 0x9EE2, // <cjk>
+    0x6A1F, 0x8FBE, // <cjk>
+    0x6A21, 0x96CD, // <cjk>
+    0x6A22, 0x9EF6, // <cjk>
+    0x6A23, 0x9EE9, // <cjk>
+    0x6A29, 0x8CA0, // <cjk>
+    0x6A2A, 0x89A1, // <cjk>
+    0x6A2B, 0x8A7E, // <cjk>
+    0x6A2E, 0x9ED1, // <cjk>
+    0x6A35, 0x8FBF, // <cjk>
+    0x6A36, 0x9EEE, // <cjk>
+    0x6A38, 0x9EF5, // <cjk>
+    0x6A39, 0x8EF7, // <cjk>
+    0x6A3A, 0x8A92, // <cjk>
+    0x6A3D, 0x924D, // <cjk>
+    0x6A44, 0x9EEB, // <cjk>
+    0x6A47, 0x9EF0, // <cjk>
+    0x6A48, 0x9EF4, // <cjk>
+    0x6A4B, 0x8BB4, // <cjk>
+    0x6A58, 0x8B6B, // <cjk>
+    0x6A59, 0x9EF2, // <cjk>
+    0x6A5F, 0x8B40, // <cjk>
+    0x6A61, 0x93C9, // <cjk>
+    0x6A62, 0x9EF1, // <cjk>
+    0x6A66, 0x9EF3, // <cjk>
+    0x6A72, 0x9EED, // <cjk>
+    0x6A78, 0x9EEF, // <cjk>
+    0x6A7F, 0x8A80, // <cjk>
+    0x6A80, 0x9268, // <cjk>
+    0x6A84, 0x9EFA, // <cjk>
+    0x6A8D, 0x9EF8, // <cjk>
+    0x6A8E, 0x8CE7, // <cjk>
+    0x6A90, 0x9EF7, // <cjk>
+    0x6A97, 0x9F40, // <cjk>
+    0x6A9C, 0x9E77, // <cjk>
+    0x6AA0, 0x9EF9, // <cjk>
+    0x6AA2, 0x9EFB, // <cjk>
+    0x6AA3, 0x9EFC, // <cjk>
+    0x6AAA, 0x9F4B, // <cjk>
+    0x6AAC, 0x9F47, // <cjk>
+    0x6AAE, 0x9E8D, // <cjk>
+    0x6AB3, 0x9F46, // <cjk>
+    0x6AB8, 0x9F45, // <cjk>
+    0x6ABB, 0x9F42, // <cjk>
+    0x6AC1, 0x9EE8, // <cjk>
+    0x6AC2, 0x9F44, // <cjk>
+    0x6AC3, 0x9F43, // <cjk>
+    0x6AD1, 0x9F49, // <cjk>
+    0x6AD3, 0x9845, // <cjk>
+    0x6ADA, 0x9F4C, // <cjk>
+    0x6ADB, 0x8BF9, // <cjk>
+    0x6ADE, 0x9F48, // <cjk>
+    0x6ADF, 0x9F4A, // <cjk>
+    0x6AE8, 0x94A5, // <cjk>
+    0x6AEA, 0x9F4D, // <cjk>
+    0x6AFA, 0x9F51, // <cjk>
+    0x6AFB, 0x9F4E, // <cjk>
+    0x6B04, 0x9793, // <cjk>
+    0x6B05, 0x9F4F, // <cjk>
+    0x6B0A, 0x9EDC, // <cjk>
+    0x6B12, 0x9F52, // <cjk>
+    0x6B16, 0x9F53, // <cjk>
+    0x6B1D, 0x8954, // <cjk>
+    0x6B1F, 0x9F55, // <cjk>
+    0x6B20, 0x8C87, // <cjk>
+    0x6B21, 0x8E9F, // <cjk>
+    0x6B23, 0x8BD3, // <cjk>
+    0x6B27, 0x89A2, // <cjk>
+    0x6B32, 0x977E, // <cjk>
+    0x6B37, 0x9F57, // <cjk>
+    0x6B38, 0x9F56, // <cjk>
+    0x6B39, 0x9F59, // <cjk>
+    0x6B3A, 0x8B5C, // <cjk>
+    0x6B3D, 0x8BD4, // <cjk>
+    0x6B3E, 0x8ABC, // <cjk>
+    0x6B43, 0x9F5C, // <cjk>
+    0x6B49, 0x9F5D, // <cjk>
+    0x6B4C, 0x89CC, // <cjk>
+    0x6B4E, 0x9256, // <cjk>
+    0x6B50, 0x9F5E, // <cjk>
+    0x6B53, 0x8ABD, // <cjk>
+    0x6B54, 0x9F60, // <cjk>
+    0x6B59, 0x9F5F, // <cjk>
+    0x6B5B, 0x9F61, // <cjk>
+    0x6B5F, 0x9F62, // <cjk>
+    0x6B61, 0x9F63, // <cjk>
+    0x6B62, 0x8E7E, // <cjk>
+    0x6B63, 0x90B3, // <cjk>
+    0x6B64, 0x8D9F, // <cjk>
+    0x6B66, 0x9590, // <cjk>
+    0x6B69, 0x95E0, // <cjk>
+    0x6B6A, 0x9863, // <cjk>
+    0x6B6F, 0x8E95, // <cjk>
+    0x6B73, 0x8DCE, // <cjk>
+    0x6B74, 0x97F0, // <cjk>
+    0x6B78, 0x9F64, // <cjk>
+    0x6B79, 0x9F65, // <cjk>
+    0x6B7B, 0x8E80, // <cjk>
+    0x6B7F, 0x9F66, // <cjk>
+    0x6B80, 0x9F67, // <cjk>
+    0x6B83, 0x9F69, // <cjk>
+    0x6B84, 0x9F68, // <cjk>
+    0x6B86, 0x9677, // <cjk>
+    0x6B89, 0x8F7D, // <cjk>
+    0x6B8A, 0x8EEA, // <cjk>
+    0x6B8B, 0x8E63, // <cjk>
+    0x6B8D, 0x9F6A, // <cjk>
+    0x6B95, 0x9F6C, // <cjk>
+    0x6B96, 0x9042, // <cjk>
+    0x6B98, 0x9F6B, // <cjk>
+    0x6B9E, 0x9F6D, // <cjk>
+    0x6BA4, 0x9F6E, // <cjk>
+    0x6BAA, 0x9F6F, // <cjk>
+    0x6BAB, 0x9F70, // <cjk>
+    0x6BAF, 0x9F71, // <cjk>
+    0x6BB1, 0x9F73, // <cjk>
+    0x6BB2, 0x9F72, // <cjk>
+    0x6BB3, 0x9F74, // <cjk>
+    0x6BB4, 0x89A3, // <cjk>
+    0x6BB5, 0x9269, // <cjk>
+    0x6BB7, 0x9F75, // <cjk>
+    0x6BBA, 0x8E45, // <cjk>
+    0x6BBB, 0x8A6B, // <cjk>
+    0x6BBC, 0x9F76, // <cjk>
+    0x6BBF, 0x9361, // <cjk>
+    0x6BC0, 0x9ACA, // <cjk>
+    0x6BC5, 0x8B42, // <cjk>
+    0x6BC6, 0x9F77, // <cjk>
+    0x6BCB, 0x9F78, // <cjk>
+    0x6BCD, 0x95EA, // <cjk>
+    0x6BCE, 0x9688, // <cjk>
+    0x6BD2, 0x93C5, // <cjk>
+    0x6BD3, 0x9F79, // <cjk>
+    0x6BD4, 0x94E4, // <cjk>
+    0x6BD8, 0x94F9, // <cjk>
+    0x6BDB, 0x96D1, // <cjk>
+    0x6BDF, 0x9F7A, // <cjk>
+    0x6BEB, 0x9F7C, // <cjk>
+    0x6BEC, 0x9F7B, // <cjk>
+    0x6BEF, 0x9F7E, // <cjk>
+    0x6BF3, 0x9F7D, // <cjk>
+    0x6C08, 0x9F81, // <cjk>
+    0x6C0F, 0x8E81, // <cjk>
+    0x6C11, 0x96AF, // <cjk>
+    0x6C13, 0x9F82, // <cjk>
+    0x6C14, 0x9F83, // <cjk>
+    0x6C17, 0x8B43, // <cjk>
+    0x6C1B, 0x9F84, // <cjk>
+    0x6C23, 0x9F86, // <cjk>
+    0x6C24, 0x9F85, // <cjk>
+    0x6C34, 0x9085, // <cjk>
+    0x6C37, 0x9558, // <cjk>
+    0x6C38, 0x8969, // <cjk>
+    0x6C3E, 0x94C3, // <cjk>
+    0x6C40, 0x92F3, // <cjk>
+    0x6C41, 0x8F60, // <cjk>
+    0x6C42, 0x8B81, // <cjk>
+    0x6C4E, 0x94C4, // <cjk>
+    0x6C50, 0x8EAC, // <cjk>
+    0x6C55, 0x9F88, // <cjk>
+    0x6C57, 0x8ABE, // <cjk>
+    0x6C5A, 0x8998, // <cjk>
+    0x6C5D, 0x93F0, // <cjk>
+    0x6C5E, 0x9F87, // <cjk>
+    0x6C5F, 0x8D5D, // <cjk>
+    0x6C60, 0x9272, // <cjk>
+    0x6C62, 0x9F89, // <cjk>
+    0x6C68, 0x9F91, // <cjk>
+    0x6C6A, 0x9F8A, // <cjk>
+    0x6C70, 0x91BF, // <cjk>
+    0x6C72, 0x8B82, // <cjk>
+    0x6C73, 0x9F92, // <cjk>
+    0x6C7A, 0x8C88, // <cjk>
+    0x6C7D, 0x8B44, // <cjk>
+    0x6C7E, 0x9F90, // <cjk>
+    0x6C81, 0x9F8E, // <cjk>
+    0x6C82, 0x9F8B, // <cjk>
+    0x6C83, 0x9780, // <cjk>
+    0x6C88, 0x92BE, // <cjk>
+    0x6C8C, 0x93D7, // <cjk>
+    0x6C8D, 0x9F8C, // <cjk>
+    0x6C90, 0x9F94, // <cjk>
+    0x6C92, 0x9F93, // <cjk>
+    0x6C93, 0x8C42, // <cjk>
+    0x6C96, 0x89AB, // <cjk>
+    0x6C99, 0x8DB9, // <cjk>
+    0x6C9A, 0x9F8D, // <cjk>
+    0x6C9B, 0x9F8F, // <cjk>
+    0x6CA1, 0x9676, // <cjk>
+    0x6CA2, 0x91F2, // <cjk>
+    0x6CAB, 0x9697, // <cjk>
+    0x6CAE, 0x9F9C, // <cjk>
+    0x6CB1, 0x9F9D, // <cjk>
+    0x6CB3, 0x89CD, // <cjk>
+    0x6CB8, 0x95A6, // <cjk>
+    0x6CB9, 0x96FB, // <cjk>
+    0x6CBA, 0x9F9F, // <cjk>
+    0x6CBB, 0x8EA1, // <cjk>
+    0x6CBC, 0x8FC0, // <cjk>
+    0x6CBD, 0x9F98, // <cjk>
+    0x6CBE, 0x9F9E, // <cjk>
+    0x6CBF, 0x8988, // <cjk>
+    0x6CC1, 0x8BB5, // <cjk>
+    0x6CC4, 0x9F95, // <cjk>
+    0x6CC5, 0x9F9A, // <cjk>
+    0x6CC9, 0x90F2, // <cjk>
+    0x6CCA, 0x9491, // <cjk>
+    0x6CCC, 0x94E5, // <cjk>
+    0x6CD3, 0x9F97, // <cjk>
+    0x6CD5, 0x9640, // <cjk>
+    0x6CD7, 0x9F99, // <cjk>
+    0x6CD9, 0x9FA2, // <cjk>
+    0x6CDB, 0x9FA0, // <cjk>
+    0x6CDD, 0x9F9B, // <cjk>
+    0x6CE1, 0x9641, // <cjk>
+    0x6CE2, 0x9467, // <cjk>
+    0x6CE3, 0x8B83, // <cjk>
+    0x6CE5, 0x9344, // <cjk>
+    0x6CE8, 0x928D, // <cjk>
+    0x6CEA, 0x9FA3, // <cjk>
+    0x6CEF, 0x9FA1, // <cjk>
+    0x6CF0, 0x91D7, // <cjk>
+    0x6CF1, 0x9F96, // <cjk>
+    0x6CF3, 0x896A, // <cjk>
+    0x6D0B, 0x976D, // <cjk>
+    0x6D0C, 0x9FAE, // <cjk>
+    0x6D12, 0x9FAD, // <cjk>
+    0x6D17, 0x90F4, // <cjk>
+    0x6D19, 0x9FAA, // <cjk>
+    0x6D1B, 0x978C, // <cjk>
+    0x6D1E, 0x93B4, // <cjk>
+    0x6D1F, 0x9FA4, // <cjk>
+    0x6D25, 0x92C3, // <cjk>
+    0x6D29, 0x896B, // <cjk>
+    0x6D2A, 0x8D5E, // <cjk>
+    0x6D2B, 0x9FA7, // <cjk>
+    0x6D32, 0x8F46, // <cjk>
+    0x6D33, 0x9FAC, // <cjk>
+    0x6D35, 0x9FAB, // <cjk>
+    0x6D36, 0x9FA6, // <cjk>
+    0x6D38, 0x9FA9, // <cjk>
+    0x6D3B, 0x8A88, // <cjk>
+    0x6D3D, 0x9FA8, // <cjk>
+    0x6D3E, 0x9468, // <cjk>
+    0x6D41, 0x97AC, // <cjk>
+    0x6D44, 0x8FF2, // <cjk>
+    0x6D45, 0x90F3, // <cjk>
+    0x6D59, 0x9FB4, // <cjk>
+    0x6D5A, 0x9FB2, // <cjk>
+    0x6D5C, 0x956C, // <cjk>
+    0x6D63, 0x9FAF, // <cjk>
+    0x6D64, 0x9FB1, // <cjk>
+    0x6D66, 0x8959, // <cjk>
+    0x6D69, 0x8D5F, // <cjk>
+    0x6D6A, 0x9851, // <cjk>
+    0x6D6C, 0x8A5C, // <cjk>
+    0x6D6E, 0x9582, // <cjk>
+    0x6D74, 0x9781, // <cjk>
+    0x6D77, 0x8A43, // <cjk>
+    0x6D78, 0x905A, // <cjk>
+    0x6D79, 0x9FB3, // <cjk>
+    0x6D85, 0x9FB8, // <cjk>
+    0x6D88, 0x8FC1, // <cjk>
+    0x6D8C, 0x974F, // <cjk>
+    0x6D8E, 0x9FB5, // <cjk>
+    0x6D93, 0x9FB0, // <cjk>
+    0x6D95, 0x9FB6, // <cjk>
+    0x6D99, 0x97DC, // <cjk>
+    0x6D9B, 0x9393, // <cjk>
+    0x6D9C, 0x93C0, // <cjk>
+    0x6DAF, 0x8A55, // <cjk>
+    0x6DB2, 0x8974, // <cjk>
+    0x6DB5, 0x9FBC, // <cjk>
+    0x6DB8, 0x9FBF, // <cjk>
+    0x6DBC, 0x97C1, // <cjk>
+    0x6DC0, 0x9784, // <cjk>
+    0x6DC5, 0x9FC6, // <cjk>
+    0x6DC6, 0x9FC0, // <cjk>
+    0x6DC7, 0x9FBD, // <cjk>
+    0x6DCB, 0x97D2, // <cjk>
+    0x6DCC, 0x9FC3, // <cjk>
+    0x6DD1, 0x8F69, // <cjk>
+    0x6DD2, 0x9FC5, // <cjk>
+    0x6DD5, 0x9FCA, // <cjk>
+    0x6DD8, 0x9391, // <cjk>
+    0x6DD9, 0x9FC8, // <cjk>
+    0x6DDE, 0x9FC2, // <cjk>
+    0x6DE1, 0x9257, // <cjk>
+    0x6DE4, 0x9FC9, // <cjk>
+    0x6DE6, 0x9FBE, // <cjk>
+    0x6DE8, 0x9FC4, // <cjk>
+    0x6DEA, 0x9FCB, // <cjk>
+    0x6DEB, 0x88FA, // <cjk>
+    0x6DEC, 0x9FC1, // <cjk>
+    0x6DEE, 0x9FCC, // <cjk>
+    0x6DF3, 0x8F7E, // <cjk>
+    0x6DF5, 0x95A3, // <cjk>
+    0x6DF7, 0x8DAC, // <cjk>
+    0x6DF9, 0x9FB9, // <cjk>
+    0x6DFA, 0x9FC7, // <cjk>
+    0x6DFB, 0x9359, // <cjk>
+    0x6E05, 0x90B4, // <cjk>
+    0x6E07, 0x8A89, // <cjk>
+    0x6E08, 0x8DCF, // <cjk>
+    0x6E09, 0x8FC2, // <cjk>
+    0x6E0A, 0x9FBB, // <cjk>
+    0x6E0B, 0x8F61, // <cjk>
+    0x6E13, 0x8C6B, // <cjk>
+    0x6E15, 0x9FBA, // <cjk>
+    0x6E19, 0x9FD0, // <cjk>
+    0x6E1A, 0x8F8D, // <cjk>
+    0x6E1B, 0x8CB8, // <cjk>
+    0x6E1D, 0x9FDF, // <cjk>
+    0x6E1F, 0x9FD9, // <cjk>
+    0x6E20, 0x8B94, // <cjk>
+    0x6E21, 0x936E, // <cjk>
+    0x6E23, 0x9FD4, // <cjk>
+    0x6E24, 0x9FDD, // <cjk>
+    0x6E25, 0x88AD, // <cjk>
+    0x6E26, 0x8951, // <cjk>
+    0x6E29, 0x89B7, // <cjk>
+    0x6E2B, 0x9FD6, // <cjk>
+    0x6E2C, 0x91AA, // <cjk>
+    0x6E2D, 0x9FCD, // <cjk>
+    0x6E2E, 0x9FCF, // <cjk>
+    0x6E2F, 0x8D60, // <cjk>
+    0x6E38, 0x9FE0, // <cjk>
+    0x6E3A, 0x9FDB, // <cjk>
+    0x6E3E, 0x9FD3, // <cjk>
+    0x6E43, 0x9FDA, // <cjk>
+    0x6E4A, 0x96A9, // <cjk>
+    0x6E4D, 0x9FD8, // <cjk>
+    0x6E4E, 0x9FDC, // <cjk>
+    0x6E56, 0x8CCE, // <cjk>
+    0x6E58, 0x8FC3, // <cjk>
+    0x6E5B, 0x9258, // <cjk>
+    0x6E5F, 0x9FD2, // <cjk>
+    0x6E67, 0x974E, // <cjk>
+    0x6E6B, 0x9FD5, // <cjk>
+    0x6E6E, 0x9FCE, // <cjk>
+    0x6E6F, 0x9392, // <cjk>
+    0x6E72, 0x9FD1, // <cjk>
+    0x6E76, 0x9FD7, // <cjk>
+    0x6E7E, 0x9870, // <cjk>
+    0x6E7F, 0x8EBC, // <cjk>
+    0x6E80, 0x969E, // <cjk>
+    0x6E82, 0x9FE1, // <cjk>
+    0x6E8C, 0x94AC, // <cjk>
+    0x6E8F, 0x9FED, // <cjk>
+    0x6E90, 0x8CB9, // <cjk>
+    0x6E96, 0x8F80, // <cjk>
+    0x6E98, 0x9FE3, // <cjk>
+    0x6E9C, 0x97AD, // <cjk>
+    0x6E9D, 0x8D61, // <cjk>
+    0x6E9F, 0x9FF0, // <cjk>
+    0x6EA2, 0x88EC, // <cjk>
+    0x6EA5, 0x9FEE, // <cjk>
+    0x6EAA, 0x9FE2, // <cjk>
+    0x6EAF, 0x9FE8, // <cjk>
+    0x6EB2, 0x9FEA, // <cjk>
+    0x6EB6, 0x976E, // <cjk>
+    0x6EB7, 0x9FE5, // <cjk>
+    0x6EBA, 0x934D, // <cjk>
+    0x6EBD, 0x9FE7, // <cjk>
+    0x6EC2, 0x9FEF, // <cjk>
+    0x6EC4, 0x9FE9, // <cjk>
+    0x6EC5, 0x96C5, // <cjk>
+    0x6EC9, 0x9FE4, // <cjk>
+    0x6ECB, 0x8EA0, // <cjk>
+    0x6ECC, 0x9FFC, // <cjk>
+    0x6ED1, 0x8A8A, // <cjk>
+    0x6ED3, 0x9FE6, // <cjk>
+    0x6ED4, 0x9FEB, // <cjk>
+    0x6ED5, 0x9FEC, // <cjk>
+    0x6EDD, 0x91EA, // <cjk>
+    0x6EDE, 0x91D8, // <cjk>
+    0x6EEC, 0x9FF4, // <cjk>
+    0x6EEF, 0x9FFA, // <cjk>
+    0x6EF2, 0x9FF8, // <cjk>
+    0x6EF4, 0x9348, // <cjk>
+    0x6EF7, 0xE042, // <cjk>
+    0x6EF8, 0x9FF5, // <cjk>
+    0x6EFE, 0x9FF6, // <cjk>
+    0x6EFF, 0x9FDE, // <cjk>
+    0x6F01, 0x8B99, // <cjk>
+    0x6F02, 0x9559, // <cjk>
+    0x6F06, 0x8EBD, // <cjk>
+    0x6F09, 0x8D97, // <cjk>
+    0x6F0F, 0x9852, // <cjk>
+    0x6F11, 0x9FF2, // <cjk>
+    0x6F13, 0xE041, // <cjk>
+    0x6F14, 0x8989, // <cjk>
+    0x6F15, 0x9186, // <cjk>
+    0x6F20, 0x9499, // <cjk>
+    0x6F22, 0x8ABF, // <cjk>
+    0x6F23, 0x97F8, // <cjk>
+    0x6F2B, 0x969F, // <cjk>
+    0x6F2C, 0x92D0, // <cjk>
+    0x6F31, 0x9FF9, // <cjk>
+    0x6F32, 0x9FFB, // <cjk>
+    0x6F38, 0x9151, // <cjk>
+    0x6F3E, 0xE040, // <cjk>
+    0x6F3F, 0x9FF7, // <cjk>
+    0x6F41, 0x9FF1, // <cjk>
+    0x6F45, 0x8AC1, // <cjk>
+    0x6F54, 0x8C89, // <cjk>
+    0x6F58, 0xE04E, // <cjk>
+    0x6F5B, 0xE049, // <cjk>
+    0x6F5C, 0x90F6, // <cjk>
+    0x6F5F, 0x8A83, // <cjk>
+    0x6F64, 0x8F81, // <cjk>
+    0x6F66, 0xE052, // <cjk>
+    0x6F6D, 0xE04B, // <cjk>
+    0x6F6E, 0x92AA, // <cjk>
+    0x6F6F, 0xE048, // <cjk>
+    0x6F70, 0x92D7, // <cjk>
+    0x6F74, 0xE06B, // <cjk>
+    0x6F78, 0xE045, // <cjk>
+    0x6F7A, 0xE044, // <cjk>
+    0x6F7C, 0xE04D, // <cjk>
+    0x6F80, 0xE047, // <cjk>
+    0x6F81, 0xE046, // <cjk>
+    0x6F82, 0xE04C, // <cjk>
+    0x6F84, 0x909F, // <cjk>
+    0x6F86, 0xE043, // <cjk>
+    0x6F8E, 0xE04F, // <cjk>
+    0x6F91, 0xE050, // <cjk>
+    0x6F97, 0x8AC0, // <cjk>
+    0x6FA1, 0xE055, // <cjk>
+    0x6FA3, 0xE054, // <cjk>
+    0x6FA4, 0xE056, // <cjk>
+    0x6FAA, 0xE059, // <cjk>
+    0x6FB1, 0x9362, // <cjk>
+    0x6FB3, 0xE053, // <cjk>
+    0x6FB9, 0xE057, // <cjk>
+    0x6FC0, 0x8C83, // <cjk>
+    0x6FC1, 0x91F7, // <cjk>
+    0x6FC2, 0xE051, // <cjk>
+    0x6FC3, 0x945A, // <cjk>
+    0x6FC6, 0xE058, // <cjk>
+    0x6FD4, 0xE05D, // <cjk>
+    0x6FD8, 0xE05E, // <cjk>
+    0x6FDB, 0xE061, // <cjk>
+    0x6FDF, 0xE05A, // <cjk>
+    0x6FE0, 0x8D8A, // <cjk>
+    0x6FE1, 0x9447, // <cjk>
+    0x6FE4, 0x9FB7, // <cjk>
+    0x6FEB, 0x9794, // <cjk>
+    0x6FEC, 0xE05C, // <cjk>
+    0x6FEE, 0xE060, // <cjk>
+    0x6FEF, 0x91F3, // <cjk>
+    0x6FF1, 0xE05F, // <cjk>
+    0x6FF3, 0xE04A, // <cjk>
+    0x6FF6, 0xE889, // <cjk>
+    0x6FFA, 0xE064, // <cjk>
+    0x6FFE, 0xE068, // <cjk>
+    0x7001, 0xE066, // <cjk>
+    0x7009, 0xE062, // <cjk>
+    0x700B, 0xE063, // <cjk>
+    0x700F, 0xE067, // <cjk>
+    0x7011, 0xE065, // <cjk>
+    0x7015, 0x956D, // <cjk>
+    0x7018, 0xE06D, // <cjk>
+    0x701A, 0xE06A, // <cjk>
+    0x701B, 0xE069, // <cjk>
+    0x701D, 0xE06C, // <cjk>
+    0x701E, 0x93D2, // <cjk>
+    0x701F, 0xE06E, // <cjk>
+    0x7026, 0x9295, // <cjk>
+    0x7027, 0x91EB, // <cjk>
+    0x702C, 0x90A3, // <cjk>
+    0x7030, 0xE06F, // <cjk>
+    0x7032, 0xE071, // <cjk>
+    0x703E, 0xE070, // <cjk>
+    0x704C, 0x9FF3, // <cjk>
+    0x7051, 0xE072, // <cjk>
+    0x7058, 0x93E5, // <cjk>
+    0x7063, 0xE073, // <cjk>
+    0x706B, 0x89CE, // <cjk>
+    0x706F, 0x9394, // <cjk>
+    0x7070, 0x8A44, // <cjk>
+    0x7078, 0x8B84, // <cjk>
+    0x707C, 0x8EDC, // <cjk>
+    0x707D, 0x8DD0, // <cjk>
+    0x7089, 0x9846, // <cjk>
+    0x708A, 0x9086, // <cjk>
+    0x708E, 0x898A, // <cjk>
+    0x7092, 0xE075, // <cjk>
+    0x7099, 0xE074, // <cjk>
+    0x70AC, 0xE078, // <cjk>
+    0x70AD, 0x9259, // <cjk>
+    0x70AE, 0xE07B, // <cjk>
+    0x70AF, 0xE076, // <cjk>
+    0x70B3, 0xE07A, // <cjk>
+    0x70B8, 0xE079, // <cjk>
+    0x70B9, 0x935F, // <cjk>
+    0x70BA, 0x88D7, // <cjk>
+    0x70C8, 0x97F3, // <cjk>
+    0x70CB, 0xE07D, // <cjk>
+    0x70CF, 0x8947, // <cjk>
+    0x70D9, 0xE080, // <cjk>
+    0x70DD, 0xE07E, // <cjk>
+    0x70DF, 0xE07C, // <cjk>
+    0x70F1, 0xE077, // <cjk>
+    0x70F9, 0x9642, // <cjk>
+    0x70FD, 0xE082, // <cjk>
+    0x7109, 0xE081, // <cjk>
+    0x7114, 0x898B, // <cjk>
+    0x7119, 0xE084, // <cjk>
+    0x711A, 0x95B0, // <cjk>
+    0x711C, 0xE083, // <cjk>
+    0x7121, 0x96B3, // <cjk>
+    0x7126, 0x8FC5, // <cjk>
+    0x7136, 0x9152, // <cjk>
+    0x713C, 0x8FC4, // <cjk>
+    0x7149, 0x97F9, // <cjk>
+    0x714C, 0xE08A, // <cjk>
+    0x714E, 0x90F7, // <cjk>
+    0x7155, 0xE086, // <cjk>
+    0x7156, 0xE08B, // <cjk>
+    0x7159, 0x898C, // <cjk>
+    0x7162, 0xE089, // <cjk>
+    0x7164, 0x9481, // <cjk>
+    0x7165, 0xE085, // <cjk>
+    0x7166, 0xE088, // <cjk>
+    0x7167, 0x8FC6, // <cjk>
+    0x7169, 0x94CF, // <cjk>
+    0x716C, 0xE08C, // <cjk>
+    0x716E, 0x8ECF, // <cjk>
+    0x717D, 0x90F8, // <cjk>
+    0x7184, 0xE08F, // <cjk>
+    0x7188, 0xE087, // <cjk>
+    0x718A, 0x8C46, // <cjk>
+    0x718F, 0xE08D, // <cjk>
+    0x7194, 0x976F, // <cjk>
+    0x7195, 0xE090, // <cjk>
+    0x7199, 0xEAA4, // <cjk>
+    0x719F, 0x8F6E, // <cjk>
+    0x71A8, 0xE091, // <cjk>
+    0x71AC, 0xE092, // <cjk>
+    0x71B1, 0x944D, // <cjk>
+    0x71B9, 0xE094, // <cjk>
+    0x71BE, 0xE095, // <cjk>
+    0x71C3, 0x9452, // <cjk>
+    0x71C8, 0x9395, // <cjk>
+    0x71C9, 0xE097, // <cjk>
+    0x71CE, 0xE099, // <cjk>
+    0x71D0, 0x97D3, // <cjk>
+    0x71D2, 0xE096, // <cjk>
+    0x71D4, 0xE098, // <cjk>
+    0x71D5, 0x898D, // <cjk>
+    0x71D7, 0xE093, // <cjk>
+    0x71DF, 0x9A7A, // <cjk>
+    0x71E0, 0xE09A, // <cjk>
+    0x71E5, 0x9187, // <cjk>
+    0x71E6, 0x8E57, // <cjk>
+    0x71E7, 0xE09C, // <cjk>
+    0x71EC, 0xE09B, // <cjk>
+    0x71ED, 0x9043, // <cjk>
+    0x71EE, 0x99D7, // <cjk>
+    0x71F5, 0xE09D, // <cjk>
+    0x71F9, 0xE09F, // <cjk>
+    0x71FB, 0xE08E, // <cjk>
+    0x71FC, 0xE09E, // <cjk>
+    0x71FF, 0xE0A0, // <cjk>
+    0x7206, 0x949A, // <cjk>
+    0x720D, 0xE0A1, // <cjk>
+    0x7210, 0xE0A2, // <cjk>
+    0x721B, 0xE0A3, // <cjk>
+    0x7228, 0xE0A4, // <cjk>
+    0x722A, 0x92DC, // <cjk>
+    0x722C, 0xE0A6, // <cjk>
+    0x722D, 0xE0A5, // <cjk>
+    0x7230, 0xE0A7, // <cjk>
+    0x7232, 0xE0A8, // <cjk>
+    0x7235, 0x8EDD, // <cjk>
+    0x7236, 0x9583, // <cjk>
+    0x723A, 0x96EA, // <cjk>
+    0x723B, 0xE0A9, // <cjk>
+    0x723C, 0xE0AA, // <cjk>
+    0x723D, 0x9175, // <cjk>
+    0x723E, 0x8EA2, // <cjk>
+    0x723F, 0xE0AB, // <cjk>
+    0x7240, 0xE0AC, // <cjk>
+    0x7246, 0xE0AD, // <cjk>
+    0x7247, 0x95D0, // <cjk>
+    0x7248, 0x94C5, // <cjk>
+    0x724B, 0xE0AE, // <cjk>
+    0x724C, 0x9476, // <cjk>
+    0x7252, 0x92AB, // <cjk>
+    0x7258, 0xE0AF, // <cjk>
+    0x7259, 0x89E5, // <cjk>
+    0x725B, 0x8B8D, // <cjk>
+    0x725D, 0x96C4, // <cjk>
+    0x725F, 0x96B4, // <cjk>
+    0x7261, 0x89B2, // <cjk>
+    0x7262, 0x9853, // <cjk>
+    0x7267, 0x9671, // <cjk>
+    0x7269, 0x95A8, // <cjk>
+    0x7272, 0x90B5, // <cjk>
+    0x7274, 0xE0B0, // <cjk>
+    0x7279, 0x93C1, // <cjk>
+    0x727D, 0x8CA1, // <cjk>
+    0x727E, 0xE0B1, // <cjk>
+    0x7280, 0x8DD2, // <cjk>
+    0x7281, 0xE0B3, // <cjk>
+    0x7282, 0xE0B2, // <cjk>
+    0x7287, 0xE0B4, // <cjk>
+    0x7292, 0xE0B5, // <cjk>
+    0x7296, 0xE0B6, // <cjk>
+    0x72A0, 0x8B5D, // <cjk>
+    0x72A2, 0xE0B7, // <cjk>
+    0x72A7, 0xE0B8, // <cjk>
+    0x72AC, 0x8CA2, // <cjk>
+    0x72AF, 0x94C6, // <cjk>
+    0x72B2, 0xE0BA, // <cjk>
+    0x72B6, 0x8FF3, // <cjk>
+    0x72B9, 0xE0B9, // <cjk>
+    0x72C2, 0x8BB6, // <cjk>
+    0x72C3, 0xE0BB, // <cjk>
+    0x72C4, 0xE0BD, // <cjk>
+    0x72C6, 0xE0BC, // <cjk>
+    0x72CE, 0xE0BE, // <cjk>
+    0x72D0, 0x8CCF, // <cjk>
+    0x72D2, 0xE0BF, // <cjk>
+    0x72D7, 0x8BE7, // <cjk>
+    0x72D9, 0x915F, // <cjk>
+    0x72DB, 0x8D9D, // <cjk>
+    0x72E0, 0xE0C1, // <cjk>
+    0x72E1, 0xE0C2, // <cjk>
+    0x72E2, 0xE0C0, // <cjk>
+    0x72E9, 0x8EEB, // <cjk>
+    0x72EC, 0x93C6, // <cjk>
+    0x72ED, 0x8BB7, // <cjk>
+    0x72F7, 0xE0C4, // <cjk>
+    0x72F8, 0x924B, // <cjk>
+    0x72F9, 0xE0C3, // <cjk>
+    0x72FC, 0x9854, // <cjk>
+    0x72FD, 0x9482, // <cjk>
+    0x730A, 0xE0C7, // <cjk>
+    0x7316, 0xE0C9, // <cjk>
+    0x7317, 0xE0C6, // <cjk>
+    0x731B, 0x96D2, // <cjk>
+    0x731C, 0xE0C8, // <cjk>
+    0x731D, 0xE0CA, // <cjk>
+    0x731F, 0x97C2, // <cjk>
+    0x7325, 0xE0CE, // <cjk>
+    0x7329, 0xE0CD, // <cjk>
+    0x732A, 0x9296, // <cjk>
+    0x732B, 0x944C, // <cjk>
+    0x732E, 0x8CA3, // <cjk>
+    0x732F, 0xE0CC, // <cjk>
+    0x7334, 0xE0CB, // <cjk>
+    0x7336, 0x9750, // <cjk>
+    0x7337, 0x9751, // <cjk>
+    0x733E, 0xE0CF, // <cjk>
+    0x733F, 0x898E, // <cjk>
+    0x7344, 0x8D96, // <cjk>
+    0x7345, 0x8E82, // <cjk>
+    0x734E, 0xE0D0, // <cjk>
+    0x734F, 0xE0D1, // <cjk>
+    0x7357, 0xE0D3, // <cjk>
+    0x7363, 0x8F62, // <cjk>
+    0x7368, 0xE0D5, // <cjk>
+    0x736A, 0xE0D4, // <cjk>
+    0x7370, 0xE0D6, // <cjk>
+    0x7372, 0x8A6C, // <cjk>
+    0x7375, 0xE0D8, // <cjk>
+    0x7378, 0xE0D7, // <cjk>
+    0x737A, 0xE0DA, // <cjk>
+    0x737B, 0xE0D9, // <cjk>
+    0x7384, 0x8CBA, // <cjk>
+    0x7387, 0x97A6, // <cjk>
+    0x7389, 0x8BCA, // <cjk>
+    0x738B, 0x89A4, // <cjk>
+    0x7396, 0x8BE8, // <cjk>
+    0x73A9, 0x8ADF, // <cjk>
+    0x73B2, 0x97E6, // <cjk>
+    0x73B3, 0xE0DC, // <cjk>
+    0x73BB, 0xE0DE, // <cjk>
+    0x73C0, 0xE0DF, // <cjk>
+    0x73C2, 0x89CF, // <cjk>
+    0x73C8, 0xE0DB, // <cjk>
+    0x73CA, 0x8E58, // <cjk>
+    0x73CD, 0x92BF, // <cjk>
+    0x73CE, 0xE0DD, // <cjk>
+    0x73DE, 0xE0E2, // <cjk>
+    0x73E0, 0x8EEC, // <cjk>
+    0x73E5, 0xE0E0, // <cjk>
+    0x73EA, 0x8C5D, // <cjk>
+    0x73ED, 0x94C7, // <cjk>
+    0x73EE, 0xE0E1, // <cjk>
+    0x73F1, 0xE0FC, // <cjk>
+    0x73F8, 0xE0E7, // <cjk>
+    0x73FE, 0x8CBB, // <cjk>
+    0x7403, 0x8B85, // <cjk>
+    0x7405, 0xE0E4, // <cjk>
+    0x7406, 0x979D, // <cjk>
+    0x7409, 0x97AE, // <cjk>
+    0x7422, 0x91F4, // <cjk>
+    0x7425, 0xE0E6, // <cjk>
+    0x7432, 0xE0E8, // <cjk>
+    0x7433, 0x97D4, // <cjk>
+    0x7434, 0x8BD5, // <cjk>
+    0x7435, 0x94FA, // <cjk>
+    0x7436, 0x9469, // <cjk>
+    0x743A, 0xE0E9, // <cjk>
+    0x743F, 0xE0EB, // <cjk>
+    0x7441, 0xE0EE, // <cjk>
+    0x7455, 0xE0EA, // <cjk>
+    0x7459, 0xE0ED, // <cjk>
+    0x745A, 0x8CE8, // <cjk>
+    0x745B, 0x896C, // <cjk>
+    0x745C, 0xE0EF, // <cjk>
+    0x745E, 0x9090, // <cjk>
+    0x745F, 0xE0EC, // <cjk>
+    0x7460, 0x97DA, // <cjk>
+    0x7463, 0xE0F2, // <cjk>
+    0x7464, 0xEAA2, // <cjk>
+    0x7469, 0xE0F0, // <cjk>
+    0x746A, 0xE0F3, // <cjk>
+    0x746F, 0xE0E5, // <cjk>
+    0x7470, 0xE0F1, // <cjk>
+    0x7473, 0x8DBA, // <cjk>
+    0x7476, 0xE0F4, // <cjk>
+    0x747E, 0xE0F5, // <cjk>
+    0x7483, 0x979E, // <cjk>
+    0x748B, 0xE0F6, // <cjk>
+    0x749E, 0xE0F7, // <cjk>
+    0x74A2, 0xE0E3, // <cjk>
+    0x74A7, 0xE0F8, // <cjk>
+    0x74B0, 0x8AC2, // <cjk>
+    0x74BD, 0x8EA3, // <cjk>
+    0x74CA, 0xE0F9, // <cjk>
+    0x74CF, 0xE0FA, // <cjk>
+    0x74D4, 0xE0FB, // <cjk>
+    0x74DC, 0x895A, // <cjk>
+    0x74E0, 0xE140, // <cjk>
+    0x74E2, 0x955A, // <cjk>
+    0x74E3, 0xE141, // <cjk>
+    0x74E6, 0x8AA2, // <cjk>
+    0x74E7, 0xE142, // <cjk>
+    0x74E9, 0xE143, // <cjk>
+    0x74EE, 0xE144, // <cjk>
+    0x74F0, 0xE146, // <cjk>
+    0x74F1, 0xE147, // <cjk>
+    0x74F2, 0xE145, // <cjk>
+    0x74F6, 0x9572, // <cjk>
+    0x74F7, 0xE149, // <cjk>
+    0x74F8, 0xE148, // <cjk>
+    0x7503, 0xE14B, // <cjk>
+    0x7504, 0xE14A, // <cjk>
+    0x7505, 0xE14C, // <cjk>
+    0x750C, 0xE14D, // <cjk>
+    0x750D, 0xE14F, // <cjk>
+    0x750E, 0xE14E, // <cjk>
+    0x7511, 0x8D99, // <cjk>
+    0x7513, 0xE151, // <cjk>
+    0x7515, 0xE150, // <cjk>
+    0x7518, 0x8AC3, // <cjk>
+    0x751A, 0x9072, // <cjk>
+    0x751E, 0xE152, // <cjk>
+    0x751F, 0x90B6, // <cjk>
+    0x7523, 0x8E59, // <cjk>
+    0x7525, 0x8999, // <cjk>
+    0x7526, 0xE153, // <cjk>
+    0x7528, 0x9770, // <cjk>
+    0x752B, 0x95E1, // <cjk>
+    0x752C, 0xE154, // <cjk>
+    0x7530, 0x9363, // <cjk>
+    0x7531, 0x9752, // <cjk>
+    0x7532, 0x8D62, // <cjk>
+    0x7533, 0x905C, // <cjk>
+    0x7537, 0x926A, // <cjk>
+    0x7538, 0x99B2, // <cjk>
+    0x753A, 0x92AC, // <cjk>
+    0x753B, 0x89E6, // <cjk>
+    0x753C, 0xE155, // <cjk>
+    0x7544, 0xE156, // <cjk>
+    0x7549, 0xE159, // <cjk>
+    0x754A, 0xE158, // <cjk>
+    0x754B, 0x9DC0, // <cjk>
+    0x754C, 0x8A45, // <cjk>
+    0x754D, 0xE157, // <cjk>
+    0x754F, 0x88D8, // <cjk>
+    0x7551, 0x94A8, // <cjk>
+    0x7554, 0x94C8, // <cjk>
+    0x7559, 0x97AF, // <cjk>
+    0x755A, 0xE15C, // <cjk>
+    0x755B, 0xE15A, // <cjk>
+    0x755C, 0x927B, // <cjk>
+    0x755D, 0x90A4, // <cjk>
+    0x7560, 0x94A9, // <cjk>
+    0x7562, 0x954C, // <cjk>
+    0x7564, 0xE15E, // <cjk>
+    0x7565, 0x97AA, // <cjk>
+    0x7566, 0x8C6C, // <cjk>
+    0x7567, 0xE15F, // <cjk>
+    0x7569, 0xE15D, // <cjk>
+    0x756A, 0x94D4, // <cjk>
+    0x756B, 0xE160, // <cjk>
+    0x756D, 0xE161, // <cjk>
+    0x7570, 0x88D9, // <cjk>
+    0x7573, 0x8FF4, // <cjk>
+    0x7574, 0xE166, // <cjk>
+    0x7576, 0xE163, // <cjk>
+    0x7577, 0x93EB, // <cjk>
+    0x7578, 0xE162, // <cjk>
+    0x757F, 0x8B45, // <cjk>
+    0x7582, 0xE169, // <cjk>
+    0x7586, 0xE164, // <cjk>
+    0x7587, 0xE165, // <cjk>
+    0x7589, 0xE168, // <cjk>
+    0x758A, 0xE167, // <cjk>
+    0x758B, 0x9544, // <cjk>
+    0x758E, 0x9161, // <cjk>
+    0x758F, 0x9160, // <cjk>
+    0x7591, 0x8B5E, // <cjk>
+    0x7594, 0xE16A, // <cjk>
+    0x759A, 0xE16B, // <cjk>
+    0x759D, 0xE16C, // <cjk>
+    0x75A3, 0xE16E, // <cjk>
+    0x75A5, 0xE16D, // <cjk>
+    0x75AB, 0x8975, // <cjk>
+    0x75B1, 0xE176, // <cjk>
+    0x75B2, 0x94E6, // <cjk>
+    0x75B3, 0xE170, // <cjk>
+    0x75B5, 0xE172, // <cjk>
+    0x75B8, 0xE174, // <cjk>
+    0x75B9, 0x905D, // <cjk>
+    0x75BC, 0xE175, // <cjk>
+    0x75BD, 0xE173, // <cjk>
+    0x75BE, 0x8EBE, // <cjk>
+    0x75C2, 0xE16F, // <cjk>
+    0x75C3, 0xE171, // <cjk>
+    0x75C5, 0x9561, // <cjk>
+    0x75C7, 0x8FC7, // <cjk>
+    0x75CA, 0xE178, // <cjk>
+    0x75CD, 0xE177, // <cjk>
+    0x75D2, 0xE179, // <cjk>
+    0x75D4, 0x8EA4, // <cjk>
+    0x75D5, 0x8DAD, // <cjk>
+    0x75D8, 0x9397, // <cjk>
+    0x75D9, 0xE17A, // <cjk>
+    0x75DB, 0x92C9, // <cjk>
+    0x75DE, 0xE17C, // <cjk>
+    0x75E2, 0x979F, // <cjk>
+    0x75E3, 0xE17B, // <cjk>
+    0x75E9, 0x9189, // <cjk>
+    0x75F0, 0xE182, // <cjk>
+    0x75F2, 0xE184, // <cjk>
+    0x75F3, 0xE185, // <cjk>
+    0x75F4, 0x9273, // <cjk>
+    0x75FA, 0xE183, // <cjk>
+    0x75FC, 0xE180, // <cjk>
+    0x75FE, 0xE17D, // <cjk>
+    0x75FF, 0xE17E, // <cjk>
+    0x7601, 0xE181, // <cjk>
+    0x7609, 0xE188, // <cjk>
+    0x760B, 0xE186, // <cjk>
+    0x760D, 0xE187, // <cjk>
+    0x761F, 0xE189, // <cjk>
+    0x7620, 0xE18B, // <cjk>
+    0x7621, 0xE18C, // <cjk>
+    0x7622, 0xE18D, // <cjk>
+    0x7624, 0xE18E, // <cjk>
+    0x7627, 0xE18A, // <cjk>
+    0x7630, 0xE190, // <cjk>
+    0x7634, 0xE18F, // <cjk>
+    0x763B, 0xE191, // <cjk>
+    0x7642, 0x97C3, // <cjk>
+    0x7646, 0xE194, // <cjk>
+    0x7647, 0xE192, // <cjk>
+    0x7648, 0xE193, // <cjk>
+    0x764C, 0x8AE0, // <cjk>
+    0x7652, 0x96FC, // <cjk>
+    0x7656, 0x95C8, // <cjk>
+    0x7658, 0xE196, // <cjk>
+    0x765C, 0xE195, // <cjk>
+    0x7661, 0xE197, // <cjk>
+    0x7662, 0xE198, // <cjk>
+    0x7667, 0xE19C, // <cjk>
+    0x7668, 0xE199, // <cjk>
+    0x7669, 0xE19A, // <cjk>
+    0x766A, 0xE19B, // <cjk>
+    0x766C, 0xE19D, // <cjk>
+    0x7670, 0xE19E, // <cjk>
+    0x7672, 0xE19F, // <cjk>
+    0x7676, 0xE1A0, // <cjk>
+    0x7678, 0xE1A1, // <cjk>
+    0x767A, 0x94AD, // <cjk>
+    0x767B, 0x936F, // <cjk>
+    0x767C, 0xE1A2, // <cjk>
+    0x767D, 0x9492, // <cjk>
+    0x767E, 0x9553, // <cjk>
+    0x7680, 0xE1A3, // <cjk>
+    0x7683, 0xE1A4, // <cjk>
+    0x7684, 0x9349, // <cjk>
+    0x7686, 0x8A46, // <cjk>
+    0x7687, 0x8D63, // <cjk>
+    0x7688, 0xE1A5, // <cjk>
+    0x768B, 0xE1A6, // <cjk>
+    0x768E, 0xE1A7, // <cjk>
+    0x7690, 0x8E48, // <cjk>
+    0x7693, 0xE1A9, // <cjk>
+    0x7696, 0xE1A8, // <cjk>
+    0x7699, 0xE1AA, // <cjk>
+    0x769A, 0xE1AB, // <cjk>
+    0x76AE, 0x94E7, // <cjk>
+    0x76B0, 0xE1AC, // <cjk>
+    0x76B4, 0xE1AD, // <cjk>
+    0x76B7, 0xEA89, // <cjk>
+    0x76B8, 0xE1AE, // <cjk>
+    0x76B9, 0xE1AF, // <cjk>
+    0x76BA, 0xE1B0, // <cjk>
+    0x76BF, 0x8E4D, // <cjk>
+    0x76C2, 0xE1B1, // <cjk>
+    0x76C3, 0x9475, // <cjk>
+    0x76C6, 0x967E, // <cjk>
+    0x76C8, 0x896D, // <cjk>
+    0x76CA, 0x8976, // <cjk>
+    0x76CD, 0xE1B2, // <cjk>
+    0x76D2, 0xE1B4, // <cjk>
+    0x76D6, 0xE1B3, // <cjk>
+    0x76D7, 0x9390, // <cjk>
+    0x76DB, 0x90B7, // <cjk>
+    0x76DC, 0x9F58, // <cjk>
+    0x76DE, 0xE1B5, // <cjk>
+    0x76DF, 0x96BF, // <cjk>
+    0x76E1, 0xE1B6, // <cjk>
+    0x76E3, 0x8AC4, // <cjk>
+    0x76E4, 0x94D5, // <cjk>
+    0x76E5, 0xE1B7, // <cjk>
+    0x76E7, 0xE1B8, // <cjk>
+    0x76EA, 0xE1B9, // <cjk>
+    0x76EE, 0x96DA, // <cjk>
+    0x76F2, 0x96D3, // <cjk>
+    0x76F4, 0x92BC, // <cjk>
+    0x76F8, 0x918A, // <cjk>
+    0x76FB, 0xE1BB, // <cjk>
+    0x76FE, 0x8F82, // <cjk>
+    0x7701, 0x8FC8, // <cjk>
+    0x7704, 0xE1BE, // <cjk>
+    0x7707, 0xE1BD, // <cjk>
+    0x7708, 0xE1BC, // <cjk>
+    0x7709, 0x94FB, // <cjk>
+    0x770B, 0x8AC5, // <cjk>
+    0x770C, 0x8CA7, // <cjk>
+    0x771B, 0xE1C4, // <cjk>
+    0x771E, 0xE1C1, // <cjk>
+    0x771F, 0x905E, // <cjk>
+    0x7720, 0x96B0, // <cjk>
+    0x7724, 0xE1C0, // <cjk>
+    0x7725, 0xE1C2, // <cjk>
+    0x7726, 0xE1C3, // <cjk>
+    0x7729, 0xE1BF, // <cjk>
+    0x7737, 0xE1C5, // <cjk>
+    0x7738, 0xE1C6, // <cjk>
+    0x773A, 0x92AD, // <cjk>
+    0x773C, 0x8AE1, // <cjk>
+    0x7740, 0x9285, // <cjk>
+    0x7747, 0xE1C7, // <cjk>
+    0x775A, 0xE1C8, // <cjk>
+    0x775B, 0xE1CB, // <cjk>
+    0x7761, 0x9087, // <cjk>
+    0x7763, 0x93C2, // <cjk>
+    0x7765, 0xE1CC, // <cjk>
+    0x7766, 0x9672, // <cjk>
+    0x7768, 0xE1C9, // <cjk>
+    0x776B, 0xE1CA, // <cjk>
+    0x7779, 0xE1CF, // <cjk>
+    0x777E, 0xE1CE, // <cjk>
+    0x777F, 0xE1CD, // <cjk>
+    0x778B, 0xE1D1, // <cjk>
+    0x778E, 0xE1D0, // <cjk>
+    0x7791, 0xE1D2, // <cjk>
+    0x779E, 0xE1D4, // <cjk>
+    0x77A0, 0xE1D3, // <cjk>
+    0x77A5, 0x95CB, // <cjk>
+    0x77AC, 0x8F75, // <cjk>
+    0x77AD, 0x97C4, // <cjk>
+    0x77B0, 0xE1D5, // <cjk>
+    0x77B3, 0x93B5, // <cjk>
+    0x77B6, 0xE1D6, // <cjk>
+    0x77B9, 0xE1D7, // <cjk>
+    0x77BB, 0xE1DB, // <cjk>
+    0x77BC, 0xE1D9, // <cjk>
+    0x77BD, 0xE1DA, // <cjk>
+    0x77BF, 0xE1D8, // <cjk>
+    0x77C7, 0xE1DC, // <cjk>
+    0x77CD, 0xE1DD, // <cjk>
+    0x77D7, 0xE1DE, // <cjk>
+    0x77DA, 0xE1DF, // <cjk>
+    0x77DB, 0x96B5, // <cjk>
+    0x77DC, 0xE1E0, // <cjk>
+    0x77E2, 0x96EE, // <cjk>
+    0x77E3, 0xE1E1, // <cjk>
+    0x77E5, 0x926D, // <cjk>
+    0x77E7, 0x948A, // <cjk>
+    0x77E9, 0x8BE9, // <cjk>
+    0x77ED, 0x925A, // <cjk>
+    0x77EE, 0xE1E2, // <cjk>
+    0x77EF, 0x8BB8, // <cjk>
+    0x77F3, 0x90CE, // <cjk>
+    0x77FC, 0xE1E3, // <cjk>
+    0x7802, 0x8DBB, // <cjk>
+    0x780C, 0xE1E4, // <cjk>
+    0x7812, 0xE1E5, // <cjk>
+    0x7814, 0x8CA4, // <cjk>
+    0x7815, 0x8DD3, // <cjk>
+    0x7820, 0xE1E7, // <cjk>
+    0x7825, 0x9375, // <cjk>
+    0x7826, 0x8DD4, // <cjk>
+    0x7827, 0x8B6D, // <cjk>
+    0x7832, 0x9643, // <cjk>
+    0x7834, 0x946A, // <cjk>
+    0x783A, 0x9376, // <cjk>
+    0x783F, 0x8D7B, // <cjk>
+    0x7845, 0xE1E9, // <cjk>
+    0x785D, 0x8FC9, // <cjk>
+    0x786B, 0x97B0, // <cjk>
+    0x786C, 0x8D64, // <cjk>
+    0x786F, 0x8CA5, // <cjk>
+    0x7872, 0x94A1, // <cjk>
+    0x7874, 0xE1EB, // <cjk>
+    0x787C, 0xE1ED, // <cjk>
+    0x7881, 0x8CE9, // <cjk>
+    0x7886, 0xE1EC, // <cjk>
+    0x7887, 0x92F4, // <cjk>
+    0x788C, 0xE1EF, // <cjk>
+    0x788D, 0x8A56, // <cjk>
+    0x788E, 0xE1EA, // <cjk>
+    0x7891, 0x94E8, // <cjk>
+    0x7893, 0x894F, // <cjk>
+    0x7895, 0x8DEA, // <cjk>
+    0x7897, 0x9871, // <cjk>
+    0x789A, 0xE1EE, // <cjk>
+    0x78A3, 0xE1F0, // <cjk>
+    0x78A7, 0x95C9, // <cjk>
+    0x78A9, 0x90D7, // <cjk>
+    0x78AA, 0xE1F2, // <cjk>
+    0x78AF, 0xE1F3, // <cjk>
+    0x78B5, 0xE1F1, // <cjk>
+    0x78BA, 0x8A6D, // <cjk>
+    0x78BC, 0xE1F9, // <cjk>
+    0x78BE, 0xE1F8, // <cjk>
+    0x78C1, 0x8EA5, // <cjk>
+    0x78C5, 0xE1FA, // <cjk>
+    0x78C6, 0xE1F5, // <cjk>
+    0x78CA, 0xE1FB, // <cjk>
+    0x78CB, 0xE1F6, // <cjk>
+    0x78D0, 0x94D6, // <cjk>
+    0x78D1, 0xE1F4, // <cjk>
+    0x78D4, 0xE1F7, // <cjk>
+    0x78DA, 0xE241, // <cjk>
+    0x78E7, 0xE240, // <cjk>
+    0x78E8, 0x9681, // <cjk>
+    0x78EC, 0xE1FC, // <cjk>
+    0x78EF, 0x88E9, // <cjk>
+    0x78F4, 0xE243, // <cjk>
+    0x78FD, 0xE242, // <cjk>
+    0x7901, 0x8FCA, // <cjk>
+    0x7907, 0xE244, // <cjk>
+    0x790E, 0x9162, // <cjk>
+    0x7911, 0xE246, // <cjk>
+    0x7912, 0xE245, // <cjk>
+    0x7919, 0xE247, // <cjk>
+    0x7926, 0xE1E6, // <cjk>
+    0x792A, 0xE1E8, // <cjk>
+    0x792B, 0xE249, // <cjk>
+    0x792C, 0xE248, // <cjk>
+    0x793A, 0x8EA6, // <cjk>
+    0x793C, 0x97E7, // <cjk>
+    0x793E, 0x8ED0, // <cjk>
+    0x7940, 0xE24A, // <cjk>
+    0x7941, 0x8C56, // <cjk>
+    0x7947, 0x8B5F, // <cjk>
+    0x7948, 0x8B46, // <cjk>
+    0x7949, 0x8E83, // <cjk>
+    0x7950, 0x9753, // <cjk>
+    0x7953, 0xE250, // <cjk>
+    0x7955, 0xE24F, // <cjk>
+    0x7956, 0x9163, // <cjk>
+    0x7957, 0xE24C, // <cjk>
+    0x795A, 0xE24E, // <cjk>
+    0x795D, 0x8F6A, // <cjk>
+    0x795E, 0x905F, // <cjk>
+    0x795F, 0xE24D, // <cjk>
+    0x7960, 0xE24B, // <cjk>
+    0x7962, 0x9449, // <cjk>
+    0x7965, 0x8FCB, // <cjk>
+    0x796D, 0x8DD5, // <cjk>
+    0x7977, 0x9398, // <cjk>
+    0x797A, 0xE251, // <cjk>
+    0x797F, 0xE252, // <cjk>
+    0x7980, 0xE268, // <cjk>
+    0x7981, 0x8BD6, // <cjk>
+    0x7984, 0x985C, // <cjk>
+    0x7985, 0x9154, // <cjk>
+    0x798A, 0xE253, // <cjk>
+    0x798D, 0x89D0, // <cjk>
+    0x798E, 0x92F5, // <cjk>
+    0x798F, 0x959F, // <cjk>
+    0x799D, 0xE254, // <cjk>
+    0x79A6, 0x8B9A, // <cjk>
+    0x79A7, 0xE255, // <cjk>
+    0x79AA, 0xE257, // <cjk>
+    0x79AE, 0xE258, // <cjk>
+    0x79B0, 0x9448, // <cjk>
+    0x79B3, 0xE259, // <cjk>
+    0x79B9, 0xE25A, // <cjk>
+    0x79BD, 0x8BD7, // <cjk>
+    0x79BE, 0x89D1, // <cjk>
+    0x79BF, 0x93C3, // <cjk>
+    0x79C0, 0x8F47, // <cjk>
+    0x79C1, 0x8E84, // <cjk>
+    0x79C9, 0xE25C, // <cjk>
+    0x79CB, 0x8F48, // <cjk>
+    0x79D1, 0x89C8, // <cjk>
+    0x79D2, 0x9562, // <cjk>
+    0x79D5, 0xE25D, // <cjk>
+    0x79D8, 0x94E9, // <cjk>
+    0x79DF, 0x9164, // <cjk>
+    0x79E1, 0xE260, // <cjk>
+    0x79E3, 0xE261, // <cjk>
+    0x79E4, 0x9489, // <cjk>
+    0x79E6, 0x9060, // <cjk>
+    0x79E7, 0xE25E, // <cjk>
+    0x79E9, 0x9281, // <cjk>
+    0x79EC, 0xE25F, // <cjk>
+    0x79F0, 0x8FCC, // <cjk>
+    0x79FB, 0x88DA, // <cjk>
+    0x7A00, 0x8B48, // <cjk>
+    0x7A08, 0xE262, // <cjk>
+    0x7A0B, 0x92F6, // <cjk>
+    0x7A0D, 0xE263, // <cjk>
+    0x7A0E, 0x90C5, // <cjk>
+    0x7A14, 0x96AB, // <cjk>
+    0x7A17, 0x9542, // <cjk>
+    0x7A18, 0xE264, // <cjk>
+    0x7A19, 0xE265, // <cjk>
+    0x7A1A, 0x9274, // <cjk>
+    0x7A1C, 0x97C5, // <cjk>
+    0x7A1F, 0xE267, // <cjk>
+    0x7A20, 0xE266, // <cjk>
+    0x7A2E, 0x8EED, // <cjk>
+    0x7A31, 0xE269, // <cjk>
+    0x7A32, 0x88EE, // <cjk>
+    0x7A37, 0xE26C, // <cjk>
+    0x7A3B, 0xE26A, // <cjk>
+    0x7A3C, 0x89D2, // <cjk>
+    0x7A3D, 0x8C6D, // <cjk>
+    0x7A3E, 0xE26B, // <cjk>
+    0x7A3F, 0x8D65, // <cjk>
+    0x7A40, 0x8D92, // <cjk>
+    0x7A42, 0x95E4, // <cjk>
+    0x7A43, 0xE26D, // <cjk>
+    0x7A46, 0x9673, // <cjk>
+    0x7A49, 0xE26F, // <cjk>
+    0x7A4D, 0x90CF, // <cjk>
+    0x7A4E, 0x896E, // <cjk>
+    0x7A4F, 0x89B8, // <cjk>
+    0x7A50, 0x88AA, // <cjk>
+    0x7A57, 0xE26E, // <cjk>
+    0x7A61, 0xE270, // <cjk>
+    0x7A62, 0xE271, // <cjk>
+    0x7A63, 0x8FF5, // <cjk>
+    0x7A69, 0xE272, // <cjk>
+    0x7A6B, 0x8A6E, // <cjk>
+    0x7A70, 0xE274, // <cjk>
+    0x7A74, 0x8C8A, // <cjk>
+    0x7A76, 0x8B86, // <cjk>
+    0x7A79, 0xE275, // <cjk>
+    0x7A7A, 0x8BF3, // <cjk>
+    0x7A7D, 0xE276, // <cjk>
+    0x7A7F, 0x90FA, // <cjk>
+    0x7A81, 0x93CB, // <cjk>
+    0x7A83, 0x90DE, // <cjk>
+    0x7A84, 0x8DF3, // <cjk>
+    0x7A88, 0xE277, // <cjk>
+    0x7A92, 0x9282, // <cjk>
+    0x7A93, 0x918B, // <cjk>
+    0x7A95, 0xE279, // <cjk>
+    0x7A96, 0xE27B, // <cjk>
+    0x7A97, 0xE278, // <cjk>
+    0x7A98, 0xE27A, // <cjk>
+    0x7A9F, 0x8C41, // <cjk>
+    0x7AA9, 0xE27C, // <cjk>
+    0x7AAA, 0x8C45, // <cjk>
+    0x7AAE, 0x8B87, // <cjk>
+    0x7AAF, 0x9771, // <cjk>
+    0x7AB0, 0xE27E, // <cjk>
+    0x7AB6, 0xE280, // <cjk>
+    0x7ABA, 0x894D, // <cjk>
+    0x7ABF, 0xE283, // <cjk>
+    0x7AC3, 0x8A96, // <cjk>
+    0x7AC4, 0xE282, // <cjk>
+    0x7AC5, 0xE281, // <cjk>
+    0x7AC7, 0xE285, // <cjk>
+    0x7AC8, 0xE27D, // <cjk>
+    0x7ACA, 0xE286, // <cjk>
+    0x7ACB, 0x97A7, // <cjk>
+    0x7ACD, 0xE287, // <cjk>
+    0x7ACF, 0xE288, // <cjk>
+    0x7AD2, 0x9AF2, // <cjk>
+    0x7AD3, 0xE28A, // <cjk>
+    0x7AD5, 0xE289, // <cjk>
+    0x7AD9, 0xE28B, // <cjk>
+    0x7ADA, 0xE28C, // <cjk>
+    0x7ADC, 0x97B3, // <cjk>
+    0x7ADD, 0xE28D, // <cjk>
+    0x7ADF, 0xE8ED, // <cjk>
+    0x7AE0, 0x8FCD, // <cjk>
+    0x7AE1, 0xE28E, // <cjk>
+    0x7AE2, 0xE28F, // <cjk>
+    0x7AE3, 0x8F76, // <cjk>
+    0x7AE5, 0x93B6, // <cjk>
+    0x7AE6, 0xE290, // <cjk>
+    0x7AEA, 0x9247, // <cjk>
+    0x7AED, 0xE291, // <cjk>
+    0x7AF0, 0xE292, // <cjk>
+    0x7AF6, 0x8BA3, // <cjk>
+    0x7AF8, 0x995E, // <cjk>
+    0x7AF9, 0x927C, // <cjk>
+    0x7AFA, 0x8EB1, // <cjk>
+    0x7AFF, 0x8AC6, // <cjk>
+    0x7B02, 0xE293, // <cjk>
+    0x7B04, 0xE2A0, // <cjk>
+    0x7B06, 0xE296, // <cjk>
+    0x7B08, 0x8B88, // <cjk>
+    0x7B0A, 0xE295, // <cjk>
+    0x7B0B, 0xE2A2, // <cjk>
+    0x7B0F, 0xE294, // <cjk>
+    0x7B11, 0x8FCE, // <cjk>
+    0x7B18, 0xE298, // <cjk>
+    0x7B19, 0xE299, // <cjk>
+    0x7B1B, 0x934A, // <cjk>
+    0x7B1E, 0xE29A, // <cjk>
+    0x7B20, 0x8A7D, // <cjk>
+    0x7B25, 0x9079, // <cjk>
+    0x7B26, 0x9584, // <cjk>
+    0x7B28, 0xE29C, // <cjk>
+    0x7B2C, 0x91E6, // <cjk>
+    0x7B33, 0xE297, // <cjk>
+    0x7B35, 0xE29B, // <cjk>
+    0x7B36, 0xE29D, // <cjk>
+    0x7B39, 0x8DF9, // <cjk>
+    0x7B45, 0xE2A4, // <cjk>
+    0x7B46, 0x954D, // <cjk>
+    0x7B48, 0x94A4, // <cjk>
+    0x7B49, 0x9399, // <cjk>
+    0x7B4B, 0x8BD8, // <cjk>
+    0x7B4C, 0xE2A3, // <cjk>
+    0x7B4D, 0xE2A1, // <cjk>
+    0x7B4F, 0x94B3, // <cjk>
+    0x7B50, 0xE29E, // <cjk>
+    0x7B51, 0x927D, // <cjk>
+    0x7B52, 0x939B, // <cjk>
+    0x7B54, 0x939A, // <cjk>
+    0x7B56, 0x8DF4, // <cjk>
+    0x7B5D, 0xE2B6, // <cjk>
+    0x7B65, 0xE2A6, // <cjk>
+    0x7B67, 0xE2A8, // <cjk>
+    0x7B6C, 0xE2AB, // <cjk>
+    0x7B6E, 0xE2AC, // <cjk>
+    0x7B70, 0xE2A9, // <cjk>
+    0x7B71, 0xE2AA, // <cjk>
+    0x7B74, 0xE2A7, // <cjk>
+    0x7B75, 0xE2A5, // <cjk>
+    0x7B7A, 0xE29F, // <cjk>
+    0x7B86, 0x95CD, // <cjk>
+    0x7B87, 0x89D3, // <cjk>
+    0x7B8B, 0xE2B3, // <cjk>
+    0x7B8D, 0xE2B0, // <cjk>
+    0x7B8F, 0xE2B5, // <cjk>
+    0x7B92, 0xE2B4, // <cjk>
+    0x7B94, 0x9493, // <cjk>
+    0x7B95, 0x96A5, // <cjk>
+    0x7B97, 0x8E5A, // <cjk>
+    0x7B98, 0xE2AE, // <cjk>
+    0x7B99, 0xE2B7, // <cjk>
+    0x7B9A, 0xE2B2, // <cjk>
+    0x7B9C, 0xE2B1, // <cjk>
+    0x7B9D, 0xE2AD, // <cjk>
+    0x7B9F, 0xE2AF, // <cjk>
+    0x7BA1, 0x8AC7, // <cjk>
+    0x7BAA, 0x925C, // <cjk>
+    0x7BAD, 0x90FB, // <cjk>
+    0x7BB1, 0x94A0, // <cjk>
+    0x7BB4, 0xE2BC, // <cjk>
+    0x7BB8, 0x94A2, // <cjk>
+    0x7BC0, 0x90DF, // <cjk>
+    0x7BC1, 0xE2B9, // <cjk>
+    0x7BC4, 0x94CD, // <cjk>
+    0x7BC6, 0xE2BD, // <cjk>
+    0x7BC7, 0x95D1, // <cjk>
+    0x7BC9, 0x927A, // <cjk>
+    0x7BCB, 0xE2B8, // <cjk>
+    0x7BCC, 0xE2BA, // <cjk>
+    0x7BCF, 0xE2BB, // <cjk>
+    0x7BDD, 0xE2BE, // <cjk>
+    0x7BE0, 0x8EC2, // <cjk>
+    0x7BE4, 0x93C4, // <cjk>
+    0x7BE5, 0xE2C3, // <cjk>
+    0x7BE6, 0xE2C2, // <cjk>
+    0x7BE9, 0xE2BF, // <cjk>
+    0x7BED, 0x9855, // <cjk>
+    0x7BF3, 0xE2C8, // <cjk>
+    0x7BF6, 0xE2CC, // <cjk>
+    0x7BF7, 0xE2C9, // <cjk>
+    0x7C00, 0xE2C5, // <cjk>
+    0x7C07, 0xE2C6, // <cjk>
+    0x7C0D, 0xE2CB, // <cjk>
+    0x7C11, 0xE2C0, // <cjk>
+    0x7C12, 0x99D3, // <cjk>
+    0x7C13, 0xE2C7, // <cjk>
+    0x7C14, 0xE2C1, // <cjk>
+    0x7C17, 0xE2CA, // <cjk>
+    0x7C1F, 0xE2D0, // <cjk>
+    0x7C21, 0x8AC8, // <cjk>
+    0x7C23, 0xE2CD, // <cjk>
+    0x7C27, 0xE2CE, // <cjk>
+    0x7C2A, 0xE2CF, // <cjk>
+    0x7C2B, 0xE2D2, // <cjk>
+    0x7C37, 0xE2D1, // <cjk>
+    0x7C38, 0x94F4, // <cjk>
+    0x7C3D, 0xE2D3, // <cjk>
+    0x7C3E, 0x97FA, // <cjk>
+    0x7C3F, 0x95EB, // <cjk>
+    0x7C40, 0xE2D8, // <cjk>
+    0x7C43, 0xE2D5, // <cjk>
+    0x7C4C, 0xE2D4, // <cjk>
+    0x7C4D, 0x90D0, // <cjk>
+    0x7C4F, 0xE2D7, // <cjk>
+    0x7C50, 0xE2D9, // <cjk>
+    0x7C54, 0xE2D6, // <cjk>
+    0x7C56, 0xE2DD, // <cjk>
+    0x7C58, 0xE2DA, // <cjk>
+    0x7C5F, 0xE2DB, // <cjk>
+    0x7C60, 0xE2C4, // <cjk>
+    0x7C64, 0xE2DC, // <cjk>
+    0x7C65, 0xE2DE, // <cjk>
+    0x7C6C, 0xE2DF, // <cjk>
+    0x7C73, 0x95C4, // <cjk>
+    0x7C75, 0xE2E0, // <cjk>
+    0x7C7E, 0x96E0, // <cjk>
+    0x7C81, 0x8BCC, // <cjk>
+    0x7C82, 0x8C48, // <cjk>
+    0x7C83, 0xE2E1, // <cjk>
+    0x7C89, 0x95B2, // <cjk>
+    0x7C8B, 0x9088, // <cjk>
+    0x7C8D, 0x96AE, // <cjk>
+    0x7C90, 0xE2E2, // <cjk>
+    0x7C92, 0x97B1, // <cjk>
+    0x7C95, 0x9494, // <cjk>
+    0x7C97, 0x9165, // <cjk>
+    0x7C98, 0x9453, // <cjk>
+    0x7C9B, 0x8F6C, // <cjk>
+    0x7C9F, 0x88BE, // <cjk>
+    0x7CA1, 0xE2E7, // <cjk>
+    0x7CA2, 0xE2E5, // <cjk>
+    0x7CA4, 0xE2E3, // <cjk>
+    0x7CA5, 0x8A9F, // <cjk>
+    0x7CA7, 0x8FCF, // <cjk>
+    0x7CA8, 0xE2E8, // <cjk>
+    0x7CAB, 0xE2E6, // <cjk>
+    0x7CAD, 0xE2E4, // <cjk>
+    0x7CAE, 0xE2EC, // <cjk>
+    0x7CB1, 0xE2EB, // <cjk>
+    0x7CB2, 0xE2EA, // <cjk>
+    0x7CB3, 0xE2E9, // <cjk>
+    0x7CB9, 0xE2ED, // <cjk>
+    0x7CBD, 0xE2EE, // <cjk>
+    0x7CBE, 0x90B8, // <cjk>
+    0x7CC0, 0xE2EF, // <cjk>
+    0x7CC2, 0xE2F1, // <cjk>
+    0x7CC5, 0xE2F0, // <cjk>
+    0x7CCA, 0x8CD0, // <cjk>
+    0x7CCE, 0x9157, // <cjk>
+    0x7CD2, 0xE2F3, // <cjk>
+    0x7CD6, 0x939C, // <cjk>
+    0x7CD8, 0xE2F2, // <cjk>
+    0x7CDC, 0xE2F4, // <cjk>
+    0x7CDE, 0x95B3, // <cjk>
+    0x7CDF, 0x918C, // <cjk>
+    0x7CE0, 0x8D66, // <cjk>
+    0x7CE2, 0xE2F5, // <cjk>
+    0x7CE7, 0x97C6, // <cjk>
+    0x7CEF, 0xE2F7, // <cjk>
+    0x7CF2, 0xE2F8, // <cjk>
+    0x7CF4, 0xE2F9, // <cjk>
+    0x7CF6, 0xE2FA, // <cjk>
+    0x7CF8, 0x8E85, // <cjk>
+    0x7CFA, 0xE2FB, // <cjk>
+    0x7CFB, 0x8C6E, // <cjk>
+    0x7CFE, 0x8B8A, // <cjk>
+    0x7D00, 0x8B49, // <cjk>
+    0x7D02, 0xE340, // <cjk>
+    0x7D04, 0x96F1, // <cjk>
+    0x7D05, 0x8D67, // <cjk>
+    0x7D06, 0xE2FC, // <cjk>
+    0x7D0A, 0xE343, // <cjk>
+    0x7D0B, 0x96E4, // <cjk>
+    0x7D10, 0x9552, // <cjk>
+    0x7D14, 0x8F83, // <cjk>
+    0x7D15, 0xE342, // <cjk>
+    0x7D17, 0x8ED1, // <cjk>
+    0x7D18, 0x8D68, // <cjk>
+    0x7D19, 0x8E86, // <cjk>
+    0x7D1A, 0x8B89, // <cjk>
+    0x7D1B, 0x95B4, // <cjk>
+    0x7D1C, 0xE341, // <cjk>
+    0x7D20, 0x9166, // <cjk>
+    0x7D21, 0x9661, // <cjk>
+    0x7D22, 0x8DF5, // <cjk>
+    0x7D2B, 0x8E87, // <cjk>
+    0x7D2C, 0x92DB, // <cjk>
+    0x7D2E, 0xE346, // <cjk>
+    0x7D2F, 0x97DD, // <cjk>
+    0x7D30, 0x8DD7, // <cjk>
+    0x7D32, 0xE347, // <cjk>
+    0x7D33, 0x9061, // <cjk>
+    0x7D35, 0xE349, // <cjk>
+    0x7D39, 0x8FD0, // <cjk>
+    0x7D3A, 0x8DAE, // <cjk>
+    0x7D3F, 0xE348, // <cjk>
+    0x7D42, 0x8F49, // <cjk>
+    0x7D43, 0x8CBC, // <cjk>
+    0x7D44, 0x9167, // <cjk>
+    0x7D45, 0xE344, // <cjk>
+    0x7D46, 0xE34A, // <cjk>
+    0x7D4B, 0xE345, // <cjk>
+    0x7D4C, 0x8C6F, // <cjk>
+    0x7D4E, 0xE34D, // <cjk>
+    0x7D4F, 0xE351, // <cjk>
+    0x7D50, 0x8C8B, // <cjk>
+    0x7D56, 0xE34C, // <cjk>
+    0x7D5B, 0xE355, // <cjk>
+    0x7D5E, 0x8D69, // <cjk>
+    0x7D61, 0x978D, // <cjk>
+    0x7D62, 0x88BA, // <cjk>
+    0x7D63, 0xE352, // <cjk>
+    0x7D66, 0x8B8B, // <cjk>
+    0x7D68, 0xE34F, // <cjk>
+    0x7D6E, 0xE350, // <cjk>
+    0x7D71, 0x939D, // <cjk>
+    0x7D72, 0xE34E, // <cjk>
+    0x7D73, 0xE34B, // <cjk>
+    0x7D75, 0x8A47, // <cjk>
+    0x7D76, 0x90E2, // <cjk>
+    0x7D79, 0x8CA6, // <cjk>
+    0x7D7D, 0xE357, // <cjk>
+    0x7D89, 0xE354, // <cjk>
+    0x7D8F, 0xE356, // <cjk>
+    0x7D93, 0xE353, // <cjk>
+    0x7D99, 0x8C70, // <cjk>
+    0x7D9A, 0x91B1, // <cjk>
+    0x7D9B, 0xE358, // <cjk>
+    0x7D9C, 0x918E, // <cjk>
+    0x7D9F, 0xE365, // <cjk>
+    0x7DA2, 0xE361, // <cjk>
+    0x7DAB, 0xE35F, // <cjk>
+    0x7DAC, 0x8EF8, // <cjk>
+    0x7DAD, 0x88DB, // <cjk>
+    0x7DAE, 0xE35A, // <cjk>
+    0x7DAF, 0xE362, // <cjk>
+    0x7DB0, 0xE366, // <cjk>
+    0x7DB1, 0x8D6A, // <cjk>
+    0x7DB2, 0x96D4, // <cjk>
+    0x7DB4, 0x92D4, // <cjk>
+    0x7DB5, 0xE35C, // <cjk>
+    0x7DB8, 0xE364, // <cjk>
+    0x7DBA, 0xE359, // <cjk>
+    0x7DBB, 0x925D, // <cjk>
+    0x7DBD, 0xE35E, // <cjk>
+    0x7DBE, 0x88BB, // <cjk>
+    0x7DBF, 0x96C8, // <cjk>
+    0x7DC7, 0xE35D, // <cjk>
+    0x7DCA, 0x8BD9, // <cjk>
+    0x7DCB, 0x94EA, // <cjk>
+    0x7DCF, 0x918D, // <cjk>
+    0x7DD1, 0x97CE, // <cjk>
+    0x7DD2, 0x8F8F, // <cjk>
+    0x7DD5, 0xE38E, // <cjk>
+    0x7DD8, 0xE367, // <cjk>
+    0x7DDA, 0x90FC, // <cjk>
+    0x7DDC, 0xE363, // <cjk>
+    0x7DDD, 0xE368, // <cjk>
+    0x7DDE, 0xE36A, // <cjk>
+    0x7DE0, 0x92F7, // <cjk>
+    0x7DE1, 0xE36D, // <cjk>
+    0x7DE4, 0xE369, // <cjk>
+    0x7DE8, 0x95D2, // <cjk>
+    0x7DE9, 0x8AC9, // <cjk>
+    0x7DEC, 0x96C9, // <cjk>
+    0x7DEF, 0x88DC, // <cjk>
+    0x7DF2, 0xE36C, // <cjk>
+    0x7DF4, 0x97FB, // <cjk>
+    0x7DFB, 0xE36B, // <cjk>
+    0x7E01, 0x898F, // <cjk>
+    0x7E04, 0x93EA, // <cjk>
+    0x7E05, 0xE36E, // <cjk>
+    0x7E09, 0xE375, // <cjk>
+    0x7E0A, 0xE36F, // <cjk>
+    0x7E0B, 0xE376, // <cjk>
+    0x7E12, 0xE372, // <cjk>
+    0x7E1B, 0x949B, // <cjk>
+    0x7E1E, 0x8EC8, // <cjk>
+    0x7E1F, 0xE374, // <cjk>
+    0x7E21, 0xE371, // <cjk>
+    0x7E22, 0xE377, // <cjk>
+    0x7E23, 0xE370, // <cjk>
+    0x7E26, 0x8F63, // <cjk>
+    0x7E2B, 0x9644, // <cjk>
+    0x7E2E, 0x8F6B, // <cjk>
+    0x7E31, 0xE373, // <cjk>
+    0x7E32, 0xE380, // <cjk>
+    0x7E35, 0xE37B, // <cjk>
+    0x7E37, 0xE37E, // <cjk>
+    0x7E39, 0xE37C, // <cjk>
+    0x7E3A, 0xE381, // <cjk>
+    0x7E3B, 0xE37A, // <cjk>
+    0x7E3D, 0xE360, // <cjk>
+    0x7E3E, 0x90D1, // <cjk>
+    0x7E41, 0x94C9, // <cjk>
+    0x7E43, 0xE37D, // <cjk>
+    0x7E46, 0xE378, // <cjk>
+    0x7E4A, 0x9140, // <cjk>
+    0x7E4B, 0x8C71, // <cjk>
+    0x7E4D, 0x8F4A, // <cjk>
+    0x7E54, 0x9044, // <cjk>
+    0x7E55, 0x9155, // <cjk>
+    0x7E56, 0xE384, // <cjk>
+    0x7E59, 0xE386, // <cjk>
+    0x7E5A, 0xE387, // <cjk>
+    0x7E5D, 0xE383, // <cjk>
+    0x7E5E, 0xE385, // <cjk>
+    0x7E66, 0xE379, // <cjk>
+    0x7E67, 0xE382, // <cjk>
+    0x7E69, 0xE38A, // <cjk>
+    0x7E6A, 0xE389, // <cjk>
+    0x7E6D, 0x969A, // <cjk>
+    0x7E70, 0x8C4A, // <cjk>
+    0x7E79, 0xE388, // <cjk>
+    0x7E7B, 0xE38C, // <cjk>
+    0x7E7C, 0xE38B, // <cjk>
+    0x7E7D, 0xE38F, // <cjk>
+    0x7E7F, 0xE391, // <cjk>
+    0x7E83, 0xE38D, // <cjk>
+    0x7E88, 0xE392, // <cjk>
+    0x7E89, 0xE393, // <cjk>
+    0x7E8C, 0xE394, // <cjk>
+    0x7E8E, 0xE39A, // <cjk>
+    0x7E8F, 0x935A, // <cjk>
+    0x7E90, 0xE396, // <cjk>
+    0x7E92, 0xE395, // <cjk>
+    0x7E93, 0xE397, // <cjk>
+    0x7E94, 0xE398, // <cjk>
+    0x7E96, 0xE399, // <cjk>
+    0x7E9B, 0xE39B, // <cjk>
+    0x7E9C, 0xE39C, // <cjk>
+    0x7F36, 0x8ACA, // <cjk>
+    0x7F38, 0xE39D, // <cjk>
+    0x7F3A, 0xE39E, // <cjk>
+    0x7F45, 0xE39F, // <cjk>
+    0x7F4C, 0xE3A0, // <cjk>
+    0x7F4D, 0xE3A1, // <cjk>
+    0x7F4E, 0xE3A2, // <cjk>
+    0x7F50, 0xE3A3, // <cjk>
+    0x7F51, 0xE3A4, // <cjk>
+    0x7F54, 0xE3A6, // <cjk>
+    0x7F55, 0xE3A5, // <cjk>
+    0x7F58, 0xE3A7, // <cjk>
+    0x7F5F, 0xE3A8, // <cjk>
+    0x7F60, 0xE3A9, // <cjk>
+    0x7F67, 0xE3AC, // <cjk>
+    0x7F68, 0xE3AA, // <cjk>
+    0x7F69, 0xE3AB, // <cjk>
+    0x7F6A, 0x8DDF, // <cjk>
+    0x7F6B, 0x8C72, // <cjk>
+    0x7F6E, 0x9275, // <cjk>
+    0x7F70, 0x94B1, // <cjk>
+    0x7F72, 0x8F90, // <cjk>
+    0x7F75, 0x946C, // <cjk>
+    0x7F77, 0x94EB, // <cjk>
+    0x7F78, 0xE3AD, // <cjk>
+    0x7F79, 0x9CEB, // <cjk>
+    0x7F82, 0xE3AE, // <cjk>
+    0x7F83, 0xE3B0, // <cjk>
+    0x7F85, 0x9785, // <cjk>
+    0x7F86, 0xE3AF, // <cjk>
+    0x7F87, 0xE3B2, // <cjk>
+    0x7F88, 0xE3B1, // <cjk>
+    0x7F8A, 0x9772, // <cjk>
+    0x7F8C, 0xE3B3, // <cjk>
+    0x7F8E, 0x94FC, // <cjk>
+    0x7F94, 0xE3B4, // <cjk>
+    0x7F9A, 0xE3B7, // <cjk>
+    0x7F9D, 0xE3B6, // <cjk>
+    0x7F9E, 0xE3B5, // <cjk>
+    0x7FA3, 0xE3B8, // <cjk>
+    0x7FA4, 0x8C51, // <cjk>
+    0x7FA8, 0x9141, // <cjk>
+    0x7FA9, 0x8B60, // <cjk>
+    0x7FAE, 0xE3BC, // <cjk>
+    0x7FAF, 0xE3B9, // <cjk>
+    0x7FB2, 0xE3BA, // <cjk>
+    0x7FB6, 0xE3BD, // <cjk>
+    0x7FB8, 0xE3BE, // <cjk>
+    0x7FB9, 0xE3BB, // <cjk>
+    0x7FBD, 0x8948, // <cjk>
+    0x7FC1, 0x89A5, // <cjk>
+    0x7FC5, 0xE3C0, // <cjk>
+    0x7FC6, 0xE3C1, // <cjk>
+    0x7FCA, 0xE3C2, // <cjk>
+    0x7FCC, 0x9782, // <cjk>
+    0x7FD2, 0x8F4B, // <cjk>
+    0x7FD4, 0xE3C4, // <cjk>
+    0x7FD5, 0xE3C3, // <cjk>
+    0x7FE0, 0x9089, // <cjk>
+    0x7FE1, 0xE3C5, // <cjk>
+    0x7FE6, 0xE3C6, // <cjk>
+    0x7FE9, 0xE3C7, // <cjk>
+    0x7FEB, 0x8AE3, // <cjk>
+    0x7FF0, 0x8ACB, // <cjk>
+    0x7FF3, 0xE3C8, // <cjk>
+    0x7FF9, 0xE3C9, // <cjk>
+    0x7FFB, 0x967C, // <cjk>
+    0x7FFC, 0x9783, // <cjk>
+    0x8000, 0x9773, // <cjk>
+    0x8001, 0x9856, // <cjk>
+    0x8003, 0x8D6C, // <cjk>
+    0x8004, 0xE3CC, // <cjk>
+    0x8005, 0x8ED2, // <cjk>
+    0x8006, 0xE3CB, // <cjk>
+    0x800B, 0xE3CD, // <cjk>
+    0x800C, 0x8EA7, // <cjk>
+    0x8010, 0x91CF, // <cjk>
+    0x8012, 0xE3CE, // <cjk>
+    0x8015, 0x8D6B, // <cjk>
+    0x8017, 0x96D5, // <cjk>
+    0x8018, 0xE3CF, // <cjk>
+    0x8019, 0xE3D0, // <cjk>
+    0x801C, 0xE3D1, // <cjk>
+    0x8021, 0xE3D2, // <cjk>
+    0x8028, 0xE3D3, // <cjk>
+    0x8033, 0x8EA8, // <cjk>
+    0x8036, 0x96EB, // <cjk>
+    0x803B, 0xE3D5, // <cjk>
+    0x803D, 0x925E, // <cjk>
+    0x803F, 0xE3D4, // <cjk>
+    0x8046, 0xE3D7, // <cjk>
+    0x804A, 0xE3D6, // <cjk>
+    0x8052, 0xE3D8, // <cjk>
+    0x8056, 0x90B9, // <cjk>
+    0x8058, 0xE3D9, // <cjk>
+    0x805A, 0xE3DA, // <cjk>
+    0x805E, 0x95B7, // <cjk>
+    0x805F, 0xE3DB, // <cjk>
+    0x8061, 0x918F, // <cjk>
+    0x8062, 0xE3DC, // <cjk>
+    0x8068, 0xE3DD, // <cjk>
+    0x806F, 0x97FC, // <cjk>
+    0x8070, 0xE3E0, // <cjk>
+    0x8072, 0xE3DF, // <cjk>
+    0x8073, 0xE3DE, // <cjk>
+    0x8074, 0x92AE, // <cjk>
+    0x8076, 0xE3E1, // <cjk>
+    0x8077, 0x9045, // <cjk>
+    0x8079, 0xE3E2, // <cjk>
+    0x807D, 0xE3E3, // <cjk>
+    0x807E, 0x9857, // <cjk>
+    0x807F, 0xE3E4, // <cjk>
+    0x8084, 0xE3E5, // <cjk>
+    0x8085, 0xE3E7, // <cjk>
+    0x8086, 0xE3E6, // <cjk>
+    0x8087, 0x94A3, // <cjk>
+    0x8089, 0x93F7, // <cjk>
+    0x808B, 0x985D, // <cjk>
+    0x808C, 0x94A7, // <cjk>
+    0x8093, 0xE3E9, // <cjk>
+    0x8096, 0x8FD1, // <cjk>
+    0x8098, 0x9549, // <cjk>
+    0x809A, 0xE3EA, // <cjk>
+    0x809B, 0xE3E8, // <cjk>
+    0x809D, 0x8ACC, // <cjk>
+    0x80A1, 0x8CD2, // <cjk>
+    0x80A2, 0x8E88, // <cjk>
+    0x80A5, 0x94EC, // <cjk>
+    0x80A9, 0x8CA8, // <cjk>
+    0x80AA, 0x9662, // <cjk>
+    0x80AC, 0xE3ED, // <cjk>
+    0x80AD, 0xE3EB, // <cjk>
+    0x80AF, 0x8D6D, // <cjk>
+    0x80B1, 0x8D6E, // <cjk>
+    0x80B2, 0x88E7, // <cjk>
+    0x80B4, 0x8DE6, // <cjk>
+    0x80BA, 0x9478, // <cjk>
+    0x80C3, 0x88DD, // <cjk>
+    0x80C4, 0xE3F2, // <cjk>
+    0x80C6, 0x925F, // <cjk>
+    0x80CC, 0x9477, // <cjk>
+    0x80CE, 0x91D9, // <cjk>
+    0x80D6, 0xE3F4, // <cjk>
+    0x80D9, 0xE3F0, // <cjk>
+    0x80DA, 0xE3F3, // <cjk>
+    0x80DB, 0xE3EE, // <cjk>
+    0x80DD, 0xE3F1, // <cjk>
+    0x80DE, 0x9645, // <cjk>
+    0x80E1, 0x8CD3, // <cjk>
+    0x80E4, 0x88FB, // <cjk>
+    0x80E5, 0xE3EF, // <cjk>
+    0x80EF, 0xE3F6, // <cjk>
+    0x80F1, 0xE3F7, // <cjk>
+    0x80F4, 0x93B7, // <cjk>
+    0x80F8, 0x8BB9, // <cjk>
+    0x80FC, 0xE445, // <cjk>
+    0x80FD, 0x945C, // <cjk>
+    0x8102, 0x8E89, // <cjk>
+    0x8105, 0x8BBA, // <cjk>
+    0x8106, 0x90C6, // <cjk>
+    0x8107, 0x9865, // <cjk>
+    0x8108, 0x96AC, // <cjk>
+    0x8109, 0xE3F5, // <cjk>
+    0x810A, 0x90D2, // <cjk>
+    0x811A, 0x8B72, // <cjk>
+    0x811B, 0xE3F8, // <cjk>
+    0x8123, 0xE3FA, // <cjk>
+    0x8129, 0xE3F9, // <cjk>
+    0x812F, 0xE3FB, // <cjk>
+    0x8131, 0x9245, // <cjk>
+    0x8133, 0x945D, // <cjk>
+    0x8139, 0x92AF, // <cjk>
+    0x813E, 0xE442, // <cjk>
+    0x8146, 0xE441, // <cjk>
+    0x814B, 0xE3FC, // <cjk>
+    0x814E, 0x9074, // <cjk>
+    0x8150, 0x9585, // <cjk>
+    0x8151, 0xE444, // <cjk>
+    0x8153, 0xE443, // <cjk>
+    0x8154, 0x8D6F, // <cjk>
+    0x8155, 0x9872, // <cjk>
+    0x815F, 0xE454, // <cjk>
+    0x8165, 0xE448, // <cjk>
+    0x8166, 0xE449, // <cjk>
+    0x816B, 0x8EEE, // <cjk>
+    0x816E, 0xE447, // <cjk>
+    0x8170, 0x8D98, // <cjk>
+    0x8171, 0xE446, // <cjk>
+    0x8174, 0xE44A, // <cjk>
+    0x8178, 0x92B0, // <cjk>
+    0x8179, 0x95A0, // <cjk>
+    0x817A, 0x9142, // <cjk>
+    0x817F, 0x91DA, // <cjk>
+    0x8180, 0xE44E, // <cjk>
+    0x8182, 0xE44F, // <cjk>
+    0x8183, 0xE44B, // <cjk>
+    0x8188, 0xE44C, // <cjk>
+    0x818A, 0xE44D, // <cjk>
+    0x818F, 0x8D70, // <cjk>
+    0x8193, 0xE455, // <cjk>
+    0x8195, 0xE451, // <cjk>
+    0x819A, 0x9586, // <cjk>
+    0x819C, 0x968C, // <cjk>
+    0x819D, 0x9547, // <cjk>
+    0x81A0, 0xE450, // <cjk>
+    0x81A3, 0xE453, // <cjk>
+    0x81A4, 0xE452, // <cjk>
+    0x81A8, 0x9663, // <cjk>
+    0x81A9, 0xE456, // <cjk>
+    0x81B0, 0xE457, // <cjk>
+    0x81B3, 0x9156, // <cjk>
+    0x81B5, 0xE458, // <cjk>
+    0x81B8, 0xE45A, // <cjk>
+    0x81BA, 0xE45E, // <cjk>
+    0x81BE, 0xE459, // <cjk>
+    0x81BF, 0x945E, // <cjk>
+    0x81C0, 0xE45C, // <cjk>
+    0x81C2, 0xE45D, // <cjk>
+    0x81C6, 0x89B0, // <cjk>
+    0x81C8, 0xE464, // <cjk>
+    0x81C9, 0xE45F, // <cjk>
+    0x81CD, 0xE460, // <cjk>
+    0x81D1, 0xE461, // <cjk>
+    0x81D3, 0x919F, // <cjk>
+    0x81D8, 0xE463, // <cjk>
+    0x81D9, 0xE462, // <cjk>
+    0x81DA, 0xE465, // <cjk>
+    0x81DF, 0xE466, // <cjk>
+    0x81E0, 0xE467, // <cjk>
+    0x81E3, 0x9062, // <cjk>
+    0x81E5, 0x89E7, // <cjk>
+    0x81E7, 0xE468, // <cjk>
+    0x81E8, 0x97D5, // <cjk>
+    0x81EA, 0x8EA9, // <cjk>
+    0x81ED, 0x8F4C, // <cjk>
+    0x81F3, 0x8E8A, // <cjk>
+    0x81F4, 0x9276, // <cjk>
+    0x81FA, 0xE469, // <cjk>
+    0x81FB, 0xE46A, // <cjk>
+    0x81FC, 0x8950, // <cjk>
+    0x81FE, 0xE46B, // <cjk>
+    0x8201, 0xE46C, // <cjk>
+    0x8202, 0xE46D, // <cjk>
+    0x8205, 0xE46E, // <cjk>
+    0x8207, 0xE46F, // <cjk>
+    0x8208, 0x8BBB, // <cjk>
+    0x8209, 0x9DA8, // <cjk>
+    0x820A, 0xE470, // <cjk>
+    0x820C, 0x90E3, // <cjk>
+    0x820D, 0xE471, // <cjk>
+    0x820E, 0x8EC9, // <cjk>
+    0x8210, 0xE472, // <cjk>
+    0x8212, 0x98AE, // <cjk>
+    0x8216, 0xE473, // <cjk>
+    0x8217, 0x95DC, // <cjk>
+    0x8218, 0x8ADA, // <cjk>
+    0x821B, 0x9143, // <cjk>
+    0x821C, 0x8F77, // <cjk>
+    0x821E, 0x9591, // <cjk>
+    0x821F, 0x8F4D, // <cjk>
+    0x8229, 0xE474, // <cjk>
+    0x822A, 0x8D71, // <cjk>
+    0x822B, 0xE475, // <cjk>
+    0x822C, 0x94CA, // <cjk>
+    0x822E, 0xE484, // <cjk>
+    0x8233, 0xE477, // <cjk>
+    0x8235, 0x91C7, // <cjk>
+    0x8236, 0x9495, // <cjk>
+    0x8237, 0x8CBD, // <cjk>
+    0x8238, 0xE476, // <cjk>
+    0x8239, 0x9144, // <cjk>
+    0x8240, 0xE478, // <cjk>
+    0x8247, 0x92F8, // <cjk>
+    0x8258, 0xE47A, // <cjk>
+    0x8259, 0xE479, // <cjk>
+    0x825A, 0xE47C, // <cjk>
+    0x825D, 0xE47B, // <cjk>
+    0x825F, 0xE47D, // <cjk>
+    0x8262, 0xE480, // <cjk>
+    0x8264, 0xE47E, // <cjk>
+    0x8266, 0x8ACD, // <cjk>
+    0x8268, 0xE481, // <cjk>
+    0x826A, 0xE482, // <cjk>
+    0x826B, 0xE483, // <cjk>
+    0x826E, 0x8DAF, // <cjk>
+    0x826F, 0x97C7, // <cjk>
+    0x8271, 0xE485, // <cjk>
+    0x8272, 0x9046, // <cjk>
+    0x8276, 0x8990, // <cjk>
+    0x8277, 0xE486, // <cjk>
+    0x8278, 0xE487, // <cjk>
+    0x827E, 0xE488, // <cjk>
+    0x828B, 0x88F0, // <cjk>
+    0x828D, 0xE489, // <cjk>
+    0x8292, 0xE48A, // <cjk>
+    0x8299, 0x9587, // <cjk>
+    0x829D, 0x8EC5, // <cjk>
+    0x829F, 0xE48C, // <cjk>
+    0x82A5, 0x8A48, // <cjk>
+    0x82A6, 0x88B0, // <cjk>
+    0x82AB, 0xE48B, // <cjk>
+    0x82AC, 0xE48E, // <cjk>
+    0x82AD, 0x946D, // <cjk>
+    0x82AF, 0x9063, // <cjk>
+    0x82B1, 0x89D4, // <cjk>
+    0x82B3, 0x9646, // <cjk>
+    0x82B8, 0x8C7C, // <cjk>
+    0x82B9, 0x8BDA, // <cjk>
+    0x82BB, 0xE48D, // <cjk>
+    0x82BD, 0x89E8, // <cjk>
+    0x82C5, 0x8AA1, // <cjk>
+    0x82D1, 0x8991, // <cjk>
+    0x82D2, 0xE492, // <cjk>
+    0x82D3, 0x97E8, // <cjk>
+    0x82D4, 0x91DB, // <cjk>
+    0x82D7, 0x9563, // <cjk>
+    0x82D9, 0xE49E, // <cjk>
+    0x82DB, 0x89D5, // <cjk>
+    0x82DC, 0xE49C, // <cjk>
+    0x82DE, 0xE49A, // <cjk>
+    0x82DF, 0xE491, // <cjk>
+    0x82E1, 0xE48F, // <cjk>
+    0x82E3, 0xE490, // <cjk>
+    0x82E5, 0x8EE1, // <cjk>
+    0x82E6, 0x8BEA, // <cjk>
+    0x82E7, 0x9297, // <cjk>
+    0x82EB, 0x93CF, // <cjk>
+    0x82F1, 0x8970, // <cjk>
+    0x82F3, 0xE494, // <cjk>
+    0x82F4, 0xE493, // <cjk>
+    0x82F9, 0xE499, // <cjk>
+    0x82FA, 0xE495, // <cjk>
+    0x82FB, 0xE498, // <cjk>
+    0x8302, 0x96CE, // <cjk>
+    0x8303, 0xE497, // <cjk>
+    0x8304, 0x89D6, // <cjk>
+    0x8305, 0x8A9D, // <cjk>
+    0x8306, 0xE49B, // <cjk>
+    0x8309, 0xE49D, // <cjk>
+    0x830E, 0x8C73, // <cjk>
+    0x8316, 0xE4A1, // <cjk>
+    0x8317, 0xE4AA, // <cjk>
+    0x8318, 0xE4AB, // <cjk>
+    0x831C, 0x88A9, // <cjk>
+    0x8323, 0xE4B2, // <cjk>
+    0x8328, 0x88EF, // <cjk>
+    0x832B, 0xE4A9, // <cjk>
+    0x832F, 0xE4A8, // <cjk>
+    0x8331, 0xE4A3, // <cjk>
+    0x8332, 0xE4A2, // <cjk>
+    0x8334, 0xE4A0, // <cjk>
+    0x8335, 0xE49F, // <cjk>
+    0x8336, 0x9283, // <cjk>
+    0x8338, 0x91F9, // <cjk>
+    0x8339, 0xE4A5, // <cjk>
+    0x8340, 0xE4A4, // <cjk>
+    0x8345, 0xE4A7, // <cjk>
+    0x8349, 0x9190, // <cjk>
+    0x834A, 0x8C74, // <cjk>
+    0x834F, 0x8960, // <cjk>
+    0x8350, 0xE4A6, // <cjk>
+    0x8352, 0x8D72, // <cjk>
+    0x8358, 0x9191, // <cjk>
+    0x8373, 0xE4B8, // <cjk>
+    0x8375, 0xE4B9, // <cjk>
+    0x8377, 0x89D7, // <cjk>
+    0x837B, 0x89AC, // <cjk>
+    0x837C, 0xE4B6, // <cjk>
+    0x8385, 0xE4AC, // <cjk>
+    0x8387, 0xE4B4, // <cjk>
+    0x8389, 0xE4BB, // <cjk>
+    0x838A, 0xE4B5, // <cjk>
+    0x838E, 0xE4B3, // <cjk>
+    0x8393, 0xE496, // <cjk>
+    0x8396, 0xE4B1, // <cjk>
+    0x839A, 0xE4AD, // <cjk>
+    0x839E, 0x8ACE, // <cjk>
+    0x839F, 0xE4AF, // <cjk>
+    0x83A0, 0xE4BA, // <cjk>
+    0x83A2, 0xE4B0, // <cjk>
+    0x83A8, 0xE4BC, // <cjk>
+    0x83AA, 0xE4AE, // <cjk>
+    0x83AB, 0x949C, // <cjk>
+    0x83B1, 0x9789, // <cjk>
+    0x83B5, 0xE4B7, // <cjk>
+    0x83BD, 0xE4CD, // <cjk>
+    0x83C1, 0xE4C5, // <cjk>
+    0x83C5, 0x909B, // <cjk>
+    0x83CA, 0x8B65, // <cjk>
+    0x83CC, 0x8BDB, // <cjk>
+    0x83CE, 0xE4C0, // <cjk>
+    0x83D3, 0x89D9, // <cjk>
+    0x83D6, 0x8FD2, // <cjk>
+    0x83D8, 0xE4C3, // <cjk>
+    0x83DC, 0x8DD8, // <cjk>
+    0x83DF, 0x9370, // <cjk>
+    0x83E0, 0xE4C8, // <cjk>
+    0x83E9, 0x95EC, // <cjk>
+    0x83EB, 0xE4BF, // <cjk>
+    0x83EF, 0x89D8, // <cjk>
+    0x83F0, 0x8CD4, // <cjk>
+    0x83F1, 0x9548, // <cjk>
+    0x83F2, 0xE4C9, // <cjk>
+    0x83F4, 0xE4BD, // <cjk>
+    0x83F7, 0xE4C6, // <cjk>
+    0x83FB, 0xE4D0, // <cjk>
+    0x83FD, 0xE4C1, // <cjk>
+    0x8403, 0xE4C2, // <cjk>
+    0x8404, 0x93B8, // <cjk>
+    0x8407, 0xE4C7, // <cjk>
+    0x840B, 0xE4C4, // <cjk>
+    0x840C, 0x9647, // <cjk>
+    0x840D, 0xE4CA, // <cjk>
+    0x840E, 0x88DE, // <cjk>
+    0x8413, 0xE4BE, // <cjk>
+    0x8420, 0xE4CC, // <cjk>
+    0x8422, 0xE4CB, // <cjk>
+    0x8429, 0x948B, // <cjk>
+    0x842A, 0xE4D2, // <cjk>
+    0x842C, 0xE4DD, // <cjk>
+    0x8431, 0x8A9E, // <cjk>
+    0x8435, 0xE4E0, // <cjk>
+    0x8438, 0xE4CE, // <cjk>
+    0x843C, 0xE4D3, // <cjk>
+    0x843D, 0x978E, // <cjk>
+    0x8446, 0xE4DC, // <cjk>
+    0x8449, 0x9774, // <cjk>
+    0x844E, 0x97A8, // <cjk>
+    0x8457, 0x9298, // <cjk>
+    0x845B, 0x8A8B, // <cjk>
+    0x8461, 0x9592, // <cjk>
+    0x8462, 0xE4E2, // <cjk>
+    0x8463, 0x939F, // <cjk>
+    0x8466, 0x88AF, // <cjk>
+    0x8469, 0xE4DB, // <cjk>
+    0x846B, 0xE4D7, // <cjk>
+    0x846C, 0x9192, // <cjk>
+    0x846D, 0xE4D1, // <cjk>
+    0x846E, 0xE4D9, // <cjk>
+    0x846F, 0xE4DE, // <cjk>
+    0x8471, 0x944B, // <cjk>
+    0x8475, 0x88A8, // <cjk>
+    0x8477, 0xE4D6, // <cjk>
+    0x8479, 0xE4DF, // <cjk>
+    0x847A, 0x9598, // <cjk>
+    0x8482, 0xE4DA, // <cjk>
+    0x8484, 0xE4D5, // <cjk>
+    0x848B, 0x8FD3, // <cjk>
+    0x8490, 0x8F4E, // <cjk>
+    0x8494, 0x8EAA, // <cjk>
+    0x8499, 0x96D6, // <cjk>
+    0x849C, 0x9566, // <cjk>
+    0x849F, 0xE4E5, // <cjk>
+    0x84A1, 0xE4EE, // <cjk>
+    0x84AD, 0xE4D8, // <cjk>
+    0x84B2, 0x8A97, // <cjk>
+    0x84B8, 0x8FF6, // <cjk>
+    0x84B9, 0xE4E3, // <cjk>
+    0x84BB, 0xE4E8, // <cjk>
+    0x84BC, 0x9193, // <cjk>
+    0x84BF, 0xE4E4, // <cjk>
+    0x84C1, 0xE4EB, // <cjk>
+    0x84C4, 0x927E, // <cjk>
+    0x84C6, 0xE4EC, // <cjk>
+    0x84C9, 0x9775, // <cjk>
+    0x84CA, 0xE4E1, // <cjk>
+    0x84CB, 0x8A57, // <cjk>
+    0x84CD, 0xE4E7, // <cjk>
+    0x84D0, 0xE4EA, // <cjk>
+    0x84D1, 0x96AA, // <cjk>
+    0x84D6, 0xE4ED, // <cjk>
+    0x84D9, 0xE4E6, // <cjk>
+    0x84DA, 0xE4E9, // <cjk>
+    0x84EC, 0x9648, // <cjk>
+    0x84EE, 0x9840, // <cjk>
+    0x84F4, 0xE4F1, // <cjk>
+    0x84FC, 0xE4F8, // <cjk>
+    0x84FF, 0xE4F0, // <cjk>
+    0x8500, 0x8EC1, // <cjk>
+    0x8506, 0xE4CF, // <cjk>
+    0x8511, 0x95CC, // <cjk>
+    0x8513, 0x96A0, // <cjk>
+    0x8514, 0xE4F7, // <cjk>
+    0x8515, 0xE4F6, // <cjk>
+    0x8517, 0xE4F2, // <cjk>
+    0x8518, 0xE4F3, // <cjk>
+    0x851A, 0x8955, // <cjk>
+    0x851F, 0xE4F5, // <cjk>
+    0x8521, 0xE4EF, // <cjk>
+    0x8526, 0x92D3, // <cjk>
+    0x852C, 0xE4F4, // <cjk>
+    0x852D, 0x88FC, // <cjk>
+    0x8535, 0x91A0, // <cjk>
+    0x853D, 0x95C1, // <cjk>
+    0x8540, 0xE4F9, // <cjk>
+    0x8541, 0xE540, // <cjk>
+    0x8543, 0x94D7, // <cjk>
+    0x8548, 0xE4FC, // <cjk>
+    0x8549, 0x8FD4, // <cjk>
+    0x854A, 0x8EC7, // <cjk>
+    0x854B, 0xE542, // <cjk>
+    0x854E, 0x8BBC, // <cjk>
+    0x8555, 0xE543, // <cjk>
+    0x8557, 0x9599, // <cjk>
+    0x8558, 0xE4FB, // <cjk>
+    0x855A, 0xE4D4, // <cjk>
+    0x8563, 0xE4FA, // <cjk>
+    0x8568, 0x986E, // <cjk>
+    0x8569, 0x93A0, // <cjk>
+    0x856A, 0x9593, // <cjk>
+    0x856D, 0xE54A, // <cjk>
+    0x8577, 0xE550, // <cjk>
+    0x857E, 0xE551, // <cjk>
+    0x8580, 0xE544, // <cjk>
+    0x8584, 0x9496, // <cjk>
+    0x8587, 0xE54E, // <cjk>
+    0x8588, 0xE546, // <cjk>
+    0x858A, 0xE548, // <cjk>
+    0x8590, 0xE552, // <cjk>
+    0x8591, 0xE547, // <cjk>
+    0x8594, 0xE54B, // <cjk>
+    0x8597, 0x8992, // <cjk>
+    0x8599, 0x93E3, // <cjk>
+    0x859B, 0xE54C, // <cjk>
+    0x859C, 0xE54F, // <cjk>
+    0x85A4, 0xE545, // <cjk>
+    0x85A6, 0x9145, // <cjk>
+    0x85A8, 0xE549, // <cjk>
+    0x85A9, 0x8E46, // <cjk>
+    0x85AA, 0x9064, // <cjk>
+    0x85AB, 0x8C4F, // <cjk>
+    0x85AC, 0x96F2, // <cjk>
+    0x85AE, 0x96F7, // <cjk>
+    0x85AF, 0x8F92, // <cjk>
+    0x85B9, 0xE556, // <cjk>
+    0x85BA, 0xE554, // <cjk>
+    0x85C1, 0x986D, // <cjk>
+    0x85C9, 0xE553, // <cjk>
+    0x85CD, 0x9795, // <cjk>
+    0x85CF, 0xE555, // <cjk>
+    0x85D0, 0xE557, // <cjk>
+    0x85D5, 0xE558, // <cjk>
+    0x85DD, 0xE559, // <cjk>
+    0x85E4, 0x93A1, // <cjk>
+    0x85E5, 0xE55A, // <cjk>
+    0x85E9, 0x94CB, // <cjk>
+    0x85EA, 0xE54D, // <cjk>
+    0x85F7, 0x8F93, // <cjk>
+    0x85F9, 0xE55C, // <cjk>
+    0x85FA, 0xE561, // <cjk>
+    0x85FB, 0x9194, // <cjk>
+    0x85FE, 0xE560, // <cjk>
+    0x8602, 0xE541, // <cjk>
+    0x8606, 0xE562, // <cjk>
+    0x8607, 0x9168, // <cjk>
+    0x860A, 0xE55D, // <cjk>
+    0x860B, 0xE55F, // <cjk>
+    0x8613, 0xE55E, // <cjk>
+    0x8616, 0x9F50, // <cjk>
+    0x8617, 0x9F41, // <cjk>
+    0x861A, 0xE564, // <cjk>
+    0x8622, 0xE563, // <cjk>
+    0x862D, 0x9796, // <cjk>
+    0x862F, 0xE1BA, // <cjk>
+    0x8630, 0xE565, // <cjk>
+    0x863F, 0xE566, // <cjk>
+    0x864D, 0xE567, // <cjk>
+    0x864E, 0x8CD5, // <cjk>
+    0x8650, 0x8B73, // <cjk>
+    0x8654, 0xE569, // <cjk>
+    0x8655, 0x997C, // <cjk>
+    0x865A, 0x8B95, // <cjk>
+    0x865C, 0x97B8, // <cjk>
+    0x865E, 0x8BF1, // <cjk>
+    0x865F, 0xE56A, // <cjk>
+    0x8667, 0xE56B, // <cjk>
+    0x866B, 0x928E, // <cjk>
+    0x8671, 0xE56C, // <cjk>
+    0x8679, 0x93F8, // <cjk>
+    0x867B, 0x88B8, // <cjk>
+    0x868A, 0x89E1, // <cjk>
+    0x868B, 0xE571, // <cjk>
+    0x868C, 0xE572, // <cjk>
+    0x8693, 0xE56D, // <cjk>
+    0x8695, 0x8E5C, // <cjk>
+    0x86A3, 0xE56E, // <cjk>
+    0x86A4, 0x9461, // <cjk>
+    0x86A9, 0xE56F, // <cjk>
+    0x86AA, 0xE570, // <cjk>
+    0x86AB, 0xE57A, // <cjk>
+    0x86AF, 0xE574, // <cjk>
+    0x86B0, 0xE577, // <cjk>
+    0x86B6, 0xE573, // <cjk>
+    0x86C4, 0xE575, // <cjk>
+    0x86C6, 0xE576, // <cjk>
+    0x86C7, 0x8ED6, // <cjk>
+    0x86C9, 0xE578, // <cjk>
+    0x86CB, 0x9260, // <cjk>
+    0x86CD, 0x8C75, // <cjk>
+    0x86CE, 0x8A61, // <cjk>
+    0x86D4, 0xE57B, // <cjk>
+    0x86D9, 0x8A5E, // <cjk>
+    0x86DB, 0xE581, // <cjk>
+    0x86DE, 0xE57C, // <cjk>
+    0x86DF, 0xE580, // <cjk>
+    0x86E4, 0x94B8, // <cjk>
+    0x86E9, 0xE57D, // <cjk>
+    0x86EC, 0xE57E, // <cjk>
+    0x86ED, 0x9567, // <cjk>
+    0x86EE, 0x94D8, // <cjk>
+    0x86EF, 0xE582, // <cjk>
+    0x86F8, 0x91FB, // <cjk>
+    0x86F9, 0xE58C, // <cjk>
+    0x86FB, 0xE588, // <cjk>
+    0x86FE, 0x89E9, // <cjk>
+    0x8700, 0xE586, // <cjk>
+    0x8702, 0x9649, // <cjk>
+    0x8703, 0xE587, // <cjk>
+    0x8706, 0xE584, // <cjk>
+    0x8708, 0xE585, // <cjk>
+    0x8709, 0xE58A, // <cjk>
+    0x870A, 0xE58D, // <cjk>
+    0x870D, 0xE58B, // <cjk>
+    0x8711, 0xE589, // <cjk>
+    0x8712, 0xE583, // <cjk>
+    0x8718, 0x9277, // <cjk>
+    0x871A, 0xE594, // <cjk>
+    0x871C, 0x96A8, // <cjk>
+    0x8725, 0xE592, // <cjk>
+    0x8729, 0xE593, // <cjk>
+    0x8734, 0xE58E, // <cjk>
+    0x8737, 0xE590, // <cjk>
+    0x873B, 0xE591, // <cjk>
+    0x873F, 0xE58F, // <cjk>
+    0x8749, 0x90E4, // <cjk>
+    0x874B, 0x9858, // <cjk>
+    0x874C, 0xE598, // <cjk>
+    0x874E, 0xE599, // <cjk>
+    0x8753, 0xE59F, // <cjk>
+    0x8755, 0x9049, // <cjk>
+    0x8757, 0xE59B, // <cjk>
+    0x8759, 0xE59E, // <cjk>
+    0x875F, 0xE596, // <cjk>
+    0x8760, 0xE595, // <cjk>
+    0x8763, 0xE5A0, // <cjk>
+    0x8766, 0x89DA, // <cjk>
+    0x8768, 0xE59C, // <cjk>
+    0x876A, 0xE5A1, // <cjk>
+    0x876E, 0xE59D, // <cjk>
+    0x8774, 0xE59A, // <cjk>
+    0x8776, 0x92B1, // <cjk>
+    0x8778, 0xE597, // <cjk>
+    0x877F, 0x9488, // <cjk>
+    0x8782, 0xE5A5, // <cjk>
+    0x878D, 0x975A, // <cjk>
+    0x879F, 0xE5A4, // <cjk>
+    0x87A2, 0xE5A3, // <cjk>
+    0x87AB, 0xE5AC, // <cjk>
+    0x87AF, 0xE5A6, // <cjk>
+    0x87B3, 0xE5AE, // <cjk>
+    0x87BA, 0x9786, // <cjk>
+    0x87BB, 0xE5B1, // <cjk>
+    0x87BD, 0xE5A8, // <cjk>
+    0x87C0, 0xE5A9, // <cjk>
+    0x87C4, 0xE5AD, // <cjk>
+    0x87C6, 0xE5B0, // <cjk>
+    0x87C7, 0xE5AF, // <cjk>
+    0x87CB, 0xE5A7, // <cjk>
+    0x87D0, 0xE5AA, // <cjk>
+    0x87D2, 0xE5BB, // <cjk>
+    0x87E0, 0xE5B4, // <cjk>
+    0x87EF, 0xE5B2, // <cjk>
+    0x87F2, 0xE5B3, // <cjk>
+    0x87F6, 0xE5B8, // <cjk>
+    0x87F7, 0xE5B9, // <cjk>
+    0x87F9, 0x8A49, // <cjk>
+    0x87FB, 0x8B61, // <cjk>
+    0x87FE, 0xE5B7, // <cjk>
+    0x8805, 0xE5A2, // <cjk>
+    0x880D, 0xE5B6, // <cjk>
+    0x880E, 0xE5BA, // <cjk>
+    0x880F, 0xE5B5, // <cjk>
+    0x8811, 0xE5BC, // <cjk>
+    0x8815, 0xE5BE, // <cjk>
+    0x8816, 0xE5BD, // <cjk>
+    0x8821, 0xE5C0, // <cjk>
+    0x8822, 0xE5BF, // <cjk>
+    0x8823, 0xE579, // <cjk>
+    0x8827, 0xE5C4, // <cjk>
+    0x8831, 0xE5C1, // <cjk>
+    0x8836, 0xE5C2, // <cjk>
+    0x8839, 0xE5C3, // <cjk>
+    0x883B, 0xE5C5, // <cjk>
+    0x8840, 0x8C8C, // <cjk>
+    0x8842, 0xE5C7, // <cjk>
+    0x8844, 0xE5C6, // <cjk>
+    0x8846, 0x8F4F, // <cjk>
+    0x884C, 0x8D73, // <cjk>
+    0x884D, 0x9FA5, // <cjk>
+    0x8852, 0xE5C8, // <cjk>
+    0x8853, 0x8F70, // <cjk>
+    0x8857, 0x8A58, // <cjk>
+    0x8859, 0xE5C9, // <cjk>
+    0x885B, 0x8971, // <cjk>
+    0x885D, 0x8FD5, // <cjk>
+    0x885E, 0xE5CA, // <cjk>
+    0x8861, 0x8D74, // <cjk>
+    0x8862, 0xE5CB, // <cjk>
+    0x8863, 0x88DF, // <cjk>
+    0x8868, 0x955C, // <cjk>
+    0x886B, 0xE5CC, // <cjk>
+    0x8870, 0x908A, // <cjk>
+    0x8872, 0xE5D3, // <cjk>
+    0x8875, 0xE5D0, // <cjk>
+    0x8877, 0x928F, // <cjk>
+    0x887D, 0xE5D1, // <cjk>
+    0x887E, 0xE5CE, // <cjk>
+    0x887F, 0x8BDC, // <cjk>
+    0x8881, 0xE5CD, // <cjk>
+    0x8882, 0xE5D4, // <cjk>
+    0x8888, 0x8C55, // <cjk>
+    0x888B, 0x91DC, // <cjk>
+    0x888D, 0xE5DA, // <cjk>
+    0x8892, 0xE5D6, // <cjk>
+    0x8896, 0x91B3, // <cjk>
+    0x8897, 0xE5D5, // <cjk>
+    0x8899, 0xE5D8, // <cjk>
+    0x889E, 0xE5CF, // <cjk>
+    0x88A2, 0xE5D9, // <cjk>
+    0x88A4, 0xE5DB, // <cjk>
+    0x88AB, 0x94ED, // <cjk>
+    0x88AE, 0xE5D7, // <cjk>
+    0x88B0, 0xE5DC, // <cjk>
+    0x88B1, 0xE5DE, // <cjk>
+    0x88B4, 0x8CD1, // <cjk>
+    0x88B5, 0xE5D2, // <cjk>
+    0x88B7, 0x88BF, // <cjk>
+    0x88BF, 0xE5DD, // <cjk>
+    0x88C1, 0x8DD9, // <cjk>
+    0x88C2, 0x97F4, // <cjk>
+    0x88C3, 0xE5DF, // <cjk>
+    0x88C4, 0xE5E0, // <cjk>
+    0x88C5, 0x9195, // <cjk>
+    0x88CF, 0x97A0, // <cjk>
+    0x88D4, 0xE5E1, // <cjk>
+    0x88D5, 0x9754, // <cjk>
+    0x88D8, 0xE5E2, // <cjk>
+    0x88D9, 0xE5E3, // <cjk>
+    0x88DC, 0x95E2, // <cjk>
+    0x88DD, 0xE5E4, // <cjk>
+    0x88DF, 0x8DBE, // <cjk>
+    0x88E1, 0x97A1, // <cjk>
+    0x88E8, 0xE5E9, // <cjk>
+    0x88F2, 0xE5EA, // <cjk>
+    0x88F3, 0x8FD6, // <cjk>
+    0x88F4, 0xE5E8, // <cjk>
+    0x88F8, 0x9787, // <cjk>
+    0x88F9, 0xE5E5, // <cjk>
+    0x88FC, 0xE5E7, // <cjk>
+    0x88FD, 0x90BB, // <cjk>
+    0x88FE, 0x909E, // <cjk>
+    0x8902, 0xE5E6, // <cjk>
+    0x8904, 0xE5EB, // <cjk>
+    0x8907, 0x95A1, // <cjk>
+    0x890A, 0xE5ED, // <cjk>
+    0x890C, 0xE5EC, // <cjk>
+    0x8910, 0x8A8C, // <cjk>
+    0x8912, 0x964A, // <cjk>
+    0x8913, 0xE5EE, // <cjk>
+    0x891D, 0xE5FA, // <cjk>
+    0x891E, 0xE5F0, // <cjk>
+    0x8925, 0xE5F1, // <cjk>
+    0x892A, 0xE5F2, // <cjk>
+    0x892B, 0xE5F3, // <cjk>
+    0x8936, 0xE5F7, // <cjk>
+    0x8938, 0xE5F8, // <cjk>
+    0x893B, 0xE5F6, // <cjk>
+    0x8941, 0xE5F4, // <cjk>
+    0x8943, 0xE5EF, // <cjk>
+    0x8944, 0xE5F5, // <cjk>
+    0x894C, 0xE5F9, // <cjk>
+    0x894D, 0xE8B5, // <cjk>
+    0x8956, 0x89A6, // <cjk>
+    0x895E, 0xE5FC, // <cjk>
+    0x895F, 0x8BDD, // <cjk>
+    0x8960, 0xE5FB, // <cjk>
+    0x8964, 0xE641, // <cjk>
+    0x8966, 0xE640, // <cjk>
+    0x896A, 0xE643, // <cjk>
+    0x896D, 0xE642, // <cjk>
+    0x896F, 0xE644, // <cjk>
+    0x8972, 0x8F50, // <cjk>
+    0x8974, 0xE645, // <cjk>
+    0x8977, 0xE646, // <cjk>
+    0x897E, 0xE647, // <cjk>
+    0x897F, 0x90BC, // <cjk>
+    0x8981, 0x9776, // <cjk>
+    0x8983, 0xE648, // <cjk>
+    0x8986, 0x95A2, // <cjk>
+    0x8987, 0x9465, // <cjk>
+    0x8988, 0xE649, // <cjk>
+    0x898A, 0xE64A, // <cjk>
+    0x898B, 0x8CA9, // <cjk>
+    0x898F, 0x8B4B, // <cjk>
+    0x8993, 0xE64B, // <cjk>
+    0x8996, 0x8E8B, // <cjk>
+    0x8997, 0x9460, // <cjk>
+    0x8998, 0xE64C, // <cjk>
+    0x899A, 0x8A6F, // <cjk>
+    0x89A1, 0xE64D, // <cjk>
+    0x89A6, 0xE64F, // <cjk>
+    0x89A7, 0x9797, // <cjk>
+    0x89A9, 0xE64E, // <cjk>
+    0x89AA, 0x9065, // <cjk>
+    0x89AC, 0xE650, // <cjk>
+    0x89AF, 0xE651, // <cjk>
+    0x89B2, 0xE652, // <cjk>
+    0x89B3, 0x8ACF, // <cjk>
+    0x89BA, 0xE653, // <cjk>
+    0x89BD, 0xE654, // <cjk>
+    0x89BF, 0xE655, // <cjk>
+    0x89C0, 0xE656, // <cjk>
+    0x89D2, 0x8A70, // <cjk>
+    0x89DA, 0xE657, // <cjk>
+    0x89DC, 0xE658, // <cjk>
+    0x89DD, 0xE659, // <cjk>
+    0x89E3, 0x89F0, // <cjk>
+    0x89E6, 0x9047, // <cjk>
+    0x89E7, 0xE65A, // <cjk>
+    0x89F8, 0xE65C, // <cjk>
+    0x8A00, 0x8CBE, // <cjk>
+    0x8A02, 0x92F9, // <cjk>
+    0x8A03, 0xE65D, // <cjk>
+    0x8A08, 0x8C76, // <cjk>
+    0x8A0A, 0x9075, // <cjk>
+    0x8A0C, 0xE660, // <cjk>
+    0x8A0E, 0x93A2, // <cjk>
+    0x8A10, 0xE65F, // <cjk>
+    0x8A13, 0x8C50, // <cjk>
+    0x8A16, 0xE65E, // <cjk>
+    0x8A17, 0x91F5, // <cjk>
+    0x8A18, 0x8B4C, // <cjk>
+    0x8A1B, 0xE661, // <cjk>
+    0x8A1D, 0xE662, // <cjk>
+    0x8A1F, 0x8FD7, // <cjk>
+    0x8A23, 0x8C8D, // <cjk>
+    0x8A25, 0xE663, // <cjk>
+    0x8A2A, 0x964B, // <cjk>
+    0x8A2D, 0x90DD, // <cjk>
+    0x8A31, 0x8B96, // <cjk>
+    0x8A33, 0x96F3, // <cjk>
+    0x8A34, 0x9169, // <cjk>
+    0x8A36, 0xE664, // <cjk>
+    0x8A3A, 0x9066, // <cjk>
+    0x8A3B, 0x9290, // <cjk>
+    0x8A3C, 0x8FD8, // <cjk>
+    0x8A41, 0xE665, // <cjk>
+    0x8A46, 0xE668, // <cjk>
+    0x8A48, 0xE669, // <cjk>
+    0x8A50, 0x8DBC, // <cjk>
+    0x8A51, 0x91C0, // <cjk>
+    0x8A52, 0xE667, // <cjk>
+    0x8A54, 0x8FD9, // <cjk>
+    0x8A55, 0x955D, // <cjk>
+    0x8A5B, 0xE666, // <cjk>
+    0x8A5E, 0x8E8C, // <cjk>
+    0x8A60, 0x8972, // <cjk>
+    0x8A62, 0xE66D, // <cjk>
+    0x8A63, 0x8C77, // <cjk>
+    0x8A66, 0x8E8E, // <cjk>
+    0x8A69, 0x8E8D, // <cjk>
+    0x8A6B, 0x986C, // <cjk>
+    0x8A6C, 0xE66C, // <cjk>
+    0x8A6D, 0xE66B, // <cjk>
+    0x8A6E, 0x9146, // <cjk>
+    0x8A70, 0x8B6C, // <cjk>
+    0x8A71, 0x9862, // <cjk>
+    0x8A72, 0x8A59, // <cjk>
+    0x8A73, 0x8FDA, // <cjk>
+    0x8A7C, 0xE66A, // <cjk>
+    0x8A82, 0xE66F, // <cjk>
+    0x8A84, 0xE670, // <cjk>
+    0x8A85, 0xE66E, // <cjk>
+    0x8A87, 0x8CD6, // <cjk>
+    0x8A89, 0x975F, // <cjk>
+    0x8A8C, 0x8E8F, // <cjk>
+    0x8A8D, 0x9446, // <cjk>
+    0x8A91, 0xE673, // <cjk>
+    0x8A93, 0x90BE, // <cjk>
+    0x8A95, 0x9261, // <cjk>
+    0x8A98, 0x9755, // <cjk>
+    0x8A9A, 0xE676, // <cjk>
+    0x8A9E, 0x8CEA, // <cjk>
+    0x8AA0, 0x90BD, // <cjk>
+    0x8AA1, 0xE672, // <cjk>
+    0x8AA3, 0xE677, // <cjk>
+    0x8AA4, 0x8CEB, // <cjk>
+    0x8AA5, 0xE674, // <cjk>
+    0x8AA6, 0xE675, // <cjk>
+    0x8AA8, 0xE671, // <cjk>
+    0x8AAC, 0x90E0, // <cjk>
+    0x8AAD, 0x93C7, // <cjk>
+    0x8AB0, 0x924E, // <cjk>
+    0x8AB2, 0x89DB, // <cjk>
+    0x8AB9, 0x94EE, // <cjk>
+    0x8ABC, 0x8B62, // <cjk>
+    0x8ABF, 0x92B2, // <cjk>
+    0x8AC2, 0xE67A, // <cjk>
+    0x8AC4, 0xE678, // <cjk>
+    0x8AC7, 0x926B, // <cjk>
+    0x8ACB, 0x90BF, // <cjk>
+    0x8ACC, 0x8AD0, // <cjk>
+    0x8ACD, 0xE679, // <cjk>
+    0x8ACF, 0x907A, // <cjk>
+    0x8AD2, 0x97C8, // <cjk>
+    0x8AD6, 0x985F, // <cjk>
+    0x8ADA, 0xE67B, // <cjk>
+    0x8ADB, 0xE687, // <cjk>
+    0x8ADC, 0x92B3, // <cjk>
+    0x8ADE, 0xE686, // <cjk>
+    0x8AE0, 0xE683, // <cjk>
+    0x8AE1, 0xE68B, // <cjk>
+    0x8AE2, 0xE684, // <cjk>
+    0x8AE4, 0xE680, // <cjk>
+    0x8AE6, 0x92FA, // <cjk>
+    0x8AE7, 0xE67E, // <cjk>
+    0x8AEB, 0xE67C, // <cjk>
+    0x8AED, 0x9740, // <cjk>
+    0x8AEE, 0x8E90, // <cjk>
+    0x8AF1, 0xE681, // <cjk>
+    0x8AF3, 0xE67D, // <cjk>
+    0x8AF7, 0xE685, // <cjk>
+    0x8AF8, 0x8F94, // <cjk>
+    0x8AFA, 0x8CBF, // <cjk>
+    0x8AFE, 0x91F8, // <cjk>
+    0x8B00, 0x9664, // <cjk>
+    0x8B01, 0x8979, // <cjk>
+    0x8B02, 0x88E0, // <cjk>
+    0x8B04, 0x93A3, // <cjk>
+    0x8B07, 0xE689, // <cjk>
+    0x8B0C, 0xE688, // <cjk>
+    0x8B0E, 0x93E4, // <cjk>
+    0x8B10, 0xE68D, // <cjk>
+    0x8B14, 0xE682, // <cjk>
+    0x8B16, 0xE68C, // <cjk>
+    0x8B17, 0xE68E, // <cjk>
+    0x8B19, 0x8CAA, // <cjk>
+    0x8B1A, 0xE68A, // <cjk>
+    0x8B1B, 0x8D75, // <cjk>
+    0x8B1D, 0x8ED3, // <cjk>
+    0x8B20, 0xE68F, // <cjk>
+    0x8B21, 0x9777, // <cjk>
+    0x8B26, 0xE692, // <cjk>
+    0x8B28, 0xE695, // <cjk>
+    0x8B2B, 0xE693, // <cjk>
+    0x8B2C, 0x9554, // <cjk>
+    0x8B33, 0xE690, // <cjk>
+    0x8B39, 0x8BDE, // <cjk>
+    0x8B3E, 0xE694, // <cjk>
+    0x8B41, 0xE696, // <cjk>
+    0x8B49, 0xE69A, // <cjk>
+    0x8B4C, 0xE697, // <cjk>
+    0x8B4E, 0xE699, // <cjk>
+    0x8B4F, 0xE698, // <cjk>
+    0x8B56, 0xE69B, // <cjk>
+    0x8B58, 0x8EAF, // <cjk>
+    0x8B5A, 0xE69D, // <cjk>
+    0x8B5B, 0xE69C, // <cjk>
+    0x8B5C, 0x9588, // <cjk>
+    0x8B5F, 0xE69F, // <cjk>
+    0x8B66, 0x8C78, // <cjk>
+    0x8B6B, 0xE69E, // <cjk>
+    0x8B6C, 0xE6A0, // <cjk>
+    0x8B6F, 0xE6A1, // <cjk>
+    0x8B70, 0x8B63, // <cjk>
+    0x8B71, 0xE3BF, // <cjk>
+    0x8B72, 0x8FF7, // <cjk>
+    0x8B74, 0xE6A2, // <cjk>
+    0x8B77, 0x8CEC, // <cjk>
+    0x8B7D, 0xE6A3, // <cjk>
+    0x8B80, 0xE6A4, // <cjk>
+    0x8B83, 0x8E5D, // <cjk>
+    0x8B8A, 0x9DCC, // <cjk>
+    0x8B8C, 0xE6A5, // <cjk>
+    0x8B8E, 0xE6A6, // <cjk>
+    0x8B90, 0x8F51, // <cjk>
+    0x8B92, 0xE6A7, // <cjk>
+    0x8B93, 0xE6A8, // <cjk>
+    0x8B96, 0xE6A9, // <cjk>
+    0x8B99, 0xE6AA, // <cjk>
+    0x8B9A, 0xE6AB, // <cjk>
+    0x8C37, 0x924A, // <cjk>
+    0x8C3A, 0xE6AC, // <cjk>
+    0x8C3F, 0xE6AE, // <cjk>
+    0x8C41, 0xE6AD, // <cjk>
+    0x8C46, 0x93A4, // <cjk>
+    0x8C48, 0xE6AF, // <cjk>
+    0x8C4A, 0x964C, // <cjk>
+    0x8C4C, 0xE6B0, // <cjk>
+    0x8C4E, 0xE6B1, // <cjk>
+    0x8C50, 0xE6B2, // <cjk>
+    0x8C55, 0xE6B3, // <cjk>
+    0x8C5A, 0x93D8, // <cjk>
+    0x8C61, 0x8FDB, // <cjk>
+    0x8C62, 0xE6B4, // <cjk>
+    0x8C6A, 0x8D8B, // <cjk>
+    0x8C6B, 0x98AC, // <cjk>
+    0x8C6C, 0xE6B5, // <cjk>
+    0x8C78, 0xE6B6, // <cjk>
+    0x8C79, 0x955E, // <cjk>
+    0x8C7A, 0xE6B7, // <cjk>
+    0x8C7C, 0xE6BF, // <cjk>
+    0x8C82, 0xE6B8, // <cjk>
+    0x8C85, 0xE6BA, // <cjk>
+    0x8C89, 0xE6B9, // <cjk>
+    0x8C8A, 0xE6BB, // <cjk>
+    0x8C8C, 0x9665, // <cjk>
+    0x8C8D, 0xE6BC, // <cjk>
+    0x8C8E, 0xE6BD, // <cjk>
+    0x8C94, 0xE6BE, // <cjk>
+    0x8C98, 0xE6C0, // <cjk>
+    0x8C9D, 0x8A4C, // <cjk>
+    0x8C9E, 0x92E5, // <cjk>
+    0x8CA0, 0x9589, // <cjk>
+    0x8CA1, 0x8DE0, // <cjk>
+    0x8CA2, 0x8D76, // <cjk>
+    0x8CA7, 0x956E, // <cjk>
+    0x8CA8, 0x89DD, // <cjk>
+    0x8CA9, 0x94CC, // <cjk>
+    0x8CAA, 0xE6C3, // <cjk>
+    0x8CAB, 0x8AD1, // <cjk>
+    0x8CAC, 0x90D3, // <cjk>
+    0x8CAD, 0xE6C2, // <cjk>
+    0x8CAE, 0xE6C7, // <cjk>
+    0x8CAF, 0x9299, // <cjk>
+    0x8CB0, 0x96E1, // <cjk>
+    0x8CB2, 0xE6C5, // <cjk>
+    0x8CB3, 0xE6C6, // <cjk>
+    0x8CB4, 0x8B4D, // <cjk>
+    0x8CB6, 0xE6C8, // <cjk>
+    0x8CB7, 0x9483, // <cjk>
+    0x8CB8, 0x91DD, // <cjk>
+    0x8CBB, 0x94EF, // <cjk>
+    0x8CBC, 0x935C, // <cjk>
+    0x8CBD, 0xE6C4, // <cjk>
+    0x8CBF, 0x9666, // <cjk>
+    0x8CC0, 0x89EA, // <cjk>
+    0x8CC1, 0xE6CA, // <cjk>
+    0x8CC2, 0x9847, // <cjk>
+    0x8CC3, 0x92C0, // <cjk>
+    0x8CC4, 0x9864, // <cjk>
+    0x8CC7, 0x8E91, // <cjk>
+    0x8CC8, 0xE6C9, // <cjk>
+    0x8CCA, 0x91AF, // <cjk>
+    0x8CCD, 0xE6DA, // <cjk>
+    0x8CCE, 0x9147, // <cjk>
+    0x8CD1, 0x93F6, // <cjk>
+    0x8CD3, 0x956F, // <cjk>
+    0x8CDA, 0xE6CD, // <cjk>
+    0x8CDB, 0x8E5E, // <cjk>
+    0x8CDC, 0x8E92, // <cjk>
+    0x8CDE, 0x8FDC, // <cjk>
+    0x8CE0, 0x9485, // <cjk>
+    0x8CE2, 0x8CAB, // <cjk>
+    0x8CE3, 0xE6CC, // <cjk>
+    0x8CE4, 0xE6CB, // <cjk>
+    0x8CE6, 0x958A, // <cjk>
+    0x8CEA, 0x8EBF, // <cjk>
+    0x8CED, 0x9371, // <cjk>
+    0x8CFA, 0xE6CF, // <cjk>
+    0x8CFB, 0xE6D0, // <cjk>
+    0x8CFC, 0x8D77, // <cjk>
+    0x8CFD, 0xE6CE, // <cjk>
+    0x8D04, 0xE6D1, // <cjk>
+    0x8D05, 0xE6D2, // <cjk>
+    0x8D07, 0xE6D4, // <cjk>
+    0x8D08, 0x91A1, // <cjk>
+    0x8D0A, 0xE6D3, // <cjk>
+    0x8D0B, 0x8AE4, // <cjk>
+    0x8D0D, 0xE6D6, // <cjk>
+    0x8D0F, 0xE6D5, // <cjk>
+    0x8D10, 0xE6D7, // <cjk>
+    0x8D13, 0xE6D9, // <cjk>
+    0x8D14, 0xE6DB, // <cjk>
+    0x8D16, 0xE6DC, // <cjk>
+    0x8D64, 0x90D4, // <cjk>
+    0x8D66, 0x8ECD, // <cjk>
+    0x8D67, 0xE6DD, // <cjk>
+    0x8D6B, 0x8A71, // <cjk>
+    0x8D6D, 0xE6DE, // <cjk>
+    0x8D70, 0x9196, // <cjk>
+    0x8D71, 0xE6DF, // <cjk>
+    0x8D73, 0xE6E0, // <cjk>
+    0x8D74, 0x958B, // <cjk>
+    0x8D77, 0x8B4E, // <cjk>
+    0x8D81, 0xE6E1, // <cjk>
+    0x8D85, 0x92B4, // <cjk>
+    0x8D8A, 0x897A, // <cjk>
+    0x8D99, 0xE6E2, // <cjk>
+    0x8DA3, 0x8EEF, // <cjk>
+    0x8DA8, 0x9096, // <cjk>
+    0x8DB3, 0x91AB, // <cjk>
+    0x8DBA, 0xE6E5, // <cjk>
+    0x8DBE, 0xE6E4, // <cjk>
+    0x8DC2, 0xE6E3, // <cjk>
+    0x8DCB, 0xE6EB, // <cjk>
+    0x8DCC, 0xE6E9, // <cjk>
+    0x8DCF, 0xE6E6, // <cjk>
+    0x8DD6, 0xE6E8, // <cjk>
+    0x8DDA, 0xE6E7, // <cjk>
+    0x8DDB, 0xE6EA, // <cjk>
+    0x8DDD, 0x8B97, // <cjk>
+    0x8DDF, 0xE6EE, // <cjk>
+    0x8DE1, 0x90D5, // <cjk>
+    0x8DE3, 0xE6EF, // <cjk>
+    0x8DE8, 0x8CD7, // <cjk>
+    0x8DEA, 0xE6EC, // <cjk>
+    0x8DEB, 0xE6ED, // <cjk>
+    0x8DEF, 0x9848, // <cjk>
+    0x8DF3, 0x92B5, // <cjk>
+    0x8DF5, 0x9148, // <cjk>
+    0x8DFC, 0xE6F0, // <cjk>
+    0x8DFF, 0xE6F3, // <cjk>
+    0x8E08, 0xE6F1, // <cjk>
+    0x8E09, 0xE6F2, // <cjk>
+    0x8E0A, 0x9778, // <cjk>
+    0x8E0F, 0x93A5, // <cjk>
+    0x8E10, 0xE6F6, // <cjk>
+    0x8E1D, 0xE6F4, // <cjk>
+    0x8E1E, 0xE6F5, // <cjk>
+    0x8E1F, 0xE6F7, // <cjk>
+    0x8E2A, 0xE748, // <cjk>
+    0x8E30, 0xE6FA, // <cjk>
+    0x8E34, 0xE6FB, // <cjk>
+    0x8E35, 0xE6F9, // <cjk>
+    0x8E42, 0xE6F8, // <cjk>
+    0x8E44, 0x92FB, // <cjk>
+    0x8E47, 0xE740, // <cjk>
+    0x8E48, 0xE744, // <cjk>
+    0x8E49, 0xE741, // <cjk>
+    0x8E4A, 0xE6FC, // <cjk>
+    0x8E4C, 0xE742, // <cjk>
+    0x8E50, 0xE743, // <cjk>
+    0x8E55, 0xE74A, // <cjk>
+    0x8E59, 0xE745, // <cjk>
+    0x8E5F, 0x90D6, // <cjk>
+    0x8E60, 0xE747, // <cjk>
+    0x8E63, 0xE749, // <cjk>
+    0x8E64, 0xE746, // <cjk>
+    0x8E72, 0xE74C, // <cjk>
+    0x8E74, 0x8F52, // <cjk>
+    0x8E76, 0xE74B, // <cjk>
+    0x8E7C, 0xE74D, // <cjk>
+    0x8E81, 0xE74E, // <cjk>
+    0x8E84, 0xE751, // <cjk>
+    0x8E85, 0xE750, // <cjk>
+    0x8E87, 0xE74F, // <cjk>
+    0x8E8A, 0xE753, // <cjk>
+    0x8E8B, 0xE752, // <cjk>
+    0x8E8D, 0x96F4, // <cjk>
+    0x8E91, 0xE755, // <cjk>
+    0x8E93, 0xE754, // <cjk>
+    0x8E94, 0xE756, // <cjk>
+    0x8E99, 0xE757, // <cjk>
+    0x8EA1, 0xE759, // <cjk>
+    0x8EAA, 0xE758, // <cjk>
+    0x8EAB, 0x9067, // <cjk>
+    0x8EAC, 0xE75A, // <cjk>
+    0x8EAF, 0x8BEB, // <cjk>
+    0x8EB1, 0xE75D, // <cjk>
+    0x8EBE, 0xE75E, // <cjk>
+    0x8EC5, 0xE75F, // <cjk>
+    0x8EC6, 0xE75C, // <cjk>
+    0x8EC8, 0xE760, // <cjk>
+    0x8ECA, 0x8ED4, // <cjk>
+    0x8ECB, 0xE761, // <cjk>
+    0x8ECC, 0x8B4F, // <cjk>
+    0x8ECD, 0x8C52, // <cjk>
+    0x8ED2, 0x8CAC, // <cjk>
+    0x8EDB, 0xE762, // <cjk>
+    0x8EDF, 0x93EE, // <cjk>
+    0x8EE2, 0x935D, // <cjk>
+    0x8EE3, 0xE763, // <cjk>
+    0x8EEB, 0xE766, // <cjk>
+    0x8EF8, 0x8EB2, // <cjk>
+    0x8EFB, 0xE765, // <cjk>
+    0x8EFC, 0xE764, // <cjk>
+    0x8EFD, 0x8C79, // <cjk>
+    0x8EFE, 0xE767, // <cjk>
+    0x8F03, 0x8A72, // <cjk>
+    0x8F05, 0xE769, // <cjk>
+    0x8F09, 0x8DDA, // <cjk>
+    0x8F0A, 0xE768, // <cjk>
+    0x8F0C, 0xE771, // <cjk>
+    0x8F12, 0xE76B, // <cjk>
+    0x8F13, 0xE76D, // <cjk>
+    0x8F14, 0x95E3, // <cjk>
+    0x8F15, 0xE76A, // <cjk>
+    0x8F19, 0xE76C, // <cjk>
+    0x8F1B, 0xE770, // <cjk>
+    0x8F1C, 0xE76E, // <cjk>
+    0x8F1D, 0x8B50, // <cjk>
+    0x8F1F, 0xE76F, // <cjk>
+    0x8F26, 0xE772, // <cjk>
+    0x8F29, 0x9479, // <cjk>
+    0x8F2A, 0x97D6, // <cjk>
+    0x8F2F, 0x8F53, // <cjk>
+    0x8F33, 0xE773, // <cjk>
+    0x8F38, 0x9741, // <cjk>
+    0x8F39, 0xE775, // <cjk>
+    0x8F3B, 0xE774, // <cjk>
+    0x8F3E, 0xE778, // <cjk>
+    0x8F3F, 0x9760, // <cjk>
+    0x8F42, 0xE777, // <cjk>
+    0x8F44, 0x8A8D, // <cjk>
+    0x8F45, 0xE776, // <cjk>
+    0x8F46, 0xE77B, // <cjk>
+    0x8F49, 0xE77A, // <cjk>
+    0x8F4C, 0xE779, // <cjk>
+    0x8F4D, 0x9351, // <cjk>
+    0x8F4E, 0xE77C, // <cjk>
+    0x8F57, 0xE77D, // <cjk>
+    0x8F5C, 0xE77E, // <cjk>
+    0x8F5F, 0x8D8C, // <cjk>
+    0x8F61, 0x8C44, // <cjk>
+    0x8F62, 0xE780, // <cjk>
+    0x8F63, 0xE781, // <cjk>
+    0x8F64, 0xE782, // <cjk>
+    0x8F9B, 0x9068, // <cjk>
+    0x8F9C, 0xE783, // <cjk>
+    0x8F9E, 0x8EAB, // <cjk>
+    0x8F9F, 0xE784, // <cjk>
+    0x8FA3, 0xE785, // <cjk>
+    0x8FA7, 0x999F, // <cjk>
+    0x8FA8, 0x999E, // <cjk>
+    0x8FAD, 0xE786, // <cjk>
+    0x8FAE, 0xE390, // <cjk>
+    0x8FAF, 0xE787, // <cjk>
+    0x8FB0, 0x9243, // <cjk>
+    0x8FB1, 0x904A, // <cjk>
+    0x8FB2, 0x945F, // <cjk>
+    0x8FB7, 0xE788, // <cjk>
+    0x8FBA, 0x95D3, // <cjk>
+    0x8FBB, 0x92D2, // <cjk>
+    0x8FBC, 0x8D9E, // <cjk>
+    0x8FBF, 0x9248, // <cjk>
+    0x8FC2, 0x8949, // <cjk>
+    0x8FC4, 0x9698, // <cjk>
+    0x8FC5, 0x9076, // <cjk>
+    0x8FCE, 0x8C7D, // <cjk>
+    0x8FD1, 0x8BDF, // <cjk>
+    0x8FD4, 0x95D4, // <cjk>
+    0x8FDA, 0xE789, // <cjk>
+    0x8FE2, 0xE78B, // <cjk>
+    0x8FE5, 0xE78A, // <cjk>
+    0x8FE6, 0x89DE, // <cjk>
+    0x8FE9, 0x93F4, // <cjk>
+    0x8FEA, 0xE78C, // <cjk>
+    0x8FEB, 0x9497, // <cjk>
+    0x8FED, 0x9352, // <cjk>
+    0x8FEF, 0xE78D, // <cjk>
+    0x8FF0, 0x8F71, // <cjk>
+    0x8FF4, 0xE78F, // <cjk>
+    0x8FF7, 0x96C0, // <cjk>
+    0x8FF8, 0xE79E, // <cjk>
+    0x8FF9, 0xE791, // <cjk>
+    0x8FFA, 0xE792, // <cjk>
+    0x8FFD, 0x92C7, // <cjk>
+    0x9000, 0x91DE, // <cjk>
+    0x9001, 0x9197, // <cjk>
+    0x9003, 0x93A6, // <cjk>
+    0x9005, 0xE790, // <cjk>
+    0x9006, 0x8B74, // <cjk>
+    0x900B, 0xE799, // <cjk>
+    0x900D, 0xE796, // <cjk>
+    0x900E, 0xE7A3, // <cjk>
+    0x900F, 0x93A7, // <cjk>
+    0x9010, 0x9280, // <cjk>
+    0x9011, 0xE793, // <cjk>
+    0x9013, 0x92FC, // <cjk>
+    0x9014, 0x9372, // <cjk>
+    0x9015, 0xE794, // <cjk>
+    0x9016, 0xE798, // <cjk>
+    0x9017, 0x9080, // <cjk>
+    0x9019, 0x9487, // <cjk>
+    0x901A, 0x92CA, // <cjk>
+    0x901D, 0x90C0, // <cjk>
+    0x901E, 0xE797, // <cjk>
+    0x901F, 0x91AC, // <cjk>
+    0x9020, 0x91A2, // <cjk>
+    0x9021, 0xE795, // <cjk>
+    0x9022, 0x88A7, // <cjk>
+    0x9023, 0x9841, // <cjk>
+    0x9027, 0xE79A, // <cjk>
+    0x902E, 0x91DF, // <cjk>
+    0x9031, 0x8F54, // <cjk>
+    0x9032, 0x9069, // <cjk>
+    0x9035, 0xE79C, // <cjk>
+    0x9036, 0xE79B, // <cjk>
+    0x9038, 0x88ED, // <cjk>
+    0x9039, 0xE79D, // <cjk>
+    0x903C, 0x954E, // <cjk>
+    0x903E, 0xE7A5, // <cjk>
+    0x9041, 0x93D9, // <cjk>
+    0x9042, 0x908B, // <cjk>
+    0x9045, 0x9278, // <cjk>
+    0x9047, 0x8BF6, // <cjk>
+    0x9049, 0xE7A4, // <cjk>
+    0x904A, 0x9756, // <cjk>
+    0x904B, 0x895E, // <cjk>
+    0x904D, 0x95D5, // <cjk>
+    0x904E, 0x89DF, // <cjk>
+    0x904F, 0xE79F, // <cjk>
+    0x9050, 0xE7A0, // <cjk>
+    0x9051, 0xE7A1, // <cjk>
+    0x9052, 0xE7A2, // <cjk>
+    0x9053, 0x93B9, // <cjk>
+    0x9054, 0x9242, // <cjk>
+    0x9055, 0x88E1, // <cjk>
+    0x9056, 0xE7A6, // <cjk>
+    0x9058, 0xE7A7, // <cjk>
+    0x9059, 0xEAA1, // <cjk>
+    0x905C, 0x91BB, // <cjk>
+    0x905E, 0xE7A8, // <cjk>
+    0x9060, 0x8993, // <cjk>
+    0x9061, 0x916B, // <cjk>
+    0x9063, 0x8CAD, // <cjk>
+    0x9065, 0x9779, // <cjk>
+    0x9068, 0xE7A9, // <cjk>
+    0x9069, 0x934B, // <cjk>
+    0x906D, 0x9198, // <cjk>
+    0x906E, 0x8ED5, // <cjk>
+    0x906F, 0xE7AA, // <cjk>
+    0x9072, 0xE7AD, // <cjk>
+    0x9075, 0x8F85, // <cjk>
+    0x9076, 0xE7AB, // <cjk>
+    0x9077, 0x914A, // <cjk>
+    0x9078, 0x9149, // <cjk>
+    0x907A, 0x88E2, // <cjk>
+    0x907C, 0x97C9, // <cjk>
+    0x907D, 0xE7AF, // <cjk>
+    0x907F, 0x94F0, // <cjk>
+    0x9080, 0xE7B1, // <cjk>
+    0x9081, 0xE7B0, // <cjk>
+    0x9082, 0xE7AE, // <cjk>
+    0x9083, 0xE284, // <cjk>
+    0x9084, 0x8AD2, // <cjk>
+    0x9087, 0xE78E, // <cjk>
+    0x9089, 0xE7B3, // <cjk>
+    0x908A, 0xE7B2, // <cjk>
+    0x908F, 0xE7B4, // <cjk>
+    0x9091, 0x9757, // <cjk>
+    0x90A3, 0x93DF, // <cjk>
+    0x90A6, 0x964D, // <cjk>
+    0x90A8, 0xE7B5, // <cjk>
+    0x90AA, 0x8ED7, // <cjk>
+    0x90AF, 0xE7B6, // <cjk>
+    0x90B1, 0xE7B7, // <cjk>
+    0x90B5, 0xE7B8, // <cjk>
+    0x90B8, 0x9340, // <cjk>
+    0x90C1, 0x88E8, // <cjk>
+    0x90CA, 0x8D78, // <cjk>
+    0x90CE, 0x9859, // <cjk>
+    0x90DB, 0xE7BC, // <cjk>
+    0x90E1, 0x8C53, // <cjk>
+    0x90E2, 0xE7B9, // <cjk>
+    0x90E4, 0xE7BA, // <cjk>
+    0x90E8, 0x9594, // <cjk>
+    0x90ED, 0x8A73, // <cjk>
+    0x90F5, 0x9758, // <cjk>
+    0x90F7, 0x8BBD, // <cjk>
+    0x90FD, 0x9373, // <cjk>
+    0x9102, 0xE7BD, // <cjk>
+    0x9112, 0xE7BE, // <cjk>
+    0x9119, 0xE7BF, // <cjk>
+    0x912D, 0x9341, // <cjk>
+    0x9130, 0xE7C1, // <cjk>
+    0x9132, 0xE7C0, // <cjk>
+    0x9149, 0x93D1, // <cjk>
+    0x914A, 0xE7C2, // <cjk>
+    0x914B, 0x8F55, // <cjk>
+    0x914C, 0x8EDE, // <cjk>
+    0x914D, 0x947A, // <cjk>
+    0x914E, 0x9291, // <cjk>
+    0x9152, 0x8EF0, // <cjk>
+    0x9154, 0x908C, // <cjk>
+    0x9156, 0xE7C3, // <cjk>
+    0x9158, 0xE7C4, // <cjk>
+    0x9162, 0x907C, // <cjk>
+    0x9163, 0xE7C5, // <cjk>
+    0x9165, 0xE7C6, // <cjk>
+    0x9169, 0xE7C7, // <cjk>
+    0x916A, 0x978F, // <cjk>
+    0x916C, 0x8F56, // <cjk>
+    0x9172, 0xE7C9, // <cjk>
+    0x9173, 0xE7C8, // <cjk>
+    0x9175, 0x8D79, // <cjk>
+    0x9177, 0x8D93, // <cjk>
+    0x9178, 0x8E5F, // <cjk>
+    0x9182, 0xE7CC, // <cjk>
+    0x9187, 0x8F86, // <cjk>
+    0x9189, 0xE7CB, // <cjk>
+    0x918B, 0xE7CA, // <cjk>
+    0x918D, 0x91E7, // <cjk>
+    0x9190, 0x8CED, // <cjk>
+    0x9192, 0x90C1, // <cjk>
+    0x9197, 0x94AE, // <cjk>
+    0x919C, 0x8F58, // <cjk>
+    0x91A2, 0xE7CD, // <cjk>
+    0x91A4, 0x8FDD, // <cjk>
+    0x91AA, 0xE7D0, // <cjk>
+    0x91AB, 0xE7CE, // <cjk>
+    0x91AF, 0xE7CF, // <cjk>
+    0x91B4, 0xE7D2, // <cjk>
+    0x91B5, 0xE7D1, // <cjk>
+    0x91B8, 0x8FF8, // <cjk>
+    0x91BA, 0xE7D3, // <cjk>
+    0x91C0, 0xE7D4, // <cjk>
+    0x91C1, 0xE7D5, // <cjk>
+    0x91C6, 0x94CE, // <cjk>
+    0x91C7, 0x8DD1, // <cjk>
+    0x91C8, 0x8EDF, // <cjk>
+    0x91C9, 0xE7D6, // <cjk>
+    0x91CB, 0xE7D7, // <cjk>
+    0x91CC, 0x97A2, // <cjk>
+    0x91CD, 0x8F64, // <cjk>
+    0x91CE, 0x96EC, // <cjk>
+    0x91CF, 0x97CA, // <cjk>
+    0x91D0, 0xE7D8, // <cjk>
+    0x91D1, 0x8BE0, // <cjk>
+    0x91D6, 0xE7D9, // <cjk>
+    0x91D8, 0x9342, // <cjk>
+    0x91DB, 0xE7DC, // <cjk>
+    0x91DC, 0x8A98, // <cjk>
+    0x91DD, 0x906A, // <cjk>
+    0x91DF, 0xE7DA, // <cjk>
+    0x91E1, 0xE7DB, // <cjk>
+    0x91E3, 0x92DE, // <cjk>
+    0x91E6, 0x9674, // <cjk>
+    0x91E7, 0x8BFA, // <cjk>
+    0x91F5, 0xE7DE, // <cjk>
+    0x91F6, 0xE7DF, // <cjk>
+    0x91FC, 0xE7DD, // <cjk>
+    0x91FF, 0xE7E1, // <cjk>
+    0x920D, 0x93DD, // <cjk>
+    0x920E, 0x8A62, // <cjk>
+    0x9211, 0xE7E5, // <cjk>
+    0x9214, 0xE7E2, // <cjk>
+    0x9215, 0xE7E4, // <cjk>
+    0x921E, 0xE7E0, // <cjk>
+    0x9229, 0xE86E, // <cjk>
+    0x922C, 0xE7E3, // <cjk>
+    0x9234, 0x97E9, // <cjk>
+    0x9237, 0x8CD8, // <cjk>
+    0x923F, 0xE7ED, // <cjk>
+    0x9244, 0x9353, // <cjk>
+    0x9245, 0xE7E8, // <cjk>
+    0x9248, 0xE7EB, // <cjk>
+    0x9249, 0xE7E9, // <cjk>
+    0x924B, 0xE7EE, // <cjk>
+    0x9250, 0xE7EF, // <cjk>
+    0x9257, 0xE7E7, // <cjk>
+    0x925A, 0xE7F4, // <cjk>
+    0x925B, 0x8994, // <cjk>
+    0x925E, 0xE7E6, // <cjk>
+    0x9262, 0x94AB, // <cjk>
+    0x9264, 0xE7EA, // <cjk>
+    0x9266, 0x8FDE, // <cjk>
+    0x9271, 0x8D7A, // <cjk>
+    0x927E, 0x9667, // <cjk>
+    0x9280, 0x8BE2, // <cjk>
+    0x9283, 0x8F65, // <cjk>
+    0x9285, 0x93BA, // <cjk>
+    0x9291, 0x914C, // <cjk>
+    0x9293, 0xE7F2, // <cjk>
+    0x9295, 0xE7EC, // <cjk>
+    0x9296, 0xE7F1, // <cjk>
+    0x9298, 0x96C1, // <cjk>
+    0x929A, 0x92B6, // <cjk>
+    0x929B, 0xE7F3, // <cjk>
+    0x929C, 0xE7F0, // <cjk>
+    0x92AD, 0x914B, // <cjk>
+    0x92B7, 0xE7F7, // <cjk>
+    0x92B9, 0xE7F6, // <cjk>
+    0x92CF, 0xE7F5, // <cjk>
+    0x92D2, 0x964E, // <cjk>
+    0x92E4, 0x8F9B, // <cjk>
+    0x92E9, 0xE7F8, // <cjk>
+    0x92EA, 0x95DD, // <cjk>
+    0x92ED, 0x8973, // <cjk>
+    0x92F2, 0x9565, // <cjk>
+    0x92F3, 0x9292, // <cjk>
+    0x92F8, 0x8B98, // <cjk>
+    0x92FA, 0xE7FA, // <cjk>
+    0x92FC, 0x8D7C, // <cjk>
+    0x9306, 0x8E4B, // <cjk>
+    0x930F, 0xE7F9, // <cjk>
+    0x9310, 0x908D, // <cjk>
+    0x9318, 0x908E, // <cjk>
+    0x9319, 0xE840, // <cjk>
+    0x931A, 0xE842, // <cjk>
+    0x9320, 0x8FF9, // <cjk>
+    0x9322, 0xE841, // <cjk>
+    0x9323, 0xE843, // <cjk>
+    0x9326, 0x8BD1, // <cjk>
+    0x9328, 0x9564, // <cjk>
+    0x932B, 0x8EE0, // <cjk>
+    0x932C, 0x9842, // <cjk>
+    0x932E, 0xE7FC, // <cjk>
+    0x932F, 0x8DF6, // <cjk>
+    0x9332, 0x985E, // <cjk>
+    0x9335, 0xE845, // <cjk>
+    0x933A, 0xE844, // <cjk>
+    0x933B, 0xE846, // <cjk>
+    0x9344, 0xE7FB, // <cjk>
+    0x934B, 0x93E7, // <cjk>
+    0x934D, 0x9374, // <cjk>
+    0x9354, 0x92D5, // <cjk>
+    0x9356, 0xE84B, // <cjk>
+    0x935B, 0x9262, // <cjk>
+    0x935C, 0xE847, // <cjk>
+    0x9360, 0xE848, // <cjk>
+    0x936C, 0x8C4C, // <cjk>
+    0x936E, 0xE84A, // <cjk>
+    0x9375, 0x8CAE, // <cjk>
+    0x937C, 0xE849, // <cjk>
+    0x937E, 0x8FDF, // <cjk>
+    0x938C, 0x8A99, // <cjk>
+    0x9394, 0xE84F, // <cjk>
+    0x9396, 0x8DBD, // <cjk>
+    0x9397, 0x9199, // <cjk>
+    0x939A, 0x92C8, // <cjk>
+    0x93A7, 0x8A5A, // <cjk>
+    0x93AC, 0xE84D, // <cjk>
+    0x93AD, 0xE84E, // <cjk>
+    0x93AE, 0x92C1, // <cjk>
+    0x93B0, 0xE84C, // <cjk>
+    0x93B9, 0xE850, // <cjk>
+    0x93C3, 0xE856, // <cjk>
+    0x93C8, 0xE859, // <cjk>
+    0x93D0, 0xE858, // <cjk>
+    0x93D1, 0x934C, // <cjk>
+    0x93D6, 0xE851, // <cjk>
+    0x93D7, 0xE852, // <cjk>
+    0x93D8, 0xE855, // <cjk>
+    0x93DD, 0xE857, // <cjk>
+    0x93E1, 0x8BBE, // <cjk>
+    0x93E4, 0xE85A, // <cjk>
+    0x93E5, 0xE854, // <cjk>
+    0x93E8, 0xE853, // <cjk>
+    0x9403, 0xE85E, // <cjk>
+    0x9407, 0xE85F, // <cjk>
+    0x9410, 0xE860, // <cjk>
+    0x9413, 0xE85D, // <cjk>
+    0x9414, 0xE85C, // <cjk>
+    0x9418, 0x8FE0, // <cjk>
+    0x9419, 0x93A8, // <cjk>
+    0x9421, 0xE864, // <cjk>
+    0x942B, 0xE862, // <cjk>
+    0x9435, 0xE863, // <cjk>
+    0x9436, 0xE861, // <cjk>
+    0x9438, 0x91F6, // <cjk>
+    0x943A, 0xE865, // <cjk>
+    0x9441, 0xE866, // <cjk>
+    0x9444, 0xE868, // <cjk>
+    0x9451, 0x8AD3, // <cjk>
+    0x9452, 0xE867, // <cjk>
+    0x9453, 0x96F8, // <cjk>
+    0x945A, 0xE873, // <cjk>
+    0x945B, 0xE869, // <cjk>
+    0x945E, 0xE86C, // <cjk>
+    0x9460, 0xE86A, // <cjk>
+    0x9462, 0xE86B, // <cjk>
+    0x946A, 0xE86D, // <cjk>
+    0x9470, 0xE86F, // <cjk>
+    0x9475, 0xE870, // <cjk>
+    0x9477, 0xE871, // <cjk>
+    0x947C, 0xE874, // <cjk>
+    0x947D, 0xE872, // <cjk>
+    0x947E, 0xE875, // <cjk>
+    0x947F, 0xE877, // <cjk>
+    0x9481, 0xE876, // <cjk>
+    0x9577, 0x92B7, // <cjk>
+    0x9580, 0x96E5, // <cjk>
+    0x9582, 0xE878, // <cjk>
+    0x9583, 0x914D, // <cjk>
+    0x9587, 0xE879, // <cjk>
+    0x9589, 0x95C2, // <cjk>
+    0x958A, 0xE87A, // <cjk>
+    0x958B, 0x8A4A, // <cjk>
+    0x9591, 0x8AD5, // <cjk>
+    0x9593, 0x8AD4, // <cjk>
+    0x9594, 0xE87B, // <cjk>
+    0x9596, 0xE87C, // <cjk>
+    0x9598, 0xE87D, // <cjk>
+    0x9599, 0xE87E, // <cjk>
+    0x95A0, 0xE880, // <cjk>
+    0x95A2, 0x8AD6, // <cjk>
+    0x95A3, 0x8A74, // <cjk>
+    0x95A4, 0x8D7D, // <cjk>
+    0x95A5, 0x94B4, // <cjk>
+    0x95A7, 0xE882, // <cjk>
+    0x95A8, 0xE881, // <cjk>
+    0x95AD, 0xE883, // <cjk>
+    0x95B2, 0x897B, // <cjk>
+    0x95B9, 0xE886, // <cjk>
+    0x95BB, 0xE885, // <cjk>
+    0x95BC, 0xE884, // <cjk>
+    0x95BE, 0xE887, // <cjk>
+    0x95C3, 0xE88A, // <cjk>
+    0x95C7, 0x88C5, // <cjk>
+    0x95CA, 0xE888, // <cjk>
+    0x95CC, 0xE88C, // <cjk>
+    0x95CD, 0xE88B, // <cjk>
+    0x95D4, 0xE88E, // <cjk>
+    0x95D5, 0xE88D, // <cjk>
+    0x95D6, 0xE88F, // <cjk>
+    0x95D8, 0x93AC, // <cjk>
+    0x95DC, 0xE890, // <cjk>
+    0x95E1, 0xE891, // <cjk>
+    0x95E2, 0xE893, // <cjk>
+    0x95E5, 0xE892, // <cjk>
+    0x961C, 0x958C, // <cjk>
+    0x9621, 0xE894, // <cjk>
+    0x9628, 0xE895, // <cjk>
+    0x962A, 0x8DE3, // <cjk>
+    0x962E, 0xE896, // <cjk>
+    0x962F, 0xE897, // <cjk>
+    0x9632, 0x9668, // <cjk>
+    0x963B, 0x916A, // <cjk>
+    0x963F, 0x88A2, // <cjk>
+    0x9640, 0x91C9, // <cjk>
+    0x9642, 0xE898, // <cjk>
+    0x9644, 0x958D, // <cjk>
+    0x964B, 0xE89B, // <cjk>
+    0x964C, 0xE899, // <cjk>
+    0x964D, 0x8D7E, // <cjk>
+    0x964F, 0xE89A, // <cjk>
+    0x9650, 0x8CC0, // <cjk>
+    0x965B, 0x95C3, // <cjk>
+    0x965C, 0xE89D, // <cjk>
+    0x965D, 0xE89F, // <cjk>
+    0x965E, 0xE89E, // <cjk>
+    0x965F, 0xE8A0, // <cjk>
+    0x9662, 0x8940, // <cjk>
+    0x9663, 0x9077, // <cjk>
+    0x9664, 0x8F9C, // <cjk>
+    0x9665, 0x8AD7, // <cjk>
+    0x9666, 0xE8A1, // <cjk>
+    0x966A, 0x9486, // <cjk>
+    0x966C, 0xE8A3, // <cjk>
+    0x9670, 0x8941, // <cjk>
+    0x9672, 0xE8A2, // <cjk>
+    0x9673, 0x92C2, // <cjk>
+    0x9675, 0x97CB, // <cjk>
+    0x9676, 0x93A9, // <cjk>
+    0x9677, 0xE89C, // <cjk>
+    0x9678, 0x97A4, // <cjk>
+    0x967A, 0x8CAF, // <cjk>
+    0x967D, 0x977A, // <cjk>
+    0x9685, 0x8BF7, // <cjk>
+    0x9686, 0x97B2, // <cjk>
+    0x9688, 0x8C47, // <cjk>
+    0x968A, 0x91E0, // <cjk>
+    0x968B, 0xE440, // <cjk>
+    0x968D, 0xE8A4, // <cjk>
+    0x968E, 0x8A4B, // <cjk>
+    0x968F, 0x908F, // <cjk>
+    0x9694, 0x8A75, // <cjk>
+    0x9695, 0xE8A6, // <cjk>
+    0x9697, 0xE8A7, // <cjk>
+    0x9698, 0xE8A5, // <cjk>
+    0x9699, 0x8C84, // <cjk>
+    0x969B, 0x8DDB, // <cjk>
+    0x969C, 0x8FE1, // <cjk>
+    0x96A0, 0x8942, // <cjk>
+    0x96A3, 0x97D7, // <cjk>
+    0x96A7, 0xE8A9, // <cjk>
+    0x96A8, 0xE7AC, // <cjk>
+    0x96AA, 0xE8A8, // <cjk>
+    0x96B0, 0xE8AC, // <cjk>
+    0x96B1, 0xE8AA, // <cjk>
+    0x96B2, 0xE8AB, // <cjk>
+    0x96B4, 0xE8AD, // <cjk>
+    0x96B6, 0xE8AE, // <cjk>
+    0x96B7, 0x97EA, // <cjk>
+    0x96B8, 0xE8AF, // <cjk>
+    0x96B9, 0xE8B0, // <cjk>
+    0x96BB, 0x90C7, // <cjk>
+    0x96BC, 0x94B9, // <cjk>
+    0x96C0, 0x909D, // <cjk>
+    0x96C1, 0x8AE5, // <cjk>
+    0x96C4, 0x9759, // <cjk>
+    0x96C5, 0x89EB, // <cjk>
+    0x96C6, 0x8F57, // <cjk>
+    0x96C7, 0x8CD9, // <cjk>
+    0x96C9, 0xE8B3, // <cjk>
+    0x96CB, 0xE8B2, // <cjk>
+    0x96CC, 0x8E93, // <cjk>
+    0x96CD, 0xE8B4, // <cjk>
+    0x96CE, 0xE8B1, // <cjk>
+    0x96D1, 0x8E47, // <cjk>
+    0x96D5, 0xE8B8, // <cjk>
+    0x96D6, 0xE5AB, // <cjk>
+    0x96D9, 0x99D4, // <cjk>
+    0x96DB, 0x9097, // <cjk>
+    0x96DC, 0xE8B6, // <cjk>
+    0x96E2, 0x97A3, // <cjk>
+    0x96E3, 0x93EF, // <cjk>
+    0x96E8, 0x894A, // <cjk>
+    0x96EA, 0x90E1, // <cjk>
+    0x96EB, 0x8EB4, // <cjk>
+    0x96F0, 0x95B5, // <cjk>
+    0x96F2, 0x895F, // <cjk>
+    0x96F6, 0x97EB, // <cjk>
+    0x96F7, 0x978B, // <cjk>
+    0x96F9, 0xE8B9, // <cjk>
+    0x96FB, 0x9364, // <cjk>
+    0x9700, 0x8EF9, // <cjk>
+    0x9704, 0xE8BA, // <cjk>
+    0x9706, 0xE8BB, // <cjk>
+    0x9707, 0x906B, // <cjk>
+    0x9708, 0xE8BC, // <cjk>
+    0x970A, 0x97EC, // <cjk>
+    0x970D, 0xE8B7, // <cjk>
+    0x970E, 0xE8BE, // <cjk>
+    0x970F, 0xE8C0, // <cjk>
+    0x9711, 0xE8BF, // <cjk>
+    0x9713, 0xE8BD, // <cjk>
+    0x9716, 0xE8C1, // <cjk>
+    0x9719, 0xE8C2, // <cjk>
+    0x971C, 0x919A, // <cjk>
+    0x971E, 0x89E0, // <cjk>
+    0x9724, 0xE8C3, // <cjk>
+    0x9727, 0x96B6, // <cjk>
+    0x972A, 0xE8C4, // <cjk>
+    0x9730, 0xE8C5, // <cjk>
+    0x9732, 0x9849, // <cjk>
+    0x9738, 0x9E50, // <cjk>
+    0x9739, 0xE8C6, // <cjk>
+    0x973D, 0xE8C7, // <cjk>
+    0x973E, 0xE8C8, // <cjk>
+    0x9742, 0xE8CC, // <cjk>
+    0x9744, 0xE8C9, // <cjk>
+    0x9746, 0xE8CA, // <cjk>
+    0x9748, 0xE8CB, // <cjk>
+    0x9749, 0xE8CD, // <cjk>
+    0x9752, 0x90C2, // <cjk>
+    0x9756, 0x96F5, // <cjk>
+    0x9759, 0x90C3, // <cjk>
+    0x975C, 0xE8CE, // <cjk>
+    0x975E, 0x94F1, // <cjk>
+    0x9760, 0xE8CF, // <cjk>
+    0x9761, 0xEA72, // <cjk>
+    0x9762, 0x96CA, // <cjk>
+    0x9764, 0xE8D0, // <cjk>
+    0x9766, 0xE8D1, // <cjk>
+    0x9768, 0xE8D2, // <cjk>
+    0x9769, 0x8A76, // <cjk>
+    0x976B, 0xE8D4, // <cjk>
+    0x976D, 0x9078, // <cjk>
+    0x9771, 0xE8D5, // <cjk>
+    0x9774, 0x8C43, // <cjk>
+    0x9779, 0xE8D6, // <cjk>
+    0x977A, 0xE8DA, // <cjk>
+    0x977C, 0xE8D8, // <cjk>
+    0x9781, 0xE8D9, // <cjk>
+    0x9784, 0x8A93, // <cjk>
+    0x9785, 0xE8D7, // <cjk>
+    0x9786, 0xE8DB, // <cjk>
+    0x978B, 0xE8DC, // <cjk>
+    0x978D, 0x88C6, // <cjk>
+    0x978F, 0xE8DD, // <cjk>
+    0x9790, 0xE8DE, // <cjk>
+    0x9798, 0x8FE2, // <cjk>
+    0x979C, 0xE8DF, // <cjk>
+    0x97A0, 0x8B66, // <cjk>
+    0x97A3, 0xE8E2, // <cjk>
+    0x97A6, 0xE8E1, // <cjk>
+    0x97A8, 0xE8E0, // <cjk>
+    0x97AB, 0xE691, // <cjk>
+    0x97AD, 0x95DA, // <cjk>
+    0x97B3, 0xE8E3, // <cjk>
+    0x97B4, 0xE8E4, // <cjk>
+    0x97C3, 0xE8E5, // <cjk>
+    0x97C6, 0xE8E6, // <cjk>
+    0x97C8, 0xE8E7, // <cjk>
+    0x97CB, 0xE8E8, // <cjk>
+    0x97D3, 0x8AD8, // <cjk>
+    0x97DC, 0xE8E9, // <cjk>
+    0x97ED, 0xE8EA, // <cjk>
+    0x97EE, 0x9442, // <cjk>
+    0x97F2, 0xE8EC, // <cjk>
+    0x97F3, 0x89B9, // <cjk>
+    0x97F5, 0xE8EF, // <cjk>
+    0x97F6, 0xE8EE, // <cjk>
+    0x97FB, 0x8943, // <cjk>
+    0x97FF, 0x8BBF, // <cjk>
+    0x9801, 0x95C5, // <cjk>
+    0x9802, 0x92B8, // <cjk>
+    0x9803, 0x8DA0, // <cjk>
+    0x9805, 0x8D80, // <cjk>
+    0x9806, 0x8F87, // <cjk>
+    0x9808, 0x907B, // <cjk>
+    0x980C, 0xE8F1, // <cjk>
+    0x980F, 0xE8F0, // <cjk>
+    0x9810, 0x9761, // <cjk>
+    0x9811, 0x8AE6, // <cjk>
+    0x9812, 0x94D0, // <cjk>
+    0x9813, 0x93DA, // <cjk>
+    0x9817, 0x909C, // <cjk>
+    0x9818, 0x97CC, // <cjk>
+    0x981A, 0x8C7A, // <cjk>
+    0x9821, 0xE8F4, // <cjk>
+    0x9824, 0xE8F3, // <cjk>
+    0x982C, 0x966A, // <cjk>
+    0x982D, 0x93AA, // <cjk>
+    0x9834, 0x896F, // <cjk>
+    0x9837, 0xE8F5, // <cjk>
+    0x9838, 0xE8F2, // <cjk>
+    0x983B, 0x9570, // <cjk>
+    0x983C, 0x978A, // <cjk>
+    0x983D, 0xE8F6, // <cjk>
+    0x9846, 0xE8F7, // <cjk>
+    0x984B, 0xE8F9, // <cjk>
+    0x984C, 0x91E8, // <cjk>
+    0x984D, 0x8A7A, // <cjk>
+    0x984E, 0x8A7B, // <cjk>
+    0x984F, 0xE8F8, // <cjk>
+    0x9854, 0x8AE7, // <cjk>
+    0x9855, 0x8CB0, // <cjk>
+    0x9858, 0x8AE8, // <cjk>
+    0x985B, 0x935E, // <cjk>
+    0x985E, 0x97DE, // <cjk>
+    0x9867, 0x8CDA, // <cjk>
+    0x986B, 0xE8FA, // <cjk>
+    0x986F, 0xE8FB, // <cjk>
+    0x9870, 0xE8FC, // <cjk>
+    0x9871, 0xE940, // <cjk>
+    0x9873, 0xE942, // <cjk>
+    0x9874, 0xE941, // <cjk>
+    0x98A8, 0x9597, // <cjk>
+    0x98AA, 0xE943, // <cjk>
+    0x98AF, 0xE944, // <cjk>
+    0x98B1, 0xE945, // <cjk>
+    0x98B6, 0xE946, // <cjk>
+    0x98C3, 0xE948, // <cjk>
+    0x98C4, 0xE947, // <cjk>
+    0x98C6, 0xE949, // <cjk>
+    0x98DB, 0x94F2, // <cjk>
+    0x98DC, 0xE3CA, // <cjk>
+    0x98DF, 0x9048, // <cjk>
+    0x98E2, 0x8B51, // <cjk>
+    0x98E9, 0xE94A, // <cjk>
+    0x98EB, 0xE94B, // <cjk>
+    0x98ED, 0x99AA, // <cjk>
+    0x98EE, 0x9F5A, // <cjk>
+    0x98EF, 0x94D1, // <cjk>
+    0x98F2, 0x88F9, // <cjk>
+    0x98F4, 0x88B9, // <cjk>
+    0x98FC, 0x8E94, // <cjk>
+    0x98FD, 0x964F, // <cjk>
+    0x98FE, 0x8FFC, // <cjk>
+    0x9903, 0xE94C, // <cjk>
+    0x9905, 0x96DD, // <cjk>
+    0x9909, 0xE94D, // <cjk>
+    0x990A, 0x977B, // <cjk>
+    0x990C, 0x8961, // <cjk>
+    0x9910, 0x8E60, // <cjk>
+    0x9912, 0xE94E, // <cjk>
+    0x9913, 0x89EC, // <cjk>
+    0x9914, 0xE94F, // <cjk>
+    0x9918, 0xE950, // <cjk>
+    0x991D, 0xE952, // <cjk>
+    0x991E, 0xE953, // <cjk>
+    0x9920, 0xE955, // <cjk>
+    0x9921, 0xE951, // <cjk>
+    0x9924, 0xE954, // <cjk>
+    0x9928, 0x8AD9, // <cjk>
+    0x992C, 0xE956, // <cjk>
+    0x992E, 0xE957, // <cjk>
+    0x993D, 0xE958, // <cjk>
+    0x993E, 0xE959, // <cjk>
+    0x9942, 0xE95A, // <cjk>
+    0x9945, 0xE95C, // <cjk>
+    0x994B, 0xE95E, // <cjk>
+    0x994C, 0xE961, // <cjk>
+    0x9950, 0xE95D, // <cjk>
+    0x9951, 0xE95F, // <cjk>
+    0x9952, 0xE960, // <cjk>
+    0x9955, 0xE962, // <cjk>
+    0x9957, 0x8BC0, // <cjk>
+    0x9996, 0x8EF1, // <cjk>
+    0x9997, 0xE963, // <cjk>
+    0x9998, 0xE964, // <cjk>
+    0x9999, 0x8D81, // <cjk>
+    0x99A5, 0xE965, // <cjk>
+    0x99A8, 0x8A5D, // <cjk>
+    0x99AC, 0x946E, // <cjk>
+    0x99AD, 0xE966, // <cjk>
+    0x99AE, 0xE967, // <cjk>
+    0x99B3, 0x9279, // <cjk>
+    0x99B4, 0x93E9, // <cjk>
+    0x99BC, 0xE968, // <cjk>
+    0x99C1, 0x949D, // <cjk>
+    0x99C4, 0x91CA, // <cjk>
+    0x99C5, 0x8977, // <cjk>
+    0x99C6, 0x8BEC, // <cjk>
+    0x99C8, 0x8BED, // <cjk>
+    0x99D0, 0x9293, // <cjk>
+    0x99D1, 0xE96D, // <cjk>
+    0x99D2, 0x8BEE, // <cjk>
+    0x99D5, 0x89ED, // <cjk>
+    0x99D8, 0xE96C, // <cjk>
+    0x99DB, 0xE96A, // <cjk>
+    0x99DD, 0xE96B, // <cjk>
+    0x99DF, 0xE969, // <cjk>
+    0x99E2, 0xE977, // <cjk>
+    0x99ED, 0xE96E, // <cjk>
+    0x99EE, 0xE96F, // <cjk>
+    0x99F1, 0xE970, // <cjk>
+    0x99F2, 0xE971, // <cjk>
+    0x99F8, 0xE973, // <cjk>
+    0x99FB, 0xE972, // <cjk>
+    0x99FF, 0x8F78, // <cjk>
+    0x9A01, 0xE974, // <cjk>
+    0x9A05, 0xE976, // <cjk>
+    0x9A0E, 0x8B52, // <cjk>
+    0x9A0F, 0xE975, // <cjk>
+    0x9A12, 0x919B, // <cjk>
+    0x9A13, 0x8CB1, // <cjk>
+    0x9A19, 0xE978, // <cjk>
+    0x9A28, 0x91CB, // <cjk>
+    0x9A2B, 0xE979, // <cjk>
+    0x9A30, 0x93AB, // <cjk>
+    0x9A37, 0xE97A, // <cjk>
+    0x9A3E, 0xE980, // <cjk>
+    0x9A40, 0xE97D, // <cjk>
+    0x9A42, 0xE97C, // <cjk>
+    0x9A43, 0xE97E, // <cjk>
+    0x9A45, 0xE97B, // <cjk>
+    0x9A4D, 0xE982, // <cjk>
+    0x9A55, 0xE981, // <cjk>
+    0x9A57, 0xE984, // <cjk>
+    0x9A5A, 0x8BC1, // <cjk>
+    0x9A5B, 0xE983, // <cjk>
+    0x9A5F, 0xE985, // <cjk>
+    0x9A62, 0xE986, // <cjk>
+    0x9A64, 0xE988, // <cjk>
+    0x9A65, 0xE987, // <cjk>
+    0x9A69, 0xE989, // <cjk>
+    0x9A6A, 0xE98B, // <cjk>
+    0x9A6B, 0xE98A, // <cjk>
+    0x9AA8, 0x8D9C, // <cjk>
+    0x9AAD, 0xE98C, // <cjk>
+    0x9AB0, 0xE98D, // <cjk>
+    0x9ABC, 0xE98E, // <cjk>
+    0x9AC0, 0xE98F, // <cjk>
+    0x9AC4, 0x9091, // <cjk>
+    0x9ACF, 0xE990, // <cjk>
+    0x9AD1, 0xE991, // <cjk>
+    0x9AD3, 0xE992, // <cjk>
+    0x9AD4, 0xE993, // <cjk>
+    0x9AD8, 0x8D82, // <cjk>
+    0x9ADE, 0xE994, // <cjk>
+    0x9ADF, 0xE995, // <cjk>
+    0x9AE2, 0xE996, // <cjk>
+    0x9AE3, 0xE997, // <cjk>
+    0x9AE6, 0xE998, // <cjk>
+    0x9AEA, 0x94AF, // <cjk>
+    0x9AEB, 0xE99A, // <cjk>
+    0x9AED, 0x9545, // <cjk>
+    0x9AEE, 0xE99B, // <cjk>
+    0x9AEF, 0xE999, // <cjk>
+    0x9AF1, 0xE99D, // <cjk>
+    0x9AF4, 0xE99C, // <cjk>
+    0x9AF7, 0xE99E, // <cjk>
+    0x9AFB, 0xE99F, // <cjk>
+    0x9B06, 0xE9A0, // <cjk>
+    0x9B18, 0xE9A1, // <cjk>
+    0x9B1A, 0xE9A2, // <cjk>
+    0x9B1F, 0xE9A3, // <cjk>
+    0x9B22, 0xE9A4, // <cjk>
+    0x9B23, 0xE9A5, // <cjk>
+    0x9B25, 0xE9A6, // <cjk>
+    0x9B27, 0xE9A7, // <cjk>
+    0x9B28, 0xE9A8, // <cjk>
+    0x9B29, 0xE9A9, // <cjk>
+    0x9B2A, 0xE9AA, // <cjk>
+    0x9B2E, 0xE9AB, // <cjk>
+    0x9B2F, 0xE9AC, // <cjk>
+    0x9B31, 0x9F54, // <cjk>
+    0x9B32, 0xE9AD, // <cjk>
+    0x9B3B, 0xE2F6, // <cjk>
+    0x9B3C, 0x8B53, // <cjk>
+    0x9B41, 0x8A40, // <cjk>
+    0x9B42, 0x8DB0, // <cjk>
+    0x9B43, 0xE9AF, // <cjk>
+    0x9B44, 0xE9AE, // <cjk>
+    0x9B45, 0x96A3, // <cjk>
+    0x9B4D, 0xE9B1, // <cjk>
+    0x9B4E, 0xE9B2, // <cjk>
+    0x9B4F, 0xE9B0, // <cjk>
+    0x9B51, 0xE9B3, // <cjk>
+    0x9B54, 0x9682, // <cjk>
+    0x9B58, 0xE9B4, // <cjk>
+    0x9B5A, 0x8B9B, // <cjk>
+    0x9B6F, 0x9844, // <cjk>
+    0x9B74, 0xE9B5, // <cjk>
+    0x9B83, 0xE9B7, // <cjk>
+    0x9B8E, 0x88BC, // <cjk>
+    0x9B91, 0xE9B8, // <cjk>
+    0x9B92, 0x95A9, // <cjk>
+    0x9B93, 0xE9B6, // <cjk>
+    0x9B96, 0xE9B9, // <cjk>
+    0x9B97, 0xE9BA, // <cjk>
+    0x9B9F, 0xE9BB, // <cjk>
+    0x9BA0, 0xE9BC, // <cjk>
+    0x9BA8, 0xE9BD, // <cjk>
+    0x9BAA, 0x968E, // <cjk>
+    0x9BAB, 0x8E4C, // <cjk>
+    0x9BAD, 0x8DF8, // <cjk>
+    0x9BAE, 0x914E, // <cjk>
+    0x9BB4, 0xE9BE, // <cjk>
+    0x9BB9, 0xE9C1, // <cjk>
+    0x9BC0, 0xE9BF, // <cjk>
+    0x9BC6, 0xE9C2, // <cjk>
+    0x9BC9, 0x8CEF, // <cjk>
+    0x9BCA, 0xE9C0, // <cjk>
+    0x9BCF, 0xE9C3, // <cjk>
+    0x9BD1, 0xE9C4, // <cjk>
+    0x9BD2, 0xE9C5, // <cjk>
+    0x9BD4, 0xE9C9, // <cjk>
+    0x9BD6, 0x8E49, // <cjk>
+    0x9BDB, 0x91E2, // <cjk>
+    0x9BE1, 0xE9CA, // <cjk>
+    0x9BE2, 0xE9C7, // <cjk>
+    0x9BE3, 0xE9C6, // <cjk>
+    0x9BE4, 0xE9C8, // <cjk>
+    0x9BE8, 0x8C7E, // <cjk>
+    0x9BF0, 0xE9CE, // <cjk>
+    0x9BF1, 0xE9CD, // <cjk>
+    0x9BF2, 0xE9CC, // <cjk>
+    0x9BF5, 0x88B1, // <cjk>
+    0x9C04, 0xE9D8, // <cjk>
+    0x9C06, 0xE9D4, // <cjk>
+    0x9C08, 0xE9D5, // <cjk>
+    0x9C09, 0xE9D1, // <cjk>
+    0x9C0A, 0xE9D7, // <cjk>
+    0x9C0C, 0xE9D3, // <cjk>
+    0x9C0D, 0x8A82, // <cjk>
+    0x9C10, 0x986B, // <cjk>
+    0x9C12, 0xE9D6, // <cjk>
+    0x9C13, 0xE9D2, // <cjk>
+    0x9C14, 0xE9D0, // <cjk>
+    0x9C15, 0xE9CF, // <cjk>
+    0x9C1B, 0xE9DA, // <cjk>
+    0x9C21, 0xE9DD, // <cjk>
+    0x9C24, 0xE9DC, // <cjk>
+    0x9C25, 0xE9DB, // <cjk>
+    0x9C2D, 0x9568, // <cjk>
+    0x9C2E, 0xE9D9, // <cjk>
+    0x9C2F, 0x88F1, // <cjk>
+    0x9C30, 0xE9DE, // <cjk>
+    0x9C32, 0xE9E0, // <cjk>
+    0x9C39, 0x8A8F, // <cjk>
+    0x9C3A, 0xE9CB, // <cjk>
+    0x9C3B, 0x8956, // <cjk>
+    0x9C3E, 0xE9E2, // <cjk>
+    0x9C46, 0xE9E1, // <cjk>
+    0x9C47, 0xE9DF, // <cjk>
+    0x9C48, 0x924C, // <cjk>
+    0x9C52, 0x9690, // <cjk>
+    0x9C57, 0x97D8, // <cjk>
+    0x9C5A, 0xE9E3, // <cjk>
+    0x9C60, 0xE9E4, // <cjk>
+    0x9C67, 0xE9E5, // <cjk>
+    0x9C76, 0xE9E6, // <cjk>
+    0x9C78, 0xE9E7, // <cjk>
+    0x9CE5, 0x92B9, // <cjk>
+    0x9CE7, 0xE9E8, // <cjk>
+    0x9CE9, 0x94B5, // <cjk>
+    0x9CEB, 0xE9ED, // <cjk>
+    0x9CEC, 0xE9E9, // <cjk>
+    0x9CF0, 0xE9EA, // <cjk>
+    0x9CF3, 0x9650, // <cjk>
+    0x9CF4, 0x96C2, // <cjk>
+    0x9CF6, 0x93CE, // <cjk>
+    0x9D03, 0xE9EE, // <cjk>
+    0x9D06, 0xE9EF, // <cjk>
+    0x9D07, 0x93BC, // <cjk>
+    0x9D08, 0xE9EC, // <cjk>
+    0x9D09, 0xE9EB, // <cjk>
+    0x9D0E, 0x89A8, // <cjk>
+    0x9D12, 0xE9F7, // <cjk>
+    0x9D15, 0xE9F6, // <cjk>
+    0x9D1B, 0x8995, // <cjk>
+    0x9D1F, 0xE9F4, // <cjk>
+    0x9D23, 0xE9F3, // <cjk>
+    0x9D26, 0xE9F1, // <cjk>
+    0x9D28, 0x8A9B, // <cjk>
+    0x9D2A, 0xE9F0, // <cjk>
+    0x9D2B, 0x8EB0, // <cjk>
+    0x9D2C, 0x89A7, // <cjk>
+    0x9D3B, 0x8D83, // <cjk>
+    0x9D3E, 0xE9FA, // <cjk>
+    0x9D3F, 0xE9F9, // <cjk>
+    0x9D41, 0xE9F8, // <cjk>
+    0x9D44, 0xE9F5, // <cjk>
+    0x9D46, 0xE9FB, // <cjk>
+    0x9D48, 0xE9FC, // <cjk>
+    0x9D50, 0xEA44, // <cjk>
+    0x9D51, 0xEA43, // <cjk>
+    0x9D59, 0xEA45, // <cjk>
+    0x9D5C, 0x894C, // <cjk>
+    0x9D5D, 0xEA40, // <cjk>
+    0x9D5E, 0xEA41, // <cjk>
+    0x9D60, 0x8D94, // <cjk>
+    0x9D61, 0x96B7, // <cjk>
+    0x9D64, 0xEA42, // <cjk>
+    0x9D6C, 0x9651, // <cjk>
+    0x9D6F, 0xEA4A, // <cjk>
+    0x9D72, 0xEA46, // <cjk>
+    0x9D7A, 0xEA4B, // <cjk>
+    0x9D87, 0xEA48, // <cjk>
+    0x9D89, 0xEA47, // <cjk>
+    0x9D8F, 0x8C7B, // <cjk>
+    0x9D9A, 0xEA4C, // <cjk>
+    0x9DA4, 0xEA4D, // <cjk>
+    0x9DA9, 0xEA4E, // <cjk>
+    0x9DAB, 0xEA49, // <cjk>
+    0x9DAF, 0xE9F2, // <cjk>
+    0x9DB2, 0xEA4F, // <cjk>
+    0x9DB4, 0x92DF, // <cjk>
+    0x9DB8, 0xEA53, // <cjk>
+    0x9DBA, 0xEA54, // <cjk>
+    0x9DBB, 0xEA52, // <cjk>
+    0x9DC1, 0xEA51, // <cjk>
+    0x9DC2, 0xEA57, // <cjk>
+    0x9DC4, 0xEA50, // <cjk>
+    0x9DC6, 0xEA55, // <cjk>
+    0x9DCF, 0xEA56, // <cjk>
+    0x9DD3, 0xEA59, // <cjk>
+    0x9DD9, 0xEA58, // <cjk>
+    0x9DED, 0xEA5C, // <cjk>
+    0x9DEF, 0xEA5D, // <cjk>
+    0x9DF2, 0x9868, // <cjk>
+    0x9DF8, 0xEA5A, // <cjk>
+    0x9DF9, 0x91E9, // <cjk>
+    0x9DFA, 0x8DEB, // <cjk>
+    0x9DFD, 0xEA5E, // <cjk>
+    0x9E1A, 0xEA5F, // <cjk>
+    0x9E1B, 0xEA60, // <cjk>
+    0x9E1E, 0xEA61, // <cjk>
+    0x9E75, 0xEA62, // <cjk>
+    0x9E78, 0x8CB2, // <cjk>
+    0x9E79, 0xEA63, // <cjk>
+    0x9E7D, 0xEA64, // <cjk>
+    0x9E7F, 0x8EAD, // <cjk>
+    0x9E81, 0xEA65, // <cjk>
+    0x9E88, 0xEA66, // <cjk>
+    0x9E8B, 0xEA67, // <cjk>
+    0x9E8C, 0xEA68, // <cjk>
+    0x9E91, 0xEA6B, // <cjk>
+    0x9E92, 0xEA69, // <cjk>
+    0x9E95, 0xEA6A, // <cjk>
+    0x9E97, 0x97ED, // <cjk>
+    0x9E9D, 0xEA6C, // <cjk>
+    0x9E9F, 0x97D9, // <cjk>
+    0x9EA5, 0xEA6D, // <cjk>
+    0x9EA6, 0x949E, // <cjk>
+    0x9EA9, 0xEA6E, // <cjk>
+    0x9EAA, 0xEA70, // <cjk>
+    0x9EAD, 0xEA71, // <cjk>
+    0x9EB8, 0xEA6F, // <cjk>
+    0x9EB9, 0x8D8D, // <cjk>
+    0x9EBA, 0x96CB, // <cjk>
+    0x9EBB, 0x9683, // <cjk>
+    0x9EBC, 0x9BF5, // <cjk>
+    0x9EBE, 0x9F80, // <cjk>
+    0x9EBF, 0x969B, // <cjk>
+    0x9EC4, 0x89A9, // <cjk>
+    0x9ECC, 0xEA73, // <cjk>
+    0x9ECD, 0x8B6F, // <cjk>
+    0x9ECE, 0xEA74, // <cjk>
+    0x9ECF, 0xEA75, // <cjk>
+    0x9ED0, 0xEA76, // <cjk>
+    0x9ED2, 0x8D95, // <cjk>
+    0x9ED4, 0xEA77, // <cjk>
+    0x9ED8, 0xE0D2, // <cjk>
+    0x9ED9, 0x96D9, // <cjk>
+    0x9EDB, 0x91E1, // <cjk>
+    0x9EDC, 0xEA78, // <cjk>
+    0x9EDD, 0xEA7A, // <cjk>
+    0x9EDE, 0xEA79, // <cjk>
+    0x9EE0, 0xEA7B, // <cjk>
+    0x9EE5, 0xEA7C, // <cjk>
+    0x9EE8, 0xEA7D, // <cjk>
+    0x9EEF, 0xEA7E, // <cjk>
+    0x9EF4, 0xEA80, // <cjk>
+    0x9EF6, 0xEA81, // <cjk>
+    0x9EF7, 0xEA82, // <cjk>
+    0x9EF9, 0xEA83, // <cjk>
+    0x9EFB, 0xEA84, // <cjk>
+    0x9EFC, 0xEA85, // <cjk>
+    0x9EFD, 0xEA86, // <cjk>
+    0x9F07, 0xEA87, // <cjk>
+    0x9F08, 0xEA88, // <cjk>
+    0x9F0E, 0x9343, // <cjk>
+    0x9F13, 0x8CDB, // <cjk>
+    0x9F15, 0xEA8A, // <cjk>
+    0x9F20, 0x916C, // <cjk>
+    0x9F21, 0xEA8B, // <cjk>
+    0x9F2C, 0xEA8C, // <cjk>
+    0x9F3B, 0x9540, // <cjk>
+    0x9F3E, 0xEA8D, // <cjk>
+    0x9F4A, 0xEA8E, // <cjk>
+    0x9F4B, 0xE256, // <cjk>
+    0x9F4E, 0xE6D8, // <cjk>
+    0x9F4F, 0xE8EB, // <cjk>
+    0x9F52, 0xEA8F, // <cjk>
+    0x9F54, 0xEA90, // <cjk>
+    0x9F5F, 0xEA92, // <cjk>
+    0x9F60, 0xEA93, // <cjk>
+    0x9F61, 0xEA94, // <cjk>
+    0x9F62, 0x97EE, // <cjk>
+    0x9F63, 0xEA91, // <cjk>
+    0x9F66, 0xEA95, // <cjk>
+    0x9F67, 0xEA96, // <cjk>
+    0x9F6A, 0xEA98, // <cjk>
+    0x9F6C, 0xEA97, // <cjk>
+    0x9F72, 0xEA9A, // <cjk>
+    0x9F76, 0xEA9B, // <cjk>
+    0x9F77, 0xEA99, // <cjk>
+    0x9F8D, 0x97B4, // <cjk>
+    0x9F95, 0xEA9C, // <cjk>
+    0x9F9C, 0xEA9D, // <cjk>
+    0x9F9D, 0xE273, // <cjk>
+    0x9FA0, 0xEA9E, // <cjk>
+    0xFF01, 0x8149, // FULLWIDTH EXCLAMATION MARK
+    0xFF03, 0x8194, // FULLWIDTH NUMBER SIGN
+    0xFF04, 0x8190, // FULLWIDTH DOLLAR SIGN
+    0xFF05, 0x8193, // FULLWIDTH PERCENT SIGN
+    0xFF06, 0x8195, // FULLWIDTH AMPERSAND
+    0xFF07, 0x81AD, // FULLWIDTH APOSTROPHE
+    0xFF08, 0x8169, // FULLWIDTH LEFT PARENTHESIS
+    0xFF09, 0x816A, // FULLWIDTH RIGHT PARENTHESIS
+    0xFF0A, 0x8196, // FULLWIDTH ASTERISK
+    0xFF0B, 0x817B, // FULLWIDTH PLUS SIGN
+    0xFF0C, 0x8143, // FULLWIDTH COMMA
+    0xFF0E, 0x8144, // FULLWIDTH FULL STOP
+    0xFF0F, 0x815E, // FULLWIDTH SOLIDUS
+    0xFF10, 0x824F, // FULLWIDTH DIGIT ZERO
+    0xFF11, 0x8250, // FULLWIDTH DIGIT ONE
+    0xFF12, 0x8251, // FULLWIDTH DIGIT TWO
+    0xFF13, 0x8252, // FULLWIDTH DIGIT THREE
+    0xFF14, 0x8253, // FULLWIDTH DIGIT FOUR
+    0xFF15, 0x8254, // FULLWIDTH DIGIT FIVE
+    0xFF16, 0x8255, // FULLWIDTH DIGIT SIX
+    0xFF17, 0x8256, // FULLWIDTH DIGIT SEVEN
+    0xFF18, 0x8257, // FULLWIDTH DIGIT EIGHT
+    0xFF19, 0x8258, // FULLWIDTH DIGIT NINE
+    0xFF1A, 0x8146, // FULLWIDTH COLON
+    0xFF1B, 0x8147, // FULLWIDTH SEMICOLON
+    0xFF1C, 0x8183, // FULLWIDTH LESS-THAN SIGN
+    0xFF1D, 0x8181, // FULLWIDTH EQUALS SIGN
+    0xFF1E, 0x8184, // FULLWIDTH GREATER-THAN SIGN
+    0xFF1F, 0x8148, // FULLWIDTH QUESTION MARK
+    0xFF20, 0x8197, // FULLWIDTH COMMERCIAL AT
+    0xFF21, 0x8260, // FULLWIDTH LATIN CAPITAL LETTER A
+    0xFF22, 0x8261, // FULLWIDTH LATIN CAPITAL LETTER B
+    0xFF23, 0x8262, // FULLWIDTH LATIN CAPITAL LETTER C
+    0xFF24, 0x8263, // FULLWIDTH LATIN CAPITAL LETTER D
+    0xFF25, 0x8264, // FULLWIDTH LATIN CAPITAL LETTER E
+    0xFF26, 0x8265, // FULLWIDTH LATIN CAPITAL LETTER F
+    0xFF27, 0x8266, // FULLWIDTH LATIN CAPITAL LETTER G
+    0xFF28, 0x8267, // FULLWIDTH LATIN CAPITAL LETTER H
+    0xFF29, 0x8268, // FULLWIDTH LATIN CAPITAL LETTER I
+    0xFF2A, 0x8269, // FULLWIDTH LATIN CAPITAL LETTER J
+    0xFF2B, 0x826A, // FULLWIDTH LATIN CAPITAL LETTER K
+    0xFF2C, 0x826B, // FULLWIDTH LATIN CAPITAL LETTER L
+    0xFF2D, 0x826C, // FULLWIDTH LATIN CAPITAL LETTER M
+    0xFF2E, 0x826D, // FULLWIDTH LATIN CAPITAL LETTER N
+    0xFF2F, 0x826E, // FULLWIDTH LATIN CAPITAL LETTER O
+    0xFF30, 0x826F, // FULLWIDTH LATIN CAPITAL LETTER P
+    0xFF31, 0x8270, // FULLWIDTH LATIN CAPITAL LETTER Q
+    0xFF32, 0x8271, // FULLWIDTH LATIN CAPITAL LETTER R
+    0xFF33, 0x8272, // FULLWIDTH LATIN CAPITAL LETTER S
+    0xFF34, 0x8273, // FULLWIDTH LATIN CAPITAL LETTER T
+    0xFF35, 0x8274, // FULLWIDTH LATIN CAPITAL LETTER U
+    0xFF36, 0x8275, // FULLWIDTH LATIN CAPITAL LETTER V
+    0xFF37, 0x8276, // FULLWIDTH LATIN CAPITAL LETTER W
+    0xFF38, 0x8277, // FULLWIDTH LATIN CAPITAL LETTER X
+    0xFF39, 0x8278, // FULLWIDTH LATIN CAPITAL LETTER Y
+    0xFF3A, 0x8279, // FULLWIDTH LATIN CAPITAL LETTER Z
+    0xFF3B, 0x816D, // FULLWIDTH LEFT SQUARE BRACKET
+    0xFF3D, 0x816E, // FULLWIDTH RIGHT SQUARE BRACKET
+    0xFF3E, 0x814F, // FULLWIDTH CIRCUMFLEX ACCENT
+    0xFF3F, 0x8151, // FULLWIDTH LOW LINE
+    0xFF40, 0x814D, // FULLWIDTH GRAVE ACCENT
+    0xFF41, 0x8281, // FULLWIDTH LATIN SMALL LETTER A
+    0xFF42, 0x8282, // FULLWIDTH LATIN SMALL LETTER B
+    0xFF43, 0x8283, // FULLWIDTH LATIN SMALL LETTER C
+    0xFF44, 0x8284, // FULLWIDTH LATIN SMALL LETTER D
+    0xFF45, 0x8285, // FULLWIDTH LATIN SMALL LETTER E
+    0xFF46, 0x8286, // FULLWIDTH LATIN SMALL LETTER F
+    0xFF47, 0x8287, // FULLWIDTH LATIN SMALL LETTER G
+    0xFF48, 0x8288, // FULLWIDTH LATIN SMALL LETTER H
+    0xFF49, 0x8289, // FULLWIDTH LATIN SMALL LETTER I
+    0xFF4A, 0x828A, // FULLWIDTH LATIN SMALL LETTER J
+    0xFF4B, 0x828B, // FULLWIDTH LATIN SMALL LETTER K
+    0xFF4C, 0x828C, // FULLWIDTH LATIN SMALL LETTER L
+    0xFF4D, 0x828D, // FULLWIDTH LATIN SMALL LETTER M
+    0xFF4E, 0x828E, // FULLWIDTH LATIN SMALL LETTER N
+    0xFF4F, 0x828F, // FULLWIDTH LATIN SMALL LETTER O
+    0xFF50, 0x8290, // FULLWIDTH LATIN SMALL LETTER P
+    0xFF51, 0x8291, // FULLWIDTH LATIN SMALL LETTER Q
+    0xFF52, 0x8292, // FULLWIDTH LATIN SMALL LETTER R
+    0xFF53, 0x8293, // FULLWIDTH LATIN SMALL LETTER S
+    0xFF54, 0x8294, // FULLWIDTH LATIN SMALL LETTER T
+    0xFF55, 0x8295, // FULLWIDTH LATIN SMALL LETTER U
+    0xFF56, 0x8296, // FULLWIDTH LATIN SMALL LETTER V
+    0xFF57, 0x8297, // FULLWIDTH LATIN SMALL LETTER W
+    0xFF58, 0x8298, // FULLWIDTH LATIN SMALL LETTER X
+    0xFF59, 0x8299, // FULLWIDTH LATIN SMALL LETTER Y
+    0xFF5A, 0x829A, // FULLWIDTH LATIN SMALL LETTER Z
+    0xFF5B, 0x816F, // FULLWIDTH LEFT CURLY BRACKET
+    0xFF5C, 0x8162, // FULLWIDTH VERTICAL LINE
+    0xFF5D, 0x8170, // FULLWIDTH RIGHT CURLY BRACKET
+    0xFFE3, 0x8150, // FULLWIDTH MACRON
+    0xFFE5, 0x818F // FULLWIDTH YEN SIGN
+};
index 98cca3d..6cde463 100644 (file)
@@ -2,7 +2,7 @@
 
 /*
     libzint - the open source barcode library
-    Copyright (C) 2009 - 2020 Robin Stuart <rstuart114@gmail.com>
+    Copyright (C) 2009-2019 Robin Stuart <rstuart114@gmail.com>
 
     Redistribution and use in source and binary forms, with or without
     modification, are permitted provided that the following conditions
     OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     SUCH DAMAGE.
  */
-/* vim: set ts=4 sw=4 et : */
 
 #include <locale.h>
 #include <string.h>
+#include <stdlib.h>
 #include <stdio.h>
 #include <math.h>
 #ifdef _MSC_VER
 
 #include "common.h"
 
-void pick_colour(int colour, char colour_code[]) {
-    switch(colour) {
-        case 0: // White
-            strcpy(colour_code, "ffffff");
-            break;
-        case 1: // Cyan
-            strcpy(colour_code, "00ffff");
-            break;
-        case 2: // Blue
-            strcpy(colour_code, "0000ff");
-            break;
-        case 3: // Magenta
-            strcpy(colour_code, "ff00ff");
-            break;
-        case 4: // Red
-            strcpy(colour_code, "ff0000");
-            break;
-        case 5: // Yellow
-            strcpy(colour_code, "ffff00");
-            break;
-        case 6: // Green
-            strcpy(colour_code, "00ff00");
-            break;
-        default: // Black
-            strcpy(colour_code, "000000");
-            break;
-    }
-}
-
-static void make_html_friendly(unsigned char * string, char * html_version) {
+void make_html_friendly(unsigned char * string, char * html_version) {
     /* Converts text to use HTML entity codes */
 
     int i, html_pos;
@@ -78,7 +49,7 @@ static void make_html_friendly(unsigned char * string, char * html_version) {
     html_pos = 0;
     html_version[html_pos] = '\0';
 
-    for (i = 0; i < (int) ustrlen(string); i++) {
+    for (i = 0; i < ustrlen(string); i++) {
         switch(string[i]) {
             case '>':
                 strcat(html_version, "&gt;");
@@ -114,7 +85,7 @@ static void make_html_friendly(unsigned char * string, char * html_version) {
     }
 }
 
-INTERNAL int svg_plot(struct zint_symbol *symbol) {
+int svg_plot(struct zint_symbol *symbol) {
     FILE *fsvg;
     int error_number = 0;
     const char *locale = NULL;
@@ -127,15 +98,13 @@ INTERNAL int svg_plot(struct zint_symbol *symbol) {
     struct zint_vector_circle *circle;
     struct zint_vector_string *string;
 
-    char colour_code[7];
-
 #ifdef _MSC_VER
     char* html_string;
 #endif
 
     int html_len = strlen((char *)symbol->text) + 1;
 
-    for (i = 0; i < (int) strlen((char *)symbol->text); i++) {
+    for (0; i < strlen((char *)symbol->text); i++) {
         switch(symbol->text[i]) {
             case '>':
             case '<':
@@ -184,12 +153,7 @@ INTERNAL int svg_plot(struct zint_symbol *symbol) {
 
     rect = symbol->vector->rectangles;
     while (rect) {
-        if (rect->colour == -1) {
-            fprintf(fsvg, "      <rect x=\"%.2f\" y=\"%.2f\" width=\"%.2f\" height=\"%.2f\" />\n", rect->x, rect->y, rect->width, rect->height);
-        } else {
-            pick_colour(rect->colour, colour_code);
-            fprintf(fsvg, "      <rect x=\"%.2f\" y=\"%.2f\" width=\"%.2f\" height=\"%.2f\" fill=\"#%s\" />\n", rect->x, rect->y, rect->width, rect->height, colour_code);
-        }
+        fprintf(fsvg, "      <rect x=\"%.2f\" y=\"%.2f\" width=\"%.2f\" height=\"%.2f\" />\n", rect->x, rect->y, rect->width, rect->height);
         rect = rect->next;
     }
 
index 9db20b9..1f4be8d 100644 (file)
     OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     SUCH DAMAGE.
  */
-/* vim: set ts=4 sw=4 et : */
 
-/* Telepen Barcode Symbology information and History (BSiH) https://telepen.co.uk/wp-content/uploads/2018/10/Barcode-Symbology-information-and-History.pdf */
-
-#define SODIUM  "0123456789X"
+#define SODIUM "0123456789X"
 
+#include <string.h>
 #include <stdio.h>
+#include <stdlib.h>
 #include "common.h"
 
 static char *TeleTable[] = {
-    "31313131", "1131313111", "33313111", "1111313131", "3111313111", "11333131", "13133131", "111111313111",
+    "1111111111111111", "1131313111", "33313111", "1111313131", "3111313111", "11333131", "13133131", "111111313111",
     "31333111", "1131113131", "33113131", "1111333111", "3111113131", "1113133111", "1311133111", "111111113131",
     "3131113111", "11313331", "333331", "111131113111", "31113331", "1133113111", "1313113111", "1111113331",
     "31131331", "113111113111", "3311113111", "1111131331", "311111113111", "1113111331", "1311111331", "11111111113111",
@@ -49,18 +48,18 @@ static char *TeleTable[] = {
     "3113111311", "113111111131", "3311111131", "111113111311", "311111111131", "111311111311", "131111111311", "11111111111131",
     "3131311111", "11313133", "333133", "111131311111", "31113133", "1133311111", "1313311111", "1111113133",
     "313333", "113111311111", "3311311111", "11113333", "311111311111", "11131333", "13111333", "11111111311111",
-    "31311133", "1131331111", "33331111", "1111311133", "3111331111", "11331133", "13131133", "111111331111",
+    "31311133", "1131331111", "33331111", "    1111311133", "3111331111", "11331133", "13131133", "111111331111",
     "3113131111", "1131111133", "33111133", "111113131111", "3111111133", "111311131111", "131111131111", "111111111133",
     "31311313", "113131111111", "3331111111", "1111311313", "311131111111", "11331313", "13131313", "11111131111111",
     "3133111111", "1131111313", "33111313", "111133111111", "3111111313", "111313111111", "131113111111", "111111111313",
     "313111111111", "1131131113", "33131113", "11113111111111", "3111131113", "113311111111", "131311111111", "111111131113",
-    "3113111113", "11311111111111", "331111111111", "111113111113", "31111111111111", "111311111113", "131111111113", "1111111111111111",
+    "3113111113", "11311111111111", "331111111111", "111113111113", "31111111111111", "111311111113", "131111111113"
 };
 
-INTERNAL int telepen(struct zint_symbol *symbol, unsigned char source[], const size_t src_len) {
+int telepen(struct zint_symbol *symbol, unsigned char source[], const size_t src_len) {
     unsigned int i, count, check_digit;
     int error_number;
-    char dest[521]; /* 12 (start) + 30 * 16 (max for DELs) + 16 (check digit) + 12 (stop) + 1 = 521 */
+    char dest[512]; /*14 + 30 * 14 + 14 + 14 + 1 ~ 512 */
 
     error_number = 0;
 
@@ -74,7 +73,7 @@ INTERNAL int telepen(struct zint_symbol *symbol, unsigned char source[], const s
     strcpy(dest, TeleTable['_']);
 
     for (i = 0; i < src_len; i++) {
-        if (source[i] > 127) {
+        if (source[i] > 126) {
             /* Cannot encode extended ASCII */
             strcpy(symbol->errtxt, "391: Invalid characters in input data");
             return ZINT_ERROR_INVALID_DATA;
@@ -104,11 +103,11 @@ INTERNAL int telepen(struct zint_symbol *symbol, unsigned char source[], const s
     return error_number;
 }
 
-INTERNAL int telepen_num(struct zint_symbol *symbol, unsigned char source[], const size_t src_len) {
+int telepen_num(struct zint_symbol *symbol, unsigned char source[], const size_t src_len) {
     unsigned int count, check_digit, glyph;
     int error_number;
-    size_t i, temp_length = src_len;
-    char dest[521]; /* 12 (start) + 30 * 16 (max for DELs) + 16 (check digit) + 12 (stop) + 1 = 521 */
+    size_t i,temp_length = src_len;
+    char dest[1024]; /* 14 + 60 * 14 + 14 + 14 + 1 ~ 1024 */
     unsigned char temp[64];
 
     count = 0;
@@ -166,3 +165,4 @@ INTERNAL int telepen_num(struct zint_symbol *symbol, unsigned char source[], con
     ustrcpy(symbol->text, temp);
     return error_number;
 }
+
index 0e29691..83f86ea 100644 (file)
@@ -1,9 +1,8 @@
 /* tif.c - Aldus Tagged Image File Format support */
-/* TIFF Revision 6.0 https://www.adobe.io/content/dam/udp/en/open/standards/tiff/TIFF6.pdf */
 
 /*
     libzint - the open source barcode library
-    Copyright (C) 2016 - 2020 Robin Stuart <rstuart114@gmail.com>
+    Copyright (C) 2016-2017 Robin Stuart <rstuart114@gmail.com>
 
     Redistribution and use in source and binary forms, with or without
     modification, are permitted provided that the following conditions
     OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     SUCH DAMAGE.
  */
-/* vim: set ts=4 sw=4 et : */
 
 #include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
 #include <math.h>
-#include <assert.h>
 #include "common.h"
 #include "tif.h"
 #ifdef _MSC_VER
 #include <malloc.h>
 #endif
 
-INTERNAL int tif_pixel_plot(struct zint_symbol *symbol, char *pixelbuf) {
+int tbump_up(int input) {
+    /* Strings length must be a multiple of 4 bytes */
+    if ((input % 2) == 1) {
+        input++;
+    }
+    return input;
+}
+
+int tif_pixel_plot(struct zint_symbol *symbol, char *pixelbuf) {
     int fgred, fggrn, fgblu, bgred, bggrn, bgblu;
     int i;
     int rows_per_strip, strip_count;
-    unsigned int free_memory;
-    int row, column, strip;
-    unsigned int bytes_put;
+    int free_memory;
+    int row, column, strip, bytes_put;
     FILE *tif_file;
 #ifdef _MSC_VER
     uint32_t* strip_offset;
@@ -68,30 +74,25 @@ INTERNAL int tif_pixel_plot(struct zint_symbol *symbol, char *pixelbuf) {
     bggrn = (16 * ctoi(symbol->bgcolour[2])) + ctoi(symbol->bgcolour[3]);
     bgblu = (16 * ctoi(symbol->bgcolour[4])) + ctoi(symbol->bgcolour[5]);
 
-    /* TIFF Rev 6 Section 7 p.27 "Set RowsPerStrip such that the size of each strip is about 8K bytes...
-     * Note that extremely wide high resolution images may have rows larger than 8K bytes; in this case,
-     * RowsPerStrip should be 1, and the strip will be larger than 8K." */
     rows_per_strip = 8192 / (symbol->bitmap_width * 3);
     if (rows_per_strip == 0) {
         rows_per_strip = 1;
     }
 
-    /* Suppresses clang-tidy clang-analyzer-core.VLASize warning */
-    assert(symbol->bitmap_height > 0);
-
     strip_count = symbol->bitmap_height / rows_per_strip;
     if ((symbol->bitmap_height % rows_per_strip) != 0) {
         strip_count++;
     }
-
+    
     if (rows_per_strip > symbol->bitmap_height) {
         rows_per_strip = symbol->bitmap_height;
     }
-
-    if (symbol->debug & ZINT_DEBUG_PRINT) {
-        printf("TIFF (%dx%d) Strip Count %d, Rows Per Strip %d\n", symbol->bitmap_width, symbol->bitmap_height, strip_count, rows_per_strip);
+    
+    if (strip_count == 1) {
+        rows_per_strip = (rows_per_strip / 2) + 1;
+        strip_count++;
     }
-
+    
 #ifndef _MSC_VER
     uint32_t strip_offset[strip_count];
     uint32_t strip_bytes[strip_count];
@@ -119,6 +120,10 @@ INTERNAL int tif_pixel_plot(struct zint_symbol *symbol, char *pixelbuf) {
     }
 
     if (free_memory > 0xffff0000) {
+#ifdef _MSC_VER
+        free(strip_offset);
+        free(strip_bytes);
+#endif
         strcpy(symbol->errtxt, "670: Output file size too big");
         return ZINT_ERROR_MEMORY;
     }
@@ -146,68 +151,25 @@ INTERNAL int tif_pixel_plot(struct zint_symbol *symbol, char *pixelbuf) {
 
     fwrite(&header, sizeof(tiff_header_t), 1, tif_file);
     free_memory += sizeof(tiff_ifd_t);
-
+    
     /* Pixel data */
     strip = 0;
     bytes_put = 0;
     for (row = 0; row < symbol->bitmap_height; row++) {
         for (column = 0; column < symbol->bitmap_width; column++) {
-            switch(pixelbuf[(row * symbol->bitmap_width) + column]) {
-                case 'W': // White
-                    putc(255, tif_file);
-                    putc(255, tif_file);
-                    putc(255, tif_file);
-                    break;
-                case 'C': // Cyan
-                    putc(0, tif_file);
-                    putc(255, tif_file);
-                    putc(255, tif_file);
-                    break;
-                case 'B': // Blue
-                    putc(0, tif_file);
-                    putc(0, tif_file);
-                    putc(255, tif_file);
-                    break;
-                case 'M': // Magenta
-                    putc(255, tif_file);
-                    putc(0, tif_file);
-                    putc(255, tif_file);
-                    break;
-                case 'R': // Red
-                    putc(255, tif_file);
-                    putc(0, tif_file);
-                    putc(0, tif_file);
-                    break;
-                case 'Y': // Yellow
-                    putc(255, tif_file);
-                    putc(255, tif_file);
-                    putc(0, tif_file);
-                    break;
-                case 'G': // Green
-                    putc(0, tif_file);
-                    putc(255, tif_file);
-                    putc(0, tif_file);
-                    break;
-                case 'K': // Black
-                    putc(0, tif_file);
-                    putc(0, tif_file);
-                    putc(0, tif_file);
-                    break;
-                case '1':
-                    putc(fgred, tif_file);
-                    putc(fggrn, tif_file);
-                    putc(fgblu, tif_file);
-                    break;
-                default:
-                    putc(bgred, tif_file);
-                    putc(bggrn, tif_file);
-                    putc(bgblu, tif_file);
-                    break;
+            if (pixelbuf[(row * symbol->bitmap_width) + column] == '1') {
+                putc(fgred, tif_file);
+                putc(fggrn, tif_file);
+                putc(fgblu, tif_file);
+            } else {
+                putc(bgred, tif_file);
+                putc(bggrn, tif_file);
+                putc(bgblu, tif_file);
             }
             bytes_put += 3;
         }
-
-        if (strip < strip_count && (bytes_put + 3) >= strip_bytes[strip]) {
+        
+        if ((bytes_put + 3) >= strip_bytes[strip]) {
             // End of strip, pad if strip length is odd
             if (strip_bytes[strip] % 2 == 1) {
                 putc(0, tif_file);
@@ -255,12 +217,8 @@ INTERNAL int tif_pixel_plot(struct zint_symbol *symbol, char *pixelbuf) {
     ifd.strip_offsets.tag = 0x0111;
     ifd.strip_offsets.type = 4; // LONG
     ifd.strip_offsets.count = strip_count;
-    if (strip_count == 1) {
-        ifd.strip_offsets.offset = strip_offset[0];
-    } else {
-        ifd.strip_offsets.offset = free_memory;
-        free_memory += strip_count * 4;
-    }
+    ifd.strip_offsets.offset = free_memory;
+    free_memory += strip_count * 4;
 
     ifd.samples_per_pixel.tag = 0x0115;
     ifd.samples_per_pixel.type = 3;
@@ -275,12 +233,8 @@ INTERNAL int tif_pixel_plot(struct zint_symbol *symbol, char *pixelbuf) {
     ifd.strip_byte_counts.tag = 0x0117;
     ifd.strip_byte_counts.type = 4;
     ifd.strip_byte_counts.count = strip_count;
-    if (strip_count == 1) {
-        ifd.strip_byte_counts.offset = strip_bytes[0];
-    } else {
-        ifd.strip_byte_counts.offset = free_memory;
-        free_memory += strip_count * 4;
-    }
+    ifd.strip_byte_counts.offset = free_memory;
+    free_memory += strip_count * 4;
 
     ifd.x_resolution.tag = 0x011a;
     ifd.x_resolution.type = 5;
@@ -312,16 +266,14 @@ INTERNAL int tif_pixel_plot(struct zint_symbol *symbol, char *pixelbuf) {
     fwrite(&temp, 2, 1, tif_file); // Green Bytes
     fwrite(&temp, 2, 1, tif_file); // Blue Bytes
 
-    if (strip_count != 1) {
-        /* Strip offsets */
-        for (i = 0; i < strip_count; i++) {
-            fwrite(&strip_offset[i], 4, 1, tif_file);
-        }
+    /* Strip offsets */
+    for(i = 0; i < strip_count; i++) {
+        fwrite(&strip_offset[i], 4, 1, tif_file);
+    }
 
-        /* Strip byte lengths */
-        for (i = 0; i < strip_count; i++) {
-            fwrite(&strip_bytes[i], 4, 1, tif_file);
-        }
+    /* Strip byte lengths */
+    for(i = 0; i < strip_count; i++) {
+        fwrite(&strip_bytes[i], 4, 1, tif_file);
     }
 
     /* X Resolution */
index 58d0da8..da5cfb3 100644 (file)
@@ -1,7 +1,7 @@
 /*  ultra.c - Ultracode
 
     libzint - the open source barcode library
-    Copyright (C) 2020 Robin Stuart <rstuart114@gmail.com>
+    Copyright (C) 2019 Robin Stuart <rstuart114@gmail.com>
 
     Redistribution and use in source and binary forms, with or without
     modification, are permitted provided that the following conditions
     OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     SUCH DAMAGE.
  */
-/* vim: set ts=4 sw=4 et : */
 
- /* This version was developed using AIMD/TSC15032-43 v0.99c Edit 60, dated 4th Nov 2015 */
-
-#ifdef _MSC_VER
-#include <malloc.h>
-#endif
 #include <stdio.h>
+#include <string.h>
 #include "common.h"
 
-#define EIGHTBIT_MODE       10
-#define ASCII_MODE          20
-#define C43_MODE            30
-
-#define PREDICT_WINDOW      12
-
-#define GFMUL(i, j) ((((i) == 0)||((j) == 0)) ? 0 : gfPwr[(gfLog[i] + gfLog[j])])
-
-static const char fragment[27][14] = {"http://", "https://", "http://www.", "https://www.",
-        "ftp://", "www.", ".com", ".edu", ".gov", ".int", ".mil", ".net", ".org",
-        ".mobi", ".coop", ".biz", ".info", "mailto:", "tel:", ".cgi", ".asp",
-        ".aspx", ".php", ".htm", ".html", ".shtml", "file:"};
-
-static const char ultra_c43_set1[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 .,%";
-static const char ultra_c43_set2[] = "abcdefghijklmnopqrstuvwxyz:/?#[]@=_~!.,-";
-static const char ultra_c43_set3[] = "{}`()\"+'<>|$;&\\^*";
-static const char ultra_digit[] = "0123456789,/";
-static const char ultra_colour[] = "WCBMRYGK";
-
-//static const int ultra_maxsize[] = {34, 78, 158, 282}; // According to Table 1
-static const int ultra_maxsize[] = {34, 81, 158, 282}; // Adjusted to allow 79-81 codeword range in 3-row symbols (only 1 secondary vertical clock track, not 2, so 3 extra)
-
-static const int ultra_mincols[] = {5, 13, 23, 30}; // # Total Tile Columns from Table 1
-
-static const int kec[] = {0, 1, 2, 4, 6, 8}; // Value K(EC) from Table 12
-
-static const int dccu[] = {
-    051363, 051563, 051653, 053153, 053163, 053513, 053563, 053613, //  0-7
-    053653, 056153, 056163, 056313, 056353, 056363, 056513, 056563, //  8-15
-    051316, 051356, 051536, 051616, 053156, 053516, 053536, 053616, // 16-23
-    053636, 053656, 056136, 056156, 056316, 056356, 056516, 056536  // 24-31
-};
-
-static const int dccl[] = {
-    061351, 061361, 061531, 061561, 061631, 061651, 063131, 063151, //  0-7
-    063161, 063531, 063561, 063631, 065131, 065161, 065351, 065631, //  8-15
-    031351, 031361, 031531, 031561, 031631, 031651, 035131, 035151, // 16-23
-    035161, 035361, 035631, 035651, 036131, 036151, 036351, 036531  // 24-31
-};
-
-static const int tiles[] = {
-    013135, 013136, 013153, 013156, 013163, 013165, 013513, 013515, 013516, 013531, //   0-9
-    013535, 013536, 013561, 013563, 013565, 013613, 013615, 013616, 013631, 013635, //  10-19
-    013636, 013651, 013653, 013656, 015135, 015136, 015153, 015163, 015165, 015313, //  20-29
-    015315, 015316, 015351, 015353, 015356, 015361, 015363, 015365, 015613, 015615, //  30-39
-    015616, 015631, 015635, 015636, 015651, 015653, 015656, 016135, 016136, 016153, //  40-49
-    016156, 016165, 016313, 016315, 016316, 016351, 016353, 016356, 016361, 016363, //  50-59
-    016365, 016513, 016515, 016516, 016531, 016535, 016536, 016561, 016563, 016565, //  60-69
-    031315, 031316, 031351, 031356, 031361, 031365, 031513, 031515, 031516, 031531, //  70-79
-    031535, 031536, 031561, 031563, 031565, 031613, 031615, 031631, 031635, 031636, //  80-89
-    031651, 031653, 031656, 035131, 035135, 035136, 035151, 035153, 035156, 035161, //  90-99
-    035163, 035165, 035315, 035316, 035351, 035356, 035361, 035365, 035613, 035615, // 100-109
-    035616, 035631, 035635, 035636, 035651, 035653, 035656, 036131, 036135, 036136, // 110-119
-    036151, 036153, 036156, 036163, 036165, 036315, 036316, 036351, 036356, 036361, // 120-129
-    036365, 036513, 036515, 036516, 036531, 036535, 036536, 036561, 036563, 036565, // 130-139
-    051313, 051315, 051316, 051351, 051353, 051356, 051361, 051363, 051365, 051513, // 140-149
-    051516, 051531, 051536, 051561, 051563, 051613, 051615, 051616, 051631, 051635, // 150-159
-    051636, 051651, 051653, 051656, 053131, 053135, 053136, 053151, 053153, 053156, // 160-169
-    053161, 053163, 053165, 053513, 053516, 053531, 053536, 053561, 053563, 053613, // 170-179
-    053615, 053616, 053631, 053635, 053636, 053651, 053653, 053656, 056131, 056135, // 180-189
-    056136, 056151, 056153, 056156, 056161, 056163, 056165, 056313, 056315, 056316, // 190-199
-    056351, 056353, 056356, 056361, 056363, 056365, 056513, 056516, 056531, 056536, // 200-209
-    056561, 056563, 061313, 061315, 061316, 061351, 061353, 061356, 061361, 061363, // 210-219
-    061365, 061513, 061515, 061516, 061531, 061535, 061536, 061561, 061563, 061565, // 220-229
-    061615, 061631, 061635, 061651, 061653, 063131, 063135, 063136, 063151, 063153, // 230-239
-    063156, 063161, 063163, 063165, 063513, 063515, 063516, 063531, 063535, 063536, // 240-249
-    063561, 063563, 063565, 063613, 063615, 063631, 063635, 063651, 063653, 065131, // 250-259
-    065135, 065136, 065151, 065153, 065156, 065161, 065163, 065165, 065313, 065315, // 260-269
-    065316, 065351, 065353, 065356, 065361, 065363, 065365, 065613, 065615, 065631, // 270-279
-    065635, 065651, 065653, 056565, 051515                                     // 280-284
-};
-
-/* The following adapted from ECC283.C "RSEC codeword generator"
- * from Annex B of Ultracode draft
- * originally written by Ted Williams of Symbol Vision Corp.
- * Dated 2001-03-09
- * Corrected thanks to input from Terry Burton */
-
-/* 
- * NOTE: Included here is an attempt to allow code compression within Ultracode. Unfortunately
- * the copy of the standard this was written from was an early draft which includes self
- * contradictions, so this is a "best guess" implementation. Because it is not guaranteed
- * to be correct this compression is not applied by default. To enable compression set
- * 
- * symbol->option_3 = ULTRA_COMPRESSION;
- * 
- * Code compression should be enabled by default when it has been implemented according to
- * a more reliable version of the specification.
- */
-
-/* Generate divisor polynomial gQ(x) for GF283() given the required ECC size, 3 to 101 */
-static void ultra_genPoly(short EccSize, unsigned short gPoly[], unsigned short gfPwr[], unsigned short gfLog[]) {
-    int i, j;
-
-    gPoly[0] = 1;
-    for (i = 1; i < (EccSize + 1); i++) gPoly[i] = 0;
-
-    for (i = 0; i < EccSize; i++) {
-        for (j = i; j >= 0; j--)
-            gPoly[j + 1] = (gPoly[j] + GFMUL(gPoly[j + 1], gfPwr[i + 1])) % 283;
-        gPoly[0] = GFMUL(gPoly[0], gfPwr[i + 1]);
-    }
-    for (i = EccSize - 1; i >= 0; i -= 2) gPoly[i] = 283 - gPoly[i];
-
-    /* gPoly[i] is > 0 so modulo operation not needed */
-}
-
-/* Generate the log and antilog tables for GF283() multiplication & division */
-static void ultra_initLogTables(unsigned short gfPwr[], unsigned short gfLog[]) {
-    int i, j;
-
-    for (j = 0; j < 283; j++) gfLog[j] = 0;
-    i = 1;
-    for (j = 0; j < 282; j++) {
-        /* j + 282 indicies save doing the modulo operation in GFMUL */
-        gfPwr[j + 282] = gfPwr[j] = (short) i;
-        gfLog[i] = (short) j;
-        i = (i * 3) % 283;
-    }
-}
-
-static void ultra_gf283(short DataSize, short EccSize, int Message[]) {
-    /* Input is complete message codewords in array Message[282]
-     * DataSize is number of message codewords
-     * EccSize is number of Reed-Solomon GF(283) check codewords to generate
-     *
-     * Upon exit, Message[282] contains complete 282 codeword Symbol Message
-     * including leading zeroes corresponding to each truncated codeword */
-
-    unsigned short gPoly[283], gfPwr[(282 * 2)], gfLog[283];
-    int i, j, n;
-    unsigned short t;
-
-    /* first build the log & antilog tables used in multiplication & division */
-    ultra_initLogTables(gfPwr, gfLog);
-
-    /* then generate the division polynomial of length EccSize */
-    ultra_genPoly(EccSize, gPoly, gfPwr, gfLog);
-
-    /* zero all EccSize codeword values */
-    for (j = 281; (j > (281 - EccSize)); j--) Message[j] = 0;
-
-    /* shift message codewords to the right, leave space for ECC checkwords */
-    for (i = DataSize - 1; (i >= 0); j--, i--) Message[j] = Message[i];
-
-    /* add zeroes to pad left end Message[] for truncated codewords */
-    j++;
-    for (i = 0; i < j; i++) Message[i] = 0;
-
-    /* generate (EccSize) Reed-Solomon checkwords */
-    for (n = j; n < (j + DataSize); n++) {
-        t = (Message[j + DataSize] + Message[n]) % 283;
-        for (i = 0; i < (EccSize - 1); i++) {
-            Message[j + DataSize + i] = (Message[j + DataSize + i + 1] + 283
-            - GFMUL(t, gPoly[EccSize - 1 - i])) % 283;
-        }
-        Message[j + DataSize + EccSize - 1] = (283 - GFMUL(t, gPoly[0])) % 283;
-    }
-    for (i = j + DataSize; i < (j + DataSize + EccSize); i++)
-        Message[i] = (283 - Message[i]) % 283;
-}
-
-/* End of Ted Williams code */
-
-static int ultra_find_fragment(const unsigned char source[], int source_length, int position) {
-    int retval = -1;
-    int j, k, latch, fraglen;
-
-    for (j = 0; j < 27; j++) {
-        latch = 0;
-        fraglen = strlen(fragment[j]);
-        if ((position + fraglen) <= source_length) {
-            latch = 1;
-            for (k = 0; k < fraglen; k++) {
-                if (source[position + k] != fragment[j][k]) {
-                    latch = 0;
-                    break;
-                }
-            }
-        }
-
-        if (latch) {
-            retval = j;
-        }
-    }
-
-    return retval;
-}
-
-/* Encode characters in 8-bit mode */
-static float look_ahead_eightbit(unsigned char source[], int in_length, int in_locn, char current_mode, int end_char, int cw[], int* cw_len, int gs1)
-{
-    int codeword_count = 0;
-    int i;
-    int letters_encoded = 0;
-
-    if (current_mode != EIGHTBIT_MODE) {
-        cw[codeword_count] = 282; // Unlatch
-        codeword_count += 1;
-    }
-
-    i = in_locn;
-    while ((i < in_length) && (i < end_char)) {
-        if ((source[i] == '[') && gs1) {
-            cw[codeword_count] = 268; // FNC1
-        } else {
-            cw[codeword_count] = source[i];
-        }
-        i++;
-        codeword_count++;
-    }
-
-    letters_encoded = i - in_locn;
-
-    *cw_len = codeword_count;
-
-    if (codeword_count == 0) {
-        return 0.0;
-    } else {
-        return (float)letters_encoded / (float)codeword_count;
-    }
-}
-
-/* Encode character in the ASCII mode/submode (including numeric compression) */
-static float look_ahead_ascii(unsigned char source[], int in_length, int in_locn, char current_mode, int symbol_mode, int end_char, int cw[], int* cw_len, int* encoded, int gs1) {
-    int codeword_count = 0;
-    int i;
-    int first_digit, second_digit, done;
-    int letters_encoded = 0;
-
-    if (current_mode == EIGHTBIT_MODE) {
-        cw[codeword_count] = 267; // Latch ASCII Submode
-        codeword_count++;
-    }
-
-    if (current_mode == C43_MODE) {
-        cw[codeword_count] = 282; // Unlatch
-        codeword_count++;
-        if (symbol_mode == EIGHTBIT_MODE) {
-            cw[codeword_count] = 267; // Latch ASCII Submode
-            codeword_count++;
-        }
-    }
-
-    i = in_locn;
-    do {
-        /* Check for double digits */
-        done = 0;
-        if (i + 1 < in_length) {
-            first_digit = posn(ultra_digit, source[i]);
-            second_digit = posn(ultra_digit, source[i + 1]);
-            if ((first_digit != -1) && (second_digit != -1)) {
-                /* Double digit can be encoded */
-                if ((first_digit >= 0) && (first_digit <= 9) && (second_digit >= 0) && (second_digit <= 9)) {
-                    /* Double digit numerics */
-                    cw[codeword_count] = (10 * first_digit) + second_digit + 128;
-                    codeword_count++;
-                    i += 2;
-                    done = 1;
-                } else if ((first_digit >= 0) && (first_digit <= 9) && (second_digit == 10)) {
-                    /* Single digit followed by selected decimal point character */
-                    cw[codeword_count] = first_digit + 228;
-                    codeword_count++;
-                    i += 2;
-                    done = 1;
-                } else if ((first_digit == 10) && (second_digit >= 0) && (second_digit <= 9)) {
-                    /* Selected decimal point character followed by single digit */
-                    cw[codeword_count] = second_digit + 238;
-                    codeword_count++;
-                    i += 2;
-                    done = 1;
-                } else if ((first_digit >= 0) && (first_digit <= 9) && (second_digit == 11)) {
-                    /* Single digit or decimal point followed by field deliminator */
-                    cw[codeword_count] = first_digit + 248;
-                    codeword_count++;
-                    i += 2;
-                    done = 1;
-                } else if ((first_digit == 11) && (second_digit >= 0) && (second_digit <= 9)) {
-                    /* Field deliminator followed by single digit or decimal point */
-                    cw[codeword_count] = second_digit + 259;
-                    codeword_count++;
-                    i += 2;
-                    done = 1;
-                }
-            }
-        }
-
-        if (!done && source[i] < 0x80) {
-            if ((source[i] == '[') && gs1) {
-                cw[codeword_count] = 272; // FNC1
-            } else {
-                cw[codeword_count] = source[i];
-            }
-            codeword_count++;
-            i++;
-        }
-    } while ((i < in_length) && (i < end_char) && (source[i] < 0x80));
-
-    letters_encoded = i - in_locn;
-    if (encoded != NULL) {
-        *encoded = letters_encoded;
-    }
-
-    *cw_len = codeword_count;
-
-    if (codeword_count == 0) {
-        return 0.0;
-    } else {
-        return (float)letters_encoded / (float)codeword_count;
-    }
-}
-
-/* Returns true if should latch to subset other than given `subset` */
-static int c43_should_latch_other(const unsigned char data[], const size_t length, const unsigned int locn, int subset, int gs1) {
-    unsigned int i, fraglen, predict_window;
-    int cnt, alt_cnt, fragno;
-    const char* set = subset == 1 ? ultra_c43_set1 : ultra_c43_set2;
-    const char* alt_set = subset == 2 ? ultra_c43_set1 : ultra_c43_set2;
-
-    if (locn + 3 > length) {
-        return 0;
-    }
-    predict_window = locn + 3;
-
-    for (i = locn, cnt = 0, alt_cnt = 0; i < predict_window; i++) {
-        if (data[i] <= 0x1F || data[i] >= 0x7F || (gs1 && data[i] == '[')) {
-            break;
-        }
-
-        fragno = ultra_find_fragment(data, length, i);
-        if (fragno != -1 && fragno != 26) {
-            fraglen = strlen(fragment[fragno]);
-            predict_window += fraglen;
-            if (predict_window > length) {
-                predict_window = length;
-            }
-            i += fraglen - 1;
-        } else {
-            if (strchr(set, data[i]) != NULL) {
-                cnt++;
-            }
-            if (strchr(alt_set, data[i]) != NULL) {
-                alt_cnt++;
-            }
-        }
-    }
-
-    return alt_cnt > cnt;
-}
-
-static int get_subset(unsigned char source[], int in_length, int in_locn, int current_subset) {
-    int fragno;
-    int subset = 0;
-
-    fragno = ultra_find_fragment(source, in_length, in_locn);
-    if ((fragno != -1) && (fragno != 26)) {
-        subset = 3;
-    } else if (current_subset == 2) {
-        if (posn(ultra_c43_set2, source[in_locn]) != -1) {
-            subset = 2;
-        } else if (posn(ultra_c43_set1, source[in_locn]) != -1) {
-            subset = 1;
-        }
-    } else {
-        if (posn(ultra_c43_set1, source[in_locn]) != -1) {
-            subset = 1;
-        } else if (posn(ultra_c43_set2, source[in_locn]) != -1) {
-            subset = 2;
-        }
-    }
-
-    if (subset == 0) {
-        if (posn(ultra_c43_set3, source[in_locn]) != -1) {
-            subset = 3;
-        }
-    }
-
-    return subset;
-}
-
-/* Encode characters in the C43 compaction submode */
-static float look_ahead_c43(unsigned char source[], int in_length, int in_locn, char current_mode, int end_char, int subset, int cw[], int* cw_len, int* encoded, int gs1, int debug) {
-    int codeword_count = 0;
-    int subcodeword_count = 0;
-    int i;
-    int fragno;
-    int sublocn = in_locn;
-    int new_subset;
-    int unshift_set;
-    int base43_value;
-    int letters_encoded = 0;
-    int pad;
-
-#ifndef _MSC_VER
-    int subcw[(in_length + 3) * 2];
-#else
-    int * subcw = (int *) _alloca((in_length + 3) * 2 * sizeof (int));
-#endif /* _MSC_VER */
-
-    if (current_mode == EIGHTBIT_MODE) {
-        /* Check for permissable URL C43 macro sequences, otherwise encode directly */
-        fragno = ultra_find_fragment(source, in_length, sublocn);
-
-        if ((fragno == 2) || (fragno == 3)) {
-            // http://www. > http://
-            // https://www. > https://
-            fragno -= 2;
-        }
-
-        switch(fragno) {
-            case 17: // mailto:
-                cw[codeword_count] = 276;
-                sublocn += strlen(fragment[fragno]);
-                codeword_count++;
-                break;
-            case 18: // tel:
-                cw[codeword_count] = 277;
-                sublocn += strlen(fragment[fragno]);
-                codeword_count++;
-                break;
-            case 26: // file:
-                cw[codeword_count] = 278;
-                sublocn += strlen(fragment[fragno]);
-                codeword_count++;
-                break;
-            case 0: // http://
-                cw[codeword_count] = 279;
-                sublocn += strlen(fragment[fragno]);
-                codeword_count++;
-                break;
-            case 1: // https://
-                cw[codeword_count] = 280;
-                sublocn += strlen(fragment[fragno]);
-                codeword_count++;
-                break;
-            case 4: // ftp://
-                cw[codeword_count] = 281;
-                sublocn += strlen(fragment[fragno]);
-                codeword_count++;
-                break;
-            default:
-                if (subset == 1) {
-                    cw[codeword_count] = 260; // C43 Compaction Submode C1
-                    codeword_count++;
-                }
-
-                if ((subset == 2) || (subset == 3)) {
-                    cw[codeword_count] = 266; // C43 Compaction Submode C2
-                    codeword_count++;
-                }
-                break;
-        }
-    }
-
-    if (current_mode == ASCII_MODE) {
-        if (subset == 1) {
-            cw[codeword_count] = 278; // C43 Compaction Submode C1
-            codeword_count++;
-        }
-
-        if ((subset == 2) || (subset == 3)) {
-            cw[codeword_count] = 280; // C43 Compaction Submode C2
-            codeword_count++;
-        }
-    }
-    unshift_set = subset;
-
-    while ((sublocn < in_length) && (sublocn < end_char)) {
-        /* Check for FNC1 */
-        if (gs1 && source[sublocn] == '[') {
-            break;
-        }
-
-        new_subset = get_subset(source, in_length, sublocn, subset);
-
-        if (new_subset == 0) {
-            break;
-        }
-
-        if ((new_subset != subset) && ((new_subset == 1) || (new_subset == 2))) {
-            if (c43_should_latch_other(source, in_length, sublocn, subset, gs1)) {
-                subcw[subcodeword_count] = 42; // Latch to other C43 set
-                subcodeword_count++;
-                unshift_set = new_subset;
-            } else {
-                subcw[subcodeword_count] = 40; // Shift to other C43 set for 1 char
-                subcodeword_count++;
-                subcw[subcodeword_count] = posn(new_subset == 1 ? ultra_c43_set1 : ultra_c43_set2, source[sublocn]);
-                subcodeword_count++;
-                sublocn++;
-                continue;
-            }
-        }
-
-        subset = new_subset;
-
-        if (subset == 1) {
-            subcw[subcodeword_count] = posn(ultra_c43_set1, source[sublocn]);
-            subcodeword_count++;
-            sublocn++;
-        }
-
-        if (subset == 2) {
-            subcw[subcodeword_count] = posn(ultra_c43_set2, source[sublocn]);
-            subcodeword_count++;
-            sublocn++;
-        }
-
-        if (subset == 3) {
-            subcw[subcodeword_count] = 41; // Shift to set 3
-            subcodeword_count++;
-
-            fragno = ultra_find_fragment(source, in_length, sublocn);
-            if (fragno == 26) {
-                fragno = -1;
-            }
-            if ((fragno >= 0) && (fragno <= 18)) {
-                subcw[subcodeword_count] = fragno; // C43 Set 3 codewords 0 to 18
-                subcodeword_count++;
-                sublocn += strlen(fragment[fragno]);
-            }
-            if ((fragno >= 19) && (fragno <= 25)) {
-                subcw[subcodeword_count] = fragno + 17; // C43 Set 3 codewords 36 to 42
-                subcodeword_count++;
-                sublocn += strlen(fragment[fragno]);
-            }
-            if (fragno == -1) {
-                subcw[subcodeword_count] = posn(ultra_c43_set3, source[sublocn]) + 19; // C43 Set 3 codewords 19 to 35
-                subcodeword_count++;
-                sublocn++;
-            }
-            subset = unshift_set;
-        }
-    }
-
-    pad = 3 - (subcodeword_count % 3);
-    if (pad == 3) {
-        pad = 0;
-    }
-
-    for (i = 0; i < pad; i++) {
-        subcw[subcodeword_count] = 42; // Latch to other C43 set used as pad
-        subcodeword_count++;
-    }
-
-    if (debug & ZINT_DEBUG_PRINT) {
-        printf("C43 codewords %.*s: (%d)", in_length, source + in_locn, subcodeword_count);
-        for (i = 0; i < subcodeword_count; i++) printf( " %d", subcw[i]);
-        printf("\n");
-    }
-
-    letters_encoded = sublocn - in_locn;
-    if (encoded != NULL) {
-        *encoded = letters_encoded;
-    }
-
-    for (i = 0; i < subcodeword_count; i += 3) {
-        base43_value = (43 * 43 * subcw[i]) + (43 * subcw[i + 1]) + subcw[i + 2];
-        cw[codeword_count] = base43_value / 282;
-        codeword_count++;
-        cw[codeword_count] = base43_value % 282;
-        codeword_count++;
-    }
-
-    *cw_len = codeword_count;
-
-    if (codeword_count == 0) {
-        return 0.0;
-    } else {
-        return (float)letters_encoded / (float)codeword_count;
-    }
-}
-
-/* Produces a set of codewords which are "somewhat" optimised - this could be improved on */
-static int ultra_generate_codewords(struct zint_symbol *symbol, const unsigned char source[], const size_t in_length, int codewords[]) {
-    int i;
-    int crop_length;
-    int codeword_count = 0;
-    int input_locn = 0;
-    char symbol_mode;
-    char current_mode;
-    int subset;
-    float eightbit_score;
-    float ascii_score;
-    float c43_score;
-    int end_char;
-    int block_length;
-    int fragment_length;
-    int fragno;
-    int gs1 = 0;
-    int ascii_encoded, c43_encoded;
-
-#ifndef _MSC_VER
-    unsigned char crop_source[in_length + 1];
-    char mode[in_length + 1];
-    int cw_fragment[in_length * 2 + 1];
-#else
-    unsigned char * crop_source = (unsigned char *) _alloca((in_length + 1) * sizeof (unsigned char));
-    char * mode = (char *) _alloca((in_length + 1) * sizeof (char));
-    int * cw_fragment = (int *) _alloca((in_length * 2 + 1) * sizeof (int));
-#endif /* _MSC_VER */
-
-    if ((symbol->input_mode & 0x07) == GS1_MODE) {
-        gs1 = 1;
-    }
-
-    // Decide start character codeword (from Table 5)
-    symbol_mode = ASCII_MODE;
-    for (i = 0; i < (int) in_length; i++) {
-        if (source[i] >= 0x80) {
-            symbol_mode = EIGHTBIT_MODE;
-            break;
-        }
-    }
-    
-    if (symbol->option_3 != ULTRA_COMPRESSION && !gs1) {
-        // Force eight-bit mode by default as other modes are poorly documented
-        symbol_mode = EIGHTBIT_MODE;
-    }
-
-    if (symbol->output_options & READER_INIT) {
-        /* Reader Initialisation mode */
-        if (symbol_mode == ASCII_MODE) {
-            codewords[0] = 272; // 7-bit ASCII mode
-            codewords[1] = 271; // FNC3
-        } else {
-            codewords[0] = 257; // 8859-1
-            codewords[1] = 269; // FNC3
-        }
-        codeword_count = 2;
-    } else {
-        /* Calculate start character codeword */
-        if (symbol_mode == ASCII_MODE) {
-            if (gs1) {
-                codewords[0] = 273;
-            } else {
-                codewords[0] = 272;
-            }
-        } else {
-            if ((symbol->eci >= 3) && (symbol->eci <= 18) && (symbol->eci != 14)) {
-                // ECI indicates use of character set within ISO/IEC 8859
-                codewords[0] = 257 + (symbol->eci - 3);
-                if (codewords[0] > 267) {
-                    // Avoids ECI 14 for non-existant ISO/IEC 8859-12
-                    codewords[0]--;
-                }
-            } else if ((symbol->eci > 18) && (symbol->eci <= 898)) {
-                // ECI indicates use of character set outside ISO/IEC 8859
-                codewords[0] = 275 + (symbol->eci / 256);
-                codewords[1] = symbol->eci % 256;
-                codeword_count++;
-            } else if (symbol->eci == 899) {
-                // Non-language byte data
-                codewords[0] = 280;
-            } else if ((symbol->eci > 899) && (symbol->eci <= 9999)) {
-                // ECI beyond 899 needs to use fixed length encodable ECI invocation (section 7.6.2)
-                // Encode as 3 codewords
-                codewords[0] = 257; // ISO/IEC 8859-1 used to enter 8-bit mode
-                codewords[1] = 274; // Encode ECI as 3 codewords
-                codewords[2] = (symbol->eci / 100) + 128;
-                codewords[3] = (symbol->eci % 100) + 128;
-                codeword_count += 3;
-            } else if (symbol->eci >= 10000) {
-                // Encode as 4 codewords
-                codewords[0] = 257; // ISO/IEC 8859-1 used to enter 8-bit mode
-                codewords[1] = 275; // Encode ECI as 4 codewords
-                codewords[2] = (symbol->eci / 10000) + 128;
-                codewords[3] = ((symbol->eci % 10000) / 100) + 128;
-                codewords[4] = (symbol->eci % 100) + 128;
-                codeword_count += 4;
-            } else {
-                codewords[0] = 257; // Default is assumed to be ISO/IEC 8859-1 (ECI 3)
-            }
-        }
-
-        if ((codewords[0] == 257) || (codewords[0] == 272)) {
-            fragno = ultra_find_fragment((unsigned char *)source, in_length, 0);
-
-            // Check for http:// at start of input
-            if ((fragno == 0) || (fragno == 2)) {
-                codewords[0] = 281;
-                input_locn = 7;
-                symbol_mode = EIGHTBIT_MODE;
-            }
-
-
-            // Check for https:// at start of input
-            if ((fragno == 1) || (fragno == 3)) {
-                codewords[0] = 282;
-                input_locn = 8;
-                symbol_mode = EIGHTBIT_MODE;
-            }
-        }
-    }
-
-    codeword_count++;
-
-    /* Check for 06 Macro Sequence and crop accordingly */
-    if (in_length >= 9
-            && source[0] == '[' && source[1] == ')' && source[2] == '>' && source[3] == '\x1e'
-            && source[4] == '0' && source[5] == '6' && source[6] == '\x1d'
-            && source[in_length - 2] == '\x1e' && source[in_length - 1] == '\x04') {
-
-            if (symbol_mode == EIGHTBIT_MODE) {
-                codewords[codeword_count] = 271; // 06 Macro
-            } else {
-                codewords[codeword_count] = 273; // 06 Macro
-            }
-            codeword_count++;
-
-            for (i = 7; i < ((int) in_length - 2); i++) {
-                crop_source[i - 7] = source[i];
-            }
-            crop_length = in_length - 9;
-            crop_source[crop_length] = '\0';
-   } else {
-        /* Make a cropped version of input data - removes http:// and https:// if needed */
-        for (i = input_locn; i < (int) in_length; i++) {
-            crop_source[i - input_locn] = source[i];
-        }
-        crop_length = in_length - input_locn;
-        crop_source[crop_length] = '\0';
-    }
-
-    /* Attempt encoding in all three modes to see which offers best compaction and store results */
-    if (symbol->option_3 == ULTRA_COMPRESSION || gs1) {
-        current_mode = symbol_mode;
-        input_locn = 0;
-        do {
-            end_char = input_locn + PREDICT_WINDOW;
-            eightbit_score = look_ahead_eightbit(crop_source, crop_length, input_locn, current_mode, end_char, cw_fragment, &fragment_length, gs1);
-            ascii_score = look_ahead_ascii(crop_source, crop_length, input_locn, current_mode, symbol_mode, end_char, cw_fragment, &fragment_length, &ascii_encoded, gs1);
-            subset = c43_should_latch_other(crop_source, crop_length, input_locn, 1 /*subset*/, gs1) ? 2 : 1;
-            c43_score = look_ahead_c43(crop_source, crop_length, input_locn, current_mode, end_char, subset, cw_fragment, &fragment_length, &c43_encoded, gs1, 0 /*debug*/);
-
-            mode[input_locn] = 'a';
-            current_mode = ASCII_MODE;
-
-            if ((c43_score > ascii_score) && (c43_score > eightbit_score)) {
-                mode[input_locn] = 'c';
-                current_mode = C43_MODE;
-            }
-
-            if ((eightbit_score > ascii_score) && (eightbit_score > c43_score)) {
-                mode[input_locn] = '8';
-                current_mode = EIGHTBIT_MODE;
-            }
-            if (mode[input_locn] == 'a') {
-                for (i = 0; i < ascii_encoded; i++) {
-                    mode[input_locn + i] = 'a';
-                }
-                input_locn += ascii_encoded;
-            } else if (mode[input_locn] == 'c') {
-                for (i = 0; i < c43_encoded; i++) {
-                    mode[input_locn + i] = 'c';
-                }
-                input_locn += c43_encoded;
-            } else {
-                input_locn++;
-            }
-        } while (input_locn < crop_length);
-    } else {
-        // Force eight-bit mode
-        for (input_locn = 0; input_locn < crop_length; input_locn++) {
-            mode[input_locn] = '8';
-        }
-    }
-    mode[crop_length] = '\0';
-
-    if (symbol->debug & ZINT_DEBUG_PRINT) {
-        printf("Mode: %s (%d)\n", mode, (int) strlen(mode));
-    }
-
-    /* Use results from test to perform actual mode switching */
-    current_mode = symbol_mode;
-    input_locn = 0;
-    do {
-        fragment_length = 0;
-        block_length = 0;
-        while (input_locn + block_length < crop_length && mode[input_locn + block_length] == mode[input_locn]) {
-            block_length++;
-        }
-
-        switch(mode[input_locn]) {
-            case 'a':
-                look_ahead_ascii(crop_source, crop_length, input_locn, current_mode, symbol_mode, input_locn + block_length, cw_fragment, &fragment_length, NULL, gs1);
-                current_mode = ASCII_MODE;
-                break;
-            case 'c':
-                subset = c43_should_latch_other(crop_source, crop_length, input_locn, 1 /*subset*/, gs1) ? 2 : 1;
-                look_ahead_c43(crop_source, crop_length, input_locn, current_mode, input_locn + block_length, subset, cw_fragment, &fragment_length, NULL, gs1, symbol->debug);
-
-                /* Substitute temporary latch if possible */
-                if ((current_mode == EIGHTBIT_MODE) && (cw_fragment[0] == 260) && (fragment_length >= 5) && (fragment_length <= 11)) {
-                    /* Temporary latch to submode 1 from Table 11 */
-                    cw_fragment[0] = 256 + ((fragment_length - 5) / 2);
-                } else if ((current_mode == EIGHTBIT_MODE) && (cw_fragment[0] == 266) && (fragment_length >= 5) && (fragment_length <= 11)) {
-                    /* Temporary latch to submode 2 from Table 11 */
-                    cw_fragment[0] = 262 + ((fragment_length - 5) / 2);
-                } else if ((current_mode == ASCII_MODE) && (cw_fragment[0] == 278) && (fragment_length >= 5) && (fragment_length <= 11)) {
-                    /* Temporary latch to submode 1 from Table 9 */
-                    cw_fragment[0] = 274 + ((fragment_length - 5) / 2);
-                } else {
-                    current_mode = C43_MODE;
-                }
-                break;
-            case '8':
-                look_ahead_eightbit(crop_source, crop_length, input_locn, current_mode, input_locn + block_length, cw_fragment, &fragment_length, gs1);
-                current_mode = EIGHTBIT_MODE;
-                break;
-        }
-
-        for (i = 0; i < fragment_length; i++) {
-            codewords[codeword_count + i] = cw_fragment[i];
-        }
-        codeword_count += fragment_length;
-
-        input_locn += block_length;
-    } while (input_locn < crop_length);
-
-    return codeword_count;
-}
-
-INTERNAL int ultracode(struct zint_symbol *symbol, const unsigned char source[], const size_t in_length) {
-    int data_cw_count = 0;
-    int acc, qcc;
-    int ecc_level;
-    int rows, columns;
-    int total_cws;
-    int pads;
-    int cw_memalloc;
-    int codeword[282 + 3]; // Allow for 3 pads in final 57th (60th incl. clock tracks) column of 5-row symbol (57 * 5 == 285)
-    int i, j, locn;
-    int total_height, total_width;
-    char tilepat[6];
-    int tilex, tiley;
-    int dcc;
-#ifdef _MSC_VER
-    int* data_codewords;
-    char* pattern;
-#endif /* _MSC_VER */
-
-    cw_memalloc = in_length * 2;
-    if (cw_memalloc < 283) {
-        cw_memalloc = 283;
-    }
-
-    if (symbol->eci > 811799) {
-        strcpy(symbol->errtxt, "590: ECI value not supported by Ultracode");
-        return ZINT_ERROR_INVALID_OPTION;
-    }
-
-#ifndef _MSC_VER
-    int data_codewords[cw_memalloc];
-#else
-    data_codewords = (int *) _alloca(cw_memalloc * sizeof (int));
-#endif /* _MSC_VER */
-
-    data_cw_count = ultra_generate_codewords(symbol, source, in_length, data_codewords);
-
-    if (symbol->debug & ZINT_DEBUG_PRINT) {
-        printf("Codewords returned = %d\n", data_cw_count);
-    }
-#ifdef ZINT_TEST
-    if (symbol->debug & ZINT_DEBUG_TEST) {
-        debug_test_codeword_dump_int(symbol, data_codewords, data_cw_count);
-    }
-#endif
-
-    data_cw_count += 2; // 2 == MCC + ACC (data codeword count includes start char)
-
-    /* Default ECC level is EC2 */
-    if ((symbol->option_1 <= 0) || (symbol->option_1 > 6)) {
-        ecc_level = 2;
-    } else {
-        ecc_level = symbol->option_1 - 1;
-    }
-
-    /* ECC calculation from section 7.7.2 */
-    if (ecc_level == 0) {
-        qcc = 3;
-    } else {
-        if ((data_cw_count % 25) == 0) {
-            qcc = (kec[ecc_level] * (data_cw_count / 25)) + 3 + 2;
-        } else {
-            qcc = (kec[ecc_level] * ((data_cw_count / 25) + 1)) + 3 + 2;
-        }
-
-    }
-    acc = qcc - 3;
-
-    if (symbol->debug & ZINT_DEBUG_PRINT) {
-        printf("ECC codewords: %d\n", qcc);
-    }
-
-    /* Maximum capacity is 282 codewords */
-    total_cws = data_cw_count + qcc + 3; // 3 == TCC pattern + RSEC pattern + QCC pattern
-    if (total_cws > 282) {
-        strcpy(symbol->errtxt, "591: Data too long for selected error correction capacity");
-        return ZINT_ERROR_TOO_LONG;
-    }
-
-    rows = 5;
-    for (i = 2; i >= 0; i--) {
-        if (total_cws - 6 <= ultra_maxsize[i]) { // Total codewords less 6 overhead (Start + MCC + ACC + 3 TCC/RSEC/QCC patterns)
-            rows--;
-        }
-    }
-
-    if ((total_cws % rows) == 0) {
-        pads = 0;
-        columns = total_cws / rows;
-    } else {
-        pads = rows - (total_cws % rows);
-        columns = (total_cws / rows) + 1;
-    }
-    columns += columns / 15; // Secondary vertical clock tracks
-
-    if (symbol->debug & ZINT_DEBUG_PRINT) {
-        printf("Calculated size is %d rows by %d columns\n", rows, columns);
-    }
-
-    /* Insert MCC and ACC into data codewords */
-    for (i = 282; i > 2; i--) {
-        data_codewords[i] = data_codewords[i - 2];
-    }
-    data_codewords[1] = data_cw_count; // MCC
-    data_codewords[2] = acc; // ACC
-
-    locn = 0;
-    /* Calculate error correction codewords (RSEC) */
-    ultra_gf283((short) data_cw_count, (short) qcc, data_codewords);
-
-    /* Rearrange to make final codeword sequence */
-    codeword[locn++] = data_codewords[282 - (data_cw_count + qcc)]; // Start Character
-    codeword[locn++] = data_cw_count; // MCC
-    for (i = 0; i < qcc; i++) {
-        codeword[locn++] = data_codewords[(282 - qcc) + i]; // RSEC Region
-    }
-    codeword[locn++] = data_cw_count + qcc; // TCC = C + Q - section 6.11.4
-    codeword[locn++] = 283; // Separator
-    codeword[locn++] = acc; // ACC
-    for (i = 0; i < (data_cw_count - 3); i++) {
-        codeword[locn++] = data_codewords[(282 - ((data_cw_count - 3) + qcc)) + i]; // Data Region
-    }
-    for (i = 0; i < pads; i++) {
-        codeword[locn++] = 284; // Pad pattern
-    }
-    codeword[locn++] = qcc; // QCC
-
-    if (symbol->debug & ZINT_DEBUG_PRINT) {
-        printf("Rearranged codewords with ECC:\n");
-        for (i = 0; i < locn; i++) {
-            printf("%d ", codeword[i]);
-        }
-        printf("\n");
-    }
-
-    total_height = (rows * 6) + 1;
-    total_width = columns + 6;
-
-    /* Build symbol */
-#ifndef _MSC_VER
-    char pattern[total_height * total_width];
-#else
-    pattern = (char *) _alloca(total_height * total_width * sizeof (char));
-#endif /* _MSC_VER */
-
-    for (i = 0; i < (total_height * total_width); i++) {
-        pattern[i] = 'W';
-    }
-
-    /* Border */
-    for (i = 0; i < total_width; i++) {
-        pattern[i] = 'K'; // Top
-        pattern[(total_height * total_width) - i - 1] = 'K'; // Bottom
-    }
-    for (i = 0; i < total_height; i++) {
-        pattern[total_width * i] = 'K'; // Left
-        pattern[(total_width * i) + 3] = 'K';
-        pattern[(total_width * i) + (total_width - 1)] = 'K'; // Right
-    }
-
-    /* Clock tracks */
-    for (i = 0; i < total_height; i += 2) {
-        pattern[(total_width * i) + 1] = 'K'; // Primary vertical clock track
-        if (total_width > 20) {
-            pattern[(total_width * i) + 19] = 'K'; // Secondary vertical clock track
-        }
-        if (total_width > 36) {
-            pattern[(total_width * i) + 35] = 'K'; // Secondary vertical clock track
-        }
-        if (total_width > 52) {
-            pattern[(total_width * i) + 51] = 'K'; // Secondary vertical clock track
-        }
-    }
-    for (i = 6; i < total_height; i += 6) {
-        for (j = 5; j < total_width; j += 2) {
-            pattern[(total_width * i) + j] = 'K'; // Horizontal clock track
-        }
-    }
-
-    /* Place tiles */
-    tilepat[5] = '\0';
-    tilex = 0;
-    tiley = 0;
-    for (i = 0; i < locn; i++) {
-        for (j = 0; j < 5; j++) {
-            tilepat[4 - j] = ultra_colour[(tiles[codeword[i]] >> (3 * j)) & 0x07];
-        }
-        if ((tiley + 1) >= total_height) {
-            tiley = 0;
-            tilex++;
-
-            if (tilex == 14) {
-                tilex++;
-            }
-            if (tilex == 30) {
-                tilex++;
-            }
-            if (tilex == 46) {
-                tilex++;
-            }
-        }
-
-        for (j = 0; j < 5; j++) {
-            pattern[((tiley + j + 1) * total_width) + (tilex + 5)] = tilepat[j];
-        }
-        tiley += 6;
-    }
-
-    /* Add data column count */
-    dcc = columns - ultra_mincols[rows - 2];
-    tilex = 2;
-    tiley = (total_height - 11) / 2;
-    /* DCCU */
-    for (j = 0; j < 5; j++) {
-        tilepat[4 - j] = ultra_colour[(dccu[dcc] >> (3 * j)) & 0x07];
-    }
-    for (j = 0; j < 5; j++) {
-        pattern[((tiley + j) * total_width) + tilex] = tilepat[j];
-    }
-    /* DCCL */
-    tiley += 6;
-    for (j = 0; j < 5; j++) {
-        tilepat[4 - j] = ultra_colour[(dccl[dcc] >> (3 * j)) & 0x07];
-    }
-    for (j = 0; j < 5; j++) {
-        pattern[((tiley + j) * total_width) + tilex] = tilepat[j];
-    }
-
-    if (symbol->debug & ZINT_DEBUG_PRINT) {
-        printf("DCC: %d\n", dcc);
-
-        for (i = 0; i < (total_height * total_width); i++) {
-            printf("%c", pattern[i]);
-            if ((i + 1) % total_width == 0) {
-                printf("\n");
-            }
-        }
-    }
-
-    /* Put pattern into symbol */
-    symbol->rows = total_height;
-    symbol->width = total_width;
+int ultracode(struct zint_symbol *symbol, const unsigned char source[], const size_t in_length) {
 
-    for (i = 0; i < total_height; i++) {
-        symbol->row_height[i] = 1;
-        for(j = 0; j < total_width; j++) {
-            set_module_colour(symbol, i, j, posn(ultra_colour, pattern[(i * total_width) + j]));
-        }
-    }
 
-    return 0;
+    strcpy(symbol->errtxt, "1000: Ultracode has not been implemented - yet!");
+    return ZINT_ERROR_INVALID_OPTION;
 }
index 15fac07..a7e21eb 100644 (file)
@@ -28,7 +28,6 @@
     OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     SUCH DAMAGE.
  */
-/* vim: set ts=4 sw=4 et : */
 
 #define SODIUM "0123456789+"
 #define EAN2   102
@@ -81,7 +80,7 @@ static const char *EANsetB[10] = {
 };
 
 /* Calculate the correct check digit for a UPC barcode */
-static char upc_check(char source[]) {
+char upc_check(char source[]) {
     unsigned int i, count, check_digit;
 
     count = 0;
@@ -102,7 +101,7 @@ static char upc_check(char source[]) {
 }
 
 /* UPC A is usually used for 12 digit numbers, but this function takes a source of any length */
-static void upca_draw(char source[], char dest[]) {
+void upca_draw(char source[], char dest[]) {
     unsigned int i, half_way;
 
     half_way = strlen(source) / 2;
@@ -125,7 +124,7 @@ static void upca_draw(char source[], char dest[]) {
 }
 
 /* Make a UPC A barcode when we haven't been given the check digit */
-static int upca(struct zint_symbol *symbol, unsigned char source[], char dest[]) {
+int upca(struct zint_symbol *symbol, unsigned char source[], char dest[]) {
     int length;
     char gtin[15];
 
@@ -149,7 +148,7 @@ static int upca(struct zint_symbol *symbol, unsigned char source[], char dest[])
 }
 
 /* UPC E is a zero-compressed version of UPC A */
-static int upce(struct zint_symbol *symbol, unsigned char source[], char dest[]) {
+int upce(struct zint_symbol *symbol, unsigned char source[], char dest[]) {
     unsigned int i, num_system;
     char emode, equivalent[12], check_digit, parity[8], temp[9];
     char hrt[9];
@@ -303,7 +302,7 @@ static int upce(struct zint_symbol *symbol, unsigned char source[], char dest[])
 }
 
 /* EAN-2 and EAN-5 add-on codes */
-static void add_on(unsigned char source[], char dest[], int mode) {
+void add_on(unsigned char source[], char dest[], int mode) {
     char parity[6];
     unsigned int i, code_type;
 
@@ -363,7 +362,7 @@ static void add_on(unsigned char source[], char dest[], int mode) {
 /* ************************ EAN-13 ****************** */
 
 /* Calculate the correct check digit for a EAN-13 barcode */
-static char ean_check(char source[]) {
+char ean_check(char source[]) {
     int i;
     unsigned int h, count, check_digit;
 
@@ -384,7 +383,7 @@ static char ean_check(char source[]) {
     return itoc(check_digit);
 }
 
-static int ean13(struct zint_symbol *symbol, unsigned char source[], char dest[]) {
+int ean13(struct zint_symbol *symbol, unsigned char source[], char dest[]) {
     unsigned int length, i, half_way;
     char parity[6];
     char gtin[15];
@@ -438,7 +437,7 @@ static int ean13(struct zint_symbol *symbol, unsigned char source[], char dest[]
 }
 
 /* Make an EAN-8 barcode when we haven't been given the check digit */
-static int ean8(struct zint_symbol *symbol, unsigned char source[], char dest[]) {
+int ean8(struct zint_symbol *symbol, unsigned char source[], char dest[]) {
     /* EAN-8 is basically the same as UPC-A but with fewer digits */
     int length;
     char gtin[10];
@@ -464,7 +463,7 @@ static int ean8(struct zint_symbol *symbol, unsigned char source[], char dest[])
 }
 
 /* For ISBN(13) only */
-static char isbn13_check(unsigned char source[]) {
+char isbn13_check(unsigned char source[]) {
     unsigned int i, weight, sum, check, h;
 
     sum = 0;
@@ -484,7 +483,7 @@ static char isbn13_check(unsigned char source[]) {
 }
 
 /* For ISBN(10) and SBN only */
-static char isbn_check(unsigned char source[]) {
+char isbn_check(unsigned char source[]) {
     unsigned int i, weight, sum, check, h;
     char check_char;
 
@@ -565,7 +564,7 @@ static int isbn(struct zint_symbol *symbol, unsigned char source[], const size_t
 }
 
 /* Add leading zeroes to EAN and UPC strings */
-INTERNAL void ean_leading_zeroes(struct zint_symbol *symbol, unsigned char source[], unsigned char local_source[]) {
+void ean_leading_zeroes(struct zint_symbol *symbol, unsigned char source[], unsigned char local_source[]) {
     unsigned char first_part[20], second_part[20], zfirst_part[20], zsecond_part[20];
     int with_addon = 0;
     int first_len = 0, second_len = 0, zfirst_len = 0, zsecond_len = 0, i, h;
@@ -594,9 +593,6 @@ INTERNAL void ean_leading_zeroes(struct zint_symbol *symbol, unsigned char sourc
         first_part[i + 1] = '\0';
     }
 
-    if (second_len >= 6) { /* Allow 6 (actual max 5) so as to trigger too long error */
-        second_len = 6;
-    }
     for (i = 0; i < second_len; i++) {
         second_part[i] = source[i + first_len + 1];
         second_part[i + 1] = '\0';
@@ -697,11 +693,12 @@ INTERNAL void ean_leading_zeroes(struct zint_symbol *symbol, unsigned char sourc
 }
 
 /* splits string to parts before and after '+' parts */
-INTERNAL int eanx(struct zint_symbol *symbol, unsigned char source[], int src_len) {
-    unsigned char first_part[20] = {0}, second_part[7] = {0}, dest[1000] = {0};
+int eanx(struct zint_symbol *symbol, unsigned char source[], int src_len) {
+    unsigned char first_part[20] = {0}, second_part[20] = {0}, dest[1000] = {0};
     unsigned char local_source[20] = {0};
     unsigned int latch, reader, writer, with_addon;
-    int error_number, i, plus_count;
+    int error_number, i;
+
 
     with_addon = FALSE;
     latch = FALSE;
@@ -725,18 +722,6 @@ INTERNAL int eanx(struct zint_symbol *symbol, unsigned char source[], int src_le
             return error_number;
         }
     }
-    
-    /* Check for multiple '+' characters */
-    plus_count = 0;
-    for (i = 0; i < src_len; i++) {
-        if (source[i] == '+') {
-            plus_count++;
-        }
-    }
-    if (plus_count > 1) {
-        strcpy(symbol->errtxt, "293: Invalid add-on data");
-        return ZINT_ERROR_INVALID_DATA;
-    }
 
     /* Add leading zeroes */
     ustrcpy(local_source, (unsigned char *) "");
@@ -927,3 +912,4 @@ INTERNAL int eanx(struct zint_symbol *symbol, unsigned char source[], int src_le
 
     return 0;
 }
+
index 5313b60..852e614 100644 (file)
@@ -1,7 +1,7 @@
 /*  vector.c - Creates vector image objects
 
     libzint - the open source barcode library
-    Copyright (C) 2018 - 2020 Robin Stuart <rstuart114@gmail.com>
+    Copyright (C) 2018 Robin Stuart <rstuart114@gmail.com>
 
     Redistribution and use in source and binary forms, with or without
     modification, are permitted provided that the following conditions
@@ -32,6 +32,7 @@
 
 #include <stdio.h>
 #include <string.h>
+#include <stdlib.h>
 #include <math.h>
 
 #ifdef _MSC_VER
 #endif
 
 #include "common.h"
-#include "output.h"
 
-INTERNAL int ps_plot(struct zint_symbol *symbol);
-INTERNAL int svg_plot(struct zint_symbol *symbol);
-INTERNAL int emf_plot(struct zint_symbol *symbol);
+#define SSET "0123456789ABCDEF"
 
-static struct zint_vector_rect *vector_plot_create_rect(float x, float y, float width, float height) {
+extern int ps_plot(struct zint_symbol *symbol);
+extern int svg_plot(struct zint_symbol *symbol);
+extern int emf_plot(struct zint_symbol *symbol);
+
+struct zint_vector_rect *vector_plot_create_rect(float x, float y, float width, float height) {
     struct zint_vector_rect *rect;
 
     rect = (struct zint_vector_rect*) malloc(sizeof (struct zint_vector_rect));
@@ -61,7 +63,7 @@ static struct zint_vector_rect *vector_plot_create_rect(float x, float y, float
     return rect;
 }
 
-static int vector_plot_add_rect(struct zint_symbol *symbol, struct zint_vector_rect *rect, struct zint_vector_rect **last_rect) {
+int vector_plot_add_rect(struct zint_symbol *symbol, struct zint_vector_rect *rect, struct zint_vector_rect **last_rect) {
     if (!rect) return ZINT_ERROR_MEMORY;
     if (*last_rect)
         (*last_rect)->next = rect;
@@ -72,7 +74,7 @@ static int vector_plot_add_rect(struct zint_symbol *symbol, struct zint_vector_r
     return 1;
 }
 
-static struct zint_vector_hexagon *vector_plot_create_hexagon(float x, float y, float diameter) {
+struct zint_vector_hexagon *vector_plot_create_hexagon(float x, float y, float diameter) {
     struct zint_vector_hexagon *hexagon;
 
     hexagon = (struct zint_vector_hexagon*) malloc(sizeof (struct zint_vector_hexagon));
@@ -85,7 +87,7 @@ static struct zint_vector_hexagon *vector_plot_create_hexagon(float x, float y,
     return hexagon;
 }
 
-static int vector_plot_add_hexagon(struct zint_symbol *symbol, struct zint_vector_hexagon *hexagon, struct zint_vector_hexagon **last_hexagon) {
+int vector_plot_add_hexagon(struct zint_symbol *symbol, struct zint_vector_hexagon *hexagon, struct zint_vector_hexagon **last_hexagon) {
     if (!hexagon) return ZINT_ERROR_MEMORY;
     if (*last_hexagon)
         (*last_hexagon)->next = hexagon;
@@ -96,7 +98,7 @@ static int vector_plot_add_hexagon(struct zint_symbol *symbol, struct zint_vecto
     return 1;
 }
 
-static struct zint_vector_circle *vector_plot_create_circle(float x, float y, float diameter, int colour) {
+struct zint_vector_circle *vector_plot_create_circle(float x, float y, float diameter, int colour) {
     struct zint_vector_circle *circle;
 
     circle = (struct zint_vector_circle *) malloc(sizeof (struct zint_vector_circle));
@@ -110,7 +112,7 @@ static struct zint_vector_circle *vector_plot_create_circle(float x, float y, fl
     return circle;
 }
 
-static int vector_plot_add_circle(struct zint_symbol *symbol, struct zint_vector_circle *circle, struct zint_vector_circle **last_circle) {
+int vector_plot_add_circle(struct zint_symbol *symbol, struct zint_vector_circle *circle, struct zint_vector_circle **last_circle) {
     if (!circle) return ZINT_ERROR_MEMORY;
     if (*last_circle)
         (*last_circle)->next = circle;
@@ -121,7 +123,7 @@ static int vector_plot_add_circle(struct zint_symbol *symbol, struct zint_vector
     return 1;
 }
 
-static int vector_plot_add_string(struct zint_symbol *symbol,
+int vector_plot_add_string(struct zint_symbol *symbol,
         unsigned char *text, float x, float y, float fsize, float width,
         struct zint_vector_string **last_string) {
     struct zint_vector_string *string;
@@ -145,7 +147,7 @@ static int vector_plot_add_string(struct zint_symbol *symbol,
     return 1;
 }
 
-INTERNAL void vector_free(struct zint_symbol *symbol) {
+void vector_free(struct zint_symbol *symbol) {
     if (symbol->vector != NULL) {
         struct zint_vector_rect *rect;
         struct zint_vector_hexagon *hex;
@@ -191,18 +193,13 @@ INTERNAL void vector_free(struct zint_symbol *symbol) {
     }
 }
 
-static void vector_scale(struct zint_symbol *symbol, int file_type) {
+void vector_scale(struct zint_symbol *symbol) {
     struct zint_vector_rect *rect;
     struct zint_vector_hexagon *hex;
     struct zint_vector_circle *circle;
     struct zint_vector_string *string;
     float scale = symbol->scale * 2.0f;
 
-    if ((file_type == OUT_EMF_FILE) && (symbol->symbology == BARCODE_MAXICODE)) {
-        // Increase size to overcome limitations in EMF file format
-        scale *= 20;
-    }
-    
     symbol->vector->width *= scale;
     symbol->vector->height *= scale;
 
@@ -242,7 +239,7 @@ static void vector_scale(struct zint_symbol *symbol, int file_type) {
     return;
 }
 
-static void vector_reduce_rectangles(struct zint_symbol *symbol) {
+void vector_reduce_rectangles(struct zint_symbol *symbol) {
     // Looks for vertically aligned rectangles and merges them together
     struct zint_vector_rect *rect, *target, *prev;
 
@@ -250,9 +247,10 @@ static void vector_reduce_rectangles(struct zint_symbol *symbol) {
     while (rect) {
         prev = rect;
         target = prev->next;
-
+        
         while (target) {
-            if ((rect->x == target->x) && (rect->width == target->width) && ((rect->y + rect->height) == target->y) && (rect->colour == target->colour)) {
+            
+            if ((rect->x == target->x) && (rect->width == target->width) && ((rect->y + rect->height) == target->y)) {
                 rect->height += target->height;
                 prev->next = target->next;
                 free(target);
@@ -268,7 +266,7 @@ static void vector_reduce_rectangles(struct zint_symbol *symbol) {
     return;
 }
 
-INTERNAL int plot_vector(struct zint_symbol *symbol, int rotate_angle, int file_type) {
+int plot_vector(struct zint_symbol *symbol, int rotate_angle, int file_type) {
     int error_number;
     struct zint_vector *vector;
     struct zint_vector_rect *rectangle, *rect, *last_rectangle = NULL;
@@ -280,7 +278,6 @@ INTERNAL int plot_vector(struct zint_symbol *symbol, int rotate_angle, int file_
     float textpos, large_bar_height, preset_height, row_height, row_posn = 0.0;
     float text_offset, text_height;
     int xoffset, yoffset, textdone, main_symbol_width_x;
-    int roffset, boffset;
     char addon[6];
     int large_bar_count, symbol_lead_in;
     float addon_text_posn;
@@ -291,13 +288,27 @@ INTERNAL int plot_vector(struct zint_symbol *symbol, int rotate_angle, int file_
     int this_row;
     int addon_latch = 0;
     struct zint_vector_string *string;
-
-    (void)rotate_angle; /* Not currently implemented */
-
     // Sanity check colours
-    error_number = check_colour_options(symbol);
-    if (error_number != 0) {
-        return error_number;
+    to_upper((unsigned char*) symbol->fgcolour);
+    to_upper((unsigned char*) symbol->bgcolour);
+
+    if (strlen(symbol->fgcolour) != 6) {
+        strcpy(symbol->errtxt, "661: Malformed foreground colour target");
+        return ZINT_ERROR_INVALID_OPTION;
+    }
+    if (strlen(symbol->bgcolour) != 6) {
+        strcpy(symbol->errtxt, "662: Malformed background colour target");
+        return ZINT_ERROR_INVALID_OPTION;
+    }
+    error_number = is_sane(SSET, (unsigned char*) symbol->fgcolour, strlen(symbol->fgcolour));
+    if (error_number == ZINT_ERROR_INVALID_DATA) {
+        strcpy(symbol->errtxt, "663: Malformed foreground colour target");
+        return ZINT_ERROR_INVALID_OPTION;
+    }
+    error_number = is_sane(SSET, (unsigned char*) symbol->bgcolour, strlen(symbol->bgcolour));
+    if (error_number == ZINT_ERROR_INVALID_DATA) {
+        strcpy(symbol->errtxt, "664: Malformed background colour target");
+        return ZINT_ERROR_INVALID_OPTION;
     }
 
     // Free any previous rendering structures
@@ -313,13 +324,14 @@ INTERNAL int plot_vector(struct zint_symbol *symbol, int rotate_angle, int file_
 
     row_height = 0;
     textdone = 0;
+    textpos = 0.0;
     main_symbol_width_x = symbol->width;
     strcpy(addon, "");
     symbol_lead_in = 0;
     addon_text_posn = 0.0;
     rect_count = 0;
     last_row_start = 0;
-
+    
     /*
      * Determine if there will be any addon texts and text height
      */
@@ -403,7 +415,9 @@ INTERNAL int plot_vector(struct zint_symbol *symbol, int rotate_angle, int file_
     if (symbol->output_options & SMALL_TEXT)
         text_height *= 0.8f;
 
-    set_whitespace_offsets(symbol, &xoffset, &yoffset, &roffset, &boffset);
+    xoffset = symbol->border_width + symbol->whitespace_width;
+    yoffset = symbol->border_width;
+
 
     // Determine if height should be overridden
     large_bar_count = 0;
@@ -415,15 +429,15 @@ INTERNAL int plot_vector(struct zint_symbol *symbol, int rotate_angle, int file_
         }
     }
 
-    vector->width = (float)ceil(symbol->width + (xoffset + roffset));
-    vector->height = (float)ceil(symbol->height + text_offset + (yoffset + boffset));
+    vector->width = (float)ceil(symbol->width + (2.0f * xoffset));
+    vector->height = (float)ceil(symbol->height + text_offset + (2.0f * yoffset));
 
     large_bar_height = large_bar_count ? (symbol->height - preset_height) / large_bar_count : 0 /*Not used if large_bar_count zero*/;
 
     if ((symbol->output_options & BARCODE_BOX) || (symbol->output_options & BARCODE_BIND)) {
         default_text_posn = symbol->height + text_offset + symbol->border_width + symbol->border_width;
     } else {
-        default_text_posn = symbol->height + text_offset;
+        default_text_posn = symbol->height + text_offset + symbol->border_width;
     }
 
     // Plot rectangles - most symbols created here
@@ -447,6 +461,11 @@ INTERNAL int plot_vector(struct zint_symbol *symbol, int rotate_angle, int file_
             row_posn += yoffset;
 
             i = 0;
+            if (module_is_set(symbol, this_row, 0)) {
+                latch = 1;
+            } else {
+                latch = 0;
+            }
 
             do {
                 int block_width = 0;
@@ -457,18 +476,20 @@ INTERNAL int plot_vector(struct zint_symbol *symbol, int rotate_angle, int file_
                     addon_text_posn = row_posn + 8.0f;
                     addon_latch = 1;
                 }
-                if (module_is_set(symbol, this_row, i)) {
-                    /* a bar or colour block */
+                if (latch == 1) {
+                    /* a bar */
                     if (addon_latch == 0) {
                         rectangle = vector_plot_create_rect((float)(i + xoffset), row_posn, (float)block_width, row_height);
-                        if (symbol->symbology == BARCODE_ULTRA) {
-                            rectangle->colour = module_is_set(symbol, this_row, i);
-                        }
                     } else {
                         rectangle = vector_plot_create_rect((float)(i + xoffset), row_posn + 10.0f, (float)block_width, row_height - 5.0f);
                     }
+                    latch = 0;
+
                     vector_plot_add_rect(symbol, rectangle, &last_rectangle);
                     rect_count++;
+                } else {
+                    /* a space */
+                    latch = 1;
                 }
                 i += block_width;
 
@@ -479,8 +500,8 @@ INTERNAL int plot_vector(struct zint_symbol *symbol, int rotate_angle, int file_
     // Plot Maxicode symbols
     if (symbol->symbology == BARCODE_MAXICODE) {
         struct zint_vector_circle *circle;
-        vector->width = 37.0f + (xoffset + roffset);
-        vector->height = 36.0f + (yoffset + boffset);
+        vector->width = 37.0f + (2.0f * xoffset);
+        vector->height = 36.0f + (2.0f * yoffset);
 
         // Bullseye
         circle = vector_plot_create_circle(17.88f + xoffset, 17.8f + yoffset, 10.85f, 0);
@@ -501,7 +522,7 @@ INTERNAL int plot_vector(struct zint_symbol *symbol, int rotate_angle, int file_
             for (i = 0; i < symbol->width; i++) {
                 if (module_is_set(symbol, r, i)) {
                     //struct zint_vector_hexagon *hexagon = vector_plot_create_hexagon(((i * 0.88) + ((r & 1) ? 1.76 : 1.32)), ((r * 0.76) + 0.76), symbol->dot_size);
-                    struct zint_vector_hexagon *hexagon = vector_plot_create_hexagon(((i * 1.23f) + 0.615f + ((r & 1) ? 0.615f : 0.0f)) + xoffset,
+                    struct zint_vector_hexagon *hexagon = vector_plot_create_hexagon(((i * 1.23f) + 0.615f + ((r & 1) ? 0.615f : 0.0f)) + xoffset, 
                                                                                      ((r * 1.067f) + 0.715f) + yoffset, symbol->dot_size);
                     vector_plot_add_hexagon(symbol, hexagon, &last_hexagon);
                 }
@@ -537,7 +558,7 @@ INTERNAL int plot_vector(struct zint_symbol *symbol, int rotate_angle, int file_
             i++;
         }
     }
-
+                
     if (upceanflag == 8) {
         i = 0;
         for (rect = symbol->vector->rectangles; rect != NULL; rect = rect->next) {
@@ -554,7 +575,7 @@ INTERNAL int plot_vector(struct zint_symbol *symbol, int rotate_angle, int file_
             i++;
         }
     }
-
+    
     if (upceanflag == 12) {
         i = 0;
         for (rect = symbol->vector->rectangles; rect != NULL; rect = rect->next) {
@@ -575,7 +596,7 @@ INTERNAL int plot_vector(struct zint_symbol *symbol, int rotate_angle, int file_
             i++;
         }
     }
-
+    
     if (upceanflag == 13) {
         i = 0;
         for (rect = symbol->vector->rectangles; rect != NULL; rect = rect->next) {
@@ -592,7 +613,7 @@ INTERNAL int plot_vector(struct zint_symbol *symbol, int rotate_angle, int file_
             i++;
         }
     }
-
+    
     /* Add the text */
 
     if (!hide_text) {
@@ -760,18 +781,13 @@ INTERNAL int plot_vector(struct zint_symbol *symbol, int rotate_angle, int file_
     // Binding and boxes
     if ((symbol->output_options & BARCODE_BIND) != 0) {
         if ((symbol->rows > 1) && (is_stackable(symbol->symbology) == 1)) {
-            double sep_height = 1;
-            if (symbol->option_3 > 0 && symbol->option_3 <= 4) {
-                sep_height = symbol->option_3;
-            }
             /* row binding */
             for (r = 1; r < symbol->rows; r++) {
-                if (symbol->symbology != BARCODE_CODABLOCKF && symbol->symbology != BARCODE_HIBC_BLOCKF) {
-                    rectangle = vector_plot_create_rect((float)xoffset, (r * row_height) + yoffset - sep_height / 2, (float)symbol->width, sep_height);
+                if (symbol->symbology != BARCODE_CODABLOCKF) {
+                    rectangle = vector_plot_create_rect((float)xoffset, (r * row_height) + yoffset - 1, (float)symbol->width, 2.0f);
                     vector_plot_add_rect(symbol, rectangle, &last_rectangle);
                 } else {
-                    /* Avoid 11-module start and 13-module stop chars */
-                    rectangle = vector_plot_create_rect(xoffset + 11, (r * row_height) + yoffset - sep_height / 2, symbol->width - 24, sep_height);
+                    rectangle = vector_plot_create_rect(xoffset + 11.0f, (r * row_height) + yoffset - 1, symbol->width - 25.0f, 2.0);
                     vector_plot_add_rect(symbol, rectangle, &last_rectangle);
                 }
             }
@@ -780,14 +796,14 @@ INTERNAL int plot_vector(struct zint_symbol *symbol, int rotate_angle, int file_
     if ((symbol->output_options & BARCODE_BOX) || (symbol->output_options & BARCODE_BIND)) {
         // Top
         rectangle = vector_plot_create_rect(0.0f, 0.0f, vector->width, (float)symbol->border_width);
-        if (!(symbol->output_options & BARCODE_BOX) && (symbol->symbology == BARCODE_CODABLOCKF || symbol->symbology == BARCODE_HIBC_BLOCKF)) {
+        if (symbol->symbology == BARCODE_CODABLOCKF) {
             rectangle->x = (float)xoffset;
             rectangle->width -= (2.0f * xoffset);
         }
         vector_plot_add_rect(symbol, rectangle, &last_rectangle);
         // Bottom
         rectangle = vector_plot_create_rect(0.0f, vector->height - symbol->border_width - text_offset, vector->width, (float)symbol->border_width);
-        if (!(symbol->output_options & BARCODE_BOX) && (symbol->symbology == BARCODE_CODABLOCKF || symbol->symbology == BARCODE_HIBC_BLOCKF)) {
+        if (symbol->symbology == BARCODE_CODABLOCKF) {
             rectangle->x = (float)xoffset;
             rectangle->width -= (2.0f * xoffset);
         }
@@ -804,7 +820,7 @@ INTERNAL int plot_vector(struct zint_symbol *symbol, int rotate_angle, int file_
 
     vector_reduce_rectangles(symbol);
 
-    vector_scale(symbol, file_type);
+    vector_scale(symbol);
 
     switch (file_type) {
         case OUT_EPS_FILE:
@@ -820,4 +836,5 @@ INTERNAL int plot_vector(struct zint_symbol *symbol, int rotate_angle, int file_
     }
 
     return error_number;
+
 }
index 4d28369..fc4e41a 100644 (file)
@@ -1,7 +1,7 @@
 /*  zint.h - definitions for libzint
 
     libzint - the open source barcode library
-    Copyright (C) 2009-2020 Robin Stuart <rstuart114@gmail.com>
+    Copyright (C) 2009-2018 Robin Stuart <rstuart114@gmail.com>
 
     Redistribution and use in source and binary forms, with or without
     modification, are permitted provided that the following conditions
@@ -28,7 +28,6 @@
     OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     SUCH DAMAGE.
  */
-/* vim: set ts=4 sw=4 et : */
 
 #ifndef ZINT_H
 #define ZINT_H
@@ -41,7 +40,7 @@ extern "C" {
         float x, y, length, width;
         struct zint_render_line *next; /* Pointer to next line */
     };
-
+    
     struct zint_vector_rect {
         float x, y, height, width;
         int colour;
@@ -55,7 +54,7 @@ extern "C" {
         unsigned char *text;
         struct zint_render_string *next; /* Pointer to next character */
     };
-
+    
     struct zint_vector_string {
         float x, y, fsize;
         float width; /* Suggested string width, may be 0 if none recommended */
@@ -74,7 +73,7 @@ extern "C" {
         int colour;
         struct zint_vector_circle *next; /* Pointer to next circle */
     };
-
+    
     struct zint_render_hexagon {
         float x, y, height;
         struct zint_render_hexagon *next; /* Pointer to next hexagon */
@@ -84,7 +83,7 @@ extern "C" {
         float x, y, diameter;
         struct zint_vector_hexagon *next; /* Pointer to next hexagon */
     };
-
+    
     struct zint_render {
         float width, height;
         struct zint_render_line *lines; /* Pointer to first line */
@@ -92,7 +91,7 @@ extern "C" {
         struct zint_render_ring *rings; /* Pointer to first ring */
         struct zint_render_hexagon *hexagons; /* Pointer to first hexagon */
     };
-
+    
     struct zint_vector {
         float width, height;
         struct zint_vector_rect *rectangles; /* Pointer to first rectangle */
@@ -125,7 +124,7 @@ extern "C" {
         unsigned char encoded_data[200][143];
         int row_height[200]; /* Largest symbol is 189 x 189 Han Xin */
         char errtxt[100];
-        unsigned char *bitmap;
+        char *bitmap;
         int bitmap_width;
         int bitmap_height;
         unsigned int bitmap_byte_length;
@@ -136,169 +135,158 @@ extern "C" {
     };
 
 #define ZINT_VERSION_MAJOR      2
-#define ZINT_VERSION_MINOR      8
-#define ZINT_VERSION_RELEASE    0
+#define ZINT_VERSION_MINOR      6
+#define ZINT_VERSION_RELEASE    7
 
     /* Tbarcode 7 codes */
-#define BARCODE_CODE11          1
-#define BARCODE_C25MATRIX       2
-#define BARCODE_C25INTER        3
-#define BARCODE_C25IATA         4
-#define BARCODE_C25LOGIC        6
-#define BARCODE_C25IND          7
-#define BARCODE_CODE39          8
-#define BARCODE_EXCODE39        9
-#define BARCODE_EANX            13
+#define BARCODE_CODE11         1
+#define BARCODE_C25MATRIX      2
+#define BARCODE_C25INTER       3
+#define BARCODE_C25IATA                4
+#define BARCODE_C25LOGIC       6
+#define BARCODE_C25IND         7
+#define BARCODE_CODE39         8
+#define BARCODE_EXCODE39       9
+#define BARCODE_EANX           13
 #define BARCODE_EANX_CHK        14
-#define BARCODE_EAN128          16
-#define BARCODE_CODABAR         18
-#define BARCODE_CODE128         20
-#define BARCODE_DPLEIT          21
-#define BARCODE_DPIDENT         22
-#define BARCODE_CODE16K         23
-#define BARCODE_CODE49          24
-#define BARCODE_CODE93          25
-#define BARCODE_FLAT            28
-#define BARCODE_RSS14           29
-#define BARCODE_RSS_LTD         30
-#define BARCODE_RSS_EXP         31
-#define BARCODE_TELEPEN         32
-#define BARCODE_UPCA            34
+#define BARCODE_EAN128         16
+#define BARCODE_CODABAR                18
+#define BARCODE_CODE128                20
+#define BARCODE_DPLEIT         21
+#define BARCODE_DPIDENT                22
+#define BARCODE_CODE16K                23
+#define BARCODE_CODE49         24
+#define BARCODE_CODE93         25
+#define BARCODE_FLAT           28
+#define BARCODE_RSS14          29
+#define BARCODE_RSS_LTD                30
+#define BARCODE_RSS_EXP                31
+#define BARCODE_TELEPEN                32
+#define BARCODE_UPCA           34
 #define BARCODE_UPCA_CHK        35
-#define BARCODE_UPCE            37
+#define BARCODE_UPCE           37
 #define BARCODE_UPCE_CHK        38
-#define BARCODE_POSTNET         40
-#define BARCODE_MSI_PLESSEY     47
-#define BARCODE_FIM             49
-#define BARCODE_LOGMARS         50
-#define BARCODE_PHARMA          51
-#define BARCODE_PZN             52
-#define BARCODE_PHARMA_TWO      53
-#define BARCODE_PDF417          55
-#define BARCODE_PDF417TRUNC     56
-#define BARCODE_MAXICODE        57
-#define BARCODE_QRCODE          58
-#define BARCODE_CODE128B        60
-#define BARCODE_AUSPOST         63
-#define BARCODE_AUSREPLY        66
-#define BARCODE_AUSROUTE        67
-#define BARCODE_AUSREDIRECT     68
-#define BARCODE_ISBNX           69
-#define BARCODE_RM4SCC          70
-#define BARCODE_DATAMATRIX      71
-#define BARCODE_EAN14           72
+#define BARCODE_POSTNET                40
+#define BARCODE_MSI_PLESSEY    47
+#define BARCODE_FIM            49
+#define BARCODE_LOGMARS                50
+#define BARCODE_PHARMA         51
+#define BARCODE_PZN            52
+#define BARCODE_PHARMA_TWO     53
+#define BARCODE_PDF417         55
+#define BARCODE_PDF417TRUNC    56
+#define BARCODE_MAXICODE       57
+#define BARCODE_QRCODE         58
+#define BARCODE_CODE128B       60
+#define BARCODE_AUSPOST                63
+#define BARCODE_AUSREPLY       66
+#define BARCODE_AUSROUTE       67
+#define BARCODE_AUSREDIRECT    68
+#define BARCODE_ISBNX          69
+#define BARCODE_RM4SCC         70
+#define BARCODE_DATAMATRIX     71
+#define BARCODE_EAN14          72
 #define BARCODE_VIN             73
-#define BARCODE_CODABLOCKF      74
-#define BARCODE_NVE18           75
-#define BARCODE_JAPANPOST       76
-#define BARCODE_KOREAPOST       77
-#define BARCODE_RSS14STACK      79
-#define BARCODE_RSS14STACK_OMNI 80
-#define BARCODE_RSS_EXPSTACK    81
-#define BARCODE_PLANET          82
-#define BARCODE_MICROPDF417     84
-#define BARCODE_ONECODE         85
-#define BARCODE_PLESSEY         86
+#define BARCODE_CODABLOCKF     74
+#define BARCODE_NVE18          75
+#define BARCODE_JAPANPOST      76
+#define BARCODE_KOREAPOST      77
+#define BARCODE_RSS14STACK     79
+#define BARCODE_RSS14STACK_OMNI        80
+#define BARCODE_RSS_EXPSTACK   81
+#define BARCODE_PLANET         82
+#define BARCODE_MICROPDF417    84
+#define BARCODE_ONECODE                85
+#define BARCODE_PLESSEY                86
 
     /* Tbarcode 8 codes */
-#define BARCODE_TELEPEN_NUM     87
-#define BARCODE_ITF14           89
-#define BARCODE_KIX             90
-#define BARCODE_AZTEC           92
-#define BARCODE_DAFT            93
-#define BARCODE_MICROQR         97
+#define BARCODE_TELEPEN_NUM    87
+#define BARCODE_ITF14          89
+#define BARCODE_KIX            90
+#define BARCODE_AZTEC          92
+#define BARCODE_DAFT           93
+#define BARCODE_MICROQR                97
 
     /* Tbarcode 9 codes */
-#define BARCODE_HIBC_128        98
-#define BARCODE_HIBC_39         99
-#define BARCODE_HIBC_DM         102
-#define BARCODE_HIBC_QR         104
-#define BARCODE_HIBC_PDF        106
-#define BARCODE_HIBC_MICPDF     108
-#define BARCODE_HIBC_BLOCKF     110
-#define BARCODE_HIBC_AZTEC      112
+#define BARCODE_HIBC_128       98
+#define BARCODE_HIBC_39                99
+#define BARCODE_HIBC_DM                102
+#define BARCODE_HIBC_QR                104
+#define BARCODE_HIBC_PDF       106
+#define BARCODE_HIBC_MICPDF    108
+#define BARCODE_HIBC_BLOCKF    110
+#define BARCODE_HIBC_AZTEC     112
 
     /* Tbarcode 10 codes */
 #define BARCODE_DOTCODE         115
 #define BARCODE_HANXIN          116
-
+    
     /*Tbarcode 11 codes*/
 #define BARCODE_MAILMARK        121
 
     /* Zint specific */
-#define BARCODE_AZRUNE          128
-#define BARCODE_CODE32          129
-#define BARCODE_EANX_CC         130
-#define BARCODE_EAN128_CC       131
-#define BARCODE_RSS14_CC        132
-#define BARCODE_RSS_LTD_CC      133
-#define BARCODE_RSS_EXP_CC      134
-#define BARCODE_UPCA_CC         135
-#define BARCODE_UPCE_CC         136
-#define BARCODE_RSS14STACK_CC   137
-#define BARCODE_RSS14_OMNI_CC   138
-#define BARCODE_RSS_EXPSTACK_CC 139
-#define BARCODE_CHANNEL         140
-#define BARCODE_CODEONE         141
-#define BARCODE_GRIDMATRIX      142
+#define BARCODE_AZRUNE         128
+#define BARCODE_CODE32         129
+#define BARCODE_EANX_CC                130
+#define BARCODE_EAN128_CC      131
+#define BARCODE_RSS14_CC       132
+#define BARCODE_RSS_LTD_CC     133
+#define BARCODE_RSS_EXP_CC     134
+#define BARCODE_UPCA_CC                135
+#define BARCODE_UPCE_CC                136
+#define BARCODE_RSS14STACK_CC  137
+#define BARCODE_RSS14_OMNI_CC  138
+#define BARCODE_RSS_EXPSTACK_CC        139
+#define BARCODE_CHANNEL                140
+#define BARCODE_CODEONE                141
+#define BARCODE_GRIDMATRIX     142
 #define BARCODE_UPNQR           143
-#define BARCODE_ULTRA           144
-#define BARCODE_RMQR            145
+#define BARCODE_ULTRA       144
 
 // Output options
-#define BARCODE_NO_ASCII        1
-#define BARCODE_BIND            2
-#define BARCODE_BOX             4
-#define BARCODE_STDOUT          8
-#define READER_INIT             16
-#define SMALL_TEXT              32
+#define BARCODE_NO_ASCII       1
+#define BARCODE_BIND           2
+#define BARCODE_BOX            4
+#define BARCODE_STDOUT         8
+#define READER_INIT            16
+#define SMALL_TEXT             32
 #define BOLD_TEXT               64
 #define CMYK_COLOUR             128
 #define BARCODE_DOTTY_MODE      256
 #define GS1_GS_SEPARATOR        512
 
 // Input data types
-#define DATA_MODE               0
-#define UNICODE_MODE            1
-#define GS1_MODE                2
-#define ESCAPE_MODE             8
-
-// Data Matrix specific options (option_3)
-#define DM_SQUARE               100
-#define DM_DMRE                 101
+#define DATA_MODE      0
+#define UNICODE_MODE   1
+#define GS1_MODE       2
+#define ESCAPE_MODE     8
 
-// QR, Han Xin, Grid Matrix specific options (option_3)
-#define ZINT_FULL_MULTIBYTE     200
-
-// Ultracode specific option (option_3)
-#define ULTRA_COMPRESSION       128
+// Data Matrix specific options
+#define DM_SQUARE      100
+#define DM_DMRE                101
 
 // Warning and error conditions
-#define ZINT_WARN_INVALID_OPTION        2
+#define ZINT_WARN_INVALID_OPTION       2
 #define ZINT_WARN_USES_ECI              3
-#define ZINT_ERROR_TOO_LONG             5
+#define ZINT_ERROR_TOO_LONG            5
 #define ZINT_ERROR_INVALID_DATA                6
-#define ZINT_ERROR_INVALID_CHECK        7
-#define ZINT_ERROR_INVALID_OPTION       8
-#define ZINT_ERROR_ENCODING_PROBLEM     9
-#define ZINT_ERROR_FILE_ACCESS          10
-#define ZINT_ERROR_MEMORY               11
+#define ZINT_ERROR_INVALID_CHECK       7
+#define ZINT_ERROR_INVALID_OPTION      8
+#define ZINT_ERROR_ENCODING_PROBLEM    9
+#define ZINT_ERROR_FILE_ACCESS         10
+#define ZINT_ERROR_MEMORY              11
 
 // Raster file types
-#define OUT_BUFFER              0
-#define OUT_SVG_FILE            10
-#define OUT_EPS_FILE            20
-#define OUT_EMF_FILE            30
-#define OUT_PNG_FILE            100
-#define OUT_BMP_FILE            120
-#define OUT_GIF_FILE            140
-#define OUT_PCX_FILE            160
-#define OUT_JPG_FILE            180
-#define OUT_TIF_FILE            200
-
-// Debug flags
-#define ZINT_DEBUG_PRINT    1
-#define ZINT_DEBUG_TEST     2
+#define OUT_BUFFER          0
+#define OUT_SVG_FILE        10
+#define OUT_EPS_FILE        20
+#define OUT_EMF_FILE        30
+#define        OUT_PNG_FILE        100
+#define        OUT_BMP_FILE        120
+#define OUT_GIF_FILE        140
+#define OUT_PCX_FILE        160
+#define OUT_JPG_FILE        180
+#define OUT_TIF_FILE        200
 
 #if defined(__WIN32__) || defined(_WIN32) || defined(WIN32) || defined(_MSC_VER)
 #if defined (DLL_EXPORT) || defined(PIC) || defined(_USRDLL)
@@ -322,6 +310,8 @@ extern "C" {
     ZINT_EXTERN int ZBarcode_Encode_and_Print(struct zint_symbol *symbol, unsigned char *input, int length, int rotate_angle);
     ZINT_EXTERN int ZBarcode_Encode_File_and_Print(struct zint_symbol *symbol, char *filename, int rotate_angle);
 
+    ZINT_EXTERN int ZBarcode_Render(struct zint_symbol *symbol, const float width, const float height);
+
     ZINT_EXTERN int ZBarcode_Buffer(struct zint_symbol *symbol, int rotate_angle);
     ZINT_EXTERN int ZBarcode_Buffer_Vector(struct zint_symbol *symbol, int rotate_angle);
     ZINT_EXTERN int ZBarcode_Encode_and_Buffer(struct zint_symbol *symbol, unsigned char *input, int length, int rotate_angle);
index 73f0b58..261bf75 100644 (file)
@@ -1,5 +1,5 @@
 Name:      zint
-Version:   2.7.1
+Version:   2.6.7
 Release:   1
 Summary:   Barcode generator library
 License:   BSD-3-Clause