libsheepy

C lib for handling text files, strings and json like data structure with an object oriented system
git clone https://spartatek.se/git/libsheepy.git
Log | Files | Refs | README | LICENSE

libsheepy.c (2213822B)


      1 // libsheepy
      2 //
      3 // MIT License
      4 //
      5 // Copyright (c) 2026 Remy Noulin
      6 //
      7 // Permission is hereby granted, free of charge, to any person obtaining a copy
      8 // of this software and associated documentation files (the "Software"), to deal
      9 // in the Software without restriction, including without limitation the rights
     10 // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
     11 // copies of the Software, and to permit persons to whom the Software is
     12 // furnished to do so, subject to the following conditions:
     13 //
     14 // The above copyright notice and this permission notice shall be included in all
     15 // copies or substantial portions of the Software.
     16 //
     17 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
     18 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
     19 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
     20 // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
     21 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
     22 // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
     23 // SOFTWARE.
     24 
     25 
     26 // libsheepyExportCscript is not set by default
     27 // libsheepyExportCscript is set in demoScript.pp for use in the C script
     28 //   the header is included in the C script to avoid problems with tcc and be able to run
     29 //   the script from anywhere
     30  #ifndef libsheepyExportCscript
     31 #include "libsheepy.h"
     32  #endif
     33 // __USE_GNU is needed to get the definition of REG_RIP
     34 //NOT NEEDED because _GNU_SOURCE is in libsheepy.h - #define __USE_GNU
     35 #if (__APPLE__)
     36 #define _XOPEN_SOURCE   1
     37 #endif
     38 #if (!(__APPLE__ || __FreeBSD__ || __TERMUX__ || __OpenBSD__ || __DragonFly__ || MUSL_LIBC || __sun__))
     39 //register_printf_specifier
     40 #include "printf.h"
     41 #endif
     42 typedef enum { LOCALE_NORMAL, LOCALE_TURKIC, LOCALE_LITHUANIAN } localeType;
     43 
     44 #define internal static
     45 
     46 #include <sys/stat.h>
     47 #include <ctype.h>
     48 #include <sys/time.h>
     49 #include <stdio.h>
     50 #if (!(__OpenBSD__ || __HAIKU__))
     51 #include <ucontext.h>
     52 #endif
     53 #include <libgen.h>
     54 #include <dirent.h>
     55 #include <stdarg.h>
     56 #include <errno.h>
     57 #if (!(__OpenBSD__ || __HAIKU__))
     58 #include <wordexp.h>
     59 #endif
     60 #include <stdbool.h>
     61 #include <string.h>
     62 #include <stdlib.h>
     63 #include <unistd.h>
     64 #include <stdint.h>
     65 #include <signal.h>
     66 
     67 #if (__APPLE__)
     68 #endif
     69 #if (!(__APPLE__ || __FreeBSD__ || __TERMUX__ || __OpenBSD__ || __DragonFly__ || MUSL_LIBC || __sun__))
     70 #endif
     71 #if (!(__FreeBSD__ || __OpenBSD__ || __DragonFly__))
     72 #else
     73 #endif
     74 #if (!(__TERMUX__ || __OpenBSD__ || MUSL_LIBC || __HAIKU__))
     75 #endif
     76 #if ((__FreeBSD__))
     77 #endif
     78 void *myMalloc(size_t l);
     79 void *myRealloc(void *buffer, size_t l);
     80 #if (!(__arm__ || __aarch64__ || __riscv || __APPLE__ || __i386__ || __FreeBSD__ || __OpenBSD__ || __DragonFly__ || MUSL_LIBC || __HAIKU__))
     81 internal void segfault_sigaction(int signal, siginfo_t *si, void *arg);
     82 internal void segfault_sigaction(int signal UNUSED, siginfo_t *si UNUSED, void *arg UNUSED);
     83 #endif
     84 void cleanUpCharFree(char **val);
     85 void cleanUpListFree(char* **val);
     86 void cleanUpVoidFree(void **val);
     87 void cleanUpFileFree(FILE **val);
     88 void cleanUpFd(int *val);
     89 uint64_t shStopwatch(uint8_t op);
     90 int getLogSymbols(void);
     91 void setLogSymbols(int mode);
     92 int getMaxLogLevel(void);
     93 void setMaxLogLevel(int logLevel);
     94 FILE *setLogFile(char *filename);
     95 void closeLogFiles(void);
     96 int getLogMode(void);
     97 void setLogMode(int mode);
     98 bool getLogShortPath(void);
     99 void setLogShortPath(bool shortPath);
    100 bool getLogStdout(void);
    101 void setLogStdout(bool state);
    102 bool openProgLogFile(void);
    103 void keepAnsiColorsInLog(bool state);
    104 void _pLog(int loglevel, const char *file, const char *func, int line, const char *msg, ...);
    105 #if (!(__APPLE__ || __FreeBSD__ || __TERMUX__ || __OpenBSD__ || __DragonFly__ || MUSL_LIBC || __sun__ || __HAIKU__))
    106 int print_k(FILE *stream, const struct printf_info *info, const void *const *args);
    107 int print_K(FILE *stream, const struct printf_info *info, const void *const *args);
    108 int print_k_arginfo(const struct printf_info *info UNUSED, size_t n, int *argtypes, int* size);
    109 int print_b(FILE *stream, const struct printf_info *info, const void *const *args);
    110 int print_b_arginfo(const struct printf_info *info UNUSED, size_t n, int *argtypes, int* size);
    111 #endif
    112 #if ((__APPLE__ || __FreeBSD__ || __TERMUX__ || __OpenBSD__ || __DragonFly__ || MUSL_LIBC || __sun__ || __HAIKU__))
    113 void initLibsheepyF(const char *progPath, initLibsheepyObjectP initF);
    114 void initLibsheepyF(const char *progPath, initLibsheepyObjectP initF);
    115 #endif
    116 void finalizeLibsheepyCharAtExit(void);
    117 int64_t getStackLimit(void);
    118 int setStackLimit(int64_t stackSize);
    119 int enableCoreDump(void);
    120 const char *getProgName(void);
    121 bool setProgName(const char *name);
    122 void setDefaultProgName(void);
    123 void freeProgName(void);
    124 const char *getProgPath(void);
    125 const char *getRealProgPath(void);
    126 void freeRealProgPath(void);
    127 int systemNFreeF(char *command, int line, const char *thisFunc, const char *thisFileName);
    128 time_t getModificationTime(const char *path);
    129 int setModificationTime(const char *path, time_t mtime);
    130 bool isReadable(const char *path);
    131 bool isWritable(const char *path);
    132 bool isExecutable(const char *path);
    133 bool equalModificationTimes(const char *path1, const char *path2);
    134 time_t getCurrentUnixTime(void);
    135 time_t strToUnixTime(const char *date, const char *format);
    136 char *timeToS(const time_t t);
    137 char *bTimeToS(char *dst, const time_t t);
    138 char *bLTimeToS(char *dst, size_t dstSize, const time_t t);
    139 char *timeToYMDS(const time_t t);
    140 char *bTimeToYMDS(char *dst, const time_t t);
    141 char *bLTimeToYMDS(char *dst, size_t dstSize, const time_t t);
    142 char *getCurrentDate(void);
    143 char *bGetCurrentDate(char *dst);
    144 char *bLGetCurrentDate(char *dst, size_t dstSize);
    145 char *getCurrentDateYMD(void);
    146 char *bGetCurrentDateYMD(char *dst);
    147 char *bLGetCurrentDateYMD(char *dst, size_t dstSize);
    148 char *shDirname(const char *path);
    149 char *bDirname(char *path);
    150 char *bLDirname(char *path, size_t pathSize);
    151 #if (__OpenBSD__ || __HAIKU__)
    152 char *expandHome(const char* path);
    153 #else
    154 char *expandHome(const char* path);
    155 #endif
    156 #if (__OpenBSD__ || __HAIKU__)
    157 char *iExpandHome(char **path);
    158 #else
    159 char *iExpandHome(char **path);
    160 #endif
    161 #if (__OpenBSD__ || __HAIKU__)
    162 char *bExpandHome(char *path);
    163 #else
    164 char *bExpandHome(char *path);
    165 #endif
    166 #if (__OpenBSD__ || __HAIKU__)
    167 char *bLExpandHome(char *path, size_t pathSize);
    168 #else
    169 char *bLExpandHome(char *path, size_t pathSize);
    170 #endif
    171 char *normalizePath(const char *path);
    172 char *iNormalizePath(char **path);
    173 char *bNormalizePath(char *path);
    174 char *bLNormalizePath(char *path, size_t pathSize);
    175 char *relPath(const char *path, const char *start);
    176 char *iRelPath(char **path, const char *start);
    177 char *bRelPath(char *dest, const char *path, const char *start);
    178 char *bLRelPath(char *dest, size_t destSize, char *path, const char *start);
    179 char *getHomePath(void);
    180 char *bGetHomePath(char *path);
    181 char *bLGetHomePath(char *path, size_t pathSize);
    182 const char *getCHomePath(void);
    183 char *getCwd(void);
    184 char *bLGetCwd(char *path, size_t pathSize);
    185 int chDir(const char *path);
    186 bool isDir(const char *path);
    187 char *shReadlink(const char *path);
    188 char *endlink(const char *path);
    189 bool isLink(const char *path);
    190 bool fileExists(const char *filePath);
    191 bool fileChmod(const char *filePath, mode_t mode);
    192 ssize_t fileSize(const char *filePath);
    193 ssize_t fileSizeFP(FILE *fp);
    194 void *readFileToS(const char *filePath);
    195 void *readStreamToS(FILE *fp);
    196 void *bReadFileToS(const char *filePath, void *dst);
    197 void *bReadStreamToS(FILE *fp, void *dst);
    198 void *bLReadFileToS(const char *filePath, void *dst, size_t dstSize);
    199 void *bLReadStreamToS(FILE *fp, void *dst, size_t dstSize);
    200 ssize_t readFile(const char *filePath, void **buffer);
    201 ssize_t bReadFile(const char *filePath, void *buffer);
    202 ssize_t bLReadFile(const char *filePath, void *buffer, size_t dstSize);
    203 int writeFileS(const char *filePath, const char *string);
    204 int writeFile(const char *filePath, void *buffer, size_t len);
    205 int writeStreamS(FILE *fp, const char *string);
    206 int writeLStream(FILE *fp, void *buffer, size_t len);
    207 bool appendFileS(const char *filePath, const char *string);
    208 bool appendFile(const char *filePath, void *buffer, size_t len);
    209 char **walkDir(const char* dirPath);
    210 internal void walkADir(const char *dirPath, char ***list);
    211 char **walkDirDir(const char* dirPath);
    212 internal void walkADirDir(const char *dirPath, char ***list);
    213 char **readDir(const char *dirPath);
    214 char **readDirDir(const char *dirPath);
    215 char **walkDirAll(const char* dirPath);
    216 internal void walkADirAll(const char *dirPath, char ***list);
    217 char **readDirAll(const char *dirPath);
    218 mode_t getUmask(void);
    219 mode_t getCurrentPermissions(void);
    220 int mkdirParents(const char* path);
    221 int rmAll(const char* path);
    222 int rmADir(const char *dirPath);
    223 int copy(const char* src, const char* dst);
    224 int copyFile(const char* src, const char* dst);
    225 int copyADir(const char *src, const char *dst, const char *path);
    226 int shRename(const char* src, const char* dst);
    227 int shMove(const char* src, const char* dst);
    228 void setSoftwareRandom(void);
    229 void setHardwareRandom(void);
    230 int randomUrandomOpen(void);
    231 void randomUrandomClose(void);
    232 uint64_t randomWord(void);
    233 uint64_t randomWordFromHW(void);
    234 uint64_t randomChoice(uint64_t range);
    235 char *randomS(uint64_t length);
    236 char *bRandomS(char *dst, size_t dstSize);
    237 char *randomAlphaNumS(uint64_t length);
    238 char *bRandomAlphaNumS(char *dst, size_t dstSize);
    239 char *readS(void);
    240 char *bLReadS(char *dst, size_t dstSize);
    241 UNUSED local char *shGetpass(void);
    242 char *readPasswordS(void);
    243 bool zeroS(char *string);
    244 bool zeroBuf(void *buf, size_t len);
    245 void *memdup(const void *buf, size_t size);
    246 void readEnter(void);
    247 char *readLine(FILE *fp);
    248 void freeManySF(char *paramType, ...);
    249 char *dupS(const char *string);
    250 void shPrintfS(const char *fmt, ...);
    251 void shEPrintfS(const char *fmt, ...);
    252 void logNFree(char *s);
    253 void loghex(const void *buf, size_t len);
    254 char *toHexS(const void *buf, size_t len);
    255 char *toHexSepS(const void *buf, size_t len, const char *separator);
    256 char *toHexHeadSepS(const void *buf, size_t len, const char *head, const char *separator);
    257 char *strCpy(char *restrict dst, const char *restrict src);
    258 char *strNCpy(char *restrict dst, const char *restrict src, size_t srcSize);
    259 char *strLCpy(char *restrict dst, size_t dstSize, const char *restrict src);
    260 char *strCat(char *restrict dst, const char *restrict src);
    261 char *strNCat(char *restrict dst, const char *restrict src, size_t srcLen);
    262 char *strLCat(char *restrict dst, size_t dstSize, const char *restrict src);
    263 char *strLNCat(char *restrict dst, size_t dstSize, const char *restrict src, size_t srcLen);
    264 char *catSF(const char *paramType, ...);
    265 char *iCatSF(char *dst, const char *paramType, ...);
    266 char *bLCatSF(char *dst, size_t dstSize, const char *paramType, ...);
    267 char *formatS(const char *fmt, ...);
    268 char *bFormatS(char *string, const char *fmt, ...);
    269 char *bLFormatS(char *string, size_t stringSize, const char *fmt, ...);
    270 char *appendS(const char *string1, const char *string2);
    271 char *appendCharS(const char *string1, char c);
    272 char *appendSChar(char c, const char *string2);
    273 char *iAppendS(char **string1, const char *string2);
    274 char *iAppendCharS(char **string1, char c);
    275 char *iAppendNFreeS(char **string1, char *string2);
    276 char *iAppendManySF(char **string, const char *paramType, ...);
    277 char *bAppendManySF(char *string, const char *paramType, ...);
    278 char *bLAppendManySF(char *string, size_t stringSize, const char *paramType, ...);
    279 char *prependS(const char *string1, const char *string2);
    280 char *prependCharS(const char *string1, char c);
    281 char *prependSChar(char c, const char *string2);
    282 char *iPrependS(char **string1, const char *string2);
    283 char *iPrependCharS(char **string1, char c);
    284 char *iPrependNFreeS(char **string1, char *string2);
    285 char *bPrependS(char *string1, const char *string2);
    286 char *bLPrependS(char *string1, size_t string1Size, const char *string2);
    287 char* replaceS(const char *s, const char *olds, const char *news, size_t max );
    288 #define replaceS_max(s,olds,news) replaceS(s,olds,news, 0)
    289 char *replaceCharSS(const char *s, char olds, const char *news, size_t max);
    290 char *replaceSCharS(const char *s, const char *olds, char news, size_t max);
    291 char *replaceCharCharS(const char *s, char olds, char news, size_t max);
    292 size_t replaceSLen(const char *s, const char *olds, const char *news, size_t max);
    293 char* iReplaceS(char **s, const char *olds, const char *news, size_t max );
    294 #define iReplaceS_max(s,olds,news) iReplaceS(s,olds,news, 0)
    295 char *iReplaceCharSS(char **s, char olds, const char *news, size_t max);
    296 char *iReplaceSCharS(char **s, const char *olds, char news, size_t max);
    297 char *iReplaceCharCharS(char **s, char olds, char news, size_t max);
    298 char* bReplaceS(char *s, const char *olds, const char *news, size_t max );
    299 #define bReplaceS_max(s,olds,news) bReplaceS(s,olds,news, 0)
    300 char* bLReplaceS(char *s, size_t sSize, const char *olds, const char *news, size_t max);
    301 char *replaceManySF(const char *paramType, ...);
    302 char *iReplaceManySF(char **s, char *paramType, ...);
    303 char *bReplaceManySF(char *s, char *paramType, ...);
    304 char *bLReplaceManySF(char *s, size_t sSize, char *paramType, ...);
    305 char* icReplaceS(const char *s, const char *olds, const char *news, size_t max );
    306 #define icReplaceS_max(s,olds,news) icReplaceS(s,olds,news, 0)
    307 char *icReplaceCharSS(const char *s, char olds, const char *news, size_t max);
    308 char *icReplaceSCharS(const char *s, const char *olds, char news, size_t max);
    309 char *icReplaceCharCharS(const char *s, char olds, char news, size_t max);
    310 char* iicReplaceS(char **s, const char *olds, const char *news, size_t max );
    311 #define iicReplaceS_max(s,olds,news) iicReplaceS(s,olds,news, 0)
    312 char *iicReplaceCharSS(char **s, char olds, const char *news, size_t max);
    313 char *iicReplaceSCharS(char **s, const char *olds, char news, size_t max);
    314 char *iicReplaceCharCharS(char **s, char olds, char news, size_t max);
    315 char* bicReplaceS(char *s, const char *olds, const char *news, size_t max );
    316 #define bicReplaceS_max(s,olds,news) bicReplaceS(s,olds,news, 0)
    317 char* bLicReplaceS(char *s, size_t sSize, const char *olds, const char *news, size_t max);
    318 char *icReplaceManySF(const char *paramType, ...);
    319 char *iicReplaceManySF(char **s, char *paramType, ...);
    320 char *bicReplaceManySF(char *s, char *paramType, ...);
    321 char *bLicReplaceManySF(char *s, size_t sSize, char *paramType, ...);
    322 bool eqS(const char *string1, const char *string2);
    323 bool eqCharS(char c, const char *string2);
    324 bool eqSChar(const char *string1, char c);
    325 bool eqIS(const char *string1, const char *string2, int64_t index);
    326 bool eqICharS(const char *string1, char c, int64_t index);
    327 bool startsWithS(const char *string1, const char *string2);
    328 bool startsWithCharS(const char *string1, char c);
    329 bool endsWithS(const char *string1, const char *string2);
    330 bool endsWithCharS(const char *string1, char c);
    331 ssize_t countS(const char *s, const char *needle);
    332 ssize_t countCharS(const char *s, char c);
    333 bool icEqS(const char *string1, const char *string2);
    334 bool icEqCharS(char c, const char *string2);
    335 bool icEqSChar(const char *string1, char c);
    336 bool icEqIS(const char *string1, const char *string2, int64_t index);
    337 bool icEqICharS(const char *string1, char c, int64_t index);
    338 bool icStartsWithS(const char *string1, const char *string2);
    339 bool icStartsWithCharS(const char *string1, char c);
    340 bool icEndsWithS(const char *string1, const char *string2);
    341 bool icEndsWithCharS(const char *string1, char c);
    342 ssize_t icCountS(const char *s, const char *needle);
    343 ssize_t icCountCharS(const char *s, char c);
    344 bool hasCtrlChar(const char *string);
    345 char *stripCtrlS(const char *string);
    346 char *iStripCtrlS(char **string);
    347 char *bStripCtrlS(char *string);
    348 char *stripColorsS(const char *string);
    349 char *iStripColorsS(char **string);
    350 char *bStripColorsS(char *string);
    351 char* quoteS(const char *s, char delim);
    352 char* bQuoteS(char *dest, const char *s, char delim);
    353 char* bLQuoteS(char *dest, size_t destSize, const char *s, char delim);
    354 size_t quoteLenS(const char *s, char delim);
    355 char* escapeS(const char *s, char delim);
    356 char* bEscapeS(char *dest, const char *s, char delim);
    357 char* bLEscapeS(char *dest, size_t destSize, const char *s, char delim);
    358 size_t escapeLenS(const char *s, char delim);
    359 char nibbleToHex(u8 n);
    360 char* cEscapeS(const char *S);
    361 char* bCEscapeS(char *dest, const char *S);
    362 char* bLCEscapeS(char *dest, size_t destSize, const char *S);
    363 size_t cEscapeLenS(const char *s);
    364 bool isNumber(const char *string);
    365 bool isInt(const char *string);
    366 int64_t parseInt(const char *string);
    367 int64_t parseIntChar(char c);
    368 int64_t parseI64(const char *string);
    369 int64_t parseI64Char(char c);
    370 double parseDouble(const char *string);
    371 double parseDoubleChar(char c);
    372 uint64_t parseHex(const char *string);
    373 char *intToS(int64_t n);
    374 char *bIntToS(char *s, int64_t n);
    375 char *doubleToS(double n);
    376 char *bDoubleToS(char *s, double n);
    377 size_t lenS(const char *string);
    378 size_t sizeS(const char *string);
    379 char *upperS(const char *string);
    380 char *iUpperS(char **string);
    381 char *bUpperS(char *string);
    382 char *lowerS(const char *string);
    383 char *iLowerS(char **string);
    384 char *bLowerS(char *string);
    385 char *trimS(const char *string);
    386 char *iTrimS(char **string);
    387 char *bTrimS(char *string);
    388 char *lTrimS(const char *string);
    389 char *iLTrimS(char **string);
    390 char *bLTrimS(char *string);
    391 char *rTrimS(const char *string);
    392 char *iRTrimS(char **string);
    393 char *bRTrimS(char *string);
    394 char *uniqS(const char *string, char c);
    395 char *iUniqS(char **string, char c);
    396 char *bUniqS(char *string, char c);
    397 char *icUniqS(const char *string, char c);
    398 char *iicUniqS(char **string, char c);
    399 char *bicUniqS(char *string, char c);
    400 char *repeatS(const char *string, size_t count);
    401 char *iRepeatS(char **string, size_t count);
    402 char *bRepeatS(char *dest, const char *string, size_t count);
    403 char *bLRepeatS(char *dest, size_t destSize, const char *string, size_t count);
    404 char *repeatCharS(char c, size_t count);
    405 char *bRepeatCharS(char *dest, char c, size_t count);
    406 char *bLRepeatCharS(char *dest, size_t destSize, char c, size_t count);
    407 ssize_t repeatLenS(const char *string, size_t count);
    408 char *ellipsisStartS(const char *string, size_t targetLength, const char *ellipsisString);
    409 char *iEllipsisStartS(char **string, size_t targetLength, const char *ellipsisString);
    410 char *bEllipsisStartS(char *dest, const char *string, size_t targetLength, const char *ellipsisString);
    411 char *bLEllipsisStartS(char *dest, size_t destSize, const char *string, size_t targetLength, const char *ellipsisString);
    412 char *ellipsisStartCharS(const char *string, size_t targetLength, char ellipsisChar);
    413 char *iEllipsisStartCharS(char **string, size_t targetLength, char ellipsisChar);
    414 char *bEllipsisStartCharS(char *dest, const char *string, size_t targetLength, char ellipsisChar);
    415 char *bLEllipsisStartCharS(char *dest, size_t destSize, const char *string, size_t targetLength, char ellipsisChar);
    416 ssize_t ellipsisLenS(const char *string, size_t targetLength, const char *ellipsisString);
    417 char *ellipsisEndS(const char *string, size_t targetLength, const char *ellipsisString);
    418 char *iEllipsisEndS(char **string, size_t targetLength, const char *ellipsisString);
    419 char *bEllipsisEndS(char *dest, const char *string, size_t targetLength, const char *ellipsisString);
    420 char *bLEllipsisEndS(char *dest, size_t destSize, const char *string, size_t targetLength, const char *ellipsisString);
    421 char *ellipsisEndCharS(const char *string, size_t targetLength, char ellipsisChar);
    422 char *iEllipsisEndCharS(char **string, size_t targetLength, char ellipsisChar);
    423 char *bEllipsisEndCharS(char *dest, const char *string, size_t targetLength, char ellipsisChar);
    424 char *bLEllipsisEndCharS(char *dest, size_t destSize, const char *string, size_t targetLength, char ellipsisChar);
    425 char *padStartS(const char *string, size_t targetLength, const char *padString);
    426 char *iPadStartS(char **string, size_t targetLength, const char *padString);
    427 char *bPadStartS(char *dest, const char *string, size_t targetLength, const char *padString);
    428 char *bLPadStartS(char *dest, size_t destSize, const char *string, size_t targetLength, const char *padString);
    429 char *padStartCharS(const char *string, size_t targetLength, char padChar);
    430 char *iPadStartCharS(char **string, size_t targetLength, char padChar);
    431 char *bPadStartCharS(char *dest, const char *string, size_t targetLength, char padChar);
    432 char *bLPadStartCharS(char *dest, size_t destSize, const char *string, size_t targetLength, char padChar);
    433 ssize_t padStartLenS(const char *string, size_t targetLength, const char *padString);
    434 char *padEndS(const char *string, size_t targetLength, const char *padString);
    435 char *iPadEndS(char **string, size_t targetLength, const char *padString);
    436 char *bPadEndS(char *dest, const char *string, size_t targetLength, const char *padString);
    437 char *bLPadEndS(char *dest, size_t destSize, const char *string, size_t targetLength, const char *padString);
    438 char *padEndCharS(const char *string, size_t targetLength, char padChar);
    439 char *iPadEndCharS(char **string, size_t targetLength, char padChar);
    440 char *bPadEndCharS(char *dest, const char *string, size_t targetLength, char padChar);
    441 char *bLPadEndCharS(char *dest, size_t destSize, const char *string, size_t targetLength, char padChar);
    442 ssize_t padEndLenS(const char *string, size_t targetLength, const char *padString);
    443 char getS(const char *string, int64_t index);
    444 char *setS(char *string, int64_t index, char c);
    445 char *swapS(char *string, int64_t index1, int64_t index2);
    446 char *iSwapS(char **string, int64_t index1, int64_t index2);
    447 char *bSwapS(char *string, int64_t index1, int64_t index2);
    448 char *bLSwapS(char *string, size_t size, int64_t index1, int64_t index2);
    449 char *sliceS(const char *string, int64_t start, int64_t end);
    450 char *iSliceS(char **string, int64_t start, int64_t end);
    451 char *bSliceS(char *string, int64_t start, int64_t end);
    452 char *bLSliceS(char *string, size_t stringSize, int64_t start, int64_t end);
    453 char *cropS(char *string, int64_t start, int64_t end);
    454 char *iCropS(char **string, int64_t start, int64_t end);
    455 char cropElemS(char *string, int64_t index);
    456 char iCropElemS(char **string, int64_t index);
    457 char *insertS(const char *string, int64_t index, const char *toInsert);
    458 char *insertNFreeS(const char *string, int64_t index, char *toInsert);
    459 char *iInsertS(char **string, int64_t index, const char *toInsert);
    460 char *iInsertNFreeS(char **string, int64_t index, char *toInsert);
    461 char *bInsertS(char *string, int64_t index, const char *toInsert);
    462 char *bLInsertS(char *string, size_t stringSize, int64_t index, const char *toInsert);
    463 char *injectS(const char *string, int64_t index, char toInject);
    464 char *iInjectS(char **string, int64_t index, char toInject);
    465 char *bInjectS(char *string, int64_t index, char toInject);
    466 char *bLInjectS(char *string, size_t stringSize, int64_t index, char toInject);
    467 char *delS(const char *string, int64_t start, int64_t end);
    468 char *iDelS(char **string, int64_t start, int64_t end);
    469 char *bDelS(char *string, int64_t start, int64_t end);
    470 char *bLDelS(char *string, size_t stringSize, int64_t start, int64_t end);
    471 char *delElemS(const char *string, int64_t index);
    472 char *iDelElemS(char **string, int64_t index);
    473 char *bDelElemS(char *string, int64_t index);
    474 char *bLDelElemS(char *string, size_t stringSize, int64_t index);
    475 char *findS(const char *string, const char *needle);
    476 char *findCharS(const char *string, char c);
    477 ssize_t indexOfS(const char *string, const char *needle);
    478 ssize_t indexOfCharS(const char *string, char c);
    479 bool hasS(const char *string, const char *needle);
    480 bool hasCharS(const char *string, char c);
    481 char *icFindS(const char *string, const char *needle);
    482 char *icFindCharS(const char *string, char c);
    483 ssize_t icIndexOfS(const char *string, const char *needle);
    484 ssize_t icIndexOfCharS(const char *string, char c);
    485 bool icHasS(const char *string, const char *needle);
    486 bool icHasCharS(const char *string, char c);
    487 char *tokS(char *s, const char *delim, char **saveptr);
    488 char *icTokS(char *s, const char *delim, char **saveptr);
    489 size_t lenUTF8(const char *s);
    490 size_t bLLenUTF8(const char *s, size_t maxSize);
    491 bool isUTF8(const char * string);
    492 bool bLIsUTF8(const char * string, size_t stringSize);
    493 bool isCodeUTF8(const char *code);
    494 const char *nextUTF8(const char *utf8);
    495 const char *bLNextUTF8(const char *string, size_t utf8Size, const char *utf8);
    496 const char *findNextUTF8(const char *string, size_t utf8Size, const char *utf8);
    497 const char *prevUTF8(const char *utf8);
    498 const char *bPrevUTF8(const char *string, const char *utf8);
    499 local const char *bPrevUTF8Tiny(const char *string, const char *utf8);
    500 local char *bPrevRWUTF8Tiny(const char *string, char *utf8);
    501 const char *idx2PtrUTF8(const char *utf8, int64_t index);
    502 local char *idx2PtrRWUTF8(char *utf8, int64_t index);
    503 const char *bLIdx2PtrUTF8(const char *utf8, size_t utf8Size, int64_t index);
    504 int64_t ptr2IdxUTF8(const char *utf8, const char *pos);
    505 int64_t bPtr2IdxUTF8(const char *start, const char *utf8, const char *pos);
    506 int64_t bLPtr2IdxUTF8(const char *utf8, size_t utf8Size, const char *pos);
    507 int64_t bLPtr2NegIdxUTF8(const char *utf8, size_t utf8Size, const char *pos);
    508 char *makeValidUTF8(const char *utf8);
    509 char *bMakeValidUTF8(char *utf8);
    510 char *nMakeValidUTF8(const char *utf8, size_t utf8Len);
    511 char *bNMakeValidUTF8(char *dst, const char *utf8, size_t utf8Len);
    512 char *bLMakeValidUTF8(char *dst, size_t dstSize, const char *utf8);
    513 char *bLNMakeValidUTF8(char *dst, size_t dstSize, const char *utf8, size_t utf8Len);
    514 char *strNCpyUTF8(char *dst, const char *src, size_t srcLen);
    515 char *strLCpyUTF8(char *dst, size_t dstSize, const char *src);
    516 char *strNCatUTF8(char *dst, const char *src, size_t srcLen);
    517 char *strLCatUTF8(char *dst, size_t dstSize, const char *src);
    518 char *strLNCatUTF8(char *dst, size_t dstSize, const char *src, size_t srcLen);
    519 char* icReplaceUTF8(const char UNUSED *s, const char UNUSED *olds, const char UNUSED *news, size_t UNUSED max );
    520 #define icReplaceUTF8_max(s,olds,news) icReplaceUTF8(s,olds,news, 0)
    521 char *icReplaceCharSUTF8(const char *s UNUSED, char olds UNUSED, const char *news UNUSED, size_t max UNUSED);
    522 char *icReplaceSCharUTF8(const char *s UNUSED, const char *olds UNUSED, char news UNUSED, size_t max UNUSED);
    523 char* iicReplaceUTF8(char UNUSED **s, const char UNUSED *olds, const char UNUSED *news, size_t UNUSED max );
    524 #define iicReplaceUTF8_max(s,olds,news) iicReplaceUTF8(s,olds,news, 0)
    525 char *iicReplaceCharSUTF8(char **s UNUSED, char olds UNUSED, const char *news UNUSED, size_t max UNUSED);
    526 char *iicReplaceSCharUTF8(char **s UNUSED, const char *olds UNUSED, char news UNUSED, size_t max UNUSED);
    527 char* bicReplaceUTF8(char UNUSED *s, const char UNUSED *olds, const char UNUSED *news, size_t UNUSED max );
    528 #define bicReplaceUTF8_max(s,olds,news) bicReplaceUTF8(s,olds,news, 0)
    529 char* bLicReplaceUTF8(char UNUSED *s, size_t UNUSED sSize, const char UNUSED *olds, const char UNUSED *news, size_t max UNUSED);
    530 char *icReplaceManyUTF8F(const char *paramType UNUSED, ...);
    531 char *iicReplaceManyUTF8F(char **s UNUSED, char *paramType UNUSED, ...);
    532 char *bicReplaceManyUTF8F(char *s UNUSED, char *paramType UNUSED, ...);
    533 char *bLicReplaceManyUTF8F(char *s UNUSED, size_t sSize UNUSED, char *paramType UNUSED, ...);
    534 bool eqIUTF8(const char *string1, const char *string2, int64_t index);
    535 bool eqICharUTF8(const char *string1, char c, int64_t index);
    536 bool icEqUTF8(const char *string1, const char *string2);
    537 bool icEqCharUTF8(char c, const char *string2);
    538 bool icEqUTF8Char(const char *string1, char c);
    539 bool icEqIUTF8(const char *string1 UNUSED, const char *string2 UNUSED, int64_t index UNUSED);
    540 bool icEqICharUTF8(const char *string1 UNUSED, char c UNUSED, int64_t index UNUSED);
    541 bool icStartsWithUTF8(const char *string1, const char *string2);
    542 bool icEndsWithUTF8(const char *string1, const char *string2);
    543 ssize_t icCountUTF8(const char *s, const char *needle);
    544 internal localeType getLocaleType(void);
    545 rune code2RuneUTF8(const char *code);
    546 rune code2RuneLUTF8(const char *code, uint8_t *n);
    547 size_t bRune2CodeUTF8(char *dst, rune c);
    548 uint8_t runeLenUTF8(rune r);
    549 internal size_t decompose_hangul(rune s, rune *r);
    550 internal const char *find_decomposition (rune ch);
    551 internal size_t runeFullyDecompose(rune  ch, rune *result, size_t resultLen);
    552 internal size_t output_marks(const char **p_inout, char *dst, bool remove_dot);
    553 internal size_t output_special_case(char *dst, int offset, int type, int which);
    554 rune toupperUTF8(rune c);
    555 internal size_t _upperUTF8(char *dst, const char *utf8, localeType lcl);
    556 char *upperUTF8(const char *utf8);
    557 char *iUpperUTF8(char **utf8);
    558 char *bUpperUTF8(char *utf8 UNUSED);
    559 local int runeCombiningClass (rune uc);
    560 internal bool has_more_above (const char *str);
    561 rune tolowerUTF8(rune c);
    562 internal size_t _lowerUTF8(char *dst, const char *utf8, localeType lcl);
    563 char *lowerUTF8(const char *utf8);
    564 char *iLowerUTF8(char **utf8);
    565 char *bLowerUTF8(char *string UNUSED);
    566 char *casefoldUTF8(const char *utf8);
    567 char *uniqUTF8(const char *string, const char *code);
    568 char *iUniqUTF8(char **string, const char *code);
    569 char *bUniqUTF8(char *string, const char *code);
    570 char *icUniqUTF8(const char *string UNUSED, const char *code UNUSED);
    571 char *iicUniqUTF8(char **string UNUSED, const char *code UNUSED);
    572 char *bicUniqUTF8(char *string UNUSED, char c UNUSED);
    573 rune getUTF8(const char *string, int64_t index);
    574 char *setUTF8(char *string, int64_t index, rune c);
    575 char *sliceUTF8(const char *string, int64_t start, int64_t end);
    576 char *iSliceUTF8(char **string, int64_t start, int64_t end);
    577 char *bSliceUTF8(char *string, int64_t start, int64_t end);
    578 char *bLSliceUTF8(char *string, size_t stringSize, int64_t start, int64_t end);
    579 char *insertUTF8(const char *string, int64_t index, const char *toInsert);
    580 char *insertNFreeUTF8(const char *string, int64_t index, char *toInsert);
    581 char *iInsertUTF8(char **string, int64_t index, const char *toInsert);
    582 char *iInsertNFreeUTF8(char **string, int64_t index, char *toInsert);
    583 char *bInsertUTF8(char *string, int64_t index, const char *toInsert);
    584 char *bLInsertUTF8(char *string, size_t stringSize, int64_t index, const char *toInsert);
    585 char *delUTF8(const char *string, int64_t start, int64_t end);
    586 char *iDelUTF8(char **string, int64_t start, int64_t end);
    587 char *bDelUTF8(char *string, int64_t start, int64_t end);
    588 char *bLDelUTF8(char *string, size_t stringSize, int64_t start, int64_t end);
    589 ssize_t indexOfUTF8(const char *string, const char *needle);
    590 ssize_t icIndexOfUTF8(const char *string UNUSED, const char *needle UNUSED);
    591 bool icHasUTF8(const char *string, const char *needle);
    592 char *icTokUTF8(const char *s UNUSED, const char *delim UNUSED, char **saveptr UNUSED);
    593 char **icSplitUTF8(const char *string UNUSED, const char* delim UNUSED);
    594 char **icExtractUTF8(const char *string UNUSED, const char* delim1 UNUSED, const char* delim2 UNUSED);
    595 char **icExtractCharSUTF8(const char *string UNUSED, char delim1 UNUSED, const char* delim2 UNUSED);
    596 char **icExtractSCharUTF8(const char *string UNUSED, const char* delim1 UNUSED, char delim2 UNUSED);
    597 internal int icListSortUTF8Cmp(const void * a, const void * b);
    598 char **icListSortUTF8(char **list);
    599 char **iicListSortUTF8(char ***list);
    600 bool icListEqUTF8(char **list1, char **list2);
    601 bool icListHasUTF8(char **list, const char *string);
    602 ssize_t icListIndexOfUTF8(char **list, const char *string);
    603 ssize_t icListBinarySearchUTF8(char **list, const char *string);
    604 char **icListUniqUTF8(char **list);
    605 char **iicListUniqUTF8(char ***list);
    606 char *emptySF(void);
    607 char *iEmptySF(char **string);
    608 bool isEmptyS(const char *string);
    609 bool isBlankS(const char *string);
    610 ssize_t intIndex(int64_t index, int64_t length);
    611 char **listEmptySF(void);
    612 char **iListEmptySF(char ***list);
    613 bool listIsEmptyS(char **list);
    614 bool listIsBlankS(char **list);
    615 char **listCreateSF(const char *paramType, ...);
    616 char **listFromArrayS(char **array, size_t size);
    617 char **listFromCArrayS(const char **array, size_t size);
    618 char **listPushS(char ***list, const char *s);
    619 char **listPushCharS(char ***list, char c);
    620 char **iListPushS(char ***list, char *s);
    621 char *listPopS(char ***list);
    622 char **listPrependS(char ***list, const char *s);
    623 char **listPrependCharS(char ***list, char c);
    624 char **iListPrependS(char ***list, char *s);
    625 char *listDequeueS(char ***list);
    626 void listFreeS(char **list);
    627 void listFreeManySF(char **paramType, ...);
    628 size_t listLengthS(char **list);
    629 size_t listLengthCS(const char **list);
    630 ssize_t listStrLengthS(char **list);
    631 ssize_t listIntIndexS(char **list, int64_t index);
    632 char **listAddrS(char **list, int64_t index);
    633 char *listGetS(char **list, int64_t index);
    634 char *iListGetS(char **list, int64_t index);
    635 char *listGetCS(const char **list, int64_t index);
    636 const char *iListGetCS(const char **list, int64_t index);
    637 char **listSetS(char **list, int64_t index, const char *s);
    638 char **listSetCharS(char **list, int64_t index, char c);
    639 char **iListSetS(char **list, int64_t index, char *s);
    640 char **listSwapS(char **list, int64_t index1, int64_t index2);
    641 char **iListSwapS(char **list, int64_t index1, int64_t index2);
    642 char **split(const char *string, const char* delim);
    643 char **splitS(const char *string, const char* delim);
    644 char **splitChar(const char *string, char delim);
    645 char **icSplit(const char *string, const char* delim);
    646 char **icSplitS(const char *string, const char* delim);
    647 char **icSplitChar(const char *string, char delim);
    648 ssize_t joinLength(char **list, const char* delim);
    649 char *join(char **list, const char* delim);
    650 char *joinS(char **list, const char* delim);
    651 char *joinCS(const char **list, const char* delim);
    652 char *joinChar(char **list, char delim);
    653 char *bJoin(char *string, char **list, const char* delim);
    654 char *bJoinChar(char *string, char **list, char delim);
    655 char *bLJoin(char *string, size_t stringSize, char **list, const char* delim);
    656 char *bLJoinChar(char *string, size_t stringSize, char **list, char delim);
    657 char **extractS(const char *string, const char* delim1, const char* delim2);
    658 char **extractCharSS(const char *string, char delim1, const char* delim2);
    659 char **extractSCharS(const char *string, const char* delim1, char delim2);
    660 char **extractCharCharS(const char *string, char delim1, char delim2);
    661 char **icExtractS(const char *string, const char* delim1, const char* delim2);
    662 char **icExtractCharSS(const char *string, char delim1, const char* delim2);
    663 char **icExtractSCharS(const char *string, const char* delim1, char delim2);
    664 char **icExtractCharCharS(const char *string, char delim1, char delim2);
    665 char **listDupS(char **list);
    666 char **listDupCS(const char **list);
    667 char **iListDupS(char **list);
    668 char **listReverseS(char **list);
    669 char **iListReverseS(char ***list);
    670 char **listCatSF(char **paramType, ...);
    671 char **listAppendS(char ***list1, char **list2);
    672 char **iListAppendS(char ***list1, char **list2);
    673 char **iListAppendNSmashS(char ***list1, char **list2);
    674 char **listShiftS(char ***list1, char **list2);
    675 char **iListShiftS(char ***list1, char **list2);
    676 char **iListShiftNSmashS(char ***list1, char **list2);
    677 char **listAddS(char **list1, char **list2);
    678 char **listAddCS(char **list1, const char **list2);
    679 char **listSliceS(char **list, int64_t start, int64_t end);
    680 char **iListCopyS(char **list, int64_t start, int64_t end);
    681 char **iListSliceS(char ***list, int64_t start, int64_t end);
    682 char **listCropS(char **list, int64_t start, int64_t end);
    683 char **iListCropS(char ***list, int64_t start, int64_t end);
    684 char *listCropElemS(char **list, int64_t index);
    685 char *iListCropElemS(char ***list, int64_t index);
    686 char **listInsertS(char **list, int64_t index, char **toInsert);
    687 char **iListInsertS(char ***list, int64_t index, char **toInsert);
    688 char **iListInsertNFreeS(char ***list, int64_t index, char **toInsert);
    689 char **listInjectS(char **list, int64_t index, char *toInject);
    690 char **listInjectCharS(char **list, int64_t index, char toInject);
    691 char **iListInjectS(char ***list, int64_t index, char *toInject);
    692 char **iListInjectCharS(char ***list, int64_t index, char toInject);
    693 char **listDelS(char **list, int64_t start, int64_t end);
    694 char **iListDelS(char ***list, int64_t start, int64_t end);
    695 char **iListRemoveS(char ***list, int64_t start, int64_t end);
    696 char **listDelElemS(char **list, int64_t index);
    697 char **iListDelElemS(char ***list, int64_t index);
    698 char **iListRemoveElemS(char ***list, int64_t index);
    699 int listPrintS(char **list);
    700 int listPrintCS(const char **list);
    701 internal int listSortSCmp(const void * a, const void * b);
    702 char **listSortS(char **list);
    703 char **iListSortS(char ***list);
    704 char **listSortFS(char **list, shCmpt compareFunction);
    705 char **iListSortFS(char ***list, shCmpt compareFunction);
    706 internal int icListSortSCmp(const void * a, const void * b);
    707 char **icListSortS(char **list);
    708 char **iicListSortS(char ***list);
    709 char **readText(const char *filePath);
    710 char **readStream(FILE *fp);
    711 bool writeText(const char *filePath, char **list);
    712 bool writeCText(const char *filePath, const char **list);
    713 bool writeStream(FILE *fp, char **list);
    714 bool writeCStream(FILE *fp, const char **list);
    715 bool appendText(const char *filePath, char **list);
    716 bool appendCText(const char *filePath, const char **list);
    717 char **execOut(const char *cmd);
    718 char **systemOutf(const char *fmt, ...);
    719 int systemf(const char *fmt, ...);
    720 int commandF(const char *cmd, int line, const char *thisFunc, const char *thisFileName);
    721 int commandfF(int line, const char *thisFunc, const char *thisFileName, const char *fmt, ...);
    722 int commandNFreeF(char *cmd, int line, const char *thisFunc, const char *thisFileName);
    723 bool listEqS(char **list1, char **list2);
    724 bool listEqCS(char **list1, const char **list2);
    725 bool listEqC1S(const char **list1, char **list2);
    726 bool listEqCCS(const char **list1, const char **list2);
    727 bool listHasS(char **list, const char *string);
    728 bool listHasCS(const char **list, const char *string);
    729 bool listHasCharS(char **list, char c);
    730 bool listHasCharCS(const char **list, char c);
    731 ssize_t listIndexOfS(char **list, const char *string);
    732 ssize_t listIndexOfCS(const char **list, const char *string);
    733 ssize_t listIndexOfCharS(char **list, char c);
    734 ssize_t listIndexOfCharCS(const char **list, char c);
    735 ssize_t listBinarySearchS(char **list, const char *string);
    736 ssize_t listBinarySearchCharS(char **list, char c);
    737 char **listUniqS(char **list);
    738 char **iListUniqS(char ***list);
    739 bool icListEqS(char **list1, char **list2);
    740 bool icListEqCS(char **list1, const char **list2);
    741 bool icListEqC1S(const char **list1, char **list2);
    742 bool icListEqCCS(const char **list1, const char **list2);
    743 bool icListHasS(char **list, const char *string);
    744 bool icListHasCharS(char **list, char c);
    745 bool icListHasCS(const char **list, const char *string);
    746 bool icListHasCharCS(const char **list, char c);
    747 ssize_t icListIndexOfS(char **list, const char *string);
    748 ssize_t icListIndexOfCS(const char **list, const char *string);
    749 ssize_t icListIndexOfCharS(char **list, char c);
    750 ssize_t icListIndexOfCharCS(const char **list, char c);
    751 ssize_t icListBinarySearchS(char **list, const char *string);
    752 ssize_t icListBinarySearchCharS(char **list, char c);
    753 char **icListUniqS(char **list);
    754 char **iicListUniqS(char ***list);
    755 char **listCompactS(char **list);
    756 char **iListCompactS(char ***list);
    757 void btraceEnable(void);
    758 void btraceDisable(void);
    759 bool btraceConfig(void);
    760 #if (__FreeBSD__ || __TERMUX__ || __OpenBSD__ || __DragonFly__ || MUSL_LIBC || __sun__ || __HAIKU__)
    761 char **btrace(void);
    762 char **btrace(void);
    763 #endif
    764 void **listEmptyF(void);
    765 void **iListEmptyF(void ***list);
    766 bool listIsEmpty(void **list);
    767 void **listCreateF(void *paramType, ...);
    768 void **listFromArray(void **array, size_t size);
    769 void **listPush(void ***list, void *s);
    770 void *listPop(void ***list);
    771 void **listPrepend(void ***list, void *s);
    772 void *listDequeue(void ***list);
    773 void listFree(void **list);
    774 void listFreeManyF(void **paramType, ...);
    775 size_t listLength(void **list);
    776 void *listGet(void **list, int64_t index);
    777 void **listSet(void **list, int64_t index, void *s);
    778 void **listDup(void **list);
    779 void **listReverse(void **list);
    780 void **iListReverse(void ***list);
    781 void **listCatF(void **paramType, ...);
    782 void **listAppend(void ***list1, void **list2);
    783 void **listAdd(void **list1, void **list2);
    784 void **listSlice(void **list, int64_t start, int64_t end);
    785 void **iListSlice(void ***list, int64_t start, int64_t end);
    786 void **listInsert(void **list, int64_t index, void **toInsert);
    787 void **iListInsert(void ***list, int64_t index, void **toInsert);
    788 void **listDel(void **list, int64_t start, int64_t end);
    789 void **iListDel(void ***list, int64_t start, int64_t end);
    790 int ringInit(void *ring, int maxCount);
    791 int ringEmpty(void *ring);
    792 int ringIsEmpty(void *ring);
    793 int ringIsFull(void *ring);
    794 ssize_t ringCount(void *ring);
    795 i64 ringPush(void *ring);
    796 int ringPop(void *ring);
    797 i64 ringPrepend(void *ring);
    798 int ringDequeue(void *ring);
    799 bool fiberAdd(void *ctx, int thisSlot, fiberFT func);
    800 bool fiberPrepend(void *ctx, int thisSlot, fiberFT func);
    801 void scheduler(void);
    802 #if ((__GNUC__ > 4))
    803 uint64_t getMonotonicTime(void);
    804 #else
    805 uint64_t getMonotonicTime(void);
    806 #endif
    807 int nanoSleepF(uint64_t time);
    808 void A(void *args);
    809 void B(void *args);
    810 void AB(void);
    811 void fiberA(int thisSlot);
    812 void fiberB(int thisSlot);
    813 void bttt(void);
    814 #ifndef unitTest
    815 #endif
    816 int MAIN(int ARGC, char** ARGV);
    817 
    818 int argc; char **argv;
    819 
    820 //TODO compare speed - include sys/sendfile.h
    821 
    822 #include "sys/resource.h"
    823 #if (!(__FreeBSD__ || __OpenBSD__ || __DragonFly__))
    824 #include "alloca.h"
    825 #else
    826 #include <stdlib.h>
    827 #endif
    828 #include "pwd.h"
    829 // ULONG_MAX
    830 #include "limits.h"
    831 #if (!(__TERMUX__ || __OpenBSD__ || MUSL_LIBC || __HAIKU__))
    832 // backtrace
    833 #include "execinfo.h"
    834 #endif
    835 // get home path
    836 #include "pwd.h"
    837 // terminal settings for shGetpass
    838 #include "termios.h"
    839 // setlocale
    840 #include "locale.h"
    841 
    842 #if ((__FreeBSD__))
    843 // WIFEXITED WEXITSTATUS
    844 #include <sys/wait.h>
    845 #endif
    846 
    847 
    848 
    849 /** \file
    850  * This file has basic file, random, string, list functions
    851  *
    852  * There are 2 types of lists: char** and void**
    853  *
    854  * The *S (not i*S) functions duplicate the parameters and results.
    855  * You must free the result if result is non-NULL and free the parameters
    856  *
    857  * The functions starting with i*S are in place functions.
    858  *
    859  * In Place functions: iList*S and i*S
    860  * The iList*S and i*S functions modify the input buffers
    861  * The input buffers must be allocated with malloc/calloc
    862  * Returns are pointers to original buffers
    863  *
    864  * For more information, the documentation is located at http://spartatek.se/libsheepy/
    865  */
    866 
    867 #define MALLOC   myMalloc
    868 //MALLOC = malloc
    869 
    870 
    871 void *myMalloc(size_t l) {
    872   void *r = NULL;
    873 
    874   //print 'myMalloc'
    875 
    876   // over allocate to trigger bugs
    877   l += 0;
    878   r = malloc(l);
    879 
    880   pError0(randomUrandomOpen());
    881 
    882   void *w = r;
    883   while (l-- > 0) {
    884     *(char *)w++ = (char)randomChoice(256);
    885   }
    886 
    887   randomUrandomClose();
    888   //print (char *)r
    889   return(r);
    890 }
    891 
    892 #define REALLOC   myRealloc
    893 //REALLOC = realloc
    894 
    895 void *myRealloc(void *buffer, size_t l) {
    896   void *r = NULL;
    897 
    898   //print 'myRealloc'
    899 
    900   // NO creates bugs - over allocate to trigger bugs
    901   r = realloc(buffer, l+0);
    902 
    903   pError0(randomUrandomOpen());
    904 
    905   int i = 0;
    906   while (i-- > 0) {
    907     *(char *)(r+l-i) = (char)randomChoice(256);
    908   }
    909 
    910   randomUrandomClose();
    911   return(r);
    912 }
    913 
    914 // Function section
    915 // define not used for now
    916 #define __libsheepy   1
    917 
    918 /** type bool true (glibc true is not bool), for use in generics */
    919 const bool TRUE  = true;
    920 /** type bool false (glibc true is not bool), for use in generics */
    921 const bool FALSE = false;
    922 
    923 /** backtrace in error messages is enabled by default */
    924 bool btraceCfg = true;
    925 
    926 /**
    927  * setjmp buffers for try/throw,throwV macros
    928  */
    929 jmp_buf tryJumpBuffers[maxTryThrowCount];
    930 
    931 /**
    932  * program/library path to find the debug symbols for the program using libsheepy
    933  */
    934 static const char *libSheepyArg0     = NULL;
    935 static const char *libSheepyProgPath = NULL;
    936 static char *progName                = NULL;
    937 static const char *defaultProgName   = NULL;
    938 static char *libSheepyRealProgPath   = NULL;
    939 
    940 static struct sigaction default_sa   = init0Var;
    941 
    942 /**
    943  * segmentation fault handler
    944  *
    945  * prints line and file where the segfault crash occured
    946  */
    947 #if (!(__arm__ || __aarch64__ || __riscv || __APPLE__ || __i386__ || __FreeBSD__ || __OpenBSD__ || __DragonFly__ || MUSL_LIBC || __HAIKU__))
    948 internal void segfault_sigaction(int signal, siginfo_t *si, void *arg) {
    949 
    950   /* char addr[20] */
    951   /* char *s */
    952   /* char realProgPath[8192] */
    953   ucontext_t *context = (ucontext_t *)arg;;
    954   logE("Segmentation fault (%d) at address %p RIP: %" PRIx64 " in program %s\n", signal, si->si_addr, (uint64_t)context->uc_mcontext.gregs[REG_RIP], libSheepyArg0);
    955 
    956   logBtrace;
    957 
    958   // incorrect code, doesn't work because of ASLR
    959   /* sprintf(addr, "0x%" PRIx64, (uint64_t)context->uc_mcontext.gregs[REG_RIP]); */
    960   /* realpath("/proc/self/exe", realProgPath); */
    961   /* s = 'addr2line -e %s %s', realProgPath, addr */
    962   /* systemNFree(s); */
    963   // call default signal handler
    964   default_sa.sa_sigaction(signal, si, arg);
    965 }
    966 
    967 #else // __arm__ || __aarch64__ || __riscv || __APPLE__ || __i386__ || __FreeBSD__ || __OpenBSD__ || __DragonFly__ || MUSL_LIBC || __HAIKU__
    968 internal void segfault_sigaction(int signal UNUSED, siginfo_t *si UNUSED, void *arg UNUSED) {
    969 
    970   // call default signal handler
    971   default_sa.sa_sigaction(signal, si, arg);
    972 }
    973 
    974 #endif
    975 
    976 void cleanUpCharFree(char **val) {
    977 
    978   free(*val);
    979 }
    980 
    981 
    982 void cleanUpListFree(char* **val) {
    983 
    984   listFreeS(*val);
    985 }
    986 
    987 
    988 void cleanUpVoidFree(void **val) {
    989 
    990   free(*val);
    991 }
    992 
    993 
    994 void cleanUpFileFree(FILE **val) {
    995 
    996   if ((*val)) {
    997     fclose(*val);
    998 }
    999   }
   1000 
   1001 
   1002 void cleanUpFd(int *val) {
   1003 
   1004   if ((*val != -1)) {
   1005     close(*val);
   1006 }
   1007   }
   1008 
   1009 /**
   1010  * nanosecond stopwatch
   1011  *
   1012  * \param
   1013  *   op operation: 0 start, 1 get stopwatch value
   1014  * \return
   1015  *   0 when op is 0
   1016  *   time since last start in ns when op is 1
   1017  */
   1018 uint64_t shStopwatch(uint8_t op) {
   1019 
   1020   static uint64_t startTime;
   1021 
   1022   if (!op) {
   1023     startTime = getMonotonicTime();
   1024     return(0);
   1025   }
   1026   else {
   1027     return(getMonotonicTime()-startTime);
   1028 }
   1029   }
   1030 
   1031 /** log symbols to use, LOG_INVALID_MODE is log mode default symbols */
   1032 static int logSymbols = LOG_INVALID_MODE;
   1033 
   1034 /** set log level, logs above logMaxLevel are skipped */
   1035 static int logMaxLevel = LOG_INVALID;
   1036 
   1037 uint64_t logMask = 0xFFFFFFFFFFFFFFFF;
   1038 
   1039 static FILE *_logging_files[16] = { NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL };
   1040 static int _log_current_mode = LOG_DATE;
   1041 
   1042 static bool _log_verbose_short_path = true;
   1043 
   1044 static bool _logToStdout = true;
   1045 
   1046 static bool keepAnsiColors = true;
   1047 
   1048 // logging file 0 is stdout
   1049 static uint16_t _current_log_file = 1;
   1050 
   1051 static const char *log_tags[LOG_INVALID_MODE][LOG_INVALID+1] = {{"[EMERGENCY] ","[ALERT]     ","[CRITICAL]  ","[ERROR]     ","[WARNING]   ","[NOTICE]    ","[PASS]      ","[INFO]      ","[DEBUG]     ","[INVALID LOG LEVEL] "},{"[_] ", "[_] ", "[!] ", "[*] ", "[-] ", "[#] ", "[>] ", "[+] ", "[$] ", "[~] " },{"[_] ", "[_] ", "[!] ", "[*] ", "[-] ", "[#] ", "[>] ", "[+] ", "[$] ", "[~] " },{"[_] ", "[_] ", "[!] ", "[*] ", "[-] ", "[#] ", "[>] ", "[+] ", "[$] ", "[~] " },{"[_] ", "[_] ", "[!] ", "[*] ", "[-] ", "[#] ", "[>] ", "[+] ", "[$] ", "[~] " },{"[_] ", "[_] ", "[!] ", "[*] ", "[-] ", "[#] ", "[>] ", "[+] ", "[$] ", "[~] " },{ "", "", "", "", "", "", "", "", "", "" },{ "[⛔]","[⛔]","[⛔]", "[✖ ]", "[⚠ ]", "[ℹ ]", "[✔ ]", "[ℹ ]", "[☁ ]", "[~~]"  }};
   1052 
   1053 //
   1054 static const char *LOG_DATE_FORMAT[LOG_INVALID_MODE] = { "%c\n", "CONCISE HAS NO DATE", "%y-%m-%d %H:%M:%S", "FUNC", "PROG", "%y-%m-%d %H:%M:%S", "VOID"};
   1055 
   1056 /**
   1057  * get current log symbols
   1058  */
   1059 int getLogSymbols(void) {
   1060 
   1061   return(logSymbols);
   1062 }
   1063 
   1064 /**
   1065  * set log symbols
   1066  *
   1067  * LOG_VERBOSE for words
   1068  * LOG_UTF8 for emojis
   1069  * LOG_VOID for no symbols
   1070  * LOG_INVALID_MODE (reset log symbols) for default log mode symbols
   1071  * anything else (LOG_CONCISE,...) for symbols (!*+->~)
   1072  *
   1073  * default is default log mode symbols
   1074  */
   1075 void setLogSymbols(int mode) {
   1076 
   1077   if (mode <= LOG_INVALID_MODE) {
   1078     logSymbols = mode;
   1079   }
   1080   else {
   1081     logSymbols = LOG_INVALID_MODE;
   1082 }
   1083   }
   1084 
   1085 /**
   1086  * get current max log level
   1087  *
   1088  * default is LOG_INVALID, to show all log levels
   1089  * -1 hides all logs
   1090  */
   1091 int getMaxLogLevel(void) {
   1092 
   1093   return(logMaxLevel);
   1094 }
   1095 
   1096 /**
   1097  * set max log level
   1098  * logs above logMaxLevel are skipped
   1099  *
   1100  * default is LOG_INVALID, to show all log levels
   1101  * LOG_DISABLE hides all logs
   1102  *
   1103  * \param
   1104  *   logLevel from LOG_DISABLE to LOG_INVALID
   1105  */
   1106 void setMaxLogLevel(int logLevel) {
   1107 
   1108   logMaxLevel = logLevel;
   1109 }
   1110 
   1111 /**
   1112  * set log file
   1113  * the logs are appended to all log files set with this function
   1114  *
   1115  * there is a maximum of 15 log files
   1116  *
   1117  * \return
   1118  *    log file handle
   1119  *    NULL when filename is NULL or more than 15 log files are set
   1120  */
   1121 FILE *setLogFile(char *filename) {
   1122 
   1123   if (!filename) {
   1124     return(NULL);
   1125   }
   1126 
   1127   if (_current_log_file >= 16) {
   1128     // we only support 16 different files
   1129     return(NULL);
   1130   }
   1131 
   1132   _logging_files[_current_log_file] = fopen(filename, "a+");
   1133   if (!_logging_files[_current_log_file]) {
   1134     pFuncError
   1135     shEPrintfS("The path was: \"%s\"\n", filename);
   1136     return(NULL);
   1137   }
   1138   return(_logging_files[_current_log_file++]);
   1139 }
   1140 
   1141 /**
   1142  * close logfiles opened with setLogFile
   1143  */
   1144 void closeLogFiles(void) {
   1145 
   1146   rangeFrom(i, 1, _current_log_file) {
   1147     fclose(_logging_files[i]);
   1148     _logging_files[i] = NULL;
   1149   }
   1150 
   1151   _current_log_file = 1;;
   1152 }
   1153 
   1154 /**
   1155  * get current log mode (verbose, concise)
   1156  *
   1157  * \return
   1158  *   current mode LOG_VERBOSE, LOG_CONCISE, ...
   1159  */
   1160 int getLogMode(void) {
   1161 
   1162   return(_log_current_mode);
   1163 }
   1164 
   1165 /**
   1166  * set log mode LOG_VERBOSE, LOG_CONCISE, ..
   1167  *
   1168  * the default log mode is LOG_DATE
   1169  */
   1170 void setLogMode(int mode) {
   1171 
   1172   if (mode < 0 || mode >= LOG_INVALID_MODE) {
   1173     shPrintError
   1174     shEPrintfS("The available log modes are: LOG_VERBOSE, LOG_CONCISE, LOG_DATE, LOG_FUNC, LOG_PROG, LOG_PROGNDATE, LOG_PROGNFUNC, LOG_VOID and LOG_UTF8\n");
   1175   }
   1176   else {
   1177     _log_current_mode = mode;
   1178 }
   1179   }
   1180 
   1181 /**
   1182  * get current log long/short path value
   1183  *
   1184  * The default value is TRUE (short paths)
   1185  * TRUE shows short file paths in logs
   1186  * FALSE shows long file paths in logs
   1187  *
   1188  * \return
   1189  *   current long/short file path configuration value for VERBOSE mode
   1190  */
   1191 bool getLogShortPath(void) {
   1192 
   1193   return(_log_verbose_short_path);
   1194 }
   1195 
   1196 /**
   1197  * set log long/short file path value for VERBOSE mode
   1198  *
   1199  * TRUE shows short file paths in logs
   1200  * FALSE shows long file paths in logs
   1201  *
   1202  * the default long/short path value is TRUE
   1203  */
   1204 void setLogShortPath(bool shortPath) {
   1205 
   1206   _log_verbose_short_path = shortPath;
   1207 }
   1208 
   1209 /**
   1210  * get stdout state, when TRUE (default) all logs are printed to stdout
   1211  */
   1212 bool getLogStdout(void) {
   1213 
   1214   return(_logToStdout);
   1215 }
   1216 
   1217 /**
   1218  * enable/disable printing logs to stdout
   1219  *
   1220  * TRUE: print logs to stdout
   1221  * FALSE: print logs to files only
   1222  */
   1223 void setLogStdout(bool state) {
   1224 
   1225   _logToStdout = state;
   1226 }
   1227 
   1228 /**
   1229  * log to a file named progName.log
   1230  * Use closeLogFiles when finished logging
   1231  */
   1232 bool openProgLogFile(void) {
   1233 
   1234   if (!progName && !defaultProgName) {
   1235     logME(libsheepyErrorMask, "Program name is not set, call initLibsheepy or set prog name with setProgName");
   1236     return(false);
   1237   }
   1238 
   1239   char *s = formatS("%s.log", progName ? progName : defaultProgName);;
   1240 
   1241   if (!setLogFile(s)) {
   1242     logME(libsheepyErrorMask, "Couldn't open log file: %s", s);
   1243     free(s);
   1244     return(false);
   1245   }
   1246 
   1247   free(s);
   1248   return(true);
   1249 }
   1250 
   1251 /**
   1252  * enable/disable ansi color codes in logs
   1253  *
   1254  * TRUE: print colors
   1255  * FALSE: strip colors
   1256  */
   1257 void keepAnsiColorsInLog(bool state) {
   1258 
   1259   keepAnsiColors = state;
   1260 }
   1261 
   1262 /**
   1263  * print logging levels
   1264  * logs messages to all log file
   1265  *
   1266  * in LOG_VERBOSE mode, logs loglevel, filename, function name, time, line number and msg
   1267  * in LOG_CONCISE mode, logs loglevel and msg
   1268  *
   1269  * the maximum message length is 10240
   1270  *
   1271  */
   1272 #define MAX_MSG_LEN   10240
   1273 void _pLog(int loglevel, const char *file, const char *func, int line, const char *msg, ...) {
   1274   _logging_files[0] = stdout;;
   1275   va_list args;
   1276   char buffer[lenS(msg) + MAX_MSG_LEN];
   1277 
   1278   if (_current_log_file == 1 && !_logToStdout) {
   1279     // log to stdout is disabled and there are no log files
   1280     return;
   1281   }
   1282 
   1283   if (loglevel > logMaxLevel) {
   1284     // skip log above logMaxLevel
   1285     return;
   1286   }
   1287 
   1288   va_start(args, msg);
   1289 
   1290   // append the varargs to the buffer we want to print.
   1291   // this is so that our pipe chars don't get lost later.
   1292   // also, make sure we don't get an invalid loglevel.
   1293   if (!msg) {
   1294     buffer[0] = 0;
   1295   }
   1296   else {
   1297     vsnprintf(buffer, strlen(msg)+MAX_MSG_LEN, msg, args);
   1298   }
   1299   va_end(args);
   1300 
   1301   if (loglevel < 0 || loglevel >= LOG_INVALID) {
   1302     loglevel = LOG_INVALID;
   1303   }
   1304   if (_log_current_mode < 0 || _log_current_mode >= LOG_INVALID_MODE) {
   1305     _log_current_mode = LOG_VERBOSE;
   1306   }
   1307 
   1308   char clock[100];
   1309 
   1310   if (_log_current_mode == LOG_VERBOSE || _log_current_mode == LOG_DATE || _log_current_mode == LOG_PROGNDATE) {
   1311     time_t _clk = time(NULL);;
   1312     struct tm *_pClk = localtime(&_clk);;
   1313     strftime(clock, 100, LOG_DATE_FORMAT[_log_current_mode], _pClk);
   1314   }
   1315 
   1316   // set console color for printing the tag
   1317   if (_logToStdout && keepAnsiColors && _log_current_mode != LOG_VOID) {
   1318     switch (loglevel) {
   1319       case LOG_EMERGENCY:
   1320         printf(BLD RED);
   1321         break;
   1322       case LOG_ALERT:
   1323         printf(BLD RED);
   1324         break;
   1325       case LOG_CRITICAL:
   1326         printf(BLD RED);
   1327         break;
   1328       case LOG_ERROR:
   1329         printf(RED);
   1330         break;
   1331       case LOG_WARNING:
   1332         printf(YLW);
   1333         break;
   1334       case LOG_NOTICE:
   1335         printf(BLU);
   1336         break;
   1337       case LOG_PASS:
   1338         printf(BLD GRN);
   1339         break;
   1340       case LOG_INFO:
   1341         printf(BLU);
   1342         break;
   1343       case LOG_DEBUG:
   1344         printf(BLD CYN);
   1345         break;
   1346       case LOG_INVALID:
   1347       default:
   1348         printf(MGT);
   1349         break;
   1350     }
   1351   }
   1352 
   1353   if (!keepAnsiColors) {
   1354     if (!bStripColorsS(buffer)) {
   1355       return;
   1356   }
   1357     }
   1358 
   1359   // long or short file path in VERBOSE mode
   1360   if ((_log_current_mode == LOG_VERBOSE) && _log_verbose_short_path) {
   1361     const char *slashP[3]   = {NULL, NULL, NULL};
   1362     indexer idx;
   1363     indexerInit(idx, 3);
   1364     u16 count         = 0;
   1365     const char *slash = file;
   1366 
   1367     while (slash) {
   1368       slash = strchr(slash, '/');
   1369       if (!slash) {
   1370         break;
   1371       }
   1372       else {
   1373         slash++;
   1374       }
   1375       if (indexerIsFull(idx)) {
   1376         indexerDequeue(idx);
   1377       }
   1378       indexerPush(idx);
   1379       slashP[indexerLast(idx)] = slash;
   1380       count++;
   1381     }
   1382 
   1383     if (count > 2) {
   1384       // path has more than 2 slashes a/b/c.c
   1385       file = slashP[indexerFirst(idx)];
   1386       //puts(nS(slashP[indexerFirst(idx)]));
   1387       //puts(nS(slashP[indexerRef(idx,1)]));
   1388       //puts(nS(slashP[indexerLast(idx)]));
   1389   }
   1390     }
   1391 
   1392   int firstLogFile = _logToStdout ? 0 : 1;
   1393   int i;
   1394   if (_log_current_mode != LOG_VOID) {
   1395     int tagSymbols = logSymbols != LOG_INVALID_MODE ? logSymbols : _log_current_mode;
   1396 
   1397     // print the log tag
   1398     for (i=firstLogFile; i < _current_log_file; i++) {
   1399       fprintf(_logging_files[i], "%s", log_tags[tagSymbols][loglevel]);
   1400     }
   1401 
   1402     if (_logToStdout) {
   1403       printf(RST);
   1404   }
   1405     }
   1406 
   1407   /* logVar(_log_current_mode, "d"); */
   1408   /* puts(log_tags[_log_current_mode][loglevel]); */
   1409 
   1410   char *linePrefix = "";
   1411   switch(_log_current_mode) {
   1412     case LOG_VERBOSE:
   1413       for (i=firstLogFile; i < _current_log_file; i++) {
   1414         fprintf(_logging_files[i], "%s %s() (%s:%d) at %s |\t", progName ? progName : defaultProgName, func, file, line, clock);
   1415         linePrefix = " |\t";;
   1416       }
   1417       break;
   1418     case LOG_FUNC:
   1419       for (i=firstLogFile; i < _current_log_file; i++) {
   1420         fprintf(_logging_files[i], "%s %d: ", func, line);
   1421       }
   1422       break;
   1423     case LOG_PROG:
   1424       for (i=firstLogFile; i < _current_log_file; i++) {
   1425         fprintf(_logging_files[i], "%s: ", progName ? progName : defaultProgName);
   1426       }
   1427       break;
   1428     case LOG_PROGNDATE:
   1429       for (i=firstLogFile; i < _current_log_file; i++) {
   1430         fprintf(_logging_files[i], "%s %s: ", progName ? progName : defaultProgName, clock);
   1431       }
   1432       break;
   1433     case LOG_DATE:
   1434       for (i=firstLogFile; i < _current_log_file; i++) {
   1435         fprintf(_logging_files[i], "%s ", clock);
   1436       }
   1437       break;
   1438     case LOG_PROGNFUNC:
   1439       for (i=firstLogFile; i < _current_log_file; i++) {
   1440         fprintf(_logging_files[i], "%s %s %d: ", progName ? progName : defaultProgName, func, line);
   1441       }
   1442       break;
   1443     default:;
   1444       // don't print anything
   1445   }
   1446 
   1447 
   1448   // print the first line
   1449   if (buffer[0] == 0) {
   1450     // empty or NULL msg, print empty line
   1451     for (i=firstLogFile; i < _current_log_file; i++) {
   1452      fprintf(_logging_files[i], "\n");
   1453   }
   1454     }
   1455   else {
   1456     char *toLog = strtok(buffer, "\n");
   1457     for (i=firstLogFile; i < _current_log_file; i++) {
   1458      fprintf(_logging_files[i], "%s\n", toLog);
   1459     }
   1460 
   1461     // for these next lines, add a pipe and tab once.
   1462     toLog = strtok(NULL, "\n");
   1463     while (toLog) {
   1464       for (i=firstLogFile; i < _current_log_file; i++) {
   1465         fprintf(_logging_files[i], "%s%s\n", linePrefix, toLog);
   1466       }
   1467       toLog = strtok(NULL, "\n");
   1468   }
   1469     }
   1470 
   1471   for(i = 1; i <_current_log_file; i++) {;
   1472     // write log files immediately
   1473     fflush(_logging_files[i]);
   1474   }
   1475 }
   1476 
   1477 #if (!(__APPLE__ || __FreeBSD__ || __TERMUX__ || __OpenBSD__ || __DragonFly__ || MUSL_LIBC || __sun__ || __HAIKU__))
   1478 /**
   1479  * printf RGB Colors
   1480  *
   1481  * %k and %K type specifier to GNU printf for RBG colors
   1482  *
   1483  * - %k foreground hex color
   1484  * - %K background hex color
   1485  *
   1486  * Example:
   1487  * printf("%k%KRGB color" RST, 0x99EEFF, 0x666666);
   1488  */
   1489 
   1490 
   1491 #define TERMRGB   "\x1b[38;2;"
   1492 #define BGTERMRGB   "\x1b[48;2;"
   1493 
   1494 /**
   1495  * %k printf type specifier, RGB foreground, uint32_t
   1496  * 0x00RRGGBB
   1497  */
   1498 int print_k(FILE *stream, const struct printf_info *info, const void *const *args) {
   1499   u32 rgbColor;
   1500   char b[20];
   1501   int len;
   1502 
   1503   rgbColor = *((const u32*) args[0]);
   1504   snprintf(b, sizeof(b), TERMRGB "%u;%u;%um", rgbColor>>16, (rgbColor&0xFF00)>>8, rgbColor&0xFF);
   1505 
   1506   /* Pad to the minimum field width and print to the stream. */
   1507   //len = fprintf(stream, "%*s", (info->left ? -info->width : info->width), b)
   1508   sheepyRGBFP;
   1509   return(len);
   1510 }
   1511 
   1512 /**
   1513  * %K printf type specifier, RGB background, uint32_t
   1514  * 0x00RRGGBB
   1515  */
   1516 int print_K(FILE *stream, const struct printf_info *info, const void *const *args) {
   1517   u32 rgbColor;
   1518   char b[20];
   1519   int len;
   1520 
   1521   rgbColor = *((const u32*) args[0]);
   1522   snprintf(b, sizeof(b), BGTERMRGB "%u;%u;%um", rgbColor>>16, (rgbColor&0xFF00)>>8, rgbColor&0xFF);
   1523 
   1524   /* Pad to the minimum field width and print to the stream. */
   1525   //len = fprintf(stream, "%*s", (info->left ? -info->width : info->width), b)
   1526   sheepyRGBFP;
   1527   return(len);
   1528 }
   1529 
   1530 /**
   1531  * procress printf argument
   1532  */
   1533 int print_k_arginfo(const struct printf_info *info UNUSED, size_t n, int *argtypes, int* size) {
   1534 
   1535   if (n > 0) {
   1536     argtypes[0] = PA_POINTER;
   1537     size[0]     = sizeof(u32);
   1538   }
   1539   return(1);
   1540 }
   1541 
   1542 /**
   1543  * %b printf type specifier, print bool as FALSE/TRUE
   1544  */
   1545 int print_b(FILE *stream, const struct printf_info *info, const void *const *args) {
   1546   bool value;
   1547   int len;
   1548 
   1549   value = *((const bool*) args[0]);
   1550 
   1551   /* Pad to the minimum field width and print to the stream. */
   1552   //len = fprintf(stream, "%*s", (info->left ? -info->width : info->width), boolS(value))
   1553   sheepyBOOLFP;
   1554   return(len);
   1555 }
   1556 
   1557 /**
   1558  * procress printf argument
   1559  */
   1560 int print_b_arginfo(const struct printf_info *info UNUSED, size_t n, int *argtypes, int* size) {
   1561 
   1562   if (n > 0) {
   1563     argtypes[0] = PA_CHAR;
   1564     size[0]     = sizeof(bool);
   1565   }
   1566   return(1);
   1567 }
   1568 
   1569 #endif
   1570 // #if __APPLE__ || __FreeBSD__ || __TERMUX___ || __OpenBSD__ || __DragonFly__ || MUSL_LIBC || __sun__ || __HAIKU__
   1571 
   1572 
   1573 static const char sheepyBuild[] = "/.sheepy/build";
   1574 
   1575 /**
   1576  * initialize libsheepy (optional, for debug)
   1577  *
   1578  * initialize segfault handler for crash debug
   1579  * the segfault handler prints the line and file where the segfault occured
   1580  *
   1581  * initialize the fibers
   1582  * initialize libsheepyObject
   1583  */
   1584 #if ((__APPLE__ || __FreeBSD__ || __TERMUX__ || __OpenBSD__ || __DragonFly__ || MUSL_LIBC || __sun__ || __HAIKU__))
   1585 void initLibsheepyF(const char *progPath, initLibsheepyObjectP initF) {
   1586 
   1587   // no buffering if output is sent to file, this makes everything
   1588   // a bit slower, but it is possible to see where the code fails
   1589   if (!isatty(1)) {
   1590     setbuf(stdout, NULL);
   1591   }
   1592 
   1593   libSheepyArg0     = progPath;
   1594   libSheepyProgPath = findS(progPath, sheepyBuild);;
   1595   if (!libSheepyProgPath) {
   1596     libSheepyProgPath = progPath;
   1597   }
   1598   else {
   1599     // when progPath had sheepyBuild: progPath = /home/USER/.sheepy/build/home/USER/git/sw/PRG/PRG
   1600     // keep only the end of the path which is the source path
   1601     // libSheepyProgPath = /home/USER/git/sw/PRG/PRG
   1602     libSheepyProgPath += sizeof(sheepyBuild)-1;
   1603   }
   1604 
   1605   // set defaultProgName as basename progPath
   1606   // defaultProgName is the string after the last /
   1607   rangeDown(i, (ssize_t)strlen(libSheepyProgPath)) {
   1608     if (libSheepyProgPath[i] == '/') {
   1609       defaultProgName = libSheepyProgPath + i + 1;
   1610       break;
   1611     }
   1612   }
   1613   if (!defaultProgName) {
   1614     defaultProgName = libSheepyProgPath;
   1615   }
   1616 
   1617   // segfault signal
   1618   struct sigaction sa = init0Var;
   1619   sigemptyset(&sa.sa_mask);
   1620   sa.sa_sigaction = segfault_sigaction;;
   1621   sa.sa_flags   = SA_SIGINFO;;
   1622   sigaction(SIGSEGV, &sa, &default_sa);
   1623 
   1624   // fibers
   1625   staticArrayInit(fibers.L);
   1626   staticArrayInit(fibers.startL);
   1627 
   1628   // free internal buffers
   1629   atexit(finalizeLibsheepyCharAtExit);
   1630 
   1631 
   1632   // register %k %K type specifiers in printf for RGB colors
   1633   // not available in macos - register_printf_specifier('k', print_k, print_k_arginfo);
   1634   // not available in macos - register_printf_specifier('K', print_K, print_k_arginfo);
   1635   // register %b type specifiers in printf for bool as TRUE/FALSE
   1636   // not available in macos - register_printf_specifier('b', print_b, print_b_arginfo);
   1637 
   1638   if (initF) {
   1639     initF();
   1640 }
   1641   }
   1642 
   1643 #else // #if ((__APPLE__ || __FreeBSD__ || __TERMUX__ || __OpenBSD__ || __DragonFly__ || MUSL_LIBC || __sun__ || __HAIKU__))
   1644 void initLibsheepyF(const char *progPath, initLibsheepyObjectP initF) {
   1645 
   1646   // no buffering if output is sent to file, this makes everything
   1647   // a bit slower, but it is possible to see where the code fails
   1648   if (!isatty(STDOUT_FILENO)) {
   1649     setbuf(stdout, NULL);
   1650   }
   1651 
   1652   libSheepyArg0     = progPath;
   1653   libSheepyProgPath = findS(progPath, sheepyBuild);;
   1654   if (!libSheepyProgPath) {
   1655     libSheepyProgPath = progPath;
   1656   }
   1657   else {
   1658     // when progPath had sheepyBuild: progPath = /home/USER/.sheepy/build/home/USER/git/sw/PRG/PRG
   1659     // keep only the end of the path which is the source path
   1660     // libSheepyProgPath = /home/USER/git/sw/PRG/PRG
   1661     libSheepyProgPath += sizeof(sheepyBuild)-1;
   1662   }
   1663 
   1664   // set defaultProgName as basename progPath
   1665   // defaultProgName is the string after the last /
   1666   rangeDown(i, (ssize_t)strlen(libSheepyProgPath)) {
   1667     if (libSheepyProgPath[i] == '/') {
   1668       defaultProgName = (libSheepyProgPath + i + 1);
   1669       break;
   1670     }
   1671   }
   1672   if (!defaultProgName) {
   1673     defaultProgName = libSheepyProgPath;
   1674   }
   1675 
   1676   // segfault signal
   1677   struct sigaction sa = init0Var;
   1678   sigemptyset(&sa.sa_mask);
   1679   sa.sa_sigaction = segfault_sigaction;;
   1680   sa.sa_flags   = SA_SIGINFO;;
   1681   sigaction(SIGSEGV, &sa, &default_sa);
   1682 
   1683   // fibers
   1684   staticArrayInit(fibers.L);
   1685   staticArrayInit(fibers.startL);
   1686 
   1687   // free insternal buffers
   1688   atexit(finalizeLibsheepyCharAtExit);
   1689 
   1690 
   1691   // register %k %K type specifiers in printf for RGB colors
   1692   register_printf_specifier('k', print_k, print_k_arginfo); {
   1693   register_printf_specifier('K', print_K, print_k_arginfo); {
   1694   // register %b type specifiers in printf for bool as TRUE/FALSE
   1695   register_printf_specifier('b', print_b, print_b_arginfo); {
   1696 
   1697   if (initF) {
   1698     initF();
   1699 }
   1700   }
   1701   }
   1702   }
   1703   }
   1704 
   1705 #endif
   1706 // #if (__APPLE__ || __FreeBSD__ || __TERMUX__ || __OpenBSD__ || __DragonFly__ || MUSL_LIBC || __sun__ || __HAIKU__)
   1707 
   1708 /**
   1709  * finalize libsheepy char at exit
   1710  *
   1711  * free internal buffers in this file:
   1712  *
   1713  * realprogpath
   1714  * urandomFp software random file
   1715  *
   1716  */
   1717 void finalizeLibsheepyCharAtExit(void) {
   1718 
   1719   free(progName);
   1720   freeRealProgPath();
   1721   randomUrandomClose();
   1722 }
   1723 
   1724 /**
   1725  * get current stack limit
   1726  *
   1727  * \return
   1728  *   current stack limit
   1729  *   -1 unlimited
   1730  *   0 when error
   1731  */
   1732 int64_t getStackLimit(void) {
   1733   struct rlimit limit;
   1734 
   1735   if (getrlimit(RLIMIT_STACK, &limit) == -1) {
   1736     pFuncError
   1737     return(0);
   1738   }
   1739   return(limit.rlim_cur != RLIM_INFINITY ? (i64) limit.rlim_cur : -1);;
   1740 }
   1741 
   1742 /**
   1743  * set stack limit
   1744  *
   1745  * \param
   1746  *   stackSize stack size in bytes, set -1 for unlimited size
   1747  * \return
   1748  *   !0 when ok
   1749  *   0 when it failed
   1750  */
   1751 int setStackLimit(int64_t stackSize) {
   1752   struct rlimit limit;
   1753 
   1754   if (getrlimit(RLIMIT_STACK, &limit) == -1) {
   1755     pFuncError
   1756     return(0);
   1757   }
   1758 
   1759   if (stackSize == -1) {
   1760     limit.rlim_cur = RLIM_INFINITY;
   1761   }
   1762   else {
   1763     limit.rlim_cur = (u64)stackSize;
   1764   }
   1765 
   1766   if (setrlimit(RLIMIT_STACK, &limit) == -1) {
   1767     pFuncError
   1768     return(0);
   1769   }
   1770 
   1771   return(1);
   1772 }
   1773 
   1774 /**
   1775  * enable core dump
   1776  *
   1777  * change core dump size to infinity to enable core dump.
   1778  * After the program receives a signal generating core dump,
   1779  * a core file is written to disk and can be open with gdb
   1780  *
   1781  * \return
   1782  *   !0 when ok
   1783  *   0 when it failed
   1784  */
   1785 int enableCoreDump(void) {
   1786 
   1787   // enable core dump
   1788   struct rlimit limit;
   1789   if (getrlimit(RLIMIT_CORE, &limit) == -1) {
   1790     pFuncError
   1791     return(0);
   1792   }
   1793 
   1794   // dump the complete process memory
   1795   limit.rlim_cur = RLIM_INFINITY;
   1796   if (setrlimit(RLIMIT_CORE, &limit) == -1) {
   1797     pFuncError
   1798     return(0);
   1799   }
   1800 
   1801   return(1);
   1802 }
   1803 
   1804 
   1805 /**
   1806  * get program name
   1807  *
   1808  * this program name showing in the logs
   1809  */
   1810 const char *getProgName(void) {
   1811 
   1812   return(progName ? progName : defaultProgName);
   1813 }
   1814 
   1815 /**
   1816  * set program name
   1817  *
   1818  * this program name showing in the logs
   1819  */
   1820 bool setProgName(const char *name) {
   1821 
   1822   // sanity
   1823   if (!name) {
   1824     return(false);
   1825   }
   1826 
   1827   free(progName);
   1828   progName = strdup(name);
   1829 
   1830   return(true);
   1831 }
   1832 
   1833 /**
   1834  * set default program name
   1835  *
   1836  * this program name showing in the logs
   1837  */
   1838 void setDefaultProgName(void) {
   1839 
   1840   freen(progName);
   1841 }
   1842 
   1843 /**
   1844  * free ProgName
   1845  * if set with setProgName
   1846  */
   1847 void freeProgName(void) {
   1848 
   1849   freen(progName);
   1850 }
   1851 
   1852 /**
   1853  * get program path
   1854  * When initLibsheepy is called before this function, it returns the given program path.
   1855  * When initLibsheepy has not been called before this function, it returns the real program path.
   1856  *
   1857  * \return
   1858  *    program path or real program path (do not free this pointer)
   1859  */
   1860 const char *getProgPath(void) {
   1861 
   1862   if (libSheepyProgPath) {
   1863     return(libSheepyProgPath);
   1864   }
   1865   else {
   1866     return(getRealProgPath());
   1867 }
   1868   }
   1869 
   1870 /**
   1871  * get real program path
   1872  * The first call allocates libSheepyRealProgPath, it is freed with freeRealProgPath
   1873  *
   1874  * \return
   1875  *   real program path (do not free this pointer)
   1876  */
   1877 const char *getRealProgPath(void) {
   1878 
   1879   if (!libSheepyRealProgPath) {
   1880     char realProgPath[8192];
   1881     realpath("/proc/self/exe", realProgPath);
   1882     libSheepyRealProgPath = strdup(realProgPath);
   1883   }
   1884   return(libSheepyRealProgPath);
   1885 }
   1886 
   1887 /**
   1888  * free real program path
   1889  * finalizeLibsheepy calls this function
   1890  */
   1891 void freeRealProgPath(void) {
   1892 
   1893   free(libSheepyRealProgPath);
   1894   libSheepyRealProgPath = NULL;
   1895 }
   1896 
   1897 /**
   1898  * run system command and free command buffer
   1899  * a message is printed when an error occurs
   1900  *
   1901  * this function is called from the systemNFree macro
   1902  *
   1903  * \param
   1904  *   command command to run in the shell
   1905  * \return
   1906  *   0 success
   1907  *   command error code
   1908  */
   1909 int systemNFreeF(char *command, int line, const char *thisFunc, const char *thisFileName) {
   1910   int r;
   1911 
   1912   r = system(command);
   1913   if (r) {
   1914     logME(libsheepyErrorMask, "\nSystem Error at %d, %s, %s. The command was: \"%s\"\n", line, thisFunc, thisFileName, command);
   1915   }
   1916   free(command);
   1917   return(r);
   1918 }
   1919 
   1920 /**
   1921  * get modification time for path
   1922  *
   1923  * \param
   1924  *   path
   1925  * \return
   1926  *   modification time
   1927  *   0 when an error occured
   1928  */
   1929 time_t getModificationTime(const char *path) {
   1930 
   1931   if (!path) {
   1932     return(0);
   1933   }
   1934 
   1935   struct stat fst;
   1936   if (stat(path, &fst) == -1) {
   1937     pFuncError
   1938     shEPrintfS("The path was: \"%s\"\n", path);
   1939     return(0);
   1940   }
   1941   return(fst.st_mtime);
   1942 }
   1943 
   1944 /**
   1945  * set modification time for path
   1946  *
   1947  * \param
   1948  *   path
   1949  * \param
   1950  *   mtime (for example, from the getModificationTime function)
   1951  * \return
   1952  *   1 ok
   1953  *   0 when an error occured
   1954  */
   1955 int setModificationTime(const char *path, time_t mtime) {
   1956 
   1957   if (!path) {
   1958     return(0);
   1959   }
   1960 
   1961   struct timeval times[2];
   1962   times[0].tv_usec = 0;
   1963   times[0].tv_sec  = mtime;
   1964   times[1]         = times[0];
   1965   if (utimes(path, times) == -1) {
   1966     pFuncError
   1967     shEPrintfS("The path was: \"%s\"\n", path);
   1968     return(0);
   1969   }
   1970   return(1);
   1971 }
   1972 
   1973 /**
   1974  * is path readable
   1975  *
   1976  * \return
   1977  * true when path is readable
   1978  */
   1979 bool isReadable(const char *path) {
   1980 
   1981   if (!path) {
   1982     return(false);
   1983   }
   1984 
   1985   if (access(path, R_OK) == -1) {
   1986     return(false);
   1987   }
   1988 
   1989   return(true);
   1990 }
   1991 
   1992 
   1993 /**
   1994  * is path writable
   1995  *
   1996  * \return
   1997  * true when path is writable
   1998  */
   1999 bool isWritable(const char *path) {
   2000 
   2001   if (!path) {
   2002     return(false);
   2003   }
   2004 
   2005   if (access(path, W_OK) == -1) {
   2006     return(false);
   2007   }
   2008 
   2009   return(true);
   2010 }
   2011 
   2012 
   2013 /**
   2014  * is path executable
   2015  *
   2016  * \return
   2017  * true when path is executable
   2018  */
   2019 bool isExecutable(const char *path) {
   2020 
   2021   if (!path) {
   2022     return(false);
   2023   }
   2024 
   2025   if (access(path, X_OK) == -1) {
   2026     return(false);
   2027   }
   2028 
   2029   return(true);
   2030 }
   2031 
   2032 
   2033 /**
   2034  * compare modification times for path1 and path2
   2035  *
   2036  * \param
   2037  *   path1
   2038  * \param
   2039  *   path2
   2040  * \return
   2041  *   true when mtime is equal for path1 and path2
   2042  *   false when mtime is different for path1 and path2 or when there is an error
   2043  */
   2044 bool equalModificationTimes(const char *path1, const char *path2) {
   2045 
   2046   if (!path1 || !path2) {
   2047     return(false);
   2048   }
   2049 
   2050   time_t t1 = getModificationTime(path1); {
   2051   time_t t2 = getModificationTime(path2); {
   2052 
   2053   if (!t1 || !t2) {
   2054     return(false);
   2055   }
   2056   return(t1 == t2);;
   2057 }
   2058   }
   2059   }
   2060 
   2061 /**
   2062  * get current unix time in seconds
   2063  *
   2064  * time_t is either int32_t or int64_t
   2065  */
   2066 time_t getCurrentUnixTime(void) {
   2067 
   2068   return(time(NULL));
   2069 }
   2070 
   2071 /**
   2072  * convert date string to unix time
   2073  *
   2074  * \param
   2075  *   date string
   2076  * \param
   2077  *   format for strptime
   2078  * \return
   2079  *   time
   2080  *   -1 error
   2081  *
   2082  */
   2083 time_t strToUnixTime(const char *date, const char *format) {
   2084   struct tm tm = init0Var;;
   2085   time_t r;
   2086 
   2087   // sanity checks
   2088   if (!date || !format) {
   2089     return(-1);
   2090   }
   2091 
   2092   if ((strptime(date, format, &tm))) {
   2093     r = mktime(&tm);
   2094   }
   2095   else {
   2096     shPrintError;
   2097     shEPrintfS("strptime failed.\nThe date string is: \"%s\"\nThe format string is: \"%s\"\n", date, format);
   2098     return(-1);
   2099   }
   2100   return(r);
   2101 }
   2102 
   2103 /**
   2104  * time To String
   2105  * convert unix time to string
   2106  * (ctime is not used here because it adds \n at the end of the string)
   2107  *
   2108  * \param
   2109  *   unix time to convert
   2110  * \return
   2111  *   string representing the unix time in ctime format (Wed Dec 12 11:44:08 2018), you must free the pointer
   2112  */
   2113 char *timeToS(const time_t t) {
   2114   struct tm lt;
   2115   char timeBuf[80];
   2116 
   2117   localtime_r(&t, &lt);
   2118   strftime(timeBuf, sizeof(timeBuf), "%c", &lt);
   2119   return(strdup(timeBuf));
   2120 }
   2121 
   2122 char *bTimeToS(char *dst, const time_t t) {
   2123   struct tm lt;
   2124 
   2125   localtime_r(&t, &lt);
   2126   strftime(dst, 80, "%c", &lt);
   2127   return(dst);
   2128 }
   2129 
   2130 char *bLTimeToS(char *dst, size_t dstSize, const time_t t) {
   2131   struct tm lt;
   2132 
   2133   localtime_r(&t, &lt);
   2134   strftime(dst, dstSize, "%c", &lt);
   2135   return(dst);
   2136 }
   2137 
   2138 /**
   2139  * time To Year-Month-Day Hour:Minute:Second String
   2140  * convert unix time to string
   2141  *
   2142  * \param
   2143  *   unix time to convert
   2144  * \return
   2145  *   string representing the unix time, you must free the pointer
   2146  */
   2147 char *timeToYMDS(const time_t t) {
   2148   struct tm lt;
   2149   char timeBuf[80];
   2150 
   2151   localtime_r(&t, &lt);
   2152   strftime(timeBuf, sizeof(timeBuf), "%Y-%m-%d %H:%M:%S", &lt);
   2153   return(strdup(timeBuf));
   2154 }
   2155 
   2156 char *bTimeToYMDS(char *dst, const time_t t) {
   2157   struct tm lt;
   2158 
   2159   localtime_r(&t, &lt);
   2160   strftime(dst, 80, "%Y-%m-%d %H:%M:%S", &lt);
   2161   return(dst);
   2162 }
   2163 
   2164 char *bLTimeToYMDS(char *dst, size_t dstSize, const time_t t) {
   2165   struct tm lt;
   2166 
   2167   localtime_r(&t, &lt);
   2168   strftime(dst, dstSize, "%Y-%m-%d %H:%M:%S", &lt);
   2169   return(dst);
   2170 }
   2171 
   2172 /**
   2173  * get current date in ctime format (Wed Dec 12 11:44:08 2018)
   2174  *
   2175  * you must free the pointer
   2176  */
   2177 char *getCurrentDate(void) {
   2178   char clock[80];
   2179 
   2180   time_t _clk = time(NULL);;
   2181   struct tm *_pClk = localtime(&_clk);;
   2182   strftime(clock, sizeof clock, "%c", _pClk);
   2183   return(strdup(clock));
   2184 }
   2185 
   2186 char *bGetCurrentDate(char *dst) {
   2187 
   2188   if (!dst) {
   2189     return(NULL);
   2190   }
   2191   time_t _clk = time(NULL);;
   2192   struct tm *_pClk = localtime(&_clk);;
   2193   strftime(dst, 80, "%c", _pClk);
   2194   return(dst);
   2195 }
   2196 
   2197 char *bLGetCurrentDate(char *dst, size_t dstSize) {
   2198 
   2199   if (!dst) {
   2200     return(NULL);
   2201   }
   2202   time_t _clk = time(NULL);;
   2203   struct tm *_pClk = localtime(&_clk);;
   2204   strftime(dst, dstSize, "%c", _pClk);
   2205   return(dst);
   2206 }
   2207 
   2208 /**
   2209  * get current date in Y-m-d H:M:S format
   2210  *
   2211  * you must free the pointer
   2212  */
   2213 char *getCurrentDateYMD(void) {
   2214   char clock[80];
   2215 
   2216   time_t _clk = time(NULL);;
   2217   struct tm *_pClk = localtime(&_clk);;
   2218   strftime(clock, sizeof clock, "%Y-%m-%d %H:%M:%S", _pClk);
   2219   return(strdup(clock));
   2220 }
   2221 
   2222 char *bGetCurrentDateYMD(char *dst) {
   2223 
   2224   if (!dst) {
   2225     return(NULL);
   2226   }
   2227   time_t _clk = time(NULL);;
   2228   struct tm *_pClk = localtime(&_clk);;
   2229   strftime(dst, 80, "%Y-%m-%d %H:%M:%S", _pClk);
   2230   return(dst);
   2231 }
   2232 
   2233 char *bLGetCurrentDateYMD(char *dst, size_t dstSize) {
   2234 
   2235   if (!dst) {
   2236     return(NULL);
   2237   }
   2238   time_t _clk = time(NULL);;
   2239   struct tm *_pClk = localtime(&_clk);;
   2240   strftime(dst, dstSize, "%Y-%m-%d %H:%M:%S", _pClk);
   2241   return(dst);
   2242 }
   2243 
   2244 /**
   2245  * sheepy dirname
   2246  *
   2247  * the returned string has to be freed
   2248  *
   2249  * \param
   2250  *   path
   2251  * \return
   2252  *   path without basename (last item in the path, you must free the pointer)
   2253  *   "./" when path is blank or when there is only one item in the path
   2254  *   NULL when path is NULL
   2255  */
   2256 char *shDirname(const char *path) {
   2257   char *dir = NULL;
   2258 
   2259   if (!path) {
   2260     return(NULL);
   2261   }
   2262 
   2263   if (isBlankS(path)) {
   2264     return(strdup("./"));
   2265   }
   2266 
   2267   #if (__APPLE__ || __OpenBSD__ || __DragonFly__)
   2268   // pointer to internal buffer in dirname
   2269   char *tmp = dirname((char*)path);
   2270   dir       = strdup(tmp);
   2271   #elif (__TERMUX__)
   2272   // dirname is not implemented
   2273   dir        = strdup(path);
   2274   size_t len = strlen(path);
   2275   rangeDown(i, len) {
   2276     if (dir[i] == '/') {
   2277       dir[i] = 0;
   2278       break;
   2279     }
   2280   }
   2281   #else
   2282   dir = strdup(path);
   2283   dirname(dir);
   2284   #endif
   2285 
   2286   if (!dir) {
   2287     return(NULL);
   2288   }
   2289 
   2290   // is dirname empty?
   2291   #if (__OpenBSD__)
   2292   if ((dir[0]) and (dir[0] == '.' and dir[1] == 0)) {
   2293     iAppendS(&dir, "/");
   2294   }
   2295   #else
   2296   if (strEq(dir, path)) {
   2297     // set dir to pwd when dirname is empty
   2298     free(dir);
   2299     dir = strdup("./");
   2300   }
   2301   #endif
   2302   return(dir);
   2303 }
   2304 
   2305 /**
   2306  * buffer dirname
   2307  *
   2308  * the buffer size (path) must be at least 3 chars
   2309  *
   2310  * \param
   2311  *   path
   2312  * \return
   2313  *   path without basename (last item in the path)
   2314  *   "./" when path is blank or when there is only one item in the path
   2315  *   NULL when path is NULL
   2316  */
   2317 char *bDirname(char *path) {
   2318 
   2319   if (!path) {
   2320     return(NULL);
   2321   }
   2322 
   2323   if (isBlankS(path) || !strchr(path, '/')) {
   2324     // the path is blank or a filename
   2325     // set dir to pwd when dirname is empty
   2326     strcpy(path, "./");
   2327     return(path);
   2328   }
   2329 
   2330   #if (__OpenBSD__)
   2331   // when there is a trailing / return path unchanged
   2332   if (path[strlen(path)-1] == '/') {
   2333     return(path);
   2334   }
   2335   // pointer to internal buffer in dirname
   2336   char *tmp         = dirname((char*)path);
   2337   path[strlen(tmp)] = 0;
   2338   #elif (__APPLE__ || __FreeBSD__ || __DragonFly__)
   2339   // pointer to internal buffer in dirname
   2340   char *tmp         = dirname((char*)path);
   2341   path[strlen(tmp)] = 0;
   2342   #elif (__TERMUX__)
   2343   // dirname is not implemented
   2344   size_t len = strlen(path);
   2345   rangeDown(i, len) {
   2346     if (path[i] == '/') {
   2347       path[i] = 0;
   2348       break;
   2349     }
   2350   }
   2351   #else
   2352   dirname(path);
   2353   #endif
   2354   return(path);
   2355 }
   2356 
   2357 /**
   2358  * buffer size dirname
   2359  *
   2360  * the buffer size (path) must be at least 3 chars
   2361  *
   2362  * \param
   2363  *   path
   2364  * \param
   2365  *   pathSize path buffer size, the path strlen will be at most pathSize-1
   2366  * \return
   2367  *   path without basename (last item in the path)
   2368  *   "./" when path is blank or when there is only one item in the path
   2369  *   NULL when path is NULL
   2370  */
   2371 char *bLDirname(char *path, size_t pathSize) {
   2372 
   2373   if (!path || !pathSize) {
   2374     return(NULL);
   2375   }
   2376 
   2377   path[pathSize-1] = 0;
   2378   return(bDirname(path));
   2379 }
   2380 
   2381 #if (__OpenBSD__ || __HAIKU__)
   2382 /**
   2383  * expands ~/ ($HOME) or ~USER\n
   2384  * duplicate and expand path. The original remains unchanged.
   2385  *
   2386  * \param
   2387  *   path string
   2388  * \return
   2389  *   new string path or NULL (you must free the pointer)
   2390  */
   2391 char *expandHome(const char* path) {
   2392 
   2393   // sanity checks
   2394   if (!path) {
   2395     return(NULL);
   2396   }
   2397 
   2398   if (path[0] == 0) {
   2399     // path is empty
   2400     return(strdup(path));
   2401   }
   2402 
   2403   // steps
   2404   // determine path format
   2405   // set user name, either current user or user name in path
   2406   // add : at the end of username to match line in the /etc/passwd file
   2407   // find home path in the passwd file
   2408 
   2409   enum {noExpand, currentUser, otherUser};
   2410 
   2411   // determine path format
   2412   int status = noExpand;
   2413   if (path[0] == '~' and (path[1] == '/' or path[1] == 0)) {
   2414     // path="~/..."
   2415     status = currentUser;
   2416   }
   2417   elif (path[0] == '~' and path[1] != '/') {
   2418     // path="~USER..."
   2419     status = otherUser;
   2420   }
   2421 
   2422   // there is no tilde to expand, return path unchanged
   2423   if (status == noExpand) {
   2424     return(strdup(path));
   2425   }
   2426 
   2427   // set user name, either current user or user name in path
   2428   char   user[33]  = {0};
   2429   size_t pathStart = 0;
   2430 
   2431   if (status == currentUser) {
   2432     // use getlogin to find current username
   2433     // sizeof(user)-1 to keep a char tp append final ':'
   2434     if (getlogin_r(user, sizeof(user)-1)) {
   2435       // error
   2436       logME(libsheepyErrorMask, "getlogin for current user");
   2437     } {
   2438     pathStart = 1;
   2439   }
   2440       }
   2441   else {
   2442     // username is in path
   2443     // from index 1 (skip ~) to the first /
   2444     char *slash = findS(path, "/");
   2445     if (!slash) {
   2446       // no slash found, path is in the form: ~USER
   2447       // copy string after ~ to the end of the string
   2448       pErrorNULL(strLCpy(user,  sizeof(user)-1, path+1));
   2449       pathStart = strlen(path);
   2450     }
   2451     else {
   2452       // copy string after ~ to first slash
   2453       pathStart = slash - path;
   2454       pErrorNULL(strLNCat(user,  sizeof(user)-1, path+1, pathStart-1));
   2455   }
   2456     }
   2457 
   2458   // add : at the end of username to match line in passwd
   2459   size_t len  = strlen(user);
   2460   user[len]   = ':';
   2461   user[len+1] = 0;
   2462 
   2463 
   2464   // find home path in the passwd file
   2465   char **pwd = readText("/etc/passwd");
   2466 
   2467   if (!pwd) {
   2468     return(NULL);
   2469   }
   2470 
   2471   // result
   2472   char *r = NULL;
   2473 
   2474   forEachS(pwd, l) {
   2475     if (startsWithS(l, user)) {
   2476       // found the user
   2477       char **l_l = split(l, ":");
   2478       // copy home path to result
   2479       r = strdup(l_l[5]);
   2480       listFreeS(l_l);
   2481       break;
   2482   }
   2483     }
   2484 
   2485   listFreeS(pwd);
   2486 
   2487   if (!r) {
   2488     // user not found in this system
   2489     return(NULL);
   2490   }
   2491 
   2492   // append rest of the path to the result
   2493   iAppendS(&r, path + pathStart);
   2494 
   2495   return(r);
   2496 }
   2497 
   2498 #else
   2499 /**
   2500  * expands ~/ ($HOME) or ~USER\n
   2501  * duplicate and expand path. The original remains unchanged.
   2502  *
   2503  * \param
   2504  *   path string
   2505  * \return
   2506  *   new string path or NULL (you must free the pointer)
   2507  */
   2508 char *expandHome(const char* path) {
   2509   wordexp_t exp_result;
   2510   char *p = NULL;
   2511   char *r = NULL;
   2512 
   2513   // sanity checks
   2514   // duplicate path to be able to realloc (impossible when path is static)
   2515   // expand ~/ or ~USER
   2516 
   2517   // sanity checks
   2518   if (!path) {
   2519     return(NULL);
   2520   }
   2521   // duplicate path to be able to realloc (impossible when path is static)
   2522   p = strdup(path);
   2523 
   2524   if (path[0] == 0) {
   2525     // path is empty
   2526     // when path is empty, exp_result.we_wordv[0] is null and strlen segfaults
   2527     return(p);
   2528   }
   2529 
   2530   #if (!__TERMUX__)
   2531   // expand ~/
   2532   int status = wordexp(p, &exp_result, 0);;
   2533   switch (status) {
   2534     case WRDE_BADCHAR:
   2535       free(p);
   2536       shEPrintfS("expandHome error: unquoted invalid character\n");
   2537       shEPrintfS("The path was: \"%s\"\n", path);
   2538       return(NULL);
   2539     case WRDE_BADVAL:
   2540       free(p);
   2541       shEPrintfS("expandHome error: undefined shell variable\n");
   2542       shEPrintfS("The path was: \"%s\"\n", path);
   2543       return(NULL);
   2544     case WRDE_NOSPACE:
   2545       free(p);
   2546       shEPrintfS("expandHome error: out of memory\n");
   2547       shEPrintfS("The path was: \"%s\"\n", path);
   2548       return(NULL);
   2549     case WRDE_SYNTAX:
   2550       free(p);
   2551       shEPrintfS("expandHome error: syntax error\n");
   2552       shEPrintfS("The path was: \"%s\"\n", path);
   2553       return(NULL);
   2554     default:
   2555       break;
   2556   }
   2557   r = REALLOC(p, strlen(exp_result.we_wordv[0])+1);
   2558   if (!r) {
   2559     // free p when realloc fails
   2560     free(p);
   2561     return(NULL);
   2562   }
   2563   strcpy(r, exp_result.we_wordv[0]);
   2564   wordfree(&exp_result);
   2565   #else
   2566   iReplaceS(&p, "~", "/data/data/com.termux/files/home", 1);
   2567   r = p;
   2568   #endif
   2569   return(r);
   2570 }
   2571 
   2572 #endif
   2573 
   2574 #if (__OpenBSD__ || __HAIKU__)
   2575 /**
   2576  * expands ~/ ($HOME) or ~USER\n
   2577  *
   2578  * expand path.
   2579  *
   2580  * \param
   2581  *   path: string (this parameter is reallocated)
   2582  * \return
   2583  *   path modified path\n
   2584  *   NULL error
   2585  */
   2586 char *iExpandHome(char **path) {
   2587 
   2588   // sanity checks
   2589   if (!path || !*path) {
   2590     return(NULL);
   2591   }
   2592 
   2593 
   2594   if ((*path)[0] == 0) {
   2595     // path is empty
   2596     return(*path);
   2597   }
   2598 
   2599   // steps
   2600   // determine path format
   2601   // set user name, either current user or user name in path
   2602   // add : at the end of username to match line in the /etc/passwd file
   2603   // find home path in the passwd file
   2604 
   2605   enum {noExpand, currentUser, otherUser};
   2606 
   2607   // determine path format
   2608   int status = noExpand;
   2609   if ((*path)[0] == '~' and ((*path)[1] == '/' or (*path)[1] == 0)) {
   2610     // path="~/..."
   2611     status = currentUser;
   2612   }
   2613   elif ((*path)[0] == '~' and (*path)[1] != '/') {
   2614     // path="~USER..."
   2615     status = otherUser;
   2616   }
   2617 
   2618   // there is no tilde to expand, return path unchanged
   2619   if (status == noExpand) {
   2620     return(*path);
   2621   }
   2622 
   2623   // set user name, either current user or user name in path
   2624   char   user[33]  = {0};
   2625   size_t pathStart = 0;
   2626 
   2627   if (status == currentUser) {
   2628     // use getlogin to find current username
   2629     // sizeof(user)-1 to keep a char tp append final ':'
   2630     if (getlogin_r(user, sizeof(user)-1)) {
   2631       // error
   2632       logME(libsheepyErrorMask, "getlogin for current user");
   2633     } {
   2634     pathStart = 1;
   2635   }
   2636       }
   2637   else {
   2638     // username is in path
   2639     // from index 1 (skip ~) to the first /
   2640     char *slash = findS((*path), "/");
   2641     if (!slash) {
   2642       // no slash found, path is in the form: ~USER
   2643       // copy string after ~ to the end of the string
   2644       pErrorNULL(strLCpy(user,  sizeof(user)-1, (*path)+1));
   2645       pathStart = strlen(*path);
   2646     }
   2647     else {
   2648       // copy string after ~ to first slash
   2649       pathStart = slash - (*path);
   2650       pErrorNULL(strLNCat(user,  sizeof(user)-1, (*path)+1, pathStart-1));
   2651   }
   2652     }
   2653 
   2654   // add : at the end of username to match line in passwd
   2655   size_t len  = strlen(user);
   2656   user[len]   = ':';
   2657   user[len+1] = 0;
   2658 
   2659 
   2660   // find home path in the passwd file
   2661   char **pwd = readText("/etc/passwd");
   2662 
   2663   if (!pwd) {
   2664     return(NULL);
   2665   }
   2666 
   2667   // result
   2668   char *r = NULL;
   2669 
   2670   forEachS(pwd, l) {
   2671     if (startsWithS(l, user)) {
   2672       // found the user
   2673       char **l_l = split(l, ":");
   2674       // copy home path to result
   2675       r = strdup(l_l[5]);
   2676       listFreeS(l_l);
   2677       break;
   2678   }
   2679     }
   2680 
   2681   listFreeS(pwd);
   2682 
   2683   if (!r) {
   2684     // user not found in this system
   2685     return(NULL);
   2686   }
   2687 
   2688   // append rest of the path to the result
   2689   iAppendS(&r, (*path) + pathStart);
   2690 
   2691   free(*path);
   2692   *path = r;
   2693 
   2694   return(r);
   2695 }
   2696 
   2697 #else
   2698 /**
   2699  * expands ~/ ($HOME) or ~USER\n
   2700  *
   2701  * duplicate and expand path.
   2702  *
   2703  * \param
   2704  *   path: string (this parameter is reallocated)
   2705  * \return
   2706  *   path modified path\n
   2707  *   NULL error
   2708  */
   2709 char *iExpandHome(char **path) {
   2710   wordexp_t exp_result;
   2711 
   2712   // sanity checks
   2713   // duplicate path to be able to realloc (impossible when path is static)
   2714   // expand ~/ or ~USER
   2715 
   2716   // sanity checks
   2717   if (!path || !*path) {
   2718     return(NULL);
   2719   }
   2720 
   2721   if ((*path)[0] == 0) {
   2722     // path is empty
   2723     // when path is empty, exp_result.we_wordv[0] is null and strlen segfaults
   2724     return(*path);
   2725   }
   2726 
   2727   #if (!__TERMUX__)
   2728   // expand ~/
   2729   int status = wordexp(*path, &exp_result, 0);;
   2730   switch (status) {
   2731     case WRDE_BADCHAR:
   2732       shEPrintfS("iExpandHome error: unquoted invalid character\n");
   2733       shEPrintfS("The path was: \"%s\"\n", *path);
   2734       return(NULL);
   2735     case WRDE_BADVAL:
   2736       shEPrintfS("iExpandHome error: undefined shell variable\n");
   2737       shEPrintfS("The path was: \"%s\"\n", *path);
   2738       return(NULL);
   2739     case WRDE_NOSPACE:
   2740       shEPrintfS("iExpandHome error: out of memory\n");
   2741       shEPrintfS("The path was: \"%s\"\n", *path);
   2742       return(NULL);
   2743     case WRDE_SYNTAX:
   2744       shEPrintfS("iExpandHome error: syntax error\n");
   2745       shEPrintfS("The path was: \"%s\"\n", *path);
   2746       return(NULL);
   2747     default:
   2748       break;
   2749   }
   2750   char *tmp = REALLOC(*path, strlen(exp_result.we_wordv[0])+1);
   2751   if (!tmp) {
   2752     // realloc failed
   2753     return(NULL);
   2754   }
   2755   *path = tmp;
   2756   strcpy(*path, exp_result.we_wordv[0]);
   2757   wordfree(&exp_result);
   2758   #else
   2759   iReplaceS(path, "~", "/data/data/com.termux/files/home", 1);
   2760   #endif
   2761   return(*path);
   2762 }
   2763 #endif
   2764 
   2765 #if (__OpenBSD__ || __HAIKU__)
   2766 /**
   2767  * buffer expands ~/ ($HOME) or ~USER\n
   2768  *
   2769  * expand path
   2770  *
   2771  * \param
   2772  *   path: string
   2773  * \return
   2774  *   path modified path\n
   2775  *   NULL error
   2776  */
   2777 char *bExpandHome(char *path) {
   2778 
   2779   // sanity checks
   2780   if (!path) {
   2781     return(NULL);
   2782   }
   2783 
   2784   if (path[0] == 0) {
   2785     // path is empty
   2786     return(path);
   2787   }
   2788 
   2789   // steps
   2790   // determine path format
   2791   // set user name, either current user or user name in path
   2792   // add : at the end of username to match line in the /etc/passwd file
   2793   // find home path in the passwd file
   2794 
   2795   enum {noExpand, currentUser, otherUser};
   2796 
   2797   // determine path format
   2798   int status = noExpand;
   2799   if (path[0] == '~' and (path[1] == '/' or path[1] == 0)) {
   2800     // path="~/..."
   2801     status = currentUser;
   2802   }
   2803   elif (path[0] == '~' and path[1] != '/') {
   2804     // path="~USER..."
   2805     status = otherUser;
   2806   }
   2807 
   2808   // there is no tilde to expand, return path unchanged
   2809   if (status == noExpand) {
   2810     return(path);
   2811   }
   2812 
   2813   // set user name, either current user or user name in path
   2814   char   user[33]  = {0};
   2815   size_t pathStart = 0;
   2816 
   2817   if (status == currentUser) {
   2818     // use getlogin to find current username
   2819     // sizeof(user)-1 to keep a char tp append final ':'
   2820     if (getlogin_r(user, sizeof(user)-1)) {
   2821       // error
   2822       logME(libsheepyErrorMask, "getlogin for current user");
   2823     } {
   2824     pathStart = 1;
   2825   }
   2826       }
   2827   else {
   2828     // username is in path
   2829     // from index 1 (skip ~) to the first /
   2830     char *slash = findS(path, "/");
   2831     if (!slash) {
   2832       // no slash found, path is in the form: ~USER
   2833       // copy string after ~ to the end of the string
   2834       pErrorNULL(strLCpy(user,  sizeof(user)-1, path+1));
   2835       pathStart = strlen(path);
   2836     }
   2837     else {
   2838       // copy string after ~ to first slash
   2839       pathStart = slash - path;
   2840       pErrorNULL(strLNCat(user,  sizeof(user)-1, path+1, pathStart-1));
   2841   }
   2842     }
   2843 
   2844   // add : at the end of username to match line in passwd
   2845   size_t len  = strlen(user);
   2846   user[len]   = ':';
   2847   user[len+1] = 0;
   2848 
   2849 
   2850   // find home path in the passwd file
   2851   char **pwd = readText("/etc/passwd");
   2852 
   2853   if (!pwd) {
   2854     return(NULL);
   2855   }
   2856 
   2857   // result
   2858   char *r = NULL;
   2859 
   2860   forEachS(pwd, l) {
   2861     if (startsWithS(l, user)) {
   2862       // found the user
   2863       char **l_l = split(l, ":");
   2864       // copy home path to result
   2865       r = strdup(l_l[5]);
   2866       listFreeS(l_l);
   2867       break;
   2868   }
   2869     }
   2870 
   2871   listFreeS(pwd);
   2872 
   2873   if (!r) {
   2874     // user not found in this system
   2875     return(NULL);
   2876   }
   2877 
   2878   // append rest of the path to the result
   2879   iAppendS(&r, path + pathStart);
   2880 
   2881   strcpy(path, r);
   2882   free(r);
   2883   return(path);
   2884 }
   2885 
   2886 #else
   2887 /**
   2888  * buffer expands ~/ ($HOME) or ~USER\n
   2889  *
   2890  * expand path
   2891  *
   2892  * \param
   2893  *   path: string
   2894  * \return
   2895  *   path modified path\n
   2896  *   NULL error
   2897  */
   2898 char *bExpandHome(char *path) {
   2899   wordexp_t exp_result;
   2900 
   2901   // sanity checks
   2902   if (!path) {
   2903     return(NULL);
   2904   }
   2905 
   2906   if (path[0] == 0) {
   2907     // path is empty
   2908     // when path is empty, exp_result.we_wordv[0] is null and strlen segfaults
   2909     return(path);
   2910   }
   2911 
   2912   #if (!__TERMUX__)
   2913   // expand ~/
   2914   int status = wordexp(path, &exp_result, 0);;
   2915   switch (status) {
   2916     case WRDE_BADCHAR:
   2917       shEPrintfS("bExpandHome error: unquoted invalid character\n");
   2918       shEPrintfS("The path was: \"%s\"\n", path);
   2919       return(NULL);
   2920     case WRDE_BADVAL:
   2921       shEPrintfS("bExpandHome error: undefined shell variable\n");
   2922       shEPrintfS("The path was: \"%s\"\n", path);
   2923       return(NULL);
   2924     case WRDE_NOSPACE:
   2925       shEPrintfS("bExpandHome error: out of memory\n");
   2926       shEPrintfS("The path was: \"%s\"\n", path);
   2927       return(NULL);
   2928     case WRDE_SYNTAX:
   2929       shEPrintfS("bExpandHome error: syntax error\n");
   2930       shEPrintfS("The path was: \"%s\"\n", path);
   2931       return(NULL);
   2932     default:
   2933       break;
   2934   }
   2935   strcpy(path, exp_result.we_wordv[0]);
   2936   wordfree(&exp_result);
   2937   #else
   2938   bReplaceS(path, "~", "/data/data/com.termux/files/home", 1);
   2939   #endif
   2940   return(path);
   2941 }
   2942 #endif
   2943 
   2944 #if (__OpenBSD__ || __HAIKU__)
   2945 /**
   2946  * buffer size expands ~/ ($HOME) or ~USER\n
   2947  *
   2948  * expand path
   2949  *
   2950  * \param
   2951  *   path: string
   2952  * \param
   2953  *   pathSize path buffer size, the path strlen will be at most pathSize-1
   2954  * \return
   2955  *   path modified path\n
   2956  *   NULL error
   2957  */
   2958 char *bLExpandHome(char *path, size_t pathSize) {
   2959 
   2960   // sanity checks
   2961   if (!path) {
   2962     return(NULL);
   2963   }
   2964 
   2965   if (path[0] == 0) {
   2966     // path is empty
   2967     return(path);
   2968   }
   2969 
   2970   // steps
   2971   // determine path format
   2972   // set user name, either current user or user name in path
   2973   // add : at the end of username to match line in the /etc/passwd file
   2974   // find home path in the passwd file
   2975 
   2976   enum {noExpand, currentUser, otherUser};
   2977 
   2978   // determine path format
   2979   int status = noExpand;
   2980   if (path[0] == '~' and (path[1] == '/' or path[1] == 0)) {
   2981     // path="~/..."
   2982     status = currentUser;
   2983   }
   2984   elif (path[0] == '~' and path[1] != '/') {
   2985     // path="~USER..."
   2986     status = otherUser;
   2987   }
   2988 
   2989   // there is no tilde to expand, return path unchanged
   2990   if (status == noExpand) {
   2991     // make sure path is no longer than pathSize
   2992     path[pathSize-1] = 0;
   2993     return(path);
   2994   }
   2995 
   2996   // set user name, either current user or user name in path
   2997   char   user[33]  = {0};
   2998   size_t pathStart = 0;
   2999 
   3000   if (status == currentUser) {
   3001     // use getlogin to find current username
   3002     // sizeof(user)-1 to keep a char tp append final ':'
   3003     if (getlogin_r(user, sizeof(user)-1)) {
   3004       // error
   3005       logME(libsheepyErrorMask, "getlogin for current user");
   3006     } {
   3007     pathStart = 1;
   3008   }
   3009       }
   3010   else {
   3011     // username is in path
   3012     // from index 1 (skip ~) to the first /
   3013     char *slash = findS(path, "/");
   3014     if (!slash) {
   3015       // no slash found, path is in the form: ~USER
   3016       // copy string after ~ to the end of the string
   3017       pErrorNULL(strLCpy(user,  sizeof(user)-1, path+1));
   3018       pathStart = strlen(path);
   3019     }
   3020     else {
   3021       // copy string after ~ to first slash
   3022       pathStart = slash - path;
   3023       strLNCat(user,  sizeof(user)-1, path+1, pathStart-1);
   3024   }
   3025     }
   3026 
   3027   // add : at the end of username to match line in passwd
   3028   size_t len  = strlen(user);
   3029   user[len]   = ':';
   3030   user[len+1] = 0;
   3031 
   3032 
   3033   // find home path in the passwd file
   3034   char **pwd = readText("/etc/passwd");
   3035 
   3036   if (!pwd) {
   3037     return(NULL);
   3038   }
   3039 
   3040   // result
   3041   char *r = NULL;
   3042 
   3043   forEachS(pwd, l) {
   3044     if (startsWithS(l, user)) {
   3045       // found the user
   3046       char **l_l = split(l, ":");
   3047       // copy home path to result
   3048       r = strdup(l_l[5]);
   3049       listFreeS(l_l);
   3050       break;
   3051   }
   3052     }
   3053 
   3054   listFreeS(pwd);
   3055 
   3056   if (!r) {
   3057     // user not found in this system
   3058     return(NULL);
   3059   }
   3060 
   3061   // append rest of the path to the result
   3062   iAppendS(&r, path + pathStart);
   3063 
   3064   pErrorNULL(strLCpy(path, pathSize, r));
   3065   free(r);
   3066   return(path);
   3067 }
   3068 
   3069 #else
   3070 
   3071 /**
   3072  * buffer size expands ~/ ($HOME) or ~USER\n
   3073  *
   3074  * expand path
   3075  *
   3076  * \param
   3077  *   path: string
   3078  * \param
   3079  *   pathSize path buffer size, the path strlen will be at most pathSize-1
   3080  * \return
   3081  *   path modified path\n
   3082  *   NULL error
   3083  */
   3084 char *bLExpandHome(char *path, size_t pathSize) {
   3085   wordexp_t exp_result;
   3086 
   3087   // sanity checks
   3088   if (!path) {
   3089     return(NULL);
   3090   }
   3091 
   3092   if (path[0] == 0) {
   3093     // path is empty
   3094     // when path is empty, exp_result.we_wordv[0] is null and strlen segfaults
   3095     return(path);
   3096   }
   3097 
   3098   #if (!__TERMUX__)
   3099   // expand ~/
   3100   int status = wordexp(path, &exp_result, 0);;
   3101   switch (status) {
   3102     case WRDE_BADCHAR:
   3103       shEPrintfS("bExpandHome error: unquoted invalid character\n");
   3104       shEPrintfS("The path was: \"%s\"\n", path);
   3105       return(NULL);
   3106     case WRDE_BADVAL:
   3107       shEPrintfS("bExpandHome error: undefined shell variable\n");
   3108       shEPrintfS("The path was: \"%s\"\n", path);
   3109       return(NULL);
   3110     case WRDE_NOSPACE:
   3111       shEPrintfS("bExpandHome error: out of memory\n");
   3112       shEPrintfS("The path was: \"%s\"\n", path);
   3113       return(NULL);
   3114     case WRDE_SYNTAX:
   3115       shEPrintfS("bExpandHome error: syntax error\n");
   3116       shEPrintfS("The path was: \"%s\"\n", path);
   3117       return(NULL);
   3118     default:
   3119       break;
   3120   }
   3121   pErrorNULL(strLCpy(path, pathSize, exp_result.we_wordv[0]));
   3122   wordfree(&exp_result);
   3123   #else
   3124   bLReplaceS(path, pathSize, "~", "/data/data/com.termux/files/home", 1);
   3125   #endif
   3126   return(path);
   3127 }
   3128 #endif
   3129 
   3130 /**
   3131  * normalize path
   3132  *
   3133  * remove unecessary /, .. and .
   3134  * leading / is kept
   3135  * leading .. is kept
   3136  * leading . is removed
   3137  *
   3138  * '/../' becomes '/'
   3139  *
   3140  * \param
   3141  *   path
   3142  * \return
   3143  *   new normalized path (you must free the pointer)
   3144  *   NULL when path is NULL
   3145  */
   3146 char *normalizePath(const char *path) {
   3147 
   3148   // sanity checks
   3149   if (!path) {
   3150     return(NULL);
   3151   }
   3152 
   3153   if (isEmptyS(path)) {
   3154     return(strdup(""));
   3155   }
   3156 
   3157   // list path elements
   3158   char **pathL = split(path, "/");
   3159 
   3160   // remove empty elements
   3161   pErrorNULL(iListCompactS(&pathL));
   3162 
   3163   if (listIsEmptyS(pathL)) {
   3164     listFreeS(pathL);
   3165     // keep leading /
   3166     return(strdup("/"));
   3167   }
   3168 
   3169   // new path elements
   3170   char **list = NULL;
   3171 
   3172   // detect leading double dots
   3173   bool onlyLeadingDoubleDots = true;
   3174 
   3175   // add elements to list
   3176   forEachCharP(pathL, level) {
   3177     if (strEq(*level, "..")) {
   3178       if (onlyLeadingDoubleDots) {
   3179         // keep leading ..
   3180         pErrorNULL(listPushS(&list, ".."));
   3181       }
   3182       else {
   3183         // remove .. in path
   3184         char *s = listPopS(&list);
   3185         free(s);
   3186     }
   3187       }
   3188     else if (!strEq(*level, ".")) {
   3189       // remove . and add elements
   3190       pErrorNULL(listPushS(&list, *level));
   3191       // an element is pushed, so this is the end of leading double dots
   3192       onlyLeadingDoubleDots = false;
   3193   }
   3194     }
   3195 
   3196   if (listLengthS(list) == 1 && strEq(list[0], "..") && getS(path, 0) == '/') {
   3197     // handle ../ .. /.. /../
   3198     list[0][0] = 0;
   3199   }
   3200 
   3201   // handle /.: add empty string
   3202   if (strEq(path, "/.")) {
   3203     pErrorNULL(listPushS(&list, ""));
   3204   }
   3205 
   3206   // keep leading /
   3207   if (getS(path, 0) == '/') {
   3208     if (listIsEmptyS(list)) {
   3209       // .. cancelled path: /a/b/../..
   3210       listFreeManyS(pathL, list);
   3211       return(strdup("/"));
   3212     }
   3213     pErrorNULL(listPrependS(&list, ""));
   3214   }
   3215 
   3216   // create new path
   3217   char *r = join(list, "/");;
   3218   // keep order pathL, list because list can be NULL
   3219   // if it is first listFreeManyS stops early
   3220   listFreeManyS(pathL, list);
   3221   if (!r) {
   3222     return(strdup(""));
   3223   }
   3224   return(r);
   3225 }
   3226 
   3227 
   3228 /**
   3229  * normalize path
   3230  *
   3231  * remove unecessary /, .. and .
   3232  * leading / is kept
   3233  * leading .. is kept
   3234  * leading . is removed
   3235  *
   3236  * '/../' becomes '/'
   3237  *
   3238  * \param
   3239  *   path (this parameter is reallocated)
   3240  * \return
   3241  *   path modified path
   3242  *   NULL when path is NULL
   3243  */
   3244 char *iNormalizePath(char **path) {
   3245 
   3246   // sanity checks
   3247   if (!path || !*path) {
   3248     return(NULL);
   3249   }
   3250 
   3251   if (isEmptyS(*path)) {
   3252     pErrorNULL(iEmptySF(path));
   3253     return(*path);
   3254   }
   3255 
   3256   // list path elements
   3257   char **pathL = split(*path, "/");
   3258 
   3259   // remove empty elements
   3260   pErrorNULL(iListCompactS(&pathL));
   3261 
   3262   if (listIsEmptyS(pathL)) {
   3263     listFreeS(pathL);
   3264     // keep leading /
   3265     free(*path);
   3266     *path = strdup("/");
   3267     return(*path);
   3268   }
   3269 
   3270   // new path elements
   3271   char **list = NULL;
   3272 
   3273   // detect leading double dots
   3274   bool onlyLeadingDoubleDots = true;
   3275 
   3276   // add elements to list
   3277   forEachCharP(pathL, level) {
   3278     if (strEq(*level, "..")) {
   3279       if (onlyLeadingDoubleDots) {
   3280         // keep leading ..
   3281         pErrorNULL(listPushS(&list, ".."));
   3282       }
   3283       else {
   3284         // remove .. in path
   3285         char *s = listPopS(&list);
   3286         free(s);
   3287     }
   3288       }
   3289     else if (!strEq(*level, ".")) {
   3290       // remove . and add elements
   3291       pErrorNULL(listPushS(&list, *level));
   3292       // an element is pushed, so this is the end of leading double dots
   3293       onlyLeadingDoubleDots = false;
   3294   }
   3295     }
   3296 
   3297   if (listLengthS(list) == 1 && strEq(list[0], "..") && getS(*path, 0) == '/') {
   3298     // handle ../ .. /.. /../
   3299     list[0][0] = 0;
   3300   }
   3301 
   3302   // handle /.: add empty string
   3303   if (strEq(*path, "/.")) {
   3304     pErrorNULL(listPushS(&list, ""));
   3305   }
   3306 
   3307   // keep leading /
   3308   if (getS(*path, 0) == '/') {
   3309     if (listIsEmptyS(list)) {
   3310       // .. cancelled path: /a/b/../..
   3311       listFreeManyS(pathL, list);
   3312       free(*path);
   3313       *path = strdup("/");
   3314       return(*path);
   3315     }
   3316     pErrorNULL(listPrependS(&list, ""));
   3317   }
   3318 
   3319   // create new path
   3320   char *r = join(list, "/");;
   3321   // keep order pathL, list because list can be NULL
   3322   // if it is first listFreeManyS stops early
   3323   listFreeManyS(pathL, list);
   3324   free(*path);
   3325   if (!r) {
   3326     *path = strdup("");
   3327     return(*path);
   3328   }
   3329   *path = r;
   3330   return(*path);
   3331 }
   3332 
   3333 /**
   3334  * buffer normalize path
   3335  *
   3336  * remove unecessary /, .. and .
   3337  * leading / is kept
   3338  * leading .. is kept
   3339  * leading . is removed
   3340  *
   3341  * '/../' becomes '/'
   3342  *
   3343  * \param
   3344  *   path
   3345  * \return
   3346  *   path modified path
   3347  *   NULL when path is NULL
   3348  */
   3349 char *bNormalizePath(char *path) {
   3350 
   3351   // sanity checks
   3352   if (!path) {
   3353     return(NULL);
   3354   }
   3355 
   3356   if (isEmptyS(path)) {
   3357     bEmptyS(path);
   3358     return(path);
   3359   }
   3360 
   3361   // list path elements
   3362   char **pathL = split(path, "/");
   3363 
   3364   // remove empty elements
   3365   pErrorNULL(iListCompactS(&pathL));
   3366 
   3367   if (listIsEmptyS(pathL)) {
   3368     listFreeS(pathL);
   3369     // keep leading /
   3370     strcpy(path, "/");
   3371     return(path);
   3372   }
   3373 
   3374   // new path elements
   3375   char **list = NULL;
   3376 
   3377   // detect leading double dots
   3378   bool onlyLeadingDoubleDots = true;
   3379 
   3380   // add elements to list
   3381   forEachCharP(pathL, level) {
   3382     if (strEq(*level, "..")) {
   3383       if (onlyLeadingDoubleDots) {
   3384         // keep leading ..
   3385         pErrorNULL(listPushS(&list, ".."));
   3386       }
   3387       else {
   3388         // remove .. in path
   3389         char *s = listPopS(&list);
   3390         free(s);
   3391     }
   3392       }
   3393     else if (!strEq(*level, ".")) {
   3394       // remove . and add elements
   3395       pErrorNULL(listPushS(&list, *level));
   3396       // an element is pushed, so this is the end of leading double dots
   3397       onlyLeadingDoubleDots = false;
   3398   }
   3399     }
   3400 
   3401   if (listLengthS(list) == 1 && strEq(list[0], "..") && getS(path, 0) == '/') {
   3402     // handle ../ .. /.. /../
   3403     list[0][0] = 0;
   3404   }
   3405 
   3406   // handle /.: add empty string
   3407   if (strEq(path, "/.")) {
   3408     pErrorNULL(listPushS(&list, ""));
   3409   }
   3410 
   3411   // keep leading /
   3412   if (getS(path, 0) == '/') {
   3413     if (listIsEmptyS(list)) {
   3414       // .. cancelled path: /a/b/../..
   3415       listFreeManyS(pathL, list);
   3416       strcpy(path, "/");
   3417       return(path);
   3418     }
   3419     pErrorNULL(listPrependS(&list, ""));
   3420   }
   3421 
   3422   // create new path
   3423   char *r = join(list, "/");;
   3424   // keep order pathL, list because list can be NULL
   3425   // if it is first listFreeManyS stops early
   3426   listFreeManyS(pathL, list);
   3427   if (!r) {
   3428     bEmptyS(path);
   3429     return(path);
   3430   }
   3431   strcpy(path, r);
   3432   free(r);
   3433   return(path);
   3434 }
   3435 
   3436 /**
   3437  * buffer size normalize path
   3438  *
   3439  * path must be at least 2 chars
   3440  *
   3441  * remove unecessary /, .. and .
   3442  * leading / is kept
   3443  * leading .. is kept
   3444  * leading . is removed
   3445  *
   3446  * '/../' becomes '/'
   3447  *
   3448  * \param
   3449  *   path
   3450  * \param
   3451  *   pathSize path buffer size, the path strlen will be at most pathSize-1
   3452  * \return
   3453  *   path modified path
   3454  *   NULL when path is NULL
   3455  */
   3456 char *bLNormalizePath(char *path, size_t pathSize) {
   3457 
   3458   // sanity checks
   3459   if (!path) {
   3460     return(NULL);
   3461   }
   3462 
   3463   if (!pathSize) {
   3464     return(path);
   3465   }
   3466 
   3467   if (isEmptyS(path)) {
   3468     bEmptyS(path);
   3469     return(path);
   3470   }
   3471 
   3472   // list path elements
   3473   char **pathL = split(path, "/");
   3474 
   3475   // remove empty elements
   3476   pErrorNULL(iListCompactS(&pathL));
   3477 
   3478   if (listIsEmptyS(pathL)) {
   3479     listFreeS(pathL);
   3480     // keep leading /
   3481     strcpy(path, "/");
   3482     return(path);
   3483   }
   3484 
   3485   // new path elements
   3486   char **list = NULL;
   3487 
   3488   // detect leading double dots
   3489   bool onlyLeadingDoubleDots = true;
   3490 
   3491   // add elements to list
   3492   forEachCharP(pathL, level) {
   3493     if (strEq(*level, "..")) {
   3494       if (onlyLeadingDoubleDots) {
   3495         // keep leading ..
   3496         pErrorNULL(listPushS(&list, ".."));
   3497       }
   3498       else {
   3499         // remove .. in path
   3500         char *s = listPopS(&list);
   3501         free(s);
   3502     }
   3503       }
   3504     else if (!strEq(*level, ".")) {
   3505       // remove . and add elements
   3506       pErrorNULL(listPushS(&list, *level));
   3507       // an element is pushed, so this is the end of leading double dots
   3508       onlyLeadingDoubleDots = false;
   3509   }
   3510     }
   3511 
   3512   if (listLengthS(list) == 1 && strEq(list[0], "..") && getS(path, 0) == '/') {
   3513     // handle ../ .. /.. /../
   3514     list[0][0] = 0;
   3515   }
   3516 
   3517   // handle /.: add empty string
   3518   if (strEq(path, "/.")) {
   3519     pErrorNULL(listPushS(&list, ""));
   3520   }
   3521 
   3522   // keep leading /
   3523   if (getS(path, 0) == '/') {
   3524     if (listIsEmptyS(list)) {
   3525       // .. cancelled path: /a/b/../..
   3526       listFreeManyS(pathL, list);
   3527       strcpy(path, "/");
   3528       return(path);
   3529     }
   3530     pErrorNULL(listPrependS(&list, ""));
   3531   }
   3532 
   3533   // create new path
   3534   char *r = join(list, "/");;
   3535   // keep order pathL, list because list can be NULL
   3536   // if it is first listFreeManyS stops early
   3537   listFreeManyS(pathL, list);
   3538   if (!r) {
   3539     bEmptyS(path);
   3540     return(path);
   3541   }
   3542   pErrorNULL(strLCpy(path, pathSize, r));
   3543   free(r);
   3544   return(path);
   3545 }
   3546 
   3547 /**
   3548  * relative path
   3549  *
   3550  * Return a relative filepath to path either from the current directory or from an optional
   3551  * start directory
   3552  *
   3553  * \param
   3554  * path path to convert
   3555  * \param
   3556  * start reference path, cwd when NULL
   3557  * \return
   3558  * new relative path (you must free the pointer)
   3559  * NULL when path is NULL
   3560  */
   3561 char *relPath(const char *path, const char *start) {
   3562 
   3563   // sanity checks
   3564   if (!path) {
   3565     return(NULL);
   3566   }
   3567 
   3568   char *r = NULL;
   3569 
   3570   // steps
   3571   // normalize path and start
   3572   // if start is not set, start is cwd
   3573   // when path and start are equal, return "."
   3574   // if path is relative path and start is absolute path
   3575   // then path is relative to nstart
   3576   // if path is absolute path and start is relative path
   3577   // then start is relative to cwd
   3578   // when path starts with nstart, slice path to only keep the string
   3579   // after the end of nstart
   3580   // find first uncommon directory between npath and nstart
   3581   // count slashes in nstart after first uncommon directory
   3582   // go up directories to last common directory between npath and nstart
   3583 
   3584   // normalize path and start
   3585   char *npath = expandHome(path);
   3586   pErrorNULL(iNormalizePath(&npath));
   3587   char *nstart;
   3588   char *cwd = getCwd();
   3589 
   3590   // if start is not set, start is cwd
   3591   if (!start) {
   3592     // relative path to cwd
   3593     nstart = getCwd();
   3594   }
   3595   else {
   3596     // use start in argument
   3597     nstart = expandHome(start);;
   3598     pErrorNULL(iNormalizePath(&nstart));
   3599   }
   3600 
   3601   // when path and start are equal, return "."
   3602   if (eqS(npath, nstart)) {
   3603     r = strdup(".");
   3604     goto end;
   3605   }
   3606 
   3607   // if path is relative path and start is absolute path
   3608   // then path is relative to nstart
   3609   if (npath[0] != '/' and nstart[0] == '/') {
   3610     pErrorNULL(iPrependS(&npath, "/"));
   3611     pErrorNULL(iPrependS(&npath, nstart));
   3612     pErrorNULL(iNormalizePath(&npath));
   3613   }
   3614 
   3615   // if path is absolute path and start is relative path
   3616   // then start is relative to cwd
   3617   if (npath[0] == '/' and nstart[0] != '/') {
   3618     pErrorNULL(iPrependS(&nstart, "/"));
   3619     pErrorNULL(iPrependS(&nstart, cwd));
   3620     pErrorNULL(iNormalizePath(&nstart));
   3621   }
   3622 
   3623   // when path starts with nstart, slice path to only keep the string
   3624   // after the end of nstart
   3625   if (startsWithS(npath, nstart)) {
   3626     if (npath[strlen(nstart)] == '/') {
   3627       r = sliceS(npath, (i64)strlen(nstart)+1, 0);
   3628       goto end;
   3629     }
   3630     // handle case when nstart is "/" after normalize
   3631     if (npath[strlen(nstart)-1] == '/') {
   3632       r = sliceS(npath, (i64)strlen(nstart), 0);
   3633       goto end;
   3634     }
   3635     // fallthrough: npath starts with nstart but is a different path
   3636     // Example: npath = "/usr/bin" nstart = "/us"
   3637   }
   3638 
   3639   // find first uncommon directory between npath and nstart
   3640   // lib/t
   3641   // lib/a/b
   3642   size_t i    = 0;
   3643   size_t from = 0;
   3644   while (npath[i] and nstart[i]) {
   3645     if (npath[i] == '/') {
   3646       // i+1 to skip the slash
   3647       from = i+1;;
   3648     }
   3649     if (npath[i] != nstart[i]) {
   3650       break;
   3651     }
   3652     i++;
   3653   }
   3654 
   3655 
   3656   // count slashes in nstart after first uncommon directory
   3657   size_t slash = 1;
   3658   rangeFrom(j, i, strlen(nstart))
   3659     if (nstart[j] == '/') {
   3660       slash++;
   3661     }
   3662 
   3663   // go up directories to last common directory between npath and nstart
   3664   r = repeatS("../", slash);;
   3665   pErrorNULL(iAppendS(&r, npath+from));
   3666 
   3667   end:
   3668   free(npath);
   3669   free(nstart);
   3670   free(cwd);
   3671   return(r);
   3672 }
   3673 
   3674 /**
   3675  * relative path
   3676  *
   3677  * Return a relative filepath to path either from the current directory or from an optional
   3678  * start directory
   3679  *
   3680  * \param
   3681  * path path to convert (this parameter is reallocated)
   3682  * \param
   3683  * start reference path, cwd when NULL
   3684  * \return
   3685  * updated relative path (you must free the pointer)
   3686  * NULL when path is NULL
   3687  */
   3688 char *iRelPath(char **path, const char *start) {
   3689 
   3690   // sanity checks
   3691   if (!path or !*path) {
   3692     return(NULL);
   3693   }
   3694 
   3695   char *r = NULL;
   3696 
   3697   // steps
   3698   // normalize path and start
   3699   // if start is not set, start is cwd
   3700   // when path and start are equal, return "."
   3701   // if path is relative path and start is absolute path
   3702   // then path is relative to nstart
   3703   // if path is absolute path and start is relative path
   3704   // then start is relative to cwd
   3705   // when path starts with nstart, slice path to only keep the string
   3706   // after the end of nstart
   3707   // find first uncommon directory between npath and nstart
   3708   // count slashes in nstart after first uncommon directory
   3709   // go up directories to last common directory between npath and nstart
   3710 
   3711   // normalize path and start
   3712   char *npath = expandHome(*path);
   3713   pErrorNULL(iNormalizePath(&npath));
   3714   char *nstart;
   3715   char *cwd = getCwd();
   3716 
   3717   // if start is not set, start is cwd
   3718   if (!start) {
   3719     // relative path to cwd
   3720     nstart = getCwd();
   3721   }
   3722   else {
   3723     // use start in argument
   3724     nstart = expandHome(start);;
   3725     pErrorNULL(iNormalizePath(&nstart));
   3726   }
   3727 
   3728   // when path and start are equal, return "."
   3729   if (eqS(npath, nstart)) {
   3730     r = strdup(".");
   3731     goto end;
   3732   }
   3733 
   3734   // if path is relative path and start is absolute path
   3735   // then path is relative to nstart
   3736   if (npath[0] != '/' and nstart[0] == '/') {
   3737     pErrorNULL(iPrependS(&npath, "/"));
   3738     pErrorNULL(iPrependS(&npath, nstart));
   3739     pErrorNULL(iNormalizePath(&npath));
   3740   }
   3741 
   3742   // if path is absolute path and start is relative path
   3743   // then start is relative to cwd
   3744   if (npath[0] == '/' and nstart[0] != '/') {
   3745     pErrorNULL(iPrependS(&nstart, "/"));
   3746     pErrorNULL(iPrependS(&nstart, cwd));
   3747     pErrorNULL(iNormalizePath(&nstart));
   3748   }
   3749 
   3750   // when path starts with nstart, slice path to only keep the string
   3751   // after the end of nstart
   3752   if (startsWithS(npath, nstart)) {
   3753     if (npath[strlen(nstart)] == '/') {
   3754       r = sliceS(npath, (i64)strlen(nstart)+1, 0);
   3755       goto end;
   3756     }
   3757     // handle case when nstart is "/" after normalize
   3758     if (npath[strlen(nstart)-1] == '/') {
   3759       r = sliceS(npath, (i64)strlen(nstart), 0);
   3760       goto end;
   3761     }
   3762     // fallthrough: npath starts with nstart but is a different path
   3763     // Example: npath = "/usr/bin" nstart = "/us"
   3764   }
   3765 
   3766 
   3767   // find first uncommon directory between npath and nstart
   3768   // lib/t
   3769   // lib/a/b
   3770   size_t i    = 0;
   3771   size_t from = 0;
   3772   while (npath[i] and nstart[i]) {
   3773     if (npath[i] == '/') {
   3774       // i+1 to skip the slash
   3775       from = i+1;
   3776     }
   3777     if (npath[i] != nstart[i]) {
   3778       break;
   3779     }
   3780     i++;
   3781   }
   3782 
   3783 
   3784   // count slashes in nstart after first uncommon directory
   3785   size_t slash = 1;
   3786   rangeFrom(j, i, strlen(nstart))
   3787     if (nstart[j] == '/') {
   3788       slash++;
   3789     }
   3790 
   3791   // go up directories to last common directory between npath and nstart
   3792   r = repeatS("../", slash);;
   3793   pErrorNULL(iAppendS(&r, npath+from));
   3794 
   3795   end:
   3796   free(npath);
   3797   free(nstart);
   3798   free(cwd);
   3799 
   3800   free(*path);
   3801   *path = r;
   3802   return(*path);
   3803 }
   3804 
   3805 /**
   3806  * relative path
   3807  *
   3808  * Return a relative filepath to path either from the current directory or from an optional
   3809  * start directory
   3810  *
   3811  * \param
   3812  * path path to convert
   3813  * \param
   3814  * start reference path, cwd when NULL
   3815  * \return
   3816  * relative path in dest
   3817  * NULL when path or dest are NULL
   3818  */
   3819 char *bRelPath(char *dest, const char *path, const char *start) {
   3820 
   3821   // sanity checks
   3822   if (!path or !dest) {
   3823     return(NULL);
   3824   }
   3825 
   3826   char *r = NULL;
   3827 
   3828   // steps
   3829   // normalize path and start
   3830   // if start is not set, start is cwd
   3831   // when path and start are equal, return "."
   3832   // if path is relative path and start is absolute path
   3833   // then path is relative to nstart
   3834   // if path is absolute path and start is relative path
   3835   // then start is relative to cwd
   3836   // when path starts with nstart, slice path to only keep the string
   3837   // after the end of nstart
   3838   // find first uncommon directory between npath and nstart
   3839   // count slashes in nstart after first uncommon directory
   3840   // go up directories to last common directory between npath and nstart
   3841 
   3842   // normalize path and start
   3843   char *npath = expandHome(path);
   3844   pErrorNULL(iNormalizePath(&npath));
   3845   char *nstart;
   3846   char *cwd = getCwd();
   3847 
   3848   // if start is not set, start is cwd
   3849   if (!start) {
   3850     // relative path to cwd
   3851     nstart = getCwd();
   3852   }
   3853   else {
   3854     // use start in argument
   3855     nstart = expandHome(start);;
   3856     pErrorNULL(iNormalizePath(&nstart));
   3857   }
   3858 
   3859   // when path and start are equal, return "."
   3860   if (eqS(npath, nstart)) {
   3861     r = strdup(".");
   3862     goto end;
   3863   }
   3864 
   3865   // if path is relative path and start is absolute path
   3866   // then path is relative to nstart
   3867   if (npath[0] != '/' and nstart[0] == '/') {
   3868     pErrorNULL(iPrependS(&npath, "/"));
   3869     pErrorNULL(iPrependS(&npath, nstart));
   3870     pErrorNULL(iNormalizePath(&npath));
   3871   }
   3872 
   3873   // if path is absolute path and start is relative path
   3874   // then start is relative to cwd
   3875   if (npath[0] == '/' and nstart[0] != '/') {
   3876     pErrorNULL(iPrependS(&nstart, "/"));
   3877     pErrorNULL(iPrependS(&nstart, cwd));
   3878     pErrorNULL(iNormalizePath(&nstart));
   3879   }
   3880 
   3881   // when path starts with nstart, slice path to only keep the string
   3882   // after the end of nstart
   3883   if (startsWithS(npath, nstart)) {
   3884     if (npath[strlen(nstart)] == '/') {
   3885       r = sliceS(npath, (i64)strlen(nstart)+1, 0);
   3886       goto end;
   3887     }
   3888     // handle case when nstart is "/" after normalize
   3889     if (npath[strlen(nstart)-1] == '/') {
   3890       r = sliceS(npath, (i64)strlen(nstart), 0);
   3891       goto end;
   3892     }
   3893     // fallthrough: npath starts with nstart but is a different path
   3894     // Example: npath = "/usr/bin" nstart = "/us"
   3895   }
   3896 
   3897   // find first uncommon directory between npath and nstart
   3898   // lib/t
   3899   // lib/a/b
   3900   size_t i    = 0;
   3901   size_t from = 0;
   3902   while (npath[i] and nstart[i]) {
   3903     if (npath[i] == '/') {
   3904       // i+1 to skip the slash
   3905       from = i+1;
   3906     }
   3907     if (npath[i] != nstart[i]) {
   3908       break;
   3909     }
   3910     i++;
   3911   }
   3912 
   3913 
   3914   // count slashes in nstart after first uncommon directory
   3915   size_t slash = 1;
   3916   rangeFrom(j, i, strlen(nstart))
   3917     if (nstart[j] == '/') {
   3918       slash++;
   3919     }
   3920 
   3921   // go up directories to last common directory between npath and nstart
   3922   r = repeatS("../", slash);;
   3923   pErrorNULL(iAppendS(&r, npath+from));
   3924 
   3925   end:
   3926   free(npath);
   3927   free(nstart);
   3928   free(cwd);
   3929 
   3930   strcpy(dest, r);
   3931   free(r);
   3932   return(dest);
   3933 }
   3934 
   3935 /**
   3936  * relative path
   3937  *
   3938  * Return a relative filepath to path either from the current directory or from an optional
   3939  * start directory
   3940  *
   3941  * \param
   3942  * path path to convert
   3943  * \param
   3944  * start reference path, cwd when NULL
   3945  * \return
   3946  * relative path in dest
   3947  * NULL when path or dest are NULL
   3948  */
   3949 char *bLRelPath(char *dest, size_t destSize, char *path, const char *start) {
   3950 
   3951   // sanity checks
   3952   if (!path or !dest) {
   3953     return(NULL);
   3954   }
   3955 
   3956   char *r = NULL;
   3957 
   3958   // steps
   3959   // normalize path and start
   3960   // if start is not set, start is cwd
   3961   // when path and start are equal, return "."
   3962   // if path is relative path and start is absolute path
   3963   // then path is relative to nstart
   3964   // if path is absolute path and start is relative path
   3965   // then start is relative to cwd
   3966   // when path starts with nstart, slice path to only keep the string
   3967   // after the end of nstart
   3968   // find first uncommon directory between npath and nstart
   3969   // count slashes in nstart after first uncommon directory
   3970   // go up directories to last common directory between npath and nstart
   3971 
   3972   // normalize path and start
   3973   char *npath = expandHome(path);
   3974   pErrorNULL(iNormalizePath(&npath));
   3975   char *nstart;
   3976   char *cwd = getCwd();
   3977 
   3978   // if start is not set, start is cwd
   3979   if (!start) {
   3980     // relative path to cwd
   3981     nstart = getCwd();
   3982   }
   3983   else {
   3984     // use start in argument
   3985     nstart = expandHome(start);;
   3986     pErrorNULL(iNormalizePath(&nstart));
   3987   }
   3988 
   3989   // when path and start are equal, return "."
   3990   if (eqS(npath, nstart)) {
   3991     r = strdup(".");
   3992     goto end;
   3993   }
   3994 
   3995   // if path is relative path and start is absolute path
   3996   // then path is relative to nstart
   3997   if (npath[0] != '/' and nstart[0] == '/') {
   3998     pErrorNULL(iPrependS(&npath, "/"));
   3999     pErrorNULL(iPrependS(&npath, nstart));
   4000     pErrorNULL(iNormalizePath(&npath));
   4001   }
   4002 
   4003   // if path is absolute path and start is relative path
   4004   // then start is relative to cwd
   4005   if (npath[0] == '/' and nstart[0] != '/') {
   4006     pErrorNULL(iPrependS(&nstart, "/"));
   4007     pErrorNULL(iPrependS(&nstart, cwd));
   4008     pErrorNULL(iNormalizePath(&nstart));
   4009   }
   4010 
   4011   // when path starts with nstart, slice path to only keep the string
   4012   // after the end of nstart
   4013   if (startsWithS(npath, nstart)) {
   4014     if (npath[strlen(nstart)] == '/') {
   4015       r = sliceS(npath, (i64)strlen(nstart)+1, 0);
   4016       goto end;
   4017     }
   4018     // handle case when nstart is "/" after normalize
   4019     if (npath[strlen(nstart)-1] == '/') {
   4020       r = sliceS(npath, (i64)strlen(nstart), 0);
   4021       goto end;
   4022     }
   4023     // fallthrough: npath starts with nstart but is a different path
   4024     // Example: npath = "/usr/bin" nstart = "/us"
   4025   }
   4026 
   4027   // find first uncommon directory between npath and nstart
   4028   // lib/t
   4029   // lib/a/b
   4030   size_t i    = 0;
   4031   size_t from = 0;
   4032   while (npath[i] and nstart[i]) {
   4033     if (npath[i] == '/') {
   4034       from = i+1;
   4035     }
   4036     if (npath[i] != nstart[i]) {
   4037       break;
   4038     }
   4039     i++;
   4040   }
   4041 
   4042 
   4043   // count slashes in nstart after first uncommon directory
   4044   size_t slash = 1;
   4045   rangeFrom(j, i, strlen(nstart))
   4046     if (nstart[j] == '/') {
   4047       slash++;
   4048     }
   4049 
   4050   // go up directories to last common directory between npath and nstart
   4051   r = repeatS("../", slash);;
   4052   pErrorNULL(iAppendS(&r, npath+from));
   4053 
   4054   end:
   4055   free(npath);
   4056   free(nstart);
   4057   free(cwd);
   4058 
   4059   pErrorNULL(strLCpy(dest, destSize, r));
   4060   free(r);
   4061   return(dest);
   4062 }
   4063 
   4064 
   4065 
   4066 /**
   4067  * get home path
   4068  *
   4069  * \return
   4070  *   home path (you must free the pointer)
   4071  */
   4072 char *getHomePath(void) {
   4073 
   4074   struct passwd *pw = getpwuid(getuid());;
   4075   if (!pw) {
   4076     return(NULL);
   4077   }
   4078   return(strdup(pw->pw_dir));
   4079 }
   4080 
   4081 /**
   4082  * copy home path to path
   4083  *
   4084  * \param
   4085  *   path buffer large enough for home path
   4086  * \return
   4087  *   path pointer
   4088  */
   4089 char *bGetHomePath(char *path) {
   4090 
   4091   struct passwd *pw = getpwuid(getuid());;
   4092   if (!pw) {
   4093     return(NULL);
   4094   }
   4095   strcpy(path, pw->pw_dir);
   4096   return(path);
   4097 }
   4098 
   4099 /**
   4100  * copy home path to path maximum pathSize
   4101  *
   4102  * \param
   4103  *   path buffer large enough for home path
   4104  * \param
   4105  *   pathSize size of path
   4106  * \return
   4107  *   path pointer
   4108  */
   4109 char *bLGetHomePath(char *path, size_t pathSize) {
   4110 
   4111   struct passwd *pw = getpwuid(getuid());;
   4112   if (!pw) {
   4113     return(NULL);
   4114   }
   4115   if (strlen(pw->pw_dir)+1 > pathSize) {
   4116     return(NULL);
   4117   }
   4118   pErrorNULL(strLCpy(path, pathSize, pw->pw_dir));
   4119   return(path);
   4120 }
   4121 
   4122 /**
   4123  * get home path as a const char*
   4124  *
   4125  * \return
   4126  *   home path
   4127  */
   4128 const char *getCHomePath(void) {
   4129 
   4130   struct passwd *pw = getpwuid(getuid());;
   4131   if (!pw) {
   4132     return(NULL);
   4133   }
   4134   return(pw->pw_dir);
   4135 }
   4136 
   4137 /**
   4138  * get current working directory
   4139  *
   4140  * \return
   4141  *   current path (you must free the pointer)
   4142  */
   4143 char *getCwd(void) {
   4144   char *r = NULL;
   4145 
   4146   #if (__sun__)
   4147   // in openIndiana, the size argument cant be 0
   4148   r = getcwd(NULL, 8192);
   4149   #else
   4150   r = getcwd(NULL, 0);
   4151   #endif
   4152   if (!r) {
   4153     pFuncError
   4154     return(NULL);
   4155   }
   4156   return(r);
   4157 }
   4158 
   4159 char *bLGetCwd(char *path, size_t pathSize) {
   4160   char *r = NULL;
   4161 
   4162   r = getcwd(path, pathSize);
   4163   if (!r) {
   4164     pFuncError
   4165     return(NULL);
   4166   }
   4167   return(path);
   4168 }
   4169 
   4170 
   4171 
   4172 /**
   4173  * change directory
   4174  *
   4175  * \param
   4176  *   path
   4177  * \return
   4178  *    1 success
   4179  *    0 error
   4180  */
   4181 int chDir(const char *path) {
   4182 
   4183   if (!path) {
   4184     return(0);
   4185   }
   4186 
   4187   int r = chdir(path);
   4188   if (r) {
   4189     pFuncError
   4190     shEPrintfS("The path was: \"%s\"\n", path);
   4191     r = 0;
   4192   }
   4193   else {
   4194     r = 1;
   4195   }
   4196   return(r);
   4197 }
   4198 
   4199 /**
   4200  * is directory
   4201  *
   4202  * \param
   4203  *  path
   4204  * \return
   4205  *  true when path is a directory
   4206  *  false path is not a directory, filePath is NULL or empty string
   4207  */
   4208 bool isDir(const char *path) {
   4209   struct stat st;
   4210 
   4211   // sanity checks
   4212   if (!path || isBlankS(path)) {
   4213     return(false);
   4214   }
   4215 
   4216   if (stat(path, &st) == -1) {
   4217     return(false);
   4218   }
   4219 
   4220   if (!S_ISDIR(st.st_mode)) {
   4221     return(false);
   4222   }
   4223   return(true);
   4224 }
   4225 
   4226 /**
   4227  * sheepy read link
   4228  *
   4229  * read the first target in the link chain
   4230  *
   4231  * the returned string has to be freed
   4232  *
   4233  * \param
   4234  *   path symbolic link path
   4235  * \return
   4236  *   path to linked file or directory (you must free the pointer)
   4237  *   NULL failed: path is blank or NULL
   4238  *     path is not a symlink
   4239  *     malloc failed to allocate the result buffer
   4240  *     readlink failed
   4241  */
   4242 char *shReadlink(const char *path) {
   4243   char *linked = NULL;
   4244   struct stat st;
   4245   size_t bufSize;
   4246   ssize_t r;
   4247 
   4248   if (!path || isBlankS(path)) {
   4249     return(NULL);
   4250   }
   4251 
   4252   if (lstat(path, &st) == -1) {
   4253     pFuncError
   4254     return(NULL);
   4255   }
   4256 
   4257   if (!S_ISLNK(st.st_mode)) {
   4258     // path is a symbolic link
   4259     return(NULL);
   4260   }
   4261 
   4262   if (st.st_size == 0) {
   4263     bufSize = PATH_MAX;
   4264   }
   4265   else {
   4266     bufSize = (size_t)st.st_size + 1;
   4267   }
   4268 
   4269   linked = MALLOC(bufSize);
   4270   if (!linked) {
   4271     pFuncError
   4272     return(NULL);
   4273   }
   4274 
   4275   r = readlink(path, linked, bufSize);
   4276 
   4277   if (r == -1) {
   4278     pFuncError
   4279     free(linked);
   4280     return(NULL);
   4281   }
   4282 
   4283   // append null byte
   4284   *(linked + r) = 0;
   4285 
   4286   return(linked);
   4287 }
   4288 
   4289 /**
   4290  * end link
   4291  *
   4292  * read the link chain of a symbolic link to the end
   4293  * the returned string has to be freed
   4294  *
   4295  * \param
   4296  *   path symbolic link path
   4297  * \return
   4298  *   path to linked file or directory (you must free the pointer)
   4299  *   NULL failed: path is blank or NULL
   4300  *     path is not a symlink
   4301  *     malloc failed to allocate the result buffer
   4302  *     readlink failed
   4303  */
   4304 char *endlink(const char *path) {
   4305   char *linked = NULL;
   4306   char from[PATH_MAX];
   4307   char to[PATH_MAX];
   4308   struct stat st;
   4309   size_t bufSize;
   4310   ssize_t r;
   4311 
   4312   if (!path || isBlankS(path)) {
   4313     return(NULL);
   4314   }
   4315 
   4316   if (lstat(path, &st) == -1) {
   4317     pFuncError
   4318     return(NULL);
   4319   }
   4320 
   4321   if (!S_ISLNK(st.st_mode)) {
   4322     // path is a symbolic link
   4323     return(NULL);
   4324   }
   4325 
   4326   if (st.st_size == 0) {
   4327     bufSize = PATH_MAX;
   4328   }
   4329   else {
   4330     bufSize = (size_t)st.st_size + 1;
   4331   }
   4332 
   4333   pErrorNULL(strLCpy(from, sizeof from, path));
   4334 
   4335   while (S_ISLNK(st.st_mode)) {
   4336     r = readlink(from, to, bufSize);
   4337 
   4338     if (r == -1) {
   4339       pFuncError
   4340       return(NULL);
   4341     }
   4342 
   4343     // append null byte
   4344     to[r] =  0;
   4345 
   4346     if (to[0] != '/') {
   4347       pErrorNULL(bDirname(from));
   4348       pErrorNULL(bLAppendManyS(from, PATH_MAX, "/", to));
   4349       pErrorNULL(bNormalizePath(from));
   4350     }
   4351     else {
   4352       // copy absolute path
   4353       strcpy(from, to);
   4354     }
   4355 
   4356     if (lstat(from, &st) == -1) {
   4357       pFuncError
   4358       return(NULL);
   4359     }
   4360 
   4361     if (st.st_size == 0) {
   4362       bufSize = PATH_MAX;
   4363     }
   4364     else {
   4365       bufSize = (size_t)st.st_size + 1;
   4366   }
   4367     }
   4368 
   4369   linked = strdup(from);;
   4370   return(linked);
   4371 }
   4372 
   4373 /**
   4374  * is symbolic link
   4375  *
   4376  * \param
   4377  *  path
   4378  * \return
   4379  *  true when path is a symbolic link
   4380  *  false path is not a symbolic link, filePath is NULL or empty string
   4381  */
   4382 bool isLink(const char *path) {
   4383   struct stat st;
   4384 
   4385   // sanity checks
   4386   if (!path || isBlankS(path)) {
   4387     return(false);
   4388   }
   4389 
   4390   if (lstat(path, &st) == -1) {
   4391     return(false);
   4392   }
   4393 
   4394   if (!S_ISLNK(st.st_mode)) {
   4395     return(false);
   4396   }
   4397   return(true);
   4398 }
   4399 
   4400 /**
   4401  * detect files and directories
   4402  *
   4403  * \param
   4404  *   filePath: path to file or directory
   4405  * \return
   4406  *   true exists
   4407  *   false non existant
   4408  *   false filePath is NULL or empty string
   4409  */
   4410 bool fileExists(const char *filePath) {
   4411 
   4412   // sanity checks
   4413   if (!filePath || isBlankS(filePath)) {
   4414     return(false);
   4415   }
   4416 
   4417   int r = access(filePath, F_OK);
   4418   //if r
   4419   //  pStrError("fileExists error");
   4420   // dont print error because this is a test
   4421   return(r != -1);;
   4422 }
   4423 
   4424 /**
   4425  * like chmod in stdlibc but return true/false
   4426  * \param
   4427  *   filePath: path to file or directory
   4428  *   mode: permissions
   4429  * \return
   4430  *   true success
   4431  *   false filePath doesnt exist, not enough permissions...
   4432  *   false filePath is NULL or empty string
   4433  */
   4434 bool fileChmod(const char *filePath, mode_t mode) {
   4435 
   4436   // sanity checks
   4437   if (!filePath || isBlankS(filePath)) {
   4438     return(false);
   4439   }
   4440 
   4441   int r = chmod(filePath, mode);
   4442   if (r) {
   4443     pFuncError
   4444     shEPrintfS("The path was: \"%s\"\n", filePath);
   4445   }
   4446   return(r == 0);;
   4447 }
   4448 
   4449 /**
   4450  * get file size
   4451  *
   4452  * \param
   4453  *   filePath: path to file
   4454  * \return
   4455  *   ssize_t >= 0 size
   4456  *   -1 an error occured or filePath is NULL or empty string
   4457  */
   4458 ssize_t fileSize(const char *filePath) {
   4459   struct stat st;
   4460 
   4461   // sanity checks
   4462   if (!filePath || isBlankS(filePath)) {
   4463     return(-1);
   4464   }
   4465 
   4466   int r = stat(filePath, &st);;
   4467   if (r) {
   4468     pFuncError
   4469     shEPrintfS("The path was: \"%s\"\n", filePath);
   4470     return(-1);
   4471   }
   4472 
   4473   // macOS returns a varying number a number above the constant below
   4474   // when the file doesnt exists
   4475   if ((uint64_t)(st.st_size) > 140734000000000) {
   4476     return(-1);//LCOV_EXCL_LINE
   4477   }
   4478   return(st.st_size);
   4479 }
   4480 
   4481 /**
   4482  * get file size from file pointer
   4483  *
   4484  * \param
   4485  *   fp file pointer
   4486  * \return
   4487  *   ssize_t >= 0 size
   4488  *   -1 an error occured or file pointer is NULL
   4489  */
   4490 ssize_t fileSizeFP(FILE *fp) {
   4491 
   4492   if (!fp) {
   4493     return(-1);
   4494   }
   4495 
   4496   if (fseek(fp, 0L, SEEK_END) == -1) {
   4497     pFuncError
   4498     return(-1);
   4499   }
   4500   ssize_t r = ftell(fp);
   4501   rewind(fp);
   4502   return(r);
   4503 }
   4504 
   4505 /**
   4506  * read file to string
   4507  *
   4508  * 0 is added at the end to terminate the string
   4509  *
   4510  * \param
   4511  *   filePath: path to file
   4512  * \return
   4513  *   data in file (you must free the pointer)
   4514  *   NULL an error occured
   4515  */
   4516 void *readFileToS(const char *filePath) {
   4517   FILE *f = NULL;
   4518   void *r = NULL;
   4519   ssize_t len;
   4520   size_t readStatus;
   4521 
   4522   // sanity checks
   4523   if (!filePath || isBlankS(filePath)) {
   4524     return(NULL);
   4525   }
   4526 
   4527   len = fileSize(filePath);;
   4528   if (len == -1) {
   4529     return(NULL);
   4530   }
   4531 
   4532   // +1 to add \0 at the end
   4533   r = MALLOC((size_t)len+1);
   4534   if (!r) {
   4535     return(NULL);
   4536   }
   4537 
   4538   f = fopen(filePath, "r");
   4539   if (!f) {
   4540     free(r);
   4541     pFuncError
   4542     shEPrintfS("The path was: \"%s\"\n", filePath);
   4543     return(NULL);
   4544   }
   4545   readStatus = fread(r, 1, (size_t)len , f);
   4546   fclose(f);
   4547 
   4548   if (readStatus != (size_t)len) {
   4549     free(r);
   4550     pFuncError
   4551     shEPrintfS("The path was: \"%s\"\n", filePath);
   4552     return(NULL);
   4553   }
   4554 
   4555   *((char*)r+len) = 0;
   4556 
   4557   return(r);
   4558 }
   4559 
   4560 /**
   4561  * read file to string
   4562  *
   4563  * 0 is added at the end to terminate the string
   4564  *
   4565  * \param
   4566  *   fp file pointer
   4567  * \return
   4568  *   data in file (you must free the pointer)
   4569  *   NULL an error occured
   4570  */
   4571 void *readStreamToS(FILE *fp) {
   4572   void *r = NULL;
   4573   ssize_t len;
   4574   size_t readStatus;
   4575 
   4576   // sanity checks
   4577   if (!fp) {
   4578     return(NULL);
   4579   }
   4580 
   4581   len = fileSizeFP(fp);;
   4582   if (len == -1) {
   4583     return(NULL);
   4584   }
   4585 
   4586   // +1 to add \0 at the end
   4587   r = MALLOC((size_t)len+1);
   4588   if (!r) {
   4589     return(NULL);
   4590   }
   4591 
   4592   readStatus = fread(r, 1, (size_t)len , fp);
   4593 
   4594   if (readStatus != (size_t)len) {
   4595     free(r);
   4596     pFuncError
   4597     return(NULL);
   4598   }
   4599 
   4600   *((char*)r+len) = 0;
   4601 
   4602   return(r);
   4603 }
   4604 
   4605 
   4606 /**
   4607  * buffer read file to string
   4608  *
   4609  * 0 is added at the end to terminate the string
   4610  *
   4611  * \param
   4612  *   dst: destination buffer
   4613  * \param
   4614  *   filePath: path to file
   4615  * \return
   4616  *   data in file
   4617  *   NULL an error occured
   4618  */
   4619 void *bReadFileToS(const char *filePath, void *dst) {
   4620   FILE *f = NULL;
   4621   ssize_t len;
   4622   size_t readStatus;
   4623 
   4624   // sanity checks
   4625   if (!filePath || isBlankS(filePath) || !dst) {
   4626     return(NULL);
   4627   }
   4628 
   4629   len = fileSize(filePath);;
   4630   if (len == -1) {
   4631     return(NULL);
   4632   }
   4633 
   4634   f = fopen(filePath, "r");
   4635   if (!f) {
   4636     pFuncError
   4637     shEPrintfS("The path was: \"%s\"\n", filePath);
   4638     return(NULL);
   4639   }
   4640 
   4641   readStatus = fread(dst, 1, (size_t)len , f);
   4642   fclose(f);
   4643 
   4644   if (readStatus != (size_t)len) {
   4645     pFuncError
   4646     shEPrintfS("The path was: \"%s\"\n", filePath);
   4647     return(NULL);
   4648   }
   4649 
   4650   *((char*)dst+len) = 0;
   4651 
   4652   return(dst);
   4653 }
   4654 
   4655 /**
   4656  * buffer read file to string
   4657  *
   4658  * 0 is added at the end to terminate the string
   4659  *
   4660  * \param
   4661  *   dst: destination buffer
   4662  * \param
   4663  *   fp file pointer
   4664  * \return
   4665  *   data in file
   4666  *   NULL an error occured
   4667  */
   4668 void *bReadStreamToS(FILE *fp, void *dst) {
   4669   ssize_t len;
   4670   size_t readStatus;
   4671 
   4672   // sanity checks
   4673   if (!fp || !dst) {
   4674     return(NULL);
   4675   }
   4676 
   4677   len = fileSizeFP(fp);;
   4678   if (len == -1) {
   4679     return(NULL);
   4680   }
   4681 
   4682   readStatus = fread(dst, 1, (size_t)len , fp);
   4683 
   4684   if (readStatus != (size_t)len) {
   4685     pFuncError
   4686     return(NULL);
   4687   }
   4688 
   4689   *((char*)dst+len) = 0;
   4690 
   4691   return(dst);
   4692 }
   4693 
   4694 
   4695 /**
   4696  * buffer size read file to string
   4697  *
   4698  * 0 is added at the end to terminate the string
   4699  *
   4700  * \param
   4701  *   filePath: path to file
   4702  * \param
   4703  *   dst: destination buffer
   4704  * \param
   4705  *   dstSize path buffer size, the path strlen will be at most dstSize-1
   4706  * \return
   4707  *   data in file
   4708  *   NULL an error occured
   4709  */
   4710 void *bLReadFileToS(const char *filePath, void *dst, size_t dstSize) {
   4711   FILE *f = NULL;
   4712   ssize_t len;
   4713   size_t readStatus;
   4714 
   4715   // sanity checks
   4716   if (!filePath || isBlankS(filePath) || !dst) {
   4717     return(NULL);
   4718   }
   4719 
   4720   if (!dstSize) {
   4721     // size 0, no change in dst
   4722     return(dst);
   4723   }
   4724 
   4725   len = fileSize(filePath);;
   4726   if (len == -1) {
   4727     return(NULL);
   4728   }
   4729 
   4730   // truncate if necessary
   4731   len = ((size_t)len < dstSize) ? len : (ssize_t)dstSize-1;
   4732 
   4733   f = fopen(filePath, "r");
   4734   if (!f) {
   4735     pFuncError
   4736     shEPrintfS("The path was: \"%s\"\n", filePath);
   4737     return(NULL);
   4738   }
   4739 
   4740   readStatus = fread(dst, 1, (size_t)len , f);
   4741   fclose(f);
   4742 
   4743   if (readStatus != (size_t)len) {
   4744     pFuncError
   4745     shEPrintfS("The path was: \"%s\"\n", filePath);
   4746     return(NULL);
   4747   }
   4748 
   4749   *((char*)dst+len) = 0;
   4750 
   4751   return(dst);
   4752 }
   4753 
   4754 /**
   4755  * buffer size read file to string
   4756  *
   4757  * 0 is added at the end to terminate the string
   4758  *
   4759  * \param
   4760  *   dst: destination buffer
   4761  * \param
   4762  *   fp file pointer
   4763  * \return
   4764  *   data in file
   4765  *   NULL an error occured
   4766  */
   4767 void *bLReadStreamToS(FILE *fp, void *dst, size_t dstSize) {
   4768   ssize_t len;
   4769   size_t readStatus;
   4770 
   4771   // sanity checks
   4772   if (!fp || !dst) {
   4773     return(NULL);
   4774   }
   4775 
   4776   if (!dstSize) {
   4777     // size 0, no change in dst
   4778     return(dst);
   4779   }
   4780 
   4781   len = fileSizeFP(fp);;
   4782   if (len == -1) {
   4783     return(NULL);
   4784   }
   4785 
   4786   // truncate if necessary
   4787   len = ((size_t)len < dstSize) ? len : (ssize_t)dstSize-1;
   4788 
   4789   readStatus = fread(dst, 1, (size_t)len , fp);
   4790 
   4791   if (readStatus != (size_t)len) {
   4792     pFuncError
   4793     return(NULL);
   4794   }
   4795 
   4796   *((char*)dst+len) = 0;
   4797 
   4798   return(dst);
   4799 }
   4800 
   4801 /**
   4802  * read file to buffer
   4803  *
   4804  * The function allocates the buffer
   4805  *
   4806  * \param
   4807  *   filePath path to file
   4808  * \param
   4809  *   buffer   unallocated buffer
   4810  * \return
   4811  *   data from file in buffer (you must free the pointer)
   4812  *   buffer size
   4813  *   -1 error
   4814  */
   4815 ssize_t readFile(const char *filePath, void **buffer) {
   4816   FILE *f = NULL;
   4817   ssize_t len;
   4818   size_t readStatus;
   4819 
   4820   // sanity checks
   4821   if (!filePath || isBlankS(filePath) || !buffer) {
   4822     return(-1);
   4823   }
   4824 
   4825   len = fileSize(filePath);;
   4826   if (len == -1) {
   4827     return(-1);
   4828   }
   4829 
   4830   // +1 to add \0 at the end
   4831   *buffer = MALLOC((size_t)len);
   4832   if (!*buffer) {
   4833     return(-1);
   4834   }
   4835 
   4836   f = fopen(filePath, "r");
   4837   if (!f) {
   4838     free(*buffer);
   4839     pFuncError
   4840     shEPrintfS("The path was: \"%s\"\n", filePath);
   4841     return(-1);
   4842   }
   4843   readStatus = fread(*buffer, 1, (size_t)len , f);
   4844   fclose(f);
   4845 
   4846   if (readStatus != (size_t)len) {
   4847     free(*buffer);
   4848     pFuncError
   4849     shEPrintfS("The path was: \"%s\"\n", filePath);
   4850     return(-1);
   4851   }
   4852 
   4853   return(len);
   4854 }
   4855 
   4856 
   4857 /**
   4858  * buffer read file to buffer
   4859  *
   4860  * The function allocates the buffer
   4861  *
   4862  * \param
   4863  *   filePath path to file
   4864  * \param
   4865  *   buffer   already allocated buffer
   4866  * \return
   4867  *   data from file in buffer
   4868  *   buffer size
   4869  *   -1 error
   4870  */
   4871 ssize_t bReadFile(const char *filePath, void *buffer) {
   4872   FILE *f = NULL;
   4873   ssize_t len;
   4874   size_t readStatus;
   4875 
   4876   // sanity checks
   4877   if (!filePath || isBlankS(filePath) || !buffer) {
   4878     return(-1);
   4879   }
   4880 
   4881   len = fileSize(filePath);;
   4882   if (len == -1) {
   4883     return(-1);
   4884   }
   4885 
   4886   f = fopen(filePath, "r");
   4887   if (!f) {
   4888     pFuncError
   4889     shEPrintfS("The path was: \"%s\"\n", filePath);
   4890     return(-1);
   4891   }
   4892   readStatus = fread(buffer, 1, (size_t)len , f);
   4893   fclose(f);
   4894 
   4895   if (readStatus != (size_t)len) {
   4896     pFuncError
   4897     shEPrintfS("The path was: \"%s\"\n", filePath);
   4898     return(-1);
   4899   }
   4900 
   4901   return(len);
   4902 }
   4903 
   4904 
   4905 /**
   4906  * buffer size read file to buffer
   4907  *
   4908  * The function allocates the buffer
   4909  *
   4910  * \param
   4911  *   filePath path to file
   4912  * \param
   4913  *   buffer   already allocated buffer
   4914  * \param
   4915  *   dstSize path buffer size
   4916  * \return
   4917  *   data from file in buffer
   4918  *   buffer size
   4919  *   -1 error
   4920  */
   4921 ssize_t bLReadFile(const char *filePath, void *buffer, size_t dstSize) {
   4922   FILE *f = NULL;
   4923   ssize_t len;
   4924   size_t readStatus;
   4925 
   4926   // sanity checks
   4927   if (!filePath || isBlankS(filePath) || !buffer) {
   4928     return(-1);
   4929   }
   4930 
   4931   if (!dstSize) {
   4932     return(0);
   4933   }
   4934 
   4935   len = fileSize(filePath);;
   4936   if (len == -1) {
   4937     return(-1);
   4938   }
   4939 
   4940   // truncate if necessary
   4941   len = ((size_t)len < dstSize) ? len : (ssize_t)dstSize;
   4942 
   4943   f = fopen(filePath, "r");
   4944   if (!f) {
   4945     pFuncError
   4946     shEPrintfS("The path was: \"%s\"\n", filePath);
   4947     return(-1);
   4948   }
   4949   readStatus = fread(buffer, 1, (size_t)len , f);
   4950   fclose(f);
   4951 
   4952   if (readStatus != (size_t)len) {
   4953     pFuncError
   4954     shEPrintfS("The path was: \"%s\"\n", filePath);
   4955     return(-1);
   4956   }
   4957 
   4958   return(len);
   4959 }
   4960 
   4961 
   4962 /**
   4963  * write string to file
   4964  *
   4965  * \param
   4966  *   filePath path to file
   4967  *   string
   4968  * \return
   4969  *   1 success
   4970  *   0 error
   4971  */
   4972 int writeFileS(const char *filePath, const char *string) {
   4973   FILE *f = NULL;
   4974   size_t len;
   4975   size_t writeStatus;
   4976 
   4977   // sanity checks
   4978   if (!filePath || isBlankS(filePath) || !string) {
   4979     return(0);
   4980   }
   4981 
   4982   len = strlen(string);
   4983 
   4984   f = fopen(filePath, "w");
   4985   if (!f) {
   4986     pFuncError
   4987     shEPrintfS("The path was: \"%s\"\n", filePath);
   4988     return(0);
   4989   }
   4990   writeStatus = fwrite(string, 1, len , f);
   4991   fclose(f);
   4992 
   4993   if (writeStatus != len) {
   4994     pFuncError
   4995     shEPrintfS("The path was: \"%s\"\n", filePath);
   4996     return(0);
   4997   }
   4998 
   4999   return(1);
   5000 }
   5001 
   5002 
   5003 /**
   5004  * write buffer to file
   5005  *
   5006  * \param
   5007  *   filePath path to file
   5008  *   buffer
   5009  *   len      buffer size in bytes
   5010  * \return
   5011  *   1 success
   5012  *   0 error
   5013  */
   5014 int writeFile(const char *filePath, void *buffer, size_t len) {
   5015   FILE *f = NULL;
   5016   size_t writeStatus;
   5017 
   5018   // sanity checks
   5019   if (!filePath || isBlankS(filePath) || !buffer) {
   5020     return(0);
   5021   }
   5022 
   5023   f = fopen(filePath, "w");
   5024   if (!f) {
   5025     pFuncError
   5026     shEPrintfS("The path was: \"%s\"\n", filePath);
   5027     return(0);
   5028   }
   5029   writeStatus = fwrite(buffer, 1, len , f);
   5030   fclose(f);
   5031 
   5032   if (writeStatus != len) {
   5033     pFuncError
   5034     shEPrintfS("The path was: \"%s\"\n", filePath);
   5035     return(0);
   5036   }
   5037 
   5038   return(1);
   5039 }
   5040 
   5041 
   5042 /**
   5043  * write string to file
   5044  *
   5045  * \param
   5046  *   fp file pointer
   5047  *   string
   5048  * \return
   5049  *   1 success
   5050  *   0 error
   5051  */
   5052 int writeStreamS(FILE *fp, const char *string) {
   5053   size_t len;
   5054   size_t writeStatus;
   5055 
   5056   // sanity checks
   5057   if (!fp || !string) {
   5058     return(0);
   5059   }
   5060 
   5061   len = strlen(string);
   5062 
   5063   writeStatus = fwrite(string, 1, len , fp);
   5064 
   5065   if (writeStatus != len) {
   5066     pFuncError
   5067     return(0);
   5068   }
   5069 
   5070   return(1);
   5071 }
   5072 
   5073 /**
   5074  * write buffer to file
   5075  *
   5076  * \param
   5077  *   fp file pointer
   5078  *   buffer
   5079  *   len      buffer size in bytes
   5080  * \return
   5081  *   1 success
   5082  *   0 error
   5083  */
   5084 int writeLStream(FILE *fp, void *buffer, size_t len) {
   5085   size_t writeStatus;
   5086 
   5087   // sanity checks
   5088   if (!fp || !buffer) {
   5089     return(0);
   5090   }
   5091 
   5092   writeStatus = fwrite(buffer, 1, len , fp);
   5093 
   5094   if (writeStatus != len) {
   5095     pFuncError
   5096     return(0);
   5097   }
   5098 
   5099   return(1);
   5100 }
   5101 
   5102 /**
   5103  * append string to filePath
   5104  *
   5105  * \param
   5106  *   filePath path to file
   5107  *   string
   5108  * \return
   5109  *   true success
   5110  *   false failed, filePath or list are NULL
   5111  */
   5112 bool appendFileS(const char *filePath, const char *string) {
   5113   FILE *fp = NULL;
   5114   size_t len;
   5115   size_t writeStatus;
   5116 
   5117   // sanity checks
   5118   if (!filePath || isBlankS(filePath) || !string) {
   5119     return(false);
   5120   }
   5121 
   5122   len = strlen(string);
   5123 
   5124   fp = fopen(filePath, "a");
   5125   if (!fp) {
   5126     pFuncError
   5127     shEPrintfS("The path was: \"%s\"\n", filePath);
   5128     return(false);
   5129   }
   5130   writeStatus = fwrite(string, 1, len , fp);
   5131   fclose(fp);
   5132 
   5133   if (writeStatus != len) {
   5134     pFuncError
   5135     shEPrintfS("The path was: \"%s\"\n", filePath);
   5136     return(false);
   5137   }
   5138 
   5139   return(true);
   5140 }
   5141 
   5142 /**
   5143  * append buffer to file
   5144  *
   5145  * \param
   5146  *   filePath path to file
   5147  *   buffer
   5148  *   len      buffer size in bytes
   5149  * \return
   5150  *   true success
   5151  *   false error
   5152  */
   5153 bool appendFile(const char *filePath, void *buffer, size_t len) {
   5154   FILE *f = NULL;
   5155   size_t writeStatus;
   5156 
   5157   // sanity checks
   5158   if (!filePath || isBlankS(filePath) || !buffer) {
   5159     return(0);
   5160   }
   5161 
   5162   f = fopen(filePath, "a");
   5163   if (!f) {
   5164     pFuncError
   5165     shEPrintfS("The path was: \"%s\"\n", filePath);
   5166     return(0);
   5167   }
   5168   writeStatus = fwrite(buffer, 1, len , f);
   5169   fclose(f);
   5170 
   5171   if (writeStatus != len) {
   5172     pFuncError
   5173     shEPrintfS("The path was: \"%s\"\n", filePath);
   5174     return(0);
   5175   }
   5176 
   5177   return(1);
   5178 }
   5179 
   5180 /**
   5181  * list all files in a directory recursively
   5182  * and sort the list
   5183  *
   5184  * directories are not listed
   5185  *
   5186  * \param
   5187  *   dirPath: path to directory
   5188  * \return
   5189  *   list of files (you must free the pointer with listFreeS)
   5190  *   empty list when the directory is not found
   5191  */
   5192 char **walkDir(const char* dirPath) {
   5193   char **list = NULL;
   5194 
   5195   // sanity checks
   5196   if (!dirPath || isBlankS(dirPath)) {
   5197     return(NULL);
   5198   }
   5199 
   5200   walkADir(dirPath, &list);
   5201 
   5202   pErrorNULL(iListSortS(&list));
   5203 
   5204   return(list);
   5205 }
   5206 
   5207 internal void walkADir(const char *dirPath, char ***list) {
   5208   DIR *d = NULL;
   5209   struct dirent *dp = NULL;
   5210   char *sPath = NULL;
   5211 
   5212   d = opendir(dirPath);
   5213   if (!d) {
   5214     pFuncError
   5215     shEPrintfS("The path was: \"%s\"\n", dirPath);
   5216     return;
   5217   }
   5218 
   5219   dp = readdir(d);
   5220   while (dp) {
   5221     if (eqS(dp->d_name, ".") || eqS(dp->d_name, "..")) {
   5222       dp = readdir(d);
   5223       continue;
   5224     }
   5225 
   5226     sPath = catS(dirPath, "/", dp->d_name);
   5227 
   5228     if (isDir(sPath)) {
   5229       if (!isLink(sPath)) {
   5230         walkADir(sPath, list);
   5231     }
   5232       }
   5233     else {
   5234       pErrorNULL(listPushS(list, sPath));
   5235     }
   5236     free(sPath);
   5237     dp = readdir(d);
   5238   }
   5239 
   5240   closedir(d);
   5241 }
   5242 
   5243 /**
   5244  * list all directories in a directory recursively
   5245  * and sort the list
   5246  *
   5247  * files are not listed
   5248  *
   5249  * \param
   5250  *   dirPath: path to directory
   5251  * \return
   5252  *   list of directories (you must free the pointer with listFreeS)
   5253  *   empty list when the directory is not found
   5254  */
   5255 char **walkDirDir(const char* dirPath) {
   5256   char **list = NULL;
   5257 
   5258   // sanity checks
   5259   if (!dirPath || isBlankS(dirPath)) {
   5260     return(NULL);
   5261   }
   5262 
   5263   walkADirDir(dirPath, &list);
   5264 
   5265   pErrorNULL(iListSortS(&list));
   5266 
   5267   return(list);
   5268 }
   5269 
   5270 internal void walkADirDir(const char *dirPath, char ***list) {
   5271   DIR *d = NULL;
   5272   struct dirent *dp = NULL;
   5273   char *sPath = NULL;
   5274 
   5275   d = opendir(dirPath);
   5276   if (!d) {
   5277     pFuncError
   5278     shEPrintfS("The path was: \"%s\"\n", dirPath);
   5279     return;
   5280   }
   5281 
   5282   dp = readdir(d);
   5283   while (dp) {
   5284     if (eqS(dp->d_name, ".") || eqS(dp->d_name, "..")) {
   5285       dp = readdir(d);
   5286       continue;
   5287     }
   5288 
   5289     sPath = catS(dirPath, "/", dp->d_name);
   5290 
   5291     if (isDir(sPath)) {
   5292       pErrorNULL(listPushS(list, sPath));
   5293       if (!isLink(sPath)) {
   5294         walkADirDir(sPath, list);
   5295     }
   5296       }
   5297     free(sPath);
   5298     dp = readdir(d);
   5299   }
   5300 
   5301   closedir(d);
   5302 }
   5303 
   5304 /**
   5305  * list files in a directory
   5306  * and sort the list
   5307  *
   5308  * directories are not listed
   5309  *
   5310  * \param
   5311  *   dirPath: path to directory
   5312  * \return
   5313  *   list of files, dirPath is not prepended to the file names (you must free the pointer with listFreeS)
   5314  *   empty list when the directory is not found
   5315  */
   5316 char **readDir(const char *dirPath) {
   5317   char **list = NULL;
   5318   DIR *d = NULL;
   5319   struct dirent *dp = NULL;
   5320 
   5321   // sanity checks
   5322   if (!dirPath || isBlankS(dirPath)) {
   5323     return(NULL);
   5324   }
   5325 
   5326   d = opendir(dirPath);
   5327   if (!d) {
   5328     pFuncError
   5329     shEPrintfS("The path was: \"%s\"\n", dirPath);
   5330     return(NULL);
   5331   }
   5332 
   5333   dp = readdir(d);
   5334   while (dp) {
   5335     if (eqS(dp->d_name, ".") || eqS(dp->d_name, "..")) {
   5336       dp = readdir(d);
   5337       continue;
   5338     }
   5339 
   5340     char *sPath = catS(dirPath, "/", dp->d_name);
   5341 
   5342     if (!isDir(sPath)) {
   5343       pErrorNULL(listPushS(&list, dp->d_name));
   5344     }
   5345     free(sPath);
   5346     dp = readdir(d);
   5347   }
   5348 
   5349   closedir(d);
   5350 
   5351   pErrorNULL(iListSortS(&list));
   5352 
   5353   return(list);
   5354 }
   5355 
   5356 /**
   5357  * list directories in a directory
   5358  * and sort the list
   5359  *
   5360  * files are not listed
   5361  *
   5362  * \param
   5363  *   dirPath: path to directory
   5364  * \return
   5365  *   list of directories, dirPath is not prepended to the names (you must free the pointer with listFreeS)
   5366  *   empty list when the directory is not found
   5367  */
   5368 char **readDirDir(const char *dirPath) {
   5369   char **list = NULL;
   5370   DIR *d = NULL;
   5371   struct dirent *dp = NULL;
   5372 
   5373   // sanity checks
   5374   if (!dirPath || isBlankS(dirPath)) {
   5375     return(NULL);
   5376   }
   5377 
   5378   d = opendir(dirPath);
   5379   if (!d) {
   5380     pFuncError
   5381     shEPrintfS("The path was: \"%s\"\n", dirPath);
   5382     return(NULL);
   5383   }
   5384 
   5385   dp = readdir(d);
   5386   while (dp) {
   5387     if (eqS(dp->d_name, ".") || eqS(dp->d_name, "..")) {
   5388       dp = readdir(d);
   5389       continue;
   5390     }
   5391 
   5392     char *sPath = catS(dirPath, "/", dp->d_name);
   5393 
   5394     if (isDir(sPath)) {
   5395       pErrorNULL(listPushS(&list, dp->d_name));
   5396     }
   5397     free(sPath);
   5398     dp = readdir(d);
   5399   }
   5400 
   5401   closedir(d);
   5402 
   5403   pErrorNULL(iListSortS(&list));
   5404 
   5405   return(list);
   5406 }
   5407 
   5408 /**
   5409  * list all files and directories in a directory recursively
   5410  * and sort the list
   5411  *
   5412  * directories are listed
   5413  *
   5414  * \param
   5415  *   dirPath: path to directory
   5416  * \return
   5417  *   list of files (you must free the pointer with listFreeS)
   5418  *   empty list when the directory is not found
   5419  */
   5420 char **walkDirAll(const char* dirPath) {
   5421   char **list = NULL;
   5422 
   5423   // sanity checks
   5424   if (!dirPath || isBlankS(dirPath)) {
   5425     return(NULL);
   5426   }
   5427 
   5428   walkADirAll(dirPath, &list);
   5429 
   5430   pErrorNULL(iListSortS(&list));
   5431 
   5432   return(list);
   5433 }
   5434 
   5435 internal void walkADirAll(const char *dirPath, char ***list) {
   5436   DIR *d = NULL;
   5437   struct dirent *dp = NULL;
   5438   char *sPath = NULL;
   5439 
   5440   d = opendir(dirPath);
   5441   if (!d) {
   5442     pFuncError
   5443     shEPrintfS("The path was: \"%s\"\n", dirPath);
   5444     return;
   5445   }
   5446 
   5447   dp = readdir(d);
   5448   while (dp) {
   5449     if (eqS(dp->d_name, ".") || eqS(dp->d_name, "..")) {
   5450       dp = readdir(d);
   5451       continue;
   5452     }
   5453 
   5454     sPath = catS(dirPath, "/", dp->d_name);
   5455 
   5456     pErrorNULL(iListPushS(list, sPath));
   5457 
   5458     if (isDir(sPath)) {
   5459       if (!isLink(sPath)) {
   5460         walkADirAll(sPath, list);
   5461     }
   5462       }
   5463     dp = readdir(d);
   5464   }
   5465 
   5466   closedir(d);
   5467 }
   5468 
   5469 /**
   5470  * list files in a directory
   5471  * and sort the list
   5472  *
   5473  * directories are listed
   5474  *
   5475  * \param
   5476  *   dirPath: path to directory
   5477  * \return
   5478  *   list of files, dirPath is not prepended to the file names (you must free the pointer with listFreeS)
   5479  *   empty list when the directory is not found
   5480  */
   5481 char **readDirAll(const char *dirPath) {
   5482   char **list = NULL;
   5483   DIR *d = NULL;
   5484   struct dirent *dp = NULL;
   5485 
   5486   // sanity checks
   5487   if (!dirPath || isBlankS(dirPath)) {
   5488     return(NULL);
   5489   }
   5490 
   5491   d = opendir(dirPath);
   5492   if (!d) {
   5493     pFuncError
   5494     shEPrintfS("The path was: \"%s\"\n", dirPath);
   5495     return(NULL);
   5496   }
   5497 
   5498   dp = readdir(d);
   5499   while (dp) {
   5500     if (eqS(dp->d_name, ".") || eqS(dp->d_name, "..")) {
   5501       dp = readdir(d);
   5502       continue;
   5503     }
   5504 
   5505     char *sPath = catS(dirPath, "/", dp->d_name);
   5506 
   5507     pErrorNULL(listPushS(&list, dp->d_name));
   5508     free(sPath);
   5509     dp = readdir(d);
   5510   }
   5511 
   5512   closedir(d);
   5513 
   5514   pErrorNULL(iListSortS(&list));
   5515 
   5516   return(list);
   5517 }
   5518 
   5519 /**
   5520  * get umask
   5521  */
   5522 mode_t getUmask(void) {
   5523 
   5524   mode_t mask = umask(0);
   5525   umask(mask);
   5526   return(mask);
   5527 }
   5528 
   5529 /**
   5530  * get current permissions for creating directories
   5531  */
   5532 mode_t getCurrentPermissions(void) {
   5533 
   5534   return(0777 & ~getUmask());
   5535 }
   5536 
   5537 /**
   5538  * recursive mkdir
   5539  *
   5540  * \param
   5541  *   path
   5542  * \return
   5543  *   1 success
   5544  *   0 when path is NULL or empty
   5545  */
   5546 int mkdirParents(const char* path) {
   5547   char tmp[8192];
   5548   char *p = NULL;
   5549   size_t len;
   5550 
   5551   // sanity checks
   5552   if (!path || isBlankS(path)) {
   5553     return(0);
   5554   }
   5555 
   5556   snprintf(tmp, sizeof(tmp),"%s", path);
   5557 
   5558   len = strlen(tmp);;
   5559 
   5560   mode_t mode = getCurrentPermissions();
   5561 
   5562   if (tmp[len - 1] == '/') {
   5563           tmp[len - 1] = 0;
   5564   }
   5565   for (p = tmp + 1; *p; p++) {
   5566     if (*p == '/') {
   5567       *p = 0;
   5568       if (mkdir(tmp, mode) == -1) {
   5569         if (errno != EEXIST) {
   5570           pFuncError
   5571           shEPrintfS("The path was: \"%s\"\n", tmp);
   5572           return(0);
   5573       }
   5574         }
   5575       *p = '/';
   5576   }
   5577     }
   5578 
   5579   if (mkdir(tmp, mode) == -1) {
   5580     if (errno != EEXIST) {
   5581       pFuncError
   5582       shEPrintfS("The path was: \"%s\"\n", tmp);
   5583       return(0);
   5584   }
   5585     }
   5586   return(1);
   5587 }
   5588 
   5589 /**
   5590  * remove all
   5591  * delete recursively files and directories
   5592  *
   5593  * \param
   5594  *   path
   5595  * \return
   5596  *   1 success
   5597  *   0 when path is NULL or empty
   5598  */
   5599 int rmAll(const char* path) {
   5600 
   5601   // sanity checks
   5602   if (!path || isBlankS(path)) {
   5603     return(0);
   5604   }
   5605 
   5606   if (!isDir(path)) {
   5607     int r;
   5608     pErrorResultCmd(r, remove(path), == -1, pFuncError; shEPrintfS("The path was: \"%s\"\n", path));
   5609     return(r+1);
   5610   }
   5611   else {
   5612     return(rmADir(path));
   5613 }
   5614   }
   5615 
   5616 int rmADir(const char *dirPath) {
   5617   DIR *d = NULL;
   5618   struct dirent *dp = NULL;
   5619   char *sPath = NULL;
   5620   int r = 1;;
   5621 
   5622   d = opendir(dirPath);
   5623   if (!d) {
   5624     pFuncError
   5625     shEPrintfS("The path was: \"%s\"\n", dirPath);
   5626     return(0);
   5627   }
   5628 
   5629   dp = readdir(d);
   5630   while (dp) {
   5631     if (eqS(dp->d_name, ".") || eqS(dp->d_name, "..")) {
   5632       dp = readdir(d);
   5633       continue;
   5634     }
   5635 
   5636     int e = asprintf(&sPath, "%s/%s", dirPath, dp->d_name);
   5637     if (e == -1) {
   5638       pFuncError;
   5639       shEPrintfS("The path was: \"%s\"\n", dirPath);
   5640       closedir(d);
   5641       return(0);
   5642     }
   5643 
   5644 
   5645     if (isDir(sPath)) {
   5646       r = rmADir(sPath);;
   5647     }
   5648     else {
   5649       pErrorResultCmd(r, remove(sPath), == -1, pFuncError; shEPrintfS("The path was: \"%s\"\n", sPath); r=0; free(sPath); break);
   5650       r = 1;
   5651     }
   5652     dp = readdir(d);
   5653     free(sPath);
   5654   }
   5655 
   5656   closedir(d);
   5657 
   5658   int rd;
   5659   pErrorResultCmd(rd, rmdir(dirPath), == -1, pFuncError; shEPrintfS("The path was: \"%s\"\n", dirPath); return(0));;
   5660   return(r);
   5661 }
   5662 
   5663 
   5664 /**
   5665  * copy files recursively
   5666  * This function is equivalent to 'cp -Ra' without wildcards and circular link detection
   5667  *
   5668  * when src ends with /, the files in src are copied to dst
   5669  * when src does't end with /, the last directory name in src is copied to dst
   5670  * The permissions are copied to the destination
   5671  *
   5672  * \param
   5673  *   src source path
   5674  *   dst destination path
   5675  * \return
   5676  *   1 success
   5677  *   0 when src or dst are NULL or empty
   5678  */
   5679 int copy(const char* src, const char* dst) {
   5680 
   5681   // sanity checks
   5682   if (!src || !dst || isBlankS(src) || isBlankS(dst)) {
   5683     return(0);
   5684   }
   5685 
   5686   if (!fileExists(src)) {
   5687     return(0);
   5688   }
   5689 
   5690   if (!isDir(src)) {
   5691     // copy file
   5692     if (getS(dst, -1) == '/') {
   5693       // dst name is a directory, add src basename to dst
   5694       char *csrc  = strdup(src);
   5695       char *path  = basename(csrc);
   5696       char *dPath = alloca(strlen(dst) + 1 + strlen(path) + 1);
   5697       sprintf(dPath, "%s/%s", dst, path);
   5698       free(csrc);
   5699       return(copyFile(src, dPath));
   5700     }
   5701     else {
   5702       return(copyFile(src, dst));
   5703   }
   5704     }
   5705   else {
   5706     if (getS(src, -1) == '/') {
   5707       if (!isDir(dst)) {
   5708         // create dst dir when it doesn't exists
   5709         if (!mkdirParents(dst)) {
   5710           if (errno != EEXIST) {
   5711             shEPrintfS("copy: mkdir destination error, path: %s\n", dst);
   5712             return(0);
   5713       }
   5714         }
   5715           }
   5716       return(copyADir(src, dst, ""));
   5717     }
   5718     else {
   5719       char *csrc  = strdup(src);
   5720       char *path  = basename(csrc);
   5721       char *dPath = alloca(strlen(dst) + 1 + strlen(path) + 1);
   5722       sprintf(dPath, "%s/%s", dst, path);
   5723       free(csrc);
   5724 
   5725       if (!mkdirParents(dPath)) {
   5726         if (errno != EEXIST) {
   5727           shEPrintfS("copy: mkdir destination error, path: %s\n", dPath);
   5728           return(0);
   5729       }
   5730         }
   5731 
   5732       int r = copyADir(src, dPath, "");
   5733 
   5734       // copy permissions
   5735       struct stat st;
   5736       if (stat(src, &st)) {
   5737         pFuncError
   5738         shEPrintfS("The path was: \"%s\"\n", src);
   5739         return(0);
   5740       }
   5741       if (chmod(dPath, st.st_mode & 07777)) {
   5742         pFuncError
   5743         shEPrintfS("The path was: \"%s\"\n", dPath);
   5744         return(0);
   5745       }
   5746       return(r);
   5747 }
   5748   }
   5749     }
   5750 
   5751 int copyFile(const char* src, const char* dst) {
   5752   FILE *fsrc = NULL;
   5753   FILE *fdst = NULL;
   5754   char buf[8192];
   5755 
   5756   fsrc = fopen(src, "r");
   5757   pTestErrorCmd(fsrc == NULL, shEPrintfS("The source file was: %s\n", src); return(0));;
   5758 
   5759   fdst = fopen(dst, "w");
   5760   pTestErrorCmd(fdst == NULL, shEPrintfS("The destination file was: %s\n", dst); fclose(fsrc); return(0));;
   5761 
   5762   while (1) {
   5763       size_t readStatus = fread(buf, 1, sizeof(buf), fsrc);
   5764 
   5765       if (!readStatus) {
   5766          break;
   5767       }
   5768 
   5769       size_t writeStatus = fwrite(buf, 1, readStatus, fdst);
   5770       if (writeStatus != readStatus) {
   5771         shPrintError
   5772         shEPrintfS("The path was: \"%s\"\n", dst);
   5773         fclose(fsrc);
   5774         fclose(fdst);
   5775         return(0);
   5776   }
   5777       }
   5778 
   5779   // copy permissions
   5780   struct stat st;
   5781   if (stat(src, &st)) {
   5782     pFuncError
   5783     shEPrintfS("The path was: \"%s\"\n", src);
   5784     fclose(fsrc);
   5785     fclose(fdst);
   5786     return(0);
   5787   }
   5788   if (chmod(dst, st.st_mode & 07777)) {
   5789     pFuncError
   5790     shEPrintfS("The path was: \"%s\"\n", dst);
   5791     fclose(fsrc);
   5792     fclose(fdst);
   5793     return(0);
   5794   }
   5795 
   5796   fclose(fsrc);
   5797   fclose(fdst);
   5798   return(1);
   5799 }
   5800 
   5801 int copyADir(const char *src, const char *dst, const char *path) {
   5802   DIR *d = NULL;
   5803   struct dirent *dp = NULL;
   5804   char *sPath = NULL;
   5805   char *dPath = NULL;
   5806   char *currentPath = NULL;
   5807   int r = 1;;
   5808   char *currentSrc = NULL;
   5809   char *currentDst = NULL;
   5810 
   5811   asprintf(&currentSrc, "%s/%s", src, path);
   5812   asprintf(&currentDst, "%s/%s", dst, path);
   5813 
   5814   d = opendir(currentSrc);
   5815   if (!d) {
   5816     pFuncError
   5817     shEPrintfS("The path was: \"%s\"\n", currentSrc);
   5818     free(currentSrc);
   5819     free(currentDst);
   5820     return(0);
   5821   }
   5822 
   5823   dp = readdir(d);
   5824   while (dp) {
   5825     if (eqS(dp->d_name, ".") || eqS(dp->d_name, "..")) {
   5826       dp = readdir(d);
   5827       continue;
   5828     }
   5829 
   5830     asprintf(&sPath, "%s/%s", currentSrc, dp->d_name);
   5831     asprintf(&dPath, "%s/%s", currentDst, dp->d_name);
   5832 
   5833     if (isDir(sPath)) {
   5834       if (isLink(sPath)) {
   5835         dp = readdir(d);
   5836         free(sPath);
   5837         free(dPath);
   5838         continue;
   5839       }
   5840       mode_t mode = getCurrentPermissions();
   5841       if (mkdir(dPath, mode) == -1) {
   5842         if (errno != EEXIST) {
   5843           pFuncError
   5844           shEPrintfS("The path was: \"%s\"\n", dPath);
   5845           r = 0;
   5846           free(sPath);
   5847         }
   5848          free(dPath);
   5849           break;
   5850       }
   5851       asprintf(&currentPath, "%s/%s", path, dp->d_name);
   5852       r = copyADir(src, dst, currentPath);;
   5853       free(currentPath);
   5854       // copy permissions
   5855       struct stat st;
   5856       if (stat(sPath, &st)) {
   5857         pFuncError
   5858         shEPrintfS("The path was: \"%s\"\n", sPath);
   5859         r = 0;
   5860         free(sPath);
   5861         free(dPath);
   5862         break;
   5863       }
   5864       if (chmod(dPath, st.st_mode & 07777)) {
   5865         pFuncError
   5866         shEPrintfS("The path was: \"%s\"\n", dPath);
   5867         r = 0;
   5868         free(sPath);
   5869         free(dPath);
   5870         break;
   5871     }
   5872       }
   5873     else {
   5874       pErrorResultCmd(r, copyFile(sPath, dPath), == 0, pFuncError; shEPrintfS("The path was: \"%s\"\n", sPath); free(sPath); free(dPath); break);
   5875     }
   5876     dp = readdir(d);
   5877     free(sPath);
   5878     free(dPath);
   5879   }
   5880 
   5881   closedir(d);
   5882   free(currentSrc);
   5883   free(currentDst);
   5884   return(r);
   5885 }
   5886 
   5887 /**
   5888  * rename file
   5889  *
   5890  * \param
   5891  *   src source path
   5892  *   dst destination path
   5893  * \return
   5894  *   1 success
   5895  *   0 when src or dst are NULL or empty
   5896  */
   5897 int shRename(const char* src, const char* dst) {
   5898 
   5899   // sanity checks
   5900   if (!src || !dst || isBlankS(src) || isBlankS(dst)) {
   5901     return(0);
   5902   }
   5903 
   5904   if (!fileExists(src)) {
   5905     return(0);
   5906   }
   5907 
   5908   int r = rename(src, dst);;
   5909   if (r) {
   5910     pFuncError
   5911     shEPrintfS("The source path was: \"%s\"\n", src);
   5912     shEPrintfS("The destination path was: \"%s\"\n", src);
   5913     return(0);
   5914   }
   5915   return(1);
   5916 }
   5917 
   5918 
   5919 /**
   5920  * move files recursively
   5921  *
   5922  * copy and then delete source
   5923  *
   5924  * called shMove because it conflicts with move in ncurses
   5925  *
   5926  * \param
   5927  *   src source path
   5928  * \param
   5929  *   dst destination path
   5930  * \return
   5931  *   1 success
   5932  *   0 when src or dst are NULL or empty
   5933  */
   5934 int shMove(const char* src, const char* dst) {
   5935 
   5936   int r = copy(src, dst);;
   5937   if (!r) {
   5938     return(r);
   5939   }
   5940 
   5941   r = rmAll(src);;
   5942   return(r);
   5943 }
   5944 
   5945 // internal file pointer to /dev/urandom
   5946 // used in the random functions
   5947 static FILE *urandomFp = NULL;
   5948 
   5949 // selected random function
   5950 typedef uint64_t (*randomWordFt)(void);
   5951 static randomWordFt randomWordF = randomWord;
   5952 
   5953 /**
   5954  * use software random numbers
   5955  * works on all cpu architectures
   5956  * the default random function is software
   5957  */
   5958 void setSoftwareRandom(void) {
   5959 
   5960   randomWordF = randomWord;
   5961   pError0(randomUrandomOpen());
   5962 }
   5963 
   5964 /**
   5965  * use cpu hardware random number generator
   5966  */
   5967 void setHardwareRandom(void) {
   5968 
   5969   #ifdef __GNUC__
   5970   randomWordF = randomWordFromHW;
   5971   #endif
   5972 }
   5973 
   5974 /**
   5975  * open /dev/urandom in libsheepy
   5976  *
   5977  * call this function before calling randomWord and randomChoice
   5978  * when random are not needed anymore call randomUrandomClose
   5979  *
   5980  * \return
   5981  *   1 success
   5982  *   0 error
   5983 */
   5984 int randomUrandomOpen(void) {
   5985 
   5986   // TODO close random file at exit, dont close in random functions
   5987   // to be able to open several times, like hashtableInit
   5988   if (urandomFp) {
   5989     return(1);
   5990   }
   5991   urandomFp = fopen("/dev/urandom", "r");
   5992   if (!urandomFp) {
   5993     return(0);
   5994   }
   5995   else {
   5996     return(1);
   5997 }
   5998   }
   5999 
   6000 
   6001 /**
   6002  * close /dev/urandom in libsheepy
   6003  * call this function when random are not needed anymore
   6004  */
   6005 void randomUrandomClose(void) {
   6006 
   6007   if (urandomFp) {
   6008     fclose(urandomFp);
   6009     urandomFp = NULL;
   6010 }
   6011   }
   6012 
   6013 
   6014 /**
   6015  * return random 64 bit unsigned integer
   6016  * call randomUrandomOpen before this calling function
   6017  *
   6018  * \return
   6019  *   random uint64 integer
   6020  *   0 error urandomFp file is NULL or fread failed
   6021  */
   6022 uint64_t randomWord(void) {
   6023   uint64_t r;
   6024   size_t readStatus;
   6025 
   6026   if (!urandomFp) {
   6027     return(0);
   6028   }
   6029 
   6030   readStatus = fread(&r, sizeof(r), 1 , urandomFp);
   6031 
   6032   if (readStatus != 1) {
   6033     pFuncError
   6034     return(0);
   6035   }
   6036   if (r == 0) {
   6037     // -1 is not a valid return value, it signals errors
   6038     r++;
   6039   }
   6040   return(r);
   6041 }
   6042 
   6043 /**
   6044  * return random 64 bit unsigned integer from the cpu
   6045  * when the cpu doesn't have the random generator instruction, the program
   6046  * stops with 'Illegal instruction'
   6047  */
   6048 uint64_t randomWordFromHW(void) {
   6049   unsigned long long r;
   6050 
   6051   #ifdef __GNUC__
   6052   #if (!defined(__arm__) && !defined(__aarch64__) && !defined(__riscv) && !defined(__i386__))
   6053   // TODO valgrind doesn't support the rdrand instruction 171117
   6054   #ifndef unitTest
   6055   _rdrand64_step(&r);
   6056   #else
   6057   r = 'a';;
   6058   // unitTest
   6059   #endif
   6060   #else
   6061   logE("HW Random generator not available on the ARM platform");
   6062   return(0);
   6063   // __arm__ || __aarch64__ || __riscv || __i386__
   6064   #endif
   6065   // __GNUC__
   6066   #endif
   6067   return((uint64_t)r);
   6068 }
   6069 
   6070 /**
   6071  * return a random value between 0 and range 0<=value<range
   6072  * call randomUrandomOpen before this calling function
   6073  *
   6074  * \param
   6075  *   range - must be > 0
   6076  * \return
   6077  *   random uint64 0<=value<range
   6078  *   range error
   6079  */
   6080 uint64_t randomChoice(uint64_t range) {
   6081   uint64_t r;
   6082 
   6083   if (range == 0) {
   6084     // range 0 is invalid
   6085     return(range);
   6086   }
   6087   r = randomWordF();
   6088   if (r == 0) {
   6089     return(range);
   6090   }
   6091   else {
   6092     return(randomWordF() % range);
   6093 }
   6094   }
   6095 
   6096 // TODO create random string function that takes charset as parameter
   6097 /**
   6098  * random string
   6099  *
   6100  * allocate and generate a random string in charset "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_-,"
   6101  *
   6102  *
   6103  * \param
   6104  *   string length
   6105  * \return
   6106  *   random string (you must free the pointer)
   6107  *   NULL error opening /dev/urandom, malloc failed, fread /dev/urandom failed, length is 0
   6108  */
   6109 char *randomS(uint64_t length) {
   6110   char charset[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_-,";;
   6111   char *r = NULL;
   6112   char *workingP = NULL;
   6113   int rOpen;
   6114 
   6115   // sanity checks
   6116   if (length == 0) {
   6117     return(NULL);
   6118   }
   6119 
   6120   // open /dev/urandom
   6121   if (randomWordF == randomWord) {
   6122     rOpen = randomUrandomOpen();;
   6123     if (!rOpen) {
   6124       return(NULL);
   6125   }
   6126     }
   6127 
   6128   // allocate result
   6129   // dont use MALLOC here, the test fails
   6130   r        = malloc(length+1);;
   6131   if (!r) {
   6132     return(NULL);
   6133   }
   6134 
   6135   workingP = r;
   6136 
   6137   // generate random values
   6138   while (length-- > 0) {
   6139     uint64_t rChoice;
   6140     size_t len = strlen(charset);
   6141 
   6142     rChoice = randomChoice(len);
   6143     if (rChoice == len) {
   6144       free(r);
   6145       return(NULL);
   6146     }
   6147 
   6148     *workingP++ = charset[rChoice];
   6149   }
   6150 
   6151   *workingP = '\0';
   6152 
   6153   return(r);
   6154 }
   6155 
   6156 /**
   6157  * buffer random string
   6158  *
   6159  * allocate and generate a random string in charset "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_-,"
   6160  *
   6161  * \param
   6162  *   dst destination buffer
   6163  * \param
   6164  *   dstSize destination buffer size, must be at least 2, to have at least 1 random char in the string
   6165  * \return
   6166  *   random string
   6167  *   NULL error opening /dev/urandom, malloc failed, fread /dev/urandom failed, length is 0
   6168  */
   6169 char *bRandomS(char *dst, size_t dstSize) {
   6170   char charset[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_-,";;
   6171   char *workingP = NULL;
   6172   int rOpen;
   6173 
   6174   // sanity checks
   6175   if (!dst || dstSize < 2) {
   6176     return(NULL);
   6177   }
   6178 
   6179   // open /dev/urandom
   6180   if (randomWordF == randomWord) {
   6181     rOpen = randomUrandomOpen();;
   6182     if (!rOpen) {
   6183       return(NULL);
   6184   }
   6185     }
   6186 
   6187   workingP = dst;
   6188   // keep space for NUL char at the end if the string
   6189   dstSize--;
   6190 
   6191   // generate random values
   6192   while (dstSize-- > 0) {
   6193     uint64_t rChoice;
   6194     size_t len = strlen(charset);
   6195 
   6196     rChoice = randomChoice(len);
   6197     if (rChoice == len) {
   6198       return(NULL);
   6199     }
   6200 
   6201     *workingP++ = charset[rChoice];
   6202   }
   6203 
   6204   *workingP = '\0';
   6205 
   6206   return(dst);
   6207 }
   6208 
   6209 /**
   6210  * random alpha numerical string
   6211  *
   6212  * allocate and generate a random string in charset "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
   6213  *
   6214  *
   6215  * \param
   6216  *   string length
   6217  * \return
   6218  *   random string (you must free the pointer)
   6219  *   NULL error opening /dev/urandom, malloc failed, fread /dev/urandom failed, length is 0
   6220  */
   6221 char *randomAlphaNumS(uint64_t length) {
   6222   char charset[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";;
   6223   char *r = NULL;
   6224   char *workingP = NULL;
   6225   int rOpen;
   6226 
   6227   // sanity checks
   6228   if (length == 0) {
   6229     return(NULL);
   6230   }
   6231 
   6232   // open /dev/urandom
   6233   if (randomWordF == randomWord) {
   6234     rOpen = randomUrandomOpen();;
   6235     if (!rOpen) {
   6236       return(NULL);
   6237   }
   6238     }
   6239 
   6240   // allocate result
   6241   // dont use MALLOC here, the test fails
   6242   r        = malloc(length+1);;
   6243   if (!r) {
   6244     return(NULL);
   6245   }
   6246 
   6247   workingP = r;
   6248 
   6249   // generate random values
   6250   while (length-- > 0) {
   6251     uint64_t rChoice;
   6252     size_t len = strlen(charset);
   6253 
   6254     rChoice = randomChoice(len);
   6255     if (rChoice == len) {
   6256       free(r);
   6257       return(NULL);
   6258     }
   6259 
   6260     *workingP++ = charset[rChoice];
   6261   }
   6262 
   6263   *workingP = '\0';
   6264 
   6265   return(r);
   6266 }
   6267 
   6268 /**
   6269  * buffer random alpha numerical string
   6270  *
   6271  * allocate and generate a random string in charset "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
   6272  *
   6273  * \param
   6274  *   dst destination buffer
   6275  * \param
   6276  *   dstSize destination buffer size, must be at least 2, to have at least 1 random char in the string
   6277  * \return
   6278  *   random string
   6279  *   NULL error opening /dev/urandom, malloc failed, fread /dev/urandom failed, length is 0
   6280  */
   6281 char *bRandomAlphaNumS(char *dst, size_t dstSize) {
   6282   char charset[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";;
   6283   char *workingP = NULL;
   6284   int rOpen;
   6285 
   6286   // sanity checks
   6287   if (!dst || dstSize < 2) {
   6288     return(NULL);
   6289   }
   6290 
   6291   // open /dev/urandom
   6292   if (randomWordF == randomWord) {
   6293     rOpen = randomUrandomOpen();;
   6294     if (!rOpen) {
   6295       return(NULL);
   6296   }
   6297     }
   6298 
   6299   workingP = dst;
   6300   // keep space for NUL char at the end if the string
   6301   dstSize--;
   6302 
   6303   // generate random values
   6304   while (dstSize-- > 0) {
   6305     uint64_t rChoice;
   6306     size_t len = strlen(charset);
   6307 
   6308     rChoice = randomChoice(len);
   6309     if (rChoice == len) {
   6310       return(NULL);
   6311     }
   6312 
   6313     *workingP++ = charset[rChoice];
   6314   }
   6315 
   6316   *workingP = '\0';
   6317 
   6318   return(dst);
   6319 }
   6320 
   6321 #define startMax   20
   6322 
   6323 /**
   6324  * read String
   6325  * read user input (one line) as a string
   6326  *
   6327  * there is no size limit and the buffer expands as needed
   6328  *
   6329  * \return
   6330  *   line from the user (you must free the pointer)
   6331  *   NULL when buffer allocation failed
   6332  */
   6333 char *readS(void) {
   6334   int max = startMax;;
   6335 
   6336   char *s = MALLOC((size_t)max);
   6337   if (!s) {
   6338     return(NULL);
   6339   }
   6340 
   6341   int i = 0;
   6342   while (1) {
   6343     #ifndef unitTest
   6344     int c = getchar();
   6345     #else
   6346     int c;
   6347     if (i < startMax) {
   6348       c = 'a';
   6349     }
   6350     else {
   6351       c = '\n';
   6352     }
   6353     #endif
   6354     if (c == '\n') {
   6355       s[i] = 0;
   6356       break;
   6357     }
   6358     s[i] = (char)c;
   6359     if (i == max-1) {
   6360       // buffer full
   6361       max += max;
   6362       char *tmp = REALLOC(s, (size_t)max);
   6363       if (!tmp) {
   6364         free(s);
   6365         return(NULL);
   6366       }
   6367       s = tmp;
   6368     }
   6369     i++;
   6370   }
   6371   return(s);
   6372 }
   6373 
   6374 /**
   6375  * buffer read String
   6376  * read user input (one line) as a string
   6377  *
   6378  * \param
   6379  *   dst destination buffer
   6380  * \param
   6381  *   dstSize destination buffer size, must be at least 2, to have at least 1 char from the user in the string
   6382  * \return
   6383  *   line from the user
   6384  *   NULL when buffer allocation failed
   6385  */
   6386 char *bLReadS(char *dst, size_t dstSize) {
   6387   size_t i = 0;;
   6388 
   6389   if (!dst || dstSize < 2) {
   6390     return(NULL);
   6391   }
   6392 
   6393   while (1) {
   6394     #ifndef unitTest
   6395     int c = getchar();
   6396     #else
   6397     int c;
   6398     if (i < dstSize-1) {
   6399       c = 'a';
   6400     }
   6401     else {
   6402       c = '\n';
   6403     }
   6404     #endif
   6405     if (c == '\n' || i == dstSize-1) {
   6406       dst[i] = 0;
   6407       break;
   6408     }
   6409     dst[i] = (char)c;
   6410     i++;
   6411   }
   6412   return(dst);
   6413 }
   6414 
   6415 /**
   6416  * sheepy get pass
   6417  *
   6418  * like getpass, read password from tty
   6419  *
   6420  * currently used in Termux because getpass is missging
   6421  */
   6422 UNUSED local char *shGetpass(void) {
   6423   char *r = NULL;
   6424 
   6425   #ifndef unitTest
   6426   struct termios old;
   6427   struct termios new;
   6428 
   6429   // inspired by https://www.gnu.org/software/libc/manual/html_node/getpass.html
   6430   FILE *stream = fopen("/dev/tty", "w+ce");
   6431   if (!stream) {
   6432     return(NULL);
   6433   }
   6434 
   6435   /* Turn echoing off and fail if we can’t. */
   6436   if (tcgetattr (fileno (stream), &old) != 0) {
   6437     fclose(stream);
   6438     return(NULL);
   6439   }
   6440   new = old;
   6441   new.c_lflag &= ~(tcflag_t)ECHO;
   6442   if (tcsetattr (fileno (stream), TCSAFLUSH, &new) != 0) {
   6443     fclose(stream);
   6444     return(NULL);
   6445   }
   6446 
   6447   /* Read the password. */
   6448   r = readS();;
   6449 
   6450   /* Restore terminal. */
   6451   (void) tcsetattr (fileno (stream), TCSAFLUSH, &old);
   6452   fclose(stream);
   6453   #else
   6454   r = strdup("*****");;
   6455   #endif
   6456 
   6457   return(r);
   6458 }
   6459 
   6460 /**
   6461  * read hidden password string
   6462  *
   6463  * \return
   6464  *   newly allocated password string (you must free the pointer)
   6465  */
   6466 char *readPasswordS(void) {
   6467 
   6468   #if (__TERMUX__ || __HAIKU__ || unitTest)
   6469   char *r = shGetpass();
   6470   #else
   6471   // TODO getpass is obsolete, see man for getpass
   6472   char *p = getpass("");
   6473   if (!p) {
   6474     return(NULL);
   6475   }
   6476   char *r = strdup(p);
   6477   memset(p, 0, strlen(p));
   6478   #endif
   6479   return(r);
   6480 }
   6481 
   6482 /**
   6483  * write zero to all bytes in string with memset, for clearing password buffers
   6484  *
   6485  * \param
   6486  *   string
   6487  * \return
   6488  *   true  0s are written
   6489  *   false error string is NULL
   6490  *
   6491  */
   6492 bool zeroS(char *string) {
   6493 
   6494   if (!string) {
   6495     return(false);
   6496   }
   6497 
   6498   memset(string, 0, strlen(string));
   6499   return(true);
   6500 }
   6501 
   6502 /**
   6503  * write zero to all bytes in buffer with memset
   6504  *
   6505  * \param
   6506  *   buf buffer
   6507  * \param
   6508  *   len length
   6509  * \return
   6510  *   true  0s are written
   6511  *   false error string is NULL
   6512  *
   6513  */
   6514 bool zeroBuf(void *buf, size_t len) {
   6515 
   6516   if (!buf || !len) {
   6517     return(false);
   6518   }
   6519 
   6520   memset(buf, 0, len);
   6521   return(true);
   6522 }
   6523 
   6524 /**
   6525  * memory duplicate
   6526  * allocate and copy buffer
   6527  *
   6528  * \param
   6529  * buf buffer to duplicate
   6530  * \param
   6531  * size buffer size
   6532  * \return
   6533  * duplicated buffer (you must free the pointer)
   6534  * NULL when there is an error
   6535  *
   6536  */
   6537 void *memdup(const void *buf, size_t size) {
   6538 
   6539   // sanity checks
   6540   if (!buf || !size) {
   6541     return(NULL);
   6542   }
   6543 
   6544   void* out = MALLOC(size);
   6545   if (out != NULL) {
   6546     memcpy(out, buf, size);
   6547   }
   6548 
   6549   return(out);
   6550 }
   6551 
   6552 
   6553 /**
   6554  * read Enter key
   6555  * wait until press the enter key
   6556  */
   6557 void readEnter(void) {
   6558 
   6559   while (1) {
   6560     #ifndef unitTest
   6561     int c = getchar();
   6562     #else
   6563     int c = '\n';
   6564     #endif
   6565     if (c == '\n') {
   6566       break;
   6567 }
   6568   }
   6569     }
   6570 
   6571 /**
   6572  * readLine from file stream
   6573  * the fist new line is converted to 0
   6574  *
   6575  * \param
   6576  *   fp: file stream
   6577  * \return
   6578  *   one line in a string (you must free the pointer)
   6579  *   empty string when stream is empty or when there is an error reading the stream
   6580  *   NULL when the stream is NULL
   6581  */
   6582 char *readLine(FILE *fp) {
   6583   size_t len;
   6584   char* line = NULL;
   6585   ssize_t read;
   6586 
   6587   // sanity checks
   6588   if (!fp) {
   6589     return(NULL);
   6590   }
   6591 
   6592   // read line
   6593   read = getline(&line, &len, (FILE *)fp);
   6594   if (read == -1) {
   6595     // there is whatever data in the line buffer, free
   6596     free(line);
   6597     return(strdup(""));
   6598   }
   6599   // convert new line char to 0
   6600   {
   6601     char* pos = NULL;
   6602     pos = strchr(line, '\n');
   6603     if (pos != NULL)
   6604       *pos = '\0';
   6605   }
   6606   return(line);
   6607 }
   6608 
   6609 /**
   6610  * free Many String
   6611  *
   6612  * free variable list of pointers
   6613  * freeManyS(s1, s2, ...);
   6614  */
   6615 void freeManySF(char *paramType, ...) {
   6616   va_list pl;
   6617 
   6618   // add arguments to a list
   6619   va_start(pl, paramType);
   6620   paramType = va_arg(pl, char *);
   6621   while (paramType) {
   6622     free(paramType);
   6623     paramType = va_arg(pl, char *);
   6624   }
   6625   va_end(pl);
   6626 }
   6627 
   6628 /**
   6629  * duplicate string
   6630  *
   6631  * \param
   6632  *   string
   6633  * \return
   6634  *   new identical string (you must free the pointer)
   6635  *   NULL when string is NULL
   6636  */
   6637 char *dupS(const char *string) {
   6638 
   6639   if (!string) {
   6640     return(NULL);
   6641   }
   6642   return(strdup(string));
   6643 }
   6644 
   6645 /**
   6646  * sheepy Print String
   6647  *
   6648  * same as printf
   6649  * when the formating string is NULL, "(null)" is printed
   6650  *
   6651  * \param
   6652  *   format string - can be NULL
   6653  *   data
   6654  */
   6655 void shPrintfS(const char *fmt, ...) {
   6656   va_list pl;
   6657 
   6658   if (!fmt) {
   6659     puts("(null)");
   6660     return;
   6661   }
   6662   va_start(pl, fmt);
   6663   vfprintf(stdout, fmt, pl);
   6664   va_end(pl);
   6665 }
   6666 
   6667 /**
   6668  * sheepy Error printf String
   6669  * print with logE
   6670  *
   6671  * when the formating string is NULL, "(null)" is printed
   6672  *
   6673  * \param
   6674  *   format string like printf
   6675  * \return
   6676  *   print with logE
   6677  */
   6678 void shEPrintfS(const char *fmt, ...) {
   6679   va_list pl;
   6680 
   6681   if (((libsheepyErrorMask) & logMask)) {
   6682     if (!fmt) {
   6683       logE("(null)\n");
   6684       return;
   6685     }
   6686     // print with logE
   6687     char *s = NULL;
   6688     va_start(pl, fmt);
   6689     vasprintf(&s, fmt, pl);
   6690     va_end(pl);
   6691     logE(s);
   6692     free(s);
   6693 }
   6694   }
   6695 
   6696 /**
   6697  * log and free
   6698  *
   6699  * \param
   6700  *   string to print, can be NULL
   6701  */
   6702 void logNFree(char *s) {
   6703 
   6704   if (s) {
   6705     puts(s);
   6706     free(s);
   6707 }
   6708   }
   6709 
   6710 /**
   6711  * print buffer as hexadecimal string
   6712  */
   6713 void loghex(const void *buf, size_t len) {
   6714   const uint8_t *b = NULL;
   6715 
   6716   if (!buf || !len) {
   6717     return;
   6718   }
   6719 
   6720   b = buf;
   6721   for (size_t i = 0; i < len-1; i++) {
   6722     printf("0x%02x ", b[i]);
   6723   }
   6724   printf("0x%02x", b[len-1]);
   6725 }
   6726 
   6727 /**
   6728  * create a string with bytes in buf converted to hex strings
   6729  *
   6730  * \param
   6731  *   buf buffer to convert to hexstring
   6732  * \param
   6733  *   len buffer size in bytes
   6734  * \return
   6735  *   string representing the buffer in hexadecimal "0x01, 0x02,..." (you must free the pointer)
   6736  */
   6737 char *toHexS(const void *buf, size_t len) {
   6738   const uint8_t *b = NULL;
   6739   char *r = NULL;
   6740 
   6741   if (!buf || !len) {
   6742     return(NULL);
   6743   }
   6744 
   6745   r = MALLOC(sizeof(char) * (6*len-2+1));;
   6746   if (!r) {
   6747     return(NULL);
   6748   }
   6749 
   6750   *r      = 0;
   6751   char *c = r;
   6752 
   6753   b = buf;
   6754   for (size_t i = 0; i < len-1; i++) {
   6755     sprintf(c, "0x%02x, ", b[i]);
   6756     c += 6;;
   6757   }
   6758   sprintf(c, "0x%02x", b[len-1]);
   6759 
   6760   return(r);
   6761 }
   6762 
   6763 /**
   6764  * create a string with bytes in buf converted to hex strings separated by separator
   6765  *
   6766  * \param
   6767  *   buf buffer to convert to hexstring
   6768  * \param
   6769  *   len buffer size in bytes
   6770  * \param
   6771  *   separator separator between the hexadecimal numbers
   6772  * \return
   6773  *   string representing the buffer in hexadecimal "0x01SEP0x02SEP..." (you must free the pointer)
   6774  */
   6775 char *toHexSepS(const void *buf, size_t len, const char *separator) {
   6776   const uint8_t *b = NULL;
   6777   char *r = NULL;
   6778 
   6779   if (!buf || !len || !separator) {
   6780     return(NULL);
   6781   }
   6782 
   6783   size_t sepLen = strlen(separator);;
   6784 
   6785   r = MALLOC(sizeof(char) * ((4+sepLen)*len-sepLen+1));;
   6786   if (!r) {
   6787     return(NULL);
   6788   }
   6789 
   6790   *r      = 0;
   6791   char *c = r;
   6792 
   6793   b = buf;
   6794   for (size_t i = 0; i < len-1; i++) {
   6795     sprintf(c, "0x%02x%s", b[i], separator);
   6796     c += 4+sepLen;;
   6797   }
   6798   sprintf(c, "0x%02x", b[len-1]);
   6799 
   6800   return(r);
   6801 }
   6802 
   6803 /**
   6804  * create a string with bytes in buf converted to hex strings separated by separator and with head string in front of earch byte: HEADffSEP
   6805  *
   6806  * \param
   6807  *   buf buffer to convert to hexstring
   6808  * \param
   6809  *   len buffer size in bytes
   6810  * \param
   6811  *   head separator before each hexadecimal numbers
   6812  * \param
   6813  *   separator separator after each hexadecimal numbers
   6814  * \return
   6815  *   string representing the buffer in hexadecimal "HEAD0x01SEPHEAD0x02SEP..." (you must free the pointer)
   6816  */
   6817 char *toHexHeadSepS(const void *buf, size_t len, const char *head, const char *separator) {
   6818   const uint8_t *b = NULL;
   6819   char *r = NULL;
   6820 
   6821   if (!buf || !len || !separator || !head) {
   6822     return(NULL);
   6823   }
   6824 
   6825   size_t headLen = strlen(head);;
   6826   size_t sepLen  = strlen(separator);;
   6827 
   6828   r = MALLOC(sizeof(char) * ((2+headLen+sepLen)*len-sepLen+1));;
   6829   if (!r) {
   6830     return(NULL);
   6831   }
   6832 
   6833   *r      = 0;
   6834   char *c = r;
   6835 
   6836   b = buf;
   6837   for (size_t i = 0; i < len-1; i++) {
   6838     sprintf(c, "%s%02x%s", head, b[i], separator);
   6839     c += 2+headLen+sepLen;;
   6840   }
   6841   sprintf(c, "%s%02x", head, b[len-1]);
   6842 
   6843   return(r);
   6844 }
   6845 
   6846 
   6847 /**
   6848  * strCpy - copy src to dst
   6849  *
   6850  * like strcpy with sanity checks
   6851  *
   6852  * \param
   6853  *   dst destination buffer
   6854  * \param
   6855  *   src source string
   6856  * \return
   6857  *   dst string
   6858  *   NULL error
   6859  */
   6860 char *strCpy(char *restrict dst, const char *restrict src) {
   6861 
   6862   if (!dst || !src) {
   6863     return(NULL);
   6864   }
   6865 
   6866   return(strcpy(dst, src));
   6867 }
   6868 
   6869 
   6870 /**
   6871  * strNCpy - copy src to dst
   6872  *
   6873  * null safe version of strncpy
   6874  *
   6875  * \param
   6876  *   dst destination buffer
   6877  * \param
   6878  *   src source string
   6879  * \param
   6880  *   srcSize source buffer size
   6881  * \return
   6882  *   dst string
   6883  *   NULL error
   6884  */
   6885 char *strNCpy(char *restrict dst, const char *restrict src, size_t srcSize) {
   6886 
   6887   if (!dst || !src) {
   6888     return(NULL);
   6889   }
   6890 
   6891   char *r = strncpy(dst, src, srcSize);;
   6892   return(r);
   6893 }
   6894 
   6895 
   6896 /**
   6897  * strLCpy - copy src to dst
   6898  *
   6899  * like strncpy and the NUL char is always added at the end of the string
   6900  *
   6901  * \param
   6902  *   dst destination buffer
   6903  * \param
   6904  *   dstSize destination buffer size, result string will be no longer than dstSize-1
   6905  * \param
   6906  *   src source string
   6907  * \return
   6908  *   dst string
   6909  *   NULL error
   6910  */
   6911 char *strLCpy(char *restrict dst, size_t dstSize, const char *restrict src) {
   6912 
   6913   if (!dst || !src) {
   6914     return(NULL);
   6915   }
   6916 
   6917   char *r = strncpy(dst, src, dstSize);;
   6918   if (dstSize) {
   6919     r[dstSize-1] = 0;
   6920   }
   6921   return(r);
   6922 }
   6923 
   6924 /**
   6925  * strCat - concatenate two strings
   6926  *
   6927  * like strcat with sanity checks
   6928  *
   6929  * \param
   6930  *   dst destination buffer
   6931  * \param
   6932  *   src source string
   6933  * \return
   6934  *   string with input strings concatenated
   6935  *   NULL error
   6936  */
   6937 char *strCat(char *restrict dst, const char *restrict src) {
   6938 
   6939   if (!dst || !src) {
   6940     return(NULL);
   6941   }
   6942 
   6943   return(strcat(dst, src));
   6944 }
   6945 
   6946 /**
   6947  * strNCat - concatenate two strings
   6948  *
   6949  * like strncat with sanity checks
   6950  *
   6951  * \param
   6952  *   dst destination buffer
   6953  * \param
   6954  *   src source string
   6955  * \param
   6956  *   srcLen max source len
   6957  * \return
   6958  *   string with input strings concatenated
   6959  *   NULL error
   6960  */
   6961 char *strNCat(char *restrict dst, const char *restrict src, size_t srcLen) {
   6962 
   6963   if (!dst || !src) {
   6964     return(NULL);
   6965   }
   6966 
   6967   return(strncat(dst, src, srcLen));
   6968 }
   6969 
   6970 /**
   6971  * strLCat - concatenate two strings
   6972  *
   6973  * like strlcat with sanity checks
   6974  *
   6975  * \param
   6976  *   dst destination buffer
   6977  * \param
   6978  *   src source string
   6979  * \param
   6980  *   dstSize destination buffer size, result string will be no longer than dstSize-1
   6981  * \return
   6982  *   string with input strings concatenated
   6983  *   NULL error
   6984  */
   6985 /* same/slower than the other implementation with -O2 and kaby lake */
   6986 char *strLCat(char *restrict dst, size_t dstSize, const char *restrict src) {
   6987 
   6988   if (!dst || !src) {
   6989     return(NULL);
   6990   }
   6991 
   6992   size_t dL     = strnlen(dst, dstSize);
   6993   size_t dstLen = dstSize-1;
   6994 
   6995   if (dL >= dstLen) {
   6996     // buffer is full
   6997     return(dst);
   6998   }
   6999 
   7000   size_t sL     = strlen(src);
   7001 
   7002   if (dL+sL > dstLen) {
   7003     // truncate
   7004     return(strncat(dst, src, dstLen - dL));
   7005   }
   7006   else {
   7007     return(strcat(dst, src));
   7008 }
   7009   }
   7010 
   7011 /* char *strLCat(char *dst, size_t dstSize, const char *src) */
   7012 /*  */
   7013 /*   if !dst || !src */
   7014 /*     return 0 */
   7015 /*  */
   7016 /*   const char *odst = dst */
   7017 /*   size_t n = dstSize */
   7018 /*   size_t dlen; */
   7019 /*  */
   7020 /*   #<{(| Find the end of dst and adjust bytes left but don't go past end. |)}># */
   7021 /*   while n-- != 0 && *dst != '\0' */
   7022 /*     dst++; */
   7023 /*   dlen = dst - odst */
   7024 /*   n    = dstSize - dlen */
   7025 /*  */
   7026 /*   if n-- = 0 */
   7027 /*     return dst */
   7028 /*   while *src != '\0' */
   7029 /*     if n != 0 */
   7030 /*       *dst++ = *src */
   7031 /*       n--; */
   7032 /*     src++; */
   7033 /*  */
   7034 /*   *dst = '\0'; */
   7035 /*  */
   7036 /*   return dst */
   7037 
   7038 /**
   7039  * strLNCat - concatenate two strings
   7040  *
   7041  * like strlcat with sanity checks
   7042  *
   7043  * \param
   7044  *   dst destination buffer
   7045  * \param
   7046  *   src source string
   7047  * \param
   7048  *   dstSize destination buffer size, result string will be no longer than dstSize-1
   7049  * \param
   7050  *   srcLen max source len
   7051  * \return
   7052  *   string with input strings concatenated
   7053  *   NULL error
   7054  */
   7055 char *strLNCat(char *restrict dst, size_t dstSize, const char *restrict src, size_t srcLen) {
   7056 
   7057   if (!dst || !src) {
   7058     return(NULL);
   7059   }
   7060 
   7061   size_t dL     = strnlen(dst, dstSize);
   7062   size_t dstLen = dstSize-1;
   7063 
   7064   if (dL >= dstLen) {
   7065     // buffer is full
   7066     return(dst);
   7067   }
   7068 
   7069   size_t sL     = strnlen(src, srcLen);
   7070 
   7071   if (dL+sL > dstLen) {
   7072     // truncate
   7073     return(strncat(dst, src, dstLen - dL));
   7074   }
   7075   else {
   7076     return(strncat(dst, src, srcLen));
   7077 }
   7078   }
   7079 
   7080 /**
   7081  * cat String Function
   7082  * \param
   7083  *   arbitrary list of strings seperated by commas
   7084  * \return
   7085  *   string with input strings concatenated (you must free the pointer)
   7086  */
   7087 char *catSF(const char *paramType, ...) {
   7088   va_list pl;
   7089   char **l = NULL;
   7090   char *r = NULL;
   7091 
   7092   // add arguments to a list
   7093   va_start(pl, paramType);
   7094   paramType = va_arg(pl, char *);
   7095   while (paramType) {
   7096     pErrorNULL(listPushS(&l, paramType));
   7097     paramType = va_arg(pl, char *);
   7098   }
   7099   va_end(pl);
   7100   // join list with empty delimiter
   7101   r = join(l, "");
   7102   listFreeS(l);
   7103   return(r);
   7104 }
   7105 
   7106 /**
   7107  * cat and copy String Function
   7108  * dst has to be big enough to hold the result
   7109  *
   7110  * \param
   7111  *   dst result destination buffer
   7112  *   arbitrary list of strings seperated by commas
   7113  * \return
   7114  *   dst string with input strings concatenated
   7115  */
   7116 char *iCatSF(char *dst, const char *paramType, ...) {
   7117   va_list pl;
   7118 
   7119   if (!dst) {
   7120     return(NULL);
   7121   }
   7122 
   7123   // empty dst string
   7124   dst[0] = 0;
   7125 
   7126   // add arguments to a list
   7127   va_start(pl, paramType);
   7128   paramType = va_arg(pl, char *);
   7129   while (paramType) {
   7130     strcat(dst, paramType);
   7131     paramType = va_arg(pl, char *);
   7132   }
   7133   va_end(pl);
   7134   return(dst);
   7135 }
   7136 
   7137 
   7138 /**
   7139  * cat and copy String Function
   7140  * \param
   7141  *   dst result destination buffer
   7142  *   arbitrary list of strings seperated by commas
   7143  * \return
   7144  *   dst string with input strings concatenated
   7145  */
   7146 char *bLCatSF(char *dst, size_t dstSize, const char *paramType, ...) {
   7147   va_list pl;
   7148 
   7149   if (!dst) {
   7150     return(NULL);
   7151   }
   7152 
   7153   if (!dstSize) {
   7154     return(dst);
   7155   }
   7156 
   7157   // empty dst string
   7158   dst[0] = 0;
   7159 
   7160   // add arguments to a list
   7161   va_start(pl, paramType);
   7162   paramType = va_arg(pl, char *);
   7163   while (paramType) {
   7164     pErrorNULL(strLCat(dst, dstSize, paramType));
   7165     paramType = va_arg(pl, char *);
   7166   }
   7167   va_end(pl);
   7168   return(dst);
   7169 }
   7170 
   7171 
   7172 /**
   7173  * format string
   7174  * allocate and format string using asprintf
   7175  * \param
   7176  *   format string and other parameters
   7177  * \return
   7178  *   allocated and formated string (you must free the pointer)
   7179  *   NULL when fmt is NULL or asprintf fails
   7180  */
   7181 char *formatS(const char *fmt, ...) {
   7182   char *r = NULL;
   7183   va_list pl;
   7184 
   7185   if (!fmt) {
   7186     return(NULL);
   7187   }
   7188   va_start(pl, fmt);
   7189   if (vasprintf(&r, fmt, pl) == -1) {
   7190     va_end(pl);
   7191     return(NULL);
   7192   }
   7193   va_end(pl);
   7194 
   7195   return(r);
   7196 }
   7197 
   7198 /**
   7199  * format string
   7200  * \param
   7201  *   format string and other parameters
   7202  * \return
   7203  *   formated string
   7204  *   NULL when string, fmt are NULL or sprintf fails
   7205  */
   7206 char *bFormatS(char *string, const char *fmt, ...) {
   7207   va_list pl;
   7208 
   7209   if (!string || !fmt) {
   7210     return(NULL);
   7211   }
   7212   va_start(pl, fmt);
   7213   if (vsprintf(string, fmt, pl) == -1) {
   7214     return(NULL);
   7215   }
   7216   va_end(pl);
   7217 
   7218   return(string);
   7219 }
   7220 
   7221 /**
   7222  * format string
   7223  * \param
   7224  *   format string and other parameters
   7225  * \return
   7226  *   formated string
   7227  *   NULL when string, fmt is NULL or snprintf fails
   7228  */
   7229 char *bLFormatS(char *string, size_t stringSize, const char *fmt, ...) {
   7230   va_list pl;
   7231 
   7232   if (!string || !fmt) {
   7233     return(NULL);
   7234   }
   7235   va_start(pl, fmt);
   7236   if (vsnprintf(string, stringSize, fmt, pl) == -1) {
   7237     return(NULL);
   7238   }
   7239   va_end(pl);
   7240 
   7241   return(string);
   7242 }
   7243 
   7244 /**
   7245  * append strings
   7246  *
   7247  * \param
   7248  *   string1 string
   7249  *   string2 string to append at the end of string1
   7250  * \return
   7251  *   new string string1+string2 (you must free the pointer)
   7252  *   dup string1 when string2 is NULL (you must free the pointer)
   7253  *   NULL when string1 is NULL
   7254  */
   7255 char *appendS(const char *string1, const char *string2) {
   7256   char *r = NULL;
   7257   size_t l1;
   7258   size_t l2;
   7259 
   7260   if (!string1) {
   7261     return(NULL);
   7262   }
   7263   if (!string2) {
   7264     r = strdup(string1);
   7265     return(r);
   7266   }
   7267 
   7268   l1 = strlen(string1);
   7269   l2 = strlen(string2);
   7270 
   7271   if (!l2) {
   7272     // empty string
   7273     r = strdup(string1);
   7274     return(r);
   7275   }
   7276 
   7277   r = MALLOC(l1 + l2 + 1);
   7278   if (!r) {
   7279     return(NULL);
   7280   }
   7281 
   7282   strcpy(r,string1);
   7283   strcat(r, string2);
   7284   return(r);
   7285 }
   7286 
   7287 /**
   7288  * append char to string
   7289  * when c is 0 the result is string1
   7290  *
   7291  * \param
   7292  *   string1 string
   7293  *   c       char to append
   7294  * \return
   7295  *   new string string1+c (you must free the pointer)
   7296  *   NULL when string1 is NULL
   7297  */
   7298 char *appendCharS(const char *string1, char c) {
   7299   char *r = NULL;
   7300   size_t l1;
   7301 
   7302   if (!string1) {
   7303     return(NULL);
   7304   }
   7305   if (!c) {
   7306     r = strdup(string1);
   7307     return(r);
   7308   }
   7309 
   7310   charToS(string2, c);
   7311 
   7312   l1 = strlen(string1);
   7313 
   7314   r = MALLOC(l1 + 1 + 1);
   7315   if (!r) {
   7316     return(NULL);
   7317   }
   7318 
   7319   strcpy(r,string1);
   7320   strcat(r, string2);
   7321   return(r);
   7322 }
   7323 
   7324 /**
   7325  * append string to char
   7326  *
   7327  * \param
   7328  *   string1 string
   7329  *   c       char to append
   7330  * \return
   7331  *   new string string1+c (you must free the pointer)
   7332  *   NULL when string1 is NULL
   7333  */
   7334 char *appendSChar(char c, const char *string2) {
   7335   char *r = NULL;
   7336   size_t l2;
   7337 
   7338   charToS(string1, c);
   7339 
   7340   if (!string2) {
   7341     r = strdup(string1);
   7342     return(r);
   7343   }
   7344 
   7345   l2 = strlen(string2);
   7346 
   7347   if (!l2) {
   7348     // empty string
   7349     r = strdup(string1);
   7350     return(r);
   7351   }
   7352 
   7353   r = MALLOC(1 + l2 + 1);
   7354   if (!r) {
   7355     return(NULL);
   7356   }
   7357 
   7358   strcpy(r,string1);
   7359   strcat(r, string2);
   7360   return(r);
   7361 }
   7362 
   7363 /**
   7364  * append strings
   7365  *
   7366  * \param
   7367  *   string1 string, which is reallocated.
   7368  *   string2 string to append at the end of string1
   7369  * \return
   7370  *   string1 modified string1 (realloc), string1+string2 (you must free the pointer)
   7371  *   string1 no change when string2 is NULL (you must free the pointer)
   7372  *   NULL no change when string1 is NULL
   7373  */
   7374 char *iAppendS(char **string1, const char *string2) {
   7375   char *tmp = NULL;
   7376   size_t l1;
   7377   size_t l2;
   7378 
   7379   if (!string1) {
   7380     return(NULL);
   7381   }
   7382   if (!string2) {
   7383     return(*string1);
   7384   }
   7385   if (!*string1) {
   7386     *string1 = strdup(string2);
   7387     return(*string1);
   7388   }
   7389 
   7390   l1 = strlen(*string1);
   7391   l2 = strlen(string2);
   7392 
   7393   if (!l2) {
   7394     // empty string
   7395     return(*string1);
   7396   }
   7397 
   7398   tmp = REALLOC(*string1, l1 + l2 + 1);
   7399   if (!tmp) {
   7400     return(NULL);
   7401   }
   7402 
   7403   *string1 = tmp;
   7404   strcat(*string1, string2);
   7405   return(*string1);
   7406 }
   7407 
   7408 /**
   7409  * append char to string
   7410  *
   7411  * \param
   7412  *   string1 string, which is reallocated.
   7413  *   c       char to append at the end of string1
   7414  * \return
   7415  *   string1 modified string1 (realloc), string1+c (you must free the pointer)
   7416  *   NULL no change when string1 is NULL
   7417  */
   7418 char *iAppendCharS(char **string1, char c) {
   7419   char *tmp = NULL;
   7420   size_t l1;
   7421 
   7422   if (!string1) {
   7423     return(NULL);
   7424   }
   7425 
   7426   charToS(string2, c);
   7427 
   7428   if (!*string1) {
   7429     *string1 = strdup(string2);
   7430     return(*string1);
   7431   }
   7432 
   7433   l1 = strlen(*string1);
   7434 
   7435   tmp = REALLOC(*string1, l1 + 1 + 1);
   7436   if (!tmp) {
   7437     return(NULL);
   7438   }
   7439 
   7440   *string1 = tmp;
   7441   strcat(*string1, string2);
   7442   return(*string1);
   7443 }
   7444 
   7445 /**
   7446  * append and free strings
   7447  *
   7448  * string2 is freed (except when there is an error)
   7449  *
   7450  * \param
   7451  *   string1 string, which is reallocated.
   7452  *   string2 string to append at the end of string1
   7453  * \return
   7454  *   string1 modified string1 (realloc), string1+string2 (you must free the pointer)
   7455  *   NULL no change when string1 or string2 are NULL
   7456  */
   7457 char *iAppendNFreeS(char **string1, char *string2) {
   7458   char *r = NULL;
   7459 
   7460   r = iAppendS(string1, string2);
   7461   if (r) {
   7462     free(string2);
   7463   }
   7464   return(r);
   7465 }
   7466 
   7467 /**
   7468  * append many strings
   7469  *
   7470  * \param
   7471  *   string1 string, which is reallocated.
   7472  *   string2 string to append at the end of string1
   7473  * \return
   7474  *   string1 modified string1, string1+string2 (you must free the pointer)
   7475  *   NULL no change when string1 or string2 are NULL
   7476  */
   7477 char *iAppendManySF(char **string, const char *paramType, ...) {
   7478   va_list pl;
   7479   char *r = NULL;
   7480   char **l = NULL;
   7481 
   7482   if (!string) {
   7483     return(NULL);
   7484   }
   7485 
   7486   pErrorNULL(iListPushS(&l, *string));
   7487   pErrorNULL(listPushS(&l, paramType));
   7488 
   7489   // add arguments to a list
   7490   va_start(pl, paramType);
   7491   paramType = va_arg(pl, char *);
   7492   while (paramType) {
   7493     pErrorNULL(listPushS(&l, paramType));
   7494     paramType = va_arg(pl, char *);
   7495   }
   7496   va_end(pl);
   7497   // join list with empty delimiter
   7498   r = join(l, "");
   7499   listFreeS(l);
   7500 
   7501   // Already freed in listFreeS - free *string
   7502   *string = r;
   7503   return(r);
   7504 }
   7505 
   7506 /**
   7507  * buffer append many strings
   7508  *
   7509  * \param
   7510  *   string1 string
   7511  *   string2 string to append at the end of string1
   7512  * \return
   7513  *   string1 modified string1, string1+string2
   7514  *   NULL no change when string1 or string2 are NULL
   7515  */
   7516 char *bAppendManySF(char *string, const char *paramType, ...) {
   7517   va_list pl;
   7518   char *r = NULL;
   7519   char **l = NULL;
   7520 
   7521   if (!string) {
   7522     return(NULL);
   7523   }
   7524 
   7525   pErrorNULL(listPushS(&l, string));
   7526   pErrorNULL(listPushS(&l, paramType));
   7527 
   7528   // add arguments to a list
   7529   va_start(pl, paramType);
   7530   paramType = va_arg(pl, char *);
   7531   while (paramType) {
   7532     pErrorNULL(listPushS(&l, paramType));
   7533     paramType = va_arg(pl, char *);
   7534   }
   7535   va_end(pl);
   7536   // join list with empty delimiter
   7537   r = join(l, "");
   7538   listFreeS(l);
   7539 
   7540   strcpy(string, r);
   7541   free(r);
   7542   return(string);
   7543 }
   7544 
   7545 /**
   7546  * buffer size append many strings
   7547  *
   7548  * \param
   7549  *   string1 string
   7550  *   string2 string to append at the end of string1
   7551  * \return
   7552  *   string1 modified string1, string1+string2
   7553  *   NULL no change when string1 or string2 are NULL
   7554  */
   7555 char *bLAppendManySF(char *string, size_t stringSize, const char *paramType, ...) {
   7556   va_list pl;
   7557   char *r = NULL;
   7558   char **l = NULL;
   7559 
   7560   if (!string) {
   7561     return(NULL);
   7562   }
   7563 
   7564   if (!stringSize) {
   7565     // size 0 - no change
   7566     return(string);
   7567   }
   7568 
   7569   pErrorNULL(listPushS(&l, string));
   7570   pErrorNULL(listPushS(&l, paramType));
   7571 
   7572   // add arguments to a list
   7573   va_start(pl, paramType);
   7574   paramType = va_arg(pl, char *);
   7575   while (paramType) {
   7576     pErrorNULL(listPushS(&l, paramType));
   7577     paramType = va_arg(pl, char *);
   7578   }
   7579   va_end(pl);
   7580   // join list with empty delimiter
   7581   r = join(l, "");
   7582   listFreeS(l);
   7583 
   7584   pErrorNULL(strLCpy(string, stringSize, r));
   7585   free(r);
   7586   return(string);
   7587 }
   7588 
   7589 /**
   7590  * prepend strings
   7591  *
   7592  * \param
   7593  *   string1 string
   7594  *   string2 string to prepend at the beginning of string1
   7595  * \return
   7596  *   new string string2+string1 (you must free the pointer)
   7597  *   dup string2 when string1 is NULL (you must free the pointer)
   7598  *   NULL when string2 is NULL
   7599  */
   7600 char *prependS(const char *string1, const char *string2) {
   7601 
   7602   return(appendS(string2, string1));
   7603 }
   7604 
   7605 /**
   7606  * prepend char to string
   7607  *
   7608  * \param
   7609  *   string1 string
   7610  *   c       char to prepend at the beginning of string1
   7611  * \return
   7612  *   new string c+string1 (you must free the pointer)
   7613  *   NULL when string1 is NULL
   7614  */
   7615 char *prependCharS(const char *string1, char c) {
   7616 
   7617   return(appendSChar(c, string1));
   7618 }
   7619 
   7620 /**
   7621  * prepend string to char
   7622  *
   7623  * \param
   7624  *   c       char
   7625  *   string2 string to prepend at the beginning of c
   7626  * \return
   7627  *   new string string2+c (you must free the pointer)
   7628  *   NULL when string2 is NULL
   7629  */
   7630 char *prependSChar(char c, const char *string2) {
   7631 
   7632   return(appendCharS(string2, c));
   7633 }
   7634 
   7635 /**
   7636  * prepend strings
   7637  *
   7638  * \param
   7639  *   string1 string, which is reallocated.
   7640  *   string2 string to prepend at the beginning of string1
   7641  * \return
   7642  *   string1 modified string1, string2+string1 (you must free the pointer)
   7643  *   string1 when string2 is NULL (you must free the pointer)
   7644  *   NULL no change when string1 is NULL
   7645  */
   7646 char *iPrependS(char **string1, const char *string2) {
   7647   size_t l2;
   7648 
   7649   if (!string1) {
   7650     return(NULL);
   7651   }
   7652   if (!string2) {
   7653     return(*string1);
   7654   }
   7655   if (!*string1) {
   7656     *string1 = strdup(string2);
   7657     return(*string1);
   7658   }
   7659 
   7660   l2 = strlen(string2);
   7661 
   7662   if (!l2) {
   7663     // empty string
   7664     return(*string1);
   7665   }
   7666 
   7667   return(iInsertS(string1, 0, string2));
   7668 }
   7669 
   7670 /**
   7671  * prepend char to string
   7672  *
   7673  * \param
   7674  *   string1 string, which is reallocated.
   7675  *   c       char to prepend at the beginning of string1
   7676  * \return
   7677  *   string1  modified string1, c+string1 (you must free the pointer)
   7678  *   NULL no change when string1 is NULL
   7679  */
   7680 char *iPrependCharS(char **string1, char c) {
   7681   size_t l1;
   7682 
   7683   if (!string1) {
   7684     return(NULL);
   7685   }
   7686 
   7687   if (!c) {
   7688     return(*string1);
   7689   }
   7690 
   7691   charToS(string2, c);
   7692 
   7693   if (!*string1) {
   7694     *string1 = strdup(string2);
   7695     return(*string1);
   7696   }
   7697 
   7698   l1 = strlen(*string1);
   7699 
   7700   char *tmp = REALLOC(*string1, l1 + 1 + 1);
   7701   if (!tmp) {
   7702     return(NULL);
   7703   }
   7704 
   7705   *string1 = tmp;
   7706   memmove(*string1+1, *string1, l1+1);
   7707   **string1 = c;
   7708   return(*string1);
   7709 }
   7710 
   7711 /**
   7712  * prepend and free strings
   7713  *
   7714  * string2 is freed
   7715  *
   7716  * \param
   7717  *   string1 string, which is reallocated.
   7718  *   string2 string to prepend at the beginning of string1
   7719  * \return
   7720  *   string1  modified string1, string2+string1 (you must free the pointer)
   7721  *   NULL no change when string1 or string2 are NULL
   7722  */
   7723 char *iPrependNFreeS(char **string1, char *string2) {
   7724   char *r = NULL;
   7725 
   7726   r = iPrependS(string1, string2);
   7727   if (r) {
   7728     free(string2);
   7729   }
   7730   return(r);
   7731 }
   7732 
   7733 
   7734 /**
   7735  * buffer prepend strings
   7736  *
   7737  * \param
   7738  *   string1 string
   7739  *   string2 string to prepend at the beginning of string1
   7740  * \return
   7741  *   string1  modified string1, string2+string1
   7742  *   NULL no change when string1 or string2 are NULL
   7743  */
   7744 char *bPrependS(char *string1, const char *string2) {
   7745   size_t l2;
   7746 
   7747   if (!string1 || !string2) {
   7748     return(NULL);
   7749   }
   7750 
   7751   if (!*string1) {
   7752     strcpy(string1, string2);
   7753     return(string1);
   7754   }
   7755 
   7756   l2 = strlen(string2);
   7757 
   7758   if (!l2) {
   7759     // empty string
   7760     return(string1);
   7761   }
   7762 
   7763   return(bInsertS(string1, 0, string2));
   7764 }
   7765 
   7766 /**
   7767  * buffer prepend strings
   7768  *
   7769  * \param
   7770  *   string1 string
   7771  *   string2 string to prepend at the beginning of string1
   7772  * \return
   7773  *   string1  modified string1, string2+string1
   7774  *   NULL no change when string1 or string2 are NULL
   7775  */
   7776 char *bLPrependS(char *string1, size_t string1Size, const char *string2) {
   7777   size_t l2;
   7778 
   7779   if (!string1 || !string2) {
   7780     return(NULL);
   7781   }
   7782 
   7783   if (!string1Size) {
   7784     return(string1);
   7785   }
   7786 
   7787   if (!*string1) {
   7788     pErrorNULL(strLCpy(string1, string1Size, string2));
   7789     return(string1);
   7790   }
   7791 
   7792   l2 = strlen(string2);
   7793 
   7794   if (!l2) {
   7795     // empty string
   7796     return(string1);
   7797   }
   7798 
   7799   return(bLInsertS(string1, string1Size, 0, string2));
   7800 }
   7801 
   7802 /**
   7803  * replace String
   7804  * the original remains unchanged
   7805  * duplicate s
   7806  * the olds string is replaced with the news string max times in the result
   7807  * 0 for max means replace all olds strings
   7808  *
   7809  * \param
   7810  *   s: string
   7811  *   olds: old string to be replaced in s
   7812  *   news: new string replacing olds in s
   7813  *   max: number of times to replace olds, 0 to replace all found olds
   7814  * \return
   7815  *   new string (you must free the pointer)
   7816  *   "" when s is empty
   7817  *   NULL when s is NULL
   7818  *   NULL when olds is empty
   7819  */
   7820 char* replaceS(const char *s, const char *olds, const char *news, size_t max ) {
   7821   char *r = NULL;
   7822   char *tmp = NULL;
   7823   // ins is next insert point
   7824   const char *ins = NULL;
   7825   size_t count;
   7826   size_t lfront;
   7827 
   7828   // sanity checks and initialization
   7829   // count the number of replacements needed
   7830   // allocate result
   7831   // replace olds with news
   7832   // copy end of string
   7833 
   7834   // sanity checks and initialization
   7835   if (!s) {
   7836     return(NULL);
   7837   }
   7838   if (isEmptyS(s)) {
   7839     // return "" when s is empty
   7840     return(emptySF());
   7841   }
   7842   if (!olds) {
   7843     return(NULL);
   7844   }
   7845   size_t lolds;
   7846   lolds = strlen(olds);
   7847   if (!lolds) {
   7848     // empty olds causes infinite loop
   7849     return(NULL);
   7850   }
   7851   if (!news) {
   7852     // empty string for NULL
   7853     news = "";
   7854   }
   7855 
   7856   // count the number of replacements needed
   7857   ins = s;
   7858   for (count = 0 ; (tmp = strstr(ins, olds)) ; ++count) {
   7859      ins = tmp + lolds;
   7860      if (max && (count == max)) {
   7861        // the maximum number is replacements is reached, stop
   7862        break;
   7863   }
   7864      }
   7865 
   7866 
   7867   size_t lnews;
   7868   lnews = strlen(news);
   7869 
   7870   // allocate result
   7871   tmp = r = MALLOC(strlen(s) + (lnews - lolds) * count + 1);
   7872   if (!r) {
   7873     return(NULL);//LCOV_EXCL_LINE
   7874   }
   7875 
   7876   // replace olds with news
   7877   // ins points to the start of olds in s
   7878   // tmp is the front of s, tmp points the end of s front in r
   7879   // copy news to tmp, tmp points the end of news in r
   7880   // s is the remainder of s after end of olds
   7881   while (count--) {
   7882     ins    = strstr(s, olds);
   7883     lfront = (size_t)(ins - s);
   7884     tmp    = strncpy(tmp, s, lfront) + lfront;
   7885     tmp    = strcpy(tmp, news) + lnews;
   7886     s     += lfront + lolds;
   7887   }
   7888 
   7889   // copy end of string
   7890   strcpy(tmp, s);
   7891   return(r);
   7892 }
   7893 
   7894 char *replaceCharSS(const char *s, char olds, const char *news, size_t max) {
   7895 
   7896   charToS(p, olds);
   7897   return(replaceS(s, p, news, max));
   7898 }
   7899 
   7900 char *replaceSCharS(const char *s, const char *olds, char news, size_t max) {
   7901 
   7902   charToS(p, news);
   7903   return(replaceS(s, olds, p, max));
   7904 }
   7905 
   7906 char *replaceCharCharS(const char *s, char olds, char news, size_t max) {
   7907 
   7908   charToS(p, olds);
   7909   charToS(n, news);
   7910   return(replaceS(s, p, n, max));
   7911 }
   7912 
   7913 /**
   7914  * replaceSLen returns the length of the resulting string
   7915  */
   7916 size_t replaceSLen(const char *s, const char *olds, const char *news, size_t max) {
   7917   char *tmp = NULL;
   7918   // ins is next insert point
   7919   const char *ins = NULL;
   7920   size_t count;
   7921 
   7922   // sanity checks and initialization
   7923   // count the number of replacements needed
   7924   // allocate result
   7925   // replace olds with news
   7926   // copy end of string
   7927 
   7928   // sanity checks and initialization
   7929   if (!s) {
   7930     return(0);
   7931   }
   7932   if (isEmptyS(s)) {
   7933     // return "" when s is empty
   7934     return(0);
   7935   }
   7936   if (!olds) {
   7937     return(0);
   7938   }
   7939   size_t lolds;
   7940   lolds = strlen(olds);
   7941   if (!lolds) {
   7942     // empty olds causes infinite loop
   7943     return(0);
   7944   }
   7945   if (!news) {
   7946     // empty string for NULL
   7947     news = "";
   7948   }
   7949 
   7950   // count the number of replacements needed
   7951   ins = s;
   7952   for (count = 0 ; (tmp = strstr(ins, olds)) ; ++count) {
   7953      ins = tmp + lolds;
   7954      if (max && (count == max)) {
   7955        // the maximum number is replacements is reached, stop
   7956        break;
   7957   }
   7958      }
   7959 
   7960 
   7961   size_t lnews;
   7962   lnews = strlen(news);
   7963 
   7964   return(strlen(s) + (lnews - lolds) * count);
   7965 }
   7966 
   7967 /**
   7968  * replace String
   7969  * the olds string is replaced with the news string max times in the result
   7970  * 0 for max means replace all olds strings
   7971  *
   7972  * \param
   7973  *   s: string (that is allocated with malloc)
   7974  *   olds: old string to be replaced in s
   7975  *   news: new string replacing olds in s
   7976  *   max: number of times to replace olds, 0 to replace all found olds
   7977  * \return
   7978  *   modified s string (you must free the pointer)
   7979  *   NULL s not modified when s is NULL or empty and when olds is empty
   7980  */
   7981 char* iReplaceS(char **s, const char *olds, const char *news, size_t max ) {
   7982   char *r = NULL;
   7983   char *tmp = NULL;
   7984   char *workingS = NULL;
   7985   // ins is next insert point
   7986   char *ins = NULL;
   7987   size_t count;
   7988   size_t lfront;
   7989 
   7990   // sanity checks and initialization
   7991   // count the number of replacements needed
   7992   // allocate result
   7993   // replace olds with news
   7994   // copy end of string
   7995 
   7996   // sanity checks and initialization
   7997   if (!s || !*s) {
   7998     return(NULL);
   7999   }
   8000   if (isEmptyS(*s)) {
   8001     // s is empty, do nothing
   8002     return(NULL);
   8003   }
   8004   if (!olds) {
   8005     return(NULL);
   8006   }
   8007   size_t lolds;
   8008   lolds = strlen(olds);
   8009   if (!lolds) {
   8010     // empty olds causes infinite loop
   8011     return(NULL);
   8012   }
   8013   if (!news) {
   8014     // empty string for NULL
   8015     news = "";
   8016   }
   8017 
   8018   // count the number of replacements needed
   8019   ins = workingS = *s;
   8020   for (count = 0 ; (tmp = strstr(ins, olds)) ; ++count) {
   8021      ins = tmp + lolds;
   8022      if (max && (count == max)) {
   8023        // the maximum number is replacements is reached, stop
   8024        break;
   8025   }
   8026      }
   8027 
   8028 
   8029   size_t lnews;
   8030   lnews       = strlen(news);
   8031 
   8032   // allocate result
   8033   size_t rLen = strlen(*s) + (lnews - lolds) * count + 1;;
   8034   tmp = r     = MALLOC(rLen);
   8035   if (!r) {
   8036     return(NULL);
   8037   }
   8038 
   8039   // replace olds with news
   8040   // ins points to the start of olds in s
   8041   // tmp is the front of s, tmp points the end of s front in r
   8042   // copy news to tmp, tmp points the end of news in r
   8043   // s is the remainder of s after end of olds
   8044   while (count--) {
   8045     ins       = strstr(workingS, olds);
   8046     lfront    = (size_t)(ins - workingS);
   8047     tmp       = strncpy(tmp, workingS, lfront) + lfront;
   8048     tmp       = strcpy(tmp, news) + lnews;
   8049     workingS += lfront + lolds;
   8050   }
   8051 
   8052   // copy end of string
   8053   strcpy(tmp, workingS);
   8054 
   8055   free(*s);
   8056   *s = r;
   8057   return(r);
   8058 }
   8059 
   8060 char *iReplaceCharSS(char **s, char olds, const char *news, size_t max) {
   8061 
   8062   charToS(p, olds);
   8063   return(iReplaceS(s, p, news, max));
   8064 }
   8065 
   8066 char *iReplaceSCharS(char **s, const char *olds, char news, size_t max) {
   8067 
   8068   charToS(p, news);
   8069   return(iReplaceS(s, olds, p, max));
   8070 }
   8071 
   8072 char *iReplaceCharCharS(char **s, char olds, char news, size_t max) {
   8073 
   8074   charToS(p, olds);
   8075   charToS(n, news);
   8076   return(iReplaceS(s, p, n, max));
   8077 }
   8078 
   8079 /**
   8080  * buffer replace String
   8081  * the olds string is replaced with the news string max times in the result
   8082  * 0 for max means replace all olds strings
   8083  *
   8084  * \param
   8085  *   s: string
   8086  *   olds: old string to be replaced in s
   8087  *   news: new string replacing olds in s
   8088  *   max: number of times to replace olds, 0 to replace all found olds
   8089  * \return
   8090  *   modified s string
   8091  *   NULL s not modified when s is NULL or empty and when olds is empty
   8092  */
   8093 char* bReplaceS(char *s, const char *olds, const char *news, size_t max ) {
   8094   char *r = NULL;
   8095   char *tmp = NULL;
   8096   char *workingS = NULL;
   8097   // ins is next insert point
   8098   char *ins = NULL;
   8099   size_t count;
   8100   size_t lfront;
   8101 
   8102   // sanity checks and initialization
   8103   // count the number of replacements needed
   8104   // allocate result
   8105   // replace olds with news
   8106   // copy end of string
   8107 
   8108   // sanity checks and initialization
   8109   if (!s) {
   8110     return(NULL);
   8111   }
   8112   if (isEmptyS(s)) {
   8113     // s is empty, do nothing
   8114     return(NULL);
   8115   }
   8116   if (!olds) {
   8117     return(NULL);
   8118   }
   8119   size_t lolds;
   8120   lolds = strlen(olds);
   8121   if (!lolds) {
   8122     // empty olds causes infinite loop
   8123     return(NULL);
   8124   }
   8125   if (!news) {
   8126     // empty string for NULL
   8127     news = "";
   8128   }
   8129 
   8130   // count the number of replacements needed
   8131   ins = workingS = s;
   8132   for (count = 0 ; (tmp = strstr(ins, olds)) ; ++count) {
   8133      ins = tmp + lolds;
   8134      if (max && (count == max)) {
   8135        // the maximum number is replacements is reached, stop
   8136        break;
   8137   }
   8138      }
   8139 
   8140 
   8141   size_t lnews;
   8142   lnews       = strlen(news);
   8143 
   8144   // allocate result
   8145   size_t rLen = strlen(s) + (lnews - lolds) * count + 1;;
   8146   tmp = r     = MALLOC(rLen);
   8147   if (!r) {
   8148     return(NULL);
   8149   }
   8150 
   8151   // replace olds with news
   8152   // ins points to the start of olds in s
   8153   // tmp is the front of s, tmp points the end of s front in r
   8154   // copy news to tmp, tmp points the end of news in r
   8155   // s is the remainder of s after end of olds
   8156   while (count--) {
   8157     ins       = strstr(workingS, olds);
   8158     lfront    = (size_t)(ins - workingS);
   8159     tmp       = strncpy(tmp, workingS, lfront) + lfront;
   8160     tmp       = strcpy(tmp, news) + lnews;
   8161     workingS += lfront + lolds;
   8162   }
   8163 
   8164   // copy end of string
   8165   strcpy(tmp, workingS);
   8166 
   8167   strcpy(s, r);
   8168   free(r);
   8169   return(s);
   8170 }
   8171 
   8172 /**
   8173  * buffer size replace String
   8174  * the olds string is replaced with the news string max times in the result
   8175  * 0 for max means replace all olds strings
   8176  *
   8177  * \param
   8178  *   s: string
   8179  *   olds: old string to be replaced in s
   8180  *   news: new string replacing olds in s
   8181  *   max: number of times to replace olds, 0 to replace all found olds
   8182  * \return
   8183  *   modified s string
   8184  *   NULL s not modified when s is NULL or empty and when olds is empty
   8185  */
   8186 char* bLReplaceS(char *s, size_t sSize, const char *olds, const char *news, size_t max) {
   8187   char *r = NULL;
   8188   char *tmp = NULL;
   8189   char *workingS = NULL;
   8190   // ins is next insert point
   8191   char *ins = NULL;
   8192   size_t count;
   8193   size_t lfront;
   8194 
   8195   // sanity checks and initialization
   8196   // count the number of replacements needed
   8197   // allocate result
   8198   // replace olds with news
   8199   // copy end of string
   8200 
   8201   // sanity checks and initialization
   8202   if (!s) {
   8203     return(NULL);
   8204   }
   8205   if (!sSize) {
   8206     // size 0 - no change
   8207     return(s);
   8208   }
   8209   if (isEmptyS(s)) {
   8210     // s is empty, do nothing
   8211     return(NULL);
   8212   }
   8213   if (!olds) {
   8214     return(NULL);
   8215   }
   8216   size_t lolds;
   8217   lolds = strlen(olds);
   8218   if (!lolds) {
   8219     // empty olds causes infinite loop
   8220     return(NULL);
   8221   }
   8222   if (!news) {
   8223     // empty string for NULL
   8224     news = "";
   8225   }
   8226 
   8227   // count the number of replacements needed
   8228   ins = workingS = s;
   8229   for (count = 0 ; (tmp = strstr(ins, olds)) ; ++count) {
   8230      ins = tmp + lolds;
   8231      if (max && (count == max)) {
   8232        // the maximum number is replacements is reached, stop
   8233        break;
   8234   }
   8235      }
   8236 
   8237 
   8238   size_t lnews;
   8239   lnews       = strlen(news);
   8240 
   8241   // allocate result
   8242   size_t rLen = strlen(s) + (lnews - lolds) * count + 1;;
   8243   tmp = r     = MALLOC(rLen);
   8244   if (!r) {
   8245     return(NULL);
   8246   }
   8247 
   8248   // replace olds with news
   8249   // ins points to the start of olds in s
   8250   // tmp is the front of s, tmp points the end of s front in r
   8251   // copy news to tmp, tmp points the end of news in r
   8252   // s is the remainder of s after end of olds
   8253   while (count--) {
   8254     ins       = strstr(workingS, olds);
   8255     lfront    = (size_t)(ins - workingS);
   8256     tmp       = strncpy(tmp, workingS, lfront) + lfront;
   8257     tmp       = strcpy(tmp, news) + lnews;
   8258     workingS += lfront + lolds;
   8259   }
   8260 
   8261   // copy end of string
   8262   strcpy(tmp, workingS);
   8263 
   8264   pErrorNULL(strLCpy(s, sSize, r));
   8265   free(r);
   8266   return(s);
   8267 }
   8268 
   8269 /**
   8270  * replace Many Strings
   8271  * the original remains unchanged
   8272  * duplicate s
   8273  * the olds string is replaced with the news string max times in the result
   8274  *
   8275  * Example:
   8276  * r = replaceManyS("asd", "s",  "BNM", "a",  "AAA")
   8277  *                          ^olds ^news  ^olds ^news
   8278  *
   8279  * \param
   8280  *   s: string
   8281  *   olds: old string to be replaced in s
   8282  *   news: new string replacing olds in s
   8283  *   ...
   8284  * \return
   8285  *   new string (you must free the pointer)
   8286  *   "" when s is empty
   8287  *   NULL when s is NULL
   8288  *   NULL when only 2 parameters are given
   8289  *   NULL when any olds is empty
   8290  */
   8291 char *replaceManySF(const char *paramType, ...) {
   8292   va_list pl;
   8293   char *param = NULL;
   8294   char *r = NULL;
   8295   char *workingS = NULL;
   8296   char *olds = NULL;
   8297   char *news = NULL;
   8298 
   8299   // sanity checks
   8300   if (!paramType) {
   8301     return(NULL);
   8302   }
   8303 
   8304   if (isEmptyS(paramType)) {
   8305     return(emptySF());
   8306   }
   8307 
   8308   workingS  = strdup(paramType);
   8309 
   8310   // add arguments to a list
   8311   va_start(pl, paramType);
   8312   param = va_arg(pl, char *);
   8313   while (param) {
   8314     if (!olds) {
   8315       olds = param;
   8316     }
   8317     else if (!news) {
   8318       news = param;
   8319       r = replaceS(workingS, olds, news, 0);
   8320       free(workingS);
   8321       olds = NULL;
   8322       news = NULL;
   8323       workingS = r;
   8324     }
   8325     param = va_arg(pl, char *);
   8326   }
   8327   va_end(pl);
   8328   if (!r) {
   8329     free(workingS);
   8330   }
   8331   return(r);
   8332 }
   8333 
   8334 /**
   8335  * replace Many Strings
   8336  * the olds string is replaced with the news string max times in the result
   8337  *
   8338  * Example:
   8339  * iReplaceManyS(s, "s",  "BNM", "a",  "AAA")
   8340  *                   ^olds ^news  ^olds ^news
   8341  *
   8342  * \param
   8343  *   string (this parameter is reallocated)
   8344  *   olds: old string to be replaced in s
   8345  *   news: new string replacing olds in s
   8346  *   ...
   8347  * \return
   8348  *   modified string (you must free the pointer)
   8349  *   NULL not modified when s is empty, when s is NULL, when only 2 parameters are given,
   8350  *     when any olds is empty
   8351  */
   8352 char *iReplaceManySF(char **s, char *paramType, ...) {
   8353   va_list pl;
   8354   char *olds = NULL;
   8355   char *news = NULL;
   8356 
   8357   // sanity checks
   8358   if (!s || !*s) {
   8359     return(NULL);
   8360   }
   8361 
   8362   if (isEmptyS(*s)) {
   8363     return(NULL);
   8364   }
   8365 
   8366   olds = (char *) paramType;;
   8367 
   8368   // add arguments to a list
   8369   va_start(pl, paramType);
   8370   paramType = va_arg(pl, char *);
   8371   while (paramType) {
   8372     if (!olds) {
   8373       olds = (char *) paramType;
   8374     }
   8375     else if (!news) {
   8376       news = (char *) paramType;
   8377       pErrorNULL(iReplaceS(s, olds, news, 0));
   8378       olds = NULL;
   8379       news = NULL;
   8380     }
   8381 
   8382     paramType = va_arg(pl, char *);
   8383   }
   8384   va_end(pl);
   8385   return(*s);
   8386 }
   8387 
   8388 /**
   8389  * buffer replace Many Strings
   8390  * the olds string is replaced with the news string max times in the result
   8391  *
   8392  * Example:
   8393  * bReplaceManyS(s, "s",  "BNM", "a",  "AAA")
   8394  *                   ^olds ^news  ^olds ^news
   8395  *
   8396  * \param
   8397  *   string
   8398  *   olds: old string to be replaced in s
   8399  *   news: new string replacing olds in s
   8400  *   ...
   8401  * \return
   8402  *   modified string
   8403  *   NULL not modified when s is empty, when s is NULL, when only 2 parameters are given,
   8404  *     when any olds is empty
   8405  */
   8406 char *bReplaceManySF(char *s, char *paramType, ...) {
   8407   va_list pl;
   8408   char *olds = NULL;
   8409   char *news = NULL;
   8410 
   8411   // sanity checks
   8412   if (!s) {
   8413     return(NULL);
   8414   }
   8415 
   8416   if (isEmptyS(s)) {
   8417     return(NULL);
   8418   }
   8419 
   8420   olds = paramType;;
   8421 
   8422   // add arguments to a list
   8423   va_start(pl, paramType);
   8424   paramType = va_arg(pl, char *);
   8425   while (paramType) {
   8426     if (!olds) {
   8427       olds = paramType;
   8428     }
   8429     else if (!news) {
   8430       news = paramType;
   8431       pErrorNULL(bReplaceS(s, olds, news, 0));
   8432       olds = NULL;
   8433       news = NULL;
   8434     }
   8435 
   8436     paramType = va_arg(pl, char *);
   8437   }
   8438   va_end(pl);
   8439   return(s);
   8440 }
   8441 
   8442 /**
   8443  * buffer size replace Many Strings
   8444  * the olds string is replaced with the news string max times in the result
   8445  *
   8446  * Example:
   8447  * bReplaceManyS(s, "s",  "BNM", "a",  "AAA")
   8448  *                   ^olds ^news  ^olds ^news
   8449  *
   8450  * \param
   8451  *   string
   8452  *   olds: old string to be replaced in s
   8453  *   news: new string replacing olds in s
   8454  *   ...
   8455  * \return
   8456  *   modified string
   8457  *   NULL not modified when s is empty, when s is NULL, when only 2 parameters are given,
   8458  *     when any olds is empty
   8459  */
   8460 char *bLReplaceManySF(char *s, size_t sSize, char *paramType, ...) {
   8461   va_list pl;
   8462   char *olds = NULL;
   8463   char *news = NULL;
   8464 
   8465   // sanity checks
   8466   if (!s) {
   8467     return(NULL);
   8468   }
   8469 
   8470   if (!sSize) {
   8471     return(s);
   8472   }
   8473 
   8474   if (isEmptyS(s)) {
   8475     return(NULL);
   8476   }
   8477 
   8478   olds = paramType;;
   8479 
   8480   // add arguments to a list
   8481   va_start(pl, paramType);
   8482   paramType = va_arg(pl, char *);
   8483   while (paramType) {
   8484     if (!olds) {
   8485       olds = paramType;
   8486     }
   8487     else if (!news) {
   8488       news = paramType;
   8489       pErrorNULL(bLReplaceS(s, sSize, olds, news, 0));
   8490       olds = NULL;
   8491       news = NULL;
   8492     }
   8493 
   8494     paramType = va_arg(pl, char *);
   8495   }
   8496   va_end(pl);
   8497   return(s);
   8498 }
   8499 
   8500 /**
   8501  * ignore case Replace String
   8502  * the original remains unchanged
   8503  * duplicate s
   8504  * the olds string is replaced with the news string max times in the result
   8505  * 0 for max means replace all olds strings
   8506  *
   8507  * \param
   8508  *   s: string
   8509  *   olds: old string to be replaced in s
   8510  *   news: new string replacing olds in s
   8511  *   max: number of times to replace olds, 0 to replace all found olds
   8512  * \return
   8513  *   new string (you must free the pointer)
   8514  *   "" when s is empty
   8515  *   NULL when s is NULL
   8516  *   NULL when olds is empty
   8517  */
   8518 char* icReplaceS(const char *s, const char *olds, const char *news, size_t max ) {
   8519   char *r = NULL;
   8520   char *tmp = NULL;
   8521   // ins is next insert point
   8522   const char *ins = NULL;
   8523   size_t count;
   8524   size_t lfront;
   8525 
   8526   // sanity checks and initialization
   8527   // count the number of replacements needed
   8528   // allocate result
   8529   // replace olds with news
   8530   // copy end of string
   8531 
   8532   // sanity checks and initialization
   8533   if (!s) {
   8534     return(NULL);
   8535   }
   8536   if (isEmptyS(s)) {
   8537     // return "" when s is empty
   8538     return(emptySF());
   8539   }
   8540   if (!olds) {
   8541     return(NULL);
   8542   }
   8543   size_t lolds;
   8544   lolds = strlen(olds);
   8545   if (!lolds) {
   8546     // empty olds causes infinite loop
   8547     return(NULL);
   8548   }
   8549   if (!news) {
   8550     // empty string for NULL
   8551     news = "";
   8552   }
   8553 
   8554   // count the number of replacements needed
   8555   ins = s;
   8556   for (count = 0 ; (tmp = strcasestr(ins, olds)) ; ++count) {
   8557      ins = tmp + lolds;
   8558      if (max && (count == max)) {
   8559        // the maximum number is replacements is reached, stop
   8560        break;
   8561   }
   8562      }
   8563 
   8564 
   8565   size_t lnews;
   8566   lnews = strlen(news);
   8567 
   8568   // allocate result
   8569   tmp = r = MALLOC(strlen(s) + (lnews - lolds) * count + 1);
   8570   if (!r) {
   8571     return(NULL);//LCOV_EXCL_LINE
   8572   }
   8573 
   8574   // replace olds with news
   8575   // ins points to the start of olds in s
   8576   // tmp is the front of s, tmp points the end of s front in r
   8577   // copy news to tmp, tmp points the end of news in r
   8578   // s is the remainder of s after end of olds
   8579   while (count--) {
   8580     ins    = strcasestr(s, olds);
   8581     lfront = (size_t)(ins - s);
   8582     tmp    = strncpy(tmp, s, lfront) + lfront;
   8583     tmp    = strcpy(tmp, news) + lnews;
   8584     s     += lfront + lolds;
   8585   }
   8586 
   8587   // copy end of string
   8588   strcpy(tmp, s);
   8589   return(r);
   8590 }
   8591 
   8592 char *icReplaceCharSS(const char *s, char olds, const char *news, size_t max) {
   8593 
   8594   charToS(p, olds);
   8595   return(icReplaceS(s, p, news, max));
   8596 }
   8597 
   8598 char *icReplaceSCharS(const char *s, const char *olds, char news, size_t max) {
   8599 
   8600   charToS(p, news);
   8601   return(icReplaceS(s, olds, p, max));
   8602 }
   8603 
   8604 char *icReplaceCharCharS(const char *s, char olds, char news, size_t max) {
   8605 
   8606   charToS(p, olds);
   8607   charToS(n, news);
   8608   return(icReplaceS(s, p, n, max));
   8609 }
   8610 
   8611 
   8612 /**
   8613  * in place ignore case replace String
   8614  * the olds string is replaced with the news string max times in the result
   8615  * 0 for max means replace all olds strings
   8616  *
   8617  * \param
   8618  *   s: string (this parameter is reallocated)
   8619  *   olds: old string to be replaced in s
   8620  *   news: new string replacing olds in s
   8621  *   max: number of times to replace olds, 0 to replace all found olds
   8622  * \return
   8623  *   modified s string (you must free the pointer)
   8624  *   NULL s not modified when s is NULL or empty and when olds is empty
   8625  */
   8626 char* iicReplaceS(char **s, const char *olds, const char *news, size_t max ) {
   8627   char *r = NULL;
   8628   char *tmp = NULL;
   8629   char *workingS = NULL;
   8630   // ins is next insert point
   8631   char *ins = NULL;
   8632   size_t count;
   8633   size_t lfront;
   8634 
   8635   // sanity checks and initialization
   8636   // count the number of replacements needed
   8637   // allocate result
   8638   // replace olds with news
   8639   // copy end of string
   8640 
   8641   // sanity checks and initialization
   8642   if (!s || !*s) {
   8643     return(NULL);
   8644   }
   8645   if (isEmptyS(*s)) {
   8646     // s is empty, do nothing
   8647     return(NULL);
   8648   }
   8649   if (!olds) {
   8650     return(NULL);
   8651   }
   8652   size_t lolds;
   8653   lolds = strlen(olds);
   8654   if (!lolds) {
   8655     // empty olds causes infinite loop
   8656     return(NULL);
   8657   }
   8658   if (!news) {
   8659     // empty string for NULL
   8660     news = "";
   8661   }
   8662 
   8663   // count the number of replacements needed
   8664   ins = workingS = *s;
   8665   for (count = 0 ; (tmp = strcasestr(ins, olds)) ; ++count) {
   8666      ins = tmp + lolds;
   8667      if (max && (count == max)) {
   8668        // the maximum number is replacements is reached, stop
   8669        break;
   8670   }
   8671      }
   8672 
   8673 
   8674   size_t lnews;
   8675   lnews       = strlen(news);
   8676 
   8677   // allocate result
   8678   size_t rLen = strlen(*s) + (lnews - lolds) * count + 1;;
   8679   tmp = r     = MALLOC(rLen);
   8680   if (!r) {
   8681     return(NULL);
   8682   }
   8683 
   8684   // replace olds with news
   8685   // ins points to the start of olds in s
   8686   // tmp is the front of s, tmp points the end of s front in r
   8687   // copy news to tmp, tmp points the end of news in r
   8688   // s is the remainder of s after end of olds
   8689   while (count--) {
   8690     ins       = strcasestr(workingS, olds);
   8691     lfront    = (size_t)(ins - workingS);
   8692     tmp       = strncpy(tmp, workingS, lfront) + lfront;
   8693     tmp       = strcpy(tmp, news) + lnews;
   8694     workingS += lfront + lolds;
   8695   }
   8696 
   8697   // copy end of string
   8698   strcpy(tmp, workingS);
   8699 
   8700   free(*s);
   8701   *s = r;
   8702   return(r);
   8703 }
   8704 
   8705 char *iicReplaceCharSS(char **s, char olds, const char *news, size_t max) {
   8706 
   8707   charToS(p, olds);
   8708   return(iicReplaceS(s, p, news, max));
   8709 }
   8710 
   8711 char *iicReplaceSCharS(char **s, const char *olds, char news, size_t max) {
   8712 
   8713   charToS(p, news);
   8714   return(iicReplaceS(s, olds, p, max));
   8715 }
   8716 
   8717 char *iicReplaceCharCharS(char **s, char olds, char news, size_t max) {
   8718 
   8719   charToS(p, olds);
   8720   charToS(n, news);
   8721   return(iicReplaceS(s, p, n, max));
   8722 }
   8723 
   8724 /**
   8725  * buffer ignore case replace String
   8726  * the olds string is replaced with the news string max times in the result
   8727  * 0 for max means replace all olds strings
   8728  *
   8729  * \param
   8730  *   s: string
   8731  *   olds: old string to be replaced in s
   8732  *   news: new string replacing olds in s
   8733  *   max: number of times to replace olds, 0 to replace all found olds
   8734  * \return
   8735  *   modified s string
   8736  *   NULL s not modified when s is NULL or empty and when olds is empty
   8737  */
   8738 char* bicReplaceS(char *s, const char *olds, const char *news, size_t max ) {
   8739   char *r = NULL;
   8740   char *tmp = NULL;
   8741   char *workingS = NULL;
   8742   // ins is next insert point
   8743   char *ins = NULL;
   8744   size_t count;
   8745   size_t lfront;
   8746 
   8747   // sanity checks and initialization
   8748   // count the number of replacements needed
   8749   // allocate result
   8750   // replace olds with news
   8751   // copy end of string
   8752 
   8753   // sanity checks and initialization
   8754   if (!s) {
   8755     return(NULL);
   8756   }
   8757   if (isEmptyS(s)) {
   8758     // s is empty, do nothing
   8759     return(NULL);
   8760   }
   8761   if (!olds) {
   8762     return(NULL);
   8763   }
   8764   size_t lolds;
   8765   lolds = strlen(olds);
   8766   if (!lolds) {
   8767     // empty olds causes infinite loop
   8768     return(NULL);
   8769   }
   8770   if (!news) {
   8771     // empty string for NULL
   8772     news = "";
   8773   }
   8774 
   8775   // count the number of replacements needed
   8776   ins = workingS = s;
   8777   for (count = 0 ; (tmp = strcasestr(ins, olds)) ; ++count) {
   8778      ins = tmp + lolds;
   8779      if (max && (count == max)) {
   8780        // the maximum number is replacements is reached, stop
   8781        break;
   8782   }
   8783      }
   8784 
   8785 
   8786   size_t lnews;
   8787   lnews       = strlen(news);
   8788 
   8789   // allocate result
   8790   size_t rLen = strlen(s) + (lnews - lolds) * count + 1;;
   8791   tmp = r     = MALLOC(rLen);
   8792   if (!r) {
   8793     return(NULL);
   8794   }
   8795 
   8796   // replace olds with news
   8797   // ins points to the start of olds in s
   8798   // tmp is the front of s, tmp points the end of s front in r
   8799   // copy news to tmp, tmp points the end of news in r
   8800   // s is the remainder of s after end of olds
   8801   while (count--) {
   8802     ins       = strcasestr(workingS, olds);
   8803     lfront    = (size_t)(ins - workingS);
   8804     tmp       = strncpy(tmp, workingS, lfront) + lfront;
   8805     tmp       = strcpy(tmp, news) + lnews;
   8806     workingS += lfront + lolds;
   8807   }
   8808 
   8809   // copy end of string
   8810   strcpy(tmp, workingS);
   8811 
   8812   strcpy(s, r);
   8813   free(r);
   8814   return(s);
   8815 }
   8816 
   8817 /**
   8818  * buffer size ignore case replace String
   8819  * the olds string is replaced with the news string max times in the result
   8820  * 0 for max means replace all olds strings
   8821  *
   8822  * \param
   8823  *   s: string
   8824  *   olds: old string to be replaced in s
   8825  *   news: new string replacing olds in s
   8826  *   max: number of times to replace olds, 0 to replace all found olds
   8827  * \return
   8828  *   modified s string
   8829  *   NULL s not modified when s is NULL or empty and when olds is empty
   8830  */
   8831 char* bLicReplaceS(char *s, size_t sSize, const char *olds, const char *news, size_t max) {
   8832   char *r = NULL;
   8833   char *tmp = NULL;
   8834   char *workingS = NULL;
   8835   // ins is next insert point
   8836   char *ins = NULL;
   8837   size_t count;
   8838   size_t lfront;
   8839 
   8840   // sanity checks and initialization
   8841   // count the number of replacements needed
   8842   // allocate result
   8843   // replace olds with news
   8844   // copy end of string
   8845 
   8846   // sanity checks and initialization
   8847   if (!s) {
   8848     return(NULL);
   8849   }
   8850   if (!sSize) {
   8851     // size 0 - no change
   8852     return(s);
   8853   }
   8854   if (isEmptyS(s)) {
   8855     // s is empty, do nothing
   8856     return(NULL);
   8857   }
   8858   if (!olds) {
   8859     return(NULL);
   8860   }
   8861   size_t lolds;
   8862   lolds = strlen(olds);
   8863   if (!lolds) {
   8864     // empty olds causes infinite loop
   8865     return(NULL);
   8866   }
   8867   if (!news) {
   8868     // empty string for NULL
   8869     news = "";
   8870   }
   8871 
   8872   // count the number of replacements needed
   8873   ins = workingS = s;
   8874   for (count = 0 ; (tmp = strcasestr(ins, olds)) ; ++count) {
   8875      ins = tmp + lolds;
   8876      if (max && (count == max)) {
   8877        // the maximum number is replacements is reached, stop
   8878        break;
   8879   }
   8880      }
   8881 
   8882 
   8883   size_t lnews;
   8884   lnews       = strlen(news);
   8885 
   8886   // allocate result
   8887   size_t rLen = strlen(s) + (lnews - lolds) * count + 1;;
   8888   tmp = r     = MALLOC(rLen);
   8889   if (!r) {
   8890     return(NULL);
   8891   }
   8892 
   8893   // replace olds with news
   8894   // ins points to the start of olds in s
   8895   // tmp is the front of s, tmp points the end of s front in r
   8896   // copy news to tmp, tmp points the end of news in r
   8897   // s is the remainder of s after end of olds
   8898   while (count--) {
   8899     ins       = strcasestr(workingS, olds);
   8900     lfront    = (size_t)(ins - workingS);
   8901     tmp       = strncpy(tmp, workingS, lfront) + lfront;
   8902     tmp       = strcpy(tmp, news) + lnews;
   8903     workingS += lfront + lolds;
   8904   }
   8905 
   8906   // copy end of string
   8907   strcpy(tmp, workingS);
   8908 
   8909   pErrorNULL(strLCpy(s, sSize, r));
   8910   free(r);
   8911   return(s);
   8912 }
   8913 
   8914 /**
   8915  * ignore case replace Many Strings
   8916  * the original remains unchanged
   8917  * duplicate s
   8918  * the olds string is replaced with the news string max times in the result
   8919  *
   8920  * Example:
   8921  * r = icReplaceManyS("asd", "s",  "BNM", "a",  "AAA")
   8922  *                           ^olds ^news  ^olds ^news
   8923  *
   8924  * \param
   8925  *   s: string
   8926  *   olds: old string to be replaced in s
   8927  *   news: new string replacing olds in s
   8928  *   ...
   8929  * \return
   8930  *   new string (you must free the pointer)
   8931  *   "" when s is empty
   8932  *   NULL when s is NULL
   8933  *   NULL when only 2 parameters are given
   8934  *   NULL when any olds is empty
   8935  */
   8936 char *icReplaceManySF(const char *paramType, ...) {
   8937   va_list pl;
   8938   char *r = NULL;
   8939   char *param = NULL;
   8940   char *workingS = NULL;
   8941   char *olds = NULL;
   8942   char *news = NULL;
   8943 
   8944   // sanity checks
   8945   if (!paramType) {
   8946     return(NULL);
   8947   }
   8948 
   8949   if (isEmptyS(paramType)) {
   8950     return(emptySF());
   8951   }
   8952 
   8953   workingS = strdup(paramType);
   8954 
   8955   // add arguments to a list
   8956   va_start(pl, paramType);
   8957   param = va_arg(pl, char *);
   8958   while (param) {
   8959     if (!olds) {
   8960       olds = param;
   8961     }
   8962     else if (!news) {
   8963       news = param;
   8964       r = icReplaceS(workingS, olds, news, 0);
   8965       free(workingS);
   8966       olds = NULL;
   8967       news = NULL;
   8968       workingS = r;
   8969     }
   8970     param = va_arg(pl, char *);
   8971   }
   8972   va_end(pl);
   8973   if (!r) {
   8974     free(workingS);
   8975   }
   8976   return(r);
   8977 }
   8978 
   8979 /**
   8980  * in place ignore case replace Many Strings
   8981  * the olds string is replaced with the news string max times in the result
   8982  *
   8983  * Example:
   8984  * iicReplaceManyS(s, "s",  "BNM", "a",  "AAA")
   8985  *                     ^olds ^news  ^olds ^news
   8986  *
   8987  * \param
   8988  *   string (this parameter is reallocated)
   8989  *   olds: old string to be replaced in s
   8990  *   news: new string replacing olds in s
   8991  *   ...
   8992  * \return
   8993  *   modified string (you must free the pointer)
   8994  *   NULL not modified when s is empty, when s is NULL, when only 2 parameters are given,
   8995  *     when any olds is empty
   8996  */
   8997 char *iicReplaceManySF(char **s, char *paramType, ...) {
   8998   va_list pl;
   8999   char *olds = NULL;
   9000   char *news = NULL;
   9001 
   9002   // sanity checks
   9003   if (!s || !*s) {
   9004     return(NULL);
   9005   }
   9006 
   9007   if (isEmptyS(*s)) {
   9008     return(NULL);
   9009   }
   9010 
   9011   olds = paramType;;
   9012 
   9013   // add arguments to a list
   9014   va_start(pl, paramType);
   9015   paramType = va_arg(pl, char *);
   9016   while (paramType) {
   9017     if (!olds) {
   9018       olds = paramType;
   9019     }
   9020     else if (!news) {
   9021       news = paramType;
   9022       pErrorNULL(iicReplaceS(s, olds, news, 0));
   9023       olds = NULL;
   9024       news = NULL;
   9025     }
   9026 
   9027     paramType = va_arg(pl, char *);
   9028   }
   9029   va_end(pl);
   9030   return(*s);
   9031 }
   9032 
   9033 /**
   9034  * buffer ignore case replace Many Strings
   9035  * the olds string is replaced with the news string max times in the result
   9036  *
   9037  * Example:
   9038  * bReplaceManyS(s, "s",  "BNM", "a",  "AAA")
   9039  *                  ^olds ^news  ^olds ^news
   9040  *
   9041  * \param
   9042  *   string
   9043  *   olds: old string to be replaced in s
   9044  *   news: new string replacing olds in s
   9045  *   ...
   9046  * \return
   9047  *   modified string
   9048  *   NULL not modified when s is empty, when s is NULL, when only 2 parameters are given,
   9049  *     when any olds is empty
   9050  */
   9051 char *bicReplaceManySF(char *s, char *paramType, ...) {
   9052   va_list pl;
   9053   char *olds = NULL;
   9054   char *news = NULL;
   9055 
   9056   // sanity checks
   9057   if (!s) {
   9058     return(NULL);
   9059   }
   9060 
   9061   if (isEmptyS(s)) {
   9062     return(NULL);
   9063   }
   9064 
   9065   olds = paramType;;
   9066 
   9067   // add arguments to a list
   9068   va_start(pl, paramType);
   9069   paramType = va_arg(pl, char *);
   9070   while (paramType) {
   9071     if (!olds) {
   9072       olds = paramType;
   9073     }
   9074     else if (!news) {
   9075       news = paramType;
   9076       pErrorNULL(bicReplaceS(s, olds, news, 0));
   9077       olds = NULL;
   9078       news = NULL;
   9079     }
   9080 
   9081     paramType = va_arg(pl, char *);
   9082   }
   9083   va_end(pl);
   9084   return(s);
   9085 }
   9086 
   9087 /**
   9088  * buffer size ignore case replace Many Strings
   9089  * the olds string is replaced with the news string max times in the result
   9090  *
   9091  * Example:
   9092  * bReplaceManyS(s, "s",  "BNM", "a",  "AAA")
   9093  *                   ^olds ^news  ^olds ^news
   9094  *
   9095  * \param
   9096  *   string
   9097  *   olds: old string to be replaced in s
   9098  *   news: new string replacing olds in s
   9099  *   ...
   9100  * \return
   9101  *   modified string
   9102  *   NULL not modified when s is empty, when s is NULL, when only 2 parameters are given,
   9103  *     when any olds is empty
   9104  */
   9105 char *bLicReplaceManySF(char *s, size_t sSize, char *paramType, ...) {
   9106   va_list pl;
   9107   char *olds = NULL;
   9108   char *news = NULL;
   9109 
   9110   // sanity checks
   9111   if (!s) {
   9112     return(NULL);
   9113   }
   9114 
   9115   if (!sSize) {
   9116     return(s);
   9117   }
   9118 
   9119   if (isEmptyS(s)) {
   9120     return(NULL);
   9121   }
   9122 
   9123   olds = paramType;;
   9124 
   9125   // add arguments to a list
   9126   va_start(pl, paramType);
   9127   paramType = va_arg(pl, char *);
   9128   while (paramType) {
   9129     if (!olds) {
   9130       olds = paramType;
   9131     }
   9132     else if (!news) {
   9133       news = paramType;
   9134       pErrorNULL(bLicReplaceS(s, sSize, olds, news, 0));
   9135       olds = NULL;
   9136       news = NULL;
   9137     }
   9138 
   9139     paramType = va_arg(pl, char *);
   9140   }
   9141   va_end(pl);
   9142   return(s);
   9143 }
   9144 
   9145 
   9146 /**
   9147  * string Equal
   9148  * compare string1 to string2
   9149  *
   9150  * \param
   9151  *   2 strings
   9152  * \return
   9153  *   true the strings have identical content
   9154  *   false they differ
   9155  */
   9156 bool eqS(const char *string1, const char *string2) {
   9157 
   9158   // sanity checks
   9159   if (!string1 || !string2) {
   9160     return(false);
   9161   }
   9162   return(strcmp(string1,string2) == 0);;
   9163 }
   9164 
   9165 bool eqCharS(char c, const char *string2) {
   9166 
   9167   // sanity checks
   9168   if (!string2) {
   9169     return(false);
   9170   }
   9171   charToS(s, c);
   9172   return(strcmp(s,string2) == 0);;
   9173 }
   9174 
   9175 bool eqSChar(const char *string1, char c) {
   9176 
   9177   // sanity checks
   9178   if (!string1) {
   9179     return(false);
   9180   }
   9181   charToS(s, c);
   9182   return(strcmp(string1,s) == 0);;
   9183 }
   9184 
   9185 /**
   9186  * string Index Equal
   9187  * compare string1 at index to string2
   9188  * when string2 is empty, the result is false
   9189  *
   9190  * \param
   9191  *   2 strings
   9192  * \return
   9193  *   true string1 at index is equal to string2
   9194  *   false they differ
   9195  */
   9196 bool eqIS(const char *string1, const char *string2, int64_t index) {
   9197 
   9198   // sanity checks
   9199   if (!string1 || !string2) {
   9200     return(false);
   9201   }
   9202 
   9203   int64_t len = (int64_t)strlen(string1);
   9204   if (index >= len && len) {
   9205     // && len: string1 is empty, check below if string2 is also empty
   9206     // when string1 and string2 are empty and index is 0, the result is true
   9207     return(false);
   9208   }
   9209   if (index < -len) {
   9210     return(false);
   9211   }
   9212   if (index < 0) {
   9213     index = len + index;
   9214   }
   9215 
   9216   int64_t len2 = (int64_t)strlen(string2);
   9217   if (!len2 && !len && !index) {
   9218     // string1 and string2 are empty and index is 0
   9219     return(true);
   9220   }
   9221   if (!len2) {
   9222     return(false);
   9223   }
   9224   if (index > (len - len2)) {
   9225     return(false);
   9226   }
   9227 
   9228   return(strncmp(string1 + index, string2, (size_t)len2) == 0);;
   9229 }
   9230 
   9231 bool eqICharS(const char *string1, char c, int64_t index) {
   9232 
   9233   charToS(s,c);
   9234   return(eqIS(string1, s, index));
   9235 }
   9236 
   9237 /**
   9238  * starts With String
   9239  * compare start of string1 with string2
   9240  *
   9241  * \param
   9242  *   2 strings
   9243  * \return
   9244  *   true when string1 starts with string2
   9245  *   false for other cases
   9246  */
   9247 bool startsWithS(const char *string1, const char *string2) {
   9248 
   9249   // sanity checks
   9250   if (!string1 || !string2) {
   9251     return(false);
   9252   }
   9253   return(strncmp(string1, string2, strlen(string2)) == 0);;
   9254 }
   9255 
   9256 bool startsWithCharS(const char *string1, char c) {
   9257 
   9258   if (!string1) {
   9259     return(false);
   9260   }
   9261   return(*string1 == c);;
   9262 }
   9263 
   9264 /**
   9265  * ends With String
   9266  * compare end of string1 with string2
   9267  *
   9268  * \param
   9269  *   2 strings
   9270  * \return
   9271  *   true when string1 ends with string2
   9272  *   false for other cases
   9273  */
   9274 bool endsWithS(const char *string1, const char *string2) {
   9275 
   9276   // sanity checks
   9277   if (!string1 || !string2) {
   9278     return(false);
   9279   }
   9280 
   9281   if (strlen(string1) < strlen(string2)) {
   9282     return(false);
   9283   }
   9284   return(strcmp(string1 + strlen(string1) - strlen(string2), string2) == 0);;
   9285 }
   9286 
   9287 bool endsWithCharS(const char *string1, char c) {
   9288 
   9289   // sanity checks
   9290   if (!string1) {
   9291     return(false);
   9292   }
   9293 
   9294   if (!strlen(string1) && !c) {
   9295     // string1 is empty and c is 0
   9296     return(true);
   9297   }
   9298   if (!strlen(string1)) {
   9299     return(false);
   9300   }
   9301   return(*(string1+strlen(string1)-1) == c);;
   9302 }
   9303 
   9304 /**
   9305  * count String
   9306  * count number of (non-overlapping) occurrences of a substring
   9307  *
   9308  * Example:
   9309  *   assert(countS("aaa aaa", "a") == 6);
   9310  *   assert(countS("aaa aaa", "ab") == 0);
   9311  *   assert(countS("aaa aaa", "aa") == 2);
   9312  *
   9313  * \param
   9314  *   2 strings
   9315  * \return
   9316  *   string count
   9317  *   -1 when there is an error
   9318  */
   9319 ssize_t countS(const char *s, const char *needle) {
   9320 
   9321   // sanity checks
   9322   if (!s || !needle || !needle[0]) {
   9323     return(-1);
   9324   }
   9325 
   9326   ssize_t r  = 0;
   9327   size_t len = strlen(needle);
   9328 
   9329   while (s != NULL) {
   9330     s = strstr(s, needle);
   9331     if (s != NULL) {
   9332       r++;
   9333       s += len;
   9334     }
   9335     else {
   9336       break;
   9337   }
   9338     }
   9339 
   9340   return(r);
   9341 }
   9342 
   9343 ssize_t countCharS(const char *s, char c) {
   9344 
   9345   // sanity checks
   9346   if (!s || !c) {
   9347     return(-1);
   9348   }
   9349 
   9350   ssize_t r  = 0;
   9351 
   9352   while (*s != 0) {
   9353     if (*s == c) {
   9354       r++;
   9355     }
   9356     s++;
   9357   }
   9358 
   9359   return(r);
   9360 }
   9361 
   9362 /**
   9363  * ignore case string Equal
   9364  * compare string1 to string2
   9365  *
   9366  * \param
   9367  *   2 strings
   9368  * \return
   9369  *   true the strings have identical content
   9370  *   false they differ
   9371  */
   9372 bool icEqS(const char *string1, const char *string2) {
   9373 
   9374   // sanity checks
   9375   if (!string1 || !string2) {
   9376     return(false);
   9377   }
   9378   return(strcasecmp(string1,string2) == 0);;
   9379 }
   9380 
   9381 bool icEqCharS(char c, const char *string2) {
   9382 
   9383   // sanity checks
   9384   if (!string2) {
   9385     return(false);
   9386   }
   9387   charToS(s, c);
   9388   return(strcasecmp(s,string2) == 0);;
   9389 }
   9390 
   9391 bool icEqSChar(const char *string1, char c) {
   9392 
   9393   // sanity checks
   9394   if (!string1) {
   9395     return(false);
   9396   }
   9397   charToS(s, c);
   9398   return(strcasecmp(string1,s) == 0);;
   9399 }
   9400 
   9401 /**
   9402  * ignore case string Index Equal
   9403  * compare string1 at index to string2
   9404  * when string2 is empty, the result is false
   9405  *
   9406  * \param
   9407  *   2 strings
   9408  * \return
   9409  *   true string1 at index is equal to string2
   9410  *   false they differ
   9411  */
   9412 bool icEqIS(const char *string1, const char *string2, int64_t index) {
   9413 
   9414   // sanity checks
   9415   if (!string1 || !string2) {
   9416     return(false);
   9417   }
   9418 
   9419   int64_t len = (int64_t)strlen(string1);
   9420   if (index >= len && len) {
   9421     // && len: string1 is empty, check below if string2 is also empty
   9422     // when string1 and string2 are empty and index is 0, the result is true
   9423     return(false);
   9424   }
   9425   if (index < -len) {
   9426     return(false);
   9427   }
   9428   if (index < 0) {
   9429     index = len + index;
   9430   }
   9431 
   9432   int64_t len2 = (int64_t)strlen(string2);
   9433   if (!len2 && !len && !index) {
   9434     // string1 and string2 are empty and index is 0
   9435     return(true);
   9436   }
   9437   if (!len2) {
   9438     return(false);
   9439   }
   9440   if (index > (len - len2)) {
   9441     return(false);
   9442   }
   9443 
   9444   return(strncasecmp(string1 + index, string2, (size_t)len2) == 0);;
   9445 }
   9446 
   9447 bool icEqICharS(const char *string1, char c, int64_t index) {
   9448 
   9449   charToS(s,c);
   9450   return(icEqIS(string1, s, index));
   9451 }
   9452 
   9453 /**
   9454  * ignore case starts With String
   9455  * compare start of string1 with string2
   9456  *
   9457  * \param
   9458  *   2 strings
   9459  * \return
   9460  *   true when string1 starts with string2
   9461  *   false for other cases
   9462  */
   9463 bool icStartsWithS(const char *string1, const char *string2) {
   9464 
   9465   // sanity checks
   9466   if (!string1 || !string2) {
   9467     return(false);
   9468   }
   9469   return(strncasecmp(string1, string2, strlen(string2)) == 0);;
   9470 }
   9471 
   9472 bool icStartsWithCharS(const char *string1, char c) {
   9473 
   9474   if (!string1) {
   9475     return(false);
   9476   }
   9477   return(toupper(*string1) == toupper(c));;
   9478 }
   9479 
   9480 /**
   9481  * ignore case ends With String
   9482  * compare end of string1 with string2
   9483  *
   9484  * \param
   9485  *   2 strings
   9486  * \return
   9487  *   true when string1 ends with string2
   9488  *   false for other cases
   9489  */
   9490 bool icEndsWithS(const char *string1, const char *string2) {
   9491 
   9492   // sanity checks
   9493   if (!string1 || !string2) {
   9494     return(false);
   9495   }
   9496 
   9497   if (strlen(string1) < strlen(string2)) {
   9498     return(false);
   9499   }
   9500   return(strcasecmp(string1 + strlen(string1) - strlen(string2), string2) == 0);;
   9501 }
   9502 
   9503 bool icEndsWithCharS(const char *string1, char c) {
   9504 
   9505   // sanity checks
   9506   if (!string1) {
   9507     return(false);
   9508   }
   9509 
   9510   if (!strlen(string1) && !c) {
   9511     // string1 is empty and c is 0
   9512     return(true);
   9513   }
   9514   if (!strlen(string1)) {
   9515     return(false);
   9516   }
   9517   return(toupper(*(string1+strlen(string1)-1)) == toupper(c));;
   9518 }
   9519 
   9520 /**
   9521  * ignore case count String
   9522  * count number of (non-overlapping) occurrences of a substring
   9523  *
   9524  * Example:
   9525  *   assert(countS("aaa aaa", "a") == 6);
   9526  *   assert(countS("aaa aaa", "ab") == 0);
   9527  *   assert(countS("aaa aaa", "aa") == 2);
   9528  *
   9529  * \param
   9530  *   2 strings
   9531  * \return
   9532  *   string count
   9533  *   -1 when there is an error
   9534  */
   9535 ssize_t icCountS(const char *s, const char *needle) {
   9536 
   9537   // sanity checks
   9538   if (!s || !needle || !needle[0]) {
   9539     return(-1);
   9540   }
   9541 
   9542   ssize_t r  = 0;
   9543   size_t len = strlen(needle);
   9544 
   9545   while (s != NULL) {
   9546     s = strcasestr(s, needle);
   9547     if (s != NULL) {
   9548       r++;
   9549       s += len;
   9550     }
   9551     else {
   9552       break;
   9553   }
   9554     }
   9555 
   9556   return(r);
   9557 }
   9558 
   9559 ssize_t icCountCharS(const char *s, char c) {
   9560 
   9561   // sanity checks
   9562   if (!s || !c) {
   9563     return(-1);
   9564   }
   9565 
   9566   ssize_t r  = 0;
   9567 
   9568   c = (char)tolower(c);
   9569 
   9570   while (*s != 0) {
   9571     if (tolower(*s) == c) {
   9572       r++;
   9573     }
   9574     s++;
   9575   }
   9576 
   9577   return(r);
   9578 }
   9579 
   9580 /**
   9581  * has control char
   9582  *
   9583  * \return
   9584  *   true when there is a terminal control in string
   9585  */
   9586 bool hasCtrlChar(const char *string) {
   9587 
   9588   if (!string) {
   9589     return(false);
   9590   }
   9591 
   9592   range(i, strlen(string)) {
   9593     if (iscntrl(string[i])) {
   9594       return(true);
   9595     }
   9596   }
   9597 
   9598   return(false);
   9599 }
   9600 
   9601 /**
   9602  * remove terminal control char from string
   9603  *
   9604  * \param
   9605  * string
   9606  * \return
   9607  * new string without the control chars
   9608  * NULL when string is NULL
   9609  */
   9610 char *stripCtrlS(const char *string) {
   9611   char *r = NULL;
   9612 
   9613   if (!string) {
   9614     return(NULL);
   9615   }
   9616 
   9617   size_t len = strlen(string)+1;
   9618   r          = MALLOC(len);
   9619   if (!r) {
   9620     return(NULL);
   9621   }
   9622 
   9623   size_t j   = 0;
   9624   range(i, len) {
   9625     if (!iscntrl(string[i])) {
   9626       r[j++] = string[i];
   9627     }
   9628   }
   9629   r[j] = 0;
   9630   return(r);
   9631 }
   9632 
   9633 /**
   9634  * remove terminal control char from string
   9635  *
   9636  * \param
   9637  * string pointer to a string
   9638  * \return
   9639  * string without the control chars
   9640  * NULL when string is NULL
   9641  */
   9642 char *iStripCtrlS(char **string) {
   9643 
   9644   if (!string || !*string) {
   9645     return(NULL);
   9646   }
   9647 
   9648   size_t i = 0, j = 0;
   9649 
   9650   while ((*string)[i]) {
   9651     if (!iscntrl((*string)[i])) {
   9652       (*string)[j++] = (*string)[i];
   9653     }
   9654     i++;
   9655   }
   9656 
   9657   (*string)[j] = 0;;
   9658   return(*string);
   9659 }
   9660 
   9661 /**
   9662  * remove terminal control char from string
   9663  *
   9664  * \param
   9665  * string
   9666  * \return
   9667  * string without the control chars
   9668  * NULL when string is NULL
   9669  */
   9670 char *bStripCtrlS(char *string) {
   9671 
   9672   if (!string) {
   9673     return(NULL);
   9674   }
   9675 
   9676   size_t i = 0, j = 0;
   9677 
   9678   while (string[i]) {
   9679     if (!iscntrl(string[i])) {
   9680       string[j++] = string[i];
   9681     }
   9682     i++;
   9683   }
   9684 
   9685   string[j] = 0;;
   9686   return(string);
   9687 }
   9688 
   9689 /**
   9690  * remove ansi colors from string
   9691  *
   9692  * \param
   9693  * string
   9694  * \return
   9695  * new string without colors
   9696  * NULL when string is NULL
   9697  */
   9698 char *stripColorsS(const char *string) {
   9699   char *r = NULL;
   9700 
   9701   if (!string) {
   9702     return(NULL);
   9703   }
   9704 
   9705   size_t len = strlen(string);
   9706   r          = MALLOC(len+1);
   9707   if (!r) {
   9708     return(NULL);
   9709   }
   9710 
   9711   size_t j       = 0;
   9712   uint16_t state = 0;
   9713   range(i, len) {
   9714     char ch = string[i];
   9715     // suppress \r only when followed by \n
   9716     if (state == 1) {
   9717       if (ch != 0x0d) {
   9718         state = 0;
   9719       }
   9720       if (ch != 0x0a) {
   9721         r[j++] = 0x0d;
   9722     }
   9723       }
   9724     if (state == 0 && ch == 0x0d) {
   9725       state = 1;
   9726     }
   9727     // strip colors
   9728     if (state == 5) {
   9729       state = 0;
   9730       continue;
   9731     }
   9732     if (state == 4) {
   9733       if (ch == 7) {
   9734         state = 0;
   9735         continue;
   9736       }
   9737       elif (ch == 0x1b) {
   9738         state = 5;
   9739     }
   9740       }
   9741     if (state == 3) {
   9742       if (ch != ';' && (ch < '0' || ch > '9') && ch != '?') {
   9743         state = 0;
   9744         continue;
   9745     }
   9746       }
   9747     if (state == 2) {
   9748       if (ch == '[') {
   9749         state = 3;
   9750       }
   9751       elif (ch == ']' && string[i+1] <= '9') {
   9752         state = 4;
   9753       }
   9754       elif (ch == '%') {
   9755         state = 0;
   9756         continue;
   9757     }
   9758       }
   9759     if (state == 0 && ch == 0x1b) {
   9760       state = 2;
   9761     }
   9762     if (state == 0) {
   9763       r[j++] = ch;
   9764     }
   9765   }
   9766   r[j] = 0;
   9767   return(r);
   9768 }
   9769 
   9770 /**
   9771  * remove ansi colors from string
   9772  *
   9773  * \param
   9774  * string pointer to a string
   9775  * \return
   9776  * string without the control chars
   9777  * NULL when string is NULL
   9778  */
   9779 char *iStripColorsS(char **string) {
   9780 
   9781   if (!string || !*string) {
   9782     return(NULL);
   9783   }
   9784 
   9785   size_t i = 0, j = 0;
   9786   uint16_t state = 0;
   9787 
   9788   while ((*string)[i]) {
   9789     char ch = (*string)[i];
   9790     // suppress \r only when followed by \n
   9791     if (state == 1) {
   9792       if (ch != 0x0d) {
   9793         state = 0;
   9794       }
   9795       if (ch != 0x0a) {
   9796         (*string)[j++] = 0x0d;
   9797     }
   9798       }
   9799     if (state == 0 && ch == 0x0d) {
   9800       state = 1;
   9801     }
   9802     // strip colors
   9803     if (state == 5) {
   9804       state = 0;
   9805       goto cont;
   9806     }
   9807     if (state == 4) {
   9808       if (ch == 7) {
   9809         state = 0;
   9810         goto cont;
   9811       }
   9812       elif (ch == 0x1b) {
   9813         state = 5;
   9814     }
   9815       }
   9816     if (state == 3) {
   9817       if (ch != ';' && (ch < '0' || ch > '9') && ch != '?') {
   9818         state = 0;
   9819         goto cont;
   9820     }
   9821       }
   9822     if (state == 2) {
   9823       if (ch == '[') {
   9824         state = 3;
   9825       }
   9826       elif (ch == ']' && (*string)[i+1] <= '9') {
   9827         state = 4;
   9828       }
   9829       elif (ch == '%') {
   9830         state = 0;
   9831         goto cont;
   9832     }
   9833       }
   9834     if (state == 0 && ch == 0x1b) {
   9835       state = 2;
   9836     }
   9837     if (state == 0) {
   9838       (*string)[j++] = ch;
   9839     }
   9840     cont:
   9841     i++;
   9842   }
   9843 
   9844   (*string)[j] = 0;
   9845   return(*string);
   9846 }
   9847 
   9848 /**
   9849  * remove terminal control char from string
   9850  *
   9851  * \param
   9852  * string
   9853  * \return
   9854  * string without the control chars
   9855  * NULL when string is NULL
   9856  */
   9857 char *bStripColorsS(char *string) {
   9858 
   9859   if (!string) {
   9860     return(NULL);
   9861   }
   9862 
   9863   size_t i = 0, j = 0;
   9864   uint16_t state = 0;
   9865 
   9866   while (string[i]) {
   9867     char ch = string[i];
   9868     // suppress \r only when followed by \n
   9869     if (state == 1) {
   9870       if (ch != 0x0d) {
   9871         state = 0;
   9872       }
   9873       if (ch != 0x0a) {
   9874         string[j++] = 0x0d;
   9875     }
   9876       }
   9877     if (state == 0 && ch == 0x0d) {
   9878       state = 1;
   9879     }
   9880     // strip colors
   9881     if (state == 5) {
   9882       state = 0;
   9883       goto cont;
   9884     }
   9885     if (state == 4) {
   9886       if (ch == 7) {
   9887         state = 0;
   9888         goto cont;
   9889       }
   9890       elif (ch == 0x1b) {
   9891         state = 5;
   9892     }
   9893       }
   9894     if (state == 3) {
   9895       if (ch != ';' && (ch < '0' || ch > '9') && ch != '?') {
   9896         state = 0;
   9897         goto cont;
   9898     }
   9899       }
   9900     if (state == 2) {
   9901       if (ch == '[') {
   9902         state = 3;
   9903       }
   9904       elif (ch == ']' && string[i+1] <= '9') {
   9905         state = 4;
   9906       }
   9907       elif (ch == '%') {
   9908         state = 0;
   9909         goto cont;
   9910     }
   9911       }
   9912     if (state == 0 && ch == 0x1b) {
   9913       state = 2;
   9914     }
   9915     if (state == 0) {
   9916       string[j++] = ch;
   9917     }
   9918     cont:
   9919     i++;
   9920   }
   9921 
   9922   string[j] = 0;
   9923   return(string);
   9924 }
   9925 
   9926 
   9927 /**
   9928  * add backslash '\' before delim('\'' or '"') and backslash
   9929  * the backslashes in the result avoid splitting the string
   9930  * when it is in a source file or a json string
   9931  * \param
   9932  *   s string to escape
   9933  * \param
   9934  *   delim string delimiter ' or "
   9935  * \return
   9936  *   new string with escape backslash (free this buffer)
   9937  *   null when s is null
   9938  */
   9939 char* quoteS(const char *s, char delim) {
   9940   char *r = NULL;
   9941 
   9942   // steps
   9943   // sanity check
   9944   // compute result string length to allocate the buffer once
   9945   // copy s and add the bashslashes
   9946   // terminate the result string
   9947 
   9948   // sanity check
   9949   if (!s) {
   9950     return(null);
   9951   }
   9952   char delims[3]  = {delim, '\\', 0/*terminate accept string for strpbrk*/};
   9953 
   9954   // compute result string length to allocate the buffer once
   9955   size_t count    = 0;
   9956   const char *tmp = s;
   9957   tmp             = strpbrk(tmp, delims);
   9958   while (tmp) {
   9959     inc count;
   9960     inc tmp;
   9961     tmp = strpbrk(tmp, delims);
   9962   }
   9963 
   9964   if (!count) {
   9965     return(strdup(s));
   9966   }
   9967 
   9968   r = malloc(strlen(s) + 1 + count);
   9969   if (not r) {
   9970     return(null);
   9971   }
   9972 
   9973   // copy s and add the bashslashes
   9974   size_t i = 0;
   9975   while (*s) {
   9976     if (*s == delims[0] or *s == delims[1]) {
   9977       r[i++] = '\\';
   9978     }
   9979     r[i++] = *s;
   9980     inc s;
   9981   }
   9982 
   9983   // terminate the result string
   9984   r[i] = 0;
   9985   return(r);
   9986 }
   9987 
   9988 
   9989 /**
   9990  * add backslash '\' before delim('\'' or '"') and backslash
   9991  * the backslashes in the result avoid splitting the string
   9992  * when it is in a source file or a json string
   9993  * \param
   9994  *   dest destination buffer, it should be big enough
   9995  * \param
   9996  *   s string to escape
   9997  * \param
   9998  *   delim string delimiter ' or "
   9999  * \return
  10000  *   new string with escape backslash (free this buffer)
  10001  *   null when s is null
  10002  */
  10003 char* bQuoteS(char *dest, const char *s, char delim) {
  10004 
  10005   // steps
  10006   // sanity check
  10007   // copy s and add the bashslashes
  10008   // terminate the result string
  10009 
  10010   // sanity check
  10011   if (!s or !dest) {
  10012     return(null);
  10013   }
  10014   char delims[3]  = {delim, '\\', 0/*terminate accept string for strpbrk*/};
  10015 
  10016   // copy s and add the bashslashes
  10017   size_t i = 0;
  10018   while (*s) {
  10019     if (*s == delims[0] or *s == delims[1]) {
  10020       dest[i++] = '\\';
  10021     }
  10022     dest[i++] = *s;
  10023     inc s;
  10024   }
  10025 
  10026   // terminate the result string
  10027   dest[i] = 0;
  10028   return(dest);
  10029 }
  10030 
  10031 
  10032 /**
  10033  * add backslash '\' before delim('\'' or '"') and backslash
  10034  * the backslashes in the result avoid splitting the string
  10035  * when it is in a source file or a json string
  10036  * \param
  10037  *   dest destination buffer
  10038  * \param
  10039  *   destSize destination buffer size
  10040  * \param
  10041  *   s string to escape
  10042  * \param
  10043  *   delim string delimiter ' or "
  10044  * \return
  10045  *   new string with escape backslash (free this buffer)
  10046  *   null when s is null
  10047  */
  10048 char* bLQuoteS(char *dest, size_t destSize, const char *s, char delim) {
  10049 
  10050   // steps
  10051   // sanity check
  10052   // copy s and add the bashslashes
  10053   // terminate the result string
  10054 
  10055   // sanity check
  10056   if (!s or !dest or !destSize) {
  10057     return(null);
  10058   }
  10059   char delims[3]  = {delim, '\\', 0/*terminate accept string for strpbrk*/};
  10060 
  10061   // copy s and add the bashslashes
  10062   size_t i = 0;
  10063   while (*s) {
  10064     bool isBackslash = no;
  10065     if (*s == delims[0] or *s == delims[1]) {
  10066       dest[i++] = '\\';
  10067       if (i >= destSize) {
  10068         // end of dest buffer is reached
  10069         dec i;
  10070         break;
  10071       }
  10072       isBackslash = yes;
  10073     }
  10074     dest[i++] = *s;
  10075     if (i >= destSize) {
  10076       // end of dest buffer is reached
  10077       dec i;
  10078       // remove backslash
  10079       if (isBackslash) {
  10080         dec i;
  10081       }
  10082       break;
  10083     }
  10084     inc s;
  10085   }
  10086 
  10087   // terminate the result string
  10088   dest[i] = 0;
  10089   return(dest);
  10090 }
  10091 
  10092 
  10093 /**
  10094  * return the length of the escaped string (without the terminating \0)
  10095  */
  10096 size_t quoteLenS(const char *s, char delim) {
  10097   size_t r = 0;;
  10098 
  10099   if (!s) {
  10100     return(0);
  10101   }
  10102   char delims[3]  = {delim, '\\', 0/*terminate accept string for strpbrk*/};
  10103 
  10104   // compute result string length to allocate the buffer once
  10105   const char *tmp = s;
  10106   tmp             = strpbrk(tmp, delims);
  10107   while (tmp) {
  10108     inc r;
  10109     inc tmp;
  10110     tmp = strpbrk(tmp, delims);
  10111   }
  10112 
  10113   r += strlen(s);
  10114   return(r);
  10115 }
  10116 
  10117 
  10118 /**
  10119  * escape string according the json specification (RFC 8259)
  10120  * if there is \uNNNN in the string, the backslash is escaped and it will
  10121  * be parsed as the string '\uNNNN' be the json parsers
  10122  * the unicode characters should be converted to UTF8 codepoints instead of
  10123  * using \uNNNN
  10124  * the result can be included in a json string and the parsing
  10125  * will be correct
  10126  * \param
  10127  *   s string to escape
  10128  * \param
  10129  *   delim string delimiter ' or "
  10130  * \return
  10131  *   new string with escape backslash (free this buffer)
  10132  *   null when s is null
  10133  */
  10134 char* escapeS(const char *s, char delim) {
  10135   char *r = NULL;
  10136 
  10137   // steps
  10138   // sanity check
  10139   // compute result string length to allocate the buffer once
  10140   // copy s and add the bashslashes
  10141   // terminate the result string
  10142 
  10143   // sanity check
  10144   if (!s) {
  10145     return(null);
  10146   }
  10147   char delims[]   = {delim, '\\', '\b', '\f', '\n', '\r', '\t', 0/*terminate accept string for strpbrk*/};
  10148 
  10149   // compute result string length to allocate the buffer once
  10150   size_t count    = 0;
  10151   const char *tmp = s;
  10152   tmp             = strpbrk(tmp, delims);
  10153   while (tmp) {
  10154     inc count;
  10155     inc tmp;
  10156     tmp = strpbrk(tmp, delims);
  10157   }
  10158 
  10159   if (!count) {
  10160     return(strdup(s));
  10161   }
  10162   r = malloc(strlen(s) + 1 + count);
  10163   if (not r) {
  10164     return(null);
  10165   }
  10166 
  10167   // copy s and add the bashslashes
  10168   size_t i = 0;
  10169   while (*s) {
  10170     arange(j, delims) {
  10171       if (*s  == delims[j]) {
  10172         r[i++] = '\\';
  10173         break;
  10174       }
  10175     }
  10176     switch (*s) {
  10177       case '\b':
  10178         r[i++] = 'b';
  10179         break;
  10180       case '\f':
  10181         r[i++] = 'f';
  10182         break;
  10183       case '\n':
  10184         r[i++] = 'n';
  10185         break;
  10186       case '\r':
  10187         r[i++] = 'r';
  10188         break;
  10189       case '\t':
  10190         r[i++] = 't';
  10191         break;
  10192       default:
  10193         r[i++] = *s;
  10194         break;
  10195     }
  10196     inc s;
  10197   }
  10198 
  10199   // terminate the result string
  10200   r[i] = 0;
  10201   return(r);
  10202 }
  10203 
  10204 
  10205 /**
  10206  * escape string according the json specification (RFC 8259)
  10207  * if there is \uNNNN in the string, the backslash is escaped and it will
  10208  * be parsed as the string '\uNNNN' be the json parsers
  10209  * the unicode characters should be converted to UTF8 codepoints instead of
  10210  * using \uNNNN
  10211  * the result can be included in a json string and the parsing
  10212  * will be correct
  10213  * \param
  10214  *   dest destination buffer
  10215  * \param
  10216  *   s string to escape
  10217  * \param
  10218  *   delim string delimiter ' or "
  10219  * \return
  10220  *   new string with escape backslash (free this buffer)
  10221  *   null when s is null
  10222  */
  10223 char* bEscapeS(char *dest, const char *s, char delim) {
  10224 
  10225   // steps
  10226   // sanity check
  10227   // copy s and add the bashslashes
  10228   // terminate the result string
  10229 
  10230   // sanity check
  10231   if (!s or !dest) {
  10232     return(null);
  10233   }
  10234   char delims[]   = {delim, '\\', '\b', '\f', '\n', '\r', '\t', 0/*terminate accept string for strpbrk*/};
  10235 
  10236   // copy s and add the bashslashes
  10237   size_t i = 0;
  10238   while (*s) {
  10239     arange(j, delims) {
  10240       if (*s == delims[j]) {
  10241         dest[i++] = '\\';
  10242         break;
  10243       }
  10244     }
  10245     switch(*s) {
  10246       case '\b':
  10247         dest[i++] = 'b';
  10248         break;
  10249       case '\f':
  10250         dest[i++] = 'f';
  10251         break;
  10252       case '\n':
  10253         dest[i++] = 'n';
  10254         break;
  10255       case '\r':
  10256         dest[i++] = 'r';
  10257         break;
  10258       case '\t':
  10259         dest[i++] = 't';
  10260         break;
  10261       default:
  10262         dest[i++] = *s;
  10263         break;
  10264     }
  10265     inc s;
  10266   }
  10267 
  10268   // terminate the result string
  10269   dest[i] = 0;
  10270   return(dest);
  10271 }
  10272 
  10273 
  10274 /**
  10275  * escape string according the json specification (RFC 8259)
  10276  * if there is \uNNNN in the string, the backslash is escaped and it will
  10277  * be parsed as the string '\uNNNN' be the json parsers
  10278  * the unicode characters should be converted to UTF8 codepoints instead of
  10279  * using \uNNNN
  10280  * the result can be included in a json string and the parsing
  10281  * will be correct
  10282  * \param
  10283  *   dest destination buffer
  10284  * \param
  10285  *   destSize destination buffer size
  10286  * \param
  10287  *   s string to escape
  10288  * \param
  10289  *   delim string delimiter ' or "
  10290  * \return
  10291  *   new string with escape backslash (free this buffer)
  10292  *   null when s is null
  10293  */
  10294 char* bLEscapeS(char *dest, size_t destSize, const char *s, char delim) {
  10295 
  10296   // steps
  10297   // sanity check
  10298   // copy s and add the bashslashes
  10299   // terminate the result string
  10300 
  10301   // sanity check
  10302   if (!s or !dest or !destSize) {
  10303     return(null);
  10304   }
  10305   char delims[]   = {delim, '\\', '\b', '\f', '\n', '\r', '\t', 0/*terminate accept string for strpbrk*/};
  10306 
  10307   // copy s and add the bashslashes
  10308   size_t i = 0;
  10309   while (*s) {
  10310     bool isBackslash = no;
  10311     arange(j, delims) {
  10312       if (*s == delims[j]) {
  10313         dest[i++] = '\\';
  10314         if (i >= destSize) {
  10315           // end of dest buffer is reached
  10316           dec i;
  10317           goto end;
  10318         }
  10319         isBackslash = yes;
  10320         break;
  10321       }
  10322     }
  10323     switch(*s) {
  10324       case '\b':
  10325         dest[i++] = 'b';
  10326         break;
  10327       case '\f':
  10328         dest[i++] = 'f';
  10329         break;
  10330       case '\n':
  10331         dest[i++] = 'n';
  10332         break;
  10333       case '\r':
  10334         dest[i++] = 'r';
  10335         break;
  10336       case '\t':
  10337         dest[i++] = 't';
  10338         break;
  10339       default:
  10340         dest[i++] = *s;
  10341         break;
  10342     }
  10343     if (i >= destSize) {
  10344       // end of dest buffer is reached
  10345       dec i;
  10346       // remove backslash
  10347       if (isBackslash) {
  10348         dec i;
  10349       }
  10350       break;
  10351     }
  10352     inc s;
  10353   }
  10354 
  10355   // terminate the result string
  10356   end:
  10357   dest[i] = 0;
  10358   return(dest);
  10359 }
  10360 
  10361 
  10362 /**
  10363  * return the length of the escaped string (without the terminating \0)
  10364  */
  10365 size_t escapeLenS(const char *s, char delim) {
  10366   size_t r = 0;;
  10367 
  10368   if (!s) {
  10369     return(0);
  10370   }
  10371   char delims[]   = {delim, '\\', '\b', '\f', '\n', '\r', '\t', 0/*terminate accept string for strpbrk*/};
  10372 
  10373   // compute result string length to allocate the buffer once
  10374   const char *tmp = s;
  10375   tmp             = strpbrk(tmp, delims);
  10376   while (tmp) {
  10377     inc r;
  10378     inc tmp;
  10379     tmp = strpbrk(tmp, delims);
  10380   }
  10381 
  10382   r += strlen(s);
  10383   return(r);
  10384 }
  10385 
  10386 
  10387 /**
  10388  * convert number between 0 and 15 to hexadecimal character '0' to 'F'
  10389  */
  10390 char nibbleToHex(u8 n) {
  10391 
  10392   if (n > 15) {
  10393     return 'X';
  10394   }
  10395   elif (n < 10) {
  10396     return((char)(n + '0'));
  10397   }
  10398   else {
  10399     return((char)((n-10) + 'A'));
  10400 }
  10401   }
  10402 
  10403 
  10404 /**
  10405  * escape string to become a valid C source string
  10406  * control characters, backslash and double quotes are escaped.
  10407  * control characters without an escaped representation (\a) are represented as
  10408  * hexidecimal literal '\xNN'
  10409  * the result can be included in C source code and the parsing will be
  10410  * correct
  10411  * \param
  10412  *   S string to escape
  10413  * \return
  10414  *   new escaped string (free this buffer)
  10415  *   null when S is null
  10416  */
  10417 char* cEscapeS(const char *S) {
  10418   char *r = NULL;
  10419 
  10420   // u8 because nibbles are needed for control characters without an escaped representation
  10421   const u8 *s     = (const u8*)S;
  10422 
  10423   // steps
  10424   // sanity check
  10425   // compute result string length to allocate the buffer once
  10426   // search control characters without an escaped representation
  10427   // copy s and add the bashslashes
  10428   // terminate the result string
  10429 
  10430   // sanity check
  10431   if (!s) {
  10432     return(null);
  10433   }
  10434   char delims[]   = {'"', '\\', '\a', '\b', '\t', '\n', '\v', '\f', '\r', 0/*terminate accept string for strpbrk*/};
  10435 
  10436   // compute result string length to allocate the buffer once
  10437   size_t count    = 0;
  10438   const char *tmp = S;
  10439   tmp             = strpbrk(tmp, delims);
  10440   while (tmp) {
  10441     inc count;
  10442     inc tmp;
  10443     tmp = strpbrk(tmp, delims);
  10444   }
  10445 
  10446   // search control characters without an escaped representation
  10447   tmp = S;
  10448   while (*tmp) {
  10449     if (*tmp > 0x1F) {
  10450       goto cont;
  10451     }
  10452     bool found = no;
  10453     arange(j, delims) {
  10454       if (*tmp == delims[j]) {
  10455         found = yes;
  10456         break;
  10457       }
  10458     }
  10459     if (not found) {
  10460       // allocate space for ""\xNN""
  10461       // it is 8 bytes but one byte is counted with strlen(s)
  10462       count += 7;
  10463     }
  10464     cont:
  10465     inc tmp;
  10466   }
  10467 
  10468   if (!count) {
  10469     return(strdup(S));
  10470   }
  10471   r = malloc(strlen(S) + 1 + count);
  10472   if (not r) {
  10473     return(null);
  10474   }
  10475 
  10476   // copy s and add the bashslashes
  10477   size_t i = 0;
  10478   while (*s) {
  10479     arange(j, delims) {
  10480       if (*s == delims[j]) {
  10481         r[i++] = '\\';
  10482         break;
  10483       }
  10484     }
  10485     switch(*s) {
  10486       case '\a':
  10487         r[i++] = 'a';
  10488         break;
  10489       case '\b':
  10490         r[i++] = 'b';
  10491         break;
  10492       case '\t':
  10493         r[i++] = 't';
  10494         break;
  10495       case '\n':
  10496         r[i++] = 'n';
  10497         break;
  10498       case '\v':
  10499         r[i++] = 'v';
  10500         break;
  10501       case '\f':
  10502         r[i++] = 'f';
  10503         break;
  10504       case '\r':
  10505         r[i++] = 'r';
  10506         break;
  10507       default:
  10508         if (*s > 0x1F) {
  10509           r[i++] = (char)*s;
  10510         }
  10511         else {
  10512           // byte 0x3 becomes ""\x03""
  10513           r[i++] = '"';
  10514           r[i++] = '"';
  10515           r[i++] = '\\';
  10516           r[i++] = 'x';
  10517           r[i++] = nibbleToHex(*s >> 4);
  10518           r[i++] = nibbleToHex(*s & 0xF);
  10519           r[i++] = '"';
  10520           r[i++] = '"';
  10521         }
  10522         break;
  10523     }
  10524     inc s;
  10525   }
  10526 
  10527   // terminate the result string
  10528   r[i] = 0;
  10529   return(r);
  10530 }
  10531 
  10532 
  10533 /**
  10534  * escape string to become a valid C source string
  10535  * control characters, backslash and double quotes are escaped.
  10536  * control characters without an escaped representation (\a) are represented as
  10537  * hexidecimal literal '\xNN'
  10538  * the result can be included in C source code and the parsing will be
  10539  * correct
  10540  * \param
  10541  *   dest destination buffer
  10542  * \param
  10543  *   S string to escape
  10544  * \return
  10545  *   new escaped string (free this buffer)
  10546  *   null when S is null
  10547  */
  10548 char* bCEscapeS(char *dest, const char *S) {
  10549 
  10550   // u8 because nibbles are needed for control characters without an escaped representation
  10551   const u8 *s     = (const u8*)S;
  10552 
  10553   // steps
  10554   // sanity check
  10555   // copy s and add the bashslashes
  10556   // terminate the result string
  10557 
  10558   // sanity check
  10559   if (!s or !dest) {
  10560     return(null);
  10561   }
  10562   char delims[]   = {'"', '\\', '\a', '\b', '\t', '\n', '\v', '\f', '\r', 0/*terminate accept string for strpbrk*/};
  10563 
  10564   // copy s and add the bashslashes
  10565   size_t i = 0;
  10566   while (*s) {
  10567     arange(j, delims) {
  10568       if (*s == delims[j]) {
  10569         dest[i++] = '\\';
  10570         break;
  10571       }
  10572     }
  10573     switch(*s) {
  10574       case '\a':
  10575         dest[i++] = 'a';
  10576         break;
  10577       case '\b':
  10578         dest[i++] = 'b';
  10579         break;
  10580       case '\t':
  10581         dest[i++] = 't';
  10582         break;
  10583       case '\n':
  10584         dest[i++] = 'n';
  10585         break;
  10586       case '\v':
  10587         dest[i++] = 'v';
  10588         break;
  10589       case '\f':
  10590         dest[i++] = 'f';
  10591         break;
  10592       case '\r':
  10593         dest[i++] = 'r';
  10594         break;
  10595       default:
  10596         if (*s > 0x1F) {
  10597           dest[i++] = (char)*s;
  10598         }
  10599         else {
  10600           // byte 0x3 becomes ""\x03""
  10601           dest[i++] = '"';
  10602           dest[i++] = '"';
  10603           dest[i++] = '\\';
  10604           dest[i++] = 'x';
  10605           dest[i++] = nibbleToHex(*s >> 4);
  10606           dest[i++] = nibbleToHex(*s & 0xF);
  10607           dest[i++] = '"';
  10608           dest[i++] = '"';
  10609         }
  10610         break;
  10611     }
  10612     inc s;
  10613   }
  10614 
  10615   // terminate the result string
  10616   dest[i] = 0;
  10617   return(dest);
  10618 }
  10619 
  10620 
  10621 /**
  10622  * escape string to become a valid C source string
  10623  * control characters, backslash and double quotes are escaped.
  10624  * control characters without an escaped representation (\a) are represented as
  10625  * hexidecimal literal '\xNN'
  10626  * the result can be included in C source code and the parsing will be
  10627  * correct
  10628  * \param
  10629  *   dest destination buffer
  10630  * \param
  10631  *   destSize destination buffer size
  10632  * \param
  10633  *   S string to escape
  10634  * \return
  10635  *   new escaped string (free this buffer)
  10636  *   null when S is null
  10637  */
  10638 char* bLCEscapeS(char *dest, size_t destSize, const char *S) {
  10639 
  10640   // u8 because nibbles are needed for control characters without an escaped representation
  10641   const u8 *s     = (const u8*)S;
  10642 
  10643   // steps
  10644   // sanity check
  10645   // copy s and add the bashslashes
  10646   // terminate the result string
  10647 
  10648   // sanity check
  10649   if (!s or !dest or !destSize) {
  10650     return(null);
  10651   }
  10652   char delims[]   = {'"', '\\', '\a', '\b', '\t', '\n', '\v', '\f', '\r', 0/*terminate accept string for strpbrk*/};
  10653 
  10654   // copy s and add the bashslashes
  10655   size_t i = 0;
  10656   while (*s) {
  10657     arange(j, delims) {
  10658       if (*s == delims[j]) {
  10659         dest[i++] = '\\';
  10660         if (i >= destSize) {
  10661           // end of dest buffer is reached
  10662           dec i;
  10663           goto end;
  10664         }
  10665         break;
  10666       }
  10667     }
  10668     switch(*s) {
  10669       case '\a':
  10670         dest[i++] = 'a';
  10671         if (i >= destSize) {
  10672           // end of dest buffer is reached
  10673           dec i;
  10674           // remove backslash
  10675           dest[i-1] = 0;
  10676           goto end;
  10677         }
  10678         break;
  10679       case '\b':
  10680         dest[i++] = 'b';
  10681         if (i >= destSize) {
  10682           // end of dest buffer is reached
  10683           dec i;
  10684           // remove backslash
  10685           dest[i-1] = 0;
  10686           goto end;
  10687         }
  10688         break;
  10689       case '\t':
  10690         dest[i++] = 't';
  10691         if (i >= destSize) {
  10692           // end of dest buffer is reached
  10693           dec i;
  10694           // remove backslash
  10695           dest[i-1] = 0;
  10696           goto end;
  10697         }
  10698         break;
  10699       case '\n':
  10700         dest[i++] = 'n';
  10701         if (i >= destSize) {
  10702           // end of dest buffer is reached
  10703           dec i;
  10704           // remove backslash
  10705           dest[i-1] = 0;
  10706           goto end;
  10707         }
  10708         break;
  10709       case '\v':
  10710         dest[i++] = 'v';
  10711         if (i >= destSize) {
  10712           // end of dest buffer is reached
  10713           dec i;
  10714           // remove backslash
  10715           dest[i-1] = 0;
  10716           goto end;
  10717         }
  10718         break;
  10719       case '\f':
  10720         dest[i++] = 'f';
  10721         if (i >= destSize) {
  10722           // end of dest buffer is reached
  10723           dec i;
  10724           // remove backslash
  10725           dest[i-1] = 0;
  10726           goto end;
  10727         }
  10728         break;
  10729       case '\r':
  10730         dest[i++] = 'r';
  10731         if (i >= destSize) {
  10732           // end of dest buffer is reached
  10733           dec i;
  10734           // remove backslash
  10735           dest[i-1] = 0;
  10736           goto end;
  10737         }
  10738         break;
  10739       default:
  10740         if (*s > 0x1F) {
  10741           dest[i++] = (char)*s;
  10742           if (i >= destSize) {
  10743             // end of dest buffer is reached
  10744             dec i;
  10745             if (*s == '"' || *s == '\\') {
  10746               // remove backslash
  10747               dest[i-1] = 0;
  10748             }
  10749             goto end;
  10750         }
  10751           }
  10752         else {
  10753           // check if there is enough space
  10754           if (i+8 >= destSize) {
  10755             goto end;
  10756           }
  10757           // byte 0x3 becomes ""\x03""
  10758           dest[i++] = '"';
  10759           dest[i++] = '"';
  10760           dest[i++] = '\\';
  10761           dest[i++] = 'x';
  10762           dest[i++] = nibbleToHex(*s >> 4);
  10763           dest[i++] = nibbleToHex(*s & 0xF);
  10764           dest[i++] = '"';
  10765           dest[i++] = '"';
  10766         }
  10767         break;
  10768     }
  10769     inc s;
  10770   }
  10771 
  10772   // terminate the result string
  10773   end:
  10774   dest[i] = 0;
  10775   return(dest);
  10776 }
  10777 
  10778 
  10779 /**
  10780  * return the length of the escaped string (without the terminating \0)
  10781  */
  10782 size_t cEscapeLenS(const char *s) {
  10783   size_t r = 0;;
  10784 
  10785   if (!s) {
  10786     return(0);
  10787   }
  10788   char delims[]   = {'"', '\\', '\a', '\b', '\t', '\n', '\v', '\f', '\r', 0/*terminate accept string for strpbrk*/};
  10789 
  10790   // compute result string length to allocate the buffer once
  10791   const char *tmp = s;
  10792   tmp             = strpbrk(tmp, delims);
  10793   while (tmp) {
  10794     inc r;
  10795     inc tmp;
  10796     tmp = strpbrk(tmp, delims);
  10797   }
  10798 
  10799   // search control characters without an escaped representation
  10800   tmp = s;
  10801   while (*tmp) {
  10802     if (*tmp > 0x1F) {
  10803       goto cont;
  10804     }
  10805     bool found = no;
  10806     arange(j, delims) {
  10807       if (*tmp == delims[j]) {
  10808         found = yes;
  10809         break;
  10810       }
  10811     }
  10812     if (not found) {
  10813       // allocate space for ""\xNN""
  10814       // it is 8 bytes but one byte is counted with strlen(s)
  10815       r += 7;
  10816     }
  10817     cont:
  10818     inc tmp;
  10819   }
  10820 
  10821   r += strlen(s);
  10822   return(r);
  10823 }
  10824 
  10825 
  10826 /**
  10827  * is Number (integer or float) String
  10828  *
  10829  * 1, -12
  10830  * 1e+4, -1.44E-1
  10831  *
  10832  * \param
  10833  *   string
  10834  * \return
  10835  *   true when string is a number
  10836  *   false when string is not a number or string is empty or NULL
  10837  */
  10838 bool isNumber(const char *string) {
  10839 
  10840   // sanity checks
  10841   if (!string || *string == 0) {
  10842     return(false);
  10843   }
  10844 
  10845   // . not allowed in first position
  10846   // first position can be digit, '.' or '-' but not "-" and not "."
  10847   if (!isdigit(*string) && (*string != '-') && (*string != '.')) {
  10848     return(false);
  10849   }
  10850 
  10851   // save pointer to first char to verify if there is a leader . and an exponent
  10852   const char *firstChar = string;
  10853   string++;
  10854 
  10855   bool r        = false;
  10856   int dots      = 0;
  10857   int exponents = 0;
  10858   if (*(string-1) == '.') {
  10859     // count first '.'
  10860     dots++;
  10861   }
  10862   while ((isdigit(*string) || (*string == '.') || (*string == 'e') || (*string == 'E') || (((*string == '-') || (*string == '+')) && ((*(string-1) == 'E') || (*(string-1) == 'e')))) && *string != 0) {
  10863     if (*string == '.') {
  10864       dots++;
  10865       if (*firstChar == '-') {
  10866         // -.234 allowed
  10867         firstChar = string;
  10868       }
  10869       if ((dots > 1) || (exponents > 0)) {
  10870         // only one '.' allowed but not after exponent
  10871         break;
  10872     }
  10873       }
  10874     if ((*string == 'e') || (*string == 'E')) {
  10875       exponents++;
  10876       if ((exponents > 1) || (*firstChar == '.')) {
  10877         // only one 'e' or 'E' allowed
  10878         break;
  10879     }
  10880       }
  10881     string++;
  10882   }
  10883 
  10884   // strings ending with '.', '-', 'e' and 'E' are not numbers
  10885   if ((*string == 0) && (*(string-1) != '.') && (*(string-1) != '-') && (*(string-1) != 'e') && (*(string-1) != 'E')) {
  10886     r = true;
  10887   }
  10888   return(r);
  10889 }
  10890 
  10891 /**
  10892  * is Integer String
  10893  *
  10894  * \param
  10895  *   string
  10896  * \return
  10897  *   true when string is an integer
  10898  *   false when string is not an integer or string is empty or NULL
  10899  */
  10900 bool isInt(const char *string) {
  10901 
  10902   // sanity checks
  10903   if (!string || *string == 0) {
  10904     return(false);
  10905   }
  10906 
  10907   // . not allowed in first position
  10908   // first position can be digit or - but not "-"
  10909   if (!isdigit(*string) && (*string != '-')) {
  10910     return(false);
  10911   }
  10912   string++;
  10913 
  10914   bool r        = false;
  10915   while (isdigit(*string) && *string != 0) {
  10916     string++;
  10917   }
  10918 
  10919   // strings ending with '-' are not integers
  10920   if ((*string == 0) && (*(string-1) != '-')) {
  10921     r = true;
  10922   }
  10923   return(r);
  10924 }
  10925 
  10926 /**
  10927  * convert string to decimal integer
  10928  *
  10929  * \param
  10930  *   string
  10931  * \return
  10932  *   int64_t
  10933  *   0 when string represents 0 or doesnt represent a number or the input is NULL
  10934  */
  10935 int64_t parseInt(const char *string) {
  10936 
  10937   // sanity checks
  10938   if (!string) {
  10939     return(0);
  10940   }
  10941   while (!isdigit(*string) && *string != '-' && *string != 0) {
  10942     string++;
  10943   }
  10944   int64_t r = strtoll(string, NULL, 10);
  10945   if (r == INT64_MAX || r == INT64_MIN) {
  10946     pFuncError
  10947     shEPrintfS("The string was: \"%s\"\n", string);
  10948   }
  10949   return(r);
  10950 }
  10951 
  10952 int64_t parseIntChar(char c) {
  10953 
  10954   if (!isdigit(c)) {
  10955     return(-1);
  10956   }
  10957   return(c - '0');
  10958 }
  10959 
  10960 /**
  10961  * convert string to decimal integer
  10962  *
  10963  * \param
  10964  *   string
  10965  * \return
  10966  *   int64_t
  10967  *   0 when string represents 0 or doesnt represent a number or the input is NULL
  10968  */
  10969 int64_t parseI64(const char *string) {
  10970 
  10971   // sanity checks
  10972   if (!string) {
  10973     return(0);
  10974   }
  10975   while (!isdigit(*string) && *string != '-' && *string != 0) {
  10976     string++;
  10977   }
  10978   int64_t r = strtoll(string, NULL, 10);
  10979   if (r == INT64_MAX || r == INT64_MIN) {
  10980     pFuncError
  10981     shEPrintfS("The string was: \"%s\"\n", string);
  10982   }
  10983   return(r);
  10984 }
  10985 
  10986 int64_t parseI64Char(char c) {
  10987 
  10988   if (!isdigit(c)) {
  10989     return(-1);
  10990   }
  10991   return(c - '0');
  10992 }
  10993 
  10994 /**
  10995  * convert string to double
  10996  *
  10997  * \param
  10998  *   string
  10999  * \return
  11000  *   double
  11001  *   0 when string represents 0 or doesnt represent a number or the input is NULL
  11002  */
  11003 double parseDouble(const char *string) {
  11004 
  11005   // sanity checks
  11006   if (!string) {
  11007     return(0);
  11008   }
  11009   while (!isdigit(*string) && *string != '-' && *string != 0) {
  11010     string++;
  11011   }
  11012   double r = strtod(string, NULL);
  11013   return(r);
  11014 }
  11015 
  11016 double parseDoubleChar(char c) {
  11017 
  11018   if (!isdigit(c)) {
  11019     return(-1);
  11020   }
  11021   return((double)(c - '0'));
  11022 }
  11023 
  11024 /**
  11025  * parse hexadecimal number in a string
  11026  *
  11027  * \param
  11028  *   string hexadecimal string starting with 0x
  11029  * \return
  11030  *   integer value
  11031  *   0 failed or the value is 0
  11032  */
  11033 uint64_t parseHex(const char *string) {
  11034 
  11035   if (!string) {
  11036     return(0);
  11037   }
  11038   while (!isdigit(*string) && *string != '-' && *string != 0) {
  11039     string++;
  11040   }
  11041   uint64_t r = strtoul(string, NULL, 16);;
  11042   if (r == ULONG_MAX) {
  11043     pFuncError
  11044     shEPrintfS("The string was: \"%s\"\n", string);
  11045   }
  11046   return(r);
  11047 }
  11048 
  11049 /**
  11050  * int To String
  11051  *
  11052  * convert int to string
  11053  *
  11054  * \param
  11055  *   int64 number
  11056  * \return
  11057  *   string representing the number (you must free the pointer)
  11058  */
  11059 char *intToS(int64_t n) {
  11060   char s[50];
  11061   char *r = NULL;
  11062 
  11063   sprintf(s, "%" PRIi64, n);
  11064   r = strdup(s);
  11065   return(r);
  11066 }
  11067 
  11068 /**
  11069  * buffer int To String
  11070  *
  11071  * convert int to string
  11072  *
  11073  * \param
  11074  *   int64 number
  11075  * \return
  11076  *   string representing the number
  11077  */
  11078 char *bIntToS(char *s, int64_t n) {
  11079 
  11080   if (!s) {
  11081     return(NULL);
  11082   }
  11083   sprintf(s, "%" PRIi64, n);
  11084   return(s);
  11085 }
  11086 
  11087 /**
  11088  * double To String
  11089  *
  11090  * convert int to string
  11091  *
  11092  * \param
  11093  *   double number
  11094  * \return
  11095  *   string representing the number (you must free the pointer)
  11096  */
  11097 char *doubleToS(double n) {
  11098   char s[256];
  11099   char *r = NULL;
  11100 
  11101   sprintf(s, "%e", n);
  11102   r = strdup(s);
  11103   return(r);
  11104 }
  11105 
  11106 /**
  11107  * buffer double To String
  11108  *
  11109  * convert int to string
  11110  *
  11111  * \param
  11112  *   double number
  11113  * \return
  11114  *   string representing the number
  11115  */
  11116 char *bDoubleToS(char *s, double n) {
  11117 
  11118   if (!s) {
  11119     return(NULL);
  11120   }
  11121   sprintf(s, "%e", n);
  11122   return(s);
  11123 }
  11124 
  11125 /**
  11126  * length string
  11127  *
  11128  * return strlen when possible
  11129  *
  11130  * \param
  11131  *   string
  11132  * \return
  11133  *   strlen value
  11134  *   0 when string is NULL
  11135  */
  11136 size_t lenS(const char *string) {
  11137 
  11138   if (!string) {
  11139     return(0);
  11140   }
  11141   return(strlen(string));
  11142 }
  11143 
  11144 /**
  11145  * string buffer size
  11146  *
  11147  * return strlen+1 when possible
  11148  *
  11149  * \param
  11150  *   string
  11151  * \return
  11152  *   strlen+1 value
  11153  *   0 when string is NULL
  11154  */
  11155 size_t sizeS(const char *string) {
  11156 
  11157   if (!string) {
  11158     return(0);
  11159   }
  11160   return(strlen(string)+1);
  11161 }
  11162 
  11163 /**
  11164  * upper case String
  11165  * duplicate string
  11166  *
  11167  * \param
  11168  *   string
  11169  * \return
  11170  *   new upper case string (you must free the pointer)
  11171  */
  11172 char *upperS(const char *string) {
  11173   char *r = NULL;
  11174 
  11175   // sanity checks
  11176   if (!string) {
  11177     return(NULL);
  11178   }
  11179 
  11180   r = strdup(string);
  11181   if (!r) {
  11182     return(NULL);
  11183   }
  11184 
  11185   // upper case
  11186   size_t i = 0;
  11187   while (r[i] != 0) {
  11188     r[i] = (char)toupper(r[i]);
  11189     i++;
  11190   }
  11191   return(r);
  11192 }
  11193 
  11194 /**
  11195  * upper case String
  11196  *
  11197  * \param
  11198  *   string
  11199  * \return
  11200  *   upper case string
  11201  *   NULL error
  11202  */
  11203 char *iUpperS(char **string) {
  11204 
  11205   // sanity checks
  11206   if (!string || !*string) {
  11207     return(NULL);
  11208   }
  11209 
  11210   // upper case
  11211   size_t i = 0;
  11212   while ((*string)[i] != 0) {
  11213     (*string)[i] = (char)toupper((*string)[i]);
  11214     i++;
  11215   }
  11216   return(*string);
  11217 }
  11218 
  11219 /**
  11220  * buffer upper case String
  11221  *
  11222  * \param
  11223  *   string
  11224  * \return
  11225  *   upper case string
  11226  *   NULL error
  11227  */
  11228 char *bUpperS(char *string) {
  11229 
  11230   // sanity checks
  11231   if (!string) {
  11232     return(NULL);
  11233   }
  11234 
  11235   // upper case
  11236   size_t i = 0;
  11237   while (string[i] != 0) {
  11238     string[i] = (char)toupper(string[i]);
  11239     i++;
  11240   }
  11241   return(string);
  11242 }
  11243 
  11244 /**
  11245  * lower case String
  11246  * duplicate string
  11247  *
  11248  * \param
  11249  *   string
  11250  * \return
  11251  *   new lower case string (you must free the pointer)
  11252  */
  11253 char *lowerS(const char *string) {
  11254   char *r = NULL;
  11255 
  11256   // sanity checks
  11257   if (!string) {
  11258     return(NULL);
  11259   }
  11260 
  11261   r = strdup(string);
  11262   if (!r) {
  11263     return(NULL);
  11264   }
  11265 
  11266   // lower case
  11267   size_t i = 0;
  11268   while (r[i] != 0) {
  11269     r[i] = (char)tolower(r[i]);
  11270     i++;
  11271   }
  11272   return(r);
  11273 }
  11274 
  11275 /**
  11276  * lower case String
  11277  *
  11278  * \param
  11279  *   string
  11280  * \return
  11281  *   lower case string
  11282  *   NULL error
  11283  */
  11284 char *iLowerS(char **string) {
  11285 
  11286   // sanity checks
  11287   if (!string || !*string) {
  11288     return(NULL);
  11289   }
  11290 
  11291   // lower case
  11292   size_t i = 0;
  11293   while ((*string)[i] != 0) {
  11294     (*string)[i] = (char)tolower((*string)[i]);
  11295     i++;
  11296   }
  11297   return(*string);
  11298 }
  11299 
  11300 /**
  11301  * buffer lower case String
  11302  *
  11303  * \param
  11304  *   string
  11305  * \return
  11306  *   lower case string
  11307  *   NULL error
  11308  */
  11309 char *bLowerS(char *string) {
  11310 
  11311   // sanity checks
  11312   if (!string) {
  11313     return(NULL);
  11314   }
  11315 
  11316   // lower case
  11317   size_t i = 0;
  11318   while (string[i] != 0) {
  11319     string[i] = (char)tolower(string[i]);
  11320     i++;
  11321   }
  11322   return(string);
  11323 }
  11324 
  11325 /**
  11326  * trim String
  11327  * duplicate string
  11328  *
  11329  * \param
  11330  *   string
  11331  * \return
  11332  *   new string without leading or trailing spaces (you must free the pointer)
  11333  */
  11334 char *trimS(const char *string) {
  11335   char *r = NULL;
  11336   const char *end = NULL;
  11337   size_t len;
  11338 
  11339   // sanity checks
  11340   if (!string) {
  11341     return(NULL);
  11342   }
  11343 
  11344   // remove heading spaces
  11345   while (isspace(*string)) {
  11346     string++;
  11347   }
  11348 
  11349   if (!*string) {
  11350     // all spaces
  11351     emptyS(r)
  11352     return(r);
  11353   }
  11354 
  11355   // remove trailing spaces
  11356   end = string + strlen(string) - 1;
  11357   while (isspace(*end)) {
  11358     end--;
  11359   }
  11360 
  11361   // copy range to new string
  11362   len        = (size_t)(end - string + 2);
  11363   r          = MALLOC(len);
  11364   if (!r) {
  11365     return(NULL);
  11366   }
  11367   r          = strncpy(r, string, len - 1);
  11368   r[len - 1] = 0;
  11369   return(r);
  11370 }
  11371 
  11372 /**
  11373  * trim String
  11374  *
  11375  * \param
  11376  *   string (this parameter is reallocated)
  11377  * \return
  11378  *   string without leading or trailing spaces
  11379  *   NULL error
  11380  */
  11381 char *iTrimS(char **string) {
  11382   char *workingS = NULL;
  11383   char *r = NULL;
  11384   char *end = NULL;
  11385   size_t len;
  11386 
  11387   // sanity checks
  11388   if (!string || !*string) {
  11389     return(NULL);
  11390   }
  11391 
  11392   workingS = *string;
  11393 
  11394   // remove heading spaces
  11395   while (isspace(*workingS)) {
  11396     workingS++;
  11397   }
  11398 
  11399   if (!*workingS) {
  11400     // all spaces
  11401     free(*string);
  11402     emptyS(*string)
  11403     return(*string);
  11404   }
  11405 
  11406   // remove trailing spaces
  11407   end = workingS + strlen(workingS) - 1;
  11408   while (isspace(*end)) {
  11409     end--;
  11410   }
  11411 
  11412   // copy range to new string
  11413   len             = (size_t)(end - workingS + 2);
  11414   r               = MALLOC(len);
  11415   if (!r) {
  11416     return(NULL);
  11417   }
  11418   r               = strncpy(r, workingS, len - 1);
  11419   r[len - 1]      = 0;
  11420   free(*string);
  11421   *string = r;;
  11422   return(r);
  11423 }
  11424 
  11425 /**
  11426  * buffer trim String
  11427  *
  11428  * \param
  11429  *   string
  11430  * \return
  11431  *   string without leading or trailing spaces
  11432  *   NULL error
  11433  */
  11434 char *bTrimS(char *string) {
  11435   char *workingS = NULL;
  11436   char *r = NULL;
  11437   char *end = NULL;
  11438   size_t len;
  11439 
  11440   // sanity checks
  11441   if (!string) {
  11442     return(NULL);
  11443   }
  11444 
  11445   workingS = string;
  11446 
  11447   // remove heading spaces
  11448   while (isspace(*workingS)) {
  11449     workingS++;
  11450   }
  11451 
  11452   if (!*workingS) {
  11453     // all spaces
  11454     bEmptyS(string);
  11455     return(string);
  11456   }
  11457 
  11458   // remove trailing spaces
  11459   end = workingS + strlen(workingS) - 1;
  11460   while (isspace(*end)) {
  11461     end--;
  11462   }
  11463 
  11464   // copy range to new string
  11465   len             = (size_t)(end - workingS + 2);
  11466   r               = MALLOC(len);
  11467   if (!r) {
  11468     return(NULL);
  11469   }
  11470   r               = strncpy(r, workingS, len - 1);
  11471   r[len - 1]      = 0;
  11472   strcpy(string, r);
  11473   free(r);
  11474   return(string);
  11475 }
  11476 
  11477 /**
  11478  * left trim String
  11479  * duplicate string
  11480  *
  11481  * \param
  11482  *   string
  11483  * \return
  11484  *   new string without leading spaces (you must free the pointer)
  11485  */
  11486 char *lTrimS(const char *string) {
  11487   char *r = NULL;
  11488 
  11489   // sanity checks
  11490   if (!string) {
  11491     return(NULL);
  11492   }
  11493 
  11494   // remove heading spaces
  11495   while (isspace(*string)) {
  11496     string++;
  11497   }
  11498 
  11499   if (!*string) {
  11500     // all spaces
  11501     emptyS(r)
  11502     return(r);
  11503   }
  11504 
  11505   r = strdup(string);
  11506   return(r);
  11507 }
  11508 
  11509 
  11510 /**
  11511  * left trim String
  11512  *
  11513  * \param
  11514  *   string (this parameter is reallocated)
  11515  * \return
  11516  *   string without leading spaces (you must free the pointer)
  11517  *   NULL error
  11518  */
  11519 char *iLTrimS(char **string) {
  11520   char *workingS = NULL;
  11521   char *r = NULL;
  11522 
  11523   // sanity checks
  11524   if (!string || !*string) {
  11525     return(NULL);
  11526   }
  11527 
  11528   workingS = *string;
  11529 
  11530   // remove heading spaces
  11531   while (isspace(*workingS)) {
  11532     workingS++;
  11533   }
  11534 
  11535   r = strdup(workingS);
  11536   if (!r) {
  11537     return(NULL);
  11538   }
  11539   free(*string);
  11540   *string = r;;
  11541   return(r);
  11542 }
  11543 
  11544 /**
  11545  * buffer left trim String
  11546  *
  11547  * \param
  11548  *   string
  11549  * \return
  11550  *   string without leading spaces
  11551  *   NULL error
  11552  */
  11553 char *bLTrimS(char *string) {
  11554   char *workingS = NULL;
  11555 
  11556   // sanity checks
  11557   if (!string) {
  11558     return(NULL);
  11559   }
  11560 
  11561   workingS = string;
  11562 
  11563   // remove heading spaces
  11564   while (isspace(*workingS)) {
  11565     workingS++;
  11566   }
  11567 
  11568   memmove(string, workingS, strlen(workingS)+1);
  11569   return(string);
  11570 }
  11571 
  11572 /**
  11573  * right trim String
  11574  * duplicate string
  11575  *
  11576  * \param
  11577  *   string
  11578  * \return
  11579  *   new string without trailing spaces (you must free the pointer)
  11580  */
  11581 char *rTrimS(const char *string) {
  11582   char *r = NULL;
  11583   const char *end = NULL;
  11584   size_t len;
  11585 
  11586   // sanity checks
  11587   if (!string) {
  11588     return(NULL);
  11589   }
  11590 
  11591   // remove trailing spaces
  11592   end = string + strlen(string) - 1;
  11593   while (((end >= string) && isspace(*end))) {
  11594     end--;
  11595   }
  11596 
  11597   // copy range to new string
  11598   len        = (size_t)(end - string + 2);
  11599   r          = MALLOC(len);
  11600   if (!r) {
  11601     return(NULL);
  11602   }
  11603   r          = strncpy(r, string, len - 1);
  11604   r[len - 1] = 0;
  11605   return(r);
  11606 }
  11607 
  11608 
  11609 /**
  11610  * right trim String
  11611  *
  11612  * \param
  11613  *   string
  11614  * \return
  11615  *   string without trailing spaces
  11616  *   NULL error
  11617  */
  11618 char *iRTrimS(char **string) {
  11619   char *workingS = NULL;
  11620   char *end = NULL;
  11621 
  11622   // sanity checks
  11623   if (!string || !*string) {
  11624     return(NULL);
  11625   }
  11626 
  11627   workingS = *string;
  11628 
  11629   // remove trailing spaces
  11630   end = workingS + strlen(workingS) - 1;
  11631   while (((end >= workingS) && isspace(*end))) {
  11632     end--;
  11633   }
  11634 
  11635   *(end+1) = 0;;
  11636   return(*string);
  11637 }
  11638 
  11639 /**
  11640  * buffer right trim String
  11641  *
  11642  * \param
  11643  *   string
  11644  * \return
  11645  *   string without trailing spaces
  11646  *   NULL error
  11647  */
  11648 char *bRTrimS(char *string) {
  11649   char *workingS = NULL;
  11650   char *end = NULL;
  11651 
  11652   // sanity checks
  11653   if (!string) {
  11654     return(NULL);
  11655   }
  11656 
  11657   workingS = string;
  11658 
  11659   // remove trailing spaces
  11660   end = workingS + strlen(workingS) - 1;
  11661   while (((end >= workingS) && isspace(*end))) {
  11662     end--;
  11663   }
  11664 
  11665   *(end+1) = 0;;
  11666   return(string);
  11667 }
  11668 
  11669 /**
  11670  * uniq String
  11671  * duplicate string
  11672  *
  11673  * remove successive repetitions of char c
  11674  *
  11675  * \param
  11676  *   string
  11677  *   c character to remove
  11678  * \return
  11679  *   new string without successive repetitions of char c (you must free the pointer)
  11680  */
  11681 char *uniqS(const char *string, char c) {
  11682   char *r = NULL;
  11683   size_t len;
  11684 
  11685   // sanity checks
  11686   if (!string) {
  11687     return(NULL);
  11688   }
  11689 
  11690   r   = strdup(string);
  11691   len = strlen(string);
  11692 
  11693   if (len < 2) {
  11694     // string is too short to have repetitions
  11695     return(r);
  11696   }
  11697 
  11698   // index in r
  11699   size_t j = 1;;
  11700   rangeFrom(i, 1, len)
  11701     if (r[i-1] == c && r[i] == c) {
  11702       // skip
  11703       continue;
  11704     }
  11705     else {
  11706       r[j] = r[i];
  11707       j++;
  11708     }
  11709 
  11710   r[j] = 0;
  11711 
  11712   return(r);
  11713 }
  11714 
  11715 /**
  11716  * uniq String
  11717  *
  11718  * remove successive repetitions of char c
  11719  *
  11720  * \param
  11721  *   string
  11722  *   c character to remove
  11723  * \return
  11724  *   string without successive repetitions of char c
  11725  *   NULL error
  11726  */
  11727 char *iUniqS(char **string, char c) {
  11728   size_t len;
  11729 
  11730   // sanity checks
  11731   if (!string || !*string) {
  11732     return(NULL);
  11733   }
  11734 
  11735   len = strlen(*string);
  11736 
  11737   if (len < 2) {
  11738     // string is too short to have repetitions
  11739     return(*string);
  11740   }
  11741 
  11742   // index in r
  11743   size_t j = 1;;
  11744   rangeFrom(i, 1, len)
  11745     if ((*string)[i-1] == c && (*string)[i] == c) {
  11746       // skip
  11747       continue;
  11748     }
  11749     else {
  11750       (*string)[j] = (*string)[i];
  11751       j++;
  11752     }
  11753 
  11754   (*string)[j] = 0;
  11755 
  11756   return(*string);
  11757 }
  11758 
  11759 /**
  11760  * buffer uniq String
  11761  *
  11762  * remove successive repetitions of char c
  11763  *
  11764  * \param
  11765  *   string
  11766  *   c character to remove
  11767  * \return
  11768  *   string without successive repetitions of char c
  11769  *   NULL error
  11770  */
  11771 char *bUniqS(char *string, char c) {
  11772   size_t len;
  11773 
  11774   // sanity checks
  11775   if (!string) {
  11776     return(NULL);
  11777   }
  11778 
  11779   len = strlen(string);
  11780 
  11781   if (len < 2) {
  11782     // string is too short to have repetitions
  11783     return(string);
  11784   }
  11785 
  11786   // index in r
  11787   size_t j = 1;;
  11788   rangeFrom(i, 1, len)
  11789     if (string[i-1] == c && string[i] == c) {
  11790       // skip
  11791       continue;
  11792     }
  11793     else {
  11794       string[j] = string[i];
  11795       j++;
  11796     }
  11797 
  11798   string[j] = 0;
  11799 
  11800   return(string);
  11801 }
  11802 
  11803 /**
  11804  * ignore case uniq String
  11805  * duplicate string
  11806  *
  11807  * remove successive repetitions of char c
  11808  *
  11809  * \param
  11810  *   string
  11811  *   c character to remove
  11812  * \return
  11813  *   new string without successive repetitions of char c (you must free the pointer)
  11814  */
  11815 char *icUniqS(const char *string, char c) {
  11816   char *r = NULL;
  11817   size_t len;
  11818 
  11819   // sanity checks
  11820   if (!string) {
  11821     return(NULL);
  11822   }
  11823 
  11824   r   = strdup(string);
  11825   len = strlen(string);
  11826 
  11827   if (len < 2) {
  11828     // string is too short to have repetitions
  11829     return(r);
  11830   }
  11831 
  11832   c = (char)tolower(c);
  11833 
  11834   // index in r
  11835   size_t j = 1;;
  11836   rangeFrom(i, 1, len)
  11837     if (tolower(r[i-1]) == c && tolower(r[i]) == c) {
  11838       // skip
  11839       continue;
  11840     }
  11841     else {
  11842       r[j] = r[i];
  11843       j++;
  11844     }
  11845 
  11846   r[j] = 0;
  11847 
  11848   return(r);
  11849 }
  11850 
  11851 /**
  11852  * in place ignore case uniq String
  11853  *
  11854  * remove successive repetitions of char c
  11855  *
  11856  * \param
  11857  *   string
  11858  *   c character to remove
  11859  * \return
  11860  *   string without successive repetitions of char c
  11861  *   NULL error
  11862  */
  11863 char *iicUniqS(char **string, char c) {
  11864   size_t len;
  11865 
  11866   // sanity checks
  11867   if (!string || !*string) {
  11868     return(NULL);
  11869   }
  11870 
  11871   len = strlen(*string);
  11872 
  11873   if (len < 2) {
  11874     // string is too short to have repetitions
  11875     return(*string);
  11876   }
  11877 
  11878   c = (char)tolower(c);
  11879 
  11880   // index in r
  11881   size_t j = 1;;
  11882   rangeFrom(i, 1, len)
  11883     if (tolower((*string)[i-1]) == c && tolower((*string)[i]) == c) {
  11884       // skip
  11885       continue;
  11886     }
  11887     else {
  11888       (*string)[j] = (*string)[i];
  11889       j++;
  11890     }
  11891 
  11892   (*string)[j] = 0;
  11893 
  11894   return(*string);
  11895 }
  11896 
  11897 /**
  11898  * ignore case buffer uniq String
  11899  *
  11900  * remove successive repetitions of char c
  11901  *
  11902  * \param
  11903  *   string
  11904  *   c character to remove
  11905  * \return
  11906  *   string without successive repetitions of char c
  11907  *   NULL error
  11908  */
  11909 char *bicUniqS(char *string, char c) {
  11910   size_t len;
  11911 
  11912   // sanity checks
  11913   if (!string) {
  11914     return(NULL);
  11915   }
  11916 
  11917   len = strlen(string);
  11918 
  11919   if (len < 2) {
  11920     // string is too short to have repetitions
  11921     return(string);
  11922   }
  11923 
  11924   c = (char)tolower(c);
  11925 
  11926   // index in r
  11927   size_t j = 1;;
  11928   rangeFrom(i, 1, len)
  11929     if (tolower(string[i-1]) == c && tolower(string[i]) == c) {
  11930       // skip
  11931       continue;
  11932     }
  11933     else {
  11934       string[j] = string[i];
  11935       j++;
  11936     }
  11937 
  11938   string[j] = 0;
  11939 
  11940   return(string);
  11941 }
  11942 
  11943 /**
  11944  * repeat string count times
  11945  *
  11946  * \param
  11947  * string
  11948  * \param
  11949  * count number of times string is repeated
  11950  * \return
  11951  * new string with string repeated count times (you must free the pointer)
  11952  * NULL when string is NULL
  11953  */
  11954 char *repeatS(const char *string, size_t count) {
  11955   char *r = NULL;
  11956 
  11957   // sanity
  11958   if (!string) {
  11959     return(NULL);
  11960   }
  11961   if (!count || !string[0]) {
  11962     emptyS(r);
  11963     return(r);
  11964   }
  11965 
  11966   size_t slen = strlen(string);
  11967   size_t len  = slen * count;
  11968 
  11969   r = MALLOC(len+1);;
  11970   if (!r) {
  11971     return(NULL);
  11972   }
  11973 
  11974   strcpy(r, string);
  11975   count--;
  11976 
  11977   if (count) {
  11978     range(i, count) {
  11979       strcpy(r + slen * (1 + i), string);
  11980     }
  11981   }
  11982 
  11983   return(r);
  11984 }
  11985 
  11986 /**
  11987  * repeat string count times
  11988  *
  11989  * \param
  11990  * string (this parameter is reallocated)
  11991  * \param
  11992  * count number of times string is repeated
  11993  * \return
  11994  * string with string repeated count times
  11995  * NULL when string is NULL
  11996  */
  11997 char *iRepeatS(char **string, size_t count) {
  11998   char *r = NULL;
  11999 
  12000   // sanity
  12001   if (!string || !*string) {
  12002     return(NULL);
  12003   }
  12004   if (!count || !(*string)[0]) {
  12005     emptyS(r);
  12006     goto end;
  12007   }
  12008 
  12009   size_t slen = strlen(*string);
  12010   size_t len  = slen * count;
  12011 
  12012   r = MALLOC(len+1);;
  12013   if (!r) {
  12014     return(NULL);
  12015   }
  12016 
  12017   strcpy(r, *string);
  12018   count--;
  12019 
  12020   if (count) {
  12021     range(i, count) {
  12022       strcpy(r + slen * (1 + i), *string);
  12023     }
  12024   }
  12025 
  12026   end:
  12027   free(*string);
  12028   *string = r;
  12029   return(*string);
  12030 }
  12031 
  12032 /**
  12033  * repeat string count times
  12034  *
  12035  * \param
  12036  * dest buffer big enough to hold count times string
  12037  * \param
  12038  * string
  12039  * \param
  12040  * count number of times string is repeated
  12041  * \return
  12042  * dest with string repeated count times
  12043  * NULL when dest or string are NULL
  12044  */
  12045 char *bRepeatS(char *dest, const char *string, size_t count) {
  12046 
  12047   // sanity
  12048   if (!dest || !string) {
  12049     return(NULL);
  12050   }
  12051   if (!count || !string[0]) {
  12052     bEmptyS(dest);
  12053     return(dest);
  12054   }
  12055 
  12056   size_t slen = strlen(string);
  12057 
  12058   strcpy(dest, string);
  12059   count--;
  12060 
  12061   if (count) {
  12062     range(i, count) {
  12063       strcpy(dest + slen * (1 + i), string);
  12064     }
  12065   }
  12066 
  12067   return(dest);
  12068 }
  12069 
  12070 /**
  12071  * repeat string count times
  12072  *
  12073  * \param
  12074  * dest buffer big enough to hold count times string
  12075  * \param
  12076  * destSize dest buffer size (sizeof(dest))
  12077  * \param
  12078  * string
  12079  * \param
  12080  * count number of times string is repeated
  12081  * \return
  12082  * dest with string repeated count times
  12083  * NULL when dest or string are NULL
  12084  */
  12085 char *bLRepeatS(char *dest, size_t destSize, const char *string, size_t count) {
  12086 
  12087   // sanity
  12088   if (!dest || !string) {
  12089     return(NULL);
  12090   }
  12091   if (!count || !string[0]) {
  12092     bEmptyS(dest);
  12093     return(dest);
  12094   }
  12095 
  12096   size_t slen = strlen(string);
  12097   size_t len  = slen * count;
  12098 
  12099   if (len >= destSize) {
  12100     return(NULL);
  12101   }
  12102 
  12103   strcpy(dest, string);
  12104   count--;
  12105 
  12106   if (count) {
  12107     range(i, count) {
  12108       strcpy(dest + slen * (1 + i), string);
  12109     }
  12110   }
  12111 
  12112   return(dest);
  12113 }
  12114 
  12115 /**
  12116  * repeat char count times
  12117  *
  12118  * \param
  12119  * c char to repeat
  12120  * \param
  12121  * count number of times c is repeated
  12122  * \return
  12123  * new string with c repeated count times (you must free the pointer)
  12124  */
  12125 char *repeatCharS(char c, size_t count) {
  12126 
  12127   charToS(s,c);
  12128   return(repeatS(s, count));
  12129 }
  12130 
  12131 /**
  12132  * repeat char count times
  12133  *
  12134  * \param
  12135  * dest buffer big enough to hold count times c
  12136  * \param
  12137  * c char to repeat
  12138  * \param
  12139  * count number of times c is repeated
  12140  * \return
  12141  * dest with c repeated count times
  12142  * NULL when dest is NULL
  12143  */
  12144 char *bRepeatCharS(char *dest, char c, size_t count) {
  12145 
  12146   charToS(s,c);
  12147   return(bRepeatS(dest, s, count));
  12148 }
  12149 
  12150 /**
  12151  * repeat char count times
  12152  *
  12153  * \param
  12154  * dest buffer big enough to hold count times c
  12155  * \param
  12156  * destSize dest buffer size (sizeof(dest))
  12157  * \param
  12158  * c char to repeat
  12159  * \param
  12160  * count number of times c is repeated
  12161  * \return
  12162  * dest with c repeated count times
  12163  * NULL when dest is NULL
  12164  */
  12165 char *bLRepeatCharS(char *dest, size_t destSize, char c, size_t count) {
  12166 
  12167   charToS(s,c);
  12168   return(bLRepeatS(dest, destSize, s, count));
  12169 }
  12170 
  12171 /**
  12172  * length of string repeated count times
  12173  *
  12174  * \param
  12175  * string
  12176  * \param
  12177  * count number of times string is repeated
  12178  * \return
  12179  * length of string repeated count times
  12180  * -1 when string is NULL
  12181  */
  12182 ssize_t repeatLenS(const char *string, size_t count) {
  12183 
  12184   // sanity
  12185   if (!string) {
  12186     return(-1);
  12187   }
  12188   if (!count || !string[0]) {
  12189     return(0);
  12190   }
  12191 
  12192   ssize_t r = (ssize_t)(strlen(string) * count);
  12193 
  12194   return(r);
  12195 }
  12196 
  12197 /**
  12198  * ellipsis start string
  12199  *
  12200  * This function pads the current string with a given string if current string is longer than target length
  12201  * If target length is more than current string's length, the current string is returned as is
  12202  *
  12203  * \param
  12204  * string
  12205  * \param
  12206  * targetLength The length of the resulting string once the current string has been padded. If the value is less
  12207  *              than the current string's length, the current string is truncated from the right and the pad is
  12208  *              applied once
  12209  * \param
  12210  * ellipsisString The string to pad the current string with.
  12211  * \return
  12212  * new string of the specified length with the pad string applied from the start (you must free the pointer)
  12213  * NULL when string or ellipsisString are NULL
  12214  */
  12215 char *ellipsisStartS(const char *string, size_t targetLength, const char *ellipsisString) {
  12216 
  12217   // sanity
  12218   if (!string or !ellipsisString) {
  12219     return(NULL);
  12220   }
  12221 
  12222   if (!targetLength) {
  12223     return(strdup(""));
  12224   }
  12225 
  12226   size_t len = strlen(string);
  12227 
  12228   if (len <= targetLength) {
  12229     return(strdup(string));
  12230   }
  12231   else {
  12232     // truncate string
  12233     char *ellip = strdup(ellipsisString);
  12234     string += ((len - targetLength) + strlen(ellipsisString)) <= len ? (len - targetLength) + strlen(ellipsisString) : len;
  12235     pErrorNULL(iAppendS(&ellip, string));
  12236     // make sure the result is target length
  12237     pErrorNULL(iSliceS(&ellip, 0, (int64_t)targetLength));
  12238     return(ellip);
  12239 }
  12240   }
  12241 
  12242 
  12243 /**
  12244  * ellipsis start string
  12245  *
  12246  * This function pads the current string with a given string if current string is longer than target length
  12247  * If target length is more than current string's length, the current string is returned as is
  12248  *
  12249  * \param
  12250  * string (this parameter is reallocated)
  12251  * \param
  12252  * targetLength The length of the resulting string once the current string has been padded. If the value is less
  12253  *              than the current string's length, the current string is truncated from the right and the pad is
  12254  *              applied once
  12255  * \param
  12256  * ellipsisString The string to pad the current string with.
  12257  * \return
  12258  * updated string of the specified length with the pad string applied from the start
  12259  * NULL when string or ellipsisString are NULL
  12260  */
  12261 char *iEllipsisStartS(char **string, size_t targetLength, const char *ellipsisString) {
  12262 
  12263   // sanity
  12264   if (!string or !*string or !ellipsisString) {
  12265     return(NULL);
  12266   }
  12267 
  12268   if (!targetLength) {
  12269     (*string)[0] = 0;
  12270     return(*string);
  12271   }
  12272 
  12273   size_t len = strlen(*string);
  12274 
  12275   if (len > targetLength) {
  12276     // truncate string
  12277     char *ellip = strdup(ellipsisString);
  12278     char *str   = *string + (((len - targetLength) + strlen(ellipsisString)) <= len ? (len - targetLength) + strlen(ellipsisString) : len);
  12279     pErrorNULL(iAppendS(&ellip, str));
  12280     // make sure the result is target length
  12281     pErrorNULL(iSliceS(&ellip, 0, (int64_t)targetLength));
  12282     free(*string);
  12283     *string = ellip;
  12284   }
  12285   return(*string);
  12286 }
  12287 
  12288 /**
  12289  * ellipsis start string
  12290  *
  12291  * This function pads the current string with a given string if current string is longer than target length
  12292  * If target length is more than current string's length, the current string is returned as is
  12293  *
  12294  * \param
  12295  * string
  12296  * \param
  12297  * targetLength The length of the resulting string once the current string has been padded. If the value is less
  12298  *              than the current string's length, the current string is truncated from the right and the pad is
  12299  *              applied once
  12300  * \param
  12301  * ellipsisString The string to pad the current string with.
  12302  * \return
  12303  * string in dest of the specified length with the pad string applied from the start
  12304  * NULL when dest, string or ellipsisString are NULL
  12305  */
  12306 char *bEllipsisStartS(char *dest, const char *string, size_t targetLength, const char *ellipsisString) {
  12307 
  12308   // sanity
  12309   if (!string or !ellipsisString or !dest) {
  12310     return(NULL);
  12311   }
  12312 
  12313   if (!targetLength) {
  12314     dest[0] = 0;
  12315     return(dest);
  12316   }
  12317 
  12318   size_t len = strlen(string);
  12319 
  12320   if (len <= targetLength) {
  12321     strcpy(dest, string);
  12322   }
  12323   else {
  12324     // truncate string
  12325     char *ellip = strdup(ellipsisString);
  12326     string += ((len - targetLength) + strlen(ellipsisString)) <= len ? (len - targetLength) + strlen(ellipsisString) : len;
  12327     pErrorNULL(iAppendS(&ellip, string));
  12328     // make sure the result is target length
  12329     pErrorNULL(iSliceS(&ellip, 0, (int64_t)targetLength));
  12330     strncpy(dest, ellip, targetLength+1);
  12331     free(ellip);
  12332   }
  12333   return(dest);
  12334 }
  12335 
  12336 /**
  12337  * ellipsis start string
  12338  *
  12339  * This function pads the current string with a given string if current string is longer than target length
  12340  * If target length is more than current string's length, the current string is returned as is
  12341  *
  12342  * \param
  12343  * string
  12344  * \param
  12345  * targetLength The length of the resulting string once the current string has been padded. If the value is less
  12346  *              than the current string's length, the current string is truncated from the right and the pad is
  12347  *              applied once
  12348  * \param
  12349  * ellipsisString The string to pad the current string with.
  12350  * \return
  12351  * string in dest of the specified length with the pad string applied from the start
  12352  * NULL when dest, string or ellipsisString are NULL
  12353  */
  12354 char *bLEllipsisStartS(char *dest, size_t destSize, const char *string, size_t targetLength, const char *ellipsisString) {
  12355 
  12356   // sanity
  12357   if (!string or !ellipsisString or !dest) {
  12358     return(NULL);
  12359   }
  12360 
  12361   if (!destSize) {
  12362     return(dest);
  12363   }
  12364 
  12365   if (!targetLength) {
  12366     dest[0] = 0;;
  12367     return(dest);
  12368   }
  12369 
  12370   targetLength = destSize > targetLength ? targetLength : destSize;;
  12371 
  12372   size_t len = strlen(string);
  12373 
  12374   if (len <= targetLength) {
  12375     pErrorNULL(strLCpy(dest, destSize, string));
  12376   }
  12377   else {
  12378     // truncate string
  12379     char *ellip = strdup(ellipsisString);
  12380     string += ((len - targetLength) + strlen(ellipsisString)) <= len ? (len - targetLength) + strlen(ellipsisString) : len;
  12381     pErrorNULL(iAppendS(&ellip, string));
  12382     // make sure the result is target length
  12383     pErrorNULL(iSliceS(&ellip, 0, (int64_t)targetLength));
  12384     pErrorNULL(strLCpy(dest, destSize, ellip));
  12385     free(ellip);
  12386   }
  12387   return(dest);
  12388 }
  12389 
  12390 /**
  12391  * ellipsis start string
  12392  *
  12393  * This function pads the current string with a given string if current string is longer than target length
  12394  * If target length is more than current string's length, the current string is returned as is
  12395  *
  12396  * \param
  12397  * string
  12398  * \param
  12399  * targetLength The length of the resulting string once the current string has been padded. If the value is less
  12400  *              than the current string's length, the current string is truncated from the right and the pad is
  12401  *              applied once
  12402  * \param
  12403  * ellipsisChar The char to pad the current string with.
  12404  * \return
  12405  * new string of the specified length with the pad string applied from the start (you must free the pointer)
  12406  * NULL when string or ellipsisString are NULL
  12407  */
  12408 char *ellipsisStartCharS(const char *string, size_t targetLength, char ellipsisChar) {
  12409 
  12410   // sanity
  12411   if (!string) {
  12412     return(NULL);
  12413   }
  12414 
  12415   if (!targetLength) {
  12416     return(strdup(""));
  12417   }
  12418 
  12419   charToS(ellipsisString, ellipsisChar);
  12420 
  12421   size_t len = strlen(string);
  12422 
  12423   if (len <= targetLength) {
  12424     return(strdup(string));
  12425   }
  12426   else {
  12427     // truncate string
  12428     char *ellip = strdup(ellipsisString);
  12429     string += ((len - targetLength) + strlen(ellipsisString)) <= len ? (len - targetLength) + strlen(ellipsisString) : len;
  12430     pErrorNULL(iAppendS(&ellip, string));
  12431     // make sure the result is target length
  12432     pErrorNULL(iSliceS(&ellip, 0, (int64_t)targetLength));
  12433     return(ellip);
  12434 }
  12435   }
  12436 
  12437 /**
  12438  * ellipsis start string
  12439  *
  12440  * This function pads the current string with a given string if current string is longer than target length
  12441  * If target length is more than current string's length, the current string is returned as is
  12442  *
  12443  * \param
  12444  * string (this parameter is reallocated)
  12445  * \param
  12446  * targetLength The length of the resulting string once the current string has been padded. If the value is less
  12447  *              than the current string's length, the current string is truncated from the right and the pad is
  12448  *              applied once
  12449  * \param
  12450  * ellipsisChar The char to pad the current string with.
  12451  * \return
  12452  * updated string of the specified length with the pad string applied from the start
  12453  * NULL when string or ellipsisString are NULL
  12454  */
  12455 char *iEllipsisStartCharS(char **string, size_t targetLength, char ellipsisChar) {
  12456 
  12457   // sanity
  12458   if (!string or !*string) {
  12459     return(NULL);
  12460   }
  12461 
  12462   if (!targetLength) {
  12463     (*string)[0] = 0;
  12464     return(*string);
  12465   }
  12466 
  12467   charToS(ellipsisString, ellipsisChar);
  12468 
  12469   size_t len = strlen(*string);
  12470 
  12471   if (len > targetLength) {
  12472     // truncate string
  12473     char *ellip = strdup(ellipsisString);
  12474     char *str   = *string + (((len - targetLength) + strlen(ellipsisString)) <= len ? (len - targetLength) + strlen(ellipsisString) : len);
  12475     pErrorNULL(iAppendS(&ellip, str));
  12476     // make sure the result is target length
  12477     pErrorNULL(iSliceS(&ellip, 0, (int64_t)targetLength));
  12478     free(*string);
  12479     *string = ellip;
  12480   }
  12481   return(*string);
  12482 }
  12483 
  12484 /**
  12485  * ellipsis start string
  12486  *
  12487  * This function pads the current string with a given string if current string is longer than target length
  12488  * If target length is more than current string's length, the current string is returned as is
  12489  *
  12490  * \param
  12491  * string
  12492  * \param
  12493  * targetLength The length of the resulting string once the current string has been padded. If the value is less
  12494  *              than the current string's length, the current string is truncated from the right and the pad is
  12495  *              applied once
  12496  * \param
  12497  * ellipsisChar The char to pad the current string with.
  12498  * \return
  12499  * string in dest of the specified length with the pad string applied from the start
  12500  * NULL when dest, string or ellipsisString are NULL
  12501  */
  12502 char *bEllipsisStartCharS(char *dest, const char *string, size_t targetLength, char ellipsisChar) {
  12503 
  12504   // sanity
  12505   if (!string  or !dest) {
  12506     return(NULL);
  12507   }
  12508 
  12509   if (!targetLength) {
  12510     dest[0] = 0;
  12511     return(dest);
  12512   }
  12513 
  12514   charToS(ellipsisString, ellipsisChar);
  12515 
  12516   size_t len = strlen(string);
  12517 
  12518   if (len <= targetLength) {
  12519     strcpy(dest, string);
  12520   }
  12521   else {
  12522     // truncate string
  12523     char *ellip = strdup(ellipsisString);
  12524     string += ((len - targetLength) + strlen(ellipsisString)) <= len ? (len - targetLength) + strlen(ellipsisString) : len;
  12525     pErrorNULL(iAppendS(&ellip, string));
  12526     // make sure the result is target length
  12527     pErrorNULL(iSliceS(&ellip, 0, (int64_t)targetLength));
  12528     strncpy(dest, ellip, targetLength+1);
  12529     free(ellip);
  12530   }
  12531   return(dest);
  12532 }
  12533 
  12534 /**
  12535  * ellipsis start string
  12536  *
  12537  * This function pads the current string with a given string if current string is longer than target length
  12538  * If target length is more than current string's length, the current string is returned as is
  12539  *
  12540  * \param
  12541  * string
  12542  * \param
  12543  * targetLength The length of the resulting string once the current string has been padded. If the value is less
  12544  *              than the current string's length, the current string is truncated from the right and the pad is
  12545  *              applied once
  12546  * \param
  12547  * ellipsisChar The char to pad the current string with.
  12548  * \return
  12549  * string in dest of the specified length with the pad string applied from the start
  12550  * NULL when dest, string or ellipsisString are NULL
  12551  */
  12552 char *bLEllipsisStartCharS(char *dest, size_t destSize, const char *string, size_t targetLength, char ellipsisChar) {
  12553 
  12554   // sanity
  12555   if (!string or !dest) {
  12556     return(NULL);
  12557   }
  12558 
  12559   if (!destSize) {
  12560     return(dest);
  12561   }
  12562 
  12563   if (!targetLength) {
  12564     dest[0] = 0;
  12565     return(dest);
  12566   }
  12567 
  12568   charToS(ellipsisString, ellipsisChar);
  12569 
  12570   targetLength = destSize > targetLength ? targetLength : destSize;;
  12571 
  12572   size_t len = strlen(string);
  12573 
  12574   if (len <= targetLength) {
  12575     pErrorNULL(strLCpy(dest, destSize, string));
  12576   }
  12577   else {
  12578     // truncate string
  12579     char *ellip = strdup(ellipsisString);
  12580     string += ((len - targetLength) + strlen(ellipsisString)) <= len ? (len - targetLength) + strlen(ellipsisString) : len;
  12581     pErrorNULL(iAppendS(&ellip, string));
  12582     // make sure the result is target length
  12583     pErrorNULL(iSliceS(&ellip, 0, (int64_t)targetLength));
  12584     pErrorNULL(strLCpy(dest, destSize, ellip));
  12585     free(ellip);
  12586   }
  12587   return(dest);
  12588 }
  12589 
  12590 
  12591 /**
  12592  * length of string after ellipsis
  12593  *
  12594  * \param
  12595  * string
  12596  * \return
  12597  * length of string after ellipsis
  12598  * -1 when string is NULL
  12599  */
  12600 ssize_t ellipsisLenS(const char *string, size_t targetLength, const char *ellipsisString) {
  12601 
  12602   // sanity
  12603   if (!string or !ellipsisString) {
  12604     return(-1);
  12605   }
  12606 
  12607   size_t len = strlen(string);
  12608 
  12609   if (len <= targetLength) {
  12610     return((ssize_t)len);
  12611   }
  12612   else {
  12613     return((ssize_t)targetLength);
  12614 }
  12615   }
  12616 
  12617 /**
  12618  * ellipsis end string
  12619  *
  12620  * This function pads the current string with a given string if current string is longer than target length
  12621  * If target length is more than current string's length, the current string is returned as is
  12622  *
  12623  * \param
  12624  * string
  12625  * \param
  12626  * targetLength The length of the resulting string once the current string has been padded. If the value is less
  12627  *              than the current string's length, the current string is truncated from the left and the pad is
  12628  *              applied once
  12629  * \param
  12630  * ellipsisString The string to pad the current string with.
  12631  * \return
  12632  * new string of the specified length with the pad string applied from the end (you must free the pointer)
  12633  * NULL when string or ellipsisString are NULL
  12634  */
  12635 char *ellipsisEndS(const char *string, size_t targetLength, const char *ellipsisString) {
  12636 
  12637   // sanity
  12638   if (!string or !ellipsisString) {
  12639     return(NULL);
  12640   }
  12641 
  12642   if (!targetLength) {
  12643     return(strdup(""));
  12644   }
  12645 
  12646   size_t len = strlen(string);
  12647 
  12648   if (len <= targetLength) {
  12649     return(strdup(string));
  12650   }
  12651   else {
  12652     // truncate string
  12653     char *ellip;
  12654     if ( strlen(ellipsisString) < targetLength) {
  12655       ellip = sliceS(string, 0, (int64_t)(targetLength - strlen(ellipsisString)));
  12656       pErrorNULL(iAppendS(&ellip, ellipsisString));
  12657     }
  12658     else {
  12659       // ellipsisString is longer than targetLength
  12660       ellip = sliceS(ellipsisString, 0, (int64_t)targetLength);
  12661     }
  12662     return(ellip);
  12663 }
  12664   }
  12665 
  12666 /**
  12667  * ellipsis end string
  12668  *
  12669  * This function pads the current string with a given string if current string is longer than target length
  12670  * If target length is more than current string's length, the current string is returned as is
  12671  *
  12672  * \param
  12673  * string (this parameter is reallocated)
  12674  * \param
  12675  * targetLength The length of the resulting string once the current string has been padded. If the value is less
  12676  *              than the current string's length, the current string is truncated from the left and the pad is
  12677  *              applied once
  12678  * \param
  12679  * ellipsisString The string to pad the current string with.
  12680  * \return
  12681  * updated string of the specified length with the pad string applied from the end
  12682  * NULL when string or ellipsisString are NULL
  12683  */
  12684 char *iEllipsisEndS(char **string, size_t targetLength, const char *ellipsisString) {
  12685 
  12686   // sanity
  12687   if (!string or !*string or !ellipsisString) {
  12688     return(NULL);
  12689   }
  12690 
  12691   if (!targetLength) {
  12692     (*string)[0] = 0;
  12693     return(*string);
  12694   }
  12695 
  12696   size_t len = strlen(*string);
  12697 
  12698   if (len > targetLength) {
  12699     // truncate string
  12700     char *ellip;
  12701     if ( strlen(ellipsisString) < targetLength) {
  12702       ellip = sliceS(*string, 0, (int64_t)(targetLength - strlen(ellipsisString)));
  12703       pErrorNULL(iAppendS(&ellip, ellipsisString));
  12704     }
  12705     else {
  12706       // ellipsisString is longer than targetLength
  12707       ellip = sliceS(ellipsisString, 0, (int64_t)targetLength);
  12708     }
  12709     free(*string);
  12710     *string = ellip;
  12711   }
  12712   return(*string);
  12713 }
  12714 
  12715 /**
  12716  * ellipsis end string
  12717  *
  12718  * This function pads the current string with a given string if current string is longer than target length
  12719  * If target length is more than current string's length, the current string is returned as is
  12720  *
  12721  * \param
  12722  * string
  12723  * \param
  12724  * targetLength The length of the resulting string once the current string has been padded. If the value is less
  12725  *              than the current string's length, the current string is truncated from the left and the pad is
  12726  *              applied once
  12727  * \param
  12728  * ellipsisString The string to pad the current string with.
  12729  * \return
  12730  * string in dest of the specified length with the pad string applied from the end
  12731  * NULL when dest, string or ellipsisString are NULL
  12732  */
  12733 char *bEllipsisEndS(char *dest, const char *string, size_t targetLength, const char *ellipsisString) {
  12734 
  12735   // sanity
  12736   if (!string or !ellipsisString or !dest) {
  12737     return(NULL);
  12738   }
  12739 
  12740   if (!targetLength) {
  12741     dest[0] = 0;
  12742     return(dest);
  12743   }
  12744 
  12745   size_t len = strlen(string);
  12746 
  12747   if (len <= targetLength) {
  12748     strcpy(dest, string);
  12749   }
  12750   else {
  12751     // truncate string
  12752     char *ellip;
  12753     if ( strlen(ellipsisString) < targetLength) {
  12754       ellip = sliceS(string, 0, (int64_t)(targetLength - strlen(ellipsisString)));
  12755       pErrorNULL(iAppendS(&ellip, ellipsisString));
  12756     }
  12757     else {
  12758       // ellipsisString is longer than targetLength
  12759       ellip = sliceS(ellipsisString, 0, (int64_t)targetLength);
  12760     }
  12761     if (!ellip) {
  12762       return(NULL);
  12763     }
  12764     strncpy(dest, ellip, targetLength+1);
  12765     free(ellip);
  12766   }
  12767   return(dest);
  12768 }
  12769 
  12770 /**
  12771  * ellipsis end string
  12772  *
  12773  * This function pads the current string with a given string if current string is longer than target length
  12774  * If target length is more than current string's length, the current string is returned as is
  12775  *
  12776  * \param
  12777  * string
  12778  * \param
  12779  * targetLength The length of the resulting string once the current string has been padded. If the value is less
  12780  *              than the current string's length, the current string is truncated from the left and the pad is
  12781  *              applied once
  12782  * \param
  12783  * ellipsisString The string to pad the current string with.
  12784  * \return
  12785  * string in dest of the specified length with the pad string applied from the end
  12786  * NULL when dest, string or ellipsisString are NULL
  12787  */
  12788 char *bLEllipsisEndS(char *dest, size_t destSize, const char *string, size_t targetLength, const char *ellipsisString) {
  12789 
  12790   // sanity
  12791   if (!string or !ellipsisString or !dest) {
  12792     return(NULL);
  12793   }
  12794 
  12795   if (!destSize) {
  12796     return(dest);
  12797   }
  12798 
  12799   if (!targetLength) {
  12800     dest[0] = 0;
  12801     return(dest);
  12802   }
  12803 
  12804   targetLength = destSize > targetLength ? targetLength : destSize;;
  12805 
  12806   size_t len = strlen(string);
  12807 
  12808   if (len <= targetLength) {
  12809     pErrorNULL(strLCpy(dest, destSize, string));
  12810   }
  12811   else {
  12812     // truncate string
  12813     char *ellip;
  12814     if ( strlen(ellipsisString) < targetLength) {
  12815       ellip = sliceS(string, 0, (int64_t)(targetLength - strlen(ellipsisString)));
  12816       pErrorNULL(iAppendS(&ellip, ellipsisString));
  12817     }
  12818     else {
  12819       // ellipsisString is longer than targetLength
  12820       ellip = sliceS(ellipsisString, 0, (int64_t)targetLength);
  12821     }
  12822     pErrorNULL(strLCpy(dest, destSize, ellip));
  12823     free(ellip);
  12824   }
  12825   return(dest);
  12826 }
  12827 
  12828 /**
  12829  * ellipsis end string
  12830  *
  12831  * This function pads the current string with a given string if current string is longer than target length
  12832  * If target length is more than current string's length, the current string is returned as is
  12833  *
  12834  * \param
  12835  * string
  12836  * \param
  12837  * targetLength The length of the resulting string once the current string has been padded. If the value is less
  12838  *              than the current string's length, the current string is truncated from the left and the pad is
  12839  *              applied once
  12840  * \param
  12841  * ellipsisChar The char to pad the current string with.
  12842  * \return
  12843  * new string of the specified length with the pad string applied from the end (you must free the pointer)
  12844  * NULL when string or ellipsisString are NULL
  12845  */
  12846 char *ellipsisEndCharS(const char *string, size_t targetLength, char ellipsisChar) {
  12847 
  12848   // sanity
  12849   if (!string) {
  12850     return(NULL);
  12851   }
  12852 
  12853   if (!targetLength) {
  12854     return(strdup(""));
  12855   }
  12856 
  12857   charToS(ellipsisString, ellipsisChar);
  12858 
  12859   size_t len = strlen(string);
  12860 
  12861   if (len <= targetLength) {
  12862     return(strdup(string));
  12863   }
  12864   else {
  12865     // truncate string
  12866     char *ellip;
  12867     ellip = sliceS(string, 0, (int64_t)(targetLength - strlen(ellipsisString)));
  12868     pErrorNULL(iAppendS(&ellip, ellipsisString));
  12869     return(ellip);
  12870 }
  12871   }
  12872 
  12873 /**
  12874  * ellipsis end string
  12875  *
  12876  * This function pads the current string with a given string if current string is longer than target length
  12877  * If target length is more than current string's length, the current string is returned as is
  12878  *
  12879  * \param
  12880  * string (this parameter is reallocated)
  12881  * \param
  12882  * targetLength The length of the resulting string once the current string has been padded. If the value is less
  12883  *              than the current string's length, the current string is truncated from the left and the pad is
  12884  *              applied once
  12885  * \param
  12886  * ellipsisChar The char to pad the current string with.
  12887  * \return
  12888  * updated string of the specified length with the pad string applied from the end
  12889  * NULL when string or ellipsisString are NULL
  12890  */
  12891 char *iEllipsisEndCharS(char **string, size_t targetLength, char ellipsisChar) {
  12892 
  12893   // sanity
  12894   if (!string or !*string) {
  12895     return(NULL);
  12896   }
  12897 
  12898   if (!targetLength) {
  12899     (*string)[0] = 0;
  12900     return(*string);
  12901   }
  12902 
  12903   charToS(ellipsisString, ellipsisChar);
  12904 
  12905   size_t len = strlen(*string);
  12906 
  12907   if (len > targetLength) {
  12908     // truncate string
  12909     char *ellip;
  12910     ellip = sliceS(*string, 0, (int64_t)(targetLength - strlen(ellipsisString)));
  12911     pErrorNULL(iAppendS(&ellip, ellipsisString));
  12912     free(*string);
  12913     *string = ellip;
  12914   }
  12915   return(*string);
  12916 }
  12917 
  12918 /**
  12919  * ellipsis end string
  12920  *
  12921  * This function pads the current string with a given string if current string is longer than target length
  12922  * If target length is more than current string's length, the current string is returned as is
  12923  *
  12924  * \param
  12925  * string
  12926  * \param
  12927  * targetLength The length of the resulting string once the current string has been padded. If the value is less
  12928  *              than the current string's length, the current string is truncated from the left and the pad is
  12929  *              applied once
  12930  * \param
  12931  * ellipsisChar The char to pad the current string with.
  12932  * \return
  12933  * string in dest of the specified length with the pad string applied from the end
  12934  * NULL when dest, string or ellipsisString are NULL
  12935  */
  12936 char *bEllipsisEndCharS(char *dest, const char *string, size_t targetLength, char ellipsisChar) {
  12937 
  12938   // sanity
  12939   if (!string or !dest) {
  12940     return(NULL);
  12941   }
  12942 
  12943   if (!targetLength) {
  12944     dest[0] = 0;
  12945     return(dest);
  12946   }
  12947 
  12948   charToS(ellipsisString, ellipsisChar);
  12949 
  12950   size_t len = strlen(string);
  12951 
  12952   if (len <= targetLength) {
  12953     strcpy(dest, string);
  12954   }
  12955   else {
  12956     // truncate string
  12957     char *ellip;
  12958     ellip = sliceS(string, 0, (int64_t)(targetLength - strlen(ellipsisString)));
  12959     if (!ellip) {
  12960       return(NULL);
  12961     }
  12962     pErrorNULL(iAppendS(&ellip, ellipsisString));
  12963     strncpy(dest, ellip, targetLength+1);
  12964     free(ellip);
  12965   }
  12966   return(dest);
  12967 }
  12968 
  12969 /**
  12970  * ellipsis end string
  12971  *
  12972  * This function pads the current string with a given string if current string is longer than target length
  12973  * If target length is more than current string's length, the current string is returned as is
  12974  *
  12975  * \param
  12976  * string
  12977  * \param
  12978  * targetLength The length of the resulting string once the current string has been padded. If the value is less
  12979  *              than the current string's length, the current string is truncated from the left and the pad is
  12980  *              applied once
  12981  * \param
  12982  * ellipsisString The string to pad the current string with.
  12983  * \return
  12984  * string in dest of the specified length with the pad string applied from the end
  12985  * NULL when dest, string or ellipsisString are NULL
  12986  */
  12987 char *bLEllipsisEndCharS(char *dest, size_t destSize, const char *string, size_t targetLength, char ellipsisChar) {
  12988 
  12989   // sanity
  12990   if (!string or !dest) {
  12991     return(NULL);
  12992   }
  12993 
  12994   if (!destSize) {
  12995     return(dest);
  12996   }
  12997 
  12998   if (!targetLength) {
  12999     dest[0] = 0;
  13000     return(dest);
  13001   }
  13002 
  13003   charToS(ellipsisString, ellipsisChar);
  13004 
  13005   targetLength = destSize > targetLength ? targetLength : destSize;;
  13006 
  13007   size_t len = strlen(string);
  13008 
  13009   if (len <= targetLength) {
  13010     pErrorNULL(strLCpy(dest, destSize, string));
  13011   }
  13012   else {
  13013     // truncate string
  13014     char *ellip;
  13015     ellip = sliceS(string, 0, (int64_t)(targetLength - strlen(ellipsisString)));
  13016     pErrorNULL(iAppendS(&ellip, ellipsisString));
  13017     pErrorNULL(strLCpy(dest, destSize, ellip));
  13018     free(ellip);
  13019   }
  13020   return(dest);
  13021 }
  13022 
  13023 
  13024 /**
  13025  * pad start string
  13026  *
  13027  * This function pads the current string with a given string (repeated, if needed) until the
  13028  * resulting string reaches a given length. The padding is applied from the start (left) of the current
  13029  * string
  13030  *
  13031  * \param
  13032  * string
  13033  * \param
  13034  * targetLength The length of the resulting string once the current string has been padded. If the value is less
  13035  *              than the current string's length, the current string is returned as is
  13036  * \param
  13037  * padString The string to pad the current string with. If this string is too long to stay within the target
  13038  *           length, it will be truncated from the right. The current string is returned as is
  13039  *           when an empty string is supplied
  13040  * \return
  13041  * new string of the specified length with the pad string applied from the start (you must free the pointer)
  13042  * NULL when string or padString are NULL
  13043  */
  13044 char *padStartS(const char *string, size_t targetLength, const char *padString) {
  13045 
  13046   // sanity
  13047   if (!string) {
  13048     return(NULL);
  13049   }
  13050   if (strlen(string) >= targetLength) {
  13051     return(strdup(string));
  13052   }
  13053   if (!padString) {
  13054     return(NULL);
  13055   }
  13056   if (!strlen(padString)) {
  13057     return(strdup(string));
  13058   }
  13059 
  13060   targetLength -= strlen(string);
  13061 
  13062   char *pads = strdup(padString);;
  13063   if (!pads) {
  13064     return(NULL);
  13065   }
  13066   if (targetLength > strlen(padString)) {
  13067     pErrorNULL(iRepeatS(&pads, targetLength/strlen(padString)+1));
  13068   }
  13069 
  13070   pErrorNULL(iSliceS(&pads, 0, (int64_t)targetLength));
  13071 
  13072   char *r = appendS(pads, string);
  13073   free(pads);
  13074 
  13075   return(r);
  13076 }
  13077 
  13078 /**
  13079  * pad start string
  13080  *
  13081  * This function pads the current string with a given string (repeated, if needed) until the
  13082  * resulting string reaches a given length. The padding is applied from the start (left) of the current
  13083  * string
  13084  *
  13085  * \param
  13086  * string (this parameter is reallocated)
  13087  * \param
  13088  * targetLength The length of the resulting string once the current string has been padded. If the value is less
  13089  *              than the current string's length, the current string is returned as is
  13090  * \param
  13091  * padString The string to pad the current string with. If this string is too long to stay within the target
  13092  *           length, it will be truncated from the right. The current string is returned as is
  13093  *           when an empty string is supplied
  13094  * \return
  13095  * updated string of the specified length with the pad string applied from the start
  13096  * NULL when string or padString are NULL
  13097  */
  13098 char *iPadStartS(char **string, size_t targetLength, const char *padString) {
  13099 
  13100   // sanity
  13101   if (!string or !*string) {
  13102     return(NULL);
  13103   }
  13104   if (strlen(*string) >= targetLength) {
  13105     return(*string);
  13106   }
  13107   if (!padString) {
  13108     return(NULL);
  13109   }
  13110   if (!strlen(padString)) {
  13111     return(*string);
  13112   }
  13113 
  13114   targetLength -= strlen(*string);
  13115 
  13116   char *pads = strdup(padString);;
  13117   if (targetLength > strlen(padString)) {
  13118     pErrorNULL(iRepeatS(&pads, targetLength/strlen(padString)+1));
  13119   }
  13120 
  13121   pErrorNULL(iSliceS(&pads, 0, (int64_t)targetLength));
  13122 
  13123   pErrorNULL(iAppendS(&pads, *string));
  13124   free(*string);
  13125   *string = pads;
  13126 
  13127   return(*string);
  13128 }
  13129 
  13130 /**
  13131  * pad start string
  13132  *
  13133  * This function pads the current string with a given string (repeated, if needed) until the
  13134  * resulting string reaches a given length. The padding is applied from the start (left) of the current
  13135  * string
  13136  *
  13137  * \param
  13138  * string
  13139  * \param
  13140  * targetLength The length of the resulting string once the current string has been padded. If the value is less
  13141  *              than the current string's length, the current string is returned as is
  13142  * \param
  13143  * padString The string to pad the current string with. If this string is too long to stay within the target
  13144  *           length, it will be truncated from the right. The current string is returned as is
  13145  *           when an empty string is supplied
  13146  * \return
  13147  * new string of the specified length with the pad string applied from the start
  13148  * NULL when dest, string or padString are NULL
  13149  */
  13150 char *bPadStartS(char *dest, const char *string, size_t targetLength, const char *padString) {
  13151 
  13152   // sanity
  13153   if (!dest or !string) {
  13154     return(NULL);
  13155   }
  13156   if (strlen(string) >= targetLength) {
  13157     strcpy(dest, string);
  13158     return(dest);
  13159   }
  13160   if (!padString) {
  13161     return(NULL);
  13162   }
  13163   if (!strlen(padString)) {
  13164     strcpy(dest, string);
  13165     return(dest);
  13166   }
  13167 
  13168   targetLength -= strlen(string);
  13169 
  13170   char *pads = strdup(padString);;
  13171   if (!pads) {
  13172     return(NULL);
  13173   }
  13174   if (targetLength > strlen(padString)) {
  13175     pErrorNULL(iRepeatS(&pads, targetLength/strlen(padString)+1));
  13176   }
  13177 
  13178   pErrorNULL(iSliceS(&pads, 0, (int64_t)targetLength));
  13179 
  13180   char *r = appendS(pads, string);
  13181   free(pads);
  13182   if (!r) {
  13183     return(NULL);
  13184   }
  13185 
  13186   strcpy(dest, r);
  13187   free(r);
  13188 
  13189   return(dest);
  13190 }
  13191 
  13192 /**
  13193  * pad start string
  13194  *
  13195  * This function pads the current string with a given string (repeated, if needed) until the
  13196  * resulting string reaches a given length. The padding is applied from the start (left) of the current
  13197  * string
  13198  *
  13199  * \param
  13200  * string
  13201  * \param
  13202  * targetLength The length of the resulting string once the current string has been padded. If the value is less
  13203  *              than the current string's length, the current string is returned as is
  13204  * \param
  13205  * padString The string to pad the current string with. If this string is too long to stay within the target
  13206  *           length, it will be truncated from the right. The current string is returned as is
  13207  *           when an empty string is supplied
  13208  * \return
  13209  * new string of the specified length with the pad string applied from the start
  13210  * NULL when dest, string or padString are NULL
  13211  */
  13212 char *bLPadStartS(char *dest, size_t destSize, const char *string, size_t targetLength, const char *padString) {
  13213 
  13214   // sanity
  13215   if (!dest or !string) {
  13216     return(NULL);
  13217   }
  13218   if (strlen(string) >= targetLength) {
  13219     pErrorNULL(strLCpy(dest, destSize, string));
  13220     return(dest);
  13221   }
  13222   if (!padString) {
  13223     return(NULL);
  13224   }
  13225   if (!strlen(padString)) {
  13226     pErrorNULL(strLCpy(dest, destSize, string));
  13227     return(dest);
  13228   }
  13229 
  13230   targetLength -= strlen(string);
  13231 
  13232   char *pads = strdup(padString);;
  13233   if (!pads) {
  13234     return(NULL);
  13235   }
  13236   if (targetLength > strlen(padString)) {
  13237     pErrorNULL(iRepeatS(&pads, targetLength/strlen(padString)+1));
  13238   }
  13239 
  13240   pErrorNULL(iSliceS(&pads, 0, (int64_t)targetLength));
  13241 
  13242   char *r = appendS(pads, string);
  13243   free(pads);
  13244   if (!r) {
  13245     return(NULL);
  13246   }
  13247 
  13248   pErrorNULL(strLCpy(dest, destSize, r));
  13249   free(r);
  13250 
  13251   return(dest);
  13252 }
  13253 
  13254 /**
  13255  * pad start string
  13256  *
  13257  * This function pads the current string with a given character (repeated, if needed) until the
  13258  * resulting string reaches a given length. The padding is applied from the start (left) of the current
  13259  * string
  13260  *
  13261  * \param
  13262  * string
  13263  * \param
  13264  * targetLength The length of the resulting string once the current string has been padded. If the value is less
  13265  *              than the current string's length, the current string is returned as is
  13266  * \param
  13267  * padChar The character to pad the current string with
  13268  * \return
  13269  * new string of the specified length with the pad character applied from the start (you must free the pointer)
  13270  * NULL when string is NULL
  13271  */
  13272 char *padStartCharS(const char *string, size_t targetLength, char padChar) {
  13273 
  13274   // sanity
  13275   if (!string) {
  13276     return(NULL);
  13277   }
  13278   if (strlen(string) >= targetLength) {
  13279     return(strdup(string));
  13280   }
  13281 
  13282   targetLength -= strlen(string);
  13283 
  13284   charToS(padString, padChar);
  13285 
  13286   char *pads = strdup(padString);;
  13287   if (!pads) {
  13288     return(NULL);
  13289   }
  13290   if (targetLength > strlen(padString)) {
  13291     pErrorNULL(iRepeatS(&pads, targetLength/strlen(padString)+1));
  13292   }
  13293 
  13294   pErrorNULL(iSliceS(&pads, 0, (int64_t)targetLength));
  13295 
  13296   char *r = appendS(pads, string);
  13297   free(pads);
  13298 
  13299   return(r);
  13300 }
  13301 
  13302 /**
  13303  * pad start string
  13304  *
  13305  * This function pads the current string with a given character (repeated, if needed) until the
  13306  * resulting string reaches a given length. The padding is applied from the start (left) of the current
  13307  * string
  13308  *
  13309  * \param
  13310  * string (this parameter is reallocated)
  13311  * \param
  13312  * targetLength The length of the resulting string once the current string has been padded. If the value is less
  13313  *              than the current string's length, the current string is returned as is
  13314  * \param
  13315  * padChar The character to pad the current string with
  13316  * \return
  13317  * new string of the specified length with the pad character applied from the start
  13318  * NULL when string is NULL
  13319  */
  13320 char *iPadStartCharS(char **string, size_t targetLength, char padChar) {
  13321 
  13322   // sanity
  13323   if (!string or !*string) {
  13324     return(NULL);
  13325   }
  13326   if (strlen(*string) >= targetLength) {
  13327     return(*string);
  13328   }
  13329 
  13330   targetLength -= strlen(*string);
  13331 
  13332   charToS(padString, padChar);
  13333 
  13334   char *pads = strdup(padString);;
  13335   if (targetLength > strlen(padString)) {
  13336     pErrorNULL(iRepeatS(&pads, targetLength/strlen(padString)+1));
  13337   }
  13338 
  13339   pErrorNULL(iSliceS(&pads, 0, (int64_t)targetLength));
  13340 
  13341   pErrorNULL(iAppendS(&pads, *string));
  13342   free(*string);
  13343   *string = pads;
  13344 
  13345   return(*string);
  13346 }
  13347 
  13348 /**
  13349  * pad start string
  13350  *
  13351  * This function pads the current string with a given character (repeated, if needed) until the
  13352  * resulting string reaches a given length. The padding is applied from the start (left) of the current
  13353  * string
  13354  *
  13355  * \param
  13356  * string
  13357  * \param
  13358  * targetLength The length of the resulting string once the current string has been padded. If the value is less
  13359  *              than the current string's length, the current string is returned as is
  13360  * \param
  13361  * padChar The character to pad the current string with
  13362  * \return
  13363  * new string of the specified length with the pad character applied from the start
  13364  * NULL when dest or string are NULL
  13365  */
  13366 char *bPadStartCharS(char *dest, const char *string, size_t targetLength, char padChar) {
  13367 
  13368   // sanity
  13369   if (!dest or !string) {
  13370     return(NULL);
  13371   }
  13372   if (strlen(string) >= targetLength) {
  13373     strcpy(dest, string);
  13374     return(dest);
  13375   }
  13376 
  13377   targetLength -= strlen(string);
  13378 
  13379   charToS(padString, padChar);
  13380 
  13381   char *pads = strdup(padString);;
  13382   if (!pads) {
  13383     return(NULL);
  13384   }
  13385   if (targetLength > strlen(padString)) {
  13386     pErrorNULL(iRepeatS(&pads, targetLength/strlen(padString)+1));
  13387   }
  13388 
  13389   pErrorNULL(iSliceS(&pads, 0, (int64_t)targetLength));
  13390 
  13391   char *r = appendS(pads, string);
  13392   free(pads);
  13393   if (!r) {
  13394     return(NULL);
  13395   }
  13396 
  13397   strcpy(dest, r);
  13398   free(r);
  13399 
  13400   return(dest);
  13401 }
  13402 
  13403 /**
  13404  * pad start string
  13405  *
  13406  * This function pads the current string with a given character (repeated, if needed) until the
  13407  * resulting string reaches a given length. The padding is applied from the start (left) of the current
  13408  * string
  13409  *
  13410  * \param
  13411  * string
  13412  * \param
  13413  * targetLength The length of the resulting string once the current string has been padded. If the value is less
  13414  *              than the current string's length, the current string is returned as is
  13415  * \param
  13416  * padChar The character to pad the current string with
  13417  * \return
  13418  * new string of the specified length with the pad character applied from the start
  13419  * NULL when dest or string are NULL
  13420  */
  13421 char *bLPadStartCharS(char *dest, size_t destSize, const char *string, size_t targetLength, char padChar) {
  13422 
  13423   // sanity
  13424   if (!dest or !string) {
  13425     return(NULL);
  13426   }
  13427   if (strlen(string) >= targetLength) {
  13428     pErrorNULL(strLCpy(dest, destSize, string));
  13429     return(dest);
  13430   }
  13431 
  13432   targetLength -= strlen(string);
  13433 
  13434   charToS(padString, padChar);
  13435 
  13436   char *pads = strdup(padString);;
  13437   if (!pads) {
  13438     return(NULL);
  13439   }
  13440   if (targetLength > strlen(padString)) {
  13441     pErrorNULL(iRepeatS(&pads, targetLength/strlen(padString)+1));
  13442   }
  13443 
  13444   pErrorNULL(iSliceS(&pads, 0, (int64_t)targetLength));
  13445 
  13446   char *r = appendS(pads, string);
  13447   free(pads);
  13448   if (!r) {
  13449     return(NULL);
  13450   }
  13451 
  13452   pErrorNULL(strLCpy(dest, destSize, r));
  13453   free(r);
  13454 
  13455   return(dest);
  13456 }
  13457 
  13458 /**
  13459  * length of string after padStart
  13460  *
  13461  * \param
  13462  * string
  13463  * \return
  13464  * length of string after padStart
  13465  * -1 when string is NULL
  13466  */
  13467 ssize_t padStartLenS(const char *string, size_t targetLength, const char *padString) {
  13468 
  13469   // sanity
  13470   if (!string) {
  13471     return(-1);
  13472   }
  13473   if (strlen(string) >= targetLength) {
  13474     return((ssize_t)strlen(string));
  13475   }
  13476   if (!padString) {
  13477     return(-1);
  13478   }
  13479   if (!strlen(padString)) {
  13480     return((ssize_t)strlen(string));
  13481   }
  13482 
  13483   return((ssize_t)targetLength);
  13484 }
  13485 
  13486 /**
  13487  * pad end string
  13488  *
  13489  * This function pads the current string with a given string (repeated, if needed) until the
  13490  * resulting string reaches a given length. The padding is applied from the end (right) of the current
  13491  * string
  13492  *
  13493  * \param
  13494  * string
  13495  * \param
  13496  * targetLength The length of the resulting string once the current string has been padded. If the value is lower
  13497  *              than the current string's length, the current string is returned as is
  13498  * \param
  13499  * padString The string to pad the current string with. If this string is too long to stay within the target
  13500  *           length, it will be truncated and the left-most part will be applied. The current string is returned as is
  13501  *           when an empty string is supplied
  13502  * \return
  13503  * new string of the specified length with the pad string applied at the end of the current string (you must free the pointer)
  13504  * NULL when string or padString are NULL
  13505  */
  13506 char *padEndS(const char *string, size_t targetLength, const char *padString) {
  13507 
  13508   // sanity
  13509   if (!string) {
  13510     return(NULL);
  13511   }
  13512   if (strlen(string) > targetLength) {
  13513     return(strdup(string));
  13514   }
  13515   if (!padString) {
  13516     return(NULL);
  13517   }
  13518   if (!strlen(padString)) {
  13519     return(strdup(string));
  13520   }
  13521 
  13522   targetLength -= strlen(string);
  13523 
  13524   char *pads = strdup(padString);;
  13525   if (!pads) {
  13526     return(NULL);
  13527   }
  13528   if (targetLength > strlen(padString)) {
  13529     pErrorNULL(iRepeatS(&pads, targetLength/strlen(padString)+1));
  13530   }
  13531 
  13532   pErrorNULL(iSliceS(&pads, 0, (int64_t)targetLength));
  13533 
  13534   char *r = appendS(string, pads);
  13535   free(pads);
  13536 
  13537   return(r);
  13538 }
  13539 
  13540 
  13541 
  13542 /**
  13543  * pad end string
  13544  *
  13545  * This function pads the current string with a given string (repeated, if needed) so that the
  13546  * resulting string reaches a given length. The padding is applied from the end (right) of the current
  13547  * string
  13548  *
  13549  * \param
  13550  * string (this parameter is reallocated)
  13551  * \param
  13552  * targetLength The length of the resulting string once the current string has been padded. If the value is lower
  13553  *              than the current string's length, the current string will be returned as is
  13554  * \param
  13555  * padString The string to pad the current string with. If this string is too long to stay within the target
  13556  *           length, it will be truncated and the left-most part will be applied. The current string is returned as is
  13557  *           when an empty string is supplied
  13558  * \return
  13559  * updated string of the specified length with the pad string applied at the end of the current string
  13560  * NULL when string or padString are NULL
  13561  */
  13562 char *iPadEndS(char **string, size_t targetLength, const char *padString) {
  13563 
  13564   // sanity
  13565   if (!string or !*string) {
  13566     return(NULL);
  13567   }
  13568   if (strlen(*string) > targetLength) {
  13569     return(*string);
  13570   }
  13571   if (!padString) {
  13572     return(NULL);
  13573   }
  13574   if (!strlen(padString)) {
  13575     return(*string);
  13576   }
  13577 
  13578   targetLength -= strlen(*string);
  13579 
  13580   char *pads = strdup(padString);;
  13581   if (!pads) {
  13582     return(NULL);
  13583   }
  13584   if (targetLength > strlen(padString)) {
  13585     pErrorNULL(iRepeatS(&pads, targetLength/strlen(padString)+1));
  13586   }
  13587 
  13588   pErrorNULL(iSliceS(&pads, 0, (int64_t)targetLength));
  13589 
  13590   pErrorNULL(iAppendS(string, pads));
  13591   free(pads);
  13592 
  13593   return(*string);
  13594 }
  13595 
  13596 /**
  13597  * pad end string
  13598  *
  13599  * This function pads the current string with a given string (repeated, if needed) so that the
  13600  * resulting string reaches a given length. The padding is applied from the end (right) of the current
  13601  * string
  13602  *
  13603  * \param
  13604  * string
  13605  * \param
  13606  * targetLength The length of the resulting string once the current string has been padded. If the value is lower
  13607  *              than the current string's length, the current string will be returned as is
  13608  * \param
  13609  * padString The string to pad the current string with. If this string is too long to stay within the target
  13610  *           length, it will be truncated and the left-most part will be applied. The current string is returned as is
  13611  *           when an empty string is supplied
  13612  * \return
  13613  * new string of the specified length with the pad string applied at the end of the current string
  13614  * NULL when dest, string or padString are NULL
  13615  */
  13616 char *bPadEndS(char *dest, const char *string, size_t targetLength, const char *padString) {
  13617 
  13618   // sanity
  13619   if (!dest or !string) {
  13620     return(NULL);
  13621   }
  13622   if (strlen(string) > targetLength) {
  13623     strcpy(dest, string);
  13624     return(dest);
  13625   }
  13626   if (!padString) {
  13627     return(NULL);
  13628   }
  13629   if (!strlen(padString)) {
  13630     strcpy(dest, string);
  13631     return(dest);
  13632   }
  13633 
  13634   targetLength -= strlen(string);
  13635 
  13636   char *pads = strdup(padString);;
  13637   if (!pads) {
  13638     return(NULL);
  13639   }
  13640   if (targetLength > strlen(padString)) {
  13641     pErrorNULL(iRepeatS(&pads, targetLength/strlen(padString)+1));
  13642   }
  13643 
  13644   pErrorNULL(iSliceS(&pads, 0, (int64_t)targetLength));
  13645 
  13646   char *r = appendS(string, pads);
  13647   free(pads);
  13648   if (!r) {
  13649     return(NULL);
  13650   }
  13651 
  13652   strcpy(dest, r);
  13653   free(r);
  13654 
  13655   return(dest);
  13656 }
  13657 
  13658 /**
  13659  * pad end string
  13660  *
  13661  * This function pads the current string with a given string (repeated, if needed) so that the
  13662  * resulting string reaches a given length. The padding is applied from the end (right) of the current
  13663  * string
  13664  *
  13665  * \param
  13666  * string
  13667  * \param
  13668  * targetLength The length of the resulting string once the current string has been padded. If the value is lower
  13669  *              than the current string's length, the current string will be returned as is
  13670  * \param
  13671  * padString The string to pad the current string with. If this string is too long to stay within the target
  13672  *           length, it will be truncated and the left-most part will be applied. The current string is returned as is
  13673  *           when an empty string is supplied
  13674  * \return
  13675  * new string of the specified length with the pad string applied at the end of the current string
  13676  * NULL when dest, string or padString are NULL
  13677  */
  13678 char *bLPadEndS(char *dest, size_t destSize, const char *string, size_t targetLength, const char *padString) {
  13679 
  13680   // sanity
  13681   if (!dest or !string) {
  13682     return(NULL);
  13683   }
  13684   if (strlen(string) > targetLength) {
  13685     pErrorNULL(strLCpy(dest, destSize, string));
  13686     return(dest);
  13687   }
  13688   if (!padString) {
  13689     return(NULL);
  13690   }
  13691   if (!strlen(padString)) {
  13692     pErrorNULL(strLCpy(dest, destSize, string));
  13693     return(dest);
  13694   }
  13695 
  13696   targetLength -= strlen(string);
  13697 
  13698   char *pads = strdup(padString);;
  13699   if (!pads) {
  13700     return(NULL);
  13701   }
  13702   if (targetLength > strlen(padString)) {
  13703     pErrorNULL(iRepeatS(&pads, targetLength/strlen(padString)+1));
  13704   }
  13705 
  13706   pErrorNULL(iSliceS(&pads, 0, (int64_t)targetLength));
  13707 
  13708   char *r = appendS(string, pads);
  13709   free(pads);
  13710   if (!r) {
  13711     return(NULL);
  13712   }
  13713 
  13714   pErrorNULL(strLCpy(dest, destSize, r));
  13715   free(r);
  13716 
  13717   return(dest);
  13718 }
  13719 
  13720 /**
  13721  * pad end string
  13722  *
  13723  * This function pads the current string with a given character (repeated, if needed) so that the
  13724  * resulting string reaches a given length. The padding is applied from the end (right) of the current
  13725  * string
  13726  *
  13727  * \param
  13728  * string
  13729  * \param
  13730  * targetLength The length of the resulting string once the current string has been padded. If the value is lower
  13731  *              than the current string's length, the current string will be returned as is
  13732  * \param
  13733  * padChar The character to pad the current string with
  13734  * \return
  13735  * new string of the specified length with the pad character applied at the end of the current string (you must free the pointer)
  13736  * NULL when string is NULL
  13737  */
  13738 char *padEndCharS(const char *string, size_t targetLength, char padChar) {
  13739 
  13740   // sanity
  13741   if (!string) {
  13742     return(NULL);
  13743   }
  13744   if (strlen(string) > targetLength) {
  13745     return(strdup(string));
  13746   }
  13747 
  13748   targetLength -= strlen(string);
  13749 
  13750   charToS(padString, padChar);
  13751 
  13752   char *pads = strdup(padString);;
  13753   if (!pads) {
  13754     return(NULL);
  13755   }
  13756   if (targetLength > strlen(padString)) {
  13757     pErrorNULL(iRepeatS(&pads, targetLength/strlen(padString)+1));
  13758   }
  13759 
  13760   pErrorNULL(iSliceS(&pads, 0, (int64_t)targetLength));
  13761 
  13762   char *r = appendS(string, pads);
  13763   free(pads);
  13764 
  13765   return(r);
  13766 }
  13767 
  13768 /**
  13769  * pad end string
  13770  *
  13771  * This function pads the current string with a given character (repeated, if needed) so that the
  13772  * resulting string reaches a given length. The padding is applied from the end (right) of the current
  13773  * string
  13774  *
  13775  * \param
  13776  * string (this parameter is reallocated)
  13777  * \param
  13778  * targetLength The length of the resulting string once the current string has been padded. If the value is lower
  13779  *              than the current string's length, the current string will be returned as is
  13780  * \param
  13781  * padChar The character to pad the current string with
  13782  * \return
  13783  * updated string of the specified length with the pad character applied at the end of the current string
  13784  * NULL when string is NULL
  13785  */
  13786 char *iPadEndCharS(char **string, size_t targetLength, char padChar) {
  13787 
  13788   // sanity
  13789   if (!string or !*string) {
  13790     return(NULL);
  13791   }
  13792   if (strlen(*string) > targetLength) {
  13793     return(*string);
  13794   }
  13795 
  13796   targetLength -= strlen(*string);
  13797 
  13798   charToS(padString, padChar);
  13799 
  13800   char *pads = strdup(padString);;
  13801   if (!pads) {
  13802     return(NULL);
  13803   }
  13804   if (targetLength > strlen(padString)) {
  13805     pErrorNULL(iRepeatS(&pads, targetLength/strlen(padString)+1));
  13806   }
  13807 
  13808   pErrorNULL(iSliceS(&pads, 0, (int64_t)targetLength));
  13809 
  13810   pErrorNULL(iAppendS(string, pads));
  13811   free(pads);
  13812 
  13813   return(*string);
  13814 }
  13815 
  13816 /**
  13817  * pad end string
  13818  *
  13819  * This function pads the current string with a given character (repeated, if needed) so that the
  13820  * resulting string reaches a given length. The padding is applied from the end (right) of the current
  13821  * string
  13822  *
  13823  * \param
  13824  * string
  13825  * \param
  13826  * targetLength The length of the resulting string once the current string has been padded. If the value is lower
  13827  *              than the current string's length, the current string will be returned as is
  13828  * \param
  13829  * padChar The character to pad the current string with
  13830  * \return
  13831  * new string of the specified length with the pad character applied at the end of the current string
  13832  * NULL when dest or string are NULL
  13833  */
  13834 char *bPadEndCharS(char *dest, const char *string, size_t targetLength, char padChar) {
  13835 
  13836   // sanity
  13837   if (!dest or !string) {
  13838     return(NULL);
  13839   }
  13840   if (strlen(string) > targetLength) {
  13841     strcpy(dest, string);
  13842     return(dest);
  13843   }
  13844 
  13845   targetLength -= strlen(string);
  13846 
  13847   charToS(padString, padChar);
  13848 
  13849   char *pads = strdup(padString);;
  13850   if (!pads) {
  13851     return(NULL);
  13852   }
  13853   if (targetLength > strlen(padString)) {
  13854     pErrorNULL(iRepeatS(&pads, targetLength/strlen(padString)+1));
  13855   }
  13856 
  13857   pErrorNULL(iSliceS(&pads, 0, (int64_t)targetLength));
  13858 
  13859   char *r = appendS(string, pads);
  13860   free(pads);
  13861   if (!r) {
  13862     return(NULL);
  13863   }
  13864 
  13865   strcpy(dest, r);
  13866   free(r);
  13867 
  13868   return(dest);
  13869 }
  13870 
  13871 /**
  13872  * pad end string
  13873  *
  13874  * This function pads the current string with a given character (repeated, if needed) so that the
  13875  * resulting string reaches a given length. The padding is applied from the end (right) of the current
  13876  * string
  13877  *
  13878  * \param
  13879  * string
  13880  * \param
  13881  * targetLength The length of the resulting string once the current string has been padded. If the value is lower
  13882  *              than the current string's length, the current string will be returned as is
  13883  * \param
  13884  * padChar The string to pad the current string with
  13885  * \return
  13886  * new string of the specified length with the pad character applied at the end of the current string
  13887  * NULL when dest, string or padString are NULL
  13888  */
  13889 char *bLPadEndCharS(char *dest, size_t destSize, const char *string, size_t targetLength, char padChar) {
  13890 
  13891   // sanity
  13892   if (!dest or !string) {
  13893     return(NULL);
  13894   }
  13895   if (strlen(string) > targetLength) {
  13896     pErrorNULL(strLCpy(dest, destSize, string));
  13897     return(dest);
  13898   }
  13899 
  13900   targetLength -= strlen(string);
  13901 
  13902   charToS(padString, padChar);
  13903 
  13904   char *pads = strdup(padString);;
  13905   if (!pads) {
  13906     return(NULL);
  13907   }
  13908   if (targetLength > strlen(padString)) {
  13909     pErrorNULL(iRepeatS(&pads, targetLength/strlen(padString)+1));
  13910   }
  13911 
  13912   pErrorNULL(iSliceS(&pads, 0, (int64_t)targetLength));
  13913 
  13914   char *r = appendS(string, pads);
  13915   free(pads);
  13916   if (!r) {
  13917     return(NULL);
  13918   }
  13919 
  13920   pErrorNULL(strLCpy(dest, destSize, r));
  13921   free(r);
  13922 
  13923   return(dest);
  13924 }
  13925 
  13926 
  13927 /**
  13928  * length of string after padEnd
  13929  *
  13930  * \param
  13931  * string
  13932  * \return
  13933  * length of string after padEnd
  13934  * -1 when string is NULL
  13935  */
  13936 ssize_t padEndLenS(const char *string, size_t targetLength, const char *padString) {
  13937 
  13938   // sanity
  13939   if (!string) {
  13940     return(-1);
  13941   }
  13942   if (strlen(string) > targetLength) {
  13943     return((ssize_t)strlen(string));
  13944   }
  13945   if (!padString) {
  13946     return(-1);
  13947   }
  13948   if (!strlen(padString)) {
  13949     return((ssize_t)strlen(string));
  13950   }
  13951 
  13952   return((ssize_t)targetLength);
  13953 }
  13954 
  13955 /**
  13956  * get string
  13957  *
  13958  * get char at python index
  13959  *
  13960  */
  13961 char getS(const char *string, int64_t index) {
  13962   int64_t len;
  13963 
  13964   if (!string) {
  13965     return(0);
  13966   }
  13967 
  13968   len = (int64_t)strlen(string);
  13969   if (index >= len) {
  13970     return(0);
  13971   }
  13972   if (index < -len) {
  13973     return(0);
  13974   }
  13975   if (index < 0) {
  13976     index = len + index;
  13977   }
  13978 
  13979   return(*(string+index));
  13980 }
  13981 
  13982 /**
  13983  * set string
  13984  *
  13985  * set char at python index
  13986  */
  13987 char *setS(char *string, int64_t index, char c) {
  13988   int64_t len;
  13989 
  13990   if (!string) {
  13991     return(NULL);
  13992   }
  13993 
  13994   len = (int64_t)strlen(string);
  13995   if (index >= len) {
  13996     return(NULL);
  13997   }
  13998   if (index < -len) {
  13999     return(NULL);
  14000   }
  14001   if (index < 0) {
  14002     index = len + index;
  14003   }
  14004 
  14005   *(string+index) = c;
  14006   return(string);
  14007 }
  14008 
  14009 /**
  14010  * swap characters in string
  14011  *
  14012  * \param
  14013  * string
  14014  * \param
  14015  * index1 index of character to swap
  14016  * \param
  14017  * index2 index of second character to swap
  14018  * \return
  14019  * new string with characters swapped at index1 and index2 (you must free this pointer)
  14020  * NULL when string is NULL or when index1 or index2 are outside the string
  14021  */
  14022 char *swapS(char *string, int64_t index1, int64_t index2) {
  14023   int64_t len;
  14024 
  14025   if (!string) {
  14026     return(NULL);
  14027   }
  14028 
  14029   len = (int64_t)strlen(string);
  14030   if (index1 >= len) {
  14031     return(NULL);
  14032   }
  14033   if (index1 < -len) {
  14034     return(NULL);
  14035   }
  14036   if (index1 < 0) {
  14037     index1 = len + index1;
  14038   }
  14039 
  14040   if (index2 >= len) {
  14041     return(NULL);
  14042   }
  14043   if (index2 < -len) {
  14044     return(NULL);
  14045   }
  14046   if (index2 < 0) {
  14047     index2 = len + index2;
  14048   }
  14049 
  14050   char *r = strdup(string);
  14051   if (!r) {
  14052     return(NULL);
  14053   }
  14054 
  14055   char tmp  = r[index1];
  14056   r[index1] = r[index2];
  14057   r[index2] = tmp;;
  14058 
  14059   return(r);
  14060 }
  14061 
  14062 /**
  14063  * swap characters in string
  14064  *
  14065  * \param
  14066  * string
  14067  * \param
  14068  * index1 index of character to swap
  14069  * \param
  14070  * index2 index of second character to swap
  14071  * \return
  14072  * updated string with characters swapped at index1 and index2 (you must free this pointer)
  14073  * NULL when string is NULL or when index1 or index2 are outside the string
  14074  */
  14075 char *iSwapS(char **string, int64_t index1, int64_t index2) {
  14076   int64_t len;
  14077 
  14078   if (!string or !*string) {
  14079     return(NULL);
  14080   }
  14081 
  14082   len = (int64_t)strlen(*string);
  14083   if (index1 >= len) {
  14084     return(NULL);
  14085   }
  14086   if (index1 < -len) {
  14087     return(NULL);
  14088   }
  14089   if (index1 < 0) {
  14090     index1 = len + index1;
  14091   }
  14092 
  14093   if (index2 >= len) {
  14094     return(NULL);
  14095   }
  14096   if (index2 < -len) {
  14097     return(NULL);
  14098   }
  14099   if (index2 < 0) {
  14100     index2 = len + index2;
  14101   }
  14102 
  14103   char tmp          = (*string)[index1];
  14104   (*string)[index1] = (*string)[index2];
  14105   (*string)[index2] = tmp;;
  14106 
  14107   return(*string);
  14108 }
  14109 
  14110 /**
  14111  * swap characters in string
  14112  *
  14113  * \param
  14114  * string
  14115  * \param
  14116  * index1 index of character to swap
  14117  * \param
  14118  * index2 index of second character to swap
  14119  * \return
  14120  * string with characters swapped at index1 and index2
  14121  * NULL when string is NULL or when index1 or index2 are outside the string
  14122  */
  14123 char *bSwapS(char *string, int64_t index1, int64_t index2) {
  14124   int64_t len;
  14125 
  14126   if (!string) {
  14127     return(NULL);
  14128   }
  14129 
  14130   len = (int64_t)strlen(string);
  14131   if (index1 >= len) {
  14132     return(NULL);
  14133   }
  14134   if (index1 < -len) {
  14135     return(NULL);
  14136   }
  14137   if (index1 < 0) {
  14138     index1 = len + index1;
  14139   }
  14140 
  14141   if (index2 >= len) {
  14142     return(NULL);
  14143   }
  14144   if (index2 < -len) {
  14145     return(NULL);
  14146   }
  14147   if (index2 < 0) {
  14148     index2 = len + index2;
  14149   }
  14150 
  14151   char tmp  = string[index1];
  14152   string[index1] = string[index2];
  14153   string[index2] = tmp;;
  14154 
  14155   return(string);
  14156 }
  14157 
  14158 /**
  14159  * swap characters in string
  14160  *
  14161  * if string's length is more than size then size is the end of string
  14162  * and the indexes are computed relative to size
  14163  *
  14164  * \param
  14165  * string
  14166  * \param
  14167  * size string buffer size
  14168  * \param
  14169  * index1 index of character to swap
  14170  * \param
  14171  * index2 index of second character to swap
  14172  * \return
  14173  * string with characters swapped at index1 and index2
  14174  * NULL when string is NULL or when index1 or index2 are outside the string
  14175   */
  14176 char *bLSwapS(char *string, size_t size, int64_t index1, int64_t index2) {
  14177   int64_t len;
  14178 
  14179   if (!string) {
  14180     return(NULL);
  14181   }
  14182 
  14183   if (!size) {
  14184     return(string);
  14185   }
  14186 
  14187   len = (int64_t)strlen(string);
  14188 
  14189   if ((size_t)len+1 > size) {
  14190     len = (int64_t)(size-1);
  14191   }
  14192 
  14193   if (index1 >= len) {
  14194     return(NULL);
  14195   }
  14196   if (index1 < -len) {
  14197     return(NULL);
  14198   }
  14199   if (index1 < 0) {
  14200     index1 = len + index1;
  14201   }
  14202 
  14203   if (index2 >= len) {
  14204     return(NULL);
  14205   }
  14206   if (index2 < -len) {
  14207     return(NULL);
  14208   }
  14209   if (index2 < 0) {
  14210     index2 = len + index2;
  14211   }
  14212 
  14213   char tmp  = string[index1];
  14214   string[index1] = string[index2];
  14215   string[index2] = tmp;;
  14216 
  14217   return(string);
  14218 }
  14219 
  14220 
  14221 /**
  14222  * slice String
  14223  * return new string which is the string between start and end
  14224  * negative indexes are allowed
  14225  *
  14226  * (copy substring from start to end)
  14227  *
  14228  * \param
  14229  *   string to slice
  14230  *   start: start index, must be in the string
  14231  *   end: end index, must be in the string after start
  14232  * \return
  14233  *   new sliced string (you must free the pointer)
  14234  *   "" when start=end
  14235  *   NULL when start and end are not set correctly
  14236  */
  14237 char *sliceS(const char *string, int64_t start, int64_t end) {
  14238   char *s = NULL;
  14239   int64_t len;
  14240 
  14241   // sanity checks
  14242   if (!string) {
  14243     return(NULL);
  14244   }
  14245 
  14246   len = (int64_t)strlen(string);
  14247   if (start > len) {
  14248     return(NULL);
  14249   }
  14250   if (end > len) {
  14251     end = len;
  14252   }
  14253   if (start <= -len) {
  14254     start = -len;
  14255   }
  14256   if (end <= -len) {
  14257     return(NULL);
  14258   }
  14259   if (start < 0) {
  14260     start = len + start;
  14261   }
  14262   if (end <= 0) {
  14263     end = len + end;
  14264   }
  14265   if (end < start) {
  14266     return(NULL);
  14267   }
  14268 
  14269   if (start == end) {
  14270     emptyS(s)
  14271   }
  14272   else {
  14273     // start < end < len
  14274     // copy range to a new string
  14275     int64_t n;
  14276     n = end - start;
  14277     s = MALLOC((size_t)(n+1));
  14278     if (!s) {
  14279       return(NULL);//LCOV_EXCL_LINE
  14280     }
  14281     s = strncpy(s, string+start, (size_t)n);
  14282     s[n] = 0;
  14283   }
  14284 
  14285   return(s);
  14286 }
  14287 
  14288 /**
  14289  * slice String
  14290  * return string which is the string between start and end
  14291  * negative indexes are allowed
  14292  *
  14293  * \param
  14294  *   string to slice (this parameter is reallocated)
  14295  *   start: start index, must be in the string
  14296  *   end: end index, must be in the string after start
  14297  * \return
  14298  *   sliced string (you must free the pointer)
  14299  *   "" when start=end
  14300  *   NULL unchanged string when start and end are not set correctly
  14301  */
  14302 char *iSliceS(char **string, int64_t start, int64_t end) {
  14303   char *s = NULL;
  14304   int64_t len;
  14305 
  14306   // sanity checks
  14307   if (!string || !*string) {
  14308     return(NULL);
  14309   }
  14310 
  14311   len = (int64_t)strlen(*string);
  14312   if (start > len) {
  14313     free(*string);
  14314     emptyS(*string);
  14315     return(NULL);
  14316   }
  14317   if (end > len) {
  14318     end = len;
  14319   }
  14320   if (start <= -len) {
  14321     start = -len;
  14322   }
  14323   if (end <= -len) {
  14324     free(*string);
  14325     emptyS(*string);
  14326     return(NULL);
  14327   }
  14328   if (start < 0) {
  14329     start = len + start;
  14330   }
  14331   if (end <= 0) {
  14332     end = len + end;
  14333   }
  14334   if (end < start) {
  14335     free(*string);
  14336     emptyS(*string);
  14337     return(NULL);
  14338   }
  14339 
  14340   if (start == end) {
  14341     emptyS(s);
  14342   }
  14343   else {
  14344     // start < end < len
  14345     // copy range to a new string
  14346     int64_t n;
  14347     n = end - start;
  14348     s = MALLOC((size_t)(n+1));
  14349     if (!s) {
  14350       return(NULL);
  14351     }
  14352     s = strncpy(s, (*string)+start, (size_t)n);
  14353     s[n] = 0;
  14354   }
  14355 
  14356   free(*string);
  14357   *string = s;
  14358   return(s);
  14359 }
  14360 
  14361 /**
  14362  * buffer slice String
  14363  * return string which is the string between start and end
  14364  * negative indexes are allowed
  14365  *
  14366  * \param
  14367  *   string to slice
  14368  *   start: start index, must be in the string
  14369  *   end: end index, must be in the string after start
  14370  * \return
  14371  *   sliced string
  14372  *   "" when start=end
  14373  *   NULL unchanged string when start and end are not set correctly
  14374  */
  14375 char *bSliceS(char *string, int64_t start, int64_t end) {
  14376   int64_t len;
  14377 
  14378   // sanity checks
  14379   if (!string) {
  14380     return(NULL);
  14381   }
  14382 
  14383   len = (int64_t)strlen(string);
  14384   if (start > len) {
  14385     bEmptyS(string);
  14386     return(NULL);
  14387   }
  14388   if (end > len) {
  14389     end = len;
  14390   }
  14391   if (start <= -len) {
  14392     start = -len;
  14393   }
  14394   if (end <= -len) {
  14395     bEmptyS(string);
  14396     return(NULL);
  14397   }
  14398   if (start < 0) {
  14399     start = len + start;
  14400   }
  14401   if (end <= 0) {
  14402     end = len + end;
  14403   }
  14404   if (end < start) {
  14405     bEmptyS(string);
  14406     return(NULL);
  14407   }
  14408 
  14409   if (start == end) {
  14410     bEmptyS(string);
  14411   }
  14412   else {
  14413     // start < end < len
  14414     // copy range to a new string
  14415     int64_t n;
  14416     n = end - start;
  14417     if (start) {
  14418       memmove(string, string+start, (size_t)n);
  14419     }
  14420     string[n] = 0;
  14421   }
  14422 
  14423   return(string);
  14424 }
  14425 
  14426 /**
  14427  * buffer size slice String
  14428  * return string which is the string between start and end
  14429  * negative indexes are allowed
  14430  *
  14431  * \param
  14432  *   string to slice
  14433  * \param
  14434  *   stringSize string buffer size
  14435  * \param
  14436  *   start: start index, must be in the string
  14437  * \param
  14438  *   end: end index, must be in the string after start
  14439  * \return
  14440  *   sliced string
  14441  *   "" when start=end
  14442  *   NULL unchanged string when start and end are not set correctly
  14443  */
  14444 char *bLSliceS(char *string, size_t stringSize, int64_t start, int64_t end) {
  14445   int64_t len;
  14446 
  14447   // sanity checks
  14448   if (!string || !stringSize) {
  14449     return(NULL);
  14450   }
  14451 
  14452   len = (int64_t)strlen(string);
  14453   if ((size_t)len+1 > stringSize) {
  14454     len = (int64_t)(stringSize - 1);
  14455   }
  14456 
  14457   // compute string length without NUL
  14458   if (start > len) {
  14459     bEmptyS(string);
  14460     return(NULL);
  14461   }
  14462   if (end > len) {
  14463     end = len;
  14464   }
  14465   if (start <= -len) {
  14466     start = -len;
  14467   }
  14468   if (end <= -len) {
  14469     bEmptyS(string);
  14470     return(NULL);
  14471   }
  14472   if (start < 0) {
  14473     start = len + start;
  14474   }
  14475   if (end <= 0) {
  14476     end = len + end;
  14477   }
  14478   if (end < start) {
  14479     bEmptyS(string);
  14480     return(NULL);
  14481   }
  14482 
  14483   if (start == end) {
  14484     bEmptyS(string);
  14485   }
  14486   else {
  14487     // start < end < len
  14488     // copy range to a new string
  14489     int64_t n;
  14490     n = end - start;
  14491     if (start) {
  14492       memmove(string, string+start, (size_t)n);
  14493     }
  14494     string[n] = 0;
  14495   }
  14496 
  14497   return(string);
  14498 }
  14499 
  14500 /**
  14501  * Crop String
  14502  * return a new string with characters from start and end in string
  14503  * and delete characters from start to end in the original string
  14504  * negative indexes are allowed
  14505  *
  14506  * \param
  14507  *   string
  14508  * \param
  14509  *   start index, must be in the list
  14510  * \param
  14511  *   end index, must be in the list
  14512  * \return
  14513  *   new sliced string (you must free the pointer with free)
  14514  *   empty list when start=end
  14515  *   unchanged when list is empty
  14516  *   unchanged when list is NULL or when start and end are not set correctly
  14517  *   NULL error
  14518  */
  14519 char *cropS(char *string, int64_t start, int64_t end) {
  14520   char *l = NULL;
  14521   int64_t len;
  14522 
  14523   // sanity checks
  14524   if (!string) {
  14525     return(NULL);
  14526   }
  14527 
  14528   len = (int64_t)strlen(string);
  14529 
  14530   if (start > len) {
  14531     return(NULL);
  14532   }
  14533   if (end > len) {
  14534     end = len;
  14535   }
  14536   if (start <= -len) {
  14537     start = -len;
  14538   }
  14539   if (end <= -len) {
  14540     return(NULL);
  14541   }
  14542   if (start < 0) {
  14543     start = len + start;
  14544   }
  14545   if (end <= 0) {
  14546     end = len + end;
  14547   }
  14548   if (end < start) {
  14549     return(NULL);
  14550   }
  14551 
  14552   if (start < end) {
  14553     // start < end < len
  14554     int64_t n;
  14555     n = end - start;
  14556     l = MALLOC((size_t)(n+1) * sizeof(char));
  14557     if (!l) {
  14558       return(NULL);
  14559     }
  14560     pErrorNULL(strLCpy(l, (size_t)(n+1) * sizeof(char), string+start));
  14561     memmove(string+start, string+end, (size_t)(len-end+1));
  14562   }
  14563   else {
  14564     // start = end, return empty string
  14565     l = strdup("");
  14566   }
  14567 
  14568   return(l);
  14569 }
  14570 
  14571 /**
  14572  * Crop String
  14573  * return a new string with characters from start and end in string
  14574  * and delete characters from start to end in the original string
  14575  * negative indexes are allowed
  14576  *
  14577  * \param
  14578  *   string
  14579  * \param
  14580  *   start index, must be in the list
  14581  * \param
  14582  *   end index, must be in the list
  14583  * \return
  14584  *   new sliced string (you must free the pointer with free)
  14585  *   empty list when start=end
  14586  *   unchanged when list is empty
  14587  *   unchanged when list is NULL or when start and end are not set correctly
  14588  *   NULL error
  14589  */
  14590 char *iCropS(char **string, int64_t start, int64_t end) {
  14591   char *l = NULL;
  14592   int64_t len;
  14593 
  14594   // sanity checks
  14595   if (!string || !*string) {
  14596     return(NULL);
  14597   }
  14598 
  14599   len = (int64_t)strlen(*string);
  14600 
  14601   if (start > len) {
  14602     return(NULL);
  14603   }
  14604   if (end > len) {
  14605     end = len;
  14606   }
  14607   if (start <= -len) {
  14608     start = -len;
  14609   }
  14610   if (end <= -len) {
  14611     return(NULL);
  14612   }
  14613   if (start < 0) {
  14614     start = len + start;
  14615   }
  14616   if (end <= 0) {
  14617     end = len + end;
  14618   }
  14619   if (end < start) {
  14620     return(NULL);
  14621   }
  14622 
  14623   if (start < end) {
  14624     // start < end < len
  14625     int64_t n;
  14626     n = end - start;
  14627     l = MALLOC((size_t)(n+1) * sizeof(char));
  14628     if (!l) {
  14629       return(NULL);
  14630     }
  14631     pErrorNULL(strLCpy(l, (size_t)(n+1) * sizeof(char), *string+start));
  14632     memmove(*string+start, *string+end, (size_t)(len-end+1));
  14633   }
  14634   else {
  14635     // start = end, return empty string
  14636     l = strdup("");
  14637   }
  14638 
  14639   return(l);
  14640 }
  14641 
  14642 char cropElemS(char *string, int64_t index) {
  14643   int64_t len;
  14644 
  14645   if (!string) {
  14646     return(0);
  14647   }
  14648 
  14649   len = (int64_t)strlen(string);
  14650   if (index >= len) {
  14651     return(0);
  14652   }
  14653   if (index < -len) {
  14654     return(0);
  14655   }
  14656   if (index < 0) {
  14657     index = len + index;
  14658   }
  14659 
  14660   char r = *(string+index);
  14661 
  14662   if (index == len-1) {
  14663     string[len-1] = 0;
  14664   }
  14665   else {
  14666     memmove(string+index, string+index+1, (size_t)(len - index));
  14667   }
  14668 
  14669   return(r);
  14670 }
  14671 
  14672 char iCropElemS(char **string, int64_t index) {
  14673 
  14674   if (!string) {
  14675     return(0);
  14676   }
  14677 
  14678   return(cropElemS(*string, index));
  14679 }
  14680 
  14681 /**
  14682  * insert string in string at index
  14683  *
  14684  * return new string with toInsert at index
  14685  * negative indexes are allowed
  14686  * index -1 is the end of the array and is equivalent to index len
  14687  *
  14688  * \param
  14689  *   string
  14690  * \param
  14691  *   index in string
  14692  * \param
  14693  *   toInsert string
  14694  * \return
  14695  *   new string (you must free the pointer)
  14696  *   NULL when string is NULL or invalid index
  14697  */
  14698 char *insertS(const char *string, int64_t index, const char *toInsert) {
  14699   char *r = NULL;
  14700   int64_t len;
  14701 
  14702   // sanity checks
  14703   if (!string) {
  14704     if (index || !toInsert) {
  14705       return(NULL);
  14706     }
  14707     return(strdup(toInsert));
  14708   }
  14709   if (!toInsert || isEmptyS(toInsert)) {
  14710     return(strdup(string));
  14711   }
  14712 
  14713   len = (int64_t)strlen(string);
  14714   if (!len && index == -1) {
  14715     // empty string, index -1 is equal to 0
  14716     index = 0;
  14717   }
  14718   bool neg = false;
  14719   if (index < 0) {
  14720     neg = true;
  14721   }
  14722 
  14723   if (index > len) {
  14724     return(NULL);
  14725   }
  14726   if (neg) {
  14727     index++;
  14728   }
  14729   if (index < -len) {
  14730     return(NULL);
  14731   }
  14732   if (neg) {
  14733     index = len + index;
  14734   }
  14735 
  14736 
  14737   if (index == 0) {
  14738     // insert at beginning
  14739     return(catS(toInsert, string));
  14740   }
  14741 
  14742   char *s1 = sliceS(string, 0, index);
  14743   char *s2 = sliceS(string, index, 0);
  14744   r        = catS(s1, toInsert, s2);
  14745   freeManyS(s1,s2);
  14746 
  14747   return(r);
  14748 }
  14749 
  14750 /**
  14751  * insert string in string at index and free toInsert when successful
  14752  *
  14753  * return new string with toInsert at index
  14754  * negative indexes are allowed
  14755  * index -1 is the end of the array and is equivalent to index len
  14756  *
  14757  * \param
  14758  *   string
  14759  * \param
  14760  *   index in string
  14761  * \param
  14762  *   toInsert string
  14763  * \return
  14764  *   new string (you must free the pointer)
  14765  *   NULL when string is NULL or invalid index
  14766  */
  14767 char *insertNFreeS(const char *string, int64_t index, char *toInsert) {
  14768   char *r = NULL;
  14769   int64_t len;
  14770 
  14771   // sanity checks
  14772   if (!string) {
  14773     if (index) {
  14774       return(NULL);
  14775     }
  14776     if (!toInsert) {
  14777       return(NULL);
  14778     }
  14779     r = strdup(toInsert);
  14780     free(toInsert);
  14781     return(r);
  14782   }
  14783 
  14784   len = (int64_t)strlen(string);
  14785   if (!len && index == -1) {
  14786     // empty string, index -1 is equal to 0
  14787     index = 0;
  14788   }
  14789   bool neg = false;
  14790   if (index < 0) {
  14791     neg = true;
  14792   }
  14793 
  14794   if (index > len) {
  14795     return(NULL);
  14796   }
  14797   if (neg) {
  14798     index++;
  14799   }
  14800   if (index < -len) {
  14801     return(NULL);
  14802   }
  14803   if (neg) {
  14804     index = len + index;
  14805   }
  14806 
  14807 
  14808   if (!toInsert || isEmptyS(toInsert)) {
  14809     free(toInsert);
  14810     return(strdup(string));
  14811   }
  14812 
  14813   if (index == 0) {
  14814     // insert at beginning
  14815     r = catS(toInsert, string);
  14816     free(toInsert);
  14817     return(r);
  14818   }
  14819 
  14820   char *s1 = sliceS(string, 0, index);
  14821   char *s2 = sliceS(string, index, 0);
  14822   r        = catS(s1, toInsert, s2);
  14823   freeManyS(s1,s2, toInsert);
  14824 
  14825   return(r);
  14826 }
  14827 
  14828 /**
  14829  * insert string in string at index
  14830  *
  14831  * return string with toInsert at index
  14832  * negative indexes are allowed
  14833  * index -1 is the end of the array and is equivalent to index len
  14834  *
  14835  * \param
  14836  *   string (this parameter is reallocated)
  14837  * \param
  14838  *   index in string
  14839  * \param
  14840  *   toInsert string
  14841  * \return
  14842  *   modified string (you must free the pointer)
  14843  *   NULL unchanged string when string is NULL or invalid index
  14844  */
  14845 char *iInsertS(char **string, int64_t index, const char *toInsert) {
  14846   char *r = NULL;
  14847   int64_t len;
  14848 
  14849   // sanity checks
  14850   if (!string) {
  14851     return(NULL);
  14852   }
  14853   if (!*string) {
  14854     if (index) {
  14855       return(NULL);
  14856     }
  14857     r       = strdup(toInsert);
  14858     *string = r;
  14859     return(r);
  14860   }
  14861 
  14862   len = (int64_t)strlen(*string);
  14863 
  14864   if (!len && index == -1) {
  14865     // empty string, index -1 is equal to 0
  14866     index = 0;
  14867   }
  14868   bool neg = false;
  14869   if (index < 0) {
  14870     neg = true;
  14871   }
  14872 
  14873   if (index > len) {
  14874     return(NULL);
  14875   }
  14876   if (neg) {
  14877     index++;
  14878   }
  14879   if (index < -len) {
  14880     return(NULL);
  14881   }
  14882   if (neg) {
  14883     index = len + index;
  14884   }
  14885 
  14886 
  14887   if (!toInsert || isEmptyS(toInsert)) {
  14888     return(*string);
  14889   }
  14890 
  14891   if (index == 0) {
  14892     // insert at beginning
  14893     r = catS(toInsert, *string);
  14894   }
  14895   else {
  14896     char *s1 = sliceS(*string, 0, index);
  14897     char *s2 = sliceS(*string, index, 0);
  14898     r        = catS(s1, toInsert, s2);
  14899     freeManyS(s1,s2);
  14900   }
  14901 
  14902   free(*string);
  14903   *string = r;
  14904   return(r);
  14905 }
  14906 
  14907 /**
  14908  * insert string in string at index and free toInsert
  14909  *
  14910  * return string with toInsert at index
  14911  * negative indexes are allowed
  14912  * index -1 is the end of the array and is equivalent to index len
  14913  *
  14914  * \param
  14915  *   string (this parameter is reallocated)
  14916  * \param
  14917  *   index in string
  14918  * \param
  14919  *   toInsert string
  14920  * \return
  14921  *   modified string (you must free the pointer)
  14922  *   NULL unchanged string when string is NULL or invalid index
  14923  */
  14924 char *iInsertNFreeS(char **string, int64_t index, char *toInsert) {
  14925   char *r = NULL;
  14926   int64_t len;
  14927 
  14928   // sanity checks
  14929   if (!string) {
  14930     return(NULL);
  14931   }
  14932   if (!*string) {
  14933     if (index) {
  14934       return(NULL);
  14935     }
  14936     r       = strdup(toInsert);
  14937     free(toInsert);
  14938     *string = r;
  14939     return(r);
  14940   }
  14941 
  14942   len = (int64_t)strlen(*string);
  14943 
  14944   if (!len && index == -1) {
  14945     // empty string, index -1 is equal to 0
  14946     index = 0;
  14947   }
  14948   bool neg = false;
  14949   if (index < 0) {
  14950     neg = true;
  14951   }
  14952 
  14953   if (index > len) {
  14954     return(NULL);
  14955   }
  14956   if (neg) {
  14957     index++;
  14958   }
  14959   if (index < -len) {
  14960     return(NULL);
  14961   }
  14962   if (neg) {
  14963     index = len + index;
  14964   }
  14965 
  14966 
  14967   if (!toInsert || isEmptyS(toInsert)) {
  14968     free(toInsert);
  14969     return(*string);
  14970   }
  14971 
  14972   if (index == 0) {
  14973     // insert at beginning
  14974     r = catS(toInsert, *string);
  14975   }
  14976   else {
  14977     char *s1 = sliceS(*string, 0, index);
  14978     char *s2 = sliceS(*string, index, 0);
  14979     r        = catS(s1, toInsert, s2);
  14980     freeManyS(s1,s2);
  14981   }
  14982   free(toInsert);
  14983 
  14984   free(*string);
  14985   *string = r;
  14986   return(r);
  14987 }
  14988 
  14989 /**
  14990  * buffer insert string in string at index
  14991  *
  14992  * return string with toInsert at index
  14993  * negative indexes are allowed
  14994  * index -1 is the end of the array and is equivalent to index len
  14995  *
  14996  * \param
  14997  *   string
  14998  * \param
  14999  *   index in string
  15000  * \param
  15001  *   toInsert string
  15002  * \return
  15003  *   modified string
  15004  *   NULL unchanged string when string is NULL or invalid index
  15005  */
  15006 char *bInsertS(char *string, int64_t index, const char *toInsert) {
  15007   int64_t len;
  15008 
  15009   // sanity checks
  15010   if (!string) {
  15011     return(NULL);
  15012   }
  15013   len = (int64_t)strlen(string);
  15014 
  15015   if (!len && index == -1) {
  15016     // empty string, index -1 is equal to 0
  15017     index = 0;
  15018   }
  15019   bool neg = false;
  15020   if (index < 0) {
  15021     neg = true;
  15022   }
  15023 
  15024   if (index > len) {
  15025     return(NULL);
  15026   }
  15027   if (neg) {
  15028     index++;
  15029   }
  15030   if (index < -len) {
  15031     return(NULL);
  15032   }
  15033   if (neg) {
  15034     index = len + index;
  15035   }
  15036 
  15037 
  15038   if (!toInsert || isEmptyS(toInsert)) {
  15039     return(string);
  15040   }
  15041 
  15042   if (index == 0) {
  15043     // insert at beginning
  15044     char *s = alloca((size_t)(len+1));;
  15045     strcpy(s, string);
  15046     pErrorNULL(bCatS(string, toInsert, s));
  15047   }
  15048   else {
  15049     char *s1 = alloca((size_t)(index+1));;
  15050     pErrorNULL(strLCpy(s1, (size_t)(index+1), string));
  15051     char *s2 = alloca((size_t)(len-index+1));;
  15052     strcpy(s2, string+index);
  15053     pErrorNULL(bCatS(string, s1, toInsert, s2));
  15054   }
  15055   return(string);
  15056 }
  15057 
  15058 /**
  15059  * buffer size insert string in string at index
  15060  *
  15061  * return string with toInsert at index
  15062  * negative indexes are allowed
  15063  * index -1 is the end of the array and is equivalent to index len
  15064  *
  15065  * \param
  15066  *   string
  15067  * \param
  15068  *   index in string
  15069  * \param
  15070  *   toInsert string
  15071  * \return
  15072  *   modified string
  15073  *   NULL unchanged string when string is NULL or invalid index
  15074  */
  15075 char *bLInsertS(char *string, size_t stringSize, int64_t index, const char *toInsert) {
  15076   int64_t len;
  15077 
  15078   // sanity checks
  15079   if (!string) {
  15080     return(NULL);
  15081   }
  15082 
  15083   if (!stringSize) {
  15084     // string size is 0 - no change
  15085     return(string);
  15086   }
  15087 
  15088   len = (int64_t)strlen(string);
  15089 
  15090   if (!len && index == -1) {
  15091     // empty string, index -1 is equal to 0
  15092     index = 0;
  15093   }
  15094   bool neg = false;
  15095   if (index < 0) {
  15096     neg = true;
  15097   }
  15098 
  15099   if (index > len) {
  15100     return(NULL);
  15101   }
  15102   if (neg) {
  15103     index++;
  15104   }
  15105   if (index < -len) {
  15106     return(NULL);
  15107   }
  15108   if (neg) {
  15109     index = len + index;
  15110   }
  15111 
  15112 
  15113   if (!toInsert || isEmptyS(toInsert)) {
  15114     return(string);
  15115   }
  15116 
  15117   if (index == 0) {
  15118     // insert at beginning
  15119     char *s = alloca((size_t)(len+1));;
  15120     strcpy(s, string);
  15121     pErrorNULL(bLCatS(string, stringSize, toInsert, s));
  15122   }
  15123   else {
  15124     char *s1 = alloca((size_t)(index+1));;
  15125     pErrorNULL(strLCpy(s1, (size_t)(index+1), string));
  15126     char *s2 = alloca((size_t)(len-index+1));;
  15127     strcpy(s2, string+index);
  15128     pErrorNULL(bLCatS(string, stringSize, s1, toInsert, s2));
  15129   }
  15130   return(string);
  15131 }
  15132 
  15133 /**
  15134  * inject a char in string at index
  15135  *
  15136  * return new string with toInject at index
  15137  * negative indexes are allowed
  15138  * index -1 is the end of the array and is equivalent to index len
  15139  *
  15140  * \param
  15141  *   string
  15142  * \param
  15143  *   index in string
  15144  * \param
  15145  *   toInject char
  15146  * \return
  15147  *   new string (you must free the pointer)
  15148  *   NULL when string is NULL or invalid index
  15149  */
  15150 char *injectS(const char *string, int64_t index, char toInject) {
  15151   char *r = NULL;
  15152   int64_t len;
  15153 
  15154   // sanity checks
  15155   if (!string) {
  15156     if (index) {
  15157       return(NULL);
  15158     }
  15159     charToS(inject, toInject);
  15160     return(strdup(inject));
  15161   }
  15162 
  15163   len = (int64_t)strlen(string);
  15164 
  15165   if (!len && index == -1) {
  15166     // empty string, index -1 is equal to 0
  15167     index = 0;
  15168   }
  15169   bool neg = false;
  15170   if (index < 0) {
  15171     neg = true;
  15172   }
  15173 
  15174   if (index > len) {
  15175     return(NULL);
  15176   }
  15177   if (neg) {
  15178     index++;
  15179   }
  15180   if (index < -len) {
  15181     return(NULL);
  15182   }
  15183   if (neg) {
  15184     index = len + index;
  15185   }
  15186 
  15187 
  15188   charToS(inject, toInject);
  15189 
  15190   if (index == 0) {
  15191     // inject at beginning
  15192     return(catS(inject, string));
  15193   }
  15194 
  15195   char *s1 = sliceS(string, 0, index);
  15196   char *s2 = sliceS(string, index, 0);
  15197   r        = catS(s1, inject, s2);
  15198   freeManyS(s1,s2);
  15199 
  15200   return(r);
  15201 }
  15202 
  15203 /**
  15204  * inject a char in string at index
  15205  *
  15206  * return string with toInject at index
  15207  * negative indexes are allowed
  15208  * index -1 is the end of the array and is equivalent to index len
  15209  *
  15210  * \param
  15211  *   string (this parameter is reallocated)
  15212  * \param
  15213  *   index in string
  15214  * \param
  15215  *   toInject char
  15216  * \return
  15217  *   modified string (you must free the pointer)
  15218  *   NULL unchanged string when string is NULL or invalid index
  15219  */
  15220 char *iInjectS(char **string, int64_t index, char toInject) {
  15221   char *r = NULL;
  15222   int64_t len;
  15223 
  15224   // sanity checks
  15225   if (!string) {
  15226     return(NULL);
  15227   }
  15228   if (!*string) {
  15229     if (index) {
  15230       return(NULL);
  15231     }
  15232     charToS(inject, toInject);
  15233     *string = strdup(inject);
  15234     return(*string);
  15235   }
  15236 
  15237   len = (int64_t)strlen(*string);
  15238 
  15239   if (!len && index == -1) {
  15240     // empty string, index -1 is equal to 0
  15241     index = 0;
  15242   }
  15243   bool neg = false;
  15244   if (index < 0) {
  15245     neg = true;
  15246   }
  15247 
  15248   if (index > len) {
  15249     return(NULL);
  15250   }
  15251   if (neg) {
  15252     index++;
  15253   }
  15254   if (index < -len) {
  15255     return(NULL);
  15256   }
  15257   if (neg) {
  15258     index = len + index;
  15259   }
  15260 
  15261 
  15262   charToS(inject, toInject);
  15263 
  15264   if (index == 0) {
  15265     // inject at beginning
  15266     r = catS(inject, *string);
  15267   }
  15268   else {
  15269     char *s1 = sliceS(*string, 0, index);
  15270     char *s2 = sliceS(*string, index, 0);
  15271     r        = catS(s1, inject, s2);
  15272     freeManyS(s1,s2);
  15273   }
  15274 
  15275   free(*string);
  15276   *string = r;
  15277   return(r);
  15278 }
  15279 
  15280 /**
  15281  * buffer inject a char in string at index
  15282  *
  15283  * return string with toInject at index
  15284  * negative indexes are allowed
  15285  * index -1 is the end of the array and is equivalent to index len
  15286  *
  15287  * \param
  15288  *   string
  15289  * \param
  15290  *   index in string
  15291  * \param
  15292  *   toInject char
  15293  * \return
  15294  *   modified string
  15295  *   NULL unchanged string when string is NULL or invalid index
  15296  */
  15297 char *bInjectS(char *string, int64_t index, char toInject) {
  15298   int64_t len;
  15299 
  15300   // sanity checks
  15301   if (!string) {
  15302     return(NULL);
  15303   }
  15304 
  15305   len = (int64_t)strlen(string);
  15306 
  15307   if (!len && index == -1) {
  15308     // empty string, index -1 is equal to 0
  15309     index = 0;
  15310   }
  15311   bool neg = false;
  15312   if (index < 0) {
  15313     neg = true;
  15314   }
  15315 
  15316   if (index > len) {
  15317     return(NULL);
  15318   }
  15319   if (neg) {
  15320     index++;
  15321   }
  15322   if (index < -len) {
  15323     return(NULL);
  15324   }
  15325   if (neg) {
  15326     index = len + index;
  15327   }
  15328 
  15329 
  15330   charToS(inject, toInject);
  15331 
  15332   if (index == 0) {
  15333     // inject at beginning
  15334     pErrorNULL(bPrependS(string, inject));
  15335   }
  15336   else {
  15337     char *s1 = alloca((size_t)(index+1));;
  15338     pErrorNULL(strLCpy(s1, (size_t)(index+1), string));
  15339     char *s2 = alloca((size_t)(len-index+1));;
  15340     strcpy(s2, string+index);
  15341     pErrorNULL(bCatS(string, s1, inject, s2));
  15342   }
  15343   return(string);
  15344 }
  15345 
  15346 /**
  15347  * buffer size inject a char in string at index
  15348  *
  15349  * return string with toInject at index
  15350  * negative indexes are allowed
  15351  * index -1 is the end of the array and is equivalent to index len
  15352  *
  15353  * \param
  15354  *   string
  15355  * \param
  15356  *   index in string
  15357  * \param
  15358  *   toInject char
  15359  * \return
  15360  *   modified string
  15361  *   NULL unchanged string when string is NULL or invalid index
  15362  */
  15363 char *bLInjectS(char *string, size_t stringSize, int64_t index, char toInject) {
  15364   int64_t len;
  15365 
  15366   // sanity checks
  15367   if (!string) {
  15368     return(NULL);
  15369   }
  15370 
  15371   if (!stringSize) {
  15372     // size 0 - no change
  15373     return(string);
  15374   }
  15375 
  15376   len = (int64_t)strlen(string);
  15377 
  15378   if (!len && index == -1) {
  15379     // empty string, index -1 is equal to 0
  15380     index = 0;
  15381   }
  15382   bool neg = false;
  15383   if (index < 0) {
  15384     neg = true;
  15385   }
  15386 
  15387   if (index > len) {
  15388     return(NULL);
  15389   }
  15390   if (neg) {
  15391     index++;
  15392   }
  15393   if (index < -len) {
  15394     return(NULL);
  15395   }
  15396   if (neg) {
  15397     index = len + index;
  15398   }
  15399 
  15400 
  15401   charToS(inject, toInject);
  15402 
  15403   if (index == 0) {
  15404     // inject at beginning
  15405     pErrorNULL(bLPrependS(string, stringSize, inject));
  15406   }
  15407   else {
  15408     char *s1 = alloca((size_t)(index+1));;
  15409     pErrorNULL(strLCpy(s1, (size_t)(index+1), string));
  15410     char *s2 = alloca((size_t)(len-index+1));;
  15411     strcpy(s2, string+index);
  15412     pErrorNULL(bLCatS(string, stringSize, s1, inject, s2));
  15413   }
  15414   return(string);
  15415 }
  15416 
  15417 /**
  15418  * delete string
  15419  *
  15420  * return new string without the string between start and end
  15421  * negative indexes are allowed
  15422  *
  15423  * \param
  15424  *   string to delete
  15425  * \param
  15426  *   start: start index, must be in the string
  15427  * \param
  15428  *   end: end index, must be in the string after start
  15429  * \return
  15430  *   new sliced string (you must free the pointer)
  15431  *   new identical string when start=end or when start and end are not set correctly
  15432  *   NULL when input string is NULL or when malloc failed or when end is under start
  15433  */
  15434 char *delS(const char *string, int64_t start, int64_t end) {
  15435   char *s = NULL;
  15436   int64_t len;
  15437 
  15438   // sanity checks
  15439   if (!string) {
  15440     return(NULL);
  15441   }
  15442 
  15443   len = (int64_t)strlen(string);
  15444 
  15445   if (start >= len) {
  15446     start = len;
  15447   }
  15448   if (end > len) {
  15449     end = len;
  15450   }
  15451   if (start <= -len) {
  15452     start = -len;
  15453   }
  15454   if (end <= -len) {
  15455     end = -len;
  15456   }
  15457   if (start < 0) {
  15458     start = len + start;
  15459   }
  15460   if (end <= 0) {
  15461     end = len + end;
  15462   }
  15463   if (end < start) {
  15464     return(NULL);
  15465   }
  15466 
  15467   if (start == end) {
  15468     return(strdup(string));
  15469   }
  15470 
  15471   // start < end < len
  15472   // copy range to a new string
  15473   int64_t n;
  15474   n = end - start;
  15475   s = MALLOC((size_t)(len-n+1));
  15476   if (!s) {
  15477     return(NULL);//LCOV_EXCL_LINE
  15478   }
  15479   strncpy(s, string, (size_t)start);
  15480   strncpy(s+start, string+start+n, (size_t)(len-n-start));
  15481   s[len-n] = 0;
  15482 
  15483   return(s);
  15484 }
  15485 
  15486 /**
  15487  * delete string
  15488  *
  15489  * return string without the string between start and end
  15490  * negative indexes are allowed
  15491  *
  15492  * \param
  15493  *   string to delete (this parameter is reallocated)
  15494  * \param
  15495  *   start: start index, must be in the string
  15496  * \param
  15497  *   end: end index, must be in the string after start
  15498  * \return
  15499  *   sliced string (you must free the pointer)
  15500  *   unchanged string when start=end
  15501  *   NULL when start and end are not set correctly
  15502  *        or when input string is NULL or when malloc failed or when end is under start
  15503  */
  15504 char *iDelS(char **string, int64_t start, int64_t end) {
  15505   char *s = NULL;
  15506   int64_t len;
  15507 
  15508   // sanity checks
  15509   if (!string || !*string) {
  15510     return(NULL);
  15511   }
  15512 
  15513   len = (int64_t)strlen(*string);
  15514 
  15515   if (start >= len) {
  15516     start = len;
  15517   }
  15518   if (end > len) {
  15519     end = len;
  15520   }
  15521   if (start <= -len) {
  15522     start = -len;
  15523   }
  15524   if (end <= -len) {
  15525     end = -len;
  15526   }
  15527   if (start < 0) {
  15528     start = len + start;
  15529   }
  15530   if (end <= 0) {
  15531     end = len + end;
  15532   }
  15533   if (end < start) {
  15534     return(NULL);
  15535   }
  15536 
  15537   if (start == end) {
  15538     return(*string);
  15539   }
  15540 
  15541   // start < end < len
  15542   // copy range to a new string
  15543   int64_t n;
  15544   n = end - start;
  15545   s = MALLOC((size_t)(len-n+1));
  15546   if (!s) {
  15547     return(NULL);
  15548   }
  15549   strncpy(s, *string, (size_t)start);
  15550   strncpy(s+start, (*string)+start+n, (size_t)(len-n-start));
  15551   s[len-n] = 0;
  15552 
  15553   free(*string);
  15554   *string = s;
  15555   return(s);
  15556 }
  15557 
  15558 /**
  15559  * buffer delete string
  15560  *
  15561  * return string without the string between start and end
  15562  * negative indexes are allowed
  15563  *
  15564  * \param
  15565  *   string to delete
  15566  * \param
  15567  *   start: start index, must be in the string
  15568  * \param
  15569  *   end: end index, must be in the string after start
  15570  * \return
  15571  *   sliced string
  15572  *   unchanged string when start=end
  15573  *   NULL when start and end are not set correctly
  15574  *        or when input string is NULL or when malloc failed or when end is under start
  15575  */
  15576 char *bDelS(char *string, int64_t start, int64_t end) {
  15577   int64_t len;
  15578 
  15579   // sanity checks
  15580   if (!string) {
  15581     return(NULL);
  15582   }
  15583 
  15584   len = (int64_t)strlen(string);
  15585 
  15586   if (start >= len) {
  15587     start = len;
  15588   }
  15589   if (end > len) {
  15590     end = len;
  15591   }
  15592   if (start <= -len) {
  15593     start = -len;
  15594   }
  15595   if (end <= -len) {
  15596     end = -len;
  15597   }
  15598   if (start < 0) {
  15599     start = len + start;
  15600   }
  15601   if (end <= 0) {
  15602     end = len + end;
  15603   }
  15604   if (end < start) {
  15605     return(NULL);
  15606   }
  15607 
  15608   if (start == end) {
  15609     return(string);
  15610   }
  15611 
  15612   // start < end < len
  15613   // copy range to a new string
  15614   int64_t n;
  15615   n = end - start;
  15616   memmove(string+start, string+start+n, (size_t)(len-n-start));
  15617   string[len-n] = 0;
  15618 
  15619   return(string);
  15620 }
  15621 
  15622 /**
  15623  * buffer size delete string
  15624  *
  15625  * return string without the string between start and end
  15626  * negative indexes are allowed
  15627  *
  15628  * \param
  15629  *   string to delete
  15630  * \param
  15631  *   stringSize string buffer size
  15632  * \param
  15633  *   start: start index, must be in the string
  15634  * \param
  15635  *   end: end index, must be in the string after start
  15636  * \return
  15637  *   sliced string
  15638  *   unchanged string when start=end
  15639  *   NULL when start and end are not set correctly
  15640  *        or when input string is NULL or when malloc failed or when end is under start
  15641  */
  15642 char *bLDelS(char *string, size_t stringSize, int64_t start, int64_t end) {
  15643   int64_t len;
  15644 
  15645   // sanity checks
  15646   if (!string || !stringSize) {
  15647     return(NULL);
  15648   }
  15649 
  15650   len = (int64_t)strlen(string);
  15651   if ((size_t)len+1 > stringSize) {
  15652     len = (int64_t)(stringSize - 1);
  15653   }
  15654 
  15655   // compute string length without NUL
  15656   if (start >= (int64_t)len) {
  15657     start = len;
  15658   }
  15659   if (end > (int64_t)len) {
  15660     end = len;
  15661   }
  15662   if (start <= -(int64_t)len) {
  15663     start = -len;
  15664   }
  15665   if (end <= -(int64_t)len) {
  15666     end = -len;
  15667   }
  15668   if (start < 0) {
  15669     start = len + start;
  15670   }
  15671   if (end <= 0) {
  15672     end = len + end;
  15673   }
  15674   if (end < start) {
  15675     return(NULL);
  15676   }
  15677 
  15678   if (start == end) {
  15679     return(string);
  15680   }
  15681 
  15682   // start < end < len
  15683   // copy range to a new string
  15684   int64_t n;
  15685   n = end - start;
  15686   memmove(string+start, string+start+n, (size_t)(len-n-start));
  15687   string[len-n] = 0;
  15688 
  15689   return(string);
  15690 }
  15691 
  15692 /**
  15693  * delete element/character string
  15694  *
  15695  * return new string without the character at given index
  15696  * negative indexes are allowed
  15697  *
  15698  * \param
  15699  *   string to delete
  15700  * \param
  15701  *   index: must be in the string, -1 is the last character in the string
  15702  * \return
  15703  *   new string (you must free the pointer)
  15704  *   NULL when input string is NULL or when malloc failed
  15705  */
  15706 char *delElemS(const char *string, int64_t index) {
  15707   char *s = NULL;
  15708   int64_t len;
  15709 
  15710   if (!string) {
  15711     return(NULL);
  15712   }
  15713 
  15714   len = (int64_t)strlen(string);
  15715   if (index >= len) {
  15716     return(NULL);
  15717   }
  15718   if (index < -len) {
  15719     return(NULL);
  15720   }
  15721   if (index < 0) {
  15722     index = len + index;
  15723   }
  15724 
  15725   s = MALLOC((size_t)(len-1+1));
  15726   if (!s) {
  15727     return(NULL);//LCOV_EXCL_LINE
  15728   }
  15729   strncpy(s, string, (size_t)index);
  15730   strncpy(s+index, string+index+1, (size_t)(len-1-index));
  15731   s[len-1] = 0;
  15732   return(s);
  15733 }
  15734 
  15735 /**
  15736  * delete element/character string
  15737  *
  15738  * return string without the character at given index
  15739  * negative indexes are allowed
  15740  *
  15741  * \param
  15742  *   string to delete (this parameter is reallocated)
  15743  * \param
  15744  *   index: must be in the string, -1 is the last character in the string
  15745  * \return
  15746  *   new string (you must free the pointer)
  15747  *   NULL when input string is NULL or when malloc failed
  15748  */
  15749 char *iDelElemS(char **string, int64_t index) {
  15750   char *s = NULL;
  15751   int64_t len;
  15752 
  15753   // sanity checks
  15754   if (!string || !*string) {
  15755     return(NULL);
  15756   }
  15757 
  15758   len = (int64_t)strlen(*string);
  15759   if (index >= len) {
  15760     return(NULL);
  15761   }
  15762   if (index < -len) {
  15763     return(NULL);
  15764   }
  15765   if (index < 0) {
  15766     index = len + index;
  15767   }
  15768 
  15769   s = MALLOC((size_t)(len-1+1));
  15770   if (!s) {
  15771     return(NULL);//LCOV_EXCL_LINE
  15772   }
  15773   strncpy(s, *string, (size_t)index);
  15774   strncpy(s+index, *string+index+1, (size_t)(len-1-index));
  15775   s[len-1] = 0;
  15776 
  15777   free(*string);
  15778   *string = s;
  15779   return(s);
  15780 }
  15781 
  15782 /**
  15783  * buffer delete element/character string
  15784  *
  15785  * return string without the character at given index
  15786  * negative indexes are allowed
  15787  *
  15788  * \param
  15789  *   string to delete
  15790  * \param
  15791  *   index: must be in the string, -1 is the last character in the string
  15792  * \return
  15793  *   string with one less character
  15794  *   NULL when input string is NULL or when malloc failed
  15795  */
  15796 char *bDelElemS(char *string, int64_t index) {
  15797   int64_t len;
  15798 
  15799   // sanity checks
  15800   if (!string) {
  15801     return(NULL);
  15802   }
  15803 
  15804   len = (int64_t)strlen(string);
  15805   if (index >= len) {
  15806     return(NULL);
  15807   }
  15808   if (index < -len) {
  15809     return(NULL);
  15810   }
  15811   if (index < 0) {
  15812     index = len + index;
  15813   }
  15814 
  15815   memmove(string+index, string+index+1, (size_t)(len-1-index));
  15816   string[len-1] = 0;
  15817 
  15818   return(string);
  15819 }
  15820 
  15821 /**
  15822  * buffer size delete element/character string
  15823  *
  15824  * return string without the character at given index
  15825  * negative indexes are allowed
  15826  *
  15827  * \param
  15828  *   string to delete
  15829  * \param
  15830  *   stringSize string buffer size
  15831  * \param
  15832  *   index: must be in the string, -1 is the last character in the string
  15833  * \return
  15834  *   string with one less character
  15835  *   NULL when input string is NULL or when malloc failed
  15836  */
  15837 char *bLDelElemS(char *string, size_t stringSize, int64_t index) {
  15838   int64_t len;
  15839 
  15840   // sanity checks
  15841   if (!string || !stringSize) {
  15842     return(NULL);
  15843   }
  15844 
  15845   len = (int64_t)strlen(string);
  15846   if ((size_t)len+1 > stringSize) {
  15847     len = (int64_t)(stringSize - 1);
  15848   }
  15849 
  15850   // compute string length without NUL
  15851   if (index >= (int64_t)len) {
  15852     return(NULL);
  15853   }
  15854   if (index < -(int64_t)len) {
  15855     return(NULL);
  15856   }
  15857   if (index < 0) {
  15858     index = (int64_t)len + index;
  15859   }
  15860 
  15861   memmove(string+index, string+index+1, (size_t)(len-1-index));
  15862   string[len-1] = 0;
  15863 
  15864   return(string);
  15865 }
  15866 
  15867 /**
  15868  * find String
  15869  *
  15870  * \param
  15871  *   string
  15872  * \param
  15873  *   needle: string to find
  15874  * \return
  15875  *   pointer to first occurence of needle in string
  15876  *   NULL when needle is not found
  15877  *   NULL when string or needle are NULL
  15878  */
  15879 char *findS(const char *string, const char *needle) {
  15880 
  15881   // sanity checks
  15882   if (!string || !needle) {
  15883     return(NULL);
  15884   }
  15885   return(strstr(string, needle));
  15886 }
  15887 
  15888 char *findCharS(const char *string, char c) {
  15889 
  15890   // sanity checks
  15891   if (!string) {
  15892     return(NULL);
  15893   }
  15894   return(strchr(string, c));
  15895 }
  15896 
  15897 /**
  15898  * indexOf String
  15899  * relative to start
  15900  *
  15901  * \param
  15902  *   string
  15903  * \param
  15904  *   needle: string to find
  15905  * \return
  15906  *   index of first occurence of needle in string
  15907  *   -1 when needle is not found
  15908  *   -1 when string or needle are NULL
  15909  */
  15910 ssize_t indexOfS(const char *string, const char *needle) {
  15911 
  15912   char *r = findS(string, needle);
  15913   if (!r) {
  15914     return(-1);
  15915   }
  15916   return((ssize_t)(r - string));
  15917 }
  15918 
  15919 ssize_t indexOfCharS(const char *string, char c) {
  15920 
  15921   char *r = findCharS(string, c);
  15922   if (!r) {
  15923     return(-1);
  15924   }
  15925   return((ssize_t)(r - string));
  15926 }
  15927 
  15928 /**
  15929  * has String
  15930  *
  15931  * \param
  15932  *   string
  15933  * \param
  15934  *   needle: string to find
  15935  * \return
  15936  *   true when needle is in string
  15937  *   false when needle is not found
  15938  *   false when string or needle are NULL
  15939  */
  15940 bool hasS(const char *string, const char *needle) {
  15941 
  15942   // sanity checks
  15943   if (!string || !needle) {
  15944     return(false);
  15945   }
  15946 
  15947   if (!strstr(string, needle)) {
  15948     return(false);
  15949   }
  15950   return(true);
  15951 }
  15952 
  15953 bool hasCharS(const char *string, char c) {
  15954 
  15955   // sanity checks
  15956   if (!string) {
  15957     return(false);
  15958   }
  15959   if (!strchr(string, c)) {
  15960     return(false);
  15961   }
  15962   return(true);
  15963 }
  15964 
  15965 /**
  15966  * ignore case Find String
  15967  *
  15968  * \param
  15969  *   string
  15970  * \param
  15971  *   needle: string to find
  15972  * \return
  15973  *   pointer to first occurence of needle in string
  15974  *   NULL when needle is not found
  15975  *   NULL when string or needle are NULL
  15976  */
  15977 char *icFindS(const char *string, const char *needle) {
  15978 
  15979   // sanity checks
  15980   if (!string || !needle) {
  15981     return(NULL);
  15982   }
  15983   return(strcasestr(string, needle));
  15984 }
  15985 
  15986 char *icFindCharS(const char *string, char c) {
  15987 
  15988   // sanity checks
  15989   if (!string) {
  15990     return(NULL);
  15991   }
  15992   if (c == 0) {
  15993     // include terminating '\0' in comparison
  15994     // like findCharS
  15995     return(strchr(string, c));
  15996   }
  15997   charToS(s, c);
  15998   return(icFindS(string, s));
  15999 }
  16000 
  16001 /**
  16002  * ignore case indexOf String
  16003  * relative to start
  16004  *
  16005  * \param
  16006  *   string
  16007  * \param
  16008  *   needle: string to find
  16009  * \return
  16010  *   index of first occurence of needle in string
  16011  *   -1 when needle is not found
  16012  *   -1 when string or needle are NULL
  16013  */
  16014 ssize_t icIndexOfS(const char *string, const char *needle) {
  16015 
  16016   char *r = icFindS(string, needle);
  16017   if (!r) {
  16018     return(-1);
  16019   }
  16020   return((ssize_t)(r - string));
  16021 }
  16022 
  16023 ssize_t icIndexOfCharS(const char *string, char c) {
  16024 
  16025   char *r = icFindCharS(string, c);
  16026   if (!r) {
  16027     return(-1);
  16028   }
  16029   return((ssize_t)(r - string));
  16030 }
  16031 
  16032 /**
  16033  * ignore case has String
  16034  *
  16035  * \param
  16036  *   string
  16037  * \param
  16038  *   needle: string to find
  16039  * \return
  16040  *   true when needle is in string
  16041  *   false when needle is not found
  16042  *   false when string or needle are NULL
  16043  */
  16044 bool icHasS(const char *string, const char *needle) {
  16045 
  16046   // sanity checks
  16047   if (!string || !needle) {
  16048     return(false);
  16049   }
  16050 
  16051   if (!strcasestr(string, needle)) {
  16052     return(false);
  16053   }
  16054   return(true);
  16055 }
  16056 
  16057 bool icHasCharS(const char *string, char c) {
  16058 
  16059   // sanity checks
  16060   if (!string) {
  16061     return(false);
  16062   }
  16063   charToS(s,c);
  16064   return(icHasS(string, s));
  16065 }
  16066 
  16067 /**
  16068  * token in String
  16069  *
  16070  * parse string into a sequence of tokens delimited by the ENTIRE DELIM string
  16071  * work like strtok_r from c stdlib
  16072  * (for strtok_r, when delim has multiple characters, each character is a delimiter)
  16073  *
  16074  * on first call s is the string to parse, optionally initialize *saveptr to NULL
  16075  * on next calls, s should be NULL
  16076  *
  16077  * \param
  16078  *   s string to parse, the s string is modified
  16079  * \param
  16080  *   delim string
  16081  * \return
  16082  *   token
  16083  *   *saveptr is set to NULL when the last token is found
  16084  */
  16085 char *tokS(char *s, const char *delim, char **saveptr) {
  16086   char *r = NULL;
  16087 
  16088   // sanity checks
  16089   if (!delim) {
  16090     return(NULL);
  16091   }
  16092   if (s) {
  16093     *saveptr = s;
  16094   }
  16095   else if (!*saveptr) {
  16096     return(NULL);
  16097   }
  16098   r = *saveptr;
  16099   *saveptr = findS(*saveptr, delim);
  16100   if (*saveptr) {
  16101     // delimiter is found
  16102     **saveptr = 0;
  16103     // shift start of working string after the delimiter
  16104     *saveptr += strlen(delim);
  16105   }
  16106   return(r);
  16107 }
  16108 
  16109 /**
  16110  * ignore case token in String
  16111  *
  16112  * parse string into a sequence of tokens delimited by the ENTIRE DELIM string
  16113  * work like strtok_r from c stdlib
  16114  * (for strtok_r, when delim has multiple characters, each character is a delimiter)
  16115  *
  16116  * on first call s is the string to parse, optionally initialize *saveptr to NULL
  16117  * on next calls, s should be NULL
  16118  *
  16119  * \param
  16120  *   s string to parse, the s string is modified
  16121  * \param
  16122  *   delim string
  16123  * \return
  16124  *   token
  16125  *   *saveptr is set to NULL when the last token is found
  16126  */
  16127 char *icTokS(char *s, const char *delim, char **saveptr) {
  16128   char *r = NULL;
  16129 
  16130   // sanity checks
  16131   if (!delim) {
  16132     return(NULL);
  16133   }
  16134   if (s) {
  16135     *saveptr = s;
  16136   }
  16137   else if (!*saveptr) {
  16138     return(NULL);
  16139   }
  16140   r = *saveptr;
  16141   *saveptr = icFindS(*saveptr, delim);
  16142   if (*saveptr) {
  16143     // delimiter is found
  16144     **saveptr = 0;
  16145     // shift start of working string after the delimiter
  16146     *saveptr += strlen(delim);
  16147   }
  16148   return(r);
  16149 }
  16150 
  16151 
  16152 
  16153 
  16154 //
  16155 // UTF-8 string functions
  16156 //
  16157 // UNICODE v10.0
  16158 //
  16159 
  16160 /**
  16161  * character length of UTF-8 string
  16162  *
  16163  * string is not checked for validity
  16164  */
  16165 size_t lenUTF8(const char *s) {
  16166   size_t r = 0;;
  16167 
  16168   if (!s) {
  16169     return(0);
  16170   }
  16171   while (*s) {
  16172     r += (*s++ & 0xC0) != 0x80;
  16173   }
  16174   return(r);
  16175 }
  16176 
  16177 /**
  16178  * buffer character length of UTF-8 string
  16179  *
  16180  * string is not checked for validity
  16181  *
  16182  * bLLenUTF8 checks at most maxSize bytes
  16183  */
  16184 size_t bLLenUTF8(const char *s, size_t maxSize) {
  16185   size_t r = 0;;
  16186 
  16187   if (!s) {
  16188     return(0);
  16189   }
  16190 
  16191   const char *t = s;
  16192   while (*s && ((size_t)(s-t)+1 < maxSize)) {
  16193     r += (*s++ & 0xC0) != 0x80;
  16194   }
  16195   return(r);
  16196 }
  16197 
  16198 
  16199 // https://stackoverflow.com/questions/1031645/how-to-detect-utf-8-in-plain-c/43338168#43338168
  16200 // christoph's answer
  16201 
  16202 /**
  16203  * is UTF-8 string
  16204  *
  16205  * check if string is a valid UTF-8 string
  16206  *
  16207  * \param
  16208  *   string UTF-8 encoded string
  16209  * \return
  16210  *   true string is valid UTF-8
  16211  *   false string is invalid UTF-8
  16212  */
  16213 bool isUTF8(const char * string) {
  16214 
  16215   if (!string) {
  16216     return(false);
  16217   }
  16218 
  16219   const unsigned char * bytes = (const unsigned char *)string;
  16220   while (*bytes) {
  16221     // ASCII
  16222     // use bytes[0] <= 0x7F to allow ASCII control characters
  16223     if (bytes[0] == 0x09 || bytes[0] == 0x0A || bytes[0] == 0x0D || (0x20 <= bytes[0] && bytes[0] <= 0x7E)) {
  16224       bytes += 1;
  16225       continue;
  16226     }
  16227 
  16228     // non-overlong 2-byte
  16229     if ((0xC2 <= bytes[0] && bytes[0] <= 0xDF) && (0x80 <= bytes[1] && bytes[1] <= 0xBF)) {
  16230       bytes += 2;
  16231       continue;
  16232     }
  16233 
  16234     // excluding overlongs
  16235     // straight 3-byte
  16236     // excluding surrogates
  16237     if ((bytes[0] == 0xE0 && (0xA0 <= bytes[1] && bytes[1] <= 0xBF) && (0x80 <= bytes[2] && bytes[2] <= 0xBF)) || (((0xE1 <= bytes[0] && bytes[0] <= 0xEC) || bytes[0] == 0xEE || bytes[0] == 0xEF) && (0x80 <= bytes[1] && bytes[1] <= 0xBF) && (0x80 <= bytes[2] && bytes[2] <= 0xBF)) || (bytes[0] == 0xED && (0x80 <= bytes[1] && bytes[1] <= 0x9F) && (0x80 <= bytes[2] && bytes[2] <= 0xBF))) {
  16238       bytes += 3;
  16239       continue;
  16240     }
  16241 
  16242     // planes 1-3
  16243     // planes 4-15
  16244     // plane 16
  16245     if ((bytes[0] == 0xF0 && (0x90 <= bytes[1] && bytes[1] <= 0xBF) && (0x80 <= bytes[2] && bytes[2] <= 0xBF) && (0x80 <= bytes[3] && bytes[3] <= 0xBF)) || ((0xF1 <= bytes[0] && bytes[0] <= 0xF3) && (0x80 <= bytes[1] && bytes[1] <= 0xBF) && (0x80 <= bytes[2] && bytes[2] <= 0xBF) && (0x80 <= bytes[3] && bytes[3] <= 0xBF)) || (bytes[0] == 0xF4 && (0x80 <= bytes[1] && bytes[1] <= 0x8F) && (0x80 <= bytes[2] && bytes[2] <= 0xBF) && (0x80 <= bytes[3] && bytes[3] <= 0xBF))) {
  16246       bytes += 4;
  16247       continue;
  16248     }
  16249 
  16250     return(false);
  16251   }
  16252 
  16253   return(true);
  16254 }
  16255 
  16256 /**
  16257  * buffer length is UTF-8 string
  16258  *
  16259  * check if string is a valid UTF-8 string
  16260  *
  16261  * \param
  16262  *   string UTF-8 encoded string
  16263  * \return
  16264  *   true string is valid UTF-8
  16265  *   false string is invalid UTF-8
  16266  */
  16267 bool bLIsUTF8(const char * string, size_t stringSize) {
  16268 
  16269   if (!string || !stringSize) {
  16270     return(false);
  16271   }
  16272 
  16273   const unsigned char * bytes = (const unsigned char *)string;
  16274   while (*bytes) {
  16275 
  16276     // ASCII
  16277     // use bytes[0] <= 0x7F to allow ASCII control characters
  16278     if (bytes[0] == 0x09 || bytes[0] == 0x0A || bytes[0] == 0x0D || (0x20 <= bytes[0] && bytes[0] <= 0x7E)) {
  16279       bytes += 1;
  16280       if ((size_t)(bytes - (const unsigned char *)string)+1 > stringSize) {
  16281         return(false);
  16282       }
  16283       continue;
  16284     }
  16285 
  16286     // non-overlong 2-byte
  16287     if ((0xC2 <= bytes[0] && bytes[0] <= 0xDF) && (0x80 <= bytes[1] && bytes[1] <= 0xBF)) {
  16288       bytes += 2;
  16289       if ((size_t)(bytes - (const unsigned char *)string)+1 > stringSize) {
  16290         return(false);
  16291       }
  16292       continue;
  16293     }
  16294 
  16295     // excluding overlongs
  16296     // straight 3-byte
  16297     // excluding surrogates
  16298     if ((bytes[0] == 0xE0 && (0xA0 <= bytes[1] && bytes[1] <= 0xBF) && (0x80 <= bytes[2] && bytes[2] <= 0xBF)) || (((0xE1 <= bytes[0] && bytes[0] <= 0xEC) || bytes[0] == 0xEE || bytes[0] == 0xEF) && (0x80 <= bytes[1] && bytes[1] <= 0xBF) && (0x80 <= bytes[2] && bytes[2] <= 0xBF)) || (bytes[0] == 0xED && (0x80 <= bytes[1] && bytes[1] <= 0x9F) && (0x80 <= bytes[2] && bytes[2] <= 0xBF))) {
  16299       bytes += 3;
  16300       if ((size_t)(bytes - (const unsigned char *)string)+1 > stringSize) {
  16301         return(false);
  16302       }
  16303       continue;
  16304     }
  16305 
  16306     // planes 1-3
  16307     // planes 4-15
  16308     // plane 16
  16309     if ((bytes[0] == 0xF0 && (0x90 <= bytes[1] && bytes[1] <= 0xBF) && (0x80 <= bytes[2] && bytes[2] <= 0xBF) && (0x80 <= bytes[3] && bytes[3] <= 0xBF)) || ((0xF1 <= bytes[0] && bytes[0] <= 0xF3) && (0x80 <= bytes[1] && bytes[1] <= 0xBF) && (0x80 <= bytes[2] && bytes[2] <= 0xBF) && (0x80 <= bytes[3] && bytes[3] <= 0xBF)) || (bytes[0] == 0xF4 && (0x80 <= bytes[1] && bytes[1] <= 0x8F) && (0x80 <= bytes[2] && bytes[2] <= 0xBF) && (0x80 <= bytes[3] && bytes[3] <= 0xBF))) {
  16310       bytes += 4;
  16311       if ((size_t)(bytes - (const unsigned char *)string)+1 > stringSize) {
  16312         return(false);
  16313       }
  16314       continue;
  16315     }
  16316 
  16317     return(false);
  16318   }
  16319 
  16320   return(true);
  16321 }
  16322 
  16323 /**
  16324  * is code point UTF8 encoded string
  16325  *
  16326  * Check if a UTF8 code point is valid
  16327  *
  16328  * This function checks only the first code point
  16329  *
  16330  * \param
  16331  *   bytes string, NUL-terminated or not, bytes can be a pointer inside a UTF8 encoded string
  16332  * \return
  16333  *   true bytes is a valid UTF-8 code point
  16334  *   false bytes is invalid code point
  16335  */
  16336 bool isCodeUTF8(const char *code) {
  16337 
  16338   if (!code) {
  16339     return(false);
  16340   }
  16341   const unsigned char * bytes = (const unsigned char *)code;
  16342   // ASCII
  16343   // use bytes[0] <= 0x7F to allow ASCII control characters
  16344   if (bytes[0] == 0x09 || bytes[0] == 0x0A || bytes[0] == 0x0D || (0x20 <= bytes[0] && bytes[0] <= 0x7E)) {
  16345     return(true);
  16346   }
  16347 
  16348   // non-overlong 2-byte
  16349   if ((0xC2 <= bytes[0] && bytes[0] <= 0xDF) && (0x80 <= bytes[1] && bytes[1] <= 0xBF)) {
  16350     return(true);
  16351   }
  16352 
  16353   // excluding overlongs
  16354   // straight 3-byte
  16355   // excluding surrogates
  16356   if ((bytes[0] == 0xE0 && (0xA0 <= bytes[1] && bytes[1] <= 0xBF) && (0x80 <= bytes[2] && bytes[2] <= 0xBF)) || (((0xE1 <= bytes[0] && bytes[0] <= 0xEC) || bytes[0] == 0xEE || bytes[0] == 0xEF) && (0x80 <= bytes[1] && bytes[1] <= 0xBF) && (0x80 <= bytes[2] && bytes[2] <= 0xBF)) || (bytes[0] == 0xED && (0x80 <= bytes[1] && bytes[1] <= 0x9F) && (0x80 <= bytes[2] && bytes[2] <= 0xBF))) {
  16357     return(true);
  16358   }
  16359 
  16360   // planes 1-3
  16361   // planes 4-15
  16362   // plane 16
  16363   if ((bytes[0] == 0xF0 && (0x90 <= bytes[1] && bytes[1] <= 0xBF) && (0x80 <= bytes[2] && bytes[2] <= 0xBF) && (0x80 <= bytes[3] && bytes[3] <= 0xBF)) || ((0xF1 <= bytes[0] && bytes[0] <= 0xF3) && (0x80 <= bytes[1] && bytes[1] <= 0xBF) && (0x80 <= bytes[2] && bytes[2] <= 0xBF) && (0x80 <= bytes[3] && bytes[3] <= 0xBF)) || (bytes[0] == 0xF4 && (0x80 <= bytes[1] && bytes[1] <= 0x8F) && (0x80 <= bytes[2] && bytes[2] <= 0xBF) && (0x80 <= bytes[3] && bytes[3] <= 0xBF))) {
  16364     return(true);
  16365   }
  16366 
  16367   return(false);
  16368 }
  16369 
  16370 // INCLUDE libsheepyC.c
  16371 /** maximum rune value */
  16372 #define runeMax 0x10FFFF
  16373 
  16374 /** code point length, 0 when invalid code point, x is first byte in code point */
  16375 #define UTFSEQ(x) ((((x) & 0x80) == 0x00) ? 1 /* 0xxxxxxx */ \
  16376                  : (((x) & 0xC0) == 0x80) ? 0 /* 10xxxxxx */ \
  16377                  : (((x) & 0xE0) == 0xC0) ? 2 /* 110xxxxx */ \
  16378                  : (((x) & 0xF0) == 0xE0) ? 3 /* 1110xxxx */ \
  16379                  : (((x) & 0xF8) == 0xF0) ? 4 /* 11110xxx */ \
  16380                  : (((x) & 0xFC) == 0xF8) ? 5 /* 111110xx */ \
  16381                  : (((x) & 0xFE) == 0xFC) ? 6 /* 1111110x */ \
  16382                                           : 0 )
  16383 
  16384 #define BADRUNE(x) ((x) < 0 || (x) > runeMax \
  16385                 || ((x) & 0xFFFE) == 0xFFFE \
  16386                 || ((x) >= 0xD800 && (x) <= 0xDFFF) \
  16387                 || ((x) >= 0xFDD0 && (x) <= 0xFDEF))
  16388 
  16389 #define UNICODE_LAST_CHAR_PART1 0x2FAFF
  16390 #define UNICODE_LAST_PAGE_PART1 762
  16391 #define UNICODE_MAX_TABLE_INDEX 10000
  16392 #define UNICODE_NOT_PRESENT_OFFSET 65535
  16393 
  16394 /**
  16395  * Unicode types:
  16396  * UNICODE_CONTROL: General category "Other, Control" (Cc)
  16397  * UNICODE_FORMAT: General category "Other, Format" (Cf)
  16398  * UNICODE_UNASSIGNED: General category "Other, Not Assigned" (Cn)
  16399  * UNICODE_PRIVATE_USE: General category "Other, Private Use" (Co)
  16400  * UNICODE_SURROGATE: General category "Other, Surrogate" (Cs)
  16401  * UNICODE_LOWERCASE_LETTER: General category "Letter, Lowercase" (Ll)
  16402  * UNICODE_MODIFIER_LETTER: General category "Letter, Modifier" (Lm)
  16403  * UNICODE_OTHER_LETTER: General category "Letter, Other" (Lo)
  16404  * UNICODE_TITLECASE_LETTER: General category "Letter, Titlecase" (Lt)
  16405  * UNICODE_UPPERCASE_LETTER: General category "Letter, Uppercase" (Lu)
  16406  * UNICODE_SPACING_MARK: General category "Mark, Spacing" (Mc)
  16407  * UNICODE_ENCLOSING_MARK: General category "Mark, Enclosing" (Me)
  16408  * UNICODE_NON_SPACING_MARK: General category "Mark, Nonspacing" (Mn)
  16409  * UNICODE_DECIMAL_NUMBER: General category "Number, Decimal Digit" (Nd)
  16410  * UNICODE_LETTER_NUMBER: General category "Number, Letter" (Nl)
  16411  * UNICODE_OTHER_NUMBER: General category "Number, Other" (No)
  16412  * UNICODE_CONNECT_PUNCTUATION: General category "Punctuation, Connector" (Pc)
  16413  * UNICODE_DASH_PUNCTUATION: General category "Punctuation, Dash" (Pd)
  16414  * UNICODE_CLOSE_PUNCTUATION: General category "Punctuation, Close" (Pe)
  16415  * UNICODE_FINAL_PUNCTUATION: General category "Punctuation, Final quote" (Pf)
  16416  * UNICODE_INITIAL_PUNCTUATION: General category "Punctuation, Initial quote" (Pi)
  16417  * UNICODE_OTHER_PUNCTUATION: General category "Punctuation, Other" (Po)
  16418  * UNICODE_OPEN_PUNCTUATION: General category "Punctuation, Open" (Ps)
  16419  * UNICODE_CURRENCY_SYMBOL: General category "Symbol, Currency" (Sc)
  16420  * UNICODE_MODIFIER_SYMBOL: General category "Symbol, Modifier" (Sk)
  16421  * UNICODE_MATH_SYMBOL: General category "Symbol, Math" (Sm)
  16422  * UNICODE_OTHER_SYMBOL: General category "Symbol, Other" (So)
  16423  * UNICODE_LINE_SEPARATOR: General category "Separator, Line" (Zl)
  16424  * UNICODE_PARAGRAPH_SEPARATOR: General category "Separator, Paragraph" (Zp)
  16425  * UNICODE_SPACE_SEPARATOR: General category "Separator, Space" (Zs)
  16426  *
  16427  * These are the possible character classifications from the
  16428  * Unicode specification.
  16429  * See [Unicode Character Database](http://www.unicode.org/reports/tr44/#General_Category_Values).
  16430  */
  16431 typedef enum
  16432 {
  16433   UNICODE_CONTROL,
  16434   UNICODE_FORMAT,
  16435   UNICODE_UNASSIGNED,
  16436   UNICODE_PRIVATE_USE,
  16437   UNICODE_SURROGATE,
  16438   UNICODE_LOWERCASE_LETTER,
  16439   UNICODE_MODIFIER_LETTER,
  16440   UNICODE_OTHER_LETTER,
  16441   UNICODE_TITLECASE_LETTER,
  16442   UNICODE_UPPERCASE_LETTER,
  16443   UNICODE_SPACING_MARK,
  16444   UNICODE_ENCLOSING_MARK,
  16445   UNICODE_NON_SPACING_MARK,
  16446   UNICODE_DECIMAL_NUMBER,
  16447   UNICODE_LETTER_NUMBER,
  16448   UNICODE_OTHER_NUMBER,
  16449   UNICODE_CONNECT_PUNCTUATION,
  16450   UNICODE_DASH_PUNCTUATION,
  16451   UNICODE_CLOSE_PUNCTUATION,
  16452   UNICODE_FINAL_PUNCTUATION,
  16453   UNICODE_INITIAL_PUNCTUATION,
  16454   UNICODE_OTHER_PUNCTUATION,
  16455   UNICODE_OPEN_PUNCTUATION,
  16456   UNICODE_CURRENCY_SYMBOL,
  16457   UNICODE_MODIFIER_SYMBOL,
  16458   UNICODE_MATH_SYMBOL,
  16459   UNICODE_OTHER_SYMBOL,
  16460   UNICODE_LINE_SEPARATOR,
  16461   UNICODE_PARAGRAPH_SEPARATOR,
  16462   UNICODE_SPACE_SEPARATOR
  16463 } unicodeType;
  16464 
  16465 static const rune attr_data[][256] = {
  16466   { /* page 0, index 0 */
  16467     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16468     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16469     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16470     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16471     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16472     0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005,
  16473     0x0006, 0x0007, 0x0008, 0x0009, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16474     0x0000, 0x0000, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067,
  16475     0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070,
  16476     0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, 0x0079,
  16477     0x007a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0041, 0x0042,
  16478     0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, 0x004a, 0x004b,
  16479     0x004c, 0x004d, 0x004e, 0x004f, 0x0050, 0x0051, 0x0052, 0x0053, 0x0054,
  16480     0x0055, 0x0056, 0x0057, 0x0058, 0x0059, 0x005a, 0x0000, 0x0000, 0x0000,
  16481     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16482     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16483     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16484     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16485     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16486     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16487     0x0000, 0x039c, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16488     0x0000, 0x0000, 0x0000, 0x00e0, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5,
  16489     0x00e6, 0x00e7, 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee,
  16490     0x00ef, 0x00f0, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x0000,
  16491     0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x00fd, 0x00fe, 0x1000000,
  16492     0x00c0, 0x00c1, 0x00c2, 0x00c3, 0x00c4, 0x00c5, 0x00c6, 0x00c7, 0x00c8,
  16493     0x00c9, 0x00ca, 0x00cb, 0x00cc, 0x00cd, 0x00ce, 0x00cf, 0x00d0, 0x00d1,
  16494     0x00d2, 0x00d3, 0x00d4, 0x00d5, 0x00d6, 0x0000, 0x00d8, 0x00d9, 0x00da,
  16495     0x00db, 0x00dc, 0x00dd, 0x00de, 0x0178
  16496   },
  16497   { /* page 1, index 1 */
  16498     0x0101, 0x0100, 0x0103, 0x0102, 0x0105, 0x0104, 0x0107, 0x0106, 0x0109,
  16499     0x0108, 0x010b, 0x010a, 0x010d, 0x010c, 0x010f, 0x010e, 0x0111, 0x0110,
  16500     0x0113, 0x0112, 0x0115, 0x0114, 0x0117, 0x0116, 0x0119, 0x0118, 0x011b,
  16501     0x011a, 0x011d, 0x011c, 0x011f, 0x011e, 0x0121, 0x0120, 0x0123, 0x0122,
  16502     0x0125, 0x0124, 0x0127, 0x0126, 0x0129, 0x0128, 0x012b, 0x012a, 0x012d,
  16503     0x012c, 0x012f, 0x012e, 0x1000007, 0x0049, 0x0133, 0x0132, 0x0135,
  16504     0x0134, 0x0137, 0x0136, 0x0000, 0x013a, 0x0139, 0x013c, 0x013b, 0x013e,
  16505     0x013d, 0x0140, 0x013f, 0x0142, 0x0141, 0x0144, 0x0143, 0x0146, 0x0145,
  16506     0x0148, 0x0147, 0x1000086, 0x014b, 0x014a, 0x014d, 0x014c, 0x014f,
  16507     0x014e, 0x0151, 0x0150, 0x0153, 0x0152, 0x0155, 0x0154, 0x0157, 0x0156,
  16508     0x0159, 0x0158, 0x015b, 0x015a, 0x015d, 0x015c, 0x015f, 0x015e, 0x0161,
  16509     0x0160, 0x0163, 0x0162, 0x0165, 0x0164, 0x0167, 0x0166, 0x0169, 0x0168,
  16510     0x016b, 0x016a, 0x016d, 0x016c, 0x016f, 0x016e, 0x0171, 0x0170, 0x0173,
  16511     0x0172, 0x0175, 0x0174, 0x0177, 0x0176, 0x00ff, 0x017a, 0x0179, 0x017c,
  16512     0x017b, 0x017e, 0x017d, 0x0053, 0x0243, 0x0253, 0x0183, 0x0182, 0x0185,
  16513     0x0184, 0x0254, 0x0188, 0x0187, 0x0256, 0x0257, 0x018c, 0x018b, 0x0000,
  16514     0x01dd, 0x0259, 0x025b, 0x0192, 0x0191, 0x0260, 0x0263, 0x01f6, 0x0269,
  16515     0x0268, 0x0199, 0x0198, 0x023d, 0x0000, 0x026f, 0x0272, 0x0220, 0x0275,
  16516     0x01a1, 0x01a0, 0x01a3, 0x01a2, 0x01a5, 0x01a4, 0x0280, 0x01a8, 0x01a7,
  16517     0x0283, 0x0000, 0x0000, 0x01ad, 0x01ac, 0x0288, 0x01b0, 0x01af, 0x028a,
  16518     0x028b, 0x01b4, 0x01b3, 0x01b6, 0x01b5, 0x0292, 0x01b9, 0x01b8, 0x0000,
  16519     0x0000, 0x01bd, 0x01bc, 0x0000, 0x01f7, 0x0000, 0x0000, 0x0000, 0x0000,
  16520     0x01c6, 0x0000, 0x01c4, 0x01c9, 0x0000, 0x01c7, 0x01cc, 0x0000, 0x01ca,
  16521     0x01ce, 0x01cd, 0x01d0, 0x01cf, 0x01d2, 0x01d1, 0x01d4, 0x01d3, 0x01d6,
  16522     0x01d5, 0x01d8, 0x01d7, 0x01da, 0x01d9, 0x01dc, 0x01db, 0x018e, 0x01df,
  16523     0x01de, 0x01e1, 0x01e0, 0x01e3, 0x01e2, 0x01e5, 0x01e4, 0x01e7, 0x01e6,
  16524     0x01e9, 0x01e8, 0x01eb, 0x01ea, 0x01ed, 0x01ec, 0x01ef, 0x01ee,
  16525     0x10000ad, 0x01f3, 0x0000, 0x01f1, 0x01f5, 0x01f4, 0x0195, 0x01bf,
  16526     0x01f9, 0x01f8, 0x01fb, 0x01fa, 0x01fd, 0x01fc, 0x01ff, 0x01fe
  16527   },
  16528   { /* page 2, index 2 */
  16529     0x0201, 0x0200, 0x0203, 0x0202, 0x0205, 0x0204, 0x0207, 0x0206, 0x0209,
  16530     0x0208, 0x020b, 0x020a, 0x020d, 0x020c, 0x020f, 0x020e, 0x0211, 0x0210,
  16531     0x0213, 0x0212, 0x0215, 0x0214, 0x0217, 0x0216, 0x0219, 0x0218, 0x021b,
  16532     0x021a, 0x021d, 0x021c, 0x021f, 0x021e, 0x019e, 0x0000, 0x0223, 0x0222,
  16533     0x0225, 0x0224, 0x0227, 0x0226, 0x0229, 0x0228, 0x022b, 0x022a, 0x022d,
  16534     0x022c, 0x022f, 0x022e, 0x0231, 0x0230, 0x0233, 0x0232, 0x0000, 0x0000,
  16535     0x0000, 0x0000, 0x0000, 0x0000, 0x2c65, 0x023c, 0x023b, 0x019a, 0x2c66,
  16536     0x2c7e, 0x2c7f, 0x0242, 0x0241, 0x0180, 0x0289, 0x028c, 0x0247, 0x0246,
  16537     0x0249, 0x0248, 0x024b, 0x024a, 0x024d, 0x024c, 0x024f, 0x024e, 0x2c6f,
  16538     0x2c6d, 0x2c70, 0x0181, 0x0186, 0x0000, 0x0189, 0x018a, 0x0000, 0x018f,
  16539     0x0000, 0x0190, 0xa7ab, 0x0000, 0x0000, 0x0000, 0x0193, 0xa7ac, 0x0000,
  16540     0x0194, 0x0000, 0xa78d, 0xa7aa, 0x0000, 0x0197, 0x0196, 0xa7ae, 0x2c62,
  16541     0xa7ad, 0x0000, 0x0000, 0x019c, 0x0000, 0x2c6e, 0x019d, 0x0000, 0x0000,
  16542     0x019f, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2c64,
  16543     0x0000, 0x0000, 0x01a6, 0x0000, 0x0000, 0x01a9, 0x0000, 0x0000, 0x0000,
  16544     0xa7b1, 0x01ae, 0x0244, 0x01b1, 0x01b2, 0x0245, 0x0000, 0x0000, 0x0000,
  16545     0x0000, 0x0000, 0x01b7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16546     0x0000, 0x0000, 0x0000, 0x0000, 0xa7b2, 0xa7b0, 0x0000, 0x0000, 0x0000,
  16547     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16548     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16549     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16550     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16551     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16552     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16553     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16554     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16555     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16556     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16557     0x0000, 0x0000, 0x0000, 0x0000
  16558   },
  16559   { /* page 3, index 3 */
  16560     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16561     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16562     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16563     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16564     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16565     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16566     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16567     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16568     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16569     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16570     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16571     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16572     0x0000, 0x0000, 0x0000, 0x0000, 0x0371, 0x0370, 0x0373, 0x0372, 0x0000,
  16573     0x0000, 0x0377, 0x0376, 0x0000, 0x0000, 0x0000, 0x03fd, 0x03fe, 0x03ff,
  16574     0x0000, 0x03f3, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x03ac,
  16575     0x0000, 0x03ad, 0x03ae, 0x03af, 0x0000, 0x03cc, 0x0000, 0x03cd, 0x03ce,
  16576     0x100008f, 0x03b1, 0x03b2, 0x03b3, 0x03b4, 0x03b5, 0x03b6, 0x03b7,
  16577     0x03b8, 0x03b9, 0x03ba, 0x03bb, 0x03bc, 0x03bd, 0x03be, 0x03bf, 0x03c0,
  16578     0x03c1, 0x0000, 0x03c3, 0x03c4, 0x03c5, 0x03c6, 0x03c7, 0x03c8, 0x03c9,
  16579     0x03ca, 0x03cb, 0x0386, 0x0388, 0x0389, 0x038a, 0x100009e, 0x0391,
  16580     0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, 0x0398, 0x0399, 0x039a,
  16581     0x039b, 0x039c, 0x039d, 0x039e, 0x039f, 0x03a0, 0x03a1, 0x03a3, 0x03a3,
  16582     0x03a4, 0x03a5, 0x03a6, 0x03a7, 0x03a8, 0x03a9, 0x03aa, 0x03ab, 0x038c,
  16583     0x038e, 0x038f, 0x03d7, 0x0392, 0x0398, 0x0000, 0x0000, 0x0000, 0x03a6,
  16584     0x03a0, 0x03cf, 0x03d9, 0x03d8, 0x03db, 0x03da, 0x03dd, 0x03dc, 0x03df,
  16585     0x03de, 0x03e1, 0x03e0, 0x03e3, 0x03e2, 0x03e5, 0x03e4, 0x03e7, 0x03e6,
  16586     0x03e9, 0x03e8, 0x03eb, 0x03ea, 0x03ed, 0x03ec, 0x03ef, 0x03ee, 0x039a,
  16587     0x03a1, 0x03f9, 0x037f, 0x03b8, 0x0395, 0x0000, 0x03f8, 0x03f7, 0x03f2,
  16588     0x03fb, 0x03fa, 0x0000, 0x037b, 0x037c, 0x037d
  16589   },
  16590   { /* page 4, index 4 */
  16591     0x0450, 0x0451, 0x0452, 0x0453, 0x0454, 0x0455, 0x0456, 0x0457, 0x0458,
  16592     0x0459, 0x045a, 0x045b, 0x045c, 0x045d, 0x045e, 0x045f, 0x0430, 0x0431,
  16593     0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437, 0x0438, 0x0439, 0x043a,
  16594     0x043b, 0x043c, 0x043d, 0x043e, 0x043f, 0x0440, 0x0441, 0x0442, 0x0443,
  16595     0x0444, 0x0445, 0x0446, 0x0447, 0x0448, 0x0449, 0x044a, 0x044b, 0x044c,
  16596     0x044d, 0x044e, 0x044f, 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415,
  16597     0x0416, 0x0417, 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e,
  16598     0x041f, 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427,
  16599     0x0428, 0x0429, 0x042a, 0x042b, 0x042c, 0x042d, 0x042e, 0x042f, 0x0400,
  16600     0x0401, 0x0402, 0x0403, 0x0404, 0x0405, 0x0406, 0x0407, 0x0408, 0x0409,
  16601     0x040a, 0x040b, 0x040c, 0x040d, 0x040e, 0x040f, 0x0461, 0x0460, 0x0463,
  16602     0x0462, 0x0465, 0x0464, 0x0467, 0x0466, 0x0469, 0x0468, 0x046b, 0x046a,
  16603     0x046d, 0x046c, 0x046f, 0x046e, 0x0471, 0x0470, 0x0473, 0x0472, 0x0475,
  16604     0x0474, 0x0477, 0x0476, 0x0479, 0x0478, 0x047b, 0x047a, 0x047d, 0x047c,
  16605     0x047f, 0x047e, 0x0481, 0x0480, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16606     0x0000, 0x0000, 0x0000, 0x048b, 0x048a, 0x048d, 0x048c, 0x048f, 0x048e,
  16607     0x0491, 0x0490, 0x0493, 0x0492, 0x0495, 0x0494, 0x0497, 0x0496, 0x0499,
  16608     0x0498, 0x049b, 0x049a, 0x049d, 0x049c, 0x049f, 0x049e, 0x04a1, 0x04a0,
  16609     0x04a3, 0x04a2, 0x04a5, 0x04a4, 0x04a7, 0x04a6, 0x04a9, 0x04a8, 0x04ab,
  16610     0x04aa, 0x04ad, 0x04ac, 0x04af, 0x04ae, 0x04b1, 0x04b0, 0x04b3, 0x04b2,
  16611     0x04b5, 0x04b4, 0x04b7, 0x04b6, 0x04b9, 0x04b8, 0x04bb, 0x04ba, 0x04bd,
  16612     0x04bc, 0x04bf, 0x04be, 0x04cf, 0x04c2, 0x04c1, 0x04c4, 0x04c3, 0x04c6,
  16613     0x04c5, 0x04c8, 0x04c7, 0x04ca, 0x04c9, 0x04cc, 0x04cb, 0x04ce, 0x04cd,
  16614     0x04c0, 0x04d1, 0x04d0, 0x04d3, 0x04d2, 0x04d5, 0x04d4, 0x04d7, 0x04d6,
  16615     0x04d9, 0x04d8, 0x04db, 0x04da, 0x04dd, 0x04dc, 0x04df, 0x04de, 0x04e1,
  16616     0x04e0, 0x04e3, 0x04e2, 0x04e5, 0x04e4, 0x04e7, 0x04e6, 0x04e9, 0x04e8,
  16617     0x04eb, 0x04ea, 0x04ed, 0x04ec, 0x04ef, 0x04ee, 0x04f1, 0x04f0, 0x04f3,
  16618     0x04f2, 0x04f5, 0x04f4, 0x04f7, 0x04f6, 0x04f9, 0x04f8, 0x04fb, 0x04fa,
  16619     0x04fd, 0x04fc, 0x04ff, 0x04fe
  16620   },
  16621   { /* page 5, index 5 */
  16622     0x0501, 0x0500, 0x0503, 0x0502, 0x0505, 0x0504, 0x0507, 0x0506, 0x0509,
  16623     0x0508, 0x050b, 0x050a, 0x050d, 0x050c, 0x050f, 0x050e, 0x0511, 0x0510,
  16624     0x0513, 0x0512, 0x0515, 0x0514, 0x0517, 0x0516, 0x0519, 0x0518, 0x051b,
  16625     0x051a, 0x051d, 0x051c, 0x051f, 0x051e, 0x0521, 0x0520, 0x0523, 0x0522,
  16626     0x0525, 0x0524, 0x0527, 0x0526, 0x0529, 0x0528, 0x052b, 0x052a, 0x052d,
  16627     0x052c, 0x052f, 0x052e, 0x0000, 0x0561, 0x0562, 0x0563, 0x0564, 0x0565,
  16628     0x0566, 0x0567, 0x0568, 0x0569, 0x056a, 0x056b, 0x056c, 0x056d, 0x056e,
  16629     0x056f, 0x0570, 0x0571, 0x0572, 0x0573, 0x0574, 0x0575, 0x0576, 0x0577,
  16630     0x0578, 0x0579, 0x057a, 0x057b, 0x057c, 0x057d, 0x057e, 0x057f, 0x0580,
  16631     0x0581, 0x0582, 0x0583, 0x0584, 0x0585, 0x0586, 0x0000, 0x0000, 0x0000,
  16632     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0531, 0x0532,
  16633     0x0533, 0x0534, 0x0535, 0x0536, 0x0537, 0x0538, 0x0539, 0x053a, 0x053b,
  16634     0x053c, 0x053d, 0x053e, 0x053f, 0x0540, 0x0541, 0x0542, 0x0543, 0x0544,
  16635     0x0545, 0x0546, 0x0547, 0x0548, 0x0549, 0x054a, 0x054b, 0x054c, 0x054d,
  16636     0x054e, 0x054f, 0x0550, 0x0551, 0x0552, 0x0553, 0x0554, 0x0555, 0x0556,
  16637     0x1000044, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16638     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16639     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16640     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16641     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16642     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16643     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16644     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16645     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16646     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16647     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16648     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16649     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16650     0x0000, 0x0000, 0x0000, 0x0000, 0x0000
  16651   },
  16652   { /* page 6, index 6 */
  16653     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16654     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16655     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16656     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16657     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16658     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16659     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16660     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16661     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16662     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16663     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0002,
  16664     0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x0000, 0x0000,
  16665     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16666     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16667     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16668     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16669     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16670     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16671     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16672     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16673     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16674     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16675     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16676     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16677     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16678     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16679     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0002,
  16680     0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x0000, 0x0000,
  16681     0x0000, 0x0000, 0x0000, 0x0000
  16682   },
  16683   { /* page 7, index 7 */
  16684     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16685     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16686     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16687     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16688     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16689     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16690     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16691     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16692     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16693     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16694     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16695     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16696     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16697     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16698     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16699     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16700     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16701     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16702     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16703     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16704     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16705     0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005,
  16706     0x0006, 0x0007, 0x0008, 0x0009, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16707     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16708     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16709     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16710     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16711     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16712     0x0000, 0x0000, 0x0000, 0x0000
  16713   },
  16714   { /* page 9, index 8 */
  16715     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16716     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16717     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16718     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16719     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16720     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16721     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16722     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16723     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16724     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16725     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16726     0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005,
  16727     0x0006, 0x0007, 0x0008, 0x0009, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16728     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16729     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16730     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16731     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16732     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16733     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16734     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16735     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16736     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16737     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16738     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16739     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16740     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0002, 0x0003,
  16741     0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x0000, 0x0000, 0x0000,
  16742     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16743     0x0000, 0x0000, 0x0000, 0x0000
  16744   },
  16745   { /* page 10, index 9 */
  16746     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16747     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16748     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16749     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16750     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16751     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16752     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16753     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16754     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16755     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16756     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16757     0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005,
  16758     0x0006, 0x0007, 0x0008, 0x0009, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16759     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16760     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16761     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16762     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16763     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16764     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16765     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16766     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16767     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16768     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16769     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16770     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16771     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0002, 0x0003,
  16772     0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x0000, 0x0000, 0x0000,
  16773     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16774     0x0000, 0x0000, 0x0000, 0x0000
  16775   },
  16776   { /* page 11, index 10 */
  16777     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16778     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16779     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16780     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16781     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16782     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16783     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16784     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16785     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16786     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16787     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16788     0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005,
  16789     0x0006, 0x0007, 0x0008, 0x0009, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16790     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16791     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16792     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16793     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16794     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16795     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16796     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16797     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16798     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16799     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16800     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16801     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16802     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0002, 0x0003,
  16803     0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x0000, 0x0000, 0x0000,
  16804     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16805     0x0000, 0x0000, 0x0000, 0x0000
  16806   },
  16807   { /* page 12, index 11 */
  16808     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16809     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16810     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16811     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16812     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16813     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16814     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16815     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16816     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16817     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16818     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16819     0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005,
  16820     0x0006, 0x0007, 0x0008, 0x0009, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16821     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16822     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16823     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16824     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16825     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16826     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16827     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16828     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16829     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16830     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16831     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16832     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16833     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0002, 0x0003,
  16834     0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x0000, 0x0000, 0x0000,
  16835     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16836     0x0000, 0x0000, 0x0000, 0x0000
  16837   },
  16838   { /* page 13, index 12 */
  16839     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16840     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16841     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16842     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16843     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16844     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16845     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16846     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16847     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16848     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16849     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16850     0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005,
  16851     0x0006, 0x0007, 0x0008, 0x0009, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16852     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16853     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16854     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16855     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16856     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16857     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16858     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16859     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16860     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16861     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16862     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16863     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16864     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0002, 0x0003,
  16865     0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x0000, 0x0000, 0x0000,
  16866     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16867     0x0000, 0x0000, 0x0000, 0x0000
  16868   },
  16869   { /* page 14, index 13 */
  16870     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16871     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16872     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16873     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16874     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16875     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16876     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16877     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16878     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16879     0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009,
  16880     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16881     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16882     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16883     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16884     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16885     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16886     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16887     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16888     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16889     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16890     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16891     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16892     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16893     0x0000, 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007,
  16894     0x0008, 0x0009, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16895     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16896     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16897     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16898     0x0000, 0x0000, 0x0000, 0x0000
  16899   },
  16900   { /* page 15, index 14 */
  16901     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16902     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16903     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16904     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0002, 0x0003,
  16905     0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x0000, 0x0000, 0x0000,
  16906     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16907     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16908     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16909     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16910     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16911     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16912     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16913     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16914     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16915     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16916     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16917     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16918     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16919     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16920     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16921     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16922     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16923     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16924     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16925     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16926     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16927     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16928     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16929     0x0000, 0x0000, 0x0000, 0x0000
  16930   },
  16931   { /* page 16, index 15 */
  16932     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16933     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16934     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16935     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16936     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16937     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16938     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16939     0x0000, 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007,
  16940     0x0008, 0x0009, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16941     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16942     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16943     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16944     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16945     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16946     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16947     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16948     0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008,
  16949     0x0009, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2d00, 0x2d01,
  16950     0x2d02, 0x2d03, 0x2d04, 0x2d05, 0x2d06, 0x2d07, 0x2d08, 0x2d09, 0x2d0a,
  16951     0x2d0b, 0x2d0c, 0x2d0d, 0x2d0e, 0x2d0f, 0x2d10, 0x2d11, 0x2d12, 0x2d13,
  16952     0x2d14, 0x2d15, 0x2d16, 0x2d17, 0x2d18, 0x2d19, 0x2d1a, 0x2d1b, 0x2d1c,
  16953     0x2d1d, 0x2d1e, 0x2d1f, 0x2d20, 0x2d21, 0x2d22, 0x2d23, 0x2d24, 0x2d25,
  16954     0x0000, 0x2d27, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2d2d, 0x0000,
  16955     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16956     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16957     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16958     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16959     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16960     0x0000, 0x0000, 0x0000, 0x0000
  16961   },
  16962   { /* page 19, index 16 */
  16963     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16964     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16965     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16966     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16967     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16968     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16969     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16970     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16971     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16972     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16973     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16974     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16975     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16976     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16977     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16978     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16979     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16980     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xab70, 0xab71,
  16981     0xab72, 0xab73, 0xab74, 0xab75, 0xab76, 0xab77, 0xab78, 0xab79, 0xab7a,
  16982     0xab7b, 0xab7c, 0xab7d, 0xab7e, 0xab7f, 0xab80, 0xab81, 0xab82, 0xab83,
  16983     0xab84, 0xab85, 0xab86, 0xab87, 0xab88, 0xab89, 0xab8a, 0xab8b, 0xab8c,
  16984     0xab8d, 0xab8e, 0xab8f, 0xab90, 0xab91, 0xab92, 0xab93, 0xab94, 0xab95,
  16985     0xab96, 0xab97, 0xab98, 0xab99, 0xab9a, 0xab9b, 0xab9c, 0xab9d, 0xab9e,
  16986     0xab9f, 0xaba0, 0xaba1, 0xaba2, 0xaba3, 0xaba4, 0xaba5, 0xaba6, 0xaba7,
  16987     0xaba8, 0xaba9, 0xabaa, 0xabab, 0xabac, 0xabad, 0xabae, 0xabaf, 0xabb0,
  16988     0xabb1, 0xabb2, 0xabb3, 0xabb4, 0xabb5, 0xabb6, 0xabb7, 0xabb8, 0xabb9,
  16989     0xabba, 0xabbb, 0xabbc, 0xabbd, 0xabbe, 0xabbf, 0x13f8, 0x13f9, 0x13fa,
  16990     0x13fb, 0x13fc, 0x13fd, 0x0000, 0x0000, 0x13f0, 0x13f1, 0x13f2, 0x13f3,
  16991     0x13f4, 0x13f5, 0x0000, 0x0000
  16992   },
  16993   { /* page 23, index 17 */
  16994     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16995     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16996     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16997     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16998     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16999     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17000     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17001     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17002     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17003     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17004     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17005     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17006     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17007     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17008     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17009     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17010     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17011     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17012     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17013     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17014     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17015     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17016     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17017     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17018     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17019     0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009,
  17020     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17021     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17022     0x0000, 0x0000, 0x0000, 0x0000
  17023   },
  17024   { /* page 24, index 18 */
  17025     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17026     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001,
  17027     0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x0000,
  17028     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17029     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17030     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17031     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17032     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17033     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17034     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17035     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17036     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17037     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17038     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17039     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17040     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17041     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17042     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17043     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17044     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17045     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17046     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17047     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17048     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17049     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17050     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17051     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17052     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17053     0x0000, 0x0000, 0x0000, 0x0000
  17054   },
  17055   { /* page 25, index 19 */
  17056     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17057     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17058     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17059     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17060     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17061     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17062     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17063     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001,
  17064     0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x0000,
  17065     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17066     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17067     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17068     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17069     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17070     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17071     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17072     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17073     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17074     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17075     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17076     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17077     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17078     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17079     0x0000, 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007,
  17080     0x0008, 0x0009, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17081     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17082     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17083     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17084     0x0000, 0x0000, 0x0000, 0x0000
  17085   },
  17086   { /* page 26, index 20 */
  17087     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17088     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17089     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17090     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17091     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17092     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17093     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17094     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17095     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17096     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17097     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17098     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17099     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17100     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17101     0x0000, 0x0000, 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006,
  17102     0x0007, 0x0008, 0x0009, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17103     0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008,
  17104     0x0009, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17105     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17106     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17107     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17108     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17109     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17110     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17111     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17112     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17113     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17114     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17115     0x0000, 0x0000, 0x0000, 0x0000
  17116   },
  17117   { /* page 27, index 21 */
  17118     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17119     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17120     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17121     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17122     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17123     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17124     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17125     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17126     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17127     0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009,
  17128     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17129     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17130     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17131     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17132     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17133     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17134     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17135     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17136     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17137     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0002, 0x0003,
  17138     0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x0000, 0x0000, 0x0000,
  17139     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17140     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17141     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17142     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17143     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17144     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17145     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17146     0x0000, 0x0000, 0x0000, 0x0000
  17147   },
  17148   { /* page 28, index 22 */
  17149     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17150     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17151     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17152     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17153     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17154     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17155     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17156     0x0000, 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007,
  17157     0x0008, 0x0009, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17158     0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009,
  17159     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17160     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17161     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17162     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17163     0x0000, 0x0000, 0x0412, 0x0414, 0x041e, 0x0421, 0x0422, 0x0422, 0x042a,
  17164     0x0462, 0xa64a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17165     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17166     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17167     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17168     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17169     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17170     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17171     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17172     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17173     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17174     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17175     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17176     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17177     0x0000, 0x0000, 0x0000, 0x0000
  17178   },
  17179   { /* page 29, index 23 */
  17180     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17181     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17182     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17183     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17184     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17185     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17186     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17187     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17188     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17189     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17190     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17191     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17192     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17193     0x0000, 0x0000, 0x0000, 0x0000, 0xa77d, 0x0000, 0x0000, 0x0000, 0x2c63,
  17194     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17195     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17196     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17197     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17198     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17199     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17200     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17201     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17202     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17203     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17204     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17205     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17206     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17207     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17208     0x0000, 0x0000, 0x0000, 0x0000
  17209   },
  17210   { /* page 30, index 24 */
  17211     0x1e01, 0x1e00, 0x1e03, 0x1e02, 0x1e05, 0x1e04, 0x1e07, 0x1e06, 0x1e09,
  17212     0x1e08, 0x1e0b, 0x1e0a, 0x1e0d, 0x1e0c, 0x1e0f, 0x1e0e, 0x1e11, 0x1e10,
  17213     0x1e13, 0x1e12, 0x1e15, 0x1e14, 0x1e17, 0x1e16, 0x1e19, 0x1e18, 0x1e1b,
  17214     0x1e1a, 0x1e1d, 0x1e1c, 0x1e1f, 0x1e1e, 0x1e21, 0x1e20, 0x1e23, 0x1e22,
  17215     0x1e25, 0x1e24, 0x1e27, 0x1e26, 0x1e29, 0x1e28, 0x1e2b, 0x1e2a, 0x1e2d,
  17216     0x1e2c, 0x1e2f, 0x1e2e, 0x1e31, 0x1e30, 0x1e33, 0x1e32, 0x1e35, 0x1e34,
  17217     0x1e37, 0x1e36, 0x1e39, 0x1e38, 0x1e3b, 0x1e3a, 0x1e3d, 0x1e3c, 0x1e3f,
  17218     0x1e3e, 0x1e41, 0x1e40, 0x1e43, 0x1e42, 0x1e45, 0x1e44, 0x1e47, 0x1e46,
  17219     0x1e49, 0x1e48, 0x1e4b, 0x1e4a, 0x1e4d, 0x1e4c, 0x1e4f, 0x1e4e, 0x1e51,
  17220     0x1e50, 0x1e53, 0x1e52, 0x1e55, 0x1e54, 0x1e57, 0x1e56, 0x1e59, 0x1e58,
  17221     0x1e5b, 0x1e5a, 0x1e5d, 0x1e5c, 0x1e5f, 0x1e5e, 0x1e61, 0x1e60, 0x1e63,
  17222     0x1e62, 0x1e65, 0x1e64, 0x1e67, 0x1e66, 0x1e69, 0x1e68, 0x1e6b, 0x1e6a,
  17223     0x1e6d, 0x1e6c, 0x1e6f, 0x1e6e, 0x1e71, 0x1e70, 0x1e73, 0x1e72, 0x1e75,
  17224     0x1e74, 0x1e77, 0x1e76, 0x1e79, 0x1e78, 0x1e7b, 0x1e7a, 0x1e7d, 0x1e7c,
  17225     0x1e7f, 0x1e7e, 0x1e81, 0x1e80, 0x1e83, 0x1e82, 0x1e85, 0x1e84, 0x1e87,
  17226     0x1e86, 0x1e89, 0x1e88, 0x1e8b, 0x1e8a, 0x1e8d, 0x1e8c, 0x1e8f, 0x1e8e,
  17227     0x1e91, 0x1e90, 0x1e93, 0x1e92, 0x1e95, 0x1e94, 0x10000b6, 0x10000bf,
  17228     0x10000c8, 0x10000d1, 0x10000da, 0x1e60, 0x0000, 0x0000, 0x00df, 0x0000,
  17229     0x1ea1, 0x1ea0, 0x1ea3, 0x1ea2, 0x1ea5, 0x1ea4, 0x1ea7, 0x1ea6, 0x1ea9,
  17230     0x1ea8, 0x1eab, 0x1eaa, 0x1ead, 0x1eac, 0x1eaf, 0x1eae, 0x1eb1, 0x1eb0,
  17231     0x1eb3, 0x1eb2, 0x1eb5, 0x1eb4, 0x1eb7, 0x1eb6, 0x1eb9, 0x1eb8, 0x1ebb,
  17232     0x1eba, 0x1ebd, 0x1ebc, 0x1ebf, 0x1ebe, 0x1ec1, 0x1ec0, 0x1ec3, 0x1ec2,
  17233     0x1ec5, 0x1ec4, 0x1ec7, 0x1ec6, 0x1ec9, 0x1ec8, 0x1ecb, 0x1eca, 0x1ecd,
  17234     0x1ecc, 0x1ecf, 0x1ece, 0x1ed1, 0x1ed0, 0x1ed3, 0x1ed2, 0x1ed5, 0x1ed4,
  17235     0x1ed7, 0x1ed6, 0x1ed9, 0x1ed8, 0x1edb, 0x1eda, 0x1edd, 0x1edc, 0x1edf,
  17236     0x1ede, 0x1ee1, 0x1ee0, 0x1ee3, 0x1ee2, 0x1ee5, 0x1ee4, 0x1ee7, 0x1ee6,
  17237     0x1ee9, 0x1ee8, 0x1eeb, 0x1eea, 0x1eed, 0x1eec, 0x1eef, 0x1eee, 0x1ef1,
  17238     0x1ef0, 0x1ef3, 0x1ef2, 0x1ef5, 0x1ef4, 0x1ef7, 0x1ef6, 0x1ef9, 0x1ef8,
  17239     0x1efb, 0x1efa, 0x1efd, 0x1efc, 0x1eff, 0x1efe
  17240   },
  17241   { /* page 31, index 25 */
  17242     0x1f08, 0x1f09, 0x1f0a, 0x1f0b, 0x1f0c, 0x1f0d, 0x1f0e, 0x1f0f, 0x1f00,
  17243     0x1f01, 0x1f02, 0x1f03, 0x1f04, 0x1f05, 0x1f06, 0x1f07, 0x1f18, 0x1f19,
  17244     0x1f1a, 0x1f1b, 0x1f1c, 0x1f1d, 0x0000, 0x0000, 0x1f10, 0x1f11, 0x1f12,
  17245     0x1f13, 0x1f14, 0x1f15, 0x0000, 0x0000, 0x1f28, 0x1f29, 0x1f2a, 0x1f2b,
  17246     0x1f2c, 0x1f2d, 0x1f2e, 0x1f2f, 0x1f20, 0x1f21, 0x1f22, 0x1f23, 0x1f24,
  17247     0x1f25, 0x1f26, 0x1f27, 0x1f38, 0x1f39, 0x1f3a, 0x1f3b, 0x1f3c, 0x1f3d,
  17248     0x1f3e, 0x1f3f, 0x1f30, 0x1f31, 0x1f32, 0x1f33, 0x1f34, 0x1f35, 0x1f36,
  17249     0x1f37, 0x1f48, 0x1f49, 0x1f4a, 0x1f4b, 0x1f4c, 0x1f4d, 0x0000, 0x0000,
  17250     0x1f40, 0x1f41, 0x1f42, 0x1f43, 0x1f44, 0x1f45, 0x0000, 0x0000,
  17251     0x10000e3, 0x1f59, 0x10000ee, 0x1f5b, 0x10000fd, 0x1f5d, 0x100010c,
  17252     0x1f5f, 0x0000, 0x1f51, 0x0000, 0x1f53, 0x0000, 0x1f55, 0x0000, 0x1f57,
  17253     0x1f68, 0x1f69, 0x1f6a, 0x1f6b, 0x1f6c, 0x1f6d, 0x1f6e, 0x1f6f, 0x1f60,
  17254     0x1f61, 0x1f62, 0x1f63, 0x1f64, 0x1f65, 0x1f66, 0x1f67, 0x1fba, 0x1fbb,
  17255     0x1fc8, 0x1fc9, 0x1fca, 0x1fcb, 0x1fda, 0x1fdb, 0x1ff8, 0x1ff9, 0x1fea,
  17256     0x1feb, 0x1ffa, 0x1ffb, 0x0000, 0x0000, 0x10001b7, 0x10001c4, 0x10001d1,
  17257     0x10001de, 0x10001eb, 0x10001f8, 0x1000205, 0x1000212, 0x100021f,
  17258     0x1000229, 0x1000233, 0x100023d, 0x1000247, 0x1000251, 0x100025b,
  17259     0x1000265, 0x100026f, 0x100027c, 0x1000289, 0x1000296, 0x10002a3,
  17260     0x10002b0, 0x10002bd, 0x10002ca, 0x10002d7, 0x10002e1, 0x10002eb,
  17261     0x10002f5, 0x10002ff, 0x1000309, 0x1000313, 0x100031d, 0x1000327,
  17262     0x1000334, 0x1000341, 0x100034e, 0x100035b, 0x1000368, 0x1000375,
  17263     0x1000382, 0x100038f, 0x1000399, 0x10003a3, 0x10003ad, 0x10003b7,
  17264     0x10003c1, 0x10003cb, 0x10003d5, 0x1fb8, 0x1fb9, 0x100041e, 0x10003df,
  17265     0x100042b, 0x0000, 0x100011b, 0x1000466, 0x1fb0, 0x1fb1, 0x1f70, 0x1f71,
  17266     0x10003eb, 0x0000, 0x0399, 0x0000, 0x0000, 0x0000, 0x1000436, 0x10003f4,
  17267     0x1000443, 0x0000, 0x1000126, 0x1000475, 0x1f72, 0x1f73, 0x1f74, 0x1f75,
  17268     0x1000400, 0x0000, 0x0000, 0x0000, 0x1fd8, 0x1fd9, 0x1000131, 0x1000140,
  17269     0x0000, 0x0000, 0x100014f, 0x100015a, 0x1fd0, 0x1fd1, 0x1f76, 0x1f77,
  17270     0x0000, 0x0000, 0x0000, 0x0000, 0x1fe8, 0x1fe9, 0x1000169, 0x1000178,
  17271     0x1000187, 0x1fec, 0x1000192, 0x100019d, 0x1fe0, 0x1fe1, 0x1f7a, 0x1f7b,
  17272     0x1fe5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x100044e, 0x1000409,
  17273     0x100045b, 0x0000, 0x10001ac, 0x1000484, 0x1f78, 0x1f79, 0x1f7c, 0x1f7d,
  17274     0x1000415, 0x0000, 0x0000, 0x0000
  17275   },
  17276   { /* page 33, index 26 */
  17277     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17278     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17279     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17280     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17281     0x0000, 0x0000, 0x03c9, 0x0000, 0x0000, 0x0000, 0x006b, 0x00e5, 0x0000,
  17282     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x214e, 0x0000, 0x0000, 0x0000,
  17283     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17284     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17285     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2132, 0x0000, 0x0000,
  17286     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17287     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17288     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17289     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17290     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17291     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2184, 0x2183, 0x0000, 0x0000,
  17292     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17293     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17294     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17295     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17296     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17297     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17298     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17299     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17300     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17301     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17302     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17303     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17304     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17305     0x0000, 0x0000, 0x0000, 0x0000
  17306   },
  17307   { /* page 44, index 27 */
  17308     0x2c30, 0x2c31, 0x2c32, 0x2c33, 0x2c34, 0x2c35, 0x2c36, 0x2c37, 0x2c38,
  17309     0x2c39, 0x2c3a, 0x2c3b, 0x2c3c, 0x2c3d, 0x2c3e, 0x2c3f, 0x2c40, 0x2c41,
  17310     0x2c42, 0x2c43, 0x2c44, 0x2c45, 0x2c46, 0x2c47, 0x2c48, 0x2c49, 0x2c4a,
  17311     0x2c4b, 0x2c4c, 0x2c4d, 0x2c4e, 0x2c4f, 0x2c50, 0x2c51, 0x2c52, 0x2c53,
  17312     0x2c54, 0x2c55, 0x2c56, 0x2c57, 0x2c58, 0x2c59, 0x2c5a, 0x2c5b, 0x2c5c,
  17313     0x2c5d, 0x2c5e, 0x0000, 0x2c00, 0x2c01, 0x2c02, 0x2c03, 0x2c04, 0x2c05,
  17314     0x2c06, 0x2c07, 0x2c08, 0x2c09, 0x2c0a, 0x2c0b, 0x2c0c, 0x2c0d, 0x2c0e,
  17315     0x2c0f, 0x2c10, 0x2c11, 0x2c12, 0x2c13, 0x2c14, 0x2c15, 0x2c16, 0x2c17,
  17316     0x2c18, 0x2c19, 0x2c1a, 0x2c1b, 0x2c1c, 0x2c1d, 0x2c1e, 0x2c1f, 0x2c20,
  17317     0x2c21, 0x2c22, 0x2c23, 0x2c24, 0x2c25, 0x2c26, 0x2c27, 0x2c28, 0x2c29,
  17318     0x2c2a, 0x2c2b, 0x2c2c, 0x2c2d, 0x2c2e, 0x0000, 0x2c61, 0x2c60, 0x026b,
  17319     0x1d7d, 0x027d, 0x023a, 0x023e, 0x2c68, 0x2c67, 0x2c6a, 0x2c69, 0x2c6c,
  17320     0x2c6b, 0x0251, 0x0271, 0x0250, 0x0252, 0x0000, 0x2c73, 0x2c72, 0x0000,
  17321     0x2c76, 0x2c75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17322     0x023f, 0x0240, 0x2c81, 0x2c80, 0x2c83, 0x2c82, 0x2c85, 0x2c84, 0x2c87,
  17323     0x2c86, 0x2c89, 0x2c88, 0x2c8b, 0x2c8a, 0x2c8d, 0x2c8c, 0x2c8f, 0x2c8e,
  17324     0x2c91, 0x2c90, 0x2c93, 0x2c92, 0x2c95, 0x2c94, 0x2c97, 0x2c96, 0x2c99,
  17325     0x2c98, 0x2c9b, 0x2c9a, 0x2c9d, 0x2c9c, 0x2c9f, 0x2c9e, 0x2ca1, 0x2ca0,
  17326     0x2ca3, 0x2ca2, 0x2ca5, 0x2ca4, 0x2ca7, 0x2ca6, 0x2ca9, 0x2ca8, 0x2cab,
  17327     0x2caa, 0x2cad, 0x2cac, 0x2caf, 0x2cae, 0x2cb1, 0x2cb0, 0x2cb3, 0x2cb2,
  17328     0x2cb5, 0x2cb4, 0x2cb7, 0x2cb6, 0x2cb9, 0x2cb8, 0x2cbb, 0x2cba, 0x2cbd,
  17329     0x2cbc, 0x2cbf, 0x2cbe, 0x2cc1, 0x2cc0, 0x2cc3, 0x2cc2, 0x2cc5, 0x2cc4,
  17330     0x2cc7, 0x2cc6, 0x2cc9, 0x2cc8, 0x2ccb, 0x2cca, 0x2ccd, 0x2ccc, 0x2ccf,
  17331     0x2cce, 0x2cd1, 0x2cd0, 0x2cd3, 0x2cd2, 0x2cd5, 0x2cd4, 0x2cd7, 0x2cd6,
  17332     0x2cd9, 0x2cd8, 0x2cdb, 0x2cda, 0x2cdd, 0x2cdc, 0x2cdf, 0x2cde, 0x2ce1,
  17333     0x2ce0, 0x2ce3, 0x2ce2, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17334     0x0000, 0x2cec, 0x2ceb, 0x2cee, 0x2ced, 0x0000, 0x0000, 0x0000, 0x2cf3,
  17335     0x2cf2, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17336     0x0000, 0x0000, 0x0000, 0x0000
  17337   },
  17338   { /* page 45, index 28 */
  17339     0x10a0, 0x10a1, 0x10a2, 0x10a3, 0x10a4, 0x10a5, 0x10a6, 0x10a7, 0x10a8,
  17340     0x10a9, 0x10aa, 0x10ab, 0x10ac, 0x10ad, 0x10ae, 0x10af, 0x10b0, 0x10b1,
  17341     0x10b2, 0x10b3, 0x10b4, 0x10b5, 0x10b6, 0x10b7, 0x10b8, 0x10b9, 0x10ba,
  17342     0x10bb, 0x10bc, 0x10bd, 0x10be, 0x10bf, 0x10c0, 0x10c1, 0x10c2, 0x10c3,
  17343     0x10c4, 0x10c5, 0x0000, 0x10c7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17344     0x10cd, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17345     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17346     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17347     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17348     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17349     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17350     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17351     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17352     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17353     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17354     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17355     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17356     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17357     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17358     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17359     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17360     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17361     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17362     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17363     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17364     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17365     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17366     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17367     0x0000, 0x0000, 0x0000, 0x0000
  17368   },
  17369   { /* page 166, index 29 */
  17370     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17371     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17372     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17373     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0002, 0x0003,
  17374     0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x0000, 0x0000, 0x0000,
  17375     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17376     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17377     0x0000, 0xa641, 0xa640, 0xa643, 0xa642, 0xa645, 0xa644, 0xa647, 0xa646,
  17378     0xa649, 0xa648, 0xa64b, 0xa64a, 0xa64d, 0xa64c, 0xa64f, 0xa64e, 0xa651,
  17379     0xa650, 0xa653, 0xa652, 0xa655, 0xa654, 0xa657, 0xa656, 0xa659, 0xa658,
  17380     0xa65b, 0xa65a, 0xa65d, 0xa65c, 0xa65f, 0xa65e, 0xa661, 0xa660, 0xa663,
  17381     0xa662, 0xa665, 0xa664, 0xa667, 0xa666, 0xa669, 0xa668, 0xa66b, 0xa66a,
  17382     0xa66d, 0xa66c, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17383     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17384     0x0000, 0x0000, 0xa681, 0xa680, 0xa683, 0xa682, 0xa685, 0xa684, 0xa687,
  17385     0xa686, 0xa689, 0xa688, 0xa68b, 0xa68a, 0xa68d, 0xa68c, 0xa68f, 0xa68e,
  17386     0xa691, 0xa690, 0xa693, 0xa692, 0xa695, 0xa694, 0xa697, 0xa696, 0xa699,
  17387     0xa698, 0xa69b, 0xa69a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17388     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17389     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17390     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17391     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17392     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17393     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17394     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17395     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17396     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17397     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17398     0x0000, 0x0000, 0x0000, 0x0000
  17399   },
  17400   { /* page 167, index 30 */
  17401     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17402     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17403     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17404     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa723, 0xa722,
  17405     0xa725, 0xa724, 0xa727, 0xa726, 0xa729, 0xa728, 0xa72b, 0xa72a, 0xa72d,
  17406     0xa72c, 0xa72f, 0xa72e, 0x0000, 0x0000, 0xa733, 0xa732, 0xa735, 0xa734,
  17407     0xa737, 0xa736, 0xa739, 0xa738, 0xa73b, 0xa73a, 0xa73d, 0xa73c, 0xa73f,
  17408     0xa73e, 0xa741, 0xa740, 0xa743, 0xa742, 0xa745, 0xa744, 0xa747, 0xa746,
  17409     0xa749, 0xa748, 0xa74b, 0xa74a, 0xa74d, 0xa74c, 0xa74f, 0xa74e, 0xa751,
  17410     0xa750, 0xa753, 0xa752, 0xa755, 0xa754, 0xa757, 0xa756, 0xa759, 0xa758,
  17411     0xa75b, 0xa75a, 0xa75d, 0xa75c, 0xa75f, 0xa75e, 0xa761, 0xa760, 0xa763,
  17412     0xa762, 0xa765, 0xa764, 0xa767, 0xa766, 0xa769, 0xa768, 0xa76b, 0xa76a,
  17413     0xa76d, 0xa76c, 0xa76f, 0xa76e, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17414     0x0000, 0x0000, 0x0000, 0x0000, 0xa77a, 0xa779, 0xa77c, 0xa77b, 0x1d79,
  17415     0xa77f, 0xa77e, 0xa781, 0xa780, 0xa783, 0xa782, 0xa785, 0xa784, 0xa787,
  17416     0xa786, 0x0000, 0x0000, 0x0000, 0xa78c, 0xa78b, 0x0265, 0x0000, 0x0000,
  17417     0xa791, 0xa790, 0xa793, 0xa792, 0x0000, 0x0000, 0xa797, 0xa796, 0xa799,
  17418     0xa798, 0xa79b, 0xa79a, 0xa79d, 0xa79c, 0xa79f, 0xa79e, 0xa7a1, 0xa7a0,
  17419     0xa7a3, 0xa7a2, 0xa7a5, 0xa7a4, 0xa7a7, 0xa7a6, 0xa7a9, 0xa7a8, 0x0266,
  17420     0x025c, 0x0261, 0x026c, 0x026a, 0x0000, 0x029e, 0x0287, 0x029d, 0xab53,
  17421     0xa7b5, 0xa7b4, 0xa7b7, 0xa7b6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17422     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17423     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17424     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17425     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17426     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17427     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17428     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17429     0x0000, 0x0000, 0x0000, 0x0000
  17430   },
  17431   { /* page 168, index 31 */
  17432     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17433     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17434     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17435     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17436     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17437     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17438     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17439     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17440     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17441     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17442     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17443     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17444     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17445     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17446     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17447     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17448     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17449     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17450     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17451     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17452     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17453     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17454     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17455     0x0000, 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007,
  17456     0x0008, 0x0009, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17457     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17458     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17459     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17460     0x0000, 0x0000, 0x0000, 0x0000
  17461   },
  17462   { /* page 169, index 32 */
  17463     0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008,
  17464     0x0009, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17465     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17466     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17467     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17468     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17469     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17470     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17471     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17472     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17473     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17474     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17475     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17476     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17477     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17478     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17479     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17480     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17481     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17482     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17483     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17484     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17485     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17486     0x0000, 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007,
  17487     0x0008, 0x0009, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17488     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17489     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0002,
  17490     0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x0000, 0x0000,
  17491     0x0000, 0x0000, 0x0000, 0x0000
  17492   },
  17493   { /* page 170, index 33 */
  17494     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17495     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17496     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17497     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17498     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17499     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17500     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17501     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17502     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17503     0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009,
  17504     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17505     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17506     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17507     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17508     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17509     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17510     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17511     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17512     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17513     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17514     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17515     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17516     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17517     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17518     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17519     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17520     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17521     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17522     0x0000, 0x0000, 0x0000, 0x0000
  17523   },
  17524   { /* page 171, index 34 */
  17525     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17526     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17527     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17528     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17529     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17530     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17531     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17532     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17533     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17534     0x0000, 0x0000, 0xa7b3, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17535     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17536     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17537     0x0000, 0x0000, 0x0000, 0x0000, 0x13a0, 0x13a1, 0x13a2, 0x13a3, 0x13a4,
  17538     0x13a5, 0x13a6, 0x13a7, 0x13a8, 0x13a9, 0x13aa, 0x13ab, 0x13ac, 0x13ad,
  17539     0x13ae, 0x13af, 0x13b0, 0x13b1, 0x13b2, 0x13b3, 0x13b4, 0x13b5, 0x13b6,
  17540     0x13b7, 0x13b8, 0x13b9, 0x13ba, 0x13bb, 0x13bc, 0x13bd, 0x13be, 0x13bf,
  17541     0x13c0, 0x13c1, 0x13c2, 0x13c3, 0x13c4, 0x13c5, 0x13c6, 0x13c7, 0x13c8,
  17542     0x13c9, 0x13ca, 0x13cb, 0x13cc, 0x13cd, 0x13ce, 0x13cf, 0x13d0, 0x13d1,
  17543     0x13d2, 0x13d3, 0x13d4, 0x13d5, 0x13d6, 0x13d7, 0x13d8, 0x13d9, 0x13da,
  17544     0x13db, 0x13dc, 0x13dd, 0x13de, 0x13df, 0x13e0, 0x13e1, 0x13e2, 0x13e3,
  17545     0x13e4, 0x13e5, 0x13e6, 0x13e7, 0x13e8, 0x13e9, 0x13ea, 0x13eb, 0x13ec,
  17546     0x13ed, 0x13ee, 0x13ef, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17547     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17548     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17549     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17550     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17551     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0002,
  17552     0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x0000, 0x0000,
  17553     0x0000, 0x0000, 0x0000, 0x0000
  17554   },
  17555   { /* page 251, index 35 */
  17556     0x100000f, 0x1000016, 0x100001d, 0x1000024, 0x100002d, 0x1000036,
  17557     0x100003d, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17558     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x100004f, 0x100005a, 0x1000065,
  17559     0x1000070, 0x100007b, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17560     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17561     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17562     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17563     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17564     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17565     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17566     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17567     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17568     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17569     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17570     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17571     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17572     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17573     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17574     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17575     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17576     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17577     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17578     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17579     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17580     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17581     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17582     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17583     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17584     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17585     0x0000
  17586   },
  17587   { /* page 255, index 36 */
  17588     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17589     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001,
  17590     0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x0000,
  17591     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xff41, 0xff42, 0xff43,
  17592     0xff44, 0xff45, 0xff46, 0xff47, 0xff48, 0xff49, 0xff4a, 0xff4b, 0xff4c,
  17593     0xff4d, 0xff4e, 0xff4f, 0xff50, 0xff51, 0xff52, 0xff53, 0xff54, 0xff55,
  17594     0xff56, 0xff57, 0xff58, 0xff59, 0xff5a, 0x0000, 0x0000, 0x0000, 0x0000,
  17595     0x0000, 0x0000, 0xff21, 0xff22, 0xff23, 0xff24, 0xff25, 0xff26, 0xff27,
  17596     0xff28, 0xff29, 0xff2a, 0xff2b, 0xff2c, 0xff2d, 0xff2e, 0xff2f, 0xff30,
  17597     0xff31, 0xff32, 0xff33, 0xff34, 0xff35, 0xff36, 0xff37, 0xff38, 0xff39,
  17598     0xff3a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17599     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17600     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17601     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17602     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17603     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17604     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17605     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17606     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17607     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17608     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17609     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17610     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17611     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17612     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17613     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17614     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17615     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17616     0x0000, 0x0000, 0x0000, 0x0000
  17617   },
  17618   { /* page 260, index 37 */
  17619     0x10428, 0x10429, 0x1042a, 0x1042b, 0x1042c, 0x1042d, 0x1042e, 0x1042f,
  17620     0x10430, 0x10431, 0x10432, 0x10433, 0x10434, 0x10435, 0x10436, 0x10437,
  17621     0x10438, 0x10439, 0x1043a, 0x1043b, 0x1043c, 0x1043d, 0x1043e, 0x1043f,
  17622     0x10440, 0x10441, 0x10442, 0x10443, 0x10444, 0x10445, 0x10446, 0x10447,
  17623     0x10448, 0x10449, 0x1044a, 0x1044b, 0x1044c, 0x1044d, 0x1044e, 0x1044f,
  17624     0x10400, 0x10401, 0x10402, 0x10403, 0x10404, 0x10405, 0x10406, 0x10407,
  17625     0x10408, 0x10409, 0x1040a, 0x1040b, 0x1040c, 0x1040d, 0x1040e, 0x1040f,
  17626     0x10410, 0x10411, 0x10412, 0x10413, 0x10414, 0x10415, 0x10416, 0x10417,
  17627     0x10418, 0x10419, 0x1041a, 0x1041b, 0x1041c, 0x1041d, 0x1041e, 0x1041f,
  17628     0x10420, 0x10421, 0x10422, 0x10423, 0x10424, 0x10425, 0x10426, 0x10427,
  17629     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17630     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17631     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17632     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17633     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17634     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17635     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17636     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17637     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17638     0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009,
  17639     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x104d8, 0x104d9,
  17640     0x104da, 0x104db, 0x104dc, 0x104dd, 0x104de, 0x104df, 0x104e0, 0x104e1,
  17641     0x104e2, 0x104e3, 0x104e4, 0x104e5, 0x104e6, 0x104e7, 0x104e8, 0x104e9,
  17642     0x104ea, 0x104eb, 0x104ec, 0x104ed, 0x104ee, 0x104ef, 0x104f0, 0x104f1,
  17643     0x104f2, 0x104f3, 0x104f4, 0x104f5, 0x104f6, 0x104f7, 0x104f8, 0x104f9,
  17644     0x104fa, 0x104fb, 0x0000, 0x0000, 0x0000, 0x0000, 0x104b0, 0x104b1,
  17645     0x104b2, 0x104b3, 0x104b4, 0x104b5, 0x104b6, 0x104b7, 0x104b8, 0x104b9,
  17646     0x104ba, 0x104bb, 0x104bc, 0x104bd, 0x104be, 0x104bf, 0x104c0, 0x104c1,
  17647     0x104c2, 0x104c3, 0x104c4, 0x104c5, 0x104c6, 0x104c7, 0x104c8, 0x104c9,
  17648     0x104ca, 0x104cb, 0x104cc, 0x104cd, 0x104ce, 0x104cf, 0x104d0, 0x104d1,
  17649     0x104d2, 0x104d3, 0x0000, 0x0000, 0x0000, 0x0000
  17650   },
  17651   { /* page 268, index 38 */
  17652     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17653     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17654     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17655     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17656     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17657     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17658     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17659     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17660     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17661     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17662     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17663     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17664     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17665     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17666     0x0000, 0x0000, 0x10cc0, 0x10cc1, 0x10cc2, 0x10cc3, 0x10cc4, 0x10cc5,
  17667     0x10cc6, 0x10cc7, 0x10cc8, 0x10cc9, 0x10cca, 0x10ccb, 0x10ccc, 0x10ccd,
  17668     0x10cce, 0x10ccf, 0x10cd0, 0x10cd1, 0x10cd2, 0x10cd3, 0x10cd4, 0x10cd5,
  17669     0x10cd6, 0x10cd7, 0x10cd8, 0x10cd9, 0x10cda, 0x10cdb, 0x10cdc, 0x10cdd,
  17670     0x10cde, 0x10cdf, 0x10ce0, 0x10ce1, 0x10ce2, 0x10ce3, 0x10ce4, 0x10ce5,
  17671     0x10ce6, 0x10ce7, 0x10ce8, 0x10ce9, 0x10cea, 0x10ceb, 0x10cec, 0x10ced,
  17672     0x10cee, 0x10cef, 0x10cf0, 0x10cf1, 0x10cf2, 0x0000, 0x0000, 0x0000,
  17673     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17674     0x0000, 0x10c80, 0x10c81, 0x10c82, 0x10c83, 0x10c84, 0x10c85, 0x10c86,
  17675     0x10c87, 0x10c88, 0x10c89, 0x10c8a, 0x10c8b, 0x10c8c, 0x10c8d, 0x10c8e,
  17676     0x10c8f, 0x10c90, 0x10c91, 0x10c92, 0x10c93, 0x10c94, 0x10c95, 0x10c96,
  17677     0x10c97, 0x10c98, 0x10c99, 0x10c9a, 0x10c9b, 0x10c9c, 0x10c9d, 0x10c9e,
  17678     0x10c9f, 0x10ca0, 0x10ca1, 0x10ca2, 0x10ca3, 0x10ca4, 0x10ca5, 0x10ca6,
  17679     0x10ca7, 0x10ca8, 0x10ca9, 0x10caa, 0x10cab, 0x10cac, 0x10cad, 0x10cae,
  17680     0x10caf, 0x10cb0, 0x10cb1, 0x10cb2, 0x0000, 0x0000, 0x0000, 0x0000,
  17681     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000
  17682   },
  17683   { /* page 272, index 39 */
  17684     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17685     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17686     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17687     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17688     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17689     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17690     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17691     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17692     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17693     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17694     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17695     0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005,
  17696     0x0006, 0x0007, 0x0008, 0x0009, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17697     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17698     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17699     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17700     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17701     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17702     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17703     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17704     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17705     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17706     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17707     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17708     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17709     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17710     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0002,
  17711     0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x0000, 0x0000,
  17712     0x0000, 0x0000, 0x0000, 0x0000
  17713   },
  17714   { /* page 273, index 40 */
  17715     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17716     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17717     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17718     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17719     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17720     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17721     0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008,
  17722     0x0009, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17723     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17724     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17725     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17726     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17727     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17728     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17729     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17730     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17731     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17732     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17733     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17734     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17735     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17736     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17737     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17738     0x0000, 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007,
  17739     0x0008, 0x0009, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17740     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17741     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17742     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17743     0x0000, 0x0000, 0x0000, 0x0000
  17744   },
  17745   { /* page 274, index 41 */
  17746     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17747     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17748     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17749     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17750     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17751     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17752     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17753     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17754     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17755     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17756     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17757     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17758     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17759     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17760     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17761     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17762     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17763     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17764     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17765     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17766     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17767     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17768     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17769     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17770     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17771     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17772     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0002,
  17773     0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x0000, 0x0000,
  17774     0x0000, 0x0000, 0x0000, 0x0000
  17775   },
  17776   { /* page 276, index 42 */
  17777     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17778     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17779     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17780     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17781     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17782     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17783     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17784     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17785     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17786     0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009,
  17787     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17788     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17789     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17790     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17791     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17792     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17793     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17794     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17795     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17796     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17797     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17798     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17799     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17800     0x0000, 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007,
  17801     0x0008, 0x0009, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17802     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17803     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17804     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17805     0x0000, 0x0000, 0x0000, 0x0000
  17806   },
  17807   { /* page 278, index 43 */
  17808     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17809     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17810     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17811     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17812     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17813     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17814     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17815     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17816     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17817     0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009,
  17818     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17819     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17820     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17821     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17822     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17823     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17824     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17825     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17826     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17827     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17828     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17829     0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005,
  17830     0x0006, 0x0007, 0x0008, 0x0009, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17831     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17832     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17833     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17834     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17835     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17836     0x0000, 0x0000, 0x0000, 0x0000
  17837   },
  17838   { /* page 279, index 44 */
  17839     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17840     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17841     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17842     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17843     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17844     0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005,
  17845     0x0006, 0x0007, 0x0008, 0x0009, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17846     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17847     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17848     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17849     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17850     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17851     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17852     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17853     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17854     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17855     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17856     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17857     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17858     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17859     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17860     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17861     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17862     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17863     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17864     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17865     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17866     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17867     0x0000, 0x0000, 0x0000, 0x0000
  17868   },
  17869   { /* page 280, index 45 */
  17870     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17871     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17872     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17873     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17874     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17875     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17876     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17877     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17878     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17879     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17880     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17881     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17882     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17883     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17884     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17885     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17886     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17887     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x118c0, 0x118c1,
  17888     0x118c2, 0x118c3, 0x118c4, 0x118c5, 0x118c6, 0x118c7, 0x118c8, 0x118c9,
  17889     0x118ca, 0x118cb, 0x118cc, 0x118cd, 0x118ce, 0x118cf, 0x118d0, 0x118d1,
  17890     0x118d2, 0x118d3, 0x118d4, 0x118d5, 0x118d6, 0x118d7, 0x118d8, 0x118d9,
  17891     0x118da, 0x118db, 0x118dc, 0x118dd, 0x118de, 0x118df, 0x118a0, 0x118a1,
  17892     0x118a2, 0x118a3, 0x118a4, 0x118a5, 0x118a6, 0x118a7, 0x118a8, 0x118a9,
  17893     0x118aa, 0x118ab, 0x118ac, 0x118ad, 0x118ae, 0x118af, 0x118b0, 0x118b1,
  17894     0x118b2, 0x118b3, 0x118b4, 0x118b5, 0x118b6, 0x118b7, 0x118b8, 0x118b9,
  17895     0x118ba, 0x118bb, 0x118bc, 0x118bd, 0x118be, 0x118bf, 0x0000, 0x0001,
  17896     0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x0000,
  17897     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17898     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17899     0x0000, 0x0000, 0x0000
  17900   },
  17901   { /* page 284, index 46 */
  17902     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17903     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17904     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17905     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17906     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17907     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17908     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17909     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17910     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17911     0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009,
  17912     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17913     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17914     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17915     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17916     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17917     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17918     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17919     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17920     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17921     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17922     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17923     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17924     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17925     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17926     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17927     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17928     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17929     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17930     0x0000, 0x0000, 0x0000, 0x0000
  17931   },
  17932   { /* page 285, index 47 */
  17933     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17934     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17935     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17936     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17937     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17938     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17939     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17940     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17941     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17942     0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009,
  17943     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17944     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17945     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17946     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17947     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17948     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17949     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17950     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17951     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17952     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17953     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17954     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17955     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17956     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17957     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17958     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17959     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17960     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17961     0x0000, 0x0000, 0x0000, 0x0000
  17962   },
  17963   { /* page 362, index 48 */
  17964     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17965     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17966     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17967     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17968     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17969     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17970     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17971     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17972     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17973     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17974     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0002,
  17975     0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x0000, 0x0000,
  17976     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17977     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17978     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17979     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17980     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17981     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17982     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17983     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17984     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17985     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17986     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17987     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17988     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17989     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17990     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17991     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17992     0x0000, 0x0000, 0x0000, 0x0000
  17993   },
  17994   { /* page 363, index 49 */
  17995     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17996     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17997     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17998     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17999     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  18000     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  18001     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  18002     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  18003     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  18004     0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009,
  18005     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  18006     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  18007     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  18008     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  18009     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  18010     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  18011     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  18012     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  18013     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  18014     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  18015     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  18016     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  18017     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  18018     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  18019     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  18020     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  18021     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  18022     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  18023     0x0000, 0x0000, 0x0000, 0x0000
  18024   },
  18025   { /* page 471, index 50 */
  18026     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  18027     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  18028     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  18029     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  18030     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  18031     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  18032     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  18033     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  18034     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  18035     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  18036     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  18037     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  18038     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  18039     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  18040     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  18041     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  18042     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  18043     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  18044     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  18045     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  18046     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  18047     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  18048     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  18049     0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009,
  18050     0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008,
  18051     0x0009, 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007,
  18052     0x0008, 0x0009, 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006,
  18053     0x0007, 0x0008, 0x0009, 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005,
  18054     0x0006, 0x0007, 0x0008, 0x0009
  18055   },
  18056   { /* page 489, index 51 */
  18057     0x1e922, 0x1e923, 0x1e924, 0x1e925, 0x1e926, 0x1e927, 0x1e928, 0x1e929,
  18058     0x1e92a, 0x1e92b, 0x1e92c, 0x1e92d, 0x1e92e, 0x1e92f, 0x1e930, 0x1e931,
  18059     0x1e932, 0x1e933, 0x1e934, 0x1e935, 0x1e936, 0x1e937, 0x1e938, 0x1e939,
  18060     0x1e93a, 0x1e93b, 0x1e93c, 0x1e93d, 0x1e93e, 0x1e93f, 0x1e940, 0x1e941,
  18061     0x1e942, 0x1e943, 0x1e900, 0x1e901, 0x1e902, 0x1e903, 0x1e904, 0x1e905,
  18062     0x1e906, 0x1e907, 0x1e908, 0x1e909, 0x1e90a, 0x1e90b, 0x1e90c, 0x1e90d,
  18063     0x1e90e, 0x1e90f, 0x1e910, 0x1e911, 0x1e912, 0x1e913, 0x1e914, 0x1e915,
  18064     0x1e916, 0x1e917, 0x1e918, 0x1e919, 0x1e91a, 0x1e91b, 0x1e91c, 0x1e91d,
  18065     0x1e91e, 0x1e91f, 0x1e920, 0x1e921, 0x0000, 0x0000, 0x0000, 0x0000,
  18066     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  18067     0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009,
  18068     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  18069     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  18070     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  18071     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  18072     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  18073     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  18074     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  18075     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  18076     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  18077     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  18078     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  18079     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  18080     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  18081     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  18082     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  18083     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  18084     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  18085     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  18086     0x0000, 0x0000, 0x0000, 0x0000
  18087   }
  18088 };
  18089 
  18090 /* U+0000 through U+2FAFF */
  18091 static const int16_t attr_table_part1[763] = {
  18092   0 /* page 0 */,
  18093   1 /* page 1 */,
  18094   2 /* page 2 */,
  18095   3 /* page 3 */,
  18096   4 /* page 4 */,
  18097   5 /* page 5 */,
  18098   6 /* page 6 */,
  18099   7 /* page 7 */,
  18100   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18101   8 /* page 9 */,
  18102   9 /* page 10 */,
  18103   10 /* page 11 */,
  18104   11 /* page 12 */,
  18105   12 /* page 13 */,
  18106   13 /* page 14 */,
  18107   14 /* page 15 */,
  18108   15 /* page 16 */,
  18109   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18110   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18111   16 /* page 19 */,
  18112   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18113   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18114   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18115   17 /* page 23 */,
  18116   18 /* page 24 */,
  18117   19 /* page 25 */,
  18118   20 /* page 26 */,
  18119   21 /* page 27 */,
  18120   22 /* page 28 */,
  18121   23 /* page 29 */,
  18122   24 /* page 30 */,
  18123   25 /* page 31 */,
  18124   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18125   26 /* page 33 */,
  18126   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18127   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18128   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18129   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18130   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18131   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18132   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18133   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18134   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18135   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18136   27 /* page 44 */,
  18137   28 /* page 45 */,
  18138   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18139   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18140   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18141   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18142   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18143   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18144   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18145   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18146   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18147   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18148   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18149   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18150   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18151   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18152   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18153   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18154   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18155   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18156   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18157   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18158   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18159   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18160   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18161   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18162   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18163   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18164   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18165   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18166   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18167   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18168   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18169   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18170   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18171   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18172   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18173   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18174   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18175   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18176   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18177   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18178   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18179   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18180   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18181   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18182   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18183   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18184   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18185   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18186   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18187   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18188   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18189   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18190   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18191   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18192   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18193   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18194   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18195   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18196   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18197   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18198   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18199   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18200   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18201   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18202   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18203   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18204   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18205   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18206   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18207   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18208   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18209   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18210   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18211   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18212   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18213   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18214   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18215   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18216   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18217   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18218   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18219   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18220   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18221   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18222   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18223   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18224   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18225   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18226   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18227   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18228   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18229   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18230   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18231   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18232   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18233   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18234   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18235   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18236   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18237   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18238   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18239   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18240   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18241   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18242   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18243   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18244   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18245   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18246   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18247   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18248   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18249   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18250   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18251   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18252   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18253   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18254   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18255   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18256   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18257   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18258   29 /* page 166 */,
  18259   30 /* page 167 */,
  18260   31 /* page 168 */,
  18261   32 /* page 169 */,
  18262   33 /* page 170 */,
  18263   34 /* page 171 */,
  18264   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18265   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18266   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18267   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18268   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18269   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18270   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18271   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18272   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18273   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18274   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18275   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18276   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18277   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18278   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18279   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18280   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18281   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18282   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18283   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18284   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18285   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18286   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18287   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18288   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18289   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18290   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18291   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18292   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18293   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18294   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18295   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18296   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18297   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18298   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18299   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18300   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18301   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18302   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18303   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18304   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18305   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18306   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18307   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18308   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18309   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18310   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18311   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18312   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18313   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18314   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18315   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18316   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18317   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18318   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18319   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18320   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18321   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18322   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18323   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18324   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18325   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18326   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18327   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18328   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18329   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18330   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18331   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18332   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18333   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18334   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18335   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18336   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18337   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18338   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18339   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18340   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18341   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18342   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18343   35 /* page 251 */,
  18344   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18345   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18346   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18347   36 /* page 255 */,
  18348   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18349   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18350   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18351   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18352   37 /* page 260 */,
  18353   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18354   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18355   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18356   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18357   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18358   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18359   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18360   38 /* page 268 */,
  18361   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18362   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18363   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18364   39 /* page 272 */,
  18365   40 /* page 273 */,
  18366   41 /* page 274 */,
  18367   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18368   42 /* page 276 */,
  18369   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18370   43 /* page 278 */,
  18371   44 /* page 279 */,
  18372   45 /* page 280 */,
  18373   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18374   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18375   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18376   46 /* page 284 */,
  18377   47 /* page 285 */,
  18378   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18379   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18380   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18381   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18382   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18383   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18384   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18385   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18386   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18387   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18388   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18389   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18390   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18391   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18392   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18393   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18394   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18395   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18396   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18397   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18398   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18399   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18400   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18401   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18402   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18403   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18404   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18405   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18406   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18407   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18408   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18409   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18410   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18411   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18412   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18413   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18414   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18415   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18416   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18417   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18418   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18419   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18420   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18421   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18422   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18423   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18424   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18425   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18426   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18427   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18428   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18429   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18430   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18431   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18432   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18433   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18434   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18435   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18436   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18437   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18438   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18439   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18440   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18441   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18442   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18443   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18444   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18445   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18446   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18447   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18448   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18449   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18450   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18451   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18452   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18453   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18454   48 /* page 362 */,
  18455   49 /* page 363 */,
  18456   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18457   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18458   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18459   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18460   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18461   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18462   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18463   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18464   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18465   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18466   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18467   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18468   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18469   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18470   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18471   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18472   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18473   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18474   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18475   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18476   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18477   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18478   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18479   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18480   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18481   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18482   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18483   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18484   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18485   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18486   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18487   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18488   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18489   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18490   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18491   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18492   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18493   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18494   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18495   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18496   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18497   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18498   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18499   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18500   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18501   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18502   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18503   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18504   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18505   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18506   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18507   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18508   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18509   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18510   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18511   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18512   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18513   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18514   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18515   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18516   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18517   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18518   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18519   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18520   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18521   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18522   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18523   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18524   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18525   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18526   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18527   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18528   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18529   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18530   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18531   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18532   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18533   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18534   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18535   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18536   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18537   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18538   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18539   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18540   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18541   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18542   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18543   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18544   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18545   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18546   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18547   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18548   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18549   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18550   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18551   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18552   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18553   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18554   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18555   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18556   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18557   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18558   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18559   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18560   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18561   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18562   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18563   50 /* page 471 */,
  18564   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18565   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18566   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18567   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18568   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18569   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18570   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18571   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18572   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18573   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18574   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18575   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18576   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18577   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18578   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18579   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18580   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18581   51 /* page 489 */,
  18582   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18583   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18584   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18585   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18586   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18587   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18588   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18589   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18590   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18591   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18592   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18593   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18594   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18595   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18596   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18597   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18598   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18599   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18600   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18601   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18602   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18603   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18604   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18605   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18606   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18607   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18608   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18609   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18610   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18611   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18612   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18613   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18614   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18615   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18616   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18617   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18618   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18619   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18620   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18621   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18622   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18623   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18624   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18625   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18626   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18627   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18628   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18629   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18630   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18631   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18632   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18633   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18634   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18635   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18636   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18637   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18638   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18639   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18640   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18641   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18642   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18643   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18644   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18645   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18646   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18647   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18648   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18649   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18650   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18651   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18652   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18653   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18654   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18655   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18656   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18657   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18658   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18659   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18660   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18661   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18662   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18663   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18664   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18665   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18666   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18667   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18668   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18669   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18670   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18671   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18672   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18673   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18674   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18675   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18676   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18677   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18678   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18679   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18680   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18681   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18682   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18683   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18684   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18685   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18686   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18687   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18688   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18689   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18690   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18691   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18692   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18693   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18694   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18695   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18696   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18697   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18698   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18699   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18700   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18701   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18702   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18703   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18704   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18705   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18706   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18707   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18708   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18709   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18710   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18711   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18712   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18713   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18714   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18715   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18716   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18717   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18718   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18719   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18720   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18721   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18722   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18723   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18724   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18725   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18726   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18727   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18728   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18729   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18730   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18731   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18732   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18733   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18734   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18735   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18736   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18737   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18738   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18739   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18740   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18741   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18742   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18743   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18744   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18745   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18746   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18747   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18748   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18749   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18750   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18751   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18752   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18753   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18754   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18755   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18756   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18757   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18758   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18759   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18760   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18761   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18762   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18763   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18764   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18765   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18766   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18767   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18768   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18769   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18770   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18771   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18772   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18773   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18774   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18775   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18776   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18777   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18778   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18779   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18780   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18781   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18782   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18783   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18784   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18785   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18786   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18787   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18788   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18789   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18790   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18791   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18792   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18793   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18794   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18795   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18796   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18797   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18798   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18799   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18800   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18801   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18802   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18803   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18804   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18805   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18806   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18807   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18808   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18809   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18810   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18811   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18812   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18813   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18814   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18815   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18816   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18817   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18818   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18819   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18820   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18821   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18822   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18823   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18824   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18825   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18826   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18827   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18828   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18829   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18830   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18831   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18832   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18833   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18834   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18835   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18836   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18837   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18838   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18839   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18840   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18841   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18842   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18843   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18844   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18845   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18846   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18847   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18848   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18849   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18850   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18851   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18852   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18853   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18854   0x0000 + UNICODE_MAX_TABLE_INDEX
  18855 };
  18856 
  18857 /* U+E0000 through U+10FFFF */
  18858 static const int16_t attr_table_part2[768] = {
  18859   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18860   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18861   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18862   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18863   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18864   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18865   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18866   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18867   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18868   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18869   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18870   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18871   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18872   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18873   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18874   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18875   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18876   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18877   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18878   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18879   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18880   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18881   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18882   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18883   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18884   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18885   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18886   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18887   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18888   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18889   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18890   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18891   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18892   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18893   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18894   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18895   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18896   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18897   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18898   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18899   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18900   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18901   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18902   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18903   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18904   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18905   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18906   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18907   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18908   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18909   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18910   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18911   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18912   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18913   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18914   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18915   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18916   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18917   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18918   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18919   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18920   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18921   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18922   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18923   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18924   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18925   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18926   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18927   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18928   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18929   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18930   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18931   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18932   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18933   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18934   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18935   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18936   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18937   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18938   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18939   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18940   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18941   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18942   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18943   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18944   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18945   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18946   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18947   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18948   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18949   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18950   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18951   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18952   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18953   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18954   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18955   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18956   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18957   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18958   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18959   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18960   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18961   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18962   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18963   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18964   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18965   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18966   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18967   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18968   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18969   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18970   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18971   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18972   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18973   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18974   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18975   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18976   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18977   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18978   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18979   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18980   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18981   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18982   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18983   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18984   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18985   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18986   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18987   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18988   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18989   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18990   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18991   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18992   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18993   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18994   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18995   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18996   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18997   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18998   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18999   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19000   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19001   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19002   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19003   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19004   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19005   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19006   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19007   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19008   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19009   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19010   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19011   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19012   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19013   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19014   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19015   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19016   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19017   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19018   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19019   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19020   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19021   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19022   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19023   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19024   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19025   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19026   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19027   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19028   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19029   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19030   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19031   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19032   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19033   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19034   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19035   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19036   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19037   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19038   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19039   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19040   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19041   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19042   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19043   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19044   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19045   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19046   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19047   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19048   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19049   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19050   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19051   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19052   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19053   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19054   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19055   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19056   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19057   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19058   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19059   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19060   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19061   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19062   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19063   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19064   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19065   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19066   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19067   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19068   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19069   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19070   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19071   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19072   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19073   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19074   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19075   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19076   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19077   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19078   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19079   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19080   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19081   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19082   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19083   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19084   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19085   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19086   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19087   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19088   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19089   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19090   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19091   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19092   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19093   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19094   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19095   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19096   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19097   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19098   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19099   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19100   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19101   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19102   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19103   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19104   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19105   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19106   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19107   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19108   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19109   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19110   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19111   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19112   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19113   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19114   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19115   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19116   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19117   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19118   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19119   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19120   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19121   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19122   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19123   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19124   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19125   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19126   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19127   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19128   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19129   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19130   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19131   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19132   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19133   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19134   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19135   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19136   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19137   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19138   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19139   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19140   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19141   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19142   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19143   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19144   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19145   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19146   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19147   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19148   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19149   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19150   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19151   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19152   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19153   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19154   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19155   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19156   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19157   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19158   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19159   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19160   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19161   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19162   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19163   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19164   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19165   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19166   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19167   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19168   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19169   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19170   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19171   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19172   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19173   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19174   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19175   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19176   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19177   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19178   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19179   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19180   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19181   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19182   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19183   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19184   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19185   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19186   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19187   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19188   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19189   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19190   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19191   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19192   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19193   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19194   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19195   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19196   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19197   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19198   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19199   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19200   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19201   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19202   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19203   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19204   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19205   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19206   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19207   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19208   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19209   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19210   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19211   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19212   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19213   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19214   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19215   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19216   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19217   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19218   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19219   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19220   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19221   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19222   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19223   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19224   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19225   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19226   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19227   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19228   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19229   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19230   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19231   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19232   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19233   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19234   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19235   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19236   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19237   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19238   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19239   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19240   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19241   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19242   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19243   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19244   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19245   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19246   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19247   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19248   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19249   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19250   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19251   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19252   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19253   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19254   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19255   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19256   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19257   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19258   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19259   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19260   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19261   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19262   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19263   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19264   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19265   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19266   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19267   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19268   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19269   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19270   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19271   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19272   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19273   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19274   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19275   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19276   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19277   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19278   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19279   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19280   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19281   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19282   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19283   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19284   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19285   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19286   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19287   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19288   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19289   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19290   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19291   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19292   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19293   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19294   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19295   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19296   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19297   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19298   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19299   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19300   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19301   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19302   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19303   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19304   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19305   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19306   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19307   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19308   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19309   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19310   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19311   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19312   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19313   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19314   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19315   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19316   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19317   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19318   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19319   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19320   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19321   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19322   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19323   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19324   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19325   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19326   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19327   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19328   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19329   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19330   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19331   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19332   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19333   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19334   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19335   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19336   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19337   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19338   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19339   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19340   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19341   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19342   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19343   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19344   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19345   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19346   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19347   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19348   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19349   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19350   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19351   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19352   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19353   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19354   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19355   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19356   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19357   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19358   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19359   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19360   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19361   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19362   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19363   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19364   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19365   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19366   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19367   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19368   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19369   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19370   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19371   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19372   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19373   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19374   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19375   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19376   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19377   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19378   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19379   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19380   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19381   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19382   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19383   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19384   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19385   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19386   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19387   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19388   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19389   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19390   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19391   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19392   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19393   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19394   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19395   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19396   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19397   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19398   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19399   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19400   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19401   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19402   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19403   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19404   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19405   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19406   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19407   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19408   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19409   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19410   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19411   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19412   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19413   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19414   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19415   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19416   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19417   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19418   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19419   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19420   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19421   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19422   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19423   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19424   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19425   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19426   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19427   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19428   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19429   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19430   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19431   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19432   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19433   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19434   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19435   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19436   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19437   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19438   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19439   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19440   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19441   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19442   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19443   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19444   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19445   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19446   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19447   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19448   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19449   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19450   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19451   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19452   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19453   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19454   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19455   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19456   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19457   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19458   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19459   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19460   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19461   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19462   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19463   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19464   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19465   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19466   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19467   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19468   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19469   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19470   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19471   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19472   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19473   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19474   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19475   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19476   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19477   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19478   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19479   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19480   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19481   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19482   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19483   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19484   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19485   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19486   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19487   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19488   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19489   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19490   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19491   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19492   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19493   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19494   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19495   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19496   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19497   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19498   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19499   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19500   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19501   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19502   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19503   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19504   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19505   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19506   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19507   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19508   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19509   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19510   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19511   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19512   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19513   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19514   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19515   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19516   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19517   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19518   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19519   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19520   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19521   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19522   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19523   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19524   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19525   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19526   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19527   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19528   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19529   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19530   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19531   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19532   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19533   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19534   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19535   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19536   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19537   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19538   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19539   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19540   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19541   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19542   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19543   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19544   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19545   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19546   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19547   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19548   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19549   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19550   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19551   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19552   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19553   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19554   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19555   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19556   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19557   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19558   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19559   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19560   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19561   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19562   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19563   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19564   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19565   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19566   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19567   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19568   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19569   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19570   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19571   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19572   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19573   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19574   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19575   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19576   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19577   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19578   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19579   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19580   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19581   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19582   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19583   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19584   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19585   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19586   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19587   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19588   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19589   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19590   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19591   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19592   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19593   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19594   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19595   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19596   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19597   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19598   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19599   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19600   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19601   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19602   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19603   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19604   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19605   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19606   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19607   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19608   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19609   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19610   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19611   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19612   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19613   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19614   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19615   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19616   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19617   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19618   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19619   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19620   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19621   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19622   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19623   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19624   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19625   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19626   0x0000 + UNICODE_MAX_TABLE_INDEX
  19627 };
  19628 
  19629 static const rune title_table[][3] = {
  19630   { 0x01c5, 0x01c4, 0x01c6 },
  19631   { 0x01c8, 0x01c7, 0x01c9 },
  19632   { 0x01cb, 0x01ca, 0x01cc },
  19633   { 0x01f2, 0x01f1, 0x01f3 },
  19634   { 0x1f88, 0x0000, 0x1f80 },
  19635   { 0x1f89, 0x0000, 0x1f81 },
  19636   { 0x1f8a, 0x0000, 0x1f82 },
  19637   { 0x1f8b, 0x0000, 0x1f83 },
  19638   { 0x1f8c, 0x0000, 0x1f84 },
  19639   { 0x1f8d, 0x0000, 0x1f85 },
  19640   { 0x1f8e, 0x0000, 0x1f86 },
  19641   { 0x1f8f, 0x0000, 0x1f87 },
  19642   { 0x1f98, 0x0000, 0x1f90 },
  19643   { 0x1f99, 0x0000, 0x1f91 },
  19644   { 0x1f9a, 0x0000, 0x1f92 },
  19645   { 0x1f9b, 0x0000, 0x1f93 },
  19646   { 0x1f9c, 0x0000, 0x1f94 },
  19647   { 0x1f9d, 0x0000, 0x1f95 },
  19648   { 0x1f9e, 0x0000, 0x1f96 },
  19649   { 0x1f9f, 0x0000, 0x1f97 },
  19650   { 0x1fa8, 0x0000, 0x1fa0 },
  19651   { 0x1fa9, 0x0000, 0x1fa1 },
  19652   { 0x1faa, 0x0000, 0x1fa2 },
  19653   { 0x1fab, 0x0000, 0x1fa3 },
  19654   { 0x1fac, 0x0000, 0x1fa4 },
  19655   { 0x1fad, 0x0000, 0x1fa5 },
  19656   { 0x1fae, 0x0000, 0x1fa6 },
  19657   { 0x1faf, 0x0000, 0x1fa7 },
  19658   { 0x1fbc, 0x0000, 0x1fb3 },
  19659   { 0x1fcc, 0x0000, 0x1fc3 },
  19660   { 0x1ffc, 0x0000, 0x1ff3 }
  19661 };
  19662 
  19663 /* Table of special cases for case conversion; each record contains
  19664  * First, the best single character mapping to lowercase if Lu,
  19665  * and to uppercase if Ll, followed by the output mapping for the two cases
  19666  * other than the case of the codepoint, in the order [Ll],[Lu],[Lt],
  19667  * encoded in UTF-8, separated and terminated by a null character.
  19668  */
  19669 static const char special_case_table[] = {
  19670  "\x00\x53\x53\x00\x53\x73\0" /* offset 0 */
  19671  "\x69\x69\xcc\x87\x00\xc4\xb0\0" /* offset 7 */
  19672  "\x00\x46\x46\x00\x46\x66\0" /* offset 15 */
  19673  "\x00\x46\x49\x00\x46\x69\0" /* offset 22 */
  19674  "\x00\x46\x4c\x00\x46\x6c\0" /* offset 29 */
  19675  "\x00\x46\x46\x49\x00\x46\x66\x69\0" /* offset 36 */
  19676  "\x00\x46\x46\x4c\x00\x46\x66\x6c\0" /* offset 45 */
  19677  "\x00\x53\x54\x00\x53\x74\0" /* offset 54 */
  19678  "\x00\x53\x54\x00\x53\x74\0" /* offset 61 */
  19679  "\x00\xd4\xb5\xd5\x92\x00\xd4\xb5\xd6\x82\0" /* offset 68 */
  19680  "\x00\xd5\x84\xd5\x86\x00\xd5\x84\xd5\xb6\0" /* offset 79 */
  19681  "\x00\xd5\x84\xd4\xb5\x00\xd5\x84\xd5\xa5\0" /* offset 90 */
  19682  "\x00\xd5\x84\xd4\xbb\x00\xd5\x84\xd5\xab\0" /* offset 101 */
  19683  "\x00\xd5\x8e\xd5\x86\x00\xd5\x8e\xd5\xb6\0" /* offset 112 */
  19684  "\x00\xd5\x84\xd4\xbd\x00\xd5\x84\xd5\xad\0" /* offset 123 */
  19685  "\x00\xca\xbc\x4e\x00\xca\xbc\x4e\0" /* offset 134 */
  19686  "\x00\xce\x99\xcc\x88\xcc\x81\x00\xce\x99\xcc\x88\xcc\x81\0" /* offset 143 */
  19687  "\x00\xce\xa5\xcc\x88\xcc\x81\x00\xce\xa5\xcc\x88\xcc\x81\0" /* offset 158 */
  19688  "\x00\x4a\xcc\x8c\x00\x4a\xcc\x8c\0" /* offset 173 */
  19689  "\x00\x48\xcc\xb1\x00\x48\xcc\xb1\0" /* offset 182 */
  19690  "\x00\x54\xcc\x88\x00\x54\xcc\x88\0" /* offset 191 */
  19691  "\x00\x57\xcc\x8a\x00\x57\xcc\x8a\0" /* offset 200 */
  19692  "\x00\x59\xcc\x8a\x00\x59\xcc\x8a\0" /* offset 209 */
  19693  "\x00\x41\xca\xbe\x00\x41\xca\xbe\0" /* offset 218 */
  19694  "\x00\xce\xa5\xcc\x93\x00\xce\xa5\xcc\x93\0" /* offset 227 */
  19695  "\x00\xce\xa5\xcc\x93\xcc\x80\x00\xce\xa5\xcc\x93\xcc\x80\0" /* offset 238 */
  19696  "\x00\xce\xa5\xcc\x93\xcc\x81\x00\xce\xa5\xcc\x93\xcc\x81\0" /* offset 253 */
  19697  "\x00\xce\xa5\xcc\x93\xcd\x82\x00\xce\xa5\xcc\x93\xcd\x82\0" /* offset 268 */
  19698  "\x00\xce\x91\xcd\x82\x00\xce\x91\xcd\x82\0" /* offset 283 */
  19699  "\x00\xce\x97\xcd\x82\x00\xce\x97\xcd\x82\0" /* offset 294 */
  19700  "\x00\xce\x99\xcc\x88\xcc\x80\x00\xce\x99\xcc\x88\xcc\x80\0" /* offset 305 */
  19701  "\x00\xce\x99\xcc\x88\xcc\x81\x00\xce\x99\xcc\x88\xcc\x81\0" /* offset 320 */
  19702  "\x00\xce\x99\xcd\x82\x00\xce\x99\xcd\x82\0" /* offset 335 */
  19703  "\x00\xce\x99\xcc\x88\xcd\x82\x00\xce\x99\xcc\x88\xcd\x82\0" /* offset 346 */
  19704  "\x00\xce\xa5\xcc\x88\xcc\x80\x00\xce\xa5\xcc\x88\xcc\x80\0" /* offset 361 */
  19705  "\x00\xce\xa5\xcc\x88\xcc\x81\x00\xce\xa5\xcc\x88\xcc\x81\0" /* offset 376 */
  19706  "\x00\xce\xa1\xcc\x93\x00\xce\xa1\xcc\x93\0" /* offset 391 */
  19707  "\x00\xce\xa5\xcd\x82\x00\xce\xa5\xcd\x82\0" /* offset 402 */
  19708  "\x00\xce\xa5\xcc\x88\xcd\x82\x00\xce\xa5\xcc\x88\xcd\x82\0" /* offset 413 */
  19709  "\x00\xce\xa9\xcd\x82\x00\xce\xa9\xcd\x82\0" /* offset 428 */
  19710  "\xe1\xbe\x88\xe1\xbc\x88\xce\x99\x00\xe1\xbe\x88\0" /* offset 439 */
  19711  "\xe1\xbe\x89\xe1\xbc\x89\xce\x99\x00\xe1\xbe\x89\0" /* offset 452 */
  19712  "\xe1\xbe\x8a\xe1\xbc\x8a\xce\x99\x00\xe1\xbe\x8a\0" /* offset 465 */
  19713  "\xe1\xbe\x8b\xe1\xbc\x8b\xce\x99\x00\xe1\xbe\x8b\0" /* offset 478 */
  19714  "\xe1\xbe\x8c\xe1\xbc\x8c\xce\x99\x00\xe1\xbe\x8c\0" /* offset 491 */
  19715  "\xe1\xbe\x8d\xe1\xbc\x8d\xce\x99\x00\xe1\xbe\x8d\0" /* offset 504 */
  19716  "\xe1\xbe\x8e\xe1\xbc\x8e\xce\x99\x00\xe1\xbe\x8e\0" /* offset 517 */
  19717  "\xe1\xbe\x8f\xe1\xbc\x8f\xce\x99\x00\xe1\xbe\x8f\0" /* offset 530 */
  19718  "\xe1\xbe\x80\x00\xe1\xbc\x88\xce\x99\0" /* offset 543 */
  19719  "\xe1\xbe\x81\x00\xe1\xbc\x89\xce\x99\0" /* offset 553 */
  19720  "\xe1\xbe\x82\x00\xe1\xbc\x8a\xce\x99\0" /* offset 563 */
  19721  "\xe1\xbe\x83\x00\xe1\xbc\x8b\xce\x99\0" /* offset 573 */
  19722  "\xe1\xbe\x84\x00\xe1\xbc\x8c\xce\x99\0" /* offset 583 */
  19723  "\xe1\xbe\x85\x00\xe1\xbc\x8d\xce\x99\0" /* offset 593 */
  19724  "\xe1\xbe\x86\x00\xe1\xbc\x8e\xce\x99\0" /* offset 603 */
  19725  "\xe1\xbe\x87\x00\xe1\xbc\x8f\xce\x99\0" /* offset 613 */
  19726  "\xe1\xbe\x98\xe1\xbc\xa8\xce\x99\x00\xe1\xbe\x98\0" /* offset 623 */
  19727  "\xe1\xbe\x99\xe1\xbc\xa9\xce\x99\x00\xe1\xbe\x99\0" /* offset 636 */
  19728  "\xe1\xbe\x9a\xe1\xbc\xaa\xce\x99\x00\xe1\xbe\x9a\0" /* offset 649 */
  19729  "\xe1\xbe\x9b\xe1\xbc\xab\xce\x99\x00\xe1\xbe\x9b\0" /* offset 662 */
  19730  "\xe1\xbe\x9c\xe1\xbc\xac\xce\x99\x00\xe1\xbe\x9c\0" /* offset 675 */
  19731  "\xe1\xbe\x9d\xe1\xbc\xad\xce\x99\x00\xe1\xbe\x9d\0" /* offset 688 */
  19732  "\xe1\xbe\x9e\xe1\xbc\xae\xce\x99\x00\xe1\xbe\x9e\0" /* offset 701 */
  19733  "\xe1\xbe\x9f\xe1\xbc\xaf\xce\x99\x00\xe1\xbe\x9f\0" /* offset 714 */
  19734  "\xe1\xbe\x90\x00\xe1\xbc\xa8\xce\x99\0" /* offset 727 */
  19735  "\xe1\xbe\x91\x00\xe1\xbc\xa9\xce\x99\0" /* offset 737 */
  19736  "\xe1\xbe\x92\x00\xe1\xbc\xaa\xce\x99\0" /* offset 747 */
  19737  "\xe1\xbe\x93\x00\xe1\xbc\xab\xce\x99\0" /* offset 757 */
  19738  "\xe1\xbe\x94\x00\xe1\xbc\xac\xce\x99\0" /* offset 767 */
  19739  "\xe1\xbe\x95\x00\xe1\xbc\xad\xce\x99\0" /* offset 777 */
  19740  "\xe1\xbe\x96\x00\xe1\xbc\xae\xce\x99\0" /* offset 787 */
  19741  "\xe1\xbe\x97\x00\xe1\xbc\xaf\xce\x99\0" /* offset 797 */
  19742  "\xe1\xbe\xa8\xe1\xbd\xa8\xce\x99\x00\xe1\xbe\xa8\0" /* offset 807 */
  19743  "\xe1\xbe\xa9\xe1\xbd\xa9\xce\x99\x00\xe1\xbe\xa9\0" /* offset 820 */
  19744  "\xe1\xbe\xaa\xe1\xbd\xaa\xce\x99\x00\xe1\xbe\xaa\0" /* offset 833 */
  19745  "\xe1\xbe\xab\xe1\xbd\xab\xce\x99\x00\xe1\xbe\xab\0" /* offset 846 */
  19746  "\xe1\xbe\xac\xe1\xbd\xac\xce\x99\x00\xe1\xbe\xac\0" /* offset 859 */
  19747  "\xe1\xbe\xad\xe1\xbd\xad\xce\x99\x00\xe1\xbe\xad\0" /* offset 872 */
  19748  "\xe1\xbe\xae\xe1\xbd\xae\xce\x99\x00\xe1\xbe\xae\0" /* offset 885 */
  19749  "\xe1\xbe\xaf\xe1\xbd\xaf\xce\x99\x00\xe1\xbe\xaf\0" /* offset 898 */
  19750  "\xe1\xbe\xa0\x00\xe1\xbd\xa8\xce\x99\0" /* offset 911 */
  19751  "\xe1\xbe\xa1\x00\xe1\xbd\xa9\xce\x99\0" /* offset 921 */
  19752  "\xe1\xbe\xa2\x00\xe1\xbd\xaa\xce\x99\0" /* offset 931 */
  19753  "\xe1\xbe\xa3\x00\xe1\xbd\xab\xce\x99\0" /* offset 941 */
  19754  "\xe1\xbe\xa4\x00\xe1\xbd\xac\xce\x99\0" /* offset 951 */
  19755  "\xe1\xbe\xa5\x00\xe1\xbd\xad\xce\x99\0" /* offset 961 */
  19756  "\xe1\xbe\xa6\x00\xe1\xbd\xae\xce\x99\0" /* offset 971 */
  19757  "\xe1\xbe\xa7\x00\xe1\xbd\xaf\xce\x99\0" /* offset 981 */
  19758  "\xe1\xbe\xbc\xce\x91\xce\x99\x00\xe1\xbe\xbc\0" /* offset 991 */
  19759  "\xe1\xbe\xb3\x00\xce\x91\xce\x99\0" /* offset 1003 */
  19760  "\xe1\xbf\x8c\xce\x97\xce\x99\x00\xe1\xbf\x8c\0" /* offset 1012 */
  19761  "\xe1\xbf\x83\x00\xce\x97\xce\x99\0" /* offset 1024 */
  19762  "\xe1\xbf\xbc\xce\xa9\xce\x99\x00\xe1\xbf\xbc\0" /* offset 1033 */
  19763  "\xe1\xbf\xb3\x00\xce\xa9\xce\x99\0" /* offset 1045 */
  19764  "\x00\xe1\xbe\xba\xce\x99\x00\xe1\xbe\xba\xcd\x85\0" /* offset 1054 */
  19765  "\x00\xce\x86\xce\x99\x00\xce\x86\xcd\x85\0" /* offset 1067 */
  19766  "\x00\xe1\xbf\x8a\xce\x99\x00\xe1\xbf\x8a\xcd\x85\0" /* offset 1078 */
  19767  "\x00\xce\x89\xce\x99\x00\xce\x89\xcd\x85\0" /* offset 1091 */
  19768  "\x00\xe1\xbf\xba\xce\x99\x00\xe1\xbf\xba\xcd\x85\0" /* offset 1102 */
  19769  "\x00\xce\x8f\xce\x99\x00\xce\x8f\xcd\x85\0" /* offset 1115 */
  19770  "\x00\xce\x91\xcd\x82\xce\x99\x00\xce\x91\xcd\x82\xcd\x85\0" /* offset 1126 */
  19771  "\x00\xce\x97\xcd\x82\xce\x99\x00\xce\x97\xcd\x82\xcd\x85\0" /* offset 1141 */
  19772  "\x00\xce\xa9\xcd\x82\xce\x99\x00\xce\xa9\xcd\x82\xcd\x85\0" /* offset 1156 */
  19773 };
  19774 
  19775 /* Table of casefolding cases that can't be derived by lowercasing
  19776  */
  19777 static const struct {
  19778   uint16_t ch;
  19779   char data[7];
  19780 } casefold_table[] = {
  19781   { 0x00b5, "\xce\xbc" },
  19782   { 0x00df, "\x73\x73" },
  19783   { 0x0130, "\x69\xcc\x87" },
  19784   { 0x0149, "\xca\xbc\x6e" },
  19785   { 0x017f, "\x73" },
  19786   { 0x01f0, "\x6a\xcc\x8c" },
  19787   { 0x0345, "\xce\xb9" },
  19788   { 0x0390, "\xce\xb9\xcc\x88\xcc\x81" },
  19789   { 0x03b0, "\xcf\x85\xcc\x88\xcc\x81" },
  19790   { 0x03c2, "\xcf\x83" },
  19791   { 0x03d0, "\xce\xb2" },
  19792   { 0x03d1, "\xce\xb8" },
  19793   { 0x03d5, "\xcf\x86" },
  19794   { 0x03d6, "\xcf\x80" },
  19795   { 0x03f0, "\xce\xba" },
  19796   { 0x03f1, "\xcf\x81" },
  19797   { 0x03f5, "\xce\xb5" },
  19798   { 0x0587, "\xd5\xa5\xd6\x82" },
  19799   { 0x13f8, "\xe1\x8f\xb0" },
  19800   { 0x13f9, "\xe1\x8f\xb1" },
  19801   { 0x13fa, "\xe1\x8f\xb2" },
  19802   { 0x13fb, "\xe1\x8f\xb3" },
  19803   { 0x13fc, "\xe1\x8f\xb4" },
  19804   { 0x13fd, "\xe1\x8f\xb5" },
  19805   { 0x1c80, "\xd0\xb2" },
  19806   { 0x1c81, "\xd0\xb4" },
  19807   { 0x1c82, "\xd0\xbe" },
  19808   { 0x1c83, "\xd1\x81" },
  19809   { 0x1c84, "\xd1\x82" },
  19810   { 0x1c85, "\xd1\x82" },
  19811   { 0x1c86, "\xd1\x8a" },
  19812   { 0x1c87, "\xd1\xa3" },
  19813   { 0x1c88, "\xea\x99\x8b" },
  19814   { 0x1e96, "\x68\xcc\xb1" },
  19815   { 0x1e97, "\x74\xcc\x88" },
  19816   { 0x1e98, "\x77\xcc\x8a" },
  19817   { 0x1e99, "\x79\xcc\x8a" },
  19818   { 0x1e9a, "\x61\xca\xbe" },
  19819   { 0x1e9b, "\xe1\xb9\xa1" },
  19820   { 0x1e9e, "\x73\x73" },
  19821   { 0x1f50, "\xcf\x85\xcc\x93" },
  19822   { 0x1f52, "\xcf\x85\xcc\x93\xcc\x80" },
  19823   { 0x1f54, "\xcf\x85\xcc\x93\xcc\x81" },
  19824   { 0x1f56, "\xcf\x85\xcc\x93\xcd\x82" },
  19825   { 0x1f80, "\xe1\xbc\x80\xce\xb9" },
  19826   { 0x1f81, "\xe1\xbc\x81\xce\xb9" },
  19827   { 0x1f82, "\xe1\xbc\x82\xce\xb9" },
  19828   { 0x1f83, "\xe1\xbc\x83\xce\xb9" },
  19829   { 0x1f84, "\xe1\xbc\x84\xce\xb9" },
  19830   { 0x1f85, "\xe1\xbc\x85\xce\xb9" },
  19831   { 0x1f86, "\xe1\xbc\x86\xce\xb9" },
  19832   { 0x1f87, "\xe1\xbc\x87\xce\xb9" },
  19833   { 0x1f88, "\xe1\xbc\x80\xce\xb9" },
  19834   { 0x1f89, "\xe1\xbc\x81\xce\xb9" },
  19835   { 0x1f8a, "\xe1\xbc\x82\xce\xb9" },
  19836   { 0x1f8b, "\xe1\xbc\x83\xce\xb9" },
  19837   { 0x1f8c, "\xe1\xbc\x84\xce\xb9" },
  19838   { 0x1f8d, "\xe1\xbc\x85\xce\xb9" },
  19839   { 0x1f8e, "\xe1\xbc\x86\xce\xb9" },
  19840   { 0x1f8f, "\xe1\xbc\x87\xce\xb9" },
  19841   { 0x1f90, "\xe1\xbc\xa0\xce\xb9" },
  19842   { 0x1f91, "\xe1\xbc\xa1\xce\xb9" },
  19843   { 0x1f92, "\xe1\xbc\xa2\xce\xb9" },
  19844   { 0x1f93, "\xe1\xbc\xa3\xce\xb9" },
  19845   { 0x1f94, "\xe1\xbc\xa4\xce\xb9" },
  19846   { 0x1f95, "\xe1\xbc\xa5\xce\xb9" },
  19847   { 0x1f96, "\xe1\xbc\xa6\xce\xb9" },
  19848   { 0x1f97, "\xe1\xbc\xa7\xce\xb9" },
  19849   { 0x1f98, "\xe1\xbc\xa0\xce\xb9" },
  19850   { 0x1f99, "\xe1\xbc\xa1\xce\xb9" },
  19851   { 0x1f9a, "\xe1\xbc\xa2\xce\xb9" },
  19852   { 0x1f9b, "\xe1\xbc\xa3\xce\xb9" },
  19853   { 0x1f9c, "\xe1\xbc\xa4\xce\xb9" },
  19854   { 0x1f9d, "\xe1\xbc\xa5\xce\xb9" },
  19855   { 0x1f9e, "\xe1\xbc\xa6\xce\xb9" },
  19856   { 0x1f9f, "\xe1\xbc\xa7\xce\xb9" },
  19857   { 0x1fa0, "\xe1\xbd\xa0\xce\xb9" },
  19858   { 0x1fa1, "\xe1\xbd\xa1\xce\xb9" },
  19859   { 0x1fa2, "\xe1\xbd\xa2\xce\xb9" },
  19860   { 0x1fa3, "\xe1\xbd\xa3\xce\xb9" },
  19861   { 0x1fa4, "\xe1\xbd\xa4\xce\xb9" },
  19862   { 0x1fa5, "\xe1\xbd\xa5\xce\xb9" },
  19863   { 0x1fa6, "\xe1\xbd\xa6\xce\xb9" },
  19864   { 0x1fa7, "\xe1\xbd\xa7\xce\xb9" },
  19865   { 0x1fa8, "\xe1\xbd\xa0\xce\xb9" },
  19866   { 0x1fa9, "\xe1\xbd\xa1\xce\xb9" },
  19867   { 0x1faa, "\xe1\xbd\xa2\xce\xb9" },
  19868   { 0x1fab, "\xe1\xbd\xa3\xce\xb9" },
  19869   { 0x1fac, "\xe1\xbd\xa4\xce\xb9" },
  19870   { 0x1fad, "\xe1\xbd\xa5\xce\xb9" },
  19871   { 0x1fae, "\xe1\xbd\xa6\xce\xb9" },
  19872   { 0x1faf, "\xe1\xbd\xa7\xce\xb9" },
  19873   { 0x1fb2, "\xe1\xbd\xb0\xce\xb9" },
  19874   { 0x1fb3, "\xce\xb1\xce\xb9" },
  19875   { 0x1fb4, "\xce\xac\xce\xb9" },
  19876   { 0x1fb6, "\xce\xb1\xcd\x82" },
  19877   { 0x1fb7, "\xce\xb1\xcd\x82\xce\xb9" },
  19878   { 0x1fbc, "\xce\xb1\xce\xb9" },
  19879   { 0x1fbe, "\xce\xb9" },
  19880   { 0x1fc2, "\xe1\xbd\xb4\xce\xb9" },
  19881   { 0x1fc3, "\xce\xb7\xce\xb9" },
  19882   { 0x1fc4, "\xce\xae\xce\xb9" },
  19883   { 0x1fc6, "\xce\xb7\xcd\x82" },
  19884   { 0x1fc7, "\xce\xb7\xcd\x82\xce\xb9" },
  19885   { 0x1fcc, "\xce\xb7\xce\xb9" },
  19886   { 0x1fd2, "\xce\xb9\xcc\x88\xcc\x80" },
  19887   { 0x1fd3, "\xce\xb9\xcc\x88\xcc\x81" },
  19888   { 0x1fd6, "\xce\xb9\xcd\x82" },
  19889   { 0x1fd7, "\xce\xb9\xcc\x88\xcd\x82" },
  19890   { 0x1fe2, "\xcf\x85\xcc\x88\xcc\x80" },
  19891   { 0x1fe3, "\xcf\x85\xcc\x88\xcc\x81" },
  19892   { 0x1fe4, "\xcf\x81\xcc\x93" },
  19893   { 0x1fe6, "\xcf\x85\xcd\x82" },
  19894   { 0x1fe7, "\xcf\x85\xcc\x88\xcd\x82" },
  19895   { 0x1ff2, "\xe1\xbd\xbc\xce\xb9" },
  19896   { 0x1ff3, "\xcf\x89\xce\xb9" },
  19897   { 0x1ff4, "\xcf\x8e\xce\xb9" },
  19898   { 0x1ff6, "\xcf\x89\xcd\x82" },
  19899   { 0x1ff7, "\xcf\x89\xcd\x82\xce\xb9" },
  19900   { 0x1ffc, "\xcf\x89\xce\xb9" },
  19901   { 0x2160, "\xe2\x85\xb0" },
  19902   { 0x2161, "\xe2\x85\xb1" },
  19903   { 0x2162, "\xe2\x85\xb2" },
  19904   { 0x2163, "\xe2\x85\xb3" },
  19905   { 0x2164, "\xe2\x85\xb4" },
  19906   { 0x2165, "\xe2\x85\xb5" },
  19907   { 0x2166, "\xe2\x85\xb6" },
  19908   { 0x2167, "\xe2\x85\xb7" },
  19909   { 0x2168, "\xe2\x85\xb8" },
  19910   { 0x2169, "\xe2\x85\xb9" },
  19911   { 0x216a, "\xe2\x85\xba" },
  19912   { 0x216b, "\xe2\x85\xbb" },
  19913   { 0x216c, "\xe2\x85\xbc" },
  19914   { 0x216d, "\xe2\x85\xbd" },
  19915   { 0x216e, "\xe2\x85\xbe" },
  19916   { 0x216f, "\xe2\x85\xbf" },
  19917   { 0x24b6, "\xe2\x93\x90" },
  19918   { 0x24b7, "\xe2\x93\x91" },
  19919   { 0x24b8, "\xe2\x93\x92" },
  19920   { 0x24b9, "\xe2\x93\x93" },
  19921   { 0x24ba, "\xe2\x93\x94" },
  19922   { 0x24bb, "\xe2\x93\x95" },
  19923   { 0x24bc, "\xe2\x93\x96" },
  19924   { 0x24bd, "\xe2\x93\x97" },
  19925   { 0x24be, "\xe2\x93\x98" },
  19926   { 0x24bf, "\xe2\x93\x99" },
  19927   { 0x24c0, "\xe2\x93\x9a" },
  19928   { 0x24c1, "\xe2\x93\x9b" },
  19929   { 0x24c2, "\xe2\x93\x9c" },
  19930   { 0x24c3, "\xe2\x93\x9d" },
  19931   { 0x24c4, "\xe2\x93\x9e" },
  19932   { 0x24c5, "\xe2\x93\x9f" },
  19933   { 0x24c6, "\xe2\x93\xa0" },
  19934   { 0x24c7, "\xe2\x93\xa1" },
  19935   { 0x24c8, "\xe2\x93\xa2" },
  19936   { 0x24c9, "\xe2\x93\xa3" },
  19937   { 0x24ca, "\xe2\x93\xa4" },
  19938   { 0x24cb, "\xe2\x93\xa5" },
  19939   { 0x24cc, "\xe2\x93\xa6" },
  19940   { 0x24cd, "\xe2\x93\xa7" },
  19941   { 0x24ce, "\xe2\x93\xa8" },
  19942   { 0x24cf, "\xe2\x93\xa9" },
  19943   { 0xab70, "\xe1\x8e\xa0" },
  19944   { 0xab71, "\xe1\x8e\xa1" },
  19945   { 0xab72, "\xe1\x8e\xa2" },
  19946   { 0xab73, "\xe1\x8e\xa3" },
  19947   { 0xab74, "\xe1\x8e\xa4" },
  19948   { 0xab75, "\xe1\x8e\xa5" },
  19949   { 0xab76, "\xe1\x8e\xa6" },
  19950   { 0xab77, "\xe1\x8e\xa7" },
  19951   { 0xab78, "\xe1\x8e\xa8" },
  19952   { 0xab79, "\xe1\x8e\xa9" },
  19953   { 0xab7a, "\xe1\x8e\xaa" },
  19954   { 0xab7b, "\xe1\x8e\xab" },
  19955   { 0xab7c, "\xe1\x8e\xac" },
  19956   { 0xab7d, "\xe1\x8e\xad" },
  19957   { 0xab7e, "\xe1\x8e\xae" },
  19958   { 0xab7f, "\xe1\x8e\xaf" },
  19959   { 0xab80, "\xe1\x8e\xb0" },
  19960   { 0xab81, "\xe1\x8e\xb1" },
  19961   { 0xab82, "\xe1\x8e\xb2" },
  19962   { 0xab83, "\xe1\x8e\xb3" },
  19963   { 0xab84, "\xe1\x8e\xb4" },
  19964   { 0xab85, "\xe1\x8e\xb5" },
  19965   { 0xab86, "\xe1\x8e\xb6" },
  19966   { 0xab87, "\xe1\x8e\xb7" },
  19967   { 0xab88, "\xe1\x8e\xb8" },
  19968   { 0xab89, "\xe1\x8e\xb9" },
  19969   { 0xab8a, "\xe1\x8e\xba" },
  19970   { 0xab8b, "\xe1\x8e\xbb" },
  19971   { 0xab8c, "\xe1\x8e\xbc" },
  19972   { 0xab8d, "\xe1\x8e\xbd" },
  19973   { 0xab8e, "\xe1\x8e\xbe" },
  19974   { 0xab8f, "\xe1\x8e\xbf" },
  19975   { 0xab90, "\xe1\x8f\x80" },
  19976   { 0xab91, "\xe1\x8f\x81" },
  19977   { 0xab92, "\xe1\x8f\x82" },
  19978   { 0xab93, "\xe1\x8f\x83" },
  19979   { 0xab94, "\xe1\x8f\x84" },
  19980   { 0xab95, "\xe1\x8f\x85" },
  19981   { 0xab96, "\xe1\x8f\x86" },
  19982   { 0xab97, "\xe1\x8f\x87" },
  19983   { 0xab98, "\xe1\x8f\x88" },
  19984   { 0xab99, "\xe1\x8f\x89" },
  19985   { 0xab9a, "\xe1\x8f\x8a" },
  19986   { 0xab9b, "\xe1\x8f\x8b" },
  19987   { 0xab9c, "\xe1\x8f\x8c" },
  19988   { 0xab9d, "\xe1\x8f\x8d" },
  19989   { 0xab9e, "\xe1\x8f\x8e" },
  19990   { 0xab9f, "\xe1\x8f\x8f" },
  19991   { 0xaba0, "\xe1\x8f\x90" },
  19992   { 0xaba1, "\xe1\x8f\x91" },
  19993   { 0xaba2, "\xe1\x8f\x92" },
  19994   { 0xaba3, "\xe1\x8f\x93" },
  19995   { 0xaba4, "\xe1\x8f\x94" },
  19996   { 0xaba5, "\xe1\x8f\x95" },
  19997   { 0xaba6, "\xe1\x8f\x96" },
  19998   { 0xaba7, "\xe1\x8f\x97" },
  19999   { 0xaba8, "\xe1\x8f\x98" },
  20000   { 0xaba9, "\xe1\x8f\x99" },
  20001   { 0xabaa, "\xe1\x8f\x9a" },
  20002   { 0xabab, "\xe1\x8f\x9b" },
  20003   { 0xabac, "\xe1\x8f\x9c" },
  20004   { 0xabad, "\xe1\x8f\x9d" },
  20005   { 0xabae, "\xe1\x8f\x9e" },
  20006   { 0xabaf, "\xe1\x8f\x9f" },
  20007   { 0xabb0, "\xe1\x8f\xa0" },
  20008   { 0xabb1, "\xe1\x8f\xa1" },
  20009   { 0xabb2, "\xe1\x8f\xa2" },
  20010   { 0xabb3, "\xe1\x8f\xa3" },
  20011   { 0xabb4, "\xe1\x8f\xa4" },
  20012   { 0xabb5, "\xe1\x8f\xa5" },
  20013   { 0xabb6, "\xe1\x8f\xa6" },
  20014   { 0xabb7, "\xe1\x8f\xa7" },
  20015   { 0xabb8, "\xe1\x8f\xa8" },
  20016   { 0xabb9, "\xe1\x8f\xa9" },
  20017   { 0xabba, "\xe1\x8f\xaa" },
  20018   { 0xabbb, "\xe1\x8f\xab" },
  20019   { 0xabbc, "\xe1\x8f\xac" },
  20020   { 0xabbd, "\xe1\x8f\xad" },
  20021   { 0xabbe, "\xe1\x8f\xae" },
  20022   { 0xabbf, "\xe1\x8f\xaf" },
  20023   { 0xfb00, "\x66\x66" },
  20024   { 0xfb01, "\x66\x69" },
  20025   { 0xfb02, "\x66\x6c" },
  20026   { 0xfb03, "\x66\x66\x69" },
  20027   { 0xfb04, "\x66\x66\x6c" },
  20028   { 0xfb05, "\x73\x74" },
  20029   { 0xfb06, "\x73\x74" },
  20030   { 0xfb13, "\xd5\xb4\xd5\xb6" },
  20031   { 0xfb14, "\xd5\xb4\xd5\xa5" },
  20032   { 0xfb15, "\xd5\xb4\xd5\xab" },
  20033   { 0xfb16, "\xd5\xbe\xd5\xb6" },
  20034   { 0xfb17, "\xd5\xb4\xd5\xad" },
  20035 };
  20036 
  20037 static const uint8_t cclass_data[][256] = {
  20038   { /* page 3, index 0 */
  20039     230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230,
  20040     230, 230, 230, 230, 230, 230, 230, 232, 220, 220, 220, 220, 232, 216,
  20041     220, 220, 220, 220, 220, 202, 202, 220, 220, 220, 220, 202, 202, 220,
  20042     220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 1, 1, 1, 1, 1, 220,
  20043     220, 220, 220, 230, 230, 230, 230, 230, 230, 230, 230, 240, 230, 220,
  20044     220, 220, 230, 230, 230, 220, 220, 0, 230, 230, 230, 220, 220, 220, 220,
  20045     230, 232, 220, 220, 230, 233, 234, 234, 233, 234, 234, 233, 230, 230,
  20046     230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 0, 0, 0, 0, 0, 0,
  20047     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20048     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20049     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20050     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20051     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20052     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  20053   },
  20054   { /* page 4, index 1 */
  20055     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20056     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20057     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20058     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20059     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20060     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 230, 230, 230, 230, 0, 0, 0, 0, 0,
  20061     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20062     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20063     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20064     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20065     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  20066   },
  20067   { /* page 5, index 2 */
  20068     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20069     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20070     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20071     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20072     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20073     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20074     0, 220, 230, 230, 230, 230, 220, 230, 230, 230, 222, 220, 230, 230, 230,
  20075     230, 230, 230, 220, 220, 220, 220, 220, 220, 230, 230, 220, 230, 230,
  20076     222, 228, 230, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 19, 20, 21, 22, 0,
  20077     23, 0, 24, 25, 0, 230, 220, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20078     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20079     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  20080   },
  20081   { /* page 6, index 3 */
  20082     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 230, 230, 230, 230,
  20083     230, 230, 230, 30, 31, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20084     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20085     0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 28, 29, 30, 31, 32, 33, 34, 230, 230, 220,
  20086     220, 230, 230, 230, 230, 230, 220, 230, 230, 220, 0, 0, 0, 0, 0, 0, 0, 0,
  20087     0, 0, 0, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20088     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20089     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20090     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20091     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 230, 230, 230, 230, 230,
  20092     230, 0, 0, 230, 230, 230, 230, 220, 230, 0, 0, 230, 230, 0, 220, 230,
  20093     230, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  20094   },
  20095   { /* page 7, index 4 */
  20096     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 0,
  20097     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20098     230, 220, 230, 230, 220, 230, 230, 220, 220, 220, 230, 220, 220, 230,
  20099     220, 230, 230, 230, 220, 230, 220, 230, 220, 230, 220, 230, 230, 0, 0, 0,
  20100     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20101     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20102     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20103     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20104     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20105     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20106     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 230, 230, 230, 230, 230, 230,
  20107     220, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  20108   },
  20109   { /* page 8, index 5 */
  20110     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230,
  20111     230, 230, 230, 0, 230, 230, 230, 230, 230, 230, 230, 230, 230, 0, 230,
  20112     230, 230, 0, 230, 230, 230, 230, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20113     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20114     0, 0, 0, 0, 0, 0, 0, 220, 220, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20115     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20116     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20117     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20118     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20119     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 230, 230, 230, 230, 230, 230,
  20120     230, 230, 230, 230, 230, 230, 230, 0, 220, 230, 230, 220, 230, 230, 220,
  20121     230, 230, 230, 220, 220, 220, 27, 28, 29, 230, 230, 230, 220, 230, 230,
  20122     220, 220, 230, 230, 230, 230, 230
  20123   },
  20124   { /* page 9, index 6 */
  20125     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20126     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20127     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20128     0, 0, 0, 0, 0, 9, 0, 0, 0, 230, 220, 230, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20129     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20130     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20131     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20132     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0,
  20133     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0,
  20134     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20135     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  20136   },
  20137   { /* page 10, index 7 */
  20138     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20139     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20140     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20141     0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20142     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20143     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20144     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20145     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0,
  20146     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20147     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20148     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  20149   },
  20150   { /* page 11, index 8 */
  20151     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20152     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20153     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20154     0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20155     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20156     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20157     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20158     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20159     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20160     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20161     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  20162   },
  20163   { /* page 12, index 9 */
  20164     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20165     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20166     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20167     0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 84, 91, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20168     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20169     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20170     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20171     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0,
  20172     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20173     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20174     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  20175   },
  20176   { /* page 13, index 10 */
  20177     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20178     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20179     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20180     0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20181     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20182     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20183     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20184     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20185     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20186     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20187     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  20188   },
  20189   { /* page 14, index 11 */
  20190     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20191     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20192     0, 0, 0, 0, 0, 0, 0, 0, 103, 103, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20193     0, 107, 107, 107, 107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20194     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20195     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20196     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20197     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 118, 118, 0, 0,
  20198     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 122, 122, 122, 122, 0, 0, 0, 0, 0, 0,
  20199     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20200     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  20201   },
  20202   { /* page 15, index 12 */
  20203     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20204     220, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20205     0, 0, 0, 0, 0, 0, 220, 0, 220, 0, 216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20206     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20207     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 129, 130, 0,
  20208     132, 0, 0, 0, 0, 0, 130, 130, 130, 130, 0, 0, 130, 0, 230, 230, 9, 0,
  20209     230, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20210     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20211     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 220, 0, 0, 0, 0, 0, 0,
  20212     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20213     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20214     0, 0, 0
  20215   },
  20216   { /* page 16, index 13 */
  20217     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20218     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20219     0, 0, 0, 0, 0, 0, 0, 7, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20220     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20221     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20222     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 220, 0, 0,
  20223     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20224     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20225     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20226     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20227     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  20228   },
  20229   { /* page 19, index 14 */
  20230     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20231     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20232     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20233     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 230,
  20234     230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20235     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20236     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20237     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20238     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20239     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20240     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  20241   },
  20242   { /* page 23, index 15 */
  20243     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0,
  20244     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20245     0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20246     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20247     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20248     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20249     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20250     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20251     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0,
  20252     0, 0, 0, 0, 0, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20253     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  20254   },
  20255   { /* page 24, index 16 */
  20256     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20257     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20258     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20259     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20260     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20261     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20262     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20263     0, 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20264     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20265     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20266     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  20267   },
  20268   { /* page 25, index 17 */
  20269     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20270     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20271     0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 230, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20272     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20273     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20274     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20275     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20276     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20277     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20278     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20279     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  20280   },
  20281   { /* page 26, index 18 */
  20282     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230,
  20283     220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20284     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20285     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20286     9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 230,
  20287     230, 230, 230, 230, 230, 230, 0, 0, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20288     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20289     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 230, 230, 230, 230, 220, 220,
  20290     220, 220, 220, 220, 230, 230, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20291     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20292     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20293     0, 0, 0, 0, 0
  20294   },
  20295   { /* page 27, index 19 */
  20296     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20297     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20298     0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0,
  20299     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20300     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 220, 230, 230, 230, 230, 230, 230,
  20301     230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20302     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20303     0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20304     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20305     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0,
  20306     0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  20307   },
  20308   { /* page 28, index 20 */
  20309     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20310     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20311     0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20312     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20313     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20314     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20315     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20316     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20317     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 230, 230, 0, 1, 220,
  20318     220, 220, 220, 220, 230, 230, 220, 220, 220, 220, 230, 0, 1, 1, 1, 1, 1,
  20319     1, 1, 0, 0, 0, 0, 220, 0, 0, 0, 0, 0, 0, 230, 0, 0, 0, 230, 230, 0, 0, 0,
  20320     0, 0, 0
  20321   },
  20322   { /* page 29, index 21 */
  20323     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20324     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20325     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20326     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20327     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20328     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20329     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20330     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20331     230, 230, 220, 230, 230, 230, 230, 230, 230, 230, 220, 230, 230, 234,
  20332     214, 220, 202, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230,
  20333     230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230,
  20334     230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 232, 228,
  20335     228, 220, 0, 230, 233, 220, 230, 220
  20336   },
  20337   { /* page 32, index 22 */
  20338     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20339     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20340     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20341     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20342     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20343     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20344     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20345     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20346     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 230, 1, 1, 230, 230,
  20347     230, 230, 1, 1, 1, 230, 230, 0, 0, 0, 0, 230, 0, 0, 0, 1, 1, 230, 220,
  20348     230, 1, 1, 220, 220, 220, 220, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20349     0, 0, 0
  20350   },
  20351   { /* page 44, index 23 */
  20352     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20353     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20354     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20355     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20356     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20357     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20358     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20359     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20360     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20361     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230,
  20362     230, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  20363   },
  20364   { /* page 45, index 24 */
  20365     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20366     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20367     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20368     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20369     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20370     0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20371     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20372     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20373     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20374     0, 0, 0, 0, 0, 0, 0, 0, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230,
  20375     230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230,
  20376     230, 230, 230, 230, 230, 230, 230, 230
  20377   },
  20378   { /* page 48, index 25 */
  20379     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20380     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 218, 228, 232, 222,
  20381     224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20382     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20383     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20384     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20385     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20386     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20387     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20388     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20389     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  20390   },
  20391   { /* page 166, index 26 */
  20392     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20393     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20394     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20395     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20396     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, 230, 230,
  20397     230, 230, 230, 230, 230, 230, 230, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20398     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 230,
  20399     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20400     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20401     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20402     0, 0, 0, 0, 0, 0, 0, 0, 230, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20403     0
  20404   },
  20405   { /* page 168, index 27 */
  20406     0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20407     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20408     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20409     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20410     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20411     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20412     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20413     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20414     0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20415     0, 0, 0, 0, 0, 0, 0, 0, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230,
  20416     230, 230, 230, 230, 230, 230, 230, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20417     0, 0, 0
  20418   },
  20419   { /* page 169, index 28 */
  20420     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20421     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 220, 220, 220,
  20422     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20423     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20424     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20425     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20426     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20427     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20428     0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20429     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20430     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  20431   },
  20432   { /* page 170, index 29 */
  20433     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20434     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20435     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20436     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20437     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20438     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20439     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20440     0, 0, 0, 0, 0, 0, 0, 0, 230, 0, 230, 230, 220, 0, 0, 230, 230, 0, 0, 0,
  20441     0, 0, 230, 230, 0, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20442     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20443     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0
  20444   },
  20445   { /* page 171, index 30 */
  20446     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20447     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20448     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20449     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20450     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20451     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20452     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20453     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20454     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20455     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0,
  20456     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  20457   },
  20458   { /* page 251, index 31 */
  20459     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20460     0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20461     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20462     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20463     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20464     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20465     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20466     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20467     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20468     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20469     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  20470   },
  20471   { /* page 254, index 32 */
  20472     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20473     0, 0, 0, 0, 0, 0, 0, 0, 230, 230, 230, 230, 230, 230, 230, 220, 220, 220,
  20474     220, 220, 220, 220, 230, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20475     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20476     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20477     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20478     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20479     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20480     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20481     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20482     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20483     0, 0
  20484   },
  20485   { /* page 257, index 33 */
  20486     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20487     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20488     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20489     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20490     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20491     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20492     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20493     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20494     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20495     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20496     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 220, 0, 0
  20497   },
  20498   { /* page 258, index 34 */
  20499     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20500     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20501     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20502     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20503     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20504     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20505     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20506     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20507     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20508     0, 0, 0, 0, 0, 0, 0, 0, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20509     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  20510   },
  20511   { /* page 259, index 35 */
  20512     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20513     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20514     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20515     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20516     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230,
  20517     230, 230, 230, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20518     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20519     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20520     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20521     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20522     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  20523   },
  20524   { /* page 266, index 36 */
  20525     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 220, 0, 230, 0, 0, 0, 0, 0, 0, 0,
  20526     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20527     0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 1, 220, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0,
  20528     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20529     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20530     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20531     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20532     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20533     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20534     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 220, 0, 0, 0, 0, 0, 0,
  20535     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  20536   },
  20537   { /* page 272, index 37 */
  20538     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20539     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20540     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0,
  20541     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20542     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20543     0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20544     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20545     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 7, 0, 0, 0, 0, 0,
  20546     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20547     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20548     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  20549   },
  20550   { /* page 273, index 38 */
  20551     230, 230, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20552     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20553     0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20554     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20555     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0,
  20556     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20557     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20558     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20559     0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20560     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20561     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  20562   },
  20563   { /* page 274, index 39 */
  20564     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20565     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20566     0, 0, 0, 0, 0, 9, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20567     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20568     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20569     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20570     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20571     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20572     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20573     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 9, 0, 0, 0, 0, 0,
  20574     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  20575   },
  20576   { /* page 275, index 40 */
  20577     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20578     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20579     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20580     0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20581     0, 0, 0, 0, 0, 0, 230, 230, 230, 230, 230, 230, 230, 0, 0, 0, 230, 230,
  20582     230, 230, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20583     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20584     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20585     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20586     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20587     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  20588   },
  20589   { /* page 276, index 41 */
  20590     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20591     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20592     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 7, 0,
  20593     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20594     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20595     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20596     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20597     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20598     0, 0, 9, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20599     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20600     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  20601   },
  20602   { /* page 277, index 42 */
  20603     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20604     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20605     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20606     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20607     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20608     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20609     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20610     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9,
  20611     7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20612     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20613     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  20614   },
  20615   { /* page 278, index 43 */
  20616     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20617     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20618     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0,
  20619     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20620     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20621     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20622     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20623     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 7, 0, 0, 0, 0, 0, 0, 0, 0,
  20624     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20625     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20626     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  20627   },
  20628   { /* page 279, index 44 */
  20629     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20630     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0,
  20631     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20632     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20633     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20634     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20635     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20636     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20637     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20638     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20639     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  20640   },
  20641   { /* page 282, index 45 */
  20642     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20643     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20644     0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9,
  20645     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20646     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20647     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20648     0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20649     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20650     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20651     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20652     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  20653   },
  20654   { /* page 284, index 46 */
  20655     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20656     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20657     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0,
  20658     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20659     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20660     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20661     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20662     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20663     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20664     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20665     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  20666   },
  20667   { /* page 285, index 47 */
  20668     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20669     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20670     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 9, 9, 0, 0,
  20671     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20672     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20673     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20674     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20675     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20676     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20677     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20678     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  20679   },
  20680   { /* page 362, index 48 */
  20681     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20682     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20683     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20684     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20685     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20686     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20687     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20688     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20689     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20690     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20691     1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  20692   },
  20693   { /* page 363, index 49 */
  20694     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20695     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20696     230, 230, 230, 230, 230, 230, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20697     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20698     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20699     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20700     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20701     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20702     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20703     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20704     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  20705   },
  20706   { /* page 444, index 50 */
  20707     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20708     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20709     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20710     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20711     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20712     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20713     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20714     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20715     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20716     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20717     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  20718   },
  20719   { /* page 465, index 51 */
  20720     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20721     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20722     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20723     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20724     0, 0, 0, 0, 0, 216, 216, 1, 1, 1, 0, 0, 0, 226, 216, 216, 216, 216, 216,
  20725     0, 0, 0, 0, 0, 0, 0, 0, 220, 220, 220, 220, 220, 220, 220, 220, 0, 0,
  20726     230, 230, 230, 230, 230, 220, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20727     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 230, 230, 230, 0,
  20728     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20729     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20730     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20731     0, 0, 0, 0, 0, 0, 0, 0, 0
  20732   },
  20733   { /* page 466, index 52 */
  20734     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20735     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20736     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 230, 230, 0,
  20737     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20738     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20739     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20740     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20741     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20742     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20743     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20744     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  20745   },
  20746   { /* page 480, index 53 */
  20747     230, 230, 230, 230, 230, 230, 230, 0, 230, 230, 230, 230, 230, 230, 230,
  20748     230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 0, 0, 230, 230, 230,
  20749     230, 230, 230, 230, 0, 230, 230, 0, 230, 230, 230, 230, 230, 0, 0, 0, 0,
  20750     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20751     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20752     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20753     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20754     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20755     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20756     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20757     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20758     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  20759   },
  20760   { /* page 488, index 54 */
  20761     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20762     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20763     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20764     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20765     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20766     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20767     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20768     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20769     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 220, 220, 220, 220, 220,
  20770     220, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20771     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  20772   },
  20773   { /* page 489, index 55 */
  20774     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20775     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20776     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 230,
  20777     230, 230, 230, 230, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20778     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20779     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20780     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20781     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20782     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20783     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20784     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  20785   }
  20786 };
  20787 
  20788 static const int16_t combining_class_table_part1[763] = {
  20789   0 + UNICODE_MAX_TABLE_INDEX,
  20790   0 + UNICODE_MAX_TABLE_INDEX,
  20791   0 + UNICODE_MAX_TABLE_INDEX,
  20792   0 /* page 3 */,
  20793   1 /* page 4 */,
  20794   2 /* page 5 */,
  20795   3 /* page 6 */,
  20796   4 /* page 7 */,
  20797   5 /* page 8 */,
  20798   6 /* page 9 */,
  20799   7 /* page 10 */,
  20800   8 /* page 11 */,
  20801   9 /* page 12 */,
  20802   10 /* page 13 */,
  20803   11 /* page 14 */,
  20804   12 /* page 15 */,
  20805   13 /* page 16 */,
  20806   0 + UNICODE_MAX_TABLE_INDEX,
  20807   0 + UNICODE_MAX_TABLE_INDEX,
  20808   14 /* page 19 */,
  20809   0 + UNICODE_MAX_TABLE_INDEX,
  20810   0 + UNICODE_MAX_TABLE_INDEX,
  20811   0 + UNICODE_MAX_TABLE_INDEX,
  20812   15 /* page 23 */,
  20813   16 /* page 24 */,
  20814   17 /* page 25 */,
  20815   18 /* page 26 */,
  20816   19 /* page 27 */,
  20817   20 /* page 28 */,
  20818   21 /* page 29 */,
  20819   0 + UNICODE_MAX_TABLE_INDEX,
  20820   0 + UNICODE_MAX_TABLE_INDEX,
  20821   22 /* page 32 */,
  20822   0 + UNICODE_MAX_TABLE_INDEX,
  20823   0 + UNICODE_MAX_TABLE_INDEX,
  20824   0 + UNICODE_MAX_TABLE_INDEX,
  20825   0 + UNICODE_MAX_TABLE_INDEX,
  20826   0 + UNICODE_MAX_TABLE_INDEX,
  20827   0 + UNICODE_MAX_TABLE_INDEX,
  20828   0 + UNICODE_MAX_TABLE_INDEX,
  20829   0 + UNICODE_MAX_TABLE_INDEX,
  20830   0 + UNICODE_MAX_TABLE_INDEX,
  20831   0 + UNICODE_MAX_TABLE_INDEX,
  20832   0 + UNICODE_MAX_TABLE_INDEX,
  20833   23 /* page 44 */,
  20834   24 /* page 45 */,
  20835   0 + UNICODE_MAX_TABLE_INDEX,
  20836   0 + UNICODE_MAX_TABLE_INDEX,
  20837   25 /* page 48 */,
  20838   0 + UNICODE_MAX_TABLE_INDEX,
  20839   0 + UNICODE_MAX_TABLE_INDEX,
  20840   0 + UNICODE_MAX_TABLE_INDEX,
  20841   0 + UNICODE_MAX_TABLE_INDEX,
  20842   0 + UNICODE_MAX_TABLE_INDEX,
  20843   0 + UNICODE_MAX_TABLE_INDEX,
  20844   0 + UNICODE_MAX_TABLE_INDEX,
  20845   0 + UNICODE_MAX_TABLE_INDEX,
  20846   0 + UNICODE_MAX_TABLE_INDEX,
  20847   0 + UNICODE_MAX_TABLE_INDEX,
  20848   0 + UNICODE_MAX_TABLE_INDEX,
  20849   0 + UNICODE_MAX_TABLE_INDEX,
  20850   0 + UNICODE_MAX_TABLE_INDEX,
  20851   0 + UNICODE_MAX_TABLE_INDEX,
  20852   0 + UNICODE_MAX_TABLE_INDEX,
  20853   0 + UNICODE_MAX_TABLE_INDEX,
  20854   0 + UNICODE_MAX_TABLE_INDEX,
  20855   0 + UNICODE_MAX_TABLE_INDEX,
  20856   0 + UNICODE_MAX_TABLE_INDEX,
  20857   0 + UNICODE_MAX_TABLE_INDEX,
  20858   0 + UNICODE_MAX_TABLE_INDEX,
  20859   0 + UNICODE_MAX_TABLE_INDEX,
  20860   0 + UNICODE_MAX_TABLE_INDEX,
  20861   0 + UNICODE_MAX_TABLE_INDEX,
  20862   0 + UNICODE_MAX_TABLE_INDEX,
  20863   0 + UNICODE_MAX_TABLE_INDEX,
  20864   0 + UNICODE_MAX_TABLE_INDEX,
  20865   0 + UNICODE_MAX_TABLE_INDEX,
  20866   0 + UNICODE_MAX_TABLE_INDEX,
  20867   0 + UNICODE_MAX_TABLE_INDEX,
  20868   0 + UNICODE_MAX_TABLE_INDEX,
  20869   0 + UNICODE_MAX_TABLE_INDEX,
  20870   0 + UNICODE_MAX_TABLE_INDEX,
  20871   0 + UNICODE_MAX_TABLE_INDEX,
  20872   0 + UNICODE_MAX_TABLE_INDEX,
  20873   0 + UNICODE_MAX_TABLE_INDEX,
  20874   0 + UNICODE_MAX_TABLE_INDEX,
  20875   0 + UNICODE_MAX_TABLE_INDEX,
  20876   0 + UNICODE_MAX_TABLE_INDEX,
  20877   0 + UNICODE_MAX_TABLE_INDEX,
  20878   0 + UNICODE_MAX_TABLE_INDEX,
  20879   0 + UNICODE_MAX_TABLE_INDEX,
  20880   0 + UNICODE_MAX_TABLE_INDEX,
  20881   0 + UNICODE_MAX_TABLE_INDEX,
  20882   0 + UNICODE_MAX_TABLE_INDEX,
  20883   0 + UNICODE_MAX_TABLE_INDEX,
  20884   0 + UNICODE_MAX_TABLE_INDEX,
  20885   0 + UNICODE_MAX_TABLE_INDEX,
  20886   0 + UNICODE_MAX_TABLE_INDEX,
  20887   0 + UNICODE_MAX_TABLE_INDEX,
  20888   0 + UNICODE_MAX_TABLE_INDEX,
  20889   0 + UNICODE_MAX_TABLE_INDEX,
  20890   0 + UNICODE_MAX_TABLE_INDEX,
  20891   0 + UNICODE_MAX_TABLE_INDEX,
  20892   0 + UNICODE_MAX_TABLE_INDEX,
  20893   0 + UNICODE_MAX_TABLE_INDEX,
  20894   0 + UNICODE_MAX_TABLE_INDEX,
  20895   0 + UNICODE_MAX_TABLE_INDEX,
  20896   0 + UNICODE_MAX_TABLE_INDEX,
  20897   0 + UNICODE_MAX_TABLE_INDEX,
  20898   0 + UNICODE_MAX_TABLE_INDEX,
  20899   0 + UNICODE_MAX_TABLE_INDEX,
  20900   0 + UNICODE_MAX_TABLE_INDEX,
  20901   0 + UNICODE_MAX_TABLE_INDEX,
  20902   0 + UNICODE_MAX_TABLE_INDEX,
  20903   0 + UNICODE_MAX_TABLE_INDEX,
  20904   0 + UNICODE_MAX_TABLE_INDEX,
  20905   0 + UNICODE_MAX_TABLE_INDEX,
  20906   0 + UNICODE_MAX_TABLE_INDEX,
  20907   0 + UNICODE_MAX_TABLE_INDEX,
  20908   0 + UNICODE_MAX_TABLE_INDEX,
  20909   0 + UNICODE_MAX_TABLE_INDEX,
  20910   0 + UNICODE_MAX_TABLE_INDEX,
  20911   0 + UNICODE_MAX_TABLE_INDEX,
  20912   0 + UNICODE_MAX_TABLE_INDEX,
  20913   0 + UNICODE_MAX_TABLE_INDEX,
  20914   0 + UNICODE_MAX_TABLE_INDEX,
  20915   0 + UNICODE_MAX_TABLE_INDEX,
  20916   0 + UNICODE_MAX_TABLE_INDEX,
  20917   0 + UNICODE_MAX_TABLE_INDEX,
  20918   0 + UNICODE_MAX_TABLE_INDEX,
  20919   0 + UNICODE_MAX_TABLE_INDEX,
  20920   0 + UNICODE_MAX_TABLE_INDEX,
  20921   0 + UNICODE_MAX_TABLE_INDEX,
  20922   0 + UNICODE_MAX_TABLE_INDEX,
  20923   0 + UNICODE_MAX_TABLE_INDEX,
  20924   0 + UNICODE_MAX_TABLE_INDEX,
  20925   0 + UNICODE_MAX_TABLE_INDEX,
  20926   0 + UNICODE_MAX_TABLE_INDEX,
  20927   0 + UNICODE_MAX_TABLE_INDEX,
  20928   0 + UNICODE_MAX_TABLE_INDEX,
  20929   0 + UNICODE_MAX_TABLE_INDEX,
  20930   0 + UNICODE_MAX_TABLE_INDEX,
  20931   0 + UNICODE_MAX_TABLE_INDEX,
  20932   0 + UNICODE_MAX_TABLE_INDEX,
  20933   0 + UNICODE_MAX_TABLE_INDEX,
  20934   0 + UNICODE_MAX_TABLE_INDEX,
  20935   0 + UNICODE_MAX_TABLE_INDEX,
  20936   0 + UNICODE_MAX_TABLE_INDEX,
  20937   0 + UNICODE_MAX_TABLE_INDEX,
  20938   0 + UNICODE_MAX_TABLE_INDEX,
  20939   0 + UNICODE_MAX_TABLE_INDEX,
  20940   0 + UNICODE_MAX_TABLE_INDEX,
  20941   0 + UNICODE_MAX_TABLE_INDEX,
  20942   0 + UNICODE_MAX_TABLE_INDEX,
  20943   0 + UNICODE_MAX_TABLE_INDEX,
  20944   0 + UNICODE_MAX_TABLE_INDEX,
  20945   0 + UNICODE_MAX_TABLE_INDEX,
  20946   0 + UNICODE_MAX_TABLE_INDEX,
  20947   0 + UNICODE_MAX_TABLE_INDEX,
  20948   0 + UNICODE_MAX_TABLE_INDEX,
  20949   0 + UNICODE_MAX_TABLE_INDEX,
  20950   0 + UNICODE_MAX_TABLE_INDEX,
  20951   0 + UNICODE_MAX_TABLE_INDEX,
  20952   0 + UNICODE_MAX_TABLE_INDEX,
  20953   0 + UNICODE_MAX_TABLE_INDEX,
  20954   0 + UNICODE_MAX_TABLE_INDEX,
  20955   26 /* page 166 */,
  20956   0 + UNICODE_MAX_TABLE_INDEX,
  20957   27 /* page 168 */,
  20958   28 /* page 169 */,
  20959   29 /* page 170 */,
  20960   30 /* page 171 */,
  20961   0 + UNICODE_MAX_TABLE_INDEX,
  20962   0 + UNICODE_MAX_TABLE_INDEX,
  20963   0 + UNICODE_MAX_TABLE_INDEX,
  20964   0 + UNICODE_MAX_TABLE_INDEX,
  20965   0 + UNICODE_MAX_TABLE_INDEX,
  20966   0 + UNICODE_MAX_TABLE_INDEX,
  20967   0 + UNICODE_MAX_TABLE_INDEX,
  20968   0 + UNICODE_MAX_TABLE_INDEX,
  20969   0 + UNICODE_MAX_TABLE_INDEX,
  20970   0 + UNICODE_MAX_TABLE_INDEX,
  20971   0 + UNICODE_MAX_TABLE_INDEX,
  20972   0 + UNICODE_MAX_TABLE_INDEX,
  20973   0 + UNICODE_MAX_TABLE_INDEX,
  20974   0 + UNICODE_MAX_TABLE_INDEX,
  20975   0 + UNICODE_MAX_TABLE_INDEX,
  20976   0 + UNICODE_MAX_TABLE_INDEX,
  20977   0 + UNICODE_MAX_TABLE_INDEX,
  20978   0 + UNICODE_MAX_TABLE_INDEX,
  20979   0 + UNICODE_MAX_TABLE_INDEX,
  20980   0 + UNICODE_MAX_TABLE_INDEX,
  20981   0 + UNICODE_MAX_TABLE_INDEX,
  20982   0 + UNICODE_MAX_TABLE_INDEX,
  20983   0 + UNICODE_MAX_TABLE_INDEX,
  20984   0 + UNICODE_MAX_TABLE_INDEX,
  20985   0 + UNICODE_MAX_TABLE_INDEX,
  20986   0 + UNICODE_MAX_TABLE_INDEX,
  20987   0 + UNICODE_MAX_TABLE_INDEX,
  20988   0 + UNICODE_MAX_TABLE_INDEX,
  20989   0 + UNICODE_MAX_TABLE_INDEX,
  20990   0 + UNICODE_MAX_TABLE_INDEX,
  20991   0 + UNICODE_MAX_TABLE_INDEX,
  20992   0 + UNICODE_MAX_TABLE_INDEX,
  20993   0 + UNICODE_MAX_TABLE_INDEX,
  20994   0 + UNICODE_MAX_TABLE_INDEX,
  20995   0 + UNICODE_MAX_TABLE_INDEX,
  20996   0 + UNICODE_MAX_TABLE_INDEX,
  20997   0 + UNICODE_MAX_TABLE_INDEX,
  20998   0 + UNICODE_MAX_TABLE_INDEX,
  20999   0 + UNICODE_MAX_TABLE_INDEX,
  21000   0 + UNICODE_MAX_TABLE_INDEX,
  21001   0 + UNICODE_MAX_TABLE_INDEX,
  21002   0 + UNICODE_MAX_TABLE_INDEX,
  21003   0 + UNICODE_MAX_TABLE_INDEX,
  21004   0 + UNICODE_MAX_TABLE_INDEX,
  21005   0 + UNICODE_MAX_TABLE_INDEX,
  21006   0 + UNICODE_MAX_TABLE_INDEX,
  21007   0 + UNICODE_MAX_TABLE_INDEX,
  21008   0 + UNICODE_MAX_TABLE_INDEX,
  21009   0 + UNICODE_MAX_TABLE_INDEX,
  21010   0 + UNICODE_MAX_TABLE_INDEX,
  21011   0 + UNICODE_MAX_TABLE_INDEX,
  21012   0 + UNICODE_MAX_TABLE_INDEX,
  21013   0 + UNICODE_MAX_TABLE_INDEX,
  21014   0 + UNICODE_MAX_TABLE_INDEX,
  21015   0 + UNICODE_MAX_TABLE_INDEX,
  21016   0 + UNICODE_MAX_TABLE_INDEX,
  21017   0 + UNICODE_MAX_TABLE_INDEX,
  21018   0 + UNICODE_MAX_TABLE_INDEX,
  21019   0 + UNICODE_MAX_TABLE_INDEX,
  21020   0 + UNICODE_MAX_TABLE_INDEX,
  21021   0 + UNICODE_MAX_TABLE_INDEX,
  21022   0 + UNICODE_MAX_TABLE_INDEX,
  21023   0 + UNICODE_MAX_TABLE_INDEX,
  21024   0 + UNICODE_MAX_TABLE_INDEX,
  21025   0 + UNICODE_MAX_TABLE_INDEX,
  21026   0 + UNICODE_MAX_TABLE_INDEX,
  21027   0 + UNICODE_MAX_TABLE_INDEX,
  21028   0 + UNICODE_MAX_TABLE_INDEX,
  21029   0 + UNICODE_MAX_TABLE_INDEX,
  21030   0 + UNICODE_MAX_TABLE_INDEX,
  21031   0 + UNICODE_MAX_TABLE_INDEX,
  21032   0 + UNICODE_MAX_TABLE_INDEX,
  21033   0 + UNICODE_MAX_TABLE_INDEX,
  21034   0 + UNICODE_MAX_TABLE_INDEX,
  21035   0 + UNICODE_MAX_TABLE_INDEX,
  21036   0 + UNICODE_MAX_TABLE_INDEX,
  21037   0 + UNICODE_MAX_TABLE_INDEX,
  21038   0 + UNICODE_MAX_TABLE_INDEX,
  21039   0 + UNICODE_MAX_TABLE_INDEX,
  21040   31 /* page 251 */,
  21041   0 + UNICODE_MAX_TABLE_INDEX,
  21042   0 + UNICODE_MAX_TABLE_INDEX,
  21043   32 /* page 254 */,
  21044   0 + UNICODE_MAX_TABLE_INDEX,
  21045   0 + UNICODE_MAX_TABLE_INDEX,
  21046   33 /* page 257 */,
  21047   34 /* page 258 */,
  21048   35 /* page 259 */,
  21049   0 + UNICODE_MAX_TABLE_INDEX,
  21050   0 + UNICODE_MAX_TABLE_INDEX,
  21051   0 + UNICODE_MAX_TABLE_INDEX,
  21052   0 + UNICODE_MAX_TABLE_INDEX,
  21053   0 + UNICODE_MAX_TABLE_INDEX,
  21054   0 + UNICODE_MAX_TABLE_INDEX,
  21055   36 /* page 266 */,
  21056   0 + UNICODE_MAX_TABLE_INDEX,
  21057   0 + UNICODE_MAX_TABLE_INDEX,
  21058   0 + UNICODE_MAX_TABLE_INDEX,
  21059   0 + UNICODE_MAX_TABLE_INDEX,
  21060   0 + UNICODE_MAX_TABLE_INDEX,
  21061   37 /* page 272 */,
  21062   38 /* page 273 */,
  21063   39 /* page 274 */,
  21064   40 /* page 275 */,
  21065   41 /* page 276 */,
  21066   42 /* page 277 */,
  21067   43 /* page 278 */,
  21068   44 /* page 279 */,
  21069   0 + UNICODE_MAX_TABLE_INDEX,
  21070   0 + UNICODE_MAX_TABLE_INDEX,
  21071   45 /* page 282 */,
  21072   0 + UNICODE_MAX_TABLE_INDEX,
  21073   46 /* page 284 */,
  21074   47 /* page 285 */,
  21075   0 + UNICODE_MAX_TABLE_INDEX,
  21076   0 + UNICODE_MAX_TABLE_INDEX,
  21077   0 + UNICODE_MAX_TABLE_INDEX,
  21078   0 + UNICODE_MAX_TABLE_INDEX,
  21079   0 + UNICODE_MAX_TABLE_INDEX,
  21080   0 + UNICODE_MAX_TABLE_INDEX,
  21081   0 + UNICODE_MAX_TABLE_INDEX,
  21082   0 + UNICODE_MAX_TABLE_INDEX,
  21083   0 + UNICODE_MAX_TABLE_INDEX,
  21084   0 + UNICODE_MAX_TABLE_INDEX,
  21085   0 + UNICODE_MAX_TABLE_INDEX,
  21086   0 + UNICODE_MAX_TABLE_INDEX,
  21087   0 + UNICODE_MAX_TABLE_INDEX,
  21088   0 + UNICODE_MAX_TABLE_INDEX,
  21089   0 + UNICODE_MAX_TABLE_INDEX,
  21090   0 + UNICODE_MAX_TABLE_INDEX,
  21091   0 + UNICODE_MAX_TABLE_INDEX,
  21092   0 + UNICODE_MAX_TABLE_INDEX,
  21093   0 + UNICODE_MAX_TABLE_INDEX,
  21094   0 + UNICODE_MAX_TABLE_INDEX,
  21095   0 + UNICODE_MAX_TABLE_INDEX,
  21096   0 + UNICODE_MAX_TABLE_INDEX,
  21097   0 + UNICODE_MAX_TABLE_INDEX,
  21098   0 + UNICODE_MAX_TABLE_INDEX,
  21099   0 + UNICODE_MAX_TABLE_INDEX,
  21100   0 + UNICODE_MAX_TABLE_INDEX,
  21101   0 + UNICODE_MAX_TABLE_INDEX,
  21102   0 + UNICODE_MAX_TABLE_INDEX,
  21103   0 + UNICODE_MAX_TABLE_INDEX,
  21104   0 + UNICODE_MAX_TABLE_INDEX,
  21105   0 + UNICODE_MAX_TABLE_INDEX,
  21106   0 + UNICODE_MAX_TABLE_INDEX,
  21107   0 + UNICODE_MAX_TABLE_INDEX,
  21108   0 + UNICODE_MAX_TABLE_INDEX,
  21109   0 + UNICODE_MAX_TABLE_INDEX,
  21110   0 + UNICODE_MAX_TABLE_INDEX,
  21111   0 + UNICODE_MAX_TABLE_INDEX,
  21112   0 + UNICODE_MAX_TABLE_INDEX,
  21113   0 + UNICODE_MAX_TABLE_INDEX,
  21114   0 + UNICODE_MAX_TABLE_INDEX,
  21115   0 + UNICODE_MAX_TABLE_INDEX,
  21116   0 + UNICODE_MAX_TABLE_INDEX,
  21117   0 + UNICODE_MAX_TABLE_INDEX,
  21118   0 + UNICODE_MAX_TABLE_INDEX,
  21119   0 + UNICODE_MAX_TABLE_INDEX,
  21120   0 + UNICODE_MAX_TABLE_INDEX,
  21121   0 + UNICODE_MAX_TABLE_INDEX,
  21122   0 + UNICODE_MAX_TABLE_INDEX,
  21123   0 + UNICODE_MAX_TABLE_INDEX,
  21124   0 + UNICODE_MAX_TABLE_INDEX,
  21125   0 + UNICODE_MAX_TABLE_INDEX,
  21126   0 + UNICODE_MAX_TABLE_INDEX,
  21127   0 + UNICODE_MAX_TABLE_INDEX,
  21128   0 + UNICODE_MAX_TABLE_INDEX,
  21129   0 + UNICODE_MAX_TABLE_INDEX,
  21130   0 + UNICODE_MAX_TABLE_INDEX,
  21131   0 + UNICODE_MAX_TABLE_INDEX,
  21132   0 + UNICODE_MAX_TABLE_INDEX,
  21133   0 + UNICODE_MAX_TABLE_INDEX,
  21134   0 + UNICODE_MAX_TABLE_INDEX,
  21135   0 + UNICODE_MAX_TABLE_INDEX,
  21136   0 + UNICODE_MAX_TABLE_INDEX,
  21137   0 + UNICODE_MAX_TABLE_INDEX,
  21138   0 + UNICODE_MAX_TABLE_INDEX,
  21139   0 + UNICODE_MAX_TABLE_INDEX,
  21140   0 + UNICODE_MAX_TABLE_INDEX,
  21141   0 + UNICODE_MAX_TABLE_INDEX,
  21142   0 + UNICODE_MAX_TABLE_INDEX,
  21143   0 + UNICODE_MAX_TABLE_INDEX,
  21144   0 + UNICODE_MAX_TABLE_INDEX,
  21145   0 + UNICODE_MAX_TABLE_INDEX,
  21146   0 + UNICODE_MAX_TABLE_INDEX,
  21147   0 + UNICODE_MAX_TABLE_INDEX,
  21148   0 + UNICODE_MAX_TABLE_INDEX,
  21149   0 + UNICODE_MAX_TABLE_INDEX,
  21150   0 + UNICODE_MAX_TABLE_INDEX,
  21151   48 /* page 362 */,
  21152   49 /* page 363 */,
  21153   0 + UNICODE_MAX_TABLE_INDEX,
  21154   0 + UNICODE_MAX_TABLE_INDEX,
  21155   0 + UNICODE_MAX_TABLE_INDEX,
  21156   0 + UNICODE_MAX_TABLE_INDEX,
  21157   0 + UNICODE_MAX_TABLE_INDEX,
  21158   0 + UNICODE_MAX_TABLE_INDEX,
  21159   0 + UNICODE_MAX_TABLE_INDEX,
  21160   0 + UNICODE_MAX_TABLE_INDEX,
  21161   0 + UNICODE_MAX_TABLE_INDEX,
  21162   0 + UNICODE_MAX_TABLE_INDEX,
  21163   0 + UNICODE_MAX_TABLE_INDEX,
  21164   0 + UNICODE_MAX_TABLE_INDEX,
  21165   0 + UNICODE_MAX_TABLE_INDEX,
  21166   0 + UNICODE_MAX_TABLE_INDEX,
  21167   0 + UNICODE_MAX_TABLE_INDEX,
  21168   0 + UNICODE_MAX_TABLE_INDEX,
  21169   0 + UNICODE_MAX_TABLE_INDEX,
  21170   0 + UNICODE_MAX_TABLE_INDEX,
  21171   0 + UNICODE_MAX_TABLE_INDEX,
  21172   0 + UNICODE_MAX_TABLE_INDEX,
  21173   0 + UNICODE_MAX_TABLE_INDEX,
  21174   0 + UNICODE_MAX_TABLE_INDEX,
  21175   0 + UNICODE_MAX_TABLE_INDEX,
  21176   0 + UNICODE_MAX_TABLE_INDEX,
  21177   0 + UNICODE_MAX_TABLE_INDEX,
  21178   0 + UNICODE_MAX_TABLE_INDEX,
  21179   0 + UNICODE_MAX_TABLE_INDEX,
  21180   0 + UNICODE_MAX_TABLE_INDEX,
  21181   0 + UNICODE_MAX_TABLE_INDEX,
  21182   0 + UNICODE_MAX_TABLE_INDEX,
  21183   0 + UNICODE_MAX_TABLE_INDEX,
  21184   0 + UNICODE_MAX_TABLE_INDEX,
  21185   0 + UNICODE_MAX_TABLE_INDEX,
  21186   0 + UNICODE_MAX_TABLE_INDEX,
  21187   0 + UNICODE_MAX_TABLE_INDEX,
  21188   0 + UNICODE_MAX_TABLE_INDEX,
  21189   0 + UNICODE_MAX_TABLE_INDEX,
  21190   0 + UNICODE_MAX_TABLE_INDEX,
  21191   0 + UNICODE_MAX_TABLE_INDEX,
  21192   0 + UNICODE_MAX_TABLE_INDEX,
  21193   0 + UNICODE_MAX_TABLE_INDEX,
  21194   0 + UNICODE_MAX_TABLE_INDEX,
  21195   0 + UNICODE_MAX_TABLE_INDEX,
  21196   0 + UNICODE_MAX_TABLE_INDEX,
  21197   0 + UNICODE_MAX_TABLE_INDEX,
  21198   0 + UNICODE_MAX_TABLE_INDEX,
  21199   0 + UNICODE_MAX_TABLE_INDEX,
  21200   0 + UNICODE_MAX_TABLE_INDEX,
  21201   0 + UNICODE_MAX_TABLE_INDEX,
  21202   0 + UNICODE_MAX_TABLE_INDEX,
  21203   0 + UNICODE_MAX_TABLE_INDEX,
  21204   0 + UNICODE_MAX_TABLE_INDEX,
  21205   0 + UNICODE_MAX_TABLE_INDEX,
  21206   0 + UNICODE_MAX_TABLE_INDEX,
  21207   0 + UNICODE_MAX_TABLE_INDEX,
  21208   0 + UNICODE_MAX_TABLE_INDEX,
  21209   0 + UNICODE_MAX_TABLE_INDEX,
  21210   0 + UNICODE_MAX_TABLE_INDEX,
  21211   0 + UNICODE_MAX_TABLE_INDEX,
  21212   0 + UNICODE_MAX_TABLE_INDEX,
  21213   0 + UNICODE_MAX_TABLE_INDEX,
  21214   0 + UNICODE_MAX_TABLE_INDEX,
  21215   0 + UNICODE_MAX_TABLE_INDEX,
  21216   0 + UNICODE_MAX_TABLE_INDEX,
  21217   0 + UNICODE_MAX_TABLE_INDEX,
  21218   0 + UNICODE_MAX_TABLE_INDEX,
  21219   0 + UNICODE_MAX_TABLE_INDEX,
  21220   0 + UNICODE_MAX_TABLE_INDEX,
  21221   0 + UNICODE_MAX_TABLE_INDEX,
  21222   0 + UNICODE_MAX_TABLE_INDEX,
  21223   0 + UNICODE_MAX_TABLE_INDEX,
  21224   0 + UNICODE_MAX_TABLE_INDEX,
  21225   0 + UNICODE_MAX_TABLE_INDEX,
  21226   0 + UNICODE_MAX_TABLE_INDEX,
  21227   0 + UNICODE_MAX_TABLE_INDEX,
  21228   0 + UNICODE_MAX_TABLE_INDEX,
  21229   0 + UNICODE_MAX_TABLE_INDEX,
  21230   0 + UNICODE_MAX_TABLE_INDEX,
  21231   0 + UNICODE_MAX_TABLE_INDEX,
  21232   0 + UNICODE_MAX_TABLE_INDEX,
  21233   50 /* page 444 */,
  21234   0 + UNICODE_MAX_TABLE_INDEX,
  21235   0 + UNICODE_MAX_TABLE_INDEX,
  21236   0 + UNICODE_MAX_TABLE_INDEX,
  21237   0 + UNICODE_MAX_TABLE_INDEX,
  21238   0 + UNICODE_MAX_TABLE_INDEX,
  21239   0 + UNICODE_MAX_TABLE_INDEX,
  21240   0 + UNICODE_MAX_TABLE_INDEX,
  21241   0 + UNICODE_MAX_TABLE_INDEX,
  21242   0 + UNICODE_MAX_TABLE_INDEX,
  21243   0 + UNICODE_MAX_TABLE_INDEX,
  21244   0 + UNICODE_MAX_TABLE_INDEX,
  21245   0 + UNICODE_MAX_TABLE_INDEX,
  21246   0 + UNICODE_MAX_TABLE_INDEX,
  21247   0 + UNICODE_MAX_TABLE_INDEX,
  21248   0 + UNICODE_MAX_TABLE_INDEX,
  21249   0 + UNICODE_MAX_TABLE_INDEX,
  21250   0 + UNICODE_MAX_TABLE_INDEX,
  21251   0 + UNICODE_MAX_TABLE_INDEX,
  21252   0 + UNICODE_MAX_TABLE_INDEX,
  21253   0 + UNICODE_MAX_TABLE_INDEX,
  21254   51 /* page 465 */,
  21255   52 /* page 466 */,
  21256   0 + UNICODE_MAX_TABLE_INDEX,
  21257   0 + UNICODE_MAX_TABLE_INDEX,
  21258   0 + UNICODE_MAX_TABLE_INDEX,
  21259   0 + UNICODE_MAX_TABLE_INDEX,
  21260   0 + UNICODE_MAX_TABLE_INDEX,
  21261   0 + UNICODE_MAX_TABLE_INDEX,
  21262   0 + UNICODE_MAX_TABLE_INDEX,
  21263   0 + UNICODE_MAX_TABLE_INDEX,
  21264   0 + UNICODE_MAX_TABLE_INDEX,
  21265   0 + UNICODE_MAX_TABLE_INDEX,
  21266   0 + UNICODE_MAX_TABLE_INDEX,
  21267   0 + UNICODE_MAX_TABLE_INDEX,
  21268   0 + UNICODE_MAX_TABLE_INDEX,
  21269   53 /* page 480 */,
  21270   0 + UNICODE_MAX_TABLE_INDEX,
  21271   0 + UNICODE_MAX_TABLE_INDEX,
  21272   0 + UNICODE_MAX_TABLE_INDEX,
  21273   0 + UNICODE_MAX_TABLE_INDEX,
  21274   0 + UNICODE_MAX_TABLE_INDEX,
  21275   0 + UNICODE_MAX_TABLE_INDEX,
  21276   0 + UNICODE_MAX_TABLE_INDEX,
  21277   54 /* page 488 */,
  21278   55 /* page 489 */,
  21279   0 + UNICODE_MAX_TABLE_INDEX,
  21280   0 + UNICODE_MAX_TABLE_INDEX,
  21281   0 + UNICODE_MAX_TABLE_INDEX,
  21282   0 + UNICODE_MAX_TABLE_INDEX,
  21283   0 + UNICODE_MAX_TABLE_INDEX,
  21284   0 + UNICODE_MAX_TABLE_INDEX,
  21285   0 + UNICODE_MAX_TABLE_INDEX,
  21286   0 + UNICODE_MAX_TABLE_INDEX,
  21287   0 + UNICODE_MAX_TABLE_INDEX,
  21288   0 + UNICODE_MAX_TABLE_INDEX,
  21289   0 + UNICODE_MAX_TABLE_INDEX,
  21290   0 + UNICODE_MAX_TABLE_INDEX,
  21291   0 + UNICODE_MAX_TABLE_INDEX,
  21292   0 + UNICODE_MAX_TABLE_INDEX,
  21293   0 + UNICODE_MAX_TABLE_INDEX,
  21294   0 + UNICODE_MAX_TABLE_INDEX,
  21295   0 + UNICODE_MAX_TABLE_INDEX,
  21296   0 + UNICODE_MAX_TABLE_INDEX,
  21297   0 + UNICODE_MAX_TABLE_INDEX,
  21298   0 + UNICODE_MAX_TABLE_INDEX,
  21299   0 + UNICODE_MAX_TABLE_INDEX,
  21300   0 + UNICODE_MAX_TABLE_INDEX,
  21301   0 + UNICODE_MAX_TABLE_INDEX,
  21302   0 + UNICODE_MAX_TABLE_INDEX,
  21303   0 + UNICODE_MAX_TABLE_INDEX,
  21304   0 + UNICODE_MAX_TABLE_INDEX,
  21305   0 + UNICODE_MAX_TABLE_INDEX,
  21306   0 + UNICODE_MAX_TABLE_INDEX,
  21307   0 + UNICODE_MAX_TABLE_INDEX,
  21308   0 + UNICODE_MAX_TABLE_INDEX,
  21309   0 + UNICODE_MAX_TABLE_INDEX,
  21310   0 + UNICODE_MAX_TABLE_INDEX,
  21311   0 + UNICODE_MAX_TABLE_INDEX,
  21312   0 + UNICODE_MAX_TABLE_INDEX,
  21313   0 + UNICODE_MAX_TABLE_INDEX,
  21314   0 + UNICODE_MAX_TABLE_INDEX,
  21315   0 + UNICODE_MAX_TABLE_INDEX,
  21316   0 + UNICODE_MAX_TABLE_INDEX,
  21317   0 + UNICODE_MAX_TABLE_INDEX,
  21318   0 + UNICODE_MAX_TABLE_INDEX,
  21319   0 + UNICODE_MAX_TABLE_INDEX,
  21320   0 + UNICODE_MAX_TABLE_INDEX,
  21321   0 + UNICODE_MAX_TABLE_INDEX,
  21322   0 + UNICODE_MAX_TABLE_INDEX,
  21323   0 + UNICODE_MAX_TABLE_INDEX,
  21324   0 + UNICODE_MAX_TABLE_INDEX,
  21325   0 + UNICODE_MAX_TABLE_INDEX,
  21326   0 + UNICODE_MAX_TABLE_INDEX,
  21327   0 + UNICODE_MAX_TABLE_INDEX,
  21328   0 + UNICODE_MAX_TABLE_INDEX,
  21329   0 + UNICODE_MAX_TABLE_INDEX,
  21330   0 + UNICODE_MAX_TABLE_INDEX,
  21331   0 + UNICODE_MAX_TABLE_INDEX,
  21332   0 + UNICODE_MAX_TABLE_INDEX,
  21333   0 + UNICODE_MAX_TABLE_INDEX,
  21334   0 + UNICODE_MAX_TABLE_INDEX,
  21335   0 + UNICODE_MAX_TABLE_INDEX,
  21336   0 + UNICODE_MAX_TABLE_INDEX,
  21337   0 + UNICODE_MAX_TABLE_INDEX,
  21338   0 + UNICODE_MAX_TABLE_INDEX,
  21339   0 + UNICODE_MAX_TABLE_INDEX,
  21340   0 + UNICODE_MAX_TABLE_INDEX,
  21341   0 + UNICODE_MAX_TABLE_INDEX,
  21342   0 + UNICODE_MAX_TABLE_INDEX,
  21343   0 + UNICODE_MAX_TABLE_INDEX,
  21344   0 + UNICODE_MAX_TABLE_INDEX,
  21345   0 + UNICODE_MAX_TABLE_INDEX,
  21346   0 + UNICODE_MAX_TABLE_INDEX,
  21347   0 + UNICODE_MAX_TABLE_INDEX,
  21348   0 + UNICODE_MAX_TABLE_INDEX,
  21349   0 + UNICODE_MAX_TABLE_INDEX,
  21350   0 + UNICODE_MAX_TABLE_INDEX,
  21351   0 + UNICODE_MAX_TABLE_INDEX,
  21352   0 + UNICODE_MAX_TABLE_INDEX,
  21353   0 + UNICODE_MAX_TABLE_INDEX,
  21354   0 + UNICODE_MAX_TABLE_INDEX,
  21355   0 + UNICODE_MAX_TABLE_INDEX,
  21356   0 + UNICODE_MAX_TABLE_INDEX,
  21357   0 + UNICODE_MAX_TABLE_INDEX,
  21358   0 + UNICODE_MAX_TABLE_INDEX,
  21359   0 + UNICODE_MAX_TABLE_INDEX,
  21360   0 + UNICODE_MAX_TABLE_INDEX,
  21361   0 + UNICODE_MAX_TABLE_INDEX,
  21362   0 + UNICODE_MAX_TABLE_INDEX,
  21363   0 + UNICODE_MAX_TABLE_INDEX,
  21364   0 + UNICODE_MAX_TABLE_INDEX,
  21365   0 + UNICODE_MAX_TABLE_INDEX,
  21366   0 + UNICODE_MAX_TABLE_INDEX,
  21367   0 + UNICODE_MAX_TABLE_INDEX,
  21368   0 + UNICODE_MAX_TABLE_INDEX,
  21369   0 + UNICODE_MAX_TABLE_INDEX,
  21370   0 + UNICODE_MAX_TABLE_INDEX,
  21371   0 + UNICODE_MAX_TABLE_INDEX,
  21372   0 + UNICODE_MAX_TABLE_INDEX,
  21373   0 + UNICODE_MAX_TABLE_INDEX,
  21374   0 + UNICODE_MAX_TABLE_INDEX,
  21375   0 + UNICODE_MAX_TABLE_INDEX,
  21376   0 + UNICODE_MAX_TABLE_INDEX,
  21377   0 + UNICODE_MAX_TABLE_INDEX,
  21378   0 + UNICODE_MAX_TABLE_INDEX,
  21379   0 + UNICODE_MAX_TABLE_INDEX,
  21380   0 + UNICODE_MAX_TABLE_INDEX,
  21381   0 + UNICODE_MAX_TABLE_INDEX,
  21382   0 + UNICODE_MAX_TABLE_INDEX,
  21383   0 + UNICODE_MAX_TABLE_INDEX,
  21384   0 + UNICODE_MAX_TABLE_INDEX,
  21385   0 + UNICODE_MAX_TABLE_INDEX,
  21386   0 + UNICODE_MAX_TABLE_INDEX,
  21387   0 + UNICODE_MAX_TABLE_INDEX,
  21388   0 + UNICODE_MAX_TABLE_INDEX,
  21389   0 + UNICODE_MAX_TABLE_INDEX,
  21390   0 + UNICODE_MAX_TABLE_INDEX,
  21391   0 + UNICODE_MAX_TABLE_INDEX,
  21392   0 + UNICODE_MAX_TABLE_INDEX,
  21393   0 + UNICODE_MAX_TABLE_INDEX,
  21394   0 + UNICODE_MAX_TABLE_INDEX,
  21395   0 + UNICODE_MAX_TABLE_INDEX,
  21396   0 + UNICODE_MAX_TABLE_INDEX,
  21397   0 + UNICODE_MAX_TABLE_INDEX,
  21398   0 + UNICODE_MAX_TABLE_INDEX,
  21399   0 + UNICODE_MAX_TABLE_INDEX,
  21400   0 + UNICODE_MAX_TABLE_INDEX,
  21401   0 + UNICODE_MAX_TABLE_INDEX,
  21402   0 + UNICODE_MAX_TABLE_INDEX,
  21403   0 + UNICODE_MAX_TABLE_INDEX,
  21404   0 + UNICODE_MAX_TABLE_INDEX,
  21405   0 + UNICODE_MAX_TABLE_INDEX,
  21406   0 + UNICODE_MAX_TABLE_INDEX,
  21407   0 + UNICODE_MAX_TABLE_INDEX,
  21408   0 + UNICODE_MAX_TABLE_INDEX,
  21409   0 + UNICODE_MAX_TABLE_INDEX,
  21410   0 + UNICODE_MAX_TABLE_INDEX,
  21411   0 + UNICODE_MAX_TABLE_INDEX,
  21412   0 + UNICODE_MAX_TABLE_INDEX,
  21413   0 + UNICODE_MAX_TABLE_INDEX,
  21414   0 + UNICODE_MAX_TABLE_INDEX,
  21415   0 + UNICODE_MAX_TABLE_INDEX,
  21416   0 + UNICODE_MAX_TABLE_INDEX,
  21417   0 + UNICODE_MAX_TABLE_INDEX,
  21418   0 + UNICODE_MAX_TABLE_INDEX,
  21419   0 + UNICODE_MAX_TABLE_INDEX,
  21420   0 + UNICODE_MAX_TABLE_INDEX,
  21421   0 + UNICODE_MAX_TABLE_INDEX,
  21422   0 + UNICODE_MAX_TABLE_INDEX,
  21423   0 + UNICODE_MAX_TABLE_INDEX,
  21424   0 + UNICODE_MAX_TABLE_INDEX,
  21425   0 + UNICODE_MAX_TABLE_INDEX,
  21426   0 + UNICODE_MAX_TABLE_INDEX,
  21427   0 + UNICODE_MAX_TABLE_INDEX,
  21428   0 + UNICODE_MAX_TABLE_INDEX,
  21429   0 + UNICODE_MAX_TABLE_INDEX,
  21430   0 + UNICODE_MAX_TABLE_INDEX,
  21431   0 + UNICODE_MAX_TABLE_INDEX,
  21432   0 + UNICODE_MAX_TABLE_INDEX,
  21433   0 + UNICODE_MAX_TABLE_INDEX,
  21434   0 + UNICODE_MAX_TABLE_INDEX,
  21435   0 + UNICODE_MAX_TABLE_INDEX,
  21436   0 + UNICODE_MAX_TABLE_INDEX,
  21437   0 + UNICODE_MAX_TABLE_INDEX,
  21438   0 + UNICODE_MAX_TABLE_INDEX,
  21439   0 + UNICODE_MAX_TABLE_INDEX,
  21440   0 + UNICODE_MAX_TABLE_INDEX,
  21441   0 + UNICODE_MAX_TABLE_INDEX,
  21442   0 + UNICODE_MAX_TABLE_INDEX,
  21443   0 + UNICODE_MAX_TABLE_INDEX,
  21444   0 + UNICODE_MAX_TABLE_INDEX,
  21445   0 + UNICODE_MAX_TABLE_INDEX,
  21446   0 + UNICODE_MAX_TABLE_INDEX,
  21447   0 + UNICODE_MAX_TABLE_INDEX,
  21448   0 + UNICODE_MAX_TABLE_INDEX,
  21449   0 + UNICODE_MAX_TABLE_INDEX,
  21450   0 + UNICODE_MAX_TABLE_INDEX,
  21451   0 + UNICODE_MAX_TABLE_INDEX,
  21452   0 + UNICODE_MAX_TABLE_INDEX,
  21453   0 + UNICODE_MAX_TABLE_INDEX,
  21454   0 + UNICODE_MAX_TABLE_INDEX,
  21455   0 + UNICODE_MAX_TABLE_INDEX,
  21456   0 + UNICODE_MAX_TABLE_INDEX,
  21457   0 + UNICODE_MAX_TABLE_INDEX,
  21458   0 + UNICODE_MAX_TABLE_INDEX,
  21459   0 + UNICODE_MAX_TABLE_INDEX,
  21460   0 + UNICODE_MAX_TABLE_INDEX,
  21461   0 + UNICODE_MAX_TABLE_INDEX,
  21462   0 + UNICODE_MAX_TABLE_INDEX,
  21463   0 + UNICODE_MAX_TABLE_INDEX,
  21464   0 + UNICODE_MAX_TABLE_INDEX,
  21465   0 + UNICODE_MAX_TABLE_INDEX,
  21466   0 + UNICODE_MAX_TABLE_INDEX,
  21467   0 + UNICODE_MAX_TABLE_INDEX,
  21468   0 + UNICODE_MAX_TABLE_INDEX,
  21469   0 + UNICODE_MAX_TABLE_INDEX,
  21470   0 + UNICODE_MAX_TABLE_INDEX,
  21471   0 + UNICODE_MAX_TABLE_INDEX,
  21472   0 + UNICODE_MAX_TABLE_INDEX,
  21473   0 + UNICODE_MAX_TABLE_INDEX,
  21474   0 + UNICODE_MAX_TABLE_INDEX,
  21475   0 + UNICODE_MAX_TABLE_INDEX,
  21476   0 + UNICODE_MAX_TABLE_INDEX,
  21477   0 + UNICODE_MAX_TABLE_INDEX,
  21478   0 + UNICODE_MAX_TABLE_INDEX,
  21479   0 + UNICODE_MAX_TABLE_INDEX,
  21480   0 + UNICODE_MAX_TABLE_INDEX,
  21481   0 + UNICODE_MAX_TABLE_INDEX,
  21482   0 + UNICODE_MAX_TABLE_INDEX,
  21483   0 + UNICODE_MAX_TABLE_INDEX,
  21484   0 + UNICODE_MAX_TABLE_INDEX,
  21485   0 + UNICODE_MAX_TABLE_INDEX,
  21486   0 + UNICODE_MAX_TABLE_INDEX,
  21487   0 + UNICODE_MAX_TABLE_INDEX,
  21488   0 + UNICODE_MAX_TABLE_INDEX,
  21489   0 + UNICODE_MAX_TABLE_INDEX,
  21490   0 + UNICODE_MAX_TABLE_INDEX,
  21491   0 + UNICODE_MAX_TABLE_INDEX,
  21492   0 + UNICODE_MAX_TABLE_INDEX,
  21493   0 + UNICODE_MAX_TABLE_INDEX,
  21494   0 + UNICODE_MAX_TABLE_INDEX,
  21495   0 + UNICODE_MAX_TABLE_INDEX,
  21496   0 + UNICODE_MAX_TABLE_INDEX,
  21497   0 + UNICODE_MAX_TABLE_INDEX,
  21498   0 + UNICODE_MAX_TABLE_INDEX,
  21499   0 + UNICODE_MAX_TABLE_INDEX,
  21500   0 + UNICODE_MAX_TABLE_INDEX,
  21501   0 + UNICODE_MAX_TABLE_INDEX,
  21502   0 + UNICODE_MAX_TABLE_INDEX,
  21503   0 + UNICODE_MAX_TABLE_INDEX,
  21504   0 + UNICODE_MAX_TABLE_INDEX,
  21505   0 + UNICODE_MAX_TABLE_INDEX,
  21506   0 + UNICODE_MAX_TABLE_INDEX,
  21507   0 + UNICODE_MAX_TABLE_INDEX,
  21508   0 + UNICODE_MAX_TABLE_INDEX,
  21509   0 + UNICODE_MAX_TABLE_INDEX,
  21510   0 + UNICODE_MAX_TABLE_INDEX,
  21511   0 + UNICODE_MAX_TABLE_INDEX,
  21512   0 + UNICODE_MAX_TABLE_INDEX,
  21513   0 + UNICODE_MAX_TABLE_INDEX,
  21514   0 + UNICODE_MAX_TABLE_INDEX,
  21515   0 + UNICODE_MAX_TABLE_INDEX,
  21516   0 + UNICODE_MAX_TABLE_INDEX,
  21517   0 + UNICODE_MAX_TABLE_INDEX,
  21518   0 + UNICODE_MAX_TABLE_INDEX,
  21519   0 + UNICODE_MAX_TABLE_INDEX,
  21520   0 + UNICODE_MAX_TABLE_INDEX,
  21521   0 + UNICODE_MAX_TABLE_INDEX,
  21522   0 + UNICODE_MAX_TABLE_INDEX,
  21523   0 + UNICODE_MAX_TABLE_INDEX,
  21524   0 + UNICODE_MAX_TABLE_INDEX,
  21525   0 + UNICODE_MAX_TABLE_INDEX,
  21526   0 + UNICODE_MAX_TABLE_INDEX,
  21527   0 + UNICODE_MAX_TABLE_INDEX,
  21528   0 + UNICODE_MAX_TABLE_INDEX,
  21529   0 + UNICODE_MAX_TABLE_INDEX,
  21530   0 + UNICODE_MAX_TABLE_INDEX,
  21531   0 + UNICODE_MAX_TABLE_INDEX,
  21532   0 + UNICODE_MAX_TABLE_INDEX,
  21533   0 + UNICODE_MAX_TABLE_INDEX,
  21534   0 + UNICODE_MAX_TABLE_INDEX,
  21535   0 + UNICODE_MAX_TABLE_INDEX,
  21536   0 + UNICODE_MAX_TABLE_INDEX,
  21537   0 + UNICODE_MAX_TABLE_INDEX,
  21538   0 + UNICODE_MAX_TABLE_INDEX,
  21539   0 + UNICODE_MAX_TABLE_INDEX,
  21540   0 + UNICODE_MAX_TABLE_INDEX,
  21541   0 + UNICODE_MAX_TABLE_INDEX,
  21542   0 + UNICODE_MAX_TABLE_INDEX,
  21543   0 + UNICODE_MAX_TABLE_INDEX,
  21544   0 + UNICODE_MAX_TABLE_INDEX,
  21545   0 + UNICODE_MAX_TABLE_INDEX,
  21546   0 + UNICODE_MAX_TABLE_INDEX,
  21547   0 + UNICODE_MAX_TABLE_INDEX,
  21548   0 + UNICODE_MAX_TABLE_INDEX,
  21549   0 + UNICODE_MAX_TABLE_INDEX,
  21550   0 + UNICODE_MAX_TABLE_INDEX,
  21551   0 + UNICODE_MAX_TABLE_INDEX
  21552 };
  21553 
  21554 static const int16_t combining_class_table_part2[768] = {
  21555   0 + UNICODE_MAX_TABLE_INDEX,
  21556   0 + UNICODE_MAX_TABLE_INDEX,
  21557   0 + UNICODE_MAX_TABLE_INDEX,
  21558   0 + UNICODE_MAX_TABLE_INDEX,
  21559   0 + UNICODE_MAX_TABLE_INDEX,
  21560   0 + UNICODE_MAX_TABLE_INDEX,
  21561   0 + UNICODE_MAX_TABLE_INDEX,
  21562   0 + UNICODE_MAX_TABLE_INDEX,
  21563   0 + UNICODE_MAX_TABLE_INDEX,
  21564   0 + UNICODE_MAX_TABLE_INDEX,
  21565   0 + UNICODE_MAX_TABLE_INDEX,
  21566   0 + UNICODE_MAX_TABLE_INDEX,
  21567   0 + UNICODE_MAX_TABLE_INDEX,
  21568   0 + UNICODE_MAX_TABLE_INDEX,
  21569   0 + UNICODE_MAX_TABLE_INDEX,
  21570   0 + UNICODE_MAX_TABLE_INDEX,
  21571   0 + UNICODE_MAX_TABLE_INDEX,
  21572   0 + UNICODE_MAX_TABLE_INDEX,
  21573   0 + UNICODE_MAX_TABLE_INDEX,
  21574   0 + UNICODE_MAX_TABLE_INDEX,
  21575   0 + UNICODE_MAX_TABLE_INDEX,
  21576   0 + UNICODE_MAX_TABLE_INDEX,
  21577   0 + UNICODE_MAX_TABLE_INDEX,
  21578   0 + UNICODE_MAX_TABLE_INDEX,
  21579   0 + UNICODE_MAX_TABLE_INDEX,
  21580   0 + UNICODE_MAX_TABLE_INDEX,
  21581   0 + UNICODE_MAX_TABLE_INDEX,
  21582   0 + UNICODE_MAX_TABLE_INDEX,
  21583   0 + UNICODE_MAX_TABLE_INDEX,
  21584   0 + UNICODE_MAX_TABLE_INDEX,
  21585   0 + UNICODE_MAX_TABLE_INDEX,
  21586   0 + UNICODE_MAX_TABLE_INDEX,
  21587   0 + UNICODE_MAX_TABLE_INDEX,
  21588   0 + UNICODE_MAX_TABLE_INDEX,
  21589   0 + UNICODE_MAX_TABLE_INDEX,
  21590   0 + UNICODE_MAX_TABLE_INDEX,
  21591   0 + UNICODE_MAX_TABLE_INDEX,
  21592   0 + UNICODE_MAX_TABLE_INDEX,
  21593   0 + UNICODE_MAX_TABLE_INDEX,
  21594   0 + UNICODE_MAX_TABLE_INDEX,
  21595   0 + UNICODE_MAX_TABLE_INDEX,
  21596   0 + UNICODE_MAX_TABLE_INDEX,
  21597   0 + UNICODE_MAX_TABLE_INDEX,
  21598   0 + UNICODE_MAX_TABLE_INDEX,
  21599   0 + UNICODE_MAX_TABLE_INDEX,
  21600   0 + UNICODE_MAX_TABLE_INDEX,
  21601   0 + UNICODE_MAX_TABLE_INDEX,
  21602   0 + UNICODE_MAX_TABLE_INDEX,
  21603   0 + UNICODE_MAX_TABLE_INDEX,
  21604   0 + UNICODE_MAX_TABLE_INDEX,
  21605   0 + UNICODE_MAX_TABLE_INDEX,
  21606   0 + UNICODE_MAX_TABLE_INDEX,
  21607   0 + UNICODE_MAX_TABLE_INDEX,
  21608   0 + UNICODE_MAX_TABLE_INDEX,
  21609   0 + UNICODE_MAX_TABLE_INDEX,
  21610   0 + UNICODE_MAX_TABLE_INDEX,
  21611   0 + UNICODE_MAX_TABLE_INDEX,
  21612   0 + UNICODE_MAX_TABLE_INDEX,
  21613   0 + UNICODE_MAX_TABLE_INDEX,
  21614   0 + UNICODE_MAX_TABLE_INDEX,
  21615   0 + UNICODE_MAX_TABLE_INDEX,
  21616   0 + UNICODE_MAX_TABLE_INDEX,
  21617   0 + UNICODE_MAX_TABLE_INDEX,
  21618   0 + UNICODE_MAX_TABLE_INDEX,
  21619   0 + UNICODE_MAX_TABLE_INDEX,
  21620   0 + UNICODE_MAX_TABLE_INDEX,
  21621   0 + UNICODE_MAX_TABLE_INDEX,
  21622   0 + UNICODE_MAX_TABLE_INDEX,
  21623   0 + UNICODE_MAX_TABLE_INDEX,
  21624   0 + UNICODE_MAX_TABLE_INDEX,
  21625   0 + UNICODE_MAX_TABLE_INDEX,
  21626   0 + UNICODE_MAX_TABLE_INDEX,
  21627   0 + UNICODE_MAX_TABLE_INDEX,
  21628   0 + UNICODE_MAX_TABLE_INDEX,
  21629   0 + UNICODE_MAX_TABLE_INDEX,
  21630   0 + UNICODE_MAX_TABLE_INDEX,
  21631   0 + UNICODE_MAX_TABLE_INDEX,
  21632   0 + UNICODE_MAX_TABLE_INDEX,
  21633   0 + UNICODE_MAX_TABLE_INDEX,
  21634   0 + UNICODE_MAX_TABLE_INDEX,
  21635   0 + UNICODE_MAX_TABLE_INDEX,
  21636   0 + UNICODE_MAX_TABLE_INDEX,
  21637   0 + UNICODE_MAX_TABLE_INDEX,
  21638   0 + UNICODE_MAX_TABLE_INDEX,
  21639   0 + UNICODE_MAX_TABLE_INDEX,
  21640   0 + UNICODE_MAX_TABLE_INDEX,
  21641   0 + UNICODE_MAX_TABLE_INDEX,
  21642   0 + UNICODE_MAX_TABLE_INDEX,
  21643   0 + UNICODE_MAX_TABLE_INDEX,
  21644   0 + UNICODE_MAX_TABLE_INDEX,
  21645   0 + UNICODE_MAX_TABLE_INDEX,
  21646   0 + UNICODE_MAX_TABLE_INDEX,
  21647   0 + UNICODE_MAX_TABLE_INDEX,
  21648   0 + UNICODE_MAX_TABLE_INDEX,
  21649   0 + UNICODE_MAX_TABLE_INDEX,
  21650   0 + UNICODE_MAX_TABLE_INDEX,
  21651   0 + UNICODE_MAX_TABLE_INDEX,
  21652   0 + UNICODE_MAX_TABLE_INDEX,
  21653   0 + UNICODE_MAX_TABLE_INDEX,
  21654   0 + UNICODE_MAX_TABLE_INDEX,
  21655   0 + UNICODE_MAX_TABLE_INDEX,
  21656   0 + UNICODE_MAX_TABLE_INDEX,
  21657   0 + UNICODE_MAX_TABLE_INDEX,
  21658   0 + UNICODE_MAX_TABLE_INDEX,
  21659   0 + UNICODE_MAX_TABLE_INDEX,
  21660   0 + UNICODE_MAX_TABLE_INDEX,
  21661   0 + UNICODE_MAX_TABLE_INDEX,
  21662   0 + UNICODE_MAX_TABLE_INDEX,
  21663   0 + UNICODE_MAX_TABLE_INDEX,
  21664   0 + UNICODE_MAX_TABLE_INDEX,
  21665   0 + UNICODE_MAX_TABLE_INDEX,
  21666   0 + UNICODE_MAX_TABLE_INDEX,
  21667   0 + UNICODE_MAX_TABLE_INDEX,
  21668   0 + UNICODE_MAX_TABLE_INDEX,
  21669   0 + UNICODE_MAX_TABLE_INDEX,
  21670   0 + UNICODE_MAX_TABLE_INDEX,
  21671   0 + UNICODE_MAX_TABLE_INDEX,
  21672   0 + UNICODE_MAX_TABLE_INDEX,
  21673   0 + UNICODE_MAX_TABLE_INDEX,
  21674   0 + UNICODE_MAX_TABLE_INDEX,
  21675   0 + UNICODE_MAX_TABLE_INDEX,
  21676   0 + UNICODE_MAX_TABLE_INDEX,
  21677   0 + UNICODE_MAX_TABLE_INDEX,
  21678   0 + UNICODE_MAX_TABLE_INDEX,
  21679   0 + UNICODE_MAX_TABLE_INDEX,
  21680   0 + UNICODE_MAX_TABLE_INDEX,
  21681   0 + UNICODE_MAX_TABLE_INDEX,
  21682   0 + UNICODE_MAX_TABLE_INDEX,
  21683   0 + UNICODE_MAX_TABLE_INDEX,
  21684   0 + UNICODE_MAX_TABLE_INDEX,
  21685   0 + UNICODE_MAX_TABLE_INDEX,
  21686   0 + UNICODE_MAX_TABLE_INDEX,
  21687   0 + UNICODE_MAX_TABLE_INDEX,
  21688   0 + UNICODE_MAX_TABLE_INDEX,
  21689   0 + UNICODE_MAX_TABLE_INDEX,
  21690   0 + UNICODE_MAX_TABLE_INDEX,
  21691   0 + UNICODE_MAX_TABLE_INDEX,
  21692   0 + UNICODE_MAX_TABLE_INDEX,
  21693   0 + UNICODE_MAX_TABLE_INDEX,
  21694   0 + UNICODE_MAX_TABLE_INDEX,
  21695   0 + UNICODE_MAX_TABLE_INDEX,
  21696   0 + UNICODE_MAX_TABLE_INDEX,
  21697   0 + UNICODE_MAX_TABLE_INDEX,
  21698   0 + UNICODE_MAX_TABLE_INDEX,
  21699   0 + UNICODE_MAX_TABLE_INDEX,
  21700   0 + UNICODE_MAX_TABLE_INDEX,
  21701   0 + UNICODE_MAX_TABLE_INDEX,
  21702   0 + UNICODE_MAX_TABLE_INDEX,
  21703   0 + UNICODE_MAX_TABLE_INDEX,
  21704   0 + UNICODE_MAX_TABLE_INDEX,
  21705   0 + UNICODE_MAX_TABLE_INDEX,
  21706   0 + UNICODE_MAX_TABLE_INDEX,
  21707   0 + UNICODE_MAX_TABLE_INDEX,
  21708   0 + UNICODE_MAX_TABLE_INDEX,
  21709   0 + UNICODE_MAX_TABLE_INDEX,
  21710   0 + UNICODE_MAX_TABLE_INDEX,
  21711   0 + UNICODE_MAX_TABLE_INDEX,
  21712   0 + UNICODE_MAX_TABLE_INDEX,
  21713   0 + UNICODE_MAX_TABLE_INDEX,
  21714   0 + UNICODE_MAX_TABLE_INDEX,
  21715   0 + UNICODE_MAX_TABLE_INDEX,
  21716   0 + UNICODE_MAX_TABLE_INDEX,
  21717   0 + UNICODE_MAX_TABLE_INDEX,
  21718   0 + UNICODE_MAX_TABLE_INDEX,
  21719   0 + UNICODE_MAX_TABLE_INDEX,
  21720   0 + UNICODE_MAX_TABLE_INDEX,
  21721   0 + UNICODE_MAX_TABLE_INDEX,
  21722   0 + UNICODE_MAX_TABLE_INDEX,
  21723   0 + UNICODE_MAX_TABLE_INDEX,
  21724   0 + UNICODE_MAX_TABLE_INDEX,
  21725   0 + UNICODE_MAX_TABLE_INDEX,
  21726   0 + UNICODE_MAX_TABLE_INDEX,
  21727   0 + UNICODE_MAX_TABLE_INDEX,
  21728   0 + UNICODE_MAX_TABLE_INDEX,
  21729   0 + UNICODE_MAX_TABLE_INDEX,
  21730   0 + UNICODE_MAX_TABLE_INDEX,
  21731   0 + UNICODE_MAX_TABLE_INDEX,
  21732   0 + UNICODE_MAX_TABLE_INDEX,
  21733   0 + UNICODE_MAX_TABLE_INDEX,
  21734   0 + UNICODE_MAX_TABLE_INDEX,
  21735   0 + UNICODE_MAX_TABLE_INDEX,
  21736   0 + UNICODE_MAX_TABLE_INDEX,
  21737   0 + UNICODE_MAX_TABLE_INDEX,
  21738   0 + UNICODE_MAX_TABLE_INDEX,
  21739   0 + UNICODE_MAX_TABLE_INDEX,
  21740   0 + UNICODE_MAX_TABLE_INDEX,
  21741   0 + UNICODE_MAX_TABLE_INDEX,
  21742   0 + UNICODE_MAX_TABLE_INDEX,
  21743   0 + UNICODE_MAX_TABLE_INDEX,
  21744   0 + UNICODE_MAX_TABLE_INDEX,
  21745   0 + UNICODE_MAX_TABLE_INDEX,
  21746   0 + UNICODE_MAX_TABLE_INDEX,
  21747   0 + UNICODE_MAX_TABLE_INDEX,
  21748   0 + UNICODE_MAX_TABLE_INDEX,
  21749   0 + UNICODE_MAX_TABLE_INDEX,
  21750   0 + UNICODE_MAX_TABLE_INDEX,
  21751   0 + UNICODE_MAX_TABLE_INDEX,
  21752   0 + UNICODE_MAX_TABLE_INDEX,
  21753   0 + UNICODE_MAX_TABLE_INDEX,
  21754   0 + UNICODE_MAX_TABLE_INDEX,
  21755   0 + UNICODE_MAX_TABLE_INDEX,
  21756   0 + UNICODE_MAX_TABLE_INDEX,
  21757   0 + UNICODE_MAX_TABLE_INDEX,
  21758   0 + UNICODE_MAX_TABLE_INDEX,
  21759   0 + UNICODE_MAX_TABLE_INDEX,
  21760   0 + UNICODE_MAX_TABLE_INDEX,
  21761   0 + UNICODE_MAX_TABLE_INDEX,
  21762   0 + UNICODE_MAX_TABLE_INDEX,
  21763   0 + UNICODE_MAX_TABLE_INDEX,
  21764   0 + UNICODE_MAX_TABLE_INDEX,
  21765   0 + UNICODE_MAX_TABLE_INDEX,
  21766   0 + UNICODE_MAX_TABLE_INDEX,
  21767   0 + UNICODE_MAX_TABLE_INDEX,
  21768   0 + UNICODE_MAX_TABLE_INDEX,
  21769   0 + UNICODE_MAX_TABLE_INDEX,
  21770   0 + UNICODE_MAX_TABLE_INDEX,
  21771   0 + UNICODE_MAX_TABLE_INDEX,
  21772   0 + UNICODE_MAX_TABLE_INDEX,
  21773   0 + UNICODE_MAX_TABLE_INDEX,
  21774   0 + UNICODE_MAX_TABLE_INDEX,
  21775   0 + UNICODE_MAX_TABLE_INDEX,
  21776   0 + UNICODE_MAX_TABLE_INDEX,
  21777   0 + UNICODE_MAX_TABLE_INDEX,
  21778   0 + UNICODE_MAX_TABLE_INDEX,
  21779   0 + UNICODE_MAX_TABLE_INDEX,
  21780   0 + UNICODE_MAX_TABLE_INDEX,
  21781   0 + UNICODE_MAX_TABLE_INDEX,
  21782   0 + UNICODE_MAX_TABLE_INDEX,
  21783   0 + UNICODE_MAX_TABLE_INDEX,
  21784   0 + UNICODE_MAX_TABLE_INDEX,
  21785   0 + UNICODE_MAX_TABLE_INDEX,
  21786   0 + UNICODE_MAX_TABLE_INDEX,
  21787   0 + UNICODE_MAX_TABLE_INDEX,
  21788   0 + UNICODE_MAX_TABLE_INDEX,
  21789   0 + UNICODE_MAX_TABLE_INDEX,
  21790   0 + UNICODE_MAX_TABLE_INDEX,
  21791   0 + UNICODE_MAX_TABLE_INDEX,
  21792   0 + UNICODE_MAX_TABLE_INDEX,
  21793   0 + UNICODE_MAX_TABLE_INDEX,
  21794   0 + UNICODE_MAX_TABLE_INDEX,
  21795   0 + UNICODE_MAX_TABLE_INDEX,
  21796   0 + UNICODE_MAX_TABLE_INDEX,
  21797   0 + UNICODE_MAX_TABLE_INDEX,
  21798   0 + UNICODE_MAX_TABLE_INDEX,
  21799   0 + UNICODE_MAX_TABLE_INDEX,
  21800   0 + UNICODE_MAX_TABLE_INDEX,
  21801   0 + UNICODE_MAX_TABLE_INDEX,
  21802   0 + UNICODE_MAX_TABLE_INDEX,
  21803   0 + UNICODE_MAX_TABLE_INDEX,
  21804   0 + UNICODE_MAX_TABLE_INDEX,
  21805   0 + UNICODE_MAX_TABLE_INDEX,
  21806   0 + UNICODE_MAX_TABLE_INDEX,
  21807   0 + UNICODE_MAX_TABLE_INDEX,
  21808   0 + UNICODE_MAX_TABLE_INDEX,
  21809   0 + UNICODE_MAX_TABLE_INDEX,
  21810   0 + UNICODE_MAX_TABLE_INDEX,
  21811   0 + UNICODE_MAX_TABLE_INDEX,
  21812   0 + UNICODE_MAX_TABLE_INDEX,
  21813   0 + UNICODE_MAX_TABLE_INDEX,
  21814   0 + UNICODE_MAX_TABLE_INDEX,
  21815   0 + UNICODE_MAX_TABLE_INDEX,
  21816   0 + UNICODE_MAX_TABLE_INDEX,
  21817   0 + UNICODE_MAX_TABLE_INDEX,
  21818   0 + UNICODE_MAX_TABLE_INDEX,
  21819   0 + UNICODE_MAX_TABLE_INDEX,
  21820   0 + UNICODE_MAX_TABLE_INDEX,
  21821   0 + UNICODE_MAX_TABLE_INDEX,
  21822   0 + UNICODE_MAX_TABLE_INDEX,
  21823   0 + UNICODE_MAX_TABLE_INDEX,
  21824   0 + UNICODE_MAX_TABLE_INDEX,
  21825   0 + UNICODE_MAX_TABLE_INDEX,
  21826   0 + UNICODE_MAX_TABLE_INDEX,
  21827   0 + UNICODE_MAX_TABLE_INDEX,
  21828   0 + UNICODE_MAX_TABLE_INDEX,
  21829   0 + UNICODE_MAX_TABLE_INDEX,
  21830   0 + UNICODE_MAX_TABLE_INDEX,
  21831   0 + UNICODE_MAX_TABLE_INDEX,
  21832   0 + UNICODE_MAX_TABLE_INDEX,
  21833   0 + UNICODE_MAX_TABLE_INDEX,
  21834   0 + UNICODE_MAX_TABLE_INDEX,
  21835   0 + UNICODE_MAX_TABLE_INDEX,
  21836   0 + UNICODE_MAX_TABLE_INDEX,
  21837   0 + UNICODE_MAX_TABLE_INDEX,
  21838   0 + UNICODE_MAX_TABLE_INDEX,
  21839   0 + UNICODE_MAX_TABLE_INDEX,
  21840   0 + UNICODE_MAX_TABLE_INDEX,
  21841   0 + UNICODE_MAX_TABLE_INDEX,
  21842   0 + UNICODE_MAX_TABLE_INDEX,
  21843   0 + UNICODE_MAX_TABLE_INDEX,
  21844   0 + UNICODE_MAX_TABLE_INDEX,
  21845   0 + UNICODE_MAX_TABLE_INDEX,
  21846   0 + UNICODE_MAX_TABLE_INDEX,
  21847   0 + UNICODE_MAX_TABLE_INDEX,
  21848   0 + UNICODE_MAX_TABLE_INDEX,
  21849   0 + UNICODE_MAX_TABLE_INDEX,
  21850   0 + UNICODE_MAX_TABLE_INDEX,
  21851   0 + UNICODE_MAX_TABLE_INDEX,
  21852   0 + UNICODE_MAX_TABLE_INDEX,
  21853   0 + UNICODE_MAX_TABLE_INDEX,
  21854   0 + UNICODE_MAX_TABLE_INDEX,
  21855   0 + UNICODE_MAX_TABLE_INDEX,
  21856   0 + UNICODE_MAX_TABLE_INDEX,
  21857   0 + UNICODE_MAX_TABLE_INDEX,
  21858   0 + UNICODE_MAX_TABLE_INDEX,
  21859   0 + UNICODE_MAX_TABLE_INDEX,
  21860   0 + UNICODE_MAX_TABLE_INDEX,
  21861   0 + UNICODE_MAX_TABLE_INDEX,
  21862   0 + UNICODE_MAX_TABLE_INDEX,
  21863   0 + UNICODE_MAX_TABLE_INDEX,
  21864   0 + UNICODE_MAX_TABLE_INDEX,
  21865   0 + UNICODE_MAX_TABLE_INDEX,
  21866   0 + UNICODE_MAX_TABLE_INDEX,
  21867   0 + UNICODE_MAX_TABLE_INDEX,
  21868   0 + UNICODE_MAX_TABLE_INDEX,
  21869   0 + UNICODE_MAX_TABLE_INDEX,
  21870   0 + UNICODE_MAX_TABLE_INDEX,
  21871   0 + UNICODE_MAX_TABLE_INDEX,
  21872   0 + UNICODE_MAX_TABLE_INDEX,
  21873   0 + UNICODE_MAX_TABLE_INDEX,
  21874   0 + UNICODE_MAX_TABLE_INDEX,
  21875   0 + UNICODE_MAX_TABLE_INDEX,
  21876   0 + UNICODE_MAX_TABLE_INDEX,
  21877   0 + UNICODE_MAX_TABLE_INDEX,
  21878   0 + UNICODE_MAX_TABLE_INDEX,
  21879   0 + UNICODE_MAX_TABLE_INDEX,
  21880   0 + UNICODE_MAX_TABLE_INDEX,
  21881   0 + UNICODE_MAX_TABLE_INDEX,
  21882   0 + UNICODE_MAX_TABLE_INDEX,
  21883   0 + UNICODE_MAX_TABLE_INDEX,
  21884   0 + UNICODE_MAX_TABLE_INDEX,
  21885   0 + UNICODE_MAX_TABLE_INDEX,
  21886   0 + UNICODE_MAX_TABLE_INDEX,
  21887   0 + UNICODE_MAX_TABLE_INDEX,
  21888   0 + UNICODE_MAX_TABLE_INDEX,
  21889   0 + UNICODE_MAX_TABLE_INDEX,
  21890   0 + UNICODE_MAX_TABLE_INDEX,
  21891   0 + UNICODE_MAX_TABLE_INDEX,
  21892   0 + UNICODE_MAX_TABLE_INDEX,
  21893   0 + UNICODE_MAX_TABLE_INDEX,
  21894   0 + UNICODE_MAX_TABLE_INDEX,
  21895   0 + UNICODE_MAX_TABLE_INDEX,
  21896   0 + UNICODE_MAX_TABLE_INDEX,
  21897   0 + UNICODE_MAX_TABLE_INDEX,
  21898   0 + UNICODE_MAX_TABLE_INDEX,
  21899   0 + UNICODE_MAX_TABLE_INDEX,
  21900   0 + UNICODE_MAX_TABLE_INDEX,
  21901   0 + UNICODE_MAX_TABLE_INDEX,
  21902   0 + UNICODE_MAX_TABLE_INDEX,
  21903   0 + UNICODE_MAX_TABLE_INDEX,
  21904   0 + UNICODE_MAX_TABLE_INDEX,
  21905   0 + UNICODE_MAX_TABLE_INDEX,
  21906   0 + UNICODE_MAX_TABLE_INDEX,
  21907   0 + UNICODE_MAX_TABLE_INDEX,
  21908   0 + UNICODE_MAX_TABLE_INDEX,
  21909   0 + UNICODE_MAX_TABLE_INDEX,
  21910   0 + UNICODE_MAX_TABLE_INDEX,
  21911   0 + UNICODE_MAX_TABLE_INDEX,
  21912   0 + UNICODE_MAX_TABLE_INDEX,
  21913   0 + UNICODE_MAX_TABLE_INDEX,
  21914   0 + UNICODE_MAX_TABLE_INDEX,
  21915   0 + UNICODE_MAX_TABLE_INDEX,
  21916   0 + UNICODE_MAX_TABLE_INDEX,
  21917   0 + UNICODE_MAX_TABLE_INDEX,
  21918   0 + UNICODE_MAX_TABLE_INDEX,
  21919   0 + UNICODE_MAX_TABLE_INDEX,
  21920   0 + UNICODE_MAX_TABLE_INDEX,
  21921   0 + UNICODE_MAX_TABLE_INDEX,
  21922   0 + UNICODE_MAX_TABLE_INDEX,
  21923   0 + UNICODE_MAX_TABLE_INDEX,
  21924   0 + UNICODE_MAX_TABLE_INDEX,
  21925   0 + UNICODE_MAX_TABLE_INDEX,
  21926   0 + UNICODE_MAX_TABLE_INDEX,
  21927   0 + UNICODE_MAX_TABLE_INDEX,
  21928   0 + UNICODE_MAX_TABLE_INDEX,
  21929   0 + UNICODE_MAX_TABLE_INDEX,
  21930   0 + UNICODE_MAX_TABLE_INDEX,
  21931   0 + UNICODE_MAX_TABLE_INDEX,
  21932   0 + UNICODE_MAX_TABLE_INDEX,
  21933   0 + UNICODE_MAX_TABLE_INDEX,
  21934   0 + UNICODE_MAX_TABLE_INDEX,
  21935   0 + UNICODE_MAX_TABLE_INDEX,
  21936   0 + UNICODE_MAX_TABLE_INDEX,
  21937   0 + UNICODE_MAX_TABLE_INDEX,
  21938   0 + UNICODE_MAX_TABLE_INDEX,
  21939   0 + UNICODE_MAX_TABLE_INDEX,
  21940   0 + UNICODE_MAX_TABLE_INDEX,
  21941   0 + UNICODE_MAX_TABLE_INDEX,
  21942   0 + UNICODE_MAX_TABLE_INDEX,
  21943   0 + UNICODE_MAX_TABLE_INDEX,
  21944   0 + UNICODE_MAX_TABLE_INDEX,
  21945   0 + UNICODE_MAX_TABLE_INDEX,
  21946   0 + UNICODE_MAX_TABLE_INDEX,
  21947   0 + UNICODE_MAX_TABLE_INDEX,
  21948   0 + UNICODE_MAX_TABLE_INDEX,
  21949   0 + UNICODE_MAX_TABLE_INDEX,
  21950   0 + UNICODE_MAX_TABLE_INDEX,
  21951   0 + UNICODE_MAX_TABLE_INDEX,
  21952   0 + UNICODE_MAX_TABLE_INDEX,
  21953   0 + UNICODE_MAX_TABLE_INDEX,
  21954   0 + UNICODE_MAX_TABLE_INDEX,
  21955   0 + UNICODE_MAX_TABLE_INDEX,
  21956   0 + UNICODE_MAX_TABLE_INDEX,
  21957   0 + UNICODE_MAX_TABLE_INDEX,
  21958   0 + UNICODE_MAX_TABLE_INDEX,
  21959   0 + UNICODE_MAX_TABLE_INDEX,
  21960   0 + UNICODE_MAX_TABLE_INDEX,
  21961   0 + UNICODE_MAX_TABLE_INDEX,
  21962   0 + UNICODE_MAX_TABLE_INDEX,
  21963   0 + UNICODE_MAX_TABLE_INDEX,
  21964   0 + UNICODE_MAX_TABLE_INDEX,
  21965   0 + UNICODE_MAX_TABLE_INDEX,
  21966   0 + UNICODE_MAX_TABLE_INDEX,
  21967   0 + UNICODE_MAX_TABLE_INDEX,
  21968   0 + UNICODE_MAX_TABLE_INDEX,
  21969   0 + UNICODE_MAX_TABLE_INDEX,
  21970   0 + UNICODE_MAX_TABLE_INDEX,
  21971   0 + UNICODE_MAX_TABLE_INDEX,
  21972   0 + UNICODE_MAX_TABLE_INDEX,
  21973   0 + UNICODE_MAX_TABLE_INDEX,
  21974   0 + UNICODE_MAX_TABLE_INDEX,
  21975   0 + UNICODE_MAX_TABLE_INDEX,
  21976   0 + UNICODE_MAX_TABLE_INDEX,
  21977   0 + UNICODE_MAX_TABLE_INDEX,
  21978   0 + UNICODE_MAX_TABLE_INDEX,
  21979   0 + UNICODE_MAX_TABLE_INDEX,
  21980   0 + UNICODE_MAX_TABLE_INDEX,
  21981   0 + UNICODE_MAX_TABLE_INDEX,
  21982   0 + UNICODE_MAX_TABLE_INDEX,
  21983   0 + UNICODE_MAX_TABLE_INDEX,
  21984   0 + UNICODE_MAX_TABLE_INDEX,
  21985   0 + UNICODE_MAX_TABLE_INDEX,
  21986   0 + UNICODE_MAX_TABLE_INDEX,
  21987   0 + UNICODE_MAX_TABLE_INDEX,
  21988   0 + UNICODE_MAX_TABLE_INDEX,
  21989   0 + UNICODE_MAX_TABLE_INDEX,
  21990   0 + UNICODE_MAX_TABLE_INDEX,
  21991   0 + UNICODE_MAX_TABLE_INDEX,
  21992   0 + UNICODE_MAX_TABLE_INDEX,
  21993   0 + UNICODE_MAX_TABLE_INDEX,
  21994   0 + UNICODE_MAX_TABLE_INDEX,
  21995   0 + UNICODE_MAX_TABLE_INDEX,
  21996   0 + UNICODE_MAX_TABLE_INDEX,
  21997   0 + UNICODE_MAX_TABLE_INDEX,
  21998   0 + UNICODE_MAX_TABLE_INDEX,
  21999   0 + UNICODE_MAX_TABLE_INDEX,
  22000   0 + UNICODE_MAX_TABLE_INDEX,
  22001   0 + UNICODE_MAX_TABLE_INDEX,
  22002   0 + UNICODE_MAX_TABLE_INDEX,
  22003   0 + UNICODE_MAX_TABLE_INDEX,
  22004   0 + UNICODE_MAX_TABLE_INDEX,
  22005   0 + UNICODE_MAX_TABLE_INDEX,
  22006   0 + UNICODE_MAX_TABLE_INDEX,
  22007   0 + UNICODE_MAX_TABLE_INDEX,
  22008   0 + UNICODE_MAX_TABLE_INDEX,
  22009   0 + UNICODE_MAX_TABLE_INDEX,
  22010   0 + UNICODE_MAX_TABLE_INDEX,
  22011   0 + UNICODE_MAX_TABLE_INDEX,
  22012   0 + UNICODE_MAX_TABLE_INDEX,
  22013   0 + UNICODE_MAX_TABLE_INDEX,
  22014   0 + UNICODE_MAX_TABLE_INDEX,
  22015   0 + UNICODE_MAX_TABLE_INDEX,
  22016   0 + UNICODE_MAX_TABLE_INDEX,
  22017   0 + UNICODE_MAX_TABLE_INDEX,
  22018   0 + UNICODE_MAX_TABLE_INDEX,
  22019   0 + UNICODE_MAX_TABLE_INDEX,
  22020   0 + UNICODE_MAX_TABLE_INDEX,
  22021   0 + UNICODE_MAX_TABLE_INDEX,
  22022   0 + UNICODE_MAX_TABLE_INDEX,
  22023   0 + UNICODE_MAX_TABLE_INDEX,
  22024   0 + UNICODE_MAX_TABLE_INDEX,
  22025   0 + UNICODE_MAX_TABLE_INDEX,
  22026   0 + UNICODE_MAX_TABLE_INDEX,
  22027   0 + UNICODE_MAX_TABLE_INDEX,
  22028   0 + UNICODE_MAX_TABLE_INDEX,
  22029   0 + UNICODE_MAX_TABLE_INDEX,
  22030   0 + UNICODE_MAX_TABLE_INDEX,
  22031   0 + UNICODE_MAX_TABLE_INDEX,
  22032   0 + UNICODE_MAX_TABLE_INDEX,
  22033   0 + UNICODE_MAX_TABLE_INDEX,
  22034   0 + UNICODE_MAX_TABLE_INDEX,
  22035   0 + UNICODE_MAX_TABLE_INDEX,
  22036   0 + UNICODE_MAX_TABLE_INDEX,
  22037   0 + UNICODE_MAX_TABLE_INDEX,
  22038   0 + UNICODE_MAX_TABLE_INDEX,
  22039   0 + UNICODE_MAX_TABLE_INDEX,
  22040   0 + UNICODE_MAX_TABLE_INDEX,
  22041   0 + UNICODE_MAX_TABLE_INDEX,
  22042   0 + UNICODE_MAX_TABLE_INDEX,
  22043   0 + UNICODE_MAX_TABLE_INDEX,
  22044   0 + UNICODE_MAX_TABLE_INDEX,
  22045   0 + UNICODE_MAX_TABLE_INDEX,
  22046   0 + UNICODE_MAX_TABLE_INDEX,
  22047   0 + UNICODE_MAX_TABLE_INDEX,
  22048   0 + UNICODE_MAX_TABLE_INDEX,
  22049   0 + UNICODE_MAX_TABLE_INDEX,
  22050   0 + UNICODE_MAX_TABLE_INDEX,
  22051   0 + UNICODE_MAX_TABLE_INDEX,
  22052   0 + UNICODE_MAX_TABLE_INDEX,
  22053   0 + UNICODE_MAX_TABLE_INDEX,
  22054   0 + UNICODE_MAX_TABLE_INDEX,
  22055   0 + UNICODE_MAX_TABLE_INDEX,
  22056   0 + UNICODE_MAX_TABLE_INDEX,
  22057   0 + UNICODE_MAX_TABLE_INDEX,
  22058   0 + UNICODE_MAX_TABLE_INDEX,
  22059   0 + UNICODE_MAX_TABLE_INDEX,
  22060   0 + UNICODE_MAX_TABLE_INDEX,
  22061   0 + UNICODE_MAX_TABLE_INDEX,
  22062   0 + UNICODE_MAX_TABLE_INDEX,
  22063   0 + UNICODE_MAX_TABLE_INDEX,
  22064   0 + UNICODE_MAX_TABLE_INDEX,
  22065   0 + UNICODE_MAX_TABLE_INDEX,
  22066   0 + UNICODE_MAX_TABLE_INDEX,
  22067   0 + UNICODE_MAX_TABLE_INDEX,
  22068   0 + UNICODE_MAX_TABLE_INDEX,
  22069   0 + UNICODE_MAX_TABLE_INDEX,
  22070   0 + UNICODE_MAX_TABLE_INDEX,
  22071   0 + UNICODE_MAX_TABLE_INDEX,
  22072   0 + UNICODE_MAX_TABLE_INDEX,
  22073   0 + UNICODE_MAX_TABLE_INDEX,
  22074   0 + UNICODE_MAX_TABLE_INDEX,
  22075   0 + UNICODE_MAX_TABLE_INDEX,
  22076   0 + UNICODE_MAX_TABLE_INDEX,
  22077   0 + UNICODE_MAX_TABLE_INDEX,
  22078   0 + UNICODE_MAX_TABLE_INDEX,
  22079   0 + UNICODE_MAX_TABLE_INDEX,
  22080   0 + UNICODE_MAX_TABLE_INDEX,
  22081   0 + UNICODE_MAX_TABLE_INDEX,
  22082   0 + UNICODE_MAX_TABLE_INDEX,
  22083   0 + UNICODE_MAX_TABLE_INDEX,
  22084   0 + UNICODE_MAX_TABLE_INDEX,
  22085   0 + UNICODE_MAX_TABLE_INDEX,
  22086   0 + UNICODE_MAX_TABLE_INDEX,
  22087   0 + UNICODE_MAX_TABLE_INDEX,
  22088   0 + UNICODE_MAX_TABLE_INDEX,
  22089   0 + UNICODE_MAX_TABLE_INDEX,
  22090   0 + UNICODE_MAX_TABLE_INDEX,
  22091   0 + UNICODE_MAX_TABLE_INDEX,
  22092   0 + UNICODE_MAX_TABLE_INDEX,
  22093   0 + UNICODE_MAX_TABLE_INDEX,
  22094   0 + UNICODE_MAX_TABLE_INDEX,
  22095   0 + UNICODE_MAX_TABLE_INDEX,
  22096   0 + UNICODE_MAX_TABLE_INDEX,
  22097   0 + UNICODE_MAX_TABLE_INDEX,
  22098   0 + UNICODE_MAX_TABLE_INDEX,
  22099   0 + UNICODE_MAX_TABLE_INDEX,
  22100   0 + UNICODE_MAX_TABLE_INDEX,
  22101   0 + UNICODE_MAX_TABLE_INDEX,
  22102   0 + UNICODE_MAX_TABLE_INDEX,
  22103   0 + UNICODE_MAX_TABLE_INDEX,
  22104   0 + UNICODE_MAX_TABLE_INDEX,
  22105   0 + UNICODE_MAX_TABLE_INDEX,
  22106   0 + UNICODE_MAX_TABLE_INDEX,
  22107   0 + UNICODE_MAX_TABLE_INDEX,
  22108   0 + UNICODE_MAX_TABLE_INDEX,
  22109   0 + UNICODE_MAX_TABLE_INDEX,
  22110   0 + UNICODE_MAX_TABLE_INDEX,
  22111   0 + UNICODE_MAX_TABLE_INDEX,
  22112   0 + UNICODE_MAX_TABLE_INDEX,
  22113   0 + UNICODE_MAX_TABLE_INDEX,
  22114   0 + UNICODE_MAX_TABLE_INDEX,
  22115   0 + UNICODE_MAX_TABLE_INDEX,
  22116   0 + UNICODE_MAX_TABLE_INDEX,
  22117   0 + UNICODE_MAX_TABLE_INDEX,
  22118   0 + UNICODE_MAX_TABLE_INDEX,
  22119   0 + UNICODE_MAX_TABLE_INDEX,
  22120   0 + UNICODE_MAX_TABLE_INDEX,
  22121   0 + UNICODE_MAX_TABLE_INDEX,
  22122   0 + UNICODE_MAX_TABLE_INDEX,
  22123   0 + UNICODE_MAX_TABLE_INDEX,
  22124   0 + UNICODE_MAX_TABLE_INDEX,
  22125   0 + UNICODE_MAX_TABLE_INDEX,
  22126   0 + UNICODE_MAX_TABLE_INDEX,
  22127   0 + UNICODE_MAX_TABLE_INDEX,
  22128   0 + UNICODE_MAX_TABLE_INDEX,
  22129   0 + UNICODE_MAX_TABLE_INDEX,
  22130   0 + UNICODE_MAX_TABLE_INDEX,
  22131   0 + UNICODE_MAX_TABLE_INDEX,
  22132   0 + UNICODE_MAX_TABLE_INDEX,
  22133   0 + UNICODE_MAX_TABLE_INDEX,
  22134   0 + UNICODE_MAX_TABLE_INDEX,
  22135   0 + UNICODE_MAX_TABLE_INDEX,
  22136   0 + UNICODE_MAX_TABLE_INDEX,
  22137   0 + UNICODE_MAX_TABLE_INDEX,
  22138   0 + UNICODE_MAX_TABLE_INDEX,
  22139   0 + UNICODE_MAX_TABLE_INDEX,
  22140   0 + UNICODE_MAX_TABLE_INDEX,
  22141   0 + UNICODE_MAX_TABLE_INDEX,
  22142   0 + UNICODE_MAX_TABLE_INDEX,
  22143   0 + UNICODE_MAX_TABLE_INDEX,
  22144   0 + UNICODE_MAX_TABLE_INDEX,
  22145   0 + UNICODE_MAX_TABLE_INDEX,
  22146   0 + UNICODE_MAX_TABLE_INDEX,
  22147   0 + UNICODE_MAX_TABLE_INDEX,
  22148   0 + UNICODE_MAX_TABLE_INDEX,
  22149   0 + UNICODE_MAX_TABLE_INDEX,
  22150   0 + UNICODE_MAX_TABLE_INDEX,
  22151   0 + UNICODE_MAX_TABLE_INDEX,
  22152   0 + UNICODE_MAX_TABLE_INDEX,
  22153   0 + UNICODE_MAX_TABLE_INDEX,
  22154   0 + UNICODE_MAX_TABLE_INDEX,
  22155   0 + UNICODE_MAX_TABLE_INDEX,
  22156   0 + UNICODE_MAX_TABLE_INDEX,
  22157   0 + UNICODE_MAX_TABLE_INDEX,
  22158   0 + UNICODE_MAX_TABLE_INDEX,
  22159   0 + UNICODE_MAX_TABLE_INDEX,
  22160   0 + UNICODE_MAX_TABLE_INDEX,
  22161   0 + UNICODE_MAX_TABLE_INDEX,
  22162   0 + UNICODE_MAX_TABLE_INDEX,
  22163   0 + UNICODE_MAX_TABLE_INDEX,
  22164   0 + UNICODE_MAX_TABLE_INDEX,
  22165   0 + UNICODE_MAX_TABLE_INDEX,
  22166   0 + UNICODE_MAX_TABLE_INDEX,
  22167   0 + UNICODE_MAX_TABLE_INDEX,
  22168   0 + UNICODE_MAX_TABLE_INDEX,
  22169   0 + UNICODE_MAX_TABLE_INDEX,
  22170   0 + UNICODE_MAX_TABLE_INDEX,
  22171   0 + UNICODE_MAX_TABLE_INDEX,
  22172   0 + UNICODE_MAX_TABLE_INDEX,
  22173   0 + UNICODE_MAX_TABLE_INDEX,
  22174   0 + UNICODE_MAX_TABLE_INDEX,
  22175   0 + UNICODE_MAX_TABLE_INDEX,
  22176   0 + UNICODE_MAX_TABLE_INDEX,
  22177   0 + UNICODE_MAX_TABLE_INDEX,
  22178   0 + UNICODE_MAX_TABLE_INDEX,
  22179   0 + UNICODE_MAX_TABLE_INDEX,
  22180   0 + UNICODE_MAX_TABLE_INDEX,
  22181   0 + UNICODE_MAX_TABLE_INDEX,
  22182   0 + UNICODE_MAX_TABLE_INDEX,
  22183   0 + UNICODE_MAX_TABLE_INDEX,
  22184   0 + UNICODE_MAX_TABLE_INDEX,
  22185   0 + UNICODE_MAX_TABLE_INDEX,
  22186   0 + UNICODE_MAX_TABLE_INDEX,
  22187   0 + UNICODE_MAX_TABLE_INDEX,
  22188   0 + UNICODE_MAX_TABLE_INDEX,
  22189   0 + UNICODE_MAX_TABLE_INDEX,
  22190   0 + UNICODE_MAX_TABLE_INDEX,
  22191   0 + UNICODE_MAX_TABLE_INDEX,
  22192   0 + UNICODE_MAX_TABLE_INDEX,
  22193   0 + UNICODE_MAX_TABLE_INDEX,
  22194   0 + UNICODE_MAX_TABLE_INDEX,
  22195   0 + UNICODE_MAX_TABLE_INDEX,
  22196   0 + UNICODE_MAX_TABLE_INDEX,
  22197   0 + UNICODE_MAX_TABLE_INDEX,
  22198   0 + UNICODE_MAX_TABLE_INDEX,
  22199   0 + UNICODE_MAX_TABLE_INDEX,
  22200   0 + UNICODE_MAX_TABLE_INDEX,
  22201   0 + UNICODE_MAX_TABLE_INDEX,
  22202   0 + UNICODE_MAX_TABLE_INDEX,
  22203   0 + UNICODE_MAX_TABLE_INDEX,
  22204   0 + UNICODE_MAX_TABLE_INDEX,
  22205   0 + UNICODE_MAX_TABLE_INDEX,
  22206   0 + UNICODE_MAX_TABLE_INDEX,
  22207   0 + UNICODE_MAX_TABLE_INDEX,
  22208   0 + UNICODE_MAX_TABLE_INDEX,
  22209   0 + UNICODE_MAX_TABLE_INDEX,
  22210   0 + UNICODE_MAX_TABLE_INDEX,
  22211   0 + UNICODE_MAX_TABLE_INDEX,
  22212   0 + UNICODE_MAX_TABLE_INDEX,
  22213   0 + UNICODE_MAX_TABLE_INDEX,
  22214   0 + UNICODE_MAX_TABLE_INDEX,
  22215   0 + UNICODE_MAX_TABLE_INDEX,
  22216   0 + UNICODE_MAX_TABLE_INDEX,
  22217   0 + UNICODE_MAX_TABLE_INDEX,
  22218   0 + UNICODE_MAX_TABLE_INDEX,
  22219   0 + UNICODE_MAX_TABLE_INDEX,
  22220   0 + UNICODE_MAX_TABLE_INDEX,
  22221   0 + UNICODE_MAX_TABLE_INDEX,
  22222   0 + UNICODE_MAX_TABLE_INDEX,
  22223   0 + UNICODE_MAX_TABLE_INDEX,
  22224   0 + UNICODE_MAX_TABLE_INDEX,
  22225   0 + UNICODE_MAX_TABLE_INDEX,
  22226   0 + UNICODE_MAX_TABLE_INDEX,
  22227   0 + UNICODE_MAX_TABLE_INDEX,
  22228   0 + UNICODE_MAX_TABLE_INDEX,
  22229   0 + UNICODE_MAX_TABLE_INDEX,
  22230   0 + UNICODE_MAX_TABLE_INDEX,
  22231   0 + UNICODE_MAX_TABLE_INDEX,
  22232   0 + UNICODE_MAX_TABLE_INDEX,
  22233   0 + UNICODE_MAX_TABLE_INDEX,
  22234   0 + UNICODE_MAX_TABLE_INDEX,
  22235   0 + UNICODE_MAX_TABLE_INDEX,
  22236   0 + UNICODE_MAX_TABLE_INDEX,
  22237   0 + UNICODE_MAX_TABLE_INDEX,
  22238   0 + UNICODE_MAX_TABLE_INDEX,
  22239   0 + UNICODE_MAX_TABLE_INDEX,
  22240   0 + UNICODE_MAX_TABLE_INDEX,
  22241   0 + UNICODE_MAX_TABLE_INDEX,
  22242   0 + UNICODE_MAX_TABLE_INDEX,
  22243   0 + UNICODE_MAX_TABLE_INDEX,
  22244   0 + UNICODE_MAX_TABLE_INDEX,
  22245   0 + UNICODE_MAX_TABLE_INDEX,
  22246   0 + UNICODE_MAX_TABLE_INDEX,
  22247   0 + UNICODE_MAX_TABLE_INDEX,
  22248   0 + UNICODE_MAX_TABLE_INDEX,
  22249   0 + UNICODE_MAX_TABLE_INDEX,
  22250   0 + UNICODE_MAX_TABLE_INDEX,
  22251   0 + UNICODE_MAX_TABLE_INDEX,
  22252   0 + UNICODE_MAX_TABLE_INDEX,
  22253   0 + UNICODE_MAX_TABLE_INDEX,
  22254   0 + UNICODE_MAX_TABLE_INDEX,
  22255   0 + UNICODE_MAX_TABLE_INDEX,
  22256   0 + UNICODE_MAX_TABLE_INDEX,
  22257   0 + UNICODE_MAX_TABLE_INDEX,
  22258   0 + UNICODE_MAX_TABLE_INDEX,
  22259   0 + UNICODE_MAX_TABLE_INDEX,
  22260   0 + UNICODE_MAX_TABLE_INDEX,
  22261   0 + UNICODE_MAX_TABLE_INDEX,
  22262   0 + UNICODE_MAX_TABLE_INDEX,
  22263   0 + UNICODE_MAX_TABLE_INDEX,
  22264   0 + UNICODE_MAX_TABLE_INDEX,
  22265   0 + UNICODE_MAX_TABLE_INDEX,
  22266   0 + UNICODE_MAX_TABLE_INDEX,
  22267   0 + UNICODE_MAX_TABLE_INDEX,
  22268   0 + UNICODE_MAX_TABLE_INDEX,
  22269   0 + UNICODE_MAX_TABLE_INDEX,
  22270   0 + UNICODE_MAX_TABLE_INDEX,
  22271   0 + UNICODE_MAX_TABLE_INDEX,
  22272   0 + UNICODE_MAX_TABLE_INDEX,
  22273   0 + UNICODE_MAX_TABLE_INDEX,
  22274   0 + UNICODE_MAX_TABLE_INDEX,
  22275   0 + UNICODE_MAX_TABLE_INDEX,
  22276   0 + UNICODE_MAX_TABLE_INDEX,
  22277   0 + UNICODE_MAX_TABLE_INDEX,
  22278   0 + UNICODE_MAX_TABLE_INDEX,
  22279   0 + UNICODE_MAX_TABLE_INDEX,
  22280   0 + UNICODE_MAX_TABLE_INDEX,
  22281   0 + UNICODE_MAX_TABLE_INDEX,
  22282   0 + UNICODE_MAX_TABLE_INDEX,
  22283   0 + UNICODE_MAX_TABLE_INDEX,
  22284   0 + UNICODE_MAX_TABLE_INDEX,
  22285   0 + UNICODE_MAX_TABLE_INDEX,
  22286   0 + UNICODE_MAX_TABLE_INDEX,
  22287   0 + UNICODE_MAX_TABLE_INDEX,
  22288   0 + UNICODE_MAX_TABLE_INDEX,
  22289   0 + UNICODE_MAX_TABLE_INDEX,
  22290   0 + UNICODE_MAX_TABLE_INDEX,
  22291   0 + UNICODE_MAX_TABLE_INDEX,
  22292   0 + UNICODE_MAX_TABLE_INDEX,
  22293   0 + UNICODE_MAX_TABLE_INDEX,
  22294   0 + UNICODE_MAX_TABLE_INDEX,
  22295   0 + UNICODE_MAX_TABLE_INDEX,
  22296   0 + UNICODE_MAX_TABLE_INDEX,
  22297   0 + UNICODE_MAX_TABLE_INDEX,
  22298   0 + UNICODE_MAX_TABLE_INDEX,
  22299   0 + UNICODE_MAX_TABLE_INDEX,
  22300   0 + UNICODE_MAX_TABLE_INDEX,
  22301   0 + UNICODE_MAX_TABLE_INDEX,
  22302   0 + UNICODE_MAX_TABLE_INDEX,
  22303   0 + UNICODE_MAX_TABLE_INDEX,
  22304   0 + UNICODE_MAX_TABLE_INDEX,
  22305   0 + UNICODE_MAX_TABLE_INDEX,
  22306   0 + UNICODE_MAX_TABLE_INDEX,
  22307   0 + UNICODE_MAX_TABLE_INDEX,
  22308   0 + UNICODE_MAX_TABLE_INDEX,
  22309   0 + UNICODE_MAX_TABLE_INDEX,
  22310   0 + UNICODE_MAX_TABLE_INDEX,
  22311   0 + UNICODE_MAX_TABLE_INDEX,
  22312   0 + UNICODE_MAX_TABLE_INDEX,
  22313   0 + UNICODE_MAX_TABLE_INDEX,
  22314   0 + UNICODE_MAX_TABLE_INDEX,
  22315   0 + UNICODE_MAX_TABLE_INDEX,
  22316   0 + UNICODE_MAX_TABLE_INDEX,
  22317   0 + UNICODE_MAX_TABLE_INDEX,
  22318   0 + UNICODE_MAX_TABLE_INDEX,
  22319   0 + UNICODE_MAX_TABLE_INDEX,
  22320   0 + UNICODE_MAX_TABLE_INDEX,
  22321   0 + UNICODE_MAX_TABLE_INDEX,
  22322   0 + UNICODE_MAX_TABLE_INDEX
  22323 };
  22324 
  22325 #define ATTR_TABLE(Page) (((Page) <= UNICODE_LAST_PAGE_PART1) \
  22326                           ? attr_table_part1[Page] \
  22327                           : attr_table_part2[(Page) - 0xe00])
  22328 
  22329 #define ATTTABLE(Page, Char) \
  22330   ((ATTR_TABLE(Page) == UNICODE_MAX_TABLE_INDEX) ? 0 : (attr_data[ATTR_TABLE(Page)][Char]))
  22331 
  22332 #define TTYPE_PART1(Page, Char) \
  22333   ((type_table_part1[Page] >= UNICODE_MAX_TABLE_INDEX) \
  22334    ? (type_table_part1[Page] - UNICODE_MAX_TABLE_INDEX) \
  22335    : (type_data[type_table_part1[Page]][Char]))
  22336 
  22337 #define TTYPE_PART2(Page, Char) \
  22338   ((type_table_part2[Page] >= UNICODE_MAX_TABLE_INDEX) \
  22339    ? (type_table_part2[Page] - UNICODE_MAX_TABLE_INDEX) \
  22340    : (type_data[type_table_part2[Page]][Char]))
  22341 
  22342 #define RUNETYPE(rn) \
  22343   (((rn) <= UNICODE_LAST_CHAR_PART1) \
  22344    ? TTYPE_PART1 ((rn) >> 8, (rn) & 0xff) \
  22345    : (((rn) >= 0xe0000 && (rn) <= runeMax) \
  22346      ? TTYPE_PART2 (((rn) - 0xe0000) >> 8, (rn) & 0xff) \
  22347      : UNICODE_UNASSIGNED))
  22348 
  22349 #define IS(Type, Class) (((uint32_t)1 << (Type)) & (Class))
  22350 #define OR(Type, Rest) (((uint32_t)1 << (Type)) | (Rest))
  22351 
  22352 #define ISMARK(Type) IS((Type),\
  22353     OR(UNICODE_NON_SPACING_MARK,\
  22354     OR(UNICODE_SPACING_MARK,\
  22355     OR(UNICODE_ENCLOSING_MARK,	0))))
  22356 
  22357 #define ISALPHA(Type) IS((Type),\
  22358     OR(UNICODE_LOWERCASE_LETTER,\
  22359     OR(UNICODE_UPPERCASE_LETTER,\
  22360     OR(UNICODE_TITLECASE_LETTER,\
  22361     OR(UNICODE_MODIFIER_LETTER,\
  22362     OR(UNICODE_OTHER_LETTER,		0))))))
  22363 
  22364 #define RUNE_MAX_DECOMPOSITION_LENGTH 18 /* codepoints */
  22365 
  22366 #define CC_PART1(Page, Char) \
  22367   ((combining_class_table_part1[Page] >= UNICODE_MAX_TABLE_INDEX) \
  22368    ? (combining_class_table_part1[Page] - UNICODE_MAX_TABLE_INDEX) \
  22369    : (cclass_data[combining_class_table_part1[Page]][Char]))
  22370 
  22371 #define CC_PART2(Page, Char) \
  22372   ((combining_class_table_part2[Page] >= UNICODE_MAX_TABLE_INDEX) \
  22373    ? (combining_class_table_part2[Page] - UNICODE_MAX_TABLE_INDEX) \
  22374    : (cclass_data[combining_class_table_part2[Page]][Char]))
  22375 
  22376 #define COMBINING_CLASS(Char) \
  22377   (((Char) <= UNICODE_LAST_CHAR_PART1) \
  22378    ? CC_PART1 ((Char) >> 8, (Char) & 0xff) \
  22379    : (((Char) >= 0xe0000 && (Char) <= runeMax) \
  22380       ? CC_PART2 (((Char) - 0xe0000) >> 8, (Char) & 0xff) \
  22381       : 0))
  22382 
  22383 typedef struct { rune ch; uint16_t canon_offset; uint16_t compat_offset;} decomposition;
  22384 
  22385 static const decomposition decomp_table[] =
  22386 {
  22387   { 0x00a0, UNICODE_NOT_PRESENT_OFFSET, 0 },
  22388   { 0x00a8, UNICODE_NOT_PRESENT_OFFSET, 2 },
  22389   { 0x00aa, UNICODE_NOT_PRESENT_OFFSET, 6 },
  22390   { 0x00af, UNICODE_NOT_PRESENT_OFFSET, 8 },
  22391   { 0x00b2, UNICODE_NOT_PRESENT_OFFSET, 12 },
  22392   { 0x00b3, UNICODE_NOT_PRESENT_OFFSET, 14 },
  22393   { 0x00b4, UNICODE_NOT_PRESENT_OFFSET, 16 },
  22394   { 0x00b5, UNICODE_NOT_PRESENT_OFFSET, 20 },
  22395   { 0x00b8, UNICODE_NOT_PRESENT_OFFSET, 23 },
  22396   { 0x00b9, UNICODE_NOT_PRESENT_OFFSET, 27 },
  22397   { 0x00ba, UNICODE_NOT_PRESENT_OFFSET, 29 },
  22398   { 0x00bc, UNICODE_NOT_PRESENT_OFFSET, 31 },
  22399   { 0x00bd, UNICODE_NOT_PRESENT_OFFSET, 37 },
  22400   { 0x00be, UNICODE_NOT_PRESENT_OFFSET, 43 },
  22401   { 0x00c0, 49, UNICODE_NOT_PRESENT_OFFSET },
  22402   { 0x00c1, 53, UNICODE_NOT_PRESENT_OFFSET },
  22403   { 0x00c2, 57, UNICODE_NOT_PRESENT_OFFSET },
  22404   { 0x00c3, 61, UNICODE_NOT_PRESENT_OFFSET },
  22405   { 0x00c4, 65, UNICODE_NOT_PRESENT_OFFSET },
  22406   { 0x00c5, 69, UNICODE_NOT_PRESENT_OFFSET },
  22407   { 0x00c7, 73, UNICODE_NOT_PRESENT_OFFSET },
  22408   { 0x00c8, 77, UNICODE_NOT_PRESENT_OFFSET },
  22409   { 0x00c9, 81, UNICODE_NOT_PRESENT_OFFSET },
  22410   { 0x00ca, 85, UNICODE_NOT_PRESENT_OFFSET },
  22411   { 0x00cb, 89, UNICODE_NOT_PRESENT_OFFSET },
  22412   { 0x00cc, 93, UNICODE_NOT_PRESENT_OFFSET },
  22413   { 0x00cd, 97, UNICODE_NOT_PRESENT_OFFSET },
  22414   { 0x00ce, 101, UNICODE_NOT_PRESENT_OFFSET },
  22415   { 0x00cf, 105, UNICODE_NOT_PRESENT_OFFSET },
  22416   { 0x00d1, 109, UNICODE_NOT_PRESENT_OFFSET },
  22417   { 0x00d2, 113, UNICODE_NOT_PRESENT_OFFSET },
  22418   { 0x00d3, 117, UNICODE_NOT_PRESENT_OFFSET },
  22419   { 0x00d4, 121, UNICODE_NOT_PRESENT_OFFSET },
  22420   { 0x00d5, 125, UNICODE_NOT_PRESENT_OFFSET },
  22421   { 0x00d6, 129, UNICODE_NOT_PRESENT_OFFSET },
  22422   { 0x00d9, 133, UNICODE_NOT_PRESENT_OFFSET },
  22423   { 0x00da, 137, UNICODE_NOT_PRESENT_OFFSET },
  22424   { 0x00db, 141, UNICODE_NOT_PRESENT_OFFSET },
  22425   { 0x00dc, 145, UNICODE_NOT_PRESENT_OFFSET },
  22426   { 0x00dd, 149, UNICODE_NOT_PRESENT_OFFSET },
  22427   { 0x00e0, 153, UNICODE_NOT_PRESENT_OFFSET },
  22428   { 0x00e1, 157, UNICODE_NOT_PRESENT_OFFSET },
  22429   { 0x00e2, 161, UNICODE_NOT_PRESENT_OFFSET },
  22430   { 0x00e3, 165, UNICODE_NOT_PRESENT_OFFSET },
  22431   { 0x00e4, 169, UNICODE_NOT_PRESENT_OFFSET },
  22432   { 0x00e5, 173, UNICODE_NOT_PRESENT_OFFSET },
  22433   { 0x00e7, 177, UNICODE_NOT_PRESENT_OFFSET },
  22434   { 0x00e8, 181, UNICODE_NOT_PRESENT_OFFSET },
  22435   { 0x00e9, 185, UNICODE_NOT_PRESENT_OFFSET },
  22436   { 0x00ea, 189, UNICODE_NOT_PRESENT_OFFSET },
  22437   { 0x00eb, 193, UNICODE_NOT_PRESENT_OFFSET },
  22438   { 0x00ec, 197, UNICODE_NOT_PRESENT_OFFSET },
  22439   { 0x00ed, 201, UNICODE_NOT_PRESENT_OFFSET },
  22440   { 0x00ee, 205, UNICODE_NOT_PRESENT_OFFSET },
  22441   { 0x00ef, 209, UNICODE_NOT_PRESENT_OFFSET },
  22442   { 0x00f1, 213, UNICODE_NOT_PRESENT_OFFSET },
  22443   { 0x00f2, 217, UNICODE_NOT_PRESENT_OFFSET },
  22444   { 0x00f3, 221, UNICODE_NOT_PRESENT_OFFSET },
  22445   { 0x00f4, 225, UNICODE_NOT_PRESENT_OFFSET },
  22446   { 0x00f5, 229, UNICODE_NOT_PRESENT_OFFSET },
  22447   { 0x00f6, 233, UNICODE_NOT_PRESENT_OFFSET },
  22448   { 0x00f9, 237, UNICODE_NOT_PRESENT_OFFSET },
  22449   { 0x00fa, 241, UNICODE_NOT_PRESENT_OFFSET },
  22450   { 0x00fb, 245, UNICODE_NOT_PRESENT_OFFSET },
  22451   { 0x00fc, 249, UNICODE_NOT_PRESENT_OFFSET },
  22452   { 0x00fd, 253, UNICODE_NOT_PRESENT_OFFSET },
  22453   { 0x00ff, 257, UNICODE_NOT_PRESENT_OFFSET },
  22454   { 0x0100, 261, UNICODE_NOT_PRESENT_OFFSET },
  22455   { 0x0101, 265, UNICODE_NOT_PRESENT_OFFSET },
  22456   { 0x0102, 269, UNICODE_NOT_PRESENT_OFFSET },
  22457   { 0x0103, 273, UNICODE_NOT_PRESENT_OFFSET },
  22458   { 0x0104, 277, UNICODE_NOT_PRESENT_OFFSET },
  22459   { 0x0105, 281, UNICODE_NOT_PRESENT_OFFSET },
  22460   { 0x0106, 285, UNICODE_NOT_PRESENT_OFFSET },
  22461   { 0x0107, 289, UNICODE_NOT_PRESENT_OFFSET },
  22462   { 0x0108, 293, UNICODE_NOT_PRESENT_OFFSET },
  22463   { 0x0109, 297, UNICODE_NOT_PRESENT_OFFSET },
  22464   { 0x010a, 301, UNICODE_NOT_PRESENT_OFFSET },
  22465   { 0x010b, 305, UNICODE_NOT_PRESENT_OFFSET },
  22466   { 0x010c, 309, UNICODE_NOT_PRESENT_OFFSET },
  22467   { 0x010d, 313, UNICODE_NOT_PRESENT_OFFSET },
  22468   { 0x010e, 317, UNICODE_NOT_PRESENT_OFFSET },
  22469   { 0x010f, 321, UNICODE_NOT_PRESENT_OFFSET },
  22470   { 0x0112, 325, UNICODE_NOT_PRESENT_OFFSET },
  22471   { 0x0113, 329, UNICODE_NOT_PRESENT_OFFSET },
  22472   { 0x0114, 333, UNICODE_NOT_PRESENT_OFFSET },
  22473   { 0x0115, 337, UNICODE_NOT_PRESENT_OFFSET },
  22474   { 0x0116, 341, UNICODE_NOT_PRESENT_OFFSET },
  22475   { 0x0117, 345, UNICODE_NOT_PRESENT_OFFSET },
  22476   { 0x0118, 349, UNICODE_NOT_PRESENT_OFFSET },
  22477   { 0x0119, 353, UNICODE_NOT_PRESENT_OFFSET },
  22478   { 0x011a, 357, UNICODE_NOT_PRESENT_OFFSET },
  22479   { 0x011b, 361, UNICODE_NOT_PRESENT_OFFSET },
  22480   { 0x011c, 365, UNICODE_NOT_PRESENT_OFFSET },
  22481   { 0x011d, 369, UNICODE_NOT_PRESENT_OFFSET },
  22482   { 0x011e, 373, UNICODE_NOT_PRESENT_OFFSET },
  22483   { 0x011f, 377, UNICODE_NOT_PRESENT_OFFSET },
  22484   { 0x0120, 381, UNICODE_NOT_PRESENT_OFFSET },
  22485   { 0x0121, 385, UNICODE_NOT_PRESENT_OFFSET },
  22486   { 0x0122, 389, UNICODE_NOT_PRESENT_OFFSET },
  22487   { 0x0123, 393, UNICODE_NOT_PRESENT_OFFSET },
  22488   { 0x0124, 397, UNICODE_NOT_PRESENT_OFFSET },
  22489   { 0x0125, 401, UNICODE_NOT_PRESENT_OFFSET },
  22490   { 0x0128, 405, UNICODE_NOT_PRESENT_OFFSET },
  22491   { 0x0129, 409, UNICODE_NOT_PRESENT_OFFSET },
  22492   { 0x012a, 413, UNICODE_NOT_PRESENT_OFFSET },
  22493   { 0x012b, 417, UNICODE_NOT_PRESENT_OFFSET },
  22494   { 0x012c, 421, UNICODE_NOT_PRESENT_OFFSET },
  22495   { 0x012d, 425, UNICODE_NOT_PRESENT_OFFSET },
  22496   { 0x012e, 429, UNICODE_NOT_PRESENT_OFFSET },
  22497   { 0x012f, 433, UNICODE_NOT_PRESENT_OFFSET },
  22498   { 0x0130, 437, UNICODE_NOT_PRESENT_OFFSET },
  22499   { 0x0132, UNICODE_NOT_PRESENT_OFFSET, 441 },
  22500   { 0x0133, UNICODE_NOT_PRESENT_OFFSET, 444 },
  22501   { 0x0134, 447, UNICODE_NOT_PRESENT_OFFSET },
  22502   { 0x0135, 451, UNICODE_NOT_PRESENT_OFFSET },
  22503   { 0x0136, 455, UNICODE_NOT_PRESENT_OFFSET },
  22504   { 0x0137, 459, UNICODE_NOT_PRESENT_OFFSET },
  22505   { 0x0139, 463, UNICODE_NOT_PRESENT_OFFSET },
  22506   { 0x013a, 467, UNICODE_NOT_PRESENT_OFFSET },
  22507   { 0x013b, 471, UNICODE_NOT_PRESENT_OFFSET },
  22508   { 0x013c, 475, UNICODE_NOT_PRESENT_OFFSET },
  22509   { 0x013d, 479, UNICODE_NOT_PRESENT_OFFSET },
  22510   { 0x013e, 483, UNICODE_NOT_PRESENT_OFFSET },
  22511   { 0x013f, UNICODE_NOT_PRESENT_OFFSET, 487 },
  22512   { 0x0140, UNICODE_NOT_PRESENT_OFFSET, 491 },
  22513   { 0x0143, 495, UNICODE_NOT_PRESENT_OFFSET },
  22514   { 0x0144, 499, UNICODE_NOT_PRESENT_OFFSET },
  22515   { 0x0145, 503, UNICODE_NOT_PRESENT_OFFSET },
  22516   { 0x0146, 507, UNICODE_NOT_PRESENT_OFFSET },
  22517   { 0x0147, 511, UNICODE_NOT_PRESENT_OFFSET },
  22518   { 0x0148, 515, UNICODE_NOT_PRESENT_OFFSET },
  22519   { 0x0149, UNICODE_NOT_PRESENT_OFFSET, 519 },
  22520   { 0x014c, 523, UNICODE_NOT_PRESENT_OFFSET },
  22521   { 0x014d, 527, UNICODE_NOT_PRESENT_OFFSET },
  22522   { 0x014e, 531, UNICODE_NOT_PRESENT_OFFSET },
  22523   { 0x014f, 535, UNICODE_NOT_PRESENT_OFFSET },
  22524   { 0x0150, 539, UNICODE_NOT_PRESENT_OFFSET },
  22525   { 0x0151, 543, UNICODE_NOT_PRESENT_OFFSET },
  22526   { 0x0154, 547, UNICODE_NOT_PRESENT_OFFSET },
  22527   { 0x0155, 551, UNICODE_NOT_PRESENT_OFFSET },
  22528   { 0x0156, 555, UNICODE_NOT_PRESENT_OFFSET },
  22529   { 0x0157, 559, UNICODE_NOT_PRESENT_OFFSET },
  22530   { 0x0158, 563, UNICODE_NOT_PRESENT_OFFSET },
  22531   { 0x0159, 567, UNICODE_NOT_PRESENT_OFFSET },
  22532   { 0x015a, 571, UNICODE_NOT_PRESENT_OFFSET },
  22533   { 0x015b, 575, UNICODE_NOT_PRESENT_OFFSET },
  22534   { 0x015c, 579, UNICODE_NOT_PRESENT_OFFSET },
  22535   { 0x015d, 583, UNICODE_NOT_PRESENT_OFFSET },
  22536   { 0x015e, 587, UNICODE_NOT_PRESENT_OFFSET },
  22537   { 0x015f, 591, UNICODE_NOT_PRESENT_OFFSET },
  22538   { 0x0160, 595, UNICODE_NOT_PRESENT_OFFSET },
  22539   { 0x0161, 599, UNICODE_NOT_PRESENT_OFFSET },
  22540   { 0x0162, 603, UNICODE_NOT_PRESENT_OFFSET },
  22541   { 0x0163, 607, UNICODE_NOT_PRESENT_OFFSET },
  22542   { 0x0164, 611, UNICODE_NOT_PRESENT_OFFSET },
  22543   { 0x0165, 615, UNICODE_NOT_PRESENT_OFFSET },
  22544   { 0x0168, 619, UNICODE_NOT_PRESENT_OFFSET },
  22545   { 0x0169, 623, UNICODE_NOT_PRESENT_OFFSET },
  22546   { 0x016a, 627, UNICODE_NOT_PRESENT_OFFSET },
  22547   { 0x016b, 631, UNICODE_NOT_PRESENT_OFFSET },
  22548   { 0x016c, 635, UNICODE_NOT_PRESENT_OFFSET },
  22549   { 0x016d, 639, UNICODE_NOT_PRESENT_OFFSET },
  22550   { 0x016e, 643, UNICODE_NOT_PRESENT_OFFSET },
  22551   { 0x016f, 647, UNICODE_NOT_PRESENT_OFFSET },
  22552   { 0x0170, 651, UNICODE_NOT_PRESENT_OFFSET },
  22553   { 0x0171, 655, UNICODE_NOT_PRESENT_OFFSET },
  22554   { 0x0172, 659, UNICODE_NOT_PRESENT_OFFSET },
  22555   { 0x0173, 663, UNICODE_NOT_PRESENT_OFFSET },
  22556   { 0x0174, 667, UNICODE_NOT_PRESENT_OFFSET },
  22557   { 0x0175, 671, UNICODE_NOT_PRESENT_OFFSET },
  22558   { 0x0176, 675, UNICODE_NOT_PRESENT_OFFSET },
  22559   { 0x0177, 679, UNICODE_NOT_PRESENT_OFFSET },
  22560   { 0x0178, 683, UNICODE_NOT_PRESENT_OFFSET },
  22561   { 0x0179, 687, UNICODE_NOT_PRESENT_OFFSET },
  22562   { 0x017a, 691, UNICODE_NOT_PRESENT_OFFSET },
  22563   { 0x017b, 695, UNICODE_NOT_PRESENT_OFFSET },
  22564   { 0x017c, 699, UNICODE_NOT_PRESENT_OFFSET },
  22565   { 0x017d, 703, UNICODE_NOT_PRESENT_OFFSET },
  22566   { 0x017e, 707, UNICODE_NOT_PRESENT_OFFSET },
  22567   { 0x017f, UNICODE_NOT_PRESENT_OFFSET, 711 },
  22568   { 0x01a0, 713, UNICODE_NOT_PRESENT_OFFSET },
  22569   { 0x01a1, 717, UNICODE_NOT_PRESENT_OFFSET },
  22570   { 0x01af, 721, UNICODE_NOT_PRESENT_OFFSET },
  22571   { 0x01b0, 725, UNICODE_NOT_PRESENT_OFFSET },
  22572   { 0x01c4, UNICODE_NOT_PRESENT_OFFSET, 729 },
  22573   { 0x01c5, UNICODE_NOT_PRESENT_OFFSET, 734 },
  22574   { 0x01c6, UNICODE_NOT_PRESENT_OFFSET, 739 },
  22575   { 0x01c7, UNICODE_NOT_PRESENT_OFFSET, 744 },
  22576   { 0x01c8, UNICODE_NOT_PRESENT_OFFSET, 747 },
  22577   { 0x01c9, UNICODE_NOT_PRESENT_OFFSET, 750 },
  22578   { 0x01ca, UNICODE_NOT_PRESENT_OFFSET, 753 },
  22579   { 0x01cb, UNICODE_NOT_PRESENT_OFFSET, 756 },
  22580   { 0x01cc, UNICODE_NOT_PRESENT_OFFSET, 759 },
  22581   { 0x01cd, 762, UNICODE_NOT_PRESENT_OFFSET },
  22582   { 0x01ce, 766, UNICODE_NOT_PRESENT_OFFSET },
  22583   { 0x01cf, 770, UNICODE_NOT_PRESENT_OFFSET },
  22584   { 0x01d0, 774, UNICODE_NOT_PRESENT_OFFSET },
  22585   { 0x01d1, 778, UNICODE_NOT_PRESENT_OFFSET },
  22586   { 0x01d2, 782, UNICODE_NOT_PRESENT_OFFSET },
  22587   { 0x01d3, 786, UNICODE_NOT_PRESENT_OFFSET },
  22588   { 0x01d4, 790, UNICODE_NOT_PRESENT_OFFSET },
  22589   { 0x01d5, 794, UNICODE_NOT_PRESENT_OFFSET },
  22590   { 0x01d6, 800, UNICODE_NOT_PRESENT_OFFSET },
  22591   { 0x01d7, 806, UNICODE_NOT_PRESENT_OFFSET },
  22592   { 0x01d8, 812, UNICODE_NOT_PRESENT_OFFSET },
  22593   { 0x01d9, 818, UNICODE_NOT_PRESENT_OFFSET },
  22594   { 0x01da, 824, UNICODE_NOT_PRESENT_OFFSET },
  22595   { 0x01db, 830, UNICODE_NOT_PRESENT_OFFSET },
  22596   { 0x01dc, 836, UNICODE_NOT_PRESENT_OFFSET },
  22597   { 0x01de, 842, UNICODE_NOT_PRESENT_OFFSET },
  22598   { 0x01df, 848, UNICODE_NOT_PRESENT_OFFSET },
  22599   { 0x01e0, 854, UNICODE_NOT_PRESENT_OFFSET },
  22600   { 0x01e1, 860, UNICODE_NOT_PRESENT_OFFSET },
  22601   { 0x01e2, 866, UNICODE_NOT_PRESENT_OFFSET },
  22602   { 0x01e3, 871, UNICODE_NOT_PRESENT_OFFSET },
  22603   { 0x01e6, 876, UNICODE_NOT_PRESENT_OFFSET },
  22604   { 0x01e7, 880, UNICODE_NOT_PRESENT_OFFSET },
  22605   { 0x01e8, 884, UNICODE_NOT_PRESENT_OFFSET },
  22606   { 0x01e9, 888, UNICODE_NOT_PRESENT_OFFSET },
  22607   { 0x01ea, 892, UNICODE_NOT_PRESENT_OFFSET },
  22608   { 0x01eb, 896, UNICODE_NOT_PRESENT_OFFSET },
  22609   { 0x01ec, 900, UNICODE_NOT_PRESENT_OFFSET },
  22610   { 0x01ed, 906, UNICODE_NOT_PRESENT_OFFSET },
  22611   { 0x01ee, 912, UNICODE_NOT_PRESENT_OFFSET },
  22612   { 0x01ef, 917, UNICODE_NOT_PRESENT_OFFSET },
  22613   { 0x01f0, 922, UNICODE_NOT_PRESENT_OFFSET },
  22614   { 0x01f1, UNICODE_NOT_PRESENT_OFFSET, 926 },
  22615   { 0x01f2, UNICODE_NOT_PRESENT_OFFSET, 929 },
  22616   { 0x01f3, UNICODE_NOT_PRESENT_OFFSET, 932 },
  22617   { 0x01f4, 935, UNICODE_NOT_PRESENT_OFFSET },
  22618   { 0x01f5, 939, UNICODE_NOT_PRESENT_OFFSET },
  22619   { 0x01f8, 943, UNICODE_NOT_PRESENT_OFFSET },
  22620   { 0x01f9, 947, UNICODE_NOT_PRESENT_OFFSET },
  22621   { 0x01fa, 951, UNICODE_NOT_PRESENT_OFFSET },
  22622   { 0x01fb, 957, UNICODE_NOT_PRESENT_OFFSET },
  22623   { 0x01fc, 963, UNICODE_NOT_PRESENT_OFFSET },
  22624   { 0x01fd, 968, UNICODE_NOT_PRESENT_OFFSET },
  22625   { 0x01fe, 973, UNICODE_NOT_PRESENT_OFFSET },
  22626   { 0x01ff, 978, UNICODE_NOT_PRESENT_OFFSET },
  22627   { 0x0200, 983, UNICODE_NOT_PRESENT_OFFSET },
  22628   { 0x0201, 987, UNICODE_NOT_PRESENT_OFFSET },
  22629   { 0x0202, 991, UNICODE_NOT_PRESENT_OFFSET },
  22630   { 0x0203, 995, UNICODE_NOT_PRESENT_OFFSET },
  22631   { 0x0204, 999, UNICODE_NOT_PRESENT_OFFSET },
  22632   { 0x0205, 1003, UNICODE_NOT_PRESENT_OFFSET },
  22633   { 0x0206, 1007, UNICODE_NOT_PRESENT_OFFSET },
  22634   { 0x0207, 1011, UNICODE_NOT_PRESENT_OFFSET },
  22635   { 0x0208, 1015, UNICODE_NOT_PRESENT_OFFSET },
  22636   { 0x0209, 1019, UNICODE_NOT_PRESENT_OFFSET },
  22637   { 0x020a, 1023, UNICODE_NOT_PRESENT_OFFSET },
  22638   { 0x020b, 1027, UNICODE_NOT_PRESENT_OFFSET },
  22639   { 0x020c, 1031, UNICODE_NOT_PRESENT_OFFSET },
  22640   { 0x020d, 1035, UNICODE_NOT_PRESENT_OFFSET },
  22641   { 0x020e, 1039, UNICODE_NOT_PRESENT_OFFSET },
  22642   { 0x020f, 1043, UNICODE_NOT_PRESENT_OFFSET },
  22643   { 0x0210, 1047, UNICODE_NOT_PRESENT_OFFSET },
  22644   { 0x0211, 1051, UNICODE_NOT_PRESENT_OFFSET },
  22645   { 0x0212, 1055, UNICODE_NOT_PRESENT_OFFSET },
  22646   { 0x0213, 1059, UNICODE_NOT_PRESENT_OFFSET },
  22647   { 0x0214, 1063, UNICODE_NOT_PRESENT_OFFSET },
  22648   { 0x0215, 1067, UNICODE_NOT_PRESENT_OFFSET },
  22649   { 0x0216, 1071, UNICODE_NOT_PRESENT_OFFSET },
  22650   { 0x0217, 1075, UNICODE_NOT_PRESENT_OFFSET },
  22651   { 0x0218, 1079, UNICODE_NOT_PRESENT_OFFSET },
  22652   { 0x0219, 1083, UNICODE_NOT_PRESENT_OFFSET },
  22653   { 0x021a, 1087, UNICODE_NOT_PRESENT_OFFSET },
  22654   { 0x021b, 1091, UNICODE_NOT_PRESENT_OFFSET },
  22655   { 0x021e, 1095, UNICODE_NOT_PRESENT_OFFSET },
  22656   { 0x021f, 1099, UNICODE_NOT_PRESENT_OFFSET },
  22657   { 0x0226, 1103, UNICODE_NOT_PRESENT_OFFSET },
  22658   { 0x0227, 1107, UNICODE_NOT_PRESENT_OFFSET },
  22659   { 0x0228, 1111, UNICODE_NOT_PRESENT_OFFSET },
  22660   { 0x0229, 1115, UNICODE_NOT_PRESENT_OFFSET },
  22661   { 0x022a, 1119, UNICODE_NOT_PRESENT_OFFSET },
  22662   { 0x022b, 1125, UNICODE_NOT_PRESENT_OFFSET },
  22663   { 0x022c, 1131, UNICODE_NOT_PRESENT_OFFSET },
  22664   { 0x022d, 1137, UNICODE_NOT_PRESENT_OFFSET },
  22665   { 0x022e, 1143, UNICODE_NOT_PRESENT_OFFSET },
  22666   { 0x022f, 1147, UNICODE_NOT_PRESENT_OFFSET },
  22667   { 0x0230, 1151, UNICODE_NOT_PRESENT_OFFSET },
  22668   { 0x0231, 1157, UNICODE_NOT_PRESENT_OFFSET },
  22669   { 0x0232, 1163, UNICODE_NOT_PRESENT_OFFSET },
  22670   { 0x0233, 1167, UNICODE_NOT_PRESENT_OFFSET },
  22671   { 0x02b0, UNICODE_NOT_PRESENT_OFFSET, 1171 },
  22672   { 0x02b1, UNICODE_NOT_PRESENT_OFFSET, 1173 },
  22673   { 0x02b2, UNICODE_NOT_PRESENT_OFFSET, 1176 },
  22674   { 0x02b3, UNICODE_NOT_PRESENT_OFFSET, 1178 },
  22675   { 0x02b4, UNICODE_NOT_PRESENT_OFFSET, 1180 },
  22676   { 0x02b5, UNICODE_NOT_PRESENT_OFFSET, 1183 },
  22677   { 0x02b6, UNICODE_NOT_PRESENT_OFFSET, 1186 },
  22678   { 0x02b7, UNICODE_NOT_PRESENT_OFFSET, 1189 },
  22679   { 0x02b8, UNICODE_NOT_PRESENT_OFFSET, 1191 },
  22680   { 0x02d8, UNICODE_NOT_PRESENT_OFFSET, 1193 },
  22681   { 0x02d9, UNICODE_NOT_PRESENT_OFFSET, 1197 },
  22682   { 0x02da, UNICODE_NOT_PRESENT_OFFSET, 1201 },
  22683   { 0x02db, UNICODE_NOT_PRESENT_OFFSET, 1205 },
  22684   { 0x02dc, UNICODE_NOT_PRESENT_OFFSET, 1209 },
  22685   { 0x02dd, UNICODE_NOT_PRESENT_OFFSET, 1213 },
  22686   { 0x02e0, UNICODE_NOT_PRESENT_OFFSET, 1217 },
  22687   { 0x02e1, UNICODE_NOT_PRESENT_OFFSET, 1220 },
  22688   { 0x02e2, UNICODE_NOT_PRESENT_OFFSET, 711 },
  22689   { 0x02e3, UNICODE_NOT_PRESENT_OFFSET, 1222 },
  22690   { 0x02e4, UNICODE_NOT_PRESENT_OFFSET, 1224 },
  22691   { 0x0340, 1227, UNICODE_NOT_PRESENT_OFFSET },
  22692   { 0x0341, 1230, UNICODE_NOT_PRESENT_OFFSET },
  22693   { 0x0343, 1233, UNICODE_NOT_PRESENT_OFFSET },
  22694   { 0x0344, 1236, UNICODE_NOT_PRESENT_OFFSET },
  22695   { 0x0374, 1241, UNICODE_NOT_PRESENT_OFFSET },
  22696   { 0x037a, UNICODE_NOT_PRESENT_OFFSET, 1244 },
  22697   { 0x037e, 1248, UNICODE_NOT_PRESENT_OFFSET },
  22698   { 0x0384, UNICODE_NOT_PRESENT_OFFSET, 16 },
  22699   { 0x0385, 1250, 1255 },
  22700   { 0x0386, 1261, UNICODE_NOT_PRESENT_OFFSET },
  22701   { 0x0387, 1266, UNICODE_NOT_PRESENT_OFFSET },
  22702   { 0x0388, 1269, UNICODE_NOT_PRESENT_OFFSET },
  22703   { 0x0389, 1274, UNICODE_NOT_PRESENT_OFFSET },
  22704   { 0x038a, 1279, UNICODE_NOT_PRESENT_OFFSET },
  22705   { 0x038c, 1284, UNICODE_NOT_PRESENT_OFFSET },
  22706   { 0x038e, 1289, UNICODE_NOT_PRESENT_OFFSET },
  22707   { 0x038f, 1294, UNICODE_NOT_PRESENT_OFFSET },
  22708   { 0x0390, 1299, UNICODE_NOT_PRESENT_OFFSET },
  22709   { 0x03aa, 1306, UNICODE_NOT_PRESENT_OFFSET },
  22710   { 0x03ab, 1311, UNICODE_NOT_PRESENT_OFFSET },
  22711   { 0x03ac, 1316, UNICODE_NOT_PRESENT_OFFSET },
  22712   { 0x03ad, 1321, UNICODE_NOT_PRESENT_OFFSET },
  22713   { 0x03ae, 1326, UNICODE_NOT_PRESENT_OFFSET },
  22714   { 0x03af, 1331, UNICODE_NOT_PRESENT_OFFSET },
  22715   { 0x03b0, 1336, UNICODE_NOT_PRESENT_OFFSET },
  22716   { 0x03ca, 1343, UNICODE_NOT_PRESENT_OFFSET },
  22717   { 0x03cb, 1348, UNICODE_NOT_PRESENT_OFFSET },
  22718   { 0x03cc, 1353, UNICODE_NOT_PRESENT_OFFSET },
  22719   { 0x03cd, 1358, UNICODE_NOT_PRESENT_OFFSET },
  22720   { 0x03ce, 1363, UNICODE_NOT_PRESENT_OFFSET },
  22721   { 0x03d0, UNICODE_NOT_PRESENT_OFFSET, 1368 },
  22722   { 0x03d1, UNICODE_NOT_PRESENT_OFFSET, 1371 },
  22723   { 0x03d2, UNICODE_NOT_PRESENT_OFFSET, 1374 },
  22724   { 0x03d3, 1377, 1289 },
  22725   { 0x03d4, 1382, 1311 },
  22726   { 0x03d5, UNICODE_NOT_PRESENT_OFFSET, 1387 },
  22727   { 0x03d6, UNICODE_NOT_PRESENT_OFFSET, 1390 },
  22728   { 0x03f0, UNICODE_NOT_PRESENT_OFFSET, 1393 },
  22729   { 0x03f1, UNICODE_NOT_PRESENT_OFFSET, 1396 },
  22730   { 0x03f2, UNICODE_NOT_PRESENT_OFFSET, 1399 },
  22731   { 0x03f4, UNICODE_NOT_PRESENT_OFFSET, 1402 },
  22732   { 0x03f5, UNICODE_NOT_PRESENT_OFFSET, 1405 },
  22733   { 0x03f9, UNICODE_NOT_PRESENT_OFFSET, 1408 },
  22734   { 0x0400, 1411, UNICODE_NOT_PRESENT_OFFSET },
  22735   { 0x0401, 1416, UNICODE_NOT_PRESENT_OFFSET },
  22736   { 0x0403, 1421, UNICODE_NOT_PRESENT_OFFSET },
  22737   { 0x0407, 1426, UNICODE_NOT_PRESENT_OFFSET },
  22738   { 0x040c, 1431, UNICODE_NOT_PRESENT_OFFSET },
  22739   { 0x040d, 1436, UNICODE_NOT_PRESENT_OFFSET },
  22740   { 0x040e, 1441, UNICODE_NOT_PRESENT_OFFSET },
  22741   { 0x0419, 1446, UNICODE_NOT_PRESENT_OFFSET },
  22742   { 0x0439, 1451, UNICODE_NOT_PRESENT_OFFSET },
  22743   { 0x0450, 1456, UNICODE_NOT_PRESENT_OFFSET },
  22744   { 0x0451, 1461, UNICODE_NOT_PRESENT_OFFSET },
  22745   { 0x0453, 1466, UNICODE_NOT_PRESENT_OFFSET },
  22746   { 0x0457, 1471, UNICODE_NOT_PRESENT_OFFSET },
  22747   { 0x045c, 1476, UNICODE_NOT_PRESENT_OFFSET },
  22748   { 0x045d, 1481, UNICODE_NOT_PRESENT_OFFSET },
  22749   { 0x045e, 1486, UNICODE_NOT_PRESENT_OFFSET },
  22750   { 0x0476, 1491, UNICODE_NOT_PRESENT_OFFSET },
  22751   { 0x0477, 1496, UNICODE_NOT_PRESENT_OFFSET },
  22752   { 0x04c1, 1501, UNICODE_NOT_PRESENT_OFFSET },
  22753   { 0x04c2, 1506, UNICODE_NOT_PRESENT_OFFSET },
  22754   { 0x04d0, 1511, UNICODE_NOT_PRESENT_OFFSET },
  22755   { 0x04d1, 1516, UNICODE_NOT_PRESENT_OFFSET },
  22756   { 0x04d2, 1521, UNICODE_NOT_PRESENT_OFFSET },
  22757   { 0x04d3, 1526, UNICODE_NOT_PRESENT_OFFSET },
  22758   { 0x04d6, 1531, UNICODE_NOT_PRESENT_OFFSET },
  22759   { 0x04d7, 1536, UNICODE_NOT_PRESENT_OFFSET },
  22760   { 0x04da, 1541, UNICODE_NOT_PRESENT_OFFSET },
  22761   { 0x04db, 1546, UNICODE_NOT_PRESENT_OFFSET },
  22762   { 0x04dc, 1551, UNICODE_NOT_PRESENT_OFFSET },
  22763   { 0x04dd, 1556, UNICODE_NOT_PRESENT_OFFSET },
  22764   { 0x04de, 1561, UNICODE_NOT_PRESENT_OFFSET },
  22765   { 0x04df, 1566, UNICODE_NOT_PRESENT_OFFSET },
  22766   { 0x04e2, 1571, UNICODE_NOT_PRESENT_OFFSET },
  22767   { 0x04e3, 1576, UNICODE_NOT_PRESENT_OFFSET },
  22768   { 0x04e4, 1581, UNICODE_NOT_PRESENT_OFFSET },
  22769   { 0x04e5, 1586, UNICODE_NOT_PRESENT_OFFSET },
  22770   { 0x04e6, 1591, UNICODE_NOT_PRESENT_OFFSET },
  22771   { 0x04e7, 1596, UNICODE_NOT_PRESENT_OFFSET },
  22772   { 0x04ea, 1601, UNICODE_NOT_PRESENT_OFFSET },
  22773   { 0x04eb, 1606, UNICODE_NOT_PRESENT_OFFSET },
  22774   { 0x04ec, 1611, UNICODE_NOT_PRESENT_OFFSET },
  22775   { 0x04ed, 1616, UNICODE_NOT_PRESENT_OFFSET },
  22776   { 0x04ee, 1621, UNICODE_NOT_PRESENT_OFFSET },
  22777   { 0x04ef, 1626, UNICODE_NOT_PRESENT_OFFSET },
  22778   { 0x04f0, 1631, UNICODE_NOT_PRESENT_OFFSET },
  22779   { 0x04f1, 1636, UNICODE_NOT_PRESENT_OFFSET },
  22780   { 0x04f2, 1641, UNICODE_NOT_PRESENT_OFFSET },
  22781   { 0x04f3, 1646, UNICODE_NOT_PRESENT_OFFSET },
  22782   { 0x04f4, 1651, UNICODE_NOT_PRESENT_OFFSET },
  22783   { 0x04f5, 1656, UNICODE_NOT_PRESENT_OFFSET },
  22784   { 0x04f8, 1661, UNICODE_NOT_PRESENT_OFFSET },
  22785   { 0x04f9, 1666, UNICODE_NOT_PRESENT_OFFSET },
  22786   { 0x0587, UNICODE_NOT_PRESENT_OFFSET, 1671 },
  22787   { 0x0622, 1676, UNICODE_NOT_PRESENT_OFFSET },
  22788   { 0x0623, 1681, UNICODE_NOT_PRESENT_OFFSET },
  22789   { 0x0624, 1686, UNICODE_NOT_PRESENT_OFFSET },
  22790   { 0x0625, 1691, UNICODE_NOT_PRESENT_OFFSET },
  22791   { 0x0626, 1696, UNICODE_NOT_PRESENT_OFFSET },
  22792   { 0x0675, UNICODE_NOT_PRESENT_OFFSET, 1701 },
  22793   { 0x0676, UNICODE_NOT_PRESENT_OFFSET, 1706 },
  22794   { 0x0677, UNICODE_NOT_PRESENT_OFFSET, 1711 },
  22795   { 0x0678, UNICODE_NOT_PRESENT_OFFSET, 1716 },
  22796   { 0x06c0, 1721, UNICODE_NOT_PRESENT_OFFSET },
  22797   { 0x06c2, 1726, UNICODE_NOT_PRESENT_OFFSET },
  22798   { 0x06d3, 1731, UNICODE_NOT_PRESENT_OFFSET },
  22799   { 0x0929, 1736, UNICODE_NOT_PRESENT_OFFSET },
  22800   { 0x0931, 1743, UNICODE_NOT_PRESENT_OFFSET },
  22801   { 0x0934, 1750, UNICODE_NOT_PRESENT_OFFSET },
  22802   { 0x0958, 1757, UNICODE_NOT_PRESENT_OFFSET },
  22803   { 0x0959, 1764, UNICODE_NOT_PRESENT_OFFSET },
  22804   { 0x095a, 1771, UNICODE_NOT_PRESENT_OFFSET },
  22805   { 0x095b, 1778, UNICODE_NOT_PRESENT_OFFSET },
  22806   { 0x095c, 1785, UNICODE_NOT_PRESENT_OFFSET },
  22807   { 0x095d, 1792, UNICODE_NOT_PRESENT_OFFSET },
  22808   { 0x095e, 1799, UNICODE_NOT_PRESENT_OFFSET },
  22809   { 0x095f, 1806, UNICODE_NOT_PRESENT_OFFSET },
  22810   { 0x09cb, 1813, UNICODE_NOT_PRESENT_OFFSET },
  22811   { 0x09cc, 1820, UNICODE_NOT_PRESENT_OFFSET },
  22812   { 0x09dc, 1827, UNICODE_NOT_PRESENT_OFFSET },
  22813   { 0x09dd, 1834, UNICODE_NOT_PRESENT_OFFSET },
  22814   { 0x09df, 1841, UNICODE_NOT_PRESENT_OFFSET },
  22815   { 0x0a33, 1848, UNICODE_NOT_PRESENT_OFFSET },
  22816   { 0x0a36, 1855, UNICODE_NOT_PRESENT_OFFSET },
  22817   { 0x0a59, 1862, UNICODE_NOT_PRESENT_OFFSET },
  22818   { 0x0a5a, 1869, UNICODE_NOT_PRESENT_OFFSET },
  22819   { 0x0a5b, 1876, UNICODE_NOT_PRESENT_OFFSET },
  22820   { 0x0a5e, 1883, UNICODE_NOT_PRESENT_OFFSET },
  22821   { 0x0b48, 1890, UNICODE_NOT_PRESENT_OFFSET },
  22822   { 0x0b4b, 1897, UNICODE_NOT_PRESENT_OFFSET },
  22823   { 0x0b4c, 1904, UNICODE_NOT_PRESENT_OFFSET },
  22824   { 0x0b5c, 1911, UNICODE_NOT_PRESENT_OFFSET },
  22825   { 0x0b5d, 1918, UNICODE_NOT_PRESENT_OFFSET },
  22826   { 0x0b94, 1925, UNICODE_NOT_PRESENT_OFFSET },
  22827   { 0x0bca, 1932, UNICODE_NOT_PRESENT_OFFSET },
  22828   { 0x0bcb, 1939, UNICODE_NOT_PRESENT_OFFSET },
  22829   { 0x0bcc, 1946, UNICODE_NOT_PRESENT_OFFSET },
  22830   { 0x0c48, 1953, UNICODE_NOT_PRESENT_OFFSET },
  22831   { 0x0cc0, 1960, UNICODE_NOT_PRESENT_OFFSET },
  22832   { 0x0cc7, 1967, UNICODE_NOT_PRESENT_OFFSET },
  22833   { 0x0cc8, 1974, UNICODE_NOT_PRESENT_OFFSET },
  22834   { 0x0cca, 1981, UNICODE_NOT_PRESENT_OFFSET },
  22835   { 0x0ccb, 1988, UNICODE_NOT_PRESENT_OFFSET },
  22836   { 0x0d4a, 1998, UNICODE_NOT_PRESENT_OFFSET },
  22837   { 0x0d4b, 2005, UNICODE_NOT_PRESENT_OFFSET },
  22838   { 0x0d4c, 2012, UNICODE_NOT_PRESENT_OFFSET },
  22839   { 0x0dda, 2019, UNICODE_NOT_PRESENT_OFFSET },
  22840   { 0x0ddc, 2026, UNICODE_NOT_PRESENT_OFFSET },
  22841   { 0x0ddd, 2033, UNICODE_NOT_PRESENT_OFFSET },
  22842   { 0x0dde, 2043, UNICODE_NOT_PRESENT_OFFSET },
  22843   { 0x0e33, UNICODE_NOT_PRESENT_OFFSET, 2050 },
  22844   { 0x0eb3, UNICODE_NOT_PRESENT_OFFSET, 2057 },
  22845   { 0x0edc, UNICODE_NOT_PRESENT_OFFSET, 2064 },
  22846   { 0x0edd, UNICODE_NOT_PRESENT_OFFSET, 2071 },
  22847   { 0x0f0c, UNICODE_NOT_PRESENT_OFFSET, 2078 },
  22848   { 0x0f43, 2082, UNICODE_NOT_PRESENT_OFFSET },
  22849   { 0x0f4d, 2089, UNICODE_NOT_PRESENT_OFFSET },
  22850   { 0x0f52, 2096, UNICODE_NOT_PRESENT_OFFSET },
  22851   { 0x0f57, 2103, UNICODE_NOT_PRESENT_OFFSET },
  22852   { 0x0f5c, 2110, UNICODE_NOT_PRESENT_OFFSET },
  22853   { 0x0f69, 2117, UNICODE_NOT_PRESENT_OFFSET },
  22854   { 0x0f73, 2124, UNICODE_NOT_PRESENT_OFFSET },
  22855   { 0x0f75, 2131, UNICODE_NOT_PRESENT_OFFSET },
  22856   { 0x0f76, 2138, UNICODE_NOT_PRESENT_OFFSET },
  22857   { 0x0f77, UNICODE_NOT_PRESENT_OFFSET, 2145 },
  22858   { 0x0f78, 2155, UNICODE_NOT_PRESENT_OFFSET },
  22859   { 0x0f79, UNICODE_NOT_PRESENT_OFFSET, 2162 },
  22860   { 0x0f81, 2172, UNICODE_NOT_PRESENT_OFFSET },
  22861   { 0x0f93, 2179, UNICODE_NOT_PRESENT_OFFSET },
  22862   { 0x0f9d, 2186, UNICODE_NOT_PRESENT_OFFSET },
  22863   { 0x0fa2, 2193, UNICODE_NOT_PRESENT_OFFSET },
  22864   { 0x0fa7, 2200, UNICODE_NOT_PRESENT_OFFSET },
  22865   { 0x0fac, 2207, UNICODE_NOT_PRESENT_OFFSET },
  22866   { 0x0fb9, 2214, UNICODE_NOT_PRESENT_OFFSET },
  22867   { 0x1026, 2221, UNICODE_NOT_PRESENT_OFFSET },
  22868   { 0x10fc, UNICODE_NOT_PRESENT_OFFSET, 2228 },
  22869   { 0x1b06, 2232, UNICODE_NOT_PRESENT_OFFSET },
  22870   { 0x1b08, 2239, UNICODE_NOT_PRESENT_OFFSET },
  22871   { 0x1b0a, 2246, UNICODE_NOT_PRESENT_OFFSET },
  22872   { 0x1b0c, 2253, UNICODE_NOT_PRESENT_OFFSET },
  22873   { 0x1b0e, 2260, UNICODE_NOT_PRESENT_OFFSET },
  22874   { 0x1b12, 2267, UNICODE_NOT_PRESENT_OFFSET },
  22875   { 0x1b3b, 2274, UNICODE_NOT_PRESENT_OFFSET },
  22876   { 0x1b3d, 2281, UNICODE_NOT_PRESENT_OFFSET },
  22877   { 0x1b40, 2288, UNICODE_NOT_PRESENT_OFFSET },
  22878   { 0x1b41, 2295, UNICODE_NOT_PRESENT_OFFSET },
  22879   { 0x1b43, 2302, UNICODE_NOT_PRESENT_OFFSET },
  22880   { 0x1d2c, UNICODE_NOT_PRESENT_OFFSET, 2309 },
  22881   { 0x1d2d, UNICODE_NOT_PRESENT_OFFSET, 2311 },
  22882   { 0x1d2e, UNICODE_NOT_PRESENT_OFFSET, 2314 },
  22883   { 0x1d30, UNICODE_NOT_PRESENT_OFFSET, 2316 },
  22884   { 0x1d31, UNICODE_NOT_PRESENT_OFFSET, 2318 },
  22885   { 0x1d32, UNICODE_NOT_PRESENT_OFFSET, 2320 },
  22886   { 0x1d33, UNICODE_NOT_PRESENT_OFFSET, 2323 },
  22887   { 0x1d34, UNICODE_NOT_PRESENT_OFFSET, 2325 },
  22888   { 0x1d35, UNICODE_NOT_PRESENT_OFFSET, 2327 },
  22889   { 0x1d36, UNICODE_NOT_PRESENT_OFFSET, 2329 },
  22890   { 0x1d37, UNICODE_NOT_PRESENT_OFFSET, 2331 },
  22891   { 0x1d38, UNICODE_NOT_PRESENT_OFFSET, 2333 },
  22892   { 0x1d39, UNICODE_NOT_PRESENT_OFFSET, 2335 },
  22893   { 0x1d3a, UNICODE_NOT_PRESENT_OFFSET, 2337 },
  22894   { 0x1d3c, UNICODE_NOT_PRESENT_OFFSET, 2339 },
  22895   { 0x1d3d, UNICODE_NOT_PRESENT_OFFSET, 2341 },
  22896   { 0x1d3e, UNICODE_NOT_PRESENT_OFFSET, 2344 },
  22897   { 0x1d3f, UNICODE_NOT_PRESENT_OFFSET, 2346 },
  22898   { 0x1d40, UNICODE_NOT_PRESENT_OFFSET, 2348 },
  22899   { 0x1d41, UNICODE_NOT_PRESENT_OFFSET, 2350 },
  22900   { 0x1d42, UNICODE_NOT_PRESENT_OFFSET, 2352 },
  22901   { 0x1d43, UNICODE_NOT_PRESENT_OFFSET, 6 },
  22902   { 0x1d44, UNICODE_NOT_PRESENT_OFFSET, 2354 },
  22903   { 0x1d45, UNICODE_NOT_PRESENT_OFFSET, 2357 },
  22904   { 0x1d46, UNICODE_NOT_PRESENT_OFFSET, 2360 },
  22905   { 0x1d47, UNICODE_NOT_PRESENT_OFFSET, 2364 },
  22906   { 0x1d48, UNICODE_NOT_PRESENT_OFFSET, 2366 },
  22907   { 0x1d49, UNICODE_NOT_PRESENT_OFFSET, 2368 },
  22908   { 0x1d4a, UNICODE_NOT_PRESENT_OFFSET, 2370 },
  22909   { 0x1d4b, UNICODE_NOT_PRESENT_OFFSET, 2373 },
  22910   { 0x1d4c, UNICODE_NOT_PRESENT_OFFSET, 2376 },
  22911   { 0x1d4d, UNICODE_NOT_PRESENT_OFFSET, 2379 },
  22912   { 0x1d4f, UNICODE_NOT_PRESENT_OFFSET, 2381 },
  22913   { 0x1d50, UNICODE_NOT_PRESENT_OFFSET, 2383 },
  22914   { 0x1d51, UNICODE_NOT_PRESENT_OFFSET, 2385 },
  22915   { 0x1d52, UNICODE_NOT_PRESENT_OFFSET, 29 },
  22916   { 0x1d53, UNICODE_NOT_PRESENT_OFFSET, 2388 },
  22917   { 0x1d54, UNICODE_NOT_PRESENT_OFFSET, 2391 },
  22918   { 0x1d55, UNICODE_NOT_PRESENT_OFFSET, 2395 },
  22919   { 0x1d56, UNICODE_NOT_PRESENT_OFFSET, 2399 },
  22920   { 0x1d57, UNICODE_NOT_PRESENT_OFFSET, 2401 },
  22921   { 0x1d58, UNICODE_NOT_PRESENT_OFFSET, 2403 },
  22922   { 0x1d59, UNICODE_NOT_PRESENT_OFFSET, 2405 },
  22923   { 0x1d5a, UNICODE_NOT_PRESENT_OFFSET, 2409 },
  22924   { 0x1d5b, UNICODE_NOT_PRESENT_OFFSET, 2412 },
  22925   { 0x1d5c, UNICODE_NOT_PRESENT_OFFSET, 2414 },
  22926   { 0x1d5d, UNICODE_NOT_PRESENT_OFFSET, 1368 },
  22927   { 0x1d5e, UNICODE_NOT_PRESENT_OFFSET, 2418 },
  22928   { 0x1d5f, UNICODE_NOT_PRESENT_OFFSET, 2421 },
  22929   { 0x1d60, UNICODE_NOT_PRESENT_OFFSET, 1387 },
  22930   { 0x1d61, UNICODE_NOT_PRESENT_OFFSET, 2424 },
  22931   { 0x1d62, UNICODE_NOT_PRESENT_OFFSET, 2427 },
  22932   { 0x1d63, UNICODE_NOT_PRESENT_OFFSET, 1178 },
  22933   { 0x1d64, UNICODE_NOT_PRESENT_OFFSET, 2403 },
  22934   { 0x1d65, UNICODE_NOT_PRESENT_OFFSET, 2412 },
  22935   { 0x1d66, UNICODE_NOT_PRESENT_OFFSET, 1368 },
  22936   { 0x1d67, UNICODE_NOT_PRESENT_OFFSET, 2418 },
  22937   { 0x1d68, UNICODE_NOT_PRESENT_OFFSET, 1396 },
  22938   { 0x1d69, UNICODE_NOT_PRESENT_OFFSET, 1387 },
  22939   { 0x1d6a, UNICODE_NOT_PRESENT_OFFSET, 2424 },
  22940   { 0x1d78, UNICODE_NOT_PRESENT_OFFSET, 2429 },
  22941   { 0x1d9b, UNICODE_NOT_PRESENT_OFFSET, 2432 },
  22942   { 0x1d9c, UNICODE_NOT_PRESENT_OFFSET, 2435 },
  22943   { 0x1d9d, UNICODE_NOT_PRESENT_OFFSET, 2437 },
  22944   { 0x1d9e, UNICODE_NOT_PRESENT_OFFSET, 2440 },
  22945   { 0x1d9f, UNICODE_NOT_PRESENT_OFFSET, 2376 },
  22946   { 0x1da0, UNICODE_NOT_PRESENT_OFFSET, 2443 },
  22947   { 0x1da1, UNICODE_NOT_PRESENT_OFFSET, 2445 },
  22948   { 0x1da2, UNICODE_NOT_PRESENT_OFFSET, 2448 },
  22949   { 0x1da3, UNICODE_NOT_PRESENT_OFFSET, 2451 },
  22950   { 0x1da4, UNICODE_NOT_PRESENT_OFFSET, 2454 },
  22951   { 0x1da5, UNICODE_NOT_PRESENT_OFFSET, 2457 },
  22952   { 0x1da6, UNICODE_NOT_PRESENT_OFFSET, 2460 },
  22953   { 0x1da7, UNICODE_NOT_PRESENT_OFFSET, 2463 },
  22954   { 0x1da8, UNICODE_NOT_PRESENT_OFFSET, 2467 },
  22955   { 0x1da9, UNICODE_NOT_PRESENT_OFFSET, 2470 },
  22956   { 0x1daa, UNICODE_NOT_PRESENT_OFFSET, 2473 },
  22957   { 0x1dab, UNICODE_NOT_PRESENT_OFFSET, 2477 },
  22958   { 0x1dac, UNICODE_NOT_PRESENT_OFFSET, 2480 },
  22959   { 0x1dad, UNICODE_NOT_PRESENT_OFFSET, 2483 },
  22960   { 0x1dae, UNICODE_NOT_PRESENT_OFFSET, 2486 },
  22961   { 0x1daf, UNICODE_NOT_PRESENT_OFFSET, 2489 },
  22962   { 0x1db0, UNICODE_NOT_PRESENT_OFFSET, 2492 },
  22963   { 0x1db1, UNICODE_NOT_PRESENT_OFFSET, 2495 },
  22964   { 0x1db2, UNICODE_NOT_PRESENT_OFFSET, 2498 },
  22965   { 0x1db3, UNICODE_NOT_PRESENT_OFFSET, 2501 },
  22966   { 0x1db4, UNICODE_NOT_PRESENT_OFFSET, 2504 },
  22967   { 0x1db5, UNICODE_NOT_PRESENT_OFFSET, 2507 },
  22968   { 0x1db6, UNICODE_NOT_PRESENT_OFFSET, 2510 },
  22969   { 0x1db7, UNICODE_NOT_PRESENT_OFFSET, 2513 },
  22970   { 0x1db8, UNICODE_NOT_PRESENT_OFFSET, 2516 },
  22971   { 0x1db9, UNICODE_NOT_PRESENT_OFFSET, 2520 },
  22972   { 0x1dba, UNICODE_NOT_PRESENT_OFFSET, 2523 },
  22973   { 0x1dbb, UNICODE_NOT_PRESENT_OFFSET, 2526 },
  22974   { 0x1dbc, UNICODE_NOT_PRESENT_OFFSET, 2528 },
  22975   { 0x1dbd, UNICODE_NOT_PRESENT_OFFSET, 2531 },
  22976   { 0x1dbe, UNICODE_NOT_PRESENT_OFFSET, 2534 },
  22977   { 0x1dbf, UNICODE_NOT_PRESENT_OFFSET, 1371 },
  22978   { 0x1e00, 2537, UNICODE_NOT_PRESENT_OFFSET },
  22979   { 0x1e01, 2541, UNICODE_NOT_PRESENT_OFFSET },
  22980   { 0x1e02, 2545, UNICODE_NOT_PRESENT_OFFSET },
  22981   { 0x1e03, 2549, UNICODE_NOT_PRESENT_OFFSET },
  22982   { 0x1e04, 2553, UNICODE_NOT_PRESENT_OFFSET },
  22983   { 0x1e05, 2557, UNICODE_NOT_PRESENT_OFFSET },
  22984   { 0x1e06, 2561, UNICODE_NOT_PRESENT_OFFSET },
  22985   { 0x1e07, 2565, UNICODE_NOT_PRESENT_OFFSET },
  22986   { 0x1e08, 2569, UNICODE_NOT_PRESENT_OFFSET },
  22987   { 0x1e09, 2575, UNICODE_NOT_PRESENT_OFFSET },
  22988   { 0x1e0a, 2581, UNICODE_NOT_PRESENT_OFFSET },
  22989   { 0x1e0b, 2585, UNICODE_NOT_PRESENT_OFFSET },
  22990   { 0x1e0c, 2589, UNICODE_NOT_PRESENT_OFFSET },
  22991   { 0x1e0d, 2593, UNICODE_NOT_PRESENT_OFFSET },
  22992   { 0x1e0e, 2597, UNICODE_NOT_PRESENT_OFFSET },
  22993   { 0x1e0f, 2601, UNICODE_NOT_PRESENT_OFFSET },
  22994   { 0x1e10, 2605, UNICODE_NOT_PRESENT_OFFSET },
  22995   { 0x1e11, 2609, UNICODE_NOT_PRESENT_OFFSET },
  22996   { 0x1e12, 2613, UNICODE_NOT_PRESENT_OFFSET },
  22997   { 0x1e13, 2617, UNICODE_NOT_PRESENT_OFFSET },
  22998   { 0x1e14, 2621, UNICODE_NOT_PRESENT_OFFSET },
  22999   { 0x1e15, 2627, UNICODE_NOT_PRESENT_OFFSET },
  23000   { 0x1e16, 2633, UNICODE_NOT_PRESENT_OFFSET },
  23001   { 0x1e17, 2639, UNICODE_NOT_PRESENT_OFFSET },
  23002   { 0x1e18, 2645, UNICODE_NOT_PRESENT_OFFSET },
  23003   { 0x1e19, 2649, UNICODE_NOT_PRESENT_OFFSET },
  23004   { 0x1e1a, 2653, UNICODE_NOT_PRESENT_OFFSET },
  23005   { 0x1e1b, 2657, UNICODE_NOT_PRESENT_OFFSET },
  23006   { 0x1e1c, 2661, UNICODE_NOT_PRESENT_OFFSET },
  23007   { 0x1e1d, 2667, UNICODE_NOT_PRESENT_OFFSET },
  23008   { 0x1e1e, 2673, UNICODE_NOT_PRESENT_OFFSET },
  23009   { 0x1e1f, 2677, UNICODE_NOT_PRESENT_OFFSET },
  23010   { 0x1e20, 2681, UNICODE_NOT_PRESENT_OFFSET },
  23011   { 0x1e21, 2685, UNICODE_NOT_PRESENT_OFFSET },
  23012   { 0x1e22, 2689, UNICODE_NOT_PRESENT_OFFSET },
  23013   { 0x1e23, 2693, UNICODE_NOT_PRESENT_OFFSET },
  23014   { 0x1e24, 2697, UNICODE_NOT_PRESENT_OFFSET },
  23015   { 0x1e25, 2701, UNICODE_NOT_PRESENT_OFFSET },
  23016   { 0x1e26, 2705, UNICODE_NOT_PRESENT_OFFSET },
  23017   { 0x1e27, 2709, UNICODE_NOT_PRESENT_OFFSET },
  23018   { 0x1e28, 2713, UNICODE_NOT_PRESENT_OFFSET },
  23019   { 0x1e29, 2717, UNICODE_NOT_PRESENT_OFFSET },
  23020   { 0x1e2a, 2721, UNICODE_NOT_PRESENT_OFFSET },
  23021   { 0x1e2b, 2725, UNICODE_NOT_PRESENT_OFFSET },
  23022   { 0x1e2c, 2729, UNICODE_NOT_PRESENT_OFFSET },
  23023   { 0x1e2d, 2733, UNICODE_NOT_PRESENT_OFFSET },
  23024   { 0x1e2e, 2737, UNICODE_NOT_PRESENT_OFFSET },
  23025   { 0x1e2f, 2743, UNICODE_NOT_PRESENT_OFFSET },
  23026   { 0x1e30, 2749, UNICODE_NOT_PRESENT_OFFSET },
  23027   { 0x1e31, 2753, UNICODE_NOT_PRESENT_OFFSET },
  23028   { 0x1e32, 2757, UNICODE_NOT_PRESENT_OFFSET },
  23029   { 0x1e33, 2761, UNICODE_NOT_PRESENT_OFFSET },
  23030   { 0x1e34, 2765, UNICODE_NOT_PRESENT_OFFSET },
  23031   { 0x1e35, 2769, UNICODE_NOT_PRESENT_OFFSET },
  23032   { 0x1e36, 2773, UNICODE_NOT_PRESENT_OFFSET },
  23033   { 0x1e37, 2777, UNICODE_NOT_PRESENT_OFFSET },
  23034   { 0x1e38, 2781, UNICODE_NOT_PRESENT_OFFSET },
  23035   { 0x1e39, 2787, UNICODE_NOT_PRESENT_OFFSET },
  23036   { 0x1e3a, 2793, UNICODE_NOT_PRESENT_OFFSET },
  23037   { 0x1e3b, 2797, UNICODE_NOT_PRESENT_OFFSET },
  23038   { 0x1e3c, 2801, UNICODE_NOT_PRESENT_OFFSET },
  23039   { 0x1e3d, 2805, UNICODE_NOT_PRESENT_OFFSET },
  23040   { 0x1e3e, 2809, UNICODE_NOT_PRESENT_OFFSET },
  23041   { 0x1e3f, 2813, UNICODE_NOT_PRESENT_OFFSET },
  23042   { 0x1e40, 2817, UNICODE_NOT_PRESENT_OFFSET },
  23043   { 0x1e41, 2821, UNICODE_NOT_PRESENT_OFFSET },
  23044   { 0x1e42, 2825, UNICODE_NOT_PRESENT_OFFSET },
  23045   { 0x1e43, 2829, UNICODE_NOT_PRESENT_OFFSET },
  23046   { 0x1e44, 2833, UNICODE_NOT_PRESENT_OFFSET },
  23047   { 0x1e45, 2837, UNICODE_NOT_PRESENT_OFFSET },
  23048   { 0x1e46, 2841, UNICODE_NOT_PRESENT_OFFSET },
  23049   { 0x1e47, 2845, UNICODE_NOT_PRESENT_OFFSET },
  23050   { 0x1e48, 2849, UNICODE_NOT_PRESENT_OFFSET },
  23051   { 0x1e49, 2853, UNICODE_NOT_PRESENT_OFFSET },
  23052   { 0x1e4a, 2857, UNICODE_NOT_PRESENT_OFFSET },
  23053   { 0x1e4b, 2861, UNICODE_NOT_PRESENT_OFFSET },
  23054   { 0x1e4c, 2865, UNICODE_NOT_PRESENT_OFFSET },
  23055   { 0x1e4d, 2871, UNICODE_NOT_PRESENT_OFFSET },
  23056   { 0x1e4e, 2877, UNICODE_NOT_PRESENT_OFFSET },
  23057   { 0x1e4f, 2883, UNICODE_NOT_PRESENT_OFFSET },
  23058   { 0x1e50, 2889, UNICODE_NOT_PRESENT_OFFSET },
  23059   { 0x1e51, 2895, UNICODE_NOT_PRESENT_OFFSET },
  23060   { 0x1e52, 2901, UNICODE_NOT_PRESENT_OFFSET },
  23061   { 0x1e53, 2907, UNICODE_NOT_PRESENT_OFFSET },
  23062   { 0x1e54, 2913, UNICODE_NOT_PRESENT_OFFSET },
  23063   { 0x1e55, 2917, UNICODE_NOT_PRESENT_OFFSET },
  23064   { 0x1e56, 2921, UNICODE_NOT_PRESENT_OFFSET },
  23065   { 0x1e57, 2925, UNICODE_NOT_PRESENT_OFFSET },
  23066   { 0x1e58, 2929, UNICODE_NOT_PRESENT_OFFSET },
  23067   { 0x1e59, 2933, UNICODE_NOT_PRESENT_OFFSET },
  23068   { 0x1e5a, 2937, UNICODE_NOT_PRESENT_OFFSET },
  23069   { 0x1e5b, 2941, UNICODE_NOT_PRESENT_OFFSET },
  23070   { 0x1e5c, 2945, UNICODE_NOT_PRESENT_OFFSET },
  23071   { 0x1e5d, 2951, UNICODE_NOT_PRESENT_OFFSET },
  23072   { 0x1e5e, 2957, UNICODE_NOT_PRESENT_OFFSET },
  23073   { 0x1e5f, 2961, UNICODE_NOT_PRESENT_OFFSET },
  23074   { 0x1e60, 2965, UNICODE_NOT_PRESENT_OFFSET },
  23075   { 0x1e61, 2969, UNICODE_NOT_PRESENT_OFFSET },
  23076   { 0x1e62, 2973, UNICODE_NOT_PRESENT_OFFSET },
  23077   { 0x1e63, 2977, UNICODE_NOT_PRESENT_OFFSET },
  23078   { 0x1e64, 2981, UNICODE_NOT_PRESENT_OFFSET },
  23079   { 0x1e65, 2987, UNICODE_NOT_PRESENT_OFFSET },
  23080   { 0x1e66, 2993, UNICODE_NOT_PRESENT_OFFSET },
  23081   { 0x1e67, 2999, UNICODE_NOT_PRESENT_OFFSET },
  23082   { 0x1e68, 3005, UNICODE_NOT_PRESENT_OFFSET },
  23083   { 0x1e69, 3011, UNICODE_NOT_PRESENT_OFFSET },
  23084   { 0x1e6a, 3017, UNICODE_NOT_PRESENT_OFFSET },
  23085   { 0x1e6b, 3021, UNICODE_NOT_PRESENT_OFFSET },
  23086   { 0x1e6c, 3025, UNICODE_NOT_PRESENT_OFFSET },
  23087   { 0x1e6d, 3029, UNICODE_NOT_PRESENT_OFFSET },
  23088   { 0x1e6e, 3033, UNICODE_NOT_PRESENT_OFFSET },
  23089   { 0x1e6f, 3037, UNICODE_NOT_PRESENT_OFFSET },
  23090   { 0x1e70, 3041, UNICODE_NOT_PRESENT_OFFSET },
  23091   { 0x1e71, 3045, UNICODE_NOT_PRESENT_OFFSET },
  23092   { 0x1e72, 3049, UNICODE_NOT_PRESENT_OFFSET },
  23093   { 0x1e73, 3053, UNICODE_NOT_PRESENT_OFFSET },
  23094   { 0x1e74, 3057, UNICODE_NOT_PRESENT_OFFSET },
  23095   { 0x1e75, 3061, UNICODE_NOT_PRESENT_OFFSET },
  23096   { 0x1e76, 3065, UNICODE_NOT_PRESENT_OFFSET },
  23097   { 0x1e77, 3069, UNICODE_NOT_PRESENT_OFFSET },
  23098   { 0x1e78, 3073, UNICODE_NOT_PRESENT_OFFSET },
  23099   { 0x1e79, 3079, UNICODE_NOT_PRESENT_OFFSET },
  23100   { 0x1e7a, 3085, UNICODE_NOT_PRESENT_OFFSET },
  23101   { 0x1e7b, 3091, UNICODE_NOT_PRESENT_OFFSET },
  23102   { 0x1e7c, 3097, UNICODE_NOT_PRESENT_OFFSET },
  23103   { 0x1e7d, 3101, UNICODE_NOT_PRESENT_OFFSET },
  23104   { 0x1e7e, 3105, UNICODE_NOT_PRESENT_OFFSET },
  23105   { 0x1e7f, 3109, UNICODE_NOT_PRESENT_OFFSET },
  23106   { 0x1e80, 3113, UNICODE_NOT_PRESENT_OFFSET },
  23107   { 0x1e81, 3117, UNICODE_NOT_PRESENT_OFFSET },
  23108   { 0x1e82, 3121, UNICODE_NOT_PRESENT_OFFSET },
  23109   { 0x1e83, 3125, UNICODE_NOT_PRESENT_OFFSET },
  23110   { 0x1e84, 3129, UNICODE_NOT_PRESENT_OFFSET },
  23111   { 0x1e85, 3133, UNICODE_NOT_PRESENT_OFFSET },
  23112   { 0x1e86, 3137, UNICODE_NOT_PRESENT_OFFSET },
  23113   { 0x1e87, 3141, UNICODE_NOT_PRESENT_OFFSET },
  23114   { 0x1e88, 3145, UNICODE_NOT_PRESENT_OFFSET },
  23115   { 0x1e89, 3149, UNICODE_NOT_PRESENT_OFFSET },
  23116   { 0x1e8a, 3153, UNICODE_NOT_PRESENT_OFFSET },
  23117   { 0x1e8b, 3157, UNICODE_NOT_PRESENT_OFFSET },
  23118   { 0x1e8c, 3161, UNICODE_NOT_PRESENT_OFFSET },
  23119   { 0x1e8d, 3165, UNICODE_NOT_PRESENT_OFFSET },
  23120   { 0x1e8e, 3169, UNICODE_NOT_PRESENT_OFFSET },
  23121   { 0x1e8f, 3173, UNICODE_NOT_PRESENT_OFFSET },
  23122   { 0x1e90, 3177, UNICODE_NOT_PRESENT_OFFSET },
  23123   { 0x1e91, 3181, UNICODE_NOT_PRESENT_OFFSET },
  23124   { 0x1e92, 3185, UNICODE_NOT_PRESENT_OFFSET },
  23125   { 0x1e93, 3189, UNICODE_NOT_PRESENT_OFFSET },
  23126   { 0x1e94, 3193, UNICODE_NOT_PRESENT_OFFSET },
  23127   { 0x1e95, 3197, UNICODE_NOT_PRESENT_OFFSET },
  23128   { 0x1e96, 3201, UNICODE_NOT_PRESENT_OFFSET },
  23129   { 0x1e97, 3205, UNICODE_NOT_PRESENT_OFFSET },
  23130   { 0x1e98, 3209, UNICODE_NOT_PRESENT_OFFSET },
  23131   { 0x1e99, 3213, UNICODE_NOT_PRESENT_OFFSET },
  23132   { 0x1e9a, UNICODE_NOT_PRESENT_OFFSET, 3217 },
  23133   { 0x1e9b, 3221, 2969 },
  23134   { 0x1ea0, 3226, UNICODE_NOT_PRESENT_OFFSET },
  23135   { 0x1ea1, 3230, UNICODE_NOT_PRESENT_OFFSET },
  23136   { 0x1ea2, 3234, UNICODE_NOT_PRESENT_OFFSET },
  23137   { 0x1ea3, 3238, UNICODE_NOT_PRESENT_OFFSET },
  23138   { 0x1ea4, 3242, UNICODE_NOT_PRESENT_OFFSET },
  23139   { 0x1ea5, 3248, UNICODE_NOT_PRESENT_OFFSET },
  23140   { 0x1ea6, 3254, UNICODE_NOT_PRESENT_OFFSET },
  23141   { 0x1ea7, 3260, UNICODE_NOT_PRESENT_OFFSET },
  23142   { 0x1ea8, 3266, UNICODE_NOT_PRESENT_OFFSET },
  23143   { 0x1ea9, 3272, UNICODE_NOT_PRESENT_OFFSET },
  23144   { 0x1eaa, 3278, UNICODE_NOT_PRESENT_OFFSET },
  23145   { 0x1eab, 3284, UNICODE_NOT_PRESENT_OFFSET },
  23146   { 0x1eac, 3290, UNICODE_NOT_PRESENT_OFFSET },
  23147   { 0x1ead, 3296, UNICODE_NOT_PRESENT_OFFSET },
  23148   { 0x1eae, 3302, UNICODE_NOT_PRESENT_OFFSET },
  23149   { 0x1eaf, 3308, UNICODE_NOT_PRESENT_OFFSET },
  23150   { 0x1eb0, 3314, UNICODE_NOT_PRESENT_OFFSET },
  23151   { 0x1eb1, 3320, UNICODE_NOT_PRESENT_OFFSET },
  23152   { 0x1eb2, 3326, UNICODE_NOT_PRESENT_OFFSET },
  23153   { 0x1eb3, 3332, UNICODE_NOT_PRESENT_OFFSET },
  23154   { 0x1eb4, 3338, UNICODE_NOT_PRESENT_OFFSET },
  23155   { 0x1eb5, 3344, UNICODE_NOT_PRESENT_OFFSET },
  23156   { 0x1eb6, 3350, UNICODE_NOT_PRESENT_OFFSET },
  23157   { 0x1eb7, 3356, UNICODE_NOT_PRESENT_OFFSET },
  23158   { 0x1eb8, 3362, UNICODE_NOT_PRESENT_OFFSET },
  23159   { 0x1eb9, 3366, UNICODE_NOT_PRESENT_OFFSET },
  23160   { 0x1eba, 3370, UNICODE_NOT_PRESENT_OFFSET },
  23161   { 0x1ebb, 3374, UNICODE_NOT_PRESENT_OFFSET },
  23162   { 0x1ebc, 3378, UNICODE_NOT_PRESENT_OFFSET },
  23163   { 0x1ebd, 3382, UNICODE_NOT_PRESENT_OFFSET },
  23164   { 0x1ebe, 3386, UNICODE_NOT_PRESENT_OFFSET },
  23165   { 0x1ebf, 3392, UNICODE_NOT_PRESENT_OFFSET },
  23166   { 0x1ec0, 3398, UNICODE_NOT_PRESENT_OFFSET },
  23167   { 0x1ec1, 3404, UNICODE_NOT_PRESENT_OFFSET },
  23168   { 0x1ec2, 3410, UNICODE_NOT_PRESENT_OFFSET },
  23169   { 0x1ec3, 3416, UNICODE_NOT_PRESENT_OFFSET },
  23170   { 0x1ec4, 3422, UNICODE_NOT_PRESENT_OFFSET },
  23171   { 0x1ec5, 3428, UNICODE_NOT_PRESENT_OFFSET },
  23172   { 0x1ec6, 3434, UNICODE_NOT_PRESENT_OFFSET },
  23173   { 0x1ec7, 3440, UNICODE_NOT_PRESENT_OFFSET },
  23174   { 0x1ec8, 3446, UNICODE_NOT_PRESENT_OFFSET },
  23175   { 0x1ec9, 3450, UNICODE_NOT_PRESENT_OFFSET },
  23176   { 0x1eca, 3454, UNICODE_NOT_PRESENT_OFFSET },
  23177   { 0x1ecb, 3458, UNICODE_NOT_PRESENT_OFFSET },
  23178   { 0x1ecc, 3462, UNICODE_NOT_PRESENT_OFFSET },
  23179   { 0x1ecd, 3466, UNICODE_NOT_PRESENT_OFFSET },
  23180   { 0x1ece, 3470, UNICODE_NOT_PRESENT_OFFSET },
  23181   { 0x1ecf, 3474, UNICODE_NOT_PRESENT_OFFSET },
  23182   { 0x1ed0, 3478, UNICODE_NOT_PRESENT_OFFSET },
  23183   { 0x1ed1, 3484, UNICODE_NOT_PRESENT_OFFSET },
  23184   { 0x1ed2, 3490, UNICODE_NOT_PRESENT_OFFSET },
  23185   { 0x1ed3, 3496, UNICODE_NOT_PRESENT_OFFSET },
  23186   { 0x1ed4, 3502, UNICODE_NOT_PRESENT_OFFSET },
  23187   { 0x1ed5, 3508, UNICODE_NOT_PRESENT_OFFSET },
  23188   { 0x1ed6, 3514, UNICODE_NOT_PRESENT_OFFSET },
  23189   { 0x1ed7, 3520, UNICODE_NOT_PRESENT_OFFSET },
  23190   { 0x1ed8, 3526, UNICODE_NOT_PRESENT_OFFSET },
  23191   { 0x1ed9, 3532, UNICODE_NOT_PRESENT_OFFSET },
  23192   { 0x1eda, 3538, UNICODE_NOT_PRESENT_OFFSET },
  23193   { 0x1edb, 3544, UNICODE_NOT_PRESENT_OFFSET },
  23194   { 0x1edc, 3550, UNICODE_NOT_PRESENT_OFFSET },
  23195   { 0x1edd, 3556, UNICODE_NOT_PRESENT_OFFSET },
  23196   { 0x1ede, 3562, UNICODE_NOT_PRESENT_OFFSET },
  23197   { 0x1edf, 3568, UNICODE_NOT_PRESENT_OFFSET },
  23198   { 0x1ee0, 3574, UNICODE_NOT_PRESENT_OFFSET },
  23199   { 0x1ee1, 3580, UNICODE_NOT_PRESENT_OFFSET },
  23200   { 0x1ee2, 3586, UNICODE_NOT_PRESENT_OFFSET },
  23201   { 0x1ee3, 3592, UNICODE_NOT_PRESENT_OFFSET },
  23202   { 0x1ee4, 3598, UNICODE_NOT_PRESENT_OFFSET },
  23203   { 0x1ee5, 3602, UNICODE_NOT_PRESENT_OFFSET },
  23204   { 0x1ee6, 3606, UNICODE_NOT_PRESENT_OFFSET },
  23205   { 0x1ee7, 3610, UNICODE_NOT_PRESENT_OFFSET },
  23206   { 0x1ee8, 3614, UNICODE_NOT_PRESENT_OFFSET },
  23207   { 0x1ee9, 3620, UNICODE_NOT_PRESENT_OFFSET },
  23208   { 0x1eea, 3626, UNICODE_NOT_PRESENT_OFFSET },
  23209   { 0x1eeb, 3632, UNICODE_NOT_PRESENT_OFFSET },
  23210   { 0x1eec, 3638, UNICODE_NOT_PRESENT_OFFSET },
  23211   { 0x1eed, 3644, UNICODE_NOT_PRESENT_OFFSET },
  23212   { 0x1eee, 3650, UNICODE_NOT_PRESENT_OFFSET },
  23213   { 0x1eef, 3656, UNICODE_NOT_PRESENT_OFFSET },
  23214   { 0x1ef0, 3662, UNICODE_NOT_PRESENT_OFFSET },
  23215   { 0x1ef1, 3668, UNICODE_NOT_PRESENT_OFFSET },
  23216   { 0x1ef2, 3674, UNICODE_NOT_PRESENT_OFFSET },
  23217   { 0x1ef3, 3678, UNICODE_NOT_PRESENT_OFFSET },
  23218   { 0x1ef4, 3682, UNICODE_NOT_PRESENT_OFFSET },
  23219   { 0x1ef5, 3686, UNICODE_NOT_PRESENT_OFFSET },
  23220   { 0x1ef6, 3690, UNICODE_NOT_PRESENT_OFFSET },
  23221   { 0x1ef7, 3694, UNICODE_NOT_PRESENT_OFFSET },
  23222   { 0x1ef8, 3698, UNICODE_NOT_PRESENT_OFFSET },
  23223   { 0x1ef9, 3702, UNICODE_NOT_PRESENT_OFFSET },
  23224   { 0x1f00, 3706, UNICODE_NOT_PRESENT_OFFSET },
  23225   { 0x1f01, 3711, UNICODE_NOT_PRESENT_OFFSET },
  23226   { 0x1f02, 3716, UNICODE_NOT_PRESENT_OFFSET },
  23227   { 0x1f03, 3723, UNICODE_NOT_PRESENT_OFFSET },
  23228   { 0x1f04, 3730, UNICODE_NOT_PRESENT_OFFSET },
  23229   { 0x1f05, 3737, UNICODE_NOT_PRESENT_OFFSET },
  23230   { 0x1f06, 3744, UNICODE_NOT_PRESENT_OFFSET },
  23231   { 0x1f07, 3751, UNICODE_NOT_PRESENT_OFFSET },
  23232   { 0x1f08, 3758, UNICODE_NOT_PRESENT_OFFSET },
  23233   { 0x1f09, 3763, UNICODE_NOT_PRESENT_OFFSET },
  23234   { 0x1f0a, 3768, UNICODE_NOT_PRESENT_OFFSET },
  23235   { 0x1f0b, 3775, UNICODE_NOT_PRESENT_OFFSET },
  23236   { 0x1f0c, 3782, UNICODE_NOT_PRESENT_OFFSET },
  23237   { 0x1f0d, 3789, UNICODE_NOT_PRESENT_OFFSET },
  23238   { 0x1f0e, 3796, UNICODE_NOT_PRESENT_OFFSET },
  23239   { 0x1f0f, 3803, UNICODE_NOT_PRESENT_OFFSET },
  23240   { 0x1f10, 3810, UNICODE_NOT_PRESENT_OFFSET },
  23241   { 0x1f11, 3815, UNICODE_NOT_PRESENT_OFFSET },
  23242   { 0x1f12, 3820, UNICODE_NOT_PRESENT_OFFSET },
  23243   { 0x1f13, 3827, UNICODE_NOT_PRESENT_OFFSET },
  23244   { 0x1f14, 3834, UNICODE_NOT_PRESENT_OFFSET },
  23245   { 0x1f15, 3841, UNICODE_NOT_PRESENT_OFFSET },
  23246   { 0x1f18, 3848, UNICODE_NOT_PRESENT_OFFSET },
  23247   { 0x1f19, 3853, UNICODE_NOT_PRESENT_OFFSET },
  23248   { 0x1f1a, 3858, UNICODE_NOT_PRESENT_OFFSET },
  23249   { 0x1f1b, 3865, UNICODE_NOT_PRESENT_OFFSET },
  23250   { 0x1f1c, 3872, UNICODE_NOT_PRESENT_OFFSET },
  23251   { 0x1f1d, 3879, UNICODE_NOT_PRESENT_OFFSET },
  23252   { 0x1f20, 3886, UNICODE_NOT_PRESENT_OFFSET },
  23253   { 0x1f21, 3891, UNICODE_NOT_PRESENT_OFFSET },
  23254   { 0x1f22, 3896, UNICODE_NOT_PRESENT_OFFSET },
  23255   { 0x1f23, 3903, UNICODE_NOT_PRESENT_OFFSET },
  23256   { 0x1f24, 3910, UNICODE_NOT_PRESENT_OFFSET },
  23257   { 0x1f25, 3917, UNICODE_NOT_PRESENT_OFFSET },
  23258   { 0x1f26, 3924, UNICODE_NOT_PRESENT_OFFSET },
  23259   { 0x1f27, 3931, UNICODE_NOT_PRESENT_OFFSET },
  23260   { 0x1f28, 3938, UNICODE_NOT_PRESENT_OFFSET },
  23261   { 0x1f29, 3943, UNICODE_NOT_PRESENT_OFFSET },
  23262   { 0x1f2a, 3948, UNICODE_NOT_PRESENT_OFFSET },
  23263   { 0x1f2b, 3955, UNICODE_NOT_PRESENT_OFFSET },
  23264   { 0x1f2c, 3962, UNICODE_NOT_PRESENT_OFFSET },
  23265   { 0x1f2d, 3969, UNICODE_NOT_PRESENT_OFFSET },
  23266   { 0x1f2e, 3976, UNICODE_NOT_PRESENT_OFFSET },
  23267   { 0x1f2f, 3983, UNICODE_NOT_PRESENT_OFFSET },
  23268   { 0x1f30, 3990, UNICODE_NOT_PRESENT_OFFSET },
  23269   { 0x1f31, 3995, UNICODE_NOT_PRESENT_OFFSET },
  23270   { 0x1f32, 4000, UNICODE_NOT_PRESENT_OFFSET },
  23271   { 0x1f33, 4007, UNICODE_NOT_PRESENT_OFFSET },
  23272   { 0x1f34, 4014, UNICODE_NOT_PRESENT_OFFSET },
  23273   { 0x1f35, 4021, UNICODE_NOT_PRESENT_OFFSET },
  23274   { 0x1f36, 4028, UNICODE_NOT_PRESENT_OFFSET },
  23275   { 0x1f37, 4035, UNICODE_NOT_PRESENT_OFFSET },
  23276   { 0x1f38, 4042, UNICODE_NOT_PRESENT_OFFSET },
  23277   { 0x1f39, 4047, UNICODE_NOT_PRESENT_OFFSET },
  23278   { 0x1f3a, 4052, UNICODE_NOT_PRESENT_OFFSET },
  23279   { 0x1f3b, 4059, UNICODE_NOT_PRESENT_OFFSET },
  23280   { 0x1f3c, 4066, UNICODE_NOT_PRESENT_OFFSET },
  23281   { 0x1f3d, 4073, UNICODE_NOT_PRESENT_OFFSET },
  23282   { 0x1f3e, 4080, UNICODE_NOT_PRESENT_OFFSET },
  23283   { 0x1f3f, 4087, UNICODE_NOT_PRESENT_OFFSET },
  23284   { 0x1f40, 4094, UNICODE_NOT_PRESENT_OFFSET },
  23285   { 0x1f41, 4099, UNICODE_NOT_PRESENT_OFFSET },
  23286   { 0x1f42, 4104, UNICODE_NOT_PRESENT_OFFSET },
  23287   { 0x1f43, 4111, UNICODE_NOT_PRESENT_OFFSET },
  23288   { 0x1f44, 4118, UNICODE_NOT_PRESENT_OFFSET },
  23289   { 0x1f45, 4125, UNICODE_NOT_PRESENT_OFFSET },
  23290   { 0x1f48, 4132, UNICODE_NOT_PRESENT_OFFSET },
  23291   { 0x1f49, 4137, UNICODE_NOT_PRESENT_OFFSET },
  23292   { 0x1f4a, 4142, UNICODE_NOT_PRESENT_OFFSET },
  23293   { 0x1f4b, 4149, UNICODE_NOT_PRESENT_OFFSET },
  23294   { 0x1f4c, 4156, UNICODE_NOT_PRESENT_OFFSET },
  23295   { 0x1f4d, 4163, UNICODE_NOT_PRESENT_OFFSET },
  23296   { 0x1f50, 4170, UNICODE_NOT_PRESENT_OFFSET },
  23297   { 0x1f51, 4175, UNICODE_NOT_PRESENT_OFFSET },
  23298   { 0x1f52, 4180, UNICODE_NOT_PRESENT_OFFSET },
  23299   { 0x1f53, 4187, UNICODE_NOT_PRESENT_OFFSET },
  23300   { 0x1f54, 4194, UNICODE_NOT_PRESENT_OFFSET },
  23301   { 0x1f55, 4201, UNICODE_NOT_PRESENT_OFFSET },
  23302   { 0x1f56, 4208, UNICODE_NOT_PRESENT_OFFSET },
  23303   { 0x1f57, 4215, UNICODE_NOT_PRESENT_OFFSET },
  23304   { 0x1f59, 4222, UNICODE_NOT_PRESENT_OFFSET },
  23305   { 0x1f5b, 4227, UNICODE_NOT_PRESENT_OFFSET },
  23306   { 0x1f5d, 4234, UNICODE_NOT_PRESENT_OFFSET },
  23307   { 0x1f5f, 4241, UNICODE_NOT_PRESENT_OFFSET },
  23308   { 0x1f60, 4248, UNICODE_NOT_PRESENT_OFFSET },
  23309   { 0x1f61, 4253, UNICODE_NOT_PRESENT_OFFSET },
  23310   { 0x1f62, 4258, UNICODE_NOT_PRESENT_OFFSET },
  23311   { 0x1f63, 4265, UNICODE_NOT_PRESENT_OFFSET },
  23312   { 0x1f64, 4272, UNICODE_NOT_PRESENT_OFFSET },
  23313   { 0x1f65, 4279, UNICODE_NOT_PRESENT_OFFSET },
  23314   { 0x1f66, 4286, UNICODE_NOT_PRESENT_OFFSET },
  23315   { 0x1f67, 4293, UNICODE_NOT_PRESENT_OFFSET },
  23316   { 0x1f68, 4300, UNICODE_NOT_PRESENT_OFFSET },
  23317   { 0x1f69, 4305, UNICODE_NOT_PRESENT_OFFSET },
  23318   { 0x1f6a, 4310, UNICODE_NOT_PRESENT_OFFSET },
  23319   { 0x1f6b, 4317, UNICODE_NOT_PRESENT_OFFSET },
  23320   { 0x1f6c, 4324, UNICODE_NOT_PRESENT_OFFSET },
  23321   { 0x1f6d, 4331, UNICODE_NOT_PRESENT_OFFSET },
  23322   { 0x1f6e, 4338, UNICODE_NOT_PRESENT_OFFSET },
  23323   { 0x1f6f, 4345, UNICODE_NOT_PRESENT_OFFSET },
  23324   { 0x1f70, 4352, UNICODE_NOT_PRESENT_OFFSET },
  23325   { 0x1f71, 1316, UNICODE_NOT_PRESENT_OFFSET },
  23326   { 0x1f72, 4357, UNICODE_NOT_PRESENT_OFFSET },
  23327   { 0x1f73, 1321, UNICODE_NOT_PRESENT_OFFSET },
  23328   { 0x1f74, 4362, UNICODE_NOT_PRESENT_OFFSET },
  23329   { 0x1f75, 1326, UNICODE_NOT_PRESENT_OFFSET },
  23330   { 0x1f76, 4367, UNICODE_NOT_PRESENT_OFFSET },
  23331   { 0x1f77, 1331, UNICODE_NOT_PRESENT_OFFSET },
  23332   { 0x1f78, 4372, UNICODE_NOT_PRESENT_OFFSET },
  23333   { 0x1f79, 1353, UNICODE_NOT_PRESENT_OFFSET },
  23334   { 0x1f7a, 4377, UNICODE_NOT_PRESENT_OFFSET },
  23335   { 0x1f7b, 1358, UNICODE_NOT_PRESENT_OFFSET },
  23336   { 0x1f7c, 4382, UNICODE_NOT_PRESENT_OFFSET },
  23337   { 0x1f7d, 1363, UNICODE_NOT_PRESENT_OFFSET },
  23338   { 0x1f80, 4387, UNICODE_NOT_PRESENT_OFFSET },
  23339   { 0x1f81, 4394, UNICODE_NOT_PRESENT_OFFSET },
  23340   { 0x1f82, 4401, UNICODE_NOT_PRESENT_OFFSET },
  23341   { 0x1f83, 4410, UNICODE_NOT_PRESENT_OFFSET },
  23342   { 0x1f84, 4419, UNICODE_NOT_PRESENT_OFFSET },
  23343   { 0x1f85, 4428, UNICODE_NOT_PRESENT_OFFSET },
  23344   { 0x1f86, 4437, UNICODE_NOT_PRESENT_OFFSET },
  23345   { 0x1f87, 4446, UNICODE_NOT_PRESENT_OFFSET },
  23346   { 0x1f88, 4455, UNICODE_NOT_PRESENT_OFFSET },
  23347   { 0x1f89, 4462, UNICODE_NOT_PRESENT_OFFSET },
  23348   { 0x1f8a, 4469, UNICODE_NOT_PRESENT_OFFSET },
  23349   { 0x1f8b, 4478, UNICODE_NOT_PRESENT_OFFSET },
  23350   { 0x1f8c, 4487, UNICODE_NOT_PRESENT_OFFSET },
  23351   { 0x1f8d, 4496, UNICODE_NOT_PRESENT_OFFSET },
  23352   { 0x1f8e, 4505, UNICODE_NOT_PRESENT_OFFSET },
  23353   { 0x1f8f, 4514, UNICODE_NOT_PRESENT_OFFSET },
  23354   { 0x1f90, 4523, UNICODE_NOT_PRESENT_OFFSET },
  23355   { 0x1f91, 4530, UNICODE_NOT_PRESENT_OFFSET },
  23356   { 0x1f92, 4537, UNICODE_NOT_PRESENT_OFFSET },
  23357   { 0x1f93, 4546, UNICODE_NOT_PRESENT_OFFSET },
  23358   { 0x1f94, 4555, UNICODE_NOT_PRESENT_OFFSET },
  23359   { 0x1f95, 4564, UNICODE_NOT_PRESENT_OFFSET },
  23360   { 0x1f96, 4573, UNICODE_NOT_PRESENT_OFFSET },
  23361   { 0x1f97, 4582, UNICODE_NOT_PRESENT_OFFSET },
  23362   { 0x1f98, 4591, UNICODE_NOT_PRESENT_OFFSET },
  23363   { 0x1f99, 4598, UNICODE_NOT_PRESENT_OFFSET },
  23364   { 0x1f9a, 4605, UNICODE_NOT_PRESENT_OFFSET },
  23365   { 0x1f9b, 4614, UNICODE_NOT_PRESENT_OFFSET },
  23366   { 0x1f9c, 4623, UNICODE_NOT_PRESENT_OFFSET },
  23367   { 0x1f9d, 4632, UNICODE_NOT_PRESENT_OFFSET },
  23368   { 0x1f9e, 4641, UNICODE_NOT_PRESENT_OFFSET },
  23369   { 0x1f9f, 4650, UNICODE_NOT_PRESENT_OFFSET },
  23370   { 0x1fa0, 4659, UNICODE_NOT_PRESENT_OFFSET },
  23371   { 0x1fa1, 4666, UNICODE_NOT_PRESENT_OFFSET },
  23372   { 0x1fa2, 4673, UNICODE_NOT_PRESENT_OFFSET },
  23373   { 0x1fa3, 4682, UNICODE_NOT_PRESENT_OFFSET },
  23374   { 0x1fa4, 4691, UNICODE_NOT_PRESENT_OFFSET },
  23375   { 0x1fa5, 4700, UNICODE_NOT_PRESENT_OFFSET },
  23376   { 0x1fa6, 4709, UNICODE_NOT_PRESENT_OFFSET },
  23377   { 0x1fa7, 4718, UNICODE_NOT_PRESENT_OFFSET },
  23378   { 0x1fa8, 4727, UNICODE_NOT_PRESENT_OFFSET },
  23379   { 0x1fa9, 4734, UNICODE_NOT_PRESENT_OFFSET },
  23380   { 0x1faa, 4741, UNICODE_NOT_PRESENT_OFFSET },
  23381   { 0x1fab, 4750, UNICODE_NOT_PRESENT_OFFSET },
  23382   { 0x1fac, 4759, UNICODE_NOT_PRESENT_OFFSET },
  23383   { 0x1fad, 4768, UNICODE_NOT_PRESENT_OFFSET },
  23384   { 0x1fae, 4777, UNICODE_NOT_PRESENT_OFFSET },
  23385   { 0x1faf, 4786, UNICODE_NOT_PRESENT_OFFSET },
  23386   { 0x1fb0, 4795, UNICODE_NOT_PRESENT_OFFSET },
  23387   { 0x1fb1, 4800, UNICODE_NOT_PRESENT_OFFSET },
  23388   { 0x1fb2, 4805, UNICODE_NOT_PRESENT_OFFSET },
  23389   { 0x1fb3, 4812, UNICODE_NOT_PRESENT_OFFSET },
  23390   { 0x1fb4, 4817, UNICODE_NOT_PRESENT_OFFSET },
  23391   { 0x1fb6, 4824, UNICODE_NOT_PRESENT_OFFSET },
  23392   { 0x1fb7, 4829, UNICODE_NOT_PRESENT_OFFSET },
  23393   { 0x1fb8, 4836, UNICODE_NOT_PRESENT_OFFSET },
  23394   { 0x1fb9, 4841, UNICODE_NOT_PRESENT_OFFSET },
  23395   { 0x1fba, 4846, UNICODE_NOT_PRESENT_OFFSET },
  23396   { 0x1fbb, 1261, UNICODE_NOT_PRESENT_OFFSET },
  23397   { 0x1fbc, 4851, UNICODE_NOT_PRESENT_OFFSET },
  23398   { 0x1fbd, UNICODE_NOT_PRESENT_OFFSET, 4856 },
  23399   { 0x1fbe, 4860, UNICODE_NOT_PRESENT_OFFSET },
  23400   { 0x1fbf, UNICODE_NOT_PRESENT_OFFSET, 4856 },
  23401   { 0x1fc0, UNICODE_NOT_PRESENT_OFFSET, 4863 },
  23402   { 0x1fc1, 4867, 4872 },
  23403   { 0x1fc2, 4878, UNICODE_NOT_PRESENT_OFFSET },
  23404   { 0x1fc3, 4885, UNICODE_NOT_PRESENT_OFFSET },
  23405   { 0x1fc4, 4890, UNICODE_NOT_PRESENT_OFFSET },
  23406   { 0x1fc6, 4897, UNICODE_NOT_PRESENT_OFFSET },
  23407   { 0x1fc7, 4902, UNICODE_NOT_PRESENT_OFFSET },
  23408   { 0x1fc8, 4909, UNICODE_NOT_PRESENT_OFFSET },
  23409   { 0x1fc9, 1269, UNICODE_NOT_PRESENT_OFFSET },
  23410   { 0x1fca, 4914, UNICODE_NOT_PRESENT_OFFSET },
  23411   { 0x1fcb, 1274, UNICODE_NOT_PRESENT_OFFSET },
  23412   { 0x1fcc, 4919, UNICODE_NOT_PRESENT_OFFSET },
  23413   { 0x1fcd, 4924, 4930 },
  23414   { 0x1fce, 4936, 4942 },
  23415   { 0x1fcf, 4948, 4954 },
  23416   { 0x1fd0, 4960, UNICODE_NOT_PRESENT_OFFSET },
  23417   { 0x1fd1, 4965, UNICODE_NOT_PRESENT_OFFSET },
  23418   { 0x1fd2, 4970, UNICODE_NOT_PRESENT_OFFSET },
  23419   { 0x1fd3, 1299, UNICODE_NOT_PRESENT_OFFSET },
  23420   { 0x1fd6, 4977, UNICODE_NOT_PRESENT_OFFSET },
  23421   { 0x1fd7, 4982, UNICODE_NOT_PRESENT_OFFSET },
  23422   { 0x1fd8, 4989, UNICODE_NOT_PRESENT_OFFSET },
  23423   { 0x1fd9, 4994, UNICODE_NOT_PRESENT_OFFSET },
  23424   { 0x1fda, 4999, UNICODE_NOT_PRESENT_OFFSET },
  23425   { 0x1fdb, 1279, UNICODE_NOT_PRESENT_OFFSET },
  23426   { 0x1fdd, 5004, 5010 },
  23427   { 0x1fde, 5016, 5022 },
  23428   { 0x1fdf, 5028, 5034 },
  23429   { 0x1fe0, 5040, UNICODE_NOT_PRESENT_OFFSET },
  23430   { 0x1fe1, 5045, UNICODE_NOT_PRESENT_OFFSET },
  23431   { 0x1fe2, 5050, UNICODE_NOT_PRESENT_OFFSET },
  23432   { 0x1fe3, 1336, UNICODE_NOT_PRESENT_OFFSET },
  23433   { 0x1fe4, 5057, UNICODE_NOT_PRESENT_OFFSET },
  23434   { 0x1fe5, 5062, UNICODE_NOT_PRESENT_OFFSET },
  23435   { 0x1fe6, 5067, UNICODE_NOT_PRESENT_OFFSET },
  23436   { 0x1fe7, 5072, UNICODE_NOT_PRESENT_OFFSET },
  23437   { 0x1fe8, 5079, UNICODE_NOT_PRESENT_OFFSET },
  23438   { 0x1fe9, 5084, UNICODE_NOT_PRESENT_OFFSET },
  23439   { 0x1fea, 5089, UNICODE_NOT_PRESENT_OFFSET },
  23440   { 0x1feb, 1289, UNICODE_NOT_PRESENT_OFFSET },
  23441   { 0x1fec, 5094, UNICODE_NOT_PRESENT_OFFSET },
  23442   { 0x1fed, 5099, 5104 },
  23443   { 0x1fee, 1250, 1255 },
  23444   { 0x1fef, 5110, UNICODE_NOT_PRESENT_OFFSET },
  23445   { 0x1ff2, 5112, UNICODE_NOT_PRESENT_OFFSET },
  23446   { 0x1ff3, 5119, UNICODE_NOT_PRESENT_OFFSET },
  23447   { 0x1ff4, 5124, UNICODE_NOT_PRESENT_OFFSET },
  23448   { 0x1ff6, 5131, UNICODE_NOT_PRESENT_OFFSET },
  23449   { 0x1ff7, 5136, UNICODE_NOT_PRESENT_OFFSET },
  23450   { 0x1ff8, 5143, UNICODE_NOT_PRESENT_OFFSET },
  23451   { 0x1ff9, 1284, UNICODE_NOT_PRESENT_OFFSET },
  23452   { 0x1ffa, 5148, UNICODE_NOT_PRESENT_OFFSET },
  23453   { 0x1ffb, 1294, UNICODE_NOT_PRESENT_OFFSET },
  23454   { 0x1ffc, 5153, UNICODE_NOT_PRESENT_OFFSET },
  23455   { 0x1ffd, 5158, 16 },
  23456   { 0x1ffe, UNICODE_NOT_PRESENT_OFFSET, 5161 },
  23457   { 0x2000, 5165, 0 },
  23458   { 0x2001, 5169, 0 },
  23459   { 0x2002, UNICODE_NOT_PRESENT_OFFSET, 0 },
  23460   { 0x2003, UNICODE_NOT_PRESENT_OFFSET, 0 },
  23461   { 0x2004, UNICODE_NOT_PRESENT_OFFSET, 0 },
  23462   { 0x2005, UNICODE_NOT_PRESENT_OFFSET, 0 },
  23463   { 0x2006, UNICODE_NOT_PRESENT_OFFSET, 0 },
  23464   { 0x2007, UNICODE_NOT_PRESENT_OFFSET, 0 },
  23465   { 0x2008, UNICODE_NOT_PRESENT_OFFSET, 0 },
  23466   { 0x2009, UNICODE_NOT_PRESENT_OFFSET, 0 },
  23467   { 0x200a, UNICODE_NOT_PRESENT_OFFSET, 0 },
  23468   { 0x2011, UNICODE_NOT_PRESENT_OFFSET, 5173 },
  23469   { 0x2017, UNICODE_NOT_PRESENT_OFFSET, 5177 },
  23470   { 0x2024, UNICODE_NOT_PRESENT_OFFSET, 5181 },
  23471   { 0x2025, UNICODE_NOT_PRESENT_OFFSET, 5183 },
  23472   { 0x2026, UNICODE_NOT_PRESENT_OFFSET, 5186 },
  23473   { 0x202f, UNICODE_NOT_PRESENT_OFFSET, 0 },
  23474   { 0x2033, UNICODE_NOT_PRESENT_OFFSET, 5190 },
  23475   { 0x2034, UNICODE_NOT_PRESENT_OFFSET, 5197 },
  23476   { 0x2036, UNICODE_NOT_PRESENT_OFFSET, 5207 },
  23477   { 0x2037, UNICODE_NOT_PRESENT_OFFSET, 5214 },
  23478   { 0x203c, UNICODE_NOT_PRESENT_OFFSET, 5224 },
  23479   { 0x203e, UNICODE_NOT_PRESENT_OFFSET, 5227 },
  23480   { 0x2047, UNICODE_NOT_PRESENT_OFFSET, 5231 },
  23481   { 0x2048, UNICODE_NOT_PRESENT_OFFSET, 5234 },
  23482   { 0x2049, UNICODE_NOT_PRESENT_OFFSET, 5237 },
  23483   { 0x2057, UNICODE_NOT_PRESENT_OFFSET, 5240 },
  23484   { 0x205f, UNICODE_NOT_PRESENT_OFFSET, 0 },
  23485   { 0x2070, UNICODE_NOT_PRESENT_OFFSET, 5253 },
  23486   { 0x2071, UNICODE_NOT_PRESENT_OFFSET, 2427 },
  23487   { 0x2074, UNICODE_NOT_PRESENT_OFFSET, 5255 },
  23488   { 0x2075, UNICODE_NOT_PRESENT_OFFSET, 5257 },
  23489   { 0x2076, UNICODE_NOT_PRESENT_OFFSET, 5259 },
  23490   { 0x2077, UNICODE_NOT_PRESENT_OFFSET, 5261 },
  23491   { 0x2078, UNICODE_NOT_PRESENT_OFFSET, 5263 },
  23492   { 0x2079, UNICODE_NOT_PRESENT_OFFSET, 5265 },
  23493   { 0x207a, UNICODE_NOT_PRESENT_OFFSET, 5267 },
  23494   { 0x207b, UNICODE_NOT_PRESENT_OFFSET, 5269 },
  23495   { 0x207c, UNICODE_NOT_PRESENT_OFFSET, 5273 },
  23496   { 0x207d, UNICODE_NOT_PRESENT_OFFSET, 5275 },
  23497   { 0x207e, UNICODE_NOT_PRESENT_OFFSET, 5277 },
  23498   { 0x207f, UNICODE_NOT_PRESENT_OFFSET, 5279 },
  23499   { 0x2080, UNICODE_NOT_PRESENT_OFFSET, 5253 },
  23500   { 0x2081, UNICODE_NOT_PRESENT_OFFSET, 27 },
  23501   { 0x2082, UNICODE_NOT_PRESENT_OFFSET, 12 },
  23502   { 0x2083, UNICODE_NOT_PRESENT_OFFSET, 14 },
  23503   { 0x2084, UNICODE_NOT_PRESENT_OFFSET, 5255 },
  23504   { 0x2085, UNICODE_NOT_PRESENT_OFFSET, 5257 },
  23505   { 0x2086, UNICODE_NOT_PRESENT_OFFSET, 5259 },
  23506   { 0x2087, UNICODE_NOT_PRESENT_OFFSET, 5261 },
  23507   { 0x2088, UNICODE_NOT_PRESENT_OFFSET, 5263 },
  23508   { 0x2089, UNICODE_NOT_PRESENT_OFFSET, 5265 },
  23509   { 0x208a, UNICODE_NOT_PRESENT_OFFSET, 5267 },
  23510   { 0x208b, UNICODE_NOT_PRESENT_OFFSET, 5269 },
  23511   { 0x208c, UNICODE_NOT_PRESENT_OFFSET, 5273 },
  23512   { 0x208d, UNICODE_NOT_PRESENT_OFFSET, 5275 },
  23513   { 0x208e, UNICODE_NOT_PRESENT_OFFSET, 5277 },
  23514   { 0x2090, UNICODE_NOT_PRESENT_OFFSET, 6 },
  23515   { 0x2091, UNICODE_NOT_PRESENT_OFFSET, 2368 },
  23516   { 0x2092, UNICODE_NOT_PRESENT_OFFSET, 29 },
  23517   { 0x2093, UNICODE_NOT_PRESENT_OFFSET, 1222 },
  23518   { 0x2094, UNICODE_NOT_PRESENT_OFFSET, 2370 },
  23519   { 0x2095, UNICODE_NOT_PRESENT_OFFSET, 1171 },
  23520   { 0x2096, UNICODE_NOT_PRESENT_OFFSET, 2381 },
  23521   { 0x2097, UNICODE_NOT_PRESENT_OFFSET, 1220 },
  23522   { 0x2098, UNICODE_NOT_PRESENT_OFFSET, 2383 },
  23523   { 0x2099, UNICODE_NOT_PRESENT_OFFSET, 5279 },
  23524   { 0x209a, UNICODE_NOT_PRESENT_OFFSET, 2399 },
  23525   { 0x209b, UNICODE_NOT_PRESENT_OFFSET, 711 },
  23526   { 0x209c, UNICODE_NOT_PRESENT_OFFSET, 2401 },
  23527   { 0x20a8, UNICODE_NOT_PRESENT_OFFSET, 5281 },
  23528   { 0x2100, UNICODE_NOT_PRESENT_OFFSET, 5284 },
  23529   { 0x2101, UNICODE_NOT_PRESENT_OFFSET, 5288 },
  23530   { 0x2102, UNICODE_NOT_PRESENT_OFFSET, 5292 },
  23531   { 0x2103, UNICODE_NOT_PRESENT_OFFSET, 5294 },
  23532   { 0x2105, UNICODE_NOT_PRESENT_OFFSET, 5298 },
  23533   { 0x2106, UNICODE_NOT_PRESENT_OFFSET, 5302 },
  23534   { 0x2107, UNICODE_NOT_PRESENT_OFFSET, 5306 },
  23535   { 0x2109, UNICODE_NOT_PRESENT_OFFSET, 5309 },
  23536   { 0x210a, UNICODE_NOT_PRESENT_OFFSET, 2379 },
  23537   { 0x210b, UNICODE_NOT_PRESENT_OFFSET, 2325 },
  23538   { 0x210c, UNICODE_NOT_PRESENT_OFFSET, 2325 },
  23539   { 0x210d, UNICODE_NOT_PRESENT_OFFSET, 2325 },
  23540   { 0x210e, UNICODE_NOT_PRESENT_OFFSET, 1171 },
  23541   { 0x210f, UNICODE_NOT_PRESENT_OFFSET, 5313 },
  23542   { 0x2110, UNICODE_NOT_PRESENT_OFFSET, 2327 },
  23543   { 0x2111, UNICODE_NOT_PRESENT_OFFSET, 2327 },
  23544   { 0x2112, UNICODE_NOT_PRESENT_OFFSET, 2333 },
  23545   { 0x2113, UNICODE_NOT_PRESENT_OFFSET, 1220 },
  23546   { 0x2115, UNICODE_NOT_PRESENT_OFFSET, 2337 },
  23547   { 0x2116, UNICODE_NOT_PRESENT_OFFSET, 5316 },
  23548   { 0x2119, UNICODE_NOT_PRESENT_OFFSET, 2344 },
  23549   { 0x211a, UNICODE_NOT_PRESENT_OFFSET, 5319 },
  23550   { 0x211b, UNICODE_NOT_PRESENT_OFFSET, 2346 },
  23551   { 0x211c, UNICODE_NOT_PRESENT_OFFSET, 2346 },
  23552   { 0x211d, UNICODE_NOT_PRESENT_OFFSET, 2346 },
  23553   { 0x2120, UNICODE_NOT_PRESENT_OFFSET, 5321 },
  23554   { 0x2121, UNICODE_NOT_PRESENT_OFFSET, 5324 },
  23555   { 0x2122, UNICODE_NOT_PRESENT_OFFSET, 5328 },
  23556   { 0x2124, UNICODE_NOT_PRESENT_OFFSET, 5331 },
  23557   { 0x2126, 5333, UNICODE_NOT_PRESENT_OFFSET },
  23558   { 0x2128, UNICODE_NOT_PRESENT_OFFSET, 5331 },
  23559   { 0x212a, 2331, UNICODE_NOT_PRESENT_OFFSET },
  23560   { 0x212b, 69, UNICODE_NOT_PRESENT_OFFSET },
  23561   { 0x212c, UNICODE_NOT_PRESENT_OFFSET, 2314 },
  23562   { 0x212d, UNICODE_NOT_PRESENT_OFFSET, 5292 },
  23563   { 0x212f, UNICODE_NOT_PRESENT_OFFSET, 2368 },
  23564   { 0x2130, UNICODE_NOT_PRESENT_OFFSET, 2318 },
  23565   { 0x2131, UNICODE_NOT_PRESENT_OFFSET, 5336 },
  23566   { 0x2133, UNICODE_NOT_PRESENT_OFFSET, 2335 },
  23567   { 0x2134, UNICODE_NOT_PRESENT_OFFSET, 29 },
  23568   { 0x2135, UNICODE_NOT_PRESENT_OFFSET, 5338 },
  23569   { 0x2136, UNICODE_NOT_PRESENT_OFFSET, 5341 },
  23570   { 0x2137, UNICODE_NOT_PRESENT_OFFSET, 5344 },
  23571   { 0x2138, UNICODE_NOT_PRESENT_OFFSET, 5347 },
  23572   { 0x2139, UNICODE_NOT_PRESENT_OFFSET, 2427 },
  23573   { 0x213b, UNICODE_NOT_PRESENT_OFFSET, 5350 },
  23574   { 0x213c, UNICODE_NOT_PRESENT_OFFSET, 1390 },
  23575   { 0x213d, UNICODE_NOT_PRESENT_OFFSET, 2418 },
  23576   { 0x213e, UNICODE_NOT_PRESENT_OFFSET, 5354 },
  23577   { 0x213f, UNICODE_NOT_PRESENT_OFFSET, 5357 },
  23578   { 0x2140, UNICODE_NOT_PRESENT_OFFSET, 5360 },
  23579   { 0x2145, UNICODE_NOT_PRESENT_OFFSET, 2316 },
  23580   { 0x2146, UNICODE_NOT_PRESENT_OFFSET, 2366 },
  23581   { 0x2147, UNICODE_NOT_PRESENT_OFFSET, 2368 },
  23582   { 0x2148, UNICODE_NOT_PRESENT_OFFSET, 2427 },
  23583   { 0x2149, UNICODE_NOT_PRESENT_OFFSET, 1176 },
  23584   { 0x2150, UNICODE_NOT_PRESENT_OFFSET, 5364 },
  23585   { 0x2151, UNICODE_NOT_PRESENT_OFFSET, 5370 },
  23586   { 0x2152, UNICODE_NOT_PRESENT_OFFSET, 5376 },
  23587   { 0x2153, UNICODE_NOT_PRESENT_OFFSET, 5383 },
  23588   { 0x2154, UNICODE_NOT_PRESENT_OFFSET, 5389 },
  23589   { 0x2155, UNICODE_NOT_PRESENT_OFFSET, 5395 },
  23590   { 0x2156, UNICODE_NOT_PRESENT_OFFSET, 5401 },
  23591   { 0x2157, UNICODE_NOT_PRESENT_OFFSET, 5407 },
  23592   { 0x2158, UNICODE_NOT_PRESENT_OFFSET, 5413 },
  23593   { 0x2159, UNICODE_NOT_PRESENT_OFFSET, 5419 },
  23594   { 0x215a, UNICODE_NOT_PRESENT_OFFSET, 5425 },
  23595   { 0x215b, UNICODE_NOT_PRESENT_OFFSET, 5431 },
  23596   { 0x215c, UNICODE_NOT_PRESENT_OFFSET, 5437 },
  23597   { 0x215d, UNICODE_NOT_PRESENT_OFFSET, 5443 },
  23598   { 0x215e, UNICODE_NOT_PRESENT_OFFSET, 5449 },
  23599   { 0x215f, UNICODE_NOT_PRESENT_OFFSET, 5455 },
  23600   { 0x2160, UNICODE_NOT_PRESENT_OFFSET, 2327 },
  23601   { 0x2161, UNICODE_NOT_PRESENT_OFFSET, 5460 },
  23602   { 0x2162, UNICODE_NOT_PRESENT_OFFSET, 5463 },
  23603   { 0x2163, UNICODE_NOT_PRESENT_OFFSET, 5467 },
  23604   { 0x2164, UNICODE_NOT_PRESENT_OFFSET, 5470 },
  23605   { 0x2165, UNICODE_NOT_PRESENT_OFFSET, 5472 },
  23606   { 0x2166, UNICODE_NOT_PRESENT_OFFSET, 5475 },
  23607   { 0x2167, UNICODE_NOT_PRESENT_OFFSET, 5479 },
  23608   { 0x2168, UNICODE_NOT_PRESENT_OFFSET, 5484 },
  23609   { 0x2169, UNICODE_NOT_PRESENT_OFFSET, 5487 },
  23610   { 0x216a, UNICODE_NOT_PRESENT_OFFSET, 5489 },
  23611   { 0x216b, UNICODE_NOT_PRESENT_OFFSET, 5492 },
  23612   { 0x216c, UNICODE_NOT_PRESENT_OFFSET, 2333 },
  23613   { 0x216d, UNICODE_NOT_PRESENT_OFFSET, 5292 },
  23614   { 0x216e, UNICODE_NOT_PRESENT_OFFSET, 2316 },
  23615   { 0x216f, UNICODE_NOT_PRESENT_OFFSET, 2335 },
  23616   { 0x2170, UNICODE_NOT_PRESENT_OFFSET, 2427 },
  23617   { 0x2171, UNICODE_NOT_PRESENT_OFFSET, 5496 },
  23618   { 0x2172, UNICODE_NOT_PRESENT_OFFSET, 5499 },
  23619   { 0x2173, UNICODE_NOT_PRESENT_OFFSET, 5503 },
  23620   { 0x2174, UNICODE_NOT_PRESENT_OFFSET, 2412 },
  23621   { 0x2175, UNICODE_NOT_PRESENT_OFFSET, 5506 },
  23622   { 0x2176, UNICODE_NOT_PRESENT_OFFSET, 5509 },
  23623   { 0x2177, UNICODE_NOT_PRESENT_OFFSET, 5513 },
  23624   { 0x2178, UNICODE_NOT_PRESENT_OFFSET, 5518 },
  23625   { 0x2179, UNICODE_NOT_PRESENT_OFFSET, 1222 },
  23626   { 0x217a, UNICODE_NOT_PRESENT_OFFSET, 5521 },
  23627   { 0x217b, UNICODE_NOT_PRESENT_OFFSET, 5524 },
  23628   { 0x217c, UNICODE_NOT_PRESENT_OFFSET, 1220 },
  23629   { 0x217d, UNICODE_NOT_PRESENT_OFFSET, 2435 },
  23630   { 0x217e, UNICODE_NOT_PRESENT_OFFSET, 2366 },
  23631   { 0x217f, UNICODE_NOT_PRESENT_OFFSET, 2383 },
  23632   { 0x2189, UNICODE_NOT_PRESENT_OFFSET, 5528 },
  23633   { 0x219a, 5534, UNICODE_NOT_PRESENT_OFFSET },
  23634   { 0x219b, 5540, UNICODE_NOT_PRESENT_OFFSET },
  23635   { 0x21ae, 5546, UNICODE_NOT_PRESENT_OFFSET },
  23636   { 0x21cd, 5552, UNICODE_NOT_PRESENT_OFFSET },
  23637   { 0x21ce, 5558, UNICODE_NOT_PRESENT_OFFSET },
  23638   { 0x21cf, 5564, UNICODE_NOT_PRESENT_OFFSET },
  23639   { 0x2204, 5570, UNICODE_NOT_PRESENT_OFFSET },
  23640   { 0x2209, 5576, UNICODE_NOT_PRESENT_OFFSET },
  23641   { 0x220c, 5582, UNICODE_NOT_PRESENT_OFFSET },
  23642   { 0x2224, 5588, UNICODE_NOT_PRESENT_OFFSET },
  23643   { 0x2226, 5594, UNICODE_NOT_PRESENT_OFFSET },
  23644   { 0x222c, UNICODE_NOT_PRESENT_OFFSET, 5600 },
  23645   { 0x222d, UNICODE_NOT_PRESENT_OFFSET, 5607 },
  23646   { 0x222f, UNICODE_NOT_PRESENT_OFFSET, 5617 },
  23647   { 0x2230, UNICODE_NOT_PRESENT_OFFSET, 5624 },
  23648   { 0x2241, 5634, UNICODE_NOT_PRESENT_OFFSET },
  23649   { 0x2244, 5640, UNICODE_NOT_PRESENT_OFFSET },
  23650   { 0x2247, 5646, UNICODE_NOT_PRESENT_OFFSET },
  23651   { 0x2249, 5652, UNICODE_NOT_PRESENT_OFFSET },
  23652   { 0x2260, 5658, UNICODE_NOT_PRESENT_OFFSET },
  23653   { 0x2262, 5662, UNICODE_NOT_PRESENT_OFFSET },
  23654   { 0x226d, 5668, UNICODE_NOT_PRESENT_OFFSET },
  23655   { 0x226e, 5674, UNICODE_NOT_PRESENT_OFFSET },
  23656   { 0x226f, 5678, UNICODE_NOT_PRESENT_OFFSET },
  23657   { 0x2270, 5682, UNICODE_NOT_PRESENT_OFFSET },
  23658   { 0x2271, 5688, UNICODE_NOT_PRESENT_OFFSET },
  23659   { 0x2274, 5694, UNICODE_NOT_PRESENT_OFFSET },
  23660   { 0x2275, 5700, UNICODE_NOT_PRESENT_OFFSET },
  23661   { 0x2278, 5706, UNICODE_NOT_PRESENT_OFFSET },
  23662   { 0x2279, 5712, UNICODE_NOT_PRESENT_OFFSET },
  23663   { 0x2280, 5718, UNICODE_NOT_PRESENT_OFFSET },
  23664   { 0x2281, 5724, UNICODE_NOT_PRESENT_OFFSET },
  23665   { 0x2284, 5730, UNICODE_NOT_PRESENT_OFFSET },
  23666   { 0x2285, 5736, UNICODE_NOT_PRESENT_OFFSET },
  23667   { 0x2288, 5742, UNICODE_NOT_PRESENT_OFFSET },
  23668   { 0x2289, 5748, UNICODE_NOT_PRESENT_OFFSET },
  23669   { 0x22ac, 5754, UNICODE_NOT_PRESENT_OFFSET },
  23670   { 0x22ad, 5760, UNICODE_NOT_PRESENT_OFFSET },
  23671   { 0x22ae, 5766, UNICODE_NOT_PRESENT_OFFSET },
  23672   { 0x22af, 5772, UNICODE_NOT_PRESENT_OFFSET },
  23673   { 0x22e0, 5778, UNICODE_NOT_PRESENT_OFFSET },
  23674   { 0x22e1, 5784, UNICODE_NOT_PRESENT_OFFSET },
  23675   { 0x22e2, 5790, UNICODE_NOT_PRESENT_OFFSET },
  23676   { 0x22e3, 5796, UNICODE_NOT_PRESENT_OFFSET },
  23677   { 0x22ea, 5802, UNICODE_NOT_PRESENT_OFFSET },
  23678   { 0x22eb, 5808, UNICODE_NOT_PRESENT_OFFSET },
  23679   { 0x22ec, 5814, UNICODE_NOT_PRESENT_OFFSET },
  23680   { 0x22ed, 5820, UNICODE_NOT_PRESENT_OFFSET },
  23681   { 0x2329, 5826, UNICODE_NOT_PRESENT_OFFSET },
  23682   { 0x232a, 5830, UNICODE_NOT_PRESENT_OFFSET },
  23683   { 0x2460, UNICODE_NOT_PRESENT_OFFSET, 27 },
  23684   { 0x2461, UNICODE_NOT_PRESENT_OFFSET, 12 },
  23685   { 0x2462, UNICODE_NOT_PRESENT_OFFSET, 14 },
  23686   { 0x2463, UNICODE_NOT_PRESENT_OFFSET, 5255 },
  23687   { 0x2464, UNICODE_NOT_PRESENT_OFFSET, 5257 },
  23688   { 0x2465, UNICODE_NOT_PRESENT_OFFSET, 5259 },
  23689   { 0x2466, UNICODE_NOT_PRESENT_OFFSET, 5261 },
  23690   { 0x2467, UNICODE_NOT_PRESENT_OFFSET, 5263 },
  23691   { 0x2468, UNICODE_NOT_PRESENT_OFFSET, 5265 },
  23692   { 0x2469, UNICODE_NOT_PRESENT_OFFSET, 5834 },
  23693   { 0x246a, UNICODE_NOT_PRESENT_OFFSET, 5837 },
  23694   { 0x246b, UNICODE_NOT_PRESENT_OFFSET, 5840 },
  23695   { 0x246c, UNICODE_NOT_PRESENT_OFFSET, 5843 },
  23696   { 0x246d, UNICODE_NOT_PRESENT_OFFSET, 5846 },
  23697   { 0x246e, UNICODE_NOT_PRESENT_OFFSET, 5849 },
  23698   { 0x246f, UNICODE_NOT_PRESENT_OFFSET, 5852 },
  23699   { 0x2470, UNICODE_NOT_PRESENT_OFFSET, 5855 },
  23700   { 0x2471, UNICODE_NOT_PRESENT_OFFSET, 5858 },
  23701   { 0x2472, UNICODE_NOT_PRESENT_OFFSET, 5861 },
  23702   { 0x2473, UNICODE_NOT_PRESENT_OFFSET, 5864 },
  23703   { 0x2474, UNICODE_NOT_PRESENT_OFFSET, 5867 },
  23704   { 0x2475, UNICODE_NOT_PRESENT_OFFSET, 5871 },
  23705   { 0x2476, UNICODE_NOT_PRESENT_OFFSET, 5875 },
  23706   { 0x2477, UNICODE_NOT_PRESENT_OFFSET, 5879 },
  23707   { 0x2478, UNICODE_NOT_PRESENT_OFFSET, 5883 },
  23708   { 0x2479, UNICODE_NOT_PRESENT_OFFSET, 5887 },
  23709   { 0x247a, UNICODE_NOT_PRESENT_OFFSET, 5891 },
  23710   { 0x247b, UNICODE_NOT_PRESENT_OFFSET, 5895 },
  23711   { 0x247c, UNICODE_NOT_PRESENT_OFFSET, 5899 },
  23712   { 0x247d, UNICODE_NOT_PRESENT_OFFSET, 5903 },
  23713   { 0x247e, UNICODE_NOT_PRESENT_OFFSET, 5908 },
  23714   { 0x247f, UNICODE_NOT_PRESENT_OFFSET, 5913 },
  23715   { 0x2480, UNICODE_NOT_PRESENT_OFFSET, 5918 },
  23716   { 0x2481, UNICODE_NOT_PRESENT_OFFSET, 5923 },
  23717   { 0x2482, UNICODE_NOT_PRESENT_OFFSET, 5928 },
  23718   { 0x2483, UNICODE_NOT_PRESENT_OFFSET, 5933 },
  23719   { 0x2484, UNICODE_NOT_PRESENT_OFFSET, 5938 },
  23720   { 0x2485, UNICODE_NOT_PRESENT_OFFSET, 5943 },
  23721   { 0x2486, UNICODE_NOT_PRESENT_OFFSET, 5948 },
  23722   { 0x2487, UNICODE_NOT_PRESENT_OFFSET, 5953 },
  23723   { 0x2488, UNICODE_NOT_PRESENT_OFFSET, 5958 },
  23724   { 0x2489, UNICODE_NOT_PRESENT_OFFSET, 5961 },
  23725   { 0x248a, UNICODE_NOT_PRESENT_OFFSET, 5964 },
  23726   { 0x248b, UNICODE_NOT_PRESENT_OFFSET, 5967 },
  23727   { 0x248c, UNICODE_NOT_PRESENT_OFFSET, 5970 },
  23728   { 0x248d, UNICODE_NOT_PRESENT_OFFSET, 5973 },
  23729   { 0x248e, UNICODE_NOT_PRESENT_OFFSET, 5976 },
  23730   { 0x248f, UNICODE_NOT_PRESENT_OFFSET, 5979 },
  23731   { 0x2490, UNICODE_NOT_PRESENT_OFFSET, 5982 },
  23732   { 0x2491, UNICODE_NOT_PRESENT_OFFSET, 5985 },
  23733   { 0x2492, UNICODE_NOT_PRESENT_OFFSET, 5989 },
  23734   { 0x2493, UNICODE_NOT_PRESENT_OFFSET, 5993 },
  23735   { 0x2494, UNICODE_NOT_PRESENT_OFFSET, 5997 },
  23736   { 0x2495, UNICODE_NOT_PRESENT_OFFSET, 6001 },
  23737   { 0x2496, UNICODE_NOT_PRESENT_OFFSET, 6005 },
  23738   { 0x2497, UNICODE_NOT_PRESENT_OFFSET, 6009 },
  23739   { 0x2498, UNICODE_NOT_PRESENT_OFFSET, 6013 },
  23740   { 0x2499, UNICODE_NOT_PRESENT_OFFSET, 6017 },
  23741   { 0x249a, UNICODE_NOT_PRESENT_OFFSET, 6021 },
  23742   { 0x249b, UNICODE_NOT_PRESENT_OFFSET, 6025 },
  23743   { 0x249c, UNICODE_NOT_PRESENT_OFFSET, 6029 },
  23744   { 0x249d, UNICODE_NOT_PRESENT_OFFSET, 6033 },
  23745   { 0x249e, UNICODE_NOT_PRESENT_OFFSET, 6037 },
  23746   { 0x249f, UNICODE_NOT_PRESENT_OFFSET, 6041 },
  23747   { 0x24a0, UNICODE_NOT_PRESENT_OFFSET, 6045 },
  23748   { 0x24a1, UNICODE_NOT_PRESENT_OFFSET, 6049 },
  23749   { 0x24a2, UNICODE_NOT_PRESENT_OFFSET, 6053 },
  23750   { 0x24a3, UNICODE_NOT_PRESENT_OFFSET, 6057 },
  23751   { 0x24a4, UNICODE_NOT_PRESENT_OFFSET, 6061 },
  23752   { 0x24a5, UNICODE_NOT_PRESENT_OFFSET, 6065 },
  23753   { 0x24a6, UNICODE_NOT_PRESENT_OFFSET, 6069 },
  23754   { 0x24a7, UNICODE_NOT_PRESENT_OFFSET, 6073 },
  23755   { 0x24a8, UNICODE_NOT_PRESENT_OFFSET, 6077 },
  23756   { 0x24a9, UNICODE_NOT_PRESENT_OFFSET, 6081 },
  23757   { 0x24aa, UNICODE_NOT_PRESENT_OFFSET, 6085 },
  23758   { 0x24ab, UNICODE_NOT_PRESENT_OFFSET, 6089 },
  23759   { 0x24ac, UNICODE_NOT_PRESENT_OFFSET, 6093 },
  23760   { 0x24ad, UNICODE_NOT_PRESENT_OFFSET, 6097 },
  23761   { 0x24ae, UNICODE_NOT_PRESENT_OFFSET, 6101 },
  23762   { 0x24af, UNICODE_NOT_PRESENT_OFFSET, 6105 },
  23763   { 0x24b0, UNICODE_NOT_PRESENT_OFFSET, 6109 },
  23764   { 0x24b1, UNICODE_NOT_PRESENT_OFFSET, 6113 },
  23765   { 0x24b2, UNICODE_NOT_PRESENT_OFFSET, 6117 },
  23766   { 0x24b3, UNICODE_NOT_PRESENT_OFFSET, 6121 },
  23767   { 0x24b4, UNICODE_NOT_PRESENT_OFFSET, 6125 },
  23768   { 0x24b5, UNICODE_NOT_PRESENT_OFFSET, 6129 },
  23769   { 0x24b6, UNICODE_NOT_PRESENT_OFFSET, 2309 },
  23770   { 0x24b7, UNICODE_NOT_PRESENT_OFFSET, 2314 },
  23771   { 0x24b8, UNICODE_NOT_PRESENT_OFFSET, 5292 },
  23772   { 0x24b9, UNICODE_NOT_PRESENT_OFFSET, 2316 },
  23773   { 0x24ba, UNICODE_NOT_PRESENT_OFFSET, 2318 },
  23774   { 0x24bb, UNICODE_NOT_PRESENT_OFFSET, 5336 },
  23775   { 0x24bc, UNICODE_NOT_PRESENT_OFFSET, 2323 },
  23776   { 0x24bd, UNICODE_NOT_PRESENT_OFFSET, 2325 },
  23777   { 0x24be, UNICODE_NOT_PRESENT_OFFSET, 2327 },
  23778   { 0x24bf, UNICODE_NOT_PRESENT_OFFSET, 2329 },
  23779   { 0x24c0, UNICODE_NOT_PRESENT_OFFSET, 2331 },
  23780   { 0x24c1, UNICODE_NOT_PRESENT_OFFSET, 2333 },
  23781   { 0x24c2, UNICODE_NOT_PRESENT_OFFSET, 2335 },
  23782   { 0x24c3, UNICODE_NOT_PRESENT_OFFSET, 2337 },
  23783   { 0x24c4, UNICODE_NOT_PRESENT_OFFSET, 2339 },
  23784   { 0x24c5, UNICODE_NOT_PRESENT_OFFSET, 2344 },
  23785   { 0x24c6, UNICODE_NOT_PRESENT_OFFSET, 5319 },
  23786   { 0x24c7, UNICODE_NOT_PRESENT_OFFSET, 2346 },
  23787   { 0x24c8, UNICODE_NOT_PRESENT_OFFSET, 6133 },
  23788   { 0x24c9, UNICODE_NOT_PRESENT_OFFSET, 2348 },
  23789   { 0x24ca, UNICODE_NOT_PRESENT_OFFSET, 2350 },
  23790   { 0x24cb, UNICODE_NOT_PRESENT_OFFSET, 5470 },
  23791   { 0x24cc, UNICODE_NOT_PRESENT_OFFSET, 2352 },
  23792   { 0x24cd, UNICODE_NOT_PRESENT_OFFSET, 5487 },
  23793   { 0x24ce, UNICODE_NOT_PRESENT_OFFSET, 6135 },
  23794   { 0x24cf, UNICODE_NOT_PRESENT_OFFSET, 5331 },
  23795   { 0x24d0, UNICODE_NOT_PRESENT_OFFSET, 6 },
  23796   { 0x24d1, UNICODE_NOT_PRESENT_OFFSET, 2364 },
  23797   { 0x24d2, UNICODE_NOT_PRESENT_OFFSET, 2435 },
  23798   { 0x24d3, UNICODE_NOT_PRESENT_OFFSET, 2366 },
  23799   { 0x24d4, UNICODE_NOT_PRESENT_OFFSET, 2368 },
  23800   { 0x24d5, UNICODE_NOT_PRESENT_OFFSET, 2443 },
  23801   { 0x24d6, UNICODE_NOT_PRESENT_OFFSET, 2379 },
  23802   { 0x24d7, UNICODE_NOT_PRESENT_OFFSET, 1171 },
  23803   { 0x24d8, UNICODE_NOT_PRESENT_OFFSET, 2427 },
  23804   { 0x24d9, UNICODE_NOT_PRESENT_OFFSET, 1176 },
  23805   { 0x24da, UNICODE_NOT_PRESENT_OFFSET, 2381 },
  23806   { 0x24db, UNICODE_NOT_PRESENT_OFFSET, 1220 },
  23807   { 0x24dc, UNICODE_NOT_PRESENT_OFFSET, 2383 },
  23808   { 0x24dd, UNICODE_NOT_PRESENT_OFFSET, 5279 },
  23809   { 0x24de, UNICODE_NOT_PRESENT_OFFSET, 29 },
  23810   { 0x24df, UNICODE_NOT_PRESENT_OFFSET, 2399 },
  23811   { 0x24e0, UNICODE_NOT_PRESENT_OFFSET, 6137 },
  23812   { 0x24e1, UNICODE_NOT_PRESENT_OFFSET, 1178 },
  23813   { 0x24e2, UNICODE_NOT_PRESENT_OFFSET, 711 },
  23814   { 0x24e3, UNICODE_NOT_PRESENT_OFFSET, 2401 },
  23815   { 0x24e4, UNICODE_NOT_PRESENT_OFFSET, 2403 },
  23816   { 0x24e5, UNICODE_NOT_PRESENT_OFFSET, 2412 },
  23817   { 0x24e6, UNICODE_NOT_PRESENT_OFFSET, 1189 },
  23818   { 0x24e7, UNICODE_NOT_PRESENT_OFFSET, 1222 },
  23819   { 0x24e8, UNICODE_NOT_PRESENT_OFFSET, 1191 },
  23820   { 0x24e9, UNICODE_NOT_PRESENT_OFFSET, 2526 },
  23821   { 0x24ea, UNICODE_NOT_PRESENT_OFFSET, 5253 },
  23822   { 0x2a0c, UNICODE_NOT_PRESENT_OFFSET, 6139 },
  23823   { 0x2a74, UNICODE_NOT_PRESENT_OFFSET, 6152 },
  23824   { 0x2a75, UNICODE_NOT_PRESENT_OFFSET, 6156 },
  23825   { 0x2a76, UNICODE_NOT_PRESENT_OFFSET, 6159 },
  23826   { 0x2adc, 6163, UNICODE_NOT_PRESENT_OFFSET },
  23827   { 0x2c7c, UNICODE_NOT_PRESENT_OFFSET, 1176 },
  23828   { 0x2c7d, UNICODE_NOT_PRESENT_OFFSET, 5470 },
  23829   { 0x2d6f, UNICODE_NOT_PRESENT_OFFSET, 6169 },
  23830   { 0x2e9f, UNICODE_NOT_PRESENT_OFFSET, 6173 },
  23831   { 0x2ef3, UNICODE_NOT_PRESENT_OFFSET, 6177 },
  23832   { 0x2f00, UNICODE_NOT_PRESENT_OFFSET, 6181 },
  23833   { 0x2f01, UNICODE_NOT_PRESENT_OFFSET, 6185 },
  23834   { 0x2f02, UNICODE_NOT_PRESENT_OFFSET, 6189 },
  23835   { 0x2f03, UNICODE_NOT_PRESENT_OFFSET, 6193 },
  23836   { 0x2f04, UNICODE_NOT_PRESENT_OFFSET, 6197 },
  23837   { 0x2f05, UNICODE_NOT_PRESENT_OFFSET, 6201 },
  23838   { 0x2f06, UNICODE_NOT_PRESENT_OFFSET, 6205 },
  23839   { 0x2f07, UNICODE_NOT_PRESENT_OFFSET, 6209 },
  23840   { 0x2f08, UNICODE_NOT_PRESENT_OFFSET, 6213 },
  23841   { 0x2f09, UNICODE_NOT_PRESENT_OFFSET, 6217 },
  23842   { 0x2f0a, UNICODE_NOT_PRESENT_OFFSET, 6221 },
  23843   { 0x2f0b, UNICODE_NOT_PRESENT_OFFSET, 6225 },
  23844   { 0x2f0c, UNICODE_NOT_PRESENT_OFFSET, 6229 },
  23845   { 0x2f0d, UNICODE_NOT_PRESENT_OFFSET, 6233 },
  23846   { 0x2f0e, UNICODE_NOT_PRESENT_OFFSET, 6237 },
  23847   { 0x2f0f, UNICODE_NOT_PRESENT_OFFSET, 6241 },
  23848   { 0x2f10, UNICODE_NOT_PRESENT_OFFSET, 6245 },
  23849   { 0x2f11, UNICODE_NOT_PRESENT_OFFSET, 6249 },
  23850   { 0x2f12, UNICODE_NOT_PRESENT_OFFSET, 6253 },
  23851   { 0x2f13, UNICODE_NOT_PRESENT_OFFSET, 6257 },
  23852   { 0x2f14, UNICODE_NOT_PRESENT_OFFSET, 6261 },
  23853   { 0x2f15, UNICODE_NOT_PRESENT_OFFSET, 6265 },
  23854   { 0x2f16, UNICODE_NOT_PRESENT_OFFSET, 6269 },
  23855   { 0x2f17, UNICODE_NOT_PRESENT_OFFSET, 6273 },
  23856   { 0x2f18, UNICODE_NOT_PRESENT_OFFSET, 6277 },
  23857   { 0x2f19, UNICODE_NOT_PRESENT_OFFSET, 6281 },
  23858   { 0x2f1a, UNICODE_NOT_PRESENT_OFFSET, 6285 },
  23859   { 0x2f1b, UNICODE_NOT_PRESENT_OFFSET, 6289 },
  23860   { 0x2f1c, UNICODE_NOT_PRESENT_OFFSET, 6293 },
  23861   { 0x2f1d, UNICODE_NOT_PRESENT_OFFSET, 6297 },
  23862   { 0x2f1e, UNICODE_NOT_PRESENT_OFFSET, 6301 },
  23863   { 0x2f1f, UNICODE_NOT_PRESENT_OFFSET, 6305 },
  23864   { 0x2f20, UNICODE_NOT_PRESENT_OFFSET, 6309 },
  23865   { 0x2f21, UNICODE_NOT_PRESENT_OFFSET, 6313 },
  23866   { 0x2f22, UNICODE_NOT_PRESENT_OFFSET, 6317 },
  23867   { 0x2f23, UNICODE_NOT_PRESENT_OFFSET, 6321 },
  23868   { 0x2f24, UNICODE_NOT_PRESENT_OFFSET, 6325 },
  23869   { 0x2f25, UNICODE_NOT_PRESENT_OFFSET, 6329 },
  23870   { 0x2f26, UNICODE_NOT_PRESENT_OFFSET, 6333 },
  23871   { 0x2f27, UNICODE_NOT_PRESENT_OFFSET, 6337 },
  23872   { 0x2f28, UNICODE_NOT_PRESENT_OFFSET, 6341 },
  23873   { 0x2f29, UNICODE_NOT_PRESENT_OFFSET, 6345 },
  23874   { 0x2f2a, UNICODE_NOT_PRESENT_OFFSET, 6349 },
  23875   { 0x2f2b, UNICODE_NOT_PRESENT_OFFSET, 6353 },
  23876   { 0x2f2c, UNICODE_NOT_PRESENT_OFFSET, 6357 },
  23877   { 0x2f2d, UNICODE_NOT_PRESENT_OFFSET, 6361 },
  23878   { 0x2f2e, UNICODE_NOT_PRESENT_OFFSET, 6365 },
  23879   { 0x2f2f, UNICODE_NOT_PRESENT_OFFSET, 6369 },
  23880   { 0x2f30, UNICODE_NOT_PRESENT_OFFSET, 6373 },
  23881   { 0x2f31, UNICODE_NOT_PRESENT_OFFSET, 6377 },
  23882   { 0x2f32, UNICODE_NOT_PRESENT_OFFSET, 6381 },
  23883   { 0x2f33, UNICODE_NOT_PRESENT_OFFSET, 6385 },
  23884   { 0x2f34, UNICODE_NOT_PRESENT_OFFSET, 6389 },
  23885   { 0x2f35, UNICODE_NOT_PRESENT_OFFSET, 6393 },
  23886   { 0x2f36, UNICODE_NOT_PRESENT_OFFSET, 6397 },
  23887   { 0x2f37, UNICODE_NOT_PRESENT_OFFSET, 6401 },
  23888   { 0x2f38, UNICODE_NOT_PRESENT_OFFSET, 6405 },
  23889   { 0x2f39, UNICODE_NOT_PRESENT_OFFSET, 6409 },
  23890   { 0x2f3a, UNICODE_NOT_PRESENT_OFFSET, 6413 },
  23891   { 0x2f3b, UNICODE_NOT_PRESENT_OFFSET, 6417 },
  23892   { 0x2f3c, UNICODE_NOT_PRESENT_OFFSET, 6421 },
  23893   { 0x2f3d, UNICODE_NOT_PRESENT_OFFSET, 6425 },
  23894   { 0x2f3e, UNICODE_NOT_PRESENT_OFFSET, 6429 },
  23895   { 0x2f3f, UNICODE_NOT_PRESENT_OFFSET, 6433 },
  23896   { 0x2f40, UNICODE_NOT_PRESENT_OFFSET, 6437 },
  23897   { 0x2f41, UNICODE_NOT_PRESENT_OFFSET, 6441 },
  23898   { 0x2f42, UNICODE_NOT_PRESENT_OFFSET, 6445 },
  23899   { 0x2f43, UNICODE_NOT_PRESENT_OFFSET, 6449 },
  23900   { 0x2f44, UNICODE_NOT_PRESENT_OFFSET, 6453 },
  23901   { 0x2f45, UNICODE_NOT_PRESENT_OFFSET, 6457 },
  23902   { 0x2f46, UNICODE_NOT_PRESENT_OFFSET, 6461 },
  23903   { 0x2f47, UNICODE_NOT_PRESENT_OFFSET, 6465 },
  23904   { 0x2f48, UNICODE_NOT_PRESENT_OFFSET, 6469 },
  23905   { 0x2f49, UNICODE_NOT_PRESENT_OFFSET, 6473 },
  23906   { 0x2f4a, UNICODE_NOT_PRESENT_OFFSET, 6477 },
  23907   { 0x2f4b, UNICODE_NOT_PRESENT_OFFSET, 6481 },
  23908   { 0x2f4c, UNICODE_NOT_PRESENT_OFFSET, 6485 },
  23909   { 0x2f4d, UNICODE_NOT_PRESENT_OFFSET, 6489 },
  23910   { 0x2f4e, UNICODE_NOT_PRESENT_OFFSET, 6493 },
  23911   { 0x2f4f, UNICODE_NOT_PRESENT_OFFSET, 6497 },
  23912   { 0x2f50, UNICODE_NOT_PRESENT_OFFSET, 6501 },
  23913   { 0x2f51, UNICODE_NOT_PRESENT_OFFSET, 6505 },
  23914   { 0x2f52, UNICODE_NOT_PRESENT_OFFSET, 6509 },
  23915   { 0x2f53, UNICODE_NOT_PRESENT_OFFSET, 6513 },
  23916   { 0x2f54, UNICODE_NOT_PRESENT_OFFSET, 6517 },
  23917   { 0x2f55, UNICODE_NOT_PRESENT_OFFSET, 6521 },
  23918   { 0x2f56, UNICODE_NOT_PRESENT_OFFSET, 6525 },
  23919   { 0x2f57, UNICODE_NOT_PRESENT_OFFSET, 6529 },
  23920   { 0x2f58, UNICODE_NOT_PRESENT_OFFSET, 6533 },
  23921   { 0x2f59, UNICODE_NOT_PRESENT_OFFSET, 6537 },
  23922   { 0x2f5a, UNICODE_NOT_PRESENT_OFFSET, 6541 },
  23923   { 0x2f5b, UNICODE_NOT_PRESENT_OFFSET, 6545 },
  23924   { 0x2f5c, UNICODE_NOT_PRESENT_OFFSET, 6549 },
  23925   { 0x2f5d, UNICODE_NOT_PRESENT_OFFSET, 6553 },
  23926   { 0x2f5e, UNICODE_NOT_PRESENT_OFFSET, 6557 },
  23927   { 0x2f5f, UNICODE_NOT_PRESENT_OFFSET, 6561 },
  23928   { 0x2f60, UNICODE_NOT_PRESENT_OFFSET, 6565 },
  23929   { 0x2f61, UNICODE_NOT_PRESENT_OFFSET, 6569 },
  23930   { 0x2f62, UNICODE_NOT_PRESENT_OFFSET, 6573 },
  23931   { 0x2f63, UNICODE_NOT_PRESENT_OFFSET, 6577 },
  23932   { 0x2f64, UNICODE_NOT_PRESENT_OFFSET, 6581 },
  23933   { 0x2f65, UNICODE_NOT_PRESENT_OFFSET, 6585 },
  23934   { 0x2f66, UNICODE_NOT_PRESENT_OFFSET, 6589 },
  23935   { 0x2f67, UNICODE_NOT_PRESENT_OFFSET, 6593 },
  23936   { 0x2f68, UNICODE_NOT_PRESENT_OFFSET, 6597 },
  23937   { 0x2f69, UNICODE_NOT_PRESENT_OFFSET, 6601 },
  23938   { 0x2f6a, UNICODE_NOT_PRESENT_OFFSET, 6605 },
  23939   { 0x2f6b, UNICODE_NOT_PRESENT_OFFSET, 6609 },
  23940   { 0x2f6c, UNICODE_NOT_PRESENT_OFFSET, 6613 },
  23941   { 0x2f6d, UNICODE_NOT_PRESENT_OFFSET, 6617 },
  23942   { 0x2f6e, UNICODE_NOT_PRESENT_OFFSET, 6621 },
  23943   { 0x2f6f, UNICODE_NOT_PRESENT_OFFSET, 6625 },
  23944   { 0x2f70, UNICODE_NOT_PRESENT_OFFSET, 6629 },
  23945   { 0x2f71, UNICODE_NOT_PRESENT_OFFSET, 6633 },
  23946   { 0x2f72, UNICODE_NOT_PRESENT_OFFSET, 6637 },
  23947   { 0x2f73, UNICODE_NOT_PRESENT_OFFSET, 6641 },
  23948   { 0x2f74, UNICODE_NOT_PRESENT_OFFSET, 6645 },
  23949   { 0x2f75, UNICODE_NOT_PRESENT_OFFSET, 6649 },
  23950   { 0x2f76, UNICODE_NOT_PRESENT_OFFSET, 6653 },
  23951   { 0x2f77, UNICODE_NOT_PRESENT_OFFSET, 6657 },
  23952   { 0x2f78, UNICODE_NOT_PRESENT_OFFSET, 6661 },
  23953   { 0x2f79, UNICODE_NOT_PRESENT_OFFSET, 6665 },
  23954   { 0x2f7a, UNICODE_NOT_PRESENT_OFFSET, 6669 },
  23955   { 0x2f7b, UNICODE_NOT_PRESENT_OFFSET, 6673 },
  23956   { 0x2f7c, UNICODE_NOT_PRESENT_OFFSET, 6677 },
  23957   { 0x2f7d, UNICODE_NOT_PRESENT_OFFSET, 6681 },
  23958   { 0x2f7e, UNICODE_NOT_PRESENT_OFFSET, 6685 },
  23959   { 0x2f7f, UNICODE_NOT_PRESENT_OFFSET, 6689 },
  23960   { 0x2f80, UNICODE_NOT_PRESENT_OFFSET, 6693 },
  23961   { 0x2f81, UNICODE_NOT_PRESENT_OFFSET, 6697 },
  23962   { 0x2f82, UNICODE_NOT_PRESENT_OFFSET, 6701 },
  23963   { 0x2f83, UNICODE_NOT_PRESENT_OFFSET, 6705 },
  23964   { 0x2f84, UNICODE_NOT_PRESENT_OFFSET, 6709 },
  23965   { 0x2f85, UNICODE_NOT_PRESENT_OFFSET, 6713 },
  23966   { 0x2f86, UNICODE_NOT_PRESENT_OFFSET, 6717 },
  23967   { 0x2f87, UNICODE_NOT_PRESENT_OFFSET, 6721 },
  23968   { 0x2f88, UNICODE_NOT_PRESENT_OFFSET, 6725 },
  23969   { 0x2f89, UNICODE_NOT_PRESENT_OFFSET, 6729 },
  23970   { 0x2f8a, UNICODE_NOT_PRESENT_OFFSET, 6733 },
  23971   { 0x2f8b, UNICODE_NOT_PRESENT_OFFSET, 6737 },
  23972   { 0x2f8c, UNICODE_NOT_PRESENT_OFFSET, 6741 },
  23973   { 0x2f8d, UNICODE_NOT_PRESENT_OFFSET, 6745 },
  23974   { 0x2f8e, UNICODE_NOT_PRESENT_OFFSET, 6749 },
  23975   { 0x2f8f, UNICODE_NOT_PRESENT_OFFSET, 6753 },
  23976   { 0x2f90, UNICODE_NOT_PRESENT_OFFSET, 6757 },
  23977   { 0x2f91, UNICODE_NOT_PRESENT_OFFSET, 6761 },
  23978   { 0x2f92, UNICODE_NOT_PRESENT_OFFSET, 6765 },
  23979   { 0x2f93, UNICODE_NOT_PRESENT_OFFSET, 6769 },
  23980   { 0x2f94, UNICODE_NOT_PRESENT_OFFSET, 6773 },
  23981   { 0x2f95, UNICODE_NOT_PRESENT_OFFSET, 6777 },
  23982   { 0x2f96, UNICODE_NOT_PRESENT_OFFSET, 6781 },
  23983   { 0x2f97, UNICODE_NOT_PRESENT_OFFSET, 6785 },
  23984   { 0x2f98, UNICODE_NOT_PRESENT_OFFSET, 6789 },
  23985   { 0x2f99, UNICODE_NOT_PRESENT_OFFSET, 6793 },
  23986   { 0x2f9a, UNICODE_NOT_PRESENT_OFFSET, 6797 },
  23987   { 0x2f9b, UNICODE_NOT_PRESENT_OFFSET, 6801 },
  23988   { 0x2f9c, UNICODE_NOT_PRESENT_OFFSET, 6805 },
  23989   { 0x2f9d, UNICODE_NOT_PRESENT_OFFSET, 6809 },
  23990   { 0x2f9e, UNICODE_NOT_PRESENT_OFFSET, 6813 },
  23991   { 0x2f9f, UNICODE_NOT_PRESENT_OFFSET, 6817 },
  23992   { 0x2fa0, UNICODE_NOT_PRESENT_OFFSET, 6821 },
  23993   { 0x2fa1, UNICODE_NOT_PRESENT_OFFSET, 6825 },
  23994   { 0x2fa2, UNICODE_NOT_PRESENT_OFFSET, 6829 },
  23995   { 0x2fa3, UNICODE_NOT_PRESENT_OFFSET, 6833 },
  23996   { 0x2fa4, UNICODE_NOT_PRESENT_OFFSET, 6837 },
  23997   { 0x2fa5, UNICODE_NOT_PRESENT_OFFSET, 6841 },
  23998   { 0x2fa6, UNICODE_NOT_PRESENT_OFFSET, 6845 },
  23999   { 0x2fa7, UNICODE_NOT_PRESENT_OFFSET, 6849 },
  24000   { 0x2fa8, UNICODE_NOT_PRESENT_OFFSET, 6853 },
  24001   { 0x2fa9, UNICODE_NOT_PRESENT_OFFSET, 6857 },
  24002   { 0x2faa, UNICODE_NOT_PRESENT_OFFSET, 6861 },
  24003   { 0x2fab, UNICODE_NOT_PRESENT_OFFSET, 6865 },
  24004   { 0x2fac, UNICODE_NOT_PRESENT_OFFSET, 6869 },
  24005   { 0x2fad, UNICODE_NOT_PRESENT_OFFSET, 6873 },
  24006   { 0x2fae, UNICODE_NOT_PRESENT_OFFSET, 6877 },
  24007   { 0x2faf, UNICODE_NOT_PRESENT_OFFSET, 6881 },
  24008   { 0x2fb0, UNICODE_NOT_PRESENT_OFFSET, 6885 },
  24009   { 0x2fb1, UNICODE_NOT_PRESENT_OFFSET, 6889 },
  24010   { 0x2fb2, UNICODE_NOT_PRESENT_OFFSET, 6893 },
  24011   { 0x2fb3, UNICODE_NOT_PRESENT_OFFSET, 6897 },
  24012   { 0x2fb4, UNICODE_NOT_PRESENT_OFFSET, 6901 },
  24013   { 0x2fb5, UNICODE_NOT_PRESENT_OFFSET, 6905 },
  24014   { 0x2fb6, UNICODE_NOT_PRESENT_OFFSET, 6909 },
  24015   { 0x2fb7, UNICODE_NOT_PRESENT_OFFSET, 6913 },
  24016   { 0x2fb8, UNICODE_NOT_PRESENT_OFFSET, 6917 },
  24017   { 0x2fb9, UNICODE_NOT_PRESENT_OFFSET, 6921 },
  24018   { 0x2fba, UNICODE_NOT_PRESENT_OFFSET, 6925 },
  24019   { 0x2fbb, UNICODE_NOT_PRESENT_OFFSET, 6929 },
  24020   { 0x2fbc, UNICODE_NOT_PRESENT_OFFSET, 6933 },
  24021   { 0x2fbd, UNICODE_NOT_PRESENT_OFFSET, 6937 },
  24022   { 0x2fbe, UNICODE_NOT_PRESENT_OFFSET, 6941 },
  24023   { 0x2fbf, UNICODE_NOT_PRESENT_OFFSET, 6945 },
  24024   { 0x2fc0, UNICODE_NOT_PRESENT_OFFSET, 6949 },
  24025   { 0x2fc1, UNICODE_NOT_PRESENT_OFFSET, 6953 },
  24026   { 0x2fc2, UNICODE_NOT_PRESENT_OFFSET, 6957 },
  24027   { 0x2fc3, UNICODE_NOT_PRESENT_OFFSET, 6961 },
  24028   { 0x2fc4, UNICODE_NOT_PRESENT_OFFSET, 6965 },
  24029   { 0x2fc5, UNICODE_NOT_PRESENT_OFFSET, 6969 },
  24030   { 0x2fc6, UNICODE_NOT_PRESENT_OFFSET, 6973 },
  24031   { 0x2fc7, UNICODE_NOT_PRESENT_OFFSET, 6977 },
  24032   { 0x2fc8, UNICODE_NOT_PRESENT_OFFSET, 6981 },
  24033   { 0x2fc9, UNICODE_NOT_PRESENT_OFFSET, 6985 },
  24034   { 0x2fca, UNICODE_NOT_PRESENT_OFFSET, 6989 },
  24035   { 0x2fcb, UNICODE_NOT_PRESENT_OFFSET, 6993 },
  24036   { 0x2fcc, UNICODE_NOT_PRESENT_OFFSET, 6997 },
  24037   { 0x2fcd, UNICODE_NOT_PRESENT_OFFSET, 7001 },
  24038   { 0x2fce, UNICODE_NOT_PRESENT_OFFSET, 7005 },
  24039   { 0x2fcf, UNICODE_NOT_PRESENT_OFFSET, 7009 },
  24040   { 0x2fd0, UNICODE_NOT_PRESENT_OFFSET, 7013 },
  24041   { 0x2fd1, UNICODE_NOT_PRESENT_OFFSET, 7017 },
  24042   { 0x2fd2, UNICODE_NOT_PRESENT_OFFSET, 7021 },
  24043   { 0x2fd3, UNICODE_NOT_PRESENT_OFFSET, 7025 },
  24044   { 0x2fd4, UNICODE_NOT_PRESENT_OFFSET, 7029 },
  24045   { 0x2fd5, UNICODE_NOT_PRESENT_OFFSET, 7033 },
  24046   { 0x3000, UNICODE_NOT_PRESENT_OFFSET, 0 },
  24047   { 0x3036, UNICODE_NOT_PRESENT_OFFSET, 7037 },
  24048   { 0x3038, UNICODE_NOT_PRESENT_OFFSET, 6273 },
  24049   { 0x3039, UNICODE_NOT_PRESENT_OFFSET, 7041 },
  24050   { 0x303a, UNICODE_NOT_PRESENT_OFFSET, 7045 },
  24051   { 0x304c, 7049, UNICODE_NOT_PRESENT_OFFSET },
  24052   { 0x304e, 7056, UNICODE_NOT_PRESENT_OFFSET },
  24053   { 0x3050, 7063, UNICODE_NOT_PRESENT_OFFSET },
  24054   { 0x3052, 7070, UNICODE_NOT_PRESENT_OFFSET },
  24055   { 0x3054, 7077, UNICODE_NOT_PRESENT_OFFSET },
  24056   { 0x3056, 7084, UNICODE_NOT_PRESENT_OFFSET },
  24057   { 0x3058, 7091, UNICODE_NOT_PRESENT_OFFSET },
  24058   { 0x305a, 7098, UNICODE_NOT_PRESENT_OFFSET },
  24059   { 0x305c, 7105, UNICODE_NOT_PRESENT_OFFSET },
  24060   { 0x305e, 7112, UNICODE_NOT_PRESENT_OFFSET },
  24061   { 0x3060, 7119, UNICODE_NOT_PRESENT_OFFSET },
  24062   { 0x3062, 7126, UNICODE_NOT_PRESENT_OFFSET },
  24063   { 0x3065, 7133, UNICODE_NOT_PRESENT_OFFSET },
  24064   { 0x3067, 7140, UNICODE_NOT_PRESENT_OFFSET },
  24065   { 0x3069, 7147, UNICODE_NOT_PRESENT_OFFSET },
  24066   { 0x3070, 7154, UNICODE_NOT_PRESENT_OFFSET },
  24067   { 0x3071, 7161, UNICODE_NOT_PRESENT_OFFSET },
  24068   { 0x3073, 7168, UNICODE_NOT_PRESENT_OFFSET },
  24069   { 0x3074, 7175, UNICODE_NOT_PRESENT_OFFSET },
  24070   { 0x3076, 7182, UNICODE_NOT_PRESENT_OFFSET },
  24071   { 0x3077, 7189, UNICODE_NOT_PRESENT_OFFSET },
  24072   { 0x3079, 7196, UNICODE_NOT_PRESENT_OFFSET },
  24073   { 0x307a, 7203, UNICODE_NOT_PRESENT_OFFSET },
  24074   { 0x307c, 7210, UNICODE_NOT_PRESENT_OFFSET },
  24075   { 0x307d, 7217, UNICODE_NOT_PRESENT_OFFSET },
  24076   { 0x3094, 7224, UNICODE_NOT_PRESENT_OFFSET },
  24077   { 0x309b, UNICODE_NOT_PRESENT_OFFSET, 7231 },
  24078   { 0x309c, UNICODE_NOT_PRESENT_OFFSET, 7236 },
  24079   { 0x309e, 7241, UNICODE_NOT_PRESENT_OFFSET },
  24080   { 0x309f, UNICODE_NOT_PRESENT_OFFSET, 7248 },
  24081   { 0x30ac, 7255, UNICODE_NOT_PRESENT_OFFSET },
  24082   { 0x30ae, 7262, UNICODE_NOT_PRESENT_OFFSET },
  24083   { 0x30b0, 7269, UNICODE_NOT_PRESENT_OFFSET },
  24084   { 0x30b2, 7276, UNICODE_NOT_PRESENT_OFFSET },
  24085   { 0x30b4, 7283, UNICODE_NOT_PRESENT_OFFSET },
  24086   { 0x30b6, 7290, UNICODE_NOT_PRESENT_OFFSET },
  24087   { 0x30b8, 7297, UNICODE_NOT_PRESENT_OFFSET },
  24088   { 0x30ba, 7304, UNICODE_NOT_PRESENT_OFFSET },
  24089   { 0x30bc, 7311, UNICODE_NOT_PRESENT_OFFSET },
  24090   { 0x30be, 7318, UNICODE_NOT_PRESENT_OFFSET },
  24091   { 0x30c0, 7325, UNICODE_NOT_PRESENT_OFFSET },
  24092   { 0x30c2, 7332, UNICODE_NOT_PRESENT_OFFSET },
  24093   { 0x30c5, 7339, UNICODE_NOT_PRESENT_OFFSET },
  24094   { 0x30c7, 7346, UNICODE_NOT_PRESENT_OFFSET },
  24095   { 0x30c9, 7353, UNICODE_NOT_PRESENT_OFFSET },
  24096   { 0x30d0, 7360, UNICODE_NOT_PRESENT_OFFSET },
  24097   { 0x30d1, 7367, UNICODE_NOT_PRESENT_OFFSET },
  24098   { 0x30d3, 7374, UNICODE_NOT_PRESENT_OFFSET },
  24099   { 0x30d4, 7381, UNICODE_NOT_PRESENT_OFFSET },
  24100   { 0x30d6, 7388, UNICODE_NOT_PRESENT_OFFSET },
  24101   { 0x30d7, 7395, UNICODE_NOT_PRESENT_OFFSET },
  24102   { 0x30d9, 7402, UNICODE_NOT_PRESENT_OFFSET },
  24103   { 0x30da, 7409, UNICODE_NOT_PRESENT_OFFSET },
  24104   { 0x30dc, 7416, UNICODE_NOT_PRESENT_OFFSET },
  24105   { 0x30dd, 7423, UNICODE_NOT_PRESENT_OFFSET },
  24106   { 0x30f4, 7430, UNICODE_NOT_PRESENT_OFFSET },
  24107   { 0x30f7, 7437, UNICODE_NOT_PRESENT_OFFSET },
  24108   { 0x30f8, 7444, UNICODE_NOT_PRESENT_OFFSET },
  24109   { 0x30f9, 7451, UNICODE_NOT_PRESENT_OFFSET },
  24110   { 0x30fa, 7458, UNICODE_NOT_PRESENT_OFFSET },
  24111   { 0x30fe, 7465, UNICODE_NOT_PRESENT_OFFSET },
  24112   { 0x30ff, UNICODE_NOT_PRESENT_OFFSET, 7472 },
  24113   { 0x3131, UNICODE_NOT_PRESENT_OFFSET, 7479 },
  24114   { 0x3132, UNICODE_NOT_PRESENT_OFFSET, 7483 },
  24115   { 0x3133, UNICODE_NOT_PRESENT_OFFSET, 7487 },
  24116   { 0x3134, UNICODE_NOT_PRESENT_OFFSET, 7491 },
  24117   { 0x3135, UNICODE_NOT_PRESENT_OFFSET, 7495 },
  24118   { 0x3136, UNICODE_NOT_PRESENT_OFFSET, 7499 },
  24119   { 0x3137, UNICODE_NOT_PRESENT_OFFSET, 7503 },
  24120   { 0x3138, UNICODE_NOT_PRESENT_OFFSET, 7507 },
  24121   { 0x3139, UNICODE_NOT_PRESENT_OFFSET, 7511 },
  24122   { 0x313a, UNICODE_NOT_PRESENT_OFFSET, 7515 },
  24123   { 0x313b, UNICODE_NOT_PRESENT_OFFSET, 7519 },
  24124   { 0x313c, UNICODE_NOT_PRESENT_OFFSET, 7523 },
  24125   { 0x313d, UNICODE_NOT_PRESENT_OFFSET, 7527 },
  24126   { 0x313e, UNICODE_NOT_PRESENT_OFFSET, 7531 },
  24127   { 0x313f, UNICODE_NOT_PRESENT_OFFSET, 7535 },
  24128   { 0x3140, UNICODE_NOT_PRESENT_OFFSET, 7539 },
  24129   { 0x3141, UNICODE_NOT_PRESENT_OFFSET, 7543 },
  24130   { 0x3142, UNICODE_NOT_PRESENT_OFFSET, 7547 },
  24131   { 0x3143, UNICODE_NOT_PRESENT_OFFSET, 7551 },
  24132   { 0x3144, UNICODE_NOT_PRESENT_OFFSET, 7555 },
  24133   { 0x3145, UNICODE_NOT_PRESENT_OFFSET, 7559 },
  24134   { 0x3146, UNICODE_NOT_PRESENT_OFFSET, 7563 },
  24135   { 0x3147, UNICODE_NOT_PRESENT_OFFSET, 7567 },
  24136   { 0x3148, UNICODE_NOT_PRESENT_OFFSET, 7571 },
  24137   { 0x3149, UNICODE_NOT_PRESENT_OFFSET, 7575 },
  24138   { 0x314a, UNICODE_NOT_PRESENT_OFFSET, 7579 },
  24139   { 0x314b, UNICODE_NOT_PRESENT_OFFSET, 7583 },
  24140   { 0x314c, UNICODE_NOT_PRESENT_OFFSET, 7587 },
  24141   { 0x314d, UNICODE_NOT_PRESENT_OFFSET, 7591 },
  24142   { 0x314e, UNICODE_NOT_PRESENT_OFFSET, 7595 },
  24143   { 0x314f, UNICODE_NOT_PRESENT_OFFSET, 7599 },
  24144   { 0x3150, UNICODE_NOT_PRESENT_OFFSET, 7603 },
  24145   { 0x3151, UNICODE_NOT_PRESENT_OFFSET, 7607 },
  24146   { 0x3152, UNICODE_NOT_PRESENT_OFFSET, 7611 },
  24147   { 0x3153, UNICODE_NOT_PRESENT_OFFSET, 7615 },
  24148   { 0x3154, UNICODE_NOT_PRESENT_OFFSET, 7619 },
  24149   { 0x3155, UNICODE_NOT_PRESENT_OFFSET, 7623 },
  24150   { 0x3156, UNICODE_NOT_PRESENT_OFFSET, 7627 },
  24151   { 0x3157, UNICODE_NOT_PRESENT_OFFSET, 7631 },
  24152   { 0x3158, UNICODE_NOT_PRESENT_OFFSET, 7635 },
  24153   { 0x3159, UNICODE_NOT_PRESENT_OFFSET, 7639 },
  24154   { 0x315a, UNICODE_NOT_PRESENT_OFFSET, 7643 },
  24155   { 0x315b, UNICODE_NOT_PRESENT_OFFSET, 7647 },
  24156   { 0x315c, UNICODE_NOT_PRESENT_OFFSET, 7651 },
  24157   { 0x315d, UNICODE_NOT_PRESENT_OFFSET, 7655 },
  24158   { 0x315e, UNICODE_NOT_PRESENT_OFFSET, 7659 },
  24159   { 0x315f, UNICODE_NOT_PRESENT_OFFSET, 7663 },
  24160   { 0x3160, UNICODE_NOT_PRESENT_OFFSET, 7667 },
  24161   { 0x3161, UNICODE_NOT_PRESENT_OFFSET, 7671 },
  24162   { 0x3162, UNICODE_NOT_PRESENT_OFFSET, 7675 },
  24163   { 0x3163, UNICODE_NOT_PRESENT_OFFSET, 7679 },
  24164   { 0x3164, UNICODE_NOT_PRESENT_OFFSET, 7683 },
  24165   { 0x3165, UNICODE_NOT_PRESENT_OFFSET, 7687 },
  24166   { 0x3166, UNICODE_NOT_PRESENT_OFFSET, 7691 },
  24167   { 0x3167, UNICODE_NOT_PRESENT_OFFSET, 7695 },
  24168   { 0x3168, UNICODE_NOT_PRESENT_OFFSET, 7699 },
  24169   { 0x3169, UNICODE_NOT_PRESENT_OFFSET, 7703 },
  24170   { 0x316a, UNICODE_NOT_PRESENT_OFFSET, 7707 },
  24171   { 0x316b, UNICODE_NOT_PRESENT_OFFSET, 7711 },
  24172   { 0x316c, UNICODE_NOT_PRESENT_OFFSET, 7715 },
  24173   { 0x316d, UNICODE_NOT_PRESENT_OFFSET, 7719 },
  24174   { 0x316e, UNICODE_NOT_PRESENT_OFFSET, 7723 },
  24175   { 0x316f, UNICODE_NOT_PRESENT_OFFSET, 7727 },
  24176   { 0x3170, UNICODE_NOT_PRESENT_OFFSET, 7731 },
  24177   { 0x3171, UNICODE_NOT_PRESENT_OFFSET, 7735 },
  24178   { 0x3172, UNICODE_NOT_PRESENT_OFFSET, 7739 },
  24179   { 0x3173, UNICODE_NOT_PRESENT_OFFSET, 7743 },
  24180   { 0x3174, UNICODE_NOT_PRESENT_OFFSET, 7747 },
  24181   { 0x3175, UNICODE_NOT_PRESENT_OFFSET, 7751 },
  24182   { 0x3176, UNICODE_NOT_PRESENT_OFFSET, 7755 },
  24183   { 0x3177, UNICODE_NOT_PRESENT_OFFSET, 7759 },
  24184   { 0x3178, UNICODE_NOT_PRESENT_OFFSET, 7763 },
  24185   { 0x3179, UNICODE_NOT_PRESENT_OFFSET, 7767 },
  24186   { 0x317a, UNICODE_NOT_PRESENT_OFFSET, 7771 },
  24187   { 0x317b, UNICODE_NOT_PRESENT_OFFSET, 7775 },
  24188   { 0x317c, UNICODE_NOT_PRESENT_OFFSET, 7779 },
  24189   { 0x317d, UNICODE_NOT_PRESENT_OFFSET, 7783 },
  24190   { 0x317e, UNICODE_NOT_PRESENT_OFFSET, 7787 },
  24191   { 0x317f, UNICODE_NOT_PRESENT_OFFSET, 7791 },
  24192   { 0x3180, UNICODE_NOT_PRESENT_OFFSET, 7795 },
  24193   { 0x3181, UNICODE_NOT_PRESENT_OFFSET, 7799 },
  24194   { 0x3182, UNICODE_NOT_PRESENT_OFFSET, 7803 },
  24195   { 0x3183, UNICODE_NOT_PRESENT_OFFSET, 7807 },
  24196   { 0x3184, UNICODE_NOT_PRESENT_OFFSET, 7811 },
  24197   { 0x3185, UNICODE_NOT_PRESENT_OFFSET, 7815 },
  24198   { 0x3186, UNICODE_NOT_PRESENT_OFFSET, 7819 },
  24199   { 0x3187, UNICODE_NOT_PRESENT_OFFSET, 7823 },
  24200   { 0x3188, UNICODE_NOT_PRESENT_OFFSET, 7827 },
  24201   { 0x3189, UNICODE_NOT_PRESENT_OFFSET, 7831 },
  24202   { 0x318a, UNICODE_NOT_PRESENT_OFFSET, 7835 },
  24203   { 0x318b, UNICODE_NOT_PRESENT_OFFSET, 7839 },
  24204   { 0x318c, UNICODE_NOT_PRESENT_OFFSET, 7843 },
  24205   { 0x318d, UNICODE_NOT_PRESENT_OFFSET, 7847 },
  24206   { 0x318e, UNICODE_NOT_PRESENT_OFFSET, 7851 },
  24207   { 0x3192, UNICODE_NOT_PRESENT_OFFSET, 6181 },
  24208   { 0x3193, UNICODE_NOT_PRESENT_OFFSET, 6205 },
  24209   { 0x3194, UNICODE_NOT_PRESENT_OFFSET, 7855 },
  24210   { 0x3195, UNICODE_NOT_PRESENT_OFFSET, 7859 },
  24211   { 0x3196, UNICODE_NOT_PRESENT_OFFSET, 7863 },
  24212   { 0x3197, UNICODE_NOT_PRESENT_OFFSET, 7867 },
  24213   { 0x3198, UNICODE_NOT_PRESENT_OFFSET, 7871 },
  24214   { 0x3199, UNICODE_NOT_PRESENT_OFFSET, 7875 },
  24215   { 0x319a, UNICODE_NOT_PRESENT_OFFSET, 6197 },
  24216   { 0x319b, UNICODE_NOT_PRESENT_OFFSET, 7879 },
  24217   { 0x319c, UNICODE_NOT_PRESENT_OFFSET, 7883 },
  24218   { 0x319d, UNICODE_NOT_PRESENT_OFFSET, 7887 },
  24219   { 0x319e, UNICODE_NOT_PRESENT_OFFSET, 7891 },
  24220   { 0x319f, UNICODE_NOT_PRESENT_OFFSET, 6213 },
  24221   { 0x3200, UNICODE_NOT_PRESENT_OFFSET, 7895 },
  24222   { 0x3201, UNICODE_NOT_PRESENT_OFFSET, 7901 },
  24223   { 0x3202, UNICODE_NOT_PRESENT_OFFSET, 7907 },
  24224   { 0x3203, UNICODE_NOT_PRESENT_OFFSET, 7913 },
  24225   { 0x3204, UNICODE_NOT_PRESENT_OFFSET, 7919 },
  24226   { 0x3205, UNICODE_NOT_PRESENT_OFFSET, 7925 },
  24227   { 0x3206, UNICODE_NOT_PRESENT_OFFSET, 7931 },
  24228   { 0x3207, UNICODE_NOT_PRESENT_OFFSET, 7937 },
  24229   { 0x3208, UNICODE_NOT_PRESENT_OFFSET, 7943 },
  24230   { 0x3209, UNICODE_NOT_PRESENT_OFFSET, 7949 },
  24231   { 0x320a, UNICODE_NOT_PRESENT_OFFSET, 7955 },
  24232   { 0x320b, UNICODE_NOT_PRESENT_OFFSET, 7961 },
  24233   { 0x320c, UNICODE_NOT_PRESENT_OFFSET, 7967 },
  24234   { 0x320d, UNICODE_NOT_PRESENT_OFFSET, 7973 },
  24235   { 0x320e, UNICODE_NOT_PRESENT_OFFSET, 7979 },
  24236   { 0x320f, UNICODE_NOT_PRESENT_OFFSET, 7988 },
  24237   { 0x3210, UNICODE_NOT_PRESENT_OFFSET, 7997 },
  24238   { 0x3211, UNICODE_NOT_PRESENT_OFFSET, 8006 },
  24239   { 0x3212, UNICODE_NOT_PRESENT_OFFSET, 8015 },
  24240   { 0x3213, UNICODE_NOT_PRESENT_OFFSET, 8024 },
  24241   { 0x3214, UNICODE_NOT_PRESENT_OFFSET, 8033 },
  24242   { 0x3215, UNICODE_NOT_PRESENT_OFFSET, 8042 },
  24243   { 0x3216, UNICODE_NOT_PRESENT_OFFSET, 8051 },
  24244   { 0x3217, UNICODE_NOT_PRESENT_OFFSET, 8060 },
  24245   { 0x3218, UNICODE_NOT_PRESENT_OFFSET, 8069 },
  24246   { 0x3219, UNICODE_NOT_PRESENT_OFFSET, 8078 },
  24247   { 0x321a, UNICODE_NOT_PRESENT_OFFSET, 8087 },
  24248   { 0x321b, UNICODE_NOT_PRESENT_OFFSET, 8096 },
  24249   { 0x321c, UNICODE_NOT_PRESENT_OFFSET, 8105 },
  24250   { 0x321d, UNICODE_NOT_PRESENT_OFFSET, 8114 },
  24251   { 0x321e, UNICODE_NOT_PRESENT_OFFSET, 8132 },
  24252   { 0x3220, UNICODE_NOT_PRESENT_OFFSET, 8147 },
  24253   { 0x3221, UNICODE_NOT_PRESENT_OFFSET, 8153 },
  24254   { 0x3222, UNICODE_NOT_PRESENT_OFFSET, 8159 },
  24255   { 0x3223, UNICODE_NOT_PRESENT_OFFSET, 8165 },
  24256   { 0x3224, UNICODE_NOT_PRESENT_OFFSET, 8171 },
  24257   { 0x3225, UNICODE_NOT_PRESENT_OFFSET, 8177 },
  24258   { 0x3226, UNICODE_NOT_PRESENT_OFFSET, 8183 },
  24259   { 0x3227, UNICODE_NOT_PRESENT_OFFSET, 8189 },
  24260   { 0x3228, UNICODE_NOT_PRESENT_OFFSET, 8195 },
  24261   { 0x3229, UNICODE_NOT_PRESENT_OFFSET, 8201 },
  24262   { 0x322a, UNICODE_NOT_PRESENT_OFFSET, 8207 },
  24263   { 0x322b, UNICODE_NOT_PRESENT_OFFSET, 8213 },
  24264   { 0x322c, UNICODE_NOT_PRESENT_OFFSET, 8219 },
  24265   { 0x322d, UNICODE_NOT_PRESENT_OFFSET, 8225 },
  24266   { 0x322e, UNICODE_NOT_PRESENT_OFFSET, 8231 },
  24267   { 0x322f, UNICODE_NOT_PRESENT_OFFSET, 8237 },
  24268   { 0x3230, UNICODE_NOT_PRESENT_OFFSET, 8243 },
  24269   { 0x3231, UNICODE_NOT_PRESENT_OFFSET, 8249 },
  24270   { 0x3232, UNICODE_NOT_PRESENT_OFFSET, 8255 },
  24271   { 0x3233, UNICODE_NOT_PRESENT_OFFSET, 8261 },
  24272   { 0x3234, UNICODE_NOT_PRESENT_OFFSET, 8267 },
  24273   { 0x3235, UNICODE_NOT_PRESENT_OFFSET, 8273 },
  24274   { 0x3236, UNICODE_NOT_PRESENT_OFFSET, 8279 },
  24275   { 0x3237, UNICODE_NOT_PRESENT_OFFSET, 8285 },
  24276   { 0x3238, UNICODE_NOT_PRESENT_OFFSET, 8291 },
  24277   { 0x3239, UNICODE_NOT_PRESENT_OFFSET, 8297 },
  24278   { 0x323a, UNICODE_NOT_PRESENT_OFFSET, 8303 },
  24279   { 0x323b, UNICODE_NOT_PRESENT_OFFSET, 8309 },
  24280   { 0x323c, UNICODE_NOT_PRESENT_OFFSET, 8315 },
  24281   { 0x323d, UNICODE_NOT_PRESENT_OFFSET, 8321 },
  24282   { 0x323e, UNICODE_NOT_PRESENT_OFFSET, 8327 },
  24283   { 0x323f, UNICODE_NOT_PRESENT_OFFSET, 8333 },
  24284   { 0x3240, UNICODE_NOT_PRESENT_OFFSET, 8339 },
  24285   { 0x3241, UNICODE_NOT_PRESENT_OFFSET, 8345 },
  24286   { 0x3242, UNICODE_NOT_PRESENT_OFFSET, 8351 },
  24287   { 0x3243, UNICODE_NOT_PRESENT_OFFSET, 8357 },
  24288   { 0x3244, UNICODE_NOT_PRESENT_OFFSET, 8363 },
  24289   { 0x3245, UNICODE_NOT_PRESENT_OFFSET, 8367 },
  24290   { 0x3246, UNICODE_NOT_PRESENT_OFFSET, 6445 },
  24291   { 0x3247, UNICODE_NOT_PRESENT_OFFSET, 8371 },
  24292   { 0x3250, UNICODE_NOT_PRESENT_OFFSET, 8375 },
  24293   { 0x3251, UNICODE_NOT_PRESENT_OFFSET, 8379 },
  24294   { 0x3252, UNICODE_NOT_PRESENT_OFFSET, 8382 },
  24295   { 0x3253, UNICODE_NOT_PRESENT_OFFSET, 8385 },
  24296   { 0x3254, UNICODE_NOT_PRESENT_OFFSET, 8388 },
  24297   { 0x3255, UNICODE_NOT_PRESENT_OFFSET, 8391 },
  24298   { 0x3256, UNICODE_NOT_PRESENT_OFFSET, 8394 },
  24299   { 0x3257, UNICODE_NOT_PRESENT_OFFSET, 8397 },
  24300   { 0x3258, UNICODE_NOT_PRESENT_OFFSET, 8400 },
  24301   { 0x3259, UNICODE_NOT_PRESENT_OFFSET, 8403 },
  24302   { 0x325a, UNICODE_NOT_PRESENT_OFFSET, 8406 },
  24303   { 0x325b, UNICODE_NOT_PRESENT_OFFSET, 8409 },
  24304   { 0x325c, UNICODE_NOT_PRESENT_OFFSET, 8412 },
  24305   { 0x325d, UNICODE_NOT_PRESENT_OFFSET, 8415 },
  24306   { 0x325e, UNICODE_NOT_PRESENT_OFFSET, 8418 },
  24307   { 0x325f, UNICODE_NOT_PRESENT_OFFSET, 8421 },
  24308   { 0x3260, UNICODE_NOT_PRESENT_OFFSET, 7479 },
  24309   { 0x3261, UNICODE_NOT_PRESENT_OFFSET, 7491 },
  24310   { 0x3262, UNICODE_NOT_PRESENT_OFFSET, 7503 },
  24311   { 0x3263, UNICODE_NOT_PRESENT_OFFSET, 7511 },
  24312   { 0x3264, UNICODE_NOT_PRESENT_OFFSET, 7543 },
  24313   { 0x3265, UNICODE_NOT_PRESENT_OFFSET, 7547 },
  24314   { 0x3266, UNICODE_NOT_PRESENT_OFFSET, 7559 },
  24315   { 0x3267, UNICODE_NOT_PRESENT_OFFSET, 7567 },
  24316   { 0x3268, UNICODE_NOT_PRESENT_OFFSET, 7571 },
  24317   { 0x3269, UNICODE_NOT_PRESENT_OFFSET, 7579 },
  24318   { 0x326a, UNICODE_NOT_PRESENT_OFFSET, 7583 },
  24319   { 0x326b, UNICODE_NOT_PRESENT_OFFSET, 7587 },
  24320   { 0x326c, UNICODE_NOT_PRESENT_OFFSET, 7591 },
  24321   { 0x326d, UNICODE_NOT_PRESENT_OFFSET, 7595 },
  24322   { 0x326e, UNICODE_NOT_PRESENT_OFFSET, 8424 },
  24323   { 0x326f, UNICODE_NOT_PRESENT_OFFSET, 8431 },
  24324   { 0x3270, UNICODE_NOT_PRESENT_OFFSET, 8438 },
  24325   { 0x3271, UNICODE_NOT_PRESENT_OFFSET, 8445 },
  24326   { 0x3272, UNICODE_NOT_PRESENT_OFFSET, 8452 },
  24327   { 0x3273, UNICODE_NOT_PRESENT_OFFSET, 8459 },
  24328   { 0x3274, UNICODE_NOT_PRESENT_OFFSET, 8466 },
  24329   { 0x3275, UNICODE_NOT_PRESENT_OFFSET, 8473 },
  24330   { 0x3276, UNICODE_NOT_PRESENT_OFFSET, 8480 },
  24331   { 0x3277, UNICODE_NOT_PRESENT_OFFSET, 8487 },
  24332   { 0x3278, UNICODE_NOT_PRESENT_OFFSET, 8494 },
  24333   { 0x3279, UNICODE_NOT_PRESENT_OFFSET, 8501 },
  24334   { 0x327a, UNICODE_NOT_PRESENT_OFFSET, 8508 },
  24335   { 0x327b, UNICODE_NOT_PRESENT_OFFSET, 8515 },
  24336   { 0x327c, UNICODE_NOT_PRESENT_OFFSET, 8522 },
  24337   { 0x327d, UNICODE_NOT_PRESENT_OFFSET, 8538 },
  24338   { 0x327e, UNICODE_NOT_PRESENT_OFFSET, 8551 },
  24339   { 0x3280, UNICODE_NOT_PRESENT_OFFSET, 6181 },
  24340   { 0x3281, UNICODE_NOT_PRESENT_OFFSET, 6205 },
  24341   { 0x3282, UNICODE_NOT_PRESENT_OFFSET, 7855 },
  24342   { 0x3283, UNICODE_NOT_PRESENT_OFFSET, 7859 },
  24343   { 0x3284, UNICODE_NOT_PRESENT_OFFSET, 8558 },
  24344   { 0x3285, UNICODE_NOT_PRESENT_OFFSET, 8562 },
  24345   { 0x3286, UNICODE_NOT_PRESENT_OFFSET, 8566 },
  24346   { 0x3287, UNICODE_NOT_PRESENT_OFFSET, 6225 },
  24347   { 0x3288, UNICODE_NOT_PRESENT_OFFSET, 8570 },
  24348   { 0x3289, UNICODE_NOT_PRESENT_OFFSET, 6273 },
  24349   { 0x328a, UNICODE_NOT_PRESENT_OFFSET, 6473 },
  24350   { 0x328b, UNICODE_NOT_PRESENT_OFFSET, 6521 },
  24351   { 0x328c, UNICODE_NOT_PRESENT_OFFSET, 6517 },
  24352   { 0x328d, UNICODE_NOT_PRESENT_OFFSET, 6477 },
  24353   { 0x328e, UNICODE_NOT_PRESENT_OFFSET, 6845 },
  24354   { 0x328f, UNICODE_NOT_PRESENT_OFFSET, 6305 },
  24355   { 0x3290, UNICODE_NOT_PRESENT_OFFSET, 6465 },
  24356   { 0x3291, UNICODE_NOT_PRESENT_OFFSET, 8574 },
  24357   { 0x3292, UNICODE_NOT_PRESENT_OFFSET, 8578 },
  24358   { 0x3293, UNICODE_NOT_PRESENT_OFFSET, 8582 },
  24359   { 0x3294, UNICODE_NOT_PRESENT_OFFSET, 8586 },
  24360   { 0x3295, UNICODE_NOT_PRESENT_OFFSET, 8590 },
  24361   { 0x3296, UNICODE_NOT_PRESENT_OFFSET, 8594 },
  24362   { 0x3297, UNICODE_NOT_PRESENT_OFFSET, 8598 },
  24363   { 0x3298, UNICODE_NOT_PRESENT_OFFSET, 8602 },
  24364   { 0x3299, UNICODE_NOT_PRESENT_OFFSET, 8606 },
  24365   { 0x329a, UNICODE_NOT_PRESENT_OFFSET, 8610 },
  24366   { 0x329b, UNICODE_NOT_PRESENT_OFFSET, 6329 },
  24367   { 0x329c, UNICODE_NOT_PRESENT_OFFSET, 8614 },
  24368   { 0x329d, UNICODE_NOT_PRESENT_OFFSET, 8618 },
  24369   { 0x329e, UNICODE_NOT_PRESENT_OFFSET, 8622 },
  24370   { 0x329f, UNICODE_NOT_PRESENT_OFFSET, 8626 },
  24371   { 0x32a0, UNICODE_NOT_PRESENT_OFFSET, 8630 },
  24372   { 0x32a1, UNICODE_NOT_PRESENT_OFFSET, 8634 },
  24373   { 0x32a2, UNICODE_NOT_PRESENT_OFFSET, 8638 },
  24374   { 0x32a3, UNICODE_NOT_PRESENT_OFFSET, 8642 },
  24375   { 0x32a4, UNICODE_NOT_PRESENT_OFFSET, 7863 },
  24376   { 0x32a5, UNICODE_NOT_PRESENT_OFFSET, 7867 },
  24377   { 0x32a6, UNICODE_NOT_PRESENT_OFFSET, 7871 },
  24378   { 0x32a7, UNICODE_NOT_PRESENT_OFFSET, 8646 },
  24379   { 0x32a8, UNICODE_NOT_PRESENT_OFFSET, 8650 },
  24380   { 0x32a9, UNICODE_NOT_PRESENT_OFFSET, 8654 },
  24381   { 0x32aa, UNICODE_NOT_PRESENT_OFFSET, 8658 },
  24382   { 0x32ab, UNICODE_NOT_PRESENT_OFFSET, 8662 },
  24383   { 0x32ac, UNICODE_NOT_PRESENT_OFFSET, 8666 },
  24384   { 0x32ad, UNICODE_NOT_PRESENT_OFFSET, 8670 },
  24385   { 0x32ae, UNICODE_NOT_PRESENT_OFFSET, 8674 },
  24386   { 0x32af, UNICODE_NOT_PRESENT_OFFSET, 8678 },
  24387   { 0x32b0, UNICODE_NOT_PRESENT_OFFSET, 8682 },
  24388   { 0x32b1, UNICODE_NOT_PRESENT_OFFSET, 8686 },
  24389   { 0x32b2, UNICODE_NOT_PRESENT_OFFSET, 8689 },
  24390   { 0x32b3, UNICODE_NOT_PRESENT_OFFSET, 8692 },
  24391   { 0x32b4, UNICODE_NOT_PRESENT_OFFSET, 8695 },
  24392   { 0x32b5, UNICODE_NOT_PRESENT_OFFSET, 8698 },
  24393   { 0x32b6, UNICODE_NOT_PRESENT_OFFSET, 8701 },
  24394   { 0x32b7, UNICODE_NOT_PRESENT_OFFSET, 8704 },
  24395   { 0x32b8, UNICODE_NOT_PRESENT_OFFSET, 8707 },
  24396   { 0x32b9, UNICODE_NOT_PRESENT_OFFSET, 8710 },
  24397   { 0x32ba, UNICODE_NOT_PRESENT_OFFSET, 8713 },
  24398   { 0x32bb, UNICODE_NOT_PRESENT_OFFSET, 8716 },
  24399   { 0x32bc, UNICODE_NOT_PRESENT_OFFSET, 8719 },
  24400   { 0x32bd, UNICODE_NOT_PRESENT_OFFSET, 8722 },
  24401   { 0x32be, UNICODE_NOT_PRESENT_OFFSET, 8725 },
  24402   { 0x32bf, UNICODE_NOT_PRESENT_OFFSET, 8728 },
  24403   { 0x32c0, UNICODE_NOT_PRESENT_OFFSET, 8731 },
  24404   { 0x32c1, UNICODE_NOT_PRESENT_OFFSET, 8736 },
  24405   { 0x32c2, UNICODE_NOT_PRESENT_OFFSET, 8741 },
  24406   { 0x32c3, UNICODE_NOT_PRESENT_OFFSET, 8746 },
  24407   { 0x32c4, UNICODE_NOT_PRESENT_OFFSET, 8751 },
  24408   { 0x32c5, UNICODE_NOT_PRESENT_OFFSET, 8756 },
  24409   { 0x32c6, UNICODE_NOT_PRESENT_OFFSET, 8761 },
  24410   { 0x32c7, UNICODE_NOT_PRESENT_OFFSET, 8766 },
  24411   { 0x32c8, UNICODE_NOT_PRESENT_OFFSET, 8771 },
  24412   { 0x32c9, UNICODE_NOT_PRESENT_OFFSET, 8776 },
  24413   { 0x32ca, UNICODE_NOT_PRESENT_OFFSET, 8782 },
  24414   { 0x32cb, UNICODE_NOT_PRESENT_OFFSET, 8788 },
  24415   { 0x32cc, UNICODE_NOT_PRESENT_OFFSET, 8794 },
  24416   { 0x32cd, UNICODE_NOT_PRESENT_OFFSET, 8797 },
  24417   { 0x32ce, UNICODE_NOT_PRESENT_OFFSET, 8801 },
  24418   { 0x32cf, UNICODE_NOT_PRESENT_OFFSET, 8804 },
  24419   { 0x32d0, UNICODE_NOT_PRESENT_OFFSET, 8808 },
  24420   { 0x32d1, UNICODE_NOT_PRESENT_OFFSET, 8812 },
  24421   { 0x32d2, UNICODE_NOT_PRESENT_OFFSET, 8816 },
  24422   { 0x32d3, UNICODE_NOT_PRESENT_OFFSET, 8820 },
  24423   { 0x32d4, UNICODE_NOT_PRESENT_OFFSET, 8824 },
  24424   { 0x32d5, UNICODE_NOT_PRESENT_OFFSET, 8828 },
  24425   { 0x32d6, UNICODE_NOT_PRESENT_OFFSET, 8832 },
  24426   { 0x32d7, UNICODE_NOT_PRESENT_OFFSET, 8836 },
  24427   { 0x32d8, UNICODE_NOT_PRESENT_OFFSET, 8840 },
  24428   { 0x32d9, UNICODE_NOT_PRESENT_OFFSET, 8844 },
  24429   { 0x32da, UNICODE_NOT_PRESENT_OFFSET, 8848 },
  24430   { 0x32db, UNICODE_NOT_PRESENT_OFFSET, 8852 },
  24431   { 0x32dc, UNICODE_NOT_PRESENT_OFFSET, 8856 },
  24432   { 0x32dd, UNICODE_NOT_PRESENT_OFFSET, 8860 },
  24433   { 0x32de, UNICODE_NOT_PRESENT_OFFSET, 8864 },
  24434   { 0x32df, UNICODE_NOT_PRESENT_OFFSET, 8868 },
  24435   { 0x32e0, UNICODE_NOT_PRESENT_OFFSET, 8872 },
  24436   { 0x32e1, UNICODE_NOT_PRESENT_OFFSET, 8876 },
  24437   { 0x32e2, UNICODE_NOT_PRESENT_OFFSET, 8880 },
  24438   { 0x32e3, UNICODE_NOT_PRESENT_OFFSET, 8884 },
  24439   { 0x32e4, UNICODE_NOT_PRESENT_OFFSET, 8888 },
  24440   { 0x32e5, UNICODE_NOT_PRESENT_OFFSET, 8892 },
  24441   { 0x32e6, UNICODE_NOT_PRESENT_OFFSET, 8896 },
  24442   { 0x32e7, UNICODE_NOT_PRESENT_OFFSET, 8900 },
  24443   { 0x32e8, UNICODE_NOT_PRESENT_OFFSET, 8904 },
  24444   { 0x32e9, UNICODE_NOT_PRESENT_OFFSET, 8908 },
  24445   { 0x32ea, UNICODE_NOT_PRESENT_OFFSET, 8912 },
  24446   { 0x32eb, UNICODE_NOT_PRESENT_OFFSET, 8916 },
  24447   { 0x32ec, UNICODE_NOT_PRESENT_OFFSET, 8920 },
  24448   { 0x32ed, UNICODE_NOT_PRESENT_OFFSET, 8924 },
  24449   { 0x32ee, UNICODE_NOT_PRESENT_OFFSET, 8928 },
  24450   { 0x32ef, UNICODE_NOT_PRESENT_OFFSET, 8932 },
  24451   { 0x32f0, UNICODE_NOT_PRESENT_OFFSET, 8936 },
  24452   { 0x32f1, UNICODE_NOT_PRESENT_OFFSET, 8940 },
  24453   { 0x32f2, UNICODE_NOT_PRESENT_OFFSET, 8944 },
  24454   { 0x32f3, UNICODE_NOT_PRESENT_OFFSET, 8948 },
  24455   { 0x32f4, UNICODE_NOT_PRESENT_OFFSET, 8952 },
  24456   { 0x32f5, UNICODE_NOT_PRESENT_OFFSET, 8956 },
  24457   { 0x32f6, UNICODE_NOT_PRESENT_OFFSET, 8960 },
  24458   { 0x32f7, UNICODE_NOT_PRESENT_OFFSET, 8964 },
  24459   { 0x32f8, UNICODE_NOT_PRESENT_OFFSET, 8968 },
  24460   { 0x32f9, UNICODE_NOT_PRESENT_OFFSET, 8972 },
  24461   { 0x32fa, UNICODE_NOT_PRESENT_OFFSET, 8976 },
  24462   { 0x32fb, UNICODE_NOT_PRESENT_OFFSET, 8980 },
  24463   { 0x32fc, UNICODE_NOT_PRESENT_OFFSET, 8984 },
  24464   { 0x32fd, UNICODE_NOT_PRESENT_OFFSET, 8988 },
  24465   { 0x32fe, UNICODE_NOT_PRESENT_OFFSET, 8992 },
  24466   { 0x3300, UNICODE_NOT_PRESENT_OFFSET, 8996 },
  24467   { 0x3301, UNICODE_NOT_PRESENT_OFFSET, 9012 },
  24468   { 0x3302, UNICODE_NOT_PRESENT_OFFSET, 9025 },
  24469   { 0x3303, UNICODE_NOT_PRESENT_OFFSET, 9041 },
  24470   { 0x3304, UNICODE_NOT_PRESENT_OFFSET, 9051 },
  24471   { 0x3305, UNICODE_NOT_PRESENT_OFFSET, 9067 },
  24472   { 0x3306, UNICODE_NOT_PRESENT_OFFSET, 9077 },
  24473   { 0x3307, UNICODE_NOT_PRESENT_OFFSET, 9087 },
  24474   { 0x3308, UNICODE_NOT_PRESENT_OFFSET, 9106 },
  24475   { 0x3309, UNICODE_NOT_PRESENT_OFFSET, 9119 },
  24476   { 0x330a, UNICODE_NOT_PRESENT_OFFSET, 9129 },
  24477   { 0x330b, UNICODE_NOT_PRESENT_OFFSET, 9139 },
  24478   { 0x330c, UNICODE_NOT_PRESENT_OFFSET, 9149 },
  24479   { 0x330d, UNICODE_NOT_PRESENT_OFFSET, 9162 },
  24480   { 0x330e, UNICODE_NOT_PRESENT_OFFSET, 9175 },
  24481   { 0x330f, UNICODE_NOT_PRESENT_OFFSET, 9188 },
  24482   { 0x3310, UNICODE_NOT_PRESENT_OFFSET, 9201 },
  24483   { 0x3311, UNICODE_NOT_PRESENT_OFFSET, 9214 },
  24484   { 0x3312, UNICODE_NOT_PRESENT_OFFSET, 9227 },
  24485   { 0x3313, UNICODE_NOT_PRESENT_OFFSET, 9240 },
  24486   { 0x3314, UNICODE_NOT_PRESENT_OFFSET, 9259 },
  24487   { 0x3315, UNICODE_NOT_PRESENT_OFFSET, 9266 },
  24488   { 0x3316, UNICODE_NOT_PRESENT_OFFSET, 9285 },
  24489   { 0x3317, UNICODE_NOT_PRESENT_OFFSET, 9304 },
  24490   { 0x3318, UNICODE_NOT_PRESENT_OFFSET, 9320 },
  24491   { 0x3319, UNICODE_NOT_PRESENT_OFFSET, 9333 },
  24492   { 0x331a, UNICODE_NOT_PRESENT_OFFSET, 9352 },
  24493   { 0x331b, UNICODE_NOT_PRESENT_OFFSET, 9371 },
  24494   { 0x331c, UNICODE_NOT_PRESENT_OFFSET, 9384 },
  24495   { 0x331d, UNICODE_NOT_PRESENT_OFFSET, 9394 },
  24496   { 0x331e, UNICODE_NOT_PRESENT_OFFSET, 9404 },
  24497   { 0x331f, UNICODE_NOT_PRESENT_OFFSET, 9417 },
  24498   { 0x3320, UNICODE_NOT_PRESENT_OFFSET, 9430 },
  24499   { 0x3321, UNICODE_NOT_PRESENT_OFFSET, 9446 },
  24500   { 0x3322, UNICODE_NOT_PRESENT_OFFSET, 9462 },
  24501   { 0x3323, UNICODE_NOT_PRESENT_OFFSET, 9472 },
  24502   { 0x3324, UNICODE_NOT_PRESENT_OFFSET, 9482 },
  24503   { 0x3325, UNICODE_NOT_PRESENT_OFFSET, 9495 },
  24504   { 0x3326, UNICODE_NOT_PRESENT_OFFSET, 9505 },
  24505   { 0x3327, UNICODE_NOT_PRESENT_OFFSET, 9515 },
  24506   { 0x3328, UNICODE_NOT_PRESENT_OFFSET, 9522 },
  24507   { 0x3329, UNICODE_NOT_PRESENT_OFFSET, 9529 },
  24508   { 0x332a, UNICODE_NOT_PRESENT_OFFSET, 9539 },
  24509   { 0x332b, UNICODE_NOT_PRESENT_OFFSET, 9549 },
  24510   { 0x332c, UNICODE_NOT_PRESENT_OFFSET, 9568 },
  24511   { 0x332d, UNICODE_NOT_PRESENT_OFFSET, 9581 },
  24512   { 0x332e, UNICODE_NOT_PRESENT_OFFSET, 9597 },
  24513   { 0x332f, UNICODE_NOT_PRESENT_OFFSET, 9616 },
  24514   { 0x3330, UNICODE_NOT_PRESENT_OFFSET, 9629 },
  24515   { 0x3331, UNICODE_NOT_PRESENT_OFFSET, 9639 },
  24516   { 0x3332, UNICODE_NOT_PRESENT_OFFSET, 9649 },
  24517   { 0x3333, UNICODE_NOT_PRESENT_OFFSET, 9668 },
  24518   { 0x3334, UNICODE_NOT_PRESENT_OFFSET, 9681 },
  24519   { 0x3335, UNICODE_NOT_PRESENT_OFFSET, 9700 },
  24520   { 0x3336, UNICODE_NOT_PRESENT_OFFSET, 9710 },
  24521   { 0x3337, UNICODE_NOT_PRESENT_OFFSET, 9726 },
  24522   { 0x3338, UNICODE_NOT_PRESENT_OFFSET, 9736 },
  24523   { 0x3339, UNICODE_NOT_PRESENT_OFFSET, 9749 },
  24524   { 0x333a, UNICODE_NOT_PRESENT_OFFSET, 9759 },
  24525   { 0x333b, UNICODE_NOT_PRESENT_OFFSET, 9772 },
  24526   { 0x333c, UNICODE_NOT_PRESENT_OFFSET, 9788 },
  24527   { 0x333d, UNICODE_NOT_PRESENT_OFFSET, 9801 },
  24528   { 0x333e, UNICODE_NOT_PRESENT_OFFSET, 9817 },
  24529   { 0x333f, UNICODE_NOT_PRESENT_OFFSET, 9830 },
  24530   { 0x3340, UNICODE_NOT_PRESENT_OFFSET, 9837 },
  24531   { 0x3341, UNICODE_NOT_PRESENT_OFFSET, 9853 },
  24532   { 0x3342, UNICODE_NOT_PRESENT_OFFSET, 9863 },
  24533   { 0x3343, UNICODE_NOT_PRESENT_OFFSET, 9873 },
  24534   { 0x3344, UNICODE_NOT_PRESENT_OFFSET, 9886 },
  24535   { 0x3345, UNICODE_NOT_PRESENT_OFFSET, 9896 },
  24536   { 0x3346, UNICODE_NOT_PRESENT_OFFSET, 9906 },
  24537   { 0x3347, UNICODE_NOT_PRESENT_OFFSET, 9916 },
  24538   { 0x3348, UNICODE_NOT_PRESENT_OFFSET, 9932 },
  24539   { 0x3349, UNICODE_NOT_PRESENT_OFFSET, 9945 },
  24540   { 0x334a, UNICODE_NOT_PRESENT_OFFSET, 9952 },
  24541   { 0x334b, UNICODE_NOT_PRESENT_OFFSET, 9971 },
  24542   { 0x334c, UNICODE_NOT_PRESENT_OFFSET, 9981 },
  24543   { 0x334d, UNICODE_NOT_PRESENT_OFFSET, 9997 },
  24544   { 0x334e, UNICODE_NOT_PRESENT_OFFSET, 10010 },
  24545   { 0x334f, UNICODE_NOT_PRESENT_OFFSET, 10023 },
  24546   { 0x3350, UNICODE_NOT_PRESENT_OFFSET, 10033 },
  24547   { 0x3351, UNICODE_NOT_PRESENT_OFFSET, 10043 },
  24548   { 0x3352, UNICODE_NOT_PRESENT_OFFSET, 10056 },
  24549   { 0x3353, UNICODE_NOT_PRESENT_OFFSET, 10063 },
  24550   { 0x3354, UNICODE_NOT_PRESENT_OFFSET, 10076 },
  24551   { 0x3355, UNICODE_NOT_PRESENT_OFFSET, 10092 },
  24552   { 0x3356, UNICODE_NOT_PRESENT_OFFSET, 10099 },
  24553   { 0x3357, UNICODE_NOT_PRESENT_OFFSET, 10118 },
  24554   { 0x3358, UNICODE_NOT_PRESENT_OFFSET, 10128 },
  24555   { 0x3359, UNICODE_NOT_PRESENT_OFFSET, 10133 },
  24556   { 0x335a, UNICODE_NOT_PRESENT_OFFSET, 10138 },
  24557   { 0x335b, UNICODE_NOT_PRESENT_OFFSET, 10143 },
  24558   { 0x335c, UNICODE_NOT_PRESENT_OFFSET, 10148 },
  24559   { 0x335d, UNICODE_NOT_PRESENT_OFFSET, 10153 },
  24560   { 0x335e, UNICODE_NOT_PRESENT_OFFSET, 10158 },
  24561   { 0x335f, UNICODE_NOT_PRESENT_OFFSET, 10163 },
  24562   { 0x3360, UNICODE_NOT_PRESENT_OFFSET, 10168 },
  24563   { 0x3361, UNICODE_NOT_PRESENT_OFFSET, 10173 },
  24564   { 0x3362, UNICODE_NOT_PRESENT_OFFSET, 10178 },
  24565   { 0x3363, UNICODE_NOT_PRESENT_OFFSET, 10184 },
  24566   { 0x3364, UNICODE_NOT_PRESENT_OFFSET, 10190 },
  24567   { 0x3365, UNICODE_NOT_PRESENT_OFFSET, 10196 },
  24568   { 0x3366, UNICODE_NOT_PRESENT_OFFSET, 10202 },
  24569   { 0x3367, UNICODE_NOT_PRESENT_OFFSET, 10208 },
  24570   { 0x3368, UNICODE_NOT_PRESENT_OFFSET, 10214 },
  24571   { 0x3369, UNICODE_NOT_PRESENT_OFFSET, 10220 },
  24572   { 0x336a, UNICODE_NOT_PRESENT_OFFSET, 10226 },
  24573   { 0x336b, UNICODE_NOT_PRESENT_OFFSET, 10232 },
  24574   { 0x336c, UNICODE_NOT_PRESENT_OFFSET, 10238 },
  24575   { 0x336d, UNICODE_NOT_PRESENT_OFFSET, 10244 },
  24576   { 0x336e, UNICODE_NOT_PRESENT_OFFSET, 10250 },
  24577   { 0x336f, UNICODE_NOT_PRESENT_OFFSET, 10256 },
  24578   { 0x3370, UNICODE_NOT_PRESENT_OFFSET, 10262 },
  24579   { 0x3371, UNICODE_NOT_PRESENT_OFFSET, 10268 },
  24580   { 0x3372, UNICODE_NOT_PRESENT_OFFSET, 10272 },
  24581   { 0x3373, UNICODE_NOT_PRESENT_OFFSET, 10275 },
  24582   { 0x3374, UNICODE_NOT_PRESENT_OFFSET, 10278 },
  24583   { 0x3375, UNICODE_NOT_PRESENT_OFFSET, 10282 },
  24584   { 0x3376, UNICODE_NOT_PRESENT_OFFSET, 10285 },
  24585   { 0x3377, UNICODE_NOT_PRESENT_OFFSET, 10288 },
  24586   { 0x3378, UNICODE_NOT_PRESENT_OFFSET, 10291 },
  24587   { 0x3379, UNICODE_NOT_PRESENT_OFFSET, 10295 },
  24588   { 0x337a, UNICODE_NOT_PRESENT_OFFSET, 10299 },
  24589   { 0x337b, UNICODE_NOT_PRESENT_OFFSET, 10302 },
  24590   { 0x337c, UNICODE_NOT_PRESENT_OFFSET, 10309 },
  24591   { 0x337d, UNICODE_NOT_PRESENT_OFFSET, 10316 },
  24592   { 0x337e, UNICODE_NOT_PRESENT_OFFSET, 10323 },
  24593   { 0x337f, UNICODE_NOT_PRESENT_OFFSET, 10330 },
  24594   { 0x3380, UNICODE_NOT_PRESENT_OFFSET, 10343 },
  24595   { 0x3381, UNICODE_NOT_PRESENT_OFFSET, 10346 },
  24596   { 0x3382, UNICODE_NOT_PRESENT_OFFSET, 10349 },
  24597   { 0x3383, UNICODE_NOT_PRESENT_OFFSET, 10353 },
  24598   { 0x3384, UNICODE_NOT_PRESENT_OFFSET, 10356 },
  24599   { 0x3385, UNICODE_NOT_PRESENT_OFFSET, 10359 },
  24600   { 0x3386, UNICODE_NOT_PRESENT_OFFSET, 10362 },
  24601   { 0x3387, UNICODE_NOT_PRESENT_OFFSET, 10365 },
  24602   { 0x3388, UNICODE_NOT_PRESENT_OFFSET, 10368 },
  24603   { 0x3389, UNICODE_NOT_PRESENT_OFFSET, 10372 },
  24604   { 0x338a, UNICODE_NOT_PRESENT_OFFSET, 10377 },
  24605   { 0x338b, UNICODE_NOT_PRESENT_OFFSET, 10380 },
  24606   { 0x338c, UNICODE_NOT_PRESENT_OFFSET, 10383 },
  24607   { 0x338d, UNICODE_NOT_PRESENT_OFFSET, 10387 },
  24608   { 0x338e, UNICODE_NOT_PRESENT_OFFSET, 10391 },
  24609   { 0x338f, UNICODE_NOT_PRESENT_OFFSET, 10394 },
  24610   { 0x3390, UNICODE_NOT_PRESENT_OFFSET, 10397 },
  24611   { 0x3391, UNICODE_NOT_PRESENT_OFFSET, 10400 },
  24612   { 0x3392, UNICODE_NOT_PRESENT_OFFSET, 10404 },
  24613   { 0x3393, UNICODE_NOT_PRESENT_OFFSET, 10408 },
  24614   { 0x3394, UNICODE_NOT_PRESENT_OFFSET, 10412 },
  24615   { 0x3395, UNICODE_NOT_PRESENT_OFFSET, 10416 },
  24616   { 0x3396, UNICODE_NOT_PRESENT_OFFSET, 10420 },
  24617   { 0x3397, UNICODE_NOT_PRESENT_OFFSET, 10423 },
  24618   { 0x3398, UNICODE_NOT_PRESENT_OFFSET, 10426 },
  24619   { 0x3399, UNICODE_NOT_PRESENT_OFFSET, 10429 },
  24620   { 0x339a, UNICODE_NOT_PRESENT_OFFSET, 10432 },
  24621   { 0x339b, UNICODE_NOT_PRESENT_OFFSET, 10435 },
  24622   { 0x339c, UNICODE_NOT_PRESENT_OFFSET, 10439 },
  24623   { 0x339d, UNICODE_NOT_PRESENT_OFFSET, 10442 },
  24624   { 0x339e, UNICODE_NOT_PRESENT_OFFSET, 10445 },
  24625   { 0x339f, UNICODE_NOT_PRESENT_OFFSET, 10448 },
  24626   { 0x33a0, UNICODE_NOT_PRESENT_OFFSET, 10452 },
  24627   { 0x33a1, UNICODE_NOT_PRESENT_OFFSET, 10456 },
  24628   { 0x33a2, UNICODE_NOT_PRESENT_OFFSET, 10459 },
  24629   { 0x33a3, UNICODE_NOT_PRESENT_OFFSET, 10463 },
  24630   { 0x33a4, UNICODE_NOT_PRESENT_OFFSET, 10467 },
  24631   { 0x33a5, UNICODE_NOT_PRESENT_OFFSET, 10471 },
  24632   { 0x33a6, UNICODE_NOT_PRESENT_OFFSET, 10474 },
  24633   { 0x33a7, UNICODE_NOT_PRESENT_OFFSET, 10478 },
  24634   { 0x33a8, UNICODE_NOT_PRESENT_OFFSET, 10484 },
  24635   { 0x33a9, UNICODE_NOT_PRESENT_OFFSET, 10491 },
  24636   { 0x33aa, UNICODE_NOT_PRESENT_OFFSET, 10494 },
  24637   { 0x33ab, UNICODE_NOT_PRESENT_OFFSET, 10498 },
  24638   { 0x33ac, UNICODE_NOT_PRESENT_OFFSET, 10502 },
  24639   { 0x33ad, UNICODE_NOT_PRESENT_OFFSET, 10506 },
  24640   { 0x33ae, UNICODE_NOT_PRESENT_OFFSET, 10510 },
  24641   { 0x33af, UNICODE_NOT_PRESENT_OFFSET, 10518 },
  24642   { 0x33b0, UNICODE_NOT_PRESENT_OFFSET, 10527 },
  24643   { 0x33b1, UNICODE_NOT_PRESENT_OFFSET, 10530 },
  24644   { 0x33b2, UNICODE_NOT_PRESENT_OFFSET, 10533 },
  24645   { 0x33b3, UNICODE_NOT_PRESENT_OFFSET, 10537 },
  24646   { 0x33b4, UNICODE_NOT_PRESENT_OFFSET, 10540 },
  24647   { 0x33b5, UNICODE_NOT_PRESENT_OFFSET, 10543 },
  24648   { 0x33b6, UNICODE_NOT_PRESENT_OFFSET, 10546 },
  24649   { 0x33b7, UNICODE_NOT_PRESENT_OFFSET, 10550 },
  24650   { 0x33b8, UNICODE_NOT_PRESENT_OFFSET, 10553 },
  24651   { 0x33b9, UNICODE_NOT_PRESENT_OFFSET, 10556 },
  24652   { 0x33ba, UNICODE_NOT_PRESENT_OFFSET, 10559 },
  24653   { 0x33bb, UNICODE_NOT_PRESENT_OFFSET, 10562 },
  24654   { 0x33bc, UNICODE_NOT_PRESENT_OFFSET, 10565 },
  24655   { 0x33bd, UNICODE_NOT_PRESENT_OFFSET, 10569 },
  24656   { 0x33be, UNICODE_NOT_PRESENT_OFFSET, 10572 },
  24657   { 0x33bf, UNICODE_NOT_PRESENT_OFFSET, 10575 },
  24658   { 0x33c0, UNICODE_NOT_PRESENT_OFFSET, 10578 },
  24659   { 0x33c1, UNICODE_NOT_PRESENT_OFFSET, 10582 },
  24660   { 0x33c2, UNICODE_NOT_PRESENT_OFFSET, 10586 },
  24661   { 0x33c3, UNICODE_NOT_PRESENT_OFFSET, 10591 },
  24662   { 0x33c4, UNICODE_NOT_PRESENT_OFFSET, 10594 },
  24663   { 0x33c5, UNICODE_NOT_PRESENT_OFFSET, 10597 },
  24664   { 0x33c6, UNICODE_NOT_PRESENT_OFFSET, 10600 },
  24665   { 0x33c7, UNICODE_NOT_PRESENT_OFFSET, 10607 },
  24666   { 0x33c8, UNICODE_NOT_PRESENT_OFFSET, 10611 },
  24667   { 0x33c9, UNICODE_NOT_PRESENT_OFFSET, 10614 },
  24668   { 0x33ca, UNICODE_NOT_PRESENT_OFFSET, 10617 },
  24669   { 0x33cb, UNICODE_NOT_PRESENT_OFFSET, 10620 },
  24670   { 0x33cc, UNICODE_NOT_PRESENT_OFFSET, 10623 },
  24671   { 0x33cd, UNICODE_NOT_PRESENT_OFFSET, 10626 },
  24672   { 0x33ce, UNICODE_NOT_PRESENT_OFFSET, 10629 },
  24673   { 0x33cf, UNICODE_NOT_PRESENT_OFFSET, 10632 },
  24674   { 0x33d0, UNICODE_NOT_PRESENT_OFFSET, 10635 },
  24675   { 0x33d1, UNICODE_NOT_PRESENT_OFFSET, 10638 },
  24676   { 0x33d2, UNICODE_NOT_PRESENT_OFFSET, 10641 },
  24677   { 0x33d3, UNICODE_NOT_PRESENT_OFFSET, 10645 },
  24678   { 0x33d4, UNICODE_NOT_PRESENT_OFFSET, 10648 },
  24679   { 0x33d5, UNICODE_NOT_PRESENT_OFFSET, 10651 },
  24680   { 0x33d6, UNICODE_NOT_PRESENT_OFFSET, 10655 },
  24681   { 0x33d7, UNICODE_NOT_PRESENT_OFFSET, 10659 },
  24682   { 0x33d8, UNICODE_NOT_PRESENT_OFFSET, 10662 },
  24683   { 0x33d9, UNICODE_NOT_PRESENT_OFFSET, 10667 },
  24684   { 0x33da, UNICODE_NOT_PRESENT_OFFSET, 10671 },
  24685   { 0x33db, UNICODE_NOT_PRESENT_OFFSET, 10674 },
  24686   { 0x33dc, UNICODE_NOT_PRESENT_OFFSET, 10677 },
  24687   { 0x33dd, UNICODE_NOT_PRESENT_OFFSET, 10680 },
  24688   { 0x33de, UNICODE_NOT_PRESENT_OFFSET, 10683 },
  24689   { 0x33df, UNICODE_NOT_PRESENT_OFFSET, 10689 },
  24690   { 0x33e0, UNICODE_NOT_PRESENT_OFFSET, 10695 },
  24691   { 0x33e1, UNICODE_NOT_PRESENT_OFFSET, 10700 },
  24692   { 0x33e2, UNICODE_NOT_PRESENT_OFFSET, 10705 },
  24693   { 0x33e3, UNICODE_NOT_PRESENT_OFFSET, 10710 },
  24694   { 0x33e4, UNICODE_NOT_PRESENT_OFFSET, 10715 },
  24695   { 0x33e5, UNICODE_NOT_PRESENT_OFFSET, 10720 },
  24696   { 0x33e6, UNICODE_NOT_PRESENT_OFFSET, 10725 },
  24697   { 0x33e7, UNICODE_NOT_PRESENT_OFFSET, 10730 },
  24698   { 0x33e8, UNICODE_NOT_PRESENT_OFFSET, 10735 },
  24699   { 0x33e9, UNICODE_NOT_PRESENT_OFFSET, 10740 },
  24700   { 0x33ea, UNICODE_NOT_PRESENT_OFFSET, 10746 },
  24701   { 0x33eb, UNICODE_NOT_PRESENT_OFFSET, 10752 },
  24702   { 0x33ec, UNICODE_NOT_PRESENT_OFFSET, 10758 },
  24703   { 0x33ed, UNICODE_NOT_PRESENT_OFFSET, 10764 },
  24704   { 0x33ee, UNICODE_NOT_PRESENT_OFFSET, 10770 },
  24705   { 0x33ef, UNICODE_NOT_PRESENT_OFFSET, 10776 },
  24706   { 0x33f0, UNICODE_NOT_PRESENT_OFFSET, 10782 },
  24707   { 0x33f1, UNICODE_NOT_PRESENT_OFFSET, 10788 },
  24708   { 0x33f2, UNICODE_NOT_PRESENT_OFFSET, 10794 },
  24709   { 0x33f3, UNICODE_NOT_PRESENT_OFFSET, 10800 },
  24710   { 0x33f4, UNICODE_NOT_PRESENT_OFFSET, 10806 },
  24711   { 0x33f5, UNICODE_NOT_PRESENT_OFFSET, 10812 },
  24712   { 0x33f6, UNICODE_NOT_PRESENT_OFFSET, 10818 },
  24713   { 0x33f7, UNICODE_NOT_PRESENT_OFFSET, 10824 },
  24714   { 0x33f8, UNICODE_NOT_PRESENT_OFFSET, 10830 },
  24715   { 0x33f9, UNICODE_NOT_PRESENT_OFFSET, 10836 },
  24716   { 0x33fa, UNICODE_NOT_PRESENT_OFFSET, 10842 },
  24717   { 0x33fb, UNICODE_NOT_PRESENT_OFFSET, 10848 },
  24718   { 0x33fc, UNICODE_NOT_PRESENT_OFFSET, 10854 },
  24719   { 0x33fd, UNICODE_NOT_PRESENT_OFFSET, 10860 },
  24720   { 0x33fe, UNICODE_NOT_PRESENT_OFFSET, 10866 },
  24721   { 0x33ff, UNICODE_NOT_PRESENT_OFFSET, 10872 },
  24722   { 0xa69c, UNICODE_NOT_PRESENT_OFFSET, 10876 },
  24723   { 0xa69d, UNICODE_NOT_PRESENT_OFFSET, 10879 },
  24724   { 0xa770, UNICODE_NOT_PRESENT_OFFSET, 10882 },
  24725   { 0xa7f8, UNICODE_NOT_PRESENT_OFFSET, 10886 },
  24726   { 0xa7f9, UNICODE_NOT_PRESENT_OFFSET, 10889 },
  24727   { 0xab5c, UNICODE_NOT_PRESENT_OFFSET, 10892 },
  24728   { 0xab5d, UNICODE_NOT_PRESENT_OFFSET, 10896 },
  24729   { 0xab5e, UNICODE_NOT_PRESENT_OFFSET, 10900 },
  24730   { 0xab5f, UNICODE_NOT_PRESENT_OFFSET, 10903 },
  24731   { 0xf900, 10907, UNICODE_NOT_PRESENT_OFFSET },
  24732   { 0xf901, 10911, UNICODE_NOT_PRESENT_OFFSET },
  24733   { 0xf902, 6813, UNICODE_NOT_PRESENT_OFFSET },
  24734   { 0xf903, 10915, UNICODE_NOT_PRESENT_OFFSET },
  24735   { 0xf904, 10919, UNICODE_NOT_PRESENT_OFFSET },
  24736   { 0xf905, 10923, UNICODE_NOT_PRESENT_OFFSET },
  24737   { 0xf906, 10927, UNICODE_NOT_PRESENT_OFFSET },
  24738   { 0xf907, 7029, UNICODE_NOT_PRESENT_OFFSET },
  24739   { 0xf908, 7029, UNICODE_NOT_PRESENT_OFFSET },
  24740   { 0xf909, 10931, UNICODE_NOT_PRESENT_OFFSET },
  24741   { 0xf90a, 6845, UNICODE_NOT_PRESENT_OFFSET },
  24742   { 0xf90b, 10935, UNICODE_NOT_PRESENT_OFFSET },
  24743   { 0xf90c, 10939, UNICODE_NOT_PRESENT_OFFSET },
  24744   { 0xf90d, 10943, UNICODE_NOT_PRESENT_OFFSET },
  24745   { 0xf90e, 10947, UNICODE_NOT_PRESENT_OFFSET },
  24746   { 0xf90f, 10951, UNICODE_NOT_PRESENT_OFFSET },
  24747   { 0xf910, 10955, UNICODE_NOT_PRESENT_OFFSET },
  24748   { 0xf911, 10959, UNICODE_NOT_PRESENT_OFFSET },
  24749   { 0xf912, 10963, UNICODE_NOT_PRESENT_OFFSET },
  24750   { 0xf913, 10967, UNICODE_NOT_PRESENT_OFFSET },
  24751   { 0xf914, 10971, UNICODE_NOT_PRESENT_OFFSET },
  24752   { 0xf915, 10975, UNICODE_NOT_PRESENT_OFFSET },
  24753   { 0xf916, 10979, UNICODE_NOT_PRESENT_OFFSET },
  24754   { 0xf917, 10983, UNICODE_NOT_PRESENT_OFFSET },
  24755   { 0xf918, 10987, UNICODE_NOT_PRESENT_OFFSET },
  24756   { 0xf919, 10991, UNICODE_NOT_PRESENT_OFFSET },
  24757   { 0xf91a, 10995, UNICODE_NOT_PRESENT_OFFSET },
  24758   { 0xf91b, 10999, UNICODE_NOT_PRESENT_OFFSET },
  24759   { 0xf91c, 11003, UNICODE_NOT_PRESENT_OFFSET },
  24760   { 0xf91d, 11007, UNICODE_NOT_PRESENT_OFFSET },
  24761   { 0xf91e, 11011, UNICODE_NOT_PRESENT_OFFSET },
  24762   { 0xf91f, 11015, UNICODE_NOT_PRESENT_OFFSET },
  24763   { 0xf920, 11019, UNICODE_NOT_PRESENT_OFFSET },
  24764   { 0xf921, 11023, UNICODE_NOT_PRESENT_OFFSET },
  24765   { 0xf922, 11027, UNICODE_NOT_PRESENT_OFFSET },
  24766   { 0xf923, 11031, UNICODE_NOT_PRESENT_OFFSET },
  24767   { 0xf924, 11035, UNICODE_NOT_PRESENT_OFFSET },
  24768   { 0xf925, 11039, UNICODE_NOT_PRESENT_OFFSET },
  24769   { 0xf926, 11043, UNICODE_NOT_PRESENT_OFFSET },
  24770   { 0xf927, 11047, UNICODE_NOT_PRESENT_OFFSET },
  24771   { 0xf928, 11051, UNICODE_NOT_PRESENT_OFFSET },
  24772   { 0xf929, 11055, UNICODE_NOT_PRESENT_OFFSET },
  24773   { 0xf92a, 11059, UNICODE_NOT_PRESENT_OFFSET },
  24774   { 0xf92b, 11063, UNICODE_NOT_PRESENT_OFFSET },
  24775   { 0xf92c, 11067, UNICODE_NOT_PRESENT_OFFSET },
  24776   { 0xf92d, 11071, UNICODE_NOT_PRESENT_OFFSET },
  24777   { 0xf92e, 11075, UNICODE_NOT_PRESENT_OFFSET },
  24778   { 0xf92f, 11079, UNICODE_NOT_PRESENT_OFFSET },
  24779   { 0xf930, 11083, UNICODE_NOT_PRESENT_OFFSET },
  24780   { 0xf931, 11087, UNICODE_NOT_PRESENT_OFFSET },
  24781   { 0xf932, 11091, UNICODE_NOT_PRESENT_OFFSET },
  24782   { 0xf933, 11095, UNICODE_NOT_PRESENT_OFFSET },
  24783   { 0xf934, 6677, UNICODE_NOT_PRESENT_OFFSET },
  24784   { 0xf935, 11099, UNICODE_NOT_PRESENT_OFFSET },
  24785   { 0xf936, 11103, UNICODE_NOT_PRESENT_OFFSET },
  24786   { 0xf937, 11107, UNICODE_NOT_PRESENT_OFFSET },
  24787   { 0xf938, 11111, UNICODE_NOT_PRESENT_OFFSET },
  24788   { 0xf939, 11115, UNICODE_NOT_PRESENT_OFFSET },
  24789   { 0xf93a, 11119, UNICODE_NOT_PRESENT_OFFSET },
  24790   { 0xf93b, 11123, UNICODE_NOT_PRESENT_OFFSET },
  24791   { 0xf93c, 11127, UNICODE_NOT_PRESENT_OFFSET },
  24792   { 0xf93d, 11131, UNICODE_NOT_PRESENT_OFFSET },
  24793   { 0xf93e, 11135, UNICODE_NOT_PRESENT_OFFSET },
  24794   { 0xf93f, 11139, UNICODE_NOT_PRESENT_OFFSET },
  24795   { 0xf940, 6969, UNICODE_NOT_PRESENT_OFFSET },
  24796   { 0xf941, 11143, UNICODE_NOT_PRESENT_OFFSET },
  24797   { 0xf942, 11147, UNICODE_NOT_PRESENT_OFFSET },
  24798   { 0xf943, 11151, UNICODE_NOT_PRESENT_OFFSET },
  24799   { 0xf944, 11155, UNICODE_NOT_PRESENT_OFFSET },
  24800   { 0xf945, 11159, UNICODE_NOT_PRESENT_OFFSET },
  24801   { 0xf946, 11163, UNICODE_NOT_PRESENT_OFFSET },
  24802   { 0xf947, 11167, UNICODE_NOT_PRESENT_OFFSET },
  24803   { 0xf948, 11171, UNICODE_NOT_PRESENT_OFFSET },
  24804   { 0xf949, 11175, UNICODE_NOT_PRESENT_OFFSET },
  24805   { 0xf94a, 11179, UNICODE_NOT_PRESENT_OFFSET },
  24806   { 0xf94b, 11183, UNICODE_NOT_PRESENT_OFFSET },
  24807   { 0xf94c, 11187, UNICODE_NOT_PRESENT_OFFSET },
  24808   { 0xf94d, 11191, UNICODE_NOT_PRESENT_OFFSET },
  24809   { 0xf94e, 11195, UNICODE_NOT_PRESENT_OFFSET },
  24810   { 0xf94f, 11199, UNICODE_NOT_PRESENT_OFFSET },
  24811   { 0xf950, 11203, UNICODE_NOT_PRESENT_OFFSET },
  24812   { 0xf951, 11207, UNICODE_NOT_PRESENT_OFFSET },
  24813   { 0xf952, 11211, UNICODE_NOT_PRESENT_OFFSET },
  24814   { 0xf953, 11215, UNICODE_NOT_PRESENT_OFFSET },
  24815   { 0xf954, 11219, UNICODE_NOT_PRESENT_OFFSET },
  24816   { 0xf955, 11223, UNICODE_NOT_PRESENT_OFFSET },
  24817   { 0xf956, 11227, UNICODE_NOT_PRESENT_OFFSET },
  24818   { 0xf957, 11231, UNICODE_NOT_PRESENT_OFFSET },
  24819   { 0xf958, 11235, UNICODE_NOT_PRESENT_OFFSET },
  24820   { 0xf959, 11239, UNICODE_NOT_PRESENT_OFFSET },
  24821   { 0xf95a, 11243, UNICODE_NOT_PRESENT_OFFSET },
  24822   { 0xf95b, 11247, UNICODE_NOT_PRESENT_OFFSET },
  24823   { 0xf95c, 10971, UNICODE_NOT_PRESENT_OFFSET },
  24824   { 0xf95d, 11251, UNICODE_NOT_PRESENT_OFFSET },
  24825   { 0xf95e, 11255, UNICODE_NOT_PRESENT_OFFSET },
  24826   { 0xf95f, 11259, UNICODE_NOT_PRESENT_OFFSET },
  24827   { 0xf960, 11263, UNICODE_NOT_PRESENT_OFFSET },
  24828   { 0xf961, 11267, UNICODE_NOT_PRESENT_OFFSET },
  24829   { 0xf962, 11271, UNICODE_NOT_PRESENT_OFFSET },
  24830   { 0xf963, 11275, UNICODE_NOT_PRESENT_OFFSET },
  24831   { 0xf964, 11279, UNICODE_NOT_PRESENT_OFFSET },
  24832   { 0xf965, 11283, UNICODE_NOT_PRESENT_OFFSET },
  24833   { 0xf966, 11287, UNICODE_NOT_PRESENT_OFFSET },
  24834   { 0xf967, 11291, UNICODE_NOT_PRESENT_OFFSET },
  24835   { 0xf968, 11295, UNICODE_NOT_PRESENT_OFFSET },
  24836   { 0xf969, 11299, UNICODE_NOT_PRESENT_OFFSET },
  24837   { 0xf96a, 11303, UNICODE_NOT_PRESENT_OFFSET },
  24838   { 0xf96b, 11307, UNICODE_NOT_PRESENT_OFFSET },
  24839   { 0xf96c, 11311, UNICODE_NOT_PRESENT_OFFSET },
  24840   { 0xf96d, 11315, UNICODE_NOT_PRESENT_OFFSET },
  24841   { 0xf96e, 11319, UNICODE_NOT_PRESENT_OFFSET },
  24842   { 0xf96f, 11323, UNICODE_NOT_PRESENT_OFFSET },
  24843   { 0xf970, 11327, UNICODE_NOT_PRESENT_OFFSET },
  24844   { 0xf971, 6821, UNICODE_NOT_PRESENT_OFFSET },
  24845   { 0xf972, 11331, UNICODE_NOT_PRESENT_OFFSET },
  24846   { 0xf973, 11335, UNICODE_NOT_PRESENT_OFFSET },
  24847   { 0xf974, 11339, UNICODE_NOT_PRESENT_OFFSET },
  24848   { 0xf975, 11343, UNICODE_NOT_PRESENT_OFFSET },
  24849   { 0xf976, 11347, UNICODE_NOT_PRESENT_OFFSET },
  24850   { 0xf977, 11351, UNICODE_NOT_PRESENT_OFFSET },
  24851   { 0xf978, 11355, UNICODE_NOT_PRESENT_OFFSET },
  24852   { 0xf979, 11359, UNICODE_NOT_PRESENT_OFFSET },
  24853   { 0xf97a, 11363, UNICODE_NOT_PRESENT_OFFSET },
  24854   { 0xf97b, 11367, UNICODE_NOT_PRESENT_OFFSET },
  24855   { 0xf97c, 11371, UNICODE_NOT_PRESENT_OFFSET },
  24856   { 0xf97d, 11375, UNICODE_NOT_PRESENT_OFFSET },
  24857   { 0xf97e, 11379, UNICODE_NOT_PRESENT_OFFSET },
  24858   { 0xf97f, 11383, UNICODE_NOT_PRESENT_OFFSET },
  24859   { 0xf980, 11387, UNICODE_NOT_PRESENT_OFFSET },
  24860   { 0xf981, 6329, UNICODE_NOT_PRESENT_OFFSET },
  24861   { 0xf982, 11391, UNICODE_NOT_PRESENT_OFFSET },
  24862   { 0xf983, 11395, UNICODE_NOT_PRESENT_OFFSET },
  24863   { 0xf984, 11399, UNICODE_NOT_PRESENT_OFFSET },
  24864   { 0xf985, 11403, UNICODE_NOT_PRESENT_OFFSET },
  24865   { 0xf986, 11407, UNICODE_NOT_PRESENT_OFFSET },
  24866   { 0xf987, 11411, UNICODE_NOT_PRESENT_OFFSET },
  24867   { 0xf988, 11415, UNICODE_NOT_PRESENT_OFFSET },
  24868   { 0xf989, 11419, UNICODE_NOT_PRESENT_OFFSET },
  24869   { 0xf98a, 6253, UNICODE_NOT_PRESENT_OFFSET },
  24870   { 0xf98b, 11423, UNICODE_NOT_PRESENT_OFFSET },
  24871   { 0xf98c, 11427, UNICODE_NOT_PRESENT_OFFSET },
  24872   { 0xf98d, 11431, UNICODE_NOT_PRESENT_OFFSET },
  24873   { 0xf98e, 11435, UNICODE_NOT_PRESENT_OFFSET },
  24874   { 0xf98f, 11439, UNICODE_NOT_PRESENT_OFFSET },
  24875   { 0xf990, 11443, UNICODE_NOT_PRESENT_OFFSET },
  24876   { 0xf991, 11447, UNICODE_NOT_PRESENT_OFFSET },
  24877   { 0xf992, 11451, UNICODE_NOT_PRESENT_OFFSET },
  24878   { 0xf993, 11455, UNICODE_NOT_PRESENT_OFFSET },
  24879   { 0xf994, 11459, UNICODE_NOT_PRESENT_OFFSET },
  24880   { 0xf995, 11463, UNICODE_NOT_PRESENT_OFFSET },
  24881   { 0xf996, 11467, UNICODE_NOT_PRESENT_OFFSET },
  24882   { 0xf997, 11471, UNICODE_NOT_PRESENT_OFFSET },
  24883   { 0xf998, 11475, UNICODE_NOT_PRESENT_OFFSET },
  24884   { 0xf999, 11479, UNICODE_NOT_PRESENT_OFFSET },
  24885   { 0xf99a, 11483, UNICODE_NOT_PRESENT_OFFSET },
  24886   { 0xf99b, 11487, UNICODE_NOT_PRESENT_OFFSET },
  24887   { 0xf99c, 11491, UNICODE_NOT_PRESENT_OFFSET },
  24888   { 0xf99d, 11495, UNICODE_NOT_PRESENT_OFFSET },
  24889   { 0xf99e, 11499, UNICODE_NOT_PRESENT_OFFSET },
  24890   { 0xf99f, 11503, UNICODE_NOT_PRESENT_OFFSET },
  24891   { 0xf9a0, 11507, UNICODE_NOT_PRESENT_OFFSET },
  24892   { 0xf9a1, 11323, UNICODE_NOT_PRESENT_OFFSET },
  24893   { 0xf9a2, 11511, UNICODE_NOT_PRESENT_OFFSET },
  24894   { 0xf9a3, 11515, UNICODE_NOT_PRESENT_OFFSET },
  24895   { 0xf9a4, 11519, UNICODE_NOT_PRESENT_OFFSET },
  24896   { 0xf9a5, 11523, UNICODE_NOT_PRESENT_OFFSET },
  24897   { 0xf9a6, 11527, UNICODE_NOT_PRESENT_OFFSET },
  24898   { 0xf9a7, 11531, UNICODE_NOT_PRESENT_OFFSET },
  24899   { 0xf9a8, 11535, UNICODE_NOT_PRESENT_OFFSET },
  24900   { 0xf9a9, 11539, UNICODE_NOT_PRESENT_OFFSET },
  24901   { 0xf9aa, 11259, UNICODE_NOT_PRESENT_OFFSET },
  24902   { 0xf9ab, 11543, UNICODE_NOT_PRESENT_OFFSET },
  24903   { 0xf9ac, 11547, UNICODE_NOT_PRESENT_OFFSET },
  24904   { 0xf9ad, 11551, UNICODE_NOT_PRESENT_OFFSET },
  24905   { 0xf9ae, 11555, UNICODE_NOT_PRESENT_OFFSET },
  24906   { 0xf9af, 11559, UNICODE_NOT_PRESENT_OFFSET },
  24907   { 0xf9b0, 11563, UNICODE_NOT_PRESENT_OFFSET },
  24908   { 0xf9b1, 11567, UNICODE_NOT_PRESENT_OFFSET },
  24909   { 0xf9b2, 11571, UNICODE_NOT_PRESENT_OFFSET },
  24910   { 0xf9b3, 11575, UNICODE_NOT_PRESENT_OFFSET },
  24911   { 0xf9b4, 11579, UNICODE_NOT_PRESENT_OFFSET },
  24912   { 0xf9b5, 11583, UNICODE_NOT_PRESENT_OFFSET },
  24913   { 0xf9b6, 11587, UNICODE_NOT_PRESENT_OFFSET },
  24914   { 0xf9b7, 11591, UNICODE_NOT_PRESENT_OFFSET },
  24915   { 0xf9b8, 11595, UNICODE_NOT_PRESENT_OFFSET },
  24916   { 0xf9b9, 11599, UNICODE_NOT_PRESENT_OFFSET },
  24917   { 0xf9ba, 11603, UNICODE_NOT_PRESENT_OFFSET },
  24918   { 0xf9bb, 11607, UNICODE_NOT_PRESENT_OFFSET },
  24919   { 0xf9bc, 11611, UNICODE_NOT_PRESENT_OFFSET },
  24920   { 0xf9bd, 11615, UNICODE_NOT_PRESENT_OFFSET },
  24921   { 0xf9be, 11619, UNICODE_NOT_PRESENT_OFFSET },
  24922   { 0xf9bf, 10971, UNICODE_NOT_PRESENT_OFFSET },
  24923   { 0xf9c0, 11623, UNICODE_NOT_PRESENT_OFFSET },
  24924   { 0xf9c1, 11627, UNICODE_NOT_PRESENT_OFFSET },
  24925   { 0xf9c2, 11631, UNICODE_NOT_PRESENT_OFFSET },
  24926   { 0xf9c3, 11635, UNICODE_NOT_PRESENT_OFFSET },
  24927   { 0xf9c4, 7025, UNICODE_NOT_PRESENT_OFFSET },
  24928   { 0xf9c5, 11639, UNICODE_NOT_PRESENT_OFFSET },
  24929   { 0xf9c6, 11643, UNICODE_NOT_PRESENT_OFFSET },
  24930   { 0xf9c7, 11647, UNICODE_NOT_PRESENT_OFFSET },
  24931   { 0xf9c8, 11651, UNICODE_NOT_PRESENT_OFFSET },
  24932   { 0xf9c9, 11655, UNICODE_NOT_PRESENT_OFFSET },
  24933   { 0xf9ca, 11659, UNICODE_NOT_PRESENT_OFFSET },
  24934   { 0xf9cb, 11663, UNICODE_NOT_PRESENT_OFFSET },
  24935   { 0xf9cc, 11667, UNICODE_NOT_PRESENT_OFFSET },
  24936   { 0xf9cd, 11671, UNICODE_NOT_PRESENT_OFFSET },
  24937   { 0xf9ce, 11675, UNICODE_NOT_PRESENT_OFFSET },
  24938   { 0xf9cf, 11679, UNICODE_NOT_PRESENT_OFFSET },
  24939   { 0xf9d0, 11683, UNICODE_NOT_PRESENT_OFFSET },
  24940   { 0xf9d1, 8562, UNICODE_NOT_PRESENT_OFFSET },
  24941   { 0xf9d2, 11687, UNICODE_NOT_PRESENT_OFFSET },
  24942   { 0xf9d3, 11691, UNICODE_NOT_PRESENT_OFFSET },
  24943   { 0xf9d4, 11695, UNICODE_NOT_PRESENT_OFFSET },
  24944   { 0xf9d5, 11699, UNICODE_NOT_PRESENT_OFFSET },
  24945   { 0xf9d6, 11703, UNICODE_NOT_PRESENT_OFFSET },
  24946   { 0xf9d7, 11707, UNICODE_NOT_PRESENT_OFFSET },
  24947   { 0xf9d8, 11711, UNICODE_NOT_PRESENT_OFFSET },
  24948   { 0xf9d9, 11715, UNICODE_NOT_PRESENT_OFFSET },
  24949   { 0xf9da, 11719, UNICODE_NOT_PRESENT_OFFSET },
  24950   { 0xf9db, 11267, UNICODE_NOT_PRESENT_OFFSET },
  24951   { 0xf9dc, 11723, UNICODE_NOT_PRESENT_OFFSET },
  24952   { 0xf9dd, 11727, UNICODE_NOT_PRESENT_OFFSET },
  24953   { 0xf9de, 11731, UNICODE_NOT_PRESENT_OFFSET },
  24954   { 0xf9df, 11735, UNICODE_NOT_PRESENT_OFFSET },
  24955   { 0xf9e0, 11739, UNICODE_NOT_PRESENT_OFFSET },
  24956   { 0xf9e1, 11743, UNICODE_NOT_PRESENT_OFFSET },
  24957   { 0xf9e2, 11747, UNICODE_NOT_PRESENT_OFFSET },
  24958   { 0xf9e3, 11751, UNICODE_NOT_PRESENT_OFFSET },
  24959   { 0xf9e4, 11755, UNICODE_NOT_PRESENT_OFFSET },
  24960   { 0xf9e5, 11759, UNICODE_NOT_PRESENT_OFFSET },
  24961   { 0xf9e6, 11763, UNICODE_NOT_PRESENT_OFFSET },
  24962   { 0xf9e7, 11767, UNICODE_NOT_PRESENT_OFFSET },
  24963   { 0xf9e8, 11771, UNICODE_NOT_PRESENT_OFFSET },
  24964   { 0xf9e9, 6841, UNICODE_NOT_PRESENT_OFFSET },
  24965   { 0xf9ea, 11775, UNICODE_NOT_PRESENT_OFFSET },
  24966   { 0xf9eb, 11779, UNICODE_NOT_PRESENT_OFFSET },
  24967   { 0xf9ec, 11783, UNICODE_NOT_PRESENT_OFFSET },
  24968   { 0xf9ed, 11787, UNICODE_NOT_PRESENT_OFFSET },
  24969   { 0xf9ee, 11791, UNICODE_NOT_PRESENT_OFFSET },
  24970   { 0xf9ef, 11795, UNICODE_NOT_PRESENT_OFFSET },
  24971   { 0xf9f0, 11799, UNICODE_NOT_PRESENT_OFFSET },
  24972   { 0xf9f1, 11803, UNICODE_NOT_PRESENT_OFFSET },
  24973   { 0xf9f2, 11807, UNICODE_NOT_PRESENT_OFFSET },
  24974   { 0xf9f3, 11811, UNICODE_NOT_PRESENT_OFFSET },
  24975   { 0xf9f4, 11815, UNICODE_NOT_PRESENT_OFFSET },
  24976   { 0xf9f5, 11819, UNICODE_NOT_PRESENT_OFFSET },
  24977   { 0xf9f6, 11823, UNICODE_NOT_PRESENT_OFFSET },
  24978   { 0xf9f7, 6645, UNICODE_NOT_PRESENT_OFFSET },
  24979   { 0xf9f8, 11827, UNICODE_NOT_PRESENT_OFFSET },
  24980   { 0xf9f9, 11831, UNICODE_NOT_PRESENT_OFFSET },
  24981   { 0xf9fa, 11835, UNICODE_NOT_PRESENT_OFFSET },
  24982   { 0xf9fb, 11839, UNICODE_NOT_PRESENT_OFFSET },
  24983   { 0xf9fc, 11843, UNICODE_NOT_PRESENT_OFFSET },
  24984   { 0xf9fd, 11847, UNICODE_NOT_PRESENT_OFFSET },
  24985   { 0xf9fe, 11851, UNICODE_NOT_PRESENT_OFFSET },
  24986   { 0xf9ff, 11855, UNICODE_NOT_PRESENT_OFFSET },
  24987   { 0xfa00, 11859, UNICODE_NOT_PRESENT_OFFSET },
  24988   { 0xfa01, 11863, UNICODE_NOT_PRESENT_OFFSET },
  24989   { 0xfa02, 11867, UNICODE_NOT_PRESENT_OFFSET },
  24990   { 0xfa03, 11871, UNICODE_NOT_PRESENT_OFFSET },
  24991   { 0xfa04, 11875, UNICODE_NOT_PRESENT_OFFSET },
  24992   { 0xfa05, 11879, UNICODE_NOT_PRESENT_OFFSET },
  24993   { 0xfa06, 11883, UNICODE_NOT_PRESENT_OFFSET },
  24994   { 0xfa07, 11887, UNICODE_NOT_PRESENT_OFFSET },
  24995   { 0xfa08, 6753, UNICODE_NOT_PRESENT_OFFSET },
  24996   { 0xfa09, 11891, UNICODE_NOT_PRESENT_OFFSET },
  24997   { 0xfa0a, 6765, UNICODE_NOT_PRESENT_OFFSET },
  24998   { 0xfa0b, 11895, UNICODE_NOT_PRESENT_OFFSET },
  24999   { 0xfa0c, 11899, UNICODE_NOT_PRESENT_OFFSET },
  25000   { 0xfa0d, 11903, UNICODE_NOT_PRESENT_OFFSET },
  25001   { 0xfa10, 11907, UNICODE_NOT_PRESENT_OFFSET },
  25002   { 0xfa12, 11911, UNICODE_NOT_PRESENT_OFFSET },
  25003   { 0xfa15, 11915, UNICODE_NOT_PRESENT_OFFSET },
  25004   { 0xfa16, 11919, UNICODE_NOT_PRESENT_OFFSET },
  25005   { 0xfa17, 11923, UNICODE_NOT_PRESENT_OFFSET },
  25006   { 0xfa18, 11927, UNICODE_NOT_PRESENT_OFFSET },
  25007   { 0xfa19, 11931, UNICODE_NOT_PRESENT_OFFSET },
  25008   { 0xfa1a, 11935, UNICODE_NOT_PRESENT_OFFSET },
  25009   { 0xfa1b, 11939, UNICODE_NOT_PRESENT_OFFSET },
  25010   { 0xfa1c, 11943, UNICODE_NOT_PRESENT_OFFSET },
  25011   { 0xfa1d, 11947, UNICODE_NOT_PRESENT_OFFSET },
  25012   { 0xfa1e, 6673, UNICODE_NOT_PRESENT_OFFSET },
  25013   { 0xfa20, 11951, UNICODE_NOT_PRESENT_OFFSET },
  25014   { 0xfa22, 11955, UNICODE_NOT_PRESENT_OFFSET },
  25015   { 0xfa25, 11959, UNICODE_NOT_PRESENT_OFFSET },
  25016   { 0xfa26, 11963, UNICODE_NOT_PRESENT_OFFSET },
  25017   { 0xfa2a, 11967, UNICODE_NOT_PRESENT_OFFSET },
  25018   { 0xfa2b, 11971, UNICODE_NOT_PRESENT_OFFSET },
  25019   { 0xfa2c, 11975, UNICODE_NOT_PRESENT_OFFSET },
  25020   { 0xfa2d, 11979, UNICODE_NOT_PRESENT_OFFSET },
  25021   { 0xfa2e, 11983, UNICODE_NOT_PRESENT_OFFSET },
  25022   { 0xfa2f, 11987, UNICODE_NOT_PRESENT_OFFSET },
  25023   { 0xfa30, 11991, UNICODE_NOT_PRESENT_OFFSET },
  25024   { 0xfa31, 11995, UNICODE_NOT_PRESENT_OFFSET },
  25025   { 0xfa32, 11999, UNICODE_NOT_PRESENT_OFFSET },
  25026   { 0xfa33, 12003, UNICODE_NOT_PRESENT_OFFSET },
  25027   { 0xfa34, 12007, UNICODE_NOT_PRESENT_OFFSET },
  25028   { 0xfa35, 12011, UNICODE_NOT_PRESENT_OFFSET },
  25029   { 0xfa36, 12015, UNICODE_NOT_PRESENT_OFFSET },
  25030   { 0xfa37, 12019, UNICODE_NOT_PRESENT_OFFSET },
  25031   { 0xfa38, 12023, UNICODE_NOT_PRESENT_OFFSET },
  25032   { 0xfa39, 12027, UNICODE_NOT_PRESENT_OFFSET },
  25033   { 0xfa3a, 12031, UNICODE_NOT_PRESENT_OFFSET },
  25034   { 0xfa3b, 12035, UNICODE_NOT_PRESENT_OFFSET },
  25035   { 0xfa3c, 6357, UNICODE_NOT_PRESENT_OFFSET },
  25036   { 0xfa3d, 12039, UNICODE_NOT_PRESENT_OFFSET },
  25037   { 0xfa3e, 12043, UNICODE_NOT_PRESENT_OFFSET },
  25038   { 0xfa3f, 12047, UNICODE_NOT_PRESENT_OFFSET },
  25039   { 0xfa40, 12051, UNICODE_NOT_PRESENT_OFFSET },
  25040   { 0xfa41, 12055, UNICODE_NOT_PRESENT_OFFSET },
  25041   { 0xfa42, 12059, UNICODE_NOT_PRESENT_OFFSET },
  25042   { 0xfa43, 12063, UNICODE_NOT_PRESENT_OFFSET },
  25043   { 0xfa44, 12067, UNICODE_NOT_PRESENT_OFFSET },
  25044   { 0xfa45, 12071, UNICODE_NOT_PRESENT_OFFSET },
  25045   { 0xfa46, 12075, UNICODE_NOT_PRESENT_OFFSET },
  25046   { 0xfa47, 12079, UNICODE_NOT_PRESENT_OFFSET },
  25047   { 0xfa48, 12083, UNICODE_NOT_PRESENT_OFFSET },
  25048   { 0xfa49, 12087, UNICODE_NOT_PRESENT_OFFSET },
  25049   { 0xfa4a, 12091, UNICODE_NOT_PRESENT_OFFSET },
  25050   { 0xfa4b, 12095, UNICODE_NOT_PRESENT_OFFSET },
  25051   { 0xfa4c, 8582, UNICODE_NOT_PRESENT_OFFSET },
  25052   { 0xfa4d, 12099, UNICODE_NOT_PRESENT_OFFSET },
  25053   { 0xfa4e, 12103, UNICODE_NOT_PRESENT_OFFSET },
  25054   { 0xfa4f, 12107, UNICODE_NOT_PRESENT_OFFSET },
  25055   { 0xfa50, 12111, UNICODE_NOT_PRESENT_OFFSET },
  25056   { 0xfa51, 8598, UNICODE_NOT_PRESENT_OFFSET },
  25057   { 0xfa52, 12115, UNICODE_NOT_PRESENT_OFFSET },
  25058   { 0xfa53, 12119, UNICODE_NOT_PRESENT_OFFSET },
  25059   { 0xfa54, 12123, UNICODE_NOT_PRESENT_OFFSET },
  25060   { 0xfa55, 12127, UNICODE_NOT_PRESENT_OFFSET },
  25061   { 0xfa56, 12131, UNICODE_NOT_PRESENT_OFFSET },
  25062   { 0xfa57, 11467, UNICODE_NOT_PRESENT_OFFSET },
  25063   { 0xfa58, 12135, UNICODE_NOT_PRESENT_OFFSET },
  25064   { 0xfa59, 12139, UNICODE_NOT_PRESENT_OFFSET },
  25065   { 0xfa5a, 12143, UNICODE_NOT_PRESENT_OFFSET },
  25066   { 0xfa5b, 12147, UNICODE_NOT_PRESENT_OFFSET },
  25067   { 0xfa5c, 12151, UNICODE_NOT_PRESENT_OFFSET },
  25068   { 0xfa5d, 12155, UNICODE_NOT_PRESENT_OFFSET },
  25069   { 0xfa5e, 12155, UNICODE_NOT_PRESENT_OFFSET },
  25070   { 0xfa5f, 12159, UNICODE_NOT_PRESENT_OFFSET },
  25071   { 0xfa60, 12163, UNICODE_NOT_PRESENT_OFFSET },
  25072   { 0xfa61, 12167, UNICODE_NOT_PRESENT_OFFSET },
  25073   { 0xfa62, 12171, UNICODE_NOT_PRESENT_OFFSET },
  25074   { 0xfa63, 12175, UNICODE_NOT_PRESENT_OFFSET },
  25075   { 0xfa64, 12179, UNICODE_NOT_PRESENT_OFFSET },
  25076   { 0xfa65, 12183, UNICODE_NOT_PRESENT_OFFSET },
  25077   { 0xfa66, 12187, UNICODE_NOT_PRESENT_OFFSET },
  25078   { 0xfa67, 11959, UNICODE_NOT_PRESENT_OFFSET },
  25079   { 0xfa68, 12191, UNICODE_NOT_PRESENT_OFFSET },
  25080   { 0xfa69, 12195, UNICODE_NOT_PRESENT_OFFSET },
  25081   { 0xfa6a, 12199, UNICODE_NOT_PRESENT_OFFSET },
  25082   { 0xfa6b, 12203, UNICODE_NOT_PRESENT_OFFSET },
  25083   { 0xfa6c, 12207, UNICODE_NOT_PRESENT_OFFSET },
  25084   { 0xfa6d, 12212, UNICODE_NOT_PRESENT_OFFSET },
  25085   { 0xfa70, 12216, UNICODE_NOT_PRESENT_OFFSET },
  25086   { 0xfa71, 12220, UNICODE_NOT_PRESENT_OFFSET },
  25087   { 0xfa72, 12224, UNICODE_NOT_PRESENT_OFFSET },
  25088   { 0xfa73, 12228, UNICODE_NOT_PRESENT_OFFSET },
  25089   { 0xfa74, 12232, UNICODE_NOT_PRESENT_OFFSET },
  25090   { 0xfa75, 12236, UNICODE_NOT_PRESENT_OFFSET },
  25091   { 0xfa76, 12240, UNICODE_NOT_PRESENT_OFFSET },
  25092   { 0xfa77, 12244, UNICODE_NOT_PRESENT_OFFSET },
  25093   { 0xfa78, 12015, UNICODE_NOT_PRESENT_OFFSET },
  25094   { 0xfa79, 12248, UNICODE_NOT_PRESENT_OFFSET },
  25095   { 0xfa7a, 12252, UNICODE_NOT_PRESENT_OFFSET },
  25096   { 0xfa7b, 12256, UNICODE_NOT_PRESENT_OFFSET },
  25097   { 0xfa7c, 11907, UNICODE_NOT_PRESENT_OFFSET },
  25098   { 0xfa7d, 12260, UNICODE_NOT_PRESENT_OFFSET },
  25099   { 0xfa7e, 12264, UNICODE_NOT_PRESENT_OFFSET },
  25100   { 0xfa7f, 12268, UNICODE_NOT_PRESENT_OFFSET },
  25101   { 0xfa80, 12272, UNICODE_NOT_PRESENT_OFFSET },
  25102   { 0xfa81, 12276, UNICODE_NOT_PRESENT_OFFSET },
  25103   { 0xfa82, 12280, UNICODE_NOT_PRESENT_OFFSET },
  25104   { 0xfa83, 12284, UNICODE_NOT_PRESENT_OFFSET },
  25105   { 0xfa84, 12288, UNICODE_NOT_PRESENT_OFFSET },
  25106   { 0xfa85, 12292, UNICODE_NOT_PRESENT_OFFSET },
  25107   { 0xfa86, 12296, UNICODE_NOT_PRESENT_OFFSET },
  25108   { 0xfa87, 12300, UNICODE_NOT_PRESENT_OFFSET },
  25109   { 0xfa88, 12304, UNICODE_NOT_PRESENT_OFFSET },
  25110   { 0xfa89, 12047, UNICODE_NOT_PRESENT_OFFSET },
  25111   { 0xfa8a, 12308, UNICODE_NOT_PRESENT_OFFSET },
  25112   { 0xfa8b, 12051, UNICODE_NOT_PRESENT_OFFSET },
  25113   { 0xfa8c, 12312, UNICODE_NOT_PRESENT_OFFSET },
  25114   { 0xfa8d, 12316, UNICODE_NOT_PRESENT_OFFSET },
  25115   { 0xfa8e, 12320, UNICODE_NOT_PRESENT_OFFSET },
  25116   { 0xfa8f, 12324, UNICODE_NOT_PRESENT_OFFSET },
  25117   { 0xfa90, 12328, UNICODE_NOT_PRESENT_OFFSET },
  25118   { 0xfa91, 11911, UNICODE_NOT_PRESENT_OFFSET },
  25119   { 0xfa92, 11055, UNICODE_NOT_PRESENT_OFFSET },
  25120   { 0xfa93, 12332, UNICODE_NOT_PRESENT_OFFSET },
  25121   { 0xfa94, 12336, UNICODE_NOT_PRESENT_OFFSET },
  25122   { 0xfa95, 6489, UNICODE_NOT_PRESENT_OFFSET },
  25123   { 0xfa96, 11327, UNICODE_NOT_PRESENT_OFFSET },
  25124   { 0xfa97, 11659, UNICODE_NOT_PRESENT_OFFSET },
  25125   { 0xfa98, 12340, UNICODE_NOT_PRESENT_OFFSET },
  25126   { 0xfa99, 12344, UNICODE_NOT_PRESENT_OFFSET },
  25127   { 0xfa9a, 12079, UNICODE_NOT_PRESENT_OFFSET },
  25128   { 0xfa9b, 12348, UNICODE_NOT_PRESENT_OFFSET },
  25129   { 0xfa9c, 12083, UNICODE_NOT_PRESENT_OFFSET },
  25130   { 0xfa9d, 12352, UNICODE_NOT_PRESENT_OFFSET },
  25131   { 0xfa9e, 12356, UNICODE_NOT_PRESENT_OFFSET },
  25132   { 0xfa9f, 12360, UNICODE_NOT_PRESENT_OFFSET },
  25133   { 0xfaa0, 11919, UNICODE_NOT_PRESENT_OFFSET },
  25134   { 0xfaa1, 12364, UNICODE_NOT_PRESENT_OFFSET },
  25135   { 0xfaa2, 12368, UNICODE_NOT_PRESENT_OFFSET },
  25136   { 0xfaa3, 12372, UNICODE_NOT_PRESENT_OFFSET },
  25137   { 0xfaa4, 12376, UNICODE_NOT_PRESENT_OFFSET },
  25138   { 0xfaa5, 12380, UNICODE_NOT_PRESENT_OFFSET },
  25139   { 0xfaa6, 11923, UNICODE_NOT_PRESENT_OFFSET },
  25140   { 0xfaa7, 12384, UNICODE_NOT_PRESENT_OFFSET },
  25141   { 0xfaa8, 12388, UNICODE_NOT_PRESENT_OFFSET },
  25142   { 0xfaa9, 12392, UNICODE_NOT_PRESENT_OFFSET },
  25143   { 0xfaaa, 12396, UNICODE_NOT_PRESENT_OFFSET },
  25144   { 0xfaab, 12400, UNICODE_NOT_PRESENT_OFFSET },
  25145   { 0xfaac, 12404, UNICODE_NOT_PRESENT_OFFSET },
  25146   { 0xfaad, 12131, UNICODE_NOT_PRESENT_OFFSET },
  25147   { 0xfaae, 12408, UNICODE_NOT_PRESENT_OFFSET },
  25148   { 0xfaaf, 12412, UNICODE_NOT_PRESENT_OFFSET },
  25149   { 0xfab0, 11467, UNICODE_NOT_PRESENT_OFFSET },
  25150   { 0xfab1, 12416, UNICODE_NOT_PRESENT_OFFSET },
  25151   { 0xfab2, 12147, UNICODE_NOT_PRESENT_OFFSET },
  25152   { 0xfab3, 12420, UNICODE_NOT_PRESENT_OFFSET },
  25153   { 0xfab4, 12424, UNICODE_NOT_PRESENT_OFFSET },
  25154   { 0xfab5, 12428, UNICODE_NOT_PRESENT_OFFSET },
  25155   { 0xfab6, 12432, UNICODE_NOT_PRESENT_OFFSET },
  25156   { 0xfab7, 12436, UNICODE_NOT_PRESENT_OFFSET },
  25157   { 0xfab8, 12167, UNICODE_NOT_PRESENT_OFFSET },
  25158   { 0xfab9, 12440, UNICODE_NOT_PRESENT_OFFSET },
  25159   { 0xfaba, 11955, UNICODE_NOT_PRESENT_OFFSET },
  25160   { 0xfabb, 12444, UNICODE_NOT_PRESENT_OFFSET },
  25161   { 0xfabc, 12171, UNICODE_NOT_PRESENT_OFFSET },
  25162   { 0xfabd, 11251, UNICODE_NOT_PRESENT_OFFSET },
  25163   { 0xfabe, 12448, UNICODE_NOT_PRESENT_OFFSET },
  25164   { 0xfabf, 12175, UNICODE_NOT_PRESENT_OFFSET },
  25165   { 0xfac0, 12452, UNICODE_NOT_PRESENT_OFFSET },
  25166   { 0xfac1, 12183, UNICODE_NOT_PRESENT_OFFSET },
  25167   { 0xfac2, 12456, UNICODE_NOT_PRESENT_OFFSET },
  25168   { 0xfac3, 12460, UNICODE_NOT_PRESENT_OFFSET },
  25169   { 0xfac4, 12464, UNICODE_NOT_PRESENT_OFFSET },
  25170   { 0xfac5, 12468, UNICODE_NOT_PRESENT_OFFSET },
  25171   { 0xfac6, 12472, UNICODE_NOT_PRESENT_OFFSET },
  25172   { 0xfac7, 12191, UNICODE_NOT_PRESENT_OFFSET },
  25173   { 0xfac8, 11943, UNICODE_NOT_PRESENT_OFFSET },
  25174   { 0xfac9, 12476, UNICODE_NOT_PRESENT_OFFSET },
  25175   { 0xfaca, 12195, UNICODE_NOT_PRESENT_OFFSET },
  25176   { 0xfacb, 12480, UNICODE_NOT_PRESENT_OFFSET },
  25177   { 0xfacc, 12199, UNICODE_NOT_PRESENT_OFFSET },
  25178   { 0xfacd, 12484, UNICODE_NOT_PRESENT_OFFSET },
  25179   { 0xface, 7029, UNICODE_NOT_PRESENT_OFFSET },
  25180   { 0xfacf, 12488, UNICODE_NOT_PRESENT_OFFSET },
  25181   { 0xfad0, 12493, UNICODE_NOT_PRESENT_OFFSET },
  25182   { 0xfad1, 12498, UNICODE_NOT_PRESENT_OFFSET },
  25183   { 0xfad2, 12503, UNICODE_NOT_PRESENT_OFFSET },
  25184   { 0xfad3, 12507, UNICODE_NOT_PRESENT_OFFSET },
  25185   { 0xfad4, 12511, UNICODE_NOT_PRESENT_OFFSET },
  25186   { 0xfad5, 12515, UNICODE_NOT_PRESENT_OFFSET },
  25187   { 0xfad6, 12520, UNICODE_NOT_PRESENT_OFFSET },
  25188   { 0xfad7, 12525, UNICODE_NOT_PRESENT_OFFSET },
  25189   { 0xfad8, 12530, UNICODE_NOT_PRESENT_OFFSET },
  25190   { 0xfad9, 12534, UNICODE_NOT_PRESENT_OFFSET },
  25191   { 0xfb00, UNICODE_NOT_PRESENT_OFFSET, 12538 },
  25192   { 0xfb01, UNICODE_NOT_PRESENT_OFFSET, 12541 },
  25193   { 0xfb02, UNICODE_NOT_PRESENT_OFFSET, 12544 },
  25194   { 0xfb03, UNICODE_NOT_PRESENT_OFFSET, 12547 },
  25195   { 0xfb04, UNICODE_NOT_PRESENT_OFFSET, 12551 },
  25196   { 0xfb05, UNICODE_NOT_PRESENT_OFFSET, 12555 },
  25197   { 0xfb06, UNICODE_NOT_PRESENT_OFFSET, 12555 },
  25198   { 0xfb13, UNICODE_NOT_PRESENT_OFFSET, 12558 },
  25199   { 0xfb14, UNICODE_NOT_PRESENT_OFFSET, 12563 },
  25200   { 0xfb15, UNICODE_NOT_PRESENT_OFFSET, 12568 },
  25201   { 0xfb16, UNICODE_NOT_PRESENT_OFFSET, 12573 },
  25202   { 0xfb17, UNICODE_NOT_PRESENT_OFFSET, 12578 },
  25203   { 0xfb1d, 12583, UNICODE_NOT_PRESENT_OFFSET },
  25204   { 0xfb1f, 12588, UNICODE_NOT_PRESENT_OFFSET },
  25205   { 0xfb20, UNICODE_NOT_PRESENT_OFFSET, 12593 },
  25206   { 0xfb21, UNICODE_NOT_PRESENT_OFFSET, 5338 },
  25207   { 0xfb22, UNICODE_NOT_PRESENT_OFFSET, 5347 },
  25208   { 0xfb23, UNICODE_NOT_PRESENT_OFFSET, 12596 },
  25209   { 0xfb24, UNICODE_NOT_PRESENT_OFFSET, 12599 },
  25210   { 0xfb25, UNICODE_NOT_PRESENT_OFFSET, 12602 },
  25211   { 0xfb26, UNICODE_NOT_PRESENT_OFFSET, 12605 },
  25212   { 0xfb27, UNICODE_NOT_PRESENT_OFFSET, 12608 },
  25213   { 0xfb28, UNICODE_NOT_PRESENT_OFFSET, 12611 },
  25214   { 0xfb29, UNICODE_NOT_PRESENT_OFFSET, 5267 },
  25215   { 0xfb2a, 12614, UNICODE_NOT_PRESENT_OFFSET },
  25216   { 0xfb2b, 12619, UNICODE_NOT_PRESENT_OFFSET },
  25217   { 0xfb2c, 12624, UNICODE_NOT_PRESENT_OFFSET },
  25218   { 0xfb2d, 12631, UNICODE_NOT_PRESENT_OFFSET },
  25219   { 0xfb2e, 12638, UNICODE_NOT_PRESENT_OFFSET },
  25220   { 0xfb2f, 12643, UNICODE_NOT_PRESENT_OFFSET },
  25221   { 0xfb30, 12648, UNICODE_NOT_PRESENT_OFFSET },
  25222   { 0xfb31, 12653, UNICODE_NOT_PRESENT_OFFSET },
  25223   { 0xfb32, 12658, UNICODE_NOT_PRESENT_OFFSET },
  25224   { 0xfb33, 12663, UNICODE_NOT_PRESENT_OFFSET },
  25225   { 0xfb34, 12668, UNICODE_NOT_PRESENT_OFFSET },
  25226   { 0xfb35, 12673, UNICODE_NOT_PRESENT_OFFSET },
  25227   { 0xfb36, 12678, UNICODE_NOT_PRESENT_OFFSET },
  25228   { 0xfb38, 12683, UNICODE_NOT_PRESENT_OFFSET },
  25229   { 0xfb39, 12688, UNICODE_NOT_PRESENT_OFFSET },
  25230   { 0xfb3a, 12693, UNICODE_NOT_PRESENT_OFFSET },
  25231   { 0xfb3b, 12698, UNICODE_NOT_PRESENT_OFFSET },
  25232   { 0xfb3c, 12703, UNICODE_NOT_PRESENT_OFFSET },
  25233   { 0xfb3e, 12708, UNICODE_NOT_PRESENT_OFFSET },
  25234   { 0xfb40, 12713, UNICODE_NOT_PRESENT_OFFSET },
  25235   { 0xfb41, 12718, UNICODE_NOT_PRESENT_OFFSET },
  25236   { 0xfb43, 12723, UNICODE_NOT_PRESENT_OFFSET },
  25237   { 0xfb44, 12728, UNICODE_NOT_PRESENT_OFFSET },
  25238   { 0xfb46, 12733, UNICODE_NOT_PRESENT_OFFSET },
  25239   { 0xfb47, 12738, UNICODE_NOT_PRESENT_OFFSET },
  25240   { 0xfb48, 12743, UNICODE_NOT_PRESENT_OFFSET },
  25241   { 0xfb49, 12748, UNICODE_NOT_PRESENT_OFFSET },
  25242   { 0xfb4a, 12753, UNICODE_NOT_PRESENT_OFFSET },
  25243   { 0xfb4b, 12758, UNICODE_NOT_PRESENT_OFFSET },
  25244   { 0xfb4c, 12763, UNICODE_NOT_PRESENT_OFFSET },
  25245   { 0xfb4d, 12768, UNICODE_NOT_PRESENT_OFFSET },
  25246   { 0xfb4e, 12773, UNICODE_NOT_PRESENT_OFFSET },
  25247   { 0xfb4f, UNICODE_NOT_PRESENT_OFFSET, 12778 },
  25248   { 0xfb50, UNICODE_NOT_PRESENT_OFFSET, 12783 },
  25249   { 0xfb51, UNICODE_NOT_PRESENT_OFFSET, 12783 },
  25250   { 0xfb52, UNICODE_NOT_PRESENT_OFFSET, 12786 },
  25251   { 0xfb53, UNICODE_NOT_PRESENT_OFFSET, 12786 },
  25252   { 0xfb54, UNICODE_NOT_PRESENT_OFFSET, 12786 },
  25253   { 0xfb55, UNICODE_NOT_PRESENT_OFFSET, 12786 },
  25254   { 0xfb56, UNICODE_NOT_PRESENT_OFFSET, 12789 },
  25255   { 0xfb57, UNICODE_NOT_PRESENT_OFFSET, 12789 },
  25256   { 0xfb58, UNICODE_NOT_PRESENT_OFFSET, 12789 },
  25257   { 0xfb59, UNICODE_NOT_PRESENT_OFFSET, 12789 },
  25258   { 0xfb5a, UNICODE_NOT_PRESENT_OFFSET, 12792 },
  25259   { 0xfb5b, UNICODE_NOT_PRESENT_OFFSET, 12792 },
  25260   { 0xfb5c, UNICODE_NOT_PRESENT_OFFSET, 12792 },
  25261   { 0xfb5d, UNICODE_NOT_PRESENT_OFFSET, 12792 },
  25262   { 0xfb5e, UNICODE_NOT_PRESENT_OFFSET, 12795 },
  25263   { 0xfb5f, UNICODE_NOT_PRESENT_OFFSET, 12795 },
  25264   { 0xfb60, UNICODE_NOT_PRESENT_OFFSET, 12795 },
  25265   { 0xfb61, UNICODE_NOT_PRESENT_OFFSET, 12795 },
  25266   { 0xfb62, UNICODE_NOT_PRESENT_OFFSET, 12798 },
  25267   { 0xfb63, UNICODE_NOT_PRESENT_OFFSET, 12798 },
  25268   { 0xfb64, UNICODE_NOT_PRESENT_OFFSET, 12798 },
  25269   { 0xfb65, UNICODE_NOT_PRESENT_OFFSET, 12798 },
  25270   { 0xfb66, UNICODE_NOT_PRESENT_OFFSET, 12801 },
  25271   { 0xfb67, UNICODE_NOT_PRESENT_OFFSET, 12801 },
  25272   { 0xfb68, UNICODE_NOT_PRESENT_OFFSET, 12801 },
  25273   { 0xfb69, UNICODE_NOT_PRESENT_OFFSET, 12801 },
  25274   { 0xfb6a, UNICODE_NOT_PRESENT_OFFSET, 12804 },
  25275   { 0xfb6b, UNICODE_NOT_PRESENT_OFFSET, 12804 },
  25276   { 0xfb6c, UNICODE_NOT_PRESENT_OFFSET, 12804 },
  25277   { 0xfb6d, UNICODE_NOT_PRESENT_OFFSET, 12804 },
  25278   { 0xfb6e, UNICODE_NOT_PRESENT_OFFSET, 12807 },
  25279   { 0xfb6f, UNICODE_NOT_PRESENT_OFFSET, 12807 },
  25280   { 0xfb70, UNICODE_NOT_PRESENT_OFFSET, 12807 },
  25281   { 0xfb71, UNICODE_NOT_PRESENT_OFFSET, 12807 },
  25282   { 0xfb72, UNICODE_NOT_PRESENT_OFFSET, 12810 },
  25283   { 0xfb73, UNICODE_NOT_PRESENT_OFFSET, 12810 },
  25284   { 0xfb74, UNICODE_NOT_PRESENT_OFFSET, 12810 },
  25285   { 0xfb75, UNICODE_NOT_PRESENT_OFFSET, 12810 },
  25286   { 0xfb76, UNICODE_NOT_PRESENT_OFFSET, 12813 },
  25287   { 0xfb77, UNICODE_NOT_PRESENT_OFFSET, 12813 },
  25288   { 0xfb78, UNICODE_NOT_PRESENT_OFFSET, 12813 },
  25289   { 0xfb79, UNICODE_NOT_PRESENT_OFFSET, 12813 },
  25290   { 0xfb7a, UNICODE_NOT_PRESENT_OFFSET, 12816 },
  25291   { 0xfb7b, UNICODE_NOT_PRESENT_OFFSET, 12816 },
  25292   { 0xfb7c, UNICODE_NOT_PRESENT_OFFSET, 12816 },
  25293   { 0xfb7d, UNICODE_NOT_PRESENT_OFFSET, 12816 },
  25294   { 0xfb7e, UNICODE_NOT_PRESENT_OFFSET, 12819 },
  25295   { 0xfb7f, UNICODE_NOT_PRESENT_OFFSET, 12819 },
  25296   { 0xfb80, UNICODE_NOT_PRESENT_OFFSET, 12819 },
  25297   { 0xfb81, UNICODE_NOT_PRESENT_OFFSET, 12819 },
  25298   { 0xfb82, UNICODE_NOT_PRESENT_OFFSET, 12822 },
  25299   { 0xfb83, UNICODE_NOT_PRESENT_OFFSET, 12822 },
  25300   { 0xfb84, UNICODE_NOT_PRESENT_OFFSET, 12825 },
  25301   { 0xfb85, UNICODE_NOT_PRESENT_OFFSET, 12825 },
  25302   { 0xfb86, UNICODE_NOT_PRESENT_OFFSET, 12828 },
  25303   { 0xfb87, UNICODE_NOT_PRESENT_OFFSET, 12828 },
  25304   { 0xfb88, UNICODE_NOT_PRESENT_OFFSET, 12831 },
  25305   { 0xfb89, UNICODE_NOT_PRESENT_OFFSET, 12831 },
  25306   { 0xfb8a, UNICODE_NOT_PRESENT_OFFSET, 12834 },
  25307   { 0xfb8b, UNICODE_NOT_PRESENT_OFFSET, 12834 },
  25308   { 0xfb8c, UNICODE_NOT_PRESENT_OFFSET, 12837 },
  25309   { 0xfb8d, UNICODE_NOT_PRESENT_OFFSET, 12837 },
  25310   { 0xfb8e, UNICODE_NOT_PRESENT_OFFSET, 12840 },
  25311   { 0xfb8f, UNICODE_NOT_PRESENT_OFFSET, 12840 },
  25312   { 0xfb90, UNICODE_NOT_PRESENT_OFFSET, 12840 },
  25313   { 0xfb91, UNICODE_NOT_PRESENT_OFFSET, 12840 },
  25314   { 0xfb92, UNICODE_NOT_PRESENT_OFFSET, 12843 },
  25315   { 0xfb93, UNICODE_NOT_PRESENT_OFFSET, 12843 },
  25316   { 0xfb94, UNICODE_NOT_PRESENT_OFFSET, 12843 },
  25317   { 0xfb95, UNICODE_NOT_PRESENT_OFFSET, 12843 },
  25318   { 0xfb96, UNICODE_NOT_PRESENT_OFFSET, 12846 },
  25319   { 0xfb97, UNICODE_NOT_PRESENT_OFFSET, 12846 },
  25320   { 0xfb98, UNICODE_NOT_PRESENT_OFFSET, 12846 },
  25321   { 0xfb99, UNICODE_NOT_PRESENT_OFFSET, 12846 },
  25322   { 0xfb9a, UNICODE_NOT_PRESENT_OFFSET, 12849 },
  25323   { 0xfb9b, UNICODE_NOT_PRESENT_OFFSET, 12849 },
  25324   { 0xfb9c, UNICODE_NOT_PRESENT_OFFSET, 12849 },
  25325   { 0xfb9d, UNICODE_NOT_PRESENT_OFFSET, 12849 },
  25326   { 0xfb9e, UNICODE_NOT_PRESENT_OFFSET, 12852 },
  25327   { 0xfb9f, UNICODE_NOT_PRESENT_OFFSET, 12852 },
  25328   { 0xfba0, UNICODE_NOT_PRESENT_OFFSET, 12855 },
  25329   { 0xfba1, UNICODE_NOT_PRESENT_OFFSET, 12855 },
  25330   { 0xfba2, UNICODE_NOT_PRESENT_OFFSET, 12855 },
  25331   { 0xfba3, UNICODE_NOT_PRESENT_OFFSET, 12855 },
  25332   { 0xfba4, UNICODE_NOT_PRESENT_OFFSET, 1721 },
  25333   { 0xfba5, UNICODE_NOT_PRESENT_OFFSET, 1721 },
  25334   { 0xfba6, UNICODE_NOT_PRESENT_OFFSET, 12858 },
  25335   { 0xfba7, UNICODE_NOT_PRESENT_OFFSET, 12858 },
  25336   { 0xfba8, UNICODE_NOT_PRESENT_OFFSET, 12858 },
  25337   { 0xfba9, UNICODE_NOT_PRESENT_OFFSET, 12858 },
  25338   { 0xfbaa, UNICODE_NOT_PRESENT_OFFSET, 12861 },
  25339   { 0xfbab, UNICODE_NOT_PRESENT_OFFSET, 12861 },
  25340   { 0xfbac, UNICODE_NOT_PRESENT_OFFSET, 12861 },
  25341   { 0xfbad, UNICODE_NOT_PRESENT_OFFSET, 12861 },
  25342   { 0xfbae, UNICODE_NOT_PRESENT_OFFSET, 12864 },
  25343   { 0xfbaf, UNICODE_NOT_PRESENT_OFFSET, 12864 },
  25344   { 0xfbb0, UNICODE_NOT_PRESENT_OFFSET, 1731 },
  25345   { 0xfbb1, UNICODE_NOT_PRESENT_OFFSET, 1731 },
  25346   { 0xfbd3, UNICODE_NOT_PRESENT_OFFSET, 12867 },
  25347   { 0xfbd4, UNICODE_NOT_PRESENT_OFFSET, 12867 },
  25348   { 0xfbd5, UNICODE_NOT_PRESENT_OFFSET, 12867 },
  25349   { 0xfbd6, UNICODE_NOT_PRESENT_OFFSET, 12867 },
  25350   { 0xfbd7, UNICODE_NOT_PRESENT_OFFSET, 12870 },
  25351   { 0xfbd8, UNICODE_NOT_PRESENT_OFFSET, 12870 },
  25352   { 0xfbd9, UNICODE_NOT_PRESENT_OFFSET, 12873 },
  25353   { 0xfbda, UNICODE_NOT_PRESENT_OFFSET, 12873 },
  25354   { 0xfbdb, UNICODE_NOT_PRESENT_OFFSET, 12876 },
  25355   { 0xfbdc, UNICODE_NOT_PRESENT_OFFSET, 12876 },
  25356   { 0xfbdd, UNICODE_NOT_PRESENT_OFFSET, 1711 },
  25357   { 0xfbde, UNICODE_NOT_PRESENT_OFFSET, 12879 },
  25358   { 0xfbdf, UNICODE_NOT_PRESENT_OFFSET, 12879 },
  25359   { 0xfbe0, UNICODE_NOT_PRESENT_OFFSET, 12882 },
  25360   { 0xfbe1, UNICODE_NOT_PRESENT_OFFSET, 12882 },
  25361   { 0xfbe2, UNICODE_NOT_PRESENT_OFFSET, 12885 },
  25362   { 0xfbe3, UNICODE_NOT_PRESENT_OFFSET, 12885 },
  25363   { 0xfbe4, UNICODE_NOT_PRESENT_OFFSET, 12888 },
  25364   { 0xfbe5, UNICODE_NOT_PRESENT_OFFSET, 12888 },
  25365   { 0xfbe6, UNICODE_NOT_PRESENT_OFFSET, 12888 },
  25366   { 0xfbe7, UNICODE_NOT_PRESENT_OFFSET, 12888 },
  25367   { 0xfbe8, UNICODE_NOT_PRESENT_OFFSET, 12891 },
  25368   { 0xfbe9, UNICODE_NOT_PRESENT_OFFSET, 12891 },
  25369   { 0xfbea, UNICODE_NOT_PRESENT_OFFSET, 12894 },
  25370   { 0xfbeb, UNICODE_NOT_PRESENT_OFFSET, 12894 },
  25371   { 0xfbec, UNICODE_NOT_PRESENT_OFFSET, 12901 },
  25372   { 0xfbed, UNICODE_NOT_PRESENT_OFFSET, 12901 },
  25373   { 0xfbee, UNICODE_NOT_PRESENT_OFFSET, 12908 },
  25374   { 0xfbef, UNICODE_NOT_PRESENT_OFFSET, 12908 },
  25375   { 0xfbf0, UNICODE_NOT_PRESENT_OFFSET, 12915 },
  25376   { 0xfbf1, UNICODE_NOT_PRESENT_OFFSET, 12915 },
  25377   { 0xfbf2, UNICODE_NOT_PRESENT_OFFSET, 12922 },
  25378   { 0xfbf3, UNICODE_NOT_PRESENT_OFFSET, 12922 },
  25379   { 0xfbf4, UNICODE_NOT_PRESENT_OFFSET, 12929 },
  25380   { 0xfbf5, UNICODE_NOT_PRESENT_OFFSET, 12929 },
  25381   { 0xfbf6, UNICODE_NOT_PRESENT_OFFSET, 12936 },
  25382   { 0xfbf7, UNICODE_NOT_PRESENT_OFFSET, 12936 },
  25383   { 0xfbf8, UNICODE_NOT_PRESENT_OFFSET, 12936 },
  25384   { 0xfbf9, UNICODE_NOT_PRESENT_OFFSET, 12943 },
  25385   { 0xfbfa, UNICODE_NOT_PRESENT_OFFSET, 12943 },
  25386   { 0xfbfb, UNICODE_NOT_PRESENT_OFFSET, 12943 },
  25387   { 0xfbfc, UNICODE_NOT_PRESENT_OFFSET, 12950 },
  25388   { 0xfbfd, UNICODE_NOT_PRESENT_OFFSET, 12950 },
  25389   { 0xfbfe, UNICODE_NOT_PRESENT_OFFSET, 12950 },
  25390   { 0xfbff, UNICODE_NOT_PRESENT_OFFSET, 12950 },
  25391   { 0xfc00, UNICODE_NOT_PRESENT_OFFSET, 12953 },
  25392   { 0xfc01, UNICODE_NOT_PRESENT_OFFSET, 12960 },
  25393   { 0xfc02, UNICODE_NOT_PRESENT_OFFSET, 12967 },
  25394   { 0xfc03, UNICODE_NOT_PRESENT_OFFSET, 12943 },
  25395   { 0xfc04, UNICODE_NOT_PRESENT_OFFSET, 12974 },
  25396   { 0xfc05, UNICODE_NOT_PRESENT_OFFSET, 12981 },
  25397   { 0xfc06, UNICODE_NOT_PRESENT_OFFSET, 12986 },
  25398   { 0xfc07, UNICODE_NOT_PRESENT_OFFSET, 12991 },
  25399   { 0xfc08, UNICODE_NOT_PRESENT_OFFSET, 12996 },
  25400   { 0xfc09, UNICODE_NOT_PRESENT_OFFSET, 13001 },
  25401   { 0xfc0a, UNICODE_NOT_PRESENT_OFFSET, 13006 },
  25402   { 0xfc0b, UNICODE_NOT_PRESENT_OFFSET, 13011 },
  25403   { 0xfc0c, UNICODE_NOT_PRESENT_OFFSET, 13016 },
  25404   { 0xfc0d, UNICODE_NOT_PRESENT_OFFSET, 13021 },
  25405   { 0xfc0e, UNICODE_NOT_PRESENT_OFFSET, 13026 },
  25406   { 0xfc0f, UNICODE_NOT_PRESENT_OFFSET, 13031 },
  25407   { 0xfc10, UNICODE_NOT_PRESENT_OFFSET, 13036 },
  25408   { 0xfc11, UNICODE_NOT_PRESENT_OFFSET, 13041 },
  25409   { 0xfc12, UNICODE_NOT_PRESENT_OFFSET, 13046 },
  25410   { 0xfc13, UNICODE_NOT_PRESENT_OFFSET, 13051 },
  25411   { 0xfc14, UNICODE_NOT_PRESENT_OFFSET, 13056 },
  25412   { 0xfc15, UNICODE_NOT_PRESENT_OFFSET, 13061 },
  25413   { 0xfc16, UNICODE_NOT_PRESENT_OFFSET, 13066 },
  25414   { 0xfc17, UNICODE_NOT_PRESENT_OFFSET, 13071 },
  25415   { 0xfc18, UNICODE_NOT_PRESENT_OFFSET, 13076 },
  25416   { 0xfc19, UNICODE_NOT_PRESENT_OFFSET, 13081 },
  25417   { 0xfc1a, UNICODE_NOT_PRESENT_OFFSET, 13086 },
  25418   { 0xfc1b, UNICODE_NOT_PRESENT_OFFSET, 13091 },
  25419   { 0xfc1c, UNICODE_NOT_PRESENT_OFFSET, 13096 },
  25420   { 0xfc1d, UNICODE_NOT_PRESENT_OFFSET, 13101 },
  25421   { 0xfc1e, UNICODE_NOT_PRESENT_OFFSET, 13106 },
  25422   { 0xfc1f, UNICODE_NOT_PRESENT_OFFSET, 13111 },
  25423   { 0xfc20, UNICODE_NOT_PRESENT_OFFSET, 13116 },
  25424   { 0xfc21, UNICODE_NOT_PRESENT_OFFSET, 13121 },
  25425   { 0xfc22, UNICODE_NOT_PRESENT_OFFSET, 13126 },
  25426   { 0xfc23, UNICODE_NOT_PRESENT_OFFSET, 13131 },
  25427   { 0xfc24, UNICODE_NOT_PRESENT_OFFSET, 13136 },
  25428   { 0xfc25, UNICODE_NOT_PRESENT_OFFSET, 13141 },
  25429   { 0xfc26, UNICODE_NOT_PRESENT_OFFSET, 13146 },
  25430   { 0xfc27, UNICODE_NOT_PRESENT_OFFSET, 13151 },
  25431   { 0xfc28, UNICODE_NOT_PRESENT_OFFSET, 13156 },
  25432   { 0xfc29, UNICODE_NOT_PRESENT_OFFSET, 13161 },
  25433   { 0xfc2a, UNICODE_NOT_PRESENT_OFFSET, 13166 },
  25434   { 0xfc2b, UNICODE_NOT_PRESENT_OFFSET, 13171 },
  25435   { 0xfc2c, UNICODE_NOT_PRESENT_OFFSET, 13176 },
  25436   { 0xfc2d, UNICODE_NOT_PRESENT_OFFSET, 13181 },
  25437   { 0xfc2e, UNICODE_NOT_PRESENT_OFFSET, 13186 },
  25438   { 0xfc2f, UNICODE_NOT_PRESENT_OFFSET, 13191 },
  25439   { 0xfc30, UNICODE_NOT_PRESENT_OFFSET, 13196 },
  25440   { 0xfc31, UNICODE_NOT_PRESENT_OFFSET, 13201 },
  25441   { 0xfc32, UNICODE_NOT_PRESENT_OFFSET, 13206 },
  25442   { 0xfc33, UNICODE_NOT_PRESENT_OFFSET, 13211 },
  25443   { 0xfc34, UNICODE_NOT_PRESENT_OFFSET, 13216 },
  25444   { 0xfc35, UNICODE_NOT_PRESENT_OFFSET, 13221 },
  25445   { 0xfc36, UNICODE_NOT_PRESENT_OFFSET, 13226 },
  25446   { 0xfc37, UNICODE_NOT_PRESENT_OFFSET, 13231 },
  25447   { 0xfc38, UNICODE_NOT_PRESENT_OFFSET, 13236 },
  25448   { 0xfc39, UNICODE_NOT_PRESENT_OFFSET, 13241 },
  25449   { 0xfc3a, UNICODE_NOT_PRESENT_OFFSET, 13246 },
  25450   { 0xfc3b, UNICODE_NOT_PRESENT_OFFSET, 13251 },
  25451   { 0xfc3c, UNICODE_NOT_PRESENT_OFFSET, 13256 },
  25452   { 0xfc3d, UNICODE_NOT_PRESENT_OFFSET, 13261 },
  25453   { 0xfc3e, UNICODE_NOT_PRESENT_OFFSET, 13266 },
  25454   { 0xfc3f, UNICODE_NOT_PRESENT_OFFSET, 13271 },
  25455   { 0xfc40, UNICODE_NOT_PRESENT_OFFSET, 13276 },
  25456   { 0xfc41, UNICODE_NOT_PRESENT_OFFSET, 13281 },
  25457   { 0xfc42, UNICODE_NOT_PRESENT_OFFSET, 13286 },
  25458   { 0xfc43, UNICODE_NOT_PRESENT_OFFSET, 13291 },
  25459   { 0xfc44, UNICODE_NOT_PRESENT_OFFSET, 13296 },
  25460   { 0xfc45, UNICODE_NOT_PRESENT_OFFSET, 13301 },
  25461   { 0xfc46, UNICODE_NOT_PRESENT_OFFSET, 13306 },
  25462   { 0xfc47, UNICODE_NOT_PRESENT_OFFSET, 13311 },
  25463   { 0xfc48, UNICODE_NOT_PRESENT_OFFSET, 13316 },
  25464   { 0xfc49, UNICODE_NOT_PRESENT_OFFSET, 13321 },
  25465   { 0xfc4a, UNICODE_NOT_PRESENT_OFFSET, 13326 },
  25466   { 0xfc4b, UNICODE_NOT_PRESENT_OFFSET, 13331 },
  25467   { 0xfc4c, UNICODE_NOT_PRESENT_OFFSET, 13336 },
  25468   { 0xfc4d, UNICODE_NOT_PRESENT_OFFSET, 13341 },
  25469   { 0xfc4e, UNICODE_NOT_PRESENT_OFFSET, 13346 },
  25470   { 0xfc4f, UNICODE_NOT_PRESENT_OFFSET, 13351 },
  25471   { 0xfc50, UNICODE_NOT_PRESENT_OFFSET, 13356 },
  25472   { 0xfc51, UNICODE_NOT_PRESENT_OFFSET, 13361 },
  25473   { 0xfc52, UNICODE_NOT_PRESENT_OFFSET, 13366 },
  25474   { 0xfc53, UNICODE_NOT_PRESENT_OFFSET, 13371 },
  25475   { 0xfc54, UNICODE_NOT_PRESENT_OFFSET, 13376 },
  25476   { 0xfc55, UNICODE_NOT_PRESENT_OFFSET, 13381 },
  25477   { 0xfc56, UNICODE_NOT_PRESENT_OFFSET, 13386 },
  25478   { 0xfc57, UNICODE_NOT_PRESENT_OFFSET, 13391 },
  25479   { 0xfc58, UNICODE_NOT_PRESENT_OFFSET, 13396 },
  25480   { 0xfc59, UNICODE_NOT_PRESENT_OFFSET, 13401 },
  25481   { 0xfc5a, UNICODE_NOT_PRESENT_OFFSET, 13406 },
  25482   { 0xfc5b, UNICODE_NOT_PRESENT_OFFSET, 13411 },
  25483   { 0xfc5c, UNICODE_NOT_PRESENT_OFFSET, 13416 },
  25484   { 0xfc5d, UNICODE_NOT_PRESENT_OFFSET, 13421 },
  25485   { 0xfc5e, UNICODE_NOT_PRESENT_OFFSET, 13426 },
  25486   { 0xfc5f, UNICODE_NOT_PRESENT_OFFSET, 13432 },
  25487   { 0xfc60, UNICODE_NOT_PRESENT_OFFSET, 13438 },
  25488   { 0xfc61, UNICODE_NOT_PRESENT_OFFSET, 13444 },
  25489   { 0xfc62, UNICODE_NOT_PRESENT_OFFSET, 13450 },
  25490   { 0xfc63, UNICODE_NOT_PRESENT_OFFSET, 13456 },
  25491   { 0xfc64, UNICODE_NOT_PRESENT_OFFSET, 13462 },
  25492   { 0xfc65, UNICODE_NOT_PRESENT_OFFSET, 13469 },
  25493   { 0xfc66, UNICODE_NOT_PRESENT_OFFSET, 12967 },
  25494   { 0xfc67, UNICODE_NOT_PRESENT_OFFSET, 13476 },
  25495   { 0xfc68, UNICODE_NOT_PRESENT_OFFSET, 12943 },
  25496   { 0xfc69, UNICODE_NOT_PRESENT_OFFSET, 12974 },
  25497   { 0xfc6a, UNICODE_NOT_PRESENT_OFFSET, 13483 },
  25498   { 0xfc6b, UNICODE_NOT_PRESENT_OFFSET, 13488 },
  25499   { 0xfc6c, UNICODE_NOT_PRESENT_OFFSET, 12996 },
  25500   { 0xfc6d, UNICODE_NOT_PRESENT_OFFSET, 13493 },
  25501   { 0xfc6e, UNICODE_NOT_PRESENT_OFFSET, 13001 },
  25502   { 0xfc6f, UNICODE_NOT_PRESENT_OFFSET, 13006 },
  25503   { 0xfc70, UNICODE_NOT_PRESENT_OFFSET, 13498 },
  25504   { 0xfc71, UNICODE_NOT_PRESENT_OFFSET, 13503 },
  25505   { 0xfc72, UNICODE_NOT_PRESENT_OFFSET, 13026 },
  25506   { 0xfc73, UNICODE_NOT_PRESENT_OFFSET, 13508 },
  25507   { 0xfc74, UNICODE_NOT_PRESENT_OFFSET, 13031 },
  25508   { 0xfc75, UNICODE_NOT_PRESENT_OFFSET, 13036 },
  25509   { 0xfc76, UNICODE_NOT_PRESENT_OFFSET, 13513 },
  25510   { 0xfc77, UNICODE_NOT_PRESENT_OFFSET, 13518 },
  25511   { 0xfc78, UNICODE_NOT_PRESENT_OFFSET, 13046 },
  25512   { 0xfc79, UNICODE_NOT_PRESENT_OFFSET, 13523 },
  25513   { 0xfc7a, UNICODE_NOT_PRESENT_OFFSET, 13051 },
  25514   { 0xfc7b, UNICODE_NOT_PRESENT_OFFSET, 13056 },
  25515   { 0xfc7c, UNICODE_NOT_PRESENT_OFFSET, 13201 },
  25516   { 0xfc7d, UNICODE_NOT_PRESENT_OFFSET, 13206 },
  25517   { 0xfc7e, UNICODE_NOT_PRESENT_OFFSET, 13221 },
  25518   { 0xfc7f, UNICODE_NOT_PRESENT_OFFSET, 13226 },
  25519   { 0xfc80, UNICODE_NOT_PRESENT_OFFSET, 13231 },
  25520   { 0xfc81, UNICODE_NOT_PRESENT_OFFSET, 13251 },
  25521   { 0xfc82, UNICODE_NOT_PRESENT_OFFSET, 13256 },
  25522   { 0xfc83, UNICODE_NOT_PRESENT_OFFSET, 13261 },
  25523   { 0xfc84, UNICODE_NOT_PRESENT_OFFSET, 13266 },
  25524   { 0xfc85, UNICODE_NOT_PRESENT_OFFSET, 13286 },
  25525   { 0xfc86, UNICODE_NOT_PRESENT_OFFSET, 13291 },
  25526   { 0xfc87, UNICODE_NOT_PRESENT_OFFSET, 13296 },
  25527   { 0xfc88, UNICODE_NOT_PRESENT_OFFSET, 13528 },
  25528   { 0xfc89, UNICODE_NOT_PRESENT_OFFSET, 13316 },
  25529   { 0xfc8a, UNICODE_NOT_PRESENT_OFFSET, 13533 },
  25530   { 0xfc8b, UNICODE_NOT_PRESENT_OFFSET, 13538 },
  25531   { 0xfc8c, UNICODE_NOT_PRESENT_OFFSET, 13346 },
  25532   { 0xfc8d, UNICODE_NOT_PRESENT_OFFSET, 13543 },
  25533   { 0xfc8e, UNICODE_NOT_PRESENT_OFFSET, 13351 },
  25534   { 0xfc8f, UNICODE_NOT_PRESENT_OFFSET, 13356 },
  25535   { 0xfc90, UNICODE_NOT_PRESENT_OFFSET, 13421 },
  25536   { 0xfc91, UNICODE_NOT_PRESENT_OFFSET, 13548 },
  25537   { 0xfc92, UNICODE_NOT_PRESENT_OFFSET, 13553 },
  25538   { 0xfc93, UNICODE_NOT_PRESENT_OFFSET, 13396 },
  25539   { 0xfc94, UNICODE_NOT_PRESENT_OFFSET, 13558 },
  25540   { 0xfc95, UNICODE_NOT_PRESENT_OFFSET, 13401 },
  25541   { 0xfc96, UNICODE_NOT_PRESENT_OFFSET, 13406 },
  25542   { 0xfc97, UNICODE_NOT_PRESENT_OFFSET, 12953 },
  25543   { 0xfc98, UNICODE_NOT_PRESENT_OFFSET, 12960 },
  25544   { 0xfc99, UNICODE_NOT_PRESENT_OFFSET, 13563 },
  25545   { 0xfc9a, UNICODE_NOT_PRESENT_OFFSET, 12967 },
  25546   { 0xfc9b, UNICODE_NOT_PRESENT_OFFSET, 13570 },
  25547   { 0xfc9c, UNICODE_NOT_PRESENT_OFFSET, 12981 },
  25548   { 0xfc9d, UNICODE_NOT_PRESENT_OFFSET, 12986 },
  25549   { 0xfc9e, UNICODE_NOT_PRESENT_OFFSET, 12991 },
  25550   { 0xfc9f, UNICODE_NOT_PRESENT_OFFSET, 12996 },
  25551   { 0xfca0, UNICODE_NOT_PRESENT_OFFSET, 13577 },
  25552   { 0xfca1, UNICODE_NOT_PRESENT_OFFSET, 13011 },
  25553   { 0xfca2, UNICODE_NOT_PRESENT_OFFSET, 13016 },
  25554   { 0xfca3, UNICODE_NOT_PRESENT_OFFSET, 13021 },
  25555   { 0xfca4, UNICODE_NOT_PRESENT_OFFSET, 13026 },
  25556   { 0xfca5, UNICODE_NOT_PRESENT_OFFSET, 13582 },
  25557   { 0xfca6, UNICODE_NOT_PRESENT_OFFSET, 13046 },
  25558   { 0xfca7, UNICODE_NOT_PRESENT_OFFSET, 13061 },
  25559   { 0xfca8, UNICODE_NOT_PRESENT_OFFSET, 13066 },
  25560   { 0xfca9, UNICODE_NOT_PRESENT_OFFSET, 13071 },
  25561   { 0xfcaa, UNICODE_NOT_PRESENT_OFFSET, 13076 },
  25562   { 0xfcab, UNICODE_NOT_PRESENT_OFFSET, 13081 },
  25563   { 0xfcac, UNICODE_NOT_PRESENT_OFFSET, 13091 },
  25564   { 0xfcad, UNICODE_NOT_PRESENT_OFFSET, 13096 },
  25565   { 0xfcae, UNICODE_NOT_PRESENT_OFFSET, 13101 },
  25566   { 0xfcaf, UNICODE_NOT_PRESENT_OFFSET, 13106 },
  25567   { 0xfcb0, UNICODE_NOT_PRESENT_OFFSET, 13111 },
  25568   { 0xfcb1, UNICODE_NOT_PRESENT_OFFSET, 13116 },
  25569   { 0xfcb2, UNICODE_NOT_PRESENT_OFFSET, 13587 },
  25570   { 0xfcb3, UNICODE_NOT_PRESENT_OFFSET, 13121 },
  25571   { 0xfcb4, UNICODE_NOT_PRESENT_OFFSET, 13126 },
  25572   { 0xfcb5, UNICODE_NOT_PRESENT_OFFSET, 13131 },
  25573   { 0xfcb6, UNICODE_NOT_PRESENT_OFFSET, 13136 },
  25574   { 0xfcb7, UNICODE_NOT_PRESENT_OFFSET, 13141 },
  25575   { 0xfcb8, UNICODE_NOT_PRESENT_OFFSET, 13146 },
  25576   { 0xfcb9, UNICODE_NOT_PRESENT_OFFSET, 13156 },
  25577   { 0xfcba, UNICODE_NOT_PRESENT_OFFSET, 13161 },
  25578   { 0xfcbb, UNICODE_NOT_PRESENT_OFFSET, 13166 },
  25579   { 0xfcbc, UNICODE_NOT_PRESENT_OFFSET, 13171 },
  25580   { 0xfcbd, UNICODE_NOT_PRESENT_OFFSET, 13176 },
  25581   { 0xfcbe, UNICODE_NOT_PRESENT_OFFSET, 13181 },
  25582   { 0xfcbf, UNICODE_NOT_PRESENT_OFFSET, 13186 },
  25583   { 0xfcc0, UNICODE_NOT_PRESENT_OFFSET, 13191 },
  25584   { 0xfcc1, UNICODE_NOT_PRESENT_OFFSET, 13196 },
  25585   { 0xfcc2, UNICODE_NOT_PRESENT_OFFSET, 13211 },
  25586   { 0xfcc3, UNICODE_NOT_PRESENT_OFFSET, 13216 },
  25587   { 0xfcc4, UNICODE_NOT_PRESENT_OFFSET, 13236 },
  25588   { 0xfcc5, UNICODE_NOT_PRESENT_OFFSET, 13241 },
  25589   { 0xfcc6, UNICODE_NOT_PRESENT_OFFSET, 13246 },
  25590   { 0xfcc7, UNICODE_NOT_PRESENT_OFFSET, 13251 },
  25591   { 0xfcc8, UNICODE_NOT_PRESENT_OFFSET, 13256 },
  25592   { 0xfcc9, UNICODE_NOT_PRESENT_OFFSET, 13271 },
  25593   { 0xfcca, UNICODE_NOT_PRESENT_OFFSET, 13276 },
  25594   { 0xfccb, UNICODE_NOT_PRESENT_OFFSET, 13281 },
  25595   { 0xfccc, UNICODE_NOT_PRESENT_OFFSET, 13286 },
  25596   { 0xfccd, UNICODE_NOT_PRESENT_OFFSET, 13592 },
  25597   { 0xfcce, UNICODE_NOT_PRESENT_OFFSET, 13301 },
  25598   { 0xfccf, UNICODE_NOT_PRESENT_OFFSET, 13306 },
  25599   { 0xfcd0, UNICODE_NOT_PRESENT_OFFSET, 13311 },
  25600   { 0xfcd1, UNICODE_NOT_PRESENT_OFFSET, 13316 },
  25601   { 0xfcd2, UNICODE_NOT_PRESENT_OFFSET, 13331 },
  25602   { 0xfcd3, UNICODE_NOT_PRESENT_OFFSET, 13336 },
  25603   { 0xfcd4, UNICODE_NOT_PRESENT_OFFSET, 13341 },
  25604   { 0xfcd5, UNICODE_NOT_PRESENT_OFFSET, 13346 },
  25605   { 0xfcd6, UNICODE_NOT_PRESENT_OFFSET, 13597 },
  25606   { 0xfcd7, UNICODE_NOT_PRESENT_OFFSET, 13361 },
  25607   { 0xfcd8, UNICODE_NOT_PRESENT_OFFSET, 13366 },
  25608   { 0xfcd9, UNICODE_NOT_PRESENT_OFFSET, 13602 },
  25609   { 0xfcda, UNICODE_NOT_PRESENT_OFFSET, 13381 },
  25610   { 0xfcdb, UNICODE_NOT_PRESENT_OFFSET, 13386 },
  25611   { 0xfcdc, UNICODE_NOT_PRESENT_OFFSET, 13391 },
  25612   { 0xfcdd, UNICODE_NOT_PRESENT_OFFSET, 13396 },
  25613   { 0xfcde, UNICODE_NOT_PRESENT_OFFSET, 13607 },
  25614   { 0xfcdf, UNICODE_NOT_PRESENT_OFFSET, 12967 },
  25615   { 0xfce0, UNICODE_NOT_PRESENT_OFFSET, 13570 },
  25616   { 0xfce1, UNICODE_NOT_PRESENT_OFFSET, 12996 },
  25617   { 0xfce2, UNICODE_NOT_PRESENT_OFFSET, 13577 },
  25618   { 0xfce3, UNICODE_NOT_PRESENT_OFFSET, 13026 },
  25619   { 0xfce4, UNICODE_NOT_PRESENT_OFFSET, 13582 },
  25620   { 0xfce5, UNICODE_NOT_PRESENT_OFFSET, 13046 },
  25621   { 0xfce6, UNICODE_NOT_PRESENT_OFFSET, 13612 },
  25622   { 0xfce7, UNICODE_NOT_PRESENT_OFFSET, 13111 },
  25623   { 0xfce8, UNICODE_NOT_PRESENT_OFFSET, 13617 },
  25624   { 0xfce9, UNICODE_NOT_PRESENT_OFFSET, 13622 },
  25625   { 0xfcea, UNICODE_NOT_PRESENT_OFFSET, 13627 },
  25626   { 0xfceb, UNICODE_NOT_PRESENT_OFFSET, 13251 },
  25627   { 0xfcec, UNICODE_NOT_PRESENT_OFFSET, 13256 },
  25628   { 0xfced, UNICODE_NOT_PRESENT_OFFSET, 13286 },
  25629   { 0xfcee, UNICODE_NOT_PRESENT_OFFSET, 13346 },
  25630   { 0xfcef, UNICODE_NOT_PRESENT_OFFSET, 13597 },
  25631   { 0xfcf0, UNICODE_NOT_PRESENT_OFFSET, 13396 },
  25632   { 0xfcf1, UNICODE_NOT_PRESENT_OFFSET, 13607 },
  25633   { 0xfcf2, UNICODE_NOT_PRESENT_OFFSET, 13632 },
  25634   { 0xfcf3, UNICODE_NOT_PRESENT_OFFSET, 13639 },
  25635   { 0xfcf4, UNICODE_NOT_PRESENT_OFFSET, 13646 },
  25636   { 0xfcf5, UNICODE_NOT_PRESENT_OFFSET, 13653 },
  25637   { 0xfcf6, UNICODE_NOT_PRESENT_OFFSET, 13658 },
  25638   { 0xfcf7, UNICODE_NOT_PRESENT_OFFSET, 13663 },
  25639   { 0xfcf8, UNICODE_NOT_PRESENT_OFFSET, 13668 },
  25640   { 0xfcf9, UNICODE_NOT_PRESENT_OFFSET, 13673 },
  25641   { 0xfcfa, UNICODE_NOT_PRESENT_OFFSET, 13678 },
  25642   { 0xfcfb, UNICODE_NOT_PRESENT_OFFSET, 13683 },
  25643   { 0xfcfc, UNICODE_NOT_PRESENT_OFFSET, 13688 },
  25644   { 0xfcfd, UNICODE_NOT_PRESENT_OFFSET, 13693 },
  25645   { 0xfcfe, UNICODE_NOT_PRESENT_OFFSET, 13698 },
  25646   { 0xfcff, UNICODE_NOT_PRESENT_OFFSET, 13703 },
  25647   { 0xfd00, UNICODE_NOT_PRESENT_OFFSET, 13708 },
  25648   { 0xfd01, UNICODE_NOT_PRESENT_OFFSET, 13713 },
  25649   { 0xfd02, UNICODE_NOT_PRESENT_OFFSET, 13718 },
  25650   { 0xfd03, UNICODE_NOT_PRESENT_OFFSET, 13723 },
  25651   { 0xfd04, UNICODE_NOT_PRESENT_OFFSET, 13728 },
  25652   { 0xfd05, UNICODE_NOT_PRESENT_OFFSET, 13733 },
  25653   { 0xfd06, UNICODE_NOT_PRESENT_OFFSET, 13738 },
  25654   { 0xfd07, UNICODE_NOT_PRESENT_OFFSET, 13743 },
  25655   { 0xfd08, UNICODE_NOT_PRESENT_OFFSET, 13748 },
  25656   { 0xfd09, UNICODE_NOT_PRESENT_OFFSET, 13753 },
  25657   { 0xfd0a, UNICODE_NOT_PRESENT_OFFSET, 13758 },
  25658   { 0xfd0b, UNICODE_NOT_PRESENT_OFFSET, 13763 },
  25659   { 0xfd0c, UNICODE_NOT_PRESENT_OFFSET, 13622 },
  25660   { 0xfd0d, UNICODE_NOT_PRESENT_OFFSET, 13768 },
  25661   { 0xfd0e, UNICODE_NOT_PRESENT_OFFSET, 13773 },
  25662   { 0xfd0f, UNICODE_NOT_PRESENT_OFFSET, 13778 },
  25663   { 0xfd10, UNICODE_NOT_PRESENT_OFFSET, 13783 },
  25664   { 0xfd11, UNICODE_NOT_PRESENT_OFFSET, 13653 },
  25665   { 0xfd12, UNICODE_NOT_PRESENT_OFFSET, 13658 },
  25666   { 0xfd13, UNICODE_NOT_PRESENT_OFFSET, 13663 },
  25667   { 0xfd14, UNICODE_NOT_PRESENT_OFFSET, 13668 },
  25668   { 0xfd15, UNICODE_NOT_PRESENT_OFFSET, 13673 },
  25669   { 0xfd16, UNICODE_NOT_PRESENT_OFFSET, 13678 },
  25670   { 0xfd17, UNICODE_NOT_PRESENT_OFFSET, 13683 },
  25671   { 0xfd18, UNICODE_NOT_PRESENT_OFFSET, 13688 },
  25672   { 0xfd19, UNICODE_NOT_PRESENT_OFFSET, 13693 },
  25673   { 0xfd1a, UNICODE_NOT_PRESENT_OFFSET, 13698 },
  25674   { 0xfd1b, UNICODE_NOT_PRESENT_OFFSET, 13703 },
  25675   { 0xfd1c, UNICODE_NOT_PRESENT_OFFSET, 13708 },
  25676   { 0xfd1d, UNICODE_NOT_PRESENT_OFFSET, 13713 },
  25677   { 0xfd1e, UNICODE_NOT_PRESENT_OFFSET, 13718 },
  25678   { 0xfd1f, UNICODE_NOT_PRESENT_OFFSET, 13723 },
  25679   { 0xfd20, UNICODE_NOT_PRESENT_OFFSET, 13728 },
  25680   { 0xfd21, UNICODE_NOT_PRESENT_OFFSET, 13733 },
  25681   { 0xfd22, UNICODE_NOT_PRESENT_OFFSET, 13738 },
  25682   { 0xfd23, UNICODE_NOT_PRESENT_OFFSET, 13743 },
  25683   { 0xfd24, UNICODE_NOT_PRESENT_OFFSET, 13748 },
  25684   { 0xfd25, UNICODE_NOT_PRESENT_OFFSET, 13753 },
  25685   { 0xfd26, UNICODE_NOT_PRESENT_OFFSET, 13758 },
  25686   { 0xfd27, UNICODE_NOT_PRESENT_OFFSET, 13763 },
  25687   { 0xfd28, UNICODE_NOT_PRESENT_OFFSET, 13622 },
  25688   { 0xfd29, UNICODE_NOT_PRESENT_OFFSET, 13768 },
  25689   { 0xfd2a, UNICODE_NOT_PRESENT_OFFSET, 13773 },
  25690   { 0xfd2b, UNICODE_NOT_PRESENT_OFFSET, 13778 },
  25691   { 0xfd2c, UNICODE_NOT_PRESENT_OFFSET, 13783 },
  25692   { 0xfd2d, UNICODE_NOT_PRESENT_OFFSET, 13753 },
  25693   { 0xfd2e, UNICODE_NOT_PRESENT_OFFSET, 13758 },
  25694   { 0xfd2f, UNICODE_NOT_PRESENT_OFFSET, 13763 },
  25695   { 0xfd30, UNICODE_NOT_PRESENT_OFFSET, 13622 },
  25696   { 0xfd31, UNICODE_NOT_PRESENT_OFFSET, 13617 },
  25697   { 0xfd32, UNICODE_NOT_PRESENT_OFFSET, 13627 },
  25698   { 0xfd33, UNICODE_NOT_PRESENT_OFFSET, 13151 },
  25699   { 0xfd34, UNICODE_NOT_PRESENT_OFFSET, 13096 },
  25700   { 0xfd35, UNICODE_NOT_PRESENT_OFFSET, 13101 },
  25701   { 0xfd36, UNICODE_NOT_PRESENT_OFFSET, 13106 },
  25702   { 0xfd37, UNICODE_NOT_PRESENT_OFFSET, 13753 },
  25703   { 0xfd38, UNICODE_NOT_PRESENT_OFFSET, 13758 },
  25704   { 0xfd39, UNICODE_NOT_PRESENT_OFFSET, 13763 },
  25705   { 0xfd3a, UNICODE_NOT_PRESENT_OFFSET, 13151 },
  25706   { 0xfd3b, UNICODE_NOT_PRESENT_OFFSET, 13156 },
  25707   { 0xfd3c, UNICODE_NOT_PRESENT_OFFSET, 13788 },
  25708   { 0xfd3d, UNICODE_NOT_PRESENT_OFFSET, 13788 },
  25709   { 0xfd50, UNICODE_NOT_PRESENT_OFFSET, 13793 },
  25710   { 0xfd51, UNICODE_NOT_PRESENT_OFFSET, 13800 },
  25711   { 0xfd52, UNICODE_NOT_PRESENT_OFFSET, 13800 },
  25712   { 0xfd53, UNICODE_NOT_PRESENT_OFFSET, 13807 },
  25713   { 0xfd54, UNICODE_NOT_PRESENT_OFFSET, 13814 },
  25714   { 0xfd55, UNICODE_NOT_PRESENT_OFFSET, 13821 },
  25715   { 0xfd56, UNICODE_NOT_PRESENT_OFFSET, 13828 },
  25716   { 0xfd57, UNICODE_NOT_PRESENT_OFFSET, 13835 },
  25717   { 0xfd58, UNICODE_NOT_PRESENT_OFFSET, 13842 },
  25718   { 0xfd59, UNICODE_NOT_PRESENT_OFFSET, 13842 },
  25719   { 0xfd5a, UNICODE_NOT_PRESENT_OFFSET, 13849 },
  25720   { 0xfd5b, UNICODE_NOT_PRESENT_OFFSET, 13856 },
  25721   { 0xfd5c, UNICODE_NOT_PRESENT_OFFSET, 13863 },
  25722   { 0xfd5d, UNICODE_NOT_PRESENT_OFFSET, 13870 },
  25723   { 0xfd5e, UNICODE_NOT_PRESENT_OFFSET, 13877 },
  25724   { 0xfd5f, UNICODE_NOT_PRESENT_OFFSET, 13884 },
  25725   { 0xfd60, UNICODE_NOT_PRESENT_OFFSET, 13884 },
  25726   { 0xfd61, UNICODE_NOT_PRESENT_OFFSET, 13891 },
  25727   { 0xfd62, UNICODE_NOT_PRESENT_OFFSET, 13898 },
  25728   { 0xfd63, UNICODE_NOT_PRESENT_OFFSET, 13898 },
  25729   { 0xfd64, UNICODE_NOT_PRESENT_OFFSET, 13905 },
  25730   { 0xfd65, UNICODE_NOT_PRESENT_OFFSET, 13905 },
  25731   { 0xfd66, UNICODE_NOT_PRESENT_OFFSET, 13912 },
  25732   { 0xfd67, UNICODE_NOT_PRESENT_OFFSET, 13919 },
  25733   { 0xfd68, UNICODE_NOT_PRESENT_OFFSET, 13919 },
  25734   { 0xfd69, UNICODE_NOT_PRESENT_OFFSET, 13926 },
  25735   { 0xfd6a, UNICODE_NOT_PRESENT_OFFSET, 13933 },
  25736   { 0xfd6b, UNICODE_NOT_PRESENT_OFFSET, 13933 },
  25737   { 0xfd6c, UNICODE_NOT_PRESENT_OFFSET, 13940 },
  25738   { 0xfd6d, UNICODE_NOT_PRESENT_OFFSET, 13940 },
  25739   { 0xfd6e, UNICODE_NOT_PRESENT_OFFSET, 13947 },
  25740   { 0xfd6f, UNICODE_NOT_PRESENT_OFFSET, 13954 },
  25741   { 0xfd70, UNICODE_NOT_PRESENT_OFFSET, 13954 },
  25742   { 0xfd71, UNICODE_NOT_PRESENT_OFFSET, 13961 },
  25743   { 0xfd72, UNICODE_NOT_PRESENT_OFFSET, 13961 },
  25744   { 0xfd73, UNICODE_NOT_PRESENT_OFFSET, 13968 },
  25745   { 0xfd74, UNICODE_NOT_PRESENT_OFFSET, 13975 },
  25746   { 0xfd75, UNICODE_NOT_PRESENT_OFFSET, 13982 },
  25747   { 0xfd76, UNICODE_NOT_PRESENT_OFFSET, 13989 },
  25748   { 0xfd77, UNICODE_NOT_PRESENT_OFFSET, 13989 },
  25749   { 0xfd78, UNICODE_NOT_PRESENT_OFFSET, 13996 },
  25750   { 0xfd79, UNICODE_NOT_PRESENT_OFFSET, 14003 },
  25751   { 0xfd7a, UNICODE_NOT_PRESENT_OFFSET, 14010 },
  25752   { 0xfd7b, UNICODE_NOT_PRESENT_OFFSET, 14017 },
  25753   { 0xfd7c, UNICODE_NOT_PRESENT_OFFSET, 14024 },
  25754   { 0xfd7d, UNICODE_NOT_PRESENT_OFFSET, 14024 },
  25755   { 0xfd7e, UNICODE_NOT_PRESENT_OFFSET, 14031 },
  25756   { 0xfd7f, UNICODE_NOT_PRESENT_OFFSET, 14038 },
  25757   { 0xfd80, UNICODE_NOT_PRESENT_OFFSET, 14045 },
  25758   { 0xfd81, UNICODE_NOT_PRESENT_OFFSET, 14052 },
  25759   { 0xfd82, UNICODE_NOT_PRESENT_OFFSET, 14059 },
  25760   { 0xfd83, UNICODE_NOT_PRESENT_OFFSET, 14066 },
  25761   { 0xfd84, UNICODE_NOT_PRESENT_OFFSET, 14066 },
  25762   { 0xfd85, UNICODE_NOT_PRESENT_OFFSET, 14073 },
  25763   { 0xfd86, UNICODE_NOT_PRESENT_OFFSET, 14073 },
  25764   { 0xfd87, UNICODE_NOT_PRESENT_OFFSET, 14080 },
  25765   { 0xfd88, UNICODE_NOT_PRESENT_OFFSET, 14080 },
  25766   { 0xfd89, UNICODE_NOT_PRESENT_OFFSET, 14087 },
  25767   { 0xfd8a, UNICODE_NOT_PRESENT_OFFSET, 14094 },
  25768   { 0xfd8b, UNICODE_NOT_PRESENT_OFFSET, 14101 },
  25769   { 0xfd8c, UNICODE_NOT_PRESENT_OFFSET, 14108 },
  25770   { 0xfd8d, UNICODE_NOT_PRESENT_OFFSET, 14115 },
  25771   { 0xfd8e, UNICODE_NOT_PRESENT_OFFSET, 14122 },
  25772   { 0xfd8f, UNICODE_NOT_PRESENT_OFFSET, 14129 },
  25773   { 0xfd92, UNICODE_NOT_PRESENT_OFFSET, 14136 },
  25774   { 0xfd93, UNICODE_NOT_PRESENT_OFFSET, 14143 },
  25775   { 0xfd94, UNICODE_NOT_PRESENT_OFFSET, 14150 },
  25776   { 0xfd95, UNICODE_NOT_PRESENT_OFFSET, 14157 },
  25777   { 0xfd96, UNICODE_NOT_PRESENT_OFFSET, 14164 },
  25778   { 0xfd97, UNICODE_NOT_PRESENT_OFFSET, 14171 },
  25779   { 0xfd98, UNICODE_NOT_PRESENT_OFFSET, 14171 },
  25780   { 0xfd99, UNICODE_NOT_PRESENT_OFFSET, 14178 },
  25781   { 0xfd9a, UNICODE_NOT_PRESENT_OFFSET, 14185 },
  25782   { 0xfd9b, UNICODE_NOT_PRESENT_OFFSET, 14192 },
  25783   { 0xfd9c, UNICODE_NOT_PRESENT_OFFSET, 14199 },
  25784   { 0xfd9d, UNICODE_NOT_PRESENT_OFFSET, 14199 },
  25785   { 0xfd9e, UNICODE_NOT_PRESENT_OFFSET, 14206 },
  25786   { 0xfd9f, UNICODE_NOT_PRESENT_OFFSET, 14213 },
  25787   { 0xfda0, UNICODE_NOT_PRESENT_OFFSET, 14220 },
  25788   { 0xfda1, UNICODE_NOT_PRESENT_OFFSET, 14227 },
  25789   { 0xfda2, UNICODE_NOT_PRESENT_OFFSET, 14234 },
  25790   { 0xfda3, UNICODE_NOT_PRESENT_OFFSET, 14241 },
  25791   { 0xfda4, UNICODE_NOT_PRESENT_OFFSET, 14248 },
  25792   { 0xfda5, UNICODE_NOT_PRESENT_OFFSET, 14255 },
  25793   { 0xfda6, UNICODE_NOT_PRESENT_OFFSET, 14262 },
  25794   { 0xfda7, UNICODE_NOT_PRESENT_OFFSET, 14269 },
  25795   { 0xfda8, UNICODE_NOT_PRESENT_OFFSET, 14276 },
  25796   { 0xfda9, UNICODE_NOT_PRESENT_OFFSET, 14283 },
  25797   { 0xfdaa, UNICODE_NOT_PRESENT_OFFSET, 14290 },
  25798   { 0xfdab, UNICODE_NOT_PRESENT_OFFSET, 14297 },
  25799   { 0xfdac, UNICODE_NOT_PRESENT_OFFSET, 14304 },
  25800   { 0xfdad, UNICODE_NOT_PRESENT_OFFSET, 14311 },
  25801   { 0xfdae, UNICODE_NOT_PRESENT_OFFSET, 14318 },
  25802   { 0xfdaf, UNICODE_NOT_PRESENT_OFFSET, 14325 },
  25803   { 0xfdb0, UNICODE_NOT_PRESENT_OFFSET, 14332 },
  25804   { 0xfdb1, UNICODE_NOT_PRESENT_OFFSET, 14339 },
  25805   { 0xfdb2, UNICODE_NOT_PRESENT_OFFSET, 14346 },
  25806   { 0xfdb3, UNICODE_NOT_PRESENT_OFFSET, 14353 },
  25807   { 0xfdb4, UNICODE_NOT_PRESENT_OFFSET, 14031 },
  25808   { 0xfdb5, UNICODE_NOT_PRESENT_OFFSET, 14045 },
  25809   { 0xfdb6, UNICODE_NOT_PRESENT_OFFSET, 14360 },
  25810   { 0xfdb7, UNICODE_NOT_PRESENT_OFFSET, 14367 },
  25811   { 0xfdb8, UNICODE_NOT_PRESENT_OFFSET, 14374 },
  25812   { 0xfdb9, UNICODE_NOT_PRESENT_OFFSET, 14381 },
  25813   { 0xfdba, UNICODE_NOT_PRESENT_OFFSET, 14388 },
  25814   { 0xfdbb, UNICODE_NOT_PRESENT_OFFSET, 14395 },
  25815   { 0xfdbc, UNICODE_NOT_PRESENT_OFFSET, 14388 },
  25816   { 0xfdbd, UNICODE_NOT_PRESENT_OFFSET, 14374 },
  25817   { 0xfdbe, UNICODE_NOT_PRESENT_OFFSET, 14402 },
  25818   { 0xfdbf, UNICODE_NOT_PRESENT_OFFSET, 14409 },
  25819   { 0xfdc0, UNICODE_NOT_PRESENT_OFFSET, 14416 },
  25820   { 0xfdc1, UNICODE_NOT_PRESENT_OFFSET, 14423 },
  25821   { 0xfdc2, UNICODE_NOT_PRESENT_OFFSET, 14430 },
  25822   { 0xfdc3, UNICODE_NOT_PRESENT_OFFSET, 14395 },
  25823   { 0xfdc4, UNICODE_NOT_PRESENT_OFFSET, 13982 },
  25824   { 0xfdc5, UNICODE_NOT_PRESENT_OFFSET, 13912 },
  25825   { 0xfdc6, UNICODE_NOT_PRESENT_OFFSET, 14437 },
  25826   { 0xfdc7, UNICODE_NOT_PRESENT_OFFSET, 14444 },
  25827   { 0xfdf0, UNICODE_NOT_PRESENT_OFFSET, 14451 },
  25828   { 0xfdf1, UNICODE_NOT_PRESENT_OFFSET, 14458 },
  25829   { 0xfdf2, UNICODE_NOT_PRESENT_OFFSET, 14465 },
  25830   { 0xfdf3, UNICODE_NOT_PRESENT_OFFSET, 14474 },
  25831   { 0xfdf4, UNICODE_NOT_PRESENT_OFFSET, 14483 },
  25832   { 0xfdf5, UNICODE_NOT_PRESENT_OFFSET, 14492 },
  25833   { 0xfdf6, UNICODE_NOT_PRESENT_OFFSET, 14501 },
  25834   { 0xfdf7, UNICODE_NOT_PRESENT_OFFSET, 14510 },
  25835   { 0xfdf8, UNICODE_NOT_PRESENT_OFFSET, 14519 },
  25836   { 0xfdf9, UNICODE_NOT_PRESENT_OFFSET, 14528 },
  25837   { 0xfdfa, UNICODE_NOT_PRESENT_OFFSET, 14535 },
  25838   { 0xfdfb, UNICODE_NOT_PRESENT_OFFSET, 14569 },
  25839   { 0xfdfc, UNICODE_NOT_PRESENT_OFFSET, 14585 },
  25840   { 0xfe10, UNICODE_NOT_PRESENT_OFFSET, 14594 },
  25841   { 0xfe11, UNICODE_NOT_PRESENT_OFFSET, 14596 },
  25842   { 0xfe12, UNICODE_NOT_PRESENT_OFFSET, 14600 },
  25843   { 0xfe13, UNICODE_NOT_PRESENT_OFFSET, 14604 },
  25844   { 0xfe14, UNICODE_NOT_PRESENT_OFFSET, 1248 },
  25845   { 0xfe15, UNICODE_NOT_PRESENT_OFFSET, 14606 },
  25846   { 0xfe16, UNICODE_NOT_PRESENT_OFFSET, 14608 },
  25847   { 0xfe17, UNICODE_NOT_PRESENT_OFFSET, 14610 },
  25848   { 0xfe18, UNICODE_NOT_PRESENT_OFFSET, 14614 },
  25849   { 0xfe19, UNICODE_NOT_PRESENT_OFFSET, 5186 },
  25850   { 0xfe30, UNICODE_NOT_PRESENT_OFFSET, 5183 },
  25851   { 0xfe31, UNICODE_NOT_PRESENT_OFFSET, 14618 },
  25852   { 0xfe32, UNICODE_NOT_PRESENT_OFFSET, 14622 },
  25853   { 0xfe33, UNICODE_NOT_PRESENT_OFFSET, 14626 },
  25854   { 0xfe34, UNICODE_NOT_PRESENT_OFFSET, 14626 },
  25855   { 0xfe35, UNICODE_NOT_PRESENT_OFFSET, 5275 },
  25856   { 0xfe36, UNICODE_NOT_PRESENT_OFFSET, 5277 },
  25857   { 0xfe37, UNICODE_NOT_PRESENT_OFFSET, 14628 },
  25858   { 0xfe38, UNICODE_NOT_PRESENT_OFFSET, 14630 },
  25859   { 0xfe39, UNICODE_NOT_PRESENT_OFFSET, 14632 },
  25860   { 0xfe3a, UNICODE_NOT_PRESENT_OFFSET, 14636 },
  25861   { 0xfe3b, UNICODE_NOT_PRESENT_OFFSET, 14640 },
  25862   { 0xfe3c, UNICODE_NOT_PRESENT_OFFSET, 14644 },
  25863   { 0xfe3d, UNICODE_NOT_PRESENT_OFFSET, 14648 },
  25864   { 0xfe3e, UNICODE_NOT_PRESENT_OFFSET, 14652 },
  25865   { 0xfe3f, UNICODE_NOT_PRESENT_OFFSET, 5826 },
  25866   { 0xfe40, UNICODE_NOT_PRESENT_OFFSET, 5830 },
  25867   { 0xfe41, UNICODE_NOT_PRESENT_OFFSET, 14656 },
  25868   { 0xfe42, UNICODE_NOT_PRESENT_OFFSET, 14660 },
  25869   { 0xfe43, UNICODE_NOT_PRESENT_OFFSET, 14664 },
  25870   { 0xfe44, UNICODE_NOT_PRESENT_OFFSET, 14668 },
  25871   { 0xfe47, UNICODE_NOT_PRESENT_OFFSET, 14672 },
  25872   { 0xfe48, UNICODE_NOT_PRESENT_OFFSET, 14674 },
  25873   { 0xfe49, UNICODE_NOT_PRESENT_OFFSET, 5227 },
  25874   { 0xfe4a, UNICODE_NOT_PRESENT_OFFSET, 5227 },
  25875   { 0xfe4b, UNICODE_NOT_PRESENT_OFFSET, 5227 },
  25876   { 0xfe4c, UNICODE_NOT_PRESENT_OFFSET, 5227 },
  25877   { 0xfe4d, UNICODE_NOT_PRESENT_OFFSET, 14626 },
  25878   { 0xfe4e, UNICODE_NOT_PRESENT_OFFSET, 14626 },
  25879   { 0xfe4f, UNICODE_NOT_PRESENT_OFFSET, 14626 },
  25880   { 0xfe50, UNICODE_NOT_PRESENT_OFFSET, 14594 },
  25881   { 0xfe51, UNICODE_NOT_PRESENT_OFFSET, 14596 },
  25882   { 0xfe52, UNICODE_NOT_PRESENT_OFFSET, 5181 },
  25883   { 0xfe54, UNICODE_NOT_PRESENT_OFFSET, 1248 },
  25884   { 0xfe55, UNICODE_NOT_PRESENT_OFFSET, 14604 },
  25885   { 0xfe56, UNICODE_NOT_PRESENT_OFFSET, 14608 },
  25886   { 0xfe57, UNICODE_NOT_PRESENT_OFFSET, 14606 },
  25887   { 0xfe58, UNICODE_NOT_PRESENT_OFFSET, 14618 },
  25888   { 0xfe59, UNICODE_NOT_PRESENT_OFFSET, 5275 },
  25889   { 0xfe5a, UNICODE_NOT_PRESENT_OFFSET, 5277 },
  25890   { 0xfe5b, UNICODE_NOT_PRESENT_OFFSET, 14628 },
  25891   { 0xfe5c, UNICODE_NOT_PRESENT_OFFSET, 14630 },
  25892   { 0xfe5d, UNICODE_NOT_PRESENT_OFFSET, 14632 },
  25893   { 0xfe5e, UNICODE_NOT_PRESENT_OFFSET, 14636 },
  25894   { 0xfe5f, UNICODE_NOT_PRESENT_OFFSET, 14676 },
  25895   { 0xfe60, UNICODE_NOT_PRESENT_OFFSET, 14678 },
  25896   { 0xfe61, UNICODE_NOT_PRESENT_OFFSET, 14680 },
  25897   { 0xfe62, UNICODE_NOT_PRESENT_OFFSET, 5267 },
  25898   { 0xfe63, UNICODE_NOT_PRESENT_OFFSET, 14682 },
  25899   { 0xfe64, UNICODE_NOT_PRESENT_OFFSET, 14684 },
  25900   { 0xfe65, UNICODE_NOT_PRESENT_OFFSET, 14686 },
  25901   { 0xfe66, UNICODE_NOT_PRESENT_OFFSET, 5273 },
  25902   { 0xfe68, UNICODE_NOT_PRESENT_OFFSET, 14688 },
  25903   { 0xfe69, UNICODE_NOT_PRESENT_OFFSET, 14690 },
  25904   { 0xfe6a, UNICODE_NOT_PRESENT_OFFSET, 14692 },
  25905   { 0xfe6b, UNICODE_NOT_PRESENT_OFFSET, 14694 },
  25906   { 0xfe70, UNICODE_NOT_PRESENT_OFFSET, 14696 },
  25907   { 0xfe71, UNICODE_NOT_PRESENT_OFFSET, 14700 },
  25908   { 0xfe72, UNICODE_NOT_PRESENT_OFFSET, 14705 },
  25909   { 0xfe74, UNICODE_NOT_PRESENT_OFFSET, 14709 },
  25910   { 0xfe76, UNICODE_NOT_PRESENT_OFFSET, 14713 },
  25911   { 0xfe77, UNICODE_NOT_PRESENT_OFFSET, 14717 },
  25912   { 0xfe78, UNICODE_NOT_PRESENT_OFFSET, 14722 },
  25913   { 0xfe79, UNICODE_NOT_PRESENT_OFFSET, 14726 },
  25914   { 0xfe7a, UNICODE_NOT_PRESENT_OFFSET, 14731 },
  25915   { 0xfe7b, UNICODE_NOT_PRESENT_OFFSET, 14735 },
  25916   { 0xfe7c, UNICODE_NOT_PRESENT_OFFSET, 14740 },
  25917   { 0xfe7d, UNICODE_NOT_PRESENT_OFFSET, 14744 },
  25918   { 0xfe7e, UNICODE_NOT_PRESENT_OFFSET, 14749 },
  25919   { 0xfe7f, UNICODE_NOT_PRESENT_OFFSET, 14753 },
  25920   { 0xfe80, UNICODE_NOT_PRESENT_OFFSET, 14758 },
  25921   { 0xfe81, UNICODE_NOT_PRESENT_OFFSET, 1676 },
  25922   { 0xfe82, UNICODE_NOT_PRESENT_OFFSET, 1676 },
  25923   { 0xfe83, UNICODE_NOT_PRESENT_OFFSET, 1681 },
  25924   { 0xfe84, UNICODE_NOT_PRESENT_OFFSET, 1681 },
  25925   { 0xfe85, UNICODE_NOT_PRESENT_OFFSET, 1686 },
  25926   { 0xfe86, UNICODE_NOT_PRESENT_OFFSET, 1686 },
  25927   { 0xfe87, UNICODE_NOT_PRESENT_OFFSET, 1691 },
  25928   { 0xfe88, UNICODE_NOT_PRESENT_OFFSET, 1691 },
  25929   { 0xfe89, UNICODE_NOT_PRESENT_OFFSET, 1696 },
  25930   { 0xfe8a, UNICODE_NOT_PRESENT_OFFSET, 1696 },
  25931   { 0xfe8b, UNICODE_NOT_PRESENT_OFFSET, 1696 },
  25932   { 0xfe8c, UNICODE_NOT_PRESENT_OFFSET, 1696 },
  25933   { 0xfe8d, UNICODE_NOT_PRESENT_OFFSET, 14761 },
  25934   { 0xfe8e, UNICODE_NOT_PRESENT_OFFSET, 14761 },
  25935   { 0xfe8f, UNICODE_NOT_PRESENT_OFFSET, 14764 },
  25936   { 0xfe90, UNICODE_NOT_PRESENT_OFFSET, 14764 },
  25937   { 0xfe91, UNICODE_NOT_PRESENT_OFFSET, 14764 },
  25938   { 0xfe92, UNICODE_NOT_PRESENT_OFFSET, 14764 },
  25939   { 0xfe93, UNICODE_NOT_PRESENT_OFFSET, 14767 },
  25940   { 0xfe94, UNICODE_NOT_PRESENT_OFFSET, 14767 },
  25941   { 0xfe95, UNICODE_NOT_PRESENT_OFFSET, 14770 },
  25942   { 0xfe96, UNICODE_NOT_PRESENT_OFFSET, 14770 },
  25943   { 0xfe97, UNICODE_NOT_PRESENT_OFFSET, 14770 },
  25944   { 0xfe98, UNICODE_NOT_PRESENT_OFFSET, 14770 },
  25945   { 0xfe99, UNICODE_NOT_PRESENT_OFFSET, 14773 },
  25946   { 0xfe9a, UNICODE_NOT_PRESENT_OFFSET, 14773 },
  25947   { 0xfe9b, UNICODE_NOT_PRESENT_OFFSET, 14773 },
  25948   { 0xfe9c, UNICODE_NOT_PRESENT_OFFSET, 14773 },
  25949   { 0xfe9d, UNICODE_NOT_PRESENT_OFFSET, 14776 },
  25950   { 0xfe9e, UNICODE_NOT_PRESENT_OFFSET, 14776 },
  25951   { 0xfe9f, UNICODE_NOT_PRESENT_OFFSET, 14776 },
  25952   { 0xfea0, UNICODE_NOT_PRESENT_OFFSET, 14776 },
  25953   { 0xfea1, UNICODE_NOT_PRESENT_OFFSET, 14779 },
  25954   { 0xfea2, UNICODE_NOT_PRESENT_OFFSET, 14779 },
  25955   { 0xfea3, UNICODE_NOT_PRESENT_OFFSET, 14779 },
  25956   { 0xfea4, UNICODE_NOT_PRESENT_OFFSET, 14779 },
  25957   { 0xfea5, UNICODE_NOT_PRESENT_OFFSET, 14782 },
  25958   { 0xfea6, UNICODE_NOT_PRESENT_OFFSET, 14782 },
  25959   { 0xfea7, UNICODE_NOT_PRESENT_OFFSET, 14782 },
  25960   { 0xfea8, UNICODE_NOT_PRESENT_OFFSET, 14782 },
  25961   { 0xfea9, UNICODE_NOT_PRESENT_OFFSET, 14785 },
  25962   { 0xfeaa, UNICODE_NOT_PRESENT_OFFSET, 14785 },
  25963   { 0xfeab, UNICODE_NOT_PRESENT_OFFSET, 14788 },
  25964   { 0xfeac, UNICODE_NOT_PRESENT_OFFSET, 14788 },
  25965   { 0xfead, UNICODE_NOT_PRESENT_OFFSET, 14791 },
  25966   { 0xfeae, UNICODE_NOT_PRESENT_OFFSET, 14791 },
  25967   { 0xfeaf, UNICODE_NOT_PRESENT_OFFSET, 14794 },
  25968   { 0xfeb0, UNICODE_NOT_PRESENT_OFFSET, 14794 },
  25969   { 0xfeb1, UNICODE_NOT_PRESENT_OFFSET, 14797 },
  25970   { 0xfeb2, UNICODE_NOT_PRESENT_OFFSET, 14797 },
  25971   { 0xfeb3, UNICODE_NOT_PRESENT_OFFSET, 14797 },
  25972   { 0xfeb4, UNICODE_NOT_PRESENT_OFFSET, 14797 },
  25973   { 0xfeb5, UNICODE_NOT_PRESENT_OFFSET, 14800 },
  25974   { 0xfeb6, UNICODE_NOT_PRESENT_OFFSET, 14800 },
  25975   { 0xfeb7, UNICODE_NOT_PRESENT_OFFSET, 14800 },
  25976   { 0xfeb8, UNICODE_NOT_PRESENT_OFFSET, 14800 },
  25977   { 0xfeb9, UNICODE_NOT_PRESENT_OFFSET, 14803 },
  25978   { 0xfeba, UNICODE_NOT_PRESENT_OFFSET, 14803 },
  25979   { 0xfebb, UNICODE_NOT_PRESENT_OFFSET, 14803 },
  25980   { 0xfebc, UNICODE_NOT_PRESENT_OFFSET, 14803 },
  25981   { 0xfebd, UNICODE_NOT_PRESENT_OFFSET, 14806 },
  25982   { 0xfebe, UNICODE_NOT_PRESENT_OFFSET, 14806 },
  25983   { 0xfebf, UNICODE_NOT_PRESENT_OFFSET, 14806 },
  25984   { 0xfec0, UNICODE_NOT_PRESENT_OFFSET, 14806 },
  25985   { 0xfec1, UNICODE_NOT_PRESENT_OFFSET, 14809 },
  25986   { 0xfec2, UNICODE_NOT_PRESENT_OFFSET, 14809 },
  25987   { 0xfec3, UNICODE_NOT_PRESENT_OFFSET, 14809 },
  25988   { 0xfec4, UNICODE_NOT_PRESENT_OFFSET, 14809 },
  25989   { 0xfec5, UNICODE_NOT_PRESENT_OFFSET, 14812 },
  25990   { 0xfec6, UNICODE_NOT_PRESENT_OFFSET, 14812 },
  25991   { 0xfec7, UNICODE_NOT_PRESENT_OFFSET, 14812 },
  25992   { 0xfec8, UNICODE_NOT_PRESENT_OFFSET, 14812 },
  25993   { 0xfec9, UNICODE_NOT_PRESENT_OFFSET, 14815 },
  25994   { 0xfeca, UNICODE_NOT_PRESENT_OFFSET, 14815 },
  25995   { 0xfecb, UNICODE_NOT_PRESENT_OFFSET, 14815 },
  25996   { 0xfecc, UNICODE_NOT_PRESENT_OFFSET, 14815 },
  25997   { 0xfecd, UNICODE_NOT_PRESENT_OFFSET, 14818 },
  25998   { 0xfece, UNICODE_NOT_PRESENT_OFFSET, 14818 },
  25999   { 0xfecf, UNICODE_NOT_PRESENT_OFFSET, 14818 },
  26000   { 0xfed0, UNICODE_NOT_PRESENT_OFFSET, 14818 },
  26001   { 0xfed1, UNICODE_NOT_PRESENT_OFFSET, 14821 },
  26002   { 0xfed2, UNICODE_NOT_PRESENT_OFFSET, 14821 },
  26003   { 0xfed3, UNICODE_NOT_PRESENT_OFFSET, 14821 },
  26004   { 0xfed4, UNICODE_NOT_PRESENT_OFFSET, 14821 },
  26005   { 0xfed5, UNICODE_NOT_PRESENT_OFFSET, 14824 },
  26006   { 0xfed6, UNICODE_NOT_PRESENT_OFFSET, 14824 },
  26007   { 0xfed7, UNICODE_NOT_PRESENT_OFFSET, 14824 },
  26008   { 0xfed8, UNICODE_NOT_PRESENT_OFFSET, 14824 },
  26009   { 0xfed9, UNICODE_NOT_PRESENT_OFFSET, 14827 },
  26010   { 0xfeda, UNICODE_NOT_PRESENT_OFFSET, 14827 },
  26011   { 0xfedb, UNICODE_NOT_PRESENT_OFFSET, 14827 },
  26012   { 0xfedc, UNICODE_NOT_PRESENT_OFFSET, 14827 },
  26013   { 0xfedd, UNICODE_NOT_PRESENT_OFFSET, 14830 },
  26014   { 0xfede, UNICODE_NOT_PRESENT_OFFSET, 14830 },
  26015   { 0xfedf, UNICODE_NOT_PRESENT_OFFSET, 14830 },
  26016   { 0xfee0, UNICODE_NOT_PRESENT_OFFSET, 14830 },
  26017   { 0xfee1, UNICODE_NOT_PRESENT_OFFSET, 14833 },
  26018   { 0xfee2, UNICODE_NOT_PRESENT_OFFSET, 14833 },
  26019   { 0xfee3, UNICODE_NOT_PRESENT_OFFSET, 14833 },
  26020   { 0xfee4, UNICODE_NOT_PRESENT_OFFSET, 14833 },
  26021   { 0xfee5, UNICODE_NOT_PRESENT_OFFSET, 14836 },
  26022   { 0xfee6, UNICODE_NOT_PRESENT_OFFSET, 14836 },
  26023   { 0xfee7, UNICODE_NOT_PRESENT_OFFSET, 14836 },
  26024   { 0xfee8, UNICODE_NOT_PRESENT_OFFSET, 14836 },
  26025   { 0xfee9, UNICODE_NOT_PRESENT_OFFSET, 14839 },
  26026   { 0xfeea, UNICODE_NOT_PRESENT_OFFSET, 14839 },
  26027   { 0xfeeb, UNICODE_NOT_PRESENT_OFFSET, 14839 },
  26028   { 0xfeec, UNICODE_NOT_PRESENT_OFFSET, 14839 },
  26029   { 0xfeed, UNICODE_NOT_PRESENT_OFFSET, 14842 },
  26030   { 0xfeee, UNICODE_NOT_PRESENT_OFFSET, 14842 },
  26031   { 0xfeef, UNICODE_NOT_PRESENT_OFFSET, 12891 },
  26032   { 0xfef0, UNICODE_NOT_PRESENT_OFFSET, 12891 },
  26033   { 0xfef1, UNICODE_NOT_PRESENT_OFFSET, 14845 },
  26034   { 0xfef2, UNICODE_NOT_PRESENT_OFFSET, 14845 },
  26035   { 0xfef3, UNICODE_NOT_PRESENT_OFFSET, 14845 },
  26036   { 0xfef4, UNICODE_NOT_PRESENT_OFFSET, 14845 },
  26037   { 0xfef5, UNICODE_NOT_PRESENT_OFFSET, 14848 },
  26038   { 0xfef6, UNICODE_NOT_PRESENT_OFFSET, 14848 },
  26039   { 0xfef7, UNICODE_NOT_PRESENT_OFFSET, 14855 },
  26040   { 0xfef8, UNICODE_NOT_PRESENT_OFFSET, 14855 },
  26041   { 0xfef9, UNICODE_NOT_PRESENT_OFFSET, 14862 },
  26042   { 0xfefa, UNICODE_NOT_PRESENT_OFFSET, 14862 },
  26043   { 0xfefb, UNICODE_NOT_PRESENT_OFFSET, 14869 },
  26044   { 0xfefc, UNICODE_NOT_PRESENT_OFFSET, 14869 },
  26045   { 0xff01, UNICODE_NOT_PRESENT_OFFSET, 14606 },
  26046   { 0xff02, UNICODE_NOT_PRESENT_OFFSET, 14874 },
  26047   { 0xff03, UNICODE_NOT_PRESENT_OFFSET, 14676 },
  26048   { 0xff04, UNICODE_NOT_PRESENT_OFFSET, 14690 },
  26049   { 0xff05, UNICODE_NOT_PRESENT_OFFSET, 14692 },
  26050   { 0xff06, UNICODE_NOT_PRESENT_OFFSET, 14678 },
  26051   { 0xff07, UNICODE_NOT_PRESENT_OFFSET, 14876 },
  26052   { 0xff08, UNICODE_NOT_PRESENT_OFFSET, 5275 },
  26053   { 0xff09, UNICODE_NOT_PRESENT_OFFSET, 5277 },
  26054   { 0xff0a, UNICODE_NOT_PRESENT_OFFSET, 14680 },
  26055   { 0xff0b, UNICODE_NOT_PRESENT_OFFSET, 5267 },
  26056   { 0xff0c, UNICODE_NOT_PRESENT_OFFSET, 14594 },
  26057   { 0xff0d, UNICODE_NOT_PRESENT_OFFSET, 14682 },
  26058   { 0xff0e, UNICODE_NOT_PRESENT_OFFSET, 5181 },
  26059   { 0xff0f, UNICODE_NOT_PRESENT_OFFSET, 14878 },
  26060   { 0xff10, UNICODE_NOT_PRESENT_OFFSET, 5253 },
  26061   { 0xff11, UNICODE_NOT_PRESENT_OFFSET, 27 },
  26062   { 0xff12, UNICODE_NOT_PRESENT_OFFSET, 12 },
  26063   { 0xff13, UNICODE_NOT_PRESENT_OFFSET, 14 },
  26064   { 0xff14, UNICODE_NOT_PRESENT_OFFSET, 5255 },
  26065   { 0xff15, UNICODE_NOT_PRESENT_OFFSET, 5257 },
  26066   { 0xff16, UNICODE_NOT_PRESENT_OFFSET, 5259 },
  26067   { 0xff17, UNICODE_NOT_PRESENT_OFFSET, 5261 },
  26068   { 0xff18, UNICODE_NOT_PRESENT_OFFSET, 5263 },
  26069   { 0xff19, UNICODE_NOT_PRESENT_OFFSET, 5265 },
  26070   { 0xff1a, UNICODE_NOT_PRESENT_OFFSET, 14604 },
  26071   { 0xff1b, UNICODE_NOT_PRESENT_OFFSET, 1248 },
  26072   { 0xff1c, UNICODE_NOT_PRESENT_OFFSET, 14684 },
  26073   { 0xff1d, UNICODE_NOT_PRESENT_OFFSET, 5273 },
  26074   { 0xff1e, UNICODE_NOT_PRESENT_OFFSET, 14686 },
  26075   { 0xff1f, UNICODE_NOT_PRESENT_OFFSET, 14608 },
  26076   { 0xff20, UNICODE_NOT_PRESENT_OFFSET, 14694 },
  26077   { 0xff21, UNICODE_NOT_PRESENT_OFFSET, 2309 },
  26078   { 0xff22, UNICODE_NOT_PRESENT_OFFSET, 2314 },
  26079   { 0xff23, UNICODE_NOT_PRESENT_OFFSET, 5292 },
  26080   { 0xff24, UNICODE_NOT_PRESENT_OFFSET, 2316 },
  26081   { 0xff25, UNICODE_NOT_PRESENT_OFFSET, 2318 },
  26082   { 0xff26, UNICODE_NOT_PRESENT_OFFSET, 5336 },
  26083   { 0xff27, UNICODE_NOT_PRESENT_OFFSET, 2323 },
  26084   { 0xff28, UNICODE_NOT_PRESENT_OFFSET, 2325 },
  26085   { 0xff29, UNICODE_NOT_PRESENT_OFFSET, 2327 },
  26086   { 0xff2a, UNICODE_NOT_PRESENT_OFFSET, 2329 },
  26087   { 0xff2b, UNICODE_NOT_PRESENT_OFFSET, 2331 },
  26088   { 0xff2c, UNICODE_NOT_PRESENT_OFFSET, 2333 },
  26089   { 0xff2d, UNICODE_NOT_PRESENT_OFFSET, 2335 },
  26090   { 0xff2e, UNICODE_NOT_PRESENT_OFFSET, 2337 },
  26091   { 0xff2f, UNICODE_NOT_PRESENT_OFFSET, 2339 },
  26092   { 0xff30, UNICODE_NOT_PRESENT_OFFSET, 2344 },
  26093   { 0xff31, UNICODE_NOT_PRESENT_OFFSET, 5319 },
  26094   { 0xff32, UNICODE_NOT_PRESENT_OFFSET, 2346 },
  26095   { 0xff33, UNICODE_NOT_PRESENT_OFFSET, 6133 },
  26096   { 0xff34, UNICODE_NOT_PRESENT_OFFSET, 2348 },
  26097   { 0xff35, UNICODE_NOT_PRESENT_OFFSET, 2350 },
  26098   { 0xff36, UNICODE_NOT_PRESENT_OFFSET, 5470 },
  26099   { 0xff37, UNICODE_NOT_PRESENT_OFFSET, 2352 },
  26100   { 0xff38, UNICODE_NOT_PRESENT_OFFSET, 5487 },
  26101   { 0xff39, UNICODE_NOT_PRESENT_OFFSET, 6135 },
  26102   { 0xff3a, UNICODE_NOT_PRESENT_OFFSET, 5331 },
  26103   { 0xff3b, UNICODE_NOT_PRESENT_OFFSET, 14672 },
  26104   { 0xff3c, UNICODE_NOT_PRESENT_OFFSET, 14688 },
  26105   { 0xff3d, UNICODE_NOT_PRESENT_OFFSET, 14674 },
  26106   { 0xff3e, UNICODE_NOT_PRESENT_OFFSET, 14880 },
  26107   { 0xff3f, UNICODE_NOT_PRESENT_OFFSET, 14626 },
  26108   { 0xff40, UNICODE_NOT_PRESENT_OFFSET, 5110 },
  26109   { 0xff41, UNICODE_NOT_PRESENT_OFFSET, 6 },
  26110   { 0xff42, UNICODE_NOT_PRESENT_OFFSET, 2364 },
  26111   { 0xff43, UNICODE_NOT_PRESENT_OFFSET, 2435 },
  26112   { 0xff44, UNICODE_NOT_PRESENT_OFFSET, 2366 },
  26113   { 0xff45, UNICODE_NOT_PRESENT_OFFSET, 2368 },
  26114   { 0xff46, UNICODE_NOT_PRESENT_OFFSET, 2443 },
  26115   { 0xff47, UNICODE_NOT_PRESENT_OFFSET, 2379 },
  26116   { 0xff48, UNICODE_NOT_PRESENT_OFFSET, 1171 },
  26117   { 0xff49, UNICODE_NOT_PRESENT_OFFSET, 2427 },
  26118   { 0xff4a, UNICODE_NOT_PRESENT_OFFSET, 1176 },
  26119   { 0xff4b, UNICODE_NOT_PRESENT_OFFSET, 2381 },
  26120   { 0xff4c, UNICODE_NOT_PRESENT_OFFSET, 1220 },
  26121   { 0xff4d, UNICODE_NOT_PRESENT_OFFSET, 2383 },
  26122   { 0xff4e, UNICODE_NOT_PRESENT_OFFSET, 5279 },
  26123   { 0xff4f, UNICODE_NOT_PRESENT_OFFSET, 29 },
  26124   { 0xff50, UNICODE_NOT_PRESENT_OFFSET, 2399 },
  26125   { 0xff51, UNICODE_NOT_PRESENT_OFFSET, 6137 },
  26126   { 0xff52, UNICODE_NOT_PRESENT_OFFSET, 1178 },
  26127   { 0xff53, UNICODE_NOT_PRESENT_OFFSET, 711 },
  26128   { 0xff54, UNICODE_NOT_PRESENT_OFFSET, 2401 },
  26129   { 0xff55, UNICODE_NOT_PRESENT_OFFSET, 2403 },
  26130   { 0xff56, UNICODE_NOT_PRESENT_OFFSET, 2412 },
  26131   { 0xff57, UNICODE_NOT_PRESENT_OFFSET, 1189 },
  26132   { 0xff58, UNICODE_NOT_PRESENT_OFFSET, 1222 },
  26133   { 0xff59, UNICODE_NOT_PRESENT_OFFSET, 1191 },
  26134   { 0xff5a, UNICODE_NOT_PRESENT_OFFSET, 2526 },
  26135   { 0xff5b, UNICODE_NOT_PRESENT_OFFSET, 14628 },
  26136   { 0xff5c, UNICODE_NOT_PRESENT_OFFSET, 14882 },
  26137   { 0xff5d, UNICODE_NOT_PRESENT_OFFSET, 14630 },
  26138   { 0xff5e, UNICODE_NOT_PRESENT_OFFSET, 14884 },
  26139   { 0xff5f, UNICODE_NOT_PRESENT_OFFSET, 14886 },
  26140   { 0xff60, UNICODE_NOT_PRESENT_OFFSET, 14890 },
  26141   { 0xff61, UNICODE_NOT_PRESENT_OFFSET, 14600 },
  26142   { 0xff62, UNICODE_NOT_PRESENT_OFFSET, 14656 },
  26143   { 0xff63, UNICODE_NOT_PRESENT_OFFSET, 14660 },
  26144   { 0xff64, UNICODE_NOT_PRESENT_OFFSET, 14596 },
  26145   { 0xff65, UNICODE_NOT_PRESENT_OFFSET, 14894 },
  26146   { 0xff66, UNICODE_NOT_PRESENT_OFFSET, 8992 },
  26147   { 0xff67, UNICODE_NOT_PRESENT_OFFSET, 14898 },
  26148   { 0xff68, UNICODE_NOT_PRESENT_OFFSET, 14902 },
  26149   { 0xff69, UNICODE_NOT_PRESENT_OFFSET, 14906 },
  26150   { 0xff6a, UNICODE_NOT_PRESENT_OFFSET, 14910 },
  26151   { 0xff6b, UNICODE_NOT_PRESENT_OFFSET, 14914 },
  26152   { 0xff6c, UNICODE_NOT_PRESENT_OFFSET, 14918 },
  26153   { 0xff6d, UNICODE_NOT_PRESENT_OFFSET, 14922 },
  26154   { 0xff6e, UNICODE_NOT_PRESENT_OFFSET, 14926 },
  26155   { 0xff6f, UNICODE_NOT_PRESENT_OFFSET, 14930 },
  26156   { 0xff70, UNICODE_NOT_PRESENT_OFFSET, 14934 },
  26157   { 0xff71, UNICODE_NOT_PRESENT_OFFSET, 8808 },
  26158   { 0xff72, UNICODE_NOT_PRESENT_OFFSET, 8812 },
  26159   { 0xff73, UNICODE_NOT_PRESENT_OFFSET, 8816 },
  26160   { 0xff74, UNICODE_NOT_PRESENT_OFFSET, 8820 },
  26161   { 0xff75, UNICODE_NOT_PRESENT_OFFSET, 8824 },
  26162   { 0xff76, UNICODE_NOT_PRESENT_OFFSET, 8828 },
  26163   { 0xff77, UNICODE_NOT_PRESENT_OFFSET, 8832 },
  26164   { 0xff78, UNICODE_NOT_PRESENT_OFFSET, 8836 },
  26165   { 0xff79, UNICODE_NOT_PRESENT_OFFSET, 8840 },
  26166   { 0xff7a, UNICODE_NOT_PRESENT_OFFSET, 8844 },
  26167   { 0xff7b, UNICODE_NOT_PRESENT_OFFSET, 8848 },
  26168   { 0xff7c, UNICODE_NOT_PRESENT_OFFSET, 8852 },
  26169   { 0xff7d, UNICODE_NOT_PRESENT_OFFSET, 8856 },
  26170   { 0xff7e, UNICODE_NOT_PRESENT_OFFSET, 8860 },
  26171   { 0xff7f, UNICODE_NOT_PRESENT_OFFSET, 8864 },
  26172   { 0xff80, UNICODE_NOT_PRESENT_OFFSET, 8868 },
  26173   { 0xff81, UNICODE_NOT_PRESENT_OFFSET, 8872 },
  26174   { 0xff82, UNICODE_NOT_PRESENT_OFFSET, 8876 },
  26175   { 0xff83, UNICODE_NOT_PRESENT_OFFSET, 8880 },
  26176   { 0xff84, UNICODE_NOT_PRESENT_OFFSET, 8884 },
  26177   { 0xff85, UNICODE_NOT_PRESENT_OFFSET, 8888 },
  26178   { 0xff86, UNICODE_NOT_PRESENT_OFFSET, 8892 },
  26179   { 0xff87, UNICODE_NOT_PRESENT_OFFSET, 8896 },
  26180   { 0xff88, UNICODE_NOT_PRESENT_OFFSET, 8900 },
  26181   { 0xff89, UNICODE_NOT_PRESENT_OFFSET, 8904 },
  26182   { 0xff8a, UNICODE_NOT_PRESENT_OFFSET, 8908 },
  26183   { 0xff8b, UNICODE_NOT_PRESENT_OFFSET, 8912 },
  26184   { 0xff8c, UNICODE_NOT_PRESENT_OFFSET, 8916 },
  26185   { 0xff8d, UNICODE_NOT_PRESENT_OFFSET, 8920 },
  26186   { 0xff8e, UNICODE_NOT_PRESENT_OFFSET, 8924 },
  26187   { 0xff8f, UNICODE_NOT_PRESENT_OFFSET, 8928 },
  26188   { 0xff90, UNICODE_NOT_PRESENT_OFFSET, 8932 },
  26189   { 0xff91, UNICODE_NOT_PRESENT_OFFSET, 8936 },
  26190   { 0xff92, UNICODE_NOT_PRESENT_OFFSET, 8940 },
  26191   { 0xff93, UNICODE_NOT_PRESENT_OFFSET, 8944 },
  26192   { 0xff94, UNICODE_NOT_PRESENT_OFFSET, 8948 },
  26193   { 0xff95, UNICODE_NOT_PRESENT_OFFSET, 8952 },
  26194   { 0xff96, UNICODE_NOT_PRESENT_OFFSET, 8956 },
  26195   { 0xff97, UNICODE_NOT_PRESENT_OFFSET, 8960 },
  26196   { 0xff98, UNICODE_NOT_PRESENT_OFFSET, 8964 },
  26197   { 0xff99, UNICODE_NOT_PRESENT_OFFSET, 8968 },
  26198   { 0xff9a, UNICODE_NOT_PRESENT_OFFSET, 8972 },
  26199   { 0xff9b, UNICODE_NOT_PRESENT_OFFSET, 8976 },
  26200   { 0xff9c, UNICODE_NOT_PRESENT_OFFSET, 8980 },
  26201   { 0xff9d, UNICODE_NOT_PRESENT_OFFSET, 14938 },
  26202   { 0xff9e, UNICODE_NOT_PRESENT_OFFSET, 14942 },
  26203   { 0xff9f, UNICODE_NOT_PRESENT_OFFSET, 14946 },
  26204   { 0xffa0, UNICODE_NOT_PRESENT_OFFSET, 7683 },
  26205   { 0xffa1, UNICODE_NOT_PRESENT_OFFSET, 7479 },
  26206   { 0xffa2, UNICODE_NOT_PRESENT_OFFSET, 7483 },
  26207   { 0xffa3, UNICODE_NOT_PRESENT_OFFSET, 7487 },
  26208   { 0xffa4, UNICODE_NOT_PRESENT_OFFSET, 7491 },
  26209   { 0xffa5, UNICODE_NOT_PRESENT_OFFSET, 7495 },
  26210   { 0xffa6, UNICODE_NOT_PRESENT_OFFSET, 7499 },
  26211   { 0xffa7, UNICODE_NOT_PRESENT_OFFSET, 7503 },
  26212   { 0xffa8, UNICODE_NOT_PRESENT_OFFSET, 7507 },
  26213   { 0xffa9, UNICODE_NOT_PRESENT_OFFSET, 7511 },
  26214   { 0xffaa, UNICODE_NOT_PRESENT_OFFSET, 7515 },
  26215   { 0xffab, UNICODE_NOT_PRESENT_OFFSET, 7519 },
  26216   { 0xffac, UNICODE_NOT_PRESENT_OFFSET, 7523 },
  26217   { 0xffad, UNICODE_NOT_PRESENT_OFFSET, 7527 },
  26218   { 0xffae, UNICODE_NOT_PRESENT_OFFSET, 7531 },
  26219   { 0xffaf, UNICODE_NOT_PRESENT_OFFSET, 7535 },
  26220   { 0xffb0, UNICODE_NOT_PRESENT_OFFSET, 7539 },
  26221   { 0xffb1, UNICODE_NOT_PRESENT_OFFSET, 7543 },
  26222   { 0xffb2, UNICODE_NOT_PRESENT_OFFSET, 7547 },
  26223   { 0xffb3, UNICODE_NOT_PRESENT_OFFSET, 7551 },
  26224   { 0xffb4, UNICODE_NOT_PRESENT_OFFSET, 7555 },
  26225   { 0xffb5, UNICODE_NOT_PRESENT_OFFSET, 7559 },
  26226   { 0xffb6, UNICODE_NOT_PRESENT_OFFSET, 7563 },
  26227   { 0xffb7, UNICODE_NOT_PRESENT_OFFSET, 7567 },
  26228   { 0xffb8, UNICODE_NOT_PRESENT_OFFSET, 7571 },
  26229   { 0xffb9, UNICODE_NOT_PRESENT_OFFSET, 7575 },
  26230   { 0xffba, UNICODE_NOT_PRESENT_OFFSET, 7579 },
  26231   { 0xffbb, UNICODE_NOT_PRESENT_OFFSET, 7583 },
  26232   { 0xffbc, UNICODE_NOT_PRESENT_OFFSET, 7587 },
  26233   { 0xffbd, UNICODE_NOT_PRESENT_OFFSET, 7591 },
  26234   { 0xffbe, UNICODE_NOT_PRESENT_OFFSET, 7595 },
  26235   { 0xffc2, UNICODE_NOT_PRESENT_OFFSET, 7599 },
  26236   { 0xffc3, UNICODE_NOT_PRESENT_OFFSET, 7603 },
  26237   { 0xffc4, UNICODE_NOT_PRESENT_OFFSET, 7607 },
  26238   { 0xffc5, UNICODE_NOT_PRESENT_OFFSET, 7611 },
  26239   { 0xffc6, UNICODE_NOT_PRESENT_OFFSET, 7615 },
  26240   { 0xffc7, UNICODE_NOT_PRESENT_OFFSET, 7619 },
  26241   { 0xffca, UNICODE_NOT_PRESENT_OFFSET, 7623 },
  26242   { 0xffcb, UNICODE_NOT_PRESENT_OFFSET, 7627 },
  26243   { 0xffcc, UNICODE_NOT_PRESENT_OFFSET, 7631 },
  26244   { 0xffcd, UNICODE_NOT_PRESENT_OFFSET, 7635 },
  26245   { 0xffce, UNICODE_NOT_PRESENT_OFFSET, 7639 },
  26246   { 0xffcf, UNICODE_NOT_PRESENT_OFFSET, 7643 },
  26247   { 0xffd2, UNICODE_NOT_PRESENT_OFFSET, 7647 },
  26248   { 0xffd3, UNICODE_NOT_PRESENT_OFFSET, 7651 },
  26249   { 0xffd4, UNICODE_NOT_PRESENT_OFFSET, 7655 },
  26250   { 0xffd5, UNICODE_NOT_PRESENT_OFFSET, 7659 },
  26251   { 0xffd6, UNICODE_NOT_PRESENT_OFFSET, 7663 },
  26252   { 0xffd7, UNICODE_NOT_PRESENT_OFFSET, 7667 },
  26253   { 0xffda, UNICODE_NOT_PRESENT_OFFSET, 7671 },
  26254   { 0xffdb, UNICODE_NOT_PRESENT_OFFSET, 7675 },
  26255   { 0xffdc, UNICODE_NOT_PRESENT_OFFSET, 7679 },
  26256   { 0xffe0, UNICODE_NOT_PRESENT_OFFSET, 14950 },
  26257   { 0xffe1, UNICODE_NOT_PRESENT_OFFSET, 14953 },
  26258   { 0xffe2, UNICODE_NOT_PRESENT_OFFSET, 14956 },
  26259   { 0xffe3, UNICODE_NOT_PRESENT_OFFSET, 8 },
  26260   { 0xffe4, UNICODE_NOT_PRESENT_OFFSET, 14959 },
  26261   { 0xffe5, UNICODE_NOT_PRESENT_OFFSET, 14962 },
  26262   { 0xffe6, UNICODE_NOT_PRESENT_OFFSET, 14965 },
  26263   { 0xffe8, UNICODE_NOT_PRESENT_OFFSET, 14969 },
  26264   { 0xffe9, UNICODE_NOT_PRESENT_OFFSET, 14973 },
  26265   { 0xffea, UNICODE_NOT_PRESENT_OFFSET, 14977 },
  26266   { 0xffeb, UNICODE_NOT_PRESENT_OFFSET, 14981 },
  26267   { 0xffec, UNICODE_NOT_PRESENT_OFFSET, 14985 },
  26268   { 0xffed, UNICODE_NOT_PRESENT_OFFSET, 14989 },
  26269   { 0xffee, UNICODE_NOT_PRESENT_OFFSET, 14993 },
  26270   { 0x1109a, 14997, UNICODE_NOT_PRESENT_OFFSET },
  26271   { 0x1109c, 15006, UNICODE_NOT_PRESENT_OFFSET },
  26272   { 0x110ab, 15015, UNICODE_NOT_PRESENT_OFFSET },
  26273   { 0x1112e, 15024, UNICODE_NOT_PRESENT_OFFSET },
  26274   { 0x1112f, 15033, UNICODE_NOT_PRESENT_OFFSET },
  26275   { 0x1134b, 15042, UNICODE_NOT_PRESENT_OFFSET },
  26276   { 0x1134c, 15051, UNICODE_NOT_PRESENT_OFFSET },
  26277   { 0x114bb, 15060, UNICODE_NOT_PRESENT_OFFSET },
  26278   { 0x114bc, 15069, UNICODE_NOT_PRESENT_OFFSET },
  26279   { 0x114be, 15078, UNICODE_NOT_PRESENT_OFFSET },
  26280   { 0x115ba, 15087, UNICODE_NOT_PRESENT_OFFSET },
  26281   { 0x115bb, 15096, UNICODE_NOT_PRESENT_OFFSET },
  26282   { 0x1d15e, 15105, UNICODE_NOT_PRESENT_OFFSET },
  26283   { 0x1d15f, 15114, UNICODE_NOT_PRESENT_OFFSET },
  26284   { 0x1d160, 15123, UNICODE_NOT_PRESENT_OFFSET },
  26285   { 0x1d161, 15136, UNICODE_NOT_PRESENT_OFFSET },
  26286   { 0x1d162, 15149, UNICODE_NOT_PRESENT_OFFSET },
  26287   { 0x1d163, 15162, UNICODE_NOT_PRESENT_OFFSET },
  26288   { 0x1d164, 15175, UNICODE_NOT_PRESENT_OFFSET },
  26289   { 0x1d1bb, 15188, UNICODE_NOT_PRESENT_OFFSET },
  26290   { 0x1d1bc, 15197, UNICODE_NOT_PRESENT_OFFSET },
  26291   { 0x1d1bd, 15206, UNICODE_NOT_PRESENT_OFFSET },
  26292   { 0x1d1be, 15219, UNICODE_NOT_PRESENT_OFFSET },
  26293   { 0x1d1bf, 15232, UNICODE_NOT_PRESENT_OFFSET },
  26294   { 0x1d1c0, 15245, UNICODE_NOT_PRESENT_OFFSET },
  26295   { 0x1d400, UNICODE_NOT_PRESENT_OFFSET, 2309 },
  26296   { 0x1d401, UNICODE_NOT_PRESENT_OFFSET, 2314 },
  26297   { 0x1d402, UNICODE_NOT_PRESENT_OFFSET, 5292 },
  26298   { 0x1d403, UNICODE_NOT_PRESENT_OFFSET, 2316 },
  26299   { 0x1d404, UNICODE_NOT_PRESENT_OFFSET, 2318 },
  26300   { 0x1d405, UNICODE_NOT_PRESENT_OFFSET, 5336 },
  26301   { 0x1d406, UNICODE_NOT_PRESENT_OFFSET, 2323 },
  26302   { 0x1d407, UNICODE_NOT_PRESENT_OFFSET, 2325 },
  26303   { 0x1d408, UNICODE_NOT_PRESENT_OFFSET, 2327 },
  26304   { 0x1d409, UNICODE_NOT_PRESENT_OFFSET, 2329 },
  26305   { 0x1d40a, UNICODE_NOT_PRESENT_OFFSET, 2331 },
  26306   { 0x1d40b, UNICODE_NOT_PRESENT_OFFSET, 2333 },
  26307   { 0x1d40c, UNICODE_NOT_PRESENT_OFFSET, 2335 },
  26308   { 0x1d40d, UNICODE_NOT_PRESENT_OFFSET, 2337 },
  26309   { 0x1d40e, UNICODE_NOT_PRESENT_OFFSET, 2339 },
  26310   { 0x1d40f, UNICODE_NOT_PRESENT_OFFSET, 2344 },
  26311   { 0x1d410, UNICODE_NOT_PRESENT_OFFSET, 5319 },
  26312   { 0x1d411, UNICODE_NOT_PRESENT_OFFSET, 2346 },
  26313   { 0x1d412, UNICODE_NOT_PRESENT_OFFSET, 6133 },
  26314   { 0x1d413, UNICODE_NOT_PRESENT_OFFSET, 2348 },
  26315   { 0x1d414, UNICODE_NOT_PRESENT_OFFSET, 2350 },
  26316   { 0x1d415, UNICODE_NOT_PRESENT_OFFSET, 5470 },
  26317   { 0x1d416, UNICODE_NOT_PRESENT_OFFSET, 2352 },
  26318   { 0x1d417, UNICODE_NOT_PRESENT_OFFSET, 5487 },
  26319   { 0x1d418, UNICODE_NOT_PRESENT_OFFSET, 6135 },
  26320   { 0x1d419, UNICODE_NOT_PRESENT_OFFSET, 5331 },
  26321   { 0x1d41a, UNICODE_NOT_PRESENT_OFFSET, 6 },
  26322   { 0x1d41b, UNICODE_NOT_PRESENT_OFFSET, 2364 },
  26323   { 0x1d41c, UNICODE_NOT_PRESENT_OFFSET, 2435 },
  26324   { 0x1d41d, UNICODE_NOT_PRESENT_OFFSET, 2366 },
  26325   { 0x1d41e, UNICODE_NOT_PRESENT_OFFSET, 2368 },
  26326   { 0x1d41f, UNICODE_NOT_PRESENT_OFFSET, 2443 },
  26327   { 0x1d420, UNICODE_NOT_PRESENT_OFFSET, 2379 },
  26328   { 0x1d421, UNICODE_NOT_PRESENT_OFFSET, 1171 },
  26329   { 0x1d422, UNICODE_NOT_PRESENT_OFFSET, 2427 },
  26330   { 0x1d423, UNICODE_NOT_PRESENT_OFFSET, 1176 },
  26331   { 0x1d424, UNICODE_NOT_PRESENT_OFFSET, 2381 },
  26332   { 0x1d425, UNICODE_NOT_PRESENT_OFFSET, 1220 },
  26333   { 0x1d426, UNICODE_NOT_PRESENT_OFFSET, 2383 },
  26334   { 0x1d427, UNICODE_NOT_PRESENT_OFFSET, 5279 },
  26335   { 0x1d428, UNICODE_NOT_PRESENT_OFFSET, 29 },
  26336   { 0x1d429, UNICODE_NOT_PRESENT_OFFSET, 2399 },
  26337   { 0x1d42a, UNICODE_NOT_PRESENT_OFFSET, 6137 },
  26338   { 0x1d42b, UNICODE_NOT_PRESENT_OFFSET, 1178 },
  26339   { 0x1d42c, UNICODE_NOT_PRESENT_OFFSET, 711 },
  26340   { 0x1d42d, UNICODE_NOT_PRESENT_OFFSET, 2401 },
  26341   { 0x1d42e, UNICODE_NOT_PRESENT_OFFSET, 2403 },
  26342   { 0x1d42f, UNICODE_NOT_PRESENT_OFFSET, 2412 },
  26343   { 0x1d430, UNICODE_NOT_PRESENT_OFFSET, 1189 },
  26344   { 0x1d431, UNICODE_NOT_PRESENT_OFFSET, 1222 },
  26345   { 0x1d432, UNICODE_NOT_PRESENT_OFFSET, 1191 },
  26346   { 0x1d433, UNICODE_NOT_PRESENT_OFFSET, 2526 },
  26347   { 0x1d434, UNICODE_NOT_PRESENT_OFFSET, 2309 },
  26348   { 0x1d435, UNICODE_NOT_PRESENT_OFFSET, 2314 },
  26349   { 0x1d436, UNICODE_NOT_PRESENT_OFFSET, 5292 },
  26350   { 0x1d437, UNICODE_NOT_PRESENT_OFFSET, 2316 },
  26351   { 0x1d438, UNICODE_NOT_PRESENT_OFFSET, 2318 },
  26352   { 0x1d439, UNICODE_NOT_PRESENT_OFFSET, 5336 },
  26353   { 0x1d43a, UNICODE_NOT_PRESENT_OFFSET, 2323 },
  26354   { 0x1d43b, UNICODE_NOT_PRESENT_OFFSET, 2325 },
  26355   { 0x1d43c, UNICODE_NOT_PRESENT_OFFSET, 2327 },
  26356   { 0x1d43d, UNICODE_NOT_PRESENT_OFFSET, 2329 },
  26357   { 0x1d43e, UNICODE_NOT_PRESENT_OFFSET, 2331 },
  26358   { 0x1d43f, UNICODE_NOT_PRESENT_OFFSET, 2333 },
  26359   { 0x1d440, UNICODE_NOT_PRESENT_OFFSET, 2335 },
  26360   { 0x1d441, UNICODE_NOT_PRESENT_OFFSET, 2337 },
  26361   { 0x1d442, UNICODE_NOT_PRESENT_OFFSET, 2339 },
  26362   { 0x1d443, UNICODE_NOT_PRESENT_OFFSET, 2344 },
  26363   { 0x1d444, UNICODE_NOT_PRESENT_OFFSET, 5319 },
  26364   { 0x1d445, UNICODE_NOT_PRESENT_OFFSET, 2346 },
  26365   { 0x1d446, UNICODE_NOT_PRESENT_OFFSET, 6133 },
  26366   { 0x1d447, UNICODE_NOT_PRESENT_OFFSET, 2348 },
  26367   { 0x1d448, UNICODE_NOT_PRESENT_OFFSET, 2350 },
  26368   { 0x1d449, UNICODE_NOT_PRESENT_OFFSET, 5470 },
  26369   { 0x1d44a, UNICODE_NOT_PRESENT_OFFSET, 2352 },
  26370   { 0x1d44b, UNICODE_NOT_PRESENT_OFFSET, 5487 },
  26371   { 0x1d44c, UNICODE_NOT_PRESENT_OFFSET, 6135 },
  26372   { 0x1d44d, UNICODE_NOT_PRESENT_OFFSET, 5331 },
  26373   { 0x1d44e, UNICODE_NOT_PRESENT_OFFSET, 6 },
  26374   { 0x1d44f, UNICODE_NOT_PRESENT_OFFSET, 2364 },
  26375   { 0x1d450, UNICODE_NOT_PRESENT_OFFSET, 2435 },
  26376   { 0x1d451, UNICODE_NOT_PRESENT_OFFSET, 2366 },
  26377   { 0x1d452, UNICODE_NOT_PRESENT_OFFSET, 2368 },
  26378   { 0x1d453, UNICODE_NOT_PRESENT_OFFSET, 2443 },
  26379   { 0x1d454, UNICODE_NOT_PRESENT_OFFSET, 2379 },
  26380   { 0x1d456, UNICODE_NOT_PRESENT_OFFSET, 2427 },
  26381   { 0x1d457, UNICODE_NOT_PRESENT_OFFSET, 1176 },
  26382   { 0x1d458, UNICODE_NOT_PRESENT_OFFSET, 2381 },
  26383   { 0x1d459, UNICODE_NOT_PRESENT_OFFSET, 1220 },
  26384   { 0x1d45a, UNICODE_NOT_PRESENT_OFFSET, 2383 },
  26385   { 0x1d45b, UNICODE_NOT_PRESENT_OFFSET, 5279 },
  26386   { 0x1d45c, UNICODE_NOT_PRESENT_OFFSET, 29 },
  26387   { 0x1d45d, UNICODE_NOT_PRESENT_OFFSET, 2399 },
  26388   { 0x1d45e, UNICODE_NOT_PRESENT_OFFSET, 6137 },
  26389   { 0x1d45f, UNICODE_NOT_PRESENT_OFFSET, 1178 },
  26390   { 0x1d460, UNICODE_NOT_PRESENT_OFFSET, 711 },
  26391   { 0x1d461, UNICODE_NOT_PRESENT_OFFSET, 2401 },
  26392   { 0x1d462, UNICODE_NOT_PRESENT_OFFSET, 2403 },
  26393   { 0x1d463, UNICODE_NOT_PRESENT_OFFSET, 2412 },
  26394   { 0x1d464, UNICODE_NOT_PRESENT_OFFSET, 1189 },
  26395   { 0x1d465, UNICODE_NOT_PRESENT_OFFSET, 1222 },
  26396   { 0x1d466, UNICODE_NOT_PRESENT_OFFSET, 1191 },
  26397   { 0x1d467, UNICODE_NOT_PRESENT_OFFSET, 2526 },
  26398   { 0x1d468, UNICODE_NOT_PRESENT_OFFSET, 2309 },
  26399   { 0x1d469, UNICODE_NOT_PRESENT_OFFSET, 2314 },
  26400   { 0x1d46a, UNICODE_NOT_PRESENT_OFFSET, 5292 },
  26401   { 0x1d46b, UNICODE_NOT_PRESENT_OFFSET, 2316 },
  26402   { 0x1d46c, UNICODE_NOT_PRESENT_OFFSET, 2318 },
  26403   { 0x1d46d, UNICODE_NOT_PRESENT_OFFSET, 5336 },
  26404   { 0x1d46e, UNICODE_NOT_PRESENT_OFFSET, 2323 },
  26405   { 0x1d46f, UNICODE_NOT_PRESENT_OFFSET, 2325 },
  26406   { 0x1d470, UNICODE_NOT_PRESENT_OFFSET, 2327 },
  26407   { 0x1d471, UNICODE_NOT_PRESENT_OFFSET, 2329 },
  26408   { 0x1d472, UNICODE_NOT_PRESENT_OFFSET, 2331 },
  26409   { 0x1d473, UNICODE_NOT_PRESENT_OFFSET, 2333 },
  26410   { 0x1d474, UNICODE_NOT_PRESENT_OFFSET, 2335 },
  26411   { 0x1d475, UNICODE_NOT_PRESENT_OFFSET, 2337 },
  26412   { 0x1d476, UNICODE_NOT_PRESENT_OFFSET, 2339 },
  26413   { 0x1d477, UNICODE_NOT_PRESENT_OFFSET, 2344 },
  26414   { 0x1d478, UNICODE_NOT_PRESENT_OFFSET, 5319 },
  26415   { 0x1d479, UNICODE_NOT_PRESENT_OFFSET, 2346 },
  26416   { 0x1d47a, UNICODE_NOT_PRESENT_OFFSET, 6133 },
  26417   { 0x1d47b, UNICODE_NOT_PRESENT_OFFSET, 2348 },
  26418   { 0x1d47c, UNICODE_NOT_PRESENT_OFFSET, 2350 },
  26419   { 0x1d47d, UNICODE_NOT_PRESENT_OFFSET, 5470 },
  26420   { 0x1d47e, UNICODE_NOT_PRESENT_OFFSET, 2352 },
  26421   { 0x1d47f, UNICODE_NOT_PRESENT_OFFSET, 5487 },
  26422   { 0x1d480, UNICODE_NOT_PRESENT_OFFSET, 6135 },
  26423   { 0x1d481, UNICODE_NOT_PRESENT_OFFSET, 5331 },
  26424   { 0x1d482, UNICODE_NOT_PRESENT_OFFSET, 6 },
  26425   { 0x1d483, UNICODE_NOT_PRESENT_OFFSET, 2364 },
  26426   { 0x1d484, UNICODE_NOT_PRESENT_OFFSET, 2435 },
  26427   { 0x1d485, UNICODE_NOT_PRESENT_OFFSET, 2366 },
  26428   { 0x1d486, UNICODE_NOT_PRESENT_OFFSET, 2368 },
  26429   { 0x1d487, UNICODE_NOT_PRESENT_OFFSET, 2443 },
  26430   { 0x1d488, UNICODE_NOT_PRESENT_OFFSET, 2379 },
  26431   { 0x1d489, UNICODE_NOT_PRESENT_OFFSET, 1171 },
  26432   { 0x1d48a, UNICODE_NOT_PRESENT_OFFSET, 2427 },
  26433   { 0x1d48b, UNICODE_NOT_PRESENT_OFFSET, 1176 },
  26434   { 0x1d48c, UNICODE_NOT_PRESENT_OFFSET, 2381 },
  26435   { 0x1d48d, UNICODE_NOT_PRESENT_OFFSET, 1220 },
  26436   { 0x1d48e, UNICODE_NOT_PRESENT_OFFSET, 2383 },
  26437   { 0x1d48f, UNICODE_NOT_PRESENT_OFFSET, 5279 },
  26438   { 0x1d490, UNICODE_NOT_PRESENT_OFFSET, 29 },
  26439   { 0x1d491, UNICODE_NOT_PRESENT_OFFSET, 2399 },
  26440   { 0x1d492, UNICODE_NOT_PRESENT_OFFSET, 6137 },
  26441   { 0x1d493, UNICODE_NOT_PRESENT_OFFSET, 1178 },
  26442   { 0x1d494, UNICODE_NOT_PRESENT_OFFSET, 711 },
  26443   { 0x1d495, UNICODE_NOT_PRESENT_OFFSET, 2401 },
  26444   { 0x1d496, UNICODE_NOT_PRESENT_OFFSET, 2403 },
  26445   { 0x1d497, UNICODE_NOT_PRESENT_OFFSET, 2412 },
  26446   { 0x1d498, UNICODE_NOT_PRESENT_OFFSET, 1189 },
  26447   { 0x1d499, UNICODE_NOT_PRESENT_OFFSET, 1222 },
  26448   { 0x1d49a, UNICODE_NOT_PRESENT_OFFSET, 1191 },
  26449   { 0x1d49b, UNICODE_NOT_PRESENT_OFFSET, 2526 },
  26450   { 0x1d49c, UNICODE_NOT_PRESENT_OFFSET, 2309 },
  26451   { 0x1d49e, UNICODE_NOT_PRESENT_OFFSET, 5292 },
  26452   { 0x1d49f, UNICODE_NOT_PRESENT_OFFSET, 2316 },
  26453   { 0x1d4a2, UNICODE_NOT_PRESENT_OFFSET, 2323 },
  26454   { 0x1d4a5, UNICODE_NOT_PRESENT_OFFSET, 2329 },
  26455   { 0x1d4a6, UNICODE_NOT_PRESENT_OFFSET, 2331 },
  26456   { 0x1d4a9, UNICODE_NOT_PRESENT_OFFSET, 2337 },
  26457   { 0x1d4aa, UNICODE_NOT_PRESENT_OFFSET, 2339 },
  26458   { 0x1d4ab, UNICODE_NOT_PRESENT_OFFSET, 2344 },
  26459   { 0x1d4ac, UNICODE_NOT_PRESENT_OFFSET, 5319 },
  26460   { 0x1d4ae, UNICODE_NOT_PRESENT_OFFSET, 6133 },
  26461   { 0x1d4af, UNICODE_NOT_PRESENT_OFFSET, 2348 },
  26462   { 0x1d4b0, UNICODE_NOT_PRESENT_OFFSET, 2350 },
  26463   { 0x1d4b1, UNICODE_NOT_PRESENT_OFFSET, 5470 },
  26464   { 0x1d4b2, UNICODE_NOT_PRESENT_OFFSET, 2352 },
  26465   { 0x1d4b3, UNICODE_NOT_PRESENT_OFFSET, 5487 },
  26466   { 0x1d4b4, UNICODE_NOT_PRESENT_OFFSET, 6135 },
  26467   { 0x1d4b5, UNICODE_NOT_PRESENT_OFFSET, 5331 },
  26468   { 0x1d4b6, UNICODE_NOT_PRESENT_OFFSET, 6 },
  26469   { 0x1d4b7, UNICODE_NOT_PRESENT_OFFSET, 2364 },
  26470   { 0x1d4b8, UNICODE_NOT_PRESENT_OFFSET, 2435 },
  26471   { 0x1d4b9, UNICODE_NOT_PRESENT_OFFSET, 2366 },
  26472   { 0x1d4bb, UNICODE_NOT_PRESENT_OFFSET, 2443 },
  26473   { 0x1d4bd, UNICODE_NOT_PRESENT_OFFSET, 1171 },
  26474   { 0x1d4be, UNICODE_NOT_PRESENT_OFFSET, 2427 },
  26475   { 0x1d4bf, UNICODE_NOT_PRESENT_OFFSET, 1176 },
  26476   { 0x1d4c0, UNICODE_NOT_PRESENT_OFFSET, 2381 },
  26477   { 0x1d4c1, UNICODE_NOT_PRESENT_OFFSET, 1220 },
  26478   { 0x1d4c2, UNICODE_NOT_PRESENT_OFFSET, 2383 },
  26479   { 0x1d4c3, UNICODE_NOT_PRESENT_OFFSET, 5279 },
  26480   { 0x1d4c5, UNICODE_NOT_PRESENT_OFFSET, 2399 },
  26481   { 0x1d4c6, UNICODE_NOT_PRESENT_OFFSET, 6137 },
  26482   { 0x1d4c7, UNICODE_NOT_PRESENT_OFFSET, 1178 },
  26483   { 0x1d4c8, UNICODE_NOT_PRESENT_OFFSET, 711 },
  26484   { 0x1d4c9, UNICODE_NOT_PRESENT_OFFSET, 2401 },
  26485   { 0x1d4ca, UNICODE_NOT_PRESENT_OFFSET, 2403 },
  26486   { 0x1d4cb, UNICODE_NOT_PRESENT_OFFSET, 2412 },
  26487   { 0x1d4cc, UNICODE_NOT_PRESENT_OFFSET, 1189 },
  26488   { 0x1d4cd, UNICODE_NOT_PRESENT_OFFSET, 1222 },
  26489   { 0x1d4ce, UNICODE_NOT_PRESENT_OFFSET, 1191 },
  26490   { 0x1d4cf, UNICODE_NOT_PRESENT_OFFSET, 2526 },
  26491   { 0x1d4d0, UNICODE_NOT_PRESENT_OFFSET, 2309 },
  26492   { 0x1d4d1, UNICODE_NOT_PRESENT_OFFSET, 2314 },
  26493   { 0x1d4d2, UNICODE_NOT_PRESENT_OFFSET, 5292 },
  26494   { 0x1d4d3, UNICODE_NOT_PRESENT_OFFSET, 2316 },
  26495   { 0x1d4d4, UNICODE_NOT_PRESENT_OFFSET, 2318 },
  26496   { 0x1d4d5, UNICODE_NOT_PRESENT_OFFSET, 5336 },
  26497   { 0x1d4d6, UNICODE_NOT_PRESENT_OFFSET, 2323 },
  26498   { 0x1d4d7, UNICODE_NOT_PRESENT_OFFSET, 2325 },
  26499   { 0x1d4d8, UNICODE_NOT_PRESENT_OFFSET, 2327 },
  26500   { 0x1d4d9, UNICODE_NOT_PRESENT_OFFSET, 2329 },
  26501   { 0x1d4da, UNICODE_NOT_PRESENT_OFFSET, 2331 },
  26502   { 0x1d4db, UNICODE_NOT_PRESENT_OFFSET, 2333 },
  26503   { 0x1d4dc, UNICODE_NOT_PRESENT_OFFSET, 2335 },
  26504   { 0x1d4dd, UNICODE_NOT_PRESENT_OFFSET, 2337 },
  26505   { 0x1d4de, UNICODE_NOT_PRESENT_OFFSET, 2339 },
  26506   { 0x1d4df, UNICODE_NOT_PRESENT_OFFSET, 2344 },
  26507   { 0x1d4e0, UNICODE_NOT_PRESENT_OFFSET, 5319 },
  26508   { 0x1d4e1, UNICODE_NOT_PRESENT_OFFSET, 2346 },
  26509   { 0x1d4e2, UNICODE_NOT_PRESENT_OFFSET, 6133 },
  26510   { 0x1d4e3, UNICODE_NOT_PRESENT_OFFSET, 2348 },
  26511   { 0x1d4e4, UNICODE_NOT_PRESENT_OFFSET, 2350 },
  26512   { 0x1d4e5, UNICODE_NOT_PRESENT_OFFSET, 5470 },
  26513   { 0x1d4e6, UNICODE_NOT_PRESENT_OFFSET, 2352 },
  26514   { 0x1d4e7, UNICODE_NOT_PRESENT_OFFSET, 5487 },
  26515   { 0x1d4e8, UNICODE_NOT_PRESENT_OFFSET, 6135 },
  26516   { 0x1d4e9, UNICODE_NOT_PRESENT_OFFSET, 5331 },
  26517   { 0x1d4ea, UNICODE_NOT_PRESENT_OFFSET, 6 },
  26518   { 0x1d4eb, UNICODE_NOT_PRESENT_OFFSET, 2364 },
  26519   { 0x1d4ec, UNICODE_NOT_PRESENT_OFFSET, 2435 },
  26520   { 0x1d4ed, UNICODE_NOT_PRESENT_OFFSET, 2366 },
  26521   { 0x1d4ee, UNICODE_NOT_PRESENT_OFFSET, 2368 },
  26522   { 0x1d4ef, UNICODE_NOT_PRESENT_OFFSET, 2443 },
  26523   { 0x1d4f0, UNICODE_NOT_PRESENT_OFFSET, 2379 },
  26524   { 0x1d4f1, UNICODE_NOT_PRESENT_OFFSET, 1171 },
  26525   { 0x1d4f2, UNICODE_NOT_PRESENT_OFFSET, 2427 },
  26526   { 0x1d4f3, UNICODE_NOT_PRESENT_OFFSET, 1176 },
  26527   { 0x1d4f4, UNICODE_NOT_PRESENT_OFFSET, 2381 },
  26528   { 0x1d4f5, UNICODE_NOT_PRESENT_OFFSET, 1220 },
  26529   { 0x1d4f6, UNICODE_NOT_PRESENT_OFFSET, 2383 },
  26530   { 0x1d4f7, UNICODE_NOT_PRESENT_OFFSET, 5279 },
  26531   { 0x1d4f8, UNICODE_NOT_PRESENT_OFFSET, 29 },
  26532   { 0x1d4f9, UNICODE_NOT_PRESENT_OFFSET, 2399 },
  26533   { 0x1d4fa, UNICODE_NOT_PRESENT_OFFSET, 6137 },
  26534   { 0x1d4fb, UNICODE_NOT_PRESENT_OFFSET, 1178 },
  26535   { 0x1d4fc, UNICODE_NOT_PRESENT_OFFSET, 711 },
  26536   { 0x1d4fd, UNICODE_NOT_PRESENT_OFFSET, 2401 },
  26537   { 0x1d4fe, UNICODE_NOT_PRESENT_OFFSET, 2403 },
  26538   { 0x1d4ff, UNICODE_NOT_PRESENT_OFFSET, 2412 },
  26539   { 0x1d500, UNICODE_NOT_PRESENT_OFFSET, 1189 },
  26540   { 0x1d501, UNICODE_NOT_PRESENT_OFFSET, 1222 },
  26541   { 0x1d502, UNICODE_NOT_PRESENT_OFFSET, 1191 },
  26542   { 0x1d503, UNICODE_NOT_PRESENT_OFFSET, 2526 },
  26543   { 0x1d504, UNICODE_NOT_PRESENT_OFFSET, 2309 },
  26544   { 0x1d505, UNICODE_NOT_PRESENT_OFFSET, 2314 },
  26545   { 0x1d507, UNICODE_NOT_PRESENT_OFFSET, 2316 },
  26546   { 0x1d508, UNICODE_NOT_PRESENT_OFFSET, 2318 },
  26547   { 0x1d509, UNICODE_NOT_PRESENT_OFFSET, 5336 },
  26548   { 0x1d50a, UNICODE_NOT_PRESENT_OFFSET, 2323 },
  26549   { 0x1d50d, UNICODE_NOT_PRESENT_OFFSET, 2329 },
  26550   { 0x1d50e, UNICODE_NOT_PRESENT_OFFSET, 2331 },
  26551   { 0x1d50f, UNICODE_NOT_PRESENT_OFFSET, 2333 },
  26552   { 0x1d510, UNICODE_NOT_PRESENT_OFFSET, 2335 },
  26553   { 0x1d511, UNICODE_NOT_PRESENT_OFFSET, 2337 },
  26554   { 0x1d512, UNICODE_NOT_PRESENT_OFFSET, 2339 },
  26555   { 0x1d513, UNICODE_NOT_PRESENT_OFFSET, 2344 },
  26556   { 0x1d514, UNICODE_NOT_PRESENT_OFFSET, 5319 },
  26557   { 0x1d516, UNICODE_NOT_PRESENT_OFFSET, 6133 },
  26558   { 0x1d517, UNICODE_NOT_PRESENT_OFFSET, 2348 },
  26559   { 0x1d518, UNICODE_NOT_PRESENT_OFFSET, 2350 },
  26560   { 0x1d519, UNICODE_NOT_PRESENT_OFFSET, 5470 },
  26561   { 0x1d51a, UNICODE_NOT_PRESENT_OFFSET, 2352 },
  26562   { 0x1d51b, UNICODE_NOT_PRESENT_OFFSET, 5487 },
  26563   { 0x1d51c, UNICODE_NOT_PRESENT_OFFSET, 6135 },
  26564   { 0x1d51e, UNICODE_NOT_PRESENT_OFFSET, 6 },
  26565   { 0x1d51f, UNICODE_NOT_PRESENT_OFFSET, 2364 },
  26566   { 0x1d520, UNICODE_NOT_PRESENT_OFFSET, 2435 },
  26567   { 0x1d521, UNICODE_NOT_PRESENT_OFFSET, 2366 },
  26568   { 0x1d522, UNICODE_NOT_PRESENT_OFFSET, 2368 },
  26569   { 0x1d523, UNICODE_NOT_PRESENT_OFFSET, 2443 },
  26570   { 0x1d524, UNICODE_NOT_PRESENT_OFFSET, 2379 },
  26571   { 0x1d525, UNICODE_NOT_PRESENT_OFFSET, 1171 },
  26572   { 0x1d526, UNICODE_NOT_PRESENT_OFFSET, 2427 },
  26573   { 0x1d527, UNICODE_NOT_PRESENT_OFFSET, 1176 },
  26574   { 0x1d528, UNICODE_NOT_PRESENT_OFFSET, 2381 },
  26575   { 0x1d529, UNICODE_NOT_PRESENT_OFFSET, 1220 },
  26576   { 0x1d52a, UNICODE_NOT_PRESENT_OFFSET, 2383 },
  26577   { 0x1d52b, UNICODE_NOT_PRESENT_OFFSET, 5279 },
  26578   { 0x1d52c, UNICODE_NOT_PRESENT_OFFSET, 29 },
  26579   { 0x1d52d, UNICODE_NOT_PRESENT_OFFSET, 2399 },
  26580   { 0x1d52e, UNICODE_NOT_PRESENT_OFFSET, 6137 },
  26581   { 0x1d52f, UNICODE_NOT_PRESENT_OFFSET, 1178 },
  26582   { 0x1d530, UNICODE_NOT_PRESENT_OFFSET, 711 },
  26583   { 0x1d531, UNICODE_NOT_PRESENT_OFFSET, 2401 },
  26584   { 0x1d532, UNICODE_NOT_PRESENT_OFFSET, 2403 },
  26585   { 0x1d533, UNICODE_NOT_PRESENT_OFFSET, 2412 },
  26586   { 0x1d534, UNICODE_NOT_PRESENT_OFFSET, 1189 },
  26587   { 0x1d535, UNICODE_NOT_PRESENT_OFFSET, 1222 },
  26588   { 0x1d536, UNICODE_NOT_PRESENT_OFFSET, 1191 },
  26589   { 0x1d537, UNICODE_NOT_PRESENT_OFFSET, 2526 },
  26590   { 0x1d538, UNICODE_NOT_PRESENT_OFFSET, 2309 },
  26591   { 0x1d539, UNICODE_NOT_PRESENT_OFFSET, 2314 },
  26592   { 0x1d53b, UNICODE_NOT_PRESENT_OFFSET, 2316 },
  26593   { 0x1d53c, UNICODE_NOT_PRESENT_OFFSET, 2318 },
  26594   { 0x1d53d, UNICODE_NOT_PRESENT_OFFSET, 5336 },
  26595   { 0x1d53e, UNICODE_NOT_PRESENT_OFFSET, 2323 },
  26596   { 0x1d540, UNICODE_NOT_PRESENT_OFFSET, 2327 },
  26597   { 0x1d541, UNICODE_NOT_PRESENT_OFFSET, 2329 },
  26598   { 0x1d542, UNICODE_NOT_PRESENT_OFFSET, 2331 },
  26599   { 0x1d543, UNICODE_NOT_PRESENT_OFFSET, 2333 },
  26600   { 0x1d544, UNICODE_NOT_PRESENT_OFFSET, 2335 },
  26601   { 0x1d546, UNICODE_NOT_PRESENT_OFFSET, 2339 },
  26602   { 0x1d54a, UNICODE_NOT_PRESENT_OFFSET, 6133 },
  26603   { 0x1d54b, UNICODE_NOT_PRESENT_OFFSET, 2348 },
  26604   { 0x1d54c, UNICODE_NOT_PRESENT_OFFSET, 2350 },
  26605   { 0x1d54d, UNICODE_NOT_PRESENT_OFFSET, 5470 },
  26606   { 0x1d54e, UNICODE_NOT_PRESENT_OFFSET, 2352 },
  26607   { 0x1d54f, UNICODE_NOT_PRESENT_OFFSET, 5487 },
  26608   { 0x1d550, UNICODE_NOT_PRESENT_OFFSET, 6135 },
  26609   { 0x1d552, UNICODE_NOT_PRESENT_OFFSET, 6 },
  26610   { 0x1d553, UNICODE_NOT_PRESENT_OFFSET, 2364 },
  26611   { 0x1d554, UNICODE_NOT_PRESENT_OFFSET, 2435 },
  26612   { 0x1d555, UNICODE_NOT_PRESENT_OFFSET, 2366 },
  26613   { 0x1d556, UNICODE_NOT_PRESENT_OFFSET, 2368 },
  26614   { 0x1d557, UNICODE_NOT_PRESENT_OFFSET, 2443 },
  26615   { 0x1d558, UNICODE_NOT_PRESENT_OFFSET, 2379 },
  26616   { 0x1d559, UNICODE_NOT_PRESENT_OFFSET, 1171 },
  26617   { 0x1d55a, UNICODE_NOT_PRESENT_OFFSET, 2427 },
  26618   { 0x1d55b, UNICODE_NOT_PRESENT_OFFSET, 1176 },
  26619   { 0x1d55c, UNICODE_NOT_PRESENT_OFFSET, 2381 },
  26620   { 0x1d55d, UNICODE_NOT_PRESENT_OFFSET, 1220 },
  26621   { 0x1d55e, UNICODE_NOT_PRESENT_OFFSET, 2383 },
  26622   { 0x1d55f, UNICODE_NOT_PRESENT_OFFSET, 5279 },
  26623   { 0x1d560, UNICODE_NOT_PRESENT_OFFSET, 29 },
  26624   { 0x1d561, UNICODE_NOT_PRESENT_OFFSET, 2399 },
  26625   { 0x1d562, UNICODE_NOT_PRESENT_OFFSET, 6137 },
  26626   { 0x1d563, UNICODE_NOT_PRESENT_OFFSET, 1178 },
  26627   { 0x1d564, UNICODE_NOT_PRESENT_OFFSET, 711 },
  26628   { 0x1d565, UNICODE_NOT_PRESENT_OFFSET, 2401 },
  26629   { 0x1d566, UNICODE_NOT_PRESENT_OFFSET, 2403 },
  26630   { 0x1d567, UNICODE_NOT_PRESENT_OFFSET, 2412 },
  26631   { 0x1d568, UNICODE_NOT_PRESENT_OFFSET, 1189 },
  26632   { 0x1d569, UNICODE_NOT_PRESENT_OFFSET, 1222 },
  26633   { 0x1d56a, UNICODE_NOT_PRESENT_OFFSET, 1191 },
  26634   { 0x1d56b, UNICODE_NOT_PRESENT_OFFSET, 2526 },
  26635   { 0x1d56c, UNICODE_NOT_PRESENT_OFFSET, 2309 },
  26636   { 0x1d56d, UNICODE_NOT_PRESENT_OFFSET, 2314 },
  26637   { 0x1d56e, UNICODE_NOT_PRESENT_OFFSET, 5292 },
  26638   { 0x1d56f, UNICODE_NOT_PRESENT_OFFSET, 2316 },
  26639   { 0x1d570, UNICODE_NOT_PRESENT_OFFSET, 2318 },
  26640   { 0x1d571, UNICODE_NOT_PRESENT_OFFSET, 5336 },
  26641   { 0x1d572, UNICODE_NOT_PRESENT_OFFSET, 2323 },
  26642   { 0x1d573, UNICODE_NOT_PRESENT_OFFSET, 2325 },
  26643   { 0x1d574, UNICODE_NOT_PRESENT_OFFSET, 2327 },
  26644   { 0x1d575, UNICODE_NOT_PRESENT_OFFSET, 2329 },
  26645   { 0x1d576, UNICODE_NOT_PRESENT_OFFSET, 2331 },
  26646   { 0x1d577, UNICODE_NOT_PRESENT_OFFSET, 2333 },
  26647   { 0x1d578, UNICODE_NOT_PRESENT_OFFSET, 2335 },
  26648   { 0x1d579, UNICODE_NOT_PRESENT_OFFSET, 2337 },
  26649   { 0x1d57a, UNICODE_NOT_PRESENT_OFFSET, 2339 },
  26650   { 0x1d57b, UNICODE_NOT_PRESENT_OFFSET, 2344 },
  26651   { 0x1d57c, UNICODE_NOT_PRESENT_OFFSET, 5319 },
  26652   { 0x1d57d, UNICODE_NOT_PRESENT_OFFSET, 2346 },
  26653   { 0x1d57e, UNICODE_NOT_PRESENT_OFFSET, 6133 },
  26654   { 0x1d57f, UNICODE_NOT_PRESENT_OFFSET, 2348 },
  26655   { 0x1d580, UNICODE_NOT_PRESENT_OFFSET, 2350 },
  26656   { 0x1d581, UNICODE_NOT_PRESENT_OFFSET, 5470 },
  26657   { 0x1d582, UNICODE_NOT_PRESENT_OFFSET, 2352 },
  26658   { 0x1d583, UNICODE_NOT_PRESENT_OFFSET, 5487 },
  26659   { 0x1d584, UNICODE_NOT_PRESENT_OFFSET, 6135 },
  26660   { 0x1d585, UNICODE_NOT_PRESENT_OFFSET, 5331 },
  26661   { 0x1d586, UNICODE_NOT_PRESENT_OFFSET, 6 },
  26662   { 0x1d587, UNICODE_NOT_PRESENT_OFFSET, 2364 },
  26663   { 0x1d588, UNICODE_NOT_PRESENT_OFFSET, 2435 },
  26664   { 0x1d589, UNICODE_NOT_PRESENT_OFFSET, 2366 },
  26665   { 0x1d58a, UNICODE_NOT_PRESENT_OFFSET, 2368 },
  26666   { 0x1d58b, UNICODE_NOT_PRESENT_OFFSET, 2443 },
  26667   { 0x1d58c, UNICODE_NOT_PRESENT_OFFSET, 2379 },
  26668   { 0x1d58d, UNICODE_NOT_PRESENT_OFFSET, 1171 },
  26669   { 0x1d58e, UNICODE_NOT_PRESENT_OFFSET, 2427 },
  26670   { 0x1d58f, UNICODE_NOT_PRESENT_OFFSET, 1176 },
  26671   { 0x1d590, UNICODE_NOT_PRESENT_OFFSET, 2381 },
  26672   { 0x1d591, UNICODE_NOT_PRESENT_OFFSET, 1220 },
  26673   { 0x1d592, UNICODE_NOT_PRESENT_OFFSET, 2383 },
  26674   { 0x1d593, UNICODE_NOT_PRESENT_OFFSET, 5279 },
  26675   { 0x1d594, UNICODE_NOT_PRESENT_OFFSET, 29 },
  26676   { 0x1d595, UNICODE_NOT_PRESENT_OFFSET, 2399 },
  26677   { 0x1d596, UNICODE_NOT_PRESENT_OFFSET, 6137 },
  26678   { 0x1d597, UNICODE_NOT_PRESENT_OFFSET, 1178 },
  26679   { 0x1d598, UNICODE_NOT_PRESENT_OFFSET, 711 },
  26680   { 0x1d599, UNICODE_NOT_PRESENT_OFFSET, 2401 },
  26681   { 0x1d59a, UNICODE_NOT_PRESENT_OFFSET, 2403 },
  26682   { 0x1d59b, UNICODE_NOT_PRESENT_OFFSET, 2412 },
  26683   { 0x1d59c, UNICODE_NOT_PRESENT_OFFSET, 1189 },
  26684   { 0x1d59d, UNICODE_NOT_PRESENT_OFFSET, 1222 },
  26685   { 0x1d59e, UNICODE_NOT_PRESENT_OFFSET, 1191 },
  26686   { 0x1d59f, UNICODE_NOT_PRESENT_OFFSET, 2526 },
  26687   { 0x1d5a0, UNICODE_NOT_PRESENT_OFFSET, 2309 },
  26688   { 0x1d5a1, UNICODE_NOT_PRESENT_OFFSET, 2314 },
  26689   { 0x1d5a2, UNICODE_NOT_PRESENT_OFFSET, 5292 },
  26690   { 0x1d5a3, UNICODE_NOT_PRESENT_OFFSET, 2316 },
  26691   { 0x1d5a4, UNICODE_NOT_PRESENT_OFFSET, 2318 },
  26692   { 0x1d5a5, UNICODE_NOT_PRESENT_OFFSET, 5336 },
  26693   { 0x1d5a6, UNICODE_NOT_PRESENT_OFFSET, 2323 },
  26694   { 0x1d5a7, UNICODE_NOT_PRESENT_OFFSET, 2325 },
  26695   { 0x1d5a8, UNICODE_NOT_PRESENT_OFFSET, 2327 },
  26696   { 0x1d5a9, UNICODE_NOT_PRESENT_OFFSET, 2329 },
  26697   { 0x1d5aa, UNICODE_NOT_PRESENT_OFFSET, 2331 },
  26698   { 0x1d5ab, UNICODE_NOT_PRESENT_OFFSET, 2333 },
  26699   { 0x1d5ac, UNICODE_NOT_PRESENT_OFFSET, 2335 },
  26700   { 0x1d5ad, UNICODE_NOT_PRESENT_OFFSET, 2337 },
  26701   { 0x1d5ae, UNICODE_NOT_PRESENT_OFFSET, 2339 },
  26702   { 0x1d5af, UNICODE_NOT_PRESENT_OFFSET, 2344 },
  26703   { 0x1d5b0, UNICODE_NOT_PRESENT_OFFSET, 5319 },
  26704   { 0x1d5b1, UNICODE_NOT_PRESENT_OFFSET, 2346 },
  26705   { 0x1d5b2, UNICODE_NOT_PRESENT_OFFSET, 6133 },
  26706   { 0x1d5b3, UNICODE_NOT_PRESENT_OFFSET, 2348 },
  26707   { 0x1d5b4, UNICODE_NOT_PRESENT_OFFSET, 2350 },
  26708   { 0x1d5b5, UNICODE_NOT_PRESENT_OFFSET, 5470 },
  26709   { 0x1d5b6, UNICODE_NOT_PRESENT_OFFSET, 2352 },
  26710   { 0x1d5b7, UNICODE_NOT_PRESENT_OFFSET, 5487 },
  26711   { 0x1d5b8, UNICODE_NOT_PRESENT_OFFSET, 6135 },
  26712   { 0x1d5b9, UNICODE_NOT_PRESENT_OFFSET, 5331 },
  26713   { 0x1d5ba, UNICODE_NOT_PRESENT_OFFSET, 6 },
  26714   { 0x1d5bb, UNICODE_NOT_PRESENT_OFFSET, 2364 },
  26715   { 0x1d5bc, UNICODE_NOT_PRESENT_OFFSET, 2435 },
  26716   { 0x1d5bd, UNICODE_NOT_PRESENT_OFFSET, 2366 },
  26717   { 0x1d5be, UNICODE_NOT_PRESENT_OFFSET, 2368 },
  26718   { 0x1d5bf, UNICODE_NOT_PRESENT_OFFSET, 2443 },
  26719   { 0x1d5c0, UNICODE_NOT_PRESENT_OFFSET, 2379 },
  26720   { 0x1d5c1, UNICODE_NOT_PRESENT_OFFSET, 1171 },
  26721   { 0x1d5c2, UNICODE_NOT_PRESENT_OFFSET, 2427 },
  26722   { 0x1d5c3, UNICODE_NOT_PRESENT_OFFSET, 1176 },
  26723   { 0x1d5c4, UNICODE_NOT_PRESENT_OFFSET, 2381 },
  26724   { 0x1d5c5, UNICODE_NOT_PRESENT_OFFSET, 1220 },
  26725   { 0x1d5c6, UNICODE_NOT_PRESENT_OFFSET, 2383 },
  26726   { 0x1d5c7, UNICODE_NOT_PRESENT_OFFSET, 5279 },
  26727   { 0x1d5c8, UNICODE_NOT_PRESENT_OFFSET, 29 },
  26728   { 0x1d5c9, UNICODE_NOT_PRESENT_OFFSET, 2399 },
  26729   { 0x1d5ca, UNICODE_NOT_PRESENT_OFFSET, 6137 },
  26730   { 0x1d5cb, UNICODE_NOT_PRESENT_OFFSET, 1178 },
  26731   { 0x1d5cc, UNICODE_NOT_PRESENT_OFFSET, 711 },
  26732   { 0x1d5cd, UNICODE_NOT_PRESENT_OFFSET, 2401 },
  26733   { 0x1d5ce, UNICODE_NOT_PRESENT_OFFSET, 2403 },
  26734   { 0x1d5cf, UNICODE_NOT_PRESENT_OFFSET, 2412 },
  26735   { 0x1d5d0, UNICODE_NOT_PRESENT_OFFSET, 1189 },
  26736   { 0x1d5d1, UNICODE_NOT_PRESENT_OFFSET, 1222 },
  26737   { 0x1d5d2, UNICODE_NOT_PRESENT_OFFSET, 1191 },
  26738   { 0x1d5d3, UNICODE_NOT_PRESENT_OFFSET, 2526 },
  26739   { 0x1d5d4, UNICODE_NOT_PRESENT_OFFSET, 2309 },
  26740   { 0x1d5d5, UNICODE_NOT_PRESENT_OFFSET, 2314 },
  26741   { 0x1d5d6, UNICODE_NOT_PRESENT_OFFSET, 5292 },
  26742   { 0x1d5d7, UNICODE_NOT_PRESENT_OFFSET, 2316 },
  26743   { 0x1d5d8, UNICODE_NOT_PRESENT_OFFSET, 2318 },
  26744   { 0x1d5d9, UNICODE_NOT_PRESENT_OFFSET, 5336 },
  26745   { 0x1d5da, UNICODE_NOT_PRESENT_OFFSET, 2323 },
  26746   { 0x1d5db, UNICODE_NOT_PRESENT_OFFSET, 2325 },
  26747   { 0x1d5dc, UNICODE_NOT_PRESENT_OFFSET, 2327 },
  26748   { 0x1d5dd, UNICODE_NOT_PRESENT_OFFSET, 2329 },
  26749   { 0x1d5de, UNICODE_NOT_PRESENT_OFFSET, 2331 },
  26750   { 0x1d5df, UNICODE_NOT_PRESENT_OFFSET, 2333 },
  26751   { 0x1d5e0, UNICODE_NOT_PRESENT_OFFSET, 2335 },
  26752   { 0x1d5e1, UNICODE_NOT_PRESENT_OFFSET, 2337 },
  26753   { 0x1d5e2, UNICODE_NOT_PRESENT_OFFSET, 2339 },
  26754   { 0x1d5e3, UNICODE_NOT_PRESENT_OFFSET, 2344 },
  26755   { 0x1d5e4, UNICODE_NOT_PRESENT_OFFSET, 5319 },
  26756   { 0x1d5e5, UNICODE_NOT_PRESENT_OFFSET, 2346 },
  26757   { 0x1d5e6, UNICODE_NOT_PRESENT_OFFSET, 6133 },
  26758   { 0x1d5e7, UNICODE_NOT_PRESENT_OFFSET, 2348 },
  26759   { 0x1d5e8, UNICODE_NOT_PRESENT_OFFSET, 2350 },
  26760   { 0x1d5e9, UNICODE_NOT_PRESENT_OFFSET, 5470 },
  26761   { 0x1d5ea, UNICODE_NOT_PRESENT_OFFSET, 2352 },
  26762   { 0x1d5eb, UNICODE_NOT_PRESENT_OFFSET, 5487 },
  26763   { 0x1d5ec, UNICODE_NOT_PRESENT_OFFSET, 6135 },
  26764   { 0x1d5ed, UNICODE_NOT_PRESENT_OFFSET, 5331 },
  26765   { 0x1d5ee, UNICODE_NOT_PRESENT_OFFSET, 6 },
  26766   { 0x1d5ef, UNICODE_NOT_PRESENT_OFFSET, 2364 },
  26767   { 0x1d5f0, UNICODE_NOT_PRESENT_OFFSET, 2435 },
  26768   { 0x1d5f1, UNICODE_NOT_PRESENT_OFFSET, 2366 },
  26769   { 0x1d5f2, UNICODE_NOT_PRESENT_OFFSET, 2368 },
  26770   { 0x1d5f3, UNICODE_NOT_PRESENT_OFFSET, 2443 },
  26771   { 0x1d5f4, UNICODE_NOT_PRESENT_OFFSET, 2379 },
  26772   { 0x1d5f5, UNICODE_NOT_PRESENT_OFFSET, 1171 },
  26773   { 0x1d5f6, UNICODE_NOT_PRESENT_OFFSET, 2427 },
  26774   { 0x1d5f7, UNICODE_NOT_PRESENT_OFFSET, 1176 },
  26775   { 0x1d5f8, UNICODE_NOT_PRESENT_OFFSET, 2381 },
  26776   { 0x1d5f9, UNICODE_NOT_PRESENT_OFFSET, 1220 },
  26777   { 0x1d5fa, UNICODE_NOT_PRESENT_OFFSET, 2383 },
  26778   { 0x1d5fb, UNICODE_NOT_PRESENT_OFFSET, 5279 },
  26779   { 0x1d5fc, UNICODE_NOT_PRESENT_OFFSET, 29 },
  26780   { 0x1d5fd, UNICODE_NOT_PRESENT_OFFSET, 2399 },
  26781   { 0x1d5fe, UNICODE_NOT_PRESENT_OFFSET, 6137 },
  26782   { 0x1d5ff, UNICODE_NOT_PRESENT_OFFSET, 1178 },
  26783   { 0x1d600, UNICODE_NOT_PRESENT_OFFSET, 711 },
  26784   { 0x1d601, UNICODE_NOT_PRESENT_OFFSET, 2401 },
  26785   { 0x1d602, UNICODE_NOT_PRESENT_OFFSET, 2403 },
  26786   { 0x1d603, UNICODE_NOT_PRESENT_OFFSET, 2412 },
  26787   { 0x1d604, UNICODE_NOT_PRESENT_OFFSET, 1189 },
  26788   { 0x1d605, UNICODE_NOT_PRESENT_OFFSET, 1222 },
  26789   { 0x1d606, UNICODE_NOT_PRESENT_OFFSET, 1191 },
  26790   { 0x1d607, UNICODE_NOT_PRESENT_OFFSET, 2526 },
  26791   { 0x1d608, UNICODE_NOT_PRESENT_OFFSET, 2309 },
  26792   { 0x1d609, UNICODE_NOT_PRESENT_OFFSET, 2314 },
  26793   { 0x1d60a, UNICODE_NOT_PRESENT_OFFSET, 5292 },
  26794   { 0x1d60b, UNICODE_NOT_PRESENT_OFFSET, 2316 },
  26795   { 0x1d60c, UNICODE_NOT_PRESENT_OFFSET, 2318 },
  26796   { 0x1d60d, UNICODE_NOT_PRESENT_OFFSET, 5336 },
  26797   { 0x1d60e, UNICODE_NOT_PRESENT_OFFSET, 2323 },
  26798   { 0x1d60f, UNICODE_NOT_PRESENT_OFFSET, 2325 },
  26799   { 0x1d610, UNICODE_NOT_PRESENT_OFFSET, 2327 },
  26800   { 0x1d611, UNICODE_NOT_PRESENT_OFFSET, 2329 },
  26801   { 0x1d612, UNICODE_NOT_PRESENT_OFFSET, 2331 },
  26802   { 0x1d613, UNICODE_NOT_PRESENT_OFFSET, 2333 },
  26803   { 0x1d614, UNICODE_NOT_PRESENT_OFFSET, 2335 },
  26804   { 0x1d615, UNICODE_NOT_PRESENT_OFFSET, 2337 },
  26805   { 0x1d616, UNICODE_NOT_PRESENT_OFFSET, 2339 },
  26806   { 0x1d617, UNICODE_NOT_PRESENT_OFFSET, 2344 },
  26807   { 0x1d618, UNICODE_NOT_PRESENT_OFFSET, 5319 },
  26808   { 0x1d619, UNICODE_NOT_PRESENT_OFFSET, 2346 },
  26809   { 0x1d61a, UNICODE_NOT_PRESENT_OFFSET, 6133 },
  26810   { 0x1d61b, UNICODE_NOT_PRESENT_OFFSET, 2348 },
  26811   { 0x1d61c, UNICODE_NOT_PRESENT_OFFSET, 2350 },
  26812   { 0x1d61d, UNICODE_NOT_PRESENT_OFFSET, 5470 },
  26813   { 0x1d61e, UNICODE_NOT_PRESENT_OFFSET, 2352 },
  26814   { 0x1d61f, UNICODE_NOT_PRESENT_OFFSET, 5487 },
  26815   { 0x1d620, UNICODE_NOT_PRESENT_OFFSET, 6135 },
  26816   { 0x1d621, UNICODE_NOT_PRESENT_OFFSET, 5331 },
  26817   { 0x1d622, UNICODE_NOT_PRESENT_OFFSET, 6 },
  26818   { 0x1d623, UNICODE_NOT_PRESENT_OFFSET, 2364 },
  26819   { 0x1d624, UNICODE_NOT_PRESENT_OFFSET, 2435 },
  26820   { 0x1d625, UNICODE_NOT_PRESENT_OFFSET, 2366 },
  26821   { 0x1d626, UNICODE_NOT_PRESENT_OFFSET, 2368 },
  26822   { 0x1d627, UNICODE_NOT_PRESENT_OFFSET, 2443 },
  26823   { 0x1d628, UNICODE_NOT_PRESENT_OFFSET, 2379 },
  26824   { 0x1d629, UNICODE_NOT_PRESENT_OFFSET, 1171 },
  26825   { 0x1d62a, UNICODE_NOT_PRESENT_OFFSET, 2427 },
  26826   { 0x1d62b, UNICODE_NOT_PRESENT_OFFSET, 1176 },
  26827   { 0x1d62c, UNICODE_NOT_PRESENT_OFFSET, 2381 },
  26828   { 0x1d62d, UNICODE_NOT_PRESENT_OFFSET, 1220 },
  26829   { 0x1d62e, UNICODE_NOT_PRESENT_OFFSET, 2383 },
  26830   { 0x1d62f, UNICODE_NOT_PRESENT_OFFSET, 5279 },
  26831   { 0x1d630, UNICODE_NOT_PRESENT_OFFSET, 29 },
  26832   { 0x1d631, UNICODE_NOT_PRESENT_OFFSET, 2399 },
  26833   { 0x1d632, UNICODE_NOT_PRESENT_OFFSET, 6137 },
  26834   { 0x1d633, UNICODE_NOT_PRESENT_OFFSET, 1178 },
  26835   { 0x1d634, UNICODE_NOT_PRESENT_OFFSET, 711 },
  26836   { 0x1d635, UNICODE_NOT_PRESENT_OFFSET, 2401 },
  26837   { 0x1d636, UNICODE_NOT_PRESENT_OFFSET, 2403 },
  26838   { 0x1d637, UNICODE_NOT_PRESENT_OFFSET, 2412 },
  26839   { 0x1d638, UNICODE_NOT_PRESENT_OFFSET, 1189 },
  26840   { 0x1d639, UNICODE_NOT_PRESENT_OFFSET, 1222 },
  26841   { 0x1d63a, UNICODE_NOT_PRESENT_OFFSET, 1191 },
  26842   { 0x1d63b, UNICODE_NOT_PRESENT_OFFSET, 2526 },
  26843   { 0x1d63c, UNICODE_NOT_PRESENT_OFFSET, 2309 },
  26844   { 0x1d63d, UNICODE_NOT_PRESENT_OFFSET, 2314 },
  26845   { 0x1d63e, UNICODE_NOT_PRESENT_OFFSET, 5292 },
  26846   { 0x1d63f, UNICODE_NOT_PRESENT_OFFSET, 2316 },
  26847   { 0x1d640, UNICODE_NOT_PRESENT_OFFSET, 2318 },
  26848   { 0x1d641, UNICODE_NOT_PRESENT_OFFSET, 5336 },
  26849   { 0x1d642, UNICODE_NOT_PRESENT_OFFSET, 2323 },
  26850   { 0x1d643, UNICODE_NOT_PRESENT_OFFSET, 2325 },
  26851   { 0x1d644, UNICODE_NOT_PRESENT_OFFSET, 2327 },
  26852   { 0x1d645, UNICODE_NOT_PRESENT_OFFSET, 2329 },
  26853   { 0x1d646, UNICODE_NOT_PRESENT_OFFSET, 2331 },
  26854   { 0x1d647, UNICODE_NOT_PRESENT_OFFSET, 2333 },
  26855   { 0x1d648, UNICODE_NOT_PRESENT_OFFSET, 2335 },
  26856   { 0x1d649, UNICODE_NOT_PRESENT_OFFSET, 2337 },
  26857   { 0x1d64a, UNICODE_NOT_PRESENT_OFFSET, 2339 },
  26858   { 0x1d64b, UNICODE_NOT_PRESENT_OFFSET, 2344 },
  26859   { 0x1d64c, UNICODE_NOT_PRESENT_OFFSET, 5319 },
  26860   { 0x1d64d, UNICODE_NOT_PRESENT_OFFSET, 2346 },
  26861   { 0x1d64e, UNICODE_NOT_PRESENT_OFFSET, 6133 },
  26862   { 0x1d64f, UNICODE_NOT_PRESENT_OFFSET, 2348 },
  26863   { 0x1d650, UNICODE_NOT_PRESENT_OFFSET, 2350 },
  26864   { 0x1d651, UNICODE_NOT_PRESENT_OFFSET, 5470 },
  26865   { 0x1d652, UNICODE_NOT_PRESENT_OFFSET, 2352 },
  26866   { 0x1d653, UNICODE_NOT_PRESENT_OFFSET, 5487 },
  26867   { 0x1d654, UNICODE_NOT_PRESENT_OFFSET, 6135 },
  26868   { 0x1d655, UNICODE_NOT_PRESENT_OFFSET, 5331 },
  26869   { 0x1d656, UNICODE_NOT_PRESENT_OFFSET, 6 },
  26870   { 0x1d657, UNICODE_NOT_PRESENT_OFFSET, 2364 },
  26871   { 0x1d658, UNICODE_NOT_PRESENT_OFFSET, 2435 },
  26872   { 0x1d659, UNICODE_NOT_PRESENT_OFFSET, 2366 },
  26873   { 0x1d65a, UNICODE_NOT_PRESENT_OFFSET, 2368 },
  26874   { 0x1d65b, UNICODE_NOT_PRESENT_OFFSET, 2443 },
  26875   { 0x1d65c, UNICODE_NOT_PRESENT_OFFSET, 2379 },
  26876   { 0x1d65d, UNICODE_NOT_PRESENT_OFFSET, 1171 },
  26877   { 0x1d65e, UNICODE_NOT_PRESENT_OFFSET, 2427 },
  26878   { 0x1d65f, UNICODE_NOT_PRESENT_OFFSET, 1176 },
  26879   { 0x1d660, UNICODE_NOT_PRESENT_OFFSET, 2381 },
  26880   { 0x1d661, UNICODE_NOT_PRESENT_OFFSET, 1220 },
  26881   { 0x1d662, UNICODE_NOT_PRESENT_OFFSET, 2383 },
  26882   { 0x1d663, UNICODE_NOT_PRESENT_OFFSET, 5279 },
  26883   { 0x1d664, UNICODE_NOT_PRESENT_OFFSET, 29 },
  26884   { 0x1d665, UNICODE_NOT_PRESENT_OFFSET, 2399 },
  26885   { 0x1d666, UNICODE_NOT_PRESENT_OFFSET, 6137 },
  26886   { 0x1d667, UNICODE_NOT_PRESENT_OFFSET, 1178 },
  26887   { 0x1d668, UNICODE_NOT_PRESENT_OFFSET, 711 },
  26888   { 0x1d669, UNICODE_NOT_PRESENT_OFFSET, 2401 },
  26889   { 0x1d66a, UNICODE_NOT_PRESENT_OFFSET, 2403 },
  26890   { 0x1d66b, UNICODE_NOT_PRESENT_OFFSET, 2412 },
  26891   { 0x1d66c, UNICODE_NOT_PRESENT_OFFSET, 1189 },
  26892   { 0x1d66d, UNICODE_NOT_PRESENT_OFFSET, 1222 },
  26893   { 0x1d66e, UNICODE_NOT_PRESENT_OFFSET, 1191 },
  26894   { 0x1d66f, UNICODE_NOT_PRESENT_OFFSET, 2526 },
  26895   { 0x1d670, UNICODE_NOT_PRESENT_OFFSET, 2309 },
  26896   { 0x1d671, UNICODE_NOT_PRESENT_OFFSET, 2314 },
  26897   { 0x1d672, UNICODE_NOT_PRESENT_OFFSET, 5292 },
  26898   { 0x1d673, UNICODE_NOT_PRESENT_OFFSET, 2316 },
  26899   { 0x1d674, UNICODE_NOT_PRESENT_OFFSET, 2318 },
  26900   { 0x1d675, UNICODE_NOT_PRESENT_OFFSET, 5336 },
  26901   { 0x1d676, UNICODE_NOT_PRESENT_OFFSET, 2323 },
  26902   { 0x1d677, UNICODE_NOT_PRESENT_OFFSET, 2325 },
  26903   { 0x1d678, UNICODE_NOT_PRESENT_OFFSET, 2327 },
  26904   { 0x1d679, UNICODE_NOT_PRESENT_OFFSET, 2329 },
  26905   { 0x1d67a, UNICODE_NOT_PRESENT_OFFSET, 2331 },
  26906   { 0x1d67b, UNICODE_NOT_PRESENT_OFFSET, 2333 },
  26907   { 0x1d67c, UNICODE_NOT_PRESENT_OFFSET, 2335 },
  26908   { 0x1d67d, UNICODE_NOT_PRESENT_OFFSET, 2337 },
  26909   { 0x1d67e, UNICODE_NOT_PRESENT_OFFSET, 2339 },
  26910   { 0x1d67f, UNICODE_NOT_PRESENT_OFFSET, 2344 },
  26911   { 0x1d680, UNICODE_NOT_PRESENT_OFFSET, 5319 },
  26912   { 0x1d681, UNICODE_NOT_PRESENT_OFFSET, 2346 },
  26913   { 0x1d682, UNICODE_NOT_PRESENT_OFFSET, 6133 },
  26914   { 0x1d683, UNICODE_NOT_PRESENT_OFFSET, 2348 },
  26915   { 0x1d684, UNICODE_NOT_PRESENT_OFFSET, 2350 },
  26916   { 0x1d685, UNICODE_NOT_PRESENT_OFFSET, 5470 },
  26917   { 0x1d686, UNICODE_NOT_PRESENT_OFFSET, 2352 },
  26918   { 0x1d687, UNICODE_NOT_PRESENT_OFFSET, 5487 },
  26919   { 0x1d688, UNICODE_NOT_PRESENT_OFFSET, 6135 },
  26920   { 0x1d689, UNICODE_NOT_PRESENT_OFFSET, 5331 },
  26921   { 0x1d68a, UNICODE_NOT_PRESENT_OFFSET, 6 },
  26922   { 0x1d68b, UNICODE_NOT_PRESENT_OFFSET, 2364 },
  26923   { 0x1d68c, UNICODE_NOT_PRESENT_OFFSET, 2435 },
  26924   { 0x1d68d, UNICODE_NOT_PRESENT_OFFSET, 2366 },
  26925   { 0x1d68e, UNICODE_NOT_PRESENT_OFFSET, 2368 },
  26926   { 0x1d68f, UNICODE_NOT_PRESENT_OFFSET, 2443 },
  26927   { 0x1d690, UNICODE_NOT_PRESENT_OFFSET, 2379 },
  26928   { 0x1d691, UNICODE_NOT_PRESENT_OFFSET, 1171 },
  26929   { 0x1d692, UNICODE_NOT_PRESENT_OFFSET, 2427 },
  26930   { 0x1d693, UNICODE_NOT_PRESENT_OFFSET, 1176 },
  26931   { 0x1d694, UNICODE_NOT_PRESENT_OFFSET, 2381 },
  26932   { 0x1d695, UNICODE_NOT_PRESENT_OFFSET, 1220 },
  26933   { 0x1d696, UNICODE_NOT_PRESENT_OFFSET, 2383 },
  26934   { 0x1d697, UNICODE_NOT_PRESENT_OFFSET, 5279 },
  26935   { 0x1d698, UNICODE_NOT_PRESENT_OFFSET, 29 },
  26936   { 0x1d699, UNICODE_NOT_PRESENT_OFFSET, 2399 },
  26937   { 0x1d69a, UNICODE_NOT_PRESENT_OFFSET, 6137 },
  26938   { 0x1d69b, UNICODE_NOT_PRESENT_OFFSET, 1178 },
  26939   { 0x1d69c, UNICODE_NOT_PRESENT_OFFSET, 711 },
  26940   { 0x1d69d, UNICODE_NOT_PRESENT_OFFSET, 2401 },
  26941   { 0x1d69e, UNICODE_NOT_PRESENT_OFFSET, 2403 },
  26942   { 0x1d69f, UNICODE_NOT_PRESENT_OFFSET, 2412 },
  26943   { 0x1d6a0, UNICODE_NOT_PRESENT_OFFSET, 1189 },
  26944   { 0x1d6a1, UNICODE_NOT_PRESENT_OFFSET, 1222 },
  26945   { 0x1d6a2, UNICODE_NOT_PRESENT_OFFSET, 1191 },
  26946   { 0x1d6a3, UNICODE_NOT_PRESENT_OFFSET, 2526 },
  26947   { 0x1d6a4, UNICODE_NOT_PRESENT_OFFSET, 15258 },
  26948   { 0x1d6a5, UNICODE_NOT_PRESENT_OFFSET, 15261 },
  26949   { 0x1d6a8, UNICODE_NOT_PRESENT_OFFSET, 15264 },
  26950   { 0x1d6a9, UNICODE_NOT_PRESENT_OFFSET, 15267 },
  26951   { 0x1d6aa, UNICODE_NOT_PRESENT_OFFSET, 5354 },
  26952   { 0x1d6ab, UNICODE_NOT_PRESENT_OFFSET, 15270 },
  26953   { 0x1d6ac, UNICODE_NOT_PRESENT_OFFSET, 15273 },
  26954   { 0x1d6ad, UNICODE_NOT_PRESENT_OFFSET, 15276 },
  26955   { 0x1d6ae, UNICODE_NOT_PRESENT_OFFSET, 15279 },
  26956   { 0x1d6af, UNICODE_NOT_PRESENT_OFFSET, 1402 },
  26957   { 0x1d6b0, UNICODE_NOT_PRESENT_OFFSET, 15282 },
  26958   { 0x1d6b1, UNICODE_NOT_PRESENT_OFFSET, 15285 },
  26959   { 0x1d6b2, UNICODE_NOT_PRESENT_OFFSET, 15288 },
  26960   { 0x1d6b3, UNICODE_NOT_PRESENT_OFFSET, 15291 },
  26961   { 0x1d6b4, UNICODE_NOT_PRESENT_OFFSET, 15294 },
  26962   { 0x1d6b5, UNICODE_NOT_PRESENT_OFFSET, 15297 },
  26963   { 0x1d6b6, UNICODE_NOT_PRESENT_OFFSET, 15300 },
  26964   { 0x1d6b7, UNICODE_NOT_PRESENT_OFFSET, 5357 },
  26965   { 0x1d6b8, UNICODE_NOT_PRESENT_OFFSET, 15303 },
  26966   { 0x1d6b9, UNICODE_NOT_PRESENT_OFFSET, 1402 },
  26967   { 0x1d6ba, UNICODE_NOT_PRESENT_OFFSET, 1408 },
  26968   { 0x1d6bb, UNICODE_NOT_PRESENT_OFFSET, 15306 },
  26969   { 0x1d6bc, UNICODE_NOT_PRESENT_OFFSET, 1374 },
  26970   { 0x1d6bd, UNICODE_NOT_PRESENT_OFFSET, 15309 },
  26971   { 0x1d6be, UNICODE_NOT_PRESENT_OFFSET, 15312 },
  26972   { 0x1d6bf, UNICODE_NOT_PRESENT_OFFSET, 15315 },
  26973   { 0x1d6c0, UNICODE_NOT_PRESENT_OFFSET, 5333 },
  26974   { 0x1d6c1, UNICODE_NOT_PRESENT_OFFSET, 15318 },
  26975   { 0x1d6c2, UNICODE_NOT_PRESENT_OFFSET, 15322 },
  26976   { 0x1d6c3, UNICODE_NOT_PRESENT_OFFSET, 1368 },
  26977   { 0x1d6c4, UNICODE_NOT_PRESENT_OFFSET, 2418 },
  26978   { 0x1d6c5, UNICODE_NOT_PRESENT_OFFSET, 2421 },
  26979   { 0x1d6c6, UNICODE_NOT_PRESENT_OFFSET, 1405 },
  26980   { 0x1d6c7, UNICODE_NOT_PRESENT_OFFSET, 15325 },
  26981   { 0x1d6c8, UNICODE_NOT_PRESENT_OFFSET, 15328 },
  26982   { 0x1d6c9, UNICODE_NOT_PRESENT_OFFSET, 1371 },
  26983   { 0x1d6ca, UNICODE_NOT_PRESENT_OFFSET, 4860 },
  26984   { 0x1d6cb, UNICODE_NOT_PRESENT_OFFSET, 1393 },
  26985   { 0x1d6cc, UNICODE_NOT_PRESENT_OFFSET, 15331 },
  26986   { 0x1d6cd, UNICODE_NOT_PRESENT_OFFSET, 20 },
  26987   { 0x1d6ce, UNICODE_NOT_PRESENT_OFFSET, 15334 },
  26988   { 0x1d6cf, UNICODE_NOT_PRESENT_OFFSET, 15337 },
  26989   { 0x1d6d0, UNICODE_NOT_PRESENT_OFFSET, 15340 },
  26990   { 0x1d6d1, UNICODE_NOT_PRESENT_OFFSET, 1390 },
  26991   { 0x1d6d2, UNICODE_NOT_PRESENT_OFFSET, 1396 },
  26992   { 0x1d6d3, UNICODE_NOT_PRESENT_OFFSET, 1399 },
  26993   { 0x1d6d4, UNICODE_NOT_PRESENT_OFFSET, 15343 },
  26994   { 0x1d6d5, UNICODE_NOT_PRESENT_OFFSET, 15346 },
  26995   { 0x1d6d6, UNICODE_NOT_PRESENT_OFFSET, 15349 },
  26996   { 0x1d6d7, UNICODE_NOT_PRESENT_OFFSET, 1387 },
  26997   { 0x1d6d8, UNICODE_NOT_PRESENT_OFFSET, 2424 },
  26998   { 0x1d6d9, UNICODE_NOT_PRESENT_OFFSET, 15352 },
  26999   { 0x1d6da, UNICODE_NOT_PRESENT_OFFSET, 15355 },
  27000   { 0x1d6db, UNICODE_NOT_PRESENT_OFFSET, 15358 },
  27001   { 0x1d6dc, UNICODE_NOT_PRESENT_OFFSET, 1405 },
  27002   { 0x1d6dd, UNICODE_NOT_PRESENT_OFFSET, 1371 },
  27003   { 0x1d6de, UNICODE_NOT_PRESENT_OFFSET, 1393 },
  27004   { 0x1d6df, UNICODE_NOT_PRESENT_OFFSET, 1387 },
  27005   { 0x1d6e0, UNICODE_NOT_PRESENT_OFFSET, 1396 },
  27006   { 0x1d6e1, UNICODE_NOT_PRESENT_OFFSET, 1390 },
  27007   { 0x1d6e2, UNICODE_NOT_PRESENT_OFFSET, 15264 },
  27008   { 0x1d6e3, UNICODE_NOT_PRESENT_OFFSET, 15267 },
  27009   { 0x1d6e4, UNICODE_NOT_PRESENT_OFFSET, 5354 },
  27010   { 0x1d6e5, UNICODE_NOT_PRESENT_OFFSET, 15270 },
  27011   { 0x1d6e6, UNICODE_NOT_PRESENT_OFFSET, 15273 },
  27012   { 0x1d6e7, UNICODE_NOT_PRESENT_OFFSET, 15276 },
  27013   { 0x1d6e8, UNICODE_NOT_PRESENT_OFFSET, 15279 },
  27014   { 0x1d6e9, UNICODE_NOT_PRESENT_OFFSET, 1402 },
  27015   { 0x1d6ea, UNICODE_NOT_PRESENT_OFFSET, 15282 },
  27016   { 0x1d6eb, UNICODE_NOT_PRESENT_OFFSET, 15285 },
  27017   { 0x1d6ec, UNICODE_NOT_PRESENT_OFFSET, 15288 },
  27018   { 0x1d6ed, UNICODE_NOT_PRESENT_OFFSET, 15291 },
  27019   { 0x1d6ee, UNICODE_NOT_PRESENT_OFFSET, 15294 },
  27020   { 0x1d6ef, UNICODE_NOT_PRESENT_OFFSET, 15297 },
  27021   { 0x1d6f0, UNICODE_NOT_PRESENT_OFFSET, 15300 },
  27022   { 0x1d6f1, UNICODE_NOT_PRESENT_OFFSET, 5357 },
  27023   { 0x1d6f2, UNICODE_NOT_PRESENT_OFFSET, 15303 },
  27024   { 0x1d6f3, UNICODE_NOT_PRESENT_OFFSET, 1402 },
  27025   { 0x1d6f4, UNICODE_NOT_PRESENT_OFFSET, 1408 },
  27026   { 0x1d6f5, UNICODE_NOT_PRESENT_OFFSET, 15306 },
  27027   { 0x1d6f6, UNICODE_NOT_PRESENT_OFFSET, 1374 },
  27028   { 0x1d6f7, UNICODE_NOT_PRESENT_OFFSET, 15309 },
  27029   { 0x1d6f8, UNICODE_NOT_PRESENT_OFFSET, 15312 },
  27030   { 0x1d6f9, UNICODE_NOT_PRESENT_OFFSET, 15315 },
  27031   { 0x1d6fa, UNICODE_NOT_PRESENT_OFFSET, 5333 },
  27032   { 0x1d6fb, UNICODE_NOT_PRESENT_OFFSET, 15318 },
  27033   { 0x1d6fc, UNICODE_NOT_PRESENT_OFFSET, 15322 },
  27034   { 0x1d6fd, UNICODE_NOT_PRESENT_OFFSET, 1368 },
  27035   { 0x1d6fe, UNICODE_NOT_PRESENT_OFFSET, 2418 },
  27036   { 0x1d6ff, UNICODE_NOT_PRESENT_OFFSET, 2421 },
  27037   { 0x1d700, UNICODE_NOT_PRESENT_OFFSET, 1405 },
  27038   { 0x1d701, UNICODE_NOT_PRESENT_OFFSET, 15325 },
  27039   { 0x1d702, UNICODE_NOT_PRESENT_OFFSET, 15328 },
  27040   { 0x1d703, UNICODE_NOT_PRESENT_OFFSET, 1371 },
  27041   { 0x1d704, UNICODE_NOT_PRESENT_OFFSET, 4860 },
  27042   { 0x1d705, UNICODE_NOT_PRESENT_OFFSET, 1393 },
  27043   { 0x1d706, UNICODE_NOT_PRESENT_OFFSET, 15331 },
  27044   { 0x1d707, UNICODE_NOT_PRESENT_OFFSET, 20 },
  27045   { 0x1d708, UNICODE_NOT_PRESENT_OFFSET, 15334 },
  27046   { 0x1d709, UNICODE_NOT_PRESENT_OFFSET, 15337 },
  27047   { 0x1d70a, UNICODE_NOT_PRESENT_OFFSET, 15340 },
  27048   { 0x1d70b, UNICODE_NOT_PRESENT_OFFSET, 1390 },
  27049   { 0x1d70c, UNICODE_NOT_PRESENT_OFFSET, 1396 },
  27050   { 0x1d70d, UNICODE_NOT_PRESENT_OFFSET, 1399 },
  27051   { 0x1d70e, UNICODE_NOT_PRESENT_OFFSET, 15343 },
  27052   { 0x1d70f, UNICODE_NOT_PRESENT_OFFSET, 15346 },
  27053   { 0x1d710, UNICODE_NOT_PRESENT_OFFSET, 15349 },
  27054   { 0x1d711, UNICODE_NOT_PRESENT_OFFSET, 1387 },
  27055   { 0x1d712, UNICODE_NOT_PRESENT_OFFSET, 2424 },
  27056   { 0x1d713, UNICODE_NOT_PRESENT_OFFSET, 15352 },
  27057   { 0x1d714, UNICODE_NOT_PRESENT_OFFSET, 15355 },
  27058   { 0x1d715, UNICODE_NOT_PRESENT_OFFSET, 15358 },
  27059   { 0x1d716, UNICODE_NOT_PRESENT_OFFSET, 1405 },
  27060   { 0x1d717, UNICODE_NOT_PRESENT_OFFSET, 1371 },
  27061   { 0x1d718, UNICODE_NOT_PRESENT_OFFSET, 1393 },
  27062   { 0x1d719, UNICODE_NOT_PRESENT_OFFSET, 1387 },
  27063   { 0x1d71a, UNICODE_NOT_PRESENT_OFFSET, 1396 },
  27064   { 0x1d71b, UNICODE_NOT_PRESENT_OFFSET, 1390 },
  27065   { 0x1d71c, UNICODE_NOT_PRESENT_OFFSET, 15264 },
  27066   { 0x1d71d, UNICODE_NOT_PRESENT_OFFSET, 15267 },
  27067   { 0x1d71e, UNICODE_NOT_PRESENT_OFFSET, 5354 },
  27068   { 0x1d71f, UNICODE_NOT_PRESENT_OFFSET, 15270 },
  27069   { 0x1d720, UNICODE_NOT_PRESENT_OFFSET, 15273 },
  27070   { 0x1d721, UNICODE_NOT_PRESENT_OFFSET, 15276 },
  27071   { 0x1d722, UNICODE_NOT_PRESENT_OFFSET, 15279 },
  27072   { 0x1d723, UNICODE_NOT_PRESENT_OFFSET, 1402 },
  27073   { 0x1d724, UNICODE_NOT_PRESENT_OFFSET, 15282 },
  27074   { 0x1d725, UNICODE_NOT_PRESENT_OFFSET, 15285 },
  27075   { 0x1d726, UNICODE_NOT_PRESENT_OFFSET, 15288 },
  27076   { 0x1d727, UNICODE_NOT_PRESENT_OFFSET, 15291 },
  27077   { 0x1d728, UNICODE_NOT_PRESENT_OFFSET, 15294 },
  27078   { 0x1d729, UNICODE_NOT_PRESENT_OFFSET, 15297 },
  27079   { 0x1d72a, UNICODE_NOT_PRESENT_OFFSET, 15300 },
  27080   { 0x1d72b, UNICODE_NOT_PRESENT_OFFSET, 5357 },
  27081   { 0x1d72c, UNICODE_NOT_PRESENT_OFFSET, 15303 },
  27082   { 0x1d72d, UNICODE_NOT_PRESENT_OFFSET, 1402 },
  27083   { 0x1d72e, UNICODE_NOT_PRESENT_OFFSET, 1408 },
  27084   { 0x1d72f, UNICODE_NOT_PRESENT_OFFSET, 15306 },
  27085   { 0x1d730, UNICODE_NOT_PRESENT_OFFSET, 1374 },
  27086   { 0x1d731, UNICODE_NOT_PRESENT_OFFSET, 15309 },
  27087   { 0x1d732, UNICODE_NOT_PRESENT_OFFSET, 15312 },
  27088   { 0x1d733, UNICODE_NOT_PRESENT_OFFSET, 15315 },
  27089   { 0x1d734, UNICODE_NOT_PRESENT_OFFSET, 5333 },
  27090   { 0x1d735, UNICODE_NOT_PRESENT_OFFSET, 15318 },
  27091   { 0x1d736, UNICODE_NOT_PRESENT_OFFSET, 15322 },
  27092   { 0x1d737, UNICODE_NOT_PRESENT_OFFSET, 1368 },
  27093   { 0x1d738, UNICODE_NOT_PRESENT_OFFSET, 2418 },
  27094   { 0x1d739, UNICODE_NOT_PRESENT_OFFSET, 2421 },
  27095   { 0x1d73a, UNICODE_NOT_PRESENT_OFFSET, 1405 },
  27096   { 0x1d73b, UNICODE_NOT_PRESENT_OFFSET, 15325 },
  27097   { 0x1d73c, UNICODE_NOT_PRESENT_OFFSET, 15328 },
  27098   { 0x1d73d, UNICODE_NOT_PRESENT_OFFSET, 1371 },
  27099   { 0x1d73e, UNICODE_NOT_PRESENT_OFFSET, 4860 },
  27100   { 0x1d73f, UNICODE_NOT_PRESENT_OFFSET, 1393 },
  27101   { 0x1d740, UNICODE_NOT_PRESENT_OFFSET, 15331 },
  27102   { 0x1d741, UNICODE_NOT_PRESENT_OFFSET, 20 },
  27103   { 0x1d742, UNICODE_NOT_PRESENT_OFFSET, 15334 },
  27104   { 0x1d743, UNICODE_NOT_PRESENT_OFFSET, 15337 },
  27105   { 0x1d744, UNICODE_NOT_PRESENT_OFFSET, 15340 },
  27106   { 0x1d745, UNICODE_NOT_PRESENT_OFFSET, 1390 },
  27107   { 0x1d746, UNICODE_NOT_PRESENT_OFFSET, 1396 },
  27108   { 0x1d747, UNICODE_NOT_PRESENT_OFFSET, 1399 },
  27109   { 0x1d748, UNICODE_NOT_PRESENT_OFFSET, 15343 },
  27110   { 0x1d749, UNICODE_NOT_PRESENT_OFFSET, 15346 },
  27111   { 0x1d74a, UNICODE_NOT_PRESENT_OFFSET, 15349 },
  27112   { 0x1d74b, UNICODE_NOT_PRESENT_OFFSET, 1387 },
  27113   { 0x1d74c, UNICODE_NOT_PRESENT_OFFSET, 2424 },
  27114   { 0x1d74d, UNICODE_NOT_PRESENT_OFFSET, 15352 },
  27115   { 0x1d74e, UNICODE_NOT_PRESENT_OFFSET, 15355 },
  27116   { 0x1d74f, UNICODE_NOT_PRESENT_OFFSET, 15358 },
  27117   { 0x1d750, UNICODE_NOT_PRESENT_OFFSET, 1405 },
  27118   { 0x1d751, UNICODE_NOT_PRESENT_OFFSET, 1371 },
  27119   { 0x1d752, UNICODE_NOT_PRESENT_OFFSET, 1393 },
  27120   { 0x1d753, UNICODE_NOT_PRESENT_OFFSET, 1387 },
  27121   { 0x1d754, UNICODE_NOT_PRESENT_OFFSET, 1396 },
  27122   { 0x1d755, UNICODE_NOT_PRESENT_OFFSET, 1390 },
  27123   { 0x1d756, UNICODE_NOT_PRESENT_OFFSET, 15264 },
  27124   { 0x1d757, UNICODE_NOT_PRESENT_OFFSET, 15267 },
  27125   { 0x1d758, UNICODE_NOT_PRESENT_OFFSET, 5354 },
  27126   { 0x1d759, UNICODE_NOT_PRESENT_OFFSET, 15270 },
  27127   { 0x1d75a, UNICODE_NOT_PRESENT_OFFSET, 15273 },
  27128   { 0x1d75b, UNICODE_NOT_PRESENT_OFFSET, 15276 },
  27129   { 0x1d75c, UNICODE_NOT_PRESENT_OFFSET, 15279 },
  27130   { 0x1d75d, UNICODE_NOT_PRESENT_OFFSET, 1402 },
  27131   { 0x1d75e, UNICODE_NOT_PRESENT_OFFSET, 15282 },
  27132   { 0x1d75f, UNICODE_NOT_PRESENT_OFFSET, 15285 },
  27133   { 0x1d760, UNICODE_NOT_PRESENT_OFFSET, 15288 },
  27134   { 0x1d761, UNICODE_NOT_PRESENT_OFFSET, 15291 },
  27135   { 0x1d762, UNICODE_NOT_PRESENT_OFFSET, 15294 },
  27136   { 0x1d763, UNICODE_NOT_PRESENT_OFFSET, 15297 },
  27137   { 0x1d764, UNICODE_NOT_PRESENT_OFFSET, 15300 },
  27138   { 0x1d765, UNICODE_NOT_PRESENT_OFFSET, 5357 },
  27139   { 0x1d766, UNICODE_NOT_PRESENT_OFFSET, 15303 },
  27140   { 0x1d767, UNICODE_NOT_PRESENT_OFFSET, 1402 },
  27141   { 0x1d768, UNICODE_NOT_PRESENT_OFFSET, 1408 },
  27142   { 0x1d769, UNICODE_NOT_PRESENT_OFFSET, 15306 },
  27143   { 0x1d76a, UNICODE_NOT_PRESENT_OFFSET, 1374 },
  27144   { 0x1d76b, UNICODE_NOT_PRESENT_OFFSET, 15309 },
  27145   { 0x1d76c, UNICODE_NOT_PRESENT_OFFSET, 15312 },
  27146   { 0x1d76d, UNICODE_NOT_PRESENT_OFFSET, 15315 },
  27147   { 0x1d76e, UNICODE_NOT_PRESENT_OFFSET, 5333 },
  27148   { 0x1d76f, UNICODE_NOT_PRESENT_OFFSET, 15318 },
  27149   { 0x1d770, UNICODE_NOT_PRESENT_OFFSET, 15322 },
  27150   { 0x1d771, UNICODE_NOT_PRESENT_OFFSET, 1368 },
  27151   { 0x1d772, UNICODE_NOT_PRESENT_OFFSET, 2418 },
  27152   { 0x1d773, UNICODE_NOT_PRESENT_OFFSET, 2421 },
  27153   { 0x1d774, UNICODE_NOT_PRESENT_OFFSET, 1405 },
  27154   { 0x1d775, UNICODE_NOT_PRESENT_OFFSET, 15325 },
  27155   { 0x1d776, UNICODE_NOT_PRESENT_OFFSET, 15328 },
  27156   { 0x1d777, UNICODE_NOT_PRESENT_OFFSET, 1371 },
  27157   { 0x1d778, UNICODE_NOT_PRESENT_OFFSET, 4860 },
  27158   { 0x1d779, UNICODE_NOT_PRESENT_OFFSET, 1393 },
  27159   { 0x1d77a, UNICODE_NOT_PRESENT_OFFSET, 15331 },
  27160   { 0x1d77b, UNICODE_NOT_PRESENT_OFFSET, 20 },
  27161   { 0x1d77c, UNICODE_NOT_PRESENT_OFFSET, 15334 },
  27162   { 0x1d77d, UNICODE_NOT_PRESENT_OFFSET, 15337 },
  27163   { 0x1d77e, UNICODE_NOT_PRESENT_OFFSET, 15340 },
  27164   { 0x1d77f, UNICODE_NOT_PRESENT_OFFSET, 1390 },
  27165   { 0x1d780, UNICODE_NOT_PRESENT_OFFSET, 1396 },
  27166   { 0x1d781, UNICODE_NOT_PRESENT_OFFSET, 1399 },
  27167   { 0x1d782, UNICODE_NOT_PRESENT_OFFSET, 15343 },
  27168   { 0x1d783, UNICODE_NOT_PRESENT_OFFSET, 15346 },
  27169   { 0x1d784, UNICODE_NOT_PRESENT_OFFSET, 15349 },
  27170   { 0x1d785, UNICODE_NOT_PRESENT_OFFSET, 1387 },
  27171   { 0x1d786, UNICODE_NOT_PRESENT_OFFSET, 2424 },
  27172   { 0x1d787, UNICODE_NOT_PRESENT_OFFSET, 15352 },
  27173   { 0x1d788, UNICODE_NOT_PRESENT_OFFSET, 15355 },
  27174   { 0x1d789, UNICODE_NOT_PRESENT_OFFSET, 15358 },
  27175   { 0x1d78a, UNICODE_NOT_PRESENT_OFFSET, 1405 },
  27176   { 0x1d78b, UNICODE_NOT_PRESENT_OFFSET, 1371 },
  27177   { 0x1d78c, UNICODE_NOT_PRESENT_OFFSET, 1393 },
  27178   { 0x1d78d, UNICODE_NOT_PRESENT_OFFSET, 1387 },
  27179   { 0x1d78e, UNICODE_NOT_PRESENT_OFFSET, 1396 },
  27180   { 0x1d78f, UNICODE_NOT_PRESENT_OFFSET, 1390 },
  27181   { 0x1d790, UNICODE_NOT_PRESENT_OFFSET, 15264 },
  27182   { 0x1d791, UNICODE_NOT_PRESENT_OFFSET, 15267 },
  27183   { 0x1d792, UNICODE_NOT_PRESENT_OFFSET, 5354 },
  27184   { 0x1d793, UNICODE_NOT_PRESENT_OFFSET, 15270 },
  27185   { 0x1d794, UNICODE_NOT_PRESENT_OFFSET, 15273 },
  27186   { 0x1d795, UNICODE_NOT_PRESENT_OFFSET, 15276 },
  27187   { 0x1d796, UNICODE_NOT_PRESENT_OFFSET, 15279 },
  27188   { 0x1d797, UNICODE_NOT_PRESENT_OFFSET, 1402 },
  27189   { 0x1d798, UNICODE_NOT_PRESENT_OFFSET, 15282 },
  27190   { 0x1d799, UNICODE_NOT_PRESENT_OFFSET, 15285 },
  27191   { 0x1d79a, UNICODE_NOT_PRESENT_OFFSET, 15288 },
  27192   { 0x1d79b, UNICODE_NOT_PRESENT_OFFSET, 15291 },
  27193   { 0x1d79c, UNICODE_NOT_PRESENT_OFFSET, 15294 },
  27194   { 0x1d79d, UNICODE_NOT_PRESENT_OFFSET, 15297 },
  27195   { 0x1d79e, UNICODE_NOT_PRESENT_OFFSET, 15300 },
  27196   { 0x1d79f, UNICODE_NOT_PRESENT_OFFSET, 5357 },
  27197   { 0x1d7a0, UNICODE_NOT_PRESENT_OFFSET, 15303 },
  27198   { 0x1d7a1, UNICODE_NOT_PRESENT_OFFSET, 1402 },
  27199   { 0x1d7a2, UNICODE_NOT_PRESENT_OFFSET, 1408 },
  27200   { 0x1d7a3, UNICODE_NOT_PRESENT_OFFSET, 15306 },
  27201   { 0x1d7a4, UNICODE_NOT_PRESENT_OFFSET, 1374 },
  27202   { 0x1d7a5, UNICODE_NOT_PRESENT_OFFSET, 15309 },
  27203   { 0x1d7a6, UNICODE_NOT_PRESENT_OFFSET, 15312 },
  27204   { 0x1d7a7, UNICODE_NOT_PRESENT_OFFSET, 15315 },
  27205   { 0x1d7a8, UNICODE_NOT_PRESENT_OFFSET, 5333 },
  27206   { 0x1d7a9, UNICODE_NOT_PRESENT_OFFSET, 15318 },
  27207   { 0x1d7aa, UNICODE_NOT_PRESENT_OFFSET, 15322 },
  27208   { 0x1d7ab, UNICODE_NOT_PRESENT_OFFSET, 1368 },
  27209   { 0x1d7ac, UNICODE_NOT_PRESENT_OFFSET, 2418 },
  27210   { 0x1d7ad, UNICODE_NOT_PRESENT_OFFSET, 2421 },
  27211   { 0x1d7ae, UNICODE_NOT_PRESENT_OFFSET, 1405 },
  27212   { 0x1d7af, UNICODE_NOT_PRESENT_OFFSET, 15325 },
  27213   { 0x1d7b0, UNICODE_NOT_PRESENT_OFFSET, 15328 },
  27214   { 0x1d7b1, UNICODE_NOT_PRESENT_OFFSET, 1371 },
  27215   { 0x1d7b2, UNICODE_NOT_PRESENT_OFFSET, 4860 },
  27216   { 0x1d7b3, UNICODE_NOT_PRESENT_OFFSET, 1393 },
  27217   { 0x1d7b4, UNICODE_NOT_PRESENT_OFFSET, 15331 },
  27218   { 0x1d7b5, UNICODE_NOT_PRESENT_OFFSET, 20 },
  27219   { 0x1d7b6, UNICODE_NOT_PRESENT_OFFSET, 15334 },
  27220   { 0x1d7b7, UNICODE_NOT_PRESENT_OFFSET, 15337 },
  27221   { 0x1d7b8, UNICODE_NOT_PRESENT_OFFSET, 15340 },
  27222   { 0x1d7b9, UNICODE_NOT_PRESENT_OFFSET, 1390 },
  27223   { 0x1d7ba, UNICODE_NOT_PRESENT_OFFSET, 1396 },
  27224   { 0x1d7bb, UNICODE_NOT_PRESENT_OFFSET, 1399 },
  27225   { 0x1d7bc, UNICODE_NOT_PRESENT_OFFSET, 15343 },
  27226   { 0x1d7bd, UNICODE_NOT_PRESENT_OFFSET, 15346 },
  27227   { 0x1d7be, UNICODE_NOT_PRESENT_OFFSET, 15349 },
  27228   { 0x1d7bf, UNICODE_NOT_PRESENT_OFFSET, 1387 },
  27229   { 0x1d7c0, UNICODE_NOT_PRESENT_OFFSET, 2424 },
  27230   { 0x1d7c1, UNICODE_NOT_PRESENT_OFFSET, 15352 },
  27231   { 0x1d7c2, UNICODE_NOT_PRESENT_OFFSET, 15355 },
  27232   { 0x1d7c3, UNICODE_NOT_PRESENT_OFFSET, 15358 },
  27233   { 0x1d7c4, UNICODE_NOT_PRESENT_OFFSET, 1405 },
  27234   { 0x1d7c5, UNICODE_NOT_PRESENT_OFFSET, 1371 },
  27235   { 0x1d7c6, UNICODE_NOT_PRESENT_OFFSET, 1393 },
  27236   { 0x1d7c7, UNICODE_NOT_PRESENT_OFFSET, 1387 },
  27237   { 0x1d7c8, UNICODE_NOT_PRESENT_OFFSET, 1396 },
  27238   { 0x1d7c9, UNICODE_NOT_PRESENT_OFFSET, 1390 },
  27239   { 0x1d7ca, UNICODE_NOT_PRESENT_OFFSET, 15362 },
  27240   { 0x1d7cb, UNICODE_NOT_PRESENT_OFFSET, 15365 },
  27241   { 0x1d7ce, UNICODE_NOT_PRESENT_OFFSET, 5253 },
  27242   { 0x1d7cf, UNICODE_NOT_PRESENT_OFFSET, 27 },
  27243   { 0x1d7d0, UNICODE_NOT_PRESENT_OFFSET, 12 },
  27244   { 0x1d7d1, UNICODE_NOT_PRESENT_OFFSET, 14 },
  27245   { 0x1d7d2, UNICODE_NOT_PRESENT_OFFSET, 5255 },
  27246   { 0x1d7d3, UNICODE_NOT_PRESENT_OFFSET, 5257 },
  27247   { 0x1d7d4, UNICODE_NOT_PRESENT_OFFSET, 5259 },
  27248   { 0x1d7d5, UNICODE_NOT_PRESENT_OFFSET, 5261 },
  27249   { 0x1d7d6, UNICODE_NOT_PRESENT_OFFSET, 5263 },
  27250   { 0x1d7d7, UNICODE_NOT_PRESENT_OFFSET, 5265 },
  27251   { 0x1d7d8, UNICODE_NOT_PRESENT_OFFSET, 5253 },
  27252   { 0x1d7d9, UNICODE_NOT_PRESENT_OFFSET, 27 },
  27253   { 0x1d7da, UNICODE_NOT_PRESENT_OFFSET, 12 },
  27254   { 0x1d7db, UNICODE_NOT_PRESENT_OFFSET, 14 },
  27255   { 0x1d7dc, UNICODE_NOT_PRESENT_OFFSET, 5255 },
  27256   { 0x1d7dd, UNICODE_NOT_PRESENT_OFFSET, 5257 },
  27257   { 0x1d7de, UNICODE_NOT_PRESENT_OFFSET, 5259 },
  27258   { 0x1d7df, UNICODE_NOT_PRESENT_OFFSET, 5261 },
  27259   { 0x1d7e0, UNICODE_NOT_PRESENT_OFFSET, 5263 },
  27260   { 0x1d7e1, UNICODE_NOT_PRESENT_OFFSET, 5265 },
  27261   { 0x1d7e2, UNICODE_NOT_PRESENT_OFFSET, 5253 },
  27262   { 0x1d7e3, UNICODE_NOT_PRESENT_OFFSET, 27 },
  27263   { 0x1d7e4, UNICODE_NOT_PRESENT_OFFSET, 12 },
  27264   { 0x1d7e5, UNICODE_NOT_PRESENT_OFFSET, 14 },
  27265   { 0x1d7e6, UNICODE_NOT_PRESENT_OFFSET, 5255 },
  27266   { 0x1d7e7, UNICODE_NOT_PRESENT_OFFSET, 5257 },
  27267   { 0x1d7e8, UNICODE_NOT_PRESENT_OFFSET, 5259 },
  27268   { 0x1d7e9, UNICODE_NOT_PRESENT_OFFSET, 5261 },
  27269   { 0x1d7ea, UNICODE_NOT_PRESENT_OFFSET, 5263 },
  27270   { 0x1d7eb, UNICODE_NOT_PRESENT_OFFSET, 5265 },
  27271   { 0x1d7ec, UNICODE_NOT_PRESENT_OFFSET, 5253 },
  27272   { 0x1d7ed, UNICODE_NOT_PRESENT_OFFSET, 27 },
  27273   { 0x1d7ee, UNICODE_NOT_PRESENT_OFFSET, 12 },
  27274   { 0x1d7ef, UNICODE_NOT_PRESENT_OFFSET, 14 },
  27275   { 0x1d7f0, UNICODE_NOT_PRESENT_OFFSET, 5255 },
  27276   { 0x1d7f1, UNICODE_NOT_PRESENT_OFFSET, 5257 },
  27277   { 0x1d7f2, UNICODE_NOT_PRESENT_OFFSET, 5259 },
  27278   { 0x1d7f3, UNICODE_NOT_PRESENT_OFFSET, 5261 },
  27279   { 0x1d7f4, UNICODE_NOT_PRESENT_OFFSET, 5263 },
  27280   { 0x1d7f5, UNICODE_NOT_PRESENT_OFFSET, 5265 },
  27281   { 0x1d7f6, UNICODE_NOT_PRESENT_OFFSET, 5253 },
  27282   { 0x1d7f7, UNICODE_NOT_PRESENT_OFFSET, 27 },
  27283   { 0x1d7f8, UNICODE_NOT_PRESENT_OFFSET, 12 },
  27284   { 0x1d7f9, UNICODE_NOT_PRESENT_OFFSET, 14 },
  27285   { 0x1d7fa, UNICODE_NOT_PRESENT_OFFSET, 5255 },
  27286   { 0x1d7fb, UNICODE_NOT_PRESENT_OFFSET, 5257 },
  27287   { 0x1d7fc, UNICODE_NOT_PRESENT_OFFSET, 5259 },
  27288   { 0x1d7fd, UNICODE_NOT_PRESENT_OFFSET, 5261 },
  27289   { 0x1d7fe, UNICODE_NOT_PRESENT_OFFSET, 5263 },
  27290   { 0x1d7ff, UNICODE_NOT_PRESENT_OFFSET, 5265 },
  27291   { 0x1ee00, UNICODE_NOT_PRESENT_OFFSET, 14761 },
  27292   { 0x1ee01, UNICODE_NOT_PRESENT_OFFSET, 14764 },
  27293   { 0x1ee02, UNICODE_NOT_PRESENT_OFFSET, 14776 },
  27294   { 0x1ee03, UNICODE_NOT_PRESENT_OFFSET, 14785 },
  27295   { 0x1ee05, UNICODE_NOT_PRESENT_OFFSET, 14842 },
  27296   { 0x1ee06, UNICODE_NOT_PRESENT_OFFSET, 14794 },
  27297   { 0x1ee07, UNICODE_NOT_PRESENT_OFFSET, 14779 },
  27298   { 0x1ee08, UNICODE_NOT_PRESENT_OFFSET, 14809 },
  27299   { 0x1ee09, UNICODE_NOT_PRESENT_OFFSET, 14845 },
  27300   { 0x1ee0a, UNICODE_NOT_PRESENT_OFFSET, 14827 },
  27301   { 0x1ee0b, UNICODE_NOT_PRESENT_OFFSET, 14830 },
  27302   { 0x1ee0c, UNICODE_NOT_PRESENT_OFFSET, 14833 },
  27303   { 0x1ee0d, UNICODE_NOT_PRESENT_OFFSET, 14836 },
  27304   { 0x1ee0e, UNICODE_NOT_PRESENT_OFFSET, 14797 },
  27305   { 0x1ee0f, UNICODE_NOT_PRESENT_OFFSET, 14815 },
  27306   { 0x1ee10, UNICODE_NOT_PRESENT_OFFSET, 14821 },
  27307   { 0x1ee11, UNICODE_NOT_PRESENT_OFFSET, 14803 },
  27308   { 0x1ee12, UNICODE_NOT_PRESENT_OFFSET, 14824 },
  27309   { 0x1ee13, UNICODE_NOT_PRESENT_OFFSET, 14791 },
  27310   { 0x1ee14, UNICODE_NOT_PRESENT_OFFSET, 14800 },
  27311   { 0x1ee15, UNICODE_NOT_PRESENT_OFFSET, 14770 },
  27312   { 0x1ee16, UNICODE_NOT_PRESENT_OFFSET, 14773 },
  27313   { 0x1ee17, UNICODE_NOT_PRESENT_OFFSET, 14782 },
  27314   { 0x1ee18, UNICODE_NOT_PRESENT_OFFSET, 14788 },
  27315   { 0x1ee19, UNICODE_NOT_PRESENT_OFFSET, 14806 },
  27316   { 0x1ee1a, UNICODE_NOT_PRESENT_OFFSET, 14812 },
  27317   { 0x1ee1b, UNICODE_NOT_PRESENT_OFFSET, 14818 },
  27318   { 0x1ee1c, UNICODE_NOT_PRESENT_OFFSET, 15368 },
  27319   { 0x1ee1d, UNICODE_NOT_PRESENT_OFFSET, 12852 },
  27320   { 0x1ee1e, UNICODE_NOT_PRESENT_OFFSET, 15371 },
  27321   { 0x1ee1f, UNICODE_NOT_PRESENT_OFFSET, 15374 },
  27322   { 0x1ee21, UNICODE_NOT_PRESENT_OFFSET, 14764 },
  27323   { 0x1ee22, UNICODE_NOT_PRESENT_OFFSET, 14776 },
  27324   { 0x1ee24, UNICODE_NOT_PRESENT_OFFSET, 14839 },
  27325   { 0x1ee27, UNICODE_NOT_PRESENT_OFFSET, 14779 },
  27326   { 0x1ee29, UNICODE_NOT_PRESENT_OFFSET, 14845 },
  27327   { 0x1ee2a, UNICODE_NOT_PRESENT_OFFSET, 14827 },
  27328   { 0x1ee2b, UNICODE_NOT_PRESENT_OFFSET, 14830 },
  27329   { 0x1ee2c, UNICODE_NOT_PRESENT_OFFSET, 14833 },
  27330   { 0x1ee2d, UNICODE_NOT_PRESENT_OFFSET, 14836 },
  27331   { 0x1ee2e, UNICODE_NOT_PRESENT_OFFSET, 14797 },
  27332   { 0x1ee2f, UNICODE_NOT_PRESENT_OFFSET, 14815 },
  27333   { 0x1ee30, UNICODE_NOT_PRESENT_OFFSET, 14821 },
  27334   { 0x1ee31, UNICODE_NOT_PRESENT_OFFSET, 14803 },
  27335   { 0x1ee32, UNICODE_NOT_PRESENT_OFFSET, 14824 },
  27336   { 0x1ee34, UNICODE_NOT_PRESENT_OFFSET, 14800 },
  27337   { 0x1ee35, UNICODE_NOT_PRESENT_OFFSET, 14770 },
  27338   { 0x1ee36, UNICODE_NOT_PRESENT_OFFSET, 14773 },
  27339   { 0x1ee37, UNICODE_NOT_PRESENT_OFFSET, 14782 },
  27340   { 0x1ee39, UNICODE_NOT_PRESENT_OFFSET, 14806 },
  27341   { 0x1ee3b, UNICODE_NOT_PRESENT_OFFSET, 14818 },
  27342   { 0x1ee42, UNICODE_NOT_PRESENT_OFFSET, 14776 },
  27343   { 0x1ee47, UNICODE_NOT_PRESENT_OFFSET, 14779 },
  27344   { 0x1ee49, UNICODE_NOT_PRESENT_OFFSET, 14845 },
  27345   { 0x1ee4b, UNICODE_NOT_PRESENT_OFFSET, 14830 },
  27346   { 0x1ee4d, UNICODE_NOT_PRESENT_OFFSET, 14836 },
  27347   { 0x1ee4e, UNICODE_NOT_PRESENT_OFFSET, 14797 },
  27348   { 0x1ee4f, UNICODE_NOT_PRESENT_OFFSET, 14815 },
  27349   { 0x1ee51, UNICODE_NOT_PRESENT_OFFSET, 14803 },
  27350   { 0x1ee52, UNICODE_NOT_PRESENT_OFFSET, 14824 },
  27351   { 0x1ee54, UNICODE_NOT_PRESENT_OFFSET, 14800 },
  27352   { 0x1ee57, UNICODE_NOT_PRESENT_OFFSET, 14782 },
  27353   { 0x1ee59, UNICODE_NOT_PRESENT_OFFSET, 14806 },
  27354   { 0x1ee5b, UNICODE_NOT_PRESENT_OFFSET, 14818 },
  27355   { 0x1ee5d, UNICODE_NOT_PRESENT_OFFSET, 12852 },
  27356   { 0x1ee5f, UNICODE_NOT_PRESENT_OFFSET, 15374 },
  27357   { 0x1ee61, UNICODE_NOT_PRESENT_OFFSET, 14764 },
  27358   { 0x1ee62, UNICODE_NOT_PRESENT_OFFSET, 14776 },
  27359   { 0x1ee64, UNICODE_NOT_PRESENT_OFFSET, 14839 },
  27360   { 0x1ee67, UNICODE_NOT_PRESENT_OFFSET, 14779 },
  27361   { 0x1ee68, UNICODE_NOT_PRESENT_OFFSET, 14809 },
  27362   { 0x1ee69, UNICODE_NOT_PRESENT_OFFSET, 14845 },
  27363   { 0x1ee6a, UNICODE_NOT_PRESENT_OFFSET, 14827 },
  27364   { 0x1ee6c, UNICODE_NOT_PRESENT_OFFSET, 14833 },
  27365   { 0x1ee6d, UNICODE_NOT_PRESENT_OFFSET, 14836 },
  27366   { 0x1ee6e, UNICODE_NOT_PRESENT_OFFSET, 14797 },
  27367   { 0x1ee6f, UNICODE_NOT_PRESENT_OFFSET, 14815 },
  27368   { 0x1ee70, UNICODE_NOT_PRESENT_OFFSET, 14821 },
  27369   { 0x1ee71, UNICODE_NOT_PRESENT_OFFSET, 14803 },
  27370   { 0x1ee72, UNICODE_NOT_PRESENT_OFFSET, 14824 },
  27371   { 0x1ee74, UNICODE_NOT_PRESENT_OFFSET, 14800 },
  27372   { 0x1ee75, UNICODE_NOT_PRESENT_OFFSET, 14770 },
  27373   { 0x1ee76, UNICODE_NOT_PRESENT_OFFSET, 14773 },
  27374   { 0x1ee77, UNICODE_NOT_PRESENT_OFFSET, 14782 },
  27375   { 0x1ee79, UNICODE_NOT_PRESENT_OFFSET, 14806 },
  27376   { 0x1ee7a, UNICODE_NOT_PRESENT_OFFSET, 14812 },
  27377   { 0x1ee7b, UNICODE_NOT_PRESENT_OFFSET, 14818 },
  27378   { 0x1ee7c, UNICODE_NOT_PRESENT_OFFSET, 15368 },
  27379   { 0x1ee7e, UNICODE_NOT_PRESENT_OFFSET, 15371 },
  27380   { 0x1ee80, UNICODE_NOT_PRESENT_OFFSET, 14761 },
  27381   { 0x1ee81, UNICODE_NOT_PRESENT_OFFSET, 14764 },
  27382   { 0x1ee82, UNICODE_NOT_PRESENT_OFFSET, 14776 },
  27383   { 0x1ee83, UNICODE_NOT_PRESENT_OFFSET, 14785 },
  27384   { 0x1ee84, UNICODE_NOT_PRESENT_OFFSET, 14839 },
  27385   { 0x1ee85, UNICODE_NOT_PRESENT_OFFSET, 14842 },
  27386   { 0x1ee86, UNICODE_NOT_PRESENT_OFFSET, 14794 },
  27387   { 0x1ee87, UNICODE_NOT_PRESENT_OFFSET, 14779 },
  27388   { 0x1ee88, UNICODE_NOT_PRESENT_OFFSET, 14809 },
  27389   { 0x1ee89, UNICODE_NOT_PRESENT_OFFSET, 14845 },
  27390   { 0x1ee8b, UNICODE_NOT_PRESENT_OFFSET, 14830 },
  27391   { 0x1ee8c, UNICODE_NOT_PRESENT_OFFSET, 14833 },
  27392   { 0x1ee8d, UNICODE_NOT_PRESENT_OFFSET, 14836 },
  27393   { 0x1ee8e, UNICODE_NOT_PRESENT_OFFSET, 14797 },
  27394   { 0x1ee8f, UNICODE_NOT_PRESENT_OFFSET, 14815 },
  27395   { 0x1ee90, UNICODE_NOT_PRESENT_OFFSET, 14821 },
  27396   { 0x1ee91, UNICODE_NOT_PRESENT_OFFSET, 14803 },
  27397   { 0x1ee92, UNICODE_NOT_PRESENT_OFFSET, 14824 },
  27398   { 0x1ee93, UNICODE_NOT_PRESENT_OFFSET, 14791 },
  27399   { 0x1ee94, UNICODE_NOT_PRESENT_OFFSET, 14800 },
  27400   { 0x1ee95, UNICODE_NOT_PRESENT_OFFSET, 14770 },
  27401   { 0x1ee96, UNICODE_NOT_PRESENT_OFFSET, 14773 },
  27402   { 0x1ee97, UNICODE_NOT_PRESENT_OFFSET, 14782 },
  27403   { 0x1ee98, UNICODE_NOT_PRESENT_OFFSET, 14788 },
  27404   { 0x1ee99, UNICODE_NOT_PRESENT_OFFSET, 14806 },
  27405   { 0x1ee9a, UNICODE_NOT_PRESENT_OFFSET, 14812 },
  27406   { 0x1ee9b, UNICODE_NOT_PRESENT_OFFSET, 14818 },
  27407   { 0x1eea1, UNICODE_NOT_PRESENT_OFFSET, 14764 },
  27408   { 0x1eea2, UNICODE_NOT_PRESENT_OFFSET, 14776 },
  27409   { 0x1eea3, UNICODE_NOT_PRESENT_OFFSET, 14785 },
  27410   { 0x1eea5, UNICODE_NOT_PRESENT_OFFSET, 14842 },
  27411   { 0x1eea6, UNICODE_NOT_PRESENT_OFFSET, 14794 },
  27412   { 0x1eea7, UNICODE_NOT_PRESENT_OFFSET, 14779 },
  27413   { 0x1eea8, UNICODE_NOT_PRESENT_OFFSET, 14809 },
  27414   { 0x1eea9, UNICODE_NOT_PRESENT_OFFSET, 14845 },
  27415   { 0x1eeab, UNICODE_NOT_PRESENT_OFFSET, 14830 },
  27416   { 0x1eeac, UNICODE_NOT_PRESENT_OFFSET, 14833 },
  27417   { 0x1eead, UNICODE_NOT_PRESENT_OFFSET, 14836 },
  27418   { 0x1eeae, UNICODE_NOT_PRESENT_OFFSET, 14797 },
  27419   { 0x1eeaf, UNICODE_NOT_PRESENT_OFFSET, 14815 },
  27420   { 0x1eeb0, UNICODE_NOT_PRESENT_OFFSET, 14821 },
  27421   { 0x1eeb1, UNICODE_NOT_PRESENT_OFFSET, 14803 },
  27422   { 0x1eeb2, UNICODE_NOT_PRESENT_OFFSET, 14824 },
  27423   { 0x1eeb3, UNICODE_NOT_PRESENT_OFFSET, 14791 },
  27424   { 0x1eeb4, UNICODE_NOT_PRESENT_OFFSET, 14800 },
  27425   { 0x1eeb5, UNICODE_NOT_PRESENT_OFFSET, 14770 },
  27426   { 0x1eeb6, UNICODE_NOT_PRESENT_OFFSET, 14773 },
  27427   { 0x1eeb7, UNICODE_NOT_PRESENT_OFFSET, 14782 },
  27428   { 0x1eeb8, UNICODE_NOT_PRESENT_OFFSET, 14788 },
  27429   { 0x1eeb9, UNICODE_NOT_PRESENT_OFFSET, 14806 },
  27430   { 0x1eeba, UNICODE_NOT_PRESENT_OFFSET, 14812 },
  27431   { 0x1eebb, UNICODE_NOT_PRESENT_OFFSET, 14818 },
  27432   { 0x1f100, UNICODE_NOT_PRESENT_OFFSET, 15377 },
  27433   { 0x1f101, UNICODE_NOT_PRESENT_OFFSET, 15380 },
  27434   { 0x1f102, UNICODE_NOT_PRESENT_OFFSET, 15383 },
  27435   { 0x1f103, UNICODE_NOT_PRESENT_OFFSET, 15386 },
  27436   { 0x1f104, UNICODE_NOT_PRESENT_OFFSET, 15389 },
  27437   { 0x1f105, UNICODE_NOT_PRESENT_OFFSET, 15392 },
  27438   { 0x1f106, UNICODE_NOT_PRESENT_OFFSET, 15395 },
  27439   { 0x1f107, UNICODE_NOT_PRESENT_OFFSET, 15398 },
  27440   { 0x1f108, UNICODE_NOT_PRESENT_OFFSET, 15401 },
  27441   { 0x1f109, UNICODE_NOT_PRESENT_OFFSET, 15404 },
  27442   { 0x1f10a, UNICODE_NOT_PRESENT_OFFSET, 15407 },
  27443   { 0x1f110, UNICODE_NOT_PRESENT_OFFSET, 15410 },
  27444   { 0x1f111, UNICODE_NOT_PRESENT_OFFSET, 15414 },
  27445   { 0x1f112, UNICODE_NOT_PRESENT_OFFSET, 15418 },
  27446   { 0x1f113, UNICODE_NOT_PRESENT_OFFSET, 15422 },
  27447   { 0x1f114, UNICODE_NOT_PRESENT_OFFSET, 15426 },
  27448   { 0x1f115, UNICODE_NOT_PRESENT_OFFSET, 15430 },
  27449   { 0x1f116, UNICODE_NOT_PRESENT_OFFSET, 15434 },
  27450   { 0x1f117, UNICODE_NOT_PRESENT_OFFSET, 15438 },
  27451   { 0x1f118, UNICODE_NOT_PRESENT_OFFSET, 15442 },
  27452   { 0x1f119, UNICODE_NOT_PRESENT_OFFSET, 15446 },
  27453   { 0x1f11a, UNICODE_NOT_PRESENT_OFFSET, 15450 },
  27454   { 0x1f11b, UNICODE_NOT_PRESENT_OFFSET, 15454 },
  27455   { 0x1f11c, UNICODE_NOT_PRESENT_OFFSET, 15458 },
  27456   { 0x1f11d, UNICODE_NOT_PRESENT_OFFSET, 15462 },
  27457   { 0x1f11e, UNICODE_NOT_PRESENT_OFFSET, 15466 },
  27458   { 0x1f11f, UNICODE_NOT_PRESENT_OFFSET, 15470 },
  27459   { 0x1f120, UNICODE_NOT_PRESENT_OFFSET, 15474 },
  27460   { 0x1f121, UNICODE_NOT_PRESENT_OFFSET, 15478 },
  27461   { 0x1f122, UNICODE_NOT_PRESENT_OFFSET, 15482 },
  27462   { 0x1f123, UNICODE_NOT_PRESENT_OFFSET, 15486 },
  27463   { 0x1f124, UNICODE_NOT_PRESENT_OFFSET, 15490 },
  27464   { 0x1f125, UNICODE_NOT_PRESENT_OFFSET, 15494 },
  27465   { 0x1f126, UNICODE_NOT_PRESENT_OFFSET, 15498 },
  27466   { 0x1f127, UNICODE_NOT_PRESENT_OFFSET, 15502 },
  27467   { 0x1f128, UNICODE_NOT_PRESENT_OFFSET, 15506 },
  27468   { 0x1f129, UNICODE_NOT_PRESENT_OFFSET, 15510 },
  27469   { 0x1f12a, UNICODE_NOT_PRESENT_OFFSET, 15514 },
  27470   { 0x1f12b, UNICODE_NOT_PRESENT_OFFSET, 5292 },
  27471   { 0x1f12c, UNICODE_NOT_PRESENT_OFFSET, 2346 },
  27472   { 0x1f12d, UNICODE_NOT_PRESENT_OFFSET, 15522 },
  27473   { 0x1f12e, UNICODE_NOT_PRESENT_OFFSET, 15525 },
  27474   { 0x1f130, UNICODE_NOT_PRESENT_OFFSET, 2309 },
  27475   { 0x1f131, UNICODE_NOT_PRESENT_OFFSET, 2314 },
  27476   { 0x1f132, UNICODE_NOT_PRESENT_OFFSET, 5292 },
  27477   { 0x1f133, UNICODE_NOT_PRESENT_OFFSET, 2316 },
  27478   { 0x1f134, UNICODE_NOT_PRESENT_OFFSET, 2318 },
  27479   { 0x1f135, UNICODE_NOT_PRESENT_OFFSET, 5336 },
  27480   { 0x1f136, UNICODE_NOT_PRESENT_OFFSET, 2323 },
  27481   { 0x1f137, UNICODE_NOT_PRESENT_OFFSET, 2325 },
  27482   { 0x1f138, UNICODE_NOT_PRESENT_OFFSET, 2327 },
  27483   { 0x1f139, UNICODE_NOT_PRESENT_OFFSET, 2329 },
  27484   { 0x1f13a, UNICODE_NOT_PRESENT_OFFSET, 2331 },
  27485   { 0x1f13b, UNICODE_NOT_PRESENT_OFFSET, 2333 },
  27486   { 0x1f13c, UNICODE_NOT_PRESENT_OFFSET, 2335 },
  27487   { 0x1f13d, UNICODE_NOT_PRESENT_OFFSET, 2337 },
  27488   { 0x1f13e, UNICODE_NOT_PRESENT_OFFSET, 2339 },
  27489   { 0x1f13f, UNICODE_NOT_PRESENT_OFFSET, 2344 },
  27490   { 0x1f140, UNICODE_NOT_PRESENT_OFFSET, 5319 },
  27491   { 0x1f141, UNICODE_NOT_PRESENT_OFFSET, 2346 },
  27492   { 0x1f142, UNICODE_NOT_PRESENT_OFFSET, 6133 },
  27493   { 0x1f143, UNICODE_NOT_PRESENT_OFFSET, 2348 },
  27494   { 0x1f144, UNICODE_NOT_PRESENT_OFFSET, 2350 },
  27495   { 0x1f145, UNICODE_NOT_PRESENT_OFFSET, 5470 },
  27496   { 0x1f146, UNICODE_NOT_PRESENT_OFFSET, 2352 },
  27497   { 0x1f147, UNICODE_NOT_PRESENT_OFFSET, 5487 },
  27498   { 0x1f148, UNICODE_NOT_PRESENT_OFFSET, 6135 },
  27499   { 0x1f149, UNICODE_NOT_PRESENT_OFFSET, 5331 },
  27500   { 0x1f14a, UNICODE_NOT_PRESENT_OFFSET, 15528 },
  27501   { 0x1f14b, UNICODE_NOT_PRESENT_OFFSET, 10556 },
  27502   { 0x1f14c, UNICODE_NOT_PRESENT_OFFSET, 15531 },
  27503   { 0x1f14d, UNICODE_NOT_PRESENT_OFFSET, 15534 },
  27504   { 0x1f14e, UNICODE_NOT_PRESENT_OFFSET, 15537 },
  27505   { 0x1f14f, UNICODE_NOT_PRESENT_OFFSET, 15541 },
  27506   { 0x1f16a, UNICODE_NOT_PRESENT_OFFSET, 15544 },
  27507   { 0x1f16b, UNICODE_NOT_PRESENT_OFFSET, 15547 },
  27508   { 0x1f190, UNICODE_NOT_PRESENT_OFFSET, 15550 },
  27509   { 0x1f200, UNICODE_NOT_PRESENT_OFFSET, 15553 },
  27510   { 0x1f201, UNICODE_NOT_PRESENT_OFFSET, 15560 },
  27511   { 0x1f202, UNICODE_NOT_PRESENT_OFFSET, 8848 },
  27512   { 0x1f210, UNICODE_NOT_PRESENT_OFFSET, 6433 },
  27513   { 0x1f211, UNICODE_NOT_PRESENT_OFFSET, 15567 },
  27514   { 0x1f212, UNICODE_NOT_PRESENT_OFFSET, 15571 },
  27515   { 0x1f213, UNICODE_NOT_PRESENT_OFFSET, 7346 },
  27516   { 0x1f214, UNICODE_NOT_PRESENT_OFFSET, 6205 },
  27517   { 0x1f215, UNICODE_NOT_PRESENT_OFFSET, 15575 },
  27518   { 0x1f216, UNICODE_NOT_PRESENT_OFFSET, 15579 },
  27519   { 0x1f217, UNICODE_NOT_PRESENT_OFFSET, 7887 },
  27520   { 0x1f218, UNICODE_NOT_PRESENT_OFFSET, 15583 },
  27521   { 0x1f219, UNICODE_NOT_PRESENT_OFFSET, 15587 },
  27522   { 0x1f21a, UNICODE_NOT_PRESENT_OFFSET, 15591 },
  27523   { 0x1f21b, UNICODE_NOT_PRESENT_OFFSET, 11619 },
  27524   { 0x1f21c, UNICODE_NOT_PRESENT_OFFSET, 15595 },
  27525   { 0x1f21d, UNICODE_NOT_PRESENT_OFFSET, 15599 },
  27526   { 0x1f21e, UNICODE_NOT_PRESENT_OFFSET, 15603 },
  27527   { 0x1f21f, UNICODE_NOT_PRESENT_OFFSET, 15607 },
  27528   { 0x1f220, UNICODE_NOT_PRESENT_OFFSET, 15611 },
  27529   { 0x1f221, UNICODE_NOT_PRESENT_OFFSET, 15615 },
  27530   { 0x1f222, UNICODE_NOT_PRESENT_OFFSET, 6577 },
  27531   { 0x1f223, UNICODE_NOT_PRESENT_OFFSET, 15619 },
  27532   { 0x1f224, UNICODE_NOT_PRESENT_OFFSET, 15623 },
  27533   { 0x1f225, UNICODE_NOT_PRESENT_OFFSET, 15627 },
  27534   { 0x1f226, UNICODE_NOT_PRESENT_OFFSET, 15631 },
  27535   { 0x1f227, UNICODE_NOT_PRESENT_OFFSET, 15635 },
  27536   { 0x1f228, UNICODE_NOT_PRESENT_OFFSET, 15639 },
  27537   { 0x1f229, UNICODE_NOT_PRESENT_OFFSET, 6181 },
  27538   { 0x1f22a, UNICODE_NOT_PRESENT_OFFSET, 7855 },
  27539   { 0x1f22b, UNICODE_NOT_PRESENT_OFFSET, 15643 },
  27540   { 0x1f22c, UNICODE_NOT_PRESENT_OFFSET, 8646 },
  27541   { 0x1f22d, UNICODE_NOT_PRESENT_OFFSET, 7867 },
  27542   { 0x1f22e, UNICODE_NOT_PRESENT_OFFSET, 8650 },
  27543   { 0x1f22f, UNICODE_NOT_PRESENT_OFFSET, 15647 },
  27544   { 0x1f230, UNICODE_NOT_PRESENT_OFFSET, 6801 },
  27545   { 0x1f231, UNICODE_NOT_PRESENT_OFFSET, 15651 },
  27546   { 0x1f232, UNICODE_NOT_PRESENT_OFFSET, 15655 },
  27547   { 0x1f233, UNICODE_NOT_PRESENT_OFFSET, 15659 },
  27548   { 0x1f234, UNICODE_NOT_PRESENT_OFFSET, 15663 },
  27549   { 0x1f235, UNICODE_NOT_PRESENT_OFFSET, 15667 },
  27550   { 0x1f236, UNICODE_NOT_PRESENT_OFFSET, 8578 },
  27551   { 0x1f237, UNICODE_NOT_PRESENT_OFFSET, 6473 },
  27552   { 0x1f238, UNICODE_NOT_PRESENT_OFFSET, 15671 },
  27553   { 0x1f239, UNICODE_NOT_PRESENT_OFFSET, 15675 },
  27554   { 0x1f23a, UNICODE_NOT_PRESENT_OFFSET, 15679 },
  27555   { 0x1f23b, UNICODE_NOT_PRESENT_OFFSET, 15683 },
  27556   { 0x1f240, UNICODE_NOT_PRESENT_OFFSET, 15687 },
  27557   { 0x1f241, UNICODE_NOT_PRESENT_OFFSET, 15697 },
  27558   { 0x1f242, UNICODE_NOT_PRESENT_OFFSET, 15707 },
  27559   { 0x1f243, UNICODE_NOT_PRESENT_OFFSET, 15717 },
  27560   { 0x1f244, UNICODE_NOT_PRESENT_OFFSET, 15727 },
  27561   { 0x1f245, UNICODE_NOT_PRESENT_OFFSET, 15737 },
  27562   { 0x1f246, UNICODE_NOT_PRESENT_OFFSET, 15747 },
  27563   { 0x1f247, UNICODE_NOT_PRESENT_OFFSET, 15757 },
  27564   { 0x1f248, UNICODE_NOT_PRESENT_OFFSET, 15767 },
  27565   { 0x1f250, UNICODE_NOT_PRESENT_OFFSET, 15777 },
  27566   { 0x1f251, UNICODE_NOT_PRESENT_OFFSET, 15781 },
  27567   { 0x2f800, 15785, UNICODE_NOT_PRESENT_OFFSET },
  27568   { 0x2f801, 15789, UNICODE_NOT_PRESENT_OFFSET },
  27569   { 0x2f802, 15793, UNICODE_NOT_PRESENT_OFFSET },
  27570   { 0x2f803, 15797, UNICODE_NOT_PRESENT_OFFSET },
  27571   { 0x2f804, 15802, UNICODE_NOT_PRESENT_OFFSET },
  27572   { 0x2f805, 11991, UNICODE_NOT_PRESENT_OFFSET },
  27573   { 0x2f806, 15806, UNICODE_NOT_PRESENT_OFFSET },
  27574   { 0x2f807, 15810, UNICODE_NOT_PRESENT_OFFSET },
  27575   { 0x2f808, 15814, UNICODE_NOT_PRESENT_OFFSET },
  27576   { 0x2f809, 15818, UNICODE_NOT_PRESENT_OFFSET },
  27577   { 0x2f80a, 11995, UNICODE_NOT_PRESENT_OFFSET },
  27578   { 0x2f80b, 15822, UNICODE_NOT_PRESENT_OFFSET },
  27579   { 0x2f80c, 15826, UNICODE_NOT_PRESENT_OFFSET },
  27580   { 0x2f80d, 15830, UNICODE_NOT_PRESENT_OFFSET },
  27581   { 0x2f80e, 11999, UNICODE_NOT_PRESENT_OFFSET },
  27582   { 0x2f80f, 15835, UNICODE_NOT_PRESENT_OFFSET },
  27583   { 0x2f810, 15839, UNICODE_NOT_PRESENT_OFFSET },
  27584   { 0x2f811, 15843, UNICODE_NOT_PRESENT_OFFSET },
  27585   { 0x2f812, 15847, UNICODE_NOT_PRESENT_OFFSET },
  27586   { 0x2f813, 15852, UNICODE_NOT_PRESENT_OFFSET },
  27587   { 0x2f814, 15856, UNICODE_NOT_PRESENT_OFFSET },
  27588   { 0x2f815, 15603, UNICODE_NOT_PRESENT_OFFSET },
  27589   { 0x2f816, 15860, UNICODE_NOT_PRESENT_OFFSET },
  27590   { 0x2f817, 15865, UNICODE_NOT_PRESENT_OFFSET },
  27591   { 0x2f818, 15869, UNICODE_NOT_PRESENT_OFFSET },
  27592   { 0x2f819, 15873, UNICODE_NOT_PRESENT_OFFSET },
  27593   { 0x2f81a, 15877, UNICODE_NOT_PRESENT_OFFSET },
  27594   { 0x2f81b, 12220, UNICODE_NOT_PRESENT_OFFSET },
  27595   { 0x2f81c, 15881, UNICODE_NOT_PRESENT_OFFSET },
  27596   { 0x2f81d, 6245, UNICODE_NOT_PRESENT_OFFSET },
  27597   { 0x2f81e, 15886, UNICODE_NOT_PRESENT_OFFSET },
  27598   { 0x2f81f, 15890, UNICODE_NOT_PRESENT_OFFSET },
  27599   { 0x2f820, 15894, UNICODE_NOT_PRESENT_OFFSET },
  27600   { 0x2f821, 15898, UNICODE_NOT_PRESENT_OFFSET },
  27601   { 0x2f822, 15675, UNICODE_NOT_PRESENT_OFFSET },
  27602   { 0x2f823, 15902, UNICODE_NOT_PRESENT_OFFSET },
  27603   { 0x2f824, 15906, UNICODE_NOT_PRESENT_OFFSET },
  27604   { 0x2f825, 12240, UNICODE_NOT_PRESENT_OFFSET },
  27605   { 0x2f826, 12003, UNICODE_NOT_PRESENT_OFFSET },
  27606   { 0x2f827, 12007, UNICODE_NOT_PRESENT_OFFSET },
  27607   { 0x2f828, 12244, UNICODE_NOT_PRESENT_OFFSET },
  27608   { 0x2f829, 15910, UNICODE_NOT_PRESENT_OFFSET },
  27609   { 0x2f82a, 15914, UNICODE_NOT_PRESENT_OFFSET },
  27610   { 0x2f82b, 11275, UNICODE_NOT_PRESENT_OFFSET },
  27611   { 0x2f82c, 15918, UNICODE_NOT_PRESENT_OFFSET },
  27612   { 0x2f82d, 12011, UNICODE_NOT_PRESENT_OFFSET },
  27613   { 0x2f82e, 15922, UNICODE_NOT_PRESENT_OFFSET },
  27614   { 0x2f82f, 15926, UNICODE_NOT_PRESENT_OFFSET },
  27615   { 0x2f830, 15930, UNICODE_NOT_PRESENT_OFFSET },
  27616   { 0x2f831, 15934, UNICODE_NOT_PRESENT_OFFSET },
  27617   { 0x2f832, 15934, UNICODE_NOT_PRESENT_OFFSET },
  27618   { 0x2f833, 15934, UNICODE_NOT_PRESENT_OFFSET },
  27619   { 0x2f834, 15938, UNICODE_NOT_PRESENT_OFFSET },
  27620   { 0x2f835, 15943, UNICODE_NOT_PRESENT_OFFSET },
  27621   { 0x2f836, 15947, UNICODE_NOT_PRESENT_OFFSET },
  27622   { 0x2f837, 15951, UNICODE_NOT_PRESENT_OFFSET },
  27623   { 0x2f838, 15955, UNICODE_NOT_PRESENT_OFFSET },
  27624   { 0x2f839, 15960, UNICODE_NOT_PRESENT_OFFSET },
  27625   { 0x2f83a, 15964, UNICODE_NOT_PRESENT_OFFSET },
  27626   { 0x2f83b, 15968, UNICODE_NOT_PRESENT_OFFSET },
  27627   { 0x2f83c, 15972, UNICODE_NOT_PRESENT_OFFSET },
  27628   { 0x2f83d, 15976, UNICODE_NOT_PRESENT_OFFSET },
  27629   { 0x2f83e, 15980, UNICODE_NOT_PRESENT_OFFSET },
  27630   { 0x2f83f, 15984, UNICODE_NOT_PRESENT_OFFSET },
  27631   { 0x2f840, 15988, UNICODE_NOT_PRESENT_OFFSET },
  27632   { 0x2f841, 15992, UNICODE_NOT_PRESENT_OFFSET },
  27633   { 0x2f842, 15996, UNICODE_NOT_PRESENT_OFFSET },
  27634   { 0x2f843, 16000, UNICODE_NOT_PRESENT_OFFSET },
  27635   { 0x2f844, 16004, UNICODE_NOT_PRESENT_OFFSET },
  27636   { 0x2f845, 16008, UNICODE_NOT_PRESENT_OFFSET },
  27637   { 0x2f846, 16008, UNICODE_NOT_PRESENT_OFFSET },
  27638   { 0x2f847, 12252, UNICODE_NOT_PRESENT_OFFSET },
  27639   { 0x2f848, 16012, UNICODE_NOT_PRESENT_OFFSET },
  27640   { 0x2f849, 16016, UNICODE_NOT_PRESENT_OFFSET },
  27641   { 0x2f84a, 16020, UNICODE_NOT_PRESENT_OFFSET },
  27642   { 0x2f84b, 16024, UNICODE_NOT_PRESENT_OFFSET },
  27643   { 0x2f84c, 12019, UNICODE_NOT_PRESENT_OFFSET },
  27644   { 0x2f84d, 16028, UNICODE_NOT_PRESENT_OFFSET },
  27645   { 0x2f84e, 16032, UNICODE_NOT_PRESENT_OFFSET },
  27646   { 0x2f84f, 16036, UNICODE_NOT_PRESENT_OFFSET },
  27647   { 0x2f850, 11859, UNICODE_NOT_PRESENT_OFFSET },
  27648   { 0x2f851, 16040, UNICODE_NOT_PRESENT_OFFSET },
  27649   { 0x2f852, 16044, UNICODE_NOT_PRESENT_OFFSET },
  27650   { 0x2f853, 16048, UNICODE_NOT_PRESENT_OFFSET },
  27651   { 0x2f854, 16052, UNICODE_NOT_PRESENT_OFFSET },
  27652   { 0x2f855, 16056, UNICODE_NOT_PRESENT_OFFSET },
  27653   { 0x2f856, 16060, UNICODE_NOT_PRESENT_OFFSET },
  27654   { 0x2f857, 16064, UNICODE_NOT_PRESENT_OFFSET },
  27655   { 0x2f858, 16068, UNICODE_NOT_PRESENT_OFFSET },
  27656   { 0x2f859, 16072, UNICODE_NOT_PRESENT_OFFSET },
  27657   { 0x2f85a, 16077, UNICODE_NOT_PRESENT_OFFSET },
  27658   { 0x2f85b, 16081, UNICODE_NOT_PRESENT_OFFSET },
  27659   { 0x2f85c, 16085, UNICODE_NOT_PRESENT_OFFSET },
  27660   { 0x2f85d, 15575, UNICODE_NOT_PRESENT_OFFSET },
  27661   { 0x2f85e, 16089, UNICODE_NOT_PRESENT_OFFSET },
  27662   { 0x2f85f, 16093, UNICODE_NOT_PRESENT_OFFSET },
  27663   { 0x2f860, 16097, UNICODE_NOT_PRESENT_OFFSET },
  27664   { 0x2f861, 16102, UNICODE_NOT_PRESENT_OFFSET },
  27665   { 0x2f862, 16107, UNICODE_NOT_PRESENT_OFFSET },
  27666   { 0x2f863, 16111, UNICODE_NOT_PRESENT_OFFSET },
  27667   { 0x2f864, 16115, UNICODE_NOT_PRESENT_OFFSET },
  27668   { 0x2f865, 16119, UNICODE_NOT_PRESENT_OFFSET },
  27669   { 0x2f866, 16123, UNICODE_NOT_PRESENT_OFFSET },
  27670   { 0x2f867, 16127, UNICODE_NOT_PRESENT_OFFSET },
  27671   { 0x2f868, 16131, UNICODE_NOT_PRESENT_OFFSET },
  27672   { 0x2f869, 16135, UNICODE_NOT_PRESENT_OFFSET },
  27673   { 0x2f86a, 16139, UNICODE_NOT_PRESENT_OFFSET },
  27674   { 0x2f86b, 16139, UNICODE_NOT_PRESENT_OFFSET },
  27675   { 0x2f86c, 16143, UNICODE_NOT_PRESENT_OFFSET },
  27676   { 0x2f86d, 16148, UNICODE_NOT_PRESENT_OFFSET },
  27677   { 0x2f86e, 16152, UNICODE_NOT_PRESENT_OFFSET },
  27678   { 0x2f86f, 11259, UNICODE_NOT_PRESENT_OFFSET },
  27679   { 0x2f870, 16156, UNICODE_NOT_PRESENT_OFFSET },
  27680   { 0x2f871, 16160, UNICODE_NOT_PRESENT_OFFSET },
  27681   { 0x2f872, 16165, UNICODE_NOT_PRESENT_OFFSET },
  27682   { 0x2f873, 16169, UNICODE_NOT_PRESENT_OFFSET },
  27683   { 0x2f874, 16173, UNICODE_NOT_PRESENT_OFFSET },
  27684   { 0x2f875, 6349, UNICODE_NOT_PRESENT_OFFSET },
  27685   { 0x2f876, 16177, UNICODE_NOT_PRESENT_OFFSET },
  27686   { 0x2f877, 16181, UNICODE_NOT_PRESENT_OFFSET },
  27687   { 0x2f878, 6357, UNICODE_NOT_PRESENT_OFFSET },
  27688   { 0x2f879, 16185, UNICODE_NOT_PRESENT_OFFSET },
  27689   { 0x2f87a, 16189, UNICODE_NOT_PRESENT_OFFSET },
  27690   { 0x2f87b, 16193, UNICODE_NOT_PRESENT_OFFSET },
  27691   { 0x2f87c, 16198, UNICODE_NOT_PRESENT_OFFSET },
  27692   { 0x2f87d, 16202, UNICODE_NOT_PRESENT_OFFSET },
  27693   { 0x2f87e, 16207, UNICODE_NOT_PRESENT_OFFSET },
  27694   { 0x2f87f, 16211, UNICODE_NOT_PRESENT_OFFSET },
  27695   { 0x2f880, 16215, UNICODE_NOT_PRESENT_OFFSET },
  27696   { 0x2f881, 16219, UNICODE_NOT_PRESENT_OFFSET },
  27697   { 0x2f882, 16223, UNICODE_NOT_PRESENT_OFFSET },
  27698   { 0x2f883, 16227, UNICODE_NOT_PRESENT_OFFSET },
  27699   { 0x2f884, 16231, UNICODE_NOT_PRESENT_OFFSET },
  27700   { 0x2f885, 16235, UNICODE_NOT_PRESENT_OFFSET },
  27701   { 0x2f886, 16239, UNICODE_NOT_PRESENT_OFFSET },
  27702   { 0x2f887, 16243, UNICODE_NOT_PRESENT_OFFSET },
  27703   { 0x2f888, 16247, UNICODE_NOT_PRESENT_OFFSET },
  27704   { 0x2f889, 16251, UNICODE_NOT_PRESENT_OFFSET },
  27705   { 0x2f88a, 16256, UNICODE_NOT_PRESENT_OFFSET },
  27706   { 0x2f88b, 16260, UNICODE_NOT_PRESENT_OFFSET },
  27707   { 0x2f88c, 16264, UNICODE_NOT_PRESENT_OFFSET },
  27708   { 0x2f88d, 16268, UNICODE_NOT_PRESENT_OFFSET },
  27709   { 0x2f88e, 11051, UNICODE_NOT_PRESENT_OFFSET },
  27710   { 0x2f88f, 16272, UNICODE_NOT_PRESENT_OFFSET },
  27711   { 0x2f890, 6397, UNICODE_NOT_PRESENT_OFFSET },
  27712   { 0x2f891, 16277, UNICODE_NOT_PRESENT_OFFSET },
  27713   { 0x2f892, 16277, UNICODE_NOT_PRESENT_OFFSET },
  27714   { 0x2f893, 16282, UNICODE_NOT_PRESENT_OFFSET },
  27715   { 0x2f894, 16286, UNICODE_NOT_PRESENT_OFFSET },
  27716   { 0x2f895, 16286, UNICODE_NOT_PRESENT_OFFSET },
  27717   { 0x2f896, 16290, UNICODE_NOT_PRESENT_OFFSET },
  27718   { 0x2f897, 16294, UNICODE_NOT_PRESENT_OFFSET },
  27719   { 0x2f898, 16299, UNICODE_NOT_PRESENT_OFFSET },
  27720   { 0x2f899, 16304, UNICODE_NOT_PRESENT_OFFSET },
  27721   { 0x2f89a, 16308, UNICODE_NOT_PRESENT_OFFSET },
  27722   { 0x2f89b, 16312, UNICODE_NOT_PRESENT_OFFSET },
  27723   { 0x2f89c, 16316, UNICODE_NOT_PRESENT_OFFSET },
  27724   { 0x2f89d, 16320, UNICODE_NOT_PRESENT_OFFSET },
  27725   { 0x2f89e, 16324, UNICODE_NOT_PRESENT_OFFSET },
  27726   { 0x2f89f, 16328, UNICODE_NOT_PRESENT_OFFSET },
  27727   { 0x2f8a0, 16332, UNICODE_NOT_PRESENT_OFFSET },
  27728   { 0x2f8a1, 16336, UNICODE_NOT_PRESENT_OFFSET },
  27729   { 0x2f8a2, 16340, UNICODE_NOT_PRESENT_OFFSET },
  27730   { 0x2f8a3, 12039, UNICODE_NOT_PRESENT_OFFSET },
  27731   { 0x2f8a4, 16344, UNICODE_NOT_PRESENT_OFFSET },
  27732   { 0x2f8a5, 16349, UNICODE_NOT_PRESENT_OFFSET },
  27733   { 0x2f8a6, 16353, UNICODE_NOT_PRESENT_OFFSET },
  27734   { 0x2f8a7, 16357, UNICODE_NOT_PRESENT_OFFSET },
  27735   { 0x2f8a8, 12300, UNICODE_NOT_PRESENT_OFFSET },
  27736   { 0x2f8a9, 16357, UNICODE_NOT_PRESENT_OFFSET },
  27737   { 0x2f8aa, 16361, UNICODE_NOT_PRESENT_OFFSET },
  27738   { 0x2f8ab, 12047, UNICODE_NOT_PRESENT_OFFSET },
  27739   { 0x2f8ac, 16365, UNICODE_NOT_PRESENT_OFFSET },
  27740   { 0x2f8ad, 16369, UNICODE_NOT_PRESENT_OFFSET },
  27741   { 0x2f8ae, 16373, UNICODE_NOT_PRESENT_OFFSET },
  27742   { 0x2f8af, 16377, UNICODE_NOT_PRESENT_OFFSET },
  27743   { 0x2f8b0, 12051, UNICODE_NOT_PRESENT_OFFSET },
  27744   { 0x2f8b1, 10943, UNICODE_NOT_PRESENT_OFFSET },
  27745   { 0x2f8b2, 16381, UNICODE_NOT_PRESENT_OFFSET },
  27746   { 0x2f8b3, 16385, UNICODE_NOT_PRESENT_OFFSET },
  27747   { 0x2f8b4, 16389, UNICODE_NOT_PRESENT_OFFSET },
  27748   { 0x2f8b5, 16393, UNICODE_NOT_PRESENT_OFFSET },
  27749   { 0x2f8b6, 16397, UNICODE_NOT_PRESENT_OFFSET },
  27750   { 0x2f8b7, 16401, UNICODE_NOT_PRESENT_OFFSET },
  27751   { 0x2f8b8, 16405, UNICODE_NOT_PRESENT_OFFSET },
  27752   { 0x2f8b9, 16410, UNICODE_NOT_PRESENT_OFFSET },
  27753   { 0x2f8ba, 16414, UNICODE_NOT_PRESENT_OFFSET },
  27754   { 0x2f8bb, 16418, UNICODE_NOT_PRESENT_OFFSET },
  27755   { 0x2f8bc, 16422, UNICODE_NOT_PRESENT_OFFSET },
  27756   { 0x2f8bd, 16426, UNICODE_NOT_PRESENT_OFFSET },
  27757   { 0x2f8be, 16430, UNICODE_NOT_PRESENT_OFFSET },
  27758   { 0x2f8bf, 16435, UNICODE_NOT_PRESENT_OFFSET },
  27759   { 0x2f8c0, 16439, UNICODE_NOT_PRESENT_OFFSET },
  27760   { 0x2f8c1, 16443, UNICODE_NOT_PRESENT_OFFSET },
  27761   { 0x2f8c2, 16447, UNICODE_NOT_PRESENT_OFFSET },
  27762   { 0x2f8c3, 16451, UNICODE_NOT_PRESENT_OFFSET },
  27763   { 0x2f8c4, 16455, UNICODE_NOT_PRESENT_OFFSET },
  27764   { 0x2f8c5, 16459, UNICODE_NOT_PRESENT_OFFSET },
  27765   { 0x2f8c6, 16463, UNICODE_NOT_PRESENT_OFFSET },
  27766   { 0x2f8c7, 16467, UNICODE_NOT_PRESENT_OFFSET },
  27767   { 0x2f8c8, 12055, UNICODE_NOT_PRESENT_OFFSET },
  27768   { 0x2f8c9, 16471, UNICODE_NOT_PRESENT_OFFSET },
  27769   { 0x2f8ca, 16475, UNICODE_NOT_PRESENT_OFFSET },
  27770   { 0x2f8cb, 16480, UNICODE_NOT_PRESENT_OFFSET },
  27771   { 0x2f8cc, 16484, UNICODE_NOT_PRESENT_OFFSET },
  27772   { 0x2f8cd, 16488, UNICODE_NOT_PRESENT_OFFSET },
  27773   { 0x2f8ce, 16492, UNICODE_NOT_PRESENT_OFFSET },
  27774   { 0x2f8cf, 12063, UNICODE_NOT_PRESENT_OFFSET },
  27775   { 0x2f8d0, 16496, UNICODE_NOT_PRESENT_OFFSET },
  27776   { 0x2f8d1, 16500, UNICODE_NOT_PRESENT_OFFSET },
  27777   { 0x2f8d2, 16504, UNICODE_NOT_PRESENT_OFFSET },
  27778   { 0x2f8d3, 16508, UNICODE_NOT_PRESENT_OFFSET },
  27779   { 0x2f8d4, 16512, UNICODE_NOT_PRESENT_OFFSET },
  27780   { 0x2f8d5, 16516, UNICODE_NOT_PRESENT_OFFSET },
  27781   { 0x2f8d6, 16520, UNICODE_NOT_PRESENT_OFFSET },
  27782   { 0x2f8d7, 16524, UNICODE_NOT_PRESENT_OFFSET },
  27783   { 0x2f8d8, 11055, UNICODE_NOT_PRESENT_OFFSET },
  27784   { 0x2f8d9, 12332, UNICODE_NOT_PRESENT_OFFSET },
  27785   { 0x2f8da, 16528, UNICODE_NOT_PRESENT_OFFSET },
  27786   { 0x2f8db, 16532, UNICODE_NOT_PRESENT_OFFSET },
  27787   { 0x2f8dc, 16536, UNICODE_NOT_PRESENT_OFFSET },
  27788   { 0x2f8dd, 16540, UNICODE_NOT_PRESENT_OFFSET },
  27789   { 0x2f8de, 16545, UNICODE_NOT_PRESENT_OFFSET },
  27790   { 0x2f8df, 16549, UNICODE_NOT_PRESENT_OFFSET },
  27791   { 0x2f8e0, 16553, UNICODE_NOT_PRESENT_OFFSET },
  27792   { 0x2f8e1, 16557, UNICODE_NOT_PRESENT_OFFSET },
  27793   { 0x2f8e2, 12067, UNICODE_NOT_PRESENT_OFFSET },
  27794   { 0x2f8e3, 16561, UNICODE_NOT_PRESENT_OFFSET },
  27795   { 0x2f8e4, 16566, UNICODE_NOT_PRESENT_OFFSET },
  27796   { 0x2f8e5, 16570, UNICODE_NOT_PRESENT_OFFSET },
  27797   { 0x2f8e6, 16574, UNICODE_NOT_PRESENT_OFFSET },
  27798   { 0x2f8e7, 12503, UNICODE_NOT_PRESENT_OFFSET },
  27799   { 0x2f8e8, 16578, UNICODE_NOT_PRESENT_OFFSET },
  27800   { 0x2f8e9, 16582, UNICODE_NOT_PRESENT_OFFSET },
  27801   { 0x2f8ea, 16586, UNICODE_NOT_PRESENT_OFFSET },
  27802   { 0x2f8eb, 16590, UNICODE_NOT_PRESENT_OFFSET },
  27803   { 0x2f8ec, 16594, UNICODE_NOT_PRESENT_OFFSET },
  27804   { 0x2f8ed, 16599, UNICODE_NOT_PRESENT_OFFSET },
  27805   { 0x2f8ee, 16603, UNICODE_NOT_PRESENT_OFFSET },
  27806   { 0x2f8ef, 16607, UNICODE_NOT_PRESENT_OFFSET },
  27807   { 0x2f8f0, 16611, UNICODE_NOT_PRESENT_OFFSET },
  27808   { 0x2f8f1, 16616, UNICODE_NOT_PRESENT_OFFSET },
  27809   { 0x2f8f2, 16620, UNICODE_NOT_PRESENT_OFFSET },
  27810   { 0x2f8f3, 16624, UNICODE_NOT_PRESENT_OFFSET },
  27811   { 0x2f8f4, 16628, UNICODE_NOT_PRESENT_OFFSET },
  27812   { 0x2f8f5, 11327, UNICODE_NOT_PRESENT_OFFSET },
  27813   { 0x2f8f6, 16632, UNICODE_NOT_PRESENT_OFFSET },
  27814   { 0x2f8f7, 16636, UNICODE_NOT_PRESENT_OFFSET },
  27815   { 0x2f8f8, 16641, UNICODE_NOT_PRESENT_OFFSET },
  27816   { 0x2f8f9, 16646, UNICODE_NOT_PRESENT_OFFSET },
  27817   { 0x2f8fa, 16651, UNICODE_NOT_PRESENT_OFFSET },
  27818   { 0x2f8fb, 16655, UNICODE_NOT_PRESENT_OFFSET },
  27819   { 0x2f8fc, 16660, UNICODE_NOT_PRESENT_OFFSET },
  27820   { 0x2f8fd, 16664, UNICODE_NOT_PRESENT_OFFSET },
  27821   { 0x2f8fe, 16668, UNICODE_NOT_PRESENT_OFFSET },
  27822   { 0x2f8ff, 16672, UNICODE_NOT_PRESENT_OFFSET },
  27823   { 0x2f900, 16676, UNICODE_NOT_PRESENT_OFFSET },
  27824   { 0x2f901, 12071, UNICODE_NOT_PRESENT_OFFSET },
  27825   { 0x2f902, 11659, UNICODE_NOT_PRESENT_OFFSET },
  27826   { 0x2f903, 16680, UNICODE_NOT_PRESENT_OFFSET },
  27827   { 0x2f904, 16684, UNICODE_NOT_PRESENT_OFFSET },
  27828   { 0x2f905, 16688, UNICODE_NOT_PRESENT_OFFSET },
  27829   { 0x2f906, 16692, UNICODE_NOT_PRESENT_OFFSET },
  27830   { 0x2f907, 16697, UNICODE_NOT_PRESENT_OFFSET },
  27831   { 0x2f908, 16701, UNICODE_NOT_PRESENT_OFFSET },
  27832   { 0x2f909, 16705, UNICODE_NOT_PRESENT_OFFSET },
  27833   { 0x2f90a, 16709, UNICODE_NOT_PRESENT_OFFSET },
  27834   { 0x2f90b, 12344, UNICODE_NOT_PRESENT_OFFSET },
  27835   { 0x2f90c, 16713, UNICODE_NOT_PRESENT_OFFSET },
  27836   { 0x2f90d, 16717, UNICODE_NOT_PRESENT_OFFSET },
  27837   { 0x2f90e, 16722, UNICODE_NOT_PRESENT_OFFSET },
  27838   { 0x2f90f, 16726, UNICODE_NOT_PRESENT_OFFSET },
  27839   { 0x2f910, 16730, UNICODE_NOT_PRESENT_OFFSET },
  27840   { 0x2f911, 16735, UNICODE_NOT_PRESENT_OFFSET },
  27841   { 0x2f912, 16740, UNICODE_NOT_PRESENT_OFFSET },
  27842   { 0x2f913, 16744, UNICODE_NOT_PRESENT_OFFSET },
  27843   { 0x2f914, 12348, UNICODE_NOT_PRESENT_OFFSET },
  27844   { 0x2f915, 16748, UNICODE_NOT_PRESENT_OFFSET },
  27845   { 0x2f916, 16752, UNICODE_NOT_PRESENT_OFFSET },
  27846   { 0x2f917, 16756, UNICODE_NOT_PRESENT_OFFSET },
  27847   { 0x2f918, 16760, UNICODE_NOT_PRESENT_OFFSET },
  27848   { 0x2f919, 16764, UNICODE_NOT_PRESENT_OFFSET },
  27849   { 0x2f91a, 16768, UNICODE_NOT_PRESENT_OFFSET },
  27850   { 0x2f91b, 16772, UNICODE_NOT_PRESENT_OFFSET },
  27851   { 0x2f91c, 16777, UNICODE_NOT_PRESENT_OFFSET },
  27852   { 0x2f91d, 16781, UNICODE_NOT_PRESENT_OFFSET },
  27853   { 0x2f91e, 16786, UNICODE_NOT_PRESENT_OFFSET },
  27854   { 0x2f91f, 16790, UNICODE_NOT_PRESENT_OFFSET },
  27855   { 0x2f920, 16795, UNICODE_NOT_PRESENT_OFFSET },
  27856   { 0x2f921, 12356, UNICODE_NOT_PRESENT_OFFSET },
  27857   { 0x2f922, 16799, UNICODE_NOT_PRESENT_OFFSET },
  27858   { 0x2f923, 16803, UNICODE_NOT_PRESENT_OFFSET },
  27859   { 0x2f924, 16808, UNICODE_NOT_PRESENT_OFFSET },
  27860   { 0x2f925, 16812, UNICODE_NOT_PRESENT_OFFSET },
  27861   { 0x2f926, 16816, UNICODE_NOT_PRESENT_OFFSET },
  27862   { 0x2f927, 16821, UNICODE_NOT_PRESENT_OFFSET },
  27863   { 0x2f928, 16826, UNICODE_NOT_PRESENT_OFFSET },
  27864   { 0x2f929, 16830, UNICODE_NOT_PRESENT_OFFSET },
  27865   { 0x2f92a, 16834, UNICODE_NOT_PRESENT_OFFSET },
  27866   { 0x2f92b, 16838, UNICODE_NOT_PRESENT_OFFSET },
  27867   { 0x2f92c, 16842, UNICODE_NOT_PRESENT_OFFSET },
  27868   { 0x2f92d, 16842, UNICODE_NOT_PRESENT_OFFSET },
  27869   { 0x2f92e, 16846, UNICODE_NOT_PRESENT_OFFSET },
  27870   { 0x2f92f, 16850, UNICODE_NOT_PRESENT_OFFSET },
  27871   { 0x2f930, 12364, UNICODE_NOT_PRESENT_OFFSET },
  27872   { 0x2f931, 16854, UNICODE_NOT_PRESENT_OFFSET },
  27873   { 0x2f932, 16858, UNICODE_NOT_PRESENT_OFFSET },
  27874   { 0x2f933, 16862, UNICODE_NOT_PRESENT_OFFSET },
  27875   { 0x2f934, 16866, UNICODE_NOT_PRESENT_OFFSET },
  27876   { 0x2f935, 16870, UNICODE_NOT_PRESENT_OFFSET },
  27877   { 0x2f936, 16875, UNICODE_NOT_PRESENT_OFFSET },
  27878   { 0x2f937, 16879, UNICODE_NOT_PRESENT_OFFSET },
  27879   { 0x2f938, 11271, UNICODE_NOT_PRESENT_OFFSET },
  27880   { 0x2f939, 16884, UNICODE_NOT_PRESENT_OFFSET },
  27881   { 0x2f93a, 16889, UNICODE_NOT_PRESENT_OFFSET },
  27882   { 0x2f93b, 16893, UNICODE_NOT_PRESENT_OFFSET },
  27883   { 0x2f93c, 16898, UNICODE_NOT_PRESENT_OFFSET },
  27884   { 0x2f93d, 16903, UNICODE_NOT_PRESENT_OFFSET },
  27885   { 0x2f93e, 16908, UNICODE_NOT_PRESENT_OFFSET },
  27886   { 0x2f93f, 16912, UNICODE_NOT_PRESENT_OFFSET },
  27887   { 0x2f940, 12388, UNICODE_NOT_PRESENT_OFFSET },
  27888   { 0x2f941, 16916, UNICODE_NOT_PRESENT_OFFSET },
  27889   { 0x2f942, 16921, UNICODE_NOT_PRESENT_OFFSET },
  27890   { 0x2f943, 16926, UNICODE_NOT_PRESENT_OFFSET },
  27891   { 0x2f944, 16931, UNICODE_NOT_PRESENT_OFFSET },
  27892   { 0x2f945, 16936, UNICODE_NOT_PRESENT_OFFSET },
  27893   { 0x2f946, 16940, UNICODE_NOT_PRESENT_OFFSET },
  27894   { 0x2f947, 16940, UNICODE_NOT_PRESENT_OFFSET },
  27895   { 0x2f948, 12392, UNICODE_NOT_PRESENT_OFFSET },
  27896   { 0x2f949, 12511, UNICODE_NOT_PRESENT_OFFSET },
  27897   { 0x2f94a, 16944, UNICODE_NOT_PRESENT_OFFSET },
  27898   { 0x2f94b, 16948, UNICODE_NOT_PRESENT_OFFSET },
  27899   { 0x2f94c, 16952, UNICODE_NOT_PRESENT_OFFSET },
  27900   { 0x2f94d, 16956, UNICODE_NOT_PRESENT_OFFSET },
  27901   { 0x2f94e, 16961, UNICODE_NOT_PRESENT_OFFSET },
  27902   { 0x2f94f, 11123, UNICODE_NOT_PRESENT_OFFSET },
  27903   { 0x2f950, 12400, UNICODE_NOT_PRESENT_OFFSET },
  27904   { 0x2f951, 16965, UNICODE_NOT_PRESENT_OFFSET },
  27905   { 0x2f952, 16969, UNICODE_NOT_PRESENT_OFFSET },
  27906   { 0x2f953, 12111, UNICODE_NOT_PRESENT_OFFSET },
  27907   { 0x2f954, 16974, UNICODE_NOT_PRESENT_OFFSET },
  27908   { 0x2f955, 16979, UNICODE_NOT_PRESENT_OFFSET },
  27909   { 0x2f956, 11939, UNICODE_NOT_PRESENT_OFFSET },
  27910   { 0x2f957, 16984, UNICODE_NOT_PRESENT_OFFSET },
  27911   { 0x2f958, 16988, UNICODE_NOT_PRESENT_OFFSET },
  27912   { 0x2f959, 12123, UNICODE_NOT_PRESENT_OFFSET },
  27913   { 0x2f95a, 16992, UNICODE_NOT_PRESENT_OFFSET },
  27914   { 0x2f95b, 16996, UNICODE_NOT_PRESENT_OFFSET },
  27915   { 0x2f95c, 17000, UNICODE_NOT_PRESENT_OFFSET },
  27916   { 0x2f95d, 17005, UNICODE_NOT_PRESENT_OFFSET },
  27917   { 0x2f95e, 17005, UNICODE_NOT_PRESENT_OFFSET },
  27918   { 0x2f95f, 17010, UNICODE_NOT_PRESENT_OFFSET },
  27919   { 0x2f960, 17014, UNICODE_NOT_PRESENT_OFFSET },
  27920   { 0x2f961, 17018, UNICODE_NOT_PRESENT_OFFSET },
  27921   { 0x2f962, 17023, UNICODE_NOT_PRESENT_OFFSET },
  27922   { 0x2f963, 17027, UNICODE_NOT_PRESENT_OFFSET },
  27923   { 0x2f964, 17031, UNICODE_NOT_PRESENT_OFFSET },
  27924   { 0x2f965, 17035, UNICODE_NOT_PRESENT_OFFSET },
  27925   { 0x2f966, 17040, UNICODE_NOT_PRESENT_OFFSET },
  27926   { 0x2f967, 17044, UNICODE_NOT_PRESENT_OFFSET },
  27927   { 0x2f968, 17048, UNICODE_NOT_PRESENT_OFFSET },
  27928   { 0x2f969, 17052, UNICODE_NOT_PRESENT_OFFSET },
  27929   { 0x2f96a, 17056, UNICODE_NOT_PRESENT_OFFSET },
  27930   { 0x2f96b, 17060, UNICODE_NOT_PRESENT_OFFSET },
  27931   { 0x2f96c, 17065, UNICODE_NOT_PRESENT_OFFSET },
  27932   { 0x2f96d, 17069, UNICODE_NOT_PRESENT_OFFSET },
  27933   { 0x2f96e, 17073, UNICODE_NOT_PRESENT_OFFSET },
  27934   { 0x2f96f, 17077, UNICODE_NOT_PRESENT_OFFSET },
  27935   { 0x2f970, 17081, UNICODE_NOT_PRESENT_OFFSET },
  27936   { 0x2f971, 17085, UNICODE_NOT_PRESENT_OFFSET },
  27937   { 0x2f972, 17089, UNICODE_NOT_PRESENT_OFFSET },
  27938   { 0x2f973, 17094, UNICODE_NOT_PRESENT_OFFSET },
  27939   { 0x2f974, 17099, UNICODE_NOT_PRESENT_OFFSET },
  27940   { 0x2f975, 17103, UNICODE_NOT_PRESENT_OFFSET },
  27941   { 0x2f976, 17108, UNICODE_NOT_PRESENT_OFFSET },
  27942   { 0x2f977, 17112, UNICODE_NOT_PRESENT_OFFSET },
  27943   { 0x2f978, 17117, UNICODE_NOT_PRESENT_OFFSET },
  27944   { 0x2f979, 17121, UNICODE_NOT_PRESENT_OFFSET },
  27945   { 0x2f97a, 12147, UNICODE_NOT_PRESENT_OFFSET },
  27946   { 0x2f97b, 17125, UNICODE_NOT_PRESENT_OFFSET },
  27947   { 0x2f97c, 17130, UNICODE_NOT_PRESENT_OFFSET },
  27948   { 0x2f97d, 17135, UNICODE_NOT_PRESENT_OFFSET },
  27949   { 0x2f97e, 17139, UNICODE_NOT_PRESENT_OFFSET },
  27950   { 0x2f97f, 17144, UNICODE_NOT_PRESENT_OFFSET },
  27951   { 0x2f980, 17148, UNICODE_NOT_PRESENT_OFFSET },
  27952   { 0x2f981, 17153, UNICODE_NOT_PRESENT_OFFSET },
  27953   { 0x2f982, 17157, UNICODE_NOT_PRESENT_OFFSET },
  27954   { 0x2f983, 17161, UNICODE_NOT_PRESENT_OFFSET },
  27955   { 0x2f984, 17165, UNICODE_NOT_PRESENT_OFFSET },
  27956   { 0x2f985, 17169, UNICODE_NOT_PRESENT_OFFSET },
  27957   { 0x2f986, 17173, UNICODE_NOT_PRESENT_OFFSET },
  27958   { 0x2f987, 17177, UNICODE_NOT_PRESENT_OFFSET },
  27959   { 0x2f988, 17182, UNICODE_NOT_PRESENT_OFFSET },
  27960   { 0x2f989, 17187, UNICODE_NOT_PRESENT_OFFSET },
  27961   { 0x2f98a, 17192, UNICODE_NOT_PRESENT_OFFSET },
  27962   { 0x2f98b, 16282, UNICODE_NOT_PRESENT_OFFSET },
  27963   { 0x2f98c, 17197, UNICODE_NOT_PRESENT_OFFSET },
  27964   { 0x2f98d, 17201, UNICODE_NOT_PRESENT_OFFSET },
  27965   { 0x2f98e, 17205, UNICODE_NOT_PRESENT_OFFSET },
  27966   { 0x2f98f, 17209, UNICODE_NOT_PRESENT_OFFSET },
  27967   { 0x2f990, 17213, UNICODE_NOT_PRESENT_OFFSET },
  27968   { 0x2f991, 17217, UNICODE_NOT_PRESENT_OFFSET },
  27969   { 0x2f992, 17221, UNICODE_NOT_PRESENT_OFFSET },
  27970   { 0x2f993, 17225, UNICODE_NOT_PRESENT_OFFSET },
  27971   { 0x2f994, 17229, UNICODE_NOT_PRESENT_OFFSET },
  27972   { 0x2f995, 17233, UNICODE_NOT_PRESENT_OFFSET },
  27973   { 0x2f996, 17237, UNICODE_NOT_PRESENT_OFFSET },
  27974   { 0x2f997, 17241, UNICODE_NOT_PRESENT_OFFSET },
  27975   { 0x2f998, 11339, UNICODE_NOT_PRESENT_OFFSET },
  27976   { 0x2f999, 17246, UNICODE_NOT_PRESENT_OFFSET },
  27977   { 0x2f99a, 17250, UNICODE_NOT_PRESENT_OFFSET },
  27978   { 0x2f99b, 17254, UNICODE_NOT_PRESENT_OFFSET },
  27979   { 0x2f99c, 17258, UNICODE_NOT_PRESENT_OFFSET },
  27980   { 0x2f99d, 17262, UNICODE_NOT_PRESENT_OFFSET },
  27981   { 0x2f99e, 17266, UNICODE_NOT_PRESENT_OFFSET },
  27982   { 0x2f99f, 12159, UNICODE_NOT_PRESENT_OFFSET },
  27983   { 0x2f9a0, 17270, UNICODE_NOT_PRESENT_OFFSET },
  27984   { 0x2f9a1, 17274, UNICODE_NOT_PRESENT_OFFSET },
  27985   { 0x2f9a2, 17278, UNICODE_NOT_PRESENT_OFFSET },
  27986   { 0x2f9a3, 17282, UNICODE_NOT_PRESENT_OFFSET },
  27987   { 0x2f9a4, 17286, UNICODE_NOT_PRESENT_OFFSET },
  27988   { 0x2f9a5, 17291, UNICODE_NOT_PRESENT_OFFSET },
  27989   { 0x2f9a6, 17296, UNICODE_NOT_PRESENT_OFFSET },
  27990   { 0x2f9a7, 17301, UNICODE_NOT_PRESENT_OFFSET },
  27991   { 0x2f9a8, 17305, UNICODE_NOT_PRESENT_OFFSET },
  27992   { 0x2f9a9, 17309, UNICODE_NOT_PRESENT_OFFSET },
  27993   { 0x2f9aa, 17313, UNICODE_NOT_PRESENT_OFFSET },
  27994   { 0x2f9ab, 17317, UNICODE_NOT_PRESENT_OFFSET },
  27995   { 0x2f9ac, 17322, UNICODE_NOT_PRESENT_OFFSET },
  27996   { 0x2f9ad, 17326, UNICODE_NOT_PRESENT_OFFSET },
  27997   { 0x2f9ae, 17331, UNICODE_NOT_PRESENT_OFFSET },
  27998   { 0x2f9af, 17335, UNICODE_NOT_PRESENT_OFFSET },
  27999   { 0x2f9b0, 17339, UNICODE_NOT_PRESENT_OFFSET },
  28000   { 0x2f9b1, 17344, UNICODE_NOT_PRESENT_OFFSET },
  28001   { 0x2f9b2, 17349, UNICODE_NOT_PRESENT_OFFSET },
  28002   { 0x2f9b3, 17353, UNICODE_NOT_PRESENT_OFFSET },
  28003   { 0x2f9b4, 11103, UNICODE_NOT_PRESENT_OFFSET },
  28004   { 0x2f9b5, 17357, UNICODE_NOT_PRESENT_OFFSET },
  28005   { 0x2f9b6, 17361, UNICODE_NOT_PRESENT_OFFSET },
  28006   { 0x2f9b7, 17365, UNICODE_NOT_PRESENT_OFFSET },
  28007   { 0x2f9b8, 17369, UNICODE_NOT_PRESENT_OFFSET },
  28008   { 0x2f9b9, 17373, UNICODE_NOT_PRESENT_OFFSET },
  28009   { 0x2f9ba, 17377, UNICODE_NOT_PRESENT_OFFSET },
  28010   { 0x2f9bb, 12428, UNICODE_NOT_PRESENT_OFFSET },
  28011   { 0x2f9bc, 17381, UNICODE_NOT_PRESENT_OFFSET },
  28012   { 0x2f9bd, 17385, UNICODE_NOT_PRESENT_OFFSET },
  28013   { 0x2f9be, 17389, UNICODE_NOT_PRESENT_OFFSET },
  28014   { 0x2f9bf, 17393, UNICODE_NOT_PRESENT_OFFSET },
  28015   { 0x2f9c0, 17397, UNICODE_NOT_PRESENT_OFFSET },
  28016   { 0x2f9c1, 17401, UNICODE_NOT_PRESENT_OFFSET },
  28017   { 0x2f9c2, 17405, UNICODE_NOT_PRESENT_OFFSET },
  28018   { 0x2f9c3, 17409, UNICODE_NOT_PRESENT_OFFSET },
  28019   { 0x2f9c4, 6757, UNICODE_NOT_PRESENT_OFFSET },
  28020   { 0x2f9c5, 17413, UNICODE_NOT_PRESENT_OFFSET },
  28021   { 0x2f9c6, 17418, UNICODE_NOT_PRESENT_OFFSET },
  28022   { 0x2f9c7, 17422, UNICODE_NOT_PRESENT_OFFSET },
  28023   { 0x2f9c8, 17426, UNICODE_NOT_PRESENT_OFFSET },
  28024   { 0x2f9c9, 17430, UNICODE_NOT_PRESENT_OFFSET },
  28025   { 0x2f9ca, 17434, UNICODE_NOT_PRESENT_OFFSET },
  28026   { 0x2f9cb, 17438, UNICODE_NOT_PRESENT_OFFSET },
  28027   { 0x2f9cc, 17443, UNICODE_NOT_PRESENT_OFFSET },
  28028   { 0x2f9cd, 17448, UNICODE_NOT_PRESENT_OFFSET },
  28029   { 0x2f9ce, 17452, UNICODE_NOT_PRESENT_OFFSET },
  28030   { 0x2f9cf, 17456, UNICODE_NOT_PRESENT_OFFSET },
  28031   { 0x2f9d0, 12448, UNICODE_NOT_PRESENT_OFFSET },
  28032   { 0x2f9d1, 12452, UNICODE_NOT_PRESENT_OFFSET },
  28033   { 0x2f9d2, 6785, UNICODE_NOT_PRESENT_OFFSET },
  28034   { 0x2f9d3, 17460, UNICODE_NOT_PRESENT_OFFSET },
  28035   { 0x2f9d4, 17465, UNICODE_NOT_PRESENT_OFFSET },
  28036   { 0x2f9d5, 17469, UNICODE_NOT_PRESENT_OFFSET },
  28037   { 0x2f9d6, 17473, UNICODE_NOT_PRESENT_OFFSET },
  28038   { 0x2f9d7, 17477, UNICODE_NOT_PRESENT_OFFSET },
  28039   { 0x2f9d8, 17481, UNICODE_NOT_PRESENT_OFFSET },
  28040   { 0x2f9d9, 17486, UNICODE_NOT_PRESENT_OFFSET },
  28041   { 0x2f9da, 17491, UNICODE_NOT_PRESENT_OFFSET },
  28042   { 0x2f9db, 17495, UNICODE_NOT_PRESENT_OFFSET },
  28043   { 0x2f9dc, 17499, UNICODE_NOT_PRESENT_OFFSET },
  28044   { 0x2f9dd, 17503, UNICODE_NOT_PRESENT_OFFSET },
  28045   { 0x2f9de, 17508, UNICODE_NOT_PRESENT_OFFSET },
  28046   { 0x2f9df, 12456, UNICODE_NOT_PRESENT_OFFSET },
  28047   { 0x2f9e0, 17512, UNICODE_NOT_PRESENT_OFFSET },
  28048   { 0x2f9e1, 17517, UNICODE_NOT_PRESENT_OFFSET },
  28049   { 0x2f9e2, 17522, UNICODE_NOT_PRESENT_OFFSET },
  28050   { 0x2f9e3, 17526, UNICODE_NOT_PRESENT_OFFSET },
  28051   { 0x2f9e4, 17530, UNICODE_NOT_PRESENT_OFFSET },
  28052   { 0x2f9e5, 17534, UNICODE_NOT_PRESENT_OFFSET },
  28053   { 0x2f9e6, 17539, UNICODE_NOT_PRESENT_OFFSET },
  28054   { 0x2f9e7, 17543, UNICODE_NOT_PRESENT_OFFSET },
  28055   { 0x2f9e8, 17547, UNICODE_NOT_PRESENT_OFFSET },
  28056   { 0x2f9e9, 17551, UNICODE_NOT_PRESENT_OFFSET },
  28057   { 0x2f9ea, 17555, UNICODE_NOT_PRESENT_OFFSET },
  28058   { 0x2f9eb, 17559, UNICODE_NOT_PRESENT_OFFSET },
  28059   { 0x2f9ec, 17563, UNICODE_NOT_PRESENT_OFFSET },
  28060   { 0x2f9ed, 17567, UNICODE_NOT_PRESENT_OFFSET },
  28061   { 0x2f9ee, 17572, UNICODE_NOT_PRESENT_OFFSET },
  28062   { 0x2f9ef, 17576, UNICODE_NOT_PRESENT_OFFSET },
  28063   { 0x2f9f0, 17580, UNICODE_NOT_PRESENT_OFFSET },
  28064   { 0x2f9f1, 17584, UNICODE_NOT_PRESENT_OFFSET },
  28065   { 0x2f9f2, 17589, UNICODE_NOT_PRESENT_OFFSET },
  28066   { 0x2f9f3, 17593, UNICODE_NOT_PRESENT_OFFSET },
  28067   { 0x2f9f4, 17597, UNICODE_NOT_PRESENT_OFFSET },
  28068   { 0x2f9f5, 17601, UNICODE_NOT_PRESENT_OFFSET },
  28069   { 0x2f9f6, 17605, UNICODE_NOT_PRESENT_OFFSET },
  28070   { 0x2f9f7, 17610, UNICODE_NOT_PRESENT_OFFSET },
  28071   { 0x2f9f8, 17615, UNICODE_NOT_PRESENT_OFFSET },
  28072   { 0x2f9f9, 17619, UNICODE_NOT_PRESENT_OFFSET },
  28073   { 0x2f9fa, 17623, UNICODE_NOT_PRESENT_OFFSET },
  28074   { 0x2f9fb, 17627, UNICODE_NOT_PRESENT_OFFSET },
  28075   { 0x2f9fc, 17632, UNICODE_NOT_PRESENT_OFFSET },
  28076   { 0x2f9fd, 17636, UNICODE_NOT_PRESENT_OFFSET },
  28077   { 0x2f9fe, 12480, UNICODE_NOT_PRESENT_OFFSET },
  28078   { 0x2f9ff, 12480, UNICODE_NOT_PRESENT_OFFSET },
  28079   { 0x2fa00, 17641, UNICODE_NOT_PRESENT_OFFSET },
  28080   { 0x2fa01, 17645, UNICODE_NOT_PRESENT_OFFSET },
  28081   { 0x2fa02, 17650, UNICODE_NOT_PRESENT_OFFSET },
  28082   { 0x2fa03, 17654, UNICODE_NOT_PRESENT_OFFSET },
  28083   { 0x2fa04, 17658, UNICODE_NOT_PRESENT_OFFSET },
  28084   { 0x2fa05, 17662, UNICODE_NOT_PRESENT_OFFSET },
  28085   { 0x2fa06, 17666, UNICODE_NOT_PRESENT_OFFSET },
  28086   { 0x2fa07, 17670, UNICODE_NOT_PRESENT_OFFSET },
  28087   { 0x2fa08, 17674, UNICODE_NOT_PRESENT_OFFSET },
  28088   { 0x2fa09, 17678, UNICODE_NOT_PRESENT_OFFSET },
  28089   { 0x2fa0a, 12484, UNICODE_NOT_PRESENT_OFFSET },
  28090   { 0x2fa0b, 17683, UNICODE_NOT_PRESENT_OFFSET },
  28091   { 0x2fa0c, 17687, UNICODE_NOT_PRESENT_OFFSET },
  28092   { 0x2fa0d, 17691, UNICODE_NOT_PRESENT_OFFSET },
  28093   { 0x2fa0e, 17695, UNICODE_NOT_PRESENT_OFFSET },
  28094   { 0x2fa0f, 17699, UNICODE_NOT_PRESENT_OFFSET },
  28095   { 0x2fa10, 17703, UNICODE_NOT_PRESENT_OFFSET },
  28096   { 0x2fa11, 17708, UNICODE_NOT_PRESENT_OFFSET },
  28097   { 0x2fa12, 17712, UNICODE_NOT_PRESENT_OFFSET },
  28098   { 0x2fa13, 17717, UNICODE_NOT_PRESENT_OFFSET },
  28099   { 0x2fa14, 17722, UNICODE_NOT_PRESENT_OFFSET },
  28100   { 0x2fa15, 6977, UNICODE_NOT_PRESENT_OFFSET },
  28101   { 0x2fa16, 17727, UNICODE_NOT_PRESENT_OFFSET },
  28102   { 0x2fa17, 6993, UNICODE_NOT_PRESENT_OFFSET },
  28103   { 0x2fa18, 17731, UNICODE_NOT_PRESENT_OFFSET },
  28104   { 0x2fa19, 17735, UNICODE_NOT_PRESENT_OFFSET },
  28105   { 0x2fa1a, 17739, UNICODE_NOT_PRESENT_OFFSET },
  28106   { 0x2fa1b, 17743, UNICODE_NOT_PRESENT_OFFSET },
  28107   { 0x2fa1c, 7013, UNICODE_NOT_PRESENT_OFFSET },
  28108   { 0x2fa1d, 17747, UNICODE_NOT_PRESENT_OFFSET }
  28109 };
  28110 
  28111 static const char decomp_expansion_string[] =
  28112   "\x20\0" /* offset 0 */
  28113   "\x20\xcc\x88\0" /* offset 2 */
  28114   "\x61\0" /* offset 6 */
  28115   "\x20\xcc\x84\0" /* offset 8 */
  28116   "\x32\0" /* offset 12 */
  28117   "\x33\0" /* offset 14 */
  28118   "\x20\xcc\x81\0" /* offset 16 */
  28119   "\xce\xbc\0" /* offset 20 */
  28120   "\x20\xcc\xa7\0" /* offset 23 */
  28121   "\x31\0" /* offset 27 */
  28122   "\x6f\0" /* offset 29 */
  28123   "\x31\xe2\x81\x84\x34\0" /* offset 31 */
  28124   "\x31\xe2\x81\x84\x32\0" /* offset 37 */
  28125   "\x33\xe2\x81\x84\x34\0" /* offset 43 */
  28126   "\x41\xcc\x80\0" /* offset 49 */
  28127   "\x41\xcc\x81\0" /* offset 53 */
  28128   "\x41\xcc\x82\0" /* offset 57 */
  28129   "\x41\xcc\x83\0" /* offset 61 */
  28130   "\x41\xcc\x88\0" /* offset 65 */
  28131   "\x41\xcc\x8a\0" /* offset 69 */
  28132   "\x43\xcc\xa7\0" /* offset 73 */
  28133   "\x45\xcc\x80\0" /* offset 77 */
  28134   "\x45\xcc\x81\0" /* offset 81 */
  28135   "\x45\xcc\x82\0" /* offset 85 */
  28136   "\x45\xcc\x88\0" /* offset 89 */
  28137   "\x49\xcc\x80\0" /* offset 93 */
  28138   "\x49\xcc\x81\0" /* offset 97 */
  28139   "\x49\xcc\x82\0" /* offset 101 */
  28140   "\x49\xcc\x88\0" /* offset 105 */
  28141   "\x4e\xcc\x83\0" /* offset 109 */
  28142   "\x4f\xcc\x80\0" /* offset 113 */
  28143   "\x4f\xcc\x81\0" /* offset 117 */
  28144   "\x4f\xcc\x82\0" /* offset 121 */
  28145   "\x4f\xcc\x83\0" /* offset 125 */
  28146   "\x4f\xcc\x88\0" /* offset 129 */
  28147   "\x55\xcc\x80\0" /* offset 133 */
  28148   "\x55\xcc\x81\0" /* offset 137 */
  28149   "\x55\xcc\x82\0" /* offset 141 */
  28150   "\x55\xcc\x88\0" /* offset 145 */
  28151   "\x59\xcc\x81\0" /* offset 149 */
  28152   "\x61\xcc\x80\0" /* offset 153 */
  28153   "\x61\xcc\x81\0" /* offset 157 */
  28154   "\x61\xcc\x82\0" /* offset 161 */
  28155   "\x61\xcc\x83\0" /* offset 165 */
  28156   "\x61\xcc\x88\0" /* offset 169 */
  28157   "\x61\xcc\x8a\0" /* offset 173 */
  28158   "\x63\xcc\xa7\0" /* offset 177 */
  28159   "\x65\xcc\x80\0" /* offset 181 */
  28160   "\x65\xcc\x81\0" /* offset 185 */
  28161   "\x65\xcc\x82\0" /* offset 189 */
  28162   "\x65\xcc\x88\0" /* offset 193 */
  28163   "\x69\xcc\x80\0" /* offset 197 */
  28164   "\x69\xcc\x81\0" /* offset 201 */
  28165   "\x69\xcc\x82\0" /* offset 205 */
  28166   "\x69\xcc\x88\0" /* offset 209 */
  28167   "\x6e\xcc\x83\0" /* offset 213 */
  28168   "\x6f\xcc\x80\0" /* offset 217 */
  28169   "\x6f\xcc\x81\0" /* offset 221 */
  28170   "\x6f\xcc\x82\0" /* offset 225 */
  28171   "\x6f\xcc\x83\0" /* offset 229 */
  28172   "\x6f\xcc\x88\0" /* offset 233 */
  28173   "\x75\xcc\x80\0" /* offset 237 */
  28174   "\x75\xcc\x81\0" /* offset 241 */
  28175   "\x75\xcc\x82\0" /* offset 245 */
  28176   "\x75\xcc\x88\0" /* offset 249 */
  28177   "\x79\xcc\x81\0" /* offset 253 */
  28178   "\x79\xcc\x88\0" /* offset 257 */
  28179   "\x41\xcc\x84\0" /* offset 261 */
  28180   "\x61\xcc\x84\0" /* offset 265 */
  28181   "\x41\xcc\x86\0" /* offset 269 */
  28182   "\x61\xcc\x86\0" /* offset 273 */
  28183   "\x41\xcc\xa8\0" /* offset 277 */
  28184   "\x61\xcc\xa8\0" /* offset 281 */
  28185   "\x43\xcc\x81\0" /* offset 285 */
  28186   "\x63\xcc\x81\0" /* offset 289 */
  28187   "\x43\xcc\x82\0" /* offset 293 */
  28188   "\x63\xcc\x82\0" /* offset 297 */
  28189   "\x43\xcc\x87\0" /* offset 301 */
  28190   "\x63\xcc\x87\0" /* offset 305 */
  28191   "\x43\xcc\x8c\0" /* offset 309 */
  28192   "\x63\xcc\x8c\0" /* offset 313 */
  28193   "\x44\xcc\x8c\0" /* offset 317 */
  28194   "\x64\xcc\x8c\0" /* offset 321 */
  28195   "\x45\xcc\x84\0" /* offset 325 */
  28196   "\x65\xcc\x84\0" /* offset 329 */
  28197   "\x45\xcc\x86\0" /* offset 333 */
  28198   "\x65\xcc\x86\0" /* offset 337 */
  28199   "\x45\xcc\x87\0" /* offset 341 */
  28200   "\x65\xcc\x87\0" /* offset 345 */
  28201   "\x45\xcc\xa8\0" /* offset 349 */
  28202   "\x65\xcc\xa8\0" /* offset 353 */
  28203   "\x45\xcc\x8c\0" /* offset 357 */
  28204   "\x65\xcc\x8c\0" /* offset 361 */
  28205   "\x47\xcc\x82\0" /* offset 365 */
  28206   "\x67\xcc\x82\0" /* offset 369 */
  28207   "\x47\xcc\x86\0" /* offset 373 */
  28208   "\x67\xcc\x86\0" /* offset 377 */
  28209   "\x47\xcc\x87\0" /* offset 381 */
  28210   "\x67\xcc\x87\0" /* offset 385 */
  28211   "\x47\xcc\xa7\0" /* offset 389 */
  28212   "\x67\xcc\xa7\0" /* offset 393 */
  28213   "\x48\xcc\x82\0" /* offset 397 */
  28214   "\x68\xcc\x82\0" /* offset 401 */
  28215   "\x49\xcc\x83\0" /* offset 405 */
  28216   "\x69\xcc\x83\0" /* offset 409 */
  28217   "\x49\xcc\x84\0" /* offset 413 */
  28218   "\x69\xcc\x84\0" /* offset 417 */
  28219   "\x49\xcc\x86\0" /* offset 421 */
  28220   "\x69\xcc\x86\0" /* offset 425 */
  28221   "\x49\xcc\xa8\0" /* offset 429 */
  28222   "\x69\xcc\xa8\0" /* offset 433 */
  28223   "\x49\xcc\x87\0" /* offset 437 */
  28224   "\x49\x4a\0" /* offset 441 */
  28225   "\x69\x6a\0" /* offset 444 */
  28226   "\x4a\xcc\x82\0" /* offset 447 */
  28227   "\x6a\xcc\x82\0" /* offset 451 */
  28228   "\x4b\xcc\xa7\0" /* offset 455 */
  28229   "\x6b\xcc\xa7\0" /* offset 459 */
  28230   "\x4c\xcc\x81\0" /* offset 463 */
  28231   "\x6c\xcc\x81\0" /* offset 467 */
  28232   "\x4c\xcc\xa7\0" /* offset 471 */
  28233   "\x6c\xcc\xa7\0" /* offset 475 */
  28234   "\x4c\xcc\x8c\0" /* offset 479 */
  28235   "\x6c\xcc\x8c\0" /* offset 483 */
  28236   "\x4c\xc2\xb7\0" /* offset 487 */
  28237   "\x6c\xc2\xb7\0" /* offset 491 */
  28238   "\x4e\xcc\x81\0" /* offset 495 */
  28239   "\x6e\xcc\x81\0" /* offset 499 */
  28240   "\x4e\xcc\xa7\0" /* offset 503 */
  28241   "\x6e\xcc\xa7\0" /* offset 507 */
  28242   "\x4e\xcc\x8c\0" /* offset 511 */
  28243   "\x6e\xcc\x8c\0" /* offset 515 */
  28244   "\xca\xbc\x6e\0" /* offset 519 */
  28245   "\x4f\xcc\x84\0" /* offset 523 */
  28246   "\x6f\xcc\x84\0" /* offset 527 */
  28247   "\x4f\xcc\x86\0" /* offset 531 */
  28248   "\x6f\xcc\x86\0" /* offset 535 */
  28249   "\x4f\xcc\x8b\0" /* offset 539 */
  28250   "\x6f\xcc\x8b\0" /* offset 543 */
  28251   "\x52\xcc\x81\0" /* offset 547 */
  28252   "\x72\xcc\x81\0" /* offset 551 */
  28253   "\x52\xcc\xa7\0" /* offset 555 */
  28254   "\x72\xcc\xa7\0" /* offset 559 */
  28255   "\x52\xcc\x8c\0" /* offset 563 */
  28256   "\x72\xcc\x8c\0" /* offset 567 */
  28257   "\x53\xcc\x81\0" /* offset 571 */
  28258   "\x73\xcc\x81\0" /* offset 575 */
  28259   "\x53\xcc\x82\0" /* offset 579 */
  28260   "\x73\xcc\x82\0" /* offset 583 */
  28261   "\x53\xcc\xa7\0" /* offset 587 */
  28262   "\x73\xcc\xa7\0" /* offset 591 */
  28263   "\x53\xcc\x8c\0" /* offset 595 */
  28264   "\x73\xcc\x8c\0" /* offset 599 */
  28265   "\x54\xcc\xa7\0" /* offset 603 */
  28266   "\x74\xcc\xa7\0" /* offset 607 */
  28267   "\x54\xcc\x8c\0" /* offset 611 */
  28268   "\x74\xcc\x8c\0" /* offset 615 */
  28269   "\x55\xcc\x83\0" /* offset 619 */
  28270   "\x75\xcc\x83\0" /* offset 623 */
  28271   "\x55\xcc\x84\0" /* offset 627 */
  28272   "\x75\xcc\x84\0" /* offset 631 */
  28273   "\x55\xcc\x86\0" /* offset 635 */
  28274   "\x75\xcc\x86\0" /* offset 639 */
  28275   "\x55\xcc\x8a\0" /* offset 643 */
  28276   "\x75\xcc\x8a\0" /* offset 647 */
  28277   "\x55\xcc\x8b\0" /* offset 651 */
  28278   "\x75\xcc\x8b\0" /* offset 655 */
  28279   "\x55\xcc\xa8\0" /* offset 659 */
  28280   "\x75\xcc\xa8\0" /* offset 663 */
  28281   "\x57\xcc\x82\0" /* offset 667 */
  28282   "\x77\xcc\x82\0" /* offset 671 */
  28283   "\x59\xcc\x82\0" /* offset 675 */
  28284   "\x79\xcc\x82\0" /* offset 679 */
  28285   "\x59\xcc\x88\0" /* offset 683 */
  28286   "\x5a\xcc\x81\0" /* offset 687 */
  28287   "\x7a\xcc\x81\0" /* offset 691 */
  28288   "\x5a\xcc\x87\0" /* offset 695 */
  28289   "\x7a\xcc\x87\0" /* offset 699 */
  28290   "\x5a\xcc\x8c\0" /* offset 703 */
  28291   "\x7a\xcc\x8c\0" /* offset 707 */
  28292   "\x73\0" /* offset 711 */
  28293   "\x4f\xcc\x9b\0" /* offset 713 */
  28294   "\x6f\xcc\x9b\0" /* offset 717 */
  28295   "\x55\xcc\x9b\0" /* offset 721 */
  28296   "\x75\xcc\x9b\0" /* offset 725 */
  28297   "\x44\x5a\xcc\x8c\0" /* offset 729 */
  28298   "\x44\x7a\xcc\x8c\0" /* offset 734 */
  28299   "\x64\x7a\xcc\x8c\0" /* offset 739 */
  28300   "\x4c\x4a\0" /* offset 744 */
  28301   "\x4c\x6a\0" /* offset 747 */
  28302   "\x6c\x6a\0" /* offset 750 */
  28303   "\x4e\x4a\0" /* offset 753 */
  28304   "\x4e\x6a\0" /* offset 756 */
  28305   "\x6e\x6a\0" /* offset 759 */
  28306   "\x41\xcc\x8c\0" /* offset 762 */
  28307   "\x61\xcc\x8c\0" /* offset 766 */
  28308   "\x49\xcc\x8c\0" /* offset 770 */
  28309   "\x69\xcc\x8c\0" /* offset 774 */
  28310   "\x4f\xcc\x8c\0" /* offset 778 */
  28311   "\x6f\xcc\x8c\0" /* offset 782 */
  28312   "\x55\xcc\x8c\0" /* offset 786 */
  28313   "\x75\xcc\x8c\0" /* offset 790 */
  28314   "\x55\xcc\x88\xcc\x84\0" /* offset 794 */
  28315   "\x75\xcc\x88\xcc\x84\0" /* offset 800 */
  28316   "\x55\xcc\x88\xcc\x81\0" /* offset 806 */
  28317   "\x75\xcc\x88\xcc\x81\0" /* offset 812 */
  28318   "\x55\xcc\x88\xcc\x8c\0" /* offset 818 */
  28319   "\x75\xcc\x88\xcc\x8c\0" /* offset 824 */
  28320   "\x55\xcc\x88\xcc\x80\0" /* offset 830 */
  28321   "\x75\xcc\x88\xcc\x80\0" /* offset 836 */
  28322   "\x41\xcc\x88\xcc\x84\0" /* offset 842 */
  28323   "\x61\xcc\x88\xcc\x84\0" /* offset 848 */
  28324   "\x41\xcc\x87\xcc\x84\0" /* offset 854 */
  28325   "\x61\xcc\x87\xcc\x84\0" /* offset 860 */
  28326   "\xc3\x86\xcc\x84\0" /* offset 866 */
  28327   "\xc3\xa6\xcc\x84\0" /* offset 871 */
  28328   "\x47\xcc\x8c\0" /* offset 876 */
  28329   "\x67\xcc\x8c\0" /* offset 880 */
  28330   "\x4b\xcc\x8c\0" /* offset 884 */
  28331   "\x6b\xcc\x8c\0" /* offset 888 */
  28332   "\x4f\xcc\xa8\0" /* offset 892 */
  28333   "\x6f\xcc\xa8\0" /* offset 896 */
  28334   "\x4f\xcc\xa8\xcc\x84\0" /* offset 900 */
  28335   "\x6f\xcc\xa8\xcc\x84\0" /* offset 906 */
  28336   "\xc6\xb7\xcc\x8c\0" /* offset 912 */
  28337   "\xca\x92\xcc\x8c\0" /* offset 917 */
  28338   "\x6a\xcc\x8c\0" /* offset 922 */
  28339   "\x44\x5a\0" /* offset 926 */
  28340   "\x44\x7a\0" /* offset 929 */
  28341   "\x64\x7a\0" /* offset 932 */
  28342   "\x47\xcc\x81\0" /* offset 935 */
  28343   "\x67\xcc\x81\0" /* offset 939 */
  28344   "\x4e\xcc\x80\0" /* offset 943 */
  28345   "\x6e\xcc\x80\0" /* offset 947 */
  28346   "\x41\xcc\x8a\xcc\x81\0" /* offset 951 */
  28347   "\x61\xcc\x8a\xcc\x81\0" /* offset 957 */
  28348   "\xc3\x86\xcc\x81\0" /* offset 963 */
  28349   "\xc3\xa6\xcc\x81\0" /* offset 968 */
  28350   "\xc3\x98\xcc\x81\0" /* offset 973 */
  28351   "\xc3\xb8\xcc\x81\0" /* offset 978 */
  28352   "\x41\xcc\x8f\0" /* offset 983 */
  28353   "\x61\xcc\x8f\0" /* offset 987 */
  28354   "\x41\xcc\x91\0" /* offset 991 */
  28355   "\x61\xcc\x91\0" /* offset 995 */
  28356   "\x45\xcc\x8f\0" /* offset 999 */
  28357   "\x65\xcc\x8f\0" /* offset 1003 */
  28358   "\x45\xcc\x91\0" /* offset 1007 */
  28359   "\x65\xcc\x91\0" /* offset 1011 */
  28360   "\x49\xcc\x8f\0" /* offset 1015 */
  28361   "\x69\xcc\x8f\0" /* offset 1019 */
  28362   "\x49\xcc\x91\0" /* offset 1023 */
  28363   "\x69\xcc\x91\0" /* offset 1027 */
  28364   "\x4f\xcc\x8f\0" /* offset 1031 */
  28365   "\x6f\xcc\x8f\0" /* offset 1035 */
  28366   "\x4f\xcc\x91\0" /* offset 1039 */
  28367   "\x6f\xcc\x91\0" /* offset 1043 */
  28368   "\x52\xcc\x8f\0" /* offset 1047 */
  28369   "\x72\xcc\x8f\0" /* offset 1051 */
  28370   "\x52\xcc\x91\0" /* offset 1055 */
  28371   "\x72\xcc\x91\0" /* offset 1059 */
  28372   "\x55\xcc\x8f\0" /* offset 1063 */
  28373   "\x75\xcc\x8f\0" /* offset 1067 */
  28374   "\x55\xcc\x91\0" /* offset 1071 */
  28375   "\x75\xcc\x91\0" /* offset 1075 */
  28376   "\x53\xcc\xa6\0" /* offset 1079 */
  28377   "\x73\xcc\xa6\0" /* offset 1083 */
  28378   "\x54\xcc\xa6\0" /* offset 1087 */
  28379   "\x74\xcc\xa6\0" /* offset 1091 */
  28380   "\x48\xcc\x8c\0" /* offset 1095 */
  28381   "\x68\xcc\x8c\0" /* offset 1099 */
  28382   "\x41\xcc\x87\0" /* offset 1103 */
  28383   "\x61\xcc\x87\0" /* offset 1107 */
  28384   "\x45\xcc\xa7\0" /* offset 1111 */
  28385   "\x65\xcc\xa7\0" /* offset 1115 */
  28386   "\x4f\xcc\x88\xcc\x84\0" /* offset 1119 */
  28387   "\x6f\xcc\x88\xcc\x84\0" /* offset 1125 */
  28388   "\x4f\xcc\x83\xcc\x84\0" /* offset 1131 */
  28389   "\x6f\xcc\x83\xcc\x84\0" /* offset 1137 */
  28390   "\x4f\xcc\x87\0" /* offset 1143 */
  28391   "\x6f\xcc\x87\0" /* offset 1147 */
  28392   "\x4f\xcc\x87\xcc\x84\0" /* offset 1151 */
  28393   "\x6f\xcc\x87\xcc\x84\0" /* offset 1157 */
  28394   "\x59\xcc\x84\0" /* offset 1163 */
  28395   "\x79\xcc\x84\0" /* offset 1167 */
  28396   "\x68\0" /* offset 1171 */
  28397   "\xc9\xa6\0" /* offset 1173 */
  28398   "\x6a\0" /* offset 1176 */
  28399   "\x72\0" /* offset 1178 */
  28400   "\xc9\xb9\0" /* offset 1180 */
  28401   "\xc9\xbb\0" /* offset 1183 */
  28402   "\xca\x81\0" /* offset 1186 */
  28403   "\x77\0" /* offset 1189 */
  28404   "\x79\0" /* offset 1191 */
  28405   "\x20\xcc\x86\0" /* offset 1193 */
  28406   "\x20\xcc\x87\0" /* offset 1197 */
  28407   "\x20\xcc\x8a\0" /* offset 1201 */
  28408   "\x20\xcc\xa8\0" /* offset 1205 */
  28409   "\x20\xcc\x83\0" /* offset 1209 */
  28410   "\x20\xcc\x8b\0" /* offset 1213 */
  28411   "\xc9\xa3\0" /* offset 1217 */
  28412   "\x6c\0" /* offset 1220 */
  28413   "\x78\0" /* offset 1222 */
  28414   "\xca\x95\0" /* offset 1224 */
  28415   "\xcc\x80\0" /* offset 1227 */
  28416   "\xcc\x81\0" /* offset 1230 */
  28417   "\xcc\x93\0" /* offset 1233 */
  28418   "\xcc\x88\xcc\x81\0" /* offset 1236 */
  28419   "\xca\xb9\0" /* offset 1241 */
  28420   "\x20\xcd\x85\0" /* offset 1244 */
  28421   "\x3b\0" /* offset 1248 */
  28422   "\xc2\xa8\xcc\x81\0" /* offset 1250 */
  28423   "\x20\xcc\x88\xcc\x81\0" /* offset 1255 */
  28424   "\xce\x91\xcc\x81\0" /* offset 1261 */
  28425   "\xc2\xb7\0" /* offset 1266 */
  28426   "\xce\x95\xcc\x81\0" /* offset 1269 */
  28427   "\xce\x97\xcc\x81\0" /* offset 1274 */
  28428   "\xce\x99\xcc\x81\0" /* offset 1279 */
  28429   "\xce\x9f\xcc\x81\0" /* offset 1284 */
  28430   "\xce\xa5\xcc\x81\0" /* offset 1289 */
  28431   "\xce\xa9\xcc\x81\0" /* offset 1294 */
  28432   "\xce\xb9\xcc\x88\xcc\x81\0" /* offset 1299 */
  28433   "\xce\x99\xcc\x88\0" /* offset 1306 */
  28434   "\xce\xa5\xcc\x88\0" /* offset 1311 */
  28435   "\xce\xb1\xcc\x81\0" /* offset 1316 */
  28436   "\xce\xb5\xcc\x81\0" /* offset 1321 */
  28437   "\xce\xb7\xcc\x81\0" /* offset 1326 */
  28438   "\xce\xb9\xcc\x81\0" /* offset 1331 */
  28439   "\xcf\x85\xcc\x88\xcc\x81\0" /* offset 1336 */
  28440   "\xce\xb9\xcc\x88\0" /* offset 1343 */
  28441   "\xcf\x85\xcc\x88\0" /* offset 1348 */
  28442   "\xce\xbf\xcc\x81\0" /* offset 1353 */
  28443   "\xcf\x85\xcc\x81\0" /* offset 1358 */
  28444   "\xcf\x89\xcc\x81\0" /* offset 1363 */
  28445   "\xce\xb2\0" /* offset 1368 */
  28446   "\xce\xb8\0" /* offset 1371 */
  28447   "\xce\xa5\0" /* offset 1374 */
  28448   "\xcf\x92\xcc\x81\0" /* offset 1377 */
  28449   "\xcf\x92\xcc\x88\0" /* offset 1382 */
  28450   "\xcf\x86\0" /* offset 1387 */
  28451   "\xcf\x80\0" /* offset 1390 */
  28452   "\xce\xba\0" /* offset 1393 */
  28453   "\xcf\x81\0" /* offset 1396 */
  28454   "\xcf\x82\0" /* offset 1399 */
  28455   "\xce\x98\0" /* offset 1402 */
  28456   "\xce\xb5\0" /* offset 1405 */
  28457   "\xce\xa3\0" /* offset 1408 */
  28458   "\xd0\x95\xcc\x80\0" /* offset 1411 */
  28459   "\xd0\x95\xcc\x88\0" /* offset 1416 */
  28460   "\xd0\x93\xcc\x81\0" /* offset 1421 */
  28461   "\xd0\x86\xcc\x88\0" /* offset 1426 */
  28462   "\xd0\x9a\xcc\x81\0" /* offset 1431 */
  28463   "\xd0\x98\xcc\x80\0" /* offset 1436 */
  28464   "\xd0\xa3\xcc\x86\0" /* offset 1441 */
  28465   "\xd0\x98\xcc\x86\0" /* offset 1446 */
  28466   "\xd0\xb8\xcc\x86\0" /* offset 1451 */
  28467   "\xd0\xb5\xcc\x80\0" /* offset 1456 */
  28468   "\xd0\xb5\xcc\x88\0" /* offset 1461 */
  28469   "\xd0\xb3\xcc\x81\0" /* offset 1466 */
  28470   "\xd1\x96\xcc\x88\0" /* offset 1471 */
  28471   "\xd0\xba\xcc\x81\0" /* offset 1476 */
  28472   "\xd0\xb8\xcc\x80\0" /* offset 1481 */
  28473   "\xd1\x83\xcc\x86\0" /* offset 1486 */
  28474   "\xd1\xb4\xcc\x8f\0" /* offset 1491 */
  28475   "\xd1\xb5\xcc\x8f\0" /* offset 1496 */
  28476   "\xd0\x96\xcc\x86\0" /* offset 1501 */
  28477   "\xd0\xb6\xcc\x86\0" /* offset 1506 */
  28478   "\xd0\x90\xcc\x86\0" /* offset 1511 */
  28479   "\xd0\xb0\xcc\x86\0" /* offset 1516 */
  28480   "\xd0\x90\xcc\x88\0" /* offset 1521 */
  28481   "\xd0\xb0\xcc\x88\0" /* offset 1526 */
  28482   "\xd0\x95\xcc\x86\0" /* offset 1531 */
  28483   "\xd0\xb5\xcc\x86\0" /* offset 1536 */
  28484   "\xd3\x98\xcc\x88\0" /* offset 1541 */
  28485   "\xd3\x99\xcc\x88\0" /* offset 1546 */
  28486   "\xd0\x96\xcc\x88\0" /* offset 1551 */
  28487   "\xd0\xb6\xcc\x88\0" /* offset 1556 */
  28488   "\xd0\x97\xcc\x88\0" /* offset 1561 */
  28489   "\xd0\xb7\xcc\x88\0" /* offset 1566 */
  28490   "\xd0\x98\xcc\x84\0" /* offset 1571 */
  28491   "\xd0\xb8\xcc\x84\0" /* offset 1576 */
  28492   "\xd0\x98\xcc\x88\0" /* offset 1581 */
  28493   "\xd0\xb8\xcc\x88\0" /* offset 1586 */
  28494   "\xd0\x9e\xcc\x88\0" /* offset 1591 */
  28495   "\xd0\xbe\xcc\x88\0" /* offset 1596 */
  28496   "\xd3\xa8\xcc\x88\0" /* offset 1601 */
  28497   "\xd3\xa9\xcc\x88\0" /* offset 1606 */
  28498   "\xd0\xad\xcc\x88\0" /* offset 1611 */
  28499   "\xd1\x8d\xcc\x88\0" /* offset 1616 */
  28500   "\xd0\xa3\xcc\x84\0" /* offset 1621 */
  28501   "\xd1\x83\xcc\x84\0" /* offset 1626 */
  28502   "\xd0\xa3\xcc\x88\0" /* offset 1631 */
  28503   "\xd1\x83\xcc\x88\0" /* offset 1636 */
  28504   "\xd0\xa3\xcc\x8b\0" /* offset 1641 */
  28505   "\xd1\x83\xcc\x8b\0" /* offset 1646 */
  28506   "\xd0\xa7\xcc\x88\0" /* offset 1651 */
  28507   "\xd1\x87\xcc\x88\0" /* offset 1656 */
  28508   "\xd0\xab\xcc\x88\0" /* offset 1661 */
  28509   "\xd1\x8b\xcc\x88\0" /* offset 1666 */
  28510   "\xd5\xa5\xd6\x82\0" /* offset 1671 */
  28511   "\xd8\xa7\xd9\x93\0" /* offset 1676 */
  28512   "\xd8\xa7\xd9\x94\0" /* offset 1681 */
  28513   "\xd9\x88\xd9\x94\0" /* offset 1686 */
  28514   "\xd8\xa7\xd9\x95\0" /* offset 1691 */
  28515   "\xd9\x8a\xd9\x94\0" /* offset 1696 */
  28516   "\xd8\xa7\xd9\xb4\0" /* offset 1701 */
  28517   "\xd9\x88\xd9\xb4\0" /* offset 1706 */
  28518   "\xdb\x87\xd9\xb4\0" /* offset 1711 */
  28519   "\xd9\x8a\xd9\xb4\0" /* offset 1716 */
  28520   "\xdb\x95\xd9\x94\0" /* offset 1721 */
  28521   "\xdb\x81\xd9\x94\0" /* offset 1726 */
  28522   "\xdb\x92\xd9\x94\0" /* offset 1731 */
  28523   "\xe0\xa4\xa8\xe0\xa4\xbc\0" /* offset 1736 */
  28524   "\xe0\xa4\xb0\xe0\xa4\xbc\0" /* offset 1743 */
  28525   "\xe0\xa4\xb3\xe0\xa4\xbc\0" /* offset 1750 */
  28526   "\xe0\xa4\x95\xe0\xa4\xbc\0" /* offset 1757 */
  28527   "\xe0\xa4\x96\xe0\xa4\xbc\0" /* offset 1764 */
  28528   "\xe0\xa4\x97\xe0\xa4\xbc\0" /* offset 1771 */
  28529   "\xe0\xa4\x9c\xe0\xa4\xbc\0" /* offset 1778 */
  28530   "\xe0\xa4\xa1\xe0\xa4\xbc\0" /* offset 1785 */
  28531   "\xe0\xa4\xa2\xe0\xa4\xbc\0" /* offset 1792 */
  28532   "\xe0\xa4\xab\xe0\xa4\xbc\0" /* offset 1799 */
  28533   "\xe0\xa4\xaf\xe0\xa4\xbc\0" /* offset 1806 */
  28534   "\xe0\xa7\x87\xe0\xa6\xbe\0" /* offset 1813 */
  28535   "\xe0\xa7\x87\xe0\xa7\x97\0" /* offset 1820 */
  28536   "\xe0\xa6\xa1\xe0\xa6\xbc\0" /* offset 1827 */
  28537   "\xe0\xa6\xa2\xe0\xa6\xbc\0" /* offset 1834 */
  28538   "\xe0\xa6\xaf\xe0\xa6\xbc\0" /* offset 1841 */
  28539   "\xe0\xa8\xb2\xe0\xa8\xbc\0" /* offset 1848 */
  28540   "\xe0\xa8\xb8\xe0\xa8\xbc\0" /* offset 1855 */
  28541   "\xe0\xa8\x96\xe0\xa8\xbc\0" /* offset 1862 */
  28542   "\xe0\xa8\x97\xe0\xa8\xbc\0" /* offset 1869 */
  28543   "\xe0\xa8\x9c\xe0\xa8\xbc\0" /* offset 1876 */
  28544   "\xe0\xa8\xab\xe0\xa8\xbc\0" /* offset 1883 */
  28545   "\xe0\xad\x87\xe0\xad\x96\0" /* offset 1890 */
  28546   "\xe0\xad\x87\xe0\xac\xbe\0" /* offset 1897 */
  28547   "\xe0\xad\x87\xe0\xad\x97\0" /* offset 1904 */
  28548   "\xe0\xac\xa1\xe0\xac\xbc\0" /* offset 1911 */
  28549   "\xe0\xac\xa2\xe0\xac\xbc\0" /* offset 1918 */
  28550   "\xe0\xae\x92\xe0\xaf\x97\0" /* offset 1925 */
  28551   "\xe0\xaf\x86\xe0\xae\xbe\0" /* offset 1932 */
  28552   "\xe0\xaf\x87\xe0\xae\xbe\0" /* offset 1939 */
  28553   "\xe0\xaf\x86\xe0\xaf\x97\0" /* offset 1946 */
  28554   "\xe0\xb1\x86\xe0\xb1\x96\0" /* offset 1953 */
  28555   "\xe0\xb2\xbf\xe0\xb3\x95\0" /* offset 1960 */
  28556   "\xe0\xb3\x86\xe0\xb3\x95\0" /* offset 1967 */
  28557   "\xe0\xb3\x86\xe0\xb3\x96\0" /* offset 1974 */
  28558   "\xe0\xb3\x86\xe0\xb3\x82\0" /* offset 1981 */
  28559   "\xe0\xb3\x86\xe0\xb3\x82\xe0\xb3\x95\0" /* offset 1988 */
  28560   "\xe0\xb5\x86\xe0\xb4\xbe\0" /* offset 1998 */
  28561   "\xe0\xb5\x87\xe0\xb4\xbe\0" /* offset 2005 */
  28562   "\xe0\xb5\x86\xe0\xb5\x97\0" /* offset 2012 */
  28563   "\xe0\xb7\x99\xe0\xb7\x8a\0" /* offset 2019 */
  28564   "\xe0\xb7\x99\xe0\xb7\x8f\0" /* offset 2026 */
  28565   "\xe0\xb7\x99\xe0\xb7\x8f\xe0\xb7\x8a\0" /* offset 2033 */
  28566   "\xe0\xb7\x99\xe0\xb7\x9f\0" /* offset 2043 */
  28567   "\xe0\xb9\x8d\xe0\xb8\xb2\0" /* offset 2050 */
  28568   "\xe0\xbb\x8d\xe0\xba\xb2\0" /* offset 2057 */
  28569   "\xe0\xba\xab\xe0\xba\x99\0" /* offset 2064 */
  28570   "\xe0\xba\xab\xe0\xba\xa1\0" /* offset 2071 */
  28571   "\xe0\xbc\x8b\0" /* offset 2078 */
  28572   "\xe0\xbd\x82\xe0\xbe\xb7\0" /* offset 2082 */
  28573   "\xe0\xbd\x8c\xe0\xbe\xb7\0" /* offset 2089 */
  28574   "\xe0\xbd\x91\xe0\xbe\xb7\0" /* offset 2096 */
  28575   "\xe0\xbd\x96\xe0\xbe\xb7\0" /* offset 2103 */
  28576   "\xe0\xbd\x9b\xe0\xbe\xb7\0" /* offset 2110 */
  28577   "\xe0\xbd\x80\xe0\xbe\xb5\0" /* offset 2117 */
  28578   "\xe0\xbd\xb1\xe0\xbd\xb2\0" /* offset 2124 */
  28579   "\xe0\xbd\xb1\xe0\xbd\xb4\0" /* offset 2131 */
  28580   "\xe0\xbe\xb2\xe0\xbe\x80\0" /* offset 2138 */
  28581   "\xe0\xbe\xb2\xe0\xbd\xb1\xe0\xbe\x80\0" /* offset 2145 */
  28582   "\xe0\xbe\xb3\xe0\xbe\x80\0" /* offset 2155 */
  28583   "\xe0\xbe\xb3\xe0\xbd\xb1\xe0\xbe\x80\0" /* offset 2162 */
  28584   "\xe0\xbd\xb1\xe0\xbe\x80\0" /* offset 2172 */
  28585   "\xe0\xbe\x92\xe0\xbe\xb7\0" /* offset 2179 */
  28586   "\xe0\xbe\x9c\xe0\xbe\xb7\0" /* offset 2186 */
  28587   "\xe0\xbe\xa1\xe0\xbe\xb7\0" /* offset 2193 */
  28588   "\xe0\xbe\xa6\xe0\xbe\xb7\0" /* offset 2200 */
  28589   "\xe0\xbe\xab\xe0\xbe\xb7\0" /* offset 2207 */
  28590   "\xe0\xbe\x90\xe0\xbe\xb5\0" /* offset 2214 */
  28591   "\xe1\x80\xa5\xe1\x80\xae\0" /* offset 2221 */
  28592   "\xe1\x83\x9c\0" /* offset 2228 */
  28593   "\xe1\xac\x85\xe1\xac\xb5\0" /* offset 2232 */
  28594   "\xe1\xac\x87\xe1\xac\xb5\0" /* offset 2239 */
  28595   "\xe1\xac\x89\xe1\xac\xb5\0" /* offset 2246 */
  28596   "\xe1\xac\x8b\xe1\xac\xb5\0" /* offset 2253 */
  28597   "\xe1\xac\x8d\xe1\xac\xb5\0" /* offset 2260 */
  28598   "\xe1\xac\x91\xe1\xac\xb5\0" /* offset 2267 */
  28599   "\xe1\xac\xba\xe1\xac\xb5\0" /* offset 2274 */
  28600   "\xe1\xac\xbc\xe1\xac\xb5\0" /* offset 2281 */
  28601   "\xe1\xac\xbe\xe1\xac\xb5\0" /* offset 2288 */
  28602   "\xe1\xac\xbf\xe1\xac\xb5\0" /* offset 2295 */
  28603   "\xe1\xad\x82\xe1\xac\xb5\0" /* offset 2302 */
  28604   "\x41\0" /* offset 2309 */
  28605   "\xc3\x86\0" /* offset 2311 */
  28606   "\x42\0" /* offset 2314 */
  28607   "\x44\0" /* offset 2316 */
  28608   "\x45\0" /* offset 2318 */
  28609   "\xc6\x8e\0" /* offset 2320 */
  28610   "\x47\0" /* offset 2323 */
  28611   "\x48\0" /* offset 2325 */
  28612   "\x49\0" /* offset 2327 */
  28613   "\x4a\0" /* offset 2329 */
  28614   "\x4b\0" /* offset 2331 */
  28615   "\x4c\0" /* offset 2333 */
  28616   "\x4d\0" /* offset 2335 */
  28617   "\x4e\0" /* offset 2337 */
  28618   "\x4f\0" /* offset 2339 */
  28619   "\xc8\xa2\0" /* offset 2341 */
  28620   "\x50\0" /* offset 2344 */
  28621   "\x52\0" /* offset 2346 */
  28622   "\x54\0" /* offset 2348 */
  28623   "\x55\0" /* offset 2350 */
  28624   "\x57\0" /* offset 2352 */
  28625   "\xc9\x90\0" /* offset 2354 */
  28626   "\xc9\x91\0" /* offset 2357 */
  28627   "\xe1\xb4\x82\0" /* offset 2360 */
  28628   "\x62\0" /* offset 2364 */
  28629   "\x64\0" /* offset 2366 */
  28630   "\x65\0" /* offset 2368 */
  28631   "\xc9\x99\0" /* offset 2370 */
  28632   "\xc9\x9b\0" /* offset 2373 */
  28633   "\xc9\x9c\0" /* offset 2376 */
  28634   "\x67\0" /* offset 2379 */
  28635   "\x6b\0" /* offset 2381 */
  28636   "\x6d\0" /* offset 2383 */
  28637   "\xc5\x8b\0" /* offset 2385 */
  28638   "\xc9\x94\0" /* offset 2388 */
  28639   "\xe1\xb4\x96\0" /* offset 2391 */
  28640   "\xe1\xb4\x97\0" /* offset 2395 */
  28641   "\x70\0" /* offset 2399 */
  28642   "\x74\0" /* offset 2401 */
  28643   "\x75\0" /* offset 2403 */
  28644   "\xe1\xb4\x9d\0" /* offset 2405 */
  28645   "\xc9\xaf\0" /* offset 2409 */
  28646   "\x76\0" /* offset 2412 */
  28647   "\xe1\xb4\xa5\0" /* offset 2414 */
  28648   "\xce\xb3\0" /* offset 2418 */
  28649   "\xce\xb4\0" /* offset 2421 */
  28650   "\xcf\x87\0" /* offset 2424 */
  28651   "\x69\0" /* offset 2427 */
  28652   "\xd0\xbd\0" /* offset 2429 */
  28653   "\xc9\x92\0" /* offset 2432 */
  28654   "\x63\0" /* offset 2435 */
  28655   "\xc9\x95\0" /* offset 2437 */
  28656   "\xc3\xb0\0" /* offset 2440 */
  28657   "\x66\0" /* offset 2443 */
  28658   "\xc9\x9f\0" /* offset 2445 */
  28659   "\xc9\xa1\0" /* offset 2448 */
  28660   "\xc9\xa5\0" /* offset 2451 */
  28661   "\xc9\xa8\0" /* offset 2454 */
  28662   "\xc9\xa9\0" /* offset 2457 */
  28663   "\xc9\xaa\0" /* offset 2460 */
  28664   "\xe1\xb5\xbb\0" /* offset 2463 */
  28665   "\xca\x9d\0" /* offset 2467 */
  28666   "\xc9\xad\0" /* offset 2470 */
  28667   "\xe1\xb6\x85\0" /* offset 2473 */
  28668   "\xca\x9f\0" /* offset 2477 */
  28669   "\xc9\xb1\0" /* offset 2480 */
  28670   "\xc9\xb0\0" /* offset 2483 */
  28671   "\xc9\xb2\0" /* offset 2486 */
  28672   "\xc9\xb3\0" /* offset 2489 */
  28673   "\xc9\xb4\0" /* offset 2492 */
  28674   "\xc9\xb5\0" /* offset 2495 */
  28675   "\xc9\xb8\0" /* offset 2498 */
  28676   "\xca\x82\0" /* offset 2501 */
  28677   "\xca\x83\0" /* offset 2504 */
  28678   "\xc6\xab\0" /* offset 2507 */
  28679   "\xca\x89\0" /* offset 2510 */
  28680   "\xca\x8a\0" /* offset 2513 */
  28681   "\xe1\xb4\x9c\0" /* offset 2516 */
  28682   "\xca\x8b\0" /* offset 2520 */
  28683   "\xca\x8c\0" /* offset 2523 */
  28684   "\x7a\0" /* offset 2526 */
  28685   "\xca\x90\0" /* offset 2528 */
  28686   "\xca\x91\0" /* offset 2531 */
  28687   "\xca\x92\0" /* offset 2534 */
  28688   "\x41\xcc\xa5\0" /* offset 2537 */
  28689   "\x61\xcc\xa5\0" /* offset 2541 */
  28690   "\x42\xcc\x87\0" /* offset 2545 */
  28691   "\x62\xcc\x87\0" /* offset 2549 */
  28692   "\x42\xcc\xa3\0" /* offset 2553 */
  28693   "\x62\xcc\xa3\0" /* offset 2557 */
  28694   "\x42\xcc\xb1\0" /* offset 2561 */
  28695   "\x62\xcc\xb1\0" /* offset 2565 */
  28696   "\x43\xcc\xa7\xcc\x81\0" /* offset 2569 */
  28697   "\x63\xcc\xa7\xcc\x81\0" /* offset 2575 */
  28698   "\x44\xcc\x87\0" /* offset 2581 */
  28699   "\x64\xcc\x87\0" /* offset 2585 */
  28700   "\x44\xcc\xa3\0" /* offset 2589 */
  28701   "\x64\xcc\xa3\0" /* offset 2593 */
  28702   "\x44\xcc\xb1\0" /* offset 2597 */
  28703   "\x64\xcc\xb1\0" /* offset 2601 */
  28704   "\x44\xcc\xa7\0" /* offset 2605 */
  28705   "\x64\xcc\xa7\0" /* offset 2609 */
  28706   "\x44\xcc\xad\0" /* offset 2613 */
  28707   "\x64\xcc\xad\0" /* offset 2617 */
  28708   "\x45\xcc\x84\xcc\x80\0" /* offset 2621 */
  28709   "\x65\xcc\x84\xcc\x80\0" /* offset 2627 */
  28710   "\x45\xcc\x84\xcc\x81\0" /* offset 2633 */
  28711   "\x65\xcc\x84\xcc\x81\0" /* offset 2639 */
  28712   "\x45\xcc\xad\0" /* offset 2645 */
  28713   "\x65\xcc\xad\0" /* offset 2649 */
  28714   "\x45\xcc\xb0\0" /* offset 2653 */
  28715   "\x65\xcc\xb0\0" /* offset 2657 */
  28716   "\x45\xcc\xa7\xcc\x86\0" /* offset 2661 */
  28717   "\x65\xcc\xa7\xcc\x86\0" /* offset 2667 */
  28718   "\x46\xcc\x87\0" /* offset 2673 */
  28719   "\x66\xcc\x87\0" /* offset 2677 */
  28720   "\x47\xcc\x84\0" /* offset 2681 */
  28721   "\x67\xcc\x84\0" /* offset 2685 */
  28722   "\x48\xcc\x87\0" /* offset 2689 */
  28723   "\x68\xcc\x87\0" /* offset 2693 */
  28724   "\x48\xcc\xa3\0" /* offset 2697 */
  28725   "\x68\xcc\xa3\0" /* offset 2701 */
  28726   "\x48\xcc\x88\0" /* offset 2705 */
  28727   "\x68\xcc\x88\0" /* offset 2709 */
  28728   "\x48\xcc\xa7\0" /* offset 2713 */
  28729   "\x68\xcc\xa7\0" /* offset 2717 */
  28730   "\x48\xcc\xae\0" /* offset 2721 */
  28731   "\x68\xcc\xae\0" /* offset 2725 */
  28732   "\x49\xcc\xb0\0" /* offset 2729 */
  28733   "\x69\xcc\xb0\0" /* offset 2733 */
  28734   "\x49\xcc\x88\xcc\x81\0" /* offset 2737 */
  28735   "\x69\xcc\x88\xcc\x81\0" /* offset 2743 */
  28736   "\x4b\xcc\x81\0" /* offset 2749 */
  28737   "\x6b\xcc\x81\0" /* offset 2753 */
  28738   "\x4b\xcc\xa3\0" /* offset 2757 */
  28739   "\x6b\xcc\xa3\0" /* offset 2761 */
  28740   "\x4b\xcc\xb1\0" /* offset 2765 */
  28741   "\x6b\xcc\xb1\0" /* offset 2769 */
  28742   "\x4c\xcc\xa3\0" /* offset 2773 */
  28743   "\x6c\xcc\xa3\0" /* offset 2777 */
  28744   "\x4c\xcc\xa3\xcc\x84\0" /* offset 2781 */
  28745   "\x6c\xcc\xa3\xcc\x84\0" /* offset 2787 */
  28746   "\x4c\xcc\xb1\0" /* offset 2793 */
  28747   "\x6c\xcc\xb1\0" /* offset 2797 */
  28748   "\x4c\xcc\xad\0" /* offset 2801 */
  28749   "\x6c\xcc\xad\0" /* offset 2805 */
  28750   "\x4d\xcc\x81\0" /* offset 2809 */
  28751   "\x6d\xcc\x81\0" /* offset 2813 */
  28752   "\x4d\xcc\x87\0" /* offset 2817 */
  28753   "\x6d\xcc\x87\0" /* offset 2821 */
  28754   "\x4d\xcc\xa3\0" /* offset 2825 */
  28755   "\x6d\xcc\xa3\0" /* offset 2829 */
  28756   "\x4e\xcc\x87\0" /* offset 2833 */
  28757   "\x6e\xcc\x87\0" /* offset 2837 */
  28758   "\x4e\xcc\xa3\0" /* offset 2841 */
  28759   "\x6e\xcc\xa3\0" /* offset 2845 */
  28760   "\x4e\xcc\xb1\0" /* offset 2849 */
  28761   "\x6e\xcc\xb1\0" /* offset 2853 */
  28762   "\x4e\xcc\xad\0" /* offset 2857 */
  28763   "\x6e\xcc\xad\0" /* offset 2861 */
  28764   "\x4f\xcc\x83\xcc\x81\0" /* offset 2865 */
  28765   "\x6f\xcc\x83\xcc\x81\0" /* offset 2871 */
  28766   "\x4f\xcc\x83\xcc\x88\0" /* offset 2877 */
  28767   "\x6f\xcc\x83\xcc\x88\0" /* offset 2883 */
  28768   "\x4f\xcc\x84\xcc\x80\0" /* offset 2889 */
  28769   "\x6f\xcc\x84\xcc\x80\0" /* offset 2895 */
  28770   "\x4f\xcc\x84\xcc\x81\0" /* offset 2901 */
  28771   "\x6f\xcc\x84\xcc\x81\0" /* offset 2907 */
  28772   "\x50\xcc\x81\0" /* offset 2913 */
  28773   "\x70\xcc\x81\0" /* offset 2917 */
  28774   "\x50\xcc\x87\0" /* offset 2921 */
  28775   "\x70\xcc\x87\0" /* offset 2925 */
  28776   "\x52\xcc\x87\0" /* offset 2929 */
  28777   "\x72\xcc\x87\0" /* offset 2933 */
  28778   "\x52\xcc\xa3\0" /* offset 2937 */
  28779   "\x72\xcc\xa3\0" /* offset 2941 */
  28780   "\x52\xcc\xa3\xcc\x84\0" /* offset 2945 */
  28781   "\x72\xcc\xa3\xcc\x84\0" /* offset 2951 */
  28782   "\x52\xcc\xb1\0" /* offset 2957 */
  28783   "\x72\xcc\xb1\0" /* offset 2961 */
  28784   "\x53\xcc\x87\0" /* offset 2965 */
  28785   "\x73\xcc\x87\0" /* offset 2969 */
  28786   "\x53\xcc\xa3\0" /* offset 2973 */
  28787   "\x73\xcc\xa3\0" /* offset 2977 */
  28788   "\x53\xcc\x81\xcc\x87\0" /* offset 2981 */
  28789   "\x73\xcc\x81\xcc\x87\0" /* offset 2987 */
  28790   "\x53\xcc\x8c\xcc\x87\0" /* offset 2993 */
  28791   "\x73\xcc\x8c\xcc\x87\0" /* offset 2999 */
  28792   "\x53\xcc\xa3\xcc\x87\0" /* offset 3005 */
  28793   "\x73\xcc\xa3\xcc\x87\0" /* offset 3011 */
  28794   "\x54\xcc\x87\0" /* offset 3017 */
  28795   "\x74\xcc\x87\0" /* offset 3021 */
  28796   "\x54\xcc\xa3\0" /* offset 3025 */
  28797   "\x74\xcc\xa3\0" /* offset 3029 */
  28798   "\x54\xcc\xb1\0" /* offset 3033 */
  28799   "\x74\xcc\xb1\0" /* offset 3037 */
  28800   "\x54\xcc\xad\0" /* offset 3041 */
  28801   "\x74\xcc\xad\0" /* offset 3045 */
  28802   "\x55\xcc\xa4\0" /* offset 3049 */
  28803   "\x75\xcc\xa4\0" /* offset 3053 */
  28804   "\x55\xcc\xb0\0" /* offset 3057 */
  28805   "\x75\xcc\xb0\0" /* offset 3061 */
  28806   "\x55\xcc\xad\0" /* offset 3065 */
  28807   "\x75\xcc\xad\0" /* offset 3069 */
  28808   "\x55\xcc\x83\xcc\x81\0" /* offset 3073 */
  28809   "\x75\xcc\x83\xcc\x81\0" /* offset 3079 */
  28810   "\x55\xcc\x84\xcc\x88\0" /* offset 3085 */
  28811   "\x75\xcc\x84\xcc\x88\0" /* offset 3091 */
  28812   "\x56\xcc\x83\0" /* offset 3097 */
  28813   "\x76\xcc\x83\0" /* offset 3101 */
  28814   "\x56\xcc\xa3\0" /* offset 3105 */
  28815   "\x76\xcc\xa3\0" /* offset 3109 */
  28816   "\x57\xcc\x80\0" /* offset 3113 */
  28817   "\x77\xcc\x80\0" /* offset 3117 */
  28818   "\x57\xcc\x81\0" /* offset 3121 */
  28819   "\x77\xcc\x81\0" /* offset 3125 */
  28820   "\x57\xcc\x88\0" /* offset 3129 */
  28821   "\x77\xcc\x88\0" /* offset 3133 */
  28822   "\x57\xcc\x87\0" /* offset 3137 */
  28823   "\x77\xcc\x87\0" /* offset 3141 */
  28824   "\x57\xcc\xa3\0" /* offset 3145 */
  28825   "\x77\xcc\xa3\0" /* offset 3149 */
  28826   "\x58\xcc\x87\0" /* offset 3153 */
  28827   "\x78\xcc\x87\0" /* offset 3157 */
  28828   "\x58\xcc\x88\0" /* offset 3161 */
  28829   "\x78\xcc\x88\0" /* offset 3165 */
  28830   "\x59\xcc\x87\0" /* offset 3169 */
  28831   "\x79\xcc\x87\0" /* offset 3173 */
  28832   "\x5a\xcc\x82\0" /* offset 3177 */
  28833   "\x7a\xcc\x82\0" /* offset 3181 */
  28834   "\x5a\xcc\xa3\0" /* offset 3185 */
  28835   "\x7a\xcc\xa3\0" /* offset 3189 */
  28836   "\x5a\xcc\xb1\0" /* offset 3193 */
  28837   "\x7a\xcc\xb1\0" /* offset 3197 */
  28838   "\x68\xcc\xb1\0" /* offset 3201 */
  28839   "\x74\xcc\x88\0" /* offset 3205 */
  28840   "\x77\xcc\x8a\0" /* offset 3209 */
  28841   "\x79\xcc\x8a\0" /* offset 3213 */
  28842   "\x61\xca\xbe\0" /* offset 3217 */
  28843   "\xc5\xbf\xcc\x87\0" /* offset 3221 */
  28844   "\x41\xcc\xa3\0" /* offset 3226 */
  28845   "\x61\xcc\xa3\0" /* offset 3230 */
  28846   "\x41\xcc\x89\0" /* offset 3234 */
  28847   "\x61\xcc\x89\0" /* offset 3238 */
  28848   "\x41\xcc\x82\xcc\x81\0" /* offset 3242 */
  28849   "\x61\xcc\x82\xcc\x81\0" /* offset 3248 */
  28850   "\x41\xcc\x82\xcc\x80\0" /* offset 3254 */
  28851   "\x61\xcc\x82\xcc\x80\0" /* offset 3260 */
  28852   "\x41\xcc\x82\xcc\x89\0" /* offset 3266 */
  28853   "\x61\xcc\x82\xcc\x89\0" /* offset 3272 */
  28854   "\x41\xcc\x82\xcc\x83\0" /* offset 3278 */
  28855   "\x61\xcc\x82\xcc\x83\0" /* offset 3284 */
  28856   "\x41\xcc\xa3\xcc\x82\0" /* offset 3290 */
  28857   "\x61\xcc\xa3\xcc\x82\0" /* offset 3296 */
  28858   "\x41\xcc\x86\xcc\x81\0" /* offset 3302 */
  28859   "\x61\xcc\x86\xcc\x81\0" /* offset 3308 */
  28860   "\x41\xcc\x86\xcc\x80\0" /* offset 3314 */
  28861   "\x61\xcc\x86\xcc\x80\0" /* offset 3320 */
  28862   "\x41\xcc\x86\xcc\x89\0" /* offset 3326 */
  28863   "\x61\xcc\x86\xcc\x89\0" /* offset 3332 */
  28864   "\x41\xcc\x86\xcc\x83\0" /* offset 3338 */
  28865   "\x61\xcc\x86\xcc\x83\0" /* offset 3344 */
  28866   "\x41\xcc\xa3\xcc\x86\0" /* offset 3350 */
  28867   "\x61\xcc\xa3\xcc\x86\0" /* offset 3356 */
  28868   "\x45\xcc\xa3\0" /* offset 3362 */
  28869   "\x65\xcc\xa3\0" /* offset 3366 */
  28870   "\x45\xcc\x89\0" /* offset 3370 */
  28871   "\x65\xcc\x89\0" /* offset 3374 */
  28872   "\x45\xcc\x83\0" /* offset 3378 */
  28873   "\x65\xcc\x83\0" /* offset 3382 */
  28874   "\x45\xcc\x82\xcc\x81\0" /* offset 3386 */
  28875   "\x65\xcc\x82\xcc\x81\0" /* offset 3392 */
  28876   "\x45\xcc\x82\xcc\x80\0" /* offset 3398 */
  28877   "\x65\xcc\x82\xcc\x80\0" /* offset 3404 */
  28878   "\x45\xcc\x82\xcc\x89\0" /* offset 3410 */
  28879   "\x65\xcc\x82\xcc\x89\0" /* offset 3416 */
  28880   "\x45\xcc\x82\xcc\x83\0" /* offset 3422 */
  28881   "\x65\xcc\x82\xcc\x83\0" /* offset 3428 */
  28882   "\x45\xcc\xa3\xcc\x82\0" /* offset 3434 */
  28883   "\x65\xcc\xa3\xcc\x82\0" /* offset 3440 */
  28884   "\x49\xcc\x89\0" /* offset 3446 */
  28885   "\x69\xcc\x89\0" /* offset 3450 */
  28886   "\x49\xcc\xa3\0" /* offset 3454 */
  28887   "\x69\xcc\xa3\0" /* offset 3458 */
  28888   "\x4f\xcc\xa3\0" /* offset 3462 */
  28889   "\x6f\xcc\xa3\0" /* offset 3466 */
  28890   "\x4f\xcc\x89\0" /* offset 3470 */
  28891   "\x6f\xcc\x89\0" /* offset 3474 */
  28892   "\x4f\xcc\x82\xcc\x81\0" /* offset 3478 */
  28893   "\x6f\xcc\x82\xcc\x81\0" /* offset 3484 */
  28894   "\x4f\xcc\x82\xcc\x80\0" /* offset 3490 */
  28895   "\x6f\xcc\x82\xcc\x80\0" /* offset 3496 */
  28896   "\x4f\xcc\x82\xcc\x89\0" /* offset 3502 */
  28897   "\x6f\xcc\x82\xcc\x89\0" /* offset 3508 */
  28898   "\x4f\xcc\x82\xcc\x83\0" /* offset 3514 */
  28899   "\x6f\xcc\x82\xcc\x83\0" /* offset 3520 */
  28900   "\x4f\xcc\xa3\xcc\x82\0" /* offset 3526 */
  28901   "\x6f\xcc\xa3\xcc\x82\0" /* offset 3532 */
  28902   "\x4f\xcc\x9b\xcc\x81\0" /* offset 3538 */
  28903   "\x6f\xcc\x9b\xcc\x81\0" /* offset 3544 */
  28904   "\x4f\xcc\x9b\xcc\x80\0" /* offset 3550 */
  28905   "\x6f\xcc\x9b\xcc\x80\0" /* offset 3556 */
  28906   "\x4f\xcc\x9b\xcc\x89\0" /* offset 3562 */
  28907   "\x6f\xcc\x9b\xcc\x89\0" /* offset 3568 */
  28908   "\x4f\xcc\x9b\xcc\x83\0" /* offset 3574 */
  28909   "\x6f\xcc\x9b\xcc\x83\0" /* offset 3580 */
  28910   "\x4f\xcc\x9b\xcc\xa3\0" /* offset 3586 */
  28911   "\x6f\xcc\x9b\xcc\xa3\0" /* offset 3592 */
  28912   "\x55\xcc\xa3\0" /* offset 3598 */
  28913   "\x75\xcc\xa3\0" /* offset 3602 */
  28914   "\x55\xcc\x89\0" /* offset 3606 */
  28915   "\x75\xcc\x89\0" /* offset 3610 */
  28916   "\x55\xcc\x9b\xcc\x81\0" /* offset 3614 */
  28917   "\x75\xcc\x9b\xcc\x81\0" /* offset 3620 */
  28918   "\x55\xcc\x9b\xcc\x80\0" /* offset 3626 */
  28919   "\x75\xcc\x9b\xcc\x80\0" /* offset 3632 */
  28920   "\x55\xcc\x9b\xcc\x89\0" /* offset 3638 */
  28921   "\x75\xcc\x9b\xcc\x89\0" /* offset 3644 */
  28922   "\x55\xcc\x9b\xcc\x83\0" /* offset 3650 */
  28923   "\x75\xcc\x9b\xcc\x83\0" /* offset 3656 */
  28924   "\x55\xcc\x9b\xcc\xa3\0" /* offset 3662 */
  28925   "\x75\xcc\x9b\xcc\xa3\0" /* offset 3668 */
  28926   "\x59\xcc\x80\0" /* offset 3674 */
  28927   "\x79\xcc\x80\0" /* offset 3678 */
  28928   "\x59\xcc\xa3\0" /* offset 3682 */
  28929   "\x79\xcc\xa3\0" /* offset 3686 */
  28930   "\x59\xcc\x89\0" /* offset 3690 */
  28931   "\x79\xcc\x89\0" /* offset 3694 */
  28932   "\x59\xcc\x83\0" /* offset 3698 */
  28933   "\x79\xcc\x83\0" /* offset 3702 */
  28934   "\xce\xb1\xcc\x93\0" /* offset 3706 */
  28935   "\xce\xb1\xcc\x94\0" /* offset 3711 */
  28936   "\xce\xb1\xcc\x93\xcc\x80\0" /* offset 3716 */
  28937   "\xce\xb1\xcc\x94\xcc\x80\0" /* offset 3723 */
  28938   "\xce\xb1\xcc\x93\xcc\x81\0" /* offset 3730 */
  28939   "\xce\xb1\xcc\x94\xcc\x81\0" /* offset 3737 */
  28940   "\xce\xb1\xcc\x93\xcd\x82\0" /* offset 3744 */
  28941   "\xce\xb1\xcc\x94\xcd\x82\0" /* offset 3751 */
  28942   "\xce\x91\xcc\x93\0" /* offset 3758 */
  28943   "\xce\x91\xcc\x94\0" /* offset 3763 */
  28944   "\xce\x91\xcc\x93\xcc\x80\0" /* offset 3768 */
  28945   "\xce\x91\xcc\x94\xcc\x80\0" /* offset 3775 */
  28946   "\xce\x91\xcc\x93\xcc\x81\0" /* offset 3782 */
  28947   "\xce\x91\xcc\x94\xcc\x81\0" /* offset 3789 */
  28948   "\xce\x91\xcc\x93\xcd\x82\0" /* offset 3796 */
  28949   "\xce\x91\xcc\x94\xcd\x82\0" /* offset 3803 */
  28950   "\xce\xb5\xcc\x93\0" /* offset 3810 */
  28951   "\xce\xb5\xcc\x94\0" /* offset 3815 */
  28952   "\xce\xb5\xcc\x93\xcc\x80\0" /* offset 3820 */
  28953   "\xce\xb5\xcc\x94\xcc\x80\0" /* offset 3827 */
  28954   "\xce\xb5\xcc\x93\xcc\x81\0" /* offset 3834 */
  28955   "\xce\xb5\xcc\x94\xcc\x81\0" /* offset 3841 */
  28956   "\xce\x95\xcc\x93\0" /* offset 3848 */
  28957   "\xce\x95\xcc\x94\0" /* offset 3853 */
  28958   "\xce\x95\xcc\x93\xcc\x80\0" /* offset 3858 */
  28959   "\xce\x95\xcc\x94\xcc\x80\0" /* offset 3865 */
  28960   "\xce\x95\xcc\x93\xcc\x81\0" /* offset 3872 */
  28961   "\xce\x95\xcc\x94\xcc\x81\0" /* offset 3879 */
  28962   "\xce\xb7\xcc\x93\0" /* offset 3886 */
  28963   "\xce\xb7\xcc\x94\0" /* offset 3891 */
  28964   "\xce\xb7\xcc\x93\xcc\x80\0" /* offset 3896 */
  28965   "\xce\xb7\xcc\x94\xcc\x80\0" /* offset 3903 */
  28966   "\xce\xb7\xcc\x93\xcc\x81\0" /* offset 3910 */
  28967   "\xce\xb7\xcc\x94\xcc\x81\0" /* offset 3917 */
  28968   "\xce\xb7\xcc\x93\xcd\x82\0" /* offset 3924 */
  28969   "\xce\xb7\xcc\x94\xcd\x82\0" /* offset 3931 */
  28970   "\xce\x97\xcc\x93\0" /* offset 3938 */
  28971   "\xce\x97\xcc\x94\0" /* offset 3943 */
  28972   "\xce\x97\xcc\x93\xcc\x80\0" /* offset 3948 */
  28973   "\xce\x97\xcc\x94\xcc\x80\0" /* offset 3955 */
  28974   "\xce\x97\xcc\x93\xcc\x81\0" /* offset 3962 */
  28975   "\xce\x97\xcc\x94\xcc\x81\0" /* offset 3969 */
  28976   "\xce\x97\xcc\x93\xcd\x82\0" /* offset 3976 */
  28977   "\xce\x97\xcc\x94\xcd\x82\0" /* offset 3983 */
  28978   "\xce\xb9\xcc\x93\0" /* offset 3990 */
  28979   "\xce\xb9\xcc\x94\0" /* offset 3995 */
  28980   "\xce\xb9\xcc\x93\xcc\x80\0" /* offset 4000 */
  28981   "\xce\xb9\xcc\x94\xcc\x80\0" /* offset 4007 */
  28982   "\xce\xb9\xcc\x93\xcc\x81\0" /* offset 4014 */
  28983   "\xce\xb9\xcc\x94\xcc\x81\0" /* offset 4021 */
  28984   "\xce\xb9\xcc\x93\xcd\x82\0" /* offset 4028 */
  28985   "\xce\xb9\xcc\x94\xcd\x82\0" /* offset 4035 */
  28986   "\xce\x99\xcc\x93\0" /* offset 4042 */
  28987   "\xce\x99\xcc\x94\0" /* offset 4047 */
  28988   "\xce\x99\xcc\x93\xcc\x80\0" /* offset 4052 */
  28989   "\xce\x99\xcc\x94\xcc\x80\0" /* offset 4059 */
  28990   "\xce\x99\xcc\x93\xcc\x81\0" /* offset 4066 */
  28991   "\xce\x99\xcc\x94\xcc\x81\0" /* offset 4073 */
  28992   "\xce\x99\xcc\x93\xcd\x82\0" /* offset 4080 */
  28993   "\xce\x99\xcc\x94\xcd\x82\0" /* offset 4087 */
  28994   "\xce\xbf\xcc\x93\0" /* offset 4094 */
  28995   "\xce\xbf\xcc\x94\0" /* offset 4099 */
  28996   "\xce\xbf\xcc\x93\xcc\x80\0" /* offset 4104 */
  28997   "\xce\xbf\xcc\x94\xcc\x80\0" /* offset 4111 */
  28998   "\xce\xbf\xcc\x93\xcc\x81\0" /* offset 4118 */
  28999   "\xce\xbf\xcc\x94\xcc\x81\0" /* offset 4125 */
  29000   "\xce\x9f\xcc\x93\0" /* offset 4132 */
  29001   "\xce\x9f\xcc\x94\0" /* offset 4137 */
  29002   "\xce\x9f\xcc\x93\xcc\x80\0" /* offset 4142 */
  29003   "\xce\x9f\xcc\x94\xcc\x80\0" /* offset 4149 */
  29004   "\xce\x9f\xcc\x93\xcc\x81\0" /* offset 4156 */
  29005   "\xce\x9f\xcc\x94\xcc\x81\0" /* offset 4163 */
  29006   "\xcf\x85\xcc\x93\0" /* offset 4170 */
  29007   "\xcf\x85\xcc\x94\0" /* offset 4175 */
  29008   "\xcf\x85\xcc\x93\xcc\x80\0" /* offset 4180 */
  29009   "\xcf\x85\xcc\x94\xcc\x80\0" /* offset 4187 */
  29010   "\xcf\x85\xcc\x93\xcc\x81\0" /* offset 4194 */
  29011   "\xcf\x85\xcc\x94\xcc\x81\0" /* offset 4201 */
  29012   "\xcf\x85\xcc\x93\xcd\x82\0" /* offset 4208 */
  29013   "\xcf\x85\xcc\x94\xcd\x82\0" /* offset 4215 */
  29014   "\xce\xa5\xcc\x94\0" /* offset 4222 */
  29015   "\xce\xa5\xcc\x94\xcc\x80\0" /* offset 4227 */
  29016   "\xce\xa5\xcc\x94\xcc\x81\0" /* offset 4234 */
  29017   "\xce\xa5\xcc\x94\xcd\x82\0" /* offset 4241 */
  29018   "\xcf\x89\xcc\x93\0" /* offset 4248 */
  29019   "\xcf\x89\xcc\x94\0" /* offset 4253 */
  29020   "\xcf\x89\xcc\x93\xcc\x80\0" /* offset 4258 */
  29021   "\xcf\x89\xcc\x94\xcc\x80\0" /* offset 4265 */
  29022   "\xcf\x89\xcc\x93\xcc\x81\0" /* offset 4272 */
  29023   "\xcf\x89\xcc\x94\xcc\x81\0" /* offset 4279 */
  29024   "\xcf\x89\xcc\x93\xcd\x82\0" /* offset 4286 */
  29025   "\xcf\x89\xcc\x94\xcd\x82\0" /* offset 4293 */
  29026   "\xce\xa9\xcc\x93\0" /* offset 4300 */
  29027   "\xce\xa9\xcc\x94\0" /* offset 4305 */
  29028   "\xce\xa9\xcc\x93\xcc\x80\0" /* offset 4310 */
  29029   "\xce\xa9\xcc\x94\xcc\x80\0" /* offset 4317 */
  29030   "\xce\xa9\xcc\x93\xcc\x81\0" /* offset 4324 */
  29031   "\xce\xa9\xcc\x94\xcc\x81\0" /* offset 4331 */
  29032   "\xce\xa9\xcc\x93\xcd\x82\0" /* offset 4338 */
  29033   "\xce\xa9\xcc\x94\xcd\x82\0" /* offset 4345 */
  29034   "\xce\xb1\xcc\x80\0" /* offset 4352 */
  29035   "\xce\xb5\xcc\x80\0" /* offset 4357 */
  29036   "\xce\xb7\xcc\x80\0" /* offset 4362 */
  29037   "\xce\xb9\xcc\x80\0" /* offset 4367 */
  29038   "\xce\xbf\xcc\x80\0" /* offset 4372 */
  29039   "\xcf\x85\xcc\x80\0" /* offset 4377 */
  29040   "\xcf\x89\xcc\x80\0" /* offset 4382 */
  29041   "\xce\xb1\xcc\x93\xcd\x85\0" /* offset 4387 */
  29042   "\xce\xb1\xcc\x94\xcd\x85\0" /* offset 4394 */
  29043   "\xce\xb1\xcc\x93\xcc\x80\xcd\x85\0" /* offset 4401 */
  29044   "\xce\xb1\xcc\x94\xcc\x80\xcd\x85\0" /* offset 4410 */
  29045   "\xce\xb1\xcc\x93\xcc\x81\xcd\x85\0" /* offset 4419 */
  29046   "\xce\xb1\xcc\x94\xcc\x81\xcd\x85\0" /* offset 4428 */
  29047   "\xce\xb1\xcc\x93\xcd\x82\xcd\x85\0" /* offset 4437 */
  29048   "\xce\xb1\xcc\x94\xcd\x82\xcd\x85\0" /* offset 4446 */
  29049   "\xce\x91\xcc\x93\xcd\x85\0" /* offset 4455 */
  29050   "\xce\x91\xcc\x94\xcd\x85\0" /* offset 4462 */
  29051   "\xce\x91\xcc\x93\xcc\x80\xcd\x85\0" /* offset 4469 */
  29052   "\xce\x91\xcc\x94\xcc\x80\xcd\x85\0" /* offset 4478 */
  29053   "\xce\x91\xcc\x93\xcc\x81\xcd\x85\0" /* offset 4487 */
  29054   "\xce\x91\xcc\x94\xcc\x81\xcd\x85\0" /* offset 4496 */
  29055   "\xce\x91\xcc\x93\xcd\x82\xcd\x85\0" /* offset 4505 */
  29056   "\xce\x91\xcc\x94\xcd\x82\xcd\x85\0" /* offset 4514 */
  29057   "\xce\xb7\xcc\x93\xcd\x85\0" /* offset 4523 */
  29058   "\xce\xb7\xcc\x94\xcd\x85\0" /* offset 4530 */
  29059   "\xce\xb7\xcc\x93\xcc\x80\xcd\x85\0" /* offset 4537 */
  29060   "\xce\xb7\xcc\x94\xcc\x80\xcd\x85\0" /* offset 4546 */
  29061   "\xce\xb7\xcc\x93\xcc\x81\xcd\x85\0" /* offset 4555 */
  29062   "\xce\xb7\xcc\x94\xcc\x81\xcd\x85\0" /* offset 4564 */
  29063   "\xce\xb7\xcc\x93\xcd\x82\xcd\x85\0" /* offset 4573 */
  29064   "\xce\xb7\xcc\x94\xcd\x82\xcd\x85\0" /* offset 4582 */
  29065   "\xce\x97\xcc\x93\xcd\x85\0" /* offset 4591 */
  29066   "\xce\x97\xcc\x94\xcd\x85\0" /* offset 4598 */
  29067   "\xce\x97\xcc\x93\xcc\x80\xcd\x85\0" /* offset 4605 */
  29068   "\xce\x97\xcc\x94\xcc\x80\xcd\x85\0" /* offset 4614 */
  29069   "\xce\x97\xcc\x93\xcc\x81\xcd\x85\0" /* offset 4623 */
  29070   "\xce\x97\xcc\x94\xcc\x81\xcd\x85\0" /* offset 4632 */
  29071   "\xce\x97\xcc\x93\xcd\x82\xcd\x85\0" /* offset 4641 */
  29072   "\xce\x97\xcc\x94\xcd\x82\xcd\x85\0" /* offset 4650 */
  29073   "\xcf\x89\xcc\x93\xcd\x85\0" /* offset 4659 */
  29074   "\xcf\x89\xcc\x94\xcd\x85\0" /* offset 4666 */
  29075   "\xcf\x89\xcc\x93\xcc\x80\xcd\x85\0" /* offset 4673 */
  29076   "\xcf\x89\xcc\x94\xcc\x80\xcd\x85\0" /* offset 4682 */
  29077   "\xcf\x89\xcc\x93\xcc\x81\xcd\x85\0" /* offset 4691 */
  29078   "\xcf\x89\xcc\x94\xcc\x81\xcd\x85\0" /* offset 4700 */
  29079   "\xcf\x89\xcc\x93\xcd\x82\xcd\x85\0" /* offset 4709 */
  29080   "\xcf\x89\xcc\x94\xcd\x82\xcd\x85\0" /* offset 4718 */
  29081   "\xce\xa9\xcc\x93\xcd\x85\0" /* offset 4727 */
  29082   "\xce\xa9\xcc\x94\xcd\x85\0" /* offset 4734 */
  29083   "\xce\xa9\xcc\x93\xcc\x80\xcd\x85\0" /* offset 4741 */
  29084   "\xce\xa9\xcc\x94\xcc\x80\xcd\x85\0" /* offset 4750 */
  29085   "\xce\xa9\xcc\x93\xcc\x81\xcd\x85\0" /* offset 4759 */
  29086   "\xce\xa9\xcc\x94\xcc\x81\xcd\x85\0" /* offset 4768 */
  29087   "\xce\xa9\xcc\x93\xcd\x82\xcd\x85\0" /* offset 4777 */
  29088   "\xce\xa9\xcc\x94\xcd\x82\xcd\x85\0" /* offset 4786 */
  29089   "\xce\xb1\xcc\x86\0" /* offset 4795 */
  29090   "\xce\xb1\xcc\x84\0" /* offset 4800 */
  29091   "\xce\xb1\xcc\x80\xcd\x85\0" /* offset 4805 */
  29092   "\xce\xb1\xcd\x85\0" /* offset 4812 */
  29093   "\xce\xb1\xcc\x81\xcd\x85\0" /* offset 4817 */
  29094   "\xce\xb1\xcd\x82\0" /* offset 4824 */
  29095   "\xce\xb1\xcd\x82\xcd\x85\0" /* offset 4829 */
  29096   "\xce\x91\xcc\x86\0" /* offset 4836 */
  29097   "\xce\x91\xcc\x84\0" /* offset 4841 */
  29098   "\xce\x91\xcc\x80\0" /* offset 4846 */
  29099   "\xce\x91\xcd\x85\0" /* offset 4851 */
  29100   "\x20\xcc\x93\0" /* offset 4856 */
  29101   "\xce\xb9\0" /* offset 4860 */
  29102   "\x20\xcd\x82\0" /* offset 4863 */
  29103   "\xc2\xa8\xcd\x82\0" /* offset 4867 */
  29104   "\x20\xcc\x88\xcd\x82\0" /* offset 4872 */
  29105   "\xce\xb7\xcc\x80\xcd\x85\0" /* offset 4878 */
  29106   "\xce\xb7\xcd\x85\0" /* offset 4885 */
  29107   "\xce\xb7\xcc\x81\xcd\x85\0" /* offset 4890 */
  29108   "\xce\xb7\xcd\x82\0" /* offset 4897 */
  29109   "\xce\xb7\xcd\x82\xcd\x85\0" /* offset 4902 */
  29110   "\xce\x95\xcc\x80\0" /* offset 4909 */
  29111   "\xce\x97\xcc\x80\0" /* offset 4914 */
  29112   "\xce\x97\xcd\x85\0" /* offset 4919 */
  29113   "\xe1\xbe\xbf\xcc\x80\0" /* offset 4924 */
  29114   "\x20\xcc\x93\xcc\x80\0" /* offset 4930 */
  29115   "\xe1\xbe\xbf\xcc\x81\0" /* offset 4936 */
  29116   "\x20\xcc\x93\xcc\x81\0" /* offset 4942 */
  29117   "\xe1\xbe\xbf\xcd\x82\0" /* offset 4948 */
  29118   "\x20\xcc\x93\xcd\x82\0" /* offset 4954 */
  29119   "\xce\xb9\xcc\x86\0" /* offset 4960 */
  29120   "\xce\xb9\xcc\x84\0" /* offset 4965 */
  29121   "\xce\xb9\xcc\x88\xcc\x80\0" /* offset 4970 */
  29122   "\xce\xb9\xcd\x82\0" /* offset 4977 */
  29123   "\xce\xb9\xcc\x88\xcd\x82\0" /* offset 4982 */
  29124   "\xce\x99\xcc\x86\0" /* offset 4989 */
  29125   "\xce\x99\xcc\x84\0" /* offset 4994 */
  29126   "\xce\x99\xcc\x80\0" /* offset 4999 */
  29127   "\xe1\xbf\xbe\xcc\x80\0" /* offset 5004 */
  29128   "\x20\xcc\x94\xcc\x80\0" /* offset 5010 */
  29129   "\xe1\xbf\xbe\xcc\x81\0" /* offset 5016 */
  29130   "\x20\xcc\x94\xcc\x81\0" /* offset 5022 */
  29131   "\xe1\xbf\xbe\xcd\x82\0" /* offset 5028 */
  29132   "\x20\xcc\x94\xcd\x82\0" /* offset 5034 */
  29133   "\xcf\x85\xcc\x86\0" /* offset 5040 */
  29134   "\xcf\x85\xcc\x84\0" /* offset 5045 */
  29135   "\xcf\x85\xcc\x88\xcc\x80\0" /* offset 5050 */
  29136   "\xcf\x81\xcc\x93\0" /* offset 5057 */
  29137   "\xcf\x81\xcc\x94\0" /* offset 5062 */
  29138   "\xcf\x85\xcd\x82\0" /* offset 5067 */
  29139   "\xcf\x85\xcc\x88\xcd\x82\0" /* offset 5072 */
  29140   "\xce\xa5\xcc\x86\0" /* offset 5079 */
  29141   "\xce\xa5\xcc\x84\0" /* offset 5084 */
  29142   "\xce\xa5\xcc\x80\0" /* offset 5089 */
  29143   "\xce\xa1\xcc\x94\0" /* offset 5094 */
  29144   "\xc2\xa8\xcc\x80\0" /* offset 5099 */
  29145   "\x20\xcc\x88\xcc\x80\0" /* offset 5104 */
  29146   "\x60\0" /* offset 5110 */
  29147   "\xcf\x89\xcc\x80\xcd\x85\0" /* offset 5112 */
  29148   "\xcf\x89\xcd\x85\0" /* offset 5119 */
  29149   "\xcf\x89\xcc\x81\xcd\x85\0" /* offset 5124 */
  29150   "\xcf\x89\xcd\x82\0" /* offset 5131 */
  29151   "\xcf\x89\xcd\x82\xcd\x85\0" /* offset 5136 */
  29152   "\xce\x9f\xcc\x80\0" /* offset 5143 */
  29153   "\xce\xa9\xcc\x80\0" /* offset 5148 */
  29154   "\xce\xa9\xcd\x85\0" /* offset 5153 */
  29155   "\xc2\xb4\0" /* offset 5158 */
  29156   "\x20\xcc\x94\0" /* offset 5161 */
  29157   "\xe2\x80\x82\0" /* offset 5165 */
  29158   "\xe2\x80\x83\0" /* offset 5169 */
  29159   "\xe2\x80\x90\0" /* offset 5173 */
  29160   "\x20\xcc\xb3\0" /* offset 5177 */
  29161   "\x2e\0" /* offset 5181 */
  29162   "\x2e\x2e\0" /* offset 5183 */
  29163   "\x2e\x2e\x2e\0" /* offset 5186 */
  29164   "\xe2\x80\xb2\xe2\x80\xb2\0" /* offset 5190 */
  29165   "\xe2\x80\xb2\xe2\x80\xb2\xe2\x80\xb2\0" /* offset 5197 */
  29166   "\xe2\x80\xb5\xe2\x80\xb5\0" /* offset 5207 */
  29167   "\xe2\x80\xb5\xe2\x80\xb5\xe2\x80\xb5\0" /* offset 5214 */
  29168   "\x21\x21\0" /* offset 5224 */
  29169   "\x20\xcc\x85\0" /* offset 5227 */
  29170   "\x3f\x3f\0" /* offset 5231 */
  29171   "\x3f\x21\0" /* offset 5234 */
  29172   "\x21\x3f\0" /* offset 5237 */
  29173   "\xe2\x80\xb2\xe2\x80\xb2\xe2\x80\xb2\xe2\x80\xb2\0" /* offset 5240 */
  29174   "\x30\0" /* offset 5253 */
  29175   "\x34\0" /* offset 5255 */
  29176   "\x35\0" /* offset 5257 */
  29177   "\x36\0" /* offset 5259 */
  29178   "\x37\0" /* offset 5261 */
  29179   "\x38\0" /* offset 5263 */
  29180   "\x39\0" /* offset 5265 */
  29181   "\x2b\0" /* offset 5267 */
  29182   "\xe2\x88\x92\0" /* offset 5269 */
  29183   "\x3d\0" /* offset 5273 */
  29184   "\x28\0" /* offset 5275 */
  29185   "\x29\0" /* offset 5277 */
  29186   "\x6e\0" /* offset 5279 */
  29187   "\x52\x73\0" /* offset 5281 */
  29188   "\x61\x2f\x63\0" /* offset 5284 */
  29189   "\x61\x2f\x73\0" /* offset 5288 */
  29190   "\x43\0" /* offset 5292 */
  29191   "\xc2\xb0\x43\0" /* offset 5294 */
  29192   "\x63\x2f\x6f\0" /* offset 5298 */
  29193   "\x63\x2f\x75\0" /* offset 5302 */
  29194   "\xc6\x90\0" /* offset 5306 */
  29195   "\xc2\xb0\x46\0" /* offset 5309 */
  29196   "\xc4\xa7\0" /* offset 5313 */
  29197   "\x4e\x6f\0" /* offset 5316 */
  29198   "\x51\0" /* offset 5319 */
  29199   "\x53\x4d\0" /* offset 5321 */
  29200   "\x54\x45\x4c\0" /* offset 5324 */
  29201   "\x54\x4d\0" /* offset 5328 */
  29202   "\x5a\0" /* offset 5331 */
  29203   "\xce\xa9\0" /* offset 5333 */
  29204   "\x46\0" /* offset 5336 */
  29205   "\xd7\x90\0" /* offset 5338 */
  29206   "\xd7\x91\0" /* offset 5341 */
  29207   "\xd7\x92\0" /* offset 5344 */
  29208   "\xd7\x93\0" /* offset 5347 */
  29209   "\x46\x41\x58\0" /* offset 5350 */
  29210   "\xce\x93\0" /* offset 5354 */
  29211   "\xce\xa0\0" /* offset 5357 */
  29212   "\xe2\x88\x91\0" /* offset 5360 */
  29213   "\x31\xe2\x81\x84\x37\0" /* offset 5364 */
  29214   "\x31\xe2\x81\x84\x39\0" /* offset 5370 */
  29215   "\x31\xe2\x81\x84\x31\x30\0" /* offset 5376 */
  29216   "\x31\xe2\x81\x84\x33\0" /* offset 5383 */
  29217   "\x32\xe2\x81\x84\x33\0" /* offset 5389 */
  29218   "\x31\xe2\x81\x84\x35\0" /* offset 5395 */
  29219   "\x32\xe2\x81\x84\x35\0" /* offset 5401 */
  29220   "\x33\xe2\x81\x84\x35\0" /* offset 5407 */
  29221   "\x34\xe2\x81\x84\x35\0" /* offset 5413 */
  29222   "\x31\xe2\x81\x84\x36\0" /* offset 5419 */
  29223   "\x35\xe2\x81\x84\x36\0" /* offset 5425 */
  29224   "\x31\xe2\x81\x84\x38\0" /* offset 5431 */
  29225   "\x33\xe2\x81\x84\x38\0" /* offset 5437 */
  29226   "\x35\xe2\x81\x84\x38\0" /* offset 5443 */
  29227   "\x37\xe2\x81\x84\x38\0" /* offset 5449 */
  29228   "\x31\xe2\x81\x84\0" /* offset 5455 */
  29229   "\x49\x49\0" /* offset 5460 */
  29230   "\x49\x49\x49\0" /* offset 5463 */
  29231   "\x49\x56\0" /* offset 5467 */
  29232   "\x56\0" /* offset 5470 */
  29233   "\x56\x49\0" /* offset 5472 */
  29234   "\x56\x49\x49\0" /* offset 5475 */
  29235   "\x56\x49\x49\x49\0" /* offset 5479 */
  29236   "\x49\x58\0" /* offset 5484 */
  29237   "\x58\0" /* offset 5487 */
  29238   "\x58\x49\0" /* offset 5489 */
  29239   "\x58\x49\x49\0" /* offset 5492 */
  29240   "\x69\x69\0" /* offset 5496 */
  29241   "\x69\x69\x69\0" /* offset 5499 */
  29242   "\x69\x76\0" /* offset 5503 */
  29243   "\x76\x69\0" /* offset 5506 */
  29244   "\x76\x69\x69\0" /* offset 5509 */
  29245   "\x76\x69\x69\x69\0" /* offset 5513 */
  29246   "\x69\x78\0" /* offset 5518 */
  29247   "\x78\x69\0" /* offset 5521 */
  29248   "\x78\x69\x69\0" /* offset 5524 */
  29249   "\x30\xe2\x81\x84\x33\0" /* offset 5528 */
  29250   "\xe2\x86\x90\xcc\xb8\0" /* offset 5534 */
  29251   "\xe2\x86\x92\xcc\xb8\0" /* offset 5540 */
  29252   "\xe2\x86\x94\xcc\xb8\0" /* offset 5546 */
  29253   "\xe2\x87\x90\xcc\xb8\0" /* offset 5552 */
  29254   "\xe2\x87\x94\xcc\xb8\0" /* offset 5558 */
  29255   "\xe2\x87\x92\xcc\xb8\0" /* offset 5564 */
  29256   "\xe2\x88\x83\xcc\xb8\0" /* offset 5570 */
  29257   "\xe2\x88\x88\xcc\xb8\0" /* offset 5576 */
  29258   "\xe2\x88\x8b\xcc\xb8\0" /* offset 5582 */
  29259   "\xe2\x88\xa3\xcc\xb8\0" /* offset 5588 */
  29260   "\xe2\x88\xa5\xcc\xb8\0" /* offset 5594 */
  29261   "\xe2\x88\xab\xe2\x88\xab\0" /* offset 5600 */
  29262   "\xe2\x88\xab\xe2\x88\xab\xe2\x88\xab\0" /* offset 5607 */
  29263   "\xe2\x88\xae\xe2\x88\xae\0" /* offset 5617 */
  29264   "\xe2\x88\xae\xe2\x88\xae\xe2\x88\xae\0" /* offset 5624 */
  29265   "\xe2\x88\xbc\xcc\xb8\0" /* offset 5634 */
  29266   "\xe2\x89\x83\xcc\xb8\0" /* offset 5640 */
  29267   "\xe2\x89\x85\xcc\xb8\0" /* offset 5646 */
  29268   "\xe2\x89\x88\xcc\xb8\0" /* offset 5652 */
  29269   "\x3d\xcc\xb8\0" /* offset 5658 */
  29270   "\xe2\x89\xa1\xcc\xb8\0" /* offset 5662 */
  29271   "\xe2\x89\x8d\xcc\xb8\0" /* offset 5668 */
  29272   "\x3c\xcc\xb8\0" /* offset 5674 */
  29273   "\x3e\xcc\xb8\0" /* offset 5678 */
  29274   "\xe2\x89\xa4\xcc\xb8\0" /* offset 5682 */
  29275   "\xe2\x89\xa5\xcc\xb8\0" /* offset 5688 */
  29276   "\xe2\x89\xb2\xcc\xb8\0" /* offset 5694 */
  29277   "\xe2\x89\xb3\xcc\xb8\0" /* offset 5700 */
  29278   "\xe2\x89\xb6\xcc\xb8\0" /* offset 5706 */
  29279   "\xe2\x89\xb7\xcc\xb8\0" /* offset 5712 */
  29280   "\xe2\x89\xba\xcc\xb8\0" /* offset 5718 */
  29281   "\xe2\x89\xbb\xcc\xb8\0" /* offset 5724 */
  29282   "\xe2\x8a\x82\xcc\xb8\0" /* offset 5730 */
  29283   "\xe2\x8a\x83\xcc\xb8\0" /* offset 5736 */
  29284   "\xe2\x8a\x86\xcc\xb8\0" /* offset 5742 */
  29285   "\xe2\x8a\x87\xcc\xb8\0" /* offset 5748 */
  29286   "\xe2\x8a\xa2\xcc\xb8\0" /* offset 5754 */
  29287   "\xe2\x8a\xa8\xcc\xb8\0" /* offset 5760 */
  29288   "\xe2\x8a\xa9\xcc\xb8\0" /* offset 5766 */
  29289   "\xe2\x8a\xab\xcc\xb8\0" /* offset 5772 */
  29290   "\xe2\x89\xbc\xcc\xb8\0" /* offset 5778 */
  29291   "\xe2\x89\xbd\xcc\xb8\0" /* offset 5784 */
  29292   "\xe2\x8a\x91\xcc\xb8\0" /* offset 5790 */
  29293   "\xe2\x8a\x92\xcc\xb8\0" /* offset 5796 */
  29294   "\xe2\x8a\xb2\xcc\xb8\0" /* offset 5802 */
  29295   "\xe2\x8a\xb3\xcc\xb8\0" /* offset 5808 */
  29296   "\xe2\x8a\xb4\xcc\xb8\0" /* offset 5814 */
  29297   "\xe2\x8a\xb5\xcc\xb8\0" /* offset 5820 */
  29298   "\xe3\x80\x88\0" /* offset 5826 */
  29299   "\xe3\x80\x89\0" /* offset 5830 */
  29300   "\x31\x30\0" /* offset 5834 */
  29301   "\x31\x31\0" /* offset 5837 */
  29302   "\x31\x32\0" /* offset 5840 */
  29303   "\x31\x33\0" /* offset 5843 */
  29304   "\x31\x34\0" /* offset 5846 */
  29305   "\x31\x35\0" /* offset 5849 */
  29306   "\x31\x36\0" /* offset 5852 */
  29307   "\x31\x37\0" /* offset 5855 */
  29308   "\x31\x38\0" /* offset 5858 */
  29309   "\x31\x39\0" /* offset 5861 */
  29310   "\x32\x30\0" /* offset 5864 */
  29311   "\x28\x31\x29\0" /* offset 5867 */
  29312   "\x28\x32\x29\0" /* offset 5871 */
  29313   "\x28\x33\x29\0" /* offset 5875 */
  29314   "\x28\x34\x29\0" /* offset 5879 */
  29315   "\x28\x35\x29\0" /* offset 5883 */
  29316   "\x28\x36\x29\0" /* offset 5887 */
  29317   "\x28\x37\x29\0" /* offset 5891 */
  29318   "\x28\x38\x29\0" /* offset 5895 */
  29319   "\x28\x39\x29\0" /* offset 5899 */
  29320   "\x28\x31\x30\x29\0" /* offset 5903 */
  29321   "\x28\x31\x31\x29\0" /* offset 5908 */
  29322   "\x28\x31\x32\x29\0" /* offset 5913 */
  29323   "\x28\x31\x33\x29\0" /* offset 5918 */
  29324   "\x28\x31\x34\x29\0" /* offset 5923 */
  29325   "\x28\x31\x35\x29\0" /* offset 5928 */
  29326   "\x28\x31\x36\x29\0" /* offset 5933 */
  29327   "\x28\x31\x37\x29\0" /* offset 5938 */
  29328   "\x28\x31\x38\x29\0" /* offset 5943 */
  29329   "\x28\x31\x39\x29\0" /* offset 5948 */
  29330   "\x28\x32\x30\x29\0" /* offset 5953 */
  29331   "\x31\x2e\0" /* offset 5958 */
  29332   "\x32\x2e\0" /* offset 5961 */
  29333   "\x33\x2e\0" /* offset 5964 */
  29334   "\x34\x2e\0" /* offset 5967 */
  29335   "\x35\x2e\0" /* offset 5970 */
  29336   "\x36\x2e\0" /* offset 5973 */
  29337   "\x37\x2e\0" /* offset 5976 */
  29338   "\x38\x2e\0" /* offset 5979 */
  29339   "\x39\x2e\0" /* offset 5982 */
  29340   "\x31\x30\x2e\0" /* offset 5985 */
  29341   "\x31\x31\x2e\0" /* offset 5989 */
  29342   "\x31\x32\x2e\0" /* offset 5993 */
  29343   "\x31\x33\x2e\0" /* offset 5997 */
  29344   "\x31\x34\x2e\0" /* offset 6001 */
  29345   "\x31\x35\x2e\0" /* offset 6005 */
  29346   "\x31\x36\x2e\0" /* offset 6009 */
  29347   "\x31\x37\x2e\0" /* offset 6013 */
  29348   "\x31\x38\x2e\0" /* offset 6017 */
  29349   "\x31\x39\x2e\0" /* offset 6021 */
  29350   "\x32\x30\x2e\0" /* offset 6025 */
  29351   "\x28\x61\x29\0" /* offset 6029 */
  29352   "\x28\x62\x29\0" /* offset 6033 */
  29353   "\x28\x63\x29\0" /* offset 6037 */
  29354   "\x28\x64\x29\0" /* offset 6041 */
  29355   "\x28\x65\x29\0" /* offset 6045 */
  29356   "\x28\x66\x29\0" /* offset 6049 */
  29357   "\x28\x67\x29\0" /* offset 6053 */
  29358   "\x28\x68\x29\0" /* offset 6057 */
  29359   "\x28\x69\x29\0" /* offset 6061 */
  29360   "\x28\x6a\x29\0" /* offset 6065 */
  29361   "\x28\x6b\x29\0" /* offset 6069 */
  29362   "\x28\x6c\x29\0" /* offset 6073 */
  29363   "\x28\x6d\x29\0" /* offset 6077 */
  29364   "\x28\x6e\x29\0" /* offset 6081 */
  29365   "\x28\x6f\x29\0" /* offset 6085 */
  29366   "\x28\x70\x29\0" /* offset 6089 */
  29367   "\x28\x71\x29\0" /* offset 6093 */
  29368   "\x28\x72\x29\0" /* offset 6097 */
  29369   "\x28\x73\x29\0" /* offset 6101 */
  29370   "\x28\x74\x29\0" /* offset 6105 */
  29371   "\x28\x75\x29\0" /* offset 6109 */
  29372   "\x28\x76\x29\0" /* offset 6113 */
  29373   "\x28\x77\x29\0" /* offset 6117 */
  29374   "\x28\x78\x29\0" /* offset 6121 */
  29375   "\x28\x79\x29\0" /* offset 6125 */
  29376   "\x28\x7a\x29\0" /* offset 6129 */
  29377   "\x53\0" /* offset 6133 */
  29378   "\x59\0" /* offset 6135 */
  29379   "\x71\0" /* offset 6137 */
  29380   "\xe2\x88\xab\xe2\x88\xab\xe2\x88\xab\xe2\x88\xab\0" /* offset 6139 */
  29381   "\x3a\x3a\x3d\0" /* offset 6152 */
  29382   "\x3d\x3d\0" /* offset 6156 */
  29383   "\x3d\x3d\x3d\0" /* offset 6159 */
  29384   "\xe2\xab\x9d\xcc\xb8\0" /* offset 6163 */
  29385   "\xe2\xb5\xa1\0" /* offset 6169 */
  29386   "\xe6\xaf\x8d\0" /* offset 6173 */
  29387   "\xe9\xbe\x9f\0" /* offset 6177 */
  29388   "\xe4\xb8\x80\0" /* offset 6181 */
  29389   "\xe4\xb8\xa8\0" /* offset 6185 */
  29390   "\xe4\xb8\xb6\0" /* offset 6189 */
  29391   "\xe4\xb8\xbf\0" /* offset 6193 */
  29392   "\xe4\xb9\x99\0" /* offset 6197 */
  29393   "\xe4\xba\x85\0" /* offset 6201 */
  29394   "\xe4\xba\x8c\0" /* offset 6205 */
  29395   "\xe4\xba\xa0\0" /* offset 6209 */
  29396   "\xe4\xba\xba\0" /* offset 6213 */
  29397   "\xe5\x84\xbf\0" /* offset 6217 */
  29398   "\xe5\x85\xa5\0" /* offset 6221 */
  29399   "\xe5\x85\xab\0" /* offset 6225 */
  29400   "\xe5\x86\x82\0" /* offset 6229 */
  29401   "\xe5\x86\x96\0" /* offset 6233 */
  29402   "\xe5\x86\xab\0" /* offset 6237 */
  29403   "\xe5\x87\xa0\0" /* offset 6241 */
  29404   "\xe5\x87\xb5\0" /* offset 6245 */
  29405   "\xe5\x88\x80\0" /* offset 6249 */
  29406   "\xe5\x8a\x9b\0" /* offset 6253 */
  29407   "\xe5\x8b\xb9\0" /* offset 6257 */
  29408   "\xe5\x8c\x95\0" /* offset 6261 */
  29409   "\xe5\x8c\x9a\0" /* offset 6265 */
  29410   "\xe5\x8c\xb8\0" /* offset 6269 */
  29411   "\xe5\x8d\x81\0" /* offset 6273 */
  29412   "\xe5\x8d\x9c\0" /* offset 6277 */
  29413   "\xe5\x8d\xa9\0" /* offset 6281 */
  29414   "\xe5\x8e\x82\0" /* offset 6285 */
  29415   "\xe5\x8e\xb6\0" /* offset 6289 */
  29416   "\xe5\x8f\x88\0" /* offset 6293 */
  29417   "\xe5\x8f\xa3\0" /* offset 6297 */
  29418   "\xe5\x9b\x97\0" /* offset 6301 */
  29419   "\xe5\x9c\x9f\0" /* offset 6305 */
  29420   "\xe5\xa3\xab\0" /* offset 6309 */
  29421   "\xe5\xa4\x82\0" /* offset 6313 */
  29422   "\xe5\xa4\x8a\0" /* offset 6317 */
  29423   "\xe5\xa4\x95\0" /* offset 6321 */
  29424   "\xe5\xa4\xa7\0" /* offset 6325 */
  29425   "\xe5\xa5\xb3\0" /* offset 6329 */
  29426   "\xe5\xad\x90\0" /* offset 6333 */
  29427   "\xe5\xae\x80\0" /* offset 6337 */
  29428   "\xe5\xaf\xb8\0" /* offset 6341 */
  29429   "\xe5\xb0\x8f\0" /* offset 6345 */
  29430   "\xe5\xb0\xa2\0" /* offset 6349 */
  29431   "\xe5\xb0\xb8\0" /* offset 6353 */
  29432   "\xe5\xb1\xae\0" /* offset 6357 */
  29433   "\xe5\xb1\xb1\0" /* offset 6361 */
  29434   "\xe5\xb7\x9b\0" /* offset 6365 */
  29435   "\xe5\xb7\xa5\0" /* offset 6369 */
  29436   "\xe5\xb7\xb1\0" /* offset 6373 */
  29437   "\xe5\xb7\xbe\0" /* offset 6377 */
  29438   "\xe5\xb9\xb2\0" /* offset 6381 */
  29439   "\xe5\xb9\xba\0" /* offset 6385 */
  29440   "\xe5\xb9\xbf\0" /* offset 6389 */
  29441   "\xe5\xbb\xb4\0" /* offset 6393 */
  29442   "\xe5\xbb\xbe\0" /* offset 6397 */
  29443   "\xe5\xbc\x8b\0" /* offset 6401 */
  29444   "\xe5\xbc\x93\0" /* offset 6405 */
  29445   "\xe5\xbd\x90\0" /* offset 6409 */
  29446   "\xe5\xbd\xa1\0" /* offset 6413 */
  29447   "\xe5\xbd\xb3\0" /* offset 6417 */
  29448   "\xe5\xbf\x83\0" /* offset 6421 */
  29449   "\xe6\x88\x88\0" /* offset 6425 */
  29450   "\xe6\x88\xb6\0" /* offset 6429 */
  29451   "\xe6\x89\x8b\0" /* offset 6433 */
  29452   "\xe6\x94\xaf\0" /* offset 6437 */
  29453   "\xe6\x94\xb4\0" /* offset 6441 */
  29454   "\xe6\x96\x87\0" /* offset 6445 */
  29455   "\xe6\x96\x97\0" /* offset 6449 */
  29456   "\xe6\x96\xa4\0" /* offset 6453 */
  29457   "\xe6\x96\xb9\0" /* offset 6457 */
  29458   "\xe6\x97\xa0\0" /* offset 6461 */
  29459   "\xe6\x97\xa5\0" /* offset 6465 */
  29460   "\xe6\x9b\xb0\0" /* offset 6469 */
  29461   "\xe6\x9c\x88\0" /* offset 6473 */
  29462   "\xe6\x9c\xa8\0" /* offset 6477 */
  29463   "\xe6\xac\xa0\0" /* offset 6481 */
  29464   "\xe6\xad\xa2\0" /* offset 6485 */
  29465   "\xe6\xad\xb9\0" /* offset 6489 */
  29466   "\xe6\xae\xb3\0" /* offset 6493 */
  29467   "\xe6\xaf\x8b\0" /* offset 6497 */
  29468   "\xe6\xaf\x94\0" /* offset 6501 */
  29469   "\xe6\xaf\x9b\0" /* offset 6505 */
  29470   "\xe6\xb0\x8f\0" /* offset 6509 */
  29471   "\xe6\xb0\x94\0" /* offset 6513 */
  29472   "\xe6\xb0\xb4\0" /* offset 6517 */
  29473   "\xe7\x81\xab\0" /* offset 6521 */
  29474   "\xe7\x88\xaa\0" /* offset 6525 */
  29475   "\xe7\x88\xb6\0" /* offset 6529 */
  29476   "\xe7\x88\xbb\0" /* offset 6533 */
  29477   "\xe7\x88\xbf\0" /* offset 6537 */
  29478   "\xe7\x89\x87\0" /* offset 6541 */
  29479   "\xe7\x89\x99\0" /* offset 6545 */
  29480   "\xe7\x89\x9b\0" /* offset 6549 */
  29481   "\xe7\x8a\xac\0" /* offset 6553 */
  29482   "\xe7\x8e\x84\0" /* offset 6557 */
  29483   "\xe7\x8e\x89\0" /* offset 6561 */
  29484   "\xe7\x93\x9c\0" /* offset 6565 */
  29485   "\xe7\x93\xa6\0" /* offset 6569 */
  29486   "\xe7\x94\x98\0" /* offset 6573 */
  29487   "\xe7\x94\x9f\0" /* offset 6577 */
  29488   "\xe7\x94\xa8\0" /* offset 6581 */
  29489   "\xe7\x94\xb0\0" /* offset 6585 */
  29490   "\xe7\x96\x8b\0" /* offset 6589 */
  29491   "\xe7\x96\x92\0" /* offset 6593 */
  29492   "\xe7\x99\xb6\0" /* offset 6597 */
  29493   "\xe7\x99\xbd\0" /* offset 6601 */
  29494   "\xe7\x9a\xae\0" /* offset 6605 */
  29495   "\xe7\x9a\xbf\0" /* offset 6609 */
  29496   "\xe7\x9b\xae\0" /* offset 6613 */
  29497   "\xe7\x9f\x9b\0" /* offset 6617 */
  29498   "\xe7\x9f\xa2\0" /* offset 6621 */
  29499   "\xe7\x9f\xb3\0" /* offset 6625 */
  29500   "\xe7\xa4\xba\0" /* offset 6629 */
  29501   "\xe7\xa6\xb8\0" /* offset 6633 */
  29502   "\xe7\xa6\xbe\0" /* offset 6637 */
  29503   "\xe7\xa9\xb4\0" /* offset 6641 */
  29504   "\xe7\xab\x8b\0" /* offset 6645 */
  29505   "\xe7\xab\xb9\0" /* offset 6649 */
  29506   "\xe7\xb1\xb3\0" /* offset 6653 */
  29507   "\xe7\xb3\xb8\0" /* offset 6657 */
  29508   "\xe7\xbc\xb6\0" /* offset 6661 */
  29509   "\xe7\xbd\x91\0" /* offset 6665 */
  29510   "\xe7\xbe\x8a\0" /* offset 6669 */
  29511   "\xe7\xbe\xbd\0" /* offset 6673 */
  29512   "\xe8\x80\x81\0" /* offset 6677 */
  29513   "\xe8\x80\x8c\0" /* offset 6681 */
  29514   "\xe8\x80\x92\0" /* offset 6685 */
  29515   "\xe8\x80\xb3\0" /* offset 6689 */
  29516   "\xe8\x81\xbf\0" /* offset 6693 */
  29517   "\xe8\x82\x89\0" /* offset 6697 */
  29518   "\xe8\x87\xa3\0" /* offset 6701 */
  29519   "\xe8\x87\xaa\0" /* offset 6705 */
  29520   "\xe8\x87\xb3\0" /* offset 6709 */
  29521   "\xe8\x87\xbc\0" /* offset 6713 */
  29522   "\xe8\x88\x8c\0" /* offset 6717 */
  29523   "\xe8\x88\x9b\0" /* offset 6721 */
  29524   "\xe8\x88\x9f\0" /* offset 6725 */
  29525   "\xe8\x89\xae\0" /* offset 6729 */
  29526   "\xe8\x89\xb2\0" /* offset 6733 */
  29527   "\xe8\x89\xb8\0" /* offset 6737 */
  29528   "\xe8\x99\x8d\0" /* offset 6741 */
  29529   "\xe8\x99\xab\0" /* offset 6745 */
  29530   "\xe8\xa1\x80\0" /* offset 6749 */
  29531   "\xe8\xa1\x8c\0" /* offset 6753 */
  29532   "\xe8\xa1\xa3\0" /* offset 6757 */
  29533   "\xe8\xa5\xbe\0" /* offset 6761 */
  29534   "\xe8\xa6\x8b\0" /* offset 6765 */
  29535   "\xe8\xa7\x92\0" /* offset 6769 */
  29536   "\xe8\xa8\x80\0" /* offset 6773 */
  29537   "\xe8\xb0\xb7\0" /* offset 6777 */
  29538   "\xe8\xb1\x86\0" /* offset 6781 */
  29539   "\xe8\xb1\x95\0" /* offset 6785 */
  29540   "\xe8\xb1\xb8\0" /* offset 6789 */
  29541   "\xe8\xb2\x9d\0" /* offset 6793 */
  29542   "\xe8\xb5\xa4\0" /* offset 6797 */
  29543   "\xe8\xb5\xb0\0" /* offset 6801 */
  29544   "\xe8\xb6\xb3\0" /* offset 6805 */
  29545   "\xe8\xba\xab\0" /* offset 6809 */
  29546   "\xe8\xbb\x8a\0" /* offset 6813 */
  29547   "\xe8\xbe\x9b\0" /* offset 6817 */
  29548   "\xe8\xbe\xb0\0" /* offset 6821 */
  29549   "\xe8\xbe\xb5\0" /* offset 6825 */
  29550   "\xe9\x82\x91\0" /* offset 6829 */
  29551   "\xe9\x85\x89\0" /* offset 6833 */
  29552   "\xe9\x87\x86\0" /* offset 6837 */
  29553   "\xe9\x87\x8c\0" /* offset 6841 */
  29554   "\xe9\x87\x91\0" /* offset 6845 */
  29555   "\xe9\x95\xb7\0" /* offset 6849 */
  29556   "\xe9\x96\x80\0" /* offset 6853 */
  29557   "\xe9\x98\x9c\0" /* offset 6857 */
  29558   "\xe9\x9a\xb6\0" /* offset 6861 */
  29559   "\xe9\x9a\xb9\0" /* offset 6865 */
  29560   "\xe9\x9b\xa8\0" /* offset 6869 */
  29561   "\xe9\x9d\x91\0" /* offset 6873 */
  29562   "\xe9\x9d\x9e\0" /* offset 6877 */
  29563   "\xe9\x9d\xa2\0" /* offset 6881 */
  29564   "\xe9\x9d\xa9\0" /* offset 6885 */
  29565   "\xe9\x9f\x8b\0" /* offset 6889 */
  29566   "\xe9\x9f\xad\0" /* offset 6893 */
  29567   "\xe9\x9f\xb3\0" /* offset 6897 */
  29568   "\xe9\xa0\x81\0" /* offset 6901 */
  29569   "\xe9\xa2\xa8\0" /* offset 6905 */
  29570   "\xe9\xa3\x9b\0" /* offset 6909 */
  29571   "\xe9\xa3\x9f\0" /* offset 6913 */
  29572   "\xe9\xa6\x96\0" /* offset 6917 */
  29573   "\xe9\xa6\x99\0" /* offset 6921 */
  29574   "\xe9\xa6\xac\0" /* offset 6925 */
  29575   "\xe9\xaa\xa8\0" /* offset 6929 */
  29576   "\xe9\xab\x98\0" /* offset 6933 */
  29577   "\xe9\xab\x9f\0" /* offset 6937 */
  29578   "\xe9\xac\xa5\0" /* offset 6941 */
  29579   "\xe9\xac\xaf\0" /* offset 6945 */
  29580   "\xe9\xac\xb2\0" /* offset 6949 */
  29581   "\xe9\xac\xbc\0" /* offset 6953 */
  29582   "\xe9\xad\x9a\0" /* offset 6957 */
  29583   "\xe9\xb3\xa5\0" /* offset 6961 */
  29584   "\xe9\xb9\xb5\0" /* offset 6965 */
  29585   "\xe9\xb9\xbf\0" /* offset 6969 */
  29586   "\xe9\xba\xa5\0" /* offset 6973 */
  29587   "\xe9\xba\xbb\0" /* offset 6977 */
  29588   "\xe9\xbb\x83\0" /* offset 6981 */
  29589   "\xe9\xbb\x8d\0" /* offset 6985 */
  29590   "\xe9\xbb\x91\0" /* offset 6989 */
  29591   "\xe9\xbb\xb9\0" /* offset 6993 */
  29592   "\xe9\xbb\xbd\0" /* offset 6997 */
  29593   "\xe9\xbc\x8e\0" /* offset 7001 */
  29594   "\xe9\xbc\x93\0" /* offset 7005 */
  29595   "\xe9\xbc\xa0\0" /* offset 7009 */
  29596   "\xe9\xbc\xbb\0" /* offset 7013 */
  29597   "\xe9\xbd\x8a\0" /* offset 7017 */
  29598   "\xe9\xbd\x92\0" /* offset 7021 */
  29599   "\xe9\xbe\x8d\0" /* offset 7025 */
  29600   "\xe9\xbe\x9c\0" /* offset 7029 */
  29601   "\xe9\xbe\xa0\0" /* offset 7033 */
  29602   "\xe3\x80\x92\0" /* offset 7037 */
  29603   "\xe5\x8d\x84\0" /* offset 7041 */
  29604   "\xe5\x8d\x85\0" /* offset 7045 */
  29605   "\xe3\x81\x8b\xe3\x82\x99\0" /* offset 7049 */
  29606   "\xe3\x81\x8d\xe3\x82\x99\0" /* offset 7056 */
  29607   "\xe3\x81\x8f\xe3\x82\x99\0" /* offset 7063 */
  29608   "\xe3\x81\x91\xe3\x82\x99\0" /* offset 7070 */
  29609   "\xe3\x81\x93\xe3\x82\x99\0" /* offset 7077 */
  29610   "\xe3\x81\x95\xe3\x82\x99\0" /* offset 7084 */
  29611   "\xe3\x81\x97\xe3\x82\x99\0" /* offset 7091 */
  29612   "\xe3\x81\x99\xe3\x82\x99\0" /* offset 7098 */
  29613   "\xe3\x81\x9b\xe3\x82\x99\0" /* offset 7105 */
  29614   "\xe3\x81\x9d\xe3\x82\x99\0" /* offset 7112 */
  29615   "\xe3\x81\x9f\xe3\x82\x99\0" /* offset 7119 */
  29616   "\xe3\x81\xa1\xe3\x82\x99\0" /* offset 7126 */
  29617   "\xe3\x81\xa4\xe3\x82\x99\0" /* offset 7133 */
  29618   "\xe3\x81\xa6\xe3\x82\x99\0" /* offset 7140 */
  29619   "\xe3\x81\xa8\xe3\x82\x99\0" /* offset 7147 */
  29620   "\xe3\x81\xaf\xe3\x82\x99\0" /* offset 7154 */
  29621   "\xe3\x81\xaf\xe3\x82\x9a\0" /* offset 7161 */
  29622   "\xe3\x81\xb2\xe3\x82\x99\0" /* offset 7168 */
  29623   "\xe3\x81\xb2\xe3\x82\x9a\0" /* offset 7175 */
  29624   "\xe3\x81\xb5\xe3\x82\x99\0" /* offset 7182 */
  29625   "\xe3\x81\xb5\xe3\x82\x9a\0" /* offset 7189 */
  29626   "\xe3\x81\xb8\xe3\x82\x99\0" /* offset 7196 */
  29627   "\xe3\x81\xb8\xe3\x82\x9a\0" /* offset 7203 */
  29628   "\xe3\x81\xbb\xe3\x82\x99\0" /* offset 7210 */
  29629   "\xe3\x81\xbb\xe3\x82\x9a\0" /* offset 7217 */
  29630   "\xe3\x81\x86\xe3\x82\x99\0" /* offset 7224 */
  29631   "\x20\xe3\x82\x99\0" /* offset 7231 */
  29632   "\x20\xe3\x82\x9a\0" /* offset 7236 */
  29633   "\xe3\x82\x9d\xe3\x82\x99\0" /* offset 7241 */
  29634   "\xe3\x82\x88\xe3\x82\x8a\0" /* offset 7248 */
  29635   "\xe3\x82\xab\xe3\x82\x99\0" /* offset 7255 */
  29636   "\xe3\x82\xad\xe3\x82\x99\0" /* offset 7262 */
  29637   "\xe3\x82\xaf\xe3\x82\x99\0" /* offset 7269 */
  29638   "\xe3\x82\xb1\xe3\x82\x99\0" /* offset 7276 */
  29639   "\xe3\x82\xb3\xe3\x82\x99\0" /* offset 7283 */
  29640   "\xe3\x82\xb5\xe3\x82\x99\0" /* offset 7290 */
  29641   "\xe3\x82\xb7\xe3\x82\x99\0" /* offset 7297 */
  29642   "\xe3\x82\xb9\xe3\x82\x99\0" /* offset 7304 */
  29643   "\xe3\x82\xbb\xe3\x82\x99\0" /* offset 7311 */
  29644   "\xe3\x82\xbd\xe3\x82\x99\0" /* offset 7318 */
  29645   "\xe3\x82\xbf\xe3\x82\x99\0" /* offset 7325 */
  29646   "\xe3\x83\x81\xe3\x82\x99\0" /* offset 7332 */
  29647   "\xe3\x83\x84\xe3\x82\x99\0" /* offset 7339 */
  29648   "\xe3\x83\x86\xe3\x82\x99\0" /* offset 7346 */
  29649   "\xe3\x83\x88\xe3\x82\x99\0" /* offset 7353 */
  29650   "\xe3\x83\x8f\xe3\x82\x99\0" /* offset 7360 */
  29651   "\xe3\x83\x8f\xe3\x82\x9a\0" /* offset 7367 */
  29652   "\xe3\x83\x92\xe3\x82\x99\0" /* offset 7374 */
  29653   "\xe3\x83\x92\xe3\x82\x9a\0" /* offset 7381 */
  29654   "\xe3\x83\x95\xe3\x82\x99\0" /* offset 7388 */
  29655   "\xe3\x83\x95\xe3\x82\x9a\0" /* offset 7395 */
  29656   "\xe3\x83\x98\xe3\x82\x99\0" /* offset 7402 */
  29657   "\xe3\x83\x98\xe3\x82\x9a\0" /* offset 7409 */
  29658   "\xe3\x83\x9b\xe3\x82\x99\0" /* offset 7416 */
  29659   "\xe3\x83\x9b\xe3\x82\x9a\0" /* offset 7423 */
  29660   "\xe3\x82\xa6\xe3\x82\x99\0" /* offset 7430 */
  29661   "\xe3\x83\xaf\xe3\x82\x99\0" /* offset 7437 */
  29662   "\xe3\x83\xb0\xe3\x82\x99\0" /* offset 7444 */
  29663   "\xe3\x83\xb1\xe3\x82\x99\0" /* offset 7451 */
  29664   "\xe3\x83\xb2\xe3\x82\x99\0" /* offset 7458 */
  29665   "\xe3\x83\xbd\xe3\x82\x99\0" /* offset 7465 */
  29666   "\xe3\x82\xb3\xe3\x83\x88\0" /* offset 7472 */
  29667   "\xe1\x84\x80\0" /* offset 7479 */
  29668   "\xe1\x84\x81\0" /* offset 7483 */
  29669   "\xe1\x86\xaa\0" /* offset 7487 */
  29670   "\xe1\x84\x82\0" /* offset 7491 */
  29671   "\xe1\x86\xac\0" /* offset 7495 */
  29672   "\xe1\x86\xad\0" /* offset 7499 */
  29673   "\xe1\x84\x83\0" /* offset 7503 */
  29674   "\xe1\x84\x84\0" /* offset 7507 */
  29675   "\xe1\x84\x85\0" /* offset 7511 */
  29676   "\xe1\x86\xb0\0" /* offset 7515 */
  29677   "\xe1\x86\xb1\0" /* offset 7519 */
  29678   "\xe1\x86\xb2\0" /* offset 7523 */
  29679   "\xe1\x86\xb3\0" /* offset 7527 */
  29680   "\xe1\x86\xb4\0" /* offset 7531 */
  29681   "\xe1\x86\xb5\0" /* offset 7535 */
  29682   "\xe1\x84\x9a\0" /* offset 7539 */
  29683   "\xe1\x84\x86\0" /* offset 7543 */
  29684   "\xe1\x84\x87\0" /* offset 7547 */
  29685   "\xe1\x84\x88\0" /* offset 7551 */
  29686   "\xe1\x84\xa1\0" /* offset 7555 */
  29687   "\xe1\x84\x89\0" /* offset 7559 */
  29688   "\xe1\x84\x8a\0" /* offset 7563 */
  29689   "\xe1\x84\x8b\0" /* offset 7567 */
  29690   "\xe1\x84\x8c\0" /* offset 7571 */
  29691   "\xe1\x84\x8d\0" /* offset 7575 */
  29692   "\xe1\x84\x8e\0" /* offset 7579 */
  29693   "\xe1\x84\x8f\0" /* offset 7583 */
  29694   "\xe1\x84\x90\0" /* offset 7587 */
  29695   "\xe1\x84\x91\0" /* offset 7591 */
  29696   "\xe1\x84\x92\0" /* offset 7595 */
  29697   "\xe1\x85\xa1\0" /* offset 7599 */
  29698   "\xe1\x85\xa2\0" /* offset 7603 */
  29699   "\xe1\x85\xa3\0" /* offset 7607 */
  29700   "\xe1\x85\xa4\0" /* offset 7611 */
  29701   "\xe1\x85\xa5\0" /* offset 7615 */
  29702   "\xe1\x85\xa6\0" /* offset 7619 */
  29703   "\xe1\x85\xa7\0" /* offset 7623 */
  29704   "\xe1\x85\xa8\0" /* offset 7627 */
  29705   "\xe1\x85\xa9\0" /* offset 7631 */
  29706   "\xe1\x85\xaa\0" /* offset 7635 */
  29707   "\xe1\x85\xab\0" /* offset 7639 */
  29708   "\xe1\x85\xac\0" /* offset 7643 */
  29709   "\xe1\x85\xad\0" /* offset 7647 */
  29710   "\xe1\x85\xae\0" /* offset 7651 */
  29711   "\xe1\x85\xaf\0" /* offset 7655 */
  29712   "\xe1\x85\xb0\0" /* offset 7659 */
  29713   "\xe1\x85\xb1\0" /* offset 7663 */
  29714   "\xe1\x85\xb2\0" /* offset 7667 */
  29715   "\xe1\x85\xb3\0" /* offset 7671 */
  29716   "\xe1\x85\xb4\0" /* offset 7675 */
  29717   "\xe1\x85\xb5\0" /* offset 7679 */
  29718   "\xe1\x85\xa0\0" /* offset 7683 */
  29719   "\xe1\x84\x94\0" /* offset 7687 */
  29720   "\xe1\x84\x95\0" /* offset 7691 */
  29721   "\xe1\x87\x87\0" /* offset 7695 */
  29722   "\xe1\x87\x88\0" /* offset 7699 */
  29723   "\xe1\x87\x8c\0" /* offset 7703 */
  29724   "\xe1\x87\x8e\0" /* offset 7707 */
  29725   "\xe1\x87\x93\0" /* offset 7711 */
  29726   "\xe1\x87\x97\0" /* offset 7715 */
  29727   "\xe1\x87\x99\0" /* offset 7719 */
  29728   "\xe1\x84\x9c\0" /* offset 7723 */
  29729   "\xe1\x87\x9d\0" /* offset 7727 */
  29730   "\xe1\x87\x9f\0" /* offset 7731 */
  29731   "\xe1\x84\x9d\0" /* offset 7735 */
  29732   "\xe1\x84\x9e\0" /* offset 7739 */
  29733   "\xe1\x84\xa0\0" /* offset 7743 */
  29734   "\xe1\x84\xa2\0" /* offset 7747 */
  29735   "\xe1\x84\xa3\0" /* offset 7751 */
  29736   "\xe1\x84\xa7\0" /* offset 7755 */
  29737   "\xe1\x84\xa9\0" /* offset 7759 */
  29738   "\xe1\x84\xab\0" /* offset 7763 */
  29739   "\xe1\x84\xac\0" /* offset 7767 */
  29740   "\xe1\x84\xad\0" /* offset 7771 */
  29741   "\xe1\x84\xae\0" /* offset 7775 */
  29742   "\xe1\x84\xaf\0" /* offset 7779 */
  29743   "\xe1\x84\xb2\0" /* offset 7783 */
  29744   "\xe1\x84\xb6\0" /* offset 7787 */
  29745   "\xe1\x85\x80\0" /* offset 7791 */
  29746   "\xe1\x85\x87\0" /* offset 7795 */
  29747   "\xe1\x85\x8c\0" /* offset 7799 */
  29748   "\xe1\x87\xb1\0" /* offset 7803 */
  29749   "\xe1\x87\xb2\0" /* offset 7807 */
  29750   "\xe1\x85\x97\0" /* offset 7811 */
  29751   "\xe1\x85\x98\0" /* offset 7815 */
  29752   "\xe1\x85\x99\0" /* offset 7819 */
  29753   "\xe1\x86\x84\0" /* offset 7823 */
  29754   "\xe1\x86\x85\0" /* offset 7827 */
  29755   "\xe1\x86\x88\0" /* offset 7831 */
  29756   "\xe1\x86\x91\0" /* offset 7835 */
  29757   "\xe1\x86\x92\0" /* offset 7839 */
  29758   "\xe1\x86\x94\0" /* offset 7843 */
  29759   "\xe1\x86\x9e\0" /* offset 7847 */
  29760   "\xe1\x86\xa1\0" /* offset 7851 */
  29761   "\xe4\xb8\x89\0" /* offset 7855 */
  29762   "\xe5\x9b\x9b\0" /* offset 7859 */
  29763   "\xe4\xb8\x8a\0" /* offset 7863 */
  29764   "\xe4\xb8\xad\0" /* offset 7867 */
  29765   "\xe4\xb8\x8b\0" /* offset 7871 */
  29766   "\xe7\x94\xb2\0" /* offset 7875 */
  29767   "\xe4\xb8\x99\0" /* offset 7879 */
  29768   "\xe4\xb8\x81\0" /* offset 7883 */
  29769   "\xe5\xa4\xa9\0" /* offset 7887 */
  29770   "\xe5\x9c\xb0\0" /* offset 7891 */
  29771   "\x28\xe1\x84\x80\x29\0" /* offset 7895 */
  29772   "\x28\xe1\x84\x82\x29\0" /* offset 7901 */
  29773   "\x28\xe1\x84\x83\x29\0" /* offset 7907 */
  29774   "\x28\xe1\x84\x85\x29\0" /* offset 7913 */
  29775   "\x28\xe1\x84\x86\x29\0" /* offset 7919 */
  29776   "\x28\xe1\x84\x87\x29\0" /* offset 7925 */
  29777   "\x28\xe1\x84\x89\x29\0" /* offset 7931 */
  29778   "\x28\xe1\x84\x8b\x29\0" /* offset 7937 */
  29779   "\x28\xe1\x84\x8c\x29\0" /* offset 7943 */
  29780   "\x28\xe1\x84\x8e\x29\0" /* offset 7949 */
  29781   "\x28\xe1\x84\x8f\x29\0" /* offset 7955 */
  29782   "\x28\xe1\x84\x90\x29\0" /* offset 7961 */
  29783   "\x28\xe1\x84\x91\x29\0" /* offset 7967 */
  29784   "\x28\xe1\x84\x92\x29\0" /* offset 7973 */
  29785   "\x28\xe1\x84\x80\xe1\x85\xa1\x29\0" /* offset 7979 */
  29786   "\x28\xe1\x84\x82\xe1\x85\xa1\x29\0" /* offset 7988 */
  29787   "\x28\xe1\x84\x83\xe1\x85\xa1\x29\0" /* offset 7997 */
  29788   "\x28\xe1\x84\x85\xe1\x85\xa1\x29\0" /* offset 8006 */
  29789   "\x28\xe1\x84\x86\xe1\x85\xa1\x29\0" /* offset 8015 */
  29790   "\x28\xe1\x84\x87\xe1\x85\xa1\x29\0" /* offset 8024 */
  29791   "\x28\xe1\x84\x89\xe1\x85\xa1\x29\0" /* offset 8033 */
  29792   "\x28\xe1\x84\x8b\xe1\x85\xa1\x29\0" /* offset 8042 */
  29793   "\x28\xe1\x84\x8c\xe1\x85\xa1\x29\0" /* offset 8051 */
  29794   "\x28\xe1\x84\x8e\xe1\x85\xa1\x29\0" /* offset 8060 */
  29795   "\x28\xe1\x84\x8f\xe1\x85\xa1\x29\0" /* offset 8069 */
  29796   "\x28\xe1\x84\x90\xe1\x85\xa1\x29\0" /* offset 8078 */
  29797   "\x28\xe1\x84\x91\xe1\x85\xa1\x29\0" /* offset 8087 */
  29798   "\x28\xe1\x84\x92\xe1\x85\xa1\x29\0" /* offset 8096 */
  29799   "\x28\xe1\x84\x8c\xe1\x85\xae\x29\0" /* offset 8105 */
  29800   "\x28\xe1\x84\x8b\xe1\x85\xa9\xe1\x84\x8c\xe1\x85\xa5\xe1\x86\xab\x29\0" /* offset 8114 */
  29801   "\x28\xe1\x84\x8b\xe1\x85\xa9\xe1\x84\x92\xe1\x85\xae\x29\0" /* offset 8132 */
  29802   "\x28\xe4\xb8\x80\x29\0" /* offset 8147 */
  29803   "\x28\xe4\xba\x8c\x29\0" /* offset 8153 */
  29804   "\x28\xe4\xb8\x89\x29\0" /* offset 8159 */
  29805   "\x28\xe5\x9b\x9b\x29\0" /* offset 8165 */
  29806   "\x28\xe4\xba\x94\x29\0" /* offset 8171 */
  29807   "\x28\xe5\x85\xad\x29\0" /* offset 8177 */
  29808   "\x28\xe4\xb8\x83\x29\0" /* offset 8183 */
  29809   "\x28\xe5\x85\xab\x29\0" /* offset 8189 */
  29810   "\x28\xe4\xb9\x9d\x29\0" /* offset 8195 */
  29811   "\x28\xe5\x8d\x81\x29\0" /* offset 8201 */
  29812   "\x28\xe6\x9c\x88\x29\0" /* offset 8207 */
  29813   "\x28\xe7\x81\xab\x29\0" /* offset 8213 */
  29814   "\x28\xe6\xb0\xb4\x29\0" /* offset 8219 */
  29815   "\x28\xe6\x9c\xa8\x29\0" /* offset 8225 */
  29816   "\x28\xe9\x87\x91\x29\0" /* offset 8231 */
  29817   "\x28\xe5\x9c\x9f\x29\0" /* offset 8237 */
  29818   "\x28\xe6\x97\xa5\x29\0" /* offset 8243 */
  29819   "\x28\xe6\xa0\xaa\x29\0" /* offset 8249 */
  29820   "\x28\xe6\x9c\x89\x29\0" /* offset 8255 */
  29821   "\x28\xe7\xa4\xbe\x29\0" /* offset 8261 */
  29822   "\x28\xe5\x90\x8d\x29\0" /* offset 8267 */
  29823   "\x28\xe7\x89\xb9\x29\0" /* offset 8273 */
  29824   "\x28\xe8\xb2\xa1\x29\0" /* offset 8279 */
  29825   "\x28\xe7\xa5\x9d\x29\0" /* offset 8285 */
  29826   "\x28\xe5\x8a\xb4\x29\0" /* offset 8291 */
  29827   "\x28\xe4\xbb\xa3\x29\0" /* offset 8297 */
  29828   "\x28\xe5\x91\xbc\x29\0" /* offset 8303 */
  29829   "\x28\xe5\xad\xa6\x29\0" /* offset 8309 */
  29830   "\x28\xe7\x9b\xa3\x29\0" /* offset 8315 */
  29831   "\x28\xe4\xbc\x81\x29\0" /* offset 8321 */
  29832   "\x28\xe8\xb3\x87\x29\0" /* offset 8327 */
  29833   "\x28\xe5\x8d\x94\x29\0" /* offset 8333 */
  29834   "\x28\xe7\xa5\xad\x29\0" /* offset 8339 */
  29835   "\x28\xe4\xbc\x91\x29\0" /* offset 8345 */
  29836   "\x28\xe8\x87\xaa\x29\0" /* offset 8351 */
  29837   "\x28\xe8\x87\xb3\x29\0" /* offset 8357 */
  29838   "\xe5\x95\x8f\0" /* offset 8363 */
  29839   "\xe5\xb9\xbc\0" /* offset 8367 */
  29840   "\xe7\xae\x8f\0" /* offset 8371 */
  29841   "\x50\x54\x45\0" /* offset 8375 */
  29842   "\x32\x31\0" /* offset 8379 */
  29843   "\x32\x32\0" /* offset 8382 */
  29844   "\x32\x33\0" /* offset 8385 */
  29845   "\x32\x34\0" /* offset 8388 */
  29846   "\x32\x35\0" /* offset 8391 */
  29847   "\x32\x36\0" /* offset 8394 */
  29848   "\x32\x37\0" /* offset 8397 */
  29849   "\x32\x38\0" /* offset 8400 */
  29850   "\x32\x39\0" /* offset 8403 */
  29851   "\x33\x30\0" /* offset 8406 */
  29852   "\x33\x31\0" /* offset 8409 */
  29853   "\x33\x32\0" /* offset 8412 */
  29854   "\x33\x33\0" /* offset 8415 */
  29855   "\x33\x34\0" /* offset 8418 */
  29856   "\x33\x35\0" /* offset 8421 */
  29857   "\xe1\x84\x80\xe1\x85\xa1\0" /* offset 8424 */
  29858   "\xe1\x84\x82\xe1\x85\xa1\0" /* offset 8431 */
  29859   "\xe1\x84\x83\xe1\x85\xa1\0" /* offset 8438 */
  29860   "\xe1\x84\x85\xe1\x85\xa1\0" /* offset 8445 */
  29861   "\xe1\x84\x86\xe1\x85\xa1\0" /* offset 8452 */
  29862   "\xe1\x84\x87\xe1\x85\xa1\0" /* offset 8459 */
  29863   "\xe1\x84\x89\xe1\x85\xa1\0" /* offset 8466 */
  29864   "\xe1\x84\x8b\xe1\x85\xa1\0" /* offset 8473 */
  29865   "\xe1\x84\x8c\xe1\x85\xa1\0" /* offset 8480 */
  29866   "\xe1\x84\x8e\xe1\x85\xa1\0" /* offset 8487 */
  29867   "\xe1\x84\x8f\xe1\x85\xa1\0" /* offset 8494 */
  29868   "\xe1\x84\x90\xe1\x85\xa1\0" /* offset 8501 */
  29869   "\xe1\x84\x91\xe1\x85\xa1\0" /* offset 8508 */
  29870   "\xe1\x84\x92\xe1\x85\xa1\0" /* offset 8515 */
  29871   "\xe1\x84\x8e\xe1\x85\xa1\xe1\x86\xb7\xe1\x84\x80\xe1\x85\xa9\0" /* offset 8522 */
  29872   "\xe1\x84\x8c\xe1\x85\xae\xe1\x84\x8b\xe1\x85\xb4\0" /* offset 8538 */
  29873   "\xe1\x84\x8b\xe1\x85\xae\0" /* offset 8551 */
  29874   "\xe4\xba\x94\0" /* offset 8558 */
  29875   "\xe5\x85\xad\0" /* offset 8562 */
  29876   "\xe4\xb8\x83\0" /* offset 8566 */
  29877   "\xe4\xb9\x9d\0" /* offset 8570 */
  29878   "\xe6\xa0\xaa\0" /* offset 8574 */
  29879   "\xe6\x9c\x89\0" /* offset 8578 */
  29880   "\xe7\xa4\xbe\0" /* offset 8582 */
  29881   "\xe5\x90\x8d\0" /* offset 8586 */
  29882   "\xe7\x89\xb9\0" /* offset 8590 */
  29883   "\xe8\xb2\xa1\0" /* offset 8594 */
  29884   "\xe7\xa5\x9d\0" /* offset 8598 */
  29885   "\xe5\x8a\xb4\0" /* offset 8602 */
  29886   "\xe7\xa7\x98\0" /* offset 8606 */
  29887   "\xe7\x94\xb7\0" /* offset 8610 */
  29888   "\xe9\x81\xa9\0" /* offset 8614 */
  29889   "\xe5\x84\xaa\0" /* offset 8618 */
  29890   "\xe5\x8d\xb0\0" /* offset 8622 */
  29891   "\xe6\xb3\xa8\0" /* offset 8626 */
  29892   "\xe9\xa0\x85\0" /* offset 8630 */
  29893   "\xe4\xbc\x91\0" /* offset 8634 */
  29894   "\xe5\x86\x99\0" /* offset 8638 */
  29895   "\xe6\xad\xa3\0" /* offset 8642 */
  29896   "\xe5\xb7\xa6\0" /* offset 8646 */
  29897   "\xe5\x8f\xb3\0" /* offset 8650 */
  29898   "\xe5\x8c\xbb\0" /* offset 8654 */
  29899   "\xe5\xae\x97\0" /* offset 8658 */
  29900   "\xe5\xad\xa6\0" /* offset 8662 */
  29901   "\xe7\x9b\xa3\0" /* offset 8666 */
  29902   "\xe4\xbc\x81\0" /* offset 8670 */
  29903   "\xe8\xb3\x87\0" /* offset 8674 */
  29904   "\xe5\x8d\x94\0" /* offset 8678 */
  29905   "\xe5\xa4\x9c\0" /* offset 8682 */
  29906   "\x33\x36\0" /* offset 8686 */
  29907   "\x33\x37\0" /* offset 8689 */
  29908   "\x33\x38\0" /* offset 8692 */
  29909   "\x33\x39\0" /* offset 8695 */
  29910   "\x34\x30\0" /* offset 8698 */
  29911   "\x34\x31\0" /* offset 8701 */
  29912   "\x34\x32\0" /* offset 8704 */
  29913   "\x34\x33\0" /* offset 8707 */
  29914   "\x34\x34\0" /* offset 8710 */
  29915   "\x34\x35\0" /* offset 8713 */
  29916   "\x34\x36\0" /* offset 8716 */
  29917   "\x34\x37\0" /* offset 8719 */
  29918   "\x34\x38\0" /* offset 8722 */
  29919   "\x34\x39\0" /* offset 8725 */
  29920   "\x35\x30\0" /* offset 8728 */
  29921   "\x31\xe6\x9c\x88\0" /* offset 8731 */
  29922   "\x32\xe6\x9c\x88\0" /* offset 8736 */
  29923   "\x33\xe6\x9c\x88\0" /* offset 8741 */
  29924   "\x34\xe6\x9c\x88\0" /* offset 8746 */
  29925   "\x35\xe6\x9c\x88\0" /* offset 8751 */
  29926   "\x36\xe6\x9c\x88\0" /* offset 8756 */
  29927   "\x37\xe6\x9c\x88\0" /* offset 8761 */
  29928   "\x38\xe6\x9c\x88\0" /* offset 8766 */
  29929   "\x39\xe6\x9c\x88\0" /* offset 8771 */
  29930   "\x31\x30\xe6\x9c\x88\0" /* offset 8776 */
  29931   "\x31\x31\xe6\x9c\x88\0" /* offset 8782 */
  29932   "\x31\x32\xe6\x9c\x88\0" /* offset 8788 */
  29933   "\x48\x67\0" /* offset 8794 */
  29934   "\x65\x72\x67\0" /* offset 8797 */
  29935   "\x65\x56\0" /* offset 8801 */
  29936   "\x4c\x54\x44\0" /* offset 8804 */
  29937   "\xe3\x82\xa2\0" /* offset 8808 */
  29938   "\xe3\x82\xa4\0" /* offset 8812 */
  29939   "\xe3\x82\xa6\0" /* offset 8816 */
  29940   "\xe3\x82\xa8\0" /* offset 8820 */
  29941   "\xe3\x82\xaa\0" /* offset 8824 */
  29942   "\xe3\x82\xab\0" /* offset 8828 */
  29943   "\xe3\x82\xad\0" /* offset 8832 */
  29944   "\xe3\x82\xaf\0" /* offset 8836 */
  29945   "\xe3\x82\xb1\0" /* offset 8840 */
  29946   "\xe3\x82\xb3\0" /* offset 8844 */
  29947   "\xe3\x82\xb5\0" /* offset 8848 */
  29948   "\xe3\x82\xb7\0" /* offset 8852 */
  29949   "\xe3\x82\xb9\0" /* offset 8856 */
  29950   "\xe3\x82\xbb\0" /* offset 8860 */
  29951   "\xe3\x82\xbd\0" /* offset 8864 */
  29952   "\xe3\x82\xbf\0" /* offset 8868 */
  29953   "\xe3\x83\x81\0" /* offset 8872 */
  29954   "\xe3\x83\x84\0" /* offset 8876 */
  29955   "\xe3\x83\x86\0" /* offset 8880 */
  29956   "\xe3\x83\x88\0" /* offset 8884 */
  29957   "\xe3\x83\x8a\0" /* offset 8888 */
  29958   "\xe3\x83\x8b\0" /* offset 8892 */
  29959   "\xe3\x83\x8c\0" /* offset 8896 */
  29960   "\xe3\x83\x8d\0" /* offset 8900 */
  29961   "\xe3\x83\x8e\0" /* offset 8904 */
  29962   "\xe3\x83\x8f\0" /* offset 8908 */
  29963   "\xe3\x83\x92\0" /* offset 8912 */
  29964   "\xe3\x83\x95\0" /* offset 8916 */
  29965   "\xe3\x83\x98\0" /* offset 8920 */
  29966   "\xe3\x83\x9b\0" /* offset 8924 */
  29967   "\xe3\x83\x9e\0" /* offset 8928 */
  29968   "\xe3\x83\x9f\0" /* offset 8932 */
  29969   "\xe3\x83\xa0\0" /* offset 8936 */
  29970   "\xe3\x83\xa1\0" /* offset 8940 */
  29971   "\xe3\x83\xa2\0" /* offset 8944 */
  29972   "\xe3\x83\xa4\0" /* offset 8948 */
  29973   "\xe3\x83\xa6\0" /* offset 8952 */
  29974   "\xe3\x83\xa8\0" /* offset 8956 */
  29975   "\xe3\x83\xa9\0" /* offset 8960 */
  29976   "\xe3\x83\xaa\0" /* offset 8964 */
  29977   "\xe3\x83\xab\0" /* offset 8968 */
  29978   "\xe3\x83\xac\0" /* offset 8972 */
  29979   "\xe3\x83\xad\0" /* offset 8976 */
  29980   "\xe3\x83\xaf\0" /* offset 8980 */
  29981   "\xe3\x83\xb0\0" /* offset 8984 */
  29982   "\xe3\x83\xb1\0" /* offset 8988 */
  29983   "\xe3\x83\xb2\0" /* offset 8992 */
  29984   "\xe3\x82\xa2\xe3\x83\x8f\xe3\x82\x9a\xe3\x83\xbc\xe3\x83\x88\0" /* offset 8996 */
  29985   "\xe3\x82\xa2\xe3\x83\xab\xe3\x83\x95\xe3\x82\xa1\0" /* offset 9012 */
  29986   "\xe3\x82\xa2\xe3\x83\xb3\xe3\x83\x98\xe3\x82\x9a\xe3\x82\xa2\0" /* offset 9025 */
  29987   "\xe3\x82\xa2\xe3\x83\xbc\xe3\x83\xab\0" /* offset 9041 */
  29988   "\xe3\x82\xa4\xe3\x83\x8b\xe3\x83\xb3\xe3\x82\xaf\xe3\x82\x99\0" /* offset 9051 */
  29989   "\xe3\x82\xa4\xe3\x83\xb3\xe3\x83\x81\0" /* offset 9067 */
  29990   "\xe3\x82\xa6\xe3\x82\xa9\xe3\x83\xb3\0" /* offset 9077 */
  29991   "\xe3\x82\xa8\xe3\x82\xb9\xe3\x82\xaf\xe3\x83\xbc\xe3\x83\x88\xe3\x82\x99\0" /* offset 9087 */
  29992   "\xe3\x82\xa8\xe3\x83\xbc\xe3\x82\xab\xe3\x83\xbc\0" /* offset 9106 */
  29993   "\xe3\x82\xaa\xe3\x83\xb3\xe3\x82\xb9\0" /* offset 9119 */
  29994   "\xe3\x82\xaa\xe3\x83\xbc\xe3\x83\xa0\0" /* offset 9129 */
  29995   "\xe3\x82\xab\xe3\x82\xa4\xe3\x83\xaa\0" /* offset 9139 */
  29996   "\xe3\x82\xab\xe3\x83\xa9\xe3\x83\x83\xe3\x83\x88\0" /* offset 9149 */
  29997   "\xe3\x82\xab\xe3\x83\xad\xe3\x83\xaa\xe3\x83\xbc\0" /* offset 9162 */
  29998   "\xe3\x82\xab\xe3\x82\x99\xe3\x83\xad\xe3\x83\xb3\0" /* offset 9175 */
  29999   "\xe3\x82\xab\xe3\x82\x99\xe3\x83\xb3\xe3\x83\x9e\0" /* offset 9188 */
  30000   "\xe3\x82\xad\xe3\x82\x99\xe3\x82\xab\xe3\x82\x99\0" /* offset 9201 */
  30001   "\xe3\x82\xad\xe3\x82\x99\xe3\x83\x8b\xe3\x83\xbc\0" /* offset 9214 */
  30002   "\xe3\x82\xad\xe3\x83\xa5\xe3\x83\xaa\xe3\x83\xbc\0" /* offset 9227 */
  30003   "\xe3\x82\xad\xe3\x82\x99\xe3\x83\xab\xe3\x82\xbf\xe3\x82\x99\xe3\x83\xbc\0" /* offset 9240 */
  30004   "\xe3\x82\xad\xe3\x83\xad\0" /* offset 9259 */
  30005   "\xe3\x82\xad\xe3\x83\xad\xe3\x82\xaf\xe3\x82\x99\xe3\x83\xa9\xe3\x83\xa0\0" /* offset 9266 */
  30006   "\xe3\x82\xad\xe3\x83\xad\xe3\x83\xa1\xe3\x83\xbc\xe3\x83\x88\xe3\x83\xab\0" /* offset 9285 */
  30007   "\xe3\x82\xad\xe3\x83\xad\xe3\x83\xaf\xe3\x83\x83\xe3\x83\x88\0" /* offset 9304 */
  30008   "\xe3\x82\xaf\xe3\x82\x99\xe3\x83\xa9\xe3\x83\xa0\0" /* offset 9320 */
  30009   "\xe3\x82\xaf\xe3\x82\x99\xe3\x83\xa9\xe3\x83\xa0\xe3\x83\x88\xe3\x83\xb3\0" /* offset 9333 */
  30010   "\xe3\x82\xaf\xe3\x83\xab\xe3\x82\xbb\xe3\x82\x99\xe3\x82\xa4\xe3\x83\xad\0" /* offset 9352 */
  30011   "\xe3\x82\xaf\xe3\x83\xad\xe3\x83\xbc\xe3\x83\x8d\0" /* offset 9371 */
  30012   "\xe3\x82\xb1\xe3\x83\xbc\xe3\x82\xb9\0" /* offset 9384 */
  30013   "\xe3\x82\xb3\xe3\x83\xab\xe3\x83\x8a\0" /* offset 9394 */
  30014   "\xe3\x82\xb3\xe3\x83\xbc\xe3\x83\x9b\xe3\x82\x9a\0" /* offset 9404 */
  30015   "\xe3\x82\xb5\xe3\x82\xa4\xe3\x82\xaf\xe3\x83\xab\0" /* offset 9417 */
  30016   "\xe3\x82\xb5\xe3\x83\xb3\xe3\x83\x81\xe3\x83\xbc\xe3\x83\xa0\0" /* offset 9430 */
  30017   "\xe3\x82\xb7\xe3\x83\xaa\xe3\x83\xb3\xe3\x82\xaf\xe3\x82\x99\0" /* offset 9446 */
  30018   "\xe3\x82\xbb\xe3\x83\xb3\xe3\x83\x81\0" /* offset 9462 */
  30019   "\xe3\x82\xbb\xe3\x83\xb3\xe3\x83\x88\0" /* offset 9472 */
  30020   "\xe3\x82\xbf\xe3\x82\x99\xe3\x83\xbc\xe3\x82\xb9\0" /* offset 9482 */
  30021   "\xe3\x83\x86\xe3\x82\x99\xe3\x82\xb7\0" /* offset 9495 */
  30022   "\xe3\x83\x88\xe3\x82\x99\xe3\x83\xab\0" /* offset 9505 */
  30023   "\xe3\x83\x88\xe3\x83\xb3\0" /* offset 9515 */
  30024   "\xe3\x83\x8a\xe3\x83\x8e\0" /* offset 9522 */
  30025   "\xe3\x83\x8e\xe3\x83\x83\xe3\x83\x88\0" /* offset 9529 */
  30026   "\xe3\x83\x8f\xe3\x82\xa4\xe3\x83\x84\0" /* offset 9539 */
  30027   "\xe3\x83\x8f\xe3\x82\x9a\xe3\x83\xbc\xe3\x82\xbb\xe3\x83\xb3\xe3\x83\x88\0" /* offset 9549 */
  30028   "\xe3\x83\x8f\xe3\x82\x9a\xe3\x83\xbc\xe3\x83\x84\0" /* offset 9568 */
  30029   "\xe3\x83\x8f\xe3\x82\x99\xe3\x83\xbc\xe3\x83\xac\xe3\x83\xab\0" /* offset 9581 */
  30030   "\xe3\x83\x92\xe3\x82\x9a\xe3\x82\xa2\xe3\x82\xb9\xe3\x83\x88\xe3\x83\xab\0" /* offset 9597 */
  30031   "\xe3\x83\x92\xe3\x82\x9a\xe3\x82\xaf\xe3\x83\xab\0" /* offset 9616 */
  30032   "\xe3\x83\x92\xe3\x82\x9a\xe3\x82\xb3\0" /* offset 9629 */
  30033   "\xe3\x83\x92\xe3\x82\x99\xe3\x83\xab\0" /* offset 9639 */
  30034   "\xe3\x83\x95\xe3\x82\xa1\xe3\x83\xa9\xe3\x83\x83\xe3\x83\x88\xe3\x82\x99\0" /* offset 9649 */
  30035   "\xe3\x83\x95\xe3\x82\xa3\xe3\x83\xbc\xe3\x83\x88\0" /* offset 9668 */
  30036   "\xe3\x83\x95\xe3\x82\x99\xe3\x83\x83\xe3\x82\xb7\xe3\x82\xa7\xe3\x83\xab\0" /* offset 9681 */
  30037   "\xe3\x83\x95\xe3\x83\xa9\xe3\x83\xb3\0" /* offset 9700 */
  30038   "\xe3\x83\x98\xe3\x82\xaf\xe3\x82\xbf\xe3\x83\xbc\xe3\x83\xab\0" /* offset 9710 */
  30039   "\xe3\x83\x98\xe3\x82\x9a\xe3\x82\xbd\0" /* offset 9726 */
  30040   "\xe3\x83\x98\xe3\x82\x9a\xe3\x83\x8b\xe3\x83\x92\0" /* offset 9736 */
  30041   "\xe3\x83\x98\xe3\x83\xab\xe3\x83\x84\0" /* offset 9749 */
  30042   "\xe3\x83\x98\xe3\x82\x9a\xe3\x83\xb3\xe3\x82\xb9\0" /* offset 9759 */
  30043   "\xe3\x83\x98\xe3\x82\x9a\xe3\x83\xbc\xe3\x82\xb7\xe3\x82\x99\0" /* offset 9772 */
  30044   "\xe3\x83\x98\xe3\x82\x99\xe3\x83\xbc\xe3\x82\xbf\0" /* offset 9788 */
  30045   "\xe3\x83\x9b\xe3\x82\x9a\xe3\x82\xa4\xe3\x83\xb3\xe3\x83\x88\0" /* offset 9801 */
  30046   "\xe3\x83\x9b\xe3\x82\x99\xe3\x83\xab\xe3\x83\x88\0" /* offset 9817 */
  30047   "\xe3\x83\x9b\xe3\x83\xb3\0" /* offset 9830 */
  30048   "\xe3\x83\x9b\xe3\x82\x9a\xe3\x83\xb3\xe3\x83\x88\xe3\x82\x99\0" /* offset 9837 */
  30049   "\xe3\x83\x9b\xe3\x83\xbc\xe3\x83\xab\0" /* offset 9853 */
  30050   "\xe3\x83\x9b\xe3\x83\xbc\xe3\x83\xb3\0" /* offset 9863 */
  30051   "\xe3\x83\x9e\xe3\x82\xa4\xe3\x82\xaf\xe3\x83\xad\0" /* offset 9873 */
  30052   "\xe3\x83\x9e\xe3\x82\xa4\xe3\x83\xab\0" /* offset 9886 */
  30053   "\xe3\x83\x9e\xe3\x83\x83\xe3\x83\x8f\0" /* offset 9896 */
  30054   "\xe3\x83\x9e\xe3\x83\xab\xe3\x82\xaf\0" /* offset 9906 */
  30055   "\xe3\x83\x9e\xe3\x83\xb3\xe3\x82\xb7\xe3\x83\xa7\xe3\x83\xb3\0" /* offset 9916 */
  30056   "\xe3\x83\x9f\xe3\x82\xaf\xe3\x83\xad\xe3\x83\xb3\0" /* offset 9932 */
  30057   "\xe3\x83\x9f\xe3\x83\xaa\0" /* offset 9945 */
  30058   "\xe3\x83\x9f\xe3\x83\xaa\xe3\x83\x8f\xe3\x82\x99\xe3\x83\xbc\xe3\x83\xab\0" /* offset 9952 */
  30059   "\xe3\x83\xa1\xe3\x82\xab\xe3\x82\x99\0" /* offset 9971 */
  30060   "\xe3\x83\xa1\xe3\x82\xab\xe3\x82\x99\xe3\x83\x88\xe3\x83\xb3\0" /* offset 9981 */
  30061   "\xe3\x83\xa1\xe3\x83\xbc\xe3\x83\x88\xe3\x83\xab\0" /* offset 9997 */
  30062   "\xe3\x83\xa4\xe3\x83\xbc\xe3\x83\x88\xe3\x82\x99\0" /* offset 10010 */
  30063   "\xe3\x83\xa4\xe3\x83\xbc\xe3\x83\xab\0" /* offset 10023 */
  30064   "\xe3\x83\xa6\xe3\x82\xa2\xe3\x83\xb3\0" /* offset 10033 */
  30065   "\xe3\x83\xaa\xe3\x83\x83\xe3\x83\x88\xe3\x83\xab\0" /* offset 10043 */
  30066   "\xe3\x83\xaa\xe3\x83\xa9\0" /* offset 10056 */
  30067   "\xe3\x83\xab\xe3\x83\x92\xe3\x82\x9a\xe3\x83\xbc\0" /* offset 10063 */
  30068   "\xe3\x83\xab\xe3\x83\xbc\xe3\x83\x95\xe3\x82\x99\xe3\x83\xab\0" /* offset 10076 */
  30069   "\xe3\x83\xac\xe3\x83\xa0\0" /* offset 10092 */
  30070   "\xe3\x83\xac\xe3\x83\xb3\xe3\x83\x88\xe3\x82\xb1\xe3\x82\x99\xe3\x83\xb3\0" /* offset 10099 */
  30071   "\xe3\x83\xaf\xe3\x83\x83\xe3\x83\x88\0" /* offset 10118 */
  30072   "\x30\xe7\x82\xb9\0" /* offset 10128 */
  30073   "\x31\xe7\x82\xb9\0" /* offset 10133 */
  30074   "\x32\xe7\x82\xb9\0" /* offset 10138 */
  30075   "\x33\xe7\x82\xb9\0" /* offset 10143 */
  30076   "\x34\xe7\x82\xb9\0" /* offset 10148 */
  30077   "\x35\xe7\x82\xb9\0" /* offset 10153 */
  30078   "\x36\xe7\x82\xb9\0" /* offset 10158 */
  30079   "\x37\xe7\x82\xb9\0" /* offset 10163 */
  30080   "\x38\xe7\x82\xb9\0" /* offset 10168 */
  30081   "\x39\xe7\x82\xb9\0" /* offset 10173 */
  30082   "\x31\x30\xe7\x82\xb9\0" /* offset 10178 */
  30083   "\x31\x31\xe7\x82\xb9\0" /* offset 10184 */
  30084   "\x31\x32\xe7\x82\xb9\0" /* offset 10190 */
  30085   "\x31\x33\xe7\x82\xb9\0" /* offset 10196 */
  30086   "\x31\x34\xe7\x82\xb9\0" /* offset 10202 */
  30087   "\x31\x35\xe7\x82\xb9\0" /* offset 10208 */
  30088   "\x31\x36\xe7\x82\xb9\0" /* offset 10214 */
  30089   "\x31\x37\xe7\x82\xb9\0" /* offset 10220 */
  30090   "\x31\x38\xe7\x82\xb9\0" /* offset 10226 */
  30091   "\x31\x39\xe7\x82\xb9\0" /* offset 10232 */
  30092   "\x32\x30\xe7\x82\xb9\0" /* offset 10238 */
  30093   "\x32\x31\xe7\x82\xb9\0" /* offset 10244 */
  30094   "\x32\x32\xe7\x82\xb9\0" /* offset 10250 */
  30095   "\x32\x33\xe7\x82\xb9\0" /* offset 10256 */
  30096   "\x32\x34\xe7\x82\xb9\0" /* offset 10262 */
  30097   "\x68\x50\x61\0" /* offset 10268 */
  30098   "\x64\x61\0" /* offset 10272 */
  30099   "\x41\x55\0" /* offset 10275 */
  30100   "\x62\x61\x72\0" /* offset 10278 */
  30101   "\x6f\x56\0" /* offset 10282 */
  30102   "\x70\x63\0" /* offset 10285 */
  30103   "\x64\x6d\0" /* offset 10288 */
  30104   "\x64\x6d\x32\0" /* offset 10291 */
  30105   "\x64\x6d\x33\0" /* offset 10295 */
  30106   "\x49\x55\0" /* offset 10299 */
  30107   "\xe5\xb9\xb3\xe6\x88\x90\0" /* offset 10302 */
  30108   "\xe6\x98\xad\xe5\x92\x8c\0" /* offset 10309 */
  30109   "\xe5\xa4\xa7\xe6\xad\xa3\0" /* offset 10316 */
  30110   "\xe6\x98\x8e\xe6\xb2\xbb\0" /* offset 10323 */
  30111   "\xe6\xa0\xaa\xe5\xbc\x8f\xe4\xbc\x9a\xe7\xa4\xbe\0" /* offset 10330 */
  30112   "\x70\x41\0" /* offset 10343 */
  30113   "\x6e\x41\0" /* offset 10346 */
  30114   "\xce\xbc\x41\0" /* offset 10349 */
  30115   "\x6d\x41\0" /* offset 10353 */
  30116   "\x6b\x41\0" /* offset 10356 */
  30117   "\x4b\x42\0" /* offset 10359 */
  30118   "\x4d\x42\0" /* offset 10362 */
  30119   "\x47\x42\0" /* offset 10365 */
  30120   "\x63\x61\x6c\0" /* offset 10368 */
  30121   "\x6b\x63\x61\x6c\0" /* offset 10372 */
  30122   "\x70\x46\0" /* offset 10377 */
  30123   "\x6e\x46\0" /* offset 10380 */
  30124   "\xce\xbc\x46\0" /* offset 10383 */
  30125   "\xce\xbc\x67\0" /* offset 10387 */
  30126   "\x6d\x67\0" /* offset 10391 */
  30127   "\x6b\x67\0" /* offset 10394 */
  30128   "\x48\x7a\0" /* offset 10397 */
  30129   "\x6b\x48\x7a\0" /* offset 10400 */
  30130   "\x4d\x48\x7a\0" /* offset 10404 */
  30131   "\x47\x48\x7a\0" /* offset 10408 */
  30132   "\x54\x48\x7a\0" /* offset 10412 */
  30133   "\xce\xbc\x6c\0" /* offset 10416 */
  30134   "\x6d\x6c\0" /* offset 10420 */
  30135   "\x64\x6c\0" /* offset 10423 */
  30136   "\x6b\x6c\0" /* offset 10426 */
  30137   "\x66\x6d\0" /* offset 10429 */
  30138   "\x6e\x6d\0" /* offset 10432 */
  30139   "\xce\xbc\x6d\0" /* offset 10435 */
  30140   "\x6d\x6d\0" /* offset 10439 */
  30141   "\x63\x6d\0" /* offset 10442 */
  30142   "\x6b\x6d\0" /* offset 10445 */
  30143   "\x6d\x6d\x32\0" /* offset 10448 */
  30144   "\x63\x6d\x32\0" /* offset 10452 */
  30145   "\x6d\x32\0" /* offset 10456 */
  30146   "\x6b\x6d\x32\0" /* offset 10459 */
  30147   "\x6d\x6d\x33\0" /* offset 10463 */
  30148   "\x63\x6d\x33\0" /* offset 10467 */
  30149   "\x6d\x33\0" /* offset 10471 */
  30150   "\x6b\x6d\x33\0" /* offset 10474 */
  30151   "\x6d\xe2\x88\x95\x73\0" /* offset 10478 */
  30152   "\x6d\xe2\x88\x95\x73\x32\0" /* offset 10484 */
  30153   "\x50\x61\0" /* offset 10491 */
  30154   "\x6b\x50\x61\0" /* offset 10494 */
  30155   "\x4d\x50\x61\0" /* offset 10498 */
  30156   "\x47\x50\x61\0" /* offset 10502 */
  30157   "\x72\x61\x64\0" /* offset 10506 */
  30158   "\x72\x61\x64\xe2\x88\x95\x73\0" /* offset 10510 */
  30159   "\x72\x61\x64\xe2\x88\x95\x73\x32\0" /* offset 10518 */
  30160   "\x70\x73\0" /* offset 10527 */
  30161   "\x6e\x73\0" /* offset 10530 */
  30162   "\xce\xbc\x73\0" /* offset 10533 */
  30163   "\x6d\x73\0" /* offset 10537 */
  30164   "\x70\x56\0" /* offset 10540 */
  30165   "\x6e\x56\0" /* offset 10543 */
  30166   "\xce\xbc\x56\0" /* offset 10546 */
  30167   "\x6d\x56\0" /* offset 10550 */
  30168   "\x6b\x56\0" /* offset 10553 */
  30169   "\x4d\x56\0" /* offset 10556 */
  30170   "\x70\x57\0" /* offset 10559 */
  30171   "\x6e\x57\0" /* offset 10562 */
  30172   "\xce\xbc\x57\0" /* offset 10565 */
  30173   "\x6d\x57\0" /* offset 10569 */
  30174   "\x6b\x57\0" /* offset 10572 */
  30175   "\x4d\x57\0" /* offset 10575 */
  30176   "\x6b\xce\xa9\0" /* offset 10578 */
  30177   "\x4d\xce\xa9\0" /* offset 10582 */
  30178   "\x61\x2e\x6d\x2e\0" /* offset 10586 */
  30179   "\x42\x71\0" /* offset 10591 */
  30180   "\x63\x63\0" /* offset 10594 */
  30181   "\x63\x64\0" /* offset 10597 */
  30182   "\x43\xe2\x88\x95\x6b\x67\0" /* offset 10600 */
  30183   "\x43\x6f\x2e\0" /* offset 10607 */
  30184   "\x64\x42\0" /* offset 10611 */
  30185   "\x47\x79\0" /* offset 10614 */
  30186   "\x68\x61\0" /* offset 10617 */
  30187   "\x48\x50\0" /* offset 10620 */
  30188   "\x69\x6e\0" /* offset 10623 */
  30189   "\x4b\x4b\0" /* offset 10626 */
  30190   "\x4b\x4d\0" /* offset 10629 */
  30191   "\x6b\x74\0" /* offset 10632 */
  30192   "\x6c\x6d\0" /* offset 10635 */
  30193   "\x6c\x6e\0" /* offset 10638 */
  30194   "\x6c\x6f\x67\0" /* offset 10641 */
  30195   "\x6c\x78\0" /* offset 10645 */
  30196   "\x6d\x62\0" /* offset 10648 */
  30197   "\x6d\x69\x6c\0" /* offset 10651 */
  30198   "\x6d\x6f\x6c\0" /* offset 10655 */
  30199   "\x50\x48\0" /* offset 10659 */
  30200   "\x70\x2e\x6d\x2e\0" /* offset 10662 */
  30201   "\x50\x50\x4d\0" /* offset 10667 */
  30202   "\x50\x52\0" /* offset 10671 */
  30203   "\x73\x72\0" /* offset 10674 */
  30204   "\x53\x76\0" /* offset 10677 */
  30205   "\x57\x62\0" /* offset 10680 */
  30206   "\x56\xe2\x88\x95\x6d\0" /* offset 10683 */
  30207   "\x41\xe2\x88\x95\x6d\0" /* offset 10689 */
  30208   "\x31\xe6\x97\xa5\0" /* offset 10695 */
  30209   "\x32\xe6\x97\xa5\0" /* offset 10700 */
  30210   "\x33\xe6\x97\xa5\0" /* offset 10705 */
  30211   "\x34\xe6\x97\xa5\0" /* offset 10710 */
  30212   "\x35\xe6\x97\xa5\0" /* offset 10715 */
  30213   "\x36\xe6\x97\xa5\0" /* offset 10720 */
  30214   "\x37\xe6\x97\xa5\0" /* offset 10725 */
  30215   "\x38\xe6\x97\xa5\0" /* offset 10730 */
  30216   "\x39\xe6\x97\xa5\0" /* offset 10735 */
  30217   "\x31\x30\xe6\x97\xa5\0" /* offset 10740 */
  30218   "\x31\x31\xe6\x97\xa5\0" /* offset 10746 */
  30219   "\x31\x32\xe6\x97\xa5\0" /* offset 10752 */
  30220   "\x31\x33\xe6\x97\xa5\0" /* offset 10758 */
  30221   "\x31\x34\xe6\x97\xa5\0" /* offset 10764 */
  30222   "\x31\x35\xe6\x97\xa5\0" /* offset 10770 */
  30223   "\x31\x36\xe6\x97\xa5\0" /* offset 10776 */
  30224   "\x31\x37\xe6\x97\xa5\0" /* offset 10782 */
  30225   "\x31\x38\xe6\x97\xa5\0" /* offset 10788 */
  30226   "\x31\x39\xe6\x97\xa5\0" /* offset 10794 */
  30227   "\x32\x30\xe6\x97\xa5\0" /* offset 10800 */
  30228   "\x32\x31\xe6\x97\xa5\0" /* offset 10806 */
  30229   "\x32\x32\xe6\x97\xa5\0" /* offset 10812 */
  30230   "\x32\x33\xe6\x97\xa5\0" /* offset 10818 */
  30231   "\x32\x34\xe6\x97\xa5\0" /* offset 10824 */
  30232   "\x32\x35\xe6\x97\xa5\0" /* offset 10830 */
  30233   "\x32\x36\xe6\x97\xa5\0" /* offset 10836 */
  30234   "\x32\x37\xe6\x97\xa5\0" /* offset 10842 */
  30235   "\x32\x38\xe6\x97\xa5\0" /* offset 10848 */
  30236   "\x32\x39\xe6\x97\xa5\0" /* offset 10854 */
  30237   "\x33\x30\xe6\x97\xa5\0" /* offset 10860 */
  30238   "\x33\x31\xe6\x97\xa5\0" /* offset 10866 */
  30239   "\x67\x61\x6c\0" /* offset 10872 */
  30240   "\xd1\x8a\0" /* offset 10876 */
  30241   "\xd1\x8c\0" /* offset 10879 */
  30242   "\xea\x9d\xaf\0" /* offset 10882 */
  30243   "\xc4\xa6\0" /* offset 10886 */
  30244   "\xc5\x93\0" /* offset 10889 */
  30245   "\xea\x9c\xa7\0" /* offset 10892 */
  30246   "\xea\xac\xb7\0" /* offset 10896 */
  30247   "\xc9\xab\0" /* offset 10900 */
  30248   "\xea\xad\x92\0" /* offset 10903 */
  30249   "\xe8\xb1\x88\0" /* offset 10907 */
  30250   "\xe6\x9b\xb4\0" /* offset 10911 */
  30251   "\xe8\xb3\x88\0" /* offset 10915 */
  30252   "\xe6\xbb\x91\0" /* offset 10919 */
  30253   "\xe4\xb8\xb2\0" /* offset 10923 */
  30254   "\xe5\x8f\xa5\0" /* offset 10927 */
  30255   "\xe5\xa5\x91\0" /* offset 10931 */
  30256   "\xe5\x96\x87\0" /* offset 10935 */
  30257   "\xe5\xa5\x88\0" /* offset 10939 */
  30258   "\xe6\x87\xb6\0" /* offset 10943 */
  30259   "\xe7\x99\xa9\0" /* offset 10947 */
  30260   "\xe7\xbe\x85\0" /* offset 10951 */
  30261   "\xe8\x98\xbf\0" /* offset 10955 */
  30262   "\xe8\x9e\xba\0" /* offset 10959 */
  30263   "\xe8\xa3\xb8\0" /* offset 10963 */
  30264   "\xe9\x82\x8f\0" /* offset 10967 */
  30265   "\xe6\xa8\x82\0" /* offset 10971 */
  30266   "\xe6\xb4\x9b\0" /* offset 10975 */
  30267   "\xe7\x83\x99\0" /* offset 10979 */
  30268   "\xe7\x8f\x9e\0" /* offset 10983 */
  30269   "\xe8\x90\xbd\0" /* offset 10987 */
  30270   "\xe9\x85\xaa\0" /* offset 10991 */
  30271   "\xe9\xa7\xb1\0" /* offset 10995 */
  30272   "\xe4\xba\x82\0" /* offset 10999 */
  30273   "\xe5\x8d\xb5\0" /* offset 11003 */
  30274   "\xe6\xac\x84\0" /* offset 11007 */
  30275   "\xe7\x88\x9b\0" /* offset 11011 */
  30276   "\xe8\x98\xad\0" /* offset 11015 */
  30277   "\xe9\xb8\x9e\0" /* offset 11019 */
  30278   "\xe5\xb5\x90\0" /* offset 11023 */
  30279   "\xe6\xbf\xab\0" /* offset 11027 */
  30280   "\xe8\x97\x8d\0" /* offset 11031 */
  30281   "\xe8\xa5\xa4\0" /* offset 11035 */
  30282   "\xe6\x8b\x89\0" /* offset 11039 */
  30283   "\xe8\x87\x98\0" /* offset 11043 */
  30284   "\xe8\xa0\x9f\0" /* offset 11047 */
  30285   "\xe5\xbb\x8a\0" /* offset 11051 */
  30286   "\xe6\x9c\x97\0" /* offset 11055 */
  30287   "\xe6\xb5\xaa\0" /* offset 11059 */
  30288   "\xe7\x8b\xbc\0" /* offset 11063 */
  30289   "\xe9\x83\x8e\0" /* offset 11067 */
  30290   "\xe4\xbe\x86\0" /* offset 11071 */
  30291   "\xe5\x86\xb7\0" /* offset 11075 */
  30292   "\xe5\x8b\x9e\0" /* offset 11079 */
  30293   "\xe6\x93\x84\0" /* offset 11083 */
  30294   "\xe6\xab\x93\0" /* offset 11087 */
  30295   "\xe7\x88\x90\0" /* offset 11091 */
  30296   "\xe7\x9b\xa7\0" /* offset 11095 */
  30297   "\xe8\x98\x86\0" /* offset 11099 */
  30298   "\xe8\x99\x9c\0" /* offset 11103 */
  30299   "\xe8\xb7\xaf\0" /* offset 11107 */
  30300   "\xe9\x9c\xb2\0" /* offset 11111 */
  30301   "\xe9\xad\xaf\0" /* offset 11115 */
  30302   "\xe9\xb7\xba\0" /* offset 11119 */
  30303   "\xe7\xa2\x8c\0" /* offset 11123 */
  30304   "\xe7\xa5\xbf\0" /* offset 11127 */
  30305   "\xe7\xb6\xa0\0" /* offset 11131 */
  30306   "\xe8\x8f\x89\0" /* offset 11135 */
  30307   "\xe9\x8c\x84\0" /* offset 11139 */
  30308   "\xe8\xab\x96\0" /* offset 11143 */
  30309   "\xe5\xa3\x9f\0" /* offset 11147 */
  30310   "\xe5\xbc\x84\0" /* offset 11151 */
  30311   "\xe7\xb1\xa0\0" /* offset 11155 */
  30312   "\xe8\x81\xbe\0" /* offset 11159 */
  30313   "\xe7\x89\xa2\0" /* offset 11163 */
  30314   "\xe7\xa3\x8a\0" /* offset 11167 */
  30315   "\xe8\xb3\x82\0" /* offset 11171 */
  30316   "\xe9\x9b\xb7\0" /* offset 11175 */
  30317   "\xe5\xa3\x98\0" /* offset 11179 */
  30318   "\xe5\xb1\xa2\0" /* offset 11183 */
  30319   "\xe6\xa8\x93\0" /* offset 11187 */
  30320   "\xe6\xb7\x9a\0" /* offset 11191 */
  30321   "\xe6\xbc\x8f\0" /* offset 11195 */
  30322   "\xe7\xb4\xaf\0" /* offset 11199 */
  30323   "\xe7\xb8\xb7\0" /* offset 11203 */
  30324   "\xe9\x99\x8b\0" /* offset 11207 */
  30325   "\xe5\x8b\x92\0" /* offset 11211 */
  30326   "\xe8\x82\x8b\0" /* offset 11215 */
  30327   "\xe5\x87\x9c\0" /* offset 11219 */
  30328   "\xe5\x87\x8c\0" /* offset 11223 */
  30329   "\xe7\xa8\x9c\0" /* offset 11227 */
  30330   "\xe7\xb6\xbe\0" /* offset 11231 */
  30331   "\xe8\x8f\xb1\0" /* offset 11235 */
  30332   "\xe9\x99\xb5\0" /* offset 11239 */
  30333   "\xe8\xae\x80\0" /* offset 11243 */
  30334   "\xe6\x8b\x8f\0" /* offset 11247 */
  30335   "\xe8\xab\xbe\0" /* offset 11251 */
  30336   "\xe4\xb8\xb9\0" /* offset 11255 */
  30337   "\xe5\xaf\xa7\0" /* offset 11259 */
  30338   "\xe6\x80\x92\0" /* offset 11263 */
  30339   "\xe7\x8e\x87\0" /* offset 11267 */
  30340   "\xe7\x95\xb0\0" /* offset 11271 */
  30341   "\xe5\x8c\x97\0" /* offset 11275 */
  30342   "\xe7\xa3\xbb\0" /* offset 11279 */
  30343   "\xe4\xbe\xbf\0" /* offset 11283 */
  30344   "\xe5\xbe\xa9\0" /* offset 11287 */
  30345   "\xe4\xb8\x8d\0" /* offset 11291 */
  30346   "\xe6\xb3\x8c\0" /* offset 11295 */
  30347   "\xe6\x95\xb8\0" /* offset 11299 */
  30348   "\xe7\xb4\xa2\0" /* offset 11303 */
  30349   "\xe5\x8f\x83\0" /* offset 11307 */
  30350   "\xe5\xa1\x9e\0" /* offset 11311 */
  30351   "\xe7\x9c\x81\0" /* offset 11315 */
  30352   "\xe8\x91\x89\0" /* offset 11319 */
  30353   "\xe8\xaa\xaa\0" /* offset 11323 */
  30354   "\xe6\xae\xba\0" /* offset 11327 */
  30355   "\xe6\xb2\x88\0" /* offset 11331 */
  30356   "\xe6\x8b\xbe\0" /* offset 11335 */
  30357   "\xe8\x8b\xa5\0" /* offset 11339 */
  30358   "\xe6\x8e\xa0\0" /* offset 11343 */
  30359   "\xe7\x95\xa5\0" /* offset 11347 */
  30360   "\xe4\xba\xae\0" /* offset 11351 */
  30361   "\xe5\x85\xa9\0" /* offset 11355 */
  30362   "\xe5\x87\x89\0" /* offset 11359 */
  30363   "\xe6\xa2\x81\0" /* offset 11363 */
  30364   "\xe7\xb3\xa7\0" /* offset 11367 */
  30365   "\xe8\x89\xaf\0" /* offset 11371 */
  30366   "\xe8\xab\x92\0" /* offset 11375 */
  30367   "\xe9\x87\x8f\0" /* offset 11379 */
  30368   "\xe5\x8b\xb5\0" /* offset 11383 */
  30369   "\xe5\x91\x82\0" /* offset 11387 */
  30370   "\xe5\xbb\xac\0" /* offset 11391 */
  30371   "\xe6\x97\x85\0" /* offset 11395 */
  30372   "\xe6\xbf\xbe\0" /* offset 11399 */
  30373   "\xe7\xa4\xaa\0" /* offset 11403 */
  30374   "\xe9\x96\xad\0" /* offset 11407 */
  30375   "\xe9\xa9\xaa\0" /* offset 11411 */
  30376   "\xe9\xba\x97\0" /* offset 11415 */
  30377   "\xe9\xbb\x8e\0" /* offset 11419 */
  30378   "\xe6\x9b\x86\0" /* offset 11423 */
  30379   "\xe6\xad\xb7\0" /* offset 11427 */
  30380   "\xe8\xbd\xa2\0" /* offset 11431 */
  30381   "\xe5\xb9\xb4\0" /* offset 11435 */
  30382   "\xe6\x86\x90\0" /* offset 11439 */
  30383   "\xe6\x88\x80\0" /* offset 11443 */
  30384   "\xe6\x92\x9a\0" /* offset 11447 */
  30385   "\xe6\xbc\xa3\0" /* offset 11451 */
  30386   "\xe7\x85\x89\0" /* offset 11455 */
  30387   "\xe7\x92\x89\0" /* offset 11459 */
  30388   "\xe7\xa7\x8a\0" /* offset 11463 */
  30389   "\xe7\xb7\xb4\0" /* offset 11467 */
  30390   "\xe8\x81\xaf\0" /* offset 11471 */
  30391   "\xe8\xbc\xa6\0" /* offset 11475 */
  30392   "\xe8\x93\xae\0" /* offset 11479 */
  30393   "\xe9\x80\xa3\0" /* offset 11483 */
  30394   "\xe9\x8d\x8a\0" /* offset 11487 */
  30395   "\xe5\x88\x97\0" /* offset 11491 */
  30396   "\xe5\x8a\xa3\0" /* offset 11495 */
  30397   "\xe5\x92\xbd\0" /* offset 11499 */
  30398   "\xe7\x83\x88\0" /* offset 11503 */
  30399   "\xe8\xa3\x82\0" /* offset 11507 */
  30400   "\xe5\xbb\x89\0" /* offset 11511 */
  30401   "\xe5\xbf\xb5\0" /* offset 11515 */
  30402   "\xe6\x8d\xbb\0" /* offset 11519 */
  30403   "\xe6\xae\xae\0" /* offset 11523 */
  30404   "\xe7\xb0\xbe\0" /* offset 11527 */
  30405   "\xe7\x8d\xb5\0" /* offset 11531 */
  30406   "\xe4\xbb\xa4\0" /* offset 11535 */
  30407   "\xe5\x9b\xb9\0" /* offset 11539 */
  30408   "\xe5\xb6\xba\0" /* offset 11543 */
  30409   "\xe6\x80\x9c\0" /* offset 11547 */
  30410   "\xe7\x8e\xb2\0" /* offset 11551 */
  30411   "\xe7\x91\xa9\0" /* offset 11555 */
  30412   "\xe7\xbe\x9a\0" /* offset 11559 */
  30413   "\xe8\x81\x86\0" /* offset 11563 */
  30414   "\xe9\x88\xb4\0" /* offset 11567 */
  30415   "\xe9\x9b\xb6\0" /* offset 11571 */
  30416   "\xe9\x9d\x88\0" /* offset 11575 */
  30417   "\xe9\xa0\x98\0" /* offset 11579 */
  30418   "\xe4\xbe\x8b\0" /* offset 11583 */
  30419   "\xe7\xa6\xae\0" /* offset 11587 */
  30420   "\xe9\x86\xb4\0" /* offset 11591 */
  30421   "\xe9\x9a\xb8\0" /* offset 11595 */
  30422   "\xe6\x83\xa1\0" /* offset 11599 */
  30423   "\xe4\xba\x86\0" /* offset 11603 */
  30424   "\xe5\x83\x9a\0" /* offset 11607 */
  30425   "\xe5\xaf\xae\0" /* offset 11611 */
  30426   "\xe5\xb0\xbf\0" /* offset 11615 */
  30427   "\xe6\x96\x99\0" /* offset 11619 */
  30428   "\xe7\x87\x8e\0" /* offset 11623 */
  30429   "\xe7\x99\x82\0" /* offset 11627 */
  30430   "\xe8\x93\xbc\0" /* offset 11631 */
  30431   "\xe9\x81\xbc\0" /* offset 11635 */
  30432   "\xe6\x9a\x88\0" /* offset 11639 */
  30433   "\xe9\x98\xae\0" /* offset 11643 */
  30434   "\xe5\x8a\x89\0" /* offset 11647 */
  30435   "\xe6\x9d\xbb\0" /* offset 11651 */
  30436   "\xe6\x9f\xb3\0" /* offset 11655 */
  30437   "\xe6\xb5\x81\0" /* offset 11659 */
  30438   "\xe6\xba\x9c\0" /* offset 11663 */
  30439   "\xe7\x90\x89\0" /* offset 11667 */
  30440   "\xe7\x95\x99\0" /* offset 11671 */
  30441   "\xe7\xa1\xab\0" /* offset 11675 */
  30442   "\xe7\xb4\x90\0" /* offset 11679 */
  30443   "\xe9\xa1\x9e\0" /* offset 11683 */
  30444   "\xe6\x88\xae\0" /* offset 11687 */
  30445   "\xe9\x99\xb8\0" /* offset 11691 */
  30446   "\xe5\x80\xab\0" /* offset 11695 */
  30447   "\xe5\xb4\x99\0" /* offset 11699 */
  30448   "\xe6\xb7\xaa\0" /* offset 11703 */
  30449   "\xe8\xbc\xaa\0" /* offset 11707 */
  30450   "\xe5\xbe\x8b\0" /* offset 11711 */
  30451   "\xe6\x85\x84\0" /* offset 11715 */
  30452   "\xe6\xa0\x97\0" /* offset 11719 */
  30453   "\xe9\x9a\x86\0" /* offset 11723 */
  30454   "\xe5\x88\xa9\0" /* offset 11727 */
  30455   "\xe5\x90\x8f\0" /* offset 11731 */
  30456   "\xe5\xb1\xa5\0" /* offset 11735 */
  30457   "\xe6\x98\x93\0" /* offset 11739 */
  30458   "\xe6\x9d\x8e\0" /* offset 11743 */
  30459   "\xe6\xa2\xa8\0" /* offset 11747 */
  30460   "\xe6\xb3\xa5\0" /* offset 11751 */
  30461   "\xe7\x90\x86\0" /* offset 11755 */
  30462   "\xe7\x97\xa2\0" /* offset 11759 */
  30463   "\xe7\xbd\xb9\0" /* offset 11763 */
  30464   "\xe8\xa3\x8f\0" /* offset 11767 */
  30465   "\xe8\xa3\xa1\0" /* offset 11771 */
  30466   "\xe9\x9b\xa2\0" /* offset 11775 */
  30467   "\xe5\x8c\xbf\0" /* offset 11779 */
  30468   "\xe6\xba\xba\0" /* offset 11783 */
  30469   "\xe5\x90\x9d\0" /* offset 11787 */
  30470   "\xe7\x87\x90\0" /* offset 11791 */
  30471   "\xe7\x92\x98\0" /* offset 11795 */
  30472   "\xe8\x97\xba\0" /* offset 11799 */
  30473   "\xe9\x9a\xa3\0" /* offset 11803 */
  30474   "\xe9\xb1\x97\0" /* offset 11807 */
  30475   "\xe9\xba\x9f\0" /* offset 11811 */
  30476   "\xe6\x9e\x97\0" /* offset 11815 */
  30477   "\xe6\xb7\x8b\0" /* offset 11819 */
  30478   "\xe8\x87\xa8\0" /* offset 11823 */
  30479   "\xe7\xac\xa0\0" /* offset 11827 */
  30480   "\xe7\xb2\x92\0" /* offset 11831 */
  30481   "\xe7\x8b\x80\0" /* offset 11835 */
  30482   "\xe7\x82\x99\0" /* offset 11839 */
  30483   "\xe8\xad\x98\0" /* offset 11843 */
  30484   "\xe4\xbb\x80\0" /* offset 11847 */
  30485   "\xe8\x8c\xb6\0" /* offset 11851 */
  30486   "\xe5\x88\xba\0" /* offset 11855 */
  30487   "\xe5\x88\x87\0" /* offset 11859 */
  30488   "\xe5\xba\xa6\0" /* offset 11863 */
  30489   "\xe6\x8b\x93\0" /* offset 11867 */
  30490   "\xe7\xb3\x96\0" /* offset 11871 */
  30491   "\xe5\xae\x85\0" /* offset 11875 */
  30492   "\xe6\xb4\x9e\0" /* offset 11879 */
  30493   "\xe6\x9a\xb4\0" /* offset 11883 */
  30494   "\xe8\xbc\xbb\0" /* offset 11887 */
  30495   "\xe9\x99\x8d\0" /* offset 11891 */
  30496   "\xe5\xbb\x93\0" /* offset 11895 */
  30497   "\xe5\x85\x80\0" /* offset 11899 */
  30498   "\xe5\x97\x80\0" /* offset 11903 */
  30499   "\xe5\xa1\x9a\0" /* offset 11907 */
  30500   "\xe6\x99\xb4\0" /* offset 11911 */
  30501   "\xe5\x87\x9e\0" /* offset 11915 */
  30502   "\xe7\x8c\xaa\0" /* offset 11919 */
  30503   "\xe7\x9b\x8a\0" /* offset 11923 */
  30504   "\xe7\xa4\xbc\0" /* offset 11927 */
  30505   "\xe7\xa5\x9e\0" /* offset 11931 */
  30506   "\xe7\xa5\xa5\0" /* offset 11935 */
  30507   "\xe7\xa6\x8f\0" /* offset 11939 */
  30508   "\xe9\x9d\x96\0" /* offset 11943 */
  30509   "\xe7\xb2\xbe\0" /* offset 11947 */
  30510   "\xe8\x98\x92\0" /* offset 11951 */
  30511   "\xe8\xab\xb8\0" /* offset 11955 */
  30512   "\xe9\x80\xb8\0" /* offset 11959 */
  30513   "\xe9\x83\xbd\0" /* offset 11963 */
  30514   "\xe9\xa3\xaf\0" /* offset 11967 */
  30515   "\xe9\xa3\xbc\0" /* offset 11971 */
  30516   "\xe9\xa4\xa8\0" /* offset 11975 */
  30517   "\xe9\xb6\xb4\0" /* offset 11979 */
  30518   "\xe9\x83\x9e\0" /* offset 11983 */
  30519   "\xe9\x9a\xb7\0" /* offset 11987 */
  30520   "\xe4\xbe\xae\0" /* offset 11991 */
  30521   "\xe5\x83\xa7\0" /* offset 11995 */
  30522   "\xe5\x85\x8d\0" /* offset 11999 */
  30523   "\xe5\x8b\x89\0" /* offset 12003 */
  30524   "\xe5\x8b\xa4\0" /* offset 12007 */
  30525   "\xe5\x8d\x91\0" /* offset 12011 */
  30526   "\xe5\x96\x9d\0" /* offset 12015 */
  30527   "\xe5\x98\x86\0" /* offset 12019 */
  30528   "\xe5\x99\xa8\0" /* offset 12023 */
  30529   "\xe5\xa1\x80\0" /* offset 12027 */
  30530   "\xe5\xa2\xa8\0" /* offset 12031 */
  30531   "\xe5\xb1\xa4\0" /* offset 12035 */
  30532   "\xe6\x82\x94\0" /* offset 12039 */
  30533   "\xe6\x85\xa8\0" /* offset 12043 */
  30534   "\xe6\x86\x8e\0" /* offset 12047 */
  30535   "\xe6\x87\xb2\0" /* offset 12051 */
  30536   "\xe6\x95\x8f\0" /* offset 12055 */
  30537   "\xe6\x97\xa2\0" /* offset 12059 */
  30538   "\xe6\x9a\x91\0" /* offset 12063 */
  30539   "\xe6\xa2\x85\0" /* offset 12067 */
  30540   "\xe6\xb5\xb7\0" /* offset 12071 */
  30541   "\xe6\xb8\x9a\0" /* offset 12075 */
  30542   "\xe6\xbc\xa2\0" /* offset 12079 */
  30543   "\xe7\x85\xae\0" /* offset 12083 */
  30544   "\xe7\x88\xab\0" /* offset 12087 */
  30545   "\xe7\x90\xa2\0" /* offset 12091 */
  30546   "\xe7\xa2\x91\0" /* offset 12095 */
  30547   "\xe7\xa5\x89\0" /* offset 12099 */
  30548   "\xe7\xa5\x88\0" /* offset 12103 */
  30549   "\xe7\xa5\x90\0" /* offset 12107 */
  30550   "\xe7\xa5\x96\0" /* offset 12111 */
  30551   "\xe7\xa6\x8d\0" /* offset 12115 */
  30552   "\xe7\xa6\x8e\0" /* offset 12119 */
  30553   "\xe7\xa9\x80\0" /* offset 12123 */
  30554   "\xe7\xaa\x81\0" /* offset 12127 */
  30555   "\xe7\xaf\x80\0" /* offset 12131 */
  30556   "\xe7\xb8\x89\0" /* offset 12135 */
  30557   "\xe7\xb9\x81\0" /* offset 12139 */
  30558   "\xe7\xbd\xb2\0" /* offset 12143 */
  30559   "\xe8\x80\x85\0" /* offset 12147 */
  30560   "\xe8\x87\xad\0" /* offset 12151 */
  30561   "\xe8\x89\xb9\0" /* offset 12155 */
  30562   "\xe8\x91\x97\0" /* offset 12159 */
  30563   "\xe8\xa4\x90\0" /* offset 12163 */
  30564   "\xe8\xa6\x96\0" /* offset 12167 */
  30565   "\xe8\xac\x81\0" /* offset 12171 */
  30566   "\xe8\xac\xb9\0" /* offset 12175 */
  30567   "\xe8\xb3\x93\0" /* offset 12179 */
  30568   "\xe8\xb4\x88\0" /* offset 12183 */
  30569   "\xe8\xbe\xb6\0" /* offset 12187 */
  30570   "\xe9\x9b\xa3\0" /* offset 12191 */
  30571   "\xe9\x9f\xbf\0" /* offset 12195 */
  30572   "\xe9\xa0\xbb\0" /* offset 12199 */
  30573   "\xe6\x81\xb5\0" /* offset 12203 */
  30574   "\xf0\xa4\x8b\xae\0" /* offset 12207 */
  30575   "\xe8\x88\x98\0" /* offset 12212 */
  30576   "\xe4\xb8\xa6\0" /* offset 12216 */
  30577   "\xe5\x86\xb5\0" /* offset 12220 */
  30578   "\xe5\x85\xa8\0" /* offset 12224 */
  30579   "\xe4\xbe\x80\0" /* offset 12228 */
  30580   "\xe5\x85\x85\0" /* offset 12232 */
  30581   "\xe5\x86\x80\0" /* offset 12236 */
  30582   "\xe5\x8b\x87\0" /* offset 12240 */
  30583   "\xe5\x8b\xba\0" /* offset 12244 */
  30584   "\xe5\x95\x95\0" /* offset 12248 */
  30585   "\xe5\x96\x99\0" /* offset 12252 */
  30586   "\xe5\x97\xa2\0" /* offset 12256 */
  30587   "\xe5\xa2\xb3\0" /* offset 12260 */
  30588   "\xe5\xa5\x84\0" /* offset 12264 */
  30589   "\xe5\xa5\x94\0" /* offset 12268 */
  30590   "\xe5\xa9\xa2\0" /* offset 12272 */
  30591   "\xe5\xac\xa8\0" /* offset 12276 */
  30592   "\xe5\xbb\x92\0" /* offset 12280 */
  30593   "\xe5\xbb\x99\0" /* offset 12284 */
  30594   "\xe5\xbd\xa9\0" /* offset 12288 */
  30595   "\xe5\xbe\xad\0" /* offset 12292 */
  30596   "\xe6\x83\x98\0" /* offset 12296 */
  30597   "\xe6\x85\x8e\0" /* offset 12300 */
  30598   "\xe6\x84\x88\0" /* offset 12304 */
  30599   "\xe6\x85\xa0\0" /* offset 12308 */
  30600   "\xe6\x88\xb4\0" /* offset 12312 */
  30601   "\xe6\x8f\x84\0" /* offset 12316 */
  30602   "\xe6\x90\x9c\0" /* offset 12320 */
  30603   "\xe6\x91\x92\0" /* offset 12324 */
  30604   "\xe6\x95\x96\0" /* offset 12328 */
  30605   "\xe6\x9c\x9b\0" /* offset 12332 */
  30606   "\xe6\x9d\x96\0" /* offset 12336 */
  30607   "\xe6\xbb\x9b\0" /* offset 12340 */
  30608   "\xe6\xbb\x8b\0" /* offset 12344 */
  30609   "\xe7\x80\x9e\0" /* offset 12348 */
  30610   "\xe7\x9e\xa7\0" /* offset 12352 */
  30611   "\xe7\x88\xb5\0" /* offset 12356 */
  30612   "\xe7\x8a\xaf\0" /* offset 12360 */
  30613   "\xe7\x91\xb1\0" /* offset 12364 */
  30614   "\xe7\x94\x86\0" /* offset 12368 */
  30615   "\xe7\x94\xbb\0" /* offset 12372 */
  30616   "\xe7\x98\x9d\0" /* offset 12376 */
  30617   "\xe7\x98\x9f\0" /* offset 12380 */
  30618   "\xe7\x9b\x9b\0" /* offset 12384 */
  30619   "\xe7\x9b\xb4\0" /* offset 12388 */
  30620   "\xe7\x9d\x8a\0" /* offset 12392 */
  30621   "\xe7\x9d\x80\0" /* offset 12396 */
  30622   "\xe7\xa3\x8c\0" /* offset 12400 */
  30623   "\xe7\xaa\xb1\0" /* offset 12404 */
  30624   "\xe7\xb1\xbb\0" /* offset 12408 */
  30625   "\xe7\xb5\x9b\0" /* offset 12412 */
  30626   "\xe7\xbc\xbe\0" /* offset 12416 */
  30627   "\xe8\x8d\x92\0" /* offset 12420 */
  30628   "\xe8\x8f\xaf\0" /* offset 12424 */
  30629   "\xe8\x9d\xb9\0" /* offset 12428 */
  30630   "\xe8\xa5\x81\0" /* offset 12432 */
  30631   "\xe8\xa6\x86\0" /* offset 12436 */
  30632   "\xe8\xaa\xbf\0" /* offset 12440 */
  30633   "\xe8\xab\x8b\0" /* offset 12444 */
  30634   "\xe8\xab\xad\0" /* offset 12448 */
  30635   "\xe8\xae\x8a\0" /* offset 12452 */
  30636   "\xe8\xbc\xb8\0" /* offset 12456 */
  30637   "\xe9\x81\xb2\0" /* offset 12460 */
  30638   "\xe9\x86\x99\0" /* offset 12464 */
  30639   "\xe9\x89\xb6\0" /* offset 12468 */
  30640   "\xe9\x99\xbc\0" /* offset 12472 */
  30641   "\xe9\x9f\x9b\0" /* offset 12476 */
  30642   "\xe9\xa0\x8b\0" /* offset 12480 */
  30643   "\xe9\xac\x92\0" /* offset 12484 */
  30644   "\xf0\xa2\xa1\x8a\0" /* offset 12488 */
  30645   "\xf0\xa2\xa1\x84\0" /* offset 12493 */
  30646   "\xf0\xa3\x8f\x95\0" /* offset 12498 */
  30647   "\xe3\xae\x9d\0" /* offset 12503 */
  30648   "\xe4\x80\x98\0" /* offset 12507 */
  30649   "\xe4\x80\xb9\0" /* offset 12511 */
  30650   "\xf0\xa5\x89\x89\0" /* offset 12515 */
  30651   "\xf0\xa5\xb3\x90\0" /* offset 12520 */
  30652   "\xf0\xa7\xbb\x93\0" /* offset 12525 */
  30653   "\xe9\xbd\x83\0" /* offset 12530 */
  30654   "\xe9\xbe\x8e\0" /* offset 12534 */
  30655   "\x66\x66\0" /* offset 12538 */
  30656   "\x66\x69\0" /* offset 12541 */
  30657   "\x66\x6c\0" /* offset 12544 */
  30658   "\x66\x66\x69\0" /* offset 12547 */
  30659   "\x66\x66\x6c\0" /* offset 12551 */
  30660   "\x73\x74\0" /* offset 12555 */
  30661   "\xd5\xb4\xd5\xb6\0" /* offset 12558 */
  30662   "\xd5\xb4\xd5\xa5\0" /* offset 12563 */
  30663   "\xd5\xb4\xd5\xab\0" /* offset 12568 */
  30664   "\xd5\xbe\xd5\xb6\0" /* offset 12573 */
  30665   "\xd5\xb4\xd5\xad\0" /* offset 12578 */
  30666   "\xd7\x99\xd6\xb4\0" /* offset 12583 */
  30667   "\xd7\xb2\xd6\xb7\0" /* offset 12588 */
  30668   "\xd7\xa2\0" /* offset 12593 */
  30669   "\xd7\x94\0" /* offset 12596 */
  30670   "\xd7\x9b\0" /* offset 12599 */
  30671   "\xd7\x9c\0" /* offset 12602 */
  30672   "\xd7\x9d\0" /* offset 12605 */
  30673   "\xd7\xa8\0" /* offset 12608 */
  30674   "\xd7\xaa\0" /* offset 12611 */
  30675   "\xd7\xa9\xd7\x81\0" /* offset 12614 */
  30676   "\xd7\xa9\xd7\x82\0" /* offset 12619 */
  30677   "\xd7\xa9\xd6\xbc\xd7\x81\0" /* offset 12624 */
  30678   "\xd7\xa9\xd6\xbc\xd7\x82\0" /* offset 12631 */
  30679   "\xd7\x90\xd6\xb7\0" /* offset 12638 */
  30680   "\xd7\x90\xd6\xb8\0" /* offset 12643 */
  30681   "\xd7\x90\xd6\xbc\0" /* offset 12648 */
  30682   "\xd7\x91\xd6\xbc\0" /* offset 12653 */
  30683   "\xd7\x92\xd6\xbc\0" /* offset 12658 */
  30684   "\xd7\x93\xd6\xbc\0" /* offset 12663 */
  30685   "\xd7\x94\xd6\xbc\0" /* offset 12668 */
  30686   "\xd7\x95\xd6\xbc\0" /* offset 12673 */
  30687   "\xd7\x96\xd6\xbc\0" /* offset 12678 */
  30688   "\xd7\x98\xd6\xbc\0" /* offset 12683 */
  30689   "\xd7\x99\xd6\xbc\0" /* offset 12688 */
  30690   "\xd7\x9a\xd6\xbc\0" /* offset 12693 */
  30691   "\xd7\x9b\xd6\xbc\0" /* offset 12698 */
  30692   "\xd7\x9c\xd6\xbc\0" /* offset 12703 */
  30693   "\xd7\x9e\xd6\xbc\0" /* offset 12708 */
  30694   "\xd7\xa0\xd6\xbc\0" /* offset 12713 */
  30695   "\xd7\xa1\xd6\xbc\0" /* offset 12718 */
  30696   "\xd7\xa3\xd6\xbc\0" /* offset 12723 */
  30697   "\xd7\xa4\xd6\xbc\0" /* offset 12728 */
  30698   "\xd7\xa6\xd6\xbc\0" /* offset 12733 */
  30699   "\xd7\xa7\xd6\xbc\0" /* offset 12738 */
  30700   "\xd7\xa8\xd6\xbc\0" /* offset 12743 */
  30701   "\xd7\xa9\xd6\xbc\0" /* offset 12748 */
  30702   "\xd7\xaa\xd6\xbc\0" /* offset 12753 */
  30703   "\xd7\x95\xd6\xb9\0" /* offset 12758 */
  30704   "\xd7\x91\xd6\xbf\0" /* offset 12763 */
  30705   "\xd7\x9b\xd6\xbf\0" /* offset 12768 */
  30706   "\xd7\xa4\xd6\xbf\0" /* offset 12773 */
  30707   "\xd7\x90\xd7\x9c\0" /* offset 12778 */
  30708   "\xd9\xb1\0" /* offset 12783 */
  30709   "\xd9\xbb\0" /* offset 12786 */
  30710   "\xd9\xbe\0" /* offset 12789 */
  30711   "\xda\x80\0" /* offset 12792 */
  30712   "\xd9\xba\0" /* offset 12795 */
  30713   "\xd9\xbf\0" /* offset 12798 */
  30714   "\xd9\xb9\0" /* offset 12801 */
  30715   "\xda\xa4\0" /* offset 12804 */
  30716   "\xda\xa6\0" /* offset 12807 */
  30717   "\xda\x84\0" /* offset 12810 */
  30718   "\xda\x83\0" /* offset 12813 */
  30719   "\xda\x86\0" /* offset 12816 */
  30720   "\xda\x87\0" /* offset 12819 */
  30721   "\xda\x8d\0" /* offset 12822 */
  30722   "\xda\x8c\0" /* offset 12825 */
  30723   "\xda\x8e\0" /* offset 12828 */
  30724   "\xda\x88\0" /* offset 12831 */
  30725   "\xda\x98\0" /* offset 12834 */
  30726   "\xda\x91\0" /* offset 12837 */
  30727   "\xda\xa9\0" /* offset 12840 */
  30728   "\xda\xaf\0" /* offset 12843 */
  30729   "\xda\xb3\0" /* offset 12846 */
  30730   "\xda\xb1\0" /* offset 12849 */
  30731   "\xda\xba\0" /* offset 12852 */
  30732   "\xda\xbb\0" /* offset 12855 */
  30733   "\xdb\x81\0" /* offset 12858 */
  30734   "\xda\xbe\0" /* offset 12861 */
  30735   "\xdb\x92\0" /* offset 12864 */
  30736   "\xda\xad\0" /* offset 12867 */
  30737   "\xdb\x87\0" /* offset 12870 */
  30738   "\xdb\x86\0" /* offset 12873 */
  30739   "\xdb\x88\0" /* offset 12876 */
  30740   "\xdb\x8b\0" /* offset 12879 */
  30741   "\xdb\x85\0" /* offset 12882 */
  30742   "\xdb\x89\0" /* offset 12885 */
  30743   "\xdb\x90\0" /* offset 12888 */
  30744   "\xd9\x89\0" /* offset 12891 */
  30745   "\xd9\x8a\xd9\x94\xd8\xa7\0" /* offset 12894 */
  30746   "\xd9\x8a\xd9\x94\xdb\x95\0" /* offset 12901 */
  30747   "\xd9\x8a\xd9\x94\xd9\x88\0" /* offset 12908 */
  30748   "\xd9\x8a\xd9\x94\xdb\x87\0" /* offset 12915 */
  30749   "\xd9\x8a\xd9\x94\xdb\x86\0" /* offset 12922 */
  30750   "\xd9\x8a\xd9\x94\xdb\x88\0" /* offset 12929 */
  30751   "\xd9\x8a\xd9\x94\xdb\x90\0" /* offset 12936 */
  30752   "\xd9\x8a\xd9\x94\xd9\x89\0" /* offset 12943 */
  30753   "\xdb\x8c\0" /* offset 12950 */
  30754   "\xd9\x8a\xd9\x94\xd8\xac\0" /* offset 12953 */
  30755   "\xd9\x8a\xd9\x94\xd8\xad\0" /* offset 12960 */
  30756   "\xd9\x8a\xd9\x94\xd9\x85\0" /* offset 12967 */
  30757   "\xd9\x8a\xd9\x94\xd9\x8a\0" /* offset 12974 */
  30758   "\xd8\xa8\xd8\xac\0" /* offset 12981 */
  30759   "\xd8\xa8\xd8\xad\0" /* offset 12986 */
  30760   "\xd8\xa8\xd8\xae\0" /* offset 12991 */
  30761   "\xd8\xa8\xd9\x85\0" /* offset 12996 */
  30762   "\xd8\xa8\xd9\x89\0" /* offset 13001 */
  30763   "\xd8\xa8\xd9\x8a\0" /* offset 13006 */
  30764   "\xd8\xaa\xd8\xac\0" /* offset 13011 */
  30765   "\xd8\xaa\xd8\xad\0" /* offset 13016 */
  30766   "\xd8\xaa\xd8\xae\0" /* offset 13021 */
  30767   "\xd8\xaa\xd9\x85\0" /* offset 13026 */
  30768   "\xd8\xaa\xd9\x89\0" /* offset 13031 */
  30769   "\xd8\xaa\xd9\x8a\0" /* offset 13036 */
  30770   "\xd8\xab\xd8\xac\0" /* offset 13041 */
  30771   "\xd8\xab\xd9\x85\0" /* offset 13046 */
  30772   "\xd8\xab\xd9\x89\0" /* offset 13051 */
  30773   "\xd8\xab\xd9\x8a\0" /* offset 13056 */
  30774   "\xd8\xac\xd8\xad\0" /* offset 13061 */
  30775   "\xd8\xac\xd9\x85\0" /* offset 13066 */
  30776   "\xd8\xad\xd8\xac\0" /* offset 13071 */
  30777   "\xd8\xad\xd9\x85\0" /* offset 13076 */
  30778   "\xd8\xae\xd8\xac\0" /* offset 13081 */
  30779   "\xd8\xae\xd8\xad\0" /* offset 13086 */
  30780   "\xd8\xae\xd9\x85\0" /* offset 13091 */
  30781   "\xd8\xb3\xd8\xac\0" /* offset 13096 */
  30782   "\xd8\xb3\xd8\xad\0" /* offset 13101 */
  30783   "\xd8\xb3\xd8\xae\0" /* offset 13106 */
  30784   "\xd8\xb3\xd9\x85\0" /* offset 13111 */
  30785   "\xd8\xb5\xd8\xad\0" /* offset 13116 */
  30786   "\xd8\xb5\xd9\x85\0" /* offset 13121 */
  30787   "\xd8\xb6\xd8\xac\0" /* offset 13126 */
  30788   "\xd8\xb6\xd8\xad\0" /* offset 13131 */
  30789   "\xd8\xb6\xd8\xae\0" /* offset 13136 */
  30790   "\xd8\xb6\xd9\x85\0" /* offset 13141 */
  30791   "\xd8\xb7\xd8\xad\0" /* offset 13146 */
  30792   "\xd8\xb7\xd9\x85\0" /* offset 13151 */
  30793   "\xd8\xb8\xd9\x85\0" /* offset 13156 */
  30794   "\xd8\xb9\xd8\xac\0" /* offset 13161 */
  30795   "\xd8\xb9\xd9\x85\0" /* offset 13166 */
  30796   "\xd8\xba\xd8\xac\0" /* offset 13171 */
  30797   "\xd8\xba\xd9\x85\0" /* offset 13176 */
  30798   "\xd9\x81\xd8\xac\0" /* offset 13181 */
  30799   "\xd9\x81\xd8\xad\0" /* offset 13186 */
  30800   "\xd9\x81\xd8\xae\0" /* offset 13191 */
  30801   "\xd9\x81\xd9\x85\0" /* offset 13196 */
  30802   "\xd9\x81\xd9\x89\0" /* offset 13201 */
  30803   "\xd9\x81\xd9\x8a\0" /* offset 13206 */
  30804   "\xd9\x82\xd8\xad\0" /* offset 13211 */
  30805   "\xd9\x82\xd9\x85\0" /* offset 13216 */
  30806   "\xd9\x82\xd9\x89\0" /* offset 13221 */
  30807   "\xd9\x82\xd9\x8a\0" /* offset 13226 */
  30808   "\xd9\x83\xd8\xa7\0" /* offset 13231 */
  30809   "\xd9\x83\xd8\xac\0" /* offset 13236 */
  30810   "\xd9\x83\xd8\xad\0" /* offset 13241 */
  30811   "\xd9\x83\xd8\xae\0" /* offset 13246 */
  30812   "\xd9\x83\xd9\x84\0" /* offset 13251 */
  30813   "\xd9\x83\xd9\x85\0" /* offset 13256 */
  30814   "\xd9\x83\xd9\x89\0" /* offset 13261 */
  30815   "\xd9\x83\xd9\x8a\0" /* offset 13266 */
  30816   "\xd9\x84\xd8\xac\0" /* offset 13271 */
  30817   "\xd9\x84\xd8\xad\0" /* offset 13276 */
  30818   "\xd9\x84\xd8\xae\0" /* offset 13281 */
  30819   "\xd9\x84\xd9\x85\0" /* offset 13286 */
  30820   "\xd9\x84\xd9\x89\0" /* offset 13291 */
  30821   "\xd9\x84\xd9\x8a\0" /* offset 13296 */
  30822   "\xd9\x85\xd8\xac\0" /* offset 13301 */
  30823   "\xd9\x85\xd8\xad\0" /* offset 13306 */
  30824   "\xd9\x85\xd8\xae\0" /* offset 13311 */
  30825   "\xd9\x85\xd9\x85\0" /* offset 13316 */
  30826   "\xd9\x85\xd9\x89\0" /* offset 13321 */
  30827   "\xd9\x85\xd9\x8a\0" /* offset 13326 */
  30828   "\xd9\x86\xd8\xac\0" /* offset 13331 */
  30829   "\xd9\x86\xd8\xad\0" /* offset 13336 */
  30830   "\xd9\x86\xd8\xae\0" /* offset 13341 */
  30831   "\xd9\x86\xd9\x85\0" /* offset 13346 */
  30832   "\xd9\x86\xd9\x89\0" /* offset 13351 */
  30833   "\xd9\x86\xd9\x8a\0" /* offset 13356 */
  30834   "\xd9\x87\xd8\xac\0" /* offset 13361 */
  30835   "\xd9\x87\xd9\x85\0" /* offset 13366 */
  30836   "\xd9\x87\xd9\x89\0" /* offset 13371 */
  30837   "\xd9\x87\xd9\x8a\0" /* offset 13376 */
  30838   "\xd9\x8a\xd8\xac\0" /* offset 13381 */
  30839   "\xd9\x8a\xd8\xad\0" /* offset 13386 */
  30840   "\xd9\x8a\xd8\xae\0" /* offset 13391 */
  30841   "\xd9\x8a\xd9\x85\0" /* offset 13396 */
  30842   "\xd9\x8a\xd9\x89\0" /* offset 13401 */
  30843   "\xd9\x8a\xd9\x8a\0" /* offset 13406 */
  30844   "\xd8\xb0\xd9\xb0\0" /* offset 13411 */
  30845   "\xd8\xb1\xd9\xb0\0" /* offset 13416 */
  30846   "\xd9\x89\xd9\xb0\0" /* offset 13421 */
  30847   "\x20\xd9\x8c\xd9\x91\0" /* offset 13426 */
  30848   "\x20\xd9\x8d\xd9\x91\0" /* offset 13432 */
  30849   "\x20\xd9\x8e\xd9\x91\0" /* offset 13438 */
  30850   "\x20\xd9\x8f\xd9\x91\0" /* offset 13444 */
  30851   "\x20\xd9\x90\xd9\x91\0" /* offset 13450 */
  30852   "\x20\xd9\x91\xd9\xb0\0" /* offset 13456 */
  30853   "\xd9\x8a\xd9\x94\xd8\xb1\0" /* offset 13462 */
  30854   "\xd9\x8a\xd9\x94\xd8\xb2\0" /* offset 13469 */
  30855   "\xd9\x8a\xd9\x94\xd9\x86\0" /* offset 13476 */
  30856   "\xd8\xa8\xd8\xb1\0" /* offset 13483 */
  30857   "\xd8\xa8\xd8\xb2\0" /* offset 13488 */
  30858   "\xd8\xa8\xd9\x86\0" /* offset 13493 */
  30859   "\xd8\xaa\xd8\xb1\0" /* offset 13498 */
  30860   "\xd8\xaa\xd8\xb2\0" /* offset 13503 */
  30861   "\xd8\xaa\xd9\x86\0" /* offset 13508 */
  30862   "\xd8\xab\xd8\xb1\0" /* offset 13513 */
  30863   "\xd8\xab\xd8\xb2\0" /* offset 13518 */
  30864   "\xd8\xab\xd9\x86\0" /* offset 13523 */
  30865   "\xd9\x85\xd8\xa7\0" /* offset 13528 */
  30866   "\xd9\x86\xd8\xb1\0" /* offset 13533 */
  30867   "\xd9\x86\xd8\xb2\0" /* offset 13538 */
  30868   "\xd9\x86\xd9\x86\0" /* offset 13543 */
  30869   "\xd9\x8a\xd8\xb1\0" /* offset 13548 */
  30870   "\xd9\x8a\xd8\xb2\0" /* offset 13553 */
  30871   "\xd9\x8a\xd9\x86\0" /* offset 13558 */
  30872   "\xd9\x8a\xd9\x94\xd8\xae\0" /* offset 13563 */
  30873   "\xd9\x8a\xd9\x94\xd9\x87\0" /* offset 13570 */
  30874   "\xd8\xa8\xd9\x87\0" /* offset 13577 */
  30875   "\xd8\xaa\xd9\x87\0" /* offset 13582 */
  30876   "\xd8\xb5\xd8\xae\0" /* offset 13587 */
  30877   "\xd9\x84\xd9\x87\0" /* offset 13592 */
  30878   "\xd9\x86\xd9\x87\0" /* offset 13597 */
  30879   "\xd9\x87\xd9\xb0\0" /* offset 13602 */
  30880   "\xd9\x8a\xd9\x87\0" /* offset 13607 */
  30881   "\xd8\xab\xd9\x87\0" /* offset 13612 */
  30882   "\xd8\xb3\xd9\x87\0" /* offset 13617 */
  30883   "\xd8\xb4\xd9\x85\0" /* offset 13622 */
  30884   "\xd8\xb4\xd9\x87\0" /* offset 13627 */
  30885   "\xd9\x80\xd9\x8e\xd9\x91\0" /* offset 13632 */
  30886   "\xd9\x80\xd9\x8f\xd9\x91\0" /* offset 13639 */
  30887   "\xd9\x80\xd9\x90\xd9\x91\0" /* offset 13646 */
  30888   "\xd8\xb7\xd9\x89\0" /* offset 13653 */
  30889   "\xd8\xb7\xd9\x8a\0" /* offset 13658 */
  30890   "\xd8\xb9\xd9\x89\0" /* offset 13663 */
  30891   "\xd8\xb9\xd9\x8a\0" /* offset 13668 */
  30892   "\xd8\xba\xd9\x89\0" /* offset 13673 */
  30893   "\xd8\xba\xd9\x8a\0" /* offset 13678 */
  30894   "\xd8\xb3\xd9\x89\0" /* offset 13683 */
  30895   "\xd8\xb3\xd9\x8a\0" /* offset 13688 */
  30896   "\xd8\xb4\xd9\x89\0" /* offset 13693 */
  30897   "\xd8\xb4\xd9\x8a\0" /* offset 13698 */
  30898   "\xd8\xad\xd9\x89\0" /* offset 13703 */
  30899   "\xd8\xad\xd9\x8a\0" /* offset 13708 */
  30900   "\xd8\xac\xd9\x89\0" /* offset 13713 */
  30901   "\xd8\xac\xd9\x8a\0" /* offset 13718 */
  30902   "\xd8\xae\xd9\x89\0" /* offset 13723 */
  30903   "\xd8\xae\xd9\x8a\0" /* offset 13728 */
  30904   "\xd8\xb5\xd9\x89\0" /* offset 13733 */
  30905   "\xd8\xb5\xd9\x8a\0" /* offset 13738 */
  30906   "\xd8\xb6\xd9\x89\0" /* offset 13743 */
  30907   "\xd8\xb6\xd9\x8a\0" /* offset 13748 */
  30908   "\xd8\xb4\xd8\xac\0" /* offset 13753 */
  30909   "\xd8\xb4\xd8\xad\0" /* offset 13758 */
  30910   "\xd8\xb4\xd8\xae\0" /* offset 13763 */
  30911   "\xd8\xb4\xd8\xb1\0" /* offset 13768 */
  30912   "\xd8\xb3\xd8\xb1\0" /* offset 13773 */
  30913   "\xd8\xb5\xd8\xb1\0" /* offset 13778 */
  30914   "\xd8\xb6\xd8\xb1\0" /* offset 13783 */
  30915   "\xd8\xa7\xd9\x8b\0" /* offset 13788 */
  30916   "\xd8\xaa\xd8\xac\xd9\x85\0" /* offset 13793 */
  30917   "\xd8\xaa\xd8\xad\xd8\xac\0" /* offset 13800 */
  30918   "\xd8\xaa\xd8\xad\xd9\x85\0" /* offset 13807 */
  30919   "\xd8\xaa\xd8\xae\xd9\x85\0" /* offset 13814 */
  30920   "\xd8\xaa\xd9\x85\xd8\xac\0" /* offset 13821 */
  30921   "\xd8\xaa\xd9\x85\xd8\xad\0" /* offset 13828 */
  30922   "\xd8\xaa\xd9\x85\xd8\xae\0" /* offset 13835 */
  30923   "\xd8\xac\xd9\x85\xd8\xad\0" /* offset 13842 */
  30924   "\xd8\xad\xd9\x85\xd9\x8a\0" /* offset 13849 */
  30925   "\xd8\xad\xd9\x85\xd9\x89\0" /* offset 13856 */
  30926   "\xd8\xb3\xd8\xad\xd8\xac\0" /* offset 13863 */
  30927   "\xd8\xb3\xd8\xac\xd8\xad\0" /* offset 13870 */
  30928   "\xd8\xb3\xd8\xac\xd9\x89\0" /* offset 13877 */
  30929   "\xd8\xb3\xd9\x85\xd8\xad\0" /* offset 13884 */
  30930   "\xd8\xb3\xd9\x85\xd8\xac\0" /* offset 13891 */
  30931   "\xd8\xb3\xd9\x85\xd9\x85\0" /* offset 13898 */
  30932   "\xd8\xb5\xd8\xad\xd8\xad\0" /* offset 13905 */
  30933   "\xd8\xb5\xd9\x85\xd9\x85\0" /* offset 13912 */
  30934   "\xd8\xb4\xd8\xad\xd9\x85\0" /* offset 13919 */
  30935   "\xd8\xb4\xd8\xac\xd9\x8a\0" /* offset 13926 */
  30936   "\xd8\xb4\xd9\x85\xd8\xae\0" /* offset 13933 */
  30937   "\xd8\xb4\xd9\x85\xd9\x85\0" /* offset 13940 */
  30938   "\xd8\xb6\xd8\xad\xd9\x89\0" /* offset 13947 */
  30939   "\xd8\xb6\xd8\xae\xd9\x85\0" /* offset 13954 */
  30940   "\xd8\xb7\xd9\x85\xd8\xad\0" /* offset 13961 */
  30941   "\xd8\xb7\xd9\x85\xd9\x85\0" /* offset 13968 */
  30942   "\xd8\xb7\xd9\x85\xd9\x8a\0" /* offset 13975 */
  30943   "\xd8\xb9\xd8\xac\xd9\x85\0" /* offset 13982 */
  30944   "\xd8\xb9\xd9\x85\xd9\x85\0" /* offset 13989 */
  30945   "\xd8\xb9\xd9\x85\xd9\x89\0" /* offset 13996 */
  30946   "\xd8\xba\xd9\x85\xd9\x85\0" /* offset 14003 */
  30947   "\xd8\xba\xd9\x85\xd9\x8a\0" /* offset 14010 */
  30948   "\xd8\xba\xd9\x85\xd9\x89\0" /* offset 14017 */
  30949   "\xd9\x81\xd8\xae\xd9\x85\0" /* offset 14024 */
  30950   "\xd9\x82\xd9\x85\xd8\xad\0" /* offset 14031 */
  30951   "\xd9\x82\xd9\x85\xd9\x85\0" /* offset 14038 */
  30952   "\xd9\x84\xd8\xad\xd9\x85\0" /* offset 14045 */
  30953   "\xd9\x84\xd8\xad\xd9\x8a\0" /* offset 14052 */
  30954   "\xd9\x84\xd8\xad\xd9\x89\0" /* offset 14059 */
  30955   "\xd9\x84\xd8\xac\xd8\xac\0" /* offset 14066 */
  30956   "\xd9\x84\xd8\xae\xd9\x85\0" /* offset 14073 */
  30957   "\xd9\x84\xd9\x85\xd8\xad\0" /* offset 14080 */
  30958   "\xd9\x85\xd8\xad\xd8\xac\0" /* offset 14087 */
  30959   "\xd9\x85\xd8\xad\xd9\x85\0" /* offset 14094 */
  30960   "\xd9\x85\xd8\xad\xd9\x8a\0" /* offset 14101 */
  30961   "\xd9\x85\xd8\xac\xd8\xad\0" /* offset 14108 */
  30962   "\xd9\x85\xd8\xac\xd9\x85\0" /* offset 14115 */
  30963   "\xd9\x85\xd8\xae\xd8\xac\0" /* offset 14122 */
  30964   "\xd9\x85\xd8\xae\xd9\x85\0" /* offset 14129 */
  30965   "\xd9\x85\xd8\xac\xd8\xae\0" /* offset 14136 */
  30966   "\xd9\x87\xd9\x85\xd8\xac\0" /* offset 14143 */
  30967   "\xd9\x87\xd9\x85\xd9\x85\0" /* offset 14150 */
  30968   "\xd9\x86\xd8\xad\xd9\x85\0" /* offset 14157 */
  30969   "\xd9\x86\xd8\xad\xd9\x89\0" /* offset 14164 */
  30970   "\xd9\x86\xd8\xac\xd9\x85\0" /* offset 14171 */
  30971   "\xd9\x86\xd8\xac\xd9\x89\0" /* offset 14178 */
  30972   "\xd9\x86\xd9\x85\xd9\x8a\0" /* offset 14185 */
  30973   "\xd9\x86\xd9\x85\xd9\x89\0" /* offset 14192 */
  30974   "\xd9\x8a\xd9\x85\xd9\x85\0" /* offset 14199 */
  30975   "\xd8\xa8\xd8\xae\xd9\x8a\0" /* offset 14206 */
  30976   "\xd8\xaa\xd8\xac\xd9\x8a\0" /* offset 14213 */
  30977   "\xd8\xaa\xd8\xac\xd9\x89\0" /* offset 14220 */
  30978   "\xd8\xaa\xd8\xae\xd9\x8a\0" /* offset 14227 */
  30979   "\xd8\xaa\xd8\xae\xd9\x89\0" /* offset 14234 */
  30980   "\xd8\xaa\xd9\x85\xd9\x8a\0" /* offset 14241 */
  30981   "\xd8\xaa\xd9\x85\xd9\x89\0" /* offset 14248 */
  30982   "\xd8\xac\xd9\x85\xd9\x8a\0" /* offset 14255 */
  30983   "\xd8\xac\xd8\xad\xd9\x89\0" /* offset 14262 */
  30984   "\xd8\xac\xd9\x85\xd9\x89\0" /* offset 14269 */
  30985   "\xd8\xb3\xd8\xae\xd9\x89\0" /* offset 14276 */
  30986   "\xd8\xb5\xd8\xad\xd9\x8a\0" /* offset 14283 */
  30987   "\xd8\xb4\xd8\xad\xd9\x8a\0" /* offset 14290 */
  30988   "\xd8\xb6\xd8\xad\xd9\x8a\0" /* offset 14297 */
  30989   "\xd9\x84\xd8\xac\xd9\x8a\0" /* offset 14304 */
  30990   "\xd9\x84\xd9\x85\xd9\x8a\0" /* offset 14311 */
  30991   "\xd9\x8a\xd8\xad\xd9\x8a\0" /* offset 14318 */
  30992   "\xd9\x8a\xd8\xac\xd9\x8a\0" /* offset 14325 */
  30993   "\xd9\x8a\xd9\x85\xd9\x8a\0" /* offset 14332 */
  30994   "\xd9\x85\xd9\x85\xd9\x8a\0" /* offset 14339 */
  30995   "\xd9\x82\xd9\x85\xd9\x8a\0" /* offset 14346 */
  30996   "\xd9\x86\xd8\xad\xd9\x8a\0" /* offset 14353 */
  30997   "\xd8\xb9\xd9\x85\xd9\x8a\0" /* offset 14360 */
  30998   "\xd9\x83\xd9\x85\xd9\x8a\0" /* offset 14367 */
  30999   "\xd9\x86\xd8\xac\xd8\xad\0" /* offset 14374 */
  31000   "\xd9\x85\xd8\xae\xd9\x8a\0" /* offset 14381 */
  31001   "\xd9\x84\xd8\xac\xd9\x85\0" /* offset 14388 */
  31002   "\xd9\x83\xd9\x85\xd9\x85\0" /* offset 14395 */
  31003   "\xd8\xac\xd8\xad\xd9\x8a\0" /* offset 14402 */
  31004   "\xd8\xad\xd8\xac\xd9\x8a\0" /* offset 14409 */
  31005   "\xd9\x85\xd8\xac\xd9\x8a\0" /* offset 14416 */
  31006   "\xd9\x81\xd9\x85\xd9\x8a\0" /* offset 14423 */
  31007   "\xd8\xa8\xd8\xad\xd9\x8a\0" /* offset 14430 */
  31008   "\xd8\xb3\xd8\xae\xd9\x8a\0" /* offset 14437 */
  31009   "\xd9\x86\xd8\xac\xd9\x8a\0" /* offset 14444 */
  31010   "\xd8\xb5\xd9\x84\xdb\x92\0" /* offset 14451 */
  31011   "\xd9\x82\xd9\x84\xdb\x92\0" /* offset 14458 */
  31012   "\xd8\xa7\xd9\x84\xd9\x84\xd9\x87\0" /* offset 14465 */
  31013   "\xd8\xa7\xd9\x83\xd8\xa8\xd8\xb1\0" /* offset 14474 */
  31014   "\xd9\x85\xd8\xad\xd9\x85\xd8\xaf\0" /* offset 14483 */
  31015   "\xd8\xb5\xd9\x84\xd8\xb9\xd9\x85\0" /* offset 14492 */
  31016   "\xd8\xb1\xd8\xb3\xd9\x88\xd9\x84\0" /* offset 14501 */
  31017   "\xd8\xb9\xd9\x84\xd9\x8a\xd9\x87\0" /* offset 14510 */
  31018   "\xd9\x88\xd8\xb3\xd9\x84\xd9\x85\0" /* offset 14519 */
  31019   "\xd8\xb5\xd9\x84\xd9\x89\0" /* offset 14528 */
  31020   "\xd8\xb5\xd9\x84\xd9\x89\x20\xd8\xa7\xd9\x84\xd9\x84\xd9\x87\x20\xd8\xb9\xd9\x84\xd9\x8a\xd9\x87\x20\xd9\x88\xd8\xb3\xd9\x84\xd9\x85\0" /* offset 14535 */
  31021   "\xd8\xac\xd9\x84\x20\xd8\xac\xd9\x84\xd8\xa7\xd9\x84\xd9\x87\0" /* offset 14569 */
  31022   "\xd8\xb1\xdb\x8c\xd8\xa7\xd9\x84\0" /* offset 14585 */
  31023   "\x2c\0" /* offset 14594 */
  31024   "\xe3\x80\x81\0" /* offset 14596 */
  31025   "\xe3\x80\x82\0" /* offset 14600 */
  31026   "\x3a\0" /* offset 14604 */
  31027   "\x21\0" /* offset 14606 */
  31028   "\x3f\0" /* offset 14608 */
  31029   "\xe3\x80\x96\0" /* offset 14610 */
  31030   "\xe3\x80\x97\0" /* offset 14614 */
  31031   "\xe2\x80\x94\0" /* offset 14618 */
  31032   "\xe2\x80\x93\0" /* offset 14622 */
  31033   "\x5f\0" /* offset 14626 */
  31034   "\x7b\0" /* offset 14628 */
  31035   "\x7d\0" /* offset 14630 */
  31036   "\xe3\x80\x94\0" /* offset 14632 */
  31037   "\xe3\x80\x95\0" /* offset 14636 */
  31038   "\xe3\x80\x90\0" /* offset 14640 */
  31039   "\xe3\x80\x91\0" /* offset 14644 */
  31040   "\xe3\x80\x8a\0" /* offset 14648 */
  31041   "\xe3\x80\x8b\0" /* offset 14652 */
  31042   "\xe3\x80\x8c\0" /* offset 14656 */
  31043   "\xe3\x80\x8d\0" /* offset 14660 */
  31044   "\xe3\x80\x8e\0" /* offset 14664 */
  31045   "\xe3\x80\x8f\0" /* offset 14668 */
  31046   "\x5b\0" /* offset 14672 */
  31047   "\x5d\0" /* offset 14674 */
  31048   "\x23\0" /* offset 14676 */
  31049   "\x26\0" /* offset 14678 */
  31050   "\x2a\0" /* offset 14680 */
  31051   "\x2d\0" /* offset 14682 */
  31052   "\x3c\0" /* offset 14684 */
  31053   "\x3e\0" /* offset 14686 */
  31054   "\x5c\0" /* offset 14688 */
  31055   "\x24\0" /* offset 14690 */
  31056   "\x25\0" /* offset 14692 */
  31057   "\x40\0" /* offset 14694 */
  31058   "\x20\xd9\x8b\0" /* offset 14696 */
  31059   "\xd9\x80\xd9\x8b\0" /* offset 14700 */
  31060   "\x20\xd9\x8c\0" /* offset 14705 */
  31061   "\x20\xd9\x8d\0" /* offset 14709 */
  31062   "\x20\xd9\x8e\0" /* offset 14713 */
  31063   "\xd9\x80\xd9\x8e\0" /* offset 14717 */
  31064   "\x20\xd9\x8f\0" /* offset 14722 */
  31065   "\xd9\x80\xd9\x8f\0" /* offset 14726 */
  31066   "\x20\xd9\x90\0" /* offset 14731 */
  31067   "\xd9\x80\xd9\x90\0" /* offset 14735 */
  31068   "\x20\xd9\x91\0" /* offset 14740 */
  31069   "\xd9\x80\xd9\x91\0" /* offset 14744 */
  31070   "\x20\xd9\x92\0" /* offset 14749 */
  31071   "\xd9\x80\xd9\x92\0" /* offset 14753 */
  31072   "\xd8\xa1\0" /* offset 14758 */
  31073   "\xd8\xa7\0" /* offset 14761 */
  31074   "\xd8\xa8\0" /* offset 14764 */
  31075   "\xd8\xa9\0" /* offset 14767 */
  31076   "\xd8\xaa\0" /* offset 14770 */
  31077   "\xd8\xab\0" /* offset 14773 */
  31078   "\xd8\xac\0" /* offset 14776 */
  31079   "\xd8\xad\0" /* offset 14779 */
  31080   "\xd8\xae\0" /* offset 14782 */
  31081   "\xd8\xaf\0" /* offset 14785 */
  31082   "\xd8\xb0\0" /* offset 14788 */
  31083   "\xd8\xb1\0" /* offset 14791 */
  31084   "\xd8\xb2\0" /* offset 14794 */
  31085   "\xd8\xb3\0" /* offset 14797 */
  31086   "\xd8\xb4\0" /* offset 14800 */
  31087   "\xd8\xb5\0" /* offset 14803 */
  31088   "\xd8\xb6\0" /* offset 14806 */
  31089   "\xd8\xb7\0" /* offset 14809 */
  31090   "\xd8\xb8\0" /* offset 14812 */
  31091   "\xd8\xb9\0" /* offset 14815 */
  31092   "\xd8\xba\0" /* offset 14818 */
  31093   "\xd9\x81\0" /* offset 14821 */
  31094   "\xd9\x82\0" /* offset 14824 */
  31095   "\xd9\x83\0" /* offset 14827 */
  31096   "\xd9\x84\0" /* offset 14830 */
  31097   "\xd9\x85\0" /* offset 14833 */
  31098   "\xd9\x86\0" /* offset 14836 */
  31099   "\xd9\x87\0" /* offset 14839 */
  31100   "\xd9\x88\0" /* offset 14842 */
  31101   "\xd9\x8a\0" /* offset 14845 */
  31102   "\xd9\x84\xd8\xa7\xd9\x93\0" /* offset 14848 */
  31103   "\xd9\x84\xd8\xa7\xd9\x94\0" /* offset 14855 */
  31104   "\xd9\x84\xd8\xa7\xd9\x95\0" /* offset 14862 */
  31105   "\xd9\x84\xd8\xa7\0" /* offset 14869 */
  31106   "\x22\0" /* offset 14874 */
  31107   "\x27\0" /* offset 14876 */
  31108   "\x2f\0" /* offset 14878 */
  31109   "\x5e\0" /* offset 14880 */
  31110   "\x7c\0" /* offset 14882 */
  31111   "\x7e\0" /* offset 14884 */
  31112   "\xe2\xa6\x85\0" /* offset 14886 */
  31113   "\xe2\xa6\x86\0" /* offset 14890 */
  31114   "\xe3\x83\xbb\0" /* offset 14894 */
  31115   "\xe3\x82\xa1\0" /* offset 14898 */
  31116   "\xe3\x82\xa3\0" /* offset 14902 */
  31117   "\xe3\x82\xa5\0" /* offset 14906 */
  31118   "\xe3\x82\xa7\0" /* offset 14910 */
  31119   "\xe3\x82\xa9\0" /* offset 14914 */
  31120   "\xe3\x83\xa3\0" /* offset 14918 */
  31121   "\xe3\x83\xa5\0" /* offset 14922 */
  31122   "\xe3\x83\xa7\0" /* offset 14926 */
  31123   "\xe3\x83\x83\0" /* offset 14930 */
  31124   "\xe3\x83\xbc\0" /* offset 14934 */
  31125   "\xe3\x83\xb3\0" /* offset 14938 */
  31126   "\xe3\x82\x99\0" /* offset 14942 */
  31127   "\xe3\x82\x9a\0" /* offset 14946 */
  31128   "\xc2\xa2\0" /* offset 14950 */
  31129   "\xc2\xa3\0" /* offset 14953 */
  31130   "\xc2\xac\0" /* offset 14956 */
  31131   "\xc2\xa6\0" /* offset 14959 */
  31132   "\xc2\xa5\0" /* offset 14962 */
  31133   "\xe2\x82\xa9\0" /* offset 14965 */
  31134   "\xe2\x94\x82\0" /* offset 14969 */
  31135   "\xe2\x86\x90\0" /* offset 14973 */
  31136   "\xe2\x86\x91\0" /* offset 14977 */
  31137   "\xe2\x86\x92\0" /* offset 14981 */
  31138   "\xe2\x86\x93\0" /* offset 14985 */
  31139   "\xe2\x96\xa0\0" /* offset 14989 */
  31140   "\xe2\x97\x8b\0" /* offset 14993 */
  31141   "\xf0\x91\x82\x99\xf0\x91\x82\xba\0" /* offset 14997 */
  31142   "\xf0\x91\x82\x9b\xf0\x91\x82\xba\0" /* offset 15006 */
  31143   "\xf0\x91\x82\xa5\xf0\x91\x82\xba\0" /* offset 15015 */
  31144   "\xf0\x91\x84\xb1\xf0\x91\x84\xa7\0" /* offset 15024 */
  31145   "\xf0\x91\x84\xb2\xf0\x91\x84\xa7\0" /* offset 15033 */
  31146   "\xf0\x91\x8d\x87\xf0\x91\x8c\xbe\0" /* offset 15042 */
  31147   "\xf0\x91\x8d\x87\xf0\x91\x8d\x97\0" /* offset 15051 */
  31148   "\xf0\x91\x92\xb9\xf0\x91\x92\xba\0" /* offset 15060 */
  31149   "\xf0\x91\x92\xb9\xf0\x91\x92\xb0\0" /* offset 15069 */
  31150   "\xf0\x91\x92\xb9\xf0\x91\x92\xbd\0" /* offset 15078 */
  31151   "\xf0\x91\x96\xb8\xf0\x91\x96\xaf\0" /* offset 15087 */
  31152   "\xf0\x91\x96\xb9\xf0\x91\x96\xaf\0" /* offset 15096 */
  31153   "\xf0\x9d\x85\x97\xf0\x9d\x85\xa5\0" /* offset 15105 */
  31154   "\xf0\x9d\x85\x98\xf0\x9d\x85\xa5\0" /* offset 15114 */
  31155   "\xf0\x9d\x85\x98\xf0\x9d\x85\xa5\xf0\x9d\x85\xae\0" /* offset 15123 */
  31156   "\xf0\x9d\x85\x98\xf0\x9d\x85\xa5\xf0\x9d\x85\xaf\0" /* offset 15136 */
  31157   "\xf0\x9d\x85\x98\xf0\x9d\x85\xa5\xf0\x9d\x85\xb0\0" /* offset 15149 */
  31158   "\xf0\x9d\x85\x98\xf0\x9d\x85\xa5\xf0\x9d\x85\xb1\0" /* offset 15162 */
  31159   "\xf0\x9d\x85\x98\xf0\x9d\x85\xa5\xf0\x9d\x85\xb2\0" /* offset 15175 */
  31160   "\xf0\x9d\x86\xb9\xf0\x9d\x85\xa5\0" /* offset 15188 */
  31161   "\xf0\x9d\x86\xba\xf0\x9d\x85\xa5\0" /* offset 15197 */
  31162   "\xf0\x9d\x86\xb9\xf0\x9d\x85\xa5\xf0\x9d\x85\xae\0" /* offset 15206 */
  31163   "\xf0\x9d\x86\xba\xf0\x9d\x85\xa5\xf0\x9d\x85\xae\0" /* offset 15219 */
  31164   "\xf0\x9d\x86\xb9\xf0\x9d\x85\xa5\xf0\x9d\x85\xaf\0" /* offset 15232 */
  31165   "\xf0\x9d\x86\xba\xf0\x9d\x85\xa5\xf0\x9d\x85\xaf\0" /* offset 15245 */
  31166   "\xc4\xb1\0" /* offset 15258 */
  31167   "\xc8\xb7\0" /* offset 15261 */
  31168   "\xce\x91\0" /* offset 15264 */
  31169   "\xce\x92\0" /* offset 15267 */
  31170   "\xce\x94\0" /* offset 15270 */
  31171   "\xce\x95\0" /* offset 15273 */
  31172   "\xce\x96\0" /* offset 15276 */
  31173   "\xce\x97\0" /* offset 15279 */
  31174   "\xce\x99\0" /* offset 15282 */
  31175   "\xce\x9a\0" /* offset 15285 */
  31176   "\xce\x9b\0" /* offset 15288 */
  31177   "\xce\x9c\0" /* offset 15291 */
  31178   "\xce\x9d\0" /* offset 15294 */
  31179   "\xce\x9e\0" /* offset 15297 */
  31180   "\xce\x9f\0" /* offset 15300 */
  31181   "\xce\xa1\0" /* offset 15303 */
  31182   "\xce\xa4\0" /* offset 15306 */
  31183   "\xce\xa6\0" /* offset 15309 */
  31184   "\xce\xa7\0" /* offset 15312 */
  31185   "\xce\xa8\0" /* offset 15315 */
  31186   "\xe2\x88\x87\0" /* offset 15318 */
  31187   "\xce\xb1\0" /* offset 15322 */
  31188   "\xce\xb6\0" /* offset 15325 */
  31189   "\xce\xb7\0" /* offset 15328 */
  31190   "\xce\xbb\0" /* offset 15331 */
  31191   "\xce\xbd\0" /* offset 15334 */
  31192   "\xce\xbe\0" /* offset 15337 */
  31193   "\xce\xbf\0" /* offset 15340 */
  31194   "\xcf\x83\0" /* offset 15343 */
  31195   "\xcf\x84\0" /* offset 15346 */
  31196   "\xcf\x85\0" /* offset 15349 */
  31197   "\xcf\x88\0" /* offset 15352 */
  31198   "\xcf\x89\0" /* offset 15355 */
  31199   "\xe2\x88\x82\0" /* offset 15358 */
  31200   "\xcf\x9c\0" /* offset 15362 */
  31201   "\xcf\x9d\0" /* offset 15365 */
  31202   "\xd9\xae\0" /* offset 15368 */
  31203   "\xda\xa1\0" /* offset 15371 */
  31204   "\xd9\xaf\0" /* offset 15374 */
  31205   "\x30\x2e\0" /* offset 15377 */
  31206   "\x30\x2c\0" /* offset 15380 */
  31207   "\x31\x2c\0" /* offset 15383 */
  31208   "\x32\x2c\0" /* offset 15386 */
  31209   "\x33\x2c\0" /* offset 15389 */
  31210   "\x34\x2c\0" /* offset 15392 */
  31211   "\x35\x2c\0" /* offset 15395 */
  31212   "\x36\x2c\0" /* offset 15398 */
  31213   "\x37\x2c\0" /* offset 15401 */
  31214   "\x38\x2c\0" /* offset 15404 */
  31215   "\x39\x2c\0" /* offset 15407 */
  31216   "\x28\x41\x29\0" /* offset 15410 */
  31217   "\x28\x42\x29\0" /* offset 15414 */
  31218   "\x28\x43\x29\0" /* offset 15418 */
  31219   "\x28\x44\x29\0" /* offset 15422 */
  31220   "\x28\x45\x29\0" /* offset 15426 */
  31221   "\x28\x46\x29\0" /* offset 15430 */
  31222   "\x28\x47\x29\0" /* offset 15434 */
  31223   "\x28\x48\x29\0" /* offset 15438 */
  31224   "\x28\x49\x29\0" /* offset 15442 */
  31225   "\x28\x4a\x29\0" /* offset 15446 */
  31226   "\x28\x4b\x29\0" /* offset 15450 */
  31227   "\x28\x4c\x29\0" /* offset 15454 */
  31228   "\x28\x4d\x29\0" /* offset 15458 */
  31229   "\x28\x4e\x29\0" /* offset 15462 */
  31230   "\x28\x4f\x29\0" /* offset 15466 */
  31231   "\x28\x50\x29\0" /* offset 15470 */
  31232   "\x28\x51\x29\0" /* offset 15474 */
  31233   "\x28\x52\x29\0" /* offset 15478 */
  31234   "\x28\x53\x29\0" /* offset 15482 */
  31235   "\x28\x54\x29\0" /* offset 15486 */
  31236   "\x28\x55\x29\0" /* offset 15490 */
  31237   "\x28\x56\x29\0" /* offset 15494 */
  31238   "\x28\x57\x29\0" /* offset 15498 */
  31239   "\x28\x58\x29\0" /* offset 15502 */
  31240   "\x28\x59\x29\0" /* offset 15506 */
  31241   "\x28\x5a\x29\0" /* offset 15510 */
  31242   "\xe3\x80\x94\x53\xe3\x80\x95\0" /* offset 15514 */
  31243   "\x43\x44\0" /* offset 15522 */
  31244   "\x57\x5a\0" /* offset 15525 */
  31245   "\x48\x56\0" /* offset 15528 */
  31246   "\x53\x44\0" /* offset 15531 */
  31247   "\x53\x53\0" /* offset 15534 */
  31248   "\x50\x50\x56\0" /* offset 15537 */
  31249   "\x57\x43\0" /* offset 15541 */
  31250   "\x4d\x43\0" /* offset 15544 */
  31251   "\x4d\x44\0" /* offset 15547 */
  31252   "\x44\x4a\0" /* offset 15550 */
  31253   "\xe3\x81\xbb\xe3\x81\x8b\0" /* offset 15553 */
  31254   "\xe3\x82\xb3\xe3\x82\xb3\0" /* offset 15560 */
  31255   "\xe5\xad\x97\0" /* offset 15567 */
  31256   "\xe5\x8f\x8c\0" /* offset 15571 */
  31257   "\xe5\xa4\x9a\0" /* offset 15575 */
  31258   "\xe8\xa7\xa3\0" /* offset 15579 */
  31259   "\xe4\xba\xa4\0" /* offset 15583 */
  31260   "\xe6\x98\xa0\0" /* offset 15587 */
  31261   "\xe7\x84\xa1\0" /* offset 15591 */
  31262   "\xe5\x89\x8d\0" /* offset 15595 */
  31263   "\xe5\xbe\x8c\0" /* offset 15599 */
  31264   "\xe5\x86\x8d\0" /* offset 15603 */
  31265   "\xe6\x96\xb0\0" /* offset 15607 */
  31266   "\xe5\x88\x9d\0" /* offset 15611 */
  31267   "\xe7\xb5\x82\0" /* offset 15615 */
  31268   "\xe8\xb2\xa9\0" /* offset 15619 */
  31269   "\xe5\xa3\xb0\0" /* offset 15623 */
  31270   "\xe5\x90\xb9\0" /* offset 15627 */
  31271   "\xe6\xbc\x94\0" /* offset 15631 */
  31272   "\xe6\x8a\x95\0" /* offset 15635 */
  31273   "\xe6\x8d\x95\0" /* offset 15639 */
  31274   "\xe9\x81\x8a\0" /* offset 15643 */
  31275   "\xe6\x8c\x87\0" /* offset 15647 */
  31276   "\xe6\x89\x93\0" /* offset 15651 */
  31277   "\xe7\xa6\x81\0" /* offset 15655 */
  31278   "\xe7\xa9\xba\0" /* offset 15659 */
  31279   "\xe5\x90\x88\0" /* offset 15663 */
  31280   "\xe6\xba\x80\0" /* offset 15667 */
  31281   "\xe7\x94\xb3\0" /* offset 15671 */
  31282   "\xe5\x89\xb2\0" /* offset 15675 */
  31283   "\xe5\x96\xb6\0" /* offset 15679 */
  31284   "\xe9\x85\x8d\0" /* offset 15683 */
  31285   "\xe3\x80\x94\xe6\x9c\xac\xe3\x80\x95\0" /* offset 15687 */
  31286   "\xe3\x80\x94\xe4\xb8\x89\xe3\x80\x95\0" /* offset 15697 */
  31287   "\xe3\x80\x94\xe4\xba\x8c\xe3\x80\x95\0" /* offset 15707 */
  31288   "\xe3\x80\x94\xe5\xae\x89\xe3\x80\x95\0" /* offset 15717 */
  31289   "\xe3\x80\x94\xe7\x82\xb9\xe3\x80\x95\0" /* offset 15727 */
  31290   "\xe3\x80\x94\xe6\x89\x93\xe3\x80\x95\0" /* offset 15737 */
  31291   "\xe3\x80\x94\xe7\x9b\x97\xe3\x80\x95\0" /* offset 15747 */
  31292   "\xe3\x80\x94\xe5\x8b\x9d\xe3\x80\x95\0" /* offset 15757 */
  31293   "\xe3\x80\x94\xe6\x95\x97\xe3\x80\x95\0" /* offset 15767 */
  31294   "\xe5\xbe\x97\0" /* offset 15777 */
  31295   "\xe5\x8f\xaf\0" /* offset 15781 */
  31296   "\xe4\xb8\xbd\0" /* offset 15785 */
  31297   "\xe4\xb8\xb8\0" /* offset 15789 */
  31298   "\xe4\xb9\x81\0" /* offset 15793 */
  31299   "\xf0\xa0\x84\xa2\0" /* offset 15797 */
  31300   "\xe4\xbd\xa0\0" /* offset 15802 */
  31301   "\xe4\xbe\xbb\0" /* offset 15806 */
  31302   "\xe5\x80\x82\0" /* offset 15810 */
  31303   "\xe5\x81\xba\0" /* offset 15814 */
  31304   "\xe5\x82\x99\0" /* offset 15818 */
  31305   "\xe5\x83\x8f\0" /* offset 15822 */
  31306   "\xe3\x92\x9e\0" /* offset 15826 */
  31307   "\xf0\xa0\x98\xba\0" /* offset 15830 */
  31308   "\xe5\x85\x94\0" /* offset 15835 */
  31309   "\xe5\x85\xa4\0" /* offset 15839 */
  31310   "\xe5\x85\xb7\0" /* offset 15843 */
  31311   "\xf0\xa0\x94\x9c\0" /* offset 15847 */
  31312   "\xe3\x92\xb9\0" /* offset 15852 */
  31313   "\xe5\x85\xa7\0" /* offset 15856 */
  31314   "\xf0\xa0\x95\x8b\0" /* offset 15860 */
  31315   "\xe5\x86\x97\0" /* offset 15865 */
  31316   "\xe5\x86\xa4\0" /* offset 15869 */
  31317   "\xe4\xbb\x8c\0" /* offset 15873 */
  31318   "\xe5\x86\xac\0" /* offset 15877 */
  31319   "\xf0\xa9\x87\x9f\0" /* offset 15881 */
  31320   "\xe5\x88\x83\0" /* offset 15886 */
  31321   "\xe3\x93\x9f\0" /* offset 15890 */
  31322   "\xe5\x88\xbb\0" /* offset 15894 */
  31323   "\xe5\x89\x86\0" /* offset 15898 */
  31324   "\xe5\x89\xb7\0" /* offset 15902 */
  31325   "\xe3\x94\x95\0" /* offset 15906 */
  31326   "\xe5\x8c\x85\0" /* offset 15910 */
  31327   "\xe5\x8c\x86\0" /* offset 15914 */
  31328   "\xe5\x8d\x89\0" /* offset 15918 */
  31329   "\xe5\x8d\x9a\0" /* offset 15922 */
  31330   "\xe5\x8d\xb3\0" /* offset 15926 */
  31331   "\xe5\x8d\xbd\0" /* offset 15930 */
  31332   "\xe5\x8d\xbf\0" /* offset 15934 */
  31333   "\xf0\xa0\xa8\xac\0" /* offset 15938 */
  31334   "\xe7\x81\xb0\0" /* offset 15943 */
  31335   "\xe5\x8f\x8a\0" /* offset 15947 */
  31336   "\xe5\x8f\x9f\0" /* offset 15951 */
  31337   "\xf0\xa0\xad\xa3\0" /* offset 15955 */
  31338   "\xe5\x8f\xab\0" /* offset 15960 */
  31339   "\xe5\x8f\xb1\0" /* offset 15964 */
  31340   "\xe5\x90\x86\0" /* offset 15968 */
  31341   "\xe5\x92\x9e\0" /* offset 15972 */
  31342   "\xe5\x90\xb8\0" /* offset 15976 */
  31343   "\xe5\x91\x88\0" /* offset 15980 */
  31344   "\xe5\x91\xa8\0" /* offset 15984 */
  31345   "\xe5\x92\xa2\0" /* offset 15988 */
  31346   "\xe5\x93\xb6\0" /* offset 15992 */
  31347   "\xe5\x94\x90\0" /* offset 15996 */
  31348   "\xe5\x95\x93\0" /* offset 16000 */
  31349   "\xe5\x95\xa3\0" /* offset 16004 */
  31350   "\xe5\x96\x84\0" /* offset 16008 */
  31351   "\xe5\x96\xab\0" /* offset 16012 */
  31352   "\xe5\x96\xb3\0" /* offset 16016 */
  31353   "\xe5\x97\x82\0" /* offset 16020 */
  31354   "\xe5\x9c\x96\0" /* offset 16024 */
  31355   "\xe5\x9c\x97\0" /* offset 16028 */
  31356   "\xe5\x99\x91\0" /* offset 16032 */
  31357   "\xe5\x99\xb4\0" /* offset 16036 */
  31358   "\xe5\xa3\xae\0" /* offset 16040 */
  31359   "\xe5\x9f\x8e\0" /* offset 16044 */
  31360   "\xe5\x9f\xb4\0" /* offset 16048 */
  31361   "\xe5\xa0\x8d\0" /* offset 16052 */
  31362   "\xe5\x9e\x8b\0" /* offset 16056 */
  31363   "\xe5\xa0\xb2\0" /* offset 16060 */
  31364   "\xe5\xa0\xb1\0" /* offset 16064 */
  31365   "\xe5\xa2\xac\0" /* offset 16068 */
  31366   "\xf0\xa1\x93\xa4\0" /* offset 16072 */
  31367   "\xe5\xa3\xb2\0" /* offset 16077 */
  31368   "\xe5\xa3\xb7\0" /* offset 16081 */
  31369   "\xe5\xa4\x86\0" /* offset 16085 */
  31370   "\xe5\xa4\xa2\0" /* offset 16089 */
  31371   "\xe5\xa5\xa2\0" /* offset 16093 */
  31372   "\xf0\xa1\x9a\xa8\0" /* offset 16097 */
  31373   "\xf0\xa1\x9b\xaa\0" /* offset 16102 */
  31374   "\xe5\xa7\xac\0" /* offset 16107 */
  31375   "\xe5\xa8\x9b\0" /* offset 16111 */
  31376   "\xe5\xa8\xa7\0" /* offset 16115 */
  31377   "\xe5\xa7\x98\0" /* offset 16119 */
  31378   "\xe5\xa9\xa6\0" /* offset 16123 */
  31379   "\xe3\x9b\xae\0" /* offset 16127 */
  31380   "\xe3\x9b\xbc\0" /* offset 16131 */
  31381   "\xe5\xac\x88\0" /* offset 16135 */
  31382   "\xe5\xac\xbe\0" /* offset 16139 */
  31383   "\xf0\xa1\xa7\x88\0" /* offset 16143 */
  31384   "\xe5\xaf\x83\0" /* offset 16148 */
  31385   "\xe5\xaf\x98\0" /* offset 16152 */
  31386   "\xe5\xaf\xb3\0" /* offset 16156 */
  31387   "\xf0\xa1\xac\x98\0" /* offset 16160 */
  31388   "\xe5\xaf\xbf\0" /* offset 16165 */
  31389   "\xe5\xb0\x86\0" /* offset 16169 */
  31390   "\xe5\xbd\x93\0" /* offset 16173 */
  31391   "\xe3\x9e\x81\0" /* offset 16177 */
  31392   "\xe5\xb1\xa0\0" /* offset 16181 */
  31393   "\xe5\xb3\x80\0" /* offset 16185 */
  31394   "\xe5\xb2\x8d\0" /* offset 16189 */
  31395   "\xf0\xa1\xb7\xa4\0" /* offset 16193 */
  31396   "\xe5\xb5\x83\0" /* offset 16198 */
  31397   "\xf0\xa1\xb7\xa6\0" /* offset 16202 */
  31398   "\xe5\xb5\xae\0" /* offset 16207 */
  31399   "\xe5\xb5\xab\0" /* offset 16211 */
  31400   "\xe5\xb5\xbc\0" /* offset 16215 */
  31401   "\xe5\xb7\xa1\0" /* offset 16219 */
  31402   "\xe5\xb7\xa2\0" /* offset 16223 */
  31403   "\xe3\xa0\xaf\0" /* offset 16227 */
  31404   "\xe5\xb7\xbd\0" /* offset 16231 */
  31405   "\xe5\xb8\xa8\0" /* offset 16235 */
  31406   "\xe5\xb8\xbd\0" /* offset 16239 */
  31407   "\xe5\xb9\xa9\0" /* offset 16243 */
  31408   "\xe3\xa1\xa2\0" /* offset 16247 */
  31409   "\xf0\xa2\x86\x83\0" /* offset 16251 */
  31410   "\xe3\xa1\xbc\0" /* offset 16256 */
  31411   "\xe5\xba\xb0\0" /* offset 16260 */
  31412   "\xe5\xba\xb3\0" /* offset 16264 */
  31413   "\xe5\xba\xb6\0" /* offset 16268 */
  31414   "\xf0\xaa\x8e\x92\0" /* offset 16272 */
  31415   "\xf0\xa2\x8c\xb1\0" /* offset 16277 */
  31416   "\xe8\x88\x81\0" /* offset 16282 */
  31417   "\xe5\xbc\xa2\0" /* offset 16286 */
  31418   "\xe3\xa3\x87\0" /* offset 16290 */
  31419   "\xf0\xa3\x8a\xb8\0" /* offset 16294 */
  31420   "\xf0\xa6\x87\x9a\0" /* offset 16299 */
  31421   "\xe5\xbd\xa2\0" /* offset 16304 */
  31422   "\xe5\xbd\xab\0" /* offset 16308 */
  31423   "\xe3\xa3\xa3\0" /* offset 16312 */
  31424   "\xe5\xbe\x9a\0" /* offset 16316 */
  31425   "\xe5\xbf\x8d\0" /* offset 16320 */
  31426   "\xe5\xbf\x97\0" /* offset 16324 */
  31427   "\xe5\xbf\xb9\0" /* offset 16328 */
  31428   "\xe6\x82\x81\0" /* offset 16332 */
  31429   "\xe3\xa4\xba\0" /* offset 16336 */
  31430   "\xe3\xa4\x9c\0" /* offset 16340 */
  31431   "\xf0\xa2\x9b\x94\0" /* offset 16344 */
  31432   "\xe6\x83\x87\0" /* offset 16349 */
  31433   "\xe6\x85\x88\0" /* offset 16353 */
  31434   "\xe6\x85\x8c\0" /* offset 16357 */
  31435   "\xe6\x85\xba\0" /* offset 16361 */
  31436   "\xe6\x86\xb2\0" /* offset 16365 */
  31437   "\xe6\x86\xa4\0" /* offset 16369 */
  31438   "\xe6\x86\xaf\0" /* offset 16373 */
  31439   "\xe6\x87\x9e\0" /* offset 16377 */
  31440   "\xe6\x88\x90\0" /* offset 16381 */
  31441   "\xe6\x88\x9b\0" /* offset 16385 */
  31442   "\xe6\x89\x9d\0" /* offset 16389 */
  31443   "\xe6\x8a\xb1\0" /* offset 16393 */
  31444   "\xe6\x8b\x94\0" /* offset 16397 */
  31445   "\xe6\x8d\x90\0" /* offset 16401 */
  31446   "\xf0\xa2\xac\x8c\0" /* offset 16405 */
  31447   "\xe6\x8c\xbd\0" /* offset 16410 */
  31448   "\xe6\x8b\xbc\0" /* offset 16414 */
  31449   "\xe6\x8d\xa8\0" /* offset 16418 */
  31450   "\xe6\x8e\x83\0" /* offset 16422 */
  31451   "\xe6\x8f\xa4\0" /* offset 16426 */
  31452   "\xf0\xa2\xaf\xb1\0" /* offset 16430 */
  31453   "\xe6\x90\xa2\0" /* offset 16435 */
  31454   "\xe6\x8f\x85\0" /* offset 16439 */
  31455   "\xe6\x8e\xa9\0" /* offset 16443 */
  31456   "\xe3\xa8\xae\0" /* offset 16447 */
  31457   "\xe6\x91\xa9\0" /* offset 16451 */
  31458   "\xe6\x91\xbe\0" /* offset 16455 */
  31459   "\xe6\x92\x9d\0" /* offset 16459 */
  31460   "\xe6\x91\xb7\0" /* offset 16463 */
  31461   "\xe3\xa9\xac\0" /* offset 16467 */
  31462   "\xe6\x95\xac\0" /* offset 16471 */
  31463   "\xf0\xa3\x80\x8a\0" /* offset 16475 */
  31464   "\xe6\x97\xa3\0" /* offset 16480 */
  31465   "\xe6\x9b\xb8\0" /* offset 16484 */
  31466   "\xe6\x99\x89\0" /* offset 16488 */
  31467   "\xe3\xac\x99\0" /* offset 16492 */
  31468   "\xe3\xac\x88\0" /* offset 16496 */
  31469   "\xe3\xab\xa4\0" /* offset 16500 */
  31470   "\xe5\x86\x92\0" /* offset 16504 */
  31471   "\xe5\x86\x95\0" /* offset 16508 */
  31472   "\xe6\x9c\x80\0" /* offset 16512 */
  31473   "\xe6\x9a\x9c\0" /* offset 16516 */
  31474   "\xe8\x82\xad\0" /* offset 16520 */
  31475   "\xe4\x8f\x99\0" /* offset 16524 */
  31476   "\xe6\x9c\xa1\0" /* offset 16528 */
  31477   "\xe6\x9d\x9e\0" /* offset 16532 */
  31478   "\xe6\x9d\x93\0" /* offset 16536 */
  31479   "\xf0\xa3\x8f\x83\0" /* offset 16540 */
  31480   "\xe3\xad\x89\0" /* offset 16545 */
  31481   "\xe6\x9f\xba\0" /* offset 16549 */
  31482   "\xe6\x9e\x85\0" /* offset 16553 */
  31483   "\xe6\xa1\x92\0" /* offset 16557 */
  31484   "\xf0\xa3\x91\xad\0" /* offset 16561 */
  31485   "\xe6\xa2\x8e\0" /* offset 16566 */
  31486   "\xe6\xa0\x9f\0" /* offset 16570 */
  31487   "\xe6\xa4\x94\0" /* offset 16574 */
  31488   "\xe6\xa5\x82\0" /* offset 16578 */
  31489   "\xe6\xa6\xa3\0" /* offset 16582 */
  31490   "\xe6\xa7\xaa\0" /* offset 16586 */
  31491   "\xe6\xaa\xa8\0" /* offset 16590 */
  31492   "\xf0\xa3\x9a\xa3\0" /* offset 16594 */
  31493   "\xe6\xab\x9b\0" /* offset 16599 */
  31494   "\xe3\xb0\x98\0" /* offset 16603 */
  31495   "\xe6\xac\xa1\0" /* offset 16607 */
  31496   "\xf0\xa3\xa2\xa7\0" /* offset 16611 */
  31497   "\xe6\xad\x94\0" /* offset 16616 */
  31498   "\xe3\xb1\x8e\0" /* offset 16620 */
  31499   "\xe6\xad\xb2\0" /* offset 16624 */
  31500   "\xe6\xae\x9f\0" /* offset 16628 */
  31501   "\xe6\xae\xbb\0" /* offset 16632 */
  31502   "\xf0\xa3\xaa\x8d\0" /* offset 16636 */
  31503   "\xf0\xa1\xb4\x8b\0" /* offset 16641 */
  31504   "\xf0\xa3\xab\xba\0" /* offset 16646 */
  31505   "\xe6\xb1\x8e\0" /* offset 16651 */
  31506   "\xf0\xa3\xb2\xbc\0" /* offset 16655 */
  31507   "\xe6\xb2\xbf\0" /* offset 16660 */
  31508   "\xe6\xb3\x8d\0" /* offset 16664 */
  31509   "\xe6\xb1\xa7\0" /* offset 16668 */
  31510   "\xe6\xb4\x96\0" /* offset 16672 */
  31511   "\xe6\xb4\xbe\0" /* offset 16676 */
  31512   "\xe6\xb5\xa9\0" /* offset 16680 */
  31513   "\xe6\xb5\xb8\0" /* offset 16684 */
  31514   "\xe6\xb6\x85\0" /* offset 16688 */
  31515   "\xf0\xa3\xb4\x9e\0" /* offset 16692 */
  31516   "\xe6\xb4\xb4\0" /* offset 16697 */
  31517   "\xe6\xb8\xaf\0" /* offset 16701 */
  31518   "\xe6\xb9\xae\0" /* offset 16705 */
  31519   "\xe3\xb4\xb3\0" /* offset 16709 */
  31520   "\xe6\xbb\x87\0" /* offset 16713 */
  31521   "\xf0\xa3\xbb\x91\0" /* offset 16717 */
  31522   "\xe6\xb7\xb9\0" /* offset 16722 */
  31523   "\xe6\xbd\xae\0" /* offset 16726 */
  31524   "\xf0\xa3\xbd\x9e\0" /* offset 16730 */
  31525   "\xf0\xa3\xbe\x8e\0" /* offset 16735 */
  31526   "\xe6\xbf\x86\0" /* offset 16740 */
  31527   "\xe7\x80\xb9\0" /* offset 16744 */
  31528   "\xe7\x80\x9b\0" /* offset 16748 */
  31529   "\xe3\xb6\x96\0" /* offset 16752 */
  31530   "\xe7\x81\x8a\0" /* offset 16756 */
  31531   "\xe7\x81\xbd\0" /* offset 16760 */
  31532   "\xe7\x81\xb7\0" /* offset 16764 */
  31533   "\xe7\x82\xad\0" /* offset 16768 */
  31534   "\xf0\xa0\x94\xa5\0" /* offset 16772 */
  31535   "\xe7\x85\x85\0" /* offset 16777 */
  31536   "\xf0\xa4\x89\xa3\0" /* offset 16781 */
  31537   "\xe7\x86\x9c\0" /* offset 16786 */
  31538   "\xf0\xa4\x8e\xab\0" /* offset 16790 */
  31539   "\xe7\x88\xa8\0" /* offset 16795 */
  31540   "\xe7\x89\x90\0" /* offset 16799 */
  31541   "\xf0\xa4\x98\x88\0" /* offset 16803 */
  31542   "\xe7\x8a\x80\0" /* offset 16808 */
  31543   "\xe7\x8a\x95\0" /* offset 16812 */
  31544   "\xf0\xa4\x9c\xb5\0" /* offset 16816 */
  31545   "\xf0\xa4\xa0\x94\0" /* offset 16821 */
  31546   "\xe7\x8d\xba\0" /* offset 16826 */
  31547   "\xe7\x8e\x8b\0" /* offset 16830 */
  31548   "\xe3\xba\xac\0" /* offset 16834 */
  31549   "\xe7\x8e\xa5\0" /* offset 16838 */
  31550   "\xe3\xba\xb8\0" /* offset 16842 */
  31551   "\xe7\x91\x87\0" /* offset 16846 */
  31552   "\xe7\x91\x9c\0" /* offset 16850 */
  31553   "\xe7\x92\x85\0" /* offset 16854 */
  31554   "\xe7\x93\x8a\0" /* offset 16858 */
  31555   "\xe3\xbc\x9b\0" /* offset 16862 */
  31556   "\xe7\x94\xa4\0" /* offset 16866 */
  31557   "\xf0\xa4\xb0\xb6\0" /* offset 16870 */
  31558   "\xe7\x94\xbe\0" /* offset 16875 */
  31559   "\xf0\xa4\xb2\x92\0" /* offset 16879 */
  31560   "\xf0\xa2\x86\x9f\0" /* offset 16884 */
  31561   "\xe7\x98\x90\0" /* offset 16889 */
  31562   "\xf0\xa4\xbe\xa1\0" /* offset 16893 */
  31563   "\xf0\xa4\xbe\xb8\0" /* offset 16898 */
  31564   "\xf0\xa5\x81\x84\0" /* offset 16903 */
  31565   "\xe3\xbf\xbc\0" /* offset 16908 */
  31566   "\xe4\x80\x88\0" /* offset 16912 */
  31567   "\xf0\xa5\x83\xb3\0" /* offset 16916 */
  31568   "\xf0\xa5\x83\xb2\0" /* offset 16921 */
  31569   "\xf0\xa5\x84\x99\0" /* offset 16926 */
  31570   "\xf0\xa5\x84\xb3\0" /* offset 16931 */
  31571   "\xe7\x9c\x9e\0" /* offset 16936 */
  31572   "\xe7\x9c\x9f\0" /* offset 16940 */
  31573   "\xe7\x9e\x8b\0" /* offset 16944 */
  31574   "\xe4\x81\x86\0" /* offset 16948 */
  31575   "\xe4\x82\x96\0" /* offset 16952 */
  31576   "\xf0\xa5\x90\x9d\0" /* offset 16956 */
  31577   "\xe7\xa1\x8e\0" /* offset 16961 */
  31578   "\xe4\x83\xa3\0" /* offset 16965 */
  31579   "\xf0\xa5\x98\xa6\0" /* offset 16969 */
  31580   "\xf0\xa5\x9a\x9a\0" /* offset 16974 */
  31581   "\xf0\xa5\x9b\x85\0" /* offset 16979 */
  31582   "\xe7\xa7\xab\0" /* offset 16984 */
  31583   "\xe4\x84\xaf\0" /* offset 16988 */
  31584   "\xe7\xa9\x8a\0" /* offset 16992 */
  31585   "\xe7\xa9\x8f\0" /* offset 16996 */
  31586   "\xf0\xa5\xa5\xbc\0" /* offset 17000 */
  31587   "\xf0\xa5\xaa\xa7\0" /* offset 17005 */
  31588   "\xe7\xab\xae\0" /* offset 17010 */
  31589   "\xe4\x88\x82\0" /* offset 17014 */
  31590   "\xf0\xa5\xae\xab\0" /* offset 17018 */
  31591   "\xe7\xaf\x86\0" /* offset 17023 */
  31592   "\xe7\xaf\x89\0" /* offset 17027 */
  31593   "\xe4\x88\xa7\0" /* offset 17031 */
  31594   "\xf0\xa5\xb2\x80\0" /* offset 17035 */
  31595   "\xe7\xb3\x92\0" /* offset 17040 */
  31596   "\xe4\x8a\xa0\0" /* offset 17044 */
  31597   "\xe7\xb3\xa8\0" /* offset 17048 */
  31598   "\xe7\xb3\xa3\0" /* offset 17052 */
  31599   "\xe7\xb4\x80\0" /* offset 17056 */
  31600   "\xf0\xa5\xbe\x86\0" /* offset 17060 */
  31601   "\xe7\xb5\xa3\0" /* offset 17065 */
  31602   "\xe4\x8c\x81\0" /* offset 17069 */
  31603   "\xe7\xb7\x87\0" /* offset 17073 */
  31604   "\xe7\xb8\x82\0" /* offset 17077 */
  31605   "\xe7\xb9\x85\0" /* offset 17081 */
  31606   "\xe4\x8c\xb4\0" /* offset 17085 */
  31607   "\xf0\xa6\x88\xa8\0" /* offset 17089 */
  31608   "\xf0\xa6\x89\x87\0" /* offset 17094 */
  31609   "\xe4\x8d\x99\0" /* offset 17099 */
  31610   "\xf0\xa6\x8b\x99\0" /* offset 17103 */
  31611   "\xe7\xbd\xba\0" /* offset 17108 */
  31612   "\xf0\xa6\x8c\xbe\0" /* offset 17112 */
  31613   "\xe7\xbe\x95\0" /* offset 17117 */
  31614   "\xe7\xbf\xba\0" /* offset 17121 */
  31615   "\xf0\xa6\x93\x9a\0" /* offset 17125 */
  31616   "\xf0\xa6\x94\xa3\0" /* offset 17130 */
  31617   "\xe8\x81\xa0\0" /* offset 17135 */
  31618   "\xf0\xa6\x96\xa8\0" /* offset 17139 */
  31619   "\xe8\x81\xb0\0" /* offset 17144 */
  31620   "\xf0\xa3\x8d\x9f\0" /* offset 17148 */
  31621   "\xe4\x8f\x95\0" /* offset 17153 */
  31622   "\xe8\x82\xb2\0" /* offset 17157 */
  31623   "\xe8\x84\x83\0" /* offset 17161 */
  31624   "\xe4\x90\x8b\0" /* offset 17165 */
  31625   "\xe8\x84\xbe\0" /* offset 17169 */
  31626   "\xe5\xaa\xb5\0" /* offset 17173 */
  31627   "\xf0\xa6\x9e\xa7\0" /* offset 17177 */
  31628   "\xf0\xa6\x9e\xb5\0" /* offset 17182 */
  31629   "\xf0\xa3\x8e\x93\0" /* offset 17187 */
  31630   "\xf0\xa3\x8e\x9c\0" /* offset 17192 */
  31631   "\xe8\x88\x84\0" /* offset 17197 */
  31632   "\xe8\xbe\x9e\0" /* offset 17201 */
  31633   "\xe4\x91\xab\0" /* offset 17205 */
  31634   "\xe8\x8a\x91\0" /* offset 17209 */
  31635   "\xe8\x8a\x8b\0" /* offset 17213 */
  31636   "\xe8\x8a\x9d\0" /* offset 17217 */
  31637   "\xe5\x8a\xb3\0" /* offset 17221 */
  31638   "\xe8\x8a\xb1\0" /* offset 17225 */
  31639   "\xe8\x8a\xb3\0" /* offset 17229 */
  31640   "\xe8\x8a\xbd\0" /* offset 17233 */
  31641   "\xe8\x8b\xa6\0" /* offset 17237 */
  31642   "\xf0\xa6\xac\xbc\0" /* offset 17241 */
  31643   "\xe8\x8c\x9d\0" /* offset 17246 */
  31644   "\xe8\x8d\xa3\0" /* offset 17250 */
  31645   "\xe8\x8e\xad\0" /* offset 17254 */
  31646   "\xe8\x8c\xa3\0" /* offset 17258 */
  31647   "\xe8\x8e\xbd\0" /* offset 17262 */
  31648   "\xe8\x8f\xa7\0" /* offset 17266 */
  31649   "\xe8\x8d\x93\0" /* offset 17270 */
  31650   "\xe8\x8f\x8a\0" /* offset 17274 */
  31651   "\xe8\x8f\x8c\0" /* offset 17278 */
  31652   "\xe8\x8f\x9c\0" /* offset 17282 */
  31653   "\xf0\xa6\xb0\xb6\0" /* offset 17286 */
  31654   "\xf0\xa6\xb5\xab\0" /* offset 17291 */
  31655   "\xf0\xa6\xb3\x95\0" /* offset 17296 */
  31656   "\xe4\x94\xab\0" /* offset 17301 */
  31657   "\xe8\x93\xb1\0" /* offset 17305 */
  31658   "\xe8\x93\xb3\0" /* offset 17309 */
  31659   "\xe8\x94\x96\0" /* offset 17313 */
  31660   "\xf0\xa7\x8f\x8a\0" /* offset 17317 */
  31661   "\xe8\x95\xa4\0" /* offset 17322 */
  31662   "\xf0\xa6\xbc\xac\0" /* offset 17326 */
  31663   "\xe4\x95\x9d\0" /* offset 17331 */
  31664   "\xe4\x95\xa1\0" /* offset 17335 */
  31665   "\xf0\xa6\xbe\xb1\0" /* offset 17339 */
  31666   "\xf0\xa7\x83\x92\0" /* offset 17344 */
  31667   "\xe4\x95\xab\0" /* offset 17349 */
  31668   "\xe8\x99\x90\0" /* offset 17353 */
  31669   "\xe8\x99\xa7\0" /* offset 17357 */
  31670   "\xe8\x99\xa9\0" /* offset 17361 */
  31671   "\xe8\x9a\xa9\0" /* offset 17365 */
  31672   "\xe8\x9a\x88\0" /* offset 17369 */
  31673   "\xe8\x9c\x8e\0" /* offset 17373 */
  31674   "\xe8\x9b\xa2\0" /* offset 17377 */
  31675   "\xe8\x9c\xa8\0" /* offset 17381 */
  31676   "\xe8\x9d\xab\0" /* offset 17385 */
  31677   "\xe8\x9e\x86\0" /* offset 17389 */
  31678   "\xe4\x97\x97\0" /* offset 17393 */
  31679   "\xe8\x9f\xa1\0" /* offset 17397 */
  31680   "\xe8\xa0\x81\0" /* offset 17401 */
  31681   "\xe4\x97\xb9\0" /* offset 17405 */
  31682   "\xe8\xa1\xa0\0" /* offset 17409 */
  31683   "\xf0\xa7\x99\xa7\0" /* offset 17413 */
  31684   "\xe8\xa3\x97\0" /* offset 17418 */
  31685   "\xe8\xa3\x9e\0" /* offset 17422 */
  31686   "\xe4\x98\xb5\0" /* offset 17426 */
  31687   "\xe8\xa3\xba\0" /* offset 17430 */
  31688   "\xe3\x92\xbb\0" /* offset 17434 */
  31689   "\xf0\xa7\xa2\xae\0" /* offset 17438 */
  31690   "\xf0\xa7\xa5\xa6\0" /* offset 17443 */
  31691   "\xe4\x9a\xbe\0" /* offset 17448 */
  31692   "\xe4\x9b\x87\0" /* offset 17452 */
  31693   "\xe8\xaa\xa0\0" /* offset 17456 */
  31694   "\xf0\xa7\xb2\xa8\0" /* offset 17460 */
  31695   "\xe8\xb2\xab\0" /* offset 17465 */
  31696   "\xe8\xb3\x81\0" /* offset 17469 */
  31697   "\xe8\xb4\x9b\0" /* offset 17473 */
  31698   "\xe8\xb5\xb7\0" /* offset 17477 */
  31699   "\xf0\xa7\xbc\xaf\0" /* offset 17481 */
  31700   "\xf0\xa0\xa0\x84\0" /* offset 17486 */
  31701   "\xe8\xb7\x8b\0" /* offset 17491 */
  31702   "\xe8\xb6\xbc\0" /* offset 17495 */
  31703   "\xe8\xb7\xb0\0" /* offset 17499 */
  31704   "\xf0\xa0\xa3\x9e\0" /* offset 17503 */
  31705   "\xe8\xbb\x94\0" /* offset 17508 */
  31706   "\xf0\xa8\x97\x92\0" /* offset 17512 */
  31707   "\xf0\xa8\x97\xad\0" /* offset 17517 */
  31708   "\xe9\x82\x94\0" /* offset 17522 */
  31709   "\xe9\x83\xb1\0" /* offset 17526 */
  31710   "\xe9\x84\x91\0" /* offset 17530 */
  31711   "\xf0\xa8\x9c\xae\0" /* offset 17534 */
  31712   "\xe9\x84\x9b\0" /* offset 17539 */
  31713   "\xe9\x88\xb8\0" /* offset 17543 */
  31714   "\xe9\x8b\x97\0" /* offset 17547 */
  31715   "\xe9\x8b\x98\0" /* offset 17551 */
  31716   "\xe9\x89\xbc\0" /* offset 17555 */
  31717   "\xe9\x8f\xb9\0" /* offset 17559 */
  31718   "\xe9\x90\x95\0" /* offset 17563 */
  31719   "\xf0\xa8\xaf\xba\0" /* offset 17567 */
  31720   "\xe9\x96\x8b\0" /* offset 17572 */
  31721   "\xe4\xa6\x95\0" /* offset 17576 */
  31722   "\xe9\x96\xb7\0" /* offset 17580 */
  31723   "\xf0\xa8\xb5\xb7\0" /* offset 17584 */
  31724   "\xe4\xa7\xa6\0" /* offset 17589 */
  31725   "\xe9\x9b\x83\0" /* offset 17593 */
  31726   "\xe5\xb6\xb2\0" /* offset 17597 */
  31727   "\xe9\x9c\xa3\0" /* offset 17601 */
  31728   "\xf0\xa9\x85\x85\0" /* offset 17605 */
  31729   "\xf0\xa9\x88\x9a\0" /* offset 17610 */
  31730   "\xe4\xa9\xae\0" /* offset 17615 */
  31731   "\xe4\xa9\xb6\0" /* offset 17619 */
  31732   "\xe9\x9f\xa0\0" /* offset 17623 */
  31733   "\xf0\xa9\x90\x8a\0" /* offset 17627 */
  31734   "\xe4\xaa\xb2\0" /* offset 17632 */
  31735   "\xf0\xa9\x92\x96\0" /* offset 17636 */
  31736   "\xe9\xa0\xa9\0" /* offset 17641 */
  31737   "\xf0\xa9\x96\xb6\0" /* offset 17645 */
  31738   "\xe9\xa3\xa2\0" /* offset 17650 */
  31739   "\xe4\xac\xb3\0" /* offset 17654 */
  31740   "\xe9\xa4\xa9\0" /* offset 17658 */
  31741   "\xe9\xa6\xa7\0" /* offset 17662 */
  31742   "\xe9\xa7\x82\0" /* offset 17666 */
  31743   "\xe9\xa7\xbe\0" /* offset 17670 */
  31744   "\xe4\xaf\x8e\0" /* offset 17674 */
  31745   "\xf0\xa9\xac\xb0\0" /* offset 17678 */
  31746   "\xe9\xb1\x80\0" /* offset 17683 */
  31747   "\xe9\xb3\xbd\0" /* offset 17687 */
  31748   "\xe4\xb3\x8e\0" /* offset 17691 */
  31749   "\xe4\xb3\xad\0" /* offset 17695 */
  31750   "\xe9\xb5\xa7\0" /* offset 17699 */
  31751   "\xf0\xaa\x83\x8e\0" /* offset 17703 */
  31752   "\xe4\xb3\xb8\0" /* offset 17708 */
  31753   "\xf0\xaa\x84\x85\0" /* offset 17712 */
  31754   "\xf0\xaa\x88\x8e\0" /* offset 17717 */
  31755   "\xf0\xaa\x8a\x91\0" /* offset 17722 */
  31756   "\xe4\xb5\x96\0" /* offset 17727 */
  31757   "\xe9\xbb\xbe\0" /* offset 17731 */
  31758   "\xe9\xbc\x85\0" /* offset 17735 */
  31759   "\xe9\xbc\x8f\0" /* offset 17739 */
  31760   "\xe9\xbc\x96\0" /* offset 17743 */
  31761   "\xf0\xaa\x98\x80\0" /* offset 17747 */;
  31762 
  31763 
  31764 const uint8_t codeSzUTF8[256] = { 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,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,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,6,6,1,1};
  31765 
  31766 static const char type_data[][256] = {
  31767   { /* page 0, index 0 */
  31768     UNICODE_CONTROL, UNICODE_CONTROL, UNICODE_CONTROL,
  31769     UNICODE_CONTROL, UNICODE_CONTROL, UNICODE_CONTROL,
  31770     UNICODE_CONTROL, UNICODE_CONTROL, UNICODE_CONTROL,
  31771     UNICODE_CONTROL, UNICODE_CONTROL, UNICODE_CONTROL,
  31772     UNICODE_CONTROL, UNICODE_CONTROL, UNICODE_CONTROL,
  31773     UNICODE_CONTROL, UNICODE_CONTROL, UNICODE_CONTROL,
  31774     UNICODE_CONTROL, UNICODE_CONTROL, UNICODE_CONTROL,
  31775     UNICODE_CONTROL, UNICODE_CONTROL, UNICODE_CONTROL,
  31776     UNICODE_CONTROL, UNICODE_CONTROL, UNICODE_CONTROL,
  31777     UNICODE_CONTROL, UNICODE_CONTROL, UNICODE_CONTROL,
  31778     UNICODE_CONTROL, UNICODE_CONTROL, UNICODE_SPACE_SEPARATOR,
  31779     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  31780     UNICODE_OTHER_PUNCTUATION, UNICODE_CURRENCY_SYMBOL,
  31781     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  31782     UNICODE_OTHER_PUNCTUATION, UNICODE_OPEN_PUNCTUATION,
  31783     UNICODE_CLOSE_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  31784     UNICODE_MATH_SYMBOL, UNICODE_OTHER_PUNCTUATION,
  31785     UNICODE_DASH_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  31786     UNICODE_OTHER_PUNCTUATION, UNICODE_DECIMAL_NUMBER,
  31787     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  31788     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  31789     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  31790     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  31791     UNICODE_DECIMAL_NUMBER, UNICODE_OTHER_PUNCTUATION,
  31792     UNICODE_OTHER_PUNCTUATION, UNICODE_MATH_SYMBOL,
  31793     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  31794     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  31795     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31796     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31797     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31798     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31799     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31800     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31801     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31802     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31803     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31804     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31805     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31806     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31807     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31808     UNICODE_OPEN_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  31809     UNICODE_CLOSE_PUNCTUATION, UNICODE_MODIFIER_SYMBOL,
  31810     UNICODE_CONNECT_PUNCTUATION, UNICODE_MODIFIER_SYMBOL,
  31811     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31812     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31813     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31814     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31815     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31816     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31817     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31818     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31819     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31820     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31821     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31822     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31823     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31824     UNICODE_OPEN_PUNCTUATION, UNICODE_MATH_SYMBOL,
  31825     UNICODE_CLOSE_PUNCTUATION, UNICODE_MATH_SYMBOL, UNICODE_CONTROL,
  31826     UNICODE_CONTROL, UNICODE_CONTROL, UNICODE_CONTROL,
  31827     UNICODE_CONTROL, UNICODE_CONTROL, UNICODE_CONTROL,
  31828     UNICODE_CONTROL, UNICODE_CONTROL, UNICODE_CONTROL,
  31829     UNICODE_CONTROL, UNICODE_CONTROL, UNICODE_CONTROL,
  31830     UNICODE_CONTROL, UNICODE_CONTROL, UNICODE_CONTROL,
  31831     UNICODE_CONTROL, UNICODE_CONTROL, UNICODE_CONTROL,
  31832     UNICODE_CONTROL, UNICODE_CONTROL, UNICODE_CONTROL,
  31833     UNICODE_CONTROL, UNICODE_CONTROL, UNICODE_CONTROL,
  31834     UNICODE_CONTROL, UNICODE_CONTROL, UNICODE_CONTROL,
  31835     UNICODE_CONTROL, UNICODE_CONTROL, UNICODE_CONTROL,
  31836     UNICODE_CONTROL, UNICODE_CONTROL, UNICODE_SPACE_SEPARATOR,
  31837     UNICODE_OTHER_PUNCTUATION, UNICODE_CURRENCY_SYMBOL,
  31838     UNICODE_CURRENCY_SYMBOL, UNICODE_CURRENCY_SYMBOL,
  31839     UNICODE_CURRENCY_SYMBOL, UNICODE_OTHER_SYMBOL,
  31840     UNICODE_OTHER_PUNCTUATION, UNICODE_MODIFIER_SYMBOL,
  31841     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_LETTER,
  31842     UNICODE_INITIAL_PUNCTUATION, UNICODE_MATH_SYMBOL, UNICODE_FORMAT,
  31843     UNICODE_OTHER_SYMBOL, UNICODE_MODIFIER_SYMBOL,
  31844     UNICODE_OTHER_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_OTHER_NUMBER,
  31845     UNICODE_OTHER_NUMBER, UNICODE_MODIFIER_SYMBOL,
  31846     UNICODE_LOWERCASE_LETTER, UNICODE_OTHER_PUNCTUATION,
  31847     UNICODE_OTHER_PUNCTUATION, UNICODE_MODIFIER_SYMBOL,
  31848     UNICODE_OTHER_NUMBER, UNICODE_OTHER_LETTER,
  31849     UNICODE_FINAL_PUNCTUATION, UNICODE_OTHER_NUMBER,
  31850     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  31851     UNICODE_OTHER_PUNCTUATION, UNICODE_UPPERCASE_LETTER,
  31852     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31853     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31854     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31855     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31856     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31857     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31858     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31859     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31860     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31861     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31862     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31863     UNICODE_MATH_SYMBOL, UNICODE_UPPERCASE_LETTER,
  31864     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31865     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31866     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31867     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31868     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31869     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31870     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31871     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31872     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31873     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31874     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31875     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31876     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31877     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31878     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31879     UNICODE_MATH_SYMBOL, UNICODE_LOWERCASE_LETTER,
  31880     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31881     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31882     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31883     UNICODE_LOWERCASE_LETTER
  31884   },
  31885   { /* page 1, index 1 */
  31886     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31887     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31888     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31889     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31890     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31891     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31892     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31893     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31894     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31895     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31896     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31897     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31898     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31899     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31900     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31901     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31902     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31903     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31904     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31905     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31906     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31907     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31908     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31909     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31910     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31911     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31912     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31913     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31914     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31915     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31916     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31917     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31918     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31919     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31920     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31921     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31922     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31923     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31924     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31925     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31926     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31927     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31928     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31929     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31930     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31931     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31932     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31933     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31934     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31935     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31936     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31937     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31938     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31939     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31940     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31941     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31942     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31943     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31944     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31945     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31946     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31947     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31948     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31949     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31950     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31951     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31952     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31953     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31954     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31955     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31956     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31957     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31958     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31959     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31960     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31961     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31962     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31963     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31964     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31965     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31966     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31967     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31968     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31969     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31970     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31971     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31972     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31973     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31974     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31975     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31976     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31977     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31978     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31979     UNICODE_LOWERCASE_LETTER, UNICODE_OTHER_LETTER,
  31980     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31981     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31982     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  31983     UNICODE_OTHER_LETTER, UNICODE_UPPERCASE_LETTER,
  31984     UNICODE_TITLECASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31985     UNICODE_UPPERCASE_LETTER, UNICODE_TITLECASE_LETTER,
  31986     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31987     UNICODE_TITLECASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31988     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31989     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31990     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31991     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31992     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31993     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31994     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31995     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31996     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31997     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31998     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31999     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32000     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32001     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32002     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32003     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32004     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32005     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32006     UNICODE_UPPERCASE_LETTER, UNICODE_TITLECASE_LETTER,
  32007     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32008     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32009     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32010     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32011     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32012     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32013     UNICODE_LOWERCASE_LETTER
  32014   },
  32015   { /* page 2, index 2 */
  32016     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32017     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32018     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32019     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32020     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32021     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32022     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32023     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32024     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32025     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32026     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32027     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32028     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32029     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32030     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32031     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32032     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32033     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32034     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32035     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32036     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32037     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32038     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32039     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32040     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32041     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32042     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32043     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32044     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32045     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32046     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32047     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32048     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32049     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32050     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32051     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32052     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32053     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32054     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32055     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32056     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32057     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32058     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32059     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32060     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32061     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32062     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32063     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32064     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32065     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32066     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32067     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32068     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32069     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32070     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32071     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32072     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32073     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32074     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32075     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32076     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32077     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32078     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32079     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32080     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32081     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32082     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32083     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32084     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32085     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32086     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32087     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32088     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32089     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32090     UNICODE_OTHER_LETTER, UNICODE_LOWERCASE_LETTER,
  32091     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32092     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32093     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32094     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32095     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32096     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32097     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32098     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32099     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32100     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32101     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32102     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32103     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32104     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  32105     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  32106     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  32107     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  32108     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  32109     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  32110     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  32111     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  32112     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  32113     UNICODE_MODIFIER_SYMBOL, UNICODE_MODIFIER_SYMBOL,
  32114     UNICODE_MODIFIER_SYMBOL, UNICODE_MODIFIER_SYMBOL,
  32115     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  32116     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  32117     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  32118     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  32119     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  32120     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  32121     UNICODE_MODIFIER_SYMBOL, UNICODE_MODIFIER_SYMBOL,
  32122     UNICODE_MODIFIER_SYMBOL, UNICODE_MODIFIER_SYMBOL,
  32123     UNICODE_MODIFIER_SYMBOL, UNICODE_MODIFIER_SYMBOL,
  32124     UNICODE_MODIFIER_SYMBOL, UNICODE_MODIFIER_SYMBOL,
  32125     UNICODE_MODIFIER_SYMBOL, UNICODE_MODIFIER_SYMBOL,
  32126     UNICODE_MODIFIER_SYMBOL, UNICODE_MODIFIER_SYMBOL,
  32127     UNICODE_MODIFIER_SYMBOL, UNICODE_MODIFIER_SYMBOL,
  32128     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  32129     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  32130     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_SYMBOL,
  32131     UNICODE_MODIFIER_SYMBOL, UNICODE_MODIFIER_SYMBOL,
  32132     UNICODE_MODIFIER_SYMBOL, UNICODE_MODIFIER_SYMBOL,
  32133     UNICODE_MODIFIER_SYMBOL, UNICODE_MODIFIER_SYMBOL,
  32134     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_SYMBOL,
  32135     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_SYMBOL,
  32136     UNICODE_MODIFIER_SYMBOL, UNICODE_MODIFIER_SYMBOL,
  32137     UNICODE_MODIFIER_SYMBOL, UNICODE_MODIFIER_SYMBOL,
  32138     UNICODE_MODIFIER_SYMBOL, UNICODE_MODIFIER_SYMBOL,
  32139     UNICODE_MODIFIER_SYMBOL, UNICODE_MODIFIER_SYMBOL,
  32140     UNICODE_MODIFIER_SYMBOL, UNICODE_MODIFIER_SYMBOL,
  32141     UNICODE_MODIFIER_SYMBOL, UNICODE_MODIFIER_SYMBOL,
  32142     UNICODE_MODIFIER_SYMBOL, UNICODE_MODIFIER_SYMBOL,
  32143     UNICODE_MODIFIER_SYMBOL, UNICODE_MODIFIER_SYMBOL
  32144   },
  32145   { /* page 3, index 3 */
  32146     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32147     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32148     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32149     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32150     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32151     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32152     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32153     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32154     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32155     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32156     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32157     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32158     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32159     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32160     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32161     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32162     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32163     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32164     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32165     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32166     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32167     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32168     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32169     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32170     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32171     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32172     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32173     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32174     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32175     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32176     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32177     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32178     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32179     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32180     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32181     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32182     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32183     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32184     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32185     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32186     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32187     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32188     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32189     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32190     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32191     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32192     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32193     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32194     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32195     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32196     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32197     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32198     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32199     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32200     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32201     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32202     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32203     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32204     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_SYMBOL,
  32205     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32206     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_MODIFIER_LETTER,
  32207     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32208     UNICODE_LOWERCASE_LETTER, UNICODE_OTHER_PUNCTUATION,
  32209     UNICODE_UPPERCASE_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32210     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_MODIFIER_SYMBOL,
  32211     UNICODE_MODIFIER_SYMBOL, UNICODE_UPPERCASE_LETTER,
  32212     UNICODE_OTHER_PUNCTUATION, UNICODE_UPPERCASE_LETTER,
  32213     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32214     UNICODE_UNASSIGNED, UNICODE_UPPERCASE_LETTER, UNICODE_UNASSIGNED,
  32215     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32216     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32217     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32218     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32219     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32220     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32221     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32222     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32223     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32224     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32225     UNICODE_UNASSIGNED, UNICODE_UPPERCASE_LETTER,
  32226     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32227     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32228     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32229     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32230     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32231     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32232     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32233     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32234     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32235     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32236     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32237     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32238     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32239     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32240     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32241     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32242     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32243     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32244     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32245     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32246     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32247     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32248     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32249     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32250     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32251     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32252     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32253     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32254     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32255     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32256     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32257     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32258     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32259     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32260     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32261     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32262     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32263     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32264     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32265     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32266     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32267     UNICODE_MATH_SYMBOL, UNICODE_UPPERCASE_LETTER,
  32268     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32269     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32270     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32271     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER
  32272   },
  32273   { /* page 4, index 4 */
  32274     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32275     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32276     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32277     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32278     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32279     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32280     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32281     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32282     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32283     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32284     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32285     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32286     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32287     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32288     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32289     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32290     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32291     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32292     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32293     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32294     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32295     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32296     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32297     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32298     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32299     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32300     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32301     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32302     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32303     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32304     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32305     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32306     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32307     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32308     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32309     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32310     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32311     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32312     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32313     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32314     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32315     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32316     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32317     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32318     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32319     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32320     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32321     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32322     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32323     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32324     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32325     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32326     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32327     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32328     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32329     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32330     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32331     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32332     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32333     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32334     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32335     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32336     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32337     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32338     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32339     UNICODE_OTHER_SYMBOL, UNICODE_NON_SPACING_MARK,
  32340     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32341     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32342     UNICODE_ENCLOSING_MARK, UNICODE_ENCLOSING_MARK,
  32343     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32344     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32345     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32346     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32347     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32348     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32349     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32350     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32351     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32352     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32353     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32354     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32355     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32356     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32357     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32358     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32359     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32360     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32361     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32362     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32363     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32364     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32365     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32366     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32367     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32368     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32369     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32370     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32371     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32372     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32373     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32374     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32375     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32376     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32377     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32378     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32379     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32380     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32381     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32382     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32383     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32384     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32385     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32386     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32387     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32388     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32389     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32390     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32391     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32392     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32393     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32394     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32395     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32396     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32397     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32398     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32399     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32400     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32401     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER
  32402   },
  32403   { /* page 5, index 5 */
  32404     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32405     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32406     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32407     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32408     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32409     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32410     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32411     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32412     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32413     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32414     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32415     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32416     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32417     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32418     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32419     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32420     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32421     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32422     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32423     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32424     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32425     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32426     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32427     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32428     UNICODE_UNASSIGNED, UNICODE_UPPERCASE_LETTER,
  32429     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32430     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32431     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32432     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32433     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32434     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32435     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32436     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32437     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32438     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32439     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32440     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32441     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32442     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32443     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32444     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32445     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32446     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32447     UNICODE_UPPERCASE_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32448     UNICODE_MODIFIER_LETTER, UNICODE_OTHER_PUNCTUATION,
  32449     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  32450     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  32451     UNICODE_OTHER_PUNCTUATION, UNICODE_UNASSIGNED,
  32452     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32453     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32454     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32455     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32456     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32457     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32458     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32459     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32460     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32461     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32462     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32463     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32464     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32465     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32466     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32467     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32468     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32469     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32470     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32471     UNICODE_LOWERCASE_LETTER, UNICODE_UNASSIGNED,
  32472     UNICODE_OTHER_PUNCTUATION, UNICODE_DASH_PUNCTUATION,
  32473     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_SYMBOL,
  32474     UNICODE_OTHER_SYMBOL, UNICODE_CURRENCY_SYMBOL, UNICODE_UNASSIGNED,
  32475     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32476     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32477     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32478     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32479     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32480     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32481     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32482     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32483     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32484     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32485     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32486     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32487     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32488     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32489     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32490     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32491     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32492     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32493     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32494     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32495     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32496     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32497     UNICODE_NON_SPACING_MARK, UNICODE_DASH_PUNCTUATION,
  32498     UNICODE_NON_SPACING_MARK, UNICODE_OTHER_PUNCTUATION,
  32499     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32500     UNICODE_OTHER_PUNCTUATION, UNICODE_NON_SPACING_MARK,
  32501     UNICODE_NON_SPACING_MARK, UNICODE_OTHER_PUNCTUATION,
  32502     UNICODE_NON_SPACING_MARK, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32503     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32504     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32505     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32506     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32507     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32508     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32509     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32510     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32511     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32512     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32513     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32514     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32515     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  32516     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32517     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  32518     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32519     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32520     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32521     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED
  32522   },
  32523   { /* page 6, index 6 */
  32524     UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT,
  32525     UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_MATH_SYMBOL,
  32526     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  32527     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  32528     UNICODE_CURRENCY_SYMBOL, UNICODE_OTHER_PUNCTUATION,
  32529     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_SYMBOL,
  32530     UNICODE_OTHER_SYMBOL, UNICODE_NON_SPACING_MARK,
  32531     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32532     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32533     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32534     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32535     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32536     UNICODE_OTHER_PUNCTUATION, UNICODE_FORMAT, UNICODE_UNASSIGNED,
  32537     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  32538     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32539     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32540     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32541     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32542     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32543     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32544     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32545     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32546     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32547     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32548     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32549     UNICODE_MODIFIER_LETTER, UNICODE_OTHER_LETTER,
  32550     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32551     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32552     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32553     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32554     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32555     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32556     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32557     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32558     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32559     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32560     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32561     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32562     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32563     UNICODE_NON_SPACING_MARK, UNICODE_DECIMAL_NUMBER,
  32564     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  32565     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  32566     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  32567     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  32568     UNICODE_DECIMAL_NUMBER, UNICODE_OTHER_PUNCTUATION,
  32569     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  32570     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_LETTER,
  32571     UNICODE_OTHER_LETTER, UNICODE_NON_SPACING_MARK,
  32572     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32573     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32574     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32575     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32576     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32577     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32578     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32579     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32580     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32581     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32582     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32583     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32584     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32585     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32586     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32587     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32588     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32589     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32590     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32591     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32592     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32593     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32594     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32595     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32596     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32597     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32598     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32599     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32600     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32601     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32602     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32603     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32604     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32605     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_LETTER,
  32606     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32607     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32608     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32609     UNICODE_NON_SPACING_MARK, UNICODE_FORMAT, UNICODE_OTHER_SYMBOL,
  32610     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32611     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32612     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32613     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  32614     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32615     UNICODE_OTHER_SYMBOL, UNICODE_NON_SPACING_MARK,
  32616     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32617     UNICODE_NON_SPACING_MARK, UNICODE_OTHER_LETTER,
  32618     UNICODE_OTHER_LETTER, UNICODE_DECIMAL_NUMBER,
  32619     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  32620     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  32621     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  32622     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  32623     UNICODE_DECIMAL_NUMBER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32624     UNICODE_OTHER_LETTER, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  32625     UNICODE_OTHER_LETTER
  32626   },
  32627   { /* page 7, index 7 */
  32628     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  32629     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  32630     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  32631     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  32632     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  32633     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  32634     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  32635     UNICODE_UNASSIGNED, UNICODE_FORMAT, UNICODE_OTHER_LETTER,
  32636     UNICODE_NON_SPACING_MARK, UNICODE_OTHER_LETTER,
  32637     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32638     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32639     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32640     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32641     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32642     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32643     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32644     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32645     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32646     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32647     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32648     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32649     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32650     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32651     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32652     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32653     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32654     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32655     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32656     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32657     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32658     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32659     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32660     UNICODE_NON_SPACING_MARK, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32661     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32662     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32663     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32664     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32665     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32666     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32667     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32668     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32669     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32670     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32671     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32672     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32673     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32674     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32675     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32676     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32677     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32678     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32679     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32680     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32681     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32682     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32683     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32684     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32685     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32686     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32687     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32688     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32689     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32690     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32691     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32692     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32693     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32694     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32695     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32696     UNICODE_NON_SPACING_MARK, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  32697     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32698     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32699     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32700     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32701     UNICODE_UNASSIGNED, UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  32702     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  32703     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  32704     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  32705     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  32706     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32707     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32708     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32709     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32710     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32711     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32712     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32713     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32714     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32715     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32716     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32717     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32718     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32719     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32720     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32721     UNICODE_NON_SPACING_MARK, UNICODE_MODIFIER_LETTER,
  32722     UNICODE_MODIFIER_LETTER, UNICODE_OTHER_SYMBOL,
  32723     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  32724     UNICODE_OTHER_PUNCTUATION, UNICODE_MODIFIER_LETTER,
  32725     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32726     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED
  32727   },
  32728   { /* page 8, index 8 */
  32729     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32730     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32731     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32732     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32733     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32734     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32735     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32736     UNICODE_OTHER_LETTER, UNICODE_NON_SPACING_MARK,
  32737     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32738     UNICODE_NON_SPACING_MARK, UNICODE_MODIFIER_LETTER,
  32739     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32740     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32741     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32742     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32743     UNICODE_NON_SPACING_MARK, UNICODE_MODIFIER_LETTER,
  32744     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32745     UNICODE_NON_SPACING_MARK, UNICODE_MODIFIER_LETTER,
  32746     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32747     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32748     UNICODE_NON_SPACING_MARK, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32749     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  32750     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  32751     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  32752     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  32753     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  32754     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  32755     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  32756     UNICODE_OTHER_PUNCTUATION, UNICODE_UNASSIGNED,
  32757     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32758     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32759     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32760     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32761     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32762     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32763     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32764     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32765     UNICODE_OTHER_LETTER, UNICODE_NON_SPACING_MARK,
  32766     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32767     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_PUNCTUATION,
  32768     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32769     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32770     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32771     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32772     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32773     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32774     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32775     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32776     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32777     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32778     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32779     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32780     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32781     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32782     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32783     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32784     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32785     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32786     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32787     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32788     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32789     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  32790     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32791     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32792     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32793     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32794     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32795     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32796     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  32797     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32798     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32799     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  32800     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32801     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32802     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32803     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32804     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32805     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32806     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32807     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32808     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32809     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32810     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32811     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32812     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32813     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK, UNICODE_FORMAT,
  32814     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32815     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32816     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32817     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32818     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32819     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32820     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32821     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32822     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32823     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32824     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32825     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32826     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32827     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32828     UNICODE_NON_SPACING_MARK
  32829   },
  32830   { /* page 9, index 9 */
  32831     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32832     UNICODE_NON_SPACING_MARK, UNICODE_SPACING_MARK,
  32833     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32834     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32835     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32836     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32837     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32838     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32839     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32840     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32841     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32842     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32843     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32844     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32845     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32846     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32847     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32848     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32849     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32850     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32851     UNICODE_NON_SPACING_MARK, UNICODE_SPACING_MARK,
  32852     UNICODE_NON_SPACING_MARK, UNICODE_OTHER_LETTER,
  32853     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  32854     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32855     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32856     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32857     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32858     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  32859     UNICODE_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32860     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_OTHER_LETTER,
  32861     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32862     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32863     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32864     UNICODE_NON_SPACING_MARK, UNICODE_OTHER_LETTER,
  32865     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32866     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32867     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32868     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32869     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  32870     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  32871     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  32872     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  32873     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  32874     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  32875     UNICODE_OTHER_PUNCTUATION, UNICODE_MODIFIER_LETTER,
  32876     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32877     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32878     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32879     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32880     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32881     UNICODE_NON_SPACING_MARK, UNICODE_SPACING_MARK,
  32882     UNICODE_SPACING_MARK, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  32883     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32884     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32885     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32886     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  32887     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32888     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32889     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32890     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32891     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32892     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32893     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32894     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  32895     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32896     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32897     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  32898     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32899     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32900     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32901     UNICODE_NON_SPACING_MARK, UNICODE_OTHER_LETTER,
  32902     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  32903     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32904     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32905     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_SPACING_MARK,
  32906     UNICODE_SPACING_MARK, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32907     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  32908     UNICODE_NON_SPACING_MARK, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  32909     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32910     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32911     UNICODE_UNASSIGNED, UNICODE_SPACING_MARK, UNICODE_UNASSIGNED,
  32912     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32913     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  32914     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32915     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32916     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_DECIMAL_NUMBER,
  32917     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  32918     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  32919     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  32920     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  32921     UNICODE_DECIMAL_NUMBER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32922     UNICODE_CURRENCY_SYMBOL, UNICODE_CURRENCY_SYMBOL,
  32923     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  32924     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  32925     UNICODE_OTHER_SYMBOL, UNICODE_CURRENCY_SYMBOL,
  32926     UNICODE_OTHER_LETTER, UNICODE_OTHER_PUNCTUATION,
  32927     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED
  32928   },
  32929   { /* page 10, index 10 */
  32930     UNICODE_UNASSIGNED, UNICODE_NON_SPACING_MARK,
  32931     UNICODE_NON_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_UNASSIGNED,
  32932     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32933     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32934     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32935     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32936     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  32937     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32938     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32939     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32940     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32941     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32942     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32943     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32944     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32945     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32946     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  32947     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  32948     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  32949     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  32950     UNICODE_UNASSIGNED, UNICODE_NON_SPACING_MARK, UNICODE_UNASSIGNED,
  32951     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  32952     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32953     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32954     UNICODE_UNASSIGNED, UNICODE_NON_SPACING_MARK,
  32955     UNICODE_NON_SPACING_MARK, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32956     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32957     UNICODE_NON_SPACING_MARK, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32958     UNICODE_UNASSIGNED, UNICODE_NON_SPACING_MARK, UNICODE_UNASSIGNED,
  32959     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32960     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32961     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32962     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  32963     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32964     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32965     UNICODE_UNASSIGNED, UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  32966     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  32967     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  32968     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  32969     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  32970     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32971     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32972     UNICODE_NON_SPACING_MARK, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32973     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32974     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32975     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32976     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32977     UNICODE_SPACING_MARK, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  32978     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32979     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32980     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  32981     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32982     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32983     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32984     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32985     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32986     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32987     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32988     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32989     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  32990     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32991     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32992     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  32993     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  32994     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32995     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32996     UNICODE_NON_SPACING_MARK, UNICODE_OTHER_LETTER,
  32997     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  32998     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32999     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33000     UNICODE_NON_SPACING_MARK, UNICODE_UNASSIGNED,
  33001     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33002     UNICODE_SPACING_MARK, UNICODE_UNASSIGNED, UNICODE_SPACING_MARK,
  33003     UNICODE_SPACING_MARK, UNICODE_NON_SPACING_MARK, UNICODE_UNASSIGNED,
  33004     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  33005     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33006     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33007     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33008     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33009     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  33010     UNICODE_OTHER_LETTER, UNICODE_NON_SPACING_MARK,
  33011     UNICODE_NON_SPACING_MARK, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33012     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  33013     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  33014     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  33015     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  33016     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  33017     UNICODE_OTHER_PUNCTUATION, UNICODE_CURRENCY_SYMBOL,
  33018     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33019     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33020     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_NON_SPACING_MARK,
  33021     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33022     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33023     UNICODE_NON_SPACING_MARK
  33024   },
  33025   { /* page 11, index 11 */
  33026     UNICODE_UNASSIGNED, UNICODE_NON_SPACING_MARK, UNICODE_SPACING_MARK,
  33027     UNICODE_SPACING_MARK, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  33028     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33029     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33030     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33031     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  33032     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33033     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33034     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33035     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33036     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33037     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33038     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33039     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  33040     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33041     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33042     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  33043     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  33044     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33045     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33046     UNICODE_NON_SPACING_MARK, UNICODE_OTHER_LETTER,
  33047     UNICODE_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33048     UNICODE_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33049     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33050     UNICODE_NON_SPACING_MARK, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33051     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_UNASSIGNED,
  33052     UNICODE_UNASSIGNED, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  33053     UNICODE_NON_SPACING_MARK, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33054     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33055     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33056     UNICODE_NON_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_UNASSIGNED,
  33057     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33058     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  33059     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33060     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33061     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_DECIMAL_NUMBER,
  33062     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  33063     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  33064     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  33065     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  33066     UNICODE_DECIMAL_NUMBER, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_LETTER,
  33067     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  33068     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  33069     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33070     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33071     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33072     UNICODE_UNASSIGNED, UNICODE_NON_SPACING_MARK, UNICODE_OTHER_LETTER,
  33073     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33074     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33075     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33076     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33077     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  33078     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33079     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33080     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  33081     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  33082     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33083     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33084     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33085     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33086     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33087     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33088     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33089     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33090     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33091     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33092     UNICODE_UNASSIGNED, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  33093     UNICODE_NON_SPACING_MARK, UNICODE_SPACING_MARK,
  33094     UNICODE_SPACING_MARK, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33095     UNICODE_UNASSIGNED, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  33096     UNICODE_SPACING_MARK, UNICODE_UNASSIGNED, UNICODE_SPACING_MARK,
  33097     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  33098     UNICODE_NON_SPACING_MARK, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33099     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33100     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33101     UNICODE_UNASSIGNED, UNICODE_SPACING_MARK, UNICODE_UNASSIGNED,
  33102     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33103     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33104     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33105     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33106     UNICODE_UNASSIGNED, UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  33107     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  33108     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  33109     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  33110     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  33111     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  33112     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  33113     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  33114     UNICODE_CURRENCY_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_UNASSIGNED,
  33115     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33116     UNICODE_UNASSIGNED
  33117   },
  33118   { /* page 12, index 12 */
  33119     UNICODE_NON_SPACING_MARK, UNICODE_SPACING_MARK,
  33120     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_UNASSIGNED,
  33121     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33122     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33123     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  33124     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33125     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33126     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33127     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33128     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33129     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33130     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33131     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33132     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33133     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33134     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33135     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33136     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33137     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33138     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  33139     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  33140     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33141     UNICODE_NON_SPACING_MARK, UNICODE_SPACING_MARK,
  33142     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  33143     UNICODE_UNASSIGNED, UNICODE_NON_SPACING_MARK,
  33144     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33145     UNICODE_UNASSIGNED, UNICODE_NON_SPACING_MARK,
  33146     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33147     UNICODE_NON_SPACING_MARK, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33148     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33149     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_NON_SPACING_MARK,
  33150     UNICODE_NON_SPACING_MARK, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  33151     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  33152     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33153     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33154     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33155     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_DECIMAL_NUMBER,
  33156     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  33157     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  33158     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  33159     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  33160     UNICODE_DECIMAL_NUMBER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33161     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33162     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33163     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  33164     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  33165     UNICODE_OTHER_NUMBER, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_LETTER,
  33166     UNICODE_NON_SPACING_MARK, UNICODE_SPACING_MARK,
  33167     UNICODE_SPACING_MARK, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  33168     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33169     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33170     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  33171     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  33172     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33173     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33174     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33175     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33176     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33177     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33178     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33179     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  33180     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33181     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33182     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33183     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  33184     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33185     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33186     UNICODE_NON_SPACING_MARK, UNICODE_OTHER_LETTER,
  33187     UNICODE_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33188     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  33189     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_UNASSIGNED,
  33190     UNICODE_NON_SPACING_MARK, UNICODE_SPACING_MARK,
  33191     UNICODE_SPACING_MARK, UNICODE_UNASSIGNED, UNICODE_SPACING_MARK,
  33192     UNICODE_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33193     UNICODE_NON_SPACING_MARK, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33194     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33195     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_SPACING_MARK,
  33196     UNICODE_SPACING_MARK, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33197     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33198     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  33199     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33200     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33201     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_DECIMAL_NUMBER,
  33202     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  33203     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  33204     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  33205     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  33206     UNICODE_DECIMAL_NUMBER, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  33207     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33208     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33209     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33210     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33211     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED
  33212   },
  33213   { /* page 13, index 13 */
  33214     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33215     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_UNASSIGNED,
  33216     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33217     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33218     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  33219     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33220     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33221     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33222     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33223     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33224     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33225     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33226     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33227     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33228     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33229     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33230     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33231     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33232     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33233     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33234     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33235     UNICODE_OTHER_LETTER, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  33236     UNICODE_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33237     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33238     UNICODE_NON_SPACING_MARK, UNICODE_UNASSIGNED, UNICODE_SPACING_MARK,
  33239     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_UNASSIGNED,
  33240     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  33241     UNICODE_NON_SPACING_MARK, UNICODE_OTHER_LETTER,
  33242     UNICODE_OTHER_SYMBOL, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33243     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  33244     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_SPACING_MARK,
  33245     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  33246     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  33247     UNICODE_OTHER_NUMBER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33248     UNICODE_OTHER_LETTER, UNICODE_NON_SPACING_MARK,
  33249     UNICODE_NON_SPACING_MARK, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33250     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  33251     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  33252     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  33253     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  33254     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  33255     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  33256     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  33257     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  33258     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33259     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33260     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33261     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_UNASSIGNED,
  33262     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33263     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33264     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33265     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33266     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33267     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33268     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33269     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33270     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33271     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33272     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33273     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33274     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33275     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33276     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33277     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33278     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33279     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33280     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  33281     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  33282     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33283     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33284     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33285     UNICODE_NON_SPACING_MARK, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33286     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_SPACING_MARK,
  33287     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  33288     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33289     UNICODE_NON_SPACING_MARK, UNICODE_UNASSIGNED,
  33290     UNICODE_NON_SPACING_MARK, UNICODE_UNASSIGNED, UNICODE_SPACING_MARK,
  33291     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  33292     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  33293     UNICODE_SPACING_MARK, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33294     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33295     UNICODE_UNASSIGNED, UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  33296     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  33297     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  33298     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  33299     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER, UNICODE_UNASSIGNED,
  33300     UNICODE_UNASSIGNED, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  33301     UNICODE_OTHER_PUNCTUATION, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33302     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33303     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33304     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED
  33305   },
  33306   { /* page 14, index 14 */
  33307     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33308     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33309     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33310     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33311     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33312     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33313     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33314     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33315     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33316     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33317     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33318     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33319     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33320     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33321     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33322     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33323     UNICODE_OTHER_LETTER, UNICODE_NON_SPACING_MARK,
  33324     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33325     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33326     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33327     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33328     UNICODE_NON_SPACING_MARK, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33329     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_CURRENCY_SYMBOL,
  33330     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33331     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33332     UNICODE_MODIFIER_LETTER, UNICODE_NON_SPACING_MARK,
  33333     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33334     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33335     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33336     UNICODE_NON_SPACING_MARK, UNICODE_OTHER_PUNCTUATION,
  33337     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  33338     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  33339     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  33340     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  33341     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  33342     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  33343     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33344     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33345     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33346     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33347     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33348     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33349     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33350     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33351     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33352     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33353     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33354     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33355     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33356     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  33357     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33358     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  33359     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  33360     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33361     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  33362     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33363     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33364     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33365     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  33366     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33367     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  33368     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33369     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  33370     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33371     UNICODE_OTHER_LETTER, UNICODE_NON_SPACING_MARK,
  33372     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33373     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33374     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33375     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33376     UNICODE_UNASSIGNED, UNICODE_NON_SPACING_MARK,
  33377     UNICODE_NON_SPACING_MARK, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  33378     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33379     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33380     UNICODE_UNASSIGNED, UNICODE_MODIFIER_LETTER, UNICODE_UNASSIGNED,
  33381     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33382     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33383     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33384     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_DECIMAL_NUMBER,
  33385     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  33386     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  33387     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  33388     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  33389     UNICODE_DECIMAL_NUMBER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33390     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33391     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33392     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33393     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33394     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33395     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33396     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33397     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33398     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33399     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33400     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33401     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED
  33402   },
  33403   { /* page 15, index 15 */
  33404     UNICODE_OTHER_LETTER, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  33405     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_PUNCTUATION,
  33406     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  33407     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  33408     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  33409     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  33410     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  33411     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  33412     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  33413     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_PUNCTUATION,
  33414     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  33415     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33416     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  33417     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  33418     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  33419     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  33420     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  33421     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  33422     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  33423     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  33424     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  33425     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  33426     UNICODE_OTHER_NUMBER, UNICODE_OTHER_SYMBOL,
  33427     UNICODE_NON_SPACING_MARK, UNICODE_OTHER_SYMBOL,
  33428     UNICODE_NON_SPACING_MARK, UNICODE_OTHER_SYMBOL,
  33429     UNICODE_NON_SPACING_MARK, UNICODE_OPEN_PUNCTUATION,
  33430     UNICODE_CLOSE_PUNCTUATION, UNICODE_OPEN_PUNCTUATION,
  33431     UNICODE_CLOSE_PUNCTUATION, UNICODE_SPACING_MARK,
  33432     UNICODE_SPACING_MARK, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33433     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33434     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33435     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33436     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33437     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33438     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33439     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33440     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33441     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33442     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33443     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33444     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33445     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33446     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33447     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33448     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_NON_SPACING_MARK,
  33449     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33450     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33451     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33452     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33453     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33454     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33455     UNICODE_NON_SPACING_MARK, UNICODE_SPACING_MARK,
  33456     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33457     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33458     UNICODE_NON_SPACING_MARK, UNICODE_OTHER_PUNCTUATION,
  33459     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33460     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33461     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33462     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33463     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33464     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33465     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33466     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33467     UNICODE_NON_SPACING_MARK, UNICODE_UNASSIGNED,
  33468     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33469     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33470     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33471     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33472     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33473     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33474     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33475     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33476     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33477     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33478     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33479     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33480     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33481     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33482     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33483     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33484     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33485     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33486     UNICODE_UNASSIGNED, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  33487     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  33488     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  33489     UNICODE_NON_SPACING_MARK, UNICODE_OTHER_SYMBOL,
  33490     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  33491     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_UNASSIGNED,
  33492     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  33493     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  33494     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  33495     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_SYMBOL,
  33496     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  33497     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  33498     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33499     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33500     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33501     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33502     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33503     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33504     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33505     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33506     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33507     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33508     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33509     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33510     UNICODE_UNASSIGNED
  33511   },
  33512   { /* page 16, index 16 */
  33513     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33514     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33515     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33516     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33517     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33518     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33519     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33520     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33521     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33522     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33523     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33524     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33525     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33526     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33527     UNICODE_OTHER_LETTER, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  33528     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33529     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33530     UNICODE_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33531     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33532     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33533     UNICODE_NON_SPACING_MARK, UNICODE_SPACING_MARK,
  33534     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33535     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  33536     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33537     UNICODE_OTHER_LETTER, UNICODE_DECIMAL_NUMBER,
  33538     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  33539     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  33540     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  33541     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  33542     UNICODE_DECIMAL_NUMBER, UNICODE_OTHER_PUNCTUATION,
  33543     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  33544     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  33545     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_LETTER,
  33546     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33547     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_SPACING_MARK,
  33548     UNICODE_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33549     UNICODE_NON_SPACING_MARK, UNICODE_OTHER_LETTER,
  33550     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33551     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33552     UNICODE_NON_SPACING_MARK, UNICODE_OTHER_LETTER,
  33553     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  33554     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_SPACING_MARK,
  33555     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  33556     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  33557     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33558     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33559     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33560     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33561     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33562     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33563     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33564     UNICODE_OTHER_LETTER, UNICODE_NON_SPACING_MARK,
  33565     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  33566     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33567     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  33568     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  33569     UNICODE_NON_SPACING_MARK, UNICODE_OTHER_LETTER,
  33570     UNICODE_SPACING_MARK, UNICODE_DECIMAL_NUMBER,
  33571     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  33572     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  33573     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  33574     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  33575     UNICODE_DECIMAL_NUMBER, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  33576     UNICODE_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33577     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  33578     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  33579     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  33580     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  33581     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  33582     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  33583     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  33584     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  33585     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  33586     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  33587     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  33588     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  33589     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  33590     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  33591     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  33592     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  33593     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  33594     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  33595     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  33596     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  33597     UNICODE_UNASSIGNED, UNICODE_UPPERCASE_LETTER, UNICODE_UNASSIGNED,
  33598     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33599     UNICODE_UNASSIGNED, UNICODE_UPPERCASE_LETTER, UNICODE_UNASSIGNED,
  33600     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33601     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33602     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33603     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33604     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33605     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33606     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33607     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33608     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33609     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33610     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33611     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33612     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33613     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33614     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33615     UNICODE_OTHER_PUNCTUATION, UNICODE_MODIFIER_LETTER,
  33616     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER
  33617   },
  33618   { /* page 18, index 17 */
  33619     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33620     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33621     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33622     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33623     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33624     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33625     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33626     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33627     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33628     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33629     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33630     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33631     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33632     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33633     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33634     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33635     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33636     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33637     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33638     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33639     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33640     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33641     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33642     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33643     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  33644     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33645     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  33646     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33647     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33648     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  33649     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33650     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33651     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33652     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33653     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33654     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33655     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33656     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33657     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33658     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33659     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33660     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33661     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33662     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33663     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33664     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  33665     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33666     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33667     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33668     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33669     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33670     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33671     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33672     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33673     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33674     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33675     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33676     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33677     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33678     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33679     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  33680     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33681     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33682     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  33683     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  33684     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33685     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  33686     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33687     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33688     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33689     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33690     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  33691     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33692     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33693     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33694     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33695     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33696     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33697     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33698     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33699     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33700     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33701     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33702     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33703     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33704     UNICODE_OTHER_LETTER
  33705   },
  33706   { /* page 19, index 18 */
  33707     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33708     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33709     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33710     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33711     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33712     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  33713     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33714     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33715     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33716     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33717     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33718     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33719     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33720     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33721     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33722     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33723     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33724     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33725     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33726     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33727     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33728     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33729     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33730     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33731     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33732     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33733     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33734     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33735     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33736     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33737     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33738     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33739     UNICODE_NON_SPACING_MARK, UNICODE_OTHER_PUNCTUATION,
  33740     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  33741     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  33742     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  33743     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  33744     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  33745     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  33746     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  33747     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  33748     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  33749     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  33750     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_UNASSIGNED,
  33751     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  33752     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33753     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33754     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33755     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33756     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33757     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  33758     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  33759     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  33760     UNICODE_OTHER_SYMBOL, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33761     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33762     UNICODE_UNASSIGNED, UNICODE_UPPERCASE_LETTER,
  33763     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  33764     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  33765     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  33766     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  33767     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  33768     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  33769     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  33770     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  33771     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  33772     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  33773     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  33774     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  33775     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  33776     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  33777     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  33778     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  33779     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  33780     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  33781     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  33782     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  33783     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  33784     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  33785     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  33786     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  33787     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  33788     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  33789     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  33790     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  33791     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  33792     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  33793     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  33794     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  33795     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  33796     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  33797     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  33798     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  33799     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  33800     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  33801     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  33802     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  33803     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  33804     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  33805     UNICODE_UPPERCASE_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33806     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  33807     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  33808     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  33809     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED
  33810   },
  33811   { /* page 20, index 19 */
  33812     UNICODE_DASH_PUNCTUATION, UNICODE_OTHER_LETTER,
  33813     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33814     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33815     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33816     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33817     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33818     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33819     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33820     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33821     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33822     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33823     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33824     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33825     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33826     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33827     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33828     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33829     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33830     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33831     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33832     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33833     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33834     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33835     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33836     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33837     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33838     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33839     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33840     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33841     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33842     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33843     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33844     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33845     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33846     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33847     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33848     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33849     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33850     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33851     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33852     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33853     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33854     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33855     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33856     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33857     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33858     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33859     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33860     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33861     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33862     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33863     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33864     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33865     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33866     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33867     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33868     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33869     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33870     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33871     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33872     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33873     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33874     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33875     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33876     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33877     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33878     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33879     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33880     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33881     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33882     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33883     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33884     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33885     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33886     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33887     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33888     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33889     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33890     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33891     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33892     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33893     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33894     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33895     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33896     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33897     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER
  33898   },
  33899   { /* page 22, index 20 */
  33900     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33901     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33902     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33903     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33904     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33905     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33906     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33907     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33908     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33909     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33910     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33911     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33912     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33913     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33914     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33915     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33916     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33917     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33918     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33919     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33920     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33921     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33922     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33923     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33924     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33925     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33926     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33927     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33928     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33929     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33930     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33931     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33932     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33933     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33934     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33935     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33936     UNICODE_OTHER_LETTER, UNICODE_OTHER_PUNCTUATION,
  33937     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_LETTER,
  33938     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33939     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33940     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33941     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33942     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33943     UNICODE_OTHER_LETTER, UNICODE_SPACE_SEPARATOR,
  33944     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33945     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33946     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33947     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33948     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33949     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33950     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33951     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33952     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33953     UNICODE_OPEN_PUNCTUATION, UNICODE_CLOSE_PUNCTUATION,
  33954     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33955     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33956     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33957     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33958     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33959     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33960     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33961     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33962     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33963     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33964     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33965     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33966     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33967     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33968     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33969     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33970     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33971     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33972     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33973     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33974     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33975     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33976     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33977     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33978     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33979     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33980     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  33981     UNICODE_OTHER_PUNCTUATION, UNICODE_LETTER_NUMBER,
  33982     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER, UNICODE_OTHER_LETTER,
  33983     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33984     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33985     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33986     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33987     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED
  33988   },
  33989   { /* page 23, index 21 */
  33990     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33991     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33992     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33993     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33994     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  33995     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33996     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33997     UNICODE_NON_SPACING_MARK, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33998     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33999     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34000     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34001     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34002     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34003     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34004     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34005     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34006     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34007     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34008     UNICODE_NON_SPACING_MARK, UNICODE_OTHER_PUNCTUATION,
  34009     UNICODE_OTHER_PUNCTUATION, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34010     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34011     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34012     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34013     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34014     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34015     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34016     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34017     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34018     UNICODE_OTHER_LETTER, UNICODE_NON_SPACING_MARK,
  34019     UNICODE_NON_SPACING_MARK, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34020     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34021     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34022     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34023     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34024     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34025     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34026     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34027     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  34028     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34029     UNICODE_UNASSIGNED, UNICODE_NON_SPACING_MARK,
  34030     UNICODE_NON_SPACING_MARK, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34031     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34032     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34033     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34034     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34035     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34036     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34037     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34038     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34039     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34040     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34041     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34042     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34043     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34044     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34045     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34046     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34047     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34048     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34049     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34050     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34051     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34052     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34053     UNICODE_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34054     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34055     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34056     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34057     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  34058     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  34059     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  34060     UNICODE_NON_SPACING_MARK, UNICODE_SPACING_MARK,
  34061     UNICODE_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34062     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34063     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34064     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34065     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34066     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34067     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  34068     UNICODE_OTHER_PUNCTUATION, UNICODE_MODIFIER_LETTER,
  34069     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  34070     UNICODE_OTHER_PUNCTUATION, UNICODE_CURRENCY_SYMBOL,
  34071     UNICODE_OTHER_LETTER, UNICODE_NON_SPACING_MARK, UNICODE_UNASSIGNED,
  34072     UNICODE_UNASSIGNED, UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  34073     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  34074     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  34075     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  34076     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER, UNICODE_UNASSIGNED,
  34077     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34078     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_NUMBER,
  34079     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  34080     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  34081     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  34082     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34083     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED
  34084   },
  34085   { /* page 24, index 22 */
  34086     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  34087     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  34088     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  34089     UNICODE_DASH_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  34090     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  34091     UNICODE_OTHER_PUNCTUATION, UNICODE_NON_SPACING_MARK,
  34092     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK, UNICODE_FORMAT,
  34093     UNICODE_UNASSIGNED, UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  34094     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  34095     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  34096     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  34097     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER, UNICODE_UNASSIGNED,
  34098     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34099     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  34100     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34101     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34102     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34103     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34104     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34105     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34106     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34107     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34108     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34109     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34110     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34111     UNICODE_OTHER_LETTER, UNICODE_MODIFIER_LETTER,
  34112     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34113     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34114     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34115     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34116     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34117     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34118     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34119     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34120     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34121     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34122     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34123     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34124     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34125     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34126     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34127     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34128     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34129     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34130     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34131     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34132     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34133     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34134     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34135     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34136     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34137     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34138     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34139     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34140     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34141     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34142     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34143     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34144     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34145     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34146     UNICODE_OTHER_LETTER, UNICODE_NON_SPACING_MARK,
  34147     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34148     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34149     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34150     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34151     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34152     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34153     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34154     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34155     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34156     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34157     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34158     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34159     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34160     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34161     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34162     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34163     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34164     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34165     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34166     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34167     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34168     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34169     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34170     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34171     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34172     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34173     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34174     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34175     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED
  34176   },
  34177   { /* page 25, index 23 */
  34178     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34179     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34180     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34181     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34182     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34183     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34184     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34185     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34186     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34187     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34188     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_NON_SPACING_MARK,
  34189     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34190     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  34191     UNICODE_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34192     UNICODE_NON_SPACING_MARK, UNICODE_SPACING_MARK,
  34193     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_UNASSIGNED,
  34194     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34195     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  34196     UNICODE_NON_SPACING_MARK, UNICODE_SPACING_MARK,
  34197     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  34198     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  34199     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34200     UNICODE_NON_SPACING_MARK, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34201     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_SYMBOL,
  34202     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34203     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  34204     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  34205     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  34206     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  34207     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  34208     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  34209     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34210     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34211     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34212     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34213     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34214     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34215     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34216     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34217     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34218     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34219     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  34220     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34221     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34222     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34223     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34224     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34225     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34226     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34227     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34228     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34229     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34230     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34231     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34232     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34233     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34234     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34235     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34236     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34237     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34238     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34239     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  34240     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34241     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34242     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34243     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34244     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34245     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34246     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34247     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34248     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34249     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  34250     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34251     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_DECIMAL_NUMBER,
  34252     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  34253     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  34254     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  34255     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  34256     UNICODE_DECIMAL_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_UNASSIGNED,
  34257     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_SYMBOL,
  34258     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  34259     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  34260     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  34261     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  34262     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  34263     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  34264     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  34265     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  34266     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  34267     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  34268     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL
  34269   },
  34270   { /* page 26, index 24 */
  34271     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34272     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34273     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34274     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34275     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34276     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34277     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34278     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34279     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34280     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  34281     UNICODE_NON_SPACING_MARK, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34282     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  34283     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34284     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34285     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34286     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34287     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34288     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34289     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34290     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34291     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34292     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34293     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34294     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34295     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34296     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34297     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34298     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34299     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34300     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_SPACING_MARK,
  34301     UNICODE_NON_SPACING_MARK, UNICODE_SPACING_MARK,
  34302     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34303     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34304     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34305     UNICODE_NON_SPACING_MARK, UNICODE_UNASSIGNED,
  34306     UNICODE_NON_SPACING_MARK, UNICODE_SPACING_MARK,
  34307     UNICODE_NON_SPACING_MARK, UNICODE_SPACING_MARK,
  34308     UNICODE_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34309     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34310     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34311     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34312     UNICODE_NON_SPACING_MARK, UNICODE_SPACING_MARK,
  34313     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  34314     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  34315     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34316     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34317     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34318     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34319     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34320     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_NON_SPACING_MARK,
  34321     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  34322     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  34323     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  34324     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  34325     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER, UNICODE_UNASSIGNED,
  34326     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34327     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_DECIMAL_NUMBER,
  34328     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  34329     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  34330     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  34331     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  34332     UNICODE_DECIMAL_NUMBER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34333     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34334     UNICODE_UNASSIGNED, UNICODE_OTHER_PUNCTUATION,
  34335     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  34336     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  34337     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  34338     UNICODE_MODIFIER_LETTER, UNICODE_OTHER_PUNCTUATION,
  34339     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  34340     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  34341     UNICODE_OTHER_PUNCTUATION, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34342     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34343     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34344     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34345     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34346     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34347     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34348     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34349     UNICODE_ENCLOSING_MARK, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34350     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34351     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34352     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34353     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34354     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34355     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34356     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34357     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34358     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34359     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34360     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34361     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34362     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34363     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34364     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34365     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34366     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34367     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34368     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34369     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34370     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED
  34371   },
  34372   { /* page 27, index 25 */
  34373     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34374     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34375     UNICODE_SPACING_MARK, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34376     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34377     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34378     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34379     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34380     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34381     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34382     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34383     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34384     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34385     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34386     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34387     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34388     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34389     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34390     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34391     UNICODE_NON_SPACING_MARK, UNICODE_SPACING_MARK,
  34392     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34393     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34394     UNICODE_NON_SPACING_MARK, UNICODE_SPACING_MARK,
  34395     UNICODE_NON_SPACING_MARK, UNICODE_SPACING_MARK,
  34396     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  34397     UNICODE_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34398     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_OTHER_LETTER,
  34399     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34400     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34401     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34402     UNICODE_UNASSIGNED, UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  34403     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  34404     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  34405     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  34406     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  34407     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  34408     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  34409     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  34410     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_SYMBOL,
  34411     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  34412     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  34413     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  34414     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34415     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34416     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34417     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34418     UNICODE_NON_SPACING_MARK, UNICODE_OTHER_SYMBOL,
  34419     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  34420     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  34421     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_UNASSIGNED,
  34422     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_NON_SPACING_MARK,
  34423     UNICODE_NON_SPACING_MARK, UNICODE_SPACING_MARK,
  34424     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34425     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34426     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34427     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34428     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34429     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34430     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34431     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34432     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34433     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34434     UNICODE_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34435     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34436     UNICODE_NON_SPACING_MARK, UNICODE_SPACING_MARK,
  34437     UNICODE_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34438     UNICODE_NON_SPACING_MARK, UNICODE_SPACING_MARK,
  34439     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34440     UNICODE_NON_SPACING_MARK, UNICODE_OTHER_LETTER,
  34441     UNICODE_OTHER_LETTER, UNICODE_DECIMAL_NUMBER,
  34442     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  34443     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  34444     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  34445     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  34446     UNICODE_DECIMAL_NUMBER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34447     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34448     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34449     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34450     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34451     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34452     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34453     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34454     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34455     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34456     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34457     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34458     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34459     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34460     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34461     UNICODE_NON_SPACING_MARK, UNICODE_SPACING_MARK,
  34462     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34463     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  34464     UNICODE_NON_SPACING_MARK, UNICODE_SPACING_MARK,
  34465     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34466     UNICODE_NON_SPACING_MARK, UNICODE_SPACING_MARK,
  34467     UNICODE_SPACING_MARK, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34468     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34469     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34470     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  34471     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION
  34472   },
  34473   { /* page 28, index 26 */
  34474     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34475     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34476     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34477     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34478     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34479     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34480     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34481     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34482     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34483     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34484     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34485     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34486     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  34487     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  34488     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  34489     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34490     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34491     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34492     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34493     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  34494     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34495     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34496     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  34497     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  34498     UNICODE_OTHER_PUNCTUATION, UNICODE_DECIMAL_NUMBER,
  34499     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  34500     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  34501     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  34502     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  34503     UNICODE_DECIMAL_NUMBER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34504     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34505     UNICODE_OTHER_LETTER, UNICODE_DECIMAL_NUMBER,
  34506     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  34507     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  34508     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  34509     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  34510     UNICODE_DECIMAL_NUMBER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34511     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34512     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34513     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34514     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34515     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34516     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34517     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34518     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34519     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34520     UNICODE_OTHER_LETTER, UNICODE_MODIFIER_LETTER,
  34521     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  34522     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  34523     UNICODE_MODIFIER_LETTER, UNICODE_OTHER_PUNCTUATION,
  34524     UNICODE_OTHER_PUNCTUATION, UNICODE_LOWERCASE_LETTER,
  34525     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34526     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34527     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34528     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34529     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34530     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34531     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34532     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34533     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34534     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34535     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34536     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34537     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34538     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34539     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34540     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34541     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34542     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34543     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34544     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34545     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34546     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34547     UNICODE_UNASSIGNED, UNICODE_OTHER_PUNCTUATION,
  34548     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  34549     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  34550     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  34551     UNICODE_OTHER_PUNCTUATION, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34552     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34553     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34554     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34555     UNICODE_NON_SPACING_MARK, UNICODE_OTHER_PUNCTUATION,
  34556     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34557     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34558     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34559     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34560     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34561     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34562     UNICODE_NON_SPACING_MARK, UNICODE_SPACING_MARK,
  34563     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34564     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34565     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34566     UNICODE_NON_SPACING_MARK, UNICODE_OTHER_LETTER,
  34567     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34568     UNICODE_NON_SPACING_MARK, UNICODE_OTHER_LETTER,
  34569     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34570     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  34571     UNICODE_NON_SPACING_MARK, UNICODE_OTHER_LETTER,
  34572     UNICODE_OTHER_LETTER, UNICODE_SPACING_MARK,
  34573     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34574     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34575     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED
  34576   },
  34577   { /* page 29, index 27 */
  34578     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34579     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34580     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34581     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34582     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34583     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34584     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34585     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34586     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34587     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34588     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34589     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34590     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34591     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34592     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34593     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34594     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34595     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34596     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34597     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34598     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34599     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34600     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  34601     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  34602     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  34603     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  34604     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  34605     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  34606     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  34607     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  34608     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  34609     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  34610     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  34611     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  34612     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  34613     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  34614     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  34615     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  34616     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  34617     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  34618     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  34619     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  34620     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  34621     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  34622     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  34623     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  34624     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  34625     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  34626     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  34627     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  34628     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  34629     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  34630     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  34631     UNICODE_MODIFIER_LETTER, UNICODE_LOWERCASE_LETTER,
  34632     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34633     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34634     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34635     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34636     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34637     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34638     UNICODE_MODIFIER_LETTER, UNICODE_LOWERCASE_LETTER,
  34639     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34640     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34641     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34642     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34643     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34644     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34645     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34646     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34647     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34648     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34649     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34650     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34651     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34652     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34653     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34654     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34655     UNICODE_LOWERCASE_LETTER, UNICODE_MODIFIER_LETTER,
  34656     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  34657     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  34658     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  34659     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  34660     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  34661     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  34662     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  34663     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  34664     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  34665     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  34666     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  34667     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  34668     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  34669     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  34670     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  34671     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  34672     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  34673     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  34674     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34675     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34676     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34677     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34678     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34679     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34680     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34681     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34682     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34683     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34684     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34685     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34686     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34687     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34688     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34689     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34690     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34691     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34692     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34693     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34694     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34695     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34696     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34697     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34698     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34699     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34700     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34701     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34702     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34703     UNICODE_UNASSIGNED, UNICODE_NON_SPACING_MARK,
  34704     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34705     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK
  34706   },
  34707   { /* page 30, index 28 */
  34708     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34709     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34710     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34711     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34712     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34713     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34714     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34715     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34716     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34717     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34718     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34719     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34720     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34721     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34722     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34723     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34724     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34725     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34726     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34727     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34728     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34729     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34730     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34731     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34732     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34733     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34734     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34735     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34736     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34737     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34738     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34739     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34740     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34741     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34742     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34743     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34744     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34745     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34746     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34747     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34748     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34749     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34750     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34751     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34752     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34753     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34754     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34755     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34756     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34757     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34758     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34759     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34760     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34761     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34762     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34763     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34764     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34765     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34766     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34767     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34768     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34769     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34770     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34771     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34772     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34773     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34774     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34775     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34776     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34777     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34778     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34779     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34780     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34781     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34782     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34783     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34784     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34785     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34786     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34787     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34788     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34789     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34790     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34791     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34792     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34793     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34794     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34795     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34796     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34797     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34798     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34799     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34800     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34801     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34802     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34803     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34804     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34805     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34806     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34807     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34808     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34809     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34810     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34811     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34812     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34813     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34814     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34815     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34816     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34817     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34818     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34819     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34820     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34821     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34822     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34823     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34824     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34825     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34826     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34827     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34828     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34829     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34830     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34831     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34832     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34833     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34834     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34835     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER
  34836   },
  34837   { /* page 31, index 29 */
  34838     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34839     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34840     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34841     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34842     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  34843     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  34844     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  34845     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  34846     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34847     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34848     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34849     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UPPERCASE_LETTER,
  34850     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  34851     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  34852     UNICODE_UPPERCASE_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34853     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34854     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34855     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34856     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34857     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  34858     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  34859     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  34860     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  34861     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34862     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34863     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34864     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34865     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  34866     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  34867     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  34868     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  34869     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34870     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34871     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34872     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UPPERCASE_LETTER,
  34873     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  34874     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  34875     UNICODE_UPPERCASE_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34876     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34877     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34878     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34879     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34880     UNICODE_UNASSIGNED, UNICODE_UPPERCASE_LETTER, UNICODE_UNASSIGNED,
  34881     UNICODE_UPPERCASE_LETTER, UNICODE_UNASSIGNED,
  34882     UNICODE_UPPERCASE_LETTER, UNICODE_UNASSIGNED,
  34883     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34884     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34885     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34886     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34887     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  34888     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  34889     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  34890     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  34891     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34892     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34893     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34894     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34895     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34896     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34897     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34898     UNICODE_LOWERCASE_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34899     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34900     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34901     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34902     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34903     UNICODE_TITLECASE_LETTER, UNICODE_TITLECASE_LETTER,
  34904     UNICODE_TITLECASE_LETTER, UNICODE_TITLECASE_LETTER,
  34905     UNICODE_TITLECASE_LETTER, UNICODE_TITLECASE_LETTER,
  34906     UNICODE_TITLECASE_LETTER, UNICODE_TITLECASE_LETTER,
  34907     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34908     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34909     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34910     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34911     UNICODE_TITLECASE_LETTER, UNICODE_TITLECASE_LETTER,
  34912     UNICODE_TITLECASE_LETTER, UNICODE_TITLECASE_LETTER,
  34913     UNICODE_TITLECASE_LETTER, UNICODE_TITLECASE_LETTER,
  34914     UNICODE_TITLECASE_LETTER, UNICODE_TITLECASE_LETTER,
  34915     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34916     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34917     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34918     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34919     UNICODE_TITLECASE_LETTER, UNICODE_TITLECASE_LETTER,
  34920     UNICODE_TITLECASE_LETTER, UNICODE_TITLECASE_LETTER,
  34921     UNICODE_TITLECASE_LETTER, UNICODE_TITLECASE_LETTER,
  34922     UNICODE_TITLECASE_LETTER, UNICODE_TITLECASE_LETTER,
  34923     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34924     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34925     UNICODE_LOWERCASE_LETTER, UNICODE_UNASSIGNED,
  34926     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34927     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  34928     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  34929     UNICODE_TITLECASE_LETTER, UNICODE_MODIFIER_SYMBOL,
  34930     UNICODE_LOWERCASE_LETTER, UNICODE_MODIFIER_SYMBOL,
  34931     UNICODE_MODIFIER_SYMBOL, UNICODE_MODIFIER_SYMBOL,
  34932     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34933     UNICODE_LOWERCASE_LETTER, UNICODE_UNASSIGNED,
  34934     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34935     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  34936     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  34937     UNICODE_TITLECASE_LETTER, UNICODE_MODIFIER_SYMBOL,
  34938     UNICODE_MODIFIER_SYMBOL, UNICODE_MODIFIER_SYMBOL,
  34939     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34940     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34941     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_LOWERCASE_LETTER,
  34942     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  34943     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  34944     UNICODE_UPPERCASE_LETTER, UNICODE_UNASSIGNED,
  34945     UNICODE_MODIFIER_SYMBOL, UNICODE_MODIFIER_SYMBOL,
  34946     UNICODE_MODIFIER_SYMBOL, UNICODE_LOWERCASE_LETTER,
  34947     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34948     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34949     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34950     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  34951     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  34952     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  34953     UNICODE_MODIFIER_SYMBOL, UNICODE_MODIFIER_SYMBOL,
  34954     UNICODE_MODIFIER_SYMBOL, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34955     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34956     UNICODE_LOWERCASE_LETTER, UNICODE_UNASSIGNED,
  34957     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34958     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  34959     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  34960     UNICODE_TITLECASE_LETTER, UNICODE_MODIFIER_SYMBOL,
  34961     UNICODE_MODIFIER_SYMBOL, UNICODE_UNASSIGNED
  34962   },
  34963   { /* page 32, index 30 */
  34964     UNICODE_SPACE_SEPARATOR, UNICODE_SPACE_SEPARATOR,
  34965     UNICODE_SPACE_SEPARATOR, UNICODE_SPACE_SEPARATOR,
  34966     UNICODE_SPACE_SEPARATOR, UNICODE_SPACE_SEPARATOR,
  34967     UNICODE_SPACE_SEPARATOR, UNICODE_SPACE_SEPARATOR,
  34968     UNICODE_SPACE_SEPARATOR, UNICODE_SPACE_SEPARATOR,
  34969     UNICODE_SPACE_SEPARATOR, UNICODE_FORMAT, UNICODE_FORMAT,
  34970     UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT,
  34971     UNICODE_DASH_PUNCTUATION, UNICODE_DASH_PUNCTUATION,
  34972     UNICODE_DASH_PUNCTUATION, UNICODE_DASH_PUNCTUATION,
  34973     UNICODE_DASH_PUNCTUATION, UNICODE_DASH_PUNCTUATION,
  34974     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  34975     UNICODE_INITIAL_PUNCTUATION, UNICODE_FINAL_PUNCTUATION,
  34976     UNICODE_OPEN_PUNCTUATION, UNICODE_INITIAL_PUNCTUATION,
  34977     UNICODE_INITIAL_PUNCTUATION, UNICODE_FINAL_PUNCTUATION,
  34978     UNICODE_OPEN_PUNCTUATION, UNICODE_INITIAL_PUNCTUATION,
  34979     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  34980     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  34981     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  34982     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  34983     UNICODE_LINE_SEPARATOR, UNICODE_PARAGRAPH_SEPARATOR,
  34984     UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT,
  34985     UNICODE_FORMAT, UNICODE_SPACE_SEPARATOR, UNICODE_OTHER_PUNCTUATION,
  34986     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  34987     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  34988     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  34989     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  34990     UNICODE_INITIAL_PUNCTUATION, UNICODE_FINAL_PUNCTUATION,
  34991     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  34992     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  34993     UNICODE_CONNECT_PUNCTUATION, UNICODE_CONNECT_PUNCTUATION,
  34994     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  34995     UNICODE_OTHER_PUNCTUATION, UNICODE_MATH_SYMBOL,
  34996     UNICODE_OPEN_PUNCTUATION, UNICODE_CLOSE_PUNCTUATION,
  34997     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  34998     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  34999     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  35000     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  35001     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  35002     UNICODE_OTHER_PUNCTUATION, UNICODE_MATH_SYMBOL,
  35003     UNICODE_OTHER_PUNCTUATION, UNICODE_CONNECT_PUNCTUATION,
  35004     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  35005     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  35006     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  35007     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  35008     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  35009     UNICODE_SPACE_SEPARATOR, UNICODE_FORMAT, UNICODE_FORMAT,
  35010     UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT,
  35011     UNICODE_UNASSIGNED, UNICODE_FORMAT, UNICODE_FORMAT,
  35012     UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT,
  35013     UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT,
  35014     UNICODE_OTHER_NUMBER, UNICODE_MODIFIER_LETTER, UNICODE_UNASSIGNED,
  35015     UNICODE_UNASSIGNED, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  35016     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  35017     UNICODE_OTHER_NUMBER, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35018     UNICODE_MATH_SYMBOL, UNICODE_OPEN_PUNCTUATION,
  35019     UNICODE_CLOSE_PUNCTUATION, UNICODE_MODIFIER_LETTER,
  35020     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  35021     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  35022     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  35023     UNICODE_OTHER_NUMBER, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35024     UNICODE_MATH_SYMBOL, UNICODE_OPEN_PUNCTUATION,
  35025     UNICODE_CLOSE_PUNCTUATION, UNICODE_UNASSIGNED,
  35026     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  35027     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  35028     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  35029     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  35030     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  35031     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  35032     UNICODE_MODIFIER_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  35033     UNICODE_UNASSIGNED, UNICODE_CURRENCY_SYMBOL,
  35034     UNICODE_CURRENCY_SYMBOL, UNICODE_CURRENCY_SYMBOL,
  35035     UNICODE_CURRENCY_SYMBOL, UNICODE_CURRENCY_SYMBOL,
  35036     UNICODE_CURRENCY_SYMBOL, UNICODE_CURRENCY_SYMBOL,
  35037     UNICODE_CURRENCY_SYMBOL, UNICODE_CURRENCY_SYMBOL,
  35038     UNICODE_CURRENCY_SYMBOL, UNICODE_CURRENCY_SYMBOL,
  35039     UNICODE_CURRENCY_SYMBOL, UNICODE_CURRENCY_SYMBOL,
  35040     UNICODE_CURRENCY_SYMBOL, UNICODE_CURRENCY_SYMBOL,
  35041     UNICODE_CURRENCY_SYMBOL, UNICODE_CURRENCY_SYMBOL,
  35042     UNICODE_CURRENCY_SYMBOL, UNICODE_CURRENCY_SYMBOL,
  35043     UNICODE_CURRENCY_SYMBOL, UNICODE_CURRENCY_SYMBOL,
  35044     UNICODE_CURRENCY_SYMBOL, UNICODE_CURRENCY_SYMBOL,
  35045     UNICODE_CURRENCY_SYMBOL, UNICODE_CURRENCY_SYMBOL,
  35046     UNICODE_CURRENCY_SYMBOL, UNICODE_CURRENCY_SYMBOL,
  35047     UNICODE_CURRENCY_SYMBOL, UNICODE_CURRENCY_SYMBOL,
  35048     UNICODE_CURRENCY_SYMBOL, UNICODE_CURRENCY_SYMBOL,
  35049     UNICODE_CURRENCY_SYMBOL, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  35050     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  35051     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  35052     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  35053     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  35054     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_NON_SPACING_MARK,
  35055     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  35056     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  35057     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  35058     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  35059     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  35060     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  35061     UNICODE_ENCLOSING_MARK, UNICODE_ENCLOSING_MARK,
  35062     UNICODE_ENCLOSING_MARK, UNICODE_ENCLOSING_MARK,
  35063     UNICODE_NON_SPACING_MARK, UNICODE_ENCLOSING_MARK,
  35064     UNICODE_ENCLOSING_MARK, UNICODE_ENCLOSING_MARK,
  35065     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  35066     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  35067     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  35068     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  35069     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  35070     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  35071     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  35072     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  35073     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  35074     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  35075     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED
  35076   },
  35077   { /* page 33, index 31 */
  35078     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35079     UNICODE_UPPERCASE_LETTER, UNICODE_OTHER_SYMBOL,
  35080     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35081     UNICODE_UPPERCASE_LETTER, UNICODE_OTHER_SYMBOL,
  35082     UNICODE_OTHER_SYMBOL, UNICODE_LOWERCASE_LETTER,
  35083     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  35084     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35085     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  35086     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  35087     UNICODE_LOWERCASE_LETTER, UNICODE_OTHER_SYMBOL,
  35088     UNICODE_UPPERCASE_LETTER, UNICODE_OTHER_SYMBOL,
  35089     UNICODE_OTHER_SYMBOL, UNICODE_MATH_SYMBOL,
  35090     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  35091     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  35092     UNICODE_UPPERCASE_LETTER, UNICODE_OTHER_SYMBOL,
  35093     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35094     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35095     UNICODE_UPPERCASE_LETTER, UNICODE_OTHER_SYMBOL,
  35096     UNICODE_UPPERCASE_LETTER, UNICODE_OTHER_SYMBOL,
  35097     UNICODE_UPPERCASE_LETTER, UNICODE_OTHER_SYMBOL,
  35098     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  35099     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  35100     UNICODE_OTHER_SYMBOL, UNICODE_LOWERCASE_LETTER,
  35101     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  35102     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  35103     UNICODE_LOWERCASE_LETTER, UNICODE_OTHER_LETTER,
  35104     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  35105     UNICODE_LOWERCASE_LETTER, UNICODE_OTHER_SYMBOL,
  35106     UNICODE_OTHER_SYMBOL, UNICODE_LOWERCASE_LETTER,
  35107     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  35108     UNICODE_UPPERCASE_LETTER, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35109     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35110     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35111     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35112     UNICODE_LOWERCASE_LETTER, UNICODE_OTHER_SYMBOL,
  35113     UNICODE_MATH_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35114     UNICODE_LOWERCASE_LETTER, UNICODE_OTHER_SYMBOL,
  35115     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  35116     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  35117     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  35118     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  35119     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  35120     UNICODE_OTHER_NUMBER, UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  35121     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  35122     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  35123     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  35124     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  35125     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  35126     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  35127     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  35128     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  35129     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  35130     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  35131     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  35132     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  35133     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  35134     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  35135     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  35136     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  35137     UNICODE_LETTER_NUMBER, UNICODE_UPPERCASE_LETTER,
  35138     UNICODE_LOWERCASE_LETTER, UNICODE_LETTER_NUMBER,
  35139     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  35140     UNICODE_LETTER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_SYMBOL,
  35141     UNICODE_OTHER_SYMBOL, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  35142     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_MATH_SYMBOL,
  35143     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35144     UNICODE_MATH_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35145     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35146     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_OTHER_SYMBOL,
  35147     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35148     UNICODE_MATH_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35149     UNICODE_MATH_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35150     UNICODE_MATH_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35151     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35152     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_MATH_SYMBOL,
  35153     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35154     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35155     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35156     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35157     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35158     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35159     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35160     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35161     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35162     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35163     UNICODE_OTHER_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35164     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_MATH_SYMBOL,
  35165     UNICODE_OTHER_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_OTHER_SYMBOL,
  35166     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35167     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35168     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35169     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35170     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35171     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35172     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35173     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35174     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35175     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35176     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35177     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35178     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35179     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL
  35180   },
  35181   { /* page 35, index 32 */
  35182     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35183     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35184     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35185     UNICODE_OPEN_PUNCTUATION, UNICODE_CLOSE_PUNCTUATION,
  35186     UNICODE_OPEN_PUNCTUATION, UNICODE_CLOSE_PUNCTUATION,
  35187     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35188     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35189     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35190     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35191     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35192     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35193     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_MATH_SYMBOL,
  35194     UNICODE_MATH_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35195     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35196     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35197     UNICODE_OPEN_PUNCTUATION, UNICODE_CLOSE_PUNCTUATION,
  35198     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35199     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35200     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35201     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35202     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35203     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35204     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35205     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35206     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35207     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35208     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35209     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35210     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35211     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35212     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35213     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35214     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35215     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35216     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35217     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35218     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35219     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35220     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35221     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35222     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35223     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35224     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35225     UNICODE_MATH_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35226     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35227     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35228     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35229     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35230     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35231     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35232     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35233     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35234     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35235     UNICODE_OTHER_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35236     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35237     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35238     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35239     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35240     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35241     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35242     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35243     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_OTHER_SYMBOL,
  35244     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35245     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35246     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35247     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35248     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35249     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35250     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35251     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35252     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35253     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35254     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35255     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35256     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35257     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35258     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35259     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35260     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35261     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35262     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35263     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35264     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35265     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35266     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35267     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35268     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL
  35269   },
  35270   { /* page 36, index 33 */
  35271     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35272     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35273     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35274     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35275     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35276     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35277     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35278     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35279     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35280     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35281     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35282     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35283     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35284     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  35285     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  35286     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  35287     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  35288     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  35289     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  35290     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  35291     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  35292     UNICODE_UNASSIGNED, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35293     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35294     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35295     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35296     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  35297     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  35298     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  35299     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  35300     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  35301     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  35302     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  35303     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  35304     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  35305     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  35306     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  35307     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  35308     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  35309     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  35310     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  35311     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  35312     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  35313     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  35314     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  35315     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  35316     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  35317     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  35318     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  35319     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  35320     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  35321     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  35322     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  35323     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35324     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35325     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35326     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35327     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35328     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35329     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35330     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35331     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35332     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35333     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35334     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35335     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35336     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35337     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35338     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35339     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35340     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35341     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35342     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35343     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35344     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35345     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35346     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35347     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35348     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35349     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  35350     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  35351     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  35352     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  35353     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  35354     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  35355     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  35356     UNICODE_OTHER_NUMBER
  35357   },
  35358   { /* page 37, index 34 */
  35359     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35360     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35361     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35362     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35363     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35364     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35365     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35366     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35367     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35368     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35369     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35370     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35371     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35372     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35373     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35374     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35375     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35376     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35377     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35378     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35379     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35380     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35381     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35382     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35383     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35384     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35385     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35386     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35387     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35388     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35389     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35390     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35391     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35392     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35393     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35394     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35395     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35396     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35397     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35398     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35399     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35400     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35401     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35402     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35403     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35404     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35405     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35406     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35407     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35408     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35409     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35410     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35411     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35412     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35413     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35414     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35415     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35416     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35417     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35418     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35419     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35420     UNICODE_MATH_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35421     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35422     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35423     UNICODE_OTHER_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_OTHER_SYMBOL,
  35424     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35425     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35426     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35427     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35428     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35429     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35430     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35431     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35432     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35433     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35434     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35435     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35436     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35437     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35438     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35439     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35440     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35441     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_MATH_SYMBOL,
  35442     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35443     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35444     UNICODE_MATH_SYMBOL
  35445   },
  35446   { /* page 38, index 35 */
  35447     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35448     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35449     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35450     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35451     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35452     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35453     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35454     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35455     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35456     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35457     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35458     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35459     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35460     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35461     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35462     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35463     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35464     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35465     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35466     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35467     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35468     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35469     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35470     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35471     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35472     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35473     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35474     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35475     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35476     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35477     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35478     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35479     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35480     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35481     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35482     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35483     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35484     UNICODE_MATH_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35485     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35486     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35487     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35488     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35489     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35490     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35491     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35492     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35493     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35494     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35495     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35496     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35497     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35498     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35499     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35500     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35501     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35502     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35503     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35504     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35505     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35506     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35507     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35508     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35509     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35510     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35511     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35512     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35513     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35514     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35515     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35516     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35517     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35518     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35519     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35520     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35521     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35522     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35523     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35524     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35525     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35526     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35527     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35528     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35529     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35530     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35531     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35532     UNICODE_OTHER_SYMBOL
  35533   },
  35534   { /* page 39, index 36 */
  35535     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35536     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35537     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35538     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35539     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35540     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35541     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35542     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35543     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35544     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35545     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35546     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35547     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35548     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35549     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35550     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35551     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35552     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35553     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35554     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35555     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35556     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35557     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35558     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35559     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35560     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35561     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35562     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35563     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35564     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35565     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35566     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35567     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35568     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35569     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35570     UNICODE_OPEN_PUNCTUATION, UNICODE_CLOSE_PUNCTUATION,
  35571     UNICODE_OPEN_PUNCTUATION, UNICODE_CLOSE_PUNCTUATION,
  35572     UNICODE_OPEN_PUNCTUATION, UNICODE_CLOSE_PUNCTUATION,
  35573     UNICODE_OPEN_PUNCTUATION, UNICODE_CLOSE_PUNCTUATION,
  35574     UNICODE_OPEN_PUNCTUATION, UNICODE_CLOSE_PUNCTUATION,
  35575     UNICODE_OPEN_PUNCTUATION, UNICODE_CLOSE_PUNCTUATION,
  35576     UNICODE_OPEN_PUNCTUATION, UNICODE_CLOSE_PUNCTUATION,
  35577     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  35578     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  35579     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  35580     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  35581     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  35582     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  35583     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  35584     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  35585     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  35586     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  35587     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35588     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35589     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35590     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35591     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35592     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35593     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35594     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35595     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35596     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35597     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35598     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35599     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35600     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35601     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_MATH_SYMBOL,
  35602     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35603     UNICODE_MATH_SYMBOL, UNICODE_OPEN_PUNCTUATION,
  35604     UNICODE_CLOSE_PUNCTUATION, UNICODE_MATH_SYMBOL,
  35605     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35606     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35607     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35608     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35609     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35610     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35611     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35612     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35613     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35614     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35615     UNICODE_OPEN_PUNCTUATION, UNICODE_CLOSE_PUNCTUATION,
  35616     UNICODE_OPEN_PUNCTUATION, UNICODE_CLOSE_PUNCTUATION,
  35617     UNICODE_OPEN_PUNCTUATION, UNICODE_CLOSE_PUNCTUATION,
  35618     UNICODE_OPEN_PUNCTUATION, UNICODE_CLOSE_PUNCTUATION,
  35619     UNICODE_OPEN_PUNCTUATION, UNICODE_CLOSE_PUNCTUATION,
  35620     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35621     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35622     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35623     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35624     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35625     UNICODE_MATH_SYMBOL
  35626   },
  35627   { /* page 41, index 37 */
  35628     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35629     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35630     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35631     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35632     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35633     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35634     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35635     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35636     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35637     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35638     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35639     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35640     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35641     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35642     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35643     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35644     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35645     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35646     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35647     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35648     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35649     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35650     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35651     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35652     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35653     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35654     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35655     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35656     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35657     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35658     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35659     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35660     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35661     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35662     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35663     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35664     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35665     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35666     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35667     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35668     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35669     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35670     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35671     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_OPEN_PUNCTUATION,
  35672     UNICODE_CLOSE_PUNCTUATION, UNICODE_OPEN_PUNCTUATION,
  35673     UNICODE_CLOSE_PUNCTUATION, UNICODE_OPEN_PUNCTUATION,
  35674     UNICODE_CLOSE_PUNCTUATION, UNICODE_OPEN_PUNCTUATION,
  35675     UNICODE_CLOSE_PUNCTUATION, UNICODE_OPEN_PUNCTUATION,
  35676     UNICODE_CLOSE_PUNCTUATION, UNICODE_OPEN_PUNCTUATION,
  35677     UNICODE_CLOSE_PUNCTUATION, UNICODE_OPEN_PUNCTUATION,
  35678     UNICODE_CLOSE_PUNCTUATION, UNICODE_OPEN_PUNCTUATION,
  35679     UNICODE_CLOSE_PUNCTUATION, UNICODE_OPEN_PUNCTUATION,
  35680     UNICODE_CLOSE_PUNCTUATION, UNICODE_OPEN_PUNCTUATION,
  35681     UNICODE_CLOSE_PUNCTUATION, UNICODE_OPEN_PUNCTUATION,
  35682     UNICODE_CLOSE_PUNCTUATION, UNICODE_MATH_SYMBOL,
  35683     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35684     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35685     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35686     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35687     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35688     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35689     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35690     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35691     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35692     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35693     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35694     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35695     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35696     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35697     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35698     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35699     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35700     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35701     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35702     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35703     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_OPEN_PUNCTUATION,
  35704     UNICODE_CLOSE_PUNCTUATION, UNICODE_OPEN_PUNCTUATION,
  35705     UNICODE_CLOSE_PUNCTUATION, UNICODE_MATH_SYMBOL,
  35706     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35707     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35708     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35709     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35710     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35711     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35712     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35713     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35714     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35715     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35716     UNICODE_MATH_SYMBOL, UNICODE_OPEN_PUNCTUATION,
  35717     UNICODE_CLOSE_PUNCTUATION, UNICODE_MATH_SYMBOL,
  35718     UNICODE_MATH_SYMBOL
  35719   },
  35720   { /* page 43, index 38 */
  35721     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35722     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35723     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35724     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35725     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35726     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35727     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35728     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35729     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35730     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35731     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35732     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35733     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35734     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35735     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35736     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35737     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35738     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35739     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35740     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35741     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35742     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35743     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35744     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_MATH_SYMBOL,
  35745     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35746     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_OTHER_SYMBOL,
  35747     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35748     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35749     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35750     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35751     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35752     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35753     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35754     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35755     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35756     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35757     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35758     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35759     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_UNASSIGNED,
  35760     UNICODE_UNASSIGNED, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35761     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35762     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35763     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35764     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35765     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35766     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35767     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35768     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35769     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35770     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35771     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_SYMBOL,
  35772     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35773     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35774     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35775     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35776     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35777     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35778     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35779     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35780     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35781     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35782     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35783     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  35784     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35785     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35786     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35787     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35788     UNICODE_UNASSIGNED, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35789     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35790     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35791     UNICODE_OTHER_SYMBOL, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  35792     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  35793     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  35794     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  35795     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  35796     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  35797     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  35798     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  35799     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_SYMBOL,
  35800     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35801     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  35802     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  35803     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  35804     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  35805     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  35806     UNICODE_UNASSIGNED
  35807   },
  35808   { /* page 44, index 39 */
  35809     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  35810     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  35811     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  35812     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  35813     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  35814     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  35815     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  35816     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  35817     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  35818     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  35819     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  35820     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  35821     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  35822     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  35823     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  35824     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  35825     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  35826     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  35827     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  35828     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  35829     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  35830     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  35831     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  35832     UNICODE_UPPERCASE_LETTER, UNICODE_UNASSIGNED,
  35833     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35834     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35835     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35836     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35837     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35838     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35839     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35840     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35841     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35842     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35843     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35844     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35845     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35846     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35847     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35848     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35849     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35850     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35851     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35852     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35853     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35854     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35855     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35856     UNICODE_LOWERCASE_LETTER, UNICODE_UNASSIGNED,
  35857     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35858     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  35859     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35860     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  35861     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  35862     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  35863     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  35864     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  35865     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35866     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35867     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  35868     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35869     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35870     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35871     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  35872     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  35873     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35874     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35875     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35876     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35877     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35878     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35879     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35880     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35881     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35882     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35883     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35884     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35885     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35886     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35887     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35888     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35889     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35890     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35891     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35892     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35893     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35894     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35895     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35896     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35897     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35898     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35899     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35900     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35901     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35902     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35903     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35904     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35905     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35906     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35907     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35908     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35909     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35910     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35911     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35912     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35913     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35914     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35915     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35916     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35917     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35918     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35919     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35920     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35921     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35922     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35923     UNICODE_LOWERCASE_LETTER, UNICODE_OTHER_SYMBOL,
  35924     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35925     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35926     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35927     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35928     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  35929     UNICODE_NON_SPACING_MARK, UNICODE_UPPERCASE_LETTER,
  35930     UNICODE_LOWERCASE_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  35931     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  35932     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  35933     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  35934     UNICODE_OTHER_NUMBER, UNICODE_OTHER_PUNCTUATION,
  35935     UNICODE_OTHER_PUNCTUATION
  35936   },
  35937   { /* page 45, index 40 */
  35938     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35939     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35940     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35941     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35942     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35943     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35944     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35945     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35946     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35947     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35948     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35949     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35950     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35951     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35952     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35953     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35954     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35955     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35956     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35957     UNICODE_UNASSIGNED, UNICODE_LOWERCASE_LETTER, UNICODE_UNASSIGNED,
  35958     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  35959     UNICODE_UNASSIGNED, UNICODE_LOWERCASE_LETTER, UNICODE_UNASSIGNED,
  35960     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  35961     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  35962     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  35963     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  35964     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  35965     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  35966     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  35967     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  35968     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  35969     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  35970     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  35971     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  35972     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  35973     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  35974     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  35975     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  35976     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  35977     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  35978     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  35979     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  35980     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  35981     UNICODE_UNASSIGNED, UNICODE_MODIFIER_LETTER,
  35982     UNICODE_OTHER_PUNCTUATION, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  35983     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  35984     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  35985     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  35986     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  35987     UNICODE_NON_SPACING_MARK, UNICODE_OTHER_LETTER,
  35988     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  35989     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  35990     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  35991     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  35992     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  35993     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  35994     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  35995     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  35996     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  35997     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  35998     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  35999     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36000     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  36001     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36002     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36003     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  36004     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36005     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36006     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36007     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36008     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  36009     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36010     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36011     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  36012     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36013     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36014     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36015     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36016     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  36017     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36018     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36019     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_NON_SPACING_MARK,
  36020     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  36021     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  36022     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  36023     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  36024     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  36025     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  36026     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  36027     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  36028     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  36029     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  36030     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  36031     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  36032     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  36033     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  36034     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  36035     UNICODE_NON_SPACING_MARK
  36036   },
  36037   { /* page 46, index 41 */
  36038     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  36039     UNICODE_INITIAL_PUNCTUATION, UNICODE_FINAL_PUNCTUATION,
  36040     UNICODE_INITIAL_PUNCTUATION, UNICODE_FINAL_PUNCTUATION,
  36041     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  36042     UNICODE_OTHER_PUNCTUATION, UNICODE_INITIAL_PUNCTUATION,
  36043     UNICODE_FINAL_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  36044     UNICODE_INITIAL_PUNCTUATION, UNICODE_FINAL_PUNCTUATION,
  36045     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  36046     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  36047     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  36048     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  36049     UNICODE_OTHER_PUNCTUATION, UNICODE_DASH_PUNCTUATION,
  36050     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  36051     UNICODE_DASH_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  36052     UNICODE_INITIAL_PUNCTUATION, UNICODE_FINAL_PUNCTUATION,
  36053     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  36054     UNICODE_INITIAL_PUNCTUATION, UNICODE_FINAL_PUNCTUATION,
  36055     UNICODE_OPEN_PUNCTUATION, UNICODE_CLOSE_PUNCTUATION,
  36056     UNICODE_OPEN_PUNCTUATION, UNICODE_CLOSE_PUNCTUATION,
  36057     UNICODE_OPEN_PUNCTUATION, UNICODE_CLOSE_PUNCTUATION,
  36058     UNICODE_OPEN_PUNCTUATION, UNICODE_CLOSE_PUNCTUATION,
  36059     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  36060     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  36061     UNICODE_OTHER_PUNCTUATION, UNICODE_MODIFIER_LETTER,
  36062     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  36063     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  36064     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  36065     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  36066     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  36067     UNICODE_DASH_PUNCTUATION, UNICODE_DASH_PUNCTUATION,
  36068     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  36069     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  36070     UNICODE_DASH_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  36071     UNICODE_OPEN_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  36072     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  36073     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  36074     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  36075     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  36076     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  36077     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  36078     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  36079     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  36080     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  36081     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  36082     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  36083     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  36084     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  36085     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  36086     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  36087     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  36088     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  36089     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  36090     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  36091     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  36092     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  36093     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36094     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36095     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36096     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36097     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36098     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36099     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36100     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36101     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_UNASSIGNED,
  36102     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36103     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36104     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36105     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36106     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36107     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36108     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36109     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36110     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36111     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36112     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36113     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36114     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36115     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36116     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36117     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36118     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36119     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36120     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36121     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36122     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36123     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36124     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36125     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36126     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36127     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36128     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36129     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36130     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36131     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_UNASSIGNED,
  36132     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  36133     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  36134     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  36135     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED
  36136   },
  36137   { /* page 47, index 42 */
  36138     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36139     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36140     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36141     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36142     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36143     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36144     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36145     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36146     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36147     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36148     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36149     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36150     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36151     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36152     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36153     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36154     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36155     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36156     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36157     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36158     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36159     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36160     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36161     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36162     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36163     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36164     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36165     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36166     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36167     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36168     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36169     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36170     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36171     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36172     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36173     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36174     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36175     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36176     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36177     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36178     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36179     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36180     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36181     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36182     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36183     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36184     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36185     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36186     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36187     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36188     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36189     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36190     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36191     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36192     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36193     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36194     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36195     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36196     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36197     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36198     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36199     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36200     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36201     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36202     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36203     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36204     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36205     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36206     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36207     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36208     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36209     UNICODE_OTHER_SYMBOL, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  36210     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  36211     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  36212     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  36213     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  36214     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  36215     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  36216     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  36217     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  36218     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36219     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36220     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36221     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36222     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  36223     UNICODE_UNASSIGNED
  36224   },
  36225   { /* page 48, index 43 */
  36226     UNICODE_SPACE_SEPARATOR, UNICODE_OTHER_PUNCTUATION,
  36227     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  36228     UNICODE_OTHER_SYMBOL, UNICODE_MODIFIER_LETTER,
  36229     UNICODE_OTHER_LETTER, UNICODE_LETTER_NUMBER,
  36230     UNICODE_OPEN_PUNCTUATION, UNICODE_CLOSE_PUNCTUATION,
  36231     UNICODE_OPEN_PUNCTUATION, UNICODE_CLOSE_PUNCTUATION,
  36232     UNICODE_OPEN_PUNCTUATION, UNICODE_CLOSE_PUNCTUATION,
  36233     UNICODE_OPEN_PUNCTUATION, UNICODE_CLOSE_PUNCTUATION,
  36234     UNICODE_OPEN_PUNCTUATION, UNICODE_CLOSE_PUNCTUATION,
  36235     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36236     UNICODE_OPEN_PUNCTUATION, UNICODE_CLOSE_PUNCTUATION,
  36237     UNICODE_OPEN_PUNCTUATION, UNICODE_CLOSE_PUNCTUATION,
  36238     UNICODE_OPEN_PUNCTUATION, UNICODE_CLOSE_PUNCTUATION,
  36239     UNICODE_OPEN_PUNCTUATION, UNICODE_CLOSE_PUNCTUATION,
  36240     UNICODE_DASH_PUNCTUATION, UNICODE_OPEN_PUNCTUATION,
  36241     UNICODE_CLOSE_PUNCTUATION, UNICODE_CLOSE_PUNCTUATION,
  36242     UNICODE_OTHER_SYMBOL, UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  36243     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  36244     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  36245     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  36246     UNICODE_LETTER_NUMBER, UNICODE_NON_SPACING_MARK,
  36247     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  36248     UNICODE_NON_SPACING_MARK, UNICODE_SPACING_MARK,
  36249     UNICODE_SPACING_MARK, UNICODE_DASH_PUNCTUATION,
  36250     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  36251     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  36252     UNICODE_MODIFIER_LETTER, UNICODE_OTHER_SYMBOL,
  36253     UNICODE_OTHER_SYMBOL, UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  36254     UNICODE_LETTER_NUMBER, UNICODE_MODIFIER_LETTER,
  36255     UNICODE_OTHER_LETTER, UNICODE_OTHER_PUNCTUATION,
  36256     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_UNASSIGNED,
  36257     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36258     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36259     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36260     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36261     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36262     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36263     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36264     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36265     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36266     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36267     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36268     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36269     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36270     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36271     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36272     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36273     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36274     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36275     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36276     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36277     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36278     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36279     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36280     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36281     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36282     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36283     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36284     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36285     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  36286     UNICODE_UNASSIGNED, UNICODE_NON_SPACING_MARK,
  36287     UNICODE_NON_SPACING_MARK, UNICODE_MODIFIER_SYMBOL,
  36288     UNICODE_MODIFIER_SYMBOL, UNICODE_MODIFIER_LETTER,
  36289     UNICODE_MODIFIER_LETTER, UNICODE_OTHER_LETTER,
  36290     UNICODE_DASH_PUNCTUATION, UNICODE_OTHER_LETTER,
  36291     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36292     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36293     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36294     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36295     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36296     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36297     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36298     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36299     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36300     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36301     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36302     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36303     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36304     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36305     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36306     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36307     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36308     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36309     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36310     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36311     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36312     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36313     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36314     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36315     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36316     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36317     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36318     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36319     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36320     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36321     UNICODE_OTHER_PUNCTUATION, UNICODE_MODIFIER_LETTER,
  36322     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  36323     UNICODE_OTHER_LETTER
  36324   },
  36325   { /* page 49, index 44 */
  36326     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  36327     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  36328     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36329     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36330     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36331     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36332     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36333     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36334     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36335     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36336     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36337     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36338     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36339     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36340     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36341     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  36342     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36343     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36344     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36345     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36346     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36347     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36348     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36349     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36350     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36351     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36352     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36353     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36354     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36355     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36356     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36357     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36358     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36359     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36360     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36361     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36362     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36363     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36364     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36365     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36366     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36367     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36368     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36369     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36370     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36371     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36372     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36373     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  36374     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_NUMBER,
  36375     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  36376     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36377     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36378     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36379     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36380     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36381     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36382     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36383     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36384     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36385     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36386     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36387     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36388     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  36389     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  36390     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36391     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36392     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36393     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36394     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36395     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36396     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36397     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36398     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36399     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36400     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36401     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36402     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  36403     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  36404     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  36405     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  36406     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36407     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36408     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36409     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36410     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36411     UNICODE_OTHER_LETTER
  36412   },
  36413   { /* page 50, index 45 */
  36414     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36415     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36416     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36417     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36418     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36419     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36420     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36421     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36422     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36423     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36424     UNICODE_OTHER_SYMBOL, UNICODE_UNASSIGNED, UNICODE_OTHER_NUMBER,
  36425     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  36426     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  36427     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  36428     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36429     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36430     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36431     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36432     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36433     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36434     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36435     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36436     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36437     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36438     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  36439     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  36440     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_SYMBOL,
  36441     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  36442     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  36443     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  36444     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  36445     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  36446     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36447     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36448     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36449     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36450     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36451     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36452     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36453     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36454     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36455     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36456     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_NUMBER,
  36457     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  36458     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  36459     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  36460     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36461     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36462     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36463     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36464     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36465     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36466     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36467     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36468     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36469     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36470     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36471     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36472     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36473     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  36474     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  36475     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  36476     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  36477     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  36478     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36479     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36480     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36481     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36482     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36483     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36484     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36485     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36486     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36487     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36488     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36489     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36490     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36491     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36492     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36493     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36494     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36495     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36496     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36497     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36498     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36499     UNICODE_UNASSIGNED
  36500   },
  36501   { /* page 77, index 46 */
  36502     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36503     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36504     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36505     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36506     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36507     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36508     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36509     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36510     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36511     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36512     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36513     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36514     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36515     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36516     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36517     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36518     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36519     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36520     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36521     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36522     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36523     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36524     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36525     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36526     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36527     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36528     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36529     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36530     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36531     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36532     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36533     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36534     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36535     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36536     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36537     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36538     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36539     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36540     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36541     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36542     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36543     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36544     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36545     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36546     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36547     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36548     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36549     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36550     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36551     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36552     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36553     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36554     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36555     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36556     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36557     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36558     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36559     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36560     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36561     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36562     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  36563     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  36564     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  36565     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  36566     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36567     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36568     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36569     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36570     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36571     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36572     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36573     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36574     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36575     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36576     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36577     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36578     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36579     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36580     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36581     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36582     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36583     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36584     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36585     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36586     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36587     UNICODE_OTHER_SYMBOL
  36588   },
  36589   { /* page 159, index 47 */
  36590     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36591     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36592     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36593     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36594     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36595     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36596     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36597     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36598     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36599     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36600     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36601     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36602     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36603     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36604     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36605     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36606     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36607     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36608     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36609     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36610     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36611     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36612     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36613     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36614     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36615     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36616     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36617     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36618     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36619     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36620     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36621     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36622     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36623     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36624     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36625     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36626     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36627     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36628     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36629     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36630     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36631     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36632     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36633     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36634     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36635     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36636     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36637     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36638     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36639     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36640     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36641     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36642     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36643     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36644     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36645     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36646     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36647     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36648     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36649     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36650     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36651     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36652     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36653     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36654     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36655     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36656     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36657     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36658     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36659     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36660     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36661     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36662     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36663     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36664     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36665     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36666     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36667     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36668     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  36669     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  36670     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  36671     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  36672     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  36673     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  36674     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  36675     UNICODE_UNASSIGNED
  36676   },
  36677   { /* page 160, index 48 */
  36678     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36679     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36680     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36681     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36682     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36683     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36684     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36685     UNICODE_MODIFIER_LETTER, UNICODE_OTHER_LETTER,
  36686     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36687     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36688     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36689     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36690     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36691     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36692     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36693     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36694     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36695     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36696     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36697     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36698     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36699     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36700     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36701     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36702     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36703     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36704     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36705     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36706     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36707     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36708     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36709     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36710     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36711     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36712     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36713     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36714     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36715     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36716     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36717     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36718     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36719     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36720     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36721     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36722     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36723     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36724     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36725     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36726     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36727     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36728     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36729     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36730     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36731     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36732     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36733     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36734     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36735     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36736     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36737     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36738     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36739     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36740     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36741     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36742     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36743     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36744     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36745     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36746     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36747     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36748     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36749     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36750     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36751     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36752     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36753     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36754     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36755     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36756     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36757     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36758     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36759     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36760     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36761     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36762     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36763     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER
  36764   },
  36765   { /* page 164, index 49 */
  36766     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36767     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36768     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36769     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36770     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36771     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36772     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36773     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36774     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36775     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36776     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36777     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36778     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36779     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36780     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36781     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36782     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36783     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36784     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36785     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36786     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36787     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36788     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36789     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36790     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36791     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36792     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36793     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36794     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36795     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36796     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36797     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36798     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36799     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36800     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36801     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36802     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36803     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36804     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36805     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36806     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36807     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36808     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36809     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36810     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36811     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36812     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36813     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  36814     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36815     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36816     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36817     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36818     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36819     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36820     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36821     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36822     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36823     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36824     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36825     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36826     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36827     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36828     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36829     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36830     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36831     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36832     UNICODE_OTHER_SYMBOL, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  36833     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  36834     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  36835     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36836     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36837     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36838     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36839     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36840     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36841     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36842     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36843     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36844     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36845     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36846     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36847     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36848     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36849     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  36850     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  36851     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  36852     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION
  36853   },
  36854   { /* page 166, index 50 */
  36855     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36856     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36857     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36858     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36859     UNICODE_MODIFIER_LETTER, UNICODE_OTHER_PUNCTUATION,
  36860     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  36861     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36862     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36863     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36864     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36865     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36866     UNICODE_OTHER_LETTER, UNICODE_DECIMAL_NUMBER,
  36867     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  36868     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  36869     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  36870     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  36871     UNICODE_DECIMAL_NUMBER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36872     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  36873     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  36874     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  36875     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  36876     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  36877     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  36878     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UPPERCASE_LETTER,
  36879     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  36880     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  36881     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  36882     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  36883     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  36884     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  36885     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  36886     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  36887     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  36888     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  36889     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  36890     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  36891     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  36892     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  36893     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  36894     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  36895     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  36896     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  36897     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  36898     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  36899     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  36900     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  36901     UNICODE_LOWERCASE_LETTER, UNICODE_OTHER_LETTER,
  36902     UNICODE_NON_SPACING_MARK, UNICODE_ENCLOSING_MARK,
  36903     UNICODE_ENCLOSING_MARK, UNICODE_ENCLOSING_MARK,
  36904     UNICODE_OTHER_PUNCTUATION, UNICODE_NON_SPACING_MARK,
  36905     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  36906     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  36907     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  36908     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  36909     UNICODE_NON_SPACING_MARK, UNICODE_OTHER_PUNCTUATION,
  36910     UNICODE_MODIFIER_LETTER, UNICODE_UPPERCASE_LETTER,
  36911     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  36912     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  36913     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  36914     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  36915     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  36916     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  36917     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  36918     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  36919     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  36920     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  36921     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  36922     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  36923     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  36924     UNICODE_LOWERCASE_LETTER, UNICODE_MODIFIER_LETTER,
  36925     UNICODE_MODIFIER_LETTER, UNICODE_NON_SPACING_MARK,
  36926     UNICODE_NON_SPACING_MARK, UNICODE_OTHER_LETTER,
  36927     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36928     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36929     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36930     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36931     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36932     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36933     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36934     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36935     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36936     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36937     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36938     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36939     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36940     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36941     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36942     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36943     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36944     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36945     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36946     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36947     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36948     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36949     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36950     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  36951     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  36952     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  36953     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  36954     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  36955     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  36956     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  36957     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  36958     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  36959     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  36960     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  36961     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED
  36962   },
  36963   { /* page 167, index 51 */
  36964     UNICODE_MODIFIER_SYMBOL, UNICODE_MODIFIER_SYMBOL,
  36965     UNICODE_MODIFIER_SYMBOL, UNICODE_MODIFIER_SYMBOL,
  36966     UNICODE_MODIFIER_SYMBOL, UNICODE_MODIFIER_SYMBOL,
  36967     UNICODE_MODIFIER_SYMBOL, UNICODE_MODIFIER_SYMBOL,
  36968     UNICODE_MODIFIER_SYMBOL, UNICODE_MODIFIER_SYMBOL,
  36969     UNICODE_MODIFIER_SYMBOL, UNICODE_MODIFIER_SYMBOL,
  36970     UNICODE_MODIFIER_SYMBOL, UNICODE_MODIFIER_SYMBOL,
  36971     UNICODE_MODIFIER_SYMBOL, UNICODE_MODIFIER_SYMBOL,
  36972     UNICODE_MODIFIER_SYMBOL, UNICODE_MODIFIER_SYMBOL,
  36973     UNICODE_MODIFIER_SYMBOL, UNICODE_MODIFIER_SYMBOL,
  36974     UNICODE_MODIFIER_SYMBOL, UNICODE_MODIFIER_SYMBOL,
  36975     UNICODE_MODIFIER_SYMBOL, UNICODE_MODIFIER_LETTER,
  36976     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  36977     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  36978     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  36979     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  36980     UNICODE_MODIFIER_SYMBOL, UNICODE_MODIFIER_SYMBOL,
  36981     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  36982     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  36983     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  36984     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  36985     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  36986     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  36987     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  36988     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  36989     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  36990     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  36991     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  36992     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  36993     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  36994     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  36995     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  36996     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  36997     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  36998     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  36999     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37000     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37001     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37002     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37003     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37004     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37005     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37006     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37007     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37008     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37009     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37010     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37011     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37012     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37013     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37014     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37015     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37016     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37017     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37018     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37019     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37020     UNICODE_MODIFIER_LETTER, UNICODE_LOWERCASE_LETTER,
  37021     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37022     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37023     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37024     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  37025     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  37026     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  37027     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37028     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37029     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37030     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37031     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37032     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_SYMBOL,
  37033     UNICODE_MODIFIER_SYMBOL, UNICODE_UPPERCASE_LETTER,
  37034     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  37035     UNICODE_LOWERCASE_LETTER, UNICODE_OTHER_LETTER,
  37036     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37037     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37038     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37039     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37040     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37041     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37042     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37043     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37044     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37045     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37046     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37047     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37048     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37049     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  37050     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  37051     UNICODE_UPPERCASE_LETTER, UNICODE_UNASSIGNED,
  37052     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  37053     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  37054     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37055     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37056     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37057     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37058     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37059     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37060     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37061     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37062     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37063     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37064     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37065     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37066     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37067     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37068     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37069     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37070     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37071     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37072     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37073     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37074     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37075     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37076     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37077     UNICODE_OTHER_LETTER, UNICODE_MODIFIER_LETTER,
  37078     UNICODE_MODIFIER_LETTER, UNICODE_LOWERCASE_LETTER,
  37079     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37080     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER
  37081   },
  37082   { /* page 168, index 52 */
  37083     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37084     UNICODE_NON_SPACING_MARK, UNICODE_OTHER_LETTER,
  37085     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37086     UNICODE_NON_SPACING_MARK, UNICODE_OTHER_LETTER,
  37087     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37088     UNICODE_NON_SPACING_MARK, UNICODE_OTHER_LETTER,
  37089     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37090     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37091     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37092     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37093     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37094     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37095     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37096     UNICODE_OTHER_LETTER, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  37097     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  37098     UNICODE_SPACING_MARK, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  37099     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_UNASSIGNED,
  37100     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37101     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  37102     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  37103     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  37104     UNICODE_CURRENCY_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_UNASSIGNED,
  37105     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37106     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  37107     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37108     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37109     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37110     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37111     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37112     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37113     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37114     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37115     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37116     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37117     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37118     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37119     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37120     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37121     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37122     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37123     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37124     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  37125     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  37126     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37127     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37128     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_SPACING_MARK,
  37129     UNICODE_SPACING_MARK, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37130     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37131     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37132     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37133     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37134     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37135     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37136     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37137     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37138     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37139     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37140     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37141     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37142     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37143     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37144     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37145     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37146     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  37147     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  37148     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  37149     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  37150     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  37151     UNICODE_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  37152     UNICODE_NON_SPACING_MARK, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37153     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37154     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37155     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  37156     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  37157     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  37158     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  37159     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  37160     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER, UNICODE_UNASSIGNED,
  37161     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37162     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_NON_SPACING_MARK,
  37163     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  37164     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  37165     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  37166     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  37167     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  37168     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  37169     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  37170     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  37171     UNICODE_NON_SPACING_MARK, UNICODE_OTHER_LETTER,
  37172     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37173     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37174     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  37175     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_LETTER,
  37176     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_LETTER,
  37177     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED
  37178   },
  37179   { /* page 169, index 53 */
  37180     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  37181     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  37182     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  37183     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  37184     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  37185     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37186     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37187     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37188     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37189     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37190     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37191     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37192     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37193     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37194     UNICODE_OTHER_LETTER, UNICODE_NON_SPACING_MARK,
  37195     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  37196     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  37197     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  37198     UNICODE_NON_SPACING_MARK, UNICODE_OTHER_PUNCTUATION,
  37199     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_LETTER,
  37200     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37201     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37202     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37203     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37204     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37205     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37206     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37207     UNICODE_OTHER_LETTER, UNICODE_NON_SPACING_MARK,
  37208     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  37209     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  37210     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  37211     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  37212     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  37213     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_UNASSIGNED,
  37214     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37215     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37216     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37217     UNICODE_UNASSIGNED, UNICODE_OTHER_PUNCTUATION,
  37218     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37219     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37220     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37221     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37222     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37223     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37224     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37225     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37226     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37227     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  37228     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_NON_SPACING_MARK,
  37229     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  37230     UNICODE_SPACING_MARK, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37231     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37232     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37233     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37234     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37235     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37236     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37237     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37238     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37239     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37240     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37241     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37242     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37243     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37244     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37245     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37246     UNICODE_NON_SPACING_MARK, UNICODE_SPACING_MARK,
  37247     UNICODE_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  37248     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  37249     UNICODE_NON_SPACING_MARK, UNICODE_SPACING_MARK,
  37250     UNICODE_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  37251     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  37252     UNICODE_SPACING_MARK, UNICODE_OTHER_PUNCTUATION,
  37253     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  37254     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  37255     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  37256     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  37257     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  37258     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  37259     UNICODE_UNASSIGNED, UNICODE_MODIFIER_LETTER,
  37260     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  37261     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  37262     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  37263     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  37264     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER, UNICODE_UNASSIGNED,
  37265     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37266     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  37267     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37268     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37269     UNICODE_NON_SPACING_MARK, UNICODE_MODIFIER_LETTER,
  37270     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37271     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37272     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37273     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  37274     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  37275     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  37276     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  37277     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  37278     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37279     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED
  37280   },
  37281   { /* page 170, index 54 */
  37282     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37283     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37284     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37285     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37286     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37287     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37288     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37289     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37290     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37291     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37292     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37293     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37294     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37295     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37296     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  37297     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  37298     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  37299     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  37300     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  37301     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  37302     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  37303     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37304     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37305     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37306     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37307     UNICODE_NON_SPACING_MARK, UNICODE_OTHER_LETTER,
  37308     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37309     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37310     UNICODE_OTHER_LETTER, UNICODE_NON_SPACING_MARK,
  37311     UNICODE_SPACING_MARK, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37312     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  37313     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  37314     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  37315     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  37316     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER, UNICODE_UNASSIGNED,
  37317     UNICODE_UNASSIGNED, UNICODE_OTHER_PUNCTUATION,
  37318     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  37319     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_LETTER,
  37320     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37321     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37322     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37323     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37324     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37325     UNICODE_MODIFIER_LETTER, UNICODE_OTHER_LETTER,
  37326     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37327     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_SYMBOL,
  37328     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_LETTER,
  37329     UNICODE_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  37330     UNICODE_SPACING_MARK, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37331     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37332     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37333     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37334     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37335     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37336     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37337     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37338     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37339     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37340     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37341     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37342     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37343     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37344     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37345     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37346     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37347     UNICODE_NON_SPACING_MARK, UNICODE_OTHER_LETTER,
  37348     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  37349     UNICODE_NON_SPACING_MARK, UNICODE_OTHER_LETTER,
  37350     UNICODE_OTHER_LETTER, UNICODE_NON_SPACING_MARK,
  37351     UNICODE_NON_SPACING_MARK, UNICODE_OTHER_LETTER,
  37352     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37353     UNICODE_OTHER_LETTER, UNICODE_NON_SPACING_MARK,
  37354     UNICODE_NON_SPACING_MARK, UNICODE_OTHER_LETTER,
  37355     UNICODE_NON_SPACING_MARK, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  37356     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37357     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37358     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37359     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37360     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37361     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37362     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37363     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  37364     UNICODE_OTHER_LETTER, UNICODE_MODIFIER_LETTER,
  37365     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  37366     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37367     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37368     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37369     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_SPACING_MARK,
  37370     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  37371     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  37372     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  37373     UNICODE_OTHER_LETTER, UNICODE_MODIFIER_LETTER,
  37374     UNICODE_MODIFIER_LETTER, UNICODE_SPACING_MARK,
  37375     UNICODE_NON_SPACING_MARK, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37376     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37377     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37378     UNICODE_UNASSIGNED
  37379   },
  37380   { /* page 171, index 55 */
  37381     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37382     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37383     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37384     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37385     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37386     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  37387     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37388     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  37389     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37390     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37391     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  37392     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37393     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37394     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37395     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37396     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  37397     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37398     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37399     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37400     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37401     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37402     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37403     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37404     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37405     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37406     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37407     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37408     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37409     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37410     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37411     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37412     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37413     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37414     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37415     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37416     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37417     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37418     UNICODE_LOWERCASE_LETTER, UNICODE_MODIFIER_SYMBOL,
  37419     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  37420     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  37421     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37422     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37423     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37424     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37425     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37426     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37427     UNICODE_UNASSIGNED, UNICODE_LOWERCASE_LETTER,
  37428     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37429     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37430     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37431     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37432     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37433     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37434     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37435     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37436     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37437     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37438     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37439     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37440     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37441     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37442     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37443     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37444     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37445     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37446     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37447     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37448     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37449     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37450     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37451     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37452     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37453     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37454     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37455     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37456     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37457     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37458     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37459     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37460     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37461     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37462     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37463     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37464     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37465     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37466     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37467     UNICODE_LOWERCASE_LETTER, UNICODE_OTHER_LETTER,
  37468     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37469     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37470     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37471     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37472     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37473     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37474     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37475     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37476     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37477     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37478     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37479     UNICODE_OTHER_LETTER, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  37480     UNICODE_NON_SPACING_MARK, UNICODE_SPACING_MARK,
  37481     UNICODE_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  37482     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  37483     UNICODE_OTHER_PUNCTUATION, UNICODE_SPACING_MARK,
  37484     UNICODE_NON_SPACING_MARK, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37485     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  37486     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  37487     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  37488     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  37489     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER, UNICODE_UNASSIGNED,
  37490     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37491     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED
  37492   },
  37493   { /* page 215, index 56 */
  37494     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37495     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37496     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37497     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37498     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37499     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37500     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37501     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37502     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37503     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37504     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37505     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37506     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37507     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37508     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37509     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37510     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37511     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37512     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37513     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37514     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37515     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37516     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37517     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37518     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37519     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37520     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37521     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37522     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37523     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37524     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37525     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37526     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37527     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37528     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37529     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37530     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37531     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37532     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37533     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37534     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37535     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37536     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37537     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37538     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37539     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37540     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37541     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37542     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37543     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37544     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37545     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37546     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37547     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37548     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  37549     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37550     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37551     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37552     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  37553     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37554     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37555     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37556     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37557     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37558     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37559     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37560     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37561     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  37562     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37563     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37564     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37565     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37566     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37567     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37568     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37569     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37570     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37571     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37572     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37573     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37574     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37575     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37576     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37577     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37578     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37579     UNICODE_UNASSIGNED
  37580   },
  37581   { /* page 250, index 57 */
  37582     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37583     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37584     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37585     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37586     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37587     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37588     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37589     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37590     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37591     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37592     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37593     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37594     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37595     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37596     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37597     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37598     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37599     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37600     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37601     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37602     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37603     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37604     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37605     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37606     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37607     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37608     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37609     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37610     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37611     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37612     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37613     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37614     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37615     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37616     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37617     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37618     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  37619     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37620     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37621     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37622     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37623     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37624     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37625     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37626     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37627     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37628     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37629     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37630     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37631     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37632     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37633     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37634     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37635     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37636     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37637     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37638     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37639     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37640     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37641     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37642     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37643     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37644     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37645     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37646     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37647     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37648     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37649     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37650     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37651     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37652     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37653     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37654     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  37655     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37656     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37657     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37658     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37659     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37660     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37661     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37662     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37663     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37664     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37665     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37666     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37667     UNICODE_UNASSIGNED
  37668   },
  37669   { /* page 251, index 58 */
  37670     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37671     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37672     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37673     UNICODE_LOWERCASE_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37674     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37675     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37676     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37677     UNICODE_UNASSIGNED, UNICODE_LOWERCASE_LETTER,
  37678     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37679     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37680     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37681     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  37682     UNICODE_NON_SPACING_MARK, UNICODE_OTHER_LETTER,
  37683     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37684     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37685     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37686     UNICODE_MATH_SYMBOL, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37687     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37688     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37689     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37690     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  37691     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37692     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  37693     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  37694     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  37695     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  37696     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37697     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37698     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37699     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37700     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37701     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37702     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37703     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37704     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37705     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37706     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37707     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37708     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37709     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37710     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37711     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37712     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37713     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37714     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37715     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37716     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37717     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37718     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37719     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37720     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37721     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37722     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37723     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37724     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37725     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37726     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37727     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37728     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37729     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37730     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37731     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37732     UNICODE_MODIFIER_SYMBOL, UNICODE_MODIFIER_SYMBOL,
  37733     UNICODE_MODIFIER_SYMBOL, UNICODE_MODIFIER_SYMBOL,
  37734     UNICODE_MODIFIER_SYMBOL, UNICODE_MODIFIER_SYMBOL,
  37735     UNICODE_MODIFIER_SYMBOL, UNICODE_MODIFIER_SYMBOL,
  37736     UNICODE_MODIFIER_SYMBOL, UNICODE_MODIFIER_SYMBOL,
  37737     UNICODE_MODIFIER_SYMBOL, UNICODE_MODIFIER_SYMBOL,
  37738     UNICODE_MODIFIER_SYMBOL, UNICODE_MODIFIER_SYMBOL,
  37739     UNICODE_MODIFIER_SYMBOL, UNICODE_MODIFIER_SYMBOL,
  37740     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37741     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37742     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37743     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37744     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37745     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  37746     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37747     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37748     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37749     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37750     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37751     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37752     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37753     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37754     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37755     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37756     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37757     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37758     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37759     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37760     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER
  37761   },
  37762   { /* page 253, index 59 */
  37763     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37764     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37765     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37766     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37767     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37768     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37769     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37770     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37771     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37772     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37773     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37774     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37775     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37776     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37777     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37778     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37779     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37780     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37781     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37782     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37783     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37784     UNICODE_CLOSE_PUNCTUATION, UNICODE_OPEN_PUNCTUATION,
  37785     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37786     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37787     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37788     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37789     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37790     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37791     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37792     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37793     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37794     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37795     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37796     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37797     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37798     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37799     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37800     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37801     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37802     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37803     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37804     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37805     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37806     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37807     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37808     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37809     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37810     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37811     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  37812     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37813     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37814     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37815     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37816     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37817     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37818     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37819     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37820     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37821     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37822     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37823     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37824     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37825     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37826     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37827     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37828     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37829     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37830     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37831     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37832     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37833     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37834     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37835     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37836     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37837     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37838     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37839     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37840     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37841     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37842     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37843     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  37844     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37845     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37846     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37847     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37848     UNICODE_CURRENCY_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_UNASSIGNED,
  37849     UNICODE_UNASSIGNED
  37850   },
  37851   { /* page 254, index 60 */
  37852     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  37853     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  37854     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  37855     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  37856     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  37857     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  37858     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  37859     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  37860     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  37861     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  37862     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  37863     UNICODE_OTHER_PUNCTUATION, UNICODE_OPEN_PUNCTUATION,
  37864     UNICODE_CLOSE_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  37865     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37866     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37867     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  37868     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  37869     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  37870     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  37871     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  37872     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  37873     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  37874     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  37875     UNICODE_OTHER_PUNCTUATION, UNICODE_DASH_PUNCTUATION,
  37876     UNICODE_DASH_PUNCTUATION, UNICODE_CONNECT_PUNCTUATION,
  37877     UNICODE_CONNECT_PUNCTUATION, UNICODE_OPEN_PUNCTUATION,
  37878     UNICODE_CLOSE_PUNCTUATION, UNICODE_OPEN_PUNCTUATION,
  37879     UNICODE_CLOSE_PUNCTUATION, UNICODE_OPEN_PUNCTUATION,
  37880     UNICODE_CLOSE_PUNCTUATION, UNICODE_OPEN_PUNCTUATION,
  37881     UNICODE_CLOSE_PUNCTUATION, UNICODE_OPEN_PUNCTUATION,
  37882     UNICODE_CLOSE_PUNCTUATION, UNICODE_OPEN_PUNCTUATION,
  37883     UNICODE_CLOSE_PUNCTUATION, UNICODE_OPEN_PUNCTUATION,
  37884     UNICODE_CLOSE_PUNCTUATION, UNICODE_OPEN_PUNCTUATION,
  37885     UNICODE_CLOSE_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  37886     UNICODE_OTHER_PUNCTUATION, UNICODE_OPEN_PUNCTUATION,
  37887     UNICODE_CLOSE_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  37888     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  37889     UNICODE_OTHER_PUNCTUATION, UNICODE_CONNECT_PUNCTUATION,
  37890     UNICODE_CONNECT_PUNCTUATION, UNICODE_CONNECT_PUNCTUATION,
  37891     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  37892     UNICODE_OTHER_PUNCTUATION, UNICODE_UNASSIGNED,
  37893     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  37894     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  37895     UNICODE_DASH_PUNCTUATION, UNICODE_OPEN_PUNCTUATION,
  37896     UNICODE_CLOSE_PUNCTUATION, UNICODE_OPEN_PUNCTUATION,
  37897     UNICODE_CLOSE_PUNCTUATION, UNICODE_OPEN_PUNCTUATION,
  37898     UNICODE_CLOSE_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  37899     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  37900     UNICODE_MATH_SYMBOL, UNICODE_DASH_PUNCTUATION, UNICODE_MATH_SYMBOL,
  37901     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_UNASSIGNED,
  37902     UNICODE_OTHER_PUNCTUATION, UNICODE_CURRENCY_SYMBOL,
  37903     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  37904     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37905     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37906     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37907     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37908     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37909     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37910     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37911     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37912     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37913     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37914     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37915     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37916     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37917     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37918     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37919     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37920     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37921     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37922     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37923     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37924     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37925     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37926     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37927     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37928     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37929     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37930     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37931     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37932     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37933     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37934     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37935     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37936     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37937     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37938     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37939     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37940     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37941     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37942     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37943     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37944     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37945     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37946     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37947     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37948     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37949     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37950     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37951     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37952     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37953     UNICODE_FORMAT
  37954   },
  37955   { /* page 255, index 61 */
  37956     UNICODE_UNASSIGNED, UNICODE_OTHER_PUNCTUATION,
  37957     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  37958     UNICODE_CURRENCY_SYMBOL, UNICODE_OTHER_PUNCTUATION,
  37959     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  37960     UNICODE_OPEN_PUNCTUATION, UNICODE_CLOSE_PUNCTUATION,
  37961     UNICODE_OTHER_PUNCTUATION, UNICODE_MATH_SYMBOL,
  37962     UNICODE_OTHER_PUNCTUATION, UNICODE_DASH_PUNCTUATION,
  37963     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  37964     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  37965     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  37966     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  37967     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  37968     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  37969     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  37970     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  37971     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  37972     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  37973     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  37974     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  37975     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  37976     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  37977     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  37978     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  37979     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  37980     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  37981     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  37982     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  37983     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  37984     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  37985     UNICODE_OPEN_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  37986     UNICODE_CLOSE_PUNCTUATION, UNICODE_MODIFIER_SYMBOL,
  37987     UNICODE_CONNECT_PUNCTUATION, UNICODE_MODIFIER_SYMBOL,
  37988     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37989     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37990     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37991     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37992     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37993     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37994     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37995     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37996     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37997     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37998     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37999     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  38000     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  38001     UNICODE_OPEN_PUNCTUATION, UNICODE_MATH_SYMBOL,
  38002     UNICODE_CLOSE_PUNCTUATION, UNICODE_MATH_SYMBOL,
  38003     UNICODE_OPEN_PUNCTUATION, UNICODE_CLOSE_PUNCTUATION,
  38004     UNICODE_OTHER_PUNCTUATION, UNICODE_OPEN_PUNCTUATION,
  38005     UNICODE_CLOSE_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  38006     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_LETTER,
  38007     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38008     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38009     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38010     UNICODE_MODIFIER_LETTER, UNICODE_OTHER_LETTER,
  38011     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38012     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38013     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38014     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38015     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38016     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38017     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38018     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38019     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38020     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38021     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38022     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38023     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38024     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38025     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38026     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  38027     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38028     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38029     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38030     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38031     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38032     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38033     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38034     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38035     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38036     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38037     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38038     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38039     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38040     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38041     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38042     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38043     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  38044     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38045     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  38046     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38047     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38048     UNICODE_UNASSIGNED, UNICODE_CURRENCY_SYMBOL,
  38049     UNICODE_CURRENCY_SYMBOL, UNICODE_MATH_SYMBOL,
  38050     UNICODE_MODIFIER_SYMBOL, UNICODE_OTHER_SYMBOL,
  38051     UNICODE_CURRENCY_SYMBOL, UNICODE_CURRENCY_SYMBOL,
  38052     UNICODE_UNASSIGNED, UNICODE_OTHER_SYMBOL, UNICODE_MATH_SYMBOL,
  38053     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  38054     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_UNASSIGNED,
  38055     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38056     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38057     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38058     UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT,
  38059     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_UNASSIGNED,
  38060     UNICODE_UNASSIGNED
  38061   },
  38062   { /* page 256, index 62 */
  38063     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38064     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38065     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38066     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38067     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38068     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38069     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38070     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38071     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38072     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38073     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38074     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38075     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38076     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38077     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38078     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38079     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38080     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38081     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38082     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  38083     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  38084     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38085     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38086     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38087     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38088     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38089     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  38090     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38091     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38092     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38093     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38094     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38095     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38096     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38097     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38098     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38099     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38100     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38101     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38102     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38103     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38104     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38105     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  38106     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38107     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38108     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38109     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38110     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38111     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38112     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38113     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38114     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38115     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38116     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38117     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38118     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38119     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38120     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38121     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38122     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38123     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38124     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38125     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38126     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38127     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38128     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38129     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38130     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38131     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38132     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38133     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38134     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38135     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38136     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38137     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38138     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38139     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38140     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38141     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38142     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38143     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38144     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38145     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38146     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  38147     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38148     UNICODE_UNASSIGNED
  38149   },
  38150   { /* page 257, index 63 */
  38151     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  38152     UNICODE_OTHER_PUNCTUATION, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38153     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_NUMBER,
  38154     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  38155     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  38156     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  38157     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  38158     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  38159     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  38160     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  38161     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  38162     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  38163     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  38164     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  38165     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  38166     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  38167     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  38168     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_UNASSIGNED,
  38169     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_SYMBOL,
  38170     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  38171     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  38172     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_LETTER_NUMBER,
  38173     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  38174     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  38175     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  38176     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  38177     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  38178     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  38179     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  38180     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  38181     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  38182     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  38183     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  38184     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  38185     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  38186     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  38187     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  38188     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  38189     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  38190     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  38191     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  38192     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  38193     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  38194     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  38195     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  38196     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  38197     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  38198     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER, UNICODE_OTHER_NUMBER,
  38199     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  38200     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  38201     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  38202     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  38203     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  38204     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  38205     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_NUMBER,
  38206     UNICODE_OTHER_NUMBER, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  38207     UNICODE_OTHER_SYMBOL, UNICODE_UNASSIGNED, UNICODE_OTHER_SYMBOL,
  38208     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  38209     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  38210     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  38211     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_UNASSIGNED,
  38212     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38213     UNICODE_OTHER_SYMBOL, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38214     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38215     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38216     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38217     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38218     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38219     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38220     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38221     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38222     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38223     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38224     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38225     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38226     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38227     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38228     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38229     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  38230     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  38231     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  38232     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  38233     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  38234     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  38235     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  38236     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  38237     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  38238     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  38239     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  38240     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  38241     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  38242     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  38243     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  38244     UNICODE_NON_SPACING_MARK, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED
  38245   },
  38246   { /* page 258, index 64 */
  38247     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38248     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38249     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38250     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38251     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38252     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38253     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38254     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38255     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38256     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38257     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38258     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38259     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38260     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38261     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38262     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38263     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38264     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38265     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38266     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38267     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38268     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38269     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38270     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38271     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38272     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38273     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38274     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38275     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38276     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38277     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38278     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38279     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38280     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38281     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38282     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38283     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38284     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38285     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38286     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38287     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38288     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38289     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  38290     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38291     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38292     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38293     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38294     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38295     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38296     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38297     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38298     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38299     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38300     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38301     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38302     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38303     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38304     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38305     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38306     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38307     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38308     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38309     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38310     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38311     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38312     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38313     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38314     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38315     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38316     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  38317     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38318     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38319     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38320     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38321     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_NON_SPACING_MARK,
  38322     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  38323     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  38324     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  38325     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  38326     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  38327     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  38328     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  38329     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  38330     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  38331     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38332     UNICODE_UNASSIGNED
  38333   },
  38334   { /* page 259, index 65 */
  38335     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38336     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38337     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38338     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38339     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38340     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38341     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38342     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38343     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38344     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38345     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_NUMBER,
  38346     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  38347     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38348     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38349     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38350     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38351     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38352     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38353     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38354     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38355     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38356     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_LETTER_NUMBER,
  38357     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38358     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38359     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_LETTER_NUMBER,
  38360     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38361     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  38362     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38363     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38364     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38365     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38366     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38367     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38368     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38369     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38370     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38371     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38372     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38373     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38374     UNICODE_OTHER_LETTER, UNICODE_NON_SPACING_MARK,
  38375     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  38376     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  38377     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38378     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  38379     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38380     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38381     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38382     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38383     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38384     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38385     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38386     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38387     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38388     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  38389     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_LETTER,
  38390     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38391     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38392     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38393     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38394     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38395     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38396     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38397     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38398     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38399     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38400     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38401     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  38402     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38403     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38404     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38405     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38406     UNICODE_OTHER_PUNCTUATION, UNICODE_LETTER_NUMBER,
  38407     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  38408     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER, UNICODE_UNASSIGNED,
  38409     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38410     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38411     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38412     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38413     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38414     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38415     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38416     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38417     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38418     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38419     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38420     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38421     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38422     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED
  38423   },
  38424   { /* page 260, index 66 */
  38425     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  38426     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  38427     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  38428     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  38429     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  38430     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  38431     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  38432     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  38433     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  38434     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  38435     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  38436     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  38437     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  38438     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  38439     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  38440     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  38441     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  38442     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  38443     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  38444     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  38445     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  38446     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  38447     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  38448     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  38449     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  38450     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  38451     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  38452     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  38453     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  38454     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  38455     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  38456     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  38457     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  38458     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  38459     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  38460     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  38461     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  38462     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  38463     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  38464     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  38465     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38466     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38467     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38468     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38469     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38470     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38471     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38472     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38473     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38474     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38475     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38476     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38477     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38478     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38479     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38480     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38481     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38482     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38483     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38484     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38485     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38486     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38487     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38488     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38489     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38490     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38491     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_DECIMAL_NUMBER,
  38492     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  38493     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  38494     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  38495     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  38496     UNICODE_DECIMAL_NUMBER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38497     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38498     UNICODE_UNASSIGNED, UNICODE_UPPERCASE_LETTER,
  38499     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  38500     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  38501     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  38502     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  38503     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  38504     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  38505     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  38506     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  38507     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  38508     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  38509     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  38510     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  38511     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  38512     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  38513     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  38514     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  38515     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  38516     UNICODE_UPPERCASE_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38517     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_LOWERCASE_LETTER,
  38518     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  38519     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  38520     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  38521     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  38522     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  38523     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  38524     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  38525     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  38526     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  38527     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  38528     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  38529     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  38530     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  38531     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  38532     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  38533     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  38534     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  38535     UNICODE_LOWERCASE_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38536     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED
  38537   },
  38538   { /* page 261, index 67 */
  38539     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38540     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38541     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38542     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38543     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38544     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38545     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38546     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38547     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38548     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38549     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38550     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38551     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38552     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38553     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38554     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38555     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38556     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38557     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38558     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38559     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38560     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38561     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38562     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38563     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38564     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38565     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38566     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38567     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38568     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38569     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38570     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38571     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38572     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38573     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38574     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38575     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38576     UNICODE_OTHER_PUNCTUATION, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38577     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38578     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38579     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38580     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38581     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38582     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38583     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38584     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38585     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38586     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38587     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38588     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38589     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38590     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38591     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38592     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38593     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38594     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38595     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38596     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38597     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38598     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38599     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38600     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38601     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38602     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38603     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38604     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38605     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38606     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38607     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38608     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38609     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38610     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38611     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38612     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38613     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38614     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38615     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38616     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38617     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38618     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38619     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38620     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38621     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38622     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38623     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38624     UNICODE_UNASSIGNED
  38625   },
  38626   { /* page 263, index 68 */
  38627     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38628     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38629     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38630     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38631     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38632     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38633     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38634     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38635     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38636     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38637     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38638     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38639     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38640     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38641     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38642     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38643     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38644     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38645     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38646     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38647     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38648     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38649     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38650     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38651     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38652     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38653     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38654     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38655     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  38656     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38657     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38658     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38659     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38660     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38661     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  38662     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38663     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38664     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38665     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38666     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38667     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38668     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38669     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38670     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38671     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38672     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38673     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38674     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38675     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38676     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38677     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38678     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38679     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38680     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38681     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38682     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38683     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38684     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38685     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38686     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38687     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38688     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38689     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38690     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38691     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38692     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38693     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38694     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38695     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38696     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38697     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38698     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38699     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38700     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38701     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38702     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38703     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38704     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38705     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38706     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38707     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38708     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38709     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38710     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38711     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38712     UNICODE_UNASSIGNED
  38713   },
  38714   { /* page 264, index 69 */
  38715     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38716     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38717     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  38718     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38719     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38720     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38721     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38722     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38723     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38724     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38725     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38726     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38727     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38728     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38729     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38730     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38731     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38732     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38733     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38734     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38735     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38736     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38737     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38738     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38739     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38740     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38741     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38742     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38743     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  38744     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_NUMBER,
  38745     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  38746     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  38747     UNICODE_OTHER_NUMBER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38748     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38749     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38750     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38751     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38752     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38753     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38754     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38755     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_NUMBER,
  38756     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  38757     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  38758     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38759     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38760     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38761     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38762     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38763     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38764     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38765     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38766     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38767     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38768     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38769     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38770     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38771     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  38772     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  38773     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  38774     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38775     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38776     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38777     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38778     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38779     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38780     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38781     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38782     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38783     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38784     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38785     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38786     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38787     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38788     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38789     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38790     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38791     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38792     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38793     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38794     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38795     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38796     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  38797     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38798     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38799     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  38800     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER
  38801   },
  38802   { /* page 265, index 70 */
  38803     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38804     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38805     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38806     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38807     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38808     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38809     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38810     UNICODE_OTHER_LETTER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  38811     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  38812     UNICODE_OTHER_NUMBER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38813     UNICODE_UNASSIGNED, UNICODE_OTHER_PUNCTUATION,
  38814     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38815     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38816     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38817     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38818     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38819     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38820     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38821     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38822     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  38823     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38824     UNICODE_UNASSIGNED, UNICODE_OTHER_PUNCTUATION, UNICODE_UNASSIGNED,
  38825     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38826     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38827     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38828     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38829     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38830     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38831     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38832     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38833     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38834     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38835     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38836     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38837     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38838     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38839     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38840     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38841     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38842     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38843     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38844     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38845     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38846     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38847     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38848     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38849     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38850     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38851     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38852     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38853     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38854     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38855     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38856     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38857     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38858     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38859     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38860     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38861     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38862     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38863     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38864     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  38865     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38866     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_LETTER,
  38867     UNICODE_OTHER_LETTER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  38868     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  38869     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  38870     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  38871     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  38872     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_UNASSIGNED,
  38873     UNICODE_UNASSIGNED, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  38874     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  38875     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  38876     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  38877     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  38878     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  38879     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  38880     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  38881     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  38882     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  38883     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  38884     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  38885     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  38886     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  38887     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  38888     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER
  38889   },
  38890   { /* page 266, index 71 */
  38891     UNICODE_OTHER_LETTER, UNICODE_NON_SPACING_MARK,
  38892     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  38893     UNICODE_UNASSIGNED, UNICODE_NON_SPACING_MARK,
  38894     UNICODE_NON_SPACING_MARK, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38895     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38896     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  38897     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  38898     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38899     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  38900     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  38901     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38902     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38903     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38904     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38905     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38906     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38907     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38908     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38909     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38910     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38911     UNICODE_UNASSIGNED, UNICODE_NON_SPACING_MARK,
  38912     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  38913     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38914     UNICODE_UNASSIGNED, UNICODE_NON_SPACING_MARK, UNICODE_OTHER_NUMBER,
  38915     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  38916     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  38917     UNICODE_OTHER_NUMBER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38918     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38919     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38920     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  38921     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  38922     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  38923     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  38924     UNICODE_OTHER_PUNCTUATION, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38925     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38926     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  38927     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38928     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38929     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38930     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38931     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38932     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38933     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38934     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38935     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38936     UNICODE_OTHER_LETTER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  38937     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_LETTER,
  38938     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38939     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38940     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38941     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38942     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38943     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38944     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38945     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38946     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38947     UNICODE_OTHER_LETTER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  38948     UNICODE_OTHER_NUMBER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38949     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38950     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38951     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38952     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38953     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38954     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38955     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38956     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38957     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38958     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38959     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38960     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38961     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_SYMBOL,
  38962     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38963     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38964     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38965     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38966     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38967     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38968     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38969     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38970     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38971     UNICODE_OTHER_LETTER, UNICODE_NON_SPACING_MARK,
  38972     UNICODE_NON_SPACING_MARK, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38973     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_NUMBER,
  38974     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  38975     UNICODE_OTHER_NUMBER, UNICODE_OTHER_PUNCTUATION,
  38976     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  38977     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  38978     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  38979     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38980     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38981     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED
  38982   },
  38983   { /* page 267, index 72 */
  38984     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38985     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38986     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38987     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38988     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38989     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38990     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38991     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38992     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38993     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38994     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38995     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38996     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38997     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38998     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38999     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39000     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39001     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39002     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39003     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  39004     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  39005     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  39006     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_LETTER,
  39007     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39008     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39009     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39010     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39011     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39012     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39013     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39014     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_NUMBER,
  39015     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  39016     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  39017     UNICODE_OTHER_NUMBER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39018     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39019     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39020     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39021     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39022     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39023     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  39024     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39025     UNICODE_UNASSIGNED, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  39026     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  39027     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  39028     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39029     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39030     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39031     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39032     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39033     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39034     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39035     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39036     UNICODE_UNASSIGNED, UNICODE_OTHER_PUNCTUATION,
  39037     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  39038     UNICODE_OTHER_PUNCTUATION, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39039     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39040     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39041     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39042     UNICODE_UNASSIGNED, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  39043     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  39044     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_UNASSIGNED,
  39045     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39046     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39047     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39048     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39049     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39050     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39051     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39052     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39053     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39054     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39055     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39056     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39057     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39058     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39059     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39060     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39061     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39062     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39063     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39064     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39065     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39066     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39067     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39068     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39069     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39070     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39071     UNICODE_UNASSIGNED
  39072   },
  39073   { /* page 268, index 73 */
  39074     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39075     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39076     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39077     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39078     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39079     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39080     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39081     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39082     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39083     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39084     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39085     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39086     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39087     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39088     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39089     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39090     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39091     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39092     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39093     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39094     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39095     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39096     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39097     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39098     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39099     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39100     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39101     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39102     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39103     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39104     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39105     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39106     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39107     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39108     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39109     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39110     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39111     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39112     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39113     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39114     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39115     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39116     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UPPERCASE_LETTER,
  39117     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  39118     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  39119     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  39120     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  39121     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  39122     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  39123     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  39124     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  39125     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  39126     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  39127     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  39128     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  39129     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  39130     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  39131     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  39132     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  39133     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  39134     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  39135     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  39136     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  39137     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  39138     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  39139     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  39140     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  39141     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  39142     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39143     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39144     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39145     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39146     UNICODE_UNASSIGNED, UNICODE_LOWERCASE_LETTER,
  39147     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  39148     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  39149     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  39150     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  39151     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  39152     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  39153     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  39154     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  39155     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  39156     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  39157     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  39158     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  39159     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  39160     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  39161     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  39162     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  39163     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  39164     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  39165     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  39166     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  39167     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  39168     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  39169     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  39170     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  39171     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  39172     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39173     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39174     UNICODE_UNASSIGNED, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  39175     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  39176     UNICODE_OTHER_NUMBER
  39177   },
  39178   { /* page 270, index 74 */
  39179     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39180     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39181     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39182     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39183     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39184     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39185     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39186     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39187     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39188     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39189     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39190     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39191     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39192     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39193     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39194     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39195     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39196     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39197     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39198     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39199     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39200     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39201     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39202     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39203     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39204     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39205     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39206     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39207     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39208     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39209     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39210     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39211     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  39212     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  39213     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  39214     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  39215     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  39216     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  39217     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  39218     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  39219     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  39220     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  39221     UNICODE_OTHER_NUMBER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39222     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39223     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39224     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39225     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39226     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39227     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39228     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39229     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39230     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39231     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39232     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39233     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39234     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39235     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39236     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39237     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39238     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39239     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39240     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39241     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39242     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39243     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39244     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39245     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39246     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39247     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39248     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39249     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39250     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39251     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39252     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39253     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39254     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39255     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39256     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39257     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39258     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39259     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39260     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39261     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39262     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39263     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39264     UNICODE_UNASSIGNED
  39265   },
  39266   { /* page 272, index 75 */
  39267     UNICODE_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39268     UNICODE_SPACING_MARK, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39269     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39270     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39271     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39272     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39273     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39274     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39275     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39276     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39277     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39278     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39279     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39280     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39281     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39282     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39283     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39284     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39285     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39286     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39287     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39288     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39289     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39290     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39291     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39292     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39293     UNICODE_NON_SPACING_MARK, UNICODE_OTHER_PUNCTUATION,
  39294     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  39295     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  39296     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  39297     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39298     UNICODE_UNASSIGNED, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  39299     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  39300     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  39301     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  39302     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  39303     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  39304     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  39305     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  39306     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  39307     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  39308     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  39309     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER, UNICODE_UNASSIGNED,
  39310     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39311     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39312     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39313     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39314     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_NON_SPACING_MARK,
  39315     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39316     UNICODE_SPACING_MARK, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39317     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39318     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39319     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39320     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39321     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39322     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39323     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39324     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39325     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39326     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39327     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39328     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39329     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39330     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39331     UNICODE_OTHER_LETTER, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  39332     UNICODE_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39333     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39334     UNICODE_NON_SPACING_MARK, UNICODE_SPACING_MARK,
  39335     UNICODE_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39336     UNICODE_NON_SPACING_MARK, UNICODE_OTHER_PUNCTUATION,
  39337     UNICODE_OTHER_PUNCTUATION, UNICODE_FORMAT,
  39338     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  39339     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  39340     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39341     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39342     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39343     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39344     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  39345     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39346     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39347     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39348     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39349     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39350     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39351     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39352     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39353     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39354     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39355     UNICODE_UNASSIGNED, UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  39356     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  39357     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  39358     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  39359     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER, UNICODE_UNASSIGNED,
  39360     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39361     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED
  39362   },
  39363   { /* page 273, index 76 */
  39364     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39365     UNICODE_NON_SPACING_MARK, UNICODE_OTHER_LETTER,
  39366     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39367     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39368     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39369     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39370     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39371     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39372     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39373     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39374     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39375     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39376     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39377     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39378     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39379     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39380     UNICODE_NON_SPACING_MARK, UNICODE_SPACING_MARK,
  39381     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39382     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39383     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39384     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39385     UNICODE_UNASSIGNED, UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  39386     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  39387     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  39388     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  39389     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  39390     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  39391     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  39392     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39393     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39394     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39395     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39396     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39397     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39398     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39399     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39400     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39401     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39402     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39403     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39404     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39405     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39406     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39407     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39408     UNICODE_NON_SPACING_MARK, UNICODE_OTHER_PUNCTUATION,
  39409     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_LETTER,
  39410     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39411     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39412     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39413     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39414     UNICODE_SPACING_MARK, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39415     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39416     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39417     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39418     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39419     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39420     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39421     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39422     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39423     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39424     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39425     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39426     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39427     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39428     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39429     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39430     UNICODE_OTHER_LETTER, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  39431     UNICODE_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39432     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39433     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39434     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39435     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39436     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_OTHER_LETTER,
  39437     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39438     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  39439     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  39440     UNICODE_OTHER_PUNCTUATION, UNICODE_NON_SPACING_MARK,
  39441     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39442     UNICODE_OTHER_PUNCTUATION, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39443     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  39444     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  39445     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  39446     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  39447     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  39448     UNICODE_OTHER_LETTER, UNICODE_OTHER_PUNCTUATION,
  39449     UNICODE_OTHER_LETTER, UNICODE_OTHER_PUNCTUATION,
  39450     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  39451     UNICODE_UNASSIGNED, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  39452     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  39453     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  39454     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  39455     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  39456     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  39457     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  39458     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39459     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39460     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39461     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED
  39462   },
  39463   { /* page 274, index 77 */
  39464     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39465     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39466     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39467     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39468     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39469     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39470     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39471     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39472     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39473     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39474     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39475     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39476     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39477     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39478     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_SPACING_MARK,
  39479     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  39480     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39481     UNICODE_NON_SPACING_MARK, UNICODE_SPACING_MARK,
  39482     UNICODE_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39483     UNICODE_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39484     UNICODE_NON_SPACING_MARK, UNICODE_OTHER_PUNCTUATION,
  39485     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  39486     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  39487     UNICODE_OTHER_PUNCTUATION, UNICODE_NON_SPACING_MARK,
  39488     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39489     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39490     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39491     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39492     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39493     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39494     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39495     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39496     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39497     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39498     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39499     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39500     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39501     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39502     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39503     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39504     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39505     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39506     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39507     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39508     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39509     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  39510     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39511     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39512     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  39513     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39514     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  39515     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39516     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39517     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39518     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39519     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  39520     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39521     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39522     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39523     UNICODE_OTHER_LETTER, UNICODE_OTHER_PUNCTUATION,
  39524     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39525     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39526     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39527     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39528     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39529     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39530     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39531     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39532     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39533     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39534     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39535     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39536     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39537     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39538     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39539     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39540     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39541     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39542     UNICODE_NON_SPACING_MARK, UNICODE_SPACING_MARK,
  39543     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  39544     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39545     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39546     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39547     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39548     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39549     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_DECIMAL_NUMBER,
  39550     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  39551     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  39552     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  39553     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  39554     UNICODE_DECIMAL_NUMBER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39555     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39556     UNICODE_UNASSIGNED
  39557   },
  39558   { /* page 275, index 78 */
  39559     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39560     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_UNASSIGNED,
  39561     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39562     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39563     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  39564     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39565     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  39566     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39567     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39568     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39569     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39570     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39571     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39572     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39573     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39574     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39575     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  39576     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  39577     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39578     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  39579     UNICODE_UNASSIGNED, UNICODE_NON_SPACING_MARK, UNICODE_OTHER_LETTER,
  39580     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  39581     UNICODE_NON_SPACING_MARK, UNICODE_SPACING_MARK,
  39582     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  39583     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_SPACING_MARK,
  39584     UNICODE_SPACING_MARK, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39585     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  39586     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  39587     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39588     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39589     UNICODE_SPACING_MARK, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39590     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39591     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39592     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_SPACING_MARK,
  39593     UNICODE_SPACING_MARK, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39594     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39595     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39596     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39597     UNICODE_NON_SPACING_MARK, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39598     UNICODE_UNASSIGNED, UNICODE_NON_SPACING_MARK,
  39599     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39600     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39601     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39602     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39603     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39604     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39605     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39606     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39607     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39608     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39609     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39610     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39611     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39612     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39613     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39614     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39615     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39616     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39617     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39618     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39619     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39620     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39621     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39622     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39623     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39624     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39625     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39626     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39627     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39628     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39629     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39630     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39631     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39632     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39633     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39634     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39635     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39636     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39637     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39638     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39639     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39640     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39641     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39642     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39643     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39644     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39645     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39646     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39647     UNICODE_UNASSIGNED
  39648   },
  39649   { /* page 276, index 79 */
  39650     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39651     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39652     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39653     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39654     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39655     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39656     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39657     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39658     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39659     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39660     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39661     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39662     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39663     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39664     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39665     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39666     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39667     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_SPACING_MARK,
  39668     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  39669     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39670     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39671     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39672     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39673     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  39674     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39675     UNICODE_NON_SPACING_MARK, UNICODE_SPACING_MARK,
  39676     UNICODE_NON_SPACING_MARK, UNICODE_OTHER_LETTER,
  39677     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39678     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  39679     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  39680     UNICODE_OTHER_PUNCTUATION, UNICODE_DECIMAL_NUMBER,
  39681     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  39682     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  39683     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  39684     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  39685     UNICODE_DECIMAL_NUMBER, UNICODE_UNASSIGNED,
  39686     UNICODE_OTHER_PUNCTUATION, UNICODE_UNASSIGNED,
  39687     UNICODE_OTHER_PUNCTUATION, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39688     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39689     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39690     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39691     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39692     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39693     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39694     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39695     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39696     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39697     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39698     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  39699     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39700     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39701     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39702     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39703     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39704     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39705     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39706     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39707     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39708     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39709     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39710     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39711     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39712     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39713     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39714     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_SPACING_MARK,
  39715     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  39716     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39717     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39718     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39719     UNICODE_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39720     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  39721     UNICODE_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39722     UNICODE_NON_SPACING_MARK, UNICODE_SPACING_MARK,
  39723     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39724     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39725     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_LETTER,
  39726     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39727     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39728     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_DECIMAL_NUMBER,
  39729     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  39730     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  39731     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  39732     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  39733     UNICODE_DECIMAL_NUMBER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39734     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39735     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39736     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39737     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39738     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39739     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39740     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39741     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39742     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39743     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39744     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39745     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED
  39746   },
  39747   { /* page 277, index 80 */
  39748     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39749     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39750     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39751     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39752     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39753     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39754     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39755     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39756     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39757     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39758     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39759     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39760     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39761     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39762     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39763     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39764     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39765     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39766     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39767     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39768     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39769     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39770     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39771     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39772     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39773     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39774     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39775     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39776     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39777     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39778     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39779     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39780     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39781     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39782     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39783     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39784     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39785     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39786     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39787     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39788     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39789     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39790     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  39791     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39792     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39793     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39794     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39795     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39796     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39797     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39798     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39799     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39800     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39801     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39802     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39803     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39804     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39805     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39806     UNICODE_OTHER_LETTER, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  39807     UNICODE_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39808     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39809     UNICODE_NON_SPACING_MARK, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39810     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  39811     UNICODE_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39812     UNICODE_NON_SPACING_MARK, UNICODE_SPACING_MARK,
  39813     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39814     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  39815     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  39816     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  39817     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  39818     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  39819     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  39820     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  39821     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  39822     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  39823     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  39824     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  39825     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_LETTER,
  39826     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39827     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39828     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39829     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39830     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39831     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39832     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39833     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39834     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39835     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39836     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39837     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39838     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39839     UNICODE_UNASSIGNED
  39840   },
  39841   { /* page 278, index 81 */
  39842     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39843     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39844     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39845     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39846     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39847     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39848     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39849     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39850     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39851     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39852     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39853     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39854     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39855     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39856     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39857     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39858     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  39859     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39860     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39861     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39862     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39863     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  39864     UNICODE_NON_SPACING_MARK, UNICODE_SPACING_MARK,
  39865     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39866     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  39867     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_LETTER,
  39868     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39869     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39870     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39871     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_DECIMAL_NUMBER,
  39872     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  39873     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  39874     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  39875     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  39876     UNICODE_DECIMAL_NUMBER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39877     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39878     UNICODE_UNASSIGNED, UNICODE_OTHER_PUNCTUATION,
  39879     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  39880     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  39881     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  39882     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  39883     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  39884     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  39885     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39886     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39887     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39888     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39889     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39890     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39891     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39892     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39893     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39894     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39895     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39896     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39897     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39898     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39899     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39900     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39901     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39902     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39903     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39904     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39905     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39906     UNICODE_NON_SPACING_MARK, UNICODE_SPACING_MARK,
  39907     UNICODE_NON_SPACING_MARK, UNICODE_SPACING_MARK,
  39908     UNICODE_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39909     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39910     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39911     UNICODE_NON_SPACING_MARK, UNICODE_SPACING_MARK,
  39912     UNICODE_NON_SPACING_MARK, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39913     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39914     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39915     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  39916     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  39917     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  39918     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  39919     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER, UNICODE_UNASSIGNED,
  39920     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39921     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39922     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39923     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39924     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39925     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39926     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39927     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39928     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39929     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39930     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39931     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39932     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39933     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39934     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39935     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39936     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39937     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED
  39938   },
  39939   { /* page 279, index 82 */
  39940     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39941     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39942     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39943     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39944     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39945     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39946     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39947     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39948     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  39949     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_NON_SPACING_MARK,
  39950     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39951     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  39952     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39953     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39954     UNICODE_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39955     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39956     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39957     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39958     UNICODE_UNASSIGNED, UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  39959     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  39960     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  39961     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  39962     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  39963     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  39964     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  39965     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_SYMBOL,
  39966     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39967     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39968     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39969     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39970     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39971     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39972     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39973     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39974     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39975     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39976     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39977     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39978     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39979     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39980     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39981     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39982     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39983     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39984     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39985     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39986     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39987     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39988     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39989     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39990     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39991     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39992     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39993     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39994     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39995     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39996     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39997     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39998     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39999     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40000     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40001     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40002     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40003     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40004     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40005     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40006     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40007     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40008     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40009     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40010     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40011     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40012     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40013     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40014     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40015     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40016     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40017     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40018     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40019     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40020     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40021     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40022     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40023     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40024     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40025     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40026     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40027     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40028     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40029     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED
  40030   },
  40031   { /* page 280, index 83 */
  40032     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40033     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40034     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40035     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40036     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40037     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40038     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40039     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40040     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40041     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40042     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40043     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40044     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40045     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40046     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40047     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40048     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40049     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40050     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40051     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40052     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40053     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40054     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40055     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40056     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40057     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40058     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40059     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40060     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40061     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40062     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40063     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40064     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40065     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40066     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40067     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40068     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40069     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40070     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40071     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40072     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40073     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40074     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40075     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40076     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40077     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40078     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40079     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40080     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40081     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40082     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40083     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40084     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40085     UNICODE_UNASSIGNED, UNICODE_UPPERCASE_LETTER,
  40086     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  40087     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  40088     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  40089     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  40090     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  40091     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  40092     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  40093     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  40094     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  40095     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  40096     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  40097     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  40098     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  40099     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  40100     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  40101     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  40102     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  40103     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  40104     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  40105     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  40106     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  40107     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  40108     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  40109     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  40110     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  40111     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  40112     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  40113     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  40114     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  40115     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  40116     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  40117     UNICODE_LOWERCASE_LETTER, UNICODE_DECIMAL_NUMBER,
  40118     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  40119     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  40120     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  40121     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  40122     UNICODE_DECIMAL_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  40123     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  40124     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  40125     UNICODE_OTHER_NUMBER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40126     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40127     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40128     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40129     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER
  40130   },
  40131   { /* page 282, index 84 */
  40132     UNICODE_OTHER_LETTER, UNICODE_NON_SPACING_MARK,
  40133     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  40134     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  40135     UNICODE_NON_SPACING_MARK, UNICODE_SPACING_MARK,
  40136     UNICODE_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  40137     UNICODE_NON_SPACING_MARK, UNICODE_OTHER_LETTER,
  40138     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40139     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40140     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40141     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40142     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40143     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40144     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40145     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40146     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40147     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40148     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40149     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40150     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40151     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  40152     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  40153     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  40154     UNICODE_SPACING_MARK, UNICODE_OTHER_LETTER,
  40155     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  40156     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  40157     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  40158     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  40159     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  40160     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  40161     UNICODE_NON_SPACING_MARK, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40162     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40163     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40164     UNICODE_OTHER_LETTER, UNICODE_NON_SPACING_MARK,
  40165     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  40166     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  40167     UNICODE_NON_SPACING_MARK, UNICODE_SPACING_MARK,
  40168     UNICODE_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  40169     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  40170     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40171     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40172     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40173     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40174     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40175     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40176     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40177     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40178     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40179     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40180     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40181     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40182     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40183     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40184     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40185     UNICODE_OTHER_LETTER, UNICODE_NON_SPACING_MARK,
  40186     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  40187     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  40188     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  40189     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  40190     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  40191     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  40192     UNICODE_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  40193     UNICODE_NON_SPACING_MARK, UNICODE_OTHER_PUNCTUATION,
  40194     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  40195     UNICODE_UNASSIGNED, UNICODE_OTHER_PUNCTUATION,
  40196     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  40197     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  40198     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40199     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40200     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40201     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40202     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40203     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40204     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40205     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40206     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40207     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  40208     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40209     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40210     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40211     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40212     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40213     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40214     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40215     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40216     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40217     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40218     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40219     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40220     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40221     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40222     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40223     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40224     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40225     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40226     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  40227     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40228     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED
  40229   },
  40230   { /* page 284, index 85 */
  40231     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40232     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40233     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40234     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40235     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40236     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40237     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40238     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40239     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40240     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40241     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40242     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40243     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40244     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40245     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40246     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_SPACING_MARK,
  40247     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  40248     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  40249     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  40250     UNICODE_NON_SPACING_MARK, UNICODE_UNASSIGNED,
  40251     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  40252     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  40253     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  40254     UNICODE_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  40255     UNICODE_OTHER_LETTER, UNICODE_OTHER_PUNCTUATION,
  40256     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  40257     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  40258     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40259     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40260     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40261     UNICODE_UNASSIGNED, UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  40262     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  40263     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  40264     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  40265     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  40266     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  40267     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  40268     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  40269     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  40270     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  40271     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  40272     UNICODE_OTHER_NUMBER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40273     UNICODE_UNASSIGNED, UNICODE_OTHER_PUNCTUATION,
  40274     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_LETTER,
  40275     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40276     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40277     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40278     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40279     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40280     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40281     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40282     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40283     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40284     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  40285     UNICODE_UNASSIGNED, UNICODE_NON_SPACING_MARK,
  40286     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  40287     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  40288     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  40289     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  40290     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  40291     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  40292     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  40293     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  40294     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  40295     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  40296     UNICODE_NON_SPACING_MARK, UNICODE_UNASSIGNED, UNICODE_SPACING_MARK,
  40297     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  40298     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  40299     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  40300     UNICODE_NON_SPACING_MARK, UNICODE_SPACING_MARK,
  40301     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  40302     UNICODE_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  40303     UNICODE_NON_SPACING_MARK, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40304     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40305     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40306     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40307     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40308     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40309     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40310     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40311     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40312     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40313     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40314     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40315     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40316     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40317     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40318     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40319     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40320     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40321     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40322     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40323     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40324     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40325     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40326     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40327     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED
  40328   },
  40329   { /* page 285, index 86 */
  40330     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40331     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40332     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  40333     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  40334     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40335     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40336     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40337     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40338     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40339     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40340     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40341     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40342     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40343     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40344     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40345     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40346     UNICODE_OTHER_LETTER, UNICODE_NON_SPACING_MARK,
  40347     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  40348     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  40349     UNICODE_NON_SPACING_MARK, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40350     UNICODE_UNASSIGNED, UNICODE_NON_SPACING_MARK, UNICODE_UNASSIGNED,
  40351     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  40352     UNICODE_UNASSIGNED, UNICODE_NON_SPACING_MARK,
  40353     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  40354     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  40355     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  40356     UNICODE_OTHER_LETTER, UNICODE_NON_SPACING_MARK, UNICODE_UNASSIGNED,
  40357     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40358     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40359     UNICODE_UNASSIGNED, UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  40360     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  40361     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  40362     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  40363     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER, UNICODE_UNASSIGNED,
  40364     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40365     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40366     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40367     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40368     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40369     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40370     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40371     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40372     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40373     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40374     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40375     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40376     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40377     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40378     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40379     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40380     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40381     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40382     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40383     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40384     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40385     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40386     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40387     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40388     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40389     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40390     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40391     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40392     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40393     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40394     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40395     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40396     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40397     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40398     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40399     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40400     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40401     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40402     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40403     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40404     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40405     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40406     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40407     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40408     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40409     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40410     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40411     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40412     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40413     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40414     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40415     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40416     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40417     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40418     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED
  40419   },
  40420   { /* page 291, index 87 */
  40421     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40422     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40423     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40424     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40425     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40426     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40427     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40428     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40429     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40430     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40431     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40432     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40433     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40434     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40435     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40436     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40437     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40438     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40439     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40440     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40441     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40442     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40443     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40444     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40445     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40446     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40447     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40448     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40449     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40450     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40451     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40452     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40453     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40454     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40455     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40456     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40457     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40458     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40459     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40460     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40461     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40462     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40463     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40464     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40465     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40466     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40467     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40468     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40469     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40470     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40471     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40472     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40473     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40474     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40475     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40476     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40477     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40478     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40479     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40480     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40481     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40482     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40483     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40484     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40485     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40486     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40487     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40488     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40489     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40490     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40491     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40492     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40493     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40494     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40495     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40496     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40497     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40498     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40499     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40500     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40501     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40502     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40503     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40504     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40505     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40506     UNICODE_UNASSIGNED
  40507   },
  40508   { /* page 292, index 88 */
  40509     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  40510     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  40511     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  40512     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  40513     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  40514     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  40515     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  40516     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  40517     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  40518     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  40519     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  40520     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  40521     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  40522     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  40523     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  40524     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  40525     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  40526     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  40527     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  40528     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  40529     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  40530     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  40531     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  40532     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  40533     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  40534     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  40535     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  40536     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  40537     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  40538     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  40539     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  40540     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  40541     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  40542     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  40543     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  40544     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  40545     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  40546     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  40547     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  40548     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  40549     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  40550     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  40551     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  40552     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  40553     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  40554     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  40555     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  40556     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  40557     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  40558     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  40559     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  40560     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  40561     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  40562     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  40563     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  40564     UNICODE_LETTER_NUMBER, UNICODE_UNASSIGNED,
  40565     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  40566     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  40567     UNICODE_OTHER_PUNCTUATION, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40568     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40569     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40570     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40571     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40572     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40573     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40574     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40575     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40576     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40577     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40578     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40579     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40580     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40581     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40582     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40583     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40584     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40585     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40586     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40587     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40588     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40589     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40590     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40591     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40592     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40593     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40594     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40595     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40596     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40597     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40598     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40599     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40600     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40601     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40602     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40603     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40604     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40605     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40606     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40607     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40608     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40609     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40610     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40611     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40612     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40613     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER
  40614   },
  40615   { /* page 293, index 89 */
  40616     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40617     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40618     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40619     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40620     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40621     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40622     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40623     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40624     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40625     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40626     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40627     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40628     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40629     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40630     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40631     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40632     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40633     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40634     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40635     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40636     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40637     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40638     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  40639     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40640     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40641     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40642     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40643     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40644     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40645     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40646     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40647     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40648     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40649     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40650     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40651     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40652     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40653     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40654     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40655     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40656     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40657     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40658     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40659     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40660     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40661     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40662     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40663     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40664     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40665     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40666     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40667     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40668     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40669     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40670     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40671     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40672     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40673     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40674     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40675     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40676     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40677     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40678     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40679     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40680     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40681     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40682     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40683     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40684     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40685     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40686     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40687     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40688     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40689     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40690     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40691     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40692     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40693     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40694     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40695     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40696     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40697     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40698     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40699     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40700     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40701     UNICODE_UNASSIGNED
  40702   },
  40703   { /* page 308, index 90 */
  40704     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40705     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40706     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40707     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40708     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40709     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40710     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40711     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40712     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40713     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40714     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40715     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40716     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40717     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40718     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40719     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  40720     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40721     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40722     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40723     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40724     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40725     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40726     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40727     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40728     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40729     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40730     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40731     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40732     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40733     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40734     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40735     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40736     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40737     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40738     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40739     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40740     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40741     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40742     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40743     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40744     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40745     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40746     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40747     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40748     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40749     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40750     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40751     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40752     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40753     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40754     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40755     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40756     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40757     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40758     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40759     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40760     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40761     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40762     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40763     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40764     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40765     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40766     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40767     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40768     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40769     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40770     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40771     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40772     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40773     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40774     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40775     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40776     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40777     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40778     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40779     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40780     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40781     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40782     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40783     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40784     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40785     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40786     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40787     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40788     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40789     UNICODE_UNASSIGNED
  40790   },
  40791   { /* page 326, index 91 */
  40792     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40793     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40794     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40795     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40796     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40797     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40798     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40799     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40800     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40801     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40802     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40803     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40804     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40805     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40806     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40807     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40808     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40809     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40810     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40811     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40812     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40813     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40814     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40815     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  40816     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40817     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40818     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40819     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40820     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40821     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40822     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40823     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40824     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40825     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40826     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40827     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40828     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40829     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40830     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40831     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40832     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40833     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40834     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40835     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40836     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40837     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40838     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40839     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40840     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40841     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40842     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40843     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40844     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40845     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40846     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40847     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40848     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40849     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40850     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40851     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40852     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40853     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40854     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40855     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40856     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40857     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40858     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40859     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40860     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40861     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40862     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40863     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40864     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40865     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40866     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40867     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40868     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40869     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40870     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40871     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40872     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40873     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40874     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40875     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40876     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40877     UNICODE_UNASSIGNED
  40878   },
  40879   { /* page 362, index 92 */
  40880     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40881     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40882     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40883     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40884     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40885     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40886     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40887     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40888     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40889     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40890     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40891     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40892     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40893     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40894     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40895     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40896     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40897     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40898     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40899     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40900     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40901     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40902     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40903     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40904     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40905     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40906     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40907     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40908     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40909     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40910     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40911     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  40912     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  40913     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  40914     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  40915     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  40916     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER, UNICODE_UNASSIGNED,
  40917     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40918     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  40919     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40920     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40921     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40922     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40923     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40924     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40925     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40926     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40927     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40928     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40929     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40930     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40931     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40932     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40933     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40934     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40935     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40936     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40937     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40938     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40939     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40940     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40941     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40942     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40943     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40944     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40945     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40946     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40947     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40948     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40949     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40950     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40951     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40952     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40953     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40954     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40955     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40956     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40957     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40958     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40959     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40960     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40961     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_NON_SPACING_MARK,
  40962     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  40963     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  40964     UNICODE_OTHER_PUNCTUATION, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40965     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40966     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40967     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED
  40968   },
  40969   { /* page 363, index 93 */
  40970     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40971     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40972     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40973     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40974     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40975     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40976     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40977     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40978     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40979     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40980     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40981     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40982     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40983     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40984     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40985     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40986     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  40987     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  40988     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  40989     UNICODE_NON_SPACING_MARK, UNICODE_OTHER_PUNCTUATION,
  40990     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  40991     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  40992     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  40993     UNICODE_OTHER_SYMBOL, UNICODE_MODIFIER_LETTER,
  40994     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  40995     UNICODE_MODIFIER_LETTER, UNICODE_OTHER_PUNCTUATION,
  40996     UNICODE_OTHER_SYMBOL, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40997     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40998     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40999     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_DECIMAL_NUMBER,
  41000     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  41001     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  41002     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  41003     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  41004     UNICODE_DECIMAL_NUMBER, UNICODE_UNASSIGNED, UNICODE_OTHER_NUMBER,
  41005     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  41006     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  41007     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41008     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41009     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41010     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41011     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41012     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41013     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41014     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41015     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41016     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41017     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41018     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41019     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41020     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41021     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41022     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41023     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41024     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41025     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41026     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41027     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41028     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41029     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41030     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41031     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41032     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41033     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41034     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41035     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41036     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41037     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41038     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41039     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41040     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41041     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41042     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41043     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41044     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41045     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41046     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41047     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41048     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41049     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41050     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41051     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41052     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41053     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41054     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41055     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41056     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41057     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41058     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41059     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED
  41060   },
  41061   { /* page 367, index 94 */
  41062     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41063     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41064     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41065     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41066     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41067     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41068     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41069     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41070     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41071     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41072     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41073     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41074     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41075     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41076     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41077     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41078     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41079     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41080     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41081     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41082     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41083     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41084     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41085     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41086     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41087     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41088     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  41089     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  41090     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  41091     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  41092     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  41093     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  41094     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  41095     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  41096     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  41097     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  41098     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  41099     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  41100     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  41101     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  41102     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  41103     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  41104     UNICODE_SPACING_MARK, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41105     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41106     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41107     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41108     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41109     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_NON_SPACING_MARK,
  41110     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  41111     UNICODE_NON_SPACING_MARK, UNICODE_MODIFIER_LETTER,
  41112     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  41113     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  41114     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  41115     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  41116     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  41117     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  41118     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41119     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41120     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41121     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41122     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41123     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41124     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41125     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41126     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41127     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41128     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41129     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41130     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41131     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41132     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41133     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41134     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41135     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41136     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41137     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41138     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41139     UNICODE_UNASSIGNED, UNICODE_MODIFIER_LETTER,
  41140     UNICODE_MODIFIER_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41141     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41142     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41143     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41144     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41145     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41146     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41147     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41148     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41149     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41150     UNICODE_UNASSIGNED
  41151   },
  41152   { /* page 391, index 95 */
  41153     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41154     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41155     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41156     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41157     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41158     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41159     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41160     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41161     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41162     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41163     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41164     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41165     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41166     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41167     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41168     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41169     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41170     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41171     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41172     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41173     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41174     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41175     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41176     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41177     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41178     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41179     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41180     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41181     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41182     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41183     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41184     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41185     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41186     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41187     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41188     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41189     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41190     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41191     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41192     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41193     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41194     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41195     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41196     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41197     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41198     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41199     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41200     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41201     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41202     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41203     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41204     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41205     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41206     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41207     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41208     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41209     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41210     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41211     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41212     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41213     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41214     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41215     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41216     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41217     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41218     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41219     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41220     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41221     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41222     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41223     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41224     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41225     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41226     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41227     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41228     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41229     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41230     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41231     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41232     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41233     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41234     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41235     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41236     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41237     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41238     UNICODE_UNASSIGNED
  41239   },
  41240   { /* page 394, index 96 */
  41241     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41242     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41243     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41244     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41245     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41246     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41247     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41248     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41249     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41250     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41251     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41252     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41253     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41254     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41255     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41256     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41257     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41258     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41259     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41260     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41261     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41262     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41263     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41264     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41265     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41266     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41267     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41268     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41269     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41270     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41271     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41272     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41273     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41274     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41275     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41276     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41277     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41278     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41279     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41280     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41281     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41282     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41283     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41284     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41285     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41286     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41287     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41288     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41289     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41290     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41291     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41292     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41293     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41294     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41295     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41296     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41297     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41298     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41299     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41300     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41301     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41302     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41303     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41304     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41305     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41306     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41307     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41308     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41309     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41310     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41311     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41312     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41313     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41314     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41315     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41316     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41317     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41318     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41319     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41320     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41321     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41322     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41323     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41324     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41325     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41326     UNICODE_UNASSIGNED
  41327   },
  41328   { /* page 433, index 97 */
  41329     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41330     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41331     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41332     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41333     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41334     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41335     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41336     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41337     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41338     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41339     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41340     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41341     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41342     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41343     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41344     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41345     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41346     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41347     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41348     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41349     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41350     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41351     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41352     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41353     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41354     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41355     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41356     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41357     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41358     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41359     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41360     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41361     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41362     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41363     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41364     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41365     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41366     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41367     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41368     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41369     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41370     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41371     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41372     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41373     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41374     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41375     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41376     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41377     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41378     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41379     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41380     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41381     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41382     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41383     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41384     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41385     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41386     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41387     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41388     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41389     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41390     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41391     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41392     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41393     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41394     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41395     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41396     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41397     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41398     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41399     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41400     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41401     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41402     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41403     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41404     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41405     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41406     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41407     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41408     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41409     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41410     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41411     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41412     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41413     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41414     UNICODE_OTHER_LETTER
  41415   },
  41416   { /* page 434, index 98 */
  41417     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41418     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41419     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41420     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41421     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41422     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41423     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41424     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41425     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41426     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41427     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41428     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41429     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41430     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41431     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41432     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41433     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41434     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41435     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41436     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41437     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41438     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41439     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41440     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41441     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41442     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41443     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41444     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41445     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41446     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41447     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41448     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41449     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41450     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41451     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41452     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41453     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41454     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41455     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41456     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41457     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41458     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41459     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41460     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41461     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41462     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41463     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41464     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41465     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41466     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41467     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41468     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41469     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41470     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41471     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41472     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41473     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41474     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41475     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41476     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41477     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41478     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41479     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41480     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41481     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41482     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41483     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41484     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41485     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41486     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41487     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41488     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41489     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41490     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41491     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41492     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41493     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41494     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41495     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41496     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41497     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41498     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41499     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41500     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41501     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41502     UNICODE_UNASSIGNED
  41503   },
  41504   { /* page 444, index 99 */
  41505     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41506     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41507     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41508     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41509     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41510     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41511     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41512     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41513     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41514     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41515     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41516     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41517     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41518     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41519     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41520     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41521     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41522     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41523     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41524     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41525     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41526     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41527     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41528     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41529     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41530     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41531     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41532     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41533     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41534     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41535     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41536     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41537     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41538     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41539     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41540     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  41541     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41542     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41543     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41544     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41545     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41546     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  41547     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  41548     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41549     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41550     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  41551     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41552     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41553     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41554     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41555     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41556     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41557     UNICODE_OTHER_SYMBOL, UNICODE_NON_SPACING_MARK,
  41558     UNICODE_NON_SPACING_MARK, UNICODE_OTHER_PUNCTUATION,
  41559     UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT,
  41560     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41561     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41562     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41563     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41564     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41565     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41566     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41567     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41568     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41569     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41570     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41571     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41572     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41573     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41574     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41575     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41576     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41577     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41578     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41579     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41580     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41581     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41582     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41583     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41584     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41585     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41586     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41587     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41588     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41589     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41590     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED
  41591   },
  41592   { /* page 464, index 100 */
  41593     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41594     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41595     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41596     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41597     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41598     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41599     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41600     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41601     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41602     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41603     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41604     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41605     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41606     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41607     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41608     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41609     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41610     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41611     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41612     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41613     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41614     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41615     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41616     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41617     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41618     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41619     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41620     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41621     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41622     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41623     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41624     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41625     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41626     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41627     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41628     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41629     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41630     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41631     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41632     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41633     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41634     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41635     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41636     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41637     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41638     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41639     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41640     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41641     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41642     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41643     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41644     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41645     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41646     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41647     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41648     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41649     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41650     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41651     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41652     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41653     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41654     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41655     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41656     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41657     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41658     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41659     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41660     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41661     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41662     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41663     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41664     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41665     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41666     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41667     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41668     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41669     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41670     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41671     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41672     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41673     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41674     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41675     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41676     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41677     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41678     UNICODE_UNASSIGNED
  41679   },
  41680   { /* page 465, index 101 */
  41681     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41682     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41683     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41684     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41685     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41686     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41687     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41688     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41689     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41690     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41691     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41692     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41693     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41694     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_SYMBOL,
  41695     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41696     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41697     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41698     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41699     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41700     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41701     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41702     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41703     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41704     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41705     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41706     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41707     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41708     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41709     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41710     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41711     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41712     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41713     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41714     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_SPACING_MARK,
  41715     UNICODE_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  41716     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  41717     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41718     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  41719     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  41720     UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT,
  41721     UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT,
  41722     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  41723     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  41724     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  41725     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  41726     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41727     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  41728     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  41729     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  41730     UNICODE_NON_SPACING_MARK, UNICODE_OTHER_SYMBOL,
  41731     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41732     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41733     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41734     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41735     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41736     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41737     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41738     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41739     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41740     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41741     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  41742     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  41743     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41744     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41745     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41746     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41747     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41748     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41749     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41750     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41751     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41752     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41753     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41754     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41755     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41756     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41757     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41758     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41759     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41760     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41761     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41762     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_UNASSIGNED,
  41763     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41764     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41765     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41766     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41767     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41768     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41769     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41770     UNICODE_UNASSIGNED
  41771   },
  41772   { /* page 466, index 102 */
  41773     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41774     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41775     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41776     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41777     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41778     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41779     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41780     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41781     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41782     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41783     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41784     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41785     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41786     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41787     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41788     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41789     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41790     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41791     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41792     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41793     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41794     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41795     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  41796     UNICODE_NON_SPACING_MARK, UNICODE_OTHER_SYMBOL, UNICODE_UNASSIGNED,
  41797     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41798     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41799     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41800     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41801     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41802     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41803     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41804     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41805     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41806     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41807     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41808     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41809     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41810     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41811     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41812     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41813     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41814     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41815     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41816     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41817     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41818     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41819     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41820     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41821     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41822     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41823     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41824     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41825     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41826     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41827     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41828     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41829     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41830     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41831     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41832     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41833     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41834     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41835     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41836     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41837     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41838     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41839     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41840     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41841     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41842     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41843     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41844     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41845     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41846     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41847     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41848     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41849     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41850     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41851     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41852     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41853     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41854     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41855     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41856     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41857     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41858     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED
  41859   },
  41860   { /* page 467, index 103 */
  41861     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41862     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41863     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41864     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41865     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41866     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41867     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41868     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41869     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41870     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41871     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41872     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41873     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41874     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41875     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41876     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41877     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41878     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41879     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41880     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41881     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41882     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41883     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41884     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41885     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41886     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41887     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41888     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41889     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41890     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41891     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41892     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41893     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  41894     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  41895     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  41896     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  41897     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  41898     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  41899     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41900     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41901     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41902     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41903     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41904     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41905     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41906     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41907     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41908     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41909     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41910     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41911     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41912     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41913     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41914     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41915     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41916     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41917     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41918     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41919     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41920     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41921     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41922     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41923     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41924     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41925     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41926     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41927     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41928     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41929     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41930     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41931     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41932     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41933     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41934     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41935     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41936     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41937     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41938     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41939     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41940     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41941     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41942     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41943     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41944     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41945     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41946     UNICODE_UNASSIGNED
  41947   },
  41948   { /* page 468, index 104 */
  41949     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  41950     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  41951     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  41952     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  41953     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  41954     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  41955     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  41956     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  41957     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  41958     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  41959     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  41960     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  41961     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  41962     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  41963     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  41964     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  41965     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  41966     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  41967     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  41968     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  41969     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  41970     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  41971     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  41972     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  41973     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  41974     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  41975     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  41976     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  41977     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  41978     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  41979     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  41980     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  41981     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  41982     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  41983     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  41984     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  41985     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  41986     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  41987     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  41988     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  41989     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  41990     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  41991     UNICODE_LOWERCASE_LETTER, UNICODE_UNASSIGNED,
  41992     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  41993     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  41994     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  41995     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  41996     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  41997     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  41998     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  41999     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42000     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42001     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42002     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42003     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42004     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42005     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42006     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42007     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42008     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42009     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42010     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42011     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42012     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42013     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42014     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42015     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42016     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42017     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42018     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42019     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42020     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42021     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42022     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42023     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42024     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42025     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42026     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42027     UNICODE_UPPERCASE_LETTER, UNICODE_UNASSIGNED,
  42028     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42029     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UPPERCASE_LETTER,
  42030     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UPPERCASE_LETTER,
  42031     UNICODE_UPPERCASE_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42032     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42033     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42034     UNICODE_UNASSIGNED, UNICODE_UPPERCASE_LETTER,
  42035     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42036     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42037     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42038     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42039     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42040     UNICODE_LOWERCASE_LETTER, UNICODE_UNASSIGNED,
  42041     UNICODE_LOWERCASE_LETTER, UNICODE_UNASSIGNED,
  42042     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42043     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42044     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42045     UNICODE_LOWERCASE_LETTER, UNICODE_UNASSIGNED,
  42046     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42047     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42048     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42049     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42050     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42051     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42052     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42053     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42054     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42055     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42056     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42057     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42058     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42059     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42060     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42061     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42062     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42063     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42064     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42065     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42066     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42067     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42068     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42069     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42070     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42071     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42072     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42073     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42074     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42075     UNICODE_LOWERCASE_LETTER
  42076   },
  42077   { /* page 469, index 105 */
  42078     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42079     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42080     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42081     UNICODE_UNASSIGNED, UNICODE_UPPERCASE_LETTER,
  42082     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42083     UNICODE_UPPERCASE_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42084     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42085     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42086     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42087     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42088     UNICODE_UNASSIGNED, UNICODE_UPPERCASE_LETTER,
  42089     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42090     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42091     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42092     UNICODE_UNASSIGNED, UNICODE_LOWERCASE_LETTER,
  42093     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42094     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42095     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42096     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42097     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42098     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42099     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42100     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42101     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42102     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42103     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42104     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42105     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42106     UNICODE_UPPERCASE_LETTER, UNICODE_UNASSIGNED,
  42107     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42108     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42109     UNICODE_UNASSIGNED, UNICODE_UPPERCASE_LETTER,
  42110     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42111     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42112     UNICODE_UNASSIGNED, UNICODE_UPPERCASE_LETTER, UNICODE_UNASSIGNED,
  42113     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UPPERCASE_LETTER,
  42114     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42115     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42116     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42117     UNICODE_UNASSIGNED, UNICODE_LOWERCASE_LETTER,
  42118     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42119     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42120     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42121     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42122     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42123     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42124     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42125     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42126     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42127     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42128     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42129     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42130     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42131     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42132     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42133     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42134     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42135     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42136     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42137     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42138     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42139     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42140     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42141     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42142     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42143     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42144     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42145     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42146     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42147     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42148     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42149     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42150     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42151     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42152     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42153     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42154     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42155     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42156     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42157     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42158     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42159     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42160     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42161     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42162     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42163     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42164     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42165     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42166     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42167     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42168     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42169     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42170     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42171     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42172     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42173     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42174     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42175     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42176     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42177     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42178     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42179     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42180     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42181     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42182     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42183     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42184     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42185     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42186     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42187     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42188     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42189     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42190     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42191     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42192     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42193     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42194     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42195     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42196     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42197     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42198     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42199     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42200     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42201     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42202     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42203     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42204     UNICODE_LOWERCASE_LETTER
  42205   },
  42206   { /* page 470, index 106 */
  42207     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42208     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42209     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42210     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42211     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42212     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42213     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42214     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42215     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42216     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42217     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42218     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42219     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42220     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42221     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42222     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42223     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42224     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42225     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42226     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42227     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42228     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42229     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42230     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42231     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42232     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42233     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42234     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42235     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42236     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42237     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42238     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42239     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42240     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42241     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42242     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42243     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42244     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42245     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42246     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42247     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42248     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42249     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42250     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42251     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42252     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42253     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42254     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42255     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42256     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42257     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42258     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42259     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42260     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42261     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42262     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42263     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42264     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42265     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42266     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42267     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42268     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42269     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42270     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42271     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42272     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42273     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42274     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42275     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42276     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42277     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42278     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42279     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42280     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42281     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42282     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42283     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42284     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42285     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42286     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42287     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42288     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42289     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42290     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UPPERCASE_LETTER,
  42291     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42292     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42293     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42294     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42295     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42296     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42297     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42298     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42299     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42300     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42301     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42302     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42303     UNICODE_MATH_SYMBOL, UNICODE_LOWERCASE_LETTER,
  42304     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42305     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42306     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42307     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42308     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42309     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42310     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42311     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42312     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42313     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42314     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42315     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42316     UNICODE_MATH_SYMBOL, UNICODE_LOWERCASE_LETTER,
  42317     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42318     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42319     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42320     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42321     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42322     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42323     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42324     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42325     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42326     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42327     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42328     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42329     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42330     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42331     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42332     UNICODE_MATH_SYMBOL, UNICODE_LOWERCASE_LETTER,
  42333     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42334     UNICODE_LOWERCASE_LETTER
  42335   },
  42336   { /* page 471, index 107 */
  42337     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42338     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42339     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42340     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42341     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42342     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42343     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42344     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42345     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42346     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42347     UNICODE_LOWERCASE_LETTER, UNICODE_MATH_SYMBOL,
  42348     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42349     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42350     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42351     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42352     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42353     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42354     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42355     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42356     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42357     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42358     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42359     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42360     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42361     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42362     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42363     UNICODE_UPPERCASE_LETTER, UNICODE_MATH_SYMBOL,
  42364     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42365     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42366     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42367     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42368     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42369     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42370     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42371     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42372     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42373     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42374     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42375     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42376     UNICODE_LOWERCASE_LETTER, UNICODE_MATH_SYMBOL,
  42377     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42378     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42379     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42380     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42381     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42382     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42383     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42384     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42385     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42386     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42387     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42388     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42389     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42390     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42391     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42392     UNICODE_UPPERCASE_LETTER, UNICODE_MATH_SYMBOL,
  42393     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42394     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42395     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42396     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42397     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42398     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42399     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42400     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42401     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42402     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42403     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42404     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42405     UNICODE_LOWERCASE_LETTER, UNICODE_MATH_SYMBOL,
  42406     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42407     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42408     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42409     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42410     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42411     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42412     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42413     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42414     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42415     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42416     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42417     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42418     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42419     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42420     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42421     UNICODE_UPPERCASE_LETTER, UNICODE_MATH_SYMBOL,
  42422     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42423     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42424     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42425     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42426     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42427     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42428     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42429     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42430     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42431     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42432     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42433     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42434     UNICODE_LOWERCASE_LETTER, UNICODE_MATH_SYMBOL,
  42435     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42436     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42437     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42438     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42439     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_DECIMAL_NUMBER,
  42440     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  42441     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  42442     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  42443     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  42444     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  42445     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  42446     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  42447     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  42448     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  42449     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  42450     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  42451     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  42452     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  42453     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  42454     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  42455     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  42456     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  42457     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  42458     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  42459     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  42460     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  42461     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  42462     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  42463     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  42464     UNICODE_DECIMAL_NUMBER
  42465   },
  42466   { /* page 474, index 108 */
  42467     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42468     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42469     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42470     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42471     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42472     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42473     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42474     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42475     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42476     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42477     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42478     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42479     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42480     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42481     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42482     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42483     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42484     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42485     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42486     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42487     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42488     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42489     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42490     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42491     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42492     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42493     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42494     UNICODE_NON_SPACING_MARK, UNICODE_OTHER_SYMBOL,
  42495     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42496     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42497     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42498     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42499     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42500     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42501     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42502     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42503     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42504     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42505     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42506     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42507     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42508     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42509     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42510     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42511     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42512     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42513     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42514     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42515     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42516     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42517     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42518     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42519     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42520     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42521     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42522     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42523     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42524     UNICODE_NON_SPACING_MARK, UNICODE_OTHER_SYMBOL,
  42525     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42526     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42527     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42528     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42529     UNICODE_OTHER_SYMBOL, UNICODE_NON_SPACING_MARK,
  42530     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42531     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  42532     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  42533     UNICODE_OTHER_PUNCTUATION, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42534     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42535     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42536     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42537     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42538     UNICODE_UNASSIGNED, UNICODE_NON_SPACING_MARK,
  42539     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42540     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42541     UNICODE_UNASSIGNED, UNICODE_NON_SPACING_MARK,
  42542     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42543     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42544     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42545     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42546     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42547     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42548     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42549     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42550     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42551     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42552     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42553     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42554     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42555     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42556     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42557     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42558     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42559     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42560     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42561     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42562     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42563     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42564     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42565     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42566     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42567     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42568     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42569     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42570     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42571     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42572     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42573     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42574     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42575     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED
  42576   },
  42577   { /* page 480, index 109 */
  42578     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42579     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42580     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42581     UNICODE_NON_SPACING_MARK, UNICODE_UNASSIGNED,
  42582     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42583     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42584     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42585     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42586     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42587     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42588     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42589     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42590     UNICODE_NON_SPACING_MARK, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42591     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42592     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42593     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42594     UNICODE_NON_SPACING_MARK, UNICODE_UNASSIGNED,
  42595     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42596     UNICODE_UNASSIGNED, UNICODE_NON_SPACING_MARK,
  42597     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42598     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42599     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42600     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42601     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42602     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42603     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42604     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42605     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42606     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42607     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42608     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42609     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42610     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42611     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42612     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42613     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42614     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42615     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42616     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42617     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42618     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42619     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42620     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42621     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42622     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42623     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42624     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42625     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42626     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42627     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42628     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42629     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42630     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42631     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42632     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42633     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42634     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42635     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42636     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42637     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42638     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42639     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42640     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42641     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42642     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42643     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42644     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42645     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42646     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42647     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42648     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42649     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42650     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42651     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42652     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42653     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42654     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42655     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42656     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42657     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42658     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42659     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42660     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42661     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42662     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42663     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42664     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42665     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42666     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42667     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42668     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42669     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED
  42670   },
  42671   { /* page 488, index 110 */
  42672     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42673     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42674     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42675     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42676     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42677     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42678     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42679     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42680     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42681     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42682     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42683     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42684     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42685     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42686     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42687     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42688     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42689     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42690     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42691     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42692     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42693     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42694     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42695     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42696     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42697     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42698     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42699     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42700     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42701     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42702     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42703     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42704     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42705     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42706     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42707     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42708     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42709     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42710     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42711     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42712     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42713     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42714     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42715     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42716     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42717     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42718     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42719     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42720     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42721     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42722     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42723     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42724     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42725     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42726     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42727     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42728     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42729     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42730     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42731     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42732     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42733     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42734     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42735     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42736     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42737     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  42738     UNICODE_UNASSIGNED, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  42739     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  42740     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  42741     UNICODE_OTHER_NUMBER, UNICODE_NON_SPACING_MARK,
  42742     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42743     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42744     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42745     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42746     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42747     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42748     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42749     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42750     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42751     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42752     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42753     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42754     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42755     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42756     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42757     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42758     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED
  42759   },
  42760   { /* page 489, index 111 */
  42761     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42762     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42763     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42764     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42765     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42766     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42767     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42768     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42769     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42770     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42771     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42772     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42773     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42774     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42775     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42776     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42777     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42778     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42779     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42780     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42781     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42782     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42783     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42784     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42785     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42786     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42787     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42788     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42789     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42790     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42791     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42792     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42793     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42794     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42795     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42796     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42797     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42798     UNICODE_NON_SPACING_MARK, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42799     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42800     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  42801     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  42802     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  42803     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  42804     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER, UNICODE_UNASSIGNED,
  42805     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42806     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  42807     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42808     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42809     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42810     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42811     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42812     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42813     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42814     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42815     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42816     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42817     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42818     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42819     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42820     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42821     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42822     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42823     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42824     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42825     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42826     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42827     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42828     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42829     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42830     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42831     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42832     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42833     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42834     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42835     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42836     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42837     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42838     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42839     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42840     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42841     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42842     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42843     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42844     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42845     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42846     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42847     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42848     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42849     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42850     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42851     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42852     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42853     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42854     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42855     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42856     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42857     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42858     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42859     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42860     UNICODE_UNASSIGNED
  42861   },
  42862   { /* page 494, index 112 */
  42863     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42864     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  42865     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42866     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42867     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42868     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42869     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42870     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42871     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42872     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42873     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  42874     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  42875     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42876     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  42877     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42878     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42879     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42880     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42881     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  42882     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  42883     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42884     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42885     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42886     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  42887     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  42888     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  42889     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  42890     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  42891     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42892     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  42893     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  42894     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  42895     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42896     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  42897     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42898     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  42899     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42900     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42901     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  42902     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42903     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42904     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  42905     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  42906     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42907     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42908     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42909     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42910     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42911     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42912     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42913     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42914     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42915     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42916     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  42917     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  42918     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42919     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  42920     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42921     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42922     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42923     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42924     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42925     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  42926     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42927     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42928     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42929     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42930     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42931     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42932     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42933     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42934     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42935     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42936     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42937     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42938     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42939     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42940     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42941     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42942     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42943     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_UNASSIGNED,
  42944     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42945     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42946     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42947     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42948     UNICODE_UNASSIGNED
  42949   },
  42950   { /* page 496, index 113 */
  42951     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42952     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42953     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42954     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42955     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42956     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42957     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42958     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42959     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42960     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42961     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42962     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42963     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42964     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42965     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_UNASSIGNED,
  42966     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42967     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42968     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42969     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42970     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42971     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42972     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42973     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42974     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42975     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42976     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42977     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42978     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42979     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42980     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42981     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42982     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42983     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42984     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42985     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42986     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42987     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42988     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42989     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42990     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42991     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42992     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42993     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42994     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42995     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42996     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42997     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42998     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42999     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43000     UNICODE_OTHER_SYMBOL, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43001     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43002     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43003     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43004     UNICODE_UNASSIGNED, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43005     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43006     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43007     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43008     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43009     UNICODE_OTHER_SYMBOL, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43010     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43011     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43012     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43013     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43014     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43015     UNICODE_UNASSIGNED, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43016     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43017     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43018     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43019     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43020     UNICODE_OTHER_SYMBOL, UNICODE_UNASSIGNED, UNICODE_OTHER_SYMBOL,
  43021     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43022     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43023     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43024     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43025     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43026     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43027     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43028     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43029     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43030     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43031     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43032     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43033     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43034     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43035     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43036     UNICODE_UNASSIGNED
  43037   },
  43038   { /* page 497, index 114 */
  43039     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  43040     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  43041     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  43042     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  43043     UNICODE_OTHER_NUMBER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43044     UNICODE_UNASSIGNED, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43045     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43046     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43047     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43048     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43049     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43050     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43051     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43052     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43053     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43054     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_UNASSIGNED,
  43055     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43056     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43057     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43058     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43059     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43060     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43061     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43062     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43063     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43064     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43065     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43066     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43067     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43068     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43069     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43070     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43071     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43072     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43073     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43074     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43075     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43076     UNICODE_UNASSIGNED, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43077     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43078     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43079     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43080     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43081     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43082     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43083     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43084     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43085     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43086     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43087     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43088     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43089     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43090     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43091     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43092     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43093     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43094     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43095     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43096     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_UNASSIGNED,
  43097     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43098     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43099     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43100     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43101     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43102     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43103     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43104     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43105     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43106     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43107     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43108     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43109     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43110     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43111     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43112     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43113     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43114     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43115     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_SYMBOL,
  43116     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43117     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43118     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43119     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43120     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43121     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43122     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43123     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43124     UNICODE_OTHER_SYMBOL
  43125   },
  43126   { /* page 498, index 115 */
  43127     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43128     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43129     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43130     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43131     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43132     UNICODE_UNASSIGNED, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43133     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43134     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43135     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43136     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43137     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43138     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43139     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43140     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43141     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43142     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43143     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43144     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43145     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43146     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43147     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43148     UNICODE_UNASSIGNED, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43149     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43150     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43151     UNICODE_OTHER_SYMBOL, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43152     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43153     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_SYMBOL,
  43154     UNICODE_OTHER_SYMBOL, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43155     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43156     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43157     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43158     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43159     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43160     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43161     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43162     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43163     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43164     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43165     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43166     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43167     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43168     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43169     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43170     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43171     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43172     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43173     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43174     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43175     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43176     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43177     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43178     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43179     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43180     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43181     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43182     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43183     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43184     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43185     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43186     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43187     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43188     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43189     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43190     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43191     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43192     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43193     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43194     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43195     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43196     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43197     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43198     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43199     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43200     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43201     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43202     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43203     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43204     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43205     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43206     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43207     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43208     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43209     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43210     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43211     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43212     UNICODE_UNASSIGNED
  43213   },
  43214   { /* page 499, index 116 */
  43215     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43216     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43217     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43218     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43219     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43220     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43221     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43222     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43223     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43224     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43225     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43226     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43227     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43228     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43229     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43230     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43231     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43232     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43233     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43234     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43235     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43236     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43237     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43238     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43239     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43240     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43241     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43242     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43243     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43244     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43245     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43246     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43247     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43248     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43249     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43250     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43251     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43252     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43253     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43254     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43255     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43256     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43257     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43258     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43259     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43260     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43261     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43262     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43263     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43264     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43265     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43266     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43267     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43268     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43269     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43270     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43271     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43272     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43273     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43274     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43275     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43276     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43277     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43278     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43279     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43280     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43281     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43282     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43283     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43284     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43285     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43286     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43287     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43288     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43289     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43290     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43291     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43292     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43293     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43294     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43295     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43296     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43297     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43298     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43299     UNICODE_MODIFIER_SYMBOL, UNICODE_MODIFIER_SYMBOL,
  43300     UNICODE_MODIFIER_SYMBOL, UNICODE_MODIFIER_SYMBOL,
  43301     UNICODE_MODIFIER_SYMBOL
  43302   },
  43303   { /* page 502, index 117 */
  43304     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43305     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43306     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43307     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43308     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43309     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43310     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43311     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43312     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43313     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43314     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43315     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43316     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43317     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43318     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43319     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43320     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43321     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43322     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43323     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43324     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43325     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43326     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43327     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43328     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43329     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43330     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43331     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43332     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43333     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43334     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43335     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43336     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43337     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43338     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43339     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43340     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43341     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43342     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43343     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43344     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43345     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43346     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43347     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43348     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43349     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43350     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43351     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43352     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43353     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43354     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43355     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43356     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43357     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43358     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43359     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43360     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43361     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43362     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43363     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43364     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43365     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43366     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43367     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43368     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43369     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43370     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43371     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43372     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43373     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43374     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43375     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43376     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43377     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43378     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_SYMBOL,
  43379     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43380     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43381     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43382     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43383     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43384     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43385     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43386     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43387     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43388     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43389     UNICODE_UNASSIGNED
  43390   },
  43391   { /* page 503, index 118 */
  43392     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43393     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43394     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43395     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43396     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43397     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43398     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43399     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43400     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43401     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43402     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43403     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43404     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43405     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43406     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43407     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43408     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43409     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43410     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43411     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43412     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43413     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43414     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43415     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43416     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43417     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43418     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43419     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43420     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43421     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43422     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43423     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43424     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43425     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43426     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43427     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43428     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43429     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43430     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_UNASSIGNED,
  43431     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43432     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43433     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43434     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_SYMBOL,
  43435     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43436     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43437     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43438     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43439     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43440     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43441     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43442     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43443     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43444     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43445     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43446     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43447     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43448     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43449     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43450     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43451     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43452     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43453     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43454     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43455     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43456     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43457     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43458     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43459     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43460     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43461     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43462     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43463     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43464     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43465     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43466     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43467     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43468     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43469     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43470     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43471     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43472     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43473     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43474     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43475     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43476     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43477     UNICODE_UNASSIGNED
  43478   },
  43479   { /* page 504, index 119 */
  43480     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43481     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43482     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43483     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43484     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43485     UNICODE_UNASSIGNED, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43486     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43487     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43488     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43489     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43490     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43491     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43492     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43493     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43494     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43495     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43496     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43497     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43498     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43499     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43500     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43501     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43502     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43503     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43504     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43505     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43506     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_SYMBOL,
  43507     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43508     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43509     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43510     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43511     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43512     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43513     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43514     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43515     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43516     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43517     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43518     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43519     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43520     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43521     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43522     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43523     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43524     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43525     UNICODE_OTHER_SYMBOL, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43526     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43527     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43528     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43529     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43530     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43531     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43532     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43533     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43534     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43535     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43536     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43537     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43538     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43539     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43540     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43541     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43542     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43543     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43544     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43545     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43546     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43547     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43548     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43549     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43550     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43551     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43552     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43553     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43554     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43555     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43556     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43557     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43558     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43559     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43560     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43561     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43562     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43563     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43564     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43565     UNICODE_UNASSIGNED
  43566   },
  43567   { /* page 505, index 120 */
  43568     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43569     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43570     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43571     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43572     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43573     UNICODE_UNASSIGNED, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43574     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43575     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43576     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43577     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43578     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43579     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43580     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43581     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43582     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43583     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43584     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43585     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43586     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43587     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43588     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43589     UNICODE_UNASSIGNED, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43590     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43591     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43592     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43593     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_UNASSIGNED,
  43594     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_SYMBOL,
  43595     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43596     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43597     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43598     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43599     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43600     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43601     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43602     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43603     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43604     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43605     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43606     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43607     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43608     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43609     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43610     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_SYMBOL,
  43611     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43612     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43613     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43614     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43615     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43616     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43617     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43618     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_UNASSIGNED,
  43619     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43620     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43621     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43622     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43623     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43624     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43625     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43626     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43627     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43628     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43629     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43630     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43631     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43632     UNICODE_OTHER_SYMBOL, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43633     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43634     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43635     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43636     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43637     UNICODE_UNASSIGNED, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43638     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43639     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43640     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43641     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43642     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43643     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43644     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43645     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43646     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43647     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43648     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43649     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43650     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43651     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43652     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43653     UNICODE_UNASSIGNED
  43654   },
  43655   { /* page 678, index 121 */
  43656     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43657     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43658     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43659     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43660     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43661     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43662     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43663     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43664     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43665     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43666     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43667     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43668     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43669     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43670     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43671     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43672     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43673     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43674     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43675     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43676     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43677     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43678     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43679     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43680     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43681     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43682     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43683     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43684     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43685     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43686     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43687     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43688     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43689     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43690     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43691     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43692     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43693     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43694     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43695     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43696     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43697     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43698     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43699     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43700     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43701     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43702     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43703     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43704     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43705     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43706     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43707     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43708     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43709     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43710     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43711     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43712     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43713     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43714     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43715     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43716     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43717     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43718     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43719     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43720     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43721     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43722     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43723     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43724     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43725     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43726     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43727     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  43728     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43729     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43730     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43731     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43732     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43733     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43734     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43735     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43736     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43737     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43738     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43739     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43740     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43741     UNICODE_UNASSIGNED
  43742   },
  43743   { /* page 695, index 122 */
  43744     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43745     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43746     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43747     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43748     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43749     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43750     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43751     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43752     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43753     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43754     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43755     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43756     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43757     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43758     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43759     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43760     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43761     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  43762     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43763     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43764     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43765     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43766     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43767     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43768     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43769     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43770     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43771     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43772     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43773     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43774     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43775     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43776     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43777     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43778     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43779     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43780     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43781     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43782     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43783     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43784     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43785     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43786     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43787     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43788     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43789     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43790     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43791     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43792     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43793     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43794     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43795     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43796     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43797     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43798     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43799     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43800     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43801     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43802     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43803     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43804     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43805     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43806     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43807     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43808     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43809     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43810     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43811     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43812     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43813     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43814     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43815     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43816     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43817     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43818     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43819     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43820     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43821     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43822     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43823     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43824     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43825     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43826     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43827     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43828     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43829     UNICODE_OTHER_LETTER
  43830   },
  43831   { /* page 696, index 123 */
  43832     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43833     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43834     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43835     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43836     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43837     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43838     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43839     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43840     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43841     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43842     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  43843     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43844     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43845     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43846     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43847     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43848     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43849     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43850     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43851     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43852     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43853     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43854     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43855     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43856     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43857     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43858     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43859     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43860     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43861     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43862     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43863     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43864     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43865     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43866     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43867     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43868     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43869     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43870     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43871     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43872     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43873     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43874     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43875     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43876     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43877     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43878     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43879     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43880     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43881     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43882     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43883     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43884     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43885     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43886     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43887     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43888     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43889     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43890     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43891     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43892     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43893     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43894     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43895     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43896     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43897     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43898     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43899     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43900     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43901     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43902     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43903     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43904     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43905     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43906     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43907     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43908     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43909     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43910     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43911     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43912     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43913     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43914     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43915     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43916     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43917     UNICODE_OTHER_LETTER
  43918   },
  43919   { /* page 718, index 124 */
  43920     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43921     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43922     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43923     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43924     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43925     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43926     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43927     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43928     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43929     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43930     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43931     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43932     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43933     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43934     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43935     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43936     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43937     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43938     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43939     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43940     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43941     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43942     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43943     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43944     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43945     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43946     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43947     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43948     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43949     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43950     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43951     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43952     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43953     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43954     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43955     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43956     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43957     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43958     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43959     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43960     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43961     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43962     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43963     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43964     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43965     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43966     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43967     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43968     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43969     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43970     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43971     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43972     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43973     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43974     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43975     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43976     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43977     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43978     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  43979     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43980     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43981     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43982     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43983     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43984     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43985     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43986     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43987     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43988     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43989     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43990     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43991     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43992     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43993     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43994     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43995     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43996     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43997     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43998     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43999     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44000     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44001     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44002     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44003     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44004     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44005     UNICODE_OTHER_LETTER
  44006   },
  44007   { /* page 747, index 125 */
  44008     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44009     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44010     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44011     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44012     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44013     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44014     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44015     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44016     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44017     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44018     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44019     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44020     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44021     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44022     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44023     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44024     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44025     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44026     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44027     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44028     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44029     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44030     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44031     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44032     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44033     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44034     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44035     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44036     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44037     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44038     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44039     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44040     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44041     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44042     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44043     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44044     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44045     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44046     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44047     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44048     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44049     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44050     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44051     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44052     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44053     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44054     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44055     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44056     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44057     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44058     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44059     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44060     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44061     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44062     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44063     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44064     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44065     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44066     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44067     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44068     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44069     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44070     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44071     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44072     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44073     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44074     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44075     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44076     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44077     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44078     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44079     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44080     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44081     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44082     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44083     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44084     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44085     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44086     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44087     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44088     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44089     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44090     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44091     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44092     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44093     UNICODE_UNASSIGNED
  44094   },
  44095   { /* page 762, index 126 */
  44096     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44097     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44098     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44099     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44100     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44101     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44102     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44103     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44104     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44105     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44106     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44107     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44108     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44109     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44110     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44111     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44112     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44113     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44114     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44115     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44116     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44117     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44118     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44119     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44120     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44121     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44122     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44123     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44124     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44125     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44126     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44127     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44128     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44129     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44130     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44131     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44132     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44133     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44134     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44135     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44136     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44137     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44138     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44139     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44140     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44141     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44142     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44143     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44144     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44145     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44146     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44147     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44148     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44149     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44150     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44151     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44152     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44153     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44154     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44155     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44156     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44157     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44158     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44159     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44160     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44161     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44162     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44163     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44164     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44165     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44166     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44167     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44168     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44169     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44170     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44171     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44172     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44173     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44174     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44175     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44176     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44177     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44178     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44179     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44180     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44181     UNICODE_UNASSIGNED
  44182   },
  44183   { /* page 3584, index 127 */
  44184     UNICODE_UNASSIGNED, UNICODE_FORMAT, UNICODE_UNASSIGNED,
  44185     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44186     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44187     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44188     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44189     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44190     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44191     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44192     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44193     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44194     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_FORMAT,
  44195     UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT,
  44196     UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT,
  44197     UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT,
  44198     UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT,
  44199     UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT,
  44200     UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT,
  44201     UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT,
  44202     UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT,
  44203     UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT,
  44204     UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT,
  44205     UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT,
  44206     UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT,
  44207     UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT,
  44208     UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT,
  44209     UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT,
  44210     UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT,
  44211     UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT,
  44212     UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT,
  44213     UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT,
  44214     UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT,
  44215     UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT,
  44216     UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT,
  44217     UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT,
  44218     UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT,
  44219     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44220     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44221     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44222     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44223     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44224     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44225     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44226     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44227     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44228     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44229     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44230     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44231     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44232     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44233     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44234     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44235     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44236     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44237     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44238     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44239     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44240     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44241     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44242     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44243     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44244     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44245     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44246     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44247     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44248     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44249     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44250     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44251     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44252     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44253     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44254     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44255     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44256     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44257     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44258     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44259     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44260     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44261     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED
  44262   },
  44263   { /* page 3585, index 128 */
  44264     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44265     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44266     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44267     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44268     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44269     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44270     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44271     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44272     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44273     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44274     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44275     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44276     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44277     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44278     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44279     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44280     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44281     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44282     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44283     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44284     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44285     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44286     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44287     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44288     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44289     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44290     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44291     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44292     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44293     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44294     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44295     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44296     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44297     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44298     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44299     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44300     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44301     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44302     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44303     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44304     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44305     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44306     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44307     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44308     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44309     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44310     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44311     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44312     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44313     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44314     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44315     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44316     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44317     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44318     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44319     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44320     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44321     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44322     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44323     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44324     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44325     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44326     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44327     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44328     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44329     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44330     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44331     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44332     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44333     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44334     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44335     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44336     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44337     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44338     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44339     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44340     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44341     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44342     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44343     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44344     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44345     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44346     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44347     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44348     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44349     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44350     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44351     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44352     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44353     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44354     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44355     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44356     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44357     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44358     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44359     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44360     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44361     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44362     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44363     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44364     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44365     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44366     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44367     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44368     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44369     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44370     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44371     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44372     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44373     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44374     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44375     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44376     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44377     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44378     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44379     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44380     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44381     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44382     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44383     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44384     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44385     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44386     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44387     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44388     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44389     UNICODE_UNASSIGNED
  44390   },
  44391   { /* page 4095, index 129 */
  44392     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44393     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44394     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44395     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44396     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44397     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44398     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44399     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44400     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44401     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44402     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44403     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44404     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44405     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44406     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44407     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44408     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44409     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44410     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44411     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44412     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44413     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44414     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44415     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44416     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44417     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44418     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44419     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44420     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44421     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44422     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44423     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44424     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44425     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44426     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44427     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44428     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44429     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44430     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44431     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44432     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44433     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44434     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44435     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44436     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44437     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44438     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44439     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44440     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44441     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44442     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44443     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44444     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44445     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44446     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44447     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44448     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44449     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44450     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44451     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44452     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44453     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44454     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44455     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44456     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44457     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44458     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44459     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44460     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44461     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44462     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44463     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44464     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44465     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44466     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44467     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44468     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44469     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44470     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44471     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44472     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44473     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44474     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44475     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44476     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_UNASSIGNED,
  44477     UNICODE_UNASSIGNED
  44478   },
  44479   { /* page 4351, index 130 */
  44480     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44481     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44482     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44483     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44484     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44485     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44486     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44487     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44488     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44489     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44490     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44491     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44492     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44493     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44494     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44495     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44496     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44497     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44498     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44499     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44500     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44501     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44502     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44503     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44504     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44505     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44506     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44507     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44508     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44509     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44510     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44511     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44512     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44513     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44514     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44515     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44516     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44517     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44518     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44519     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44520     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44521     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44522     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44523     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44524     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44525     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44526     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44527     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44528     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44529     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44530     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44531     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44532     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44533     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44534     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44535     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44536     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44537     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44538     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44539     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44540     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44541     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44542     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44543     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44544     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44545     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44546     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44547     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44548     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44549     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44550     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44551     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44552     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44553     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44554     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44555     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44556     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44557     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44558     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44559     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44560     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44561     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44562     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44563     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44564     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_UNASSIGNED,
  44565     UNICODE_UNASSIGNED
  44566   }
  44567 };
  44568 
  44569 /* U+0000 through U+2FAFF */
  44570 static const int16_t type_table_part1[763] = {
  44571   0 /* page 0 */,
  44572   1 /* page 1 */,
  44573   2 /* page 2 */,
  44574   3 /* page 3 */,
  44575   4 /* page 4 */,
  44576   5 /* page 5 */,
  44577   6 /* page 6 */,
  44578   7 /* page 7 */,
  44579   8 /* page 8 */,
  44580   9 /* page 9 */,
  44581   10 /* page 10 */,
  44582   11 /* page 11 */,
  44583   12 /* page 12 */,
  44584   13 /* page 13 */,
  44585   14 /* page 14 */,
  44586   15 /* page 15 */,
  44587   16 /* page 16 */,
  44588   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44589   17 /* page 18 */,
  44590   18 /* page 19 */,
  44591   19 /* page 20 */,
  44592   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44593   20 /* page 22 */,
  44594   21 /* page 23 */,
  44595   22 /* page 24 */,
  44596   23 /* page 25 */,
  44597   24 /* page 26 */,
  44598   25 /* page 27 */,
  44599   26 /* page 28 */,
  44600   27 /* page 29 */,
  44601   28 /* page 30 */,
  44602   29 /* page 31 */,
  44603   30 /* page 32 */,
  44604   31 /* page 33 */,
  44605   UNICODE_MATH_SYMBOL + UNICODE_MAX_TABLE_INDEX,
  44606   32 /* page 35 */,
  44607   33 /* page 36 */,
  44608   34 /* page 37 */,
  44609   35 /* page 38 */,
  44610   36 /* page 39 */,
  44611   UNICODE_OTHER_SYMBOL + UNICODE_MAX_TABLE_INDEX,
  44612   37 /* page 41 */,
  44613   UNICODE_MATH_SYMBOL + UNICODE_MAX_TABLE_INDEX,
  44614   38 /* page 43 */,
  44615   39 /* page 44 */,
  44616   40 /* page 45 */,
  44617   41 /* page 46 */,
  44618   42 /* page 47 */,
  44619   43 /* page 48 */,
  44620   44 /* page 49 */,
  44621   45 /* page 50 */,
  44622   UNICODE_OTHER_SYMBOL + UNICODE_MAX_TABLE_INDEX,
  44623   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44624   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44625   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44626   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44627   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44628   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44629   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44630   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44631   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44632   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44633   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44634   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44635   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44636   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44637   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44638   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44639   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44640   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44641   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44642   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44643   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44644   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44645   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44646   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44647   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44648   46 /* page 77 */,
  44649   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44650   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44651   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44652   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44653   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44654   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44655   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44656   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44657   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44658   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44659   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44660   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44661   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44662   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44663   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44664   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44665   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44666   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44667   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44668   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44669   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44670   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44671   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44672   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44673   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44674   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44675   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44676   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44677   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44678   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44679   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44680   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44681   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44682   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44683   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44684   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44685   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44686   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44687   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44688   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44689   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44690   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44691   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44692   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44693   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44694   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44695   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44696   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44697   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44698   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44699   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44700   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44701   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44702   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44703   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44704   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44705   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44706   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44707   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44708   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44709   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44710   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44711   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44712   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44713   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44714   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44715   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44716   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44717   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44718   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44719   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44720   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44721   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44722   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44723   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44724   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44725   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44726   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44727   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44728   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44729   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44730   47 /* page 159 */,
  44731   48 /* page 160 */,
  44732   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44733   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44734   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44735   49 /* page 164 */,
  44736   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44737   50 /* page 166 */,
  44738   51 /* page 167 */,
  44739   52 /* page 168 */,
  44740   53 /* page 169 */,
  44741   54 /* page 170 */,
  44742   55 /* page 171 */,
  44743   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44744   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44745   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44746   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44747   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44748   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44749   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44750   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44751   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44752   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44753   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44754   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44755   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44756   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44757   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44758   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44759   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44760   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44761   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44762   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44763   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44764   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44765   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44766   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44767   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44768   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44769   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44770   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44771   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44772   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44773   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44774   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44775   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44776   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44777   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44778   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44779   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44780   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44781   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44782   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44783   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44784   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44785   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44786   56 /* page 215 */,
  44787   UNICODE_SURROGATE + UNICODE_MAX_TABLE_INDEX,
  44788   UNICODE_SURROGATE + UNICODE_MAX_TABLE_INDEX,
  44789   UNICODE_SURROGATE + UNICODE_MAX_TABLE_INDEX,
  44790   UNICODE_SURROGATE + UNICODE_MAX_TABLE_INDEX,
  44791   UNICODE_SURROGATE + UNICODE_MAX_TABLE_INDEX,
  44792   UNICODE_SURROGATE + UNICODE_MAX_TABLE_INDEX,
  44793   UNICODE_SURROGATE + UNICODE_MAX_TABLE_INDEX,
  44794   UNICODE_SURROGATE + UNICODE_MAX_TABLE_INDEX,
  44795   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  44796   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  44797   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  44798   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  44799   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  44800   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  44801   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  44802   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  44803   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  44804   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  44805   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  44806   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  44807   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  44808   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  44809   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  44810   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  44811   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  44812   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  44813   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  44814   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  44815   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  44816   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  44817   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  44818   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  44819   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  44820   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44821   57 /* page 250 */,
  44822   58 /* page 251 */,
  44823   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44824   59 /* page 253 */,
  44825   60 /* page 254 */,
  44826   61 /* page 255 */,
  44827   62 /* page 256 */,
  44828   63 /* page 257 */,
  44829   64 /* page 258 */,
  44830   65 /* page 259 */,
  44831   66 /* page 260 */,
  44832   67 /* page 261 */,
  44833   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44834   68 /* page 263 */,
  44835   69 /* page 264 */,
  44836   70 /* page 265 */,
  44837   71 /* page 266 */,
  44838   72 /* page 267 */,
  44839   73 /* page 268 */,
  44840   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44841   74 /* page 270 */,
  44842   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44843   75 /* page 272 */,
  44844   76 /* page 273 */,
  44845   77 /* page 274 */,
  44846   78 /* page 275 */,
  44847   79 /* page 276 */,
  44848   80 /* page 277 */,
  44849   81 /* page 278 */,
  44850   82 /* page 279 */,
  44851   83 /* page 280 */,
  44852   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44853   84 /* page 282 */,
  44854   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44855   85 /* page 284 */,
  44856   86 /* page 285 */,
  44857   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44858   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44859   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44860   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44861   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44862   87 /* page 291 */,
  44863   88 /* page 292 */,
  44864   89 /* page 293 */,
  44865   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44866   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44867   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44868   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44869   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44870   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44871   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44872   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44873   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44874   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44875   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44876   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44877   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44878   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44879   90 /* page 308 */,
  44880   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44881   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44882   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44883   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44884   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44885   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44886   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44887   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44888   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44889   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44890   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44891   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44892   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44893   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44894   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44895   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44896   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44897   91 /* page 326 */,
  44898   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44899   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44900   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44901   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44902   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44903   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44904   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44905   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44906   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44907   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44908   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44909   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44910   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44911   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44912   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44913   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44914   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44915   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44916   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44917   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44918   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44919   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44920   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44921   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44922   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44923   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44924   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44925   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44926   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44927   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44928   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44929   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44930   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44931   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44932   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44933   92 /* page 362 */,
  44934   93 /* page 363 */,
  44935   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44936   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44937   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44938   94 /* page 367 */,
  44939   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44940   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44941   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44942   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44943   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44944   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44945   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44946   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44947   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44948   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44949   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44950   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44951   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44952   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44953   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44954   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44955   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44956   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44957   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44958   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44959   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44960   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44961   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44962   95 /* page 391 */,
  44963   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44964   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44965   96 /* page 394 */,
  44966   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44967   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44968   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44969   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44970   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44971   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44972   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44973   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44974   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44975   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44976   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44977   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44978   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44979   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44980   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44981   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44982   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44983   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44984   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44985   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44986   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44987   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44988   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44989   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44990   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44991   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44992   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44993   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44994   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44995   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44996   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44997   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44998   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44999   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45000   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45001   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45002   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45003   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45004   97 /* page 433 */,
  45005   98 /* page 434 */,
  45006   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45007   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45008   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45009   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45010   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45011   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45012   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45013   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45014   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45015   99 /* page 444 */,
  45016   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45017   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45018   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45019   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45020   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45021   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45022   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45023   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45024   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45025   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45026   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45027   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45028   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45029   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45030   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45031   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45032   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45033   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45034   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45035   100 /* page 464 */,
  45036   101 /* page 465 */,
  45037   102 /* page 466 */,
  45038   103 /* page 467 */,
  45039   104 /* page 468 */,
  45040   105 /* page 469 */,
  45041   106 /* page 470 */,
  45042   107 /* page 471 */,
  45043   UNICODE_OTHER_SYMBOL + UNICODE_MAX_TABLE_INDEX,
  45044   UNICODE_OTHER_SYMBOL + UNICODE_MAX_TABLE_INDEX,
  45045   108 /* page 474 */,
  45046   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45047   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45048   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45049   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45050   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45051   109 /* page 480 */,
  45052   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45053   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45054   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45055   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45056   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45057   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45058   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45059   110 /* page 488 */,
  45060   111 /* page 489 */,
  45061   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45062   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45063   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45064   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45065   112 /* page 494 */,
  45066   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45067   113 /* page 496 */,
  45068   114 /* page 497 */,
  45069   115 /* page 498 */,
  45070   116 /* page 499 */,
  45071   UNICODE_OTHER_SYMBOL + UNICODE_MAX_TABLE_INDEX,
  45072   UNICODE_OTHER_SYMBOL + UNICODE_MAX_TABLE_INDEX,
  45073   117 /* page 502 */,
  45074   118 /* page 503 */,
  45075   119 /* page 504 */,
  45076   120 /* page 505 */,
  45077   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45078   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45079   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45080   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45081   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45082   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45083   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45084   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45085   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45086   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45087   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45088   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45089   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45090   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45091   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45092   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45093   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45094   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45095   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45096   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45097   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45098   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45099   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45100   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45101   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45102   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45103   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45104   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45105   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45106   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45107   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45108   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45109   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45110   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45111   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45112   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45113   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45114   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45115   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45116   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45117   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45118   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45119   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45120   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45121   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45122   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45123   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45124   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45125   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45126   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45127   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45128   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45129   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45130   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45131   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45132   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45133   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45134   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45135   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45136   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45137   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45138   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45139   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45140   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45141   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45142   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45143   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45144   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45145   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45146   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45147   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45148   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45149   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45150   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45151   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45152   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45153   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45154   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45155   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45156   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45157   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45158   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45159   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45160   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45161   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45162   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45163   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45164   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45165   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45166   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45167   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45168   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45169   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45170   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45171   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45172   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45173   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45174   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45175   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45176   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45177   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45178   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45179   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45180   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45181   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45182   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45183   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45184   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45185   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45186   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45187   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45188   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45189   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45190   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45191   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45192   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45193   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45194   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45195   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45196   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45197   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45198   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45199   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45200   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45201   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45202   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45203   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45204   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45205   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45206   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45207   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45208   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45209   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45210   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45211   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45212   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45213   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45214   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45215   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45216   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45217   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45218   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45219   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45220   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45221   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45222   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45223   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45224   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45225   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45226   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45227   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45228   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45229   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45230   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45231   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45232   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45233   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45234   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45235   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45236   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45237   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45238   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45239   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45240   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45241   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45242   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45243   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45244   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45245   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45246   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45247   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45248   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45249   121 /* page 678 */,
  45250   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45251   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45252   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45253   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45254   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45255   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45256   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45257   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45258   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45259   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45260   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45261   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45262   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45263   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45264   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45265   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45266   122 /* page 695 */,
  45267   123 /* page 696 */,
  45268   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45269   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45270   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45271   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45272   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45273   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45274   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45275   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45276   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45277   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45278   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45279   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45280   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45281   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45282   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45283   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45284   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45285   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45286   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45287   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45288   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45289   124 /* page 718 */,
  45290   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45291   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45292   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45293   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45294   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45295   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45296   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45297   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45298   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45299   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45300   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45301   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45302   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45303   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45304   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45305   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45306   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45307   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45308   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45309   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45310   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45311   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45312   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45313   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45314   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45315   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45316   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45317   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45318   125 /* page 747 */,
  45319   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45320   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45321   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45322   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45323   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45324   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45325   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45326   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45327   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45328   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45329   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45330   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45331   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45332   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45333   126 /* page 762 */
  45334 };
  45335 
  45336 /* U+E0000 through U+10FFFF */
  45337 static const int16_t type_table_part2[768] = {
  45338   127 /* page 3584 */,
  45339   128 /* page 3585 */,
  45340   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45341   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45342   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45343   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45344   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45345   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45346   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45347   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45348   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45349   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45350   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45351   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45352   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45353   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45354   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45355   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45356   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45357   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45358   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45359   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45360   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45361   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45362   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45363   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45364   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45365   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45366   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45367   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45368   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45369   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45370   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45371   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45372   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45373   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45374   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45375   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45376   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45377   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45378   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45379   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45380   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45381   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45382   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45383   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45384   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45385   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45386   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45387   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45388   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45389   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45390   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45391   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45392   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45393   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45394   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45395   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45396   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45397   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45398   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45399   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45400   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45401   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45402   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45403   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45404   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45405   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45406   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45407   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45408   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45409   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45410   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45411   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45412   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45413   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45414   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45415   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45416   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45417   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45418   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45419   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45420   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45421   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45422   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45423   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45424   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45425   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45426   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45427   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45428   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45429   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45430   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45431   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45432   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45433   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45434   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45435   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45436   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45437   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45438   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45439   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45440   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45441   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45442   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45443   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45444   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45445   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45446   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45447   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45448   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45449   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45450   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45451   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45452   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45453   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45454   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45455   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45456   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45457   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45458   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45459   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45460   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45461   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45462   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45463   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45464   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45465   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45466   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45467   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45468   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45469   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45470   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45471   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45472   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45473   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45474   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45475   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45476   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45477   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45478   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45479   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45480   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45481   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45482   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45483   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45484   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45485   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45486   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45487   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45488   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45489   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45490   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45491   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45492   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45493   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45494   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45495   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45496   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45497   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45498   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45499   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45500   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45501   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45502   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45503   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45504   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45505   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45506   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45507   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45508   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45509   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45510   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45511   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45512   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45513   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45514   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45515   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45516   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45517   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45518   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45519   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45520   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45521   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45522   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45523   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45524   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45525   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45526   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45527   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45528   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45529   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45530   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45531   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45532   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45533   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45534   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45535   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45536   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45537   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45538   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45539   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45540   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45541   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45542   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45543   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45544   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45545   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45546   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45547   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45548   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45549   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45550   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45551   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45552   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45553   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45554   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45555   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45556   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45557   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45558   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45559   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45560   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45561   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45562   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45563   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45564   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45565   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45566   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45567   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45568   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45569   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45570   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45571   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45572   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45573   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45574   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45575   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45576   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45577   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45578   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45579   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45580   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45581   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45582   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45583   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45584   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45585   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45586   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45587   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45588   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45589   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45590   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45591   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45592   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45593   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45594   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45595   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45596   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45597   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45598   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45599   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45600   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45601   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45602   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45603   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45604   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45605   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45606   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45607   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45608   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45609   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45610   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45611   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45612   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45613   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45614   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45615   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45616   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45617   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45618   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45619   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45620   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45621   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45622   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45623   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45624   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45625   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45626   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45627   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45628   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45629   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45630   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45631   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45632   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45633   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45634   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45635   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45636   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45637   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45638   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45639   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45640   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45641   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45642   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45643   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45644   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45645   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45646   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45647   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45648   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45649   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45650   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45651   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45652   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45653   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45654   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45655   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45656   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45657   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45658   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45659   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45660   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45661   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45662   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45663   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45664   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45665   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45666   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45667   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45668   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45669   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45670   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45671   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45672   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45673   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45674   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45675   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45676   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45677   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45678   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45679   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45680   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45681   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45682   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45683   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45684   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45685   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45686   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45687   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45688   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45689   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45690   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45691   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45692   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45693   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45694   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45695   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45696   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45697   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45698   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45699   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45700   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45701   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45702   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45703   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45704   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45705   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45706   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45707   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45708   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45709   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45710   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45711   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45712   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45713   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45714   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45715   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45716   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45717   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45718   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45719   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45720   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45721   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45722   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45723   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45724   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45725   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45726   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45727   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45728   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45729   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45730   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45731   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45732   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45733   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45734   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45735   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45736   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45737   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45738   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45739   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45740   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45741   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45742   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45743   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45744   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45745   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45746   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45747   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45748   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45749   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45750   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45751   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45752   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45753   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45754   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45755   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45756   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45757   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45758   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45759   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45760   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45761   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45762   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45763   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45764   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45765   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45766   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45767   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45768   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45769   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45770   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45771   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45772   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45773   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45774   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45775   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45776   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45777   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45778   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45779   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45780   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45781   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45782   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45783   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45784   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45785   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45786   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45787   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45788   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45789   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45790   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45791   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45792   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45793   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45794   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45795   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45796   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45797   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45798   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45799   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45800   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45801   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45802   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45803   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45804   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45805   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45806   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45807   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45808   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45809   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45810   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45811   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45812   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45813   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45814   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45815   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45816   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45817   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45818   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45819   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45820   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45821   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45822   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45823   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45824   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45825   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45826   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45827   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45828   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45829   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45830   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45831   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45832   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45833   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45834   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45835   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45836   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45837   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45838   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45839   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45840   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45841   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45842   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45843   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45844   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45845   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45846   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45847   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45848   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45849   129 /* page 4095 */,
  45850   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45851   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45852   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45853   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45854   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45855   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45856   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45857   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45858   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45859   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45860   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45861   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45862   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45863   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45864   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45865   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45866   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45867   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45868   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45869   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45870   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45871   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45872   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45873   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45874   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45875   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45876   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45877   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45878   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45879   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45880   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45881   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45882   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45883   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45884   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45885   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45886   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45887   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45888   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45889   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45890   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45891   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45892   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45893   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45894   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45895   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45896   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45897   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45898   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45899   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45900   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45901   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45902   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45903   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45904   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45905   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45906   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45907   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45908   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45909   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45910   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45911   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45912   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45913   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45914   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45915   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45916   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45917   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45918   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45919   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45920   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45921   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45922   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45923   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45924   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45925   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45926   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45927   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45928   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45929   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45930   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45931   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45932   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45933   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45934   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45935   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45936   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45937   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45938   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45939   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45940   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45941   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45942   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45943   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45944   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45945   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45946   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45947   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45948   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45949   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45950   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45951   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45952   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45953   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45954   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45955   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45956   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45957   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45958   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45959   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45960   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45961   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45962   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45963   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45964   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45965   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45966   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45967   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45968   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45969   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45970   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45971   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45972   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45973   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45974   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45975   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45976   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45977   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45978   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45979   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45980   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45981   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45982   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45983   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45984   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45985   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45986   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45987   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45988   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45989   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45990   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45991   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45992   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45993   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45994   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45995   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45996   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45997   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45998   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45999   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46000   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46001   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46002   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46003   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46004   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46005   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46006   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46007   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46008   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46009   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46010   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46011   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46012   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46013   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46014   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46015   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46016   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46017   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46018   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46019   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46020   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46021   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46022   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46023   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46024   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46025   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46026   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46027   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46028   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46029   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46030   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46031   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46032   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46033   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46034   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46035   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46036   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46037   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46038   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46039   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46040   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46041   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46042   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46043   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46044   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46045   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46046   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46047   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46048   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46049   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46050   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46051   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46052   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46053   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46054   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46055   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46056   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46057   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46058   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46059   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46060   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46061   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46062   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46063   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46064   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46065   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46066   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46067   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46068   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46069   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46070   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46071   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46072   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46073   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46074   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46075   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46076   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46077   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46078   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46079   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46080   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46081   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46082   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46083   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46084   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46085   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46086   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46087   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46088   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46089   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46090   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46091   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46092   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46093   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46094   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46095   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46096   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46097   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46098   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46099   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46100   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46101   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46102   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46103   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46104   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46105   130 /* page 4351 */
  46106 };
  46107 
  46108 
  46109 
  46110 /**
  46111  * next UTF-8 code point
  46112  *
  46113  * find the next UTF-8 code point in the string
  46114  *
  46115  * the validity of the found UTF-8 code point is not checked
  46116  *
  46117  * nextUTF8 gives wrong result when utf8 is not on the first byte of a code point
  46118  * use findNextUTF8 to find next code point when utf8 is not at the start of a code point
  46119  *
  46120  * \param
  46121  *   utf8 UTF-8 encoded string
  46122  * \return
  46123  *   pointer to next UTF-8 code point
  46124  *   NULL when the end string is reached or utf8 is NULL
  46125  */
  46126 const char *nextUTF8(const char *utf8) {
  46127 
  46128   if (!utf8 || !*utf8) {
  46129     return(NULL);
  46130   }
  46131 
  46132   nxCodeUTF8(utf8);
  46133   return(utf8);
  46134 }
  46135 
  46136 /**
  46137  * buffer length next UTF-8 code point
  46138  *
  46139  * find the next UTF-8 code point in the string
  46140  *
  46141  * the validity of the found UTF-8 code point is not checked
  46142  *
  46143  * bLNextUTF8 gives wrong result when utf8 is not on the first byte of a code point
  46144  * use findNextUTF8 to find next code point when utf8 is not at the start of a code point
  46145  *
  46146  * \param
  46147  *   string start of the UTF-8 encoded string
  46148  * \param
  46149  *   utf8 pointer to a code point in string
  46150  * \param
  46151  *   utf8Size string buffer size (including NUL, strlen(string) +1 when the buffer is full)
  46152  * \return
  46153  *   pointer to next UTF-8 code point
  46154  *   NULL when the end string is reached or utf8 is NULL or the start of the next code point is outside the string
  46155  */
  46156 const char *bLNextUTF8(const char *string, size_t utf8Size, const char *utf8) {
  46157 
  46158   if (!string || !utf8 || !utf8Size || !*utf8 || (size_t)(utf8 - string) >= utf8Size) {
  46159     return(NULL);
  46160   }
  46161 
  46162   nxCodeUTF8(utf8);
  46163   if (((size_t)(utf8-string) >= utf8Size) || !*utf8) {
  46164     return(NULL);
  46165   }
  46166 
  46167   return(utf8);
  46168 }
  46169 
  46170 /**
  46171  * find next UTF-8 code point
  46172  * even not at the start of a code point
  46173  *
  46174  * find the next UTF-8 code point in the string
  46175  *
  46176  * the validity of the found UTF-8 code point is not checked
  46177  *
  46178  * \param
  46179  *   string start of the UTF-8 encoded string
  46180  * \param
  46181  *   utf8 pointer in string
  46182  * \param
  46183  *   ut8Size string buffer size (including NUL, strlen(string) +1 when the buffer is full)
  46184  * \return
  46185  *   pointer to next UTF-8 code point
  46186  *   NULL when the end string is reached or utf8 is NULL or the start of the next code point is outside the string
  46187  */
  46188 const char *findNextUTF8(const char *string, size_t utf8Size, const char *utf8) {
  46189 
  46190   if (!string || !utf8 || !utf8Size || !*utf8 || (size_t)(utf8 - string) >= utf8Size) {
  46191     return(NULL);
  46192   }
  46193 
  46194   while (*utf8 && ((size_t)(utf8-string) < utf8Size)) {
  46195     if ((*utf8++ & 0xC0) != 0x80) {
  46196       break;
  46197   }
  46198     }
  46199   if (((size_t)(utf8-string) >= utf8Size) || !*utf8) {
  46200     return(NULL);
  46201   }
  46202 
  46203   return(utf8);
  46204 }
  46205 
  46206 /**
  46207  * previous UTF-8 code point
  46208  *
  46209  * find the previous UTF-8 code point in the string
  46210  *
  46211  * the validity of the found UTF-8 code point is not checked
  46212  *
  46213  * the behavior is undefined when utf8 is the start of the string, use instead findPrevUTF8 for safe handling
  46214  *
  46215  * \param
  46216  *   utf8 UTF-8 encoded string
  46217  * \return
  46218  *   pointer to previous UTF-8 code point
  46219  *   NULL when utf8 is NULL
  46220  */
  46221 const char *prevUTF8(const char *utf8) {
  46222 
  46223   if (!utf8) {
  46224     return(NULL);
  46225   }
  46226 
  46227   forever {
  46228     utf8--;
  46229     if ((*utf8 & 0xC0) != 0x80) {
  46230       return(utf8);
  46231     }
  46232   }
  46233 }
  46234 
  46235 /**
  46236  * buffer previous UTF-8 code point
  46237  *
  46238  * find the previous UTF-8 code point in the string
  46239  *
  46240  * the validity of the found UTF-8 code point is not checked
  46241  *
  46242  * \param
  46243  *   string UTF-8 encoded string
  46244  * \param
  46245  *   utf8 pointer in UTF-8 encoded string
  46246  * \return
  46247  *   pointer to previous UTF-8 code point
  46248  *   NULL when utf8 is NULL
  46249  */
  46250 const char *bPrevUTF8(const char *string, const char *utf8) {
  46251 
  46252   if (!string || !utf8) {
  46253     return(NULL);
  46254   }
  46255 
  46256   return(bPrevUTF8Tiny(string, utf8));
  46257 }
  46258 
  46259 local const char *bPrevUTF8Tiny(const char *string, const char *utf8) {
  46260 
  46261   while (utf8 > string) {
  46262     utf8--;
  46263     if ((*utf8 & 0xC0) != 0x80) {
  46264       return(utf8);
  46265   }
  46266     }
  46267 
  46268   return(NULL);
  46269 }
  46270 
  46271 local char *bPrevRWUTF8Tiny(const char *string, char *utf8) {
  46272 
  46273   while (utf8 > string) {
  46274     utf8--;
  46275     if ((*utf8 & 0xC0) != 0x80) {
  46276       return(utf8);
  46277   }
  46278     }
  46279 
  46280   return(NULL);
  46281 }
  46282 
  46283 /**
  46284  * index to pointer UTF8 encoded string
  46285  *
  46286  * Converts character index to pointer in utf8
  46287  *
  46288  * \param
  46289  *   utf8 UTF8 encoded string
  46290  * \param
  46291  *   index character index in utf8, positive or negative. -1 is the last character in the string
  46292  * \return
  46293  *   pointer to character at index
  46294  *   NULL when index is outside the string
  46295  */
  46296 const char *idx2PtrUTF8(const char *utf8, int64_t index) {
  46297 
  46298   if (!utf8 || !*utf8 || !index) {
  46299     return(utf8);
  46300   }
  46301 
  46302   int64_t len = (int64_t)strlen(utf8);
  46303 
  46304   if (index > 0) {
  46305     if (index > len) {
  46306       // index is outside the string
  46307       return(NULL);
  46308     }
  46309 
  46310     // go forward
  46311     const char *end = utf8 + len;;
  46312     int64_t i = 0;;
  46313     while (i != index) {
  46314       nxCodeUTF8(utf8);
  46315       if (utf8 > end) {
  46316         return(NULL);
  46317       }
  46318       i++;
  46319   }
  46320     }
  46321   else {
  46322     if (index < -len) {
  46323       // index is outside the string
  46324       return(NULL);
  46325     }
  46326 
  46327     // go from the end
  46328     const char *start = utf8;;
  46329     utf8 += len;;
  46330     int64_t i = 0;;
  46331     while (i != index) {
  46332       utf8 = bPrevUTF8Tiny(start, utf8);;
  46333       i--;
  46334   }
  46335     }
  46336   return(utf8);
  46337 }
  46338 
  46339 /**
  46340  * index to pointer UTF8 encoded string - read write utf8 string (char*)
  46341  *
  46342  * Converts character index to pointer in utf8
  46343  *
  46344  * \param
  46345  *   utf8 UTF8 encoded string
  46346  * \param
  46347  *   index character index in utf8, positive or negative. -1 is the last character in the string
  46348  * \return
  46349  *   pointer to character at index
  46350  *   NULL when index is outside the string
  46351  */
  46352 local char *idx2PtrRWUTF8(char *utf8, int64_t index) {
  46353 
  46354   if (!utf8 || !*utf8 || !index) {
  46355     return(utf8);
  46356   }
  46357 
  46358   int64_t len = (int64_t)strlen(utf8);
  46359 
  46360   if (index > 0) {
  46361     if (index > len) {
  46362       // index is outside the string
  46363       return(NULL);
  46364     }
  46365 
  46366     // go forward
  46367     char *end = utf8 + len;;
  46368     int64_t i = 0;;
  46369     while (i != index) {
  46370       nxCodeUTF8(utf8);
  46371       if (utf8 > end) {
  46372         return(NULL);
  46373       }
  46374       i++;
  46375   }
  46376     }
  46377   else {
  46378     if (index < -len) {
  46379       // index is outside the string
  46380       return(NULL);
  46381     }
  46382 
  46383     // go from the end
  46384     char *start = utf8;;
  46385     utf8 += len;;
  46386     int64_t i = 0;;
  46387     while (i != index) {
  46388       utf8 = bPrevRWUTF8Tiny(start, utf8);;
  46389       i--;
  46390   }
  46391     }
  46392   return(utf8);
  46393 }
  46394 
  46395 const char *bLIdx2PtrUTF8(const char *utf8, size_t utf8Size, int64_t index) {
  46396 
  46397   if (!utf8 || !*utf8 || !utf8Size || !index) {
  46398     return(utf8);
  46399   }
  46400 
  46401   if (index > 0) {
  46402     if ((size_t)index > utf8Size) {
  46403       // index is outside the string
  46404       return(NULL);
  46405     }
  46406 
  46407     // go forward
  46408     const char *end = utf8 + utf8Size;;
  46409     int64_t i = 0;;
  46410     while (i != index) {
  46411       nxCodeUTF8(utf8);
  46412       if (utf8 >= end) {
  46413         return(NULL);
  46414       }
  46415       i++;
  46416   }
  46417     }
  46418   else {
  46419     if (index < -(int64_t)utf8Size) {
  46420       // index is outside the string
  46421       return(NULL);
  46422     }
  46423 
  46424     // find string end
  46425     size_t len;
  46426     len = strlen(utf8);
  46427     if (len+1 > utf8Size) {
  46428       len = utf8Size - 1;
  46429     }
  46430 
  46431     // go from the end
  46432     const char *start = utf8;;
  46433     utf8 += len;;
  46434     int64_t i = 0;;
  46435     while (i != index) {
  46436       utf8 = bPrevUTF8Tiny(start, utf8);;
  46437       i--;
  46438   }
  46439     }
  46440   return(utf8);
  46441 }
  46442 
  46443 /**
  46444  * pointer to code point index UTF8 encoded string
  46445  *
  46446  * Converts pointer to character index
  46447  *
  46448  * This function works when utf8 and pos point inside code points
  46449  *
  46450  * \param
  46451  *   utf8 pointer to a code point in a UTF8 encoded string
  46452  * \param
  46453  *   pos pointer to a code point in a UTF8 encoded string
  46454  * \return
  46455  *   Number of code points from utf8 to pos, positive or negative
  46456  *   When utf8 < pos, the result is positive
  46457  *   When pos < utf8, the result is negative
  46458  *   0 failed or index 0
  46459  */
  46460 int64_t ptr2IdxUTF8(const char *utf8, const char *pos) {
  46461 
  46462   if (!utf8 || !pos || utf8 == pos) {
  46463     return(0);
  46464   }
  46465 
  46466   int64_t r = 0;
  46467 
  46468   if (pos > utf8) {
  46469     // there is at least one code point
  46470     // find next code point, works even when utf8 points inside a code point
  46471     while (*utf8) {
  46472       if ((*utf8 & 0xC0) != 0x80) {
  46473         // check utf8 is in a multibyte code point
  46474         // if it is, find the end of the code point
  46475         if ((*utf8 & 0xC0) == 0xC0) {
  46476           nxCodeUTF8(utf8);
  46477         }
  46478         else {
  46479           utf8++;
  46480         }
  46481         break;
  46482       }
  46483       utf8++;
  46484     }
  46485     r++;
  46486     while (*utf8 && (utf8 < pos)) {
  46487       nxCodeUTF8(utf8);
  46488       r++;
  46489     }
  46490     if (utf8 > pos || !*utf8) {
  46491       // pos points inside a code point, return index to pos code point
  46492       // instead of next one
  46493       // or reached the end of the string
  46494       r--;
  46495   }
  46496     }
  46497   else {
  46498     while (utf8 > pos) {
  46499       // find previous code point
  46500       forever {
  46501         utf8--;
  46502         if ((*utf8 & 0xC0) != 0x80) {
  46503           break;
  46504         }
  46505       }
  46506       r--;
  46507   }
  46508     }
  46509   return(r);
  46510 }
  46511 
  46512 /**
  46513  * buffer pointer to code point index UTF8 encoded string
  46514  *
  46515  * Converts pointer to character index
  46516  *
  46517  * Safe function for negative index
  46518  *
  46519  * This function works when utf8 and pos point inside code points
  46520  *
  46521  * \param
  46522  *   start start of the UTF8 encoded string
  46523  * \param
  46524  *   utf8 pointer to a code point in a UTF8 encoded string
  46525  * \param
  46526  *   pos pointer to a code point in a UTF8 encoded string
  46527  * \return
  46528  *   Number of code points from utf8 to pos, positive or negative
  46529  *   When utf8 < pos, the result is positive
  46530  *   When pos < utf8, the result is negative
  46531  *   0 failed or index 0
  46532  */
  46533 int64_t bPtr2IdxUTF8(const char *start, const char *utf8, const char *pos) {
  46534 
  46535   if (!utf8 || !pos || utf8 == pos || !start || pos < start) {
  46536     return(0);
  46537   }
  46538 
  46539   int64_t r = 0;
  46540 
  46541   if (pos > utf8) {
  46542     // there is at least one code point
  46543     // find next code point, works even when utf8 points inside a code point
  46544     while (*utf8) {
  46545       if ((*utf8++ & 0xC0) != 0x80) {
  46546         break;
  46547     }
  46548       }
  46549     nxCodeUTF8(utf8);
  46550     r++;
  46551     while (*utf8 && (utf8 < pos)) {
  46552       nxCodeUTF8(utf8);
  46553       r++;
  46554     }
  46555     if (utf8 > pos || !*utf8) {
  46556       // pos points inside a code point, return index to pos code point
  46557       // instead of next one
  46558       // or reached the end of the string
  46559       r--;
  46560   }
  46561     }
  46562   else {
  46563     while ((utf8 > pos) && (utf8 > start)) {
  46564       // find previous code point
  46565       while (utf8 > start) {
  46566         utf8--;
  46567         if ((*utf8 & 0xC0) != 0x80) {
  46568           break;
  46569       }
  46570         }
  46571       r--;
  46572   }
  46573     }
  46574   return(r);
  46575 }
  46576 
  46577 /**
  46578  * buffer size pointer to code point index UTF8 encoded string
  46579  *
  46580  * Converts pointer to character index
  46581  *
  46582  * This function works when utf8 and pos point inside code points
  46583  *
  46584  * \param
  46585  *   utf8 pointer to a code point in a UTF8 encoded string
  46586  * \param
  46587  *   utf8Size utf8 buffer size including NUL
  46588  * \param
  46589  *   pos pointer to a code point in a UTF8 encoded string
  46590  * \return
  46591  *   Number of code points from utf8 to pos, positive
  46592  *   -1 failed
  46593  */
  46594 int64_t bLPtr2IdxUTF8(const char *utf8, size_t utf8Size, const char *pos) {
  46595 
  46596   if (!utf8 || !utf8Size || !pos || (pos < utf8) || (pos >= (utf8+utf8Size))) {
  46597     return(-1);
  46598   }
  46599 
  46600   int64_t r = 0;
  46601 
  46602   // return 0 if utf8 = pos
  46603   if (pos > utf8) {
  46604     // there is at least one code point
  46605     // find next code point, works even when utf8 points inside a code point
  46606     const char *end = utf8+utf8Size-1;;
  46607     while ((utf8 < end) && *utf8) {
  46608       if ((*utf8++ & 0xC0) != 0x80) {
  46609         break;
  46610     }
  46611       }
  46612     nxCodeUTF8(utf8);
  46613     r++;
  46614     while ((utf8 < end) && *utf8 && (utf8 < pos)) {
  46615       nxCodeUTF8(utf8);
  46616       r++;
  46617     }
  46618     if (utf8 >= end || utf8 > pos || !*utf8) {
  46619       // pos points inside a code point, return index to pos code point
  46620       // instead of next one
  46621       // or reached the end of the string
  46622       r--;
  46623   }
  46624     }
  46625   return(r);
  46626 }
  46627 
  46628 /**
  46629  * buffer size pointer to negative code point index UTF8 encoded string
  46630  *
  46631  * Converts pointer to negative character index (from the end of the string)
  46632  *
  46633  * This function works when utf8 and pos point inside code points
  46634  *
  46635  * \param
  46636  *   utf8 pointer to a code point in a UTF8 encoded string
  46637  * \param
  46638  *   utf8Size utf8 buffer size including NUL
  46639  * \param
  46640  *   pos pointer to a code point in a UTF8 encoded string
  46641  * \return
  46642  *   Number of code points from utf8 end to pos, negative
  46643  *   0 failed
  46644  */
  46645 int64_t bLPtr2NegIdxUTF8(const char *utf8, size_t utf8Size, const char *pos) {
  46646 
  46647   if (!utf8 || !utf8Size || !pos || (pos < utf8) || (pos >= (utf8+utf8Size))) {
  46648     return(0);
  46649   }
  46650 
  46651   int64_t r = 0;
  46652 
  46653   const char *end = utf8+utf8Size-1;
  46654 
  46655   while ((end > pos) && (end > utf8)) {
  46656     // find previous code point
  46657     while (end > utf8) {
  46658       end--;
  46659       if ((*end & 0xC0) != 0x80) {
  46660         break;
  46661     }
  46662       }
  46663     r--;
  46664   }
  46665   return(r);
  46666 }
  46667 
  46668 /**
  46669  * make valid UTF-8 encoded string
  46670  *
  46671  * copy utf8 to newly allocated buffer, the invalid code points are
  46672  * replaced with '?'
  46673  *
  46674  * The result buffer size is the same as utf8 size
  46675  *
  46676  * \param
  46677  *   utf8 valid or invalid UTF-8 encoded string
  46678  * \result
  46679  *   new valid UTF-8 encoded string (you must free the pointer)
  46680  *   NULL failed
  46681  */
  46682 char *makeValidUTF8(const char *utf8) {
  46683 
  46684   if (!utf8) {
  46685     return(NULL);
  46686   }
  46687 
  46688   char *r = malloc(strlen(utf8)+1);
  46689   if (!r) {
  46690     return(NULL);
  46691   }
  46692 
  46693   char *c = r;
  46694 
  46695   while (*utf8) {
  46696     if (isCodeUTF8(utf8)) {
  46697       range(i, codeSizeUTF8(utf8)) {
  46698         *c++ = *utf8++;
  46699       }
  46700     }
  46701     else {
  46702       *c = '?';
  46703       c++;
  46704       utf8++;
  46705   }
  46706     }
  46707 
  46708   *c = 0;
  46709 
  46710   return(r);
  46711 }
  46712 
  46713 /**
  46714  * buffer make valid UTF-8 encoded string
  46715  *
  46716  * replace the invalid code points with '?' in utf8
  46717  *
  46718  * \param
  46719  *   utf8 valid or invalid UTF-8 encoded string
  46720  * \result
  46721  *   valid UTF-8 encoded string in utf8 buffer
  46722  *   NULL failed
  46723  */
  46724 char *bMakeValidUTF8(char *utf8) {
  46725 
  46726   if (!utf8) {
  46727     return(NULL);
  46728   }
  46729 
  46730   char *r = utf8;
  46731 
  46732   while (*utf8) {
  46733     if (isCodeUTF8(utf8)) {
  46734       nxCodeUTF8(utf8);
  46735     }
  46736     else {
  46737       *utf8 = '?';
  46738       utf8++;
  46739   }
  46740     }
  46741 
  46742   return(r);
  46743 }
  46744 
  46745 /**
  46746  * length make valid UTF-8 encoded string
  46747  *
  46748  * copy utf8 to newly allocated buffer, the invalid code points are
  46749  * replaced with '?'
  46750  *
  46751  * The result buffer size is utf8Len+1
  46752  *
  46753  * \param
  46754  *   utf8 valid or invalid UTF-8 encoded string
  46755  * \param
  46756  *   utf8Len utf8 length
  46757  * \result
  46758  *   new valid UTF-8 encoded string (you must free the pointer)
  46759  *   NULL failed
  46760  */
  46761 char *nMakeValidUTF8(const char *utf8, size_t utf8Len) {
  46762 
  46763   if (!utf8 || !utf8Len) {
  46764     return(NULL);
  46765   }
  46766 
  46767   char *r = malloc(utf8Len+1);
  46768   if (!r) {
  46769     return(NULL);
  46770   }
  46771 
  46772   const char *end = utf8+utf8Len;
  46773   char *c         = r;
  46774 
  46775   while (*utf8 && utf8 < end) {
  46776     if (isCodeUTF8(utf8)) {
  46777       range(i, codeSizeUTF8(utf8)) {
  46778         *c++ = *utf8++;
  46779         if (utf8 == end) {
  46780           goto finish;
  46781         }
  46782       }
  46783     }
  46784     else {
  46785       *c = '?';
  46786       c++;
  46787       utf8++;
  46788   }
  46789     }
  46790 
  46791   finish:
  46792   *c = 0;
  46793 
  46794   return(r);
  46795 }
  46796 
  46797 /**
  46798  * buffer length make valid UTF-8 encoded string
  46799  *
  46800  * copy utf8 to the dst buffer, the invalid code points are
  46801  * replaced with '?'
  46802  *
  46803  * The result buffer size is utf8Len+1
  46804  *
  46805  * \param
  46806  *   utf8 valid or invalid UTF-8 encoded string
  46807  * \param
  46808  *   utf8Len utf8 length
  46809  * \result
  46810  *   new valid UTF-8 encoded string
  46811  *   NULL failed
  46812  */
  46813 char *bNMakeValidUTF8(char *dst, const char *utf8, size_t utf8Len) {
  46814 
  46815   if (!dst || !utf8 || !utf8Len) {
  46816     return(NULL);
  46817   }
  46818 
  46819   const char *end = utf8+utf8Len;
  46820   char *c         = dst;
  46821 
  46822   while (*utf8 && utf8 < end) {
  46823     if (isCodeUTF8(utf8)) {
  46824       range(i, codeSizeUTF8(utf8)) {
  46825         *c++ = *utf8++;
  46826         if (utf8 == end) {
  46827           goto finish;
  46828         }
  46829       }
  46830     }
  46831     else {
  46832       *c = '?';
  46833       c++;
  46834       utf8++;
  46835   }
  46836     }
  46837 
  46838   finish:
  46839   *c = 0;
  46840 
  46841   return(dst);
  46842 }
  46843 
  46844 /**
  46845  * buffer destination size make valid UTF-8 encoded string
  46846  *
  46847  * copy utf8 to the dst buffer, the invalid code points are
  46848  * replaced with '?'
  46849  *
  46850  * The result buffer size is dstSize
  46851  *
  46852  * \param
  46853  *   dst destination buffer
  46854  * \param
  46855  *   dstSize size of dst
  46856  * \param
  46857  *   utf8 valid or invalid UTF-8 encoded string
  46858  * \result
  46859  *   new valid UTF-8 encoded string
  46860  *   NULL failed
  46861  */
  46862 char *bLMakeValidUTF8(char *dst, size_t dstSize, const char *utf8) {
  46863 
  46864   if (!dst || !utf8 || !dstSize) {
  46865     return(NULL);
  46866   }
  46867 
  46868   char *end = dst+dstSize-1;
  46869   char *c   = dst;
  46870 
  46871   while (*utf8 && c < end) {
  46872     if (isCodeUTF8(utf8)) {
  46873       range(i, codeSizeUTF8(utf8)) {
  46874         *c++ = *utf8++;
  46875         if (c == end) {
  46876           goto finish;
  46877         }
  46878       }
  46879     }
  46880     else {
  46881       *c = '?';
  46882       c++;
  46883       utf8++;
  46884   }
  46885     }
  46886 
  46887   finish:
  46888   *c = 0;
  46889 
  46890   return(dst);
  46891 }
  46892 
  46893 /**
  46894  * buffer destination size source length make valid UTF-8 encoded string
  46895  *
  46896  * copy utf8 to the dst buffer, the invalid code points are
  46897  * replaced with '?'
  46898  *
  46899  * This function always reads less than utf8Len+1 bytes in utf8 buffer
  46900  * The result buffer size is dstSize
  46901  *
  46902  * \param
  46903  *   dst destination buffer
  46904  * \param
  46905  *   dstSize size of dst
  46906  * \param
  46907  *   utf8 valid or invalid UTF-8 encoded string
  46908  * \param
  46909  *   utf8Len utf8 length
  46910  * \result
  46911  *   new valid UTF-8 encoded string
  46912  *   NULL failed
  46913  */
  46914 char *bLNMakeValidUTF8(char *dst, size_t dstSize, const char *utf8, size_t utf8Len) {
  46915 
  46916   if (!dst || !dstSize || !utf8 || !utf8Len) {
  46917     return(NULL);
  46918   }
  46919 
  46920   const char *end = utf8+utf8Len;
  46921   char *dstEnd    = dst+dstSize-1;
  46922   char *c         = dst;
  46923 
  46924   while (*utf8 && utf8 < end && c < dstEnd) {
  46925     if (isCodeUTF8(utf8)) {
  46926       range(i, codeSizeUTF8(utf8)) {
  46927         *c++ = *utf8++;
  46928         if (utf8 == end || c == dstEnd) {
  46929           goto finish;
  46930         }
  46931       }
  46932     }
  46933     else {
  46934       *c = '?';
  46935       c++;
  46936       utf8++;
  46937   }
  46938     }
  46939 
  46940   finish:
  46941   *c = 0;
  46942 
  46943   return(dst);
  46944 }
  46945 
  46946 // No need for randomUTF8
  46947 
  46948 /**
  46949  * strNCpyUTF8 - copy src to dst with srcLen in code points
  46950  *
  46951  * copy srcLen code points from src (UTF-8 encoded string) to dst and add one NUL character when src
  46952  * end is not reached (unlike strncpy).
  46953  *
  46954  * \param
  46955  *   dst destination buffer
  46956  * \param
  46957  *   src source string
  46958  * \param
  46959  *   srcLen source buffer size in code points
  46960  * \return
  46961  *   dst string
  46962  *   NULL error
  46963  */
  46964 char *strNCpyUTF8(char *dst, const char *src, size_t srcLen) {
  46965 
  46966   if (!dst || !src) {
  46967     return(NULL);
  46968   }
  46969 
  46970   if (!srcLen) {
  46971     return(dst);
  46972   }
  46973 
  46974   const char *c = src;
  46975   size_t count  = 0;
  46976 
  46977   while (*c && count < srcLen) {
  46978     nxCodeUTF8(c);
  46979     count++;
  46980   }
  46981 
  46982   return(strncpy(dst, src, (size_t)(c-src)));
  46983 }
  46984 
  46985 /**
  46986  * strLCpyUTF8 - copy src to dst
  46987  *
  46988  * like strncpy and the NUL char is always added at the end of the string
  46989  * and the result string is always a valid UTF-8 encoded string
  46990  *
  46991  * \param
  46992  *   dst destination buffer
  46993  * \param
  46994  *   dstSize destination buffer size, result string will be no longer than dstSize-1
  46995  * \param
  46996  *   src source string
  46997  * \return
  46998  *   dst string
  46999  *   NULL error
  47000  */
  47001 char *strLCpyUTF8(char *dst, size_t dstSize, const char *src) {
  47002 
  47003   if (!dst || !src) {
  47004     return(NULL);
  47005   }
  47006 
  47007   char *r = strncpy(dst, src, dstSize);;
  47008   if (dstSize) {
  47009     r[dstSize-1] = 0;
  47010   }
  47011   pErrorNULL(bMakeValidUTF8(r));
  47012   return(r);
  47013 }
  47014 
  47015 /**
  47016  * strNCatUTF8 - concatenate two UTF-8 encoded strings
  47017  *
  47018  * like strncat with sanity checks and srcLen is the number of code points
  47019  *
  47020  * \param
  47021  *   dst destination buffer
  47022  * \param
  47023  *   src source string
  47024  * \param
  47025  *   srcLen max source len in code points
  47026  * \return
  47027  *   string with input strings concatenated
  47028  *   NULL error
  47029  */
  47030 char *strNCatUTF8(char *dst, const char *src, size_t srcLen) {
  47031 
  47032   if (!dst || !src) {
  47033     return(NULL);
  47034   }
  47035 
  47036   if (!srcLen) {
  47037     return(dst);
  47038   }
  47039 
  47040   const char *c = src;
  47041   size_t count  = 0;
  47042 
  47043   while (*c && count < srcLen) {
  47044     nxCodeUTF8(c);
  47045     count++;
  47046   }
  47047 
  47048   return(strncat(dst, src, (size_t)(c-src)));
  47049 }
  47050 
  47051 /**
  47052  * strLCatUTF8 - concatenate two UTF-8 encoded strings
  47053  *
  47054  * like strlcat with sanity checks
  47055  * the result string is always a valid UTF-8 encoded string
  47056  *
  47057  * \param
  47058  *   dst destination buffer
  47059  * \param
  47060  *   src source string
  47061  * \param
  47062  *   dstSize destination buffer size, result string will be no longer than dstSize-1
  47063  * \return
  47064  *   string with input strings concatenated
  47065  *   NULL error
  47066  */
  47067 char *strLCatUTF8(char *dst, size_t dstSize, const char *src) {
  47068 
  47069   if (!dst || !src) {
  47070     return(NULL);
  47071   }
  47072 
  47073   size_t dL     = strnlen(dst, dstSize);
  47074   size_t dstLen = dstSize-1;
  47075 
  47076   if (dL >= dstLen) {
  47077     // buffer is full
  47078     return(dst);
  47079   }
  47080 
  47081   size_t sL     = strlen(src);
  47082 
  47083   if (dL+sL > dstLen) {
  47084     // truncate
  47085     char *r = strncat(dst, src, dstLen - dL);
  47086     pErrorNULL(bMakeValidUTF8(r));
  47087     return(r);
  47088   }
  47089   else {
  47090     return(strcat(dst, src));
  47091 }
  47092   }
  47093 
  47094 /**
  47095  * strLNCatUTF8 - concatenate two UTF-8 encoded strings
  47096  *
  47097  * like strlcat with sanity checks and srcLen is the number of code points
  47098  * the result string is always a valid UTF-8 encoded string
  47099  *
  47100  * \param
  47101  *   dst destination buffer
  47102  * \param
  47103  *   src source string
  47104  * \param
  47105  *   dstSize destination buffer size, result string will be no longer than dstSize-1
  47106  * \param
  47107  *   srcLen max source len in code points
  47108  * \return
  47109  *   string with input strings concatenated
  47110  *   NULL error
  47111  */
  47112 char *strLNCatUTF8(char *dst, size_t dstSize, const char *src, size_t srcLen) {
  47113 
  47114   if (!dst || !src) {
  47115     return(NULL);
  47116   }
  47117 
  47118   if (!srcLen) {
  47119     return(dst);
  47120   }
  47121 
  47122   size_t dL     = strnlen(dst, dstSize);
  47123   size_t dstLen = dstSize-1;
  47124 
  47125   if (dL >= dstLen) {
  47126     // buffer is full
  47127     return(dst);
  47128   }
  47129 
  47130   const char *c = src;
  47131   size_t count  = 0;
  47132 
  47133   while (*c && count < srcLen) {
  47134     nxCodeUTF8(c);
  47135     count++;
  47136   }
  47137 
  47138   size_t sL     = (size_t)(c-src);
  47139 
  47140   if (dL+sL > dstLen) {
  47141     // truncate
  47142     char *r = strncat(dst, src, dstLen - dL);
  47143     pErrorNULL(bMakeValidUTF8(r));
  47144     return(r);
  47145   }
  47146   else {
  47147     return(strncat(dst, src, sL));
  47148 }
  47149   }
  47150 
  47151 /**
  47152  * ignore case Replace UTF8 encoded String
  47153  * the original remains unchanged
  47154  * duplicate s
  47155  * the olds string is replaced with the news string max times in the result
  47156  * 0 for max means replace all olds strings
  47157  *
  47158  * \param
  47159  *   s: UTF8 encoded string
  47160  *   olds: old UTF8 encoded string to be replaced in s
  47161  *   news: new UTF8 encoded string replacing olds in s
  47162  *   max: number of times to replace olds, 0 to replace all found olds
  47163  * \return
  47164  *   new string (you must free the pointer)
  47165  *   "" when s is empty
  47166  *   NULL when s is NULL
  47167  *   NULL when olds is empty
  47168  */
  47169 char* icReplaceUTF8(const char UNUSED *s, const char UNUSED *olds, const char UNUSED *news, size_t UNUSED max ) {
  47170 
  47171   // TODO changing UTF8 to lower case with casefold can change the
  47172   // number of bytes in the string
  47173   return(NULL);
  47174 }
  47175 
  47176 char *icReplaceCharSUTF8(const char *s UNUSED, char olds UNUSED, const char *news UNUSED, size_t max UNUSED) {
  47177 
  47178   // TODO changing UTF8 to lower case with casefold can change the
  47179   // number of bytes in the string
  47180   return(NULL);
  47181 }
  47182 
  47183 char *icReplaceSCharUTF8(const char *s UNUSED, const char *olds UNUSED, char news UNUSED, size_t max UNUSED) {
  47184 
  47185   // TODO changing UTF8 to lower case with casefold can change the
  47186   // number of bytes in the string
  47187   return(NULL);
  47188 }
  47189 
  47190 
  47191 /**
  47192  * in place ignore case replace UTF8 encoded String
  47193  * the olds UTF8 encoded string is replaced with the news UTF8 encoded string max times in the result
  47194  * 0 for max means replace all olds strings
  47195  *
  47196  * \param
  47197  *   s: UTF8 encoded string
  47198  *   olds: old UTF8 encoded string to be replaced in s
  47199  *   news: new UTF8 encoded string replacing olds in s
  47200  *   max: number of times to replace olds, 0 to replace all found olds
  47201  * \return
  47202  *   modified s string
  47203  *   NULL s not modified when s is NULL or empty and when olds is empty
  47204  */
  47205 char* iicReplaceUTF8(char UNUSED **s, const char UNUSED *olds, const char UNUSED *news, size_t UNUSED max ) {
  47206 
  47207   // TODO changing UTF8 to lower case with casefold can change the
  47208   // number of bytes in the string
  47209   return(NULL);
  47210 }
  47211 
  47212 char *iicReplaceCharSUTF8(char **s UNUSED, char olds UNUSED, const char *news UNUSED, size_t max UNUSED) {
  47213 
  47214   // TODO changing UTF8 to lower case with casefold can change the
  47215   // number of bytes in the string
  47216   return(NULL);
  47217 }
  47218 
  47219 char *iicReplaceSCharUTF8(char **s UNUSED, const char *olds UNUSED, char news UNUSED, size_t max UNUSED) {
  47220 
  47221   // TODO changing UTF8 to lower case with casefold can change the
  47222   // number of bytes in the string
  47223   return(NULL);
  47224 }
  47225 
  47226 
  47227 /**
  47228  * buffer ignore case replace UTF8 encoded String
  47229  * the olds string is replaced with the news string max times in the result
  47230  * 0 for max means replace all olds strings
  47231  *
  47232  * \param
  47233  *   s: string
  47234  * \param
  47235  *   olds: old string to be replaced in s
  47236  * \param
  47237  *   news: new string replacing olds in s
  47238  * \param
  47239  *   max: number of times to replace olds, 0 to replace all found olds
  47240  * \return
  47241  *   modified s string
  47242  *   NULL s not modified when s is NULL or empty and when olds is empty
  47243  */
  47244 char* bicReplaceUTF8(char UNUSED *s, const char UNUSED *olds, const char UNUSED *news, size_t UNUSED max ) {
  47245 
  47246   // TODO changing UTF8 to lower case with casefold can change the
  47247   // number of bytes in the string
  47248   return(NULL);
  47249 }
  47250 
  47251 
  47252 /**
  47253  * buffer size ignore case replace UTF8 encoded String
  47254  * the olds string is replaced with the news string max times in the result
  47255  * 0 for max means replace all olds strings
  47256  *
  47257  * \param
  47258  *   s: string
  47259  * \param
  47260  *   olds: old string to be replaced in s
  47261  * \param
  47262  *   news: new string replacing olds in s
  47263  * \param
  47264  *   max: number of times to replace olds, 0 to replace all found olds
  47265  * \return
  47266  *   modified s string
  47267  *   NULL s not modified when s is NULL or empty and when olds is empty
  47268  */
  47269 char* bLicReplaceUTF8(char UNUSED *s, size_t UNUSED sSize, const char UNUSED *olds, const char UNUSED *news, size_t max UNUSED) {
  47270 
  47271   // TODO changing UTF8 to lower case with casefold can change the
  47272   // number of bytes in the string
  47273   return(NULL);
  47274 }
  47275 
  47276 
  47277 /**
  47278  * ignore case replace Many UTF8 encoded Strings
  47279  * the original remains unchanged
  47280  * duplicate s
  47281  * the olds string is replaced with the news string max times in the result
  47282  *
  47283  * Example:
  47284  * r = replaceManyUTF8("asd", "s",  "BNM", "a",  "AAA")
  47285  *                         ^olds ^news  ^olds ^news
  47286  *
  47287  * \param
  47288  *   s: string
  47289  * \param
  47290  *   olds: old string to be replaced in s
  47291  * \param
  47292  *   news: new string replacing olds in s
  47293  *   ...
  47294  * \return
  47295  *   new string
  47296  *   "" when s is empty
  47297  *   NULL when s is NULL
  47298  *   NULL when only 2 parameters are given
  47299  *   NULL when any olds is empty
  47300  */
  47301 char *icReplaceManyUTF8F(const char *paramType UNUSED, ...) {
  47302 
  47303   // TODO changing UTF8 to lower case with casefold can change the
  47304   // number of bytes in the string
  47305   return(NULL);
  47306 }
  47307 
  47308 /**
  47309  * in place ignore case replace Many UTF8 encoded Strings
  47310  * the olds string is replaced with the news string max times in the result
  47311  *
  47312  * Example:
  47313  * iicReplaceManyUTF8(s, "s",  "BNM", "a",  "AAA")
  47314  *                        ^olds ^news  ^olds ^news
  47315  *
  47316  * \param
  47317  *   string
  47318  * \param
  47319  *   olds: old string to be replaced in s
  47320  * \param
  47321  *   news: new string replacing olds in s
  47322  *   ...
  47323  * \return
  47324  *   modified string
  47325  *   NULL not modified when s is empty, when s is NULL, when only 2 parameters are given,
  47326  *     when any olds is empty
  47327  */
  47328 char *iicReplaceManyUTF8F(char **s UNUSED, char *paramType UNUSED, ...) {
  47329 
  47330   // TODO changing UTF8 to lower case with casefold can change the
  47331   // number of bytes in the string
  47332   return(NULL);
  47333 }
  47334 
  47335 /**
  47336  * buffer ignore case replace Many UTF8 encoded Strings
  47337  * the olds string is replaced with the news string max times in the result
  47338  *
  47339  * Example:
  47340  * bReplaceManyUTF8(s, "s",  "BNM", "a",  "AAA")
  47341  *                      ^olds ^news  ^olds ^news
  47342  *
  47343  * \param
  47344  *   string
  47345  * \param
  47346  *   olds: old string to be replaced in s
  47347  * \param
  47348  *   news: new string replacing olds in s
  47349  *   ...
  47350  * \return
  47351  *   modified string
  47352  *   NULL not modified when s is empty, when s is NULL, when only 2 parameters are given,
  47353  *     when any olds is empty
  47354  */
  47355 char *bicReplaceManyUTF8F(char *s UNUSED, char *paramType UNUSED, ...) {
  47356 
  47357   // TODO changing UTF8 to lower case with casefold can change the
  47358   // number of bytes in the string
  47359   return(NULL);
  47360 }
  47361 
  47362 /**
  47363  * buffer size ignore case replace Many UTF8 encoded Strings
  47364  * the olds string is replaced with the news string max times in the result
  47365  *
  47366  * Example:
  47367  * bReplaceManyUTF8(s, "s",  "BNM", "a",  "AAA")
  47368  *                      ^olds ^news  ^olds ^news
  47369  *
  47370  * \param
  47371  *   string
  47372  * \param
  47373  *   olds: old string to be replaced in s
  47374  * \param
  47375  *   news: new string replacing olds in s
  47376  *   ...
  47377  * \return
  47378  *   modified string
  47379  *   NULL not modified when s is empty, when s is NULL, when only 2 parameters are given,
  47380  *     when any olds is empty
  47381  */
  47382 char *bLicReplaceManyUTF8F(char *s UNUSED, size_t sSize UNUSED, char *paramType UNUSED, ...) {
  47383 
  47384   // TODO changing UTF8 to lower case with casefold can change the
  47385   // number of bytes in the string
  47386   return(NULL);
  47387 }
  47388 
  47389 
  47390 /**
  47391  * UTF8 encoded string Index Equal
  47392  * compare string1 at character index to string2
  47393  * when string2 is empty, the result is false
  47394  *
  47395  * \param
  47396  *   2 strings
  47397  * \return
  47398  *   true string1 at index is equal to string2
  47399  *   false they differ
  47400  */
  47401 bool eqIUTF8(const char *string1, const char *string2, int64_t index) {
  47402 
  47403   if (!string1) {
  47404     return(false);
  47405   }
  47406 
  47407   const char *i = idx2PtrUTF8(string1, index);
  47408   return(eqIS(string1, string2, (int64_t)(i-string1)));
  47409 }
  47410 
  47411 bool eqICharUTF8(const char *string1, char c, int64_t index) {
  47412 
  47413   if (!string1) {
  47414     return(false);
  47415   }
  47416 
  47417   const char *i = idx2PtrUTF8(string1, index);
  47418   return(eqICharS(string1, c, (int64_t)(i-string1)));
  47419 }
  47420 
  47421 
  47422 /**
  47423  * ignore case UTF8 encoded string Equal
  47424  * compare string1 to string2
  47425  *
  47426  * \param
  47427  *   2 strings
  47428  * \return
  47429  *   true the strings have identical content
  47430  *   false they differ
  47431  */
  47432 bool icEqUTF8(const char *string1, const char *string2) {
  47433 
  47434   // sanity checks
  47435   if (!string1 || !string2) {
  47436     return(false);
  47437   }
  47438 
  47439   char *s1 = casefoldUTF8(string1);
  47440   char *s2 = casefoldUTF8(string2);
  47441   bool r = (strcmp(s1,s2) == 0);
  47442   freeManyS(s1, s2);
  47443   return(r);
  47444 }
  47445 
  47446 bool icEqCharUTF8(char c, const char *string2) {
  47447 
  47448   // sanity checks
  47449   if (!string2) {
  47450     return(false);
  47451   }
  47452 
  47453   charToS(s, (char)tolower(c));
  47454   char *s2 = casefoldUTF8(string2);
  47455   bool r = (strcmp(s,s2) == 0);
  47456   free(s2);
  47457   return(r);
  47458 }
  47459 
  47460 bool icEqUTF8Char(const char *string1, char c) {
  47461 
  47462   // sanity checks
  47463   if (!string1) {
  47464     return(false);
  47465   }
  47466 
  47467   charToS(s, (char)tolower(c));
  47468   char *s1 = casefoldUTF8(string1);
  47469   bool r = (strcmp(s1,s) == 0);
  47470   free(s1);
  47471   return(r);
  47472 }
  47473 
  47474 /**
  47475  * ignore case UTF8 encoded string Index Equal
  47476  * compare string1 at character index to string2
  47477  * when string2 is empty, the result is false
  47478  *
  47479  * \param
  47480  *   2 strings
  47481  * \return
  47482  *   true string1 at index is equal to string2
  47483  *   false they differ
  47484  */
  47485 bool icEqIUTF8(const char *string1 UNUSED, const char *string2 UNUSED, int64_t index UNUSED) {
  47486 
  47487   // TODO casefold changes the number of character, index might change
  47488   return(false);
  47489 }
  47490 
  47491 bool icEqICharUTF8(const char *string1 UNUSED, char c UNUSED, int64_t index UNUSED) {
  47492 
  47493   // TODO casefold changes the number of character, index might change
  47494   return(false);
  47495 }
  47496 
  47497 
  47498 /**
  47499  * ignore case starts With UTF8 encoded String
  47500  * compare start of string1 with string2
  47501  *
  47502  * \param
  47503  *   2 strings
  47504  * \return
  47505  *   true when string1 starts with string2
  47506  *   false for other cases
  47507  */
  47508 bool icStartsWithUTF8(const char *string1, const char *string2) {
  47509 
  47510   // sanity checks
  47511   if (!string1 || !string2) {
  47512     return(false);
  47513   }
  47514 
  47515   char *s1 = casefoldUTF8(string1);
  47516   char *s2 = casefoldUTF8(string2);
  47517   bool r = (strncmp(s1, s2, strlen(s2)) == 0);
  47518   freeManyS(s1, s2);
  47519   return(r);
  47520 }
  47521 
  47522 
  47523 /**
  47524  * ignore case ends With UTF8 encoded String
  47525  * compare end of string1 with string2
  47526  *
  47527  * \param
  47528  *   2 strings
  47529  * \return
  47530  *   true when string1 ends with string2
  47531  *   false for other cases
  47532  */
  47533 bool icEndsWithUTF8(const char *string1, const char *string2) {
  47534   bool r;
  47535 
  47536   // sanity checks
  47537   if (!string1 || !string2) {
  47538     return(false);
  47539   }
  47540 
  47541   char *s1 = casefoldUTF8(string1);
  47542   char *s2 = casefoldUTF8(string2);
  47543   if (strlen(s1) < strlen(s2)) {
  47544     r = false;
  47545     goto end;
  47546   }
  47547   r = (strcmp(s1 + strlen(s1) - strlen(s2), s2) == 0);
  47548   end:
  47549   freeManyS(s1, s2);
  47550   return(r);
  47551 }
  47552 
  47553 
  47554 /**
  47555  * ignore case count UTF8 encoded String
  47556  * count number of (non-overlapping) occurrences of a substring
  47557  *
  47558  * Example:
  47559  *   assert(countUTF8("aaa aaa", "a") == 6);
  47560  *   assert(countUTF8("aaa aaa", "ab") == 0);
  47561  *   assert(countUTF8("aaa aaa", "aa") == 2);
  47562  *
  47563  * \param
  47564  *   2 strings
  47565  * \return
  47566  *   string count
  47567  *   -1 when there is an error
  47568  */
  47569 ssize_t icCountUTF8(const char *s, const char *needle) {
  47570   char *lower = NULL;
  47571 
  47572   // sanity checks
  47573   if (!s || !needle) {
  47574     return(-1);
  47575   }
  47576 
  47577   lower      = casefoldUTF8(s);
  47578   needle     = casefoldUTF8(needle);
  47579   ssize_t r  = 0;
  47580   size_t len = strlen(needle);
  47581 
  47582   s = lower;
  47583   while (s != NULL) {
  47584     s = strstr(s, needle);
  47585     if (s != NULL) {
  47586       r++;
  47587       s += len;
  47588     }
  47589     else {
  47590       break;
  47591   }
  47592     }
  47593 
  47594   freeManyS(lower, needle);
  47595   return(r);
  47596 }
  47597 
  47598 /** some case convertions depend on the current LOCALE */
  47599 internal localeType getLocaleType(void) {
  47600 
  47601   const char *locale = setlocale (LC_CTYPE, NULL);;
  47602 
  47603   if (!locale) {
  47604     return(LOCALE_NORMAL);
  47605   }
  47606 
  47607   switch (locale[0]) {
  47608     case 'a':
  47609       if (locale[1] == 'z') {
  47610         return(LOCALE_TURKIC);
  47611       }
  47612       break;
  47613     case 'l':
  47614       if (locale[1] == 't') {
  47615         return(LOCALE_LITHUANIAN);
  47616       }
  47617       break;
  47618     case 't':
  47619       if (locale[1] == 'r') {
  47620         return(LOCALE_TURKIC);
  47621       }
  47622       break;
  47623     default:;
  47624       // return default value
  47625   }
  47626 
  47627   return(LOCALE_NORMAL);
  47628 }
  47629 
  47630 /**
  47631  * UTF-8 code point to rune
  47632  *
  47633  * \param
  47634  *   code UTF-8 code point
  47635  * \return
  47636  *   Rune
  47637  *   0 failed
  47638  */
  47639 rune code2RuneUTF8(const char *code) {
  47640   uint8_t ln;
  47641 
  47642   return(code2RuneLUTF8(code, &ln));
  47643 }
  47644 
  47645 /**
  47646  * UTF-8 code point to rune and length
  47647  *
  47648  * the code point length is returned in *n
  47649  *
  47650  * \param
  47651  *   code UTF-8 code point
  47652  * \param
  47653  *   n pointer to returned code point length
  47654  * \return
  47655  *   Rune
  47656  *   0 failed
  47657  */
  47658 rune code2RuneLUTF8(const char *code, uint8_t *n) {
  47659 
  47660   if (!code || !*code || !n) {
  47661     return(0);
  47662   }
  47663 
  47664   rune r;
  47665 
  47666   *n = UTFSEQ(code[0]);;
  47667   switch (*n) {
  47668     case 1:
  47669       r = code[0];
  47670       break; /* 0xxxxxxx */
  47671     case 2:
  47672       r = code[0] & 0x1F;
  47673       break; /* 110xxxxx */
  47674     case 3:
  47675       r = code[0] & 0x0F;
  47676       break; /* 1110xxxx */
  47677     case 4:
  47678       r = code[0] & 0x07;
  47679       break; /* 11110xxx */
  47680     case 5:
  47681       r = code[0] & 0x03;
  47682       break; /* 111110xx */
  47683     case 6:
  47684       r = code[0] & 0x01;
  47685       break; /* 1111110x */
  47686     default: /* invalid sequence */
  47687       return(0);
  47688   }
  47689 
  47690   // add values from continuation bytes
  47691   rangeFrom(i, 1, *n) {
  47692     if ((code[i] & 0xC0) == 0x80) {
  47693       // add bits from continuation byte to rune value
  47694       // cannot overflow: 6 byte sequences contain 31 bits
  47695       // 10xxxxxx
  47696       r = (r << 6) | (code[i] & 0x3F);
  47697     }
  47698     else {
  47699       // expected continuation
  47700       return(0);
  47701     }
  47702   }
  47703 
  47704   if (runeLenUTF8(r) < *n) {
  47705     return(0);
  47706   }
  47707   return(r);
  47708 }
  47709 
  47710 static int firstBytesUTF8[6] = {0, 0xC0, 0xE0, 0xF0, 0xF8, 0xFC};
  47711 
  47712 /**
  47713  * rune to UTF-8 code point
  47714  *
  47715  * \param
  47716  *   dst destination buffer at least 6 bytes or if NULL, the code point length is computed
  47717  * \param
  47718  *   c UNICODE rune
  47719  * \return
  47720  *   code point length and code point in dst
  47721  *   when dst is NULL, return code point length only
  47722  *   0 bad rune, dst becomes an empty string
  47723  */
  47724 size_t bRune2CodeUTF8(char *dst, rune c) {
  47725   size_t len = 0;;
  47726   int first;
  47727 
  47728   len = runeLenUTF8(c);
  47729   if (!len) {
  47730     // bad rune
  47731     if (dst) {
  47732       *dst = 0;
  47733     }
  47734     return(0);
  47735   }
  47736 
  47737   first = firstBytesUTF8[len-1];
  47738 
  47739   if (dst) {
  47740     rangeDownTo(i, (ssize_t)len, 1) {
  47741       dst[i] = (char)((c & 0x3f) | 0x80);
  47742       c >>= 6;
  47743     }
  47744     dst[0] = (char)(c | first);
  47745   }
  47746 
  47747   return(len);
  47748 }
  47749 
  47750 /**
  47751  * rune length as UTF-8 code point
  47752  *
  47753  * \param
  47754  *   r UNICODE rune
  47755  * \return
  47756  *   code point length
  47757  *   0 bad rune
  47758  */
  47759 uint8_t runeLenUTF8(rune r) {
  47760 
  47761   if (BADRUNE(r)) {
  47762     // error
  47763     return(0);
  47764   }
  47765   else if (r < 0x80) {
  47766     return(1);
  47767   }
  47768   else if (r < 0x800) {
  47769     return(2);
  47770   }
  47771   else if (r < 0x10000) {
  47772     return(3);
  47773   }
  47774   else if (r < 0x200000) {
  47775     return(4);
  47776   }
  47777   else if (r < 0x4000000) {
  47778     return(5);
  47779   }
  47780   else {
  47781     return(6);
  47782 }
  47783   }
  47784 
  47785 // constants for hangul syllable [de]composition
  47786 #define SBase   0xAC00
  47787 #define LBase   0x1100
  47788 #define VBase   0x1161
  47789 #define TBase   0x11A7
  47790 #define LCount   19
  47791 #define VCount   21
  47792 #define TCount   28
  47793 #define NCount   (VCount * TCount)
  47794 #define SCount   (LCount * NCount)
  47795 
  47796 /* http://www.unicode.org/unicode/reports/tr15/#Hangul
  47797  * r should be null or have sufficient space. Calling with r == NULL will
  47798  * only calculate the result len; however, a buffer with space for three
  47799  * characters will always be big enough. */
  47800 internal size_t decompose_hangul(rune s, rune *r) {
  47801   int32_t SIndex = s - SBase;;
  47802   int32_t TIndex = SIndex % TCount;;
  47803 
  47804   if (r) {
  47805     r[0] = LBase + SIndex / NCount;
  47806     r[1] = VBase + (SIndex % NCount) / TCount;
  47807   }
  47808 
  47809   if (TIndex) {
  47810     if (r) {
  47811       r[2] = TBase + TIndex;
  47812     }
  47813     return(3);
  47814   }
  47815   else {
  47816     return(2);
  47817 }
  47818   }
  47819 
  47820 /* returns a pointer to a null-terminated UTF-8 string */
  47821 internal const char *find_decomposition (rune ch) {
  47822   int start = 0;;
  47823   int end = ARRAY_SIZE(decomp_table);;
  47824 
  47825   if (ch >= decomp_table[start].ch && ch <= decomp_table[end - 1].ch) {
  47826     forever {
  47827       int half = (start + end) / 2;
  47828       if (ch == decomp_table[half].ch) {
  47829         int offset = decomp_table[half].canon_offset;;
  47830         if (offset == UNICODE_NOT_PRESENT_OFFSET) {
  47831           return(NULL);
  47832         }
  47833 
  47834         return(&(decomp_expansion_string[offset]));
  47835       }
  47836       else if (half == start) {
  47837         break;
  47838       }
  47839       else if (ch > decomp_table[half].ch) {
  47840         start = half;
  47841       }
  47842       else {
  47843         end = half;
  47844       }
  47845     }
  47846   }
  47847 
  47848   return(NULL);
  47849 }
  47850 
  47851 
  47852 internal size_t runeFullyDecompose(rune  ch, rune *result, size_t resultLen) {
  47853   const char *decomp = NULL;
  47854   const char *p = NULL;
  47855 
  47856   // Hangul syllable
  47857   if (ch >= SBase && ch < SBase + SCount) {
  47858     rune buffer[3];
  47859     size_t len = decompose_hangul(ch, result ? buffer : NULL);
  47860     if (result) {
  47861       for (size_t i = 0; i < len && i < resultLen; i++) {
  47862         result[i] = buffer[i];
  47863     }
  47864       }
  47865     return(len);
  47866   }
  47867   else if (EVA(decomp, find_decomposition (ch)) != NULL) {
  47868     // Found it.
  47869     size_t len = lenUTF8(decomp);
  47870     size_t i;
  47871     for (p = decomp, i = 0; i < len && i < resultLen; nxCodeUTF8(p), i++) {
  47872       result[i] = code2RuneUTF8(p);
  47873     }
  47874 
  47875     return(len);
  47876   }
  47877 
  47878   // Does not decompose
  47879   if (result && resultLen >= 1) {
  47880     *result = ch;
  47881   }
  47882   return(1);
  47883 }
  47884 
  47885 internal size_t output_marks(const char **p_inout, char *dst, bool remove_dot) {
  47886   const char *p = NULL;
  47887   size_t len = 0;;
  47888 
  47889   p = *p_inout;
  47890 
  47891   while (*p) {
  47892     rune c = code2RuneUTF8(p);;
  47893 
  47894     if (ISMARK(RUNETYPE(c))) {
  47895       if (!remove_dot || c != 0x307) {
  47896         // COMBINING DOT ABOVE
  47897         len += bRune2CodeUTF8(dst ? dst + len : NULL, c);
  47898       }
  47899       nxCodeUTF8(p);
  47900     }
  47901     else {
  47902       break;
  47903   }
  47904     }
  47905 
  47906   *p_inout = p;
  47907   return(len);
  47908 }
  47909 
  47910 internal size_t output_special_case(char *dst, int offset, int type, int which) {
  47911   const char *p = NULL;
  47912   size_t len;
  47913 
  47914   p = special_case_table + offset;
  47915 
  47916   if (type != UNICODE_TITLECASE_LETTER) {
  47917     nxCodeUTF8(p);
  47918   }
  47919 
  47920   if (which == 1) {
  47921     p += strlen(p) + 1;
  47922   }
  47923 
  47924   len = strlen(p);
  47925   if (dst) {
  47926     memcpy(dst, p, len);
  47927   }
  47928 
  47929   return(len);
  47930 }
  47931 
  47932 /**
  47933  * rune toupper UTF8
  47934  *
  47935  * Converts a character to uppercase.
  47936  *
  47937  * \param
  47938  *   c rune
  47939  * \return
  47940  *   c converted to uppercase
  47941  *   c unchanged if c has no upper case or is not lowercase or titlecase
  47942  */
  47943 rune toupperUTF8(rune c) {
  47944   int t = RUNETYPE(c);;
  47945 
  47946   if (t == UNICODE_LOWERCASE_LETTER) {
  47947     rune val = ATTTABLE (c >> 8, c & 0xff);
  47948     if (val >= 0x1000000) {
  47949       const char *p = special_case_table + val - 0x1000000;;
  47950       val           = code2RuneUTF8(p);
  47951     }
  47952     // Some lowercase letters, e.g., U+000AA, FEMININE ORDINAL INDICATOR,
  47953     // do not have an uppercase equivalent, in which case val will be
  47954     // zero.
  47955     return(val ? val : c);
  47956   }
  47957   else if (t == UNICODE_TITLECASE_LETTER) {
  47958     range(i, ARRAY_SIZE(title_table)) {
  47959       if (title_table[i][0] == c) {
  47960         return(title_table[i][1] ? title_table[i][1] : c);
  47961       }
  47962     }
  47963   }
  47964   return(c);
  47965 }
  47966 
  47967 internal size_t _upperUTF8(char *dst, const char *utf8, localeType lcl) {
  47968   size_t len = 0;;
  47969   const char *last = NULL;
  47970   bool last_was_i = FALSE;;
  47971 
  47972   while (*utf8) {
  47973     rune c = code2RuneUTF8(utf8);
  47974     int t  = RUNETYPE(c);
  47975 
  47976     last = utf8;
  47977 
  47978     nxCodeUTF8(utf8);
  47979 
  47980     if (lcl == LOCALE_LITHUANIAN) {
  47981       if (c == 'i') {
  47982         last_was_i = TRUE;
  47983       }
  47984       else {
  47985         if (last_was_i) {
  47986           rune decomp[RUNE_MAX_DECOMPOSITION_LENGTH];
  47987           size_t decompLen = runeFullyDecompose(c, decomp, ARRAY_SIZE(decomp));
  47988           range(i, decompLen) {
  47989             if (decomp[i] != 0x307) {
  47990               // COMBINING DOT ABOVE
  47991               len += bRune2CodeUTF8(dst ? dst + len : NULL, toupperUTF8(decomp[i]));;
  47992             }
  47993           }
  47994 
  47995           len += output_marks(&utf8, dst ? dst + len : NULL, TRUE);;
  47996           continue;
  47997         }
  47998 
  47999         if (!ISMARK(t)) {
  48000           last_was_i = FALSE;
  48001     }
  48002       }
  48003         }
  48004 
  48005     if (lcl == LOCALE_TURKIC && c == 'i') {
  48006       // i => LATIN CAPITAL LETTER I WITH DOT ABOVE
  48007       len += bRune2CodeUTF8(dst ? dst + len : NULL, 0x130);
  48008     }
  48009     else if (c == 0x0345) {
  48010       // COMBINING GREEK YPOGEGRAMMENI
  48011       len += output_marks(&utf8, dst ? dst + len : NULL, FALSE);
  48012 
  48013       // And output as GREEK CAPITAL LETTER IOTA
  48014       len += bRune2CodeUTF8(dst ? dst + len : NULL, 0x399);
  48015     }
  48016     else if (IS(t, OR(UNICODE_LOWERCASE_LETTER, OR(UNICODE_TITLECASE_LETTER, 0)))) {
  48017       rune val = ATTTABLE (c >> 8, c & 0xff);
  48018 
  48019       if (val >= 0x1000000) {
  48020         len += output_special_case (dst ? dst + len : NULL, val - 0x1000000, t, t == UNICODE_LOWERCASE_LETTER ? 0 : 1);
  48021       }
  48022       else {
  48023         if (t == UNICODE_TITLECASE_LETTER) {
  48024           range(i, ARRAY_SIZE(title_table)) {
  48025             if (title_table[i][0] == c) {
  48026               val = title_table[i][1];
  48027               break;
  48028             }
  48029           }
  48030         }
  48031 
  48032         // Some lowercase letters, e.g., U+000AA, FEMININE ORDINAL INDICATOR,
  48033         // do not have an uppercase equivalent, in which case val will be
  48034         // zero.
  48035         len += bRune2CodeUTF8(dst ? dst + len : NULL, val ? val : c);
  48036     }
  48037       }
  48038     else {
  48039       uint8_t codeLen = codeSizeUTF8(last);
  48040 
  48041       if ((dst)) {
  48042         memcpy(dst + len, last, codeLen);
  48043       }
  48044 
  48045       len += codeLen;;
  48046   }
  48047     }
  48048   if (dst) {
  48049     *(dst+len) = 0;
  48050   }
  48051   return(len);
  48052 }
  48053 
  48054 
  48055 /**
  48056  * upper case UTF-8 encoded string
  48057  * duplicate string
  48058  *
  48059  * \param
  48060  *   string UTF-8 encoded string
  48061  * \return
  48062  *   new upper case string (you must free the pointer)
  48063  */
  48064 char *upperUTF8(const char *utf8) {
  48065   char *r = NULL;
  48066 
  48067   // sanity checks
  48068   if (!utf8) {
  48069     return(NULL);
  48070   }
  48071 
  48072   localeType lcl = getLocaleType();
  48073 
  48074   size_t len     = _upperUTF8(NULL, utf8, lcl);
  48075   r              = malloc(len+1);
  48076   if (!r) {
  48077     return(NULL);
  48078   }
  48079   _upperUTF8(r, utf8, lcl);
  48080   return(r);
  48081 }
  48082 
  48083 /**
  48084  * upper case UTF-8 encoded string
  48085  *
  48086  * \param
  48087  *   string (this parameter is reallocated)
  48088  * \return
  48089  *   upper case string (you must free the pointer)
  48090  *   NULL error
  48091  */
  48092 char *iUpperUTF8(char **utf8) {
  48093 
  48094   if (!utf8 || !*utf8) {
  48095     return(NULL);
  48096   }
  48097 
  48098   char *s = upperUTF8(*utf8);
  48099 
  48100   free(*utf8);
  48101   *utf8 = s;
  48102 
  48103   return(*utf8);
  48104 }
  48105 
  48106 /**
  48107  * buffer upper case String
  48108  *
  48109  * \param
  48110  *   string
  48111  * \return
  48112  *   upper case string
  48113  *   NULL error
  48114  */
  48115 char *bUpperUTF8(char *utf8 UNUSED) {
  48116 
  48117   // TODO
  48118   return(NULL);
  48119 }
  48120 
  48121 /**
  48122  * runeCombiningClass:
  48123  * @uc: a Unicode character
  48124  *
  48125  * Determines the canonical combining class of a Unicode character.
  48126  *
  48127  * Returns: the combining class of the character
  48128  **/
  48129 local int runeCombiningClass (rune uc) {
  48130 
  48131   return(COMBINING_CLASS(uc));
  48132 }
  48133 
  48134 /* traverses the string checking for characters with combining class == 230
  48135  * until a base character is found */
  48136 internal bool has_more_above (const char *str) {
  48137   const char *p = NULL;
  48138   int combining_class;
  48139 
  48140   p = str;
  48141   while (*p) {
  48142     combining_class = runeCombiningClass(code2RuneUTF8(p));
  48143     if (combining_class == 230) {
  48144       return(TRUE);
  48145     }
  48146     else if (combining_class == 0) {
  48147       break;
  48148     }
  48149 
  48150     nxCodeUTF8(p);
  48151   }
  48152 
  48153   return(FALSE);
  48154 }
  48155 
  48156 /**
  48157  * rune tolower UTF8
  48158  *
  48159  * Converts a character to lower case.
  48160  *
  48161  * \param
  48162  *   c UNICODE rune
  48163  * \return
  48164  *   lowercase c
  48165  *   c unchanged if c has lowercase or is not an uppercase or titlecase character
  48166  **/
  48167 rune tolowerUTF8(rune c) {
  48168 
  48169   int t = RUNETYPE(c);
  48170   if (t == UNICODE_UPPERCASE_LETTER) {
  48171     rune val = ATTTABLE (c >> 8, c & 0xff);
  48172     if (val >= 0x1000000) {
  48173       const char *p = special_case_table + val - 0x1000000;
  48174       return(code2RuneUTF8(p));
  48175     }
  48176     else {
  48177       // Not all uppercase letters are guaranteed to have a lowercase
  48178       // equivalent.  If this is the case, val will be zero.
  48179       return(val ? val : c);
  48180   }
  48181     }
  48182   else if (t == UNICODE_TITLECASE_LETTER) {
  48183     range(i, ARRAY_SIZE(title_table)) {
  48184       if (title_table[i][0] == c) {
  48185         return(title_table[i][2]);
  48186       }
  48187     }
  48188   }
  48189   return(c);
  48190 }
  48191 
  48192 internal size_t _lowerUTF8(char *dst, const char *utf8, localeType lcl) {
  48193   size_t len = 0;;
  48194   const char *last = NULL;
  48195 
  48196   while (*utf8) {
  48197     rune c = code2RuneUTF8(utf8);
  48198     int t  = RUNETYPE(c);
  48199 
  48200     last = utf8;
  48201 
  48202     nxCodeUTF8(utf8);
  48203 
  48204     rune val;
  48205 
  48206     if ((lcl == LOCALE_TURKIC && c == 'I')) {
  48207       if (code2RuneUTF8(utf8) == 0x0307) {
  48208         // I + COMBINING DOT ABOVE => i (U+0069)
  48209         len += bRune2CodeUTF8(dst ? dst + len : NULL, 0x0069);
  48210         nxCodeUTF8(utf8);
  48211       }
  48212       else {
  48213         // I => LATIN SMALL LETTER DOTLESS I
  48214         len += bRune2CodeUTF8(dst ? dst + len : NULL, 0x131);
  48215     }
  48216       }
  48217     // Introduce an explicit dot above when lowercasing capital I's and J's
  48218     // whenever there are more accents above. [SpecialCasing.txt]
  48219     else if (lcl == LOCALE_LITHUANIAN && (c == 0x00cc || c == 0x00cd || c == 0x0128)) {
  48220       len += bRune2CodeUTF8(dst ? dst + len : NULL, 0x0069);
  48221       len += bRune2CodeUTF8(dst ? dst + len : NULL, 0x0307);
  48222 
  48223       switch (c) {
  48224         case 0x00cc:
  48225           len += bRune2CodeUTF8(dst ? dst + len : NULL, 0x0300);
  48226           break;
  48227         case 0x00cd:
  48228           len += bRune2CodeUTF8(dst ? dst + len : NULL, 0x0301);
  48229           break;
  48230         case 0x0128:
  48231           len += bRune2CodeUTF8(dst ? dst + len : NULL, 0x0303);
  48232           break;
  48233         default:;
  48234           // do nothing
  48235       }
  48236     }
  48237     else if (lcl == LOCALE_LITHUANIAN && (c == 'I' || c == 'J' || c == 0x012e) && has_more_above (utf8)) {
  48238       len += bRune2CodeUTF8(dst ? dst+len : NULL, tolowerUTF8(c));
  48239       len += bRune2CodeUTF8(dst ? dst+len : NULL, 0x0307);
  48240     }
  48241     else if (c == 0x03A3) {
  48242       // GREEK CAPITAL LETTER SIGMA
  48243       if (*utf8) {
  48244         rune next_c   = code2RuneUTF8(utf8);;
  48245         int next_type = RUNETYPE(next_c);;
  48246 
  48247         // SIGMA maps differently depending on whether it is
  48248         // final or not. The following simplified test would
  48249         // fail in the case of combining marks following the
  48250         // sigma, but I don't think that occurs in real text.
  48251         // The test here matches that in ICU.
  48252         // Lu,Ll,Lt,Lm,Lo
  48253         if (ISALPHA(next_type)) {
  48254           // GREEK SMALL SIGMA
  48255           val = 0x3c3;
  48256         }
  48257         else {
  48258           // GREEK SMALL FINAL SIGMA
  48259           val = 0x3c2;
  48260       }
  48261         }
  48262       else {
  48263         // GREEK SMALL FINAL SIGMA
  48264         val = 0x3c2;
  48265       }
  48266 
  48267       len += bRune2CodeUTF8(dst ? dst + len : NULL, val);
  48268     }
  48269     else if (IS (t, OR (UNICODE_UPPERCASE_LETTER, OR (UNICODE_TITLECASE_LETTER, 0)))) {
  48270       val = ATTTABLE(c >> 8, c & 0xff);
  48271 
  48272       if (val >= 0x1000000) {
  48273         len += output_special_case(dst ? dst + len : NULL, val - 0x1000000, t, 0);
  48274       }
  48275       else {
  48276         if (t == UNICODE_TITLECASE_LETTER) {
  48277           range(i, ARRAY_SIZE(title_table)) {
  48278             if (title_table[i][0] == c) {
  48279               val = title_table[i][2];
  48280               break;
  48281             }
  48282           }
  48283         }
  48284 
  48285         // Not all uppercase letters are guaranteed to have a lowercase
  48286         // equivalent.  If this is the case, val will be zero.
  48287         len += bRune2CodeUTF8(dst ? dst+len : NULL, val ? val : c);;
  48288     }
  48289       }
  48290 
  48291     else {
  48292       uint8_t codeLen = codeSizeUTF8(last);
  48293 
  48294       if ((dst)) {
  48295         memcpy(dst+len, last, codeLen);
  48296       }
  48297 
  48298       len += codeLen;;
  48299   }
  48300     }
  48301 
  48302   if (dst) {
  48303     *(dst+len) = 0;
  48304   }
  48305   return(len);
  48306 }
  48307 
  48308 /**
  48309  * lower case UTF-8 String
  48310  * duplicate string
  48311  *
  48312  * \param
  48313  *   string
  48314  * \return
  48315  *   new lower case string (you must free the pointer)
  48316  */
  48317 char *lowerUTF8(const char *utf8) {
  48318   char *r = NULL;
  48319 
  48320   // sanity checks
  48321   if (!utf8) {
  48322     return(NULL);
  48323   }
  48324 
  48325   localeType lcl = getLocaleType();
  48326 
  48327   size_t len     = _lowerUTF8(NULL, utf8, lcl);
  48328   r              = malloc(len+1);
  48329   if (!r) {
  48330     return(NULL);
  48331   }
  48332   _lowerUTF8(r, utf8, lcl);
  48333   return(r);
  48334 }
  48335 
  48336 /**
  48337  * lower case String
  48338  *
  48339  * \param
  48340  *   string (this parameter is reallocated)
  48341  * \return
  48342  *   lower case string (you must free the pointer)
  48343  *   NULL error
  48344  */
  48345 char *iLowerUTF8(char **utf8) {
  48346 
  48347   if (!utf8 || !*utf8) {
  48348     return(NULL);
  48349   }
  48350 
  48351   char *s = lowerUTF8(*utf8);
  48352 
  48353   free(*utf8);
  48354   *utf8 = s;
  48355 
  48356   return(*utf8);
  48357 }
  48358 
  48359 /**
  48360  * buffer lower case String
  48361  *
  48362  * \param
  48363  *   string
  48364  * \return
  48365  *   lower case string
  48366  *   NULL error
  48367  */
  48368 char *bLowerUTF8(char *string UNUSED) {
  48369 
  48370   // TODO
  48371   return(NULL);
  48372 }
  48373 
  48374 /**
  48375  * casefold UTF-8 encoded string
  48376  *
  48377  * \param
  48378  *   utf8 UTF-8 encoded string
  48379  * \return
  48380  *   new string (you must free the pointer)
  48381  *   NULL when utf8 is NULL
  48382  */
  48383 char *casefoldUTF8(const char *utf8) {
  48384   char *r = NULL;
  48385 
  48386   if (!utf8) {
  48387     return(NULL);
  48388   }
  48389 
  48390   emptyS(r);
  48391 
  48392   while (*utf8) {
  48393     rune ch   = code2RuneUTF8(utf8);
  48394 
  48395     int start = 0;
  48396     int end   = ARRAY_SIZE(casefold_table);
  48397 
  48398     if (ch >= casefold_table[start].ch && ch <= casefold_table[end - 1].ch) {
  48399       forever {
  48400         int half = (start + end) / 2;
  48401         if (ch == casefold_table[half].ch) {
  48402           pErrorNULL(iAppendS(&r, casefold_table[half].data));
  48403           goto next;
  48404         }
  48405         else if (half == start) {
  48406           break;
  48407         }
  48408         else if (ch > casefold_table[half].ch) {
  48409           start = half;
  48410         }
  48411         else {
  48412           end = half;
  48413         }
  48414       }
  48415     }
  48416 
  48417     char code[8] = {0, 0, 0, 0, 0, 0, 0, 0};
  48418     pError0(bRune2CodeUTF8(code, tolowerUTF8(ch)));
  48419     pErrorNULL(iAppendS(&r, code));
  48420 
  48421     next:
  48422       nxCodeUTF8(utf8);
  48423   }
  48424 
  48425   return(r);
  48426 }
  48427 
  48428 /**
  48429  * uniq UTF-8 String
  48430  * duplicate string
  48431  *
  48432  * remove successive repetitions of UTF-8 code point code
  48433  *
  48434  * \param
  48435  *   string
  48436  * \param
  48437  *   c character to remove
  48438  * \return
  48439  *   new string without successive repetitions of char c (you must free the pointer)
  48440  */
  48441 char *uniqUTF8(const char *string, const char *code) {
  48442   char *r = NULL;
  48443   size_t len;
  48444 
  48445   // sanity checks
  48446   if (!string || !code) {
  48447     return(NULL);
  48448   }
  48449 
  48450   r   = strdup(string);
  48451   if (!r) {
  48452     return(NULL);
  48453   }
  48454   len = lenUTF8(string);
  48455 
  48456   if (len < 2) {
  48457     // string is too short to have repetitions
  48458     return(r);
  48459   }
  48460 
  48461   char *p        = r;
  48462   char *c        = nextCodeUTF8(r);
  48463   nxCodeUTF8(string);
  48464 
  48465   while (*string) {
  48466     if (startsWithS(p, code) && startsWithS(string, code)) {
  48467       // skip
  48468       goto next;
  48469     }
  48470     else {
  48471       memcpy(c, string, codeSizeUTF8(string));
  48472       nxCodeUTF8(c);
  48473     }
  48474 
  48475     next:
  48476     nxCodeUTF8(string);
  48477     nxCodeUTF8(p);
  48478   }
  48479 
  48480   *c = 0;
  48481 
  48482   return(r);
  48483 }
  48484 
  48485 /**
  48486  * uniq UTF-8 String
  48487  *
  48488  * remove successive repetitions of char c
  48489  *
  48490  * \param
  48491  *   string
  48492  * \param
  48493  *   c character to remove
  48494  * \return
  48495  *   string without successive repetitions of char c
  48496  *   NULL error
  48497  */
  48498 char *iUniqUTF8(char **string, const char *code) {
  48499   size_t len;
  48500 
  48501   // sanity checks
  48502   if (!string || !*string || !code) {
  48503     return(NULL);
  48504   }
  48505 
  48506   len = lenUTF8(*string);
  48507 
  48508   if (len < 2) {
  48509     // string is too short to have repetitions
  48510     return(*string);
  48511   }
  48512 
  48513   char *p        = *string;
  48514   char *s        = *string;
  48515   char *c        = nextCodeUTF8(*string);
  48516   nxCodeUTF8(s);
  48517 
  48518   while (*s) {
  48519     if (startsWithS(p, code) && startsWithS(s, code)) {
  48520       // skip
  48521       goto next;
  48522     }
  48523     else {
  48524       memcpy(c, s, codeSizeUTF8(s));
  48525       nxCodeUTF8(c);
  48526     }
  48527 
  48528     next:
  48529     nxCodeUTF8(s);
  48530     nxCodeUTF8(p);
  48531   }
  48532 
  48533   *c = 0;
  48534 
  48535   return(*string);
  48536 }
  48537 
  48538 
  48539 /**
  48540  * buffer uniq String
  48541  *
  48542  * remove successive repetitions of char c
  48543  *
  48544  * \param
  48545  *   string
  48546  * \param
  48547  *   c character to remove
  48548  * \return
  48549  *   string without successive repetitions of char c
  48550  *   NULL error
  48551  */
  48552 char *bUniqUTF8(char *string, const char *code) {
  48553   size_t len;
  48554 
  48555   // sanity checks
  48556   if (!string || !code) {
  48557     return(NULL);
  48558   }
  48559 
  48560   len = lenUTF8(string);
  48561 
  48562   if (len < 2) {
  48563     // string is too short to have repetitions
  48564     return(string);
  48565   }
  48566 
  48567   char *p        = string;
  48568   char *s        = string;
  48569   char *c        = nextCodeUTF8(string);
  48570   nxCodeUTF8(s);
  48571 
  48572   while (*s) {
  48573     if (startsWithS(p, code) && startsWithS(s, code)) {
  48574       // skip
  48575       goto next;
  48576     }
  48577     else {
  48578       memcpy(c, s, codeSizeUTF8(s));
  48579       nxCodeUTF8(c);
  48580     }
  48581 
  48582     next:
  48583     nxCodeUTF8(s);
  48584     nxCodeUTF8(p);
  48585   }
  48586 
  48587   *c = 0;
  48588 
  48589   return(string);
  48590 }
  48591 
  48592 /**
  48593  * ignore case uniq String
  48594  * duplicate string
  48595  *
  48596  * remove successive repetitions of char c
  48597  *
  48598  * \param
  48599  *   string
  48600  * \param
  48601  *   c character to remove
  48602  * \return
  48603  *   new string without successive repetitions of char c (you must free the pointer)
  48604  */
  48605 char *icUniqUTF8(const char *string UNUSED, const char *code UNUSED) {
  48606 
  48607   // TODO casefoldUTF8 changes the string length in bytes and characters
  48608   return(NULL);
  48609 }
  48610 
  48611 /**
  48612  * in place ignore case uniq String
  48613  *
  48614  * remove successive repetitions of char c
  48615  *
  48616  * \param
  48617  *   string
  48618  * \param
  48619  *   c character to remove
  48620  * \return
  48621  *   string without successive repetitions of char c
  48622  *   NULL error
  48623  */
  48624 char *iicUniqUTF8(char **string UNUSED, const char *code UNUSED) {
  48625 
  48626   // TODO casefoldUTF8 changes the string length in bytes and characters
  48627   return(NULL);
  48628 }
  48629 
  48630 /**
  48631  * ignore case buffer uniq String
  48632  *
  48633  * remove successive repetitions of char c
  48634  *
  48635  * \param
  48636  *   string
  48637  * \param
  48638  *   c character to remove
  48639  * \return
  48640  *   string without successive repetitions of char c
  48641  *   NULL error
  48642  */
  48643 char *bicUniqUTF8(char *string UNUSED, char c UNUSED) {
  48644 
  48645   // TODO casefoldUTF8 changes the string length in bytes and characters
  48646   return(NULL);
  48647 }
  48648 
  48649 
  48650 /**
  48651  * get UTF8 encoded string
  48652  *
  48653  * get char at python index
  48654  *
  48655  */
  48656 rune getUTF8(const char *string, int64_t index) {
  48657   int64_t len;
  48658 
  48659   if (!string) {
  48660     return(0);
  48661   }
  48662 
  48663   len = (int64_t)lenUTF8(string);
  48664   if (index >= len) {
  48665     return(0);
  48666   }
  48667   if (index < -len) {
  48668     return(0);
  48669   }
  48670   if (index < 0) {
  48671     index = len + index;
  48672   }
  48673 
  48674   const char *c = idx2PtrUTF8(string, index);
  48675   return(code2RuneUTF8(c));
  48676 }
  48677 
  48678 
  48679 /**
  48680  * set UTF8 encoded string
  48681  *
  48682  * set char at python index
  48683  *
  48684  * TODO this function might make the string invalid UTF8
  48685  *      check codeSizeUTF8 and adjust the buffer
  48686  */
  48687 char *setUTF8(char *string, int64_t index, rune c) {
  48688   int64_t len;
  48689 
  48690   if (!string) {
  48691     return(NULL);
  48692   }
  48693 
  48694   len = (int64_t)lenUTF8(string);
  48695   if (index >= len) {
  48696     return(NULL);
  48697   }
  48698   if (index < -len) {
  48699     return(NULL);
  48700   }
  48701   if (index < 0) {
  48702     index = len + index;
  48703   }
  48704 
  48705   char *p = idx2PtrRWUTF8(string, index);
  48706   pError0(bRune2CodeUTF8(p, c));
  48707   // TODO check code point length and shift string end when necessary
  48708   return(string);
  48709 }
  48710 
  48711 
  48712 /**
  48713  * slice UTF8 encoded String
  48714  * return new string which is the string between start and end
  48715  * negative indexes are allowed
  48716  *
  48717  * (copy substring from start to end)
  48718  *
  48719  * \param
  48720  *   string to slice
  48721  * \param
  48722  *   start: start character index, must be in the string
  48723  * \param
  48724  *   end: end character index, must be in the string after start
  48725  * \return
  48726  *   new sliced string (you must free the pointer)
  48727  *   "" when start=end
  48728  *   NULL when start and end are not set correctly
  48729  */
  48730 char *sliceUTF8(const char *string, int64_t start, int64_t end) {
  48731   char *s = NULL;
  48732   int64_t len;
  48733 
  48734   // sanity checks
  48735   if (!string) {
  48736     return(NULL);
  48737   }
  48738 
  48739   len = (int64_t)lenUTF8(string);
  48740 
  48741   if (start > len) {
  48742     return(NULL);
  48743   }
  48744   if (end > len) {
  48745     end = len;
  48746   }
  48747   if (start <= -len) {
  48748     start = -len;
  48749   }
  48750   if (end <= -len) {
  48751     return(NULL);
  48752   }
  48753   if (start < 0) {
  48754     start = len + start;
  48755   }
  48756   if (end <= 0) {
  48757     end = len + end;
  48758   }
  48759   if (end < start) {
  48760     return(NULL);
  48761   }
  48762 
  48763   if (start == end) {
  48764     emptyS(s)
  48765   }
  48766   else {
  48767     // start < end < len
  48768     // copy range to a new string
  48769     const char *startp = idx2PtrUTF8(string, start);
  48770     const char *endp   = idx2PtrUTF8(string, end);
  48771     size_t n;
  48772     n = (size_t)(endp - startp);
  48773     s = MALLOC((n+1));
  48774     if (!s) {
  48775       return(NULL);//LCOV_EXCL_LINE
  48776     }
  48777     s = strncpy(s, string+(size_t)(startp-string), n);
  48778     s[n] = 0;
  48779   }
  48780 
  48781   return(s);
  48782 }
  48783 
  48784 
  48785 /**
  48786  * slice UTF8 encoded String
  48787  * return string which is the string between start and end
  48788  * negative indexes are allowed
  48789  *
  48790  * \param
  48791  *   string to slice (this parameter is reallocated)
  48792  * \param
  48793  *   start: start character index, must be in the string
  48794  * \param
  48795  *   end: end character index, must be in the string after start
  48796  * \return
  48797  *   sliced string (you must free the pointer)
  48798  *   "" when start=end
  48799  *   NULL unchanged string when start and end are not set correctly
  48800  */
  48801 char *iSliceUTF8(char **string, int64_t start, int64_t end) {
  48802   char *s = NULL;
  48803   int64_t len;
  48804 
  48805   // sanity checks
  48806   if (!string || !*string) {
  48807     return(NULL);
  48808   }
  48809 
  48810   len = (int64_t)lenUTF8(*string);
  48811 
  48812   if (start > len) {
  48813     free(*string);
  48814     emptyS(*string);
  48815     return(NULL);
  48816   }
  48817   if (end > len) {
  48818     end = len;
  48819   }
  48820   if (start <= -len) {
  48821     start = -len;
  48822   }
  48823   if (end <= -len) {
  48824     free(*string);
  48825     emptyS(*string);
  48826     return(NULL);
  48827   }
  48828   if (start < 0) {
  48829     start = len + start;
  48830   }
  48831   if (end <= 0) {
  48832     end = len + end;
  48833   }
  48834   if (end < start) {
  48835     free(*string);
  48836     emptyS(*string);
  48837     return(NULL);
  48838   }
  48839 
  48840   if (start == end) {
  48841     emptyS(s);
  48842   }
  48843   else {
  48844     // start < end < len
  48845     // copy range to a new string
  48846     const char *startp = idx2PtrUTF8(*string, start);
  48847     const char *endp   = idx2PtrUTF8(*string, end);
  48848     size_t n;
  48849     n = (size_t)(endp - startp);
  48850     s = MALLOC(n+1);
  48851     if (!s) {
  48852       return(NULL);
  48853     }
  48854     s = strncpy(s, (*string)+(size_t)(startp-*string), n);
  48855     s[n] = 0;
  48856   }
  48857 
  48858   free(*string);
  48859   *string = s;
  48860   return(s);
  48861 }
  48862 
  48863 
  48864 /**
  48865  * buffer slice UTF8 encoded String
  48866  * return string which is the string between start and end
  48867  * negative indexes are allowed
  48868  *
  48869  * \param
  48870  *   string to slice
  48871  * \param
  48872  *   start: start index, must be in the string
  48873  * \param
  48874  *   end: end index, must be in the string after start
  48875  * \return
  48876  *   sliced string
  48877  *   "" when start=end
  48878  *   NULL unchanged string when start and end are not set correctly
  48879  */
  48880 char *bSliceUTF8(char *string, int64_t start, int64_t end) {
  48881   int64_t len;
  48882 
  48883   // sanity checks
  48884   if (!string) {
  48885     return(NULL);
  48886   }
  48887 
  48888   len = (int64_t)lenUTF8(string);
  48889 
  48890   if (start > len) {
  48891     bEmptyS(string);
  48892     return(NULL);
  48893   }
  48894   if (end > len) {
  48895     end = len;
  48896   }
  48897   if (start <= -len) {
  48898     start = -len;
  48899   }
  48900   if (end <= -len) {
  48901     bEmptyS(string);
  48902     return(NULL);
  48903   }
  48904   if (start < 0) {
  48905     start = len + start;
  48906   }
  48907   if (end <= 0) {
  48908     end = len + end;
  48909   }
  48910   if (end < start) {
  48911     bEmptyS(string);
  48912     return(NULL);
  48913   }
  48914 
  48915   if (start == end) {
  48916     bEmptyS(string);
  48917   }
  48918   else {
  48919     // start < end < len
  48920     // copy range to a new string
  48921     const char *startp = idx2PtrUTF8(string, start);
  48922     const char *endp   = idx2PtrUTF8(string, end);
  48923     size_t n;
  48924     n = (size_t)(endp - startp);
  48925     memmove(string, string+(size_t)(startp-string), n);
  48926     string[n] = 0;
  48927   }
  48928 
  48929   return(string);
  48930 }
  48931 
  48932 
  48933 /**
  48934  * buffer size slice UTF8 encoded String
  48935  * return string which is the string between start and end
  48936  * negative indexes are allowed
  48937  *
  48938  * \param
  48939  *   string to slice
  48940  * \param
  48941  *   stringSize string buffer size
  48942  * \param
  48943  *   start: start character index, must be in the string
  48944  * \param
  48945  *   end: end character index, must be in the string after start
  48946  * \return
  48947  *   sliced string
  48948  *   "" when start=end
  48949  *   NULL unchanged string when start and end are not set correctly
  48950  */
  48951 char *bLSliceUTF8(char *string, size_t stringSize, int64_t start, int64_t end) {
  48952   int64_t len;
  48953 
  48954   // sanity checks
  48955   if (!string || !stringSize) {
  48956     return(NULL);
  48957   }
  48958 
  48959   len = (int64_t)strlen(string);
  48960   if ((size_t)len+1 > stringSize) {
  48961     len = (int64_t)(stringSize - 1);
  48962   }
  48963 
  48964   if (start > len) {
  48965     bEmptyS(string);
  48966     return(NULL);
  48967   }
  48968   if (end > len) {
  48969     end = len;
  48970   }
  48971   if (start <= -len) {
  48972     start = -len;
  48973   }
  48974   if (end <= -len) {
  48975     bEmptyS(string);
  48976     return(NULL);
  48977   }
  48978   if (start < 0) {
  48979     start = len + start;
  48980   }
  48981   if (end <= 0) {
  48982     end = len + end;
  48983   }
  48984   if (end < start) {
  48985     bEmptyS(string);
  48986     return(NULL);
  48987   }
  48988 
  48989   const char *startp  = bLIdx2PtrUTF8(string, stringSize, start);
  48990   const char *endp    = bLIdx2PtrUTF8(string, stringSize, end);
  48991 
  48992   size_t starto = (size_t)(startp-string);
  48993   size_t endo   = (size_t)(endp-string);
  48994 
  48995   // compute string length without NUL
  48996   stringSize--;
  48997   if (starto > stringSize) {
  48998     bEmptyS(string);
  48999     return(NULL);
  49000   }
  49001   if (endo > stringSize) {
  49002     end = (int64_t)stringSize;
  49003   }
  49004   if (start == 0) {
  49005     starto = 0;
  49006   }
  49007   if (end < start) {
  49008     bEmptyS(string);
  49009     return(NULL);
  49010   }
  49011 
  49012   if (start == end) {
  49013     bEmptyS(string);
  49014   }
  49015   else {
  49016     // start < end < stringSize
  49017     // copy range to a new string
  49018     size_t n;
  49019     n = (size_t)(endp - startp);
  49020     memmove(string, string+starto, n);
  49021     string[n] = 0;
  49022   }
  49023 
  49024   return(string);
  49025 }
  49026 
  49027 
  49028 /**
  49029  * insert string in UTF8 encoded string at index
  49030  *
  49031  * return new string with toInsert at index
  49032  * negative indexes are allowed
  49033  * index -1 is the end of the array and is equivalent to index len
  49034  *
  49035  * \param
  49036  *   string UTF8 encoded string
  49037  * \param
  49038  *   index character index in string
  49039  * \param
  49040  *   toInsert UTF8 encoded string
  49041  * \return
  49042  *   new string (you must free the pointer)
  49043  *   NULL when string is NULL or invalid index
  49044  */
  49045 char *insertUTF8(const char *string, int64_t index, const char *toInsert) {
  49046   char *r = NULL;
  49047   int64_t len;
  49048 
  49049   // sanity checks
  49050   if (!string) {
  49051     if (index || !toInsert) {
  49052       return(NULL);
  49053     }
  49054     return(strdup(toInsert));
  49055   }
  49056 
  49057   len = (int64_t)lenUTF8(string);
  49058 
  49059   if (!len && index == -1) {
  49060     // empty string, index -1 is equal to 0
  49061     index = 0;
  49062   }
  49063   bool neg = false;
  49064   if (index < 0) {
  49065     neg = true;
  49066   }
  49067 
  49068   if (index > len) {
  49069     return(NULL);
  49070   }
  49071   if (neg) {
  49072     index++;
  49073   }
  49074   if (index < -len) {
  49075     return(NULL);
  49076   }
  49077   if (neg) {
  49078     index = len + index;
  49079   }
  49080 
  49081 
  49082   if (!toInsert || isEmptyS(toInsert)) {
  49083     return(strdup(string));
  49084   }
  49085 
  49086   if (index == 0) {
  49087     // insert at beginning
  49088     return(catS(toInsert, string));
  49089   }
  49090 
  49091   int64_t offset = idx2PtrUTF8(string, index) - string;
  49092   char *s1       = sliceS(string, 0, offset);
  49093   char *s2       = sliceS(string, offset, 0);
  49094   r              = catS(s1, toInsert, s2);
  49095   freeManyS(s1,s2);
  49096 
  49097   return(r);
  49098 }
  49099 
  49100 
  49101 /**
  49102  * insert string in UTF8 encoded string at index and free toInsert
  49103  *
  49104  * return new string with toInsert at index
  49105  * negative indexes are allowed
  49106  * index -1 is the end of the array and is equivalent to index len
  49107  *
  49108  * \param
  49109  *   string UTF8 encoded string
  49110  * \param
  49111  *   index character index in string
  49112  * \param
  49113  *   toInsert UTF8 encoded string
  49114  * \return
  49115  *   new string (you must free the pointer)
  49116  *   NULL when string is NULL or invalid index
  49117  */
  49118 char *insertNFreeUTF8(const char *string, int64_t index, char *toInsert) {
  49119   char *r = NULL;
  49120   int64_t len;
  49121 
  49122   // sanity checks
  49123   if (!string) {
  49124     if (index) {
  49125       return(NULL);
  49126     }
  49127     if (!toInsert) {
  49128       return(NULL);
  49129     }
  49130     r = strdup(toInsert);
  49131     free(toInsert);
  49132     return(r);
  49133   }
  49134 
  49135   len = (int64_t)lenUTF8(string);
  49136 
  49137   if (!len && index == -1) {
  49138     // empty string, index -1 is equal to 0
  49139     index = 0;
  49140   }
  49141   bool neg = false;
  49142   if (index < 0) {
  49143     neg = true;
  49144   }
  49145 
  49146   if (index > len) {
  49147     return(NULL);
  49148   }
  49149   if (neg) {
  49150     index++;
  49151   }
  49152   if (index < -len) {
  49153     return(NULL);
  49154   }
  49155   if (neg) {
  49156     index = len + index;
  49157   }
  49158 
  49159 
  49160   if (!toInsert || isEmptyS(toInsert)) {
  49161     free(toInsert);
  49162     return(strdup(string));
  49163   }
  49164 
  49165   if (index == 0) {
  49166     // insert at beginning
  49167     r = catS(toInsert, string);
  49168     free(toInsert);
  49169     return(r);
  49170   }
  49171 
  49172   int64_t offset = idx2PtrUTF8(string, index) - string;
  49173   char *s1       = sliceS(string, 0, offset);
  49174   char *s2       = sliceS(string, offset, 0);
  49175   r              = catS(s1, toInsert, s2);
  49176   freeManyS(s1,s2, toInsert);
  49177 
  49178   return(r);
  49179 }
  49180 
  49181 
  49182 /**
  49183  * insert string in UTF8 encoded string at index
  49184  *
  49185  * return string with toInsert at index
  49186  * negative indexes are allowed
  49187  * index -1 is the end of the array and is equivalent to index len
  49188  *
  49189  * \param
  49190  *   string UTF8 encoded string (this parameter is reallocated)
  49191  * \param
  49192  *   index character index in string
  49193  * \param
  49194  *   toInsert UTF8 encoded string
  49195  * \return
  49196  *   modified string (you must free the pointer)
  49197  *   NULL unchanged string when string is NULL or invalid index
  49198  */
  49199 char *iInsertUTF8(char **string, int64_t index, const char *toInsert) {
  49200   char *r = NULL;
  49201   int64_t len;
  49202 
  49203   // sanity checks
  49204   if (!string) {
  49205     return(NULL);
  49206   }
  49207   if (!*string) {
  49208     if (index) {
  49209       return(NULL);
  49210     }
  49211     r       = strdup(toInsert);
  49212     *string = r;
  49213     return(r);
  49214   }
  49215 
  49216   len = (int64_t)lenUTF8(*string);
  49217 
  49218   if (!len && index == -1) {
  49219     // empty string, index -1 is equal to 0
  49220     index = 0;
  49221   }
  49222   bool neg = false;
  49223   if (index < 0) {
  49224     neg = true;
  49225   }
  49226 
  49227   if (index > len) {
  49228     return(NULL);
  49229   }
  49230   if (neg) {
  49231     index++;
  49232   }
  49233   if (index < -len) {
  49234     return(NULL);
  49235   }
  49236   if (neg) {
  49237     index = len + index;
  49238   }
  49239 
  49240 
  49241   if (!toInsert || isEmptyS(toInsert)) {
  49242     return(*string);
  49243   }
  49244 
  49245   if (index == 0) {
  49246     // insert at beginning
  49247     r = catS(toInsert, *string);
  49248   }
  49249   else {
  49250     int64_t offset = idx2PtrUTF8(*string, index) - *string;
  49251     char *s1       = sliceS(*string, 0, offset);
  49252     char *s2       = sliceS(*string, offset, 0);
  49253     r              = catS(s1, toInsert, s2);
  49254     freeManyS(s1,s2);
  49255   }
  49256 
  49257   free(*string);
  49258   *string = r;
  49259   return(r);
  49260 }
  49261 
  49262 
  49263 /**
  49264  * insert string in UTF8 encoded string at index and free toInsert
  49265  *
  49266  * return string with toInsert at index
  49267  * negative indexes are allowed
  49268  * index -1 is the end of the array and is equivalent to index len
  49269  *
  49270  * \param
  49271  *   string UTF8 encoded string (this parameter is reallocated)
  49272  * \param
  49273  *   index character index in string
  49274  * \param
  49275  *   toInsert UTF8 encoded string
  49276  * \return
  49277  *   modified string (you must free the pointer)
  49278  *   NULL unchanged string when string is NULL or invalid index
  49279  */
  49280 char *iInsertNFreeUTF8(char **string, int64_t index, char *toInsert) {
  49281   char *r = NULL;
  49282   int64_t len;
  49283 
  49284   // sanity checks
  49285   if (!string) {
  49286     return(NULL);
  49287   }
  49288   if (!*string) {
  49289     if (index) {
  49290       return(NULL);
  49291     }
  49292     r       = strdup(toInsert);
  49293     free(toInsert);
  49294     *string = r;
  49295     return(r);
  49296   }
  49297 
  49298   len = (int64_t)lenUTF8(*string);
  49299 
  49300   if (!len && index == -1) {
  49301     // empty string, index -1 is equal to 0
  49302     index = 0;
  49303   }
  49304   bool neg = false;
  49305   if (index < 0) {
  49306     neg = true;
  49307   }
  49308 
  49309   if (index > len) {
  49310     return(NULL);
  49311   }
  49312   if (neg) {
  49313     index++;
  49314   }
  49315   if (index < -len) {
  49316     return(NULL);
  49317   }
  49318   if (neg) {
  49319     index = len + index;
  49320   }
  49321 
  49322 
  49323   if (!toInsert || isEmptyS(toInsert)) {
  49324     free(toInsert);
  49325     return(*string);
  49326   }
  49327 
  49328   if (index == 0) {
  49329     // insert at beginning
  49330     r = catS(toInsert, *string);
  49331   }
  49332   else {
  49333     int64_t offset = idx2PtrUTF8(*string, index) - *string;
  49334     char *s1       = sliceS(*string, 0, offset);
  49335     char *s2       = sliceS(*string, offset, 0);
  49336     r              = catS(s1, toInsert, s2);
  49337     freeManyS(s1,s2);
  49338   }
  49339   free(toInsert);
  49340 
  49341   free(*string);
  49342   *string = r;
  49343   return(r);
  49344 }
  49345 
  49346 
  49347 /**
  49348  * buffer insert string in UTF8 encoded string at index
  49349  *
  49350  * return string with toInsert at index
  49351  * negative indexes are allowed
  49352  * index -1 is the end of the array and is equivalent to index len
  49353  *
  49354  * \param
  49355  *   string UTF8 encoded string
  49356  * \param
  49357  *   index character index in string
  49358  * \param
  49359  *   toInsert UTF8 encoded string
  49360  * \return
  49361  *   modified string
  49362  *   NULL unchanged string when string is NULL or invalid index
  49363  */
  49364 char *bInsertUTF8(char *string, int64_t index, const char *toInsert) {
  49365   int64_t len;
  49366 
  49367   // sanity checks
  49368   if (!string) {
  49369     return(NULL);
  49370   }
  49371 
  49372   len = (int64_t)lenUTF8(string);
  49373 
  49374   if (!len && index == -1) {
  49375     // empty string, index -1 is equal to 0
  49376     index = 0;
  49377   }
  49378   bool neg = false;
  49379   if (index < 0) {
  49380     neg = true;
  49381   }
  49382 
  49383   if (index > len) {
  49384     return(NULL);
  49385   }
  49386   if (neg) {
  49387     index++;
  49388   }
  49389   if (index < -len) {
  49390     return(NULL);
  49391   }
  49392   if (neg) {
  49393     index = len + index;
  49394   }
  49395 
  49396 
  49397   if (!toInsert || isEmptyS(toInsert)) {
  49398     return(string);
  49399   }
  49400 
  49401   if (index == 0) {
  49402     // insert at beginning
  49403     char *s = alloca((size_t)(len+1));
  49404     strcpy(s, string);
  49405     pErrorNULL(bCatS(string, toInsert, s));
  49406   }
  49407   else {
  49408     int64_t offset = idx2PtrUTF8(string, index) - string;
  49409     char *s1       = alloca((size_t)(offset+1));
  49410     pErrorNULL(strLCpy(s1, (size_t)(offset+1), string));
  49411     char *s2       = alloca((size_t)(len-offset+1));
  49412     strcpy(s2, string+offset);
  49413     pErrorNULL(bCatS(string, s1, toInsert, s2));
  49414   }
  49415   return(string);
  49416 }
  49417 
  49418 
  49419 /**
  49420  * buffer size insert string in UTF8 encoded string at index
  49421  *
  49422  * return string with toInsert at index
  49423  * negative indexes are allowed
  49424  * index -1 is the end of the array and is equivalent to index len
  49425  *
  49426  * \param
  49427  *   string UTF8 encoded string
  49428  * \param
  49429  *   index character index in string
  49430  * \param
  49431  *   toInsert UTF8 encoded string
  49432  * \return
  49433  *   modified string
  49434  *   NULL unchanged string when string is NULL or invalid index
  49435  */
  49436 char *bLInsertUTF8(char *string, size_t stringSize, int64_t index, const char *toInsert) {
  49437   int64_t len;
  49438 
  49439   // sanity checks
  49440   if (!string) {
  49441     return(NULL);
  49442   }
  49443 
  49444   if (!stringSize) {
  49445     // string size is 0 - no change
  49446     return(string);
  49447   }
  49448 
  49449   len = (int64_t)bLLenUTF8(string, stringSize);
  49450 
  49451   if (!len && index == -1) {
  49452     // empty string, index -1 is equal to 0
  49453     index = 0;
  49454   }
  49455   bool neg = false;
  49456   if (index < 0) {
  49457     neg = true;
  49458   }
  49459 
  49460   if (index > len) {
  49461     return(NULL);
  49462   }
  49463   if (neg) {
  49464     index++;
  49465   }
  49466   if (index < -len) {
  49467     return(NULL);
  49468   }
  49469   if (neg) {
  49470     index = len + index;
  49471   }
  49472 
  49473 
  49474   if (!toInsert || isEmptyS(toInsert)) {
  49475     return(string);
  49476   }
  49477 
  49478   if (index == 0) {
  49479     // insert at beginning
  49480     char *s = alloca((size_t)(len+1));;
  49481     strcpy(s, string);
  49482     pErrorNULL(bLCatS(string, stringSize, toInsert, s));
  49483   }
  49484   else {
  49485     int64_t offset = bLIdx2PtrUTF8(string, stringSize, index) - string;
  49486     char *s1       = alloca((size_t)(offset+1));
  49487     pErrorNULL(strLCpy(s1, (size_t)(offset+1), string));
  49488     char *s2       = alloca((size_t)(len-offset+1));
  49489     strcpy(s2, string+offset);
  49490     pErrorNULL(bLCatS(string, stringSize, s1, toInsert, s2));
  49491   }
  49492   return(string);
  49493 }
  49494 
  49495 
  49496 /**
  49497  * delete UTF8 encoded string
  49498  *
  49499  * return new string without the string between start and end
  49500  * negative indexes are allowed
  49501  *
  49502  * \param
  49503  *   string to delete
  49504  * \param
  49505  *   start: start character index, must be in the string
  49506  * \param
  49507  *   end: end character index, must be in the string after start
  49508  * \return
  49509  *   new sliced string (you must free the pointer)
  49510  *   new identical string when start=end or when start and end are not set correctly
  49511  *   NULL when input string is NULL or when malloc failed or when end is under start
  49512  */
  49513 char *delUTF8(const char *string, int64_t start, int64_t end) {
  49514   char *s = NULL;
  49515   int64_t len;
  49516 
  49517   // sanity checks
  49518   if (!string) {
  49519     return(NULL);
  49520   }
  49521 
  49522   len = (int64_t)lenUTF8(string);
  49523 
  49524   if (start >= len) {
  49525     start = len;
  49526   }
  49527   if (end > len) {
  49528     end = len;
  49529   }
  49530   if (start <= -len) {
  49531     start = -len;
  49532   }
  49533   if (end <= -len) {
  49534     end = -len;
  49535   }
  49536   if (start < 0) {
  49537     start = len + start;
  49538   }
  49539   if (end <= 0) {
  49540     end = len + end;
  49541   }
  49542   if (end < start) {
  49543     return(NULL);
  49544   }
  49545 
  49546   if (start == end) {
  49547     return(strdup(string));
  49548   }
  49549 
  49550   // start < end < len
  49551   // copy range to a new string
  49552   len                = (int64_t)strlen(string);
  49553   const char *startp = idx2PtrUTF8(string, start);
  49554   const char *endp   = idx2PtrUTF8(string, end);
  49555   size_t starto      = (size_t)(startp-string);
  49556   int64_t n;
  49557   n = endp - startp;
  49558   s = MALLOC((size_t)(len-n+1));
  49559   if (!s) {
  49560     return(NULL);//LCOV_EXCL_LINE
  49561   }
  49562   strncpy(s, string, starto);
  49563   strncpy(s+starto, string+starto+n, (size_t)(len-n)-starto);
  49564   s[len-n] = 0;
  49565 
  49566   return(s);
  49567 }
  49568 
  49569 
  49570 /**
  49571  * delete UTF8 encoded string
  49572  *
  49573  * return string without the string between start and end
  49574  * negative indexes are allowed
  49575  *
  49576  * \param
  49577  *   string to delete (this parameter is reallocated)
  49578  * \param
  49579  *   start: start character index, must be in the string
  49580  * \param
  49581  *   end: end character index, must be in the string after start
  49582  * \return
  49583  *   sliced string (you must free the pointer)
  49584  *   unchanged string when start=end
  49585  *   NULL when start and end are not set correctly
  49586  *        or when input string is NULL or when malloc failed or when end is under start
  49587  */
  49588 char *iDelUTF8(char **string, int64_t start, int64_t end) {
  49589   char *s = NULL;
  49590   int64_t len;
  49591 
  49592   // sanity checks
  49593   if (!string || !*string) {
  49594     return(NULL);
  49595   }
  49596 
  49597   len = (int64_t)lenUTF8(*string);
  49598 
  49599   if (start >= len) {
  49600     start = len;
  49601   }
  49602   if (end > len) {
  49603     end = len;
  49604   }
  49605   if (start <= -len) {
  49606     start = -len;
  49607   }
  49608   if (end <= -len) {
  49609     end = -len;
  49610   }
  49611   if (start < 0) {
  49612     start = len + start;
  49613   }
  49614   if (end <= 0) {
  49615     end = len + end;
  49616   }
  49617   if (end < start) {
  49618     return(NULL);
  49619   }
  49620 
  49621   if (start == end) {
  49622     return(*string);
  49623   }
  49624 
  49625   // start < end < len
  49626   // copy range to a new string
  49627   len                = (int64_t)strlen(*string);
  49628   const char *startp = idx2PtrUTF8(*string, start);
  49629   const char *endp   = idx2PtrUTF8(*string, end);
  49630   size_t starto      = (size_t)(startp-*string);
  49631   int64_t n;
  49632   n = endp - startp;
  49633   s = MALLOC((size_t)(len-n+1));
  49634   if (!s) {
  49635     return(NULL);
  49636   }
  49637   strncpy(s, *string, starto);
  49638   strncpy(s+starto, (*string)+starto+n, (size_t)(len-n)-starto);
  49639   s[len-n] = 0;
  49640 
  49641   free(*string);
  49642   *string = s;
  49643   return(s);
  49644 }
  49645 
  49646 
  49647 /**
  49648  * buffer delete UTF8 encoded string
  49649  *
  49650  * return string without the string between start and end
  49651  * negative indexes are allowed
  49652  *
  49653  * \param
  49654  *   string to delete
  49655  * \param
  49656  *   start: start character index, must be in the string
  49657  * \param
  49658  *   end: end character index, must be in the string after start
  49659  * \return
  49660  *   sliced string
  49661  *   unchanged string when start=end
  49662  *   NULL when start and end are not set correctly
  49663  *        or when input string is NULL or when malloc failed or when end is under start
  49664  */
  49665 char *bDelUTF8(char *string, int64_t start, int64_t end) {
  49666   int64_t len;
  49667 
  49668   // sanity checks
  49669   if (!string) {
  49670     return(NULL);
  49671   }
  49672 
  49673   len = (int64_t)lenUTF8(string);
  49674 
  49675   if (start >= len) {
  49676     start = len;
  49677   }
  49678   if (end > len) {
  49679     end = len;
  49680   }
  49681   if (start <= -len) {
  49682     start = -len;
  49683   }
  49684   if (end <= -len) {
  49685     end = -len;
  49686   }
  49687   if (start < 0) {
  49688     start = len + start;
  49689   }
  49690   if (end <= 0) {
  49691     end = len + end;
  49692   }
  49693   if (end < start) {
  49694     return(NULL);
  49695   }
  49696 
  49697   if (start == end) {
  49698     return(string);
  49699   }
  49700 
  49701   // start < end < len
  49702   // copy range to a new string
  49703   len                = (int64_t)strlen(string);
  49704   const char *startp = idx2PtrUTF8(string, start);
  49705   const char *endp   = idx2PtrUTF8(string, end);
  49706   size_t starto      = (size_t)(startp-string);
  49707   int64_t n;
  49708   n = endp - startp;
  49709   memmove(string+starto, string+starto+n, (size_t)(len-n)-starto);
  49710   string[len-n] = 0;
  49711 
  49712   return(string);
  49713 }
  49714 
  49715 
  49716 /**
  49717  * buffer size delete UTF8 encoded string
  49718  *
  49719  * return string without the string between start and end
  49720  * negative indexes are allowed
  49721  *
  49722  * \param
  49723  *   string to delete
  49724  * \param
  49725  *   stringSize string buffer size
  49726  * \param
  49727  *   start: start character index, must be in the string
  49728  * \param
  49729  *   end: end character index, must be in the string after start
  49730  * \return
  49731  *   sliced string
  49732  *   unchanged string when start=end
  49733  *   NULL when start and end are not set correctly
  49734  *        or when input string is NULL or when malloc failed or when end is under start
  49735  */
  49736 char *bLDelUTF8(char *string, size_t stringSize, int64_t start, int64_t end) {
  49737   int64_t len;
  49738 
  49739   // sanity checks
  49740   if (!string || !stringSize) {
  49741     return(NULL);
  49742   }
  49743 
  49744   len = (int64_t)strlen(string);
  49745   if ((size_t)len+1 > stringSize) {
  49746     len = (int64_t)(stringSize - 1);
  49747   }
  49748 
  49749   // compute string length without NUL
  49750   if (start >= len) {
  49751     start = len;
  49752   }
  49753   if (end > len) {
  49754     end = len;
  49755   }
  49756   if (start <= -len) {
  49757     start = -len;
  49758   }
  49759   if (end <= -len) {
  49760     end = -len;
  49761   }
  49762   if (start < 0) {
  49763     start = len + start;
  49764   }
  49765   if (end <= 0) {
  49766     end = len + end;
  49767   }
  49768   if (end < start) {
  49769     return(NULL);
  49770   }
  49771 
  49772   const char *startp  = bLIdx2PtrUTF8(string, stringSize, start);
  49773   const char *endp    = bLIdx2PtrUTF8(string, stringSize, end);
  49774 
  49775   size_t starto = (size_t)(startp-string);
  49776 
  49777   if (starto >= stringSize) {
  49778     starto = stringSize;
  49779   }
  49780   if (start == 0) {
  49781     starto = 0;
  49782   }
  49783   if (end < start) {
  49784     return(NULL);
  49785   }
  49786 
  49787   if (start == end) {
  49788     return(string);
  49789   }
  49790 
  49791   // start < end < len
  49792   // copy range to a new string
  49793   int64_t n;
  49794   n = endp - startp;
  49795   memmove(string+starto, string+starto+n, (size_t)(len-n)-starto);
  49796   string[len-n] = 0;
  49797 
  49798   return(string);
  49799 }
  49800 
  49801 
  49802 /**
  49803  * indexOf UTF8 encoded String
  49804  * relative to start
  49805  *
  49806  * \param
  49807  *   string
  49808  * \param
  49809  *   needle: string to find
  49810  * \return
  49811  *   character index of first occurence of needle in string
  49812  *   -1 when needle is not found
  49813  *   -1 when string or needle are NULL
  49814  */
  49815 ssize_t indexOfUTF8(const char *string, const char *needle) {
  49816 
  49817   char *r = findS(string, needle);
  49818   if (!r) {
  49819     return(-1);
  49820   }
  49821   return(ptr2IdxUTF8(string, r));
  49822 }
  49823 
  49824 
  49825 /**
  49826  * ignore case indexOf UTF8 encoded String
  49827  * relative to start
  49828  *
  49829  * \param
  49830  *   string
  49831  * \param
  49832  *   needle: string to find
  49833  * \return
  49834  *   character index of first occurence of needle in string
  49835  *   -1 when needle is not found
  49836  *   -1 when string or needle are NULL
  49837  */
  49838 ssize_t icIndexOfUTF8(const char *string UNUSED, const char *needle UNUSED) {
  49839 
  49840   //TODO casefoldUTF8 can change the number of characters
  49841   return(-1);
  49842 }
  49843 
  49844 
  49845 /**
  49846  * ignore case has UTF8 encoded String
  49847  *
  49848  * \param
  49849  *   string
  49850  * \param
  49851  *   needle: string to find
  49852  * \return
  49853  *   true when needle is in string
  49854  *   false when needle is not found
  49855  *   false when string or needle are NULL
  49856  */
  49857 bool icHasUTF8(const char *string, const char *needle) {
  49858 
  49859   // sanity checks
  49860   if (!string || !needle) {
  49861     return(false);
  49862   }
  49863 
  49864   char *s = casefoldUTF8(string);
  49865   char *n = casefoldUTF8(needle);
  49866 
  49867   bool r  = hasS(s, n);
  49868 
  49869   free(s);
  49870   free(n);
  49871   return(r);
  49872 }
  49873 
  49874 
  49875 /**
  49876  * ignore case token in UTF8 encoded String
  49877  *
  49878  * parse string into a sequence of tokens delimited by the ENTIRE DELIM string
  49879  * work like strtok_r from c stdlib
  49880  * (for strtok_r, when delim has multiple characters, each character is a delimiter)
  49881  *
  49882  * on first call s is the string to parse, optionally initialize *saveptr to NULL
  49883  * on next calls, s should be NULL
  49884  *
  49885  * \param
  49886  *   s string to parse, the s string is modified
  49887  * \param
  49888  *   delim string
  49889  * \return
  49890  *   token
  49891  *   *saveptr is set to NULL when the last token is found
  49892  */
  49893 char *icTokUTF8(const char *s UNUSED, const char *delim UNUSED, char **saveptr UNUSED) {
  49894 
  49895   //TODO casefoldUTF8 changes the string
  49896   return(NULL);
  49897 }
  49898 
  49899 
  49900 /**
  49901  * ignore case split UTF8 encoded string with delim string
  49902  * return list
  49903  *
  49904  * \param
  49905  *   string to split
  49906  * \param
  49907  *   delim delimiter
  49908  * \return
  49909  *   list of tokens
  49910  *   NULL when list or delim are NULL
  49911  */
  49912 char **icSplitUTF8(const char *string UNUSED, const char* delim UNUSED) {
  49913 
  49914   //TODO casefoldUTF8 changes the string
  49915   return(NULL);
  49916 }
  49917 
  49918 /**
  49919  * ignore case extract UTF8 encoded string between delim1 and delim2 strings
  49920  * return list
  49921  *
  49922  * \param
  49923  *   string to split
  49924  * \param
  49925  *   delim1 first delimiter
  49926  * \param
  49927  *   delim2 second delimiter, has to different from delim1
  49928  * \return
  49929  *   list of tokens
  49930  *   NULL when list or delim are NULL
  49931  */
  49932 char **icExtractUTF8(const char *string UNUSED, const char* delim1 UNUSED, const char* delim2 UNUSED) {
  49933 
  49934   //TODO casefoldUTF8 changes the string
  49935   return(NULL);
  49936 }
  49937 
  49938 char **icExtractCharSUTF8(const char *string UNUSED, char delim1 UNUSED, const char* delim2 UNUSED) {
  49939 
  49940   //TODO casefoldUTF8 changes the string
  49941   return(NULL);
  49942 }
  49943 
  49944 char **icExtractSCharUTF8(const char *string UNUSED, const char* delim1 UNUSED, char delim2 UNUSED) {
  49945 
  49946   //TODO casefoldUTF8 changes the string
  49947   return(NULL);
  49948 }
  49949 
  49950 
  49951 /**
  49952  * ignore case list Sort UTF-8 encoded String Compare function
  49953  *
  49954  * in:
  49955  *   a
  49956  *   b
  49957  * out:
  49958  *   test result
  49959  */
  49960 internal int icListSortUTF8Cmp(const void * a, const void * b) {
  49961 
  49962   // sanity checks
  49963   if (!a && !b) {
  49964     return(0);
  49965   }
  49966   if (!a && b) {
  49967     return(-1);
  49968   }
  49969   if (a && !b) {
  49970     return(1);
  49971   }
  49972   char *A = casefoldUTF8(*(char *const*)a);
  49973   char *B = casefoldUTF8(*(char *const*)b);
  49974   int r   = strcmp(A,B);
  49975   free(A);
  49976   free(B);
  49977   return(r);
  49978 }
  49979 
  49980 
  49981 /**
  49982  * ignore case list Sort UTF8 encoded String
  49983  * duplicate list and sort
  49984  *
  49985  * \param
  49986  *   list
  49987  * \return
  49988  *   new sorted list (you must free the pointer with listFreeS)
  49989  *   empty list when list is empty
  49990  *   NULL when list is NULL
  49991  */
  49992 char **icListSortUTF8(char **list) {
  49993   size_t len;
  49994   char **l = NULL;
  49995 
  49996   // sanity checks
  49997   if (!list) {
  49998     return(NULL);
  49999   }
  50000   len = listLengthS(list);
  50001   // duplicate
  50002   l = listDupS(list);
  50003   if (!len) {
  50004     return(l);
  50005   }
  50006   // sort
  50007   qsort(l, len, sizeof(char *), icListSortUTF8Cmp);
  50008   return(l);
  50009 }
  50010 
  50011 
  50012 /**
  50013  * ignore case list Sort UTF8 encoded String
  50014  *
  50015  * \param
  50016  *   list
  50017  * \return
  50018  *   sorted list
  50019  *   empty list when list is empty
  50020  *   unchanged list when list is NULL
  50021  *   NULL error
  50022  */
  50023 char **iicListSortUTF8(char ***list) {
  50024   size_t len;
  50025 
  50026   // sanity checks
  50027   if (!list || !*list) {
  50028     return(NULL);
  50029   }
  50030   len = listLengthS(*list);
  50031   if (!len) {
  50032     return(NULL);
  50033   }
  50034   // sort
  50035   qsort(*list, len, sizeof(char *), icListSortUTF8Cmp);
  50036   return(*list);
  50037 }
  50038 
  50039 
  50040 /**
  50041  * ignore case list Equal UTF8 encoded String
  50042  * compare each element of list1 and list2
  50043  *
  50044  * \param
  50045  *   2 lists
  50046  * \return
  50047  *   true the lists have identical elements
  50048  *   false they differ
  50049  */
  50050 bool icListEqUTF8(char **list1, char **list2) {
  50051 
  50052   // sanity checks
  50053   if (!list1 || !list2) {
  50054     return(false);
  50055   }
  50056   if (listLengthS(list1) != listLengthS(list2)) {
  50057     return(false);
  50058   }
  50059 
  50060   // compare elements
  50061   enumerateCharP(list1, e, i) {
  50062     if (!icEqUTF8(*e, list2[i])) {
  50063       return(false);
  50064   }
  50065     }
  50066 
  50067   return(true);
  50068 }
  50069 
  50070 
  50071 /**
  50072  * ignore case and return true when list has UTF8 encoded string
  50073  *
  50074  * \param
  50075  *   list
  50076  * \param
  50077  *   string
  50078  * \return
  50079  *   true when list has string
  50080  *   false when the string is not found
  50081  *   false when list or string are NULL
  50082  */
  50083 bool icListHasUTF8(char **list, const char *string) {
  50084 
  50085   if (!list || !string) {
  50086     return(false);
  50087   }
  50088   if (icListIndexOfUTF8(list, string) == -1) {
  50089     return(false);
  50090   }
  50091   return(true);
  50092 }
  50093 
  50094 
  50095 /**
  50096  * ignore case and return index of UTF8 encoded string in list
  50097  *
  50098  * \param
  50099  *   list
  50100  * \param
  50101  *   string
  50102  * \return
  50103  *   index
  50104  *   -1 when the string is not found
  50105  *   -1 when list or string are NULL
  50106  */
  50107 ssize_t icListIndexOfUTF8(char **list, const char *string) {
  50108   bool found = false;;
  50109 
  50110   // sanity checks
  50111   if (!list || !string) {
  50112     return(-1);
  50113   }
  50114   // search string in elements
  50115   enumerateCharP(list, e, i) {
  50116     if (icEqUTF8(*e, string)) {
  50117       found = true;
  50118       break;
  50119   }
  50120     }
  50121   if (found) {
  50122      return((ssize_t)i);
  50123   }
  50124   else {
  50125      return(-1);
  50126 }
  50127   }
  50128 
  50129 
  50130 /**
  50131  * ignore case list binary search UTF8 encoded string
  50132  *
  50133  * efficiently finds the index of string in list
  50134  * the list has be sorted with for example listSortS
  50135  *
  50136  * \param
  50137  *   list
  50138  * \param
  50139  *   string to search
  50140  * \return
  50141  *   index of string
  50142  *   -1 string not found or NULL input pointers
  50143     */
  50144 ssize_t icListBinarySearchUTF8(char **list, const char *string) {
  50145   ssize_t first = 0, middle, last;;
  50146 
  50147   if (!list || !string) {
  50148     return(-1);
  50149   }
  50150 
  50151   char *s = casefoldUTF8(string);
  50152 
  50153   last    = (ssize_t)(listLengthS(list) - 1);
  50154   while (first <= last) {
  50155     middle  = (first+last)/2;
  50156     char *m = casefoldUTF8(list[middle]);
  50157     if (strcmp(m, s) < 0) {
  50158       first = middle + 1;
  50159     }
  50160     else if (strcmp(m, s) == 0) {
  50161       free(m);
  50162       free(s);
  50163       return(middle);
  50164     }
  50165     else {
  50166       last = middle -1;
  50167     }
  50168     free(m);
  50169   }
  50170   free(s);
  50171   return(-1);
  50172 }
  50173 
  50174 
  50175 /**
  50176  * ignore case and uniquify UTF8 encoded elements of list
  50177  * duplicate list
  50178  * each elements are unique in the new list
  50179  *
  50180  * \param
  50181  *   list
  50182  * \return
  50183  *   new list with unique elements (you must free the pointer with listFreeS)
  50184  *   empty list when list is empty
  50185  *   NULL when list is NULL
  50186  */
  50187 char **icListUniqUTF8(char **list) {
  50188   char **r = NULL;
  50189 
  50190   // sanity checks
  50191   if (!list) {
  50192     return(NULL);
  50193   }
  50194 
  50195   size_t len = listLengthS(list);
  50196 
  50197   if (!len) {
  50198     listEmptyS(r);
  50199     return(r);
  50200   }
  50201   pErrorNULL(listPushS(&r, list[0]));
  50202   // one element list
  50203   if (len == 1) {
  50204     return(r);
  50205   }
  50206   // push element to new list if it is not already in new list
  50207   forEachCharP(list, e) {
  50208     if (icListIndexOfUTF8(r, *e) == -1) {
  50209       pErrorNULL(listPushS(&r, *e));
  50210   }
  50211     }
  50212   return(r);
  50213 }
  50214 
  50215 
  50216 /**
  50217  * ignore case and uniquify UTF8 encoded elements of list
  50218  * each elements are unique in the list
  50219  *
  50220  * \param
  50221  *   list
  50222  * \return
  50223  *   list with unique elements
  50224  *   empty list when list is empty
  50225  *   unchanged list when list is NULL
  50226  *   NULL error
  50227  */
  50228 char **iicListUniqUTF8(char ***list) {
  50229   char **r = NULL;
  50230 
  50231   // sanity checks
  50232   if (!list || !*list) {
  50233     return(NULL);
  50234   }
  50235 
  50236   size_t len = listLengthS(*list);
  50237 
  50238   if (len < 1) {
  50239     return(*list);
  50240   }
  50241   else if (len < 2) {
  50242     // one element list
  50243     pErrorNULL(iListPushS(&r, (*list)[0]));
  50244   }
  50245   else {
  50246     // push element to new list if it is not already in new list
  50247     forEachCharP(*list, e) {
  50248       if (icListIndexOfUTF8(r, *e) == -1) {
  50249         pErrorNULL(iListPushS(&r, *e));
  50250       }
  50251       else {
  50252         free(*e);
  50253   }
  50254     }
  50255       }
  50256 
  50257   free(*list);
  50258   *list = r;
  50259   return(r);
  50260 }
  50261 
  50262 
  50263 // TODO reverseUTF8
  50264 
  50265 //
  50266 // End UTF-8 string functions
  50267 //
  50268 
  50269 
  50270 
  50271 /**
  50272  * empty String Function
  50273  *
  50274  * \return
  50275  *   new empty string (you must free the pointer)
  50276  */
  50277 char *emptySF(void) {
  50278 
  50279   return(strdup(""));
  50280 }
  50281 
  50282 /**
  50283  * empty String Function
  50284  *
  50285  * when *string is NULL, it is freed
  50286  *
  50287  * \return
  50288  *   empty string (you must free the pointer)
  50289  *   NULL nothing when string is NULL
  50290  */
  50291 char *iEmptySF(char **string) {
  50292 
  50293   // sanity checks
  50294   if (!string) {
  50295     return(NULL);
  50296   }
  50297 
  50298   if (*string) {
  50299     free(*string);
  50300   }
  50301   *string = strdup("");
  50302   return(*string);
  50303 }
  50304 
  50305 /**
  50306  * is Empty String
  50307  *
  50308  * \param
  50309  *   string
  50310  * \return
  50311  *   false when there are characters in the string
  50312  *   true when string is empty
  50313  *   true when string is NULL
  50314  */
  50315 bool isEmptyS(const char *string) {
  50316 
  50317   // sanity checks
  50318   if (!string || !*string) {
  50319     return(true);
  50320   }
  50321   return(false);
  50322 }
  50323 
  50324 /**
  50325  * is Blank String
  50326  *
  50327  * \param
  50328  *   string
  50329  * \return
  50330  *   false when there are non white space characters in the string
  50331  *   true when there are only white spaces in the string
  50332  *   true when string is empty
  50333  *   true when string is NULL
  50334  */
  50335 bool isBlankS(const char *string) {
  50336 
  50337   // sanity checks
  50338   if (!string || !*string) {
  50339     return(true);
  50340   }
  50341 
  50342   char *s = trimS(string);
  50343   if (!s || !*s) {
  50344     free(s);
  50345     return(true);
  50346   }
  50347   free(s);
  50348   return(false);
  50349 }
  50350 
  50351 
  50352 /**
  50353  * int to positive index
  50354  * index can be negative
  50355  *
  50356  * \param
  50357  *   index: index in list, must be inside the list
  50358  * \param
  50359  *   length: list length
  50360  * \return
  50361  *   positive index
  50362  *   -1 when length is 0 or index is not set correctly
  50363  */
  50364 ssize_t intIndex(int64_t index, int64_t length) {
  50365   ssize_t  r;
  50366 
  50367   // sanity checks
  50368   if (length < 1) {
  50369     return(-1);
  50370   }
  50371 
  50372   if (index >= length) {
  50373     return(-1);
  50374   }
  50375   if (index < -length) {
  50376     return(-1);
  50377   }
  50378   if (index < 0) {
  50379     r = length + index;
  50380   }
  50381   else {
  50382     r = index;
  50383   }
  50384   return(r);
  50385 }
  50386 
  50387 
  50388 /**
  50389  * list Empty String Function
  50390  *
  50391  * \return
  50392  *   new empty list (you must free the pointer with listFreeS)
  50393  */
  50394 char **listEmptySF(void) {
  50395   char **list = NULL;
  50396 
  50397   list = MALLOC(1 * sizeof(char *));
  50398   if (list) {
  50399     list[0] = NULL;
  50400   }
  50401   return(list);
  50402 }
  50403 
  50404 /**
  50405  * list Empty String Function
  50406  *
  50407  * \return
  50408  *   empty list (you must free the pointer with listFreeS)
  50409  *   NULL error
  50410  */
  50411 char **iListEmptySF(char ***list) {
  50412 
  50413   // sanity checks
  50414   if (!list) {
  50415     return(NULL);
  50416   }
  50417 
  50418   if (*list) {
  50419     listFreeS(*list);
  50420   }
  50421 
  50422   *list = MALLOC(1 * sizeof(char *));
  50423   if (*list) {
  50424     (*list)[0] = NULL;
  50425   }
  50426 
  50427   return(*list);
  50428 }
  50429 
  50430 /**
  50431  * list Is Empty String
  50432  *
  50433  * \param
  50434  *   list
  50435  * \return
  50436  *   false when there are elements in the list
  50437  *   true when list is empty
  50438  *   true when list is NULL
  50439  */
  50440 bool listIsEmptyS(char **list) {
  50441 
  50442   // sanity checks
  50443   if (!list || !*list) {
  50444     return(true);
  50445   }
  50446   return(false);
  50447 }
  50448 
  50449 /**
  50450  * list Is Empty String
  50451  *
  50452  * \param
  50453  *   list
  50454  * \return
  50455  *   false when there are non blank elements in the list
  50456  *   true when all elements are blank
  50457  *   true when list is NULL
  50458  */
  50459 bool listIsBlankS(char **list) {
  50460 
  50461   // sanity checks
  50462   if (!list || !*list) {
  50463     return(true);
  50464   }
  50465   forEachCharP(list, e) {
  50466     if (!isBlankS(*e)) {
  50467       return(false);
  50468   }
  50469     }
  50470   return(true);
  50471 }
  50472 
  50473 /**
  50474  * list Create String Function
  50475  * create a list from the list of parameters
  50476  * used from the listCreateS(...) macro
  50477  *
  50478  * \param
  50479  *   list of strings seperated with commas
  50480  * \return
  50481  *   list
  50482  *   NULL when first element if NULL
  50483  */
  50484 char **listCreateSF(const char *paramType, ...) {
  50485   va_list pl;
  50486   char **l = NULL;
  50487 
  50488   //Not needed if !paramType return NULL
  50489 
  50490   // push arguments to a list
  50491   va_start(pl, paramType);
  50492   paramType = va_arg(pl, char *);
  50493   while (paramType) {
  50494     pErrorNULL(listPushS(&l, paramType));
  50495     paramType = va_arg(pl, char *);
  50496   }
  50497   va_end(pl);
  50498   return(l);
  50499 }
  50500 
  50501 /**
  50502  * list From Array String
  50503  *
  50504  * copy array of 'size' strings to a new list
  50505  * NULL strings are not copied to the list
  50506  *
  50507  * \param
  50508  *   array of strings
  50509  * \param
  50510  *   size - number of strings in the array
  50511  * \return
  50512  *   list
  50513  *   empty list when size is 0
  50514  *   NULL when array is NULL
  50515  */
  50516 char **listFromArrayS(char **array, size_t size) {
  50517   char **r = NULL;
  50518 
  50519   // sanity checks
  50520   if (!array) {
  50521     return(NULL);
  50522   }
  50523   if (!size) {
  50524     listEmptyS(r);
  50525     return(r);
  50526   }
  50527 
  50528   // TODO allocate array size r for z to avoid reallocs and remove listPushS
  50529   // copy array content
  50530   for (size_t i = 0 ; i < size ; i++) {
  50531     if (array[i]) {
  50532       // remove NULL strings
  50533       pErrorNULL(listPushS(&r, array[i]));
  50534   }
  50535     }
  50536   return(r);
  50537 }
  50538 
  50539 /**
  50540  * list From Const Array String
  50541  *
  50542  * copy array of 'size' strings to a new list
  50543  * NULL strings are not copied to the list
  50544  *
  50545  * \param
  50546  *   array of strings
  50547  * \param
  50548  *   size - number of strings in the array
  50549  * \return
  50550  *   list
  50551  *   empty list when size is 0
  50552  *   NULL when array is NULL
  50553  */
  50554 char **listFromCArrayS(const char **array, size_t size) {
  50555   char **r = NULL;
  50556 
  50557   // sanity checks
  50558   if (!array) {
  50559     return(NULL);
  50560   }
  50561   if (!size) {
  50562     listEmptyS(r);
  50563     return(r);
  50564   }
  50565 
  50566   // copy array content
  50567   for (size_t i = 0 ; i < size ; i++) {
  50568     if (array[i]) {
  50569       // remove NULL strings
  50570       pErrorNULL(listPushS(&r, array[i]));
  50571   }
  50572     }
  50573   return(r);
  50574 }
  50575 
  50576 /**
  50577  * list Push String
  50578  * append s at the end of the list
  50579  * when list is NULL, a new list with one element is returned
  50580  * when list and s are NULL return list with 2 NULL elements
  50581  * when s is NULL, NULL is pushed at the end of the list
  50582  *
  50583  * the list is reallocated to add extra space
  50584  *
  50585  * \param
  50586  *   pointer to list - becomes NULL when realloc fails (this parameter is reallocated)
  50587  * \param
  50588  *   s: string to push
  50589  * \return
  50590  *   list success (you must free the pointer with listFreeS)
  50591  *   NULL error
  50592  */
  50593 char **listPushS(char ***list, const char *s) {
  50594 
  50595   // sanity checks
  50596   if (!list || !s) {
  50597     return(NULL);
  50598   }
  50599 
  50600   if (!*list) {
  50601     *list      = MALLOC(2 * sizeof(char *));
  50602     if (!*list) {
  50603       return(NULL);
  50604     }
  50605     (*list)[0] = strdup(s);
  50606     (*list)[1] = NULL;
  50607   }
  50608   else {
  50609     // realloc list and copy s to last element
  50610     size_t len;
  50611     len  = listLengthS(*list);
  50612     char **tmp = REALLOC(*list, (len+2) * sizeof(char *));
  50613     if (!tmp) {
  50614       return(NULL);
  50615     }
  50616     else {
  50617       *list = tmp;
  50618       (*list)[len+1] = NULL;
  50619       (*list)[len]   = strdup(s);
  50620   }
  50621     }
  50622   return(*list);
  50623 }
  50624 
  50625 char **listPushCharS(char ***list, char c) {
  50626 
  50627   charToS(s, c);
  50628   return(listPushS(list, s));
  50629 }
  50630 
  50631 /**
  50632  * list Push String
  50633  * append s pointer at the end of the list
  50634  * when list is NULL, a new list with one element is returned
  50635  * when list and s are NULL return list with 2 NULL elements
  50636  * when s is NULL, NULL is pushed at the end of the list
  50637  *
  50638  * the list is reallocated to add extra space
  50639  *
  50640  * \param
  50641  *   pointer to list - becomes NULL when realloc fails (this parameter is reallocated)
  50642  * \param
  50643  *   s: string to push
  50644  * \return
  50645  *   list success
  50646  *   NULL error
  50647  */
  50648 char **iListPushS(char ***list, char *s) {
  50649 
  50650   // sanity checks
  50651   if (!list || !s) {
  50652     return(NULL);
  50653   }
  50654 
  50655   if (!*list) {
  50656     *list      = MALLOC(2 * sizeof(char *));
  50657     if (!*list) {
  50658       return(NULL);
  50659     }
  50660     (*list)[0] = s;
  50661     (*list)[1] = NULL;
  50662   }
  50663   else {
  50664     // realloc list and copy s to last element
  50665     size_t len;
  50666     len  = listLengthS(*list);
  50667     char **tmp = REALLOC(*list, (len+2) * sizeof(char *));
  50668     if (!tmp) {
  50669       return(NULL);
  50670     }
  50671     else {
  50672       *list = tmp;
  50673       (*list)[len+1] = NULL;
  50674       (*list)[len]   = s;
  50675   }
  50676     }
  50677   return(*list);
  50678 }
  50679 
  50680 
  50681 /**
  50682  * list Pop String
  50683  * return last string from list and remove last element from the list
  50684  *
  50685  * \param
  50686  *   pointer to list
  50687  * \return
  50688  *   duplicated last string (you must free the pointer)
  50689  *   NULL when the list is NULL or empty (first element is NULL)
  50690  */
  50691 char *listPopS(char ***list) {
  50692   char *s = NULL;
  50693   size_t len;
  50694 
  50695   // sanity checks
  50696   if (!list) {
  50697     return(NULL);
  50698   }
  50699 
  50700   if (!*list || !**list) {
  50701     // empty list
  50702     // no element in the list
  50703     return(NULL);
  50704   }
  50705   // copy and free last non NULL element
  50706   // the number of elements including NULL element remains the same
  50707   len = listLengthS(*list);
  50708   s   = (*list)[len-1];
  50709   (*list)[len-1] = NULL;
  50710   return(s);
  50711 }
  50712 
  50713 /**
  50714  * list Prepend String
  50715  * append s at the beginning of the list
  50716  * when list is NULL, a new list with one element is returned
  50717  * when list and s are NULL return list with 2 NULL elements
  50718  * when s is NULL, the operation is canceled
  50719  *
  50720  * the list is reallocated to add extra space
  50721  *
  50722  * \param
  50723  *   pointer to list - becomes NULL when realloc fails (this parameter is reallocated)
  50724  * \param
  50725  *   s: string to prepend
  50726  * \return
  50727  *   list success (you must free the pointer with listFreeS)
  50728  *   NULL error
  50729  */
  50730 char **listPrependS(char ***list, const char *s) {
  50731 
  50732   // sanity checks
  50733   if (!list || !s) {
  50734     return(NULL);
  50735   }
  50736 
  50737   if (!*list) {
  50738     *list      = MALLOC(2 * sizeof(char *));
  50739     if (!*list) {
  50740       return(NULL);
  50741     }
  50742     (*list)[0] = strdup(s);
  50743     (*list)[1] = NULL;
  50744   }
  50745   else {
  50746     // realloc list and copy s to first element
  50747     size_t len;
  50748     len  = listLengthS(*list);
  50749     char **tmp = REALLOC(*list, (len+2) * sizeof(char *));
  50750     if (!tmp) {
  50751       return(NULL);
  50752     }
  50753     else {
  50754       *list = tmp;
  50755       (*list)[len+1] = NULL;
  50756       // shift list
  50757       for (size_t i = len; i > 0; i--) {
  50758         (*list)[i] = (*list)[i-1];
  50759       }
  50760       (*list)[0] = strdup(s);
  50761   }
  50762     }
  50763   return(*list);
  50764 }
  50765 
  50766 char **listPrependCharS(char ***list, char c) {
  50767 
  50768   charToS(s, c);
  50769   return(listPrependS(list, s));
  50770 }
  50771 
  50772 /**
  50773  * list Prepend String
  50774  * append s pointer at the beginning of the list
  50775  * when list is NULL, a new list with one element is returned
  50776  * when list and s are NULL return list with 2 NULL elements
  50777  * when s is NULL, the operation is canceled
  50778  *
  50779  * the list is reallocated to add extra space
  50780  *
  50781  * \param
  50782  *   pointer to list - becomes NULL when realloc fails (this parameter is reallocated)
  50783  * \param
  50784  *   s: string to prepend
  50785  * \return
  50786  *   list success
  50787  *   NULL error
  50788  */
  50789 char **iListPrependS(char ***list, char *s) {
  50790 
  50791   // sanity checks
  50792   if (!list || !s) {
  50793     return(NULL);
  50794   }
  50795 
  50796   if (!*list) {
  50797     *list      = MALLOC(2 * sizeof(char *));
  50798     if (!*list) {
  50799       return(NULL);
  50800     }
  50801     (*list)[0] = s;
  50802     (*list)[1] = NULL;
  50803   }
  50804   else {
  50805     // realloc list and copy s to first element
  50806     size_t len;
  50807     len  = listLengthS(*list);
  50808     char **tmp = REALLOC(*list, (len+2) * sizeof(char *));
  50809     if (!tmp) {
  50810       return(NULL);
  50811     }
  50812     else {
  50813       *list = tmp;
  50814       (*list)[len+1] = NULL;
  50815       // shift list
  50816       for (size_t i = len; i > 0; i--) {
  50817         (*list)[i] = (*list)[i-1];
  50818       }
  50819       (*list)[0] = s;
  50820   }
  50821     }
  50822   return(*list);
  50823 }
  50824 
  50825 /**
  50826  * list Dequeue String
  50827  * return first string from list and remove it from the list
  50828  *
  50829  * \param
  50830  *   pointer to list
  50831  * \return
  50832  *   first string (you must free the pointer)
  50833  *   NULL when the list is NULL or empty (first element is NULL)
  50834  */
  50835 char *listDequeueS(char ***list) {
  50836   char *s = NULL;
  50837   size_t len;
  50838 
  50839   // sanity checks
  50840   if (!list) {
  50841     return(NULL);
  50842   }
  50843 
  50844   if (!*list || !**list) {
  50845     // empty list
  50846     // no element in the list
  50847     return(NULL);
  50848   }
  50849   // copy and free last non NULL element
  50850   // the number of elements including NULL element remains the same
  50851   len = listLengthS(*list);
  50852   s   = (*list)[0];
  50853   // shift list
  50854   for (size_t i = 1; i < len; i++) {
  50855     (*list)[i-1] = (*list)[i];
  50856   }
  50857   (*list)[len-1] = NULL;
  50858   return(s);
  50859 }
  50860 
  50861 /**
  50862  * list Free String
  50863  *
  50864  * \param
  50865  *   list
  50866  * \return
  50867  *   nothing
  50868  */
  50869 void listFreeS(char **list) {
  50870 
  50871   // sanity checks
  50872   if (list) {
  50873     forEachCharP(list, e) {
  50874       free(*e);
  50875     }
  50876     free(list);
  50877 }
  50878   }
  50879 
  50880 /**
  50881  * list free many String
  50882  *
  50883  * free variable list of pointers
  50884  * listFreeManyS(l1, l2, ...);
  50885  */
  50886 void listFreeManySF(char **paramType, ...) {
  50887   va_list pl;
  50888 
  50889   // add arguments to a list
  50890   va_start(pl, paramType);
  50891   paramType = va_arg(pl, char **);
  50892   while (paramType) {
  50893     listFreeS(paramType);
  50894     paramType = va_arg(pl, char **);
  50895   }
  50896   va_end(pl);
  50897 }
  50898 
  50899 /**
  50900  * list Length String
  50901  * return number of elements until the first NULL element
  50902  *
  50903  * \param
  50904  *   list
  50905  * \return
  50906  *   number of element until first NULL element
  50907  *   0 when list is NULL
  50908  */
  50909 size_t listLengthS(char **list) {
  50910   size_t r = 0;;
  50911 
  50912   // sanity checks
  50913   if (!list) {
  50914     return(0);
  50915   }
  50916   forEachCharP(list, i) {
  50917     r++;
  50918   }
  50919   return(r);
  50920 }
  50921 
  50922 /**
  50923  * const list Length String
  50924  * return number of elements until the first NULL element
  50925  *
  50926  * \param
  50927  *   list
  50928  * \return
  50929  *   number of element until first NULL element
  50930  *   0 when list is NULL
  50931  */
  50932 size_t listLengthCS(const char **list) {
  50933   size_t r = 0;;
  50934 
  50935   // sanity checks
  50936   if (!list) {
  50937     return(0);
  50938   }
  50939   forEachCCharP(list, i) {
  50940     r++;
  50941   }
  50942   return(r);
  50943 }
  50944 
  50945 /**
  50946  * list String Length String
  50947  *
  50948  * \param
  50949  *   list
  50950  * \return
  50951  *   list length as a single string
  50952  *   -1 when list is NULL
  50953  */
  50954 ssize_t listStrLengthS(char **list) {
  50955   ssize_t r = 0;;
  50956 
  50957   // sanity checks
  50958   if (!list) {
  50959     return(-1);
  50960   }
  50961 
  50962   forEachS(list, i) {
  50963     r += (ssize_t)strlen(i);
  50964   }
  50965 
  50966   return(r);
  50967 }
  50968 
  50969 /**
  50970  * list int to index String
  50971  * index can be negative
  50972  *
  50973  * \param
  50974  *   list
  50975  * \param
  50976  *   index: index in list, must be inside the list
  50977  * \return
  50978  *   positive index
  50979  *   -1 when list is NULL or index is not set correctly
  50980  */
  50981 ssize_t listIntIndexS(char **list, int64_t index) {
  50982   ssize_t  r;
  50983   int64_t len;
  50984 
  50985   // sanity checks
  50986   if (!list) {
  50987     return(-1);
  50988   }
  50989 
  50990   len = (int64_t)listLengthS(list);
  50991   if (index >= len) {
  50992     return(-1);
  50993   }
  50994   if (index < -len) {
  50995     return(-1);
  50996   }
  50997   if (index < 0) {
  50998     r = len + index;
  50999   }
  51000   else {
  51001     r = index;
  51002   }
  51003   return(r);
  51004 }
  51005 
  51006 /**
  51007  * list address String
  51008  * index can be negative
  51009  *
  51010  * \param
  51011  *   list
  51012  * \param
  51013  *   index: index in list, must be inside the list
  51014  * \return
  51015  *   pointer to char* at index
  51016  *   NULL when list is NULL or index is not set correctly
  51017  */
  51018 char **listAddrS(char **list, int64_t index) {
  51019   size_t  r;
  51020   int64_t len;
  51021 
  51022   // sanity checks
  51023   if (!list) {
  51024     return(NULL);
  51025   }
  51026 
  51027   len = (int64_t)listLengthS(list);
  51028   if (index >= len) {
  51029     return(NULL);
  51030   }
  51031   if (index < -len) {
  51032     return(NULL);
  51033   }
  51034   if (index < 0) {
  51035     r = (size_t)(len + index);
  51036   }
  51037   else {
  51038     r = (size_t)(index);
  51039   }
  51040   return((list+r));
  51041 }
  51042 
  51043 /**
  51044  * list Get String
  51045  * duplicate string at given index
  51046  * index can be negative
  51047  *
  51048  * \param
  51049  *   list
  51050  * \param
  51051  *   index: index in list, must be inside the list
  51052  * \return
  51053  *   duplicated string (you must free the pointer)
  51054  *   NULL when list is NULL or index is not set correctly
  51055  */
  51056 char *listGetS(char **list, int64_t index) {
  51057   int64_t len;
  51058 
  51059   // sanity checks
  51060   if (!list) {
  51061     return(NULL);
  51062   }
  51063 
  51064   len = (int64_t)listLengthS(list);
  51065   if (index >= len) {
  51066     return(NULL);
  51067   }
  51068   if (index < -len) {
  51069     return(NULL);
  51070   }
  51071   if (index < 0) {
  51072     index = len + index;
  51073   }
  51074 
  51075   return(strdup(list[index]));
  51076 }
  51077 
  51078 /**
  51079  * list Get String
  51080  * index can be negative
  51081  *
  51082  * \param
  51083  *   list
  51084  * \param
  51085  *   index: index in list, must be inside the list
  51086  * \return
  51087  *   string
  51088  *   NULL when list is NULL or index is not set correctly
  51089  */
  51090 char *iListGetS(char **list, int64_t index) {
  51091   int64_t len;
  51092 
  51093   // sanity checks
  51094   if (!list) {
  51095     return(NULL);
  51096   }
  51097 
  51098   len = (int64_t)listLengthS(list);
  51099   if (index >= len) {
  51100     return(NULL);
  51101   }
  51102   if (index < -len) {
  51103     return(NULL);
  51104   }
  51105   if (index < 0) {
  51106     index = len + index;
  51107   }
  51108 
  51109   return(list[index]);
  51110 }
  51111 
  51112 /**
  51113  * const list Get String
  51114  * duplicate string at given index
  51115  * index can be negative
  51116  *
  51117  * \param
  51118  *   list
  51119  * \param
  51120  *   index: index in list, must be inside the list
  51121  * \return
  51122  *   duplicated string (you must free the pointer)
  51123  *   NULL when list is NULL or index is not set correctly
  51124  */
  51125 char *listGetCS(const char **list, int64_t index) {
  51126   int64_t len;
  51127 
  51128   // sanity checks
  51129   if (!list) {
  51130     return(NULL);
  51131   }
  51132 
  51133   len = (int64_t)listLengthCS(list);
  51134   if (index >= len) {
  51135     return(NULL);
  51136   }
  51137   if (index < -len) {
  51138     return(NULL);
  51139   }
  51140   if (index < 0) {
  51141     index = len + index;
  51142   }
  51143 
  51144   return(strdup(list[index]));
  51145 }
  51146 
  51147 /**
  51148  * const list Get String
  51149  * index can be negative
  51150  *
  51151  * \param
  51152  *   list
  51153  * \param
  51154  *   index: index in list, must be inside the list
  51155  * \return
  51156  *   string
  51157  *   NULL when list is NULL or index is not set correctly
  51158  */
  51159 const char *iListGetCS(const char **list, int64_t index) {
  51160   int64_t len;
  51161 
  51162   // sanity checks
  51163   if (!list) {
  51164     return(NULL);
  51165   }
  51166 
  51167   len = (int64_t)listLengthCS(list);
  51168   if (index >= len) {
  51169     return(NULL);
  51170   }
  51171   if (index < -len) {
  51172     return(NULL);
  51173   }
  51174   if (index < 0) {
  51175     index = len + index;
  51176   }
  51177 
  51178   return(list[index]);
  51179 }
  51180 
  51181 /**
  51182  * list Set String
  51183  * duplicate string and store at given index, the existing element is freed
  51184  * index can be negative
  51185  *
  51186  * \param
  51187  *   list
  51188  * \param
  51189  *   index: index in list, must be inside the list
  51190  * \param
  51191  *   string
  51192  * \return
  51193  *   list success (you must free the pointer with listFreeS)
  51194  *   NULL error
  51195  *
  51196  * Does nothing when:
  51197  * when list is NULL, index is not set correctly or s is NULL
  51198  */
  51199 char **listSetS(char **list, int64_t index, const char *s) {
  51200   int64_t len;
  51201 
  51202   // sanity checks
  51203   if (!list || !s) {
  51204     return(NULL);
  51205   }
  51206 
  51207   len = (int64_t)listLengthS(list);
  51208   if (index >= len) {
  51209     return(NULL);
  51210   }
  51211   if (index < -len) {
  51212     return(NULL);
  51213   }
  51214   if (index < 0) {
  51215     index = len + index;
  51216   }
  51217 
  51218   free(list[index]);
  51219   list[index] = strdup(s);
  51220   return(list);
  51221 }
  51222 
  51223 char **listSetCharS(char **list, int64_t index, char c) {
  51224 
  51225   charToS(s, c);
  51226   return(listSetS(list, index, s));
  51227 }
  51228 
  51229 /**
  51230  * list Set String
  51231  * store string at given index
  51232  * index can be negative
  51233  *
  51234  * \param
  51235  *   list
  51236  * \param
  51237  *   index: index in list, must be inside the list
  51238  * \param
  51239  *   string
  51240  * \return
  51241  *   list success
  51242  *   NULL error
  51243  *
  51244  * Does nothing when:
  51245  * when list is NULL, index is not set correctly or s is NULL
  51246  */
  51247 char **iListSetS(char **list, int64_t index, char *s) {
  51248   int64_t len;
  51249 
  51250   // sanity checks
  51251   if (!list || !s) {
  51252     return(NULL);
  51253   }
  51254 
  51255   len = (int64_t)listLengthS(list);
  51256   if (index >= len) {
  51257     return(NULL);
  51258   }
  51259   if (index < -len) {
  51260     return(NULL);
  51261   }
  51262   if (index < 0) {
  51263     index = len + index;
  51264   }
  51265 
  51266   free(list[index]);
  51267   list[index] = s;
  51268   return(list);
  51269 }
  51270 
  51271 /**
  51272  * swap elements in list
  51273  *
  51274  * \param
  51275  * list
  51276  * \param
  51277  * index1 index of character to swap
  51278  * \param
  51279  * index2 index of second character to swap
  51280  * \return
  51281  * new list with elements swapped at index1 and index2 (you must free this pointer)
  51282  * NULL when list is NULL or when index1 or index2 are outside the list
  51283  */
  51284 char **listSwapS(char **list, int64_t index1, int64_t index2) {
  51285   int64_t len;
  51286 
  51287   if (!list) {
  51288     return(NULL);
  51289   }
  51290 
  51291   len = (int64_t)listLengthS(list);
  51292   if (index1 >= len) {
  51293     return(NULL);
  51294   }
  51295   if (index1 < -len) {
  51296     return(NULL);
  51297   }
  51298   if (index1 < 0) {
  51299     index1 = len + index1;
  51300   }
  51301 
  51302   if (index2 >= len) {
  51303     return(NULL);
  51304   }
  51305   if (index2 < -len) {
  51306     return(NULL);
  51307   }
  51308   if (index2 < 0) {
  51309     index2 = len + index2;
  51310   }
  51311 
  51312   char **r = listDupS(list);
  51313 
  51314   char *tmp  = r[index1];
  51315   r[index1]  = r[index2];
  51316   r[index2]  = tmp;;
  51317 
  51318   return(r);
  51319 }
  51320 
  51321 /**
  51322  * swap elements in list
  51323  *
  51324  * \param
  51325  * list
  51326  * \param
  51327  * index1 index of character to swap
  51328  * \param
  51329  * index2 index of second character to swap
  51330  * \return
  51331  * updated list with characters swapped at index1 and index2 (you must free this pointer)
  51332  * NULL when list is NULL or when index1 or index2 are outside the list
  51333  */
  51334 char **iListSwapS(char **list, int64_t index1, int64_t index2) {
  51335   int64_t len;
  51336 
  51337   if (!list) {
  51338     return(NULL);
  51339   }
  51340 
  51341   len = (int64_t)listLengthS(list);
  51342   if (index1 >= len) {
  51343     return(NULL);
  51344   }
  51345   if (index1 < -len) {
  51346     return(NULL);
  51347   }
  51348   if (index1 < 0) {
  51349     index1 = len + index1;
  51350   }
  51351 
  51352   if (index2 >= len) {
  51353     return(NULL);
  51354   }
  51355   if (index2 < -len) {
  51356     return(NULL);
  51357   }
  51358   if (index2 < 0) {
  51359     index2 = len + index2;
  51360   }
  51361 
  51362   char *tmp    = list[index1];
  51363   list[index1] = list[index2];
  51364   list[index2] = tmp;;
  51365 
  51366   return(list);
  51367 }
  51368 
  51369 
  51370 /**
  51371  * split string with delim string
  51372  * when updating this function, also update splitS (identical to split)
  51373  * return list
  51374  *
  51375  * \param
  51376  *   string to split
  51377  * \param
  51378  *   delim delimiter
  51379  * \return
  51380  *   list of tokens (you must free the pointer with listFreeS)
  51381  *   NULL when list or delim are NULL
  51382  */
  51383 char **split(const char *string, const char* delim) {
  51384   char *startString = NULL;
  51385   char *workingString = NULL;
  51386   char *line = NULL;
  51387   char *token = NULL;
  51388   char **r = NULL;
  51389 
  51390   // sanity checks
  51391   if (!string || !delim) {
  51392     return(NULL);
  51393   }
  51394 
  51395   if (!*delim || !*string) {
  51396     // empty delimiter empty string, return string in a list
  51397     pErrorNULL(listPushS(&r, string));
  51398     return(r);
  51399   }
  51400 
  51401   // split using strtok_r
  51402   startString   = strdup(string);
  51403   workingString = startString;
  51404   line  = workingString;
  51405   while (strlen(workingString) != 0) {
  51406     token = tokS(line, delim, &workingString);
  51407     pErrorNULL(listPushS(&r, token));
  51408     // mac os sets workingString to NULL at the end
  51409     if (!workingString) {
  51410       break; //LCOV_EXCL_LINE
  51411     }
  51412     // first parameter should be NULL in next strtok_r calls
  51413     line  = NULL;
  51414   }
  51415   free(startString);
  51416 
  51417   // check if delim is at the end of string
  51418   // if yes, add an empty string in the result
  51419   // ["one",""] = split "one/" "/"
  51420   size_t len  = strlen(string);
  51421   size_t lenD = strlen(delim);
  51422   if (strEq(string+(len-lenD), delim)) {
  51423     pErrorNULL(listPushS(&r, ""));
  51424   }
  51425 
  51426   return(r);
  51427 }
  51428 
  51429 // splitS is identical to split
  51430 // to make the interface uniform
  51431 char **splitS(const char *string, const char* delim) {
  51432   char *startString = NULL;
  51433   char *workingString = NULL;
  51434   char *line = NULL;
  51435   char *token = NULL;
  51436   char **r = NULL;
  51437 
  51438   // sanity checks
  51439   if (!string || !delim) {
  51440     return(NULL);
  51441   }
  51442 
  51443   if (!*delim || !*string) {
  51444     // empty delimiter empty string, return string in a list
  51445     pErrorNULL(listPushS(&r, string));
  51446     return(r);
  51447   }
  51448 
  51449   // split using strtok_r
  51450   startString   = strdup(string);
  51451   workingString = startString;
  51452   line  = workingString;
  51453   while (strlen(workingString) != 0) {
  51454     token = tokS(line, delim, &workingString);
  51455     pErrorNULL(listPushS(&r, token));
  51456     // mac os sets workingString to NULL at the end
  51457     if (!workingString) {
  51458       break; //LCOV_EXCL_LINE
  51459     }
  51460     // first parameter should be NULL in next strtok_r calls
  51461     line  = NULL;
  51462   }
  51463   free(startString);
  51464 
  51465   // check if delim is at the end of string
  51466   // if yes, add an empty string in the result
  51467   // ["one",""] = split "one/" "/"
  51468   size_t len  = strlen(string);
  51469   size_t lenD = strlen(delim);
  51470   if (strEq(string+(len-lenD), delim)) {
  51471     pErrorNULL(listPushS(&r, ""));
  51472   }
  51473 
  51474   return(r);
  51475 }
  51476 
  51477 char **splitChar(const char *string, char delim) {
  51478 
  51479   charToS(s, delim);
  51480   return(split(string, s));
  51481 }
  51482 
  51483 /**
  51484  * ignore case split string with delim string
  51485  * when updating this function, also update icSplitS (identical to icSplit)
  51486  * return list
  51487  *
  51488  * \param
  51489  *   string to split
  51490  * \param
  51491  *   delim delimiter
  51492  * \return
  51493  *   list of tokens (you must free the pointer with listFreeS)
  51494  *   NULL when list or delim are NULL
  51495  */
  51496 char **icSplit(const char *string, const char* delim) {
  51497   char *startString = NULL;
  51498   char *workingString = NULL;
  51499   char *line = NULL;
  51500   char *token = NULL;
  51501   char **r = NULL;
  51502 
  51503   // sanity checks
  51504   if (!string || !delim) {
  51505     return(NULL);
  51506   }
  51507 
  51508   if (!*delim || !*string) {
  51509     // empty delimiter empty string, return string in a list
  51510     pErrorNULL(listPushS(&r, string));
  51511     return(r);
  51512   }
  51513 
  51514   // split using strtok_r
  51515   startString   = strdup(string);
  51516   workingString = startString;
  51517   line  = workingString;
  51518   while (strlen(workingString) != 0) {
  51519     token = icTokS(line, delim, &workingString);
  51520     pErrorNULL(listPushS(&r, token));
  51521     // mac os sets workingString to NULL at the end
  51522     if (!workingString) {
  51523       break; //LCOV_EXCL_LINE
  51524     }
  51525     // first parameter should be NULL in next strtok_r calls
  51526     line  = NULL;
  51527   }
  51528   free(startString);
  51529 
  51530   // check if delim is at the end of string
  51531   // if yes, add an empty string in the result
  51532   // ["one",""] = split "one/" "/"
  51533   size_t len  = strlen(string);
  51534   size_t lenD = strlen(delim);
  51535   if (icEqS(string+(len-lenD), delim)) {
  51536     pErrorNULL(listPushS(&r, ""));
  51537   }
  51538 
  51539   return(r);
  51540 }
  51541 
  51542 // icSplitS is identical to icSplit
  51543 // to make the interface uniform
  51544 char **icSplitS(const char *string, const char* delim) {
  51545   char *startString = NULL;
  51546   char *workingString = NULL;
  51547   char *line = NULL;
  51548   char *token = NULL;
  51549   char **r = NULL;
  51550 
  51551   // sanity checks
  51552   if (!string || !delim) {
  51553     return(NULL);
  51554   }
  51555 
  51556   if (!*delim || !*string) {
  51557     // empty delimiter empty string, return string in a list
  51558     pErrorNULL(listPushS(&r, string));
  51559     return(r);
  51560   }
  51561 
  51562   // split using strtok_r
  51563   startString   = strdup(string);
  51564   workingString = startString;
  51565   line  = workingString;
  51566   while (strlen(workingString) != 0) {
  51567     token = icTokS(line, delim, &workingString);
  51568     pErrorNULL(listPushS(&r, token));
  51569     // mac os sets workingString to NULL at the end
  51570     if (!workingString) {
  51571       break; //LCOV_EXCL_LINE
  51572     }
  51573     // first parameter should be NULL in next strtok_r calls
  51574     line  = NULL;
  51575   }
  51576   free(startString);
  51577 
  51578   // check if delim is at the end of string
  51579   // if yes, add an empty string in the result
  51580   // ["one",""] = split "one/" "/"
  51581   size_t len  = strlen(string);
  51582   size_t lenD = strlen(delim);
  51583   if (icEqS(string+(len-lenD), delim)) {
  51584     pErrorNULL(listPushS(&r, ""));
  51585   }
  51586 
  51587   return(r);
  51588 }
  51589 
  51590 char **icSplitChar(const char *string, char delim) {
  51591 
  51592   charToS(s, delim);
  51593   return(icSplit(string, s));
  51594 }
  51595 
  51596 /**
  51597  * join Length
  51598  * list length after joined with delimiter
  51599  *
  51600  * \param
  51601  *   list
  51602  * \param
  51603  *   delim: string seperator
  51604  * \return
  51605  *   list length as a single string
  51606  *   -1 when list is NULL
  51607  */
  51608 ssize_t joinLength(char **list, const char* delim) {
  51609   ssize_t r = 0;;
  51610 
  51611   // sanity checks
  51612   if (!list || !delim) {
  51613     return(-1);
  51614   }
  51615 
  51616   size_t delimLen  = strlen(delim);
  51617   bool isFirstElem = true;
  51618   forEachS(list, i) {
  51619     if (isFirstElem) {
  51620       r           += (ssize_t)strlen(i);
  51621       isFirstElem  = no;
  51622     }
  51623     else {
  51624       r           += (ssize_t)(strlen(i) + delimLen);
  51625   }
  51626     }
  51627 
  51628   return(r);
  51629 }
  51630 
  51631 /**
  51632  * join list, the elements are seperated with delim in the resulting string
  51633  * when updating this function, also update joinS (identical to join)
  51634  *
  51635  * \param
  51636  *   list
  51637  * \param
  51638  *   delim: string seperator
  51639  * \return
  51640  *   joined string (you must free the pointer)
  51641  *   NULL when list or delim are NULL
  51642  */
  51643 char *join(char **list, const char* delim) {
  51644   char *r = NULL;
  51645 
  51646   // sanity checks
  51647   if (!list || !delim) {
  51648     return(NULL);
  51649   }
  51650 
  51651   forEachCharP(list, e) {
  51652     if (!r) {
  51653       r = strdup(*e);
  51654     }
  51655     else {
  51656       char *tmp;
  51657       tmp = REALLOC(r, strlen(r) + strlen(delim) + 1);
  51658       if (!tmp) {
  51659         free(r);
  51660         return(NULL);//LCOV_EXCL_LINE
  51661       }
  51662       r = tmp;
  51663       strcat(r, delim);
  51664       tmp = REALLOC(r, strlen(r) + strlen(*e) + 1);
  51665       if (!tmp) {
  51666         free(r);
  51667         return(NULL);//LCOV_EXCL_LINE
  51668       }
  51669       r = tmp;
  51670       strcat(r, *e);
  51671   }
  51672     }
  51673   return(r);
  51674 }
  51675 
  51676 // joinS is identical to join
  51677 // to make the interface uniform
  51678 char *joinS(char **list, const char* delim) {
  51679   char *r = NULL;
  51680 
  51681   // sanity checks
  51682   if (!list || !delim) {
  51683     return(NULL);
  51684   }
  51685 
  51686   forEachCharP(list, e) {
  51687     if (!r) {
  51688       r = strdup(*e);
  51689     }
  51690     else {
  51691       char *tmp;
  51692       tmp = REALLOC(r, strlen(r) + strlen(delim) + 1);
  51693       if (!tmp) {
  51694         free(r);
  51695         return(NULL);//LCOV_EXCL_LINE
  51696       }
  51697       r = tmp;
  51698       strcat(r, delim);
  51699       tmp = REALLOC(r, strlen(r) + strlen(*e) + 1);
  51700       if (!tmp) {
  51701         free(r);
  51702         return(NULL);//LCOV_EXCL_LINE
  51703       }
  51704       r = tmp;
  51705       strcat(r, *e);
  51706   }
  51707     }
  51708   return(r);
  51709 }
  51710 
  51711 /**
  51712  * join list, the elements are seperated with delim in the resulting string
  51713  *
  51714  * \param
  51715  *   list
  51716  * \param
  51717  *   delim: string seperator
  51718  * \return
  51719  *   joined string (you must free the pointer)
  51720  *   NULL when list or delim are NULL
  51721  */
  51722 char *joinCS(const char **list, const char* delim) {
  51723   char *r = NULL;
  51724 
  51725   // sanity checks
  51726   if (!list || !delim) {
  51727     return(NULL);
  51728   }
  51729 
  51730   forEachCCharP(list, e) {
  51731     if (!r) {
  51732       r = strdup(*e);
  51733     }
  51734     else {
  51735       char *tmp;
  51736       tmp = REALLOC(r, strlen(r) + strlen(delim) + 1);
  51737       if (!tmp) {
  51738         free(r);
  51739         return(NULL);//LCOV_EXCL_LINE
  51740       }
  51741       r = tmp;
  51742       strcat(r, delim);
  51743       tmp = REALLOC(r, strlen(r) + strlen(*e) + 1);
  51744       if (!tmp) {
  51745         free(r);
  51746         return(NULL);//LCOV_EXCL_LINE
  51747       }
  51748       r = tmp;
  51749       strcat(r, *e);
  51750   }
  51751     }
  51752   return(r);
  51753 }
  51754 
  51755 char *joinChar(char **list, char delim) {
  51756 
  51757   charToS(s, delim);
  51758   return(join(list, s));
  51759 }
  51760 
  51761 /**
  51762  * buffer join list, the elements are seperated with delim in the resulting string
  51763  *
  51764  * \param
  51765  *   list
  51766  * \param
  51767  *   delim: string seperator
  51768  * \return
  51769  *   joined string
  51770  *   NULL when list or delim are NULL
  51771  */
  51772 char *bJoin(char *string, char **list, const char* delim) {
  51773 
  51774   // sanity checks
  51775   if (!list || !delim || !string || !*list) {
  51776     return(NULL);
  51777   }
  51778 
  51779   bEmptyS(string);
  51780 
  51781   enumerateCharP(list, e, i) {
  51782     if (!i) {
  51783       strcpy(string, *e);
  51784     }
  51785     else {
  51786       pErrorNULL(bAppendManyS(string, delim, *e));
  51787   }
  51788     }
  51789   return(string);
  51790 }
  51791 
  51792 char *bJoinChar(char *string, char **list, char delim) {
  51793 
  51794   charToS(s, delim);
  51795   return(bJoin(string, list, s));
  51796 }
  51797 
  51798 /**
  51799  * buffer size join list, the elements are seperated with delim in the resulting string
  51800  *
  51801  * \param
  51802  *   list
  51803  * \param
  51804  *   delim: string seperator
  51805  * \return
  51806  *   joined string
  51807  *   NULL when list or delim are NULL
  51808  */
  51809 char *bLJoin(char *string, size_t stringSize, char **list, const char* delim) {
  51810 
  51811   // sanity checks
  51812   if (!list || !delim || !string || !*list) {
  51813     return(NULL);
  51814   }
  51815 
  51816   if (!stringSize) {
  51817     // size 0 - no change
  51818     return(string);
  51819   }
  51820 
  51821   bEmptyS(string);
  51822 
  51823   enumerateCharP(list, e, i) {
  51824     if (!i) {
  51825       pErrorNULL(strLCpy(string, stringSize, *e));
  51826     }
  51827     else {
  51828       pErrorNULL(bLAppendManyS(string, stringSize, delim, *e));
  51829   }
  51830     }
  51831   return(string);
  51832 }
  51833 
  51834 char *bLJoinChar(char *string, size_t stringSize, char **list, char delim) {
  51835 
  51836   charToS(s, delim);
  51837   return(bLJoin(string, stringSize, list, s));
  51838 }
  51839 
  51840 /**
  51841  * extract string between delim1 and delim2 strings
  51842  * return list
  51843  *
  51844  * \param
  51845  *   string to split
  51846  * \param
  51847  *   delim1 first delimiter
  51848  * \param
  51849  *   delim2 second delimiter, has to be different from delim1
  51850  * \return
  51851  *   list of tokens (you must free the pointer with listFreeS)
  51852  *   NULL when list or delim are NULL
  51853  */
  51854 char **extractS(const char *string, const char* delim1, const char* delim2) {
  51855   char **tmp = NULL;
  51856   char **r = NULL;
  51857 
  51858   // sanity checks
  51859   if (!string || !delim1 || !delim2) {
  51860     return(NULL);
  51861   }
  51862 
  51863   if (strEq(delim1, delim2)) {
  51864     return(NULL);
  51865   }
  51866 
  51867   tmp = split(string, delim1);;
  51868 
  51869   if (!tmp) {
  51870     return(NULL);
  51871   }
  51872 
  51873   if (listLengthS(tmp) < 2) {
  51874     // delim1 not found
  51875     listFreeS(tmp);
  51876     return(NULL);
  51877   }
  51878 
  51879   // remove first element
  51880   pErrorNULL(iListSliceS(&tmp, 1, 0));
  51881 
  51882   forEachCharP(tmp, e) {
  51883     char **tmp2 = split(*e, delim2);
  51884     if (listLengthS(tmp2) > 1) {
  51885       pErrorNULL(listPushS(&r, tmp2[0]));
  51886     }
  51887     listFreeS(tmp2);
  51888   }
  51889 
  51890   listFreeS(tmp);
  51891   return(r);
  51892 }
  51893 
  51894 char **extractCharSS(const char *string, char delim1, const char* delim2) {
  51895 
  51896   charToS(d1, delim1);
  51897   return(extractS(string, d1, delim2));
  51898 }
  51899 
  51900 char **extractSCharS(const char *string, const char* delim1, char delim2) {
  51901 
  51902   charToS(d2, delim2);
  51903   return(extractS(string, delim1, d2));
  51904 }
  51905 
  51906 char **extractCharCharS(const char *string, char delim1, char delim2) {
  51907 
  51908   charToS(d1, delim1);
  51909   charToS(d2, delim2);
  51910   return(extractS(string, d1, d2));
  51911 }
  51912 
  51913 /**
  51914  * ignore case extract string between delim1 and delim2 strings
  51915  * return list
  51916  *
  51917  * \param
  51918  *   string to split
  51919  * \param
  51920  *   delim1 first delimiter
  51921  * \param
  51922  *   delim2 second delimiter, has to different from delim1
  51923  * \return
  51924  *   list of tokens (you must free the pointer with listFreeS)
  51925  *   NULL when list or delim are NULL
  51926  */
  51927 char **icExtractS(const char *string, const char* delim1, const char* delim2) {
  51928   char **tmp = NULL;
  51929   char **r = NULL;
  51930 
  51931   // sanity checks
  51932   if (!string || !delim1 || !delim2) {
  51933     return(NULL);
  51934   }
  51935 
  51936   if (strEq(delim1, delim2)) {
  51937     return(NULL);
  51938   }
  51939 
  51940   tmp = icSplit(string, delim1);;
  51941 
  51942   if (!tmp) {
  51943     return(NULL);
  51944   }
  51945 
  51946   if (listLengthS(tmp) < 2) {
  51947     // delim1 not found
  51948     listFreeS(tmp);
  51949     return(NULL);
  51950   }
  51951 
  51952   // remove first element
  51953   pErrorNULL(iListSliceS(&tmp, 1, 0));
  51954 
  51955   forEachCharP(tmp, e) {
  51956     char **tmp2 = icSplit(*e, delim2);
  51957     if (listLengthS(tmp2) > 1) {
  51958       pErrorNULL(listPushS(&r, tmp2[0]));
  51959     }
  51960     listFreeS(tmp2);
  51961   }
  51962 
  51963   listFreeS(tmp);
  51964   return(r);
  51965 }
  51966 
  51967 char **icExtractCharSS(const char *string, char delim1, const char* delim2) {
  51968 
  51969   charToS(d1, delim1);
  51970   return(icExtractS(string, d1, delim2));
  51971 }
  51972 
  51973 char **icExtractSCharS(const char *string, const char* delim1, char delim2) {
  51974 
  51975   charToS(d2, delim2);
  51976   return(icExtractS(string, delim1, d2));
  51977 }
  51978 
  51979 char **icExtractCharCharS(const char *string, char delim1, char delim2) {
  51980 
  51981   charToS(d1, delim1);
  51982   charToS(d2, delim2);
  51983   return(icExtractS(string, d1, d2));
  51984 }
  51985 
  51986 /**
  51987  * list Duplicate String
  51988  *
  51989  * \param
  51990  *   list
  51991  * \return
  51992  *   duplicated list (you must free the pointer with listFreeS)
  51993  *   NULL when list is NULL
  51994  */
  51995 char **listDupS(char **list) {
  51996   char **l = NULL;
  51997   size_t len;
  51998 
  51999   // sanity checks
  52000   if (!list) {
  52001     return(NULL);
  52002   }
  52003 
  52004   len    = listLengthS(list);
  52005   l      = MALLOC((len+1) * sizeof(char *));
  52006   if (!l) {
  52007     return(NULL);//LCOV_EXCL_LINE
  52008   }
  52009 
  52010   // last element is NULL
  52011   l[len] = NULL;
  52012 
  52013   // copy each element
  52014   enumerateCharP(list, e, i) {
  52015     l[i] = strdup(*e);
  52016   }
  52017   return(l);
  52018 }
  52019 
  52020 /**
  52021  * const list Duplicate String
  52022  *
  52023  * \param
  52024  *   list
  52025  * \return
  52026  *   duplicated list (you must free the pointer with listFreeS)
  52027  *   NULL when list is NULL
  52028  */
  52029 char **listDupCS(const char **list) {
  52030   char **l = NULL;
  52031   size_t len;
  52032 
  52033   // sanity checks
  52034   if (!list) {
  52035     return(NULL);
  52036   }
  52037 
  52038   len    = listLengthCS(list);
  52039   l      = MALLOC((len+1) * sizeof(char *));
  52040   if (!l) {
  52041     return(NULL);//LCOV_EXCL_LINE
  52042   }
  52043 
  52044   // last element is NULL
  52045   l[len] = NULL;
  52046 
  52047   // copy each element
  52048   enumerateCCharP(list, e, i) {
  52049     l[i] = strdup(*e);
  52050   }
  52051   return(l);
  52052 }
  52053 
  52054 /**
  52055  * list Duplicate String
  52056  *
  52057  * copy pointers to new list
  52058  * After this function, free list with free instead of listFreeS
  52059  *
  52060  * Note: this function creates a new list, so char *** is not needed.
  52061  *   Unlike iList functions.
  52062  *
  52063  * \param
  52064  *   list
  52065  * \return
  52066  *   new list pointing to the same string as list (you should free the pointer with free)
  52067  *   NULL when list is NULL
  52068  */
  52069 char **iListDupS(char **list) {
  52070   char **l = NULL;
  52071   size_t len;
  52072 
  52073   // sanity checks
  52074   if (!list) {
  52075     return(NULL);
  52076   }
  52077 
  52078   len    = listLengthS(list);
  52079   l      = MALLOC((len+1) * sizeof(char *));
  52080   if (!l) {
  52081     return(NULL);//LCOV_EXCL_LINE
  52082   }
  52083 
  52084   // last element is NULL
  52085   l[len] = NULL;
  52086 
  52087   // copy each element
  52088   enumerateCharP(list, e, i) {
  52089     l[i] = *e;
  52090   }
  52091   return(l);
  52092 }
  52093 
  52094 /**
  52095  * list Reverse String
  52096  * duplicate and reverse list, the last element is the first element of the new list
  52097  *
  52098  * \param
  52099  *   list
  52100  * \return
  52101  *   reversed list (you must free the pointer with listFreeS)
  52102  *   NULL when list is NULL
  52103  */
  52104 char **listReverseS(char **list) {
  52105   char **l = NULL;
  52106   size_t len;
  52107 
  52108   // sanity checks
  52109   if (!list) {
  52110     return(NULL);
  52111   }
  52112 
  52113   len    = listLengthS(list);
  52114   l      = MALLOC((len+1) * sizeof(char *));
  52115   if (!l) {
  52116     return(NULL);//LCOV_EXCL_LINE
  52117   }
  52118 
  52119   // last element is NULL
  52120   l[len] = NULL;
  52121 
  52122   // copy each element in reverse order
  52123   enumerateCharP(list, e, i) {
  52124     l[len-1-i] = strdup(*e);
  52125   }
  52126   return(l);
  52127 }
  52128 
  52129 /**
  52130  * list Reverse String
  52131  * reverse list, the last element is the first element of the list
  52132  *
  52133  * \param
  52134  *   list (this parameter is reallocated)
  52135  * \return
  52136  *   reversed list (you must free the pointer with listFreeS or free)
  52137  *   nothing when list is NULL
  52138  *   NULL error
  52139  */
  52140 char **iListReverseS(char ***list) {
  52141   char **l = NULL;
  52142   size_t len;
  52143 
  52144   // sanity checks
  52145   if (!list || !*list) {
  52146     return(NULL);
  52147   }
  52148 
  52149   len    = listLengthS(*list);
  52150   l      = MALLOC((len+1) * sizeof(char *));
  52151   if (!l) {
  52152     return(NULL);
  52153   }
  52154 
  52155   // last element is NULL
  52156   l[len] = NULL;
  52157 
  52158   // copy each element in reverse order
  52159   enumerateCharP(*list, e, i) {
  52160     l[len-1-i] = *e;
  52161   }
  52162 
  52163   free(*list);
  52164   *list = l;
  52165   return(l);
  52166 }
  52167 
  52168 /**
  52169  * list Cat String
  52170  * \param
  52171  *   arbitrary list of lists seperated by commas
  52172  * \return
  52173  *   new list with input lists concatenated (you must free the pointer with listFreeS)
  52174  */
  52175 char **listCatSF(char **paramType, ...) {
  52176   va_list pl;
  52177   char **r = NULL;
  52178 
  52179   // add arguments to a list
  52180   va_start(pl, paramType);
  52181   paramType = va_arg(pl, char **);
  52182   while (paramType) {
  52183     pErrorNULL(listAppendS(&r, paramType));
  52184     paramType = va_arg(pl, char **);
  52185   }
  52186   va_end(pl);
  52187   return(r);
  52188 }
  52189 
  52190 /**
  52191  * list Append String
  52192  * Append list2 at the end of list1
  52193  *
  52194  * list1 is reallocated to add extra space
  52195  *
  52196  * \param
  52197  *   list1 (this parameter is reallocated)
  52198  * \param
  52199  *   list2
  52200  * \return
  52201  *   list1 and list2 (you must free the pointer with listFreeS)
  52202  *   list1 not modified when list1 and list2 are NULL
  52203  *   NULL error
  52204  */
  52205 char **listAppendS(char ***list1, char **list2) {
  52206   char **r = NULL;
  52207   char **l2 = NULL;
  52208   size_t len1;
  52209   size_t len2;
  52210   bool freeL2Status = false;;
  52211 
  52212   // sanity checks
  52213   if (!list1) {
  52214     // need a list to store results, abort
  52215     return(NULL);
  52216   }
  52217   if (!(*list1)) {
  52218     // copy list2
  52219     (*list1) = listDupS(list2);
  52220     return(*list1);
  52221   }
  52222   if (!list2) {
  52223     // list1 not modified
  52224     return(*list1);
  52225   }
  52226 
  52227   len1 = listLengthS(*list1);
  52228 
  52229   if ((*list1) == list2) {
  52230     // list1 and list2 identical, duplicate list before realloc
  52231     // copy only the string pointers
  52232     l2           = MALLOC((len1+1) * sizeof(char *));
  52233     if (!l2) {
  52234       return(NULL);
  52235     }
  52236     int j = 0;
  52237     while (list2[j]) {
  52238       l2[j] = list2[j];
  52239       j++;
  52240     }
  52241     l2[j] = NULL;
  52242     freeL2Status = true;
  52243   }
  52244   else {
  52245     l2 = list2;
  52246   }
  52247   len2 = listLengthS(l2);
  52248   r    = REALLOC((*list1), (len1+len2+1) * sizeof(char *));
  52249   if (!r) {
  52250     // realloc fails list1 not modified
  52251     if (freeL2Status) {
  52252       free(l2);
  52253     }
  52254     return(NULL);
  52255   }
  52256   (*list1) = r;
  52257   // push list2 to new list
  52258   enumerateCharP(l2, e, i) {
  52259     r[len1+i] = strdup(*e);
  52260   }
  52261 
  52262   r[len1+len2] = NULL;
  52263 
  52264   if (freeL2Status) {
  52265     free(l2);
  52266   }
  52267   return(r);
  52268 }
  52269 
  52270 /**
  52271  * in place list Append String
  52272  * Append list2 at the end of list1 by copying the pointers
  52273  * from list2 to list1.
  52274  * After this function, free list2 with free instead of listFreeS
  52275  *
  52276  * list1 is reallocated to add extra space
  52277  *
  52278  * \param
  52279  *   list1 (this parameter is reallocated)
  52280  * \param
  52281  *   list2
  52282  * \return
  52283  *   list1 and list2 (you must free the pointer with listFreeS or free)
  52284  *   list1 not modified when list1 and list2 are NULL
  52285  *     or when list1 is identical to list2 (same pointers)
  52286  *   NULL error
  52287  */
  52288 char **iListAppendS(char ***list1, char **list2) {
  52289   char **r = NULL;
  52290   size_t len1;
  52291   size_t len2;
  52292 
  52293   // sanity checks
  52294   if (!list1) {
  52295     // need a list to store results, abort
  52296     return(NULL);
  52297   }
  52298   if (!list2 || !*list2) {
  52299     // list1 not modified
  52300     return(*list1);
  52301   }
  52302   if (!(*list1)) {
  52303     // copy list2
  52304     len2     = listLengthS(list2);
  52305     *list1   = MALLOC((len2+1) * sizeof(char *));
  52306     if (!*list1) {
  52307       return(NULL);
  52308     }
  52309     int j    = 0;
  52310     while (list2[j]) {
  52311       (*list1)[j] = list2[j];
  52312       j++;
  52313     }
  52314     (*list1)[j] = NULL;
  52315     return(*list1);
  52316   }
  52317 
  52318   len1 = listLengthS(*list1);
  52319 
  52320   if ((*list1) == list2) {
  52321     // list1 and list2 identical, cancel this operations
  52322     // to avoid double free undefined behavior in listFreeS
  52323     return(NULL);
  52324   }
  52325 
  52326   len2 = listLengthS(list2);
  52327   r    = REALLOC((*list1), (len1+len2+1) * sizeof(char *));
  52328   if (!r) {
  52329     // realloc fails list1 not modified
  52330     return(NULL);
  52331   }
  52332   (*list1) = r;
  52333   // push list2 to new list
  52334   enumerateCharP(list2, e, i) {
  52335     r[len1+i] = *e;
  52336   }
  52337 
  52338   r[len1+len2] = NULL;
  52339 
  52340   return(r);
  52341 }
  52342 
  52343 /**
  52344  * list Append and smash list2
  52345  * Append list2 at the end of list1 by copying the pointers
  52346  * from list2 to list1.
  52347  *
  52348  * list2 is freed (except when there is an error)
  52349  *
  52350  * list1 is reallocated to add extra space
  52351  *
  52352  * \param
  52353  *   list1 (this parameter is reallocated)
  52354  * \param
  52355  *   list2
  52356  * \return
  52357  *   list1 and list2 (you must free the pointer with listFreeS or free)
  52358  *   list1 not modified when list1 and list2 are NULL
  52359  *     or when list1 is identical to list2 (same pointers)
  52360  *   NULL error
  52361  */
  52362 char **iListAppendNSmashS(char ***list1, char **list2) {
  52363   char **r = NULL;
  52364 
  52365   r = iListAppendS(list1, list2);
  52366   if (r) {
  52367     free(list2);
  52368   }
  52369   return(r);
  52370 }
  52371 
  52372 /**
  52373  * list Shift String
  52374  * Append list2 at the start of list1
  52375  *
  52376  * list1 is reallocated to add extra space
  52377  *
  52378  * \param
  52379  *   list1 (this parameter is reallocated)
  52380  * \param
  52381  *   list2
  52382  * \return
  52383  *   list1 and list2 (you must free the pointer with listFreeS)
  52384  *   list1 not modified when list1 and list2 are NULL
  52385  *   NULL error
  52386  */
  52387 char **listShiftS(char ***list1, char **list2) {
  52388 
  52389   if (!list1) {
  52390     return(NULL);
  52391   }
  52392 
  52393   char **r = listInsertS(*list1, 0, list2);
  52394   if (r) {
  52395     listFreeS(*list1);
  52396     *list1 = r;
  52397   }
  52398   return(r);
  52399 }
  52400 
  52401 /**
  52402  * in place list Shift String
  52403  * Append list2 at the start of list1 by copying the pointers
  52404  * from list2 to list1.
  52405  * After this function, free list2 with free instead of listFreeS
  52406  *
  52407  * list1 is reallocated to add extra space
  52408  *
  52409  * \param
  52410  *   list1 (this parameter is reallocated)
  52411  * \param
  52412  *   list2
  52413  * \return
  52414  *   list1 and list2 (you must free the pointer with listFreeS or free)
  52415  *   list1 not modified when list1 and list2 are NULL
  52416  *     or when list1 is identical to list2 (same pointers)
  52417  *   NULL error
  52418  */
  52419 char **iListShiftS(char ***list1, char **list2) {
  52420 
  52421   return(iListInsertS(list1, 0, list2));
  52422 }
  52423 
  52424 /**
  52425  * list Append and smash list2
  52426  * Append list2 at the start of list1 by copying the pointers
  52427  * from list2 to list1.
  52428  *
  52429  * list2 is freed (except when there is an error)
  52430  *
  52431  * list1 is reallocated to add extra space
  52432  *
  52433  * \param
  52434  *   list1 (this parameter is reallocated)
  52435  * \param
  52436  *   list2
  52437  * \return
  52438  *   list1 and list2 (you must free the pointer with listFreeS or free)
  52439  *   list1 not modified when list1 and list2 are NULL
  52440  *     or when list1 is identical to list2 (same pointers)
  52441  *   NULL error
  52442  */
  52443 char **iListShiftNSmashS(char ***list1, char **list2) {
  52444 
  52445   return(iListInsertNFreeS(list1, 0, list2));
  52446 }
  52447 
  52448 
  52449 /**
  52450  * list Add String
  52451  * add list1 and list2 in a new list
  52452  *
  52453  * \param
  52454  *   list1
  52455  * \param
  52456  *   list2
  52457  * \return
  52458  *   new list with list1 and list2 (you must free the pointer with listFreeS)
  52459  *   NULL when list1 and list2 are NULL
  52460  */
  52461 char **listAddS(char **list1, char **list2) {
  52462   char **l = NULL;
  52463   char **r = NULL;
  52464   size_t len1;
  52465   size_t len2;
  52466 
  52467   // sanity checks
  52468   if (!list1 && !list2) {
  52469     return(NULL);
  52470   }
  52471   if (!list1) {
  52472     // copy list2
  52473     return(listDupS(list2));
  52474   }
  52475   if (!list2) {
  52476     // copy list1
  52477     return(listDupS(list1));
  52478   }
  52479   // duplicate list1
  52480   l    = listDupS(list1);
  52481   len1 = listLengthS(list1);
  52482   len2 = listLengthS(list2);
  52483   r    = REALLOC(l, (len1+len2+1) * sizeof(char *));
  52484   if (!r) {
  52485     // free l when realloc fails
  52486     listFreeS(l);
  52487     return(NULL);//LCOV_EXCL_LINE
  52488   }
  52489   // push list2 to new list
  52490   enumerateCharP(list2, e, i) {
  52491     r[len1+i] = strdup(*e);
  52492   }
  52493 
  52494   r[len1+len2] = NULL;
  52495 
  52496   return(r);
  52497 }
  52498 
  52499 
  52500 /**
  52501  * const list Add String
  52502  * add list1 and list2 in a new list
  52503  *
  52504  * \param
  52505  *   list1
  52506  * \param
  52507  *   list2
  52508  * \return
  52509  *   new list with list1 and list2 (you must free the pointer with listFreeS)
  52510  *   NULL when list1 and list2 are NULL
  52511  */
  52512 char **listAddCS(char **list1, const char **list2) {
  52513   char **l = NULL;
  52514   char **r = NULL;
  52515   size_t len1;
  52516   size_t len2;
  52517 
  52518   // sanity checks
  52519   if (!list1 && !list2) {
  52520     return(NULL);
  52521   }
  52522   if (!list1) {
  52523     // copy list2
  52524     return(listDupCS(list2));
  52525   }
  52526   if (!list2) {
  52527     // copy list1
  52528     return(listDupS(list1));
  52529   }
  52530   // duplicate list1
  52531   l    = listDupS(list1);
  52532   len1 = listLengthS(list1);
  52533   len2 = listLengthCS(list2);
  52534   r    = REALLOC(l, (len1+len2+1) * sizeof(char *));
  52535   if (!r) {
  52536     // free l when realloc fails
  52537     listFreeS(l);
  52538     return(NULL);//LCOV_EXCL_LINE
  52539   }
  52540   // push list2 to new list
  52541   enumerateCCharP(list2, e, i) {
  52542     r[len1+i] = strdup(*e);
  52543   }
  52544 
  52545   r[len1+len2] = NULL;
  52546 
  52547   return(r);
  52548 }
  52549 
  52550 
  52551 /**
  52552  * list Slice String
  52553  * return new list with elements from start and end in list
  52554  * negative indexes are allowed
  52555  *
  52556  * \param
  52557  *   list
  52558  * \param
  52559  *   start index, must be in the list
  52560  * \param
  52561  *   end index, must be in the list
  52562  * \return
  52563  *   sliced list (you must free the pointer with listFreeS)
  52564  *   empty list when start=end
  52565  *   NULL when list is empty
  52566  *   NULL when list is NULL or when start and end are not set correctly
  52567  */
  52568 char **listSliceS(char **list, int64_t start, int64_t end) {
  52569   char **l = NULL;
  52570   int64_t len;
  52571 
  52572   // sanity checks
  52573   if (!list) {
  52574     return(NULL);
  52575   }
  52576 
  52577   len = (int64_t)listLengthS(list);
  52578 
  52579   if (start > len) {
  52580     return(NULL);
  52581   }
  52582   if (end > len) {
  52583     end = len;
  52584   }
  52585   if (start <= -len) {
  52586     start = -len;
  52587   }
  52588   if (end <= -len) {
  52589     return(NULL);
  52590   }
  52591   if (start < 0) {
  52592     start = len + start;
  52593   }
  52594   if (end <= 0) {
  52595     end = len + end;
  52596   }
  52597   if (end < start) {
  52598     return(NULL);
  52599   }
  52600 
  52601   if (start == end) {
  52602     // empty list
  52603     listEmptyS(l);
  52604     return(l);
  52605   }
  52606 
  52607   // start < end < len
  52608   int64_t n;
  52609   n = end - start;
  52610   l = MALLOC((size_t)(n+1) * sizeof(char *));
  52611   if (!l) {
  52612     return(NULL);//LCOV_EXCL_LINE
  52613   }
  52614   for (int64_t i=0;i < n;i++) {
  52615     l[i] = strdup(*(list+start+i));
  52616   }
  52617   l[n] = NULL;
  52618   return(l);
  52619 }
  52620 
  52621 /**
  52622  * list Copy String
  52623  * return new list with element pointers from start and end in list
  52624  * negative indexes are allowed
  52625  *
  52626  * Note: this function creates a new list, so char *** is not needed.
  52627  *   Unlike iList functions.
  52628  *
  52629  * \param
  52630  *   list
  52631  * \param
  52632  *   start index, must be in the list
  52633  * \param
  52634  *   end index, must be in the list
  52635  * \return
  52636  *   new list pointing to the same string as list (you must free the pointer with free)
  52637  *   empty list when start=end
  52638  *   NULL when list is empty
  52639  *   NULL when list is NULL or when start and end are not set correctly
  52640  */
  52641 char **iListCopyS(char **list, int64_t start, int64_t end) {
  52642   char **l = NULL;
  52643   int64_t len;
  52644 
  52645   // sanity checks
  52646   if (!list) {
  52647     return(NULL);
  52648   }
  52649 
  52650   len = (int64_t)listLengthS(list);
  52651 
  52652   if (start > len) {
  52653     return(NULL);
  52654   }
  52655   if (end > len) {
  52656     end = len;
  52657   }
  52658   if (start <= -len) {
  52659     start = -len;
  52660   }
  52661   if (end <= -len) {
  52662     return(NULL);
  52663   }
  52664   if (start < 0) {
  52665     start = len + start;
  52666   }
  52667   if (end <= 0) {
  52668     end = len + end;
  52669   }
  52670   if (end < start) {
  52671     return(NULL);
  52672   }
  52673 
  52674   if (start == end) {
  52675     // empty list
  52676     listEmptyS(l);
  52677     return(l);
  52678   }
  52679 
  52680   // start < end < len
  52681   int64_t n;
  52682   n = end - start;
  52683   l = MALLOC((size_t)(n+1) * sizeof(char *));
  52684   if (!l) {
  52685     return(NULL);//LCOV_EXCL_LINE
  52686   }
  52687   for (int64_t i=0;i < n;i++) {
  52688     l[i] = *(list+start+i);
  52689   }
  52690   l[n] = NULL;
  52691   return(l);
  52692 }
  52693 
  52694 /**
  52695  * list Slice String
  52696  * return list with elements from start and end in list
  52697  * negative indexes are allowed
  52698  *
  52699  * \param
  52700  *   list (this parameter is reallocated)
  52701  * \param
  52702  *   start index, must be in the list
  52703  * \param
  52704  *   end index, must be in the list
  52705  * \return
  52706  *   sliced list (you must free the pointer with listFreeS or free)
  52707  *   empty list when start=end
  52708  *   unchanged when list is empty
  52709  *   unchanged when list is NULL or when start and end are not set correctly
  52710  *   NULL error
  52711  */
  52712 char **iListSliceS(char ***list, int64_t start, int64_t end) {
  52713   char **l = NULL;
  52714   int64_t len;
  52715 
  52716   // sanity checks
  52717   if (!list || !*list) {
  52718     return(NULL);
  52719   }
  52720 
  52721   len = (int64_t)listLengthS(*list);
  52722 
  52723   if (start > len) {
  52724     listFreeS(*list);
  52725     listEmptyS(*list);
  52726     return(NULL);
  52727   }
  52728   if (end > len) {
  52729     end = len;
  52730   }
  52731   if (start <= -len) {
  52732     start = -len;
  52733   }
  52734   if (end <= -len) {
  52735     listFreeS(*list);
  52736     listEmptyS(*list);
  52737     return(NULL);
  52738   }
  52739   if (start < 0) {
  52740     start = len + start;
  52741   }
  52742   if (end <= 0) {
  52743     end = len + end;
  52744   }
  52745   if (end < start) {
  52746     listFreeS(*list);
  52747     listEmptyS(*list);
  52748     return(NULL);
  52749   }
  52750 
  52751   if (start == end) {
  52752     // empty list
  52753     listEmptyS(l);
  52754     // free elements
  52755     listFreeS(*list);
  52756   }
  52757   else {
  52758     // start < end < len
  52759     int64_t n;
  52760     n = end - start;
  52761     l = MALLOC((size_t)(n+1) * sizeof(char *));
  52762     if (!l) {
  52763       return(NULL);
  52764     }
  52765     for (int64_t i=0;i < n;i++) {
  52766       l[i] = *((*list)+start+i);
  52767     }
  52768     l[n] = NULL;
  52769     // free 0 < start
  52770     for (int64_t i=0;i < start;i++) {
  52771       free((*list)[i]);
  52772     }
  52773     // free end < len
  52774     for (int64_t i=end;i < len;i++) {
  52775       free((*list)[i]);
  52776     }
  52777     free(*list);
  52778   }
  52779 
  52780   *list = l;
  52781   return(l);
  52782 }
  52783 
  52784 /**
  52785  * list Crop String
  52786  * return a new list with elements from start and end in list
  52787  * and delete elements from start to end in the original list
  52788  * negative indexes are allowed
  52789  *
  52790  * iListCropS is faster than listSliceS+iListDelS because only the
  52791  * string pointers are copied to the sliced list
  52792  *
  52793  * \param
  52794  *   list
  52795  * \param
  52796  *   start index, must be in the list
  52797  * \param
  52798  *   end index, must be in the list
  52799  * \return
  52800  *   new sliced list (you must free the pointer with listFreeS or free)
  52801  *   empty list when start=end
  52802  *   unchanged when list is empty
  52803  *   unchanged when list is NULL or when start and end are not set correctly
  52804  *   NULL error
  52805  */
  52806 char **listCropS(char **list, int64_t start, int64_t end) {
  52807   char **l = NULL;
  52808   int64_t len;
  52809 
  52810   // sanity checks
  52811   if (!list) {
  52812     return(NULL);
  52813   }
  52814 
  52815   len = (int64_t)listLengthS(list);
  52816 
  52817   if (start > len) {
  52818     return(NULL);
  52819   }
  52820   if (end > len) {
  52821     end = len;
  52822   }
  52823   if (start <= -len) {
  52824     start = -len;
  52825   }
  52826   if (end <= -len) {
  52827     return(NULL);
  52828   }
  52829   if (start < 0) {
  52830     start = len + start;
  52831   }
  52832   if (end <= 0) {
  52833     end = len + end;
  52834   }
  52835   if (end < start) {
  52836     return(NULL);
  52837   }
  52838 
  52839   if (start == end) {
  52840     // empty list
  52841     listEmptyS(l);
  52842     return(l);
  52843   }
  52844   else {
  52845     // start < end < len
  52846     int64_t n;
  52847     n = end - start;
  52848     l = MALLOC((size_t)(n+1) * sizeof(char *));
  52849     if (!l) {
  52850       return(NULL);
  52851     }
  52852     for (int64_t i=0;i < n;i++) {
  52853       l[i] = *(list+start+i);
  52854     }
  52855     l[n] = NULL;
  52856     // free end < len
  52857     for (int64_t i=0;i < (len - end);i++) {
  52858       list[i+start] = *(list+i+end);
  52859     }
  52860     list[len-n] = NULL;
  52861   }
  52862 
  52863   return(l);
  52864 }
  52865 
  52866 /**
  52867  * list Crop String
  52868  * return a new list with elements from start and end in list
  52869  * and delete elements from start to end in the original list
  52870  * negative indexes are allowed
  52871  *
  52872  * iListCropS is faster than listSliceS+iListDelS because only the
  52873  * string pointers are copied to the sliced list
  52874  *
  52875  * \param
  52876  *   list
  52877  * \param
  52878  *   start index, must be in the list
  52879  * \param
  52880  *   end index, must be in the list
  52881  * \return
  52882  *   new sliced list (you must free the pointer with listFreeS or free)
  52883  *   empty list when start=end
  52884  *   unchanged when list is empty
  52885  *   unchanged when list is NULL or when start and end are not set correctly
  52886  *   NULL error
  52887  */
  52888 char **iListCropS(char ***list, int64_t start, int64_t end) {
  52889   char **l = NULL;
  52890   int64_t len;
  52891 
  52892   // sanity checks
  52893   if (!list || !*list) {
  52894     return(NULL);
  52895   }
  52896 
  52897   len = (int64_t)listLengthS(*list);
  52898 
  52899   if (start > len) {
  52900     return(NULL);
  52901   }
  52902   if (end > len) {
  52903     end = len;
  52904   }
  52905   if (start <= -len) {
  52906     start = -len;
  52907   }
  52908   if (end <= -len) {
  52909     return(NULL);
  52910   }
  52911   if (start < 0) {
  52912     start = len + start;
  52913   }
  52914   if (end <= 0) {
  52915     end = len + end;
  52916   }
  52917   if (end < start) {
  52918     return(NULL);
  52919   }
  52920 
  52921   if (start == end) {
  52922     // empty list
  52923     listEmptyS(l);
  52924     return(l);
  52925   }
  52926   else {
  52927     // start < end < len
  52928     int64_t n;
  52929     n = end - start;
  52930     l = MALLOC((size_t)(n+1) * sizeof(char *));
  52931     if (!l) {
  52932       return(NULL);
  52933     }
  52934     for (int64_t i=0;i < n;i++) {
  52935       l[i] = *((*list)+start+i);
  52936     }
  52937     l[n] = NULL;
  52938     // free end < len
  52939     for (int64_t i=0;i < (len - end);i++) {
  52940       (*list)[i+start] = *((*list)+i+end);
  52941     }
  52942     (*list)[len-n] = NULL;
  52943   }
  52944 
  52945   return(l);
  52946 }
  52947 
  52948 /**
  52949  * list Crop Element String
  52950  * return element at index
  52951  * and delete element at index in the original list
  52952  * negative indexes are allowed
  52953  *
  52954  * iListCropS is faster than listSliceS+iListDelElemS because only the
  52955  * string pointer is returned directly
  52956  *
  52957  * \param
  52958  *   list
  52959  * \param
  52960  *   index must be in the list
  52961  * \return
  52962  *   element at index (you must free the pointer with free)
  52963  *   empty list when start=end
  52964  *   unchanged when list is empty
  52965  *   unchanged when list is NULL or when start and end are not set correctly
  52966  *   NULL error
  52967  */
  52968 char *listCropElemS(char **list, int64_t index) {
  52969   char *r = NULL;
  52970   int64_t len;
  52971 
  52972   // sanity checks
  52973   if (!list) {
  52974     return(NULL);
  52975   }
  52976 
  52977   len = (int64_t)listLengthS(list);
  52978 
  52979   if (len == 0) {
  52980     return(NULL);
  52981   }
  52982 
  52983   if (index >= len) {
  52984     return(NULL);
  52985   }
  52986   if (index < -len) {
  52987     return(NULL);
  52988   }
  52989   if (index < 0) {
  52990     index = len + index;
  52991   }
  52992 
  52993   r = *(list+index);
  52994   for (int64_t i=index ; i < len-1 ; i++) {
  52995     list[i] = *(list+1+i);
  52996   }
  52997   list[len-1] = NULL;
  52998 
  52999   return(r);
  53000 }
  53001 
  53002 /**
  53003  * list Crop Element String
  53004  * return element at index
  53005  * and delete element at index in the original list
  53006  * negative indexes are allowed
  53007  *
  53008  * iListCropS is faster than listSliceS+iListDelElemS because only the
  53009  * string pointer is returned directly
  53010  *
  53011  * \param
  53012  *   list
  53013  * \param
  53014  *   index must be in the list
  53015  * \return
  53016  *   element at index (you must free the pointer with free)
  53017  *   empty list when start=end
  53018  *   unchanged when list is empty
  53019  *   unchanged when list is NULL or when start and end are not set correctly
  53020  *   NULL error
  53021  */
  53022 char *iListCropElemS(char ***list, int64_t index) {
  53023   char *r = NULL;
  53024   int64_t len;
  53025 
  53026   // sanity checks
  53027   if (!list || !*list) {
  53028     return(NULL);
  53029   }
  53030 
  53031   len = (int64_t)listLengthS(*list);
  53032 
  53033   if (len == 0) {
  53034     return(NULL);
  53035   }
  53036 
  53037   if (index >= len) {
  53038     return(NULL);
  53039   }
  53040   if (index < -len) {
  53041     return(NULL);
  53042   }
  53043   if (index < 0) {
  53044     index = len + index;
  53045   }
  53046 
  53047   r = *((*list)+index);
  53048   for (int64_t i=index ; i < len-1 ; i++) {
  53049     (*list)[i] = *((*list)+1+i);
  53050   }
  53051   (*list)[len-1] = NULL;
  53052 
  53053   return(r);
  53054 }
  53055 
  53056 /**
  53057  * list Insert string
  53058  *
  53059  * insert list in list at index
  53060  *
  53061  * return new list with toInsert at index
  53062  * negative indexes are allowed
  53063  * index -1 is the end of the array and is equivalent to index len
  53064  *
  53065  * \param
  53066  *   list
  53067  * \param
  53068  *   index in list
  53069  * \param
  53070  *   toInsert list
  53071  * \return
  53072  *   new list (you must free the pointer with listFreeS)
  53073  *   NULL when list is NULL or invalid index
  53074  */
  53075 char **listInsertS(char **list, int64_t index, char **toInsert) {
  53076   char **r = NULL;
  53077   int64_t len;
  53078 
  53079   //sanity checks
  53080   if (!list) {
  53081     if (index || !toInsert) {
  53082       return(NULL);
  53083     }
  53084     return(listDupS(toInsert));
  53085   }
  53086   len = (int64_t)listLengthS(list);
  53087 
  53088   if (!len && index == -1) {
  53089     // empty string, index -1 is equal to 0
  53090     index = 0;
  53091   }
  53092   bool neg = false;
  53093   if (index < 0) {
  53094     neg = true;
  53095   }
  53096 
  53097   if (index > len) {
  53098     return(NULL);
  53099   }
  53100   if (neg) {
  53101     index++;
  53102   }
  53103   if (index < -len) {
  53104     return(NULL);
  53105   }
  53106   if (neg) {
  53107     index = len + index;
  53108   }
  53109 
  53110 
  53111   if (!toInsert || listIsEmptyS(toInsert)) {
  53112     return(listDupS(list));
  53113   }
  53114 
  53115   if (index == 0) {
  53116     // insert at beginning
  53117     return(listAddS(toInsert, list));
  53118   }
  53119 
  53120   char **l1 = listSliceS(list, 0, index);
  53121   char **l2 = listSliceS(list, index, 0);
  53122   r         = listCatS(l1, toInsert, l2);
  53123   listFreeManyS(l1,l2);
  53124 
  53125   return(r);
  53126 }
  53127 
  53128 /**
  53129  * list Insert string
  53130  *
  53131  * insert list in list at index
  53132  * After this function, free toInsert with free instead of listFreeS
  53133  *
  53134  * return list with toInsert at index
  53135  * negative indexes are allowed
  53136  * index -1 is the end of the array and is equivalent to index len
  53137  *
  53138  * \param
  53139  *   list (this parameter is reallocated)
  53140  * \param
  53141  *   index in list
  53142  * \param
  53143  *   toInsert list
  53144  * \return
  53145  *   list (you must free the pointer with listFreeS or free)
  53146  *   unchanged list when list is NULL or invalid index
  53147  *   NULL error
  53148  */
  53149 char **iListInsertS(char ***list, int64_t index, char **toInsert) {
  53150   char **r = NULL;
  53151   int64_t len;
  53152 
  53153   //sanity checks
  53154   if (!list || !toInsert) {
  53155     return(NULL);
  53156   }
  53157   if (!*list) {
  53158     if (index) {
  53159       return(NULL);
  53160     }
  53161     len   = (int64_t)listLengthS(toInsert);
  53162     r      = MALLOC((size_t)(len+1) * sizeof(char *));
  53163     if (!r) {
  53164       return(NULL);//LCOV_EXCL_LINE
  53165     }
  53166     // last element is NULL
  53167     r[len] = NULL;
  53168     // copy each element
  53169     enumerateCharP(toInsert, e, i) {
  53170       r[i] = *e;
  53171     }
  53172     *list = r;
  53173     return(r);
  53174   }
  53175 
  53176   len = (int64_t)listLengthS(*list);
  53177 
  53178   if (!len && index == -1) {
  53179     // empty string, index -1 is equal to 0
  53180     index = 0;
  53181   }
  53182   bool neg = false;
  53183   if (index < 0) {
  53184     neg = true;
  53185   }
  53186 
  53187   if (index > len) {
  53188     return(NULL);
  53189   }
  53190   if (neg) {
  53191     index++;
  53192   }
  53193   if (index < -len) {
  53194     return(NULL);
  53195   }
  53196   if (neg) {
  53197     index = len + index;
  53198   }
  53199 
  53200 
  53201   if (listIsEmptyS(toInsert)) {
  53202     return(*list);
  53203   }
  53204 
  53205   if ((*list) == toInsert) {
  53206     // list1 and list2 identical, cancel this operations
  53207     // to avoid double free undefined behavior in listFreeS
  53208     return(NULL);
  53209   }
  53210 
  53211   if (index == 0) {
  53212     // insert at beginning
  53213     pErrorNULL(iListAppendS(&r, toInsert));
  53214     pErrorNULL(iListAppendS(&r, *list));
  53215   }
  53216   else {
  53217 
  53218     r         = iListCopyS(*list, 0, index);;
  53219     char **l2 = iListCopyS(*list, index, 0);
  53220     pErrorNULL(iListAppendS(&r, toInsert));
  53221     pErrorNULL(iListAppendS(&r, l2));
  53222     free(l2);
  53223   }
  53224 
  53225   free(*list);
  53226   *list = r;
  53227   return(r);
  53228 }
  53229 
  53230 /**
  53231  * list Insert string and free toInsert
  53232  *
  53233  * insert list in list at index
  53234  *
  53235  * return list with toInsert at index
  53236  * negative indexes are allowed
  53237  * index -1 is the end of the array and is equivalent to index len
  53238  *
  53239  * \param
  53240  *   list (this parameter is reallocated)
  53241  * \param
  53242  *   index in list
  53243  * \param
  53244  *   toInsert list
  53245  * \return
  53246  *   list (you must free the pointer with listFreeS or free)
  53247  *   unchanged list when list is NULL or invalid index
  53248  *   NULL error
  53249  */
  53250 char **iListInsertNFreeS(char ***list, int64_t index, char **toInsert) {
  53251   char **r = NULL;
  53252   int64_t len;
  53253 
  53254   //sanity checks
  53255   if (!list || !toInsert) {
  53256     return(NULL);
  53257   }
  53258   if (!*list) {
  53259     if (index) {
  53260       return(NULL);
  53261     }
  53262     r     = listDupS(toInsert);
  53263     listFreeS(toInsert);
  53264     *list = r;
  53265     return(r);
  53266   }
  53267 
  53268   len = (int64_t)listLengthS(*list);
  53269 
  53270   if (!len && index == -1) {
  53271     // empty string, index -1 is equal to 0
  53272     index = 0;
  53273   }
  53274   bool neg = false;
  53275   if (index < 0) {
  53276     neg = true;
  53277   }
  53278 
  53279   if (index > len) {
  53280     return(NULL);
  53281   }
  53282   if (neg) {
  53283     index++;
  53284   }
  53285   if (index < -len) {
  53286     return(NULL);
  53287   }
  53288   if (neg) {
  53289     index = len + index;
  53290   }
  53291 
  53292 
  53293   if (listIsEmptyS(toInsert)) {
  53294     listFreeS(toInsert);
  53295     return(*list);
  53296   }
  53297 
  53298   if ((*list) == toInsert) {
  53299     // list1 and list2 identical, cancel this operations
  53300     // to avoid double free undefined behavior in listFreeS
  53301     return(NULL);
  53302   }
  53303 
  53304   if (index == 0) {
  53305     // insert at beginning
  53306     pErrorNULL(iListAppendS(&r, toInsert));
  53307     pErrorNULL(iListAppendS(&r, *list));
  53308   }
  53309   else {
  53310 
  53311     r         = iListCopyS(*list, 0, index);;
  53312     char **l2 = iListCopyS(*list, index, 0);
  53313     pErrorNULL(iListAppendS(&r, toInsert));
  53314     pErrorNULL(iListAppendS(&r, l2));
  53315     free(l2);
  53316   }
  53317   free(toInsert);
  53318 
  53319   free(*list);
  53320   *list = r;
  53321   return(r);
  53322 }
  53323 
  53324 /**
  53325  * list Inject string
  53326  *
  53327  * Inject string in list at index
  53328  *
  53329  * return new list with toInject at index
  53330  * negative indexes are allowed
  53331  * index -1 is the end of the array and is equivalent to index len
  53332  *
  53333  * \param
  53334  *   list
  53335  * \param
  53336  *   index in list
  53337  * \param
  53338  *   toInject string
  53339  * \return
  53340  *   new list (you must free the pointer with listFreeS)
  53341  *   NULL when list is NULL or invalid index
  53342  */
  53343 char **listInjectS(char **list, int64_t index, char *toInject) {
  53344   char **r = NULL;
  53345   int64_t len;
  53346 
  53347   //sanity checks
  53348   if (!list) {
  53349     if (index || !toInject) {
  53350       return(NULL);
  53351     }
  53352     pErrorNULL(listPushS(&r, toInject));
  53353     return(r);
  53354   }
  53355 
  53356   if (!toInject) {
  53357     return(NULL);
  53358   }
  53359 
  53360   len = (int64_t)listLengthS(list);
  53361 
  53362   if (!len && index == -1) {
  53363     // empty string, index -1 is equal to 0
  53364     index = 0;
  53365   }
  53366   bool neg = false;
  53367   if (index < 0) {
  53368     neg = true;
  53369   }
  53370 
  53371   if (index > len) {
  53372     return(NULL);
  53373   }
  53374   if (neg) {
  53375     index++;
  53376   }
  53377   if (index < -len) {
  53378     return(NULL);
  53379   }
  53380   if (neg) {
  53381     index = len + index;
  53382   }
  53383 
  53384 
  53385   char *inject[2];
  53386   inject[0] = toInject;
  53387   inject[1] = NULL;
  53388 
  53389   if (index == 0) {
  53390     // Inject at beginning
  53391     return(listAddS(inject, list));
  53392   }
  53393 
  53394   char **l1 = listSliceS(list, 0, index);
  53395   char **l2 = listSliceS(list, index, 0);
  53396   r         = listCatS(l1, inject, l2);
  53397   listFreeManyS(l1,l2);
  53398 
  53399   return(r);
  53400 }
  53401 
  53402 char **listInjectCharS(char **list, int64_t index, char toInject) {
  53403 
  53404   charToS(s, toInject);
  53405   return(listInjectS(list, index, s));
  53406 }
  53407 
  53408 /**
  53409  * list Inject string
  53410  *
  53411  * Inject string pointer in list at index
  53412  *
  53413  * return list with toInject at index
  53414  * negative indexes are allowed
  53415  * index -1 is the end of the array and is equivalent to index len
  53416  *
  53417  * \param
  53418  *   list (this parameter is reallocated)
  53419  * \param
  53420  *   index in list
  53421  * \param
  53422  *   toInject string
  53423  * \return
  53424  *   list (you must free the pointer with listFreeS or free)
  53425  *   unchanged list when list is NULL or invalid index
  53426  *   NULL error
  53427  */
  53428 char **iListInjectS(char ***list, int64_t index, char *toInject) {
  53429   char **r = NULL;
  53430   int64_t len;
  53431 
  53432   //sanity checks
  53433   if (!list || !toInject) {
  53434     return(NULL);
  53435   }
  53436   if (!*list) {
  53437     if (index) {
  53438       return(NULL);
  53439     }
  53440     pErrorNULL(iListPushS(list, toInject));
  53441     return(*list);
  53442   }
  53443 
  53444   len = (int64_t)listLengthS(*list);
  53445 
  53446   if (!len && index == -1) {
  53447     // empty string, index -1 is equal to 0
  53448     index = 0;
  53449   }
  53450   bool neg = false;
  53451   if (index < 0) {
  53452     neg = true;
  53453   }
  53454 
  53455   if (index > len) {
  53456     return(NULL);
  53457   }
  53458   if (neg) {
  53459     index++;
  53460   }
  53461   if (index < -len) {
  53462     return(NULL);
  53463   }
  53464   if (neg) {
  53465     index = len + index;
  53466   }
  53467 
  53468 
  53469   char *inject[2];
  53470   inject[0] = toInject;
  53471   inject[1] = NULL;
  53472 
  53473   if (index == 0) {
  53474     // Inject at beginning
  53475     pErrorNULL(iListAppendS(&r, inject));
  53476     pErrorNULL(iListAppendS(&r, *list));
  53477   }
  53478   else {
  53479 
  53480     r         = iListCopyS(*list, 0, index);;
  53481     char **l2 = iListCopyS(*list, index, 0);
  53482     pErrorNULL(iListAppendS(&r, inject));
  53483     pErrorNULL(iListAppendS(&r, l2));
  53484     free(l2);
  53485   }
  53486 
  53487   free(*list);
  53488   *list = r;
  53489   return(r);
  53490 }
  53491 
  53492 char **iListInjectCharS(char ***list, int64_t index, char toInject) {
  53493 
  53494   if (!list) {
  53495     return(NULL);
  53496   }
  53497 
  53498   if (!*list && index) {
  53499       return(NULL);
  53500   }
  53501 
  53502   charToS(s, toInject);
  53503   *list = iListInjectS(list, index, strdup(s));
  53504   return(*list);
  53505 }
  53506 
  53507 /**
  53508  * list Delete String
  53509  * return new list without elements from start and end in list
  53510  * negative indexes are allowed
  53511  *
  53512  * \param
  53513  *   list
  53514  * \param
  53515  *   start index, must be in the list
  53516  * \param
  53517  *   end index, must be in the list
  53518  * \return
  53519  *   sliced list (you must free the pointer with listFreeS)
  53520  *   list copy when start=end or when start and end are not set correctly
  53521  *   NULL when list is empty
  53522  *   NULL when list is NULL or when end is under start
  53523  */
  53524 char **listDelS(char **list, int64_t start, int64_t end) {
  53525   char **l = NULL;
  53526   int64_t len;
  53527 
  53528   // sanity checks
  53529   if (!list) {
  53530     return(NULL);
  53531   }
  53532 
  53533   len = (int64_t)listLengthS(list);
  53534 
  53535   if (len == 0) {
  53536     return(NULL);
  53537   }
  53538 
  53539   if (start >= len) {
  53540     start = len;
  53541   }
  53542   if (end > len) {
  53543     end = len;
  53544   }
  53545   if (start <= -len) {
  53546     start = -len;
  53547   }
  53548   if (end <= -len) {
  53549     end = -len;
  53550   }
  53551   if (start < 0) {
  53552     start = len + start;
  53553   }
  53554   if (end <= 0) {
  53555     end = len + end;
  53556   }
  53557   if (end < start) {
  53558     return(NULL);
  53559   }
  53560 
  53561   if (start == end) {
  53562     return(listDupS(list));
  53563   }
  53564 
  53565   // start < end < len
  53566   int64_t n;
  53567   n = end - start;
  53568   l = MALLOC((size_t)(len-n+1) * sizeof(char *));
  53569   if (!l) {
  53570     return(NULL);//LCOV_EXCL_LINE
  53571   }
  53572   for (int64_t i=0;i < start;i++) {
  53573     l[i] = strdup(*(list+i));
  53574   }
  53575   for (int64_t i=start ; i < len-n ; i++) {
  53576     l[i] = strdup(*(list+n+i));
  53577   }
  53578   l[len-n] = NULL;
  53579   return(l);
  53580 }
  53581 
  53582 
  53583 /**
  53584  * list Delete String
  53585  * return list without elements from start and end in list
  53586  * negative indexes are allowed
  53587  *
  53588  * \param
  53589  *   list (this parameter is reallocated)
  53590  * \param
  53591  *   start index, must be in the list
  53592  * \param
  53593  *   end index, must be in the list
  53594  * \return
  53595  *   sliced list (you must free the pointer with listFreeS or free)
  53596  *   list copy when start=end or when start and end are not set correctly
  53597  *   NULL when list is empty
  53598  *   NULL when list is NULL or when end is under start
  53599  *   NULL error
  53600  */
  53601 char **iListDelS(char ***list, int64_t start, int64_t end) {
  53602   char **l = NULL;
  53603   int64_t len;
  53604 
  53605   // sanity checks
  53606   if (!list || !*list) {
  53607     return(NULL);
  53608   }
  53609 
  53610   len = (int64_t)listLengthS(*list);
  53611 
  53612   if (len == 0) {
  53613     return(NULL);
  53614   }
  53615 
  53616   if (start >= len) {
  53617     start = len;
  53618   }
  53619   if (end > len) {
  53620     end = len;
  53621   }
  53622   if (start <= -len) {
  53623     start = -len;
  53624   }
  53625   if (end <= -len) {
  53626     end = -len;
  53627   }
  53628   if (start < 0) {
  53629     start = len + start;
  53630   }
  53631   if (end <= 0) {
  53632     end = len + end;
  53633   }
  53634   if (end < start) {
  53635     return(NULL);
  53636   }
  53637 
  53638   if (start == end) {
  53639     return(*list);
  53640   }
  53641 
  53642   // start < end < len
  53643   int64_t n;
  53644   n = end - start;
  53645   l = MALLOC((size_t)(len-n+1) * sizeof(char *));
  53646   if (!l) {
  53647     return(NULL);
  53648   }
  53649   for (int64_t i=0;i < start;i++) {
  53650     l[i] = *((*list)+i);
  53651   }
  53652   for (int64_t i=0;i < n;i++) {
  53653     free(*((*list)+start+i));
  53654   }
  53655   for (int64_t i=start ; i < len-n ; i++) {
  53656     l[i] = *((*list)+n+i);
  53657   }
  53658   l[len-n] = NULL;
  53659 
  53660   free(*list);
  53661   *list = l;
  53662   return(l);
  53663 }
  53664 
  53665 /**
  53666  * list Remove String
  53667  * return list without elements from start and end in list
  53668  * the elements are removed without being freed
  53669  * negative indexes are allowed
  53670  *
  53671  * \param
  53672  *   list (this parameter is reallocated)
  53673  * \param
  53674  *   start index, must be in the list
  53675  * \param
  53676  *   end index, must be in the list
  53677  * \return
  53678  *   sliced list (you must free the pointer with listFreeS or free)
  53679  *   list copy when start=end or when start and end are not set correctly
  53680  *   NULL when list is empty
  53681  *   NULL when list is NULL or when end is under start
  53682  *   NULL error
  53683  */
  53684 char **iListRemoveS(char ***list, int64_t start, int64_t end) {
  53685   char **l = NULL;
  53686   int64_t len;
  53687 
  53688   // sanity checks
  53689   if (!list || !*list) {
  53690     return(NULL);
  53691   }
  53692 
  53693   len = (int64_t)listLengthS(*list);
  53694 
  53695   if (len == 0) {
  53696     return(NULL);
  53697   }
  53698 
  53699   if (start >= len) {
  53700     start = len;
  53701   }
  53702   if (end > len) {
  53703     end = len;
  53704   }
  53705   if (start <= -len) {
  53706     start = -len;
  53707   }
  53708   if (end <= -len) {
  53709     end = -len;
  53710   }
  53711   if (start < 0) {
  53712     start = len + start;
  53713   }
  53714   if (end <= 0) {
  53715     end = len + end;
  53716   }
  53717   if (end < start) {
  53718     return(NULL);
  53719   }
  53720 
  53721   if (start == end) {
  53722     return(*list);
  53723   }
  53724 
  53725   // start < end < len
  53726   int64_t n;
  53727   n = end - start;
  53728   l = MALLOC((size_t)(len-n+1) * sizeof(char *));
  53729   if (!l) {
  53730     return(NULL);
  53731   }
  53732   for (int64_t i=0;i < start;i++) {
  53733     l[i] = *((*list)+i);
  53734   }
  53735   for (int64_t i=start ; i < len-n ; i++) {
  53736     l[i] = *((*list)+n+i);
  53737   }
  53738   l[len-n] = NULL;
  53739 
  53740   free(*list);
  53741   *list = l;
  53742   return(l);
  53743 }
  53744 
  53745 /**
  53746  * list Delete Element String
  53747  * return new list without the element at index
  53748  * negative indexes are allowed
  53749  *
  53750  * \param
  53751  *   list
  53752  * \param
  53753  *   index must be in the list
  53754  * \return
  53755  *   new list without the element at index (you must free the pointer with listFreeS)
  53756  *   NULL when list is empty
  53757  *   NULL when list is NULL
  53758  */
  53759 char **listDelElemS(char **list, int64_t index) {
  53760   char **l = NULL;
  53761   int64_t len;
  53762 
  53763   // sanity checks
  53764   if (!list) {
  53765     return(NULL);
  53766   }
  53767 
  53768   len = (int64_t)listLengthS(list);
  53769 
  53770   if (len == 0) {
  53771     return(NULL);
  53772   }
  53773 
  53774   if (index >= len) {
  53775     return(NULL);
  53776   }
  53777   if (index < -len) {
  53778     return(NULL);
  53779   }
  53780   if (index < 0) {
  53781     index = len + index;
  53782   }
  53783 
  53784   l = MALLOC((size_t)(len-1+1) * sizeof(char *));
  53785   if (!l) {
  53786     return(NULL);//LCOV_EXCL_LINE
  53787   }
  53788   for (int64_t i=0;i < index;i++) {
  53789     l[i] = strdup(*(list+i));
  53790   }
  53791   for (int64_t i=index ; i < len-1 ; i++) {
  53792     l[i] = strdup(*(list+1+i));
  53793   }
  53794   l[len-1] = NULL;
  53795   return(l);
  53796 }
  53797 
  53798 
  53799 /**
  53800  * list Delete Element String
  53801  * return list without the element at index
  53802  * negative indexes are allowed
  53803  *
  53804  * \param
  53805  *   list (this parameter is reallocated)
  53806  * \param
  53807  *   index must be in the list
  53808  * \return
  53809  *   new list without the element at index (you must free the pointer with listFreeS)
  53810  *   NULL when list is empty
  53811  *   NULL when list is NULL
  53812  *   NULL error
  53813  */
  53814 char **iListDelElemS(char ***list, int64_t index) {
  53815   char **l = NULL;
  53816   int64_t len;
  53817 
  53818   // sanity checks
  53819   if (!list || !*list) {
  53820     return(NULL);
  53821   }
  53822 
  53823   len = (int64_t)listLengthS(*list);
  53824 
  53825   if (len == 0) {
  53826     return(NULL);
  53827   }
  53828 
  53829   if (index >= len) {
  53830     return(NULL);
  53831   }
  53832   if (index < -len) {
  53833     return(NULL);
  53834   }
  53835   if (index < 0) {
  53836     index = len + index;
  53837   }
  53838 
  53839   l = MALLOC((size_t)(len-1+1) * sizeof(char *));
  53840   if (!l) {
  53841     return(NULL);
  53842   }
  53843   for (int64_t i=0;i < index;i++) {
  53844     l[i] = *((*list)+i);
  53845   }
  53846   free(*((*list)+index));
  53847   for (int64_t i=index ; i < len-1 ; i++) {
  53848     l[i] = *((*list)+1+i);
  53849   }
  53850   l[len-1] = NULL;
  53851 
  53852   free(*list);
  53853   *list = l;
  53854   return(l);
  53855 }
  53856 
  53857 
  53858 /**
  53859  * list Remove Element String
  53860  * return list without the element at index
  53861  * the element is removed without being freed
  53862  * negative indexes are allowed
  53863  *
  53864  * \param
  53865  *   list (this parameter is reallocated)
  53866  * \param
  53867  *   index must be in the list
  53868  * \return
  53869  *   new list without the element at index (you must free the pointer with listFreeS)
  53870  *   NULL when list is empty
  53871  *   NULL when list is NULL
  53872  *   NULL error
  53873  */
  53874 char **iListRemoveElemS(char ***list, int64_t index) {
  53875   char **l = NULL;
  53876   int64_t len;
  53877 
  53878   // sanity checks
  53879   if (!list || !*list) {
  53880     return(NULL);
  53881   }
  53882 
  53883   len = (int64_t)listLengthS(*list);
  53884 
  53885   if (len == 0) {
  53886     return(NULL);
  53887   }
  53888 
  53889   if (index >= len) {
  53890     return(NULL);
  53891   }
  53892   if (index < -len) {
  53893     return(NULL);
  53894   }
  53895   if (index < 0) {
  53896     index = len + index;
  53897   }
  53898 
  53899   l = MALLOC((size_t)(len-1+1) * sizeof(char *));
  53900   if (!l) {
  53901     return(NULL);
  53902   }
  53903   for (int64_t i=0;i < index;i++) {
  53904     l[i] = *((*list)+i);
  53905   }
  53906   for (int64_t i=index ; i < len-1 ; i++) {
  53907     l[i] = *((*list)+1+i);
  53908   }
  53909   l[len-1] = NULL;
  53910 
  53911   free(*list);
  53912   *list = l;
  53913   return(l);
  53914 }
  53915 
  53916 
  53917 /**
  53918  * print list elements
  53919  * to stdout
  53920  *
  53921  * when list is NULL, returns directly without doing anything
  53922  *
  53923  * \param
  53924  *   list
  53925  * \return
  53926  *   nothing
  53927  *   1  success
  53928  *   0 error
  53929  */
  53930 int listPrintS(char **list) {
  53931 
  53932   if (!list) {
  53933     return(0);
  53934   }
  53935   forEachCharP(list, e) {
  53936     printf("%s\n", *e);
  53937   }
  53938   return(1);
  53939 }
  53940 
  53941 int listPrintCS(const char **list) {
  53942 
  53943   if (!list) {
  53944     return(0);
  53945   }
  53946   forEachCCharP(list, e) {
  53947     printf("%s\n", *e);
  53948   }
  53949   return(1);
  53950 }
  53951 
  53952 /**
  53953  * list Sort String Compare function
  53954  *
  53955  * in:
  53956  *   a
  53957  *   b
  53958  * out:
  53959  *   test result
  53960  */
  53961 internal int listSortSCmp(const void * a, const void * b) {
  53962 
  53963   // sanity checks
  53964   if (!a && !b) {
  53965     return(0);
  53966   }
  53967   if (!a && b) {
  53968     return(-1);
  53969   }
  53970   if (a && !b) {
  53971     return(1);
  53972   }
  53973   return(strcmp(*(char *const*)a,*(char *const*)b));
  53974 }
  53975 
  53976 /**
  53977  * list Sort String
  53978  * duplicate list and sort
  53979  *
  53980  * \param
  53981  *   list
  53982  * \return
  53983  *   new sorted list (you must free the pointer with listFreeS)
  53984  *   empty list when list is empty
  53985  *   NULL when list is NULL
  53986  */
  53987 char **listSortS(char **list) {
  53988   size_t len;
  53989   char **l = NULL;
  53990 
  53991   // sanity checks
  53992   if (!list) {
  53993     return(NULL);
  53994   }
  53995   len = listLengthS(list);
  53996   // duplicate
  53997   l = listDupS(list);
  53998   if (!len) {
  53999     return(l);
  54000   }
  54001   // sort
  54002   qsort(l, len, sizeof(char *), listSortSCmp);
  54003   return(l);
  54004 }
  54005 
  54006 /**
  54007  * list Sort String
  54008  *
  54009  * \param
  54010  *   list
  54011  * \return
  54012  *   sorted list
  54013  *   empty list when list is empty
  54014  *   unchanged list when list is NULL
  54015  *   NULL error
  54016  */
  54017 char **iListSortS(char ***list) {
  54018   size_t len;
  54019 
  54020   // sanity checks
  54021   if (!list || !*list) {
  54022     return(NULL);
  54023   }
  54024   len = listLengthS(*list);
  54025   if (!len) {
  54026     return(NULL);
  54027   }
  54028   // sort
  54029   qsort(*list, len, sizeof(char *), listSortSCmp);
  54030   return(*list);
  54031 }
  54032 
  54033 /**
  54034  * list Sort String
  54035  * duplicate list and sort
  54036  *
  54037  * \param
  54038  *   list
  54039  *   compareFunction
  54040  * \return
  54041  *   new sorted list (you must free the pointer with listFreeS)
  54042  *   empty list when list is empty
  54043  *   NULL when list is NULL
  54044  */
  54045 char **listSortFS(char **list, shCmpt compareFunction) {
  54046   size_t len;
  54047   char **l = NULL;
  54048 
  54049   // sanity checks
  54050   if (!list || !compareFunction) {
  54051     return(NULL);
  54052   }
  54053   len = listLengthS(list);
  54054   // duplicate
  54055   l = listDupS(list);
  54056   if (!len) {
  54057     return(l);
  54058   }
  54059   // sort
  54060   qsort(l, len, sizeof(char *), compareFunction);
  54061   return(l);
  54062 }
  54063 
  54064 /**
  54065  * list Sort String
  54066  *
  54067  * \param
  54068  *   list
  54069  *   compareFunction
  54070  * \return
  54071  *   sorted list
  54072  *   empty list when list is empty
  54073  *   unchanged list when list is NULL
  54074  *   NULL error
  54075  */
  54076 char **iListSortFS(char ***list, shCmpt compareFunction) {
  54077   size_t len;
  54078 
  54079   // sanity checks
  54080   if (!list || !*list) {
  54081     return(NULL);
  54082   }
  54083   len = listLengthS(*list);
  54084   if (!len) {
  54085     return(NULL);
  54086   }
  54087   // sort
  54088   qsort(*list, len, sizeof(char *), compareFunction);
  54089   return(*list);
  54090 }
  54091 
  54092 
  54093 /**
  54094  * ignore case list Sort String Compare function
  54095  *
  54096  * in:
  54097  *   a
  54098  *   b
  54099  * out:
  54100  *   test result
  54101  */
  54102 internal int icListSortSCmp(const void * a, const void * b) {
  54103 
  54104   // sanity checks
  54105   if (!a && !b) {
  54106     return(0);
  54107   }
  54108   if (!a && b) {
  54109     return(-1);
  54110   }
  54111   if (a && !b) {
  54112     return(1);
  54113   }
  54114   return(strcasecmp(*(char *const*)a,*(char *const*)b));
  54115 }
  54116 
  54117 /**
  54118  * ignore case list Sort String
  54119  * duplicate list and sort
  54120  *
  54121  * \param
  54122  *   list
  54123  * \return
  54124  *   new sorted list (you must free the pointer with listFreeS)
  54125  *   empty list when list is empty
  54126  *   NULL when list is NULL
  54127  */
  54128 char **icListSortS(char **list) {
  54129   size_t len;
  54130   char **l = NULL;
  54131 
  54132   // sanity checks
  54133   if (!list) {
  54134     return(NULL);
  54135   }
  54136   len = listLengthS(list);
  54137   // duplicate
  54138   l = listDupS(list);
  54139   if (!len) {
  54140     return(l);
  54141   }
  54142   // sort
  54143   qsort(l, len, sizeof(char *), icListSortSCmp);
  54144   return(l);
  54145 }
  54146 
  54147 /**
  54148  * ignore case list Sort String
  54149  *
  54150  * \param
  54151  *   list
  54152  * \return
  54153  *   sorted list
  54154  *   empty list when list is empty
  54155  *   unchanged list when list is NULL
  54156  *   NULL error
  54157  */
  54158 char **iicListSortS(char ***list) {
  54159   size_t len;
  54160 
  54161   // sanity checks
  54162   if (!list || !*list) {
  54163     return(NULL);
  54164   }
  54165   len = listLengthS(*list);
  54166   if (!len) {
  54167     return(NULL);
  54168   }
  54169   // sort
  54170   qsort(*list, len, sizeof(char *), icListSortSCmp);
  54171   return(*list);
  54172 }
  54173 
  54174 
  54175 /**
  54176  * return text from filePath in a list
  54177  * new line characters are removed
  54178  *
  54179  * \param
  54180  *   filePath: file path
  54181  * \return
  54182  *   lines in list (you must free the pointer with listFreeS)
  54183  *   empty list when the file is empty
  54184  *   NULL on failure
  54185  */
  54186 /* this readText has the same performance as the original and takes twice the amount of RAM */
  54187 /* most of the cycles are spent in listLengthS */
  54188 /* char **readText(const char *filePath) */
  54189 /*   size_t len */
  54190 /*   char *buf */
  54191 /*   char **list */
  54192 /*  */
  54193 /*   // sanity checks */
  54194 /*   if !filePath */
  54195 /*     return NULL */
  54196 /*  */
  54197 /*   buf = readFileToS(filePath) */
  54198 /*   if !buf */
  54199 /*     return NULL */
  54200 /*   len = fileSize(filePath) */
  54201 /*   if len = 0 */
  54202 /*     free buf */
  54203 /*     return listEmptySF() */
  54204 /*   if buf[len-1] = '\n' */
  54205 /*     // remove last return char to avoid empty line in split */
  54206 /*     buf[len-1] = 0 */
  54207 /*   list = split(buf, "\n") */
  54208 /*   free buf */
  54209 /*   return list */
  54210 
  54211 char **readText(const char *filePath) {
  54212   FILE *fp = NULL;
  54213   size_t len;
  54214   char* line = NULL;
  54215   ssize_t read;
  54216   char **list = NULL;
  54217 
  54218   // sanity checks
  54219   if (!filePath || isBlankS(filePath)) {
  54220     return(NULL);
  54221   }
  54222   fp = fopen(filePath, "r");
  54223   if (!fp) {
  54224     pFuncError
  54225     shEPrintfS("The path was: \"%s\"\n", filePath);
  54226     return(NULL);
  54227   }
  54228   // read all lines
  54229   read = getline(&line, &len, fp);
  54230   size_t index = 0;
  54231   size_t alloc = sizeof(*list);
  54232   list         = MALLOC(alloc);
  54233   if (!list) {
  54234     goto end;
  54235   }
  54236   *list        = NULL;
  54237   while (read != -1) {
  54238     {
  54239         char* pos = NULL;
  54240         pos = strchr(line, '\n');
  54241         if (pos != NULL)
  54242             *pos = '\0';
  54243     }
  54244     size_t newsize = makeRoom((index+1) * sizeof(*list), alloc, sizeof(*list));
  54245     if (newsize != alloc) {
  54246       char **tmp = REALLOC(list, newsize);
  54247       if (!tmp) {
  54248         listFreeS(list);
  54249         list = NULL;
  54250         goto end;
  54251       }
  54252       alloc = newsize;
  54253       list  = tmp;
  54254     }
  54255     list[index]   = strdup(line);
  54256     list[++index] = NULL;
  54257     read = getline(&line, &len, fp);
  54258   }
  54259   end:
  54260   fclose(fp);
  54261   free(line);
  54262   return(list);
  54263 }
  54264 
  54265 /**
  54266  * return text from stream fp in a list
  54267  * new line characters are removed
  54268  *
  54269  * \param
  54270  *   fp: file stream
  54271  * \return
  54272  *   lines in list (you must free the pointer with listFreeS)
  54273  *   empty list when there is no data in the stream
  54274  *   NULL on failure
  54275  */
  54276 char **readStream(FILE *fp) {
  54277   size_t len;
  54278   char* line = NULL;
  54279   ssize_t read;
  54280   char **list = NULL;
  54281 
  54282   // sanity checks
  54283   if (!fp) {
  54284     return(NULL);
  54285   }
  54286   // read all lines
  54287   read = getline(&line, &len, (FILE *) fp);
  54288   while (read != -1) {
  54289     {
  54290         char* pos = NULL;
  54291         pos = strchr(line, '\n');
  54292         if (pos != NULL)
  54293             *pos = '\0';
  54294     }
  54295     pErrorNULL(iListPushS(&list, line));
  54296     line = NULL;
  54297     len  = 0;
  54298     read = getline(&line, &len, (FILE *) fp);
  54299   }
  54300   free(line);
  54301   if (!list) {
  54302     // nothing was read
  54303     listEmptyS(list);
  54304   }
  54305   return(list);
  54306 }
  54307 
  54308 /**
  54309  * write list to filePath
  54310  *
  54311  * \param
  54312  *   filePath
  54313  * \param
  54314  *   list
  54315  * \return
  54316  *   true success
  54317  *   false failed, filePath or list are NULL
  54318  */
  54319 bool writeText(const char *filePath, char **list) {
  54320   FILE *fp = NULL;
  54321 
  54322   // sanity checks
  54323   if (!filePath || isBlankS(filePath)) {
  54324     return(false);
  54325   }
  54326 
  54327   fp = fopen(filePath, "w");
  54328   if (!fp) {
  54329     pFuncError
  54330     shEPrintfS("The path was: \"%s\"\n", filePath);
  54331     return(false);
  54332   }
  54333   if (!list) {
  54334     fclose(fp);
  54335     return(false);
  54336   }
  54337   forEachCharP(list, e) {
  54338     // add new line
  54339     fprintf(fp, "%s\n", *e);
  54340   }
  54341   fclose(fp);
  54342   return(true);
  54343 }
  54344 
  54345 /**
  54346  * write const list to filePath
  54347  *
  54348  * \param
  54349  *   filePath
  54350  * \param
  54351  *   list
  54352  * \return
  54353  *   true success
  54354  *   false failed, filePath or list are NULL
  54355  */
  54356 bool writeCText(const char *filePath, const char **list) {
  54357   FILE *fp = NULL;
  54358 
  54359   // sanity checks
  54360   if (!filePath || isBlankS(filePath)) {
  54361     return(false);
  54362   }
  54363 
  54364   fp = fopen(filePath, "w");
  54365   if (!fp) {
  54366     pFuncError
  54367     shEPrintfS("The path was: \"%s\"\n", filePath);
  54368     return(false);
  54369   }
  54370   if (!list) {
  54371     fclose(fp);
  54372     return(false);
  54373   }
  54374   forEachCCharP(list, e) {
  54375     // add new line
  54376     fprintf(fp, "%s\n", *e);
  54377   }
  54378   fclose(fp);
  54379   return(true);
  54380 }
  54381 
  54382 /**
  54383  * write list to stream
  54384  *
  54385  * \param
  54386  *   fp: file stream
  54387  * \param
  54388  *   list
  54389  * \return
  54390  *   true success
  54391  *   false failed, fp or list are NULL
  54392  */
  54393 bool writeStream(FILE *fp, char **list) {
  54394 
  54395   // sanity checks
  54396   if (!fp || !list) {
  54397     return(false);
  54398   }
  54399   forEachCharP(list, e) {
  54400     // add new line
  54401     fprintf((FILE*)fp, "%s\n", *e);
  54402   }
  54403   return(true);
  54404 }
  54405 
  54406 /**
  54407  * write const list to stream
  54408  *
  54409  * \param
  54410  *   fp: file stream
  54411  * \param
  54412  *   list
  54413  * \return
  54414  *   true success
  54415  *   false failed, fp or list are NULL
  54416  */
  54417 bool writeCStream(FILE *fp, const char **list) {
  54418 
  54419   // sanity checks
  54420   if (!fp || !list) {
  54421     return(false);
  54422   }
  54423   forEachCCharP(list, e) {
  54424     // add new line
  54425     fprintf((FILE*)fp, "%s\n", *e);
  54426   }
  54427   return(true);
  54428 }
  54429 
  54430 /**
  54431  * append list to filePath
  54432  *
  54433  * \param
  54434  *   filePath
  54435  * \param
  54436  *   list
  54437  * \return
  54438  *   true success
  54439  *   false failed, filePath or list are NULL
  54440  */
  54441 bool appendText(const char *filePath, char **list) {
  54442   FILE *fp = NULL;
  54443 
  54444   // sanity checks
  54445   if (!filePath || isBlankS(filePath)) {
  54446     return(false);
  54447   }
  54448 
  54449   fp = fopen(filePath, "a");
  54450   if (!fp) {
  54451     pFuncError
  54452     shEPrintfS("The path was: \"%s\"\n", filePath);
  54453     return(false);
  54454   }
  54455   if (!list) {
  54456     fclose(fp);
  54457     return(false);
  54458   }
  54459   forEachCharP(list, e) {
  54460     // add new line
  54461     fprintf(fp, "%s\n", *e);
  54462   }
  54463   fclose(fp);
  54464   return(true);
  54465 }
  54466 
  54467 /**
  54468  * append const list to filePath
  54469  *
  54470  * \param
  54471  *   filePath
  54472  * \param
  54473  *   list
  54474  * \return
  54475  *   true success
  54476  *   false failed, filePath or list are NULL
  54477  */
  54478 bool appendCText(const char *filePath, const char **list) {
  54479   FILE *fp = NULL;
  54480 
  54481   // sanity checks
  54482   if (!filePath || isBlankS(filePath)) {
  54483     return(false);
  54484   }
  54485 
  54486   fp = fopen(filePath, "a");
  54487   if (!fp) {
  54488     pFuncError
  54489     shEPrintfS("The path was: \"%s\"\n", filePath);
  54490     return(false);
  54491   }
  54492   if (!list) {
  54493     fclose(fp);
  54494     return(false);
  54495   }
  54496   forEachCCharP(list, e) {
  54497     // add new line
  54498     fprintf(fp, "%s\n", *e);
  54499   }
  54500   fclose(fp);
  54501   return(true);
  54502 }
  54503 
  54504 /**
  54505  * execute command
  54506  * return stdout from cmd
  54507  *
  54508  * \param
  54509  *   cmd: command
  54510  * \return
  54511  *   stdout from command in a list (you must free the pointer with listFreeS)
  54512  *   empty list when command didnt produce any output
  54513  *   NULL when cmd is NULL
  54514  */
  54515 char **execOut(const char *cmd) {
  54516   FILE* fp = NULL;
  54517   char **list = NULL;
  54518 
  54519   // sanity checks
  54520   if (!cmd) {
  54521     return(NULL);
  54522   }
  54523 
  54524   fp = popen(cmd, "r");
  54525   if (!fp) {
  54526     pFuncError
  54527     shEPrintfS("The command was: \"%s\"\n", cmd);
  54528     return(NULL);//LCOV_EXCL_LINE
  54529   }
  54530 
  54531   list = readStream(fp);
  54532 
  54533   pclose(fp);
  54534   return(list);
  54535 }
  54536 
  54537 /**
  54538  * execute system command with formatting
  54539  *
  54540  * \param
  54541  *  formatting
  54542  * \return
  54543  *   stdout from command in a list (you must free the pointer with listFreeS)
  54544  *   empty list when command didnt produce any output
  54545  *   NULL when cmd is NULL
  54546  */
  54547 char **systemOutf(const char *fmt, ...) {
  54548   char *cmd = NULL;
  54549   va_list pl;
  54550 
  54551   if (!fmt) {
  54552     return(NULL);
  54553   }
  54554   va_start(pl, fmt);
  54555   if (vasprintf(&cmd, fmt, pl) == -1) {
  54556     return(NULL);
  54557   }
  54558   va_end(pl);
  54559 
  54560   char **r = execOut(cmd);
  54561   free(cmd);
  54562   return(r);
  54563 }
  54564 
  54565 /**
  54566  * execute system command with formatting
  54567  *
  54568  * \param
  54569  *  formatting
  54570  * \return
  54571  *  system return code
  54572  */
  54573 int systemf(const char *fmt, ...) {
  54574   char *cmd = NULL;
  54575   va_list pl;
  54576 
  54577   if (!fmt) {
  54578     return(-1);
  54579   }
  54580   va_start(pl, fmt);
  54581   if (vasprintf(&cmd, fmt, pl) == -1) {
  54582     va_end(pl);
  54583     return(-1);
  54584   }
  54585   va_end(pl);
  54586 
  54587   return(systemNFree(cmd));
  54588 }
  54589 
  54590 /**
  54591  * run command in default shell
  54592  *
  54593  * Exit value equals to 127 is considered an error
  54594  * because if a shell could not be executed in the child process, then
  54595  * the return value from system() is 127 (man 3 system).
  54596  *
  54597  * \param
  54598  *  cmd command string
  54599  * \return
  54600  *  command exit code
  54601  *  -1 when cmd is NULL or system exited with errors
  54602  */
  54603 int commandF(const char *cmd, int line, const char *thisFunc, const char *thisFileName) {
  54604 
  54605   if (!cmd) {
  54606     shEPrintfS("\nSystem Error at %d, %s, %s. The command was: NULL\n", line, thisFunc, thisFileName);
  54607     return(-1);
  54608   }
  54609 
  54610   int r = system(cmd);
  54611 
  54612   if (!WIFEXITED(r)) {
  54613     shEPrintfS("\nSystem Error at %d, %s, %s. The command was: \"%s\"\n", line, thisFunc, thisFileName, cmd);
  54614     return(-1);
  54615   }
  54616 
  54617   r = WEXITSTATUS(r);;
  54618 
  54619   if (r == 127) {
  54620     shEPrintfS("\nSystem Error at %d, %s, %s. The command was: \"%s\"\n", line, thisFunc, thisFileName, cmd);
  54621     return(-1);
  54622   }
  54623 
  54624   return(r);
  54625 }
  54626 
  54627 /**
  54628  * run command with formatting in default shell
  54629  *
  54630  * Exit value equals to 127 is considered an error
  54631  * because if a shell could not be executed in the child process, then
  54632  * the return value from system() is 127 (man 3 system).
  54633  *
  54634  * \param
  54635  *  formatting
  54636  * \return
  54637  *  command exit code
  54638  *  -1 when cmd is NULL or system exited with errors
  54639  */
  54640 int commandfF(int line, const char *thisFunc, const char *thisFileName, const char *fmt, ...) {
  54641   char *cmd = NULL;
  54642   va_list pl;
  54643 
  54644   if (!fmt) {
  54645     return(-1);
  54646   }
  54647   va_start(pl, fmt);
  54648   if (vasprintf(&cmd, fmt, pl) == -1) {
  54649     va_end(pl);
  54650     return(-1);
  54651   }
  54652   va_end(pl);
  54653 
  54654   return(commandNFreeF(cmd, line, thisFunc, thisFileName));
  54655 }
  54656 
  54657 /**
  54658  * run command in default shell and free the cmd parameter
  54659  *
  54660  * Exit value equals to 127 is considered an error
  54661  * because if a shell could not be executed in the child process, then
  54662  * the return value from system() is 127 (man 3 system).
  54663  *
  54664  * \param
  54665  *  cmd command string
  54666  * \return
  54667  *  command exit code
  54668  *  -1 when cmd is NULL or system exited with errors
  54669  */
  54670 int commandNFreeF(char *cmd, int line, const char *thisFunc, const char *thisFileName) {
  54671   int r;
  54672 
  54673   r = commandF(cmd, line, thisFunc, thisFileName);
  54674   free(cmd);
  54675   return(r);
  54676 }
  54677 
  54678 /**
  54679  * list Equal String
  54680  * compare each element of list1 and list2
  54681  *
  54682  * \param
  54683  *   2 lists
  54684  * \return
  54685  *   true the lists have identical elements
  54686  *   false they differ
  54687  */
  54688 bool listEqS(char **list1, char **list2) {
  54689 
  54690   // sanity checks
  54691   if (!list1 || !list2) {
  54692     return(false);
  54693   }
  54694   if (listLengthS(list1) != listLengthS(list2)) {
  54695     return(false);
  54696   }
  54697 
  54698   // compare elements
  54699   enumerateCharP(list1, e, i) {
  54700     if (!strEq(*e, list2[i])) {
  54701       return(false);
  54702   }
  54703     }
  54704 
  54705   return(true);
  54706 }
  54707 
  54708 /**
  54709  * const(list2) list Equal String
  54710  * compare each element of list1 and list2
  54711  *
  54712  * \param
  54713  *   2 lists
  54714  * \return
  54715  *   true the lists have identical elements
  54716  *   false they differ
  54717  */
  54718 bool listEqCS(char **list1, const char **list2) {
  54719 
  54720   // sanity checks
  54721   if (!list1 || !list2) {
  54722     return(false);
  54723   }
  54724   if (listLengthS(list1) != listLengthCS(list2)) {
  54725     return(false);
  54726   }
  54727 
  54728   // compare elements
  54729   enumerateCharP(list1, e, i) {
  54730     if (!strEq(*e, list2[i])) {
  54731       return(false);
  54732   }
  54733     }
  54734 
  54735   return(true);
  54736 }
  54737 
  54738 /**
  54739  * const(list1) list Equal String
  54740  * compare each element of list1 and list2
  54741  *
  54742  * \param
  54743  *   2 lists
  54744  * \return
  54745  *   true the lists have identical elements
  54746  *   false they differ
  54747  */
  54748 bool listEqC1S(const char **list1, char **list2) {
  54749 
  54750   // sanity checks
  54751   if (!list1 || !list2) {
  54752     return(false);
  54753   }
  54754   if (listLengthCS(list1) != listLengthS(list2)) {
  54755     return(false);
  54756   }
  54757 
  54758   // compare elements
  54759   enumerateCCharP(list1, e, i) {
  54760     if (!strEq(*e, list2[i])) {
  54761       return(false);
  54762   }
  54763     }
  54764 
  54765   return(true);
  54766 }
  54767 
  54768 /**
  54769  * const(list1 and 2) list Equal String
  54770  * compare each element of list1 and list2
  54771  *
  54772  * \param
  54773  *   2 lists
  54774  * \return
  54775  *   true the lists have identical elements
  54776  *   false they differ
  54777  */
  54778 bool listEqCCS(const char **list1, const char **list2) {
  54779 
  54780   // sanity checks
  54781   if (!list1 || !list2) {
  54782     return(false);
  54783   }
  54784   if (listLengthCS(list1) != listLengthCS(list2)) {
  54785     return(false);
  54786   }
  54787 
  54788   // compare elements
  54789   enumerateCCharP(list1, e, i) {
  54790     if (!strEq(*e, list2[i])) {
  54791       return(false);
  54792   }
  54793     }
  54794 
  54795   return(true);
  54796 }
  54797 
  54798 /**
  54799  * return true when list has string
  54800  *
  54801  * \param
  54802  *   list
  54803  * \param
  54804  *   string
  54805  * \return
  54806  *   true when list has string
  54807  *   false when the string is not found
  54808  *   false when list or string are NULL
  54809  */
  54810 bool listHasS(char **list, const char *string) {
  54811 
  54812   if (!list || !string) {
  54813     return(false);
  54814   }
  54815   if (listIndexOfS(list, string) == -1) {
  54816     return(false);
  54817   }
  54818   return(true);
  54819 }
  54820 
  54821 /**
  54822  * return true when const list has string
  54823  *
  54824  * \param
  54825  *   list
  54826  * \param
  54827  *   string
  54828  * \return
  54829  *   true when list has string
  54830  *   false when the string is not found
  54831  *   false when list or string are NULL
  54832  */
  54833 bool listHasCS(const char **list, const char *string) {
  54834 
  54835   if (!list || !string) {
  54836     return(false);
  54837   }
  54838   if (listIndexOfCS(list, string) == -1) {
  54839     return(false);
  54840   }
  54841   return(true);
  54842 }
  54843 
  54844 bool listHasCharS(char **list, char c) {
  54845 
  54846   charToS(s, c);
  54847   return(listHasS(list, s));
  54848 }
  54849 
  54850 bool listHasCharCS(const char **list, char c) {
  54851 
  54852   charToS(s, c);
  54853   return(listHasCS(list, s));
  54854 }
  54855 
  54856 /**
  54857  * return index of string in list
  54858  *
  54859  * \param
  54860  *   list
  54861  * \param
  54862  *   string
  54863  * \return
  54864  *   index
  54865  *   -1 when the string is not found
  54866  *   -1 when list or string are NULL
  54867  */
  54868 ssize_t listIndexOfS(char **list, const char *string) {
  54869   bool found = false;;
  54870 
  54871   // sanity checks
  54872   if (!list || !string) {
  54873     return(-1);
  54874   }
  54875   // search string in elements
  54876   enumerateCharP(list, e, i) {
  54877     if (strEq(*e, string)) {
  54878       found = true;
  54879       break;
  54880   }
  54881     }
  54882   if (found) {
  54883      return((ssize_t)i);
  54884   }
  54885   else {
  54886      return(-1);
  54887 }
  54888   }
  54889 
  54890 /**
  54891  * return index of string in const list
  54892  *
  54893  * \param
  54894  *   list
  54895  * \param
  54896  *   string
  54897  * \return
  54898  *   index
  54899  *   -1 when the string is not found
  54900  *   -1 when list or string are NULL
  54901  */
  54902 ssize_t listIndexOfCS(const char **list, const char *string) {
  54903   bool found = false;;
  54904 
  54905   // sanity checks
  54906   if (!list || !string) {
  54907     return(-1);
  54908   }
  54909   // search string in elements
  54910   enumerateCCharP(list, e, i) {
  54911     if (strEq(*e, string)) {
  54912       found = true;
  54913       break;
  54914   }
  54915     }
  54916   if (found) {
  54917      return((ssize_t)i);
  54918   }
  54919   else {
  54920      return(-1);
  54921 }
  54922   }
  54923 
  54924 ssize_t listIndexOfCharS(char **list, char c) {
  54925 
  54926   charToS(s, c);
  54927   return(listIndexOfS(list, s));
  54928 }
  54929 
  54930 ssize_t listIndexOfCharCS(const char **list, char c) {
  54931 
  54932   charToS(s, c);
  54933   return(listIndexOfCS(list, s));
  54934 }
  54935 
  54936 /**
  54937  * list binary search string
  54938  *
  54939  * efficiently finds the index of string in list
  54940  * the list has to be sorted with for example listSortS
  54941  *
  54942  * \param
  54943  *   list
  54944  * \param
  54945  *   string to search
  54946  * \return
  54947  *   index of string
  54948  *   -1 string not found or NULL input pointers
  54949     */
  54950 ssize_t listBinarySearchS(char **list, const char *string) {
  54951   ssize_t first = 0, middle, last;;
  54952 
  54953   if (!list || !string) {
  54954     return(-1);
  54955   }
  54956 
  54957   last   = (ssize_t)(listLengthS(list) - 1);
  54958   while (first <= last) {
  54959     middle = (first+last)/2;
  54960     if (strcmp(list[middle], string) < 0) {
  54961       first = middle + 1;
  54962     }
  54963     else if (strcmp(list[middle], string) == 0) {
  54964       return(middle);
  54965     }
  54966     else {
  54967       last = middle -1;
  54968   }
  54969     }
  54970   return(-1);
  54971 }
  54972 
  54973 ssize_t listBinarySearchCharS(char **list, char c) {
  54974 
  54975   charToS(s, c);
  54976   return(listBinarySearchS(list, s));
  54977 }
  54978 
  54979 /**
  54980  * Uniquify elements of list
  54981  * duplicate list
  54982  * each elements are unique in the new list
  54983  *
  54984  * \param
  54985  *   list
  54986  * \return
  54987  *   new list with unique elements (you must free the pointer with listFreeS)
  54988  *   empty list when list is empty
  54989  *   NULL when list is NULL
  54990  */
  54991 char **listUniqS(char **list) {
  54992   char **r = NULL;
  54993 
  54994   // sanity checks
  54995   if (!list) {
  54996     return(NULL);
  54997   }
  54998 
  54999   size_t len = listLengthS(list);
  55000 
  55001   if (!len) {
  55002     listEmptyS(r);
  55003     return(r);
  55004   }
  55005   pErrorNULL(listPushS(&r, list[0]));
  55006   // one element list
  55007   if (len == 1) {
  55008     return(r);
  55009   }
  55010   // push element to new list if it is not already in new list
  55011   forEachCharP(list, e) {
  55012     if (listIndexOfS(r, *e) == -1) {
  55013       pErrorNULL(listPushS(&r, *e));
  55014   }
  55015     }
  55016   return(r);
  55017 }
  55018 
  55019 /**
  55020  * Uniquify elements of list
  55021  * each elements are unique in the list
  55022  *
  55023  * \param
  55024  *   list (this parameter is reallocated)
  55025  * \return
  55026  *   list with unique elements (you must free the pointer with listFreeS)
  55027  *   empty list when list is empty
  55028  *   unchanged list when list is NULL
  55029  *   NULL error
  55030  */
  55031 char **iListUniqS(char ***list) {
  55032   char **r = NULL;
  55033 
  55034   // sanity checks
  55035   if (!list || !*list) {
  55036     return(NULL);
  55037   }
  55038 
  55039   size_t len = listLengthS(*list);
  55040 
  55041   if (!len) {
  55042     listEmptyS(r);
  55043   }
  55044   else if (len == 1) {
  55045     // one element list
  55046     pErrorNULL(iListPushS(&r, (*list)[0]));
  55047   }
  55048   else {
  55049     // push element to new list if it is not already in new list
  55050     forEachCharP(*list, e) {
  55051       if (listIndexOfS(r, *e) == -1) {
  55052         pErrorNULL(iListPushS(&r, *e));
  55053       }
  55054       else {
  55055         free(*e);
  55056   }
  55057     }
  55058       }
  55059 
  55060   free(*list);
  55061   *list = r;
  55062   return(r);
  55063 }
  55064 
  55065 /**
  55066  * ignore case list Equal String
  55067  * compare each element of list1 and list2
  55068  *
  55069  * \param
  55070  *   2 lists
  55071  * \return
  55072  *   true the lists have identical elements
  55073  *   false they differ
  55074  */
  55075 bool icListEqS(char **list1, char **list2) {
  55076 
  55077   // sanity checks
  55078   if (!list1 || !list2) {
  55079     return(false);
  55080   }
  55081   if (listLengthS(list1) != listLengthS(list2)) {
  55082     return(false);
  55083   }
  55084 
  55085   // compare elements
  55086   enumerateCharP(list1, e, i) {
  55087     if (!icEqS(*e, list2[i])) {
  55088       return(false);
  55089   }
  55090     }
  55091 
  55092   return(true);
  55093 }
  55094 
  55095 /**
  55096  * ignore case const(list2) list Equal String
  55097  * compare each element of list1 and list2
  55098  *
  55099  * \param
  55100  *   2 lists
  55101  * \return
  55102  *   true the lists have identical elements
  55103  *   false they differ
  55104  */
  55105 bool icListEqCS(char **list1, const char **list2) {
  55106 
  55107   // sanity checks
  55108   if (!list1 || !list2) {
  55109     return(false);
  55110   }
  55111   if (listLengthS(list1) != listLengthCS(list2)) {
  55112     return(false);
  55113   }
  55114 
  55115   // compare elements
  55116   enumerateCharP(list1, e, i) {
  55117     if (!icEqS(*e, list2[i])) {
  55118       return(false);
  55119   }
  55120     }
  55121 
  55122   return(true);
  55123 }
  55124 
  55125 /**
  55126  * ignore case const(list1) list Equal String
  55127  * compare each element of list1 and list2
  55128  *
  55129  * \param
  55130  *   2 lists
  55131  * \return
  55132  *   true the lists have identical elements
  55133  *   false they differ
  55134  */
  55135 bool icListEqC1S(const char **list1, char **list2) {
  55136 
  55137   // sanity checks
  55138   if (!list1 || !list2) {
  55139     return(false);
  55140   }
  55141   if (listLengthCS(list1) != listLengthS(list2)) {
  55142     return(false);
  55143   }
  55144 
  55145   // compare elements
  55146   enumerateCCharP(list1, e, i) {
  55147     if (!icEqS(*e, list2[i])) {
  55148       return(false);
  55149   }
  55150     }
  55151 
  55152   return(true);
  55153 }
  55154 
  55155 /**
  55156  * ignore case const(list1 and 2) list Equal String
  55157  * compare each element of list1 and list2
  55158  *
  55159  * \param
  55160  *   2 lists
  55161  * \return
  55162  *   true the lists have identical elements
  55163  *   false they differ
  55164  */
  55165 bool icListEqCCS(const char **list1, const char **list2) {
  55166 
  55167   // sanity checks
  55168   if (!list1 || !list2) {
  55169     return(false);
  55170   }
  55171   if (listLengthCS(list1) != listLengthCS(list2)) {
  55172     return(false);
  55173   }
  55174 
  55175   // compare elements
  55176   enumerateCCharP(list1, e, i) {
  55177     if (!icEqS(*e, list2[i])) {
  55178       return(false);
  55179   }
  55180     }
  55181 
  55182   return(true);
  55183 }
  55184 
  55185 /**
  55186  * ignore case and return true when list has string
  55187  *
  55188  * \param
  55189  *   list
  55190  * \param
  55191  *   string
  55192  * \return
  55193  *   true when list has string
  55194  *   false when the string is not found
  55195  *   false when list or string are NULL
  55196  */
  55197 bool icListHasS(char **list, const char *string) {
  55198 
  55199   if (!list || !string) {
  55200     return(false);
  55201   }
  55202   if (icListIndexOfS(list, string) == -1) {
  55203     return(false);
  55204   }
  55205   return(true);
  55206 }
  55207 
  55208 bool icListHasCharS(char **list, char c) {
  55209 
  55210   charToS(s, c);
  55211   return(icListHasS(list, s));
  55212 }
  55213 
  55214 /**
  55215  * ignore case and return true when const list has string
  55216  *
  55217  * \param
  55218  *   list
  55219  * \param
  55220  *   string
  55221  * \return
  55222  *   true when list has string
  55223  *   false when the string is not found
  55224  *   false when list or string are NULL
  55225  */
  55226 bool icListHasCS(const char **list, const char *string) {
  55227 
  55228   if (!list || !string) {
  55229     return(false);
  55230   }
  55231   if (icListIndexOfCS(list, string) == -1) {
  55232     return(false);
  55233   }
  55234   return(true);
  55235 }
  55236 
  55237 bool icListHasCharCS(const char **list, char c) {
  55238 
  55239   charToS(s, c);
  55240   return(icListHasCS(list, s));
  55241 }
  55242 
  55243 /**
  55244  * ignore case and return index of string in list
  55245  *
  55246  * \param
  55247  *   list
  55248  * \param
  55249  *   string
  55250  * \return
  55251  *   index
  55252  *   -1 when the string is not found
  55253  *   -1 when list or string are NULL
  55254  */
  55255 ssize_t icListIndexOfS(char **list, const char *string) {
  55256   bool found = false;;
  55257 
  55258   // sanity checks
  55259   if (!list || !string) {
  55260     return(-1);
  55261   }
  55262   // search string in elements
  55263   enumerateCharP(list, e, i) {
  55264     if (icEqS(*e, string)) {
  55265       found = true;
  55266       break;
  55267   }
  55268     }
  55269   if (found) {
  55270      return((ssize_t)i);
  55271   }
  55272   else {
  55273      return(-1);
  55274 }
  55275   }
  55276 
  55277 /**
  55278  * ignore case and return index of string in const list
  55279  *
  55280  * \param
  55281  *   list
  55282  * \param
  55283  *   string
  55284  * \return
  55285  *   index
  55286  *   -1 when the string is not found
  55287  *   -1 when list or string are NULL
  55288  */
  55289 ssize_t icListIndexOfCS(const char **list, const char *string) {
  55290   bool found = false;;
  55291 
  55292   // sanity checks
  55293   if (!list || !string) {
  55294     return(-1);
  55295   }
  55296   // search string in elements
  55297   enumerateCCharP(list, e, i) {
  55298     if (icEqS(*e, string)) {
  55299       found = true;
  55300       break;
  55301   }
  55302     }
  55303   if (found) {
  55304      return((ssize_t)i);
  55305   }
  55306   else {
  55307      return(-1);
  55308 }
  55309   }
  55310 
  55311 ssize_t icListIndexOfCharS(char **list, char c) {
  55312 
  55313   charToS(s, c);
  55314   return(icListIndexOfS(list, s));
  55315 }
  55316 
  55317 ssize_t icListIndexOfCharCS(const char **list, char c) {
  55318 
  55319   charToS(s, c);
  55320   return(icListIndexOfCS(list, s));
  55321 }
  55322 
  55323 /**
  55324  * ignore case list binary search string
  55325  *
  55326  * efficiently finds the index of string in list
  55327  * the list has be sorted with for example listSortS
  55328  *
  55329  * \param
  55330  *   list
  55331  * \param
  55332  *   string to search
  55333  * \return
  55334  *   index of string
  55335  *   -1 string not found or NULL input pointers
  55336     */
  55337 ssize_t icListBinarySearchS(char **list, const char *string) {
  55338   ssize_t first = 0, middle, last;;
  55339 
  55340   if (!list || !string) {
  55341     return(-1);
  55342   }
  55343 
  55344   last   = (ssize_t)listLengthS(list) - 1;
  55345   while (first <= last) {
  55346     middle = (first+last)/2;
  55347     if (strcasecmp(list[middle], string) < 0) {
  55348       first = middle + 1;
  55349     }
  55350     else if (strcasecmp(list[middle], string) == 0) {
  55351       return(middle);
  55352     }
  55353     else {
  55354       last = middle -1;
  55355   }
  55356     }
  55357   return(-1);
  55358 }
  55359 
  55360 ssize_t icListBinarySearchCharS(char **list, char c) {
  55361 
  55362   charToS(s, c);
  55363   return(icListBinarySearchS(list, s));
  55364 }
  55365 
  55366 /**
  55367  * ignore case and uniquify elements of list
  55368  * duplicate list
  55369  * each elements are unique in the new list
  55370  *
  55371  * \param
  55372  *   list
  55373  * \return
  55374  *   new list with unique elements (you must free the pointer with listFreeS)
  55375  *   empty list when list is empty
  55376  *   NULL when list is NULL
  55377  */
  55378 char **icListUniqS(char **list) {
  55379   char **r = NULL;
  55380 
  55381   // sanity checks
  55382   if (!list) {
  55383     return(NULL);
  55384   }
  55385 
  55386   size_t len = listLengthS(list);
  55387 
  55388   if (!len) {
  55389     listEmptyS(r);
  55390     return(r);
  55391   }
  55392   pErrorNULL(listPushS(&r, list[0]));
  55393   // one element list
  55394   if (listLengthS(list) == 1) {
  55395     return(r);
  55396   }
  55397   // push element to new list if it is not already in new list
  55398   forEachCharP(list, e) {
  55399     if (icListIndexOfS(r, *e) == -1) {
  55400       pErrorNULL(listPushS(&r, *e));
  55401   }
  55402     }
  55403   return(r);
  55404 }
  55405 
  55406 /**
  55407  * ignore case and uniquify elements of list
  55408  * each elements are unique in the list
  55409  *
  55410  * \param
  55411  *   list (this parameter is reallocated)
  55412  * \return
  55413  *   list with unique elements (you must free the pointer with listFreeS)
  55414  *   empty list when list is empty
  55415  *   unchanged list when list is NULL
  55416  *   NULL error
  55417  */
  55418 char **iicListUniqS(char ***list) {
  55419   char **r = NULL;
  55420 
  55421   // sanity checks
  55422   if (!list || !*list) {
  55423     return(NULL);
  55424   }
  55425 
  55426   size_t len = listLengthS(*list);
  55427 
  55428   if (!len) {
  55429     listEmptyS(r);
  55430   }
  55431   else if (len == 1) {
  55432     // one element list
  55433     pErrorNULL(iListPushS(&r, (*list)[0]));
  55434   }
  55435   else {
  55436     // push element to new list if it is not already in new list
  55437     forEachCharP(*list, e) {
  55438       if (icListIndexOfS(r, *e) == -1) {
  55439         pErrorNULL(iListPushS(&r, *e));
  55440       }
  55441       else {
  55442         free(*e);
  55443   }
  55444     }
  55445       }
  55446 
  55447   free(*list);
  55448   *list = r;
  55449   return(r);
  55450 }
  55451 
  55452 /**
  55453  * remove empty strings from list
  55454  *
  55455  * \param
  55456  *   list
  55457  * \return
  55458  *   list without empty strings (you must free the pointer with listFreeS)
  55459  *   empty list when list is empty
  55460  *   NULL when list is NULL
  55461  */
  55462 char **listCompactS(char **list) {
  55463   char **r = NULL;
  55464 
  55465   // sanity checks
  55466   if (!list) {
  55467     return(NULL);
  55468   }
  55469 
  55470   // keep non empty elements
  55471   forEachCharP(list, e) {
  55472     char *trim = trimS(*e);
  55473     if (*trim != 0) {
  55474       pErrorNULL(listPushS(&r, *e));
  55475     }
  55476     free(trim);
  55477   }
  55478   if (!r) {
  55479     // the new list is empty
  55480     listEmptyS(r)
  55481   }
  55482   return(r);
  55483 }
  55484 
  55485 /**
  55486  * remove empty strings from list
  55487  *
  55488  * \param
  55489  *   list (this parameter is reallocated)
  55490  * \return
  55491  *   list without empty strings (you must free the pointer with listFreeS)
  55492  *   empty list when list is empty
  55493  *   unchanged list when list is NULL
  55494  *   NULL error
  55495  */
  55496 char **iListCompactS(char ***list) {
  55497   char **r = NULL;
  55498 
  55499   // sanity checks
  55500   if (!list || !*list) {
  55501     return(NULL);
  55502   }
  55503 
  55504   // keep non empty elements
  55505   forEachCharP(*list, e) {
  55506     char *trim = trimS(*e);
  55507     if (*trim != 0) {
  55508       pErrorNULL(iListPushS(&r, *e));
  55509     }
  55510     else {
  55511       free(*e);
  55512       if (!r) {
  55513         // set NULL to not free a second time in iListEmptySF
  55514         // when the input list is [""]
  55515         *e = NULL;
  55516     }
  55517       }
  55518     free(trim);
  55519   }
  55520   if (r) {
  55521     free(*list);
  55522     *list = r;
  55523   }
  55524   else {
  55525     pErrorNULL(iListEmptySF(list));
  55526   }
  55527   return(*list);
  55528 }
  55529 
  55530 void btraceEnable(void) {
  55531 
  55532   btraceCfg = true;
  55533 }
  55534 
  55535 void btraceDisable(void) {
  55536 
  55537   btraceCfg = false;
  55538 }
  55539 
  55540 bool btraceConfig(void) {
  55541 
  55542   return(btraceCfg);
  55543 }
  55544 
  55545 /**
  55546  * generate backtrace
  55547  * the program has to be linked the -rdynamic option for btrace to work
  55548  * btrace can backtrace 50 functions at most.
  55549  *
  55550  * \return
  55551  *  list of functions in the backtrace, the line format is: function name: source path:line number (you must free the pointer with listFreeS)
  55552  */
  55553 #if (__FreeBSD__ || __TERMUX__ || __OpenBSD__ || __DragonFly__ || MUSL_LIBC || __sun__ || __HAIKU__)
  55554 // libexecinfo is not installed by default
  55555 char **btrace(void) {
  55556 
  55557   return(NULL);
  55558 }
  55559 
  55560 #else // #if (__FreeBSD__ || __TERMUX__ || __OpenBSD__ || __DragonFly__ || MUSL_LIBC || __sun__ || __HAIKU__)
  55561 char **btrace(void) {
  55562   char **r = NULL;
  55563 
  55564   void *bt[51];
  55565   int count                = backtrace(bt, 51);
  55566 
  55567   if (count < 2) {
  55568     // the program must in at least one function (main is the first function)
  55569     // this should never happen
  55570     pFuncError
  55571     return(NULL);
  55572   }
  55573 
  55574   // backtrace strings
  55575   char **bts               = backtrace_symbols(bt, count);
  55576 
  55577   if (!bts) {
  55578     pFuncError
  55579     shEPrintfS("malloc failed");
  55580     return(NULL);
  55581   }
  55582 
  55583   // check that the symbols are found
  55584   if (hasS(bts[0], "(+")) {
  55585     logE(BLD RED "No symbols found. Link the program with the '-rdynamic' option" RST);
  55586     free(bts);
  55587     return(NULL);
  55588   }
  55589 
  55590   // get all function symbols
  55591   const char *realProgPath = getRealProgPath();
  55592   char *cmd                = formatS("readelf -W -s %s", realProgPath);
  55593   char **elf               = execOut(cmd);
  55594   free(cmd);
  55595 
  55596   if (!elf) {
  55597     pFuncError
  55598     shEPrintfS("readelf failed");
  55599     free(bts);
  55600     return(NULL);
  55601   }
  55602 
  55603   // dynamic array of uint64_t to store the function addresses
  55604   dArrayT(u64Ar, uint64_t);
  55605   u64Ar addresses;
  55606   dArrayInit(&addresses);
  55607 
  55608   // keep only functions
  55609   // symbols stores the function names
  55610   char **symbols = NULL;;
  55611   forEachCharP(elf, s) {
  55612     // keep only one space between columns
  55613     pErrorNULL(iUniqS(s, ' '));
  55614     // s = " 530: 000000000000b7e5 65 FUNC GLOBAL DEFAULT 14 zeroS"
  55615     size_t len = strlen(*s);
  55616     // spaces is the column number
  55617     int spaces = 0;
  55618     // _ is the symbol type
  55619     char *_    = NULL;
  55620     // addr is the function address as a string, funcName is the function identifier
  55621     char *addr, *funcName;
  55622     // scan the columns for current symbol
  55623     range(i, len) {
  55624       if (*(*s+i) == ' ') {
  55625         spaces++;
  55626         if (spaces == 2) {
  55627           // address column
  55628           addr = (*s+i+1);
  55629         }
  55630         if (spaces == 4) {
  55631           // symbol type column
  55632           _ = (*s+i+1);
  55633         }
  55634         if (spaces == 8) {
  55635           // stop scanning the symbol line when the function name is found
  55636           funcName = (*s+i+1);
  55637           break;
  55638       }
  55639         }
  55640     }
  55641     if (_  and startsWithS(_, "FUNC")) {
  55642       // this symbol is a function
  55643       // store function name and function address as a uint64_t
  55644       pErrorNULL(iListPushS(&symbols, funcName));
  55645       dArrayAppend(&addresses, parseHex(addr));
  55646   }
  55647     }
  55648 
  55649   if (!symbols) {
  55650     goto end;
  55651   }
  55652   // TODO sort and bin search symbols
  55653 
  55654   // convert addresses from backtrace_symbols to source code line numbers
  55655   // bts lines: ./exe(main+0x69) [0x556c7d39509b]
  55656   // skip btrace call
  55657   rangeFrom(i, 1, (size_t)count) {
  55658     size_t len = strlen(bts[i]);;
  55659     char *funcName = NULL;
  55660     char *offset   = NULL;
  55661     int status     = 0;
  55662     // find function name after first (
  55663     // and function address separated with + from the function name
  55664     range(j, len) {
  55665       if (status == 1) {
  55666         if (*(bts[i]+j) == '+') {
  55667           offset = bts[i]+j+1;
  55668           break;
  55669       }
  55670         }
  55671       if (*(bts[i]+j) == '(') {
  55672         funcName = bts[i]+j+1;
  55673         status   = 1;
  55674       }
  55675     }
  55676     if (!offset) {
  55677       shEPrintfS("Could not parse backtrace string, got: '%s', expected a string in the form './exe(main+0x69) [0x556c7d39509b]'");
  55678       free(bts);
  55679       return(NULL);
  55680     }
  55681     size_t funcNameLen = (size_t)((offset-1) - funcName);
  55682 
  55683     // search function in all funtions from the elf file
  55684     int symbolIndex = 0;;
  55685     enumerateCharP(symbols, l, j) {
  55686       if (strlen(*l) != funcNameLen) {
  55687         continue;
  55688       }
  55689       if (!strncmp(funcName, *l, funcNameLen)) {
  55690         // found function
  55691         symbolIndex = (int)j;
  55692         break;
  55693     }
  55694       }
  55695 
  55696     if (symbolIndex) {
  55697       // found the function
  55698       cmd = formatS("addr2line -e %s 0x%x", realProgPath, dArrayAt(&addresses, symbolIndex) + parseHex(offset));
  55699       char **cres = execOut(cmd);;
  55700       free(cmd);
  55701 
  55702       if (!cres) {
  55703         pFuncError
  55704         shEPrintfS("addr2line failed");
  55705         continue;
  55706       }
  55707 
  55708       pErrorNULL(iListPushS(&r, formatS("%s: %s", symbols[symbolIndex], cres[0])));
  55709 
  55710       listFreeS(cres);
  55711     }
  55712 
  55713     if (startsWithS(funcName, "main+")) {
  55714       break;
  55715     }
  55716   }
  55717 
  55718   end:
  55719   dArrayFree(&addresses);
  55720   free(symbols);
  55721   listFreeS(elf);
  55722   free(bts);
  55723   return(r);
  55724 }
  55725 #endif
  55726 // #if __FreeBSD__ || __TERMUX__ || __OpenBSD__ || __DragonFly__ || MUSL_LIBC || __sun__ || __HAIKU__
  55727 
  55728 // **************************
  55729 // void ** lists
  55730 // **************************
  55731 
  55732 /**
  55733  * list Empty Function
  55734  *
  55735  * \return
  55736  *   new empty list (you must free the pointer with listFreeS)
  55737  */
  55738 void **listEmptyF(void) {
  55739   void **list = NULL;
  55740 
  55741   list = MALLOC(1 * sizeof(void *));
  55742   if (list) {
  55743     list[0] = NULL;
  55744   }
  55745   return(list);
  55746 }
  55747 
  55748 /**
  55749  * list Empty Function
  55750  *
  55751  * \param
  55752  *   list list to empty (this parameter is reallocated)
  55753  * \return
  55754  *   empty list (you must free the pointer with listFreeS)
  55755  *   NULL error
  55756  */
  55757 void **iListEmptyF(void ***list) {
  55758 
  55759   // sanity checks
  55760   if (!list) {
  55761     return(NULL);
  55762   }
  55763 
  55764   if (*list) {
  55765     free(*list);
  55766   }
  55767 
  55768   *list = MALLOC(1 * sizeof(void *));
  55769   if (*list) {
  55770     (*list)[0] = NULL;
  55771   }
  55772   return(*list);
  55773 }
  55774 
  55775 /**
  55776  * list Is Empty
  55777  *
  55778  * \param
  55779  *   list
  55780  * \return
  55781  *   false when there are elements in the list
  55782  *   true when list is empty
  55783  *   true when list is NULL
  55784  */
  55785 bool listIsEmpty(void **list) {
  55786 
  55787   // sanity checks
  55788   if (!list || !*list) {
  55789     return(true);
  55790   }
  55791   return(false);
  55792 }
  55793 
  55794 /**
  55795  * list Create Function
  55796  * create a list from the list of parameters
  55797  * used from the listCreate(...) macro
  55798  *
  55799  * \param
  55800  *   list of elements seperated with commas
  55801  * \return
  55802  *   list (you must free the pointer with listFreeS)
  55803  *   NULL when first element if NULL
  55804  */
  55805 void **listCreateF(void *paramType, ...) {
  55806   va_list pl;
  55807   void **l = NULL;
  55808 
  55809   //Not needed if !paramType return NULL
  55810 
  55811   // push arguments to a list
  55812   va_start(pl, paramType);
  55813   paramType = va_arg(pl, void *);
  55814   while (paramType) {
  55815     pErrorNULL(listPush(&l, paramType));
  55816     paramType = va_arg(pl, void *);
  55817   }
  55818   va_end(pl);
  55819   return(l);
  55820 }
  55821 
  55822 /**
  55823  * list From Array
  55824  *
  55825  * copy array of 'size' to a new list
  55826  * NULL elements are not copied to the list
  55827  *
  55828  * \param
  55829  *   array
  55830  * \param
  55831  *   size - number of elements in the array
  55832  * \return
  55833  *   list (you must free the pointer with listFreeS)
  55834  *   empty list when size is 0
  55835  *   NULL when array is NULL
  55836  */
  55837 void **listFromArray(void **array, size_t size) {
  55838   void **r = NULL;
  55839 
  55840   // sanity checks
  55841   if (!array) {
  55842     return(NULL);
  55843   }
  55844   if (!size) {
  55845     listEmpty(r);
  55846     return(r);
  55847   }
  55848 
  55849   // copy array content
  55850   for (size_t i = 0 ; i < size ; i++) {
  55851     if (array[i]) {
  55852       // remove NULL elements
  55853       pErrorNULL(listPush(&r, array[i]));
  55854   }
  55855     }
  55856   return(r);
  55857 }
  55858 
  55859 /**
  55860  * list Push
  55861  *
  55862  * (like iListPushS)
  55863  *
  55864  * append s pointer at the end of the list
  55865  * when list is NULL, a new list with one element is returned
  55866  * when list and s are NULL return list with 2 NULL elements
  55867  * when s is NULL, NULL is pushed at the end of the list
  55868  *
  55869  * the list is reallocated to add extra space
  55870  *
  55871  * \param
  55872  *   pointer to list - becomes NULL when realloc fails (this parameter is reallocated)
  55873  * \param
  55874  *   s: element to push
  55875  * \return
  55876  *   list success (you must free the pointer)
  55877  *   NULL error
  55878  */
  55879 void **listPush(void ***list, void *s) {
  55880 
  55881   // sanity checks
  55882   if (!list || !s) {
  55883     return(NULL);
  55884   }
  55885 
  55886   if (!*list) {
  55887     *list      = MALLOC(2 * sizeof(void *));
  55888     if (!*list) {
  55889       return(NULL);
  55890     }
  55891     (*list)[0] = s;
  55892     (*list)[1] = NULL;
  55893   }
  55894   else {
  55895     // realloc list and copy s to last element
  55896     size_t len;
  55897     len  = listLength(*list);
  55898     void **tmp = REALLOC(*list, (len+2) * sizeof(void *));
  55899     if (!tmp) {
  55900       return(NULL);
  55901     }
  55902     else {
  55903       *list          = tmp;
  55904       (*list)[len+1] = NULL;
  55905       (*list)[len]   = s;
  55906   }
  55907     }
  55908   return(*list);
  55909 }
  55910 
  55911 /**
  55912  * list Pop
  55913  * return last element from list and remove last element from the list
  55914  *
  55915  * \param
  55916  *   pointer to list (this parameter is reallocated)
  55917  * \return
  55918  *   last element
  55919  *   NULL when the list is NULL or empty (first element is NULL)
  55920  */
  55921 void *listPop(void ***list) {
  55922   void *s = NULL;
  55923   size_t len;
  55924 
  55925   // sanity checks
  55926   if (!list) {
  55927     return(NULL);
  55928   }
  55929 
  55930   if (!*list || !**list) {
  55931     // empty list
  55932     // no element in the list
  55933     return(NULL);
  55934   }
  55935   // copy and free last non NULL element
  55936   // the number of elements including NULL element remains the same
  55937   len = listLength(*list);
  55938   s   = (*list)[len-1];
  55939   (*list)[len-1] = NULL;
  55940   return(s);
  55941 }
  55942 
  55943 /**
  55944  * list Prepend
  55945  *
  55946  * (like iListPrependS)
  55947  *
  55948  * append s pointer at the beginning of the list
  55949  * when list is NULL, a new list with one element is returned
  55950  * when list and s are NULL return list with 2 NULL elements
  55951  * when s is NULL, NULL is pushed at the end of the list
  55952  *
  55953  * the list is reallocated to add extra space
  55954  *
  55955  * \param
  55956  *   pointer to list - becomes NULL when realloc fails (this parameter is reallocated)
  55957  * \param
  55958  *   s: element to prepend
  55959  * \return
  55960  *   list success (you must free the pointer)
  55961  *   NULL error
  55962  */
  55963 void **listPrepend(void ***list, void *s) {
  55964 
  55965   // sanity checks
  55966   if (!list || !s) {
  55967     return(NULL);
  55968   }
  55969 
  55970   if (!*list) {
  55971     *list      = MALLOC(2 * sizeof(void *));
  55972     if (!*list) {
  55973       return(NULL);
  55974     }
  55975     (*list)[0] = s;
  55976     (*list)[1] = NULL;
  55977   }
  55978   else {
  55979     // realloc list and copy s to last element
  55980     size_t len;
  55981     len  = listLength(*list);
  55982     void **tmp = REALLOC(*list, (len+2) * sizeof(void *));
  55983     if (!tmp) {
  55984       return(NULL);
  55985     }
  55986     else {
  55987       *list = tmp;
  55988       (*list)[len+1] = NULL;
  55989       // shift list
  55990       for (size_t i = len; i > 0; i--) {
  55991         (*list)[i] = (*list)[i-1];
  55992       }
  55993       (*list)[0] = s;
  55994   }
  55995     }
  55996   return(*list);
  55997 }
  55998 
  55999 /**
  56000  * list Dequeue
  56001  * return first element from list and remove last element from the list
  56002  *
  56003  * \param
  56004  *   pointer to list
  56005  * \return
  56006  *   first element
  56007  *   NULL when the list is NULL or empty (first element is NULL)
  56008  */
  56009 void *listDequeue(void ***list) {
  56010   void *s = NULL;
  56011   size_t len;
  56012 
  56013   // sanity checks
  56014   if (!list) {
  56015     return(NULL);
  56016   }
  56017 
  56018   if (!*list || !**list) {
  56019     // empty list
  56020     // no element in the list
  56021     return(NULL);
  56022   }
  56023   // copy and free last non NULL element
  56024   // the number of elements including NULL element remains the same
  56025   len = listLength(*list);
  56026   s   = (*list)[0];
  56027   // shift list
  56028   for (size_t i = 1; i < len; i++) {
  56029     (*list)[i-1] = (*list)[i];
  56030   }
  56031   (*list)[len-1] = NULL;
  56032   return(s);
  56033 }
  56034 
  56035 /**
  56036  * list Free
  56037  *
  56038  * \param
  56039  *   list
  56040  * \return
  56041  *   nothing
  56042  */
  56043 void listFree(void **list) {
  56044 
  56045   // sanity checks
  56046   if (list) {
  56047     forEachType(void, list, e) {
  56048       free(*e);
  56049     }
  56050     free(list);
  56051 }
  56052   }
  56053 
  56054 /**
  56055  * list free many
  56056  *
  56057  * free variable list of pointers
  56058  * listFreeManyS(l1, l2, ...);
  56059  */
  56060 void listFreeManyF(void **paramType, ...) {
  56061   va_list pl;
  56062 
  56063   // add arguments to a list
  56064   va_start(pl, paramType);
  56065   paramType = va_arg(pl, void **);
  56066   while (paramType) {
  56067     listFree(paramType);
  56068     paramType = va_arg(pl, void **);
  56069   }
  56070   va_end(pl);
  56071 }
  56072 
  56073 /**
  56074  * list Length
  56075  * return number of elements until the first NULL element
  56076  *
  56077  * \param
  56078  *   list
  56079  * \return
  56080  *   number of element until first NULL element
  56081  *   0 when list is NULL
  56082  */
  56083 size_t listLength(void **list) {
  56084   size_t r = 0;;
  56085 
  56086   // sanity checks
  56087   if (!list) {
  56088     return(0);
  56089   }
  56090   forEachType(void, list, i) {
  56091     r++;
  56092   }
  56093   return(r);
  56094 }
  56095 
  56096 /**
  56097  * list Get
  56098  *
  56099  * (like iListGetS)
  56100  *
  56101  * index can be negative
  56102  *
  56103  * \param
  56104  *   list
  56105  * \param
  56106  *   index: index in list, must be inside the list
  56107  * \return
  56108  *   element
  56109  *   NULL when list is NULL or index is not set correctly
  56110  */
  56111 void *listGet(void **list, int64_t index) {
  56112   int64_t len;
  56113 
  56114   // sanity checks
  56115   if (!list) {
  56116     return(NULL);
  56117   }
  56118 
  56119   len = (int64_t)listLength(list);
  56120   if (index >= len) {
  56121     return(NULL);
  56122   }
  56123   if (index < -len) {
  56124     return(NULL);
  56125   }
  56126   if (index < 0) {
  56127     index = len + index;
  56128   }
  56129 
  56130   return(list[index]);
  56131 }
  56132 
  56133 /**
  56134  * list Set
  56135  *
  56136  * (like iListSetS)
  56137  *
  56138  * store element at given index
  56139  * previous element at index has to be freed before hand
  56140  * index can be negative
  56141  *
  56142  * \param
  56143  *   list
  56144  * \param
  56145  *   index: index in list, must be inside the list
  56146  * \param
  56147  *   element
  56148  * \return
  56149  *   list success
  56150  *   NULL error
  56151  *
  56152  * Does nothing when:
  56153  * when list is NULL, index is not set correctly or s is NULL
  56154  */
  56155 void **listSet(void **list, int64_t index, void *s) {
  56156   int64_t len;
  56157 
  56158   // sanity checks
  56159   if (!list) {
  56160     return(NULL);
  56161   }
  56162 
  56163   len = (int64_t)listLength(list);
  56164   if (index >= len) {
  56165     return(NULL);
  56166   }
  56167   if (index < -len) {
  56168     return(NULL);
  56169   }
  56170   if (index < 0) {
  56171     index = len + index;
  56172   }
  56173 
  56174   if (!s) {
  56175     return(list);
  56176   }
  56177 
  56178   list[index] = s;
  56179   return(list);
  56180 }
  56181 
  56182 /**
  56183  * list Duplicate
  56184  *
  56185  * (like iListDupS)
  56186  *
  56187  * copy pointers to new list
  56188  * After this function, free list with free instead of listFreeS
  56189  *
  56190  * Note: this function creates a new list, so void *** is not needed.
  56191  *   Unlike iList functions.
  56192  *
  56193  * \param
  56194  *   list
  56195  * \return
  56196  *   new list pointing to the same elements as list (you must free the pointer)
  56197  *   NULL when list is NULL
  56198  */
  56199 void **listDup(void **list) {
  56200   void **l = NULL;
  56201   size_t len;
  56202 
  56203   // sanity checks
  56204   if (!list) {
  56205     return(NULL);
  56206   }
  56207 
  56208   len    = listLength(list);
  56209   l      = MALLOC((len+1) * sizeof(void *));
  56210   if (!l) {
  56211     return(NULL);//LCOV_EXCL_LINE
  56212   }
  56213 
  56214   // last element is NULL
  56215   l[len] = NULL;
  56216 
  56217   // copy each element
  56218   enumerateType(void, list, e, i) {
  56219     l[i] = *e;
  56220   }
  56221   return(l);
  56222 }
  56223 
  56224 /**
  56225  * list Reverse
  56226  * create index list and reverse list, the last element is the first element of the new list
  56227  *
  56228  * \param
  56229  *   list
  56230  * \return
  56231  *   reversed list (you must free the pointer)
  56232  *   NULL when list is NULL
  56233  */
  56234 void **listReverse(void **list) {
  56235   void **l = NULL;
  56236   size_t len;
  56237 
  56238   // sanity checks
  56239   if (!list) {
  56240     return(NULL);
  56241   }
  56242 
  56243   len    = listLength(list);
  56244   l      = MALLOC((len+1) * sizeof(void *));
  56245   if (!l) {
  56246     return(NULL);//LCOV_EXCL_LINE
  56247   }
  56248 
  56249   // last element is NULL
  56250   l[len] = NULL;
  56251 
  56252   // copy each element in reverse order
  56253   enumerateType(void, list, e, i) {
  56254     l[len-1-i] = *e;
  56255   }
  56256   return(l);
  56257 }
  56258 
  56259 
  56260 /**
  56261  * list Reverse
  56262  * reverse list, the last element is the first element of the list
  56263  *
  56264  * \param
  56265  *   list (this parameter is reallocated)
  56266  * \return
  56267  *   reversed list (you must free the pointer)
  56268  *   nothing when list is NULL
  56269  *   NULL error
  56270  */
  56271 void **iListReverse(void ***list) {
  56272   void **l = NULL;
  56273 
  56274   if (!list) {
  56275     return(NULL);
  56276   }
  56277 
  56278   l = listReverse(*list);
  56279 
  56280   free(*list);
  56281   *list = l;
  56282   return(l);
  56283 }
  56284 
  56285 /**
  56286  * list Cat
  56287  * \param
  56288  *   arbitrary list of lists seperated by commas
  56289  * \return
  56290  *   new list with input lists concatenated (you must free the pointer)
  56291  */
  56292 void **listCatF(void **paramType, ...) {
  56293   va_list pl;
  56294   void **r = NULL;
  56295 
  56296   // add arguments to a list
  56297   va_start(pl, paramType);
  56298   paramType = va_arg(pl, void **);
  56299   while (paramType) {
  56300     pErrorNULL(listAppend(&r, paramType));
  56301     paramType = va_arg(pl, void **);
  56302   }
  56303   va_end(pl);
  56304   return(r);
  56305 }
  56306 
  56307 
  56308 /**
  56309  * list Append
  56310  *
  56311  * (like iListAppendS)
  56312  *
  56313  * Append list2 at the end of list1 by copying the pointers
  56314  * from list2 to list1.
  56315  * After this function, free list2 with free instead of listFreeS
  56316  *
  56317  * list1 is reallocated to add extra space
  56318  *
  56319  * \param
  56320  *   list1 (this parameter is reallocated)
  56321  * \param
  56322  *   list2
  56323  * \return
  56324  *   list1 and list2 (you must free the pointer)
  56325  *   list1 not modified when list1 and list2 are NULL
  56326  *     or when list1 is identical to list2 (same pointers)
  56327  *   NULL error
  56328  */
  56329 void **listAppend(void ***list1, void **list2) {
  56330   void **r = NULL;
  56331   size_t len1;
  56332   size_t len2;
  56333 
  56334   // sanity checks
  56335   if (!list1) {
  56336     // need a list to store results, abort
  56337     return(NULL);
  56338   }
  56339   if (!(*list1)) {
  56340     // copy list2
  56341     len2     = listLength(list2);
  56342     *list1   = MALLOC((len2+1) * sizeof(void *));
  56343     if (!*list1) {
  56344       return(NULL);
  56345     }
  56346     int j    = 0;
  56347     while (list2[j]) {
  56348       (*list1)[j] = list2[j];
  56349       j++;
  56350     }
  56351     (*list1)[j] = NULL;
  56352     return(*list1);
  56353   }
  56354   if (!list2) {
  56355     // list1 not modified
  56356     return(*list1);
  56357   }
  56358 
  56359   len1 = listLength(*list1);
  56360 
  56361   if ((*list1) == list2) {
  56362     // list1 and list2 identical, cancel this operations
  56363     // to avoid double free undefined behavior in listFreeS
  56364     return(NULL);
  56365   }
  56366 
  56367   len2 = listLength(list2);
  56368   r    = REALLOC((*list1), (len1+len2+1) * sizeof(void *));
  56369   if (!r) {
  56370     // realloc fails list1 not modified
  56371     return(NULL);
  56372   }
  56373   (*list1) = r;
  56374   // push list2 to new list
  56375   enumerateType(void, list2, e, i) {
  56376     r[len1+i] = *e;
  56377   }
  56378 
  56379   r[len1+len2] = NULL;
  56380 
  56381   return(r);
  56382 }
  56383 
  56384 
  56385 /**
  56386  * list Add
  56387  * add list1 and list2 in a new list
  56388  *
  56389  * \param
  56390  *   list1
  56391  * \param
  56392  *   list2
  56393  * \return
  56394  *   new list with list1 and list2 (you must free the pointer)
  56395  *   NULL when list1 and list2 are NULL
  56396  */
  56397 void **listAdd(void **list1, void **list2) {
  56398   void **l = NULL;
  56399   void **r = NULL;
  56400   size_t len1;
  56401   size_t len2;
  56402 
  56403   // sanity checks
  56404   if (!list1 && !list2) {
  56405     return(NULL);
  56406   }
  56407   if (!list1) {
  56408     // copy list2
  56409     return(listDup(list2));
  56410   }
  56411   if (!list2) {
  56412     // copy list1
  56413     return(listDup(list1));
  56414   }
  56415   // duplicate list1
  56416   l    = listDup(list1);
  56417   len1 = listLength(list1);
  56418   len2 = listLength(list2);
  56419   r    = REALLOC(l, (len1+len2+1) * sizeof(void *));
  56420   if (!r) {
  56421     // free l when realloc fails
  56422     free(l);
  56423     return(NULL);//LCOV_EXCL_LINE
  56424   }
  56425   // push list2 to new list
  56426   enumerateType(void, list2, e, i) {
  56427     r[len1+i] = *e;
  56428   }
  56429 
  56430   r[len1+len2] = NULL;
  56431 
  56432   return(r);
  56433 }
  56434 
  56435 
  56436 /**
  56437  * list Slice
  56438  *
  56439  * (like iListCopyS)
  56440  *
  56441  * return new list with element pointers from start and end in list
  56442  * negative indexes are allowed
  56443  *
  56444  * Note: this function creates a new list, so void *** is not needed.
  56445  *   Unlike iList functions.
  56446  *
  56447  * \param
  56448  *   list
  56449  * \param
  56450  *   start index, must be in the list
  56451  * \param
  56452  *   end index, must be in the list
  56453  * \return
  56454  *   new list pointing to the same elements as list (you must free the pointer)
  56455  *   empty list when start=end
  56456  *   NULL when list is empty
  56457  *   NULL when list is NULL or when start and end are not set correctly
  56458  */
  56459 void **listSlice(void **list, int64_t start, int64_t end) {
  56460   void **l = NULL;
  56461   int64_t len;
  56462 
  56463   // sanity checks
  56464   if (!list) {
  56465     return(NULL);
  56466   }
  56467 
  56468   len = (int64_t)listLength(list);
  56469 
  56470   if (start > len) {
  56471     return(NULL);
  56472   }
  56473   if (end > len) {
  56474     end = len;
  56475   }
  56476   if (start <= -len) {
  56477     start = -len;
  56478   }
  56479   if (end <= -len) {
  56480     return(NULL);
  56481   }
  56482   if (start < 0) {
  56483     start = len + start;
  56484   }
  56485   if (end <= 0) {
  56486     end = len + end;
  56487   }
  56488   if (end < start) {
  56489     return(NULL);
  56490   }
  56491 
  56492   if (start == end) {
  56493     // empty list
  56494     listEmpty(l);
  56495     return(l);
  56496   }
  56497 
  56498   // start < end < len
  56499   int64_t n;
  56500   n = end - start;
  56501   l = MALLOC((size_t)(n+1) * sizeof(void *));
  56502   if (!l) {
  56503     return(NULL);//LCOV_EXCL_LINE
  56504   }
  56505   for (int64_t i=0;i < n;i++) {
  56506     l[i] = *(list+start+i);
  56507   }
  56508   l[n] = NULL;
  56509   return(l);
  56510 }
  56511 
  56512 /**
  56513  * list Slice
  56514  * return list with elements from start and end in list
  56515  * negative indexes are allowed
  56516  *
  56517  * \param
  56518  *   list (this parameter is reallocated)
  56519  * \param
  56520  *   start index, must be in the list
  56521  * \param
  56522  *   end index, must be in the list
  56523  * \return
  56524  *   sliced list (you must free the pointer)
  56525  *   empty list when start=end
  56526  *   unchanged when list is empty
  56527  *   unchanged when list is NULL or when start and end are not set correctly
  56528  *   NULL error
  56529  */
  56530 void **iListSlice(void ***list, int64_t start, int64_t end) {
  56531   void **l = NULL;
  56532   int64_t len;
  56533 
  56534   // sanity checks
  56535   if (!list || !*list) {
  56536     return(NULL);
  56537   }
  56538 
  56539   len = (int64_t)listLength(*list);
  56540 
  56541   if (start > len) {
  56542     free(*list);
  56543     listEmpty(*list);
  56544     return(NULL);
  56545   }
  56546   if (end > len) {
  56547     end = len;
  56548   }
  56549   if (start <= -len) {
  56550     start = -len;
  56551   }
  56552   if (end <= -len) {
  56553     free(*list);
  56554     listEmpty(*list);
  56555     return(NULL);
  56556   }
  56557   if (start < 0) {
  56558     start = len + start;
  56559   }
  56560   if (end <= 0) {
  56561     end = len + end;
  56562   }
  56563   if (end < start) {
  56564     free(*list);
  56565     listEmpty(*list);
  56566     return(NULL);
  56567   }
  56568 
  56569   if (start == end) {
  56570     // empty list
  56571     listEmpty(l);
  56572   }
  56573   else {
  56574     // start < end < len
  56575     int64_t n;
  56576     n = end - start;
  56577     l = MALLOC((size_t)(n+1) * sizeof(void *));
  56578     if (!l) {
  56579       return(NULL);
  56580     }
  56581     for (int64_t i=0;i < n;i++) {
  56582       l[i] = *((*list)+start+i);
  56583     }
  56584     l[n] = NULL;
  56585   }
  56586 
  56587   free(*list);
  56588   *list = l;
  56589   return(l);
  56590 }
  56591 
  56592 /**
  56593  * list Insert
  56594  *
  56595  * insert list in list at index
  56596  *
  56597  * return new list with toInsert at index
  56598  * negative indexes are allowed
  56599  * index -1 is the end of the array and is equivalent to index len
  56600  *
  56601  * \param
  56602  *   list
  56603  * \param
  56604  *   index in list
  56605  * \param
  56606  *   toInsert list
  56607  * \return
  56608  *   new list (you must free the pointer)
  56609  *   NULL when list is NULL or invalid index
  56610  */
  56611 void **listInsert(void **list, int64_t index, void **toInsert) {
  56612   void **r = NULL;
  56613   int64_t len;
  56614 
  56615   //sanity checks
  56616   if (!list) {
  56617     if (index || !toInsert) {
  56618       return(NULL);
  56619     }
  56620     return(listDup(toInsert));
  56621   }
  56622 
  56623   if (!toInsert) {
  56624     return(NULL);
  56625   }
  56626 
  56627   len = (int64_t)listLength(list);
  56628 
  56629   if (!len && index == -1) {
  56630     // empty string, index -1 is equal to 0
  56631     index = 0;
  56632   }
  56633   bool neg = false;
  56634   if (index < 0) {
  56635     neg = true;
  56636   }
  56637 
  56638   if (index > len) {
  56639     return(NULL);
  56640   }
  56641   if (neg) {
  56642     index++;
  56643   }
  56644   if (index < -len) {
  56645     return(NULL);
  56646   }
  56647   if (neg) {
  56648     index = len + index;
  56649   }
  56650 
  56651 
  56652   if (listIsEmpty(toInsert)) {
  56653     return(listDup(list));
  56654   }
  56655 
  56656   if (index == 0) {
  56657     // insert at beginning
  56658     return(listAdd(toInsert, list));
  56659   }
  56660 
  56661   void **l1 = listSlice(list, 0, index);
  56662   void **l2 = listSlice(list, index, 0);
  56663   r         = listCat(l1, toInsert, l2);
  56664   free(l1);
  56665   free(l2);
  56666 
  56667   return(r);
  56668 }
  56669 
  56670 /**
  56671  * list Insert
  56672  *
  56673  * insert list in list at index
  56674  * After this function, free toInsert with free instead of listFreeS
  56675  *
  56676  * return list with toInsert at index
  56677  * negative indexes are allowed
  56678  * index -1 is the end of the array and is equivalent to index len
  56679  *
  56680  * \param
  56681  *   list (this parameter is reallocated)
  56682  * \param
  56683  *   index in list
  56684  * \param
  56685  *   toInsert list
  56686  * \return
  56687  *   list (you must free the pointer)
  56688  *   unchanged list when list is NULL or invalid index
  56689  *   NULL error
  56690  */
  56691 void **iListInsert(void ***list, int64_t index, void **toInsert) {
  56692   void **r = NULL;
  56693   int64_t len;
  56694 
  56695   //sanity checks
  56696   if (!list || !toInsert) {
  56697     return(NULL);
  56698   }
  56699   if (!*list) {
  56700     if (index) {
  56701       return(NULL);
  56702     }
  56703     r     = listDup(toInsert);
  56704     *list = r;
  56705     return(r);
  56706   }
  56707 
  56708   len = (int64_t)listLength(*list);
  56709 
  56710   if (!len && index == -1) {
  56711     // empty string, index -1 is equal to 0
  56712     index = 0;
  56713   }
  56714   bool neg = false;
  56715   if (index < 0) {
  56716     neg = true;
  56717   }
  56718 
  56719   if (index > len) {
  56720     return(NULL);
  56721   }
  56722   if (neg) {
  56723     index++;
  56724   }
  56725   if (index < -len) {
  56726     return(NULL);
  56727   }
  56728   if (neg) {
  56729     index = len + index;
  56730   }
  56731 
  56732 
  56733   if (listIsEmpty(toInsert)) {
  56734     return(*list);
  56735   }
  56736 
  56737   if (index == 0) {
  56738     // insert at beginning
  56739     pErrorNULL(listAppend(&r, toInsert));
  56740     pErrorNULL(listAppend(&r, *list));
  56741   }
  56742   else {
  56743 
  56744     r         = listSlice(*list, 0, index);
  56745     void **l2 = listSlice(*list, index, 0);
  56746     pErrorNULL(listAppend(&r, toInsert));
  56747     pErrorNULL(listAppend(&r, l2));
  56748     free(l2);
  56749   }
  56750 
  56751   free(*list);
  56752   *list = r;
  56753   return(r);
  56754 }
  56755 
  56756 /**
  56757  * list Delete
  56758  * return new list without elements from start and end in list
  56759  * negative indexes are allowed
  56760  *
  56761  * \param
  56762  *   list
  56763  * \param
  56764  *   start index, must be in the list
  56765  * \param
  56766  *   end index, must be in the list
  56767  * \return
  56768  *   sliced list (you must free the pointer)
  56769  *   list copy when start=end or when start and end are not set correctly
  56770  *   NULL when list is empty
  56771  *   NULL when list is NULL or when end is under start
  56772  */
  56773 void **listDel(void **list, int64_t start, int64_t end) {
  56774   void **l = NULL;
  56775   int64_t len;
  56776 
  56777   // sanity checks
  56778   if (!list) {
  56779     return(NULL);
  56780   }
  56781 
  56782   len = (int64_t)listLength(list);
  56783 
  56784   if (len == 0) {
  56785     return(NULL);
  56786   }
  56787 
  56788   if (start >= len) {
  56789     start = len;
  56790   }
  56791   if (end > len) {
  56792     end = len;
  56793   }
  56794   if (start <= -len) {
  56795     start = -len;
  56796   }
  56797   if (end <= -len) {
  56798     end = -len;
  56799   }
  56800   if (start < 0) {
  56801     start = len + start;
  56802   }
  56803   if (end <= 0) {
  56804     end = len + end;
  56805   }
  56806   if (end < start) {
  56807     return(NULL);
  56808   }
  56809 
  56810   if (start == end) {
  56811     return(listDup(list));
  56812   }
  56813 
  56814   // start < end < len
  56815   int64_t n;
  56816   n = end - start;
  56817   l = MALLOC((size_t)(len-n+1) * sizeof(void *));
  56818   if (!l) {
  56819     return(NULL);//LCOV_EXCL_LINE
  56820   }
  56821   for (int64_t i=0;i < start;i++) {
  56822     l[i] = *(list+i);
  56823   }
  56824   for (int64_t i=start ; i < len-n ; i++) {
  56825     l[i] = *(list+n+i);
  56826   }
  56827   l[len-n] = NULL;
  56828   return(l);
  56829 }
  56830 
  56831 
  56832 /**
  56833  * list Delete
  56834  * return list without elements from start and end in list
  56835  * negative indexes are allowed
  56836  *
  56837  * \param
  56838  *   list (this parameter is reallocated)
  56839  * \param
  56840  *   start index, must be in the list
  56841  * \param
  56842  *   end index, must be in the list
  56843  * \return
  56844  *   sliced list (you must free the pointer)
  56845  *   list copy when start=end or when start and end are not set correctly
  56846  *   NULL when list is empty
  56847  *   NULL when list is NULL or when end is under start
  56848  *   NULL error
  56849  */
  56850 void **iListDel(void ***list, int64_t start, int64_t end) {
  56851   void **l = NULL;
  56852   int64_t len;
  56853 
  56854   // sanity checks
  56855   if (!list || !*list) {
  56856     return(NULL);
  56857   }
  56858 
  56859   len = (int64_t)listLength(*list);
  56860 
  56861   if (len == 0) {
  56862     return(NULL);
  56863   }
  56864 
  56865   if (start >= len) {
  56866     start = len;
  56867   }
  56868   if (end > len) {
  56869     end = len;
  56870   }
  56871   if (start <= -len) {
  56872     start = -len;
  56873   }
  56874   if (end <= -len) {
  56875     end = -len;
  56876   }
  56877   if (start < 0) {
  56878     start = len + start;
  56879   }
  56880   if (end <= 0) {
  56881     end = len + end;
  56882   }
  56883   if (end < start) {
  56884     return(NULL);
  56885   }
  56886 
  56887   if (start == end) {
  56888     return(*list);
  56889   }
  56890 
  56891   // start < end < len
  56892   int64_t n;
  56893   n = end - start;
  56894   l = MALLOC((size_t)(len-n+1) * sizeof(void *));
  56895   if (!l) {
  56896     return(NULL);
  56897   }
  56898   for (int64_t i=0;i < start;i++) {
  56899     l[i] = *((*list)+i);
  56900   }
  56901   for (int64_t i=start ; i < len-n ; i++) {
  56902     l[i] = *((*list)+n+i);
  56903   }
  56904   l[len-n] = NULL;
  56905 
  56906   free(*list);
  56907   *list = l;
  56908   return(l);
  56909 }
  56910 
  56911 // TODO - add compare function as parameter
  56912 /**
  56913  * list Sort
  56914  * duplicate list and sort
  56915  *
  56916  * \param
  56917  *   list
  56918  * \return
  56919  *   new sorted list
  56920  *   empty list when list is empty
  56921  *   NULL when list is NULL
  56922  */
  56923 /* void **listSort(void **list) */
  56924 /*   size_t len */
  56925 /*   void **l */
  56926 /*  */
  56927 /*   // sanity checks */
  56928 /*   if !list */
  56929 /*     return NULL */
  56930 /*   len = listLength(list) */
  56931 /*   // duplicate */
  56932 /*   l = listDup(list) */
  56933 /*   if !len */
  56934 /*     return l */
  56935 /*   // sort */
  56936 /*   qsort(l, len, sizeof(void *), listSortSCmp); */
  56937 /*   return l */
  56938 
  56939 /**
  56940  * list Sort
  56941  *
  56942  * \param
  56943  *   list
  56944  * \return
  56945  *   sorted list
  56946  *   empty list when list is empty
  56947  *   unchanged list when list is NULL
  56948  */
  56949 /* void iListSortS(void ***list) */
  56950 /*   size_t len */
  56951 /*  */
  56952 /*   // sanity checks */
  56953 /*   if !list || !*list */
  56954 /*     return */
  56955 /*   len = listLength(*list) */
  56956 /*   if !len */
  56957 /*     return */
  56958 /*   // sort */
  56959 /*   qsort(*list, len, sizeof(void *), listSortSCmp); */
  56960 /*   return */
  56961 
  56962 
  56963 // TODO - add compare function as parameter
  56964 /**
  56965  * list Equal
  56966  * compare each element of list1 and list2
  56967  *
  56968  * \param
  56969  *   2 lists
  56970  * \return
  56971  *   true the lists have identical elements
  56972  *   false they differ
  56973  */
  56974 /* bool listEq(void **list1, void **list2) */
  56975 /*  */
  56976 /*   // sanity checks */
  56977 /*   if !list1 || !list2 */
  56978 /*     return false */
  56979 /*   if listLength(list1) != listLength(list2) */
  56980 /*     return false */
  56981 /*  */
  56982 /*   // compare elements */
  56983 /*   enumerateType(void, list1, e, i) */
  56984 /*     if !strEq(*e, list2[i]) */
  56985 /*       return false */
  56986 /*      */
  56987 /*   return true */
  56988 
  56989 // TODO - add compare function as parameter
  56990 /**
  56991  * return index of element in list
  56992  *
  56993  * \param
  56994  *   list
  56995  *   element
  56996  * \return
  56997  *   index
  56998  *   -1 when the element is not found
  56999  *   -1 when list or element are NULL
  57000  */
  57001 /* ssize_t listIndexOf(void **list, const void *string) */
  57002 /*   bool found = false */
  57003 /*  */
  57004 /*   // sanity checks */
  57005 /*   if !list */
  57006 /*     return -1 */
  57007 /*   if !string */
  57008 /*     return -1 */
  57009 /*   // search string in elements */
  57010 /*   enumerateType(void, list, e, i) */
  57011 /*     if strEq(*e, string) */
  57012 /*       found = true */
  57013 /*       break; */
  57014 /*   if found */
  57015 /*      return i */
  57016 /*   else */
  57017 /*      return -1 */
  57018 
  57019 // TODO - add compare function as parameter
  57020 /**
  57021  * list binary search
  57022  *
  57023  * efficiently finds the index of element in list
  57024  * the list has be sorted with for example listSortS
  57025  *
  57026  * \param
  57027  *   list
  57028  *   element to search
  57029  * \return
  57030  *   index of element
  57031  *   -1 element not found or NULL input pointers
  57032  */
  57033 /* ssize_t listBinarySearch(void **list, const void *string) */
  57034 /*   TODO copy listBinarySearchS */
  57035 
  57036 // TODO - add compare function as parameter
  57037 /**
  57038  * Uniquify elements of list
  57039  * duplicate list
  57040  * each elements are unique in the new list
  57041  *
  57042  * \param
  57043  *   list
  57044  * \return
  57045  *   new list with unique elements
  57046  *   empty list when list is empty
  57047  *   NULL when list is NULL
  57048  */
  57049 /* void **listUniq(void **list) */
  57050 /*   void **r */
  57051 /*  */
  57052 /*   // sanity checks */
  57053 /*   if !list */
  57054 /*     return NULL */
  57055 /*  */
  57056 /*   listPush(&r, list[0]); */
  57057 /*   // one element list */
  57058 /*   if listLength(list) = 1 */
  57059 /*     return r */
  57060 /*   // push element to new list if it is not already in new list */
  57061 /*   forEachType(void, list, e) */
  57062 /*     if listIndexOf(r, *e) = -1 */
  57063 /*       listPush(&r, *e); */
  57064 /*   return r */
  57065 
  57066 /**
  57067  * Uniquify elements of list
  57068  * each elements are unique in the list
  57069  *
  57070  * \param
  57071  *   list
  57072  * \return
  57073  *   list with unique elements
  57074  *   empty list when list is empty
  57075  *   unchanged list when list is NULL
  57076  */
  57077 /* void iListUniq(void ***list) */
  57078 /*   void **r */
  57079 /*  */
  57080 /*   // sanity checks */
  57081 /*   if !list || !*list */
  57082 /*     return */
  57083 /*  */
  57084 /*   listPush(&r, (*list)[0]); */
  57085 /*   // one element list */
  57086 /*   if listLength(*list) > 1 */
  57087 /*     // push element to new list if it is not already in new list */
  57088 /*     forEachType(void, *list, e) */
  57089 /*       if listIndexOf(r, *e) = -1 */
  57090 /*         listPushS(&r, *e); */
  57091 /*   */
  57092 /*   free *list */
  57093 /*   *list = r */
  57094 /*   return */
  57095 
  57096 // TODO - add compare function as parameter
  57097 /**
  57098  * remove empty element from list
  57099  *
  57100  * \param
  57101  *   list
  57102  * \return
  57103  *   list without empty element
  57104  *   empty list when list is empty
  57105  *   NULL when list is NULL
  57106  */
  57107 /* void **listCompact(void **list) */
  57108 /*   void **r */
  57109 /*  */
  57110 /*   // sanity checks */
  57111 /*   if !list */
  57112 /*     return NULL */
  57113 /*  */
  57114 /*   // keep non empty elements */
  57115 /*   forEachType(void, list, e) */
  57116 /*     void *trim = trimS(*e) */
  57117 /*     if *trim != 0 */
  57118 /*       listPush(&r, *e); */
  57119 /*     free trim */
  57120 /*   if !r */
  57121 /*     // the new list is empty */
  57122 /*     listEmpty(r) */
  57123 /*   return r */
  57124 
  57125 /**
  57126  * remove empty elements from list
  57127  *
  57128  * \param
  57129  *   list
  57130  * \return
  57131  *   list without empty elements
  57132  *   empty list when list is empty
  57133  *   unchanged list when list is NULL
  57134  */
  57135 /* void iListCompact(void ***list) */
  57136 /*   void **r */
  57137 /*  */
  57138 /*   // sanity checks */
  57139 /*   if !list || !*list */
  57140 /*     return */
  57141 /*  */
  57142 /*   // keep non empty elements */
  57143 /*   forEachType(void, *list, e) */
  57144 /*     void *trim = trimS(*e) */
  57145 /*     if *trim != 0 */
  57146 /*       listPush(&r, *e); */
  57147 /*     free trim */
  57148 /*   if r */
  57149 /*     free *list */
  57150 /*     *list = r */
  57151 /*   return */
  57152 
  57153 /**
  57154  * initialize ring/pointer to staticArray
  57155  * sets count and head to 0
  57156  * sets maxCount
  57157  *
  57158  * the ring is empty after this function
  57159  *
  57160  * a pointer to staticArray is also valid
  57161  * the array is empty after this function
  57162  *
  57163  * \param
  57164  *   ring pointer to initialize
  57165  * \param
  57166  *   maxCount for this ring type
  57167  * \return
  57168  *   1 success
  57169  *   0 error
  57170  */
  57171 int ringInit(void *ring, int maxCount) {
  57172 
  57173   if (!ring) {
  57174     return(0);
  57175   }
  57176 
  57177   cast(ringBase*, name, ring)
  57178 
  57179   name->last = name->head = 0;
  57180   name->maxCount = maxCount;
  57181   name->isEmpty = true;
  57182   return(1);
  57183 }
  57184 
  57185 /**
  57186  * empty ring
  57187  * Allocated buffers in the list must be freed before running staticArrayEmpty
  57188  *
  57189  * \return
  57190  *  1 success
  57191  *  0 error
  57192  */
  57193 int ringEmpty(void *ring) {
  57194 
  57195   if (!ring) {
  57196     return(0);
  57197   }
  57198 
  57199   cast(ringBase*, name, ring)
  57200   name->last = name->head = 0;
  57201   name->isEmpty = true;
  57202   return(1);
  57203 }
  57204 
  57205 /**
  57206  * 1 when empty
  57207  * 0 not empty
  57208  * -1 error
  57209  */
  57210 int ringIsEmpty(void *ring) {
  57211 
  57212   if (!ring) {
  57213     return(-1);
  57214   }
  57215 
  57216   cast(ringBase*, name, ring)
  57217 
  57218   return(name->isEmpty);
  57219 }
  57220 
  57221 /**
  57222  * 1 when full
  57223  * 0 not full
  57224  * -1 error
  57225  */
  57226 int ringIsFull(void *ring) {
  57227 
  57228   if (!ring) {
  57229     return(-1);
  57230   }
  57231 
  57232   cast(ringBase*, name, ring)
  57233 
  57234   if (((name->last+1) % name->maxCount) == name->head) {
  57235     return(1);
  57236   }
  57237   return(0);
  57238 }
  57239 
  57240 
  57241 /**
  57242  * return elements count
  57243  *
  57244  * \return
  57245  *   message count
  57246  *   -1 error
  57247  */
  57248 ssize_t ringCount(void *ring) {
  57249 
  57250   if (!ring) {
  57251     return(-1);
  57252   }
  57253 
  57254   cast(ringBase*, name, ring)
  57255 
  57256   if (name->isEmpty) {
  57257     return(0);
  57258   }
  57259 
  57260   if ((name->last) > (name->head)) {
  57261     return(name->last-name->head+1);
  57262   }
  57263   return((name->maxCount-name->head + name->last+1));
  57264 }
  57265 
  57266 /**
  57267  * push element to ring (only increases last, use ringSend)
  57268  * use ringLast to access the element
  57269  *
  57270  * \return
  57271  *   position of the element
  57272  *   -1 ring is full
  57273  *   -2 error
  57274  */
  57275 i64 ringPush(void *ring) {
  57276 
  57277   if (!ring) {
  57278     return(-2);
  57279   }
  57280   if (ringIsFull(ring)) {
  57281     return(-1);
  57282   }
  57283 
  57284   cast(ringBase*, name, ring)
  57285 
  57286   if (name->isEmpty) {
  57287     name->isEmpty = false;
  57288   }
  57289   else {
  57290     name->last++;
  57291     name->last %= name->maxCount;;
  57292   }
  57293   return(name->last);
  57294 }
  57295 
  57296 /**
  57297  * pop element from ring (only decreases last)
  57298  *
  57299  * \return
  57300  *   1 element is removed
  57301  *   0 ring is empty
  57302  *   -1 error
  57303  */
  57304 int ringPop(void *ring) {
  57305 
  57306   if (!ring) {
  57307     return(-1);
  57308   }
  57309   if (ringIsEmpty(ring)) {
  57310     return(0);
  57311   }
  57312 
  57313   cast(ringBase*, name, ring)
  57314 
  57315   if (!name->isEmpty && (name->last == name->head)) {
  57316     name->isEmpty = true;
  57317   }
  57318   else if (!name->isEmpty && (name->last != name->head)) {
  57319     if (name->last) {
  57320       name->last--;
  57321     }
  57322     else {
  57323       name->last += name->maxCount-1;
  57324   }
  57325     }
  57326   return(1);
  57327 }
  57328 
  57329 /**
  57330  * prepend element to ring (only decreases head)
  57331  * use ringFirst to access the element
  57332  *
  57333  * \return
  57334  *   position of the element
  57335  *   -1 ring is full
  57336  *   -2 error
  57337  */
  57338 i64 ringPrepend(void *ring) {
  57339 
  57340   if (!ring) {
  57341     return(-2);
  57342   }
  57343   if (ringIsFull(ring)) {
  57344     return(-1);
  57345   }
  57346 
  57347   cast(ringBase*, name, ring)
  57348 
  57349   if (name->isEmpty) {
  57350     name->isEmpty = false;
  57351   }
  57352   else {
  57353     if (name->head) {
  57354       name->head--;
  57355     }
  57356     else {
  57357       name->head += name->maxCount-1;;
  57358   }
  57359     }
  57360   return(name->head);
  57361 }
  57362 
  57363 /**
  57364  * dequeue element from ring (only increases head, use ringRecv)
  57365  *
  57366  * \return
  57367  *   1 element is removed
  57368  *   0 ring is empty
  57369  *   -1 error
  57370  */
  57371 int ringDequeue(void *ring) {
  57372 
  57373   if (!ring) {
  57374     return(-1);
  57375   }
  57376   if (ringIsEmpty(ring)) {
  57377     return(0);
  57378   }
  57379 
  57380   cast(ringBase*, name, ring)
  57381 
  57382   if (!name->isEmpty && (name->last == name->head)) {
  57383     name->isEmpty = true;
  57384   }
  57385   else if (!name->isEmpty && (name->last != name->head)) {
  57386     name->head++;
  57387     name->head %= name->maxCount;;
  57388   }
  57389   return(1);
  57390 }
  57391 
  57392 
  57393 /**
  57394  * fibers holds the necessary information to schedule fibers
  57395  */
  57396 fibersT fibers;
  57397 
  57398 /**
  57399  * add new fiber
  57400  *
  57401  * \param
  57402  * ctx context for the fiber at thisSlot
  57403  * \param
  57404  * thisSlot reserved slot for this fiber
  57405  * \param
  57406  * func fiber function
  57407  * \return
  57408  * true
  57409  */
  57410 bool fiberAdd(void *ctx, int thisSlot, fiberFT func) {
  57411 
  57412   cast(fiberBaseT*, thisCtx, ctx)
  57413   thisCtx->slot = thisSlot;
  57414   fibers.context[thisSlot] = ctx;
  57415   staticArrayPush(fibers.startL)
  57416   staticArrayLast(fibers.startL) = thisSlot;
  57417   fibers.F[thisSlot] = func;
  57418   return(true);
  57419 }
  57420 
  57421 /**
  57422  * add new fiber and start immediately after next yield
  57423  *
  57424  * \param
  57425  * ctx context for the fiber at thisSlot
  57426  * \param
  57427  * thisSlot reserved slot for this fiber
  57428  * \param
  57429  * func fiber function
  57430  * \return
  57431  * true
  57432  */
  57433 bool fiberPrepend(void *ctx, int thisSlot, fiberFT func) {
  57434 
  57435   cast(fiberBaseT*, thisCtx, ctx)
  57436   thisCtx->slot = thisSlot;
  57437   fibers.context[thisSlot] = ctx;
  57438   staticArrayPrepend(fibers.startL)
  57439   staticArrayFirst(fibers.startL) = thisSlot;
  57440   fibers.F[thisSlot] = func;
  57441   return(true);
  57442 }
  57443 
  57444 /**
  57445  * Schedule fibers
  57446  */
  57447 void scheduler(void) {
  57448   static int task;
  57449 
  57450   // Start tasks before the schedule loop
  57451   // to add fibers to fiberL
  57452   while (!staticArrayIsEmpty(fibers.startL)) {
  57453     puts(__func__);
  57454     task = staticArrayFirst(fibers.startL);
  57455     printf("Start task %d\n", task);
  57456     staticArrayDequeue(fibers.startL);
  57457     startJump(fibers.F[task](task));
  57458   }
  57459 
  57460   // Schedule Loop
  57461   while (!staticArrayIsEmpty(fibers.L)) {
  57462     // Start eventual new tasks
  57463     while (!staticArrayIsEmpty(fibers.startL)) {
  57464       puts(__func__);
  57465       task = staticArrayFirst(fibers.startL);
  57466       printf("-- Start NEW task %d\n", task);
  57467       staticArrayDequeue(fibers.startL);
  57468       startJump(fibers.F[task](task));
  57469     }
  57470     puts(__func__);
  57471     task = staticArrayFirst(fibers.L);
  57472     staticArrayDequeue(fibers.L);
  57473 
  57474     logVar(task, "d");
  57475     schedulerYield(task);
  57476 }
  57477   }
  57478 
  57479 
  57480 
  57481 
  57482 
  57483 
  57484 
  57485 
  57486 
  57487 #if ((__GNUC__ > 4))
  57488 /**
  57489  * return monotonic time in nanoseconds
  57490  */
  57491 uint64_t getMonotonicTime(void) {
  57492   struct timespec ts;
  57493 
  57494   clock_gettime(CLOCK_MONOTONIC, &ts);
  57495 
  57496   return((uint64_t)(ts.tv_sec) * 1000000000 + (uint64_t)(ts.tv_nsec));
  57497 }
  57498 #else
  57499 // not available on older platforms
  57500 uint64_t getMonotonicTime(void) {
  57501 
  57502   return(0);
  57503 }
  57504 #endif
  57505 /**
  57506  * nanosleep
  57507  *
  57508  * sleep nanoseconds
  57509  *
  57510  * \param
  57511  *   time in nanosceonds
  57512  * \return
  57513  *   1 ok
  57514  *   0 error
  57515  */
  57516 int nanoSleepF(uint64_t time) {
  57517   struct timespec ts;
  57518 
  57519   ts.tv_sec  = (time_t)(time / 1000000000);
  57520   ts.tv_nsec = (time_t)(time % 1000000000);
  57521   int r = nanosleep(&ts, NULL);;
  57522   if (r == -1) {
  57523     pFuncError
  57524     return(0);
  57525   }
  57526   return(1);
  57527 }
  57528 
  57529 
  57530 /**
  57531  * startJump/yield example
  57532  * A B light coroutines
  57533  *
  57534  * a1 - starts with A
  57535  * b1 - switch to B
  57536  * a2 - back to A
  57537  * r=1
  57538  * b2 - switch to B
  57539  * r=2
  57540  * a3 - back to A
  57541  */
  57542 
  57543 typedef struct {int slot; int a;} AArgs;
  57544 typedef struct {int slot; int a; int b;} BArgs;
  57545 
  57546 void A(void *args) {
  57547   // static to save local variable
  57548   static int r = 0;;
  57549   static AArgs *ctx = NULL;
  57550   static BArgs Ba UNUSED;;
  57551 
  57552   ctx = args;
  57553   puts("a1");
  57554   r++;
  57555   ctx->a++;
  57556 
  57557   // switch to B
  57558   Ba.a = 1;
  57559   Ba.b = 2;
  57560   //startJump(0, B(&Ba));
  57561 
  57562   puts("a2");
  57563 
  57564   logVar(r, "d");
  57565   logVar(ctx->a, "d");
  57566 
  57567   ctx->a++;
  57568 
  57569   // switch to B
  57570   //yield(0, 1);
  57571 
  57572   puts("a3");
  57573   logVar(r, "d");
  57574   logVar(ctx->a, "d");
  57575 }
  57576 
  57577 void B(void *args) {
  57578   // static to save local variable
  57579   static int r = 0;;
  57580   static BArgs *ctx = NULL;
  57581 
  57582   ctx = args;
  57583 
  57584   puts("b1");
  57585   r+=2;;
  57586   ctx->a++;
  57587   ctx->b++;
  57588 
  57589   // back to A
  57590   //yield(1, 0);
  57591 
  57592   puts("b2");
  57593 
  57594   logVar(r, "d");
  57595   logVar(ctx->a, "d");
  57596   logVar(ctx->b, "d");
  57597 
  57598   // back to A
  57599 }
  57600 
  57601 void AB(void) {
  57602   int r = 0;;
  57603   int r2 = 0;;
  57604 
  57605   puts("a1");
  57606   r++;
  57607 
  57608   // switch to B
  57609   goNLabel(b1,a2)
  57610   //goto b1; a2:
  57611 
  57612   puts("a2");
  57613 
  57614   logVar(r, "d");
  57615 
  57616   // switch to B
  57617   goNLabel(b2,a3)
  57618   //goto b2; a3:
  57619 
  57620   puts("a3");
  57621   return;
  57622 
  57623   b1:
  57624 
  57625   puts("b1");
  57626   r2+=2;;
  57627 
  57628   // back to A
  57629   goNLabel(a2,b2)
  57630   //goto a2; b2:
  57631 
  57632   puts("b2");
  57633 
  57634   logVar(r2, "d");
  57635 
  57636   // back to A
  57637   goto a3;
  57638 }
  57639 
  57640 void fiberA(int thisSlot) {
  57641   // static to save local variable
  57642   static int r = 0;;
  57643   static AArgs *ctx = NULL;
  57644   int slot;;
  57645 
  57646   ctx = fiberCtx(thisSlot);
  57647 
  57648   puts("a1");
  57649   r++;
  57650   ctx->a++;
  57651 
  57652   // switch to scheduler
  57653   yield(slot, ctx->slot);
  57654   ctx = fiberCtx(slot);
  57655 
  57656   puts("a2");
  57657 
  57658   logVar(r, "d");
  57659   logVar(slot, "d");
  57660   logVar(ctx->a, "d");
  57661 
  57662   ctx->a++;
  57663 
  57664   // switch to scheduler
  57665   //yield(slot, ctx->slot);
  57666   if (slot == 1) {
  57667     fiberEnd(ctx->slot);
  57668   }
  57669   else {
  57670     yield(slot, ctx->slot);
  57671   }
  57672   ctx = fiberCtx(slot);
  57673 
  57674   puts("a3");
  57675   logVar(r, "d");
  57676   logVar(slot, "d");
  57677   logVar(ctx->a, "d");
  57678 }
  57679 
  57680 static AArgs Ca;
  57681 
  57682 void fiberB(int thisSlot) {
  57683   // static to save local variable
  57684   static int r = 0;;
  57685   static BArgs *ctx = NULL;
  57686   int slot;;
  57687 
  57688   ctx = fiberCtx(thisSlot);
  57689 
  57690   puts("b1");
  57691   r+=2;;
  57692   ctx->a++;
  57693   ctx->b++;
  57694 
  57695   // back to scheduler
  57696   yield(slot, ctx->slot);
  57697   ctx = fiberCtx(slot);
  57698 
  57699   puts("b2");
  57700 
  57701   logVar(r, "d");
  57702   logVar(slot, "d");
  57703 
  57704   puts(__func__);
  57705   Ca.a    = 0;
  57706   Ca.slot = 3;
  57707   fiberAdd(&Ca, 3, fiberA);
  57708 
  57709   yield(slot, ctx->slot);
  57710   ctx = fiberCtx(slot);
  57711 
  57712   puts("b3");
  57713   logVar(slot, "d");
  57714   logVar(ctx->a, "d");
  57715   logVar(ctx->b, "d");
  57716 
  57717   // back to A
  57718 }
  57719 
  57720 dArrayT(intDynt, int);
  57721 slabT(intSlabt, int);
  57722 
  57723 void bttt(void) {
  57724   char *r = NULL;
  57725 
  57726   puts(r);
  57727   //logBtrace;
  57728 }
  57729 
  57730 #ifndef unitTest
  57731 // Remove main when running the unit tests
  57732 #define MAIN   main
  57733 #endif
  57734 int MAIN(int ARGC, char** ARGV) {
  57735   char **l UNUSED = NULL;
  57736 
  57737   argc = ARGC; argv = ARGV;
  57738   /* typ struct {int a; int b;} structuret; */
  57739 
  57740   cleanCharP(nocolor) = stripColorsS(BLD RED"RED is a primary color"RST);;
  57741   puts(nocolor);
  57742   logE(BLD RED"RED is a primary color"RST);
  57743   keepAnsiColorsInLog(no);
  57744   logE(BLD RED"RED is a primary color"RST);
  57745 
  57746   /* logSystem("git log -n 2 --pretty=\"%ai\""); */
  57747   /*  */
  57748   /* sliceT(slStruct, structuret); */
  57749   /* slStruct slc; */
  57750   /* sliceInit(&slc); */
  57751   /* slicePush(&slc); */
  57752   /* slicePush(&slc); */
  57753   /* sliceEnumerate(&slc, i, elm) { */
  57754   /*   elm->a = 0; */
  57755   /*   elm->b = 0; */
  57756   /*   printf("sliceEnumerate %zd\n", i); */
  57757   /* } */
  57758   /* sliceFree(&slc); */
  57759   /*  */
  57760   /* // list */
  57761   /*  */
  57762   /* #<{(| i8  a = 0 |)}># */
  57763   /* #<{(| i16 s = 0 |)}># */
  57764   /* #<{(| i32 d = 0 |)}># */
  57765   /* #<{(| i64 f = 0 |)}># */
  57766   /* #<{(| u8  g = 0 |)}># */
  57767   /* #<{(| u16 h = 0 |)}># */
  57768   /* #<{(| u32 j = 0 |)}># */
  57769   /* u64 k = 7 */
  57770   /* #<{(| f32 x = 0 |)}># */
  57771   /* #<{(| f64 p = 0 |)}># */
  57772   /*  */
  57773   /*  */
  57774   /* char *toBCroped = strdup("123456") */
  57775   /* char *crp       = iCropS(&toBCroped, -1, 1) */
  57776   /* logVar(toBCroped, "s"); */
  57777   /* logVar(crp, "s"); */
  57778   /*  */
  57779   /* char **lst = listCreateS("1","2","3","4","5") */
  57780   /* char **lcrop = listCropS(lst, 1,3) */
  57781   /* pError0(listPrintS(lst)); */
  57782   /* AT */
  57783   /* pError0(listPrintS(lcrop)); */
  57784   /*  */
  57785   /* setLogStdout(no); */
  57786   /*  */
  57787   /* logExit(EXIT_SUCCESS, "qweqwe"); */
  57788   /* logXSuccess("qweqwe"); */
  57789   /* logXFailure("qweqwe"); */
  57790   /*  */
  57791   /* logSystemf("ls /home/%s/.ssh/", "remy"); */
  57792   /*  */
  57793   /* char *rel = relPath("/wer/w/e", "../wer/ef"); */
  57794   /* printf("rel path %s\n", rel); */
  57795   /* free rel */
  57796   /*  */
  57797   /* //printf(">%s< %zu\n",nS(padEndS("123", 10, "-=|=123123")), lenS(padEndS("123", 10, "-=|=123123"))); */
  57798   /* char *e = ellipsisStartS("123", 10, "..."); */
  57799   /* printf("ellipsis start %s\n", e); */
  57800   /* free e */
  57801   /* e =ellipsisStartS("1234567890", 10, "...") */
  57802   /* printf("ellipsis start %s\n", e); */
  57803   /* free e */
  57804   /* e =ellipsisStartS("1234567890abcdef", 10, "...") */
  57805   /* printf("ellipsis start %s\n", e); */
  57806   /* free e */
  57807   /* e =ellipsisStartS("1234567890abcdef", 10, "...xxxxxxxxxxxxxxxxxxxxxxxxx") */
  57808   /* printf("ellipsis start %s\n", e); */
  57809   /* free e */
  57810   /* e =ellipsisEndS("123", 10, "...") */
  57811   /* printf("ellipsis end %s\n", e); */
  57812   /* free e */
  57813   /* e =ellipsisEndS("1234567890", 10, "...") */
  57814   /* printf("ellipsis end %s\n", e); */
  57815   /* free e */
  57816   /* e =ellipsisEndS("1234567890abcdef", 10, "...") */
  57817   /* printf("ellipsis end %s\n", e); */
  57818   /* free e */
  57819   /* e =ellipsisEndS("1234567890abcdef", 10, "...****************************") */
  57820   /* printf("ellipsis end %s\n", e); */
  57821   /* free e */
  57822   /*  */
  57823   /* XSUCCESS */
  57824   /*  */
  57825   /* char a[8192] = "" */
  57826   /*  */
  57827   /* initLibsheepy("exe"); */
  57828   /* setLogSymbols(LOG_UTF8); */
  57829   /*  */
  57830   /* logVar(absV(-2), "d"); */
  57831   /* logVar(CMP(2,2), "d"); */
  57832   /*  */
  57833   /* char **li = NULL */
  57834   /* //char **li2; */
  57835   /*  */
  57836   /* // list negative index */
  57837   /* pErrorNULL(listPushS(&li, "1")); */
  57838   /* pErrorNULL(listPushS(&li, "22")); */
  57839   /* pErrorNULL(listPushS(&li, "333")); */
  57840   /* pErrorNULL(listPushS(&li, "4444")); */
  57841   /* //li2 = iListCropS(&li, 1,-1) */
  57842   /* char *stri = iListCropElemS(&li, 1) */
  57843   /*  */
  57844   /* pError0(listPrintS(li)); */
  57845   /* put */
  57846   /* puts(stri); */
  57847   /* //listPrintS(li2); */
  57848   /*  */
  57849   /* XSUCCESS */
  57850   /*  */
  57851   /* sliceT(slicet, char*); */
  57852   /* slicet slce; */
  57853   /* sliceInit(&slce); */
  57854   /* //sliceElemType(&slce) slEl; */
  57855   /*  */
  57856   /* staticSliceT(sslicet, char*, 2); */
  57857   /* sslicet sslce; */
  57858   /* staticSliceInit(&sslce); */
  57859   /* staticSlicePush(&sslce); */
  57860   /* //staticSliceForEach(&sslce, S UNUSED) S = NULL; */
  57861   /* //staticSliceEnumerate(&sslce, iS, S UNUSED) S = NULL; */
  57862   /*  */
  57863   /* //staticSliceElemType(&sslce) sslEl; */
  57864   /*  */
  57865   /* puts(getCurrentDate()); */
  57866   /*  */
  57867   /* vectorT(vect, char *); */
  57868   /*  */
  57869   /* vect vec; */
  57870   /*  */
  57871   /* //vectorElemType(&vec) vecE; */
  57872   /*  */
  57873   /* vectorInitCount(&vec, 17); */
  57874   /*  */
  57875   /*  */
  57876   /* logVar(vectorMaxCount(&vec), "zu"); */
  57877   /* logVar(vectorCount(&vec), "zu"); */
  57878   /*  */
  57879   /* vectorAppend(&vec, "qwe"); */
  57880   /* vectorAppend(&vec, "2345"); */
  57881   /*  */
  57882   /* //vectorForEach(&vec, S UNUSED) S = NULL; */
  57883   /* //vectorEnumerate(&vec, iv, S) S = NULL; */
  57884   /*  */
  57885   /* logVar(vectorMaxCount(&vec), "zu"); */
  57886   /* logVar(vectorCount(&vec), "zu"); */
  57887   /*  */
  57888   /* char *vc = vectorAt(&vec, 1) */
  57889   /* logI(vc); */
  57890   /*  */
  57891   /* forEachV(&vec, i) { */
  57892   /*   logI(vectorAt(&vec, i)); */
  57893   /* } */
  57894   /*  */
  57895   /* vectorDelElem(&vec, 0); */
  57896   /*  */
  57897   /* vc = vectorDequeue(&vec) */
  57898   /* logI(vc); */
  57899   /*  */
  57900   /*  */
  57901   /* logVar(vectorMaxCount(&vec), "zu"); */
  57902   /* logVar(vectorCount(&vec), "zu"); */
  57903   /*  */
  57904   /* vectorInject(&vec, 0); */
  57905   /*  */
  57906   /* logVar(vectorMaxCount(&vec), "zu"); */
  57907   /* logVar(vectorCount(&vec), "zu"); */
  57908   /*  */
  57909   /* vectorAt(&vec, 0) = "#$345" */
  57910   /*  */
  57911   /* forEachV(&vec, i) { */
  57912   /*   logI(vectorAt(&vec, i)); */
  57913   /* } */
  57914   /*  */
  57915   /* var v = vectorCopy(&vec, 0, 1); */
  57916   /*  */
  57917   /* logI("copy"); */
  57918   /*  */
  57919   /* forEachV(v, i) { */
  57920   /*   logI(vectorAt(v, i)); */
  57921   /* } */
  57922   /*  */
  57923   /* vectorTerminate(v); */
  57924   /*  */
  57925   /* vectorFree(&vec); */
  57926   /*  */
  57927   /* dVectorT(dvect, void*); */
  57928   /* dvect dvec; */
  57929   /* dVectorInit(&dvec); */
  57930   /* //dVectorElemType(&dvec) dvecE; */
  57931   /*  */
  57932   /* //dVectorForEach(&dvec, S UNUSED) S = NULL; */
  57933   /* //dVectorEnumerate(&dvec, idv, S UNUSED) S = NULL; */
  57934   /* XSUCCESS */
  57935   /*  */
  57936   /*  */
  57937   /* char *h; */
  57938   /* puts(h = toHexS("123", 4)); */
  57939   /* free h */
  57940   /* puts(h = toHexSepS("123", 4, ",")); */
  57941   /* free h */
  57942   /* puts(h = toHexHeadSepS("123", 3, "\\x", "")); */
  57943   /* free h */
  57944   /* logSI("Buf: [%s]", toHexSepS("123", 4, ",")); */
  57945   /* logSMI(1,"Mask Buf: [%s]", toHexSepS("123", 4, ",")); */
  57946   /*  */
  57947   /* const char *AA[] = {"WER", "asd", NULL} */
  57948   /* char **CA = listCreateS("zxc", "cvb"); */
  57949   /*  */
  57950   /* pError0(listPrintS((char**)AA)); */
  57951   /* pError0(listPrintS(CA)); */
  57952   /*  */
  57953   /* char *utf8 = "Футбол России и мира, новости футбола, видео голов..."; */
  57954   /* char *utf8_l6 = "Футбол"; */
  57955   /* char *utg8_l6 = "/åäöéà"; */
  57956   /* // extra bytes for bLPtr2IdxUTF8 */
  57957   /* //char *utg8_l6bad = "/åäöéàX"; */
  57958   /* char aq[20] = {0x66, 0x7e, 0xc6,0xc1, 0}; */
  57959   /*  */
  57960   /* puts("---------------"); */
  57961   /* puts(shDirname("./wer")); */
  57962   /* puts(shDirname("wer")); */
  57963   /* puts(shDirname("DFGDFG/wer")); */
  57964   /* puts("---------------"); */
  57965   /*  */
  57966   /* logVar(strlen(utf8_l6), "zu"); */
  57967   /* logVar(lenUTF8(utf8_l6), "zu"); */
  57968   /* logVar(isUTF8(utf8_l6), "b"); */
  57969   /* puts(utf8_l6); */
  57970   /* logVar(strlen(utg8_l6), "zu"); */
  57971   /* logVar(lenUTF8(utg8_l6), "zu"); */
  57972   /* logVar(bLLenUTF8(utg8_l6,3), "zu"); */
  57973   /* logVar(isUTF8(utg8_l6), "b"); */
  57974   /* // idx2PtrUTF8 test */
  57975   /* logPtr(utg8_l6); */
  57976   /* logPtr(utg8_l6+strlen(utg8_l6)); */
  57977   /* logVar(makeValidUTF8(utg8_l6), "s"); */
  57978   /* logVar(makeValidUTF8(aq), "s"); */
  57979   /* pErrorNULL(strNCpyUTF8(aq, utg8_l6, 5)); */
  57980   /* logVar(aq, "s"); */
  57981   /* #<{(| logVar(ptr2IdxUTF8(utg8_l6, utg8_l6+strlen(utg8_l6)+1),"d"); |)}># */
  57982   /* #<{(| logVar(ptr2IdxUTF8(utg8_l6, utg8_l6),"d"); |)}># */
  57983   /* #<{(| logVar(ptr2IdxUTF8(utg8_l6, utg8_l6+1),"d"); |)}># */
  57984   /* #<{(| logVar(ptr2IdxUTF8(utg8_l6, utg8_l6+2),"d"); |)}># */
  57985   /* #<{(| logVar(ptr2IdxUTF8(utg8_l6, utg8_l6+3),"d"); |)}># */
  57986   /* #<{(| logVar(ptr2IdxUTF8(utg8_l6, utg8_l6+10),"d"); |)}># */
  57987   /* #<{(| logVar(ptr2IdxUTF8(utg8_l6, utg8_l6+11),"d"); |)}># */
  57988   /* #<{(| logVar(ptr2IdxUTF8(utg8_l6, utg8_l6+12),"d"); |)}># */
  57989   /* #<{(| logVar(bPtr2IdxUTF8(utg8_l6, utg8_l6, utg8_l6+strlen(utg8_l6)+1),"d"); |)}># */
  57990   /* #<{(| logVar(bPtr2IdxUTF8(utg8_l6, utg8_l6, utg8_l6),"d"); |)}># */
  57991   /* #<{(| logVar(bPtr2IdxUTF8(utg8_l6, utg8_l6, utg8_l6+1),"d"); |)}># */
  57992   /* #<{(| logVar(bPtr2IdxUTF8(utg8_l6, utg8_l6, utg8_l6+2),"d"); |)}># */
  57993   /* #<{(| logVar(bPtr2IdxUTF8(utg8_l6, utg8_l6, utg8_l6+3),"d"); |)}># */
  57994   /* #<{(| logVar(bPtr2IdxUTF8(utg8_l6, utg8_l6, utg8_l6+10),"d"); |)}># */
  57995   /* #<{(| logVar(bPtr2IdxUTF8(utg8_l6, utg8_l6, utg8_l6+11),"d"); |)}># */
  57996   /* #<{(| logVar(bPtr2IdxUTF8(utg8_l6, utg8_l6, utg8_l6+12),"d"); |)}># */
  57997   /* #<{(| logVar(bLPtr2IdxUTF8(utg8_l6, strlen(utg8_l6)+1, utg8_l6+strlen(utg8_l6)+1),"d"); |)}># */
  57998   /* #<{(| logVar(bLPtr2IdxUTF8(utg8_l6, strlen(utg8_l6)+1, utg8_l6),"d"); |)}># */
  57999   /* #<{(| logVar(bLPtr2IdxUTF8(utg8_l6, strlen(utg8_l6)+1, utg8_l6+1),"d"); |)}># */
  58000   /* #<{(| logVar(bLPtr2IdxUTF8(utg8_l6, strlen(utg8_l6)+1, utg8_l6+2),"d"); |)}># */
  58001   /* #<{(| logVar(bLPtr2IdxUTF8(utg8_l6, strlen(utg8_l6)+1, utg8_l6+3),"d"); |)}># */
  58002   /* #<{(| logVar(bLPtr2IdxUTF8(utg8_l6, strlen(utg8_l6)+1, utg8_l6+10),"d"); |)}># */
  58003   /* #<{(| logVar(bLPtr2IdxUTF8(utg8_l6, strlen(utg8_l6)+1, utg8_l6+11),"d"); |)}># */
  58004   /* #<{(| logVar(bLPtr2IdxUTF8(utg8_l6, strlen(utg8_l6)+1, utg8_l6+12),"d"); |)}># */
  58005   /* #<{(| logVar(bLPtr2IdxUTF8(utg8_l6bad, strlen(utg8_l6)+1, utg8_l6bad+strlen(utg8_l6)+1),"d"); |)}># */
  58006   /* #<{(| logVar(bLPtr2IdxUTF8(utg8_l6bad, strlen(utg8_l6)+1, utg8_l6bad),"d"); |)}># */
  58007   /* #<{(| logVar(bLPtr2IdxUTF8(utg8_l6bad, strlen(utg8_l6)+1, utg8_l6bad+1),"d"); |)}># */
  58008   /* #<{(| logVar(bLPtr2IdxUTF8(utg8_l6bad, strlen(utg8_l6)+1, utg8_l6bad+2),"d"); |)}># */
  58009   /* #<{(| logVar(bLPtr2IdxUTF8(utg8_l6bad, strlen(utg8_l6)+1, utg8_l6bad+3),"d"); |)}># */
  58010   /* #<{(| logVar(bLPtr2IdxUTF8(utg8_l6bad, strlen(utg8_l6)+1, utg8_l6bad+10),"d"); |)}># */
  58011   /* #<{(| logVar(bLPtr2IdxUTF8(utg8_l6bad, strlen(utg8_l6)+1, utg8_l6bad+11),"d"); |)}># */
  58012   /* #<{(| logVar(bLPtr2IdxUTF8(utg8_l6bad, strlen(utg8_l6)+1, utg8_l6bad+12),"d"); |)}># */
  58013   /* // negative index */
  58014   /* #<{(| loghex(utg8_l6, strlen(utg8_l6)+1);put |)}># */
  58015   /* #<{(| logVar(ptr2IdxUTF8(utg8_l6+strlen(utg8_l6),utg8_l6),"d"); |)}># */
  58016   /* #<{(| logVar(ptr2IdxUTF8(utg8_l6+strlen(utg8_l6),utg8_l6+1),"d"); |)}># */
  58017   /* #<{(| logVar(ptr2IdxUTF8(utg8_l6+strlen(utg8_l6),utg8_l6+2),"d"); |)}># */
  58018   /* #<{(| logVar(ptr2IdxUTF8(utg8_l6+strlen(utg8_l6),utg8_l6+3),"d"); |)}># */
  58019   /* #<{(| logVar(ptr2IdxUTF8(utg8_l6+strlen(utg8_l6),utg8_l6+9),"d"); |)}># */
  58020   /* #<{(| logVar(ptr2IdxUTF8(utg8_l6+strlen(utg8_l6),utg8_l6+10),"d"); |)}># */
  58021   /* #<{(| logVar(ptr2IdxUTF8(utg8_l6+strlen(utg8_l6),utg8_l6+11),"d"); |)}># */
  58022   /* #<{(| logVar(ptr2IdxUTF8(utg8_l6+strlen(utg8_l6),utg8_l6+12),"d"); |)}># */
  58023   /* #<{(| logVar(bPtr2IdxUTF8(utg8_l6, utg8_l6+strlen(utg8_l6),utg8_l6-1),"d"); |)}># */
  58024   /* #<{(| logVar(bPtr2IdxUTF8(utg8_l6, utg8_l6+strlen(utg8_l6),utg8_l6),"d"); |)}># */
  58025   /* #<{(| logVar(bPtr2IdxUTF8(utg8_l6, utg8_l6+strlen(utg8_l6),utg8_l6+1),"d"); |)}># */
  58026   /* #<{(| logVar(bPtr2IdxUTF8(utg8_l6, utg8_l6+strlen(utg8_l6),utg8_l6+2),"d"); |)}># */
  58027   /* #<{(| logVar(bPtr2IdxUTF8(utg8_l6, utg8_l6+strlen(utg8_l6),utg8_l6+3),"d"); |)}># */
  58028   /* #<{(| logVar(bPtr2IdxUTF8(utg8_l6, utg8_l6+strlen(utg8_l6),utg8_l6+9),"d"); |)}># */
  58029   /* #<{(| logVar(bPtr2IdxUTF8(utg8_l6, utg8_l6+strlen(utg8_l6),utg8_l6+10),"d"); |)}># */
  58030   /* #<{(| logVar(bPtr2IdxUTF8(utg8_l6, utg8_l6+strlen(utg8_l6),utg8_l6+11),"d"); |)}># */
  58031   /* #<{(| logVar(bPtr2IdxUTF8(utg8_l6, utg8_l6+strlen(utg8_l6),utg8_l6+12),"d"); |)}># */
  58032   /* #<{(| logVar(bLPtr2NegIdxUTF8(utg8_l6, 1+strlen(utg8_l6),utg8_l6-1),"d"); |)}># */
  58033   /* #<{(| logVar(bLPtr2NegIdxUTF8(utg8_l6, 1+strlen(utg8_l6),utg8_l6),"d"); |)}># */
  58034   /* #<{(| logVar(bLPtr2NegIdxUTF8(utg8_l6, 1+strlen(utg8_l6),utg8_l6+1),"d"); |)}># */
  58035   /* #<{(| logVar(bLPtr2NegIdxUTF8(utg8_l6, 1+strlen(utg8_l6),utg8_l6+2),"d"); |)}># */
  58036   /* #<{(| logVar(bLPtr2NegIdxUTF8(utg8_l6, 1+strlen(utg8_l6),utg8_l6+3),"d"); |)}># */
  58037   /* #<{(| logVar(bLPtr2NegIdxUTF8(utg8_l6, 1+strlen(utg8_l6),utg8_l6+9),"d"); |)}># */
  58038   /* #<{(| logVar(bLPtr2NegIdxUTF8(utg8_l6, 1+strlen(utg8_l6),utg8_l6+10),"d"); |)}># */
  58039   /* #<{(| logVar(bLPtr2NegIdxUTF8(utg8_l6, 1+strlen(utg8_l6),utg8_l6+11),"d"); |)}># */
  58040   /* #<{(| logVar(bLPtr2NegIdxUTF8(utg8_l6, 1+strlen(utg8_l6),utg8_l6+12),"d"); |)}># */
  58041   /* #<{(| logVar(bLPtr2NegIdxUTF8(utg8_l6bad+1, 1+strlen(utg8_l6),utg8_l6bad-1),"d"); |)}># */
  58042   /* #<{(| logVar(bLPtr2NegIdxUTF8(utg8_l6bad+1, 1+strlen(utg8_l6),utg8_l6bad),"d"); |)}># */
  58043   /* #<{(| logVar(bLPtr2NegIdxUTF8(utg8_l6bad+1, 1+strlen(utg8_l6),utg8_l6bad+1),"d"); |)}># */
  58044   /* #<{(| logVar(bLPtr2NegIdxUTF8(utg8_l6bad+1, 1+strlen(utg8_l6),utg8_l6bad+2),"d"); |)}># */
  58045   /* #<{(| logVar(bLPtr2NegIdxUTF8(utg8_l6bad+1, 1+strlen(utg8_l6),utg8_l6bad+3),"d"); |)}># */
  58046   /* #<{(| logVar(bLPtr2NegIdxUTF8(utg8_l6bad+1, 1+strlen(utg8_l6),utg8_l6bad+9),"d"); |)}># */
  58047   /* #<{(| logVar(bLPtr2NegIdxUTF8(utg8_l6bad+1, 1+strlen(utg8_l6),utg8_l6bad+10),"d"); |)}># */
  58048   /* #<{(| logVar(bLPtr2NegIdxUTF8(utg8_l6bad+1, 1+strlen(utg8_l6),utg8_l6bad+11),"d"); |)}># */
  58049   /* #<{(| logVar(bLPtr2NegIdxUTF8(utg8_l6bad+1, 1+strlen(utg8_l6),utg8_l6bad+12),"d"); |)}># */
  58050   /* #<{(| logPtr(idx2PtrUTF8(utg8_l6, 0)); |)}># */
  58051   /* #<{(| logPtr(idx2PtrUTF8(utg8_l6, 1)); |)}># */
  58052   /* #<{(| logPtr(idx2PtrUTF8(utg8_l6, 2)); |)}># */
  58053   /* #<{(| logPtr(idx2PtrUTF8(utg8_l6, 3)); |)}># */
  58054   /* #<{(| logPtr(idx2PtrUTF8(utg8_l6, 4)); |)}># */
  58055   /* #<{(| logPtr(idx2PtrUTF8(utg8_l6, 5)); |)}># */
  58056   /* #<{(| logPtr(idx2PtrUTF8(utg8_l6, 6)); |)}># */
  58057   /* #<{(| logPtr(idx2PtrUTF8(utg8_l6, 7)); |)}># */
  58058   /* #<{(| logPtr(idx2PtrUTF8(utg8_l6, -1)); |)}># */
  58059   /* #<{(| logPtr(idx2PtrUTF8(utg8_l6, -2)); |)}># */
  58060   /* #<{(| logPtr(idx2PtrUTF8(utg8_l6, -3)); |)}># */
  58061   /* #<{(| logPtr(idx2PtrUTF8(utg8_l6, -4)); |)}># */
  58062   /* #<{(| logPtr(idx2PtrUTF8(utg8_l6, -5)); |)}># */
  58063   /* #<{(| logPtr(idx2PtrUTF8(utg8_l6, -6)); |)}># */
  58064   /* #<{(| logPtr(idx2PtrUTF8(utg8_l6, -7)); |)}># */
  58065   /* #<{(| logPtr(idx2PtrUTF8(utg8_l6, -8)); |)}># */
  58066   /* puts(utg8_l6); */
  58067   /* puts(utf8); */
  58068   /* logVar(bLLenUTF8(aq,sizeof(aq)), "zu"); */
  58069   /* logVar(isUTF8(aq), "b"); */
  58070   /* logVar(isCodeUTF8(&aq[1]), "b"); */
  58071   /* logVar(isCodeUTF8(&aq[2]), "b"); */
  58072   /* logVar(isCodeUTF8(&aq[3]), "b"); */
  58073   /* logVar(isCodeUTF8(&aq[4]), "b"); */
  58074   /*  */
  58075   /* char *next = nextUTF8(utf8_l6); */
  58076   /* puts(next); */
  58077   /* puts(nxtCodeUTF8(next)); */
  58078   /*  */
  58079   /*  */
  58080   /* pLogMask(0x1, LOG_INFO, "mask"); */
  58081   /* logMask = 0; */
  58082   /* puts("__"); */
  58083   /* pLogMask(0x1, LOG_INFO, "mask"); */
  58084   /* puts("--"); */
  58085   /*  */
  58086   /* #define group1 0x03 */
  58087   /* #define group11 0x01 */
  58088   /* #define group12 0x02 */
  58089   /* #define group2 0x04 */
  58090   /* logMask = group11; */
  58091   /* logMI(group1, "is shown when logMask has bit 0 or 1 set"); */
  58092   /* logMI(group11, "is shown when logMask has bit 0 set"); */
  58093   /* logMI(group12, "is shown when logMask has bit 1 set"); */
  58094   /* logMI(group2, "is shown when logMask has bit 2 set"); */
  58095   /*  */
  58096   /* setMaxLogLevel(LOG_DISABLE); */
  58097   /* pLog(LOG_CRITICAL, "QWE"); */
  58098   /* setMaxLogLevel(LOG_INFO); */
  58099   /*  */
  58100   /* puts(getHomePath()); */
  58101   /*  */
  58102   /* printf("k = %" PRIu64 "\n", EXTRACT(k,1,1)); */
  58103   /*  */
  58104   /* staticArrayT(type, u32, 10); */
  58105   /* type $; */
  58106   /* staticArrayInit($); */
  58107   /*  */
  58108   /* //staticArrayElemType($) $E; */
  58109   /*  */
  58110   /* range(i, 5) { */
  58111   /*   staticArrayPush($); */
  58112   /*   staticArrayLast($) = i; */
  58113   /* } */
  58114   /*  */
  58115   /* //staticArrayForEach($, S UNUSED) S = 0; */
  58116   /* //staticArrayEnumerate($, isa, S UNUSED) S = 0; */
  58117   /*  */
  58118   /* rangeInf(i) { */
  58119   /*   puts("infinity"); */
  58120   /*   if i = 5 */
  58121   /*     break; */
  58122   /* } */
  58123   /*  */
  58124   /* staticArrayWriteFilename($, "test.bin"); */
  58125   /*  */
  58126   /* staticArrayDequeue($); */
  58127   /*  */
  58128   /* logVar($.head, "d"); */
  58129   /* logVar($.last, "d"); */
  58130   /*  */
  58131   /* staticArrayReadFilename($, "test.bin"); */
  58132   /*  */
  58133   /* logVar($.head, "d"); */
  58134   /* logVar($.last, "d"); */
  58135   /*  */
  58136   /* circularDown(i, 2, 4) { */
  58137   /*   printf("%d\n", (int)i); */
  58138   /* } */
  58139   /*  */
  58140   /* setLogMode(LOG_VERBOSE); */
  58141   /* logI("%k%KRGB color" RST, 0x99EEFF, 0x666666); */
  58142   /* bool bl = true; */
  58143   /* logI("%b", bl); */
  58144   /*  */
  58145   /* intSlabt b; */
  58146   /* slabInitCount(&b, 25); */
  58147   /* #<{(|slabResize(&b, 500); */
  58148   /*  */
  58149   /* slabReadFilename(&b, "slab.bin"); */
  58150   /* printf("count %ld\n", slabCount(&b)); */
  58151   /* printf("max count %ld\n", slabMaxCount(&b)); */
  58152   /*  */
  58153   /* range(i, (size_t)slabCount(&b)) { */
  58154   /*   printf("%d\n", slabAt(&b, i)); */
  58155   /* } */
  58156   /* XSUCCESS */
  58157   /*  */
  58158   /* range(i, 70) { */
  58159   /*   slabAppend(&b, i); */
  58160   /* } */
  58161   /* printf("count %ld\n", slabCount(&b)); */
  58162   /* FILE *ff; */
  58163   /* ff = fopen("slab.bin", "w"); */
  58164   /* slabWrite(&b, ff); */
  58165   /* fclose(ff); */
  58166   /* XSUCCESS|)}># */
  58167   /*  */
  58168   /* slabAppend(&b, 1); */
  58169   /* slabAppend(&b, 2); */
  58170   /*  */
  58171   /* //slabForEach(&b, S UNUSED) S = 0; */
  58172   /* //slabEnumerate(&b, isl, S UNUSED) S = 0; */
  58173   /*  */
  58174   /* printf("size %d\n", slabSz); */
  58175   /*  */
  58176   /* slabAt(&b, 1) = 3 */
  58177   /* int *ePtr = slabPtr(&b, 1); */
  58178   /* printf("element 1: %"PRIi32"\n", *ePtr); */
  58179   /* printf("get %"PRIi32"\n", slabAt(&b, 0)); */
  58180   /* printf("pop %"PRIi32"\n", slabPop(&b)); */
  58181   /* printf("dQ  %"PRIi32"\n", slabDequeue(&b)); */
  58182   /* slabFirstIndex(&b) = slabMaxCount(&b); */
  58183   /* slabLastIndexVar(&b) = slabMaxCount(&b); */
  58184   /* slabPrepend(&b, 10); */
  58185   /* printf("get %"PRIi32"\n", slabAt(&b, 0)); */
  58186   /* printf("get %"PRIi32"\n", slabAt(&b, slabLastIndex(&b))); */
  58187   /*  */
  58188   /* printf("count %ld\n", slabCount(&b)); */
  58189   /*  */
  58190   /* slabFree(&b); */
  58191   /*  */
  58192   /* //slabElemType(&b) slabE; */
  58193   /*  */
  58194   /* XSUCCESS */
  58195   /*  */
  58196   /* char **bt = btrace(); */
  58197   /* pError0(listPrintS(bt)); */
  58198   /* listFreeS(bt); */
  58199   /*  */
  58200   /* logPtr(bt); */
  58201   /*  */
  58202   /* bttt(); */
  58203   /* freeRealProgPath(); */
  58204   /* XSUCCESS */
  58205   /*  */
  58206   /* stopwatchStart; */
  58207   /* stopwatchLog; */
  58208   /* stopwatchStart; */
  58209   /* stopwatchLogUs; */
  58210   /*  */
  58211   /* timeNs(); */
  58212   /*  */
  58213   /* timeUs(loghex(a, 10)); */
  58214   /*  */
  58215   /* intDynt bbb UNUSED; */
  58216   /* //dArrayForEach(&bbb, S UNUSED) S = 0; */
  58217   /* //dArrayEnumerate(&bbb, ida, S UNUSED) S = 0; */
  58218   /* //dArrayElemType(&bbb) bbbE; */
  58219   /* #<{(| */
  58220   /* intDynt b; */
  58221   /* dArrayInitCount(&b, 25); */
  58222   /* dArrayResize(&b, 500); */
  58223   /*  */
  58224   /* dArrayReadFilename(&b, "darray.bin"); */
  58225   /* printf("count %ld\n", dArrayCount(&b)); */
  58226   /*  */
  58227   /* range(i, (size_t)dArrayCount(&b)) { */
  58228   /*   printf("%d\n", dArrayAt(&b, i)); */
  58229   /* } */
  58230   /* XSUCCESS */
  58231   /*  */
  58232   /* range(i, 70) { */
  58233   /*   dArrayAppend(&b, i); */
  58234   /* } */
  58235   /* printf("count %ld\n", dArrayCount(&b)); */
  58236   /* FILE *ff; */
  58237   /* ff = fopen("darray.bin", "w"); */
  58238   /* dArrayWrite(&b, ff); */
  58239   /* fclose(ff); */
  58240   /* XSUCCESS */
  58241   /*  */
  58242   /* dArrayAppend(&b, 1); */
  58243   /* dArrayAppend(&b, 2); */
  58244   /*  */
  58245   /* printf("size %d\n", dArraySz); */
  58246   /*  */
  58247   /* dArrayAt(&b, 1) = 3 */
  58248   /* int *ePtr = dArrayPtr(&b, 1); */
  58249   /* printf("element 1: %"PRIi32"\n", *ePtr); */
  58250   /* printf("get %"PRIi32"\n", dArrayAt(&b, 0)); */
  58251   /* printf("pop %"PRIi32"\n", dArrayPop(&b)); */
  58252   /* printf("dQ  %"PRIi32"\n", dArrayDequeue(&b)); */
  58253   /* dArrayFirstIndex(&b) = dArrayMaxCount(&b); */
  58254   /* dArrayLastIndexVar(&b) = dArrayMaxCount(&b); */
  58255   /* dArrayPrepend(&b, 10); */
  58256   /* printf("get %"PRIi32"\n", dArrayAt(&b, 0)); */
  58257   /* printf("get %"PRIi32"\n", dArrayAt(&b, dArrayLastIndex(&b))); */
  58258   /*  */
  58259   /* printf("count %ld\n", dArrayCount(&b)); */
  58260   /*  */
  58261   /* dArrayFree(&b);|)}># */
  58262   /*  */
  58263   /* #<{(| indexerT(iT, i8); |)}># */
  58264   /* #<{(| iT ii; |)}># */
  58265   /* #<{(| logVar(sizeof ii,"lu"); |)}># */
  58266   /* #<{(| logVar(sizeof(staticArrayBase),"lu"); |)}># */
  58267   /* #<{(|  |)}># */
  58268   /* #<{(| indexerInit(ii, 90); |)}># */
  58269   /* #<{(|  |)}># */
  58270   /* #<{(| int A[] = {1,5,7,9,10,65}; |)}># */
  58271   /* #<{(| A[0] = ARRAY_SIZE(A); |)}># */
  58272   /* #<{(| ssize_t bsr; |)}># */
  58273   /* #<{(|  |)}># */
  58274   /* #<{(| #define less(i, se) A[i] < se |)}># */
  58275   /* #<{(| #define equal(i, se) A[i] == se |)}># */
  58276   /* #<{(|  |)}># */
  58277   /* #<{(| BSEARCH(bsr, 65, COUNT_ELEMENTS(A), less, equal); |)}># */
  58278   /* #<{(| logVar(bsr,"zd"); |)}># */
  58279   /* #<{(| if bsr != -1 |)}># */
  58280   /* #<{(|   logVar(A[bsr],"d"); |)}># */
  58281   /*  */
  58282   /* XSUCCESS */
  58283   /*  */
  58284   /* //listPrintS(systemf("ls %s", "-ltrh")); */
  58285   /*  */
  58286   /* puts(bLGetCurrentDateYMD(a, 50)); */
  58287   /*  */
  58288   /* FILE *f = fopen("textOutTest.null", "r") */
  58289   /* logVar(fileSizeFP(f), "ld"); */
  58290   /* fclose(f); */
  58291   /*  */
  58292   /* logVar(fileSizeFP(NULL), "ld"); */
  58293   /*  */
  58294   /* // bug in cg_c */
  58295   /* #<{(| getCurrentUnixTime(); |)}># */
  58296   /* #<{(| time_t tim = strToUnixTime("2018", "%Y"); |)}># */
  58297   /* #<{(| logVar(tim, "ld"); |)}># */
  58298   /* #<{(| tim = strToUnixTime("asd", "%Y"); |)}># */
  58299   /* #<{(| logVar(tim, "ld"); |)}># */
  58300   /*  */
  58301   /* staticArrayInit(fibers.L); */
  58302   /* staticArrayPush(fibers.L); */
  58303   /* //logVar(staticArrayCount(fibers.L), "d"); */
  58304   /* staticArrayLast(fibers.L) = 10; */
  58305   /* staticArrayPush(fibers.L); */
  58306   /* staticArrayLast(fibers.L) = 11; */
  58307   /* staticArrayPush(fibers.L); */
  58308   /* staticArrayLast(fibers.L) = 12; */
  58309   /* staticArrayPush(fibers.L); */
  58310   /* staticArrayLast(fibers.L) = 13; */
  58311   /* int r = staticArrayGet(fibers.L, -1); */
  58312   /* logVar(r, "d"); */
  58313   /* r = staticArrayGet(fibers.L, 3); */
  58314   /* logVar(r, "d"); */
  58315   /* r = indexerRef(fibers.L, -1); */
  58316   /* logVar(r, "d"); */
  58317   /* r = indexerRef(fibers.L, 3); */
  58318   /* logVar(r, "d"); */
  58319   /* r = staticArrayGet(fibers.L, -2); */
  58320   /* logVar(r, "d"); */
  58321   /* r = staticArrayGet(fibers.L, 2); */
  58322   /* logVar(r, "d"); */
  58323   /* r = indexerRef(fibers.L, -2); */
  58324   /* logVar(r, "d"); */
  58325   /* r = indexerRef(fibers.L, 2); */
  58326   /* logVar(r, "d"); */
  58327   /* r = staticArrayGet(fibers.L, -3); */
  58328   /* logVar(r, "d"); */
  58329   /* r = staticArrayGet(fibers.L, 1); */
  58330   /* logVar(r, "d"); */
  58331   /* r = indexerRef(fibers.L, -3); */
  58332   /* logVar(r, "d"); */
  58333   /* r = indexerRef(fibers.L, 1); */
  58334   /* logVar(r, "d"); */
  58335   /* r = staticArrayGet(fibers.L, -4); */
  58336   /* logVar(r, "d"); */
  58337   /* r = staticArrayGet(fibers.L, 0); */
  58338   /* logVar(r, "d"); */
  58339   /* r = indexerRef(fibers.L, -4); */
  58340   /* logVar(r, "d"); */
  58341   /* r = indexerRef(fibers.L, 0); */
  58342   /* logVar(r, "d"); */
  58343   /* staticArrayDequeue(fibers.L); */
  58344   /* put */
  58345   /* r = staticArrayRef(fibers.L, -1); */
  58346   /* logVar(r, "d"); */
  58347   /* r = staticArrayRef(fibers.L, 2); */
  58348   /* logVar(r, "d"); */
  58349   /* r = indexerRef(fibers.L, -1); */
  58350   /* logVar(r, "d"); */
  58351   /* r = indexerRef(fibers.L, 2); */
  58352   /* logVar(r, "d"); */
  58353   /* r = staticArrayRef(fibers.L, -2); */
  58354   /* logVar(r, "d"); */
  58355   /* r = staticArrayRef(fibers.L, 1); */
  58356   /* logVar(r, "d"); */
  58357   /* r = indexerRef(fibers.L, -2); */
  58358   /* logVar(r, "d"); */
  58359   /* r = indexerRef(fibers.L, 1); */
  58360   /* logVar(r, "d"); */
  58361   /* r = staticArrayRef(fibers.L, -3); */
  58362   /* logVar(r, "d"); */
  58363   /* r = staticArrayRef(fibers.L, 0); */
  58364   /* logVar(r, "d"); */
  58365   /* r = indexerRef(fibers.L, -3); */
  58366   /* logVar(r, "d"); */
  58367   /* r = indexerRef(fibers.L, 0); */
  58368   /* logVar(r, "d"); */
  58369   /*  */
  58370   /* char **aList = listCreateS("11", "22", "33") */
  58371   /* char **p     = listAddrS(aList, -3); */
  58372   /* puts(*p); */
  58373   /* p     = listAddrS(aList, -1); */
  58374   /* puts(*p); */
  58375   /* p     = listAddrS(aList, 0); */
  58376   /* puts(*p); */
  58377   /* p     = listAddrS(aList, 2); */
  58378   /* puts(*p); */
  58379   /*  */
  58380   /* XSUCCESS */
  58381   /*  */
  58382   /* indexer id; */
  58383   /* indexerInit(id, 10); */
  58384   /* indexerPush(id); */
  58385   /* logVar(id.last, PRIi64); */
  58386   /* a[indexerLast(id)] = 'a'; */
  58387   /* indexerPush(id); */
  58388   /* logVar(id.last, PRIi64); */
  58389   /* a[id.last] = 'b'; */
  58390   /* indexerPush(id); */
  58391   /* a[id.last] = 0; */
  58392   /* logVar(id.last, PRIi64); */
  58393   /* indexerPop(id); */
  58394   /* logVar(id.last, PRIi64); */
  58395   /*  */
  58396   /* //passwordEnter:; */
  58397   /* char *c; */
  58398   /*  */
  58399   /* printf("P: "); */
  58400   /* c = readPasswordS() */
  58401   /* puts(c); */
  58402   /* printf("O: "); */
  58403   /* char *d = readPasswordS() */
  58404   /* puts(d); */
  58405   /* puts(c); */
  58406   /* XSUCCESS */
  58407   /*  */
  58408   /* pError0(listPrintS(walkDirDir("dirTest.null"))); */
  58409   /*  */
  58410   /* circular(i, 2, 4) { */
  58411   /*   printf("%d\n", (int)i); */
  58412   /* } */
  58413   /*  */
  58414   /* char **l2 = listCreateS("lib") */
  58415   /* listEmptyS(l); */
  58416   /* char **R = listInsertS(l, -1, l2); */
  58417   /* puts(R[0]); */
  58418   /*  */
  58419   /* pErrorNULL(injectS("s", -2, 'D')); */
  58420   /*  */
  58421   /* c = strdup("  SHeePY") */
  58422   /* pErrorNULL(iLTrimS(&c)); */
  58423   /* printf(">%s<\n",c); */
  58424   /* free(c); */
  58425   /*  */
  58426   /* pError0(copy("dirTest.null", "..")); */
  58427   /*  */
  58428   /* puts(getProgPath()); */
  58429   /* initLibsheepy("test"); */
  58430   /* puts(getProgPath()); */
  58431   /*  */
  58432   /* puts( EVA(c, normalizePath("/wef/./../")) ); */
  58433   /* free c */
  58434   /* puts(__func__); */
  58435   /* AT; */
  58436   /*  */
  58437   /* pErrorNULL(iCatS(a, "qwee ", "wefwef", "--1`21`2123")); */
  58438   /* puts(a); */
  58439   /*  */
  58440   /* XSUCCESS */
  58441   /*  */
  58442   /* rangeDown(i, 10) */
  58443   /*   printf("%ld\n", i); */
  58444   /*  */
  58445   /* XSUCCESS */
  58446   /*  */
  58447   /* initLibsheepy(argv[0]); */
  58448   /* puts(getProgPath()); */
  58449   /*  */
  58450   /* //mkdirParents("rmAllTest.null/null"); */
  58451   /* k = rmAll("link"); */
  58452   /* logVar(k, PRIi64); */
  58453   /*  */
  58454   /* forEachS(l, L) */
  58455   /*   free L */
  58456   /* forEachS(l, L) */
  58457   /*   free L */
  58458   /*  */
  58459   /* XSUCCESS */
  58460   /*  */
  58461   /* puts("readDir"); */
  58462   /* put */
  58463   /* pError0(listPrintS(readDir("."))); */
  58464   /* puts("readDirDir"); */
  58465   /* put */
  58466   /* pError0(listPrintS(readDirDir("."))); */
  58467   /* puts("readDirAll"); */
  58468   /* put */
  58469   /* pError0(listPrintS(readDirAll("."))); */
  58470   /*  */
  58471   /* pError0(isNumber("-12.3")); */
  58472   /* XSUCCESS */
  58473   /*  */
  58474   /* #<{(| int r = 0 |)}># */
  58475   /* #<{(| tryV(r, 0) { |)}># */
  58476   /* #<{(|   throwV(0, 10); |)}># */
  58477   /* #<{(|   puts("does not print"); |)}># */
  58478   /* #<{(| } |)}># */
  58479   /* #<{(| else |)}># */
  58480   /* #<{(|   printf("except value %d\n", r); |)}># */
  58481   /*  */
  58482   /* printf("%" PRIu64 "\n", getMonotonicTime()); */
  58483   /*  */
  58484   /* #<{(| AArgs Aa; |)}># */
  58485   /* #<{(| Aa.a = 0 |)}># */
  58486   /* #<{(| A(&Aa); |)}># */
  58487   /* //AB(); */
  58488   /*  */
  58489   /* AArgs Aa; */
  58490   /* BArgs Ba; */
  58491   /*  */
  58492   /* initLibsheepy(argv[0]); */
  58493   /* #<{(| staticArrayInit(fibers.L); |)}># */
  58494   /* #<{(| staticArrayInit(fibers.startL); |)}># */
  58495   /*  */
  58496   /* puts(__func__); */
  58497   /* Aa.a    = 0 */
  58498   /* fiberAdd(&Aa, 1, fiberA); */
  58499   /*  */
  58500   /* puts(__func__); */
  58501   /* Ba.a = 1 */
  58502   /* Ba.b = 2 */
  58503   /* fiberAdd(&Ba, 2, fiberB); */
  58504   /*  */
  58505   /* scheduler(); */
  58506   /*  */
  58507   /* #<{(| if !setjmp(buf) |)}># */
  58508   /* #<{(|   longjmp(buf,1); |)}># */
  58509   /* #<{(| else |)}># */
  58510   /* #<{(|   puts("except"); |)}># */
  58511   /*  */
  58512   /* XSUCCESS */
  58513   /*  */
  58514   /* pError0(copy("cov.info", "qwe")); */
  58515   /* pError0(copy("dirTest.null/", "mkdirTest.null/null/")); */
  58516   /* pError0(copy("dirTest.null", "mkdirTest.null/")); */
  58517   /*  */
  58518   /* initLibsheepy(argv[0]); */
  58519   /*  */
  58520   /* //NO - limited to 2GB files - sendfile(0, 0, 0, 10); */
  58521   /* setLogFile(NULL); */
  58522   /*  */
  58523   /* //char *s = formatS("%s/%d\n", "qwd",645); */
  58524   /* char *s = NULL */
  58525   /* s = formatS("%s/%d\n", "qwd",645); */
  58526   /* //char *s = NULL; */
  58527   /* //pError(asprintf(&s, "%s/%s\n", "qwd","qw")); */
  58528   /* puts(s); */
  58529   /*  */
  58530   /* pError0(listPrintS(walkDirAll("."))); */
  58531   /* printf("%o\n", 0777 & ~getUmask()); */
  58532   /* pError0(mkdirParents("mkdirTest.null/null")); */
  58533   /*  */
  58534   /* #<{(| pErrorCmd(isDir("json"), == false, pLog(LOG_WARNING, "json is NOT dir")) |)}># */
  58535   /* #<{(| else |)}># */
  58536   /* #<{(|   pLog(LOG_INFO, "json is dir"); |)}># */
  58537   /* #<{(|  |)}># */
  58538   /* #<{(| pErrorCmd(isDir("qweqwe"), == false, pLog(LOG_WARNING, "qweqwe is NOT dir")) |)}># */
  58539   /* #<{(| else |)}># */
  58540   /* #<{(|   pLog(LOG_INFO, "qweqwe is dir"); |)}># */
  58541   /*  */
  58542   /*  */
  58543   /* setLogMode(LOG_CONCISE); */
  58544   /* pLog(LOG_CRITICAL, "1"); */
  58545   /* pLog(LOG_ERROR, "1"); */
  58546   /* pLog(LOG_WARNING, "1"); */
  58547   /* pLog(LOG_INFO, "1"); */
  58548   /* pLog(LOG_INVALID, "1"); */
  58549   /* pLog(10, "1"); */
  58550   /*  */
  58551   /* //uint32_t x; */
  58552   /* //_rdrand32_step(&x); */
  58553   /* //setHardwareRandom(); */
  58554   /*  */
  58555   /* //pErrorResult(k, randomWordF(), == 0) */
  58556   /* //pErrorResultCmd(k, randomWordF(), == 0, return(1) */
  58557   /* setSoftwareRandom(); */
  58558   /* pErrorResultCmd(k, randomWordF(), == 0, XFAILURE) */
  58559   /* logVar(k, PRIu64) */
  58560   /* printf("%" PRIu64 "\n\n", randomWordF()); */
  58561   /*  */
  58562   /* puts(getProgPath()); */
  58563   /* puts(getRealProgPath()); */
  58564   /* freeRealProgPath(); */
  58565   /* //l = readText("/home/remy/tmp/auth.log"); */
  58566   /*  */
  58567   /* #<{(| time_t t = getModificationTime("exe") |)}># */
  58568   /* #<{(| char *ti = timeToS(t) |)}># */
  58569   /* #<{(| logNFree(ti); |)}># */
  58570   /* #<{(| logNFree(timeToS(0)); |)}># */
  58571   /*  */
  58572   /*  */
  58573   /* #<{(| char *s = readS() |)}># */
  58574   /* #<{(| puts(s); |)}># */
  58575   /* #<{(| puts("Read enter"); |)}># */
  58576   /* #<{(| readEnter(); |)}># */
  58577   /*  */
  58578   /* //bool cond = true */
  58579   /* //puts(stringifyExpr(cond)); */
  58580   /*  */
  58581   /* XSUCCESS */
  58582   /*  */
  58583   /*  */
  58584   /* time_t t = getModificationTime("exe"); */
  58585   /* pError0(getModificationTime("wrong")) */
  58586   /*  */
  58587   /* pError(setModificationTime("exe", t)) */
  58588   /* pError(setModificationTime("wrong",t)) */
  58589   /*  */
  58590   /*  */
  58591   /* if equalModificationTimes("exe", "exe") */
  58592   /*   puts("exe ="); */
  58593   /*  */
  58594   /* if equalModificationTimes("exe", "libsheepy.h") */
  58595   /*   puts("exe = ls h"); */
  58596   /*  */
  58597   /* l = listCreateS("fdfg", "@#$"); */
  58598   /*  */
  58599   /* forEachS(l, e) */
  58600   /*   puts(e); */
  58601   /* enumerateS(l, E, i) */
  58602   /*   print '%d %s', (int)i, E */
  58603   /*  */
  58604   /* int *er = NULL */
  58605   /* cast(char **, tt, er) */
  58606   /* tt = NULL */
  58607   /* er = (int*)tt */
  58608   /*  */
  58609   /* char *dum = strdup("ls dasd"); */
  58610   /* pErrorNot0(systemNFree(dum)); */
  58611   /*  */
  58612   /* // no ~/ */
  58613   /* char *s1; */
  58614   /* s1 = expandHome("sheepy"); */
  58615   /* //ck_assert_str_eq(s1, "sheepy"); */
  58616   /* free(s1); */
  58617   /* // NULL path */
  58618   /* //ck_assert_ptr_eq(expandHome(NULL), NULL); */
  58619   /*  */
  58620   /* s1 = strdup("//w//ef//"); */
  58621   /* pErrorNULL(iUniqS(&s1, '/')); */
  58622   /* puts(s1); */
  58623   /* puts(uniqS("wef", '/')); */
  58624   /* puts(uniqS("//w//ef//", '/')); */
  58625   /*  */
  58626   /* l  = NULL */
  58627   /* *l = (char *)1; */
  58628 
  58629   XSUCCESS;
  58630 }
  58631