From 4c0036053a36678747adfd06777cef39752ca9a4 Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Sat, 29 Jun 2002 20:31:02 +0000 Subject: [PATCH] Add strong/weak pattern value binding, add known charsets for automatic lang computation --- src/fccfg.c | 3 +- src/fccharset.c | 40 +- src/fcfreetype.c | 235 +++++- src/fcint.h | 15 +- src/fcknownsets.h | 1895 +++++++++++++++++++++++++++++++++++++++++++++ src/fcmatch.c | 112 ++- src/fcname.c | 7 +- src/fcpat.c | 3 +- 8 files changed, 2222 insertions(+), 88 deletions(-) create mode 100644 src/fcknownsets.h diff --git a/src/fccfg.c b/src/fccfg.c index 6191324..9c638a3 100644 --- a/src/fccfg.c +++ b/src/fccfg.c @@ -1,5 +1,5 @@ /* - * $XFree86: xc/lib/fontconfig/src/fccfg.c,v 1.14 2002/06/20 03:43:09 keithp Exp $ + * $XFree86: xc/lib/fontconfig/src/fccfg.c,v 1.15 2002/06/21 06:14:45 keithp Exp $ * * Copyright © 2000 Keith Packard, member of The XFree86 Project, Inc. * @@ -926,6 +926,7 @@ FcConfigValues (FcPattern *p, FcExpr *e) l->value = FcConfigEvaluate (p, e); l->next = 0; } + l->binding = FcValueBindingWeak; while (l && l->value.type == FcTypeVoid) { FcValueList *next = l->next; diff --git a/src/fccharset.c b/src/fccharset.c index cc47126..c5941ee 100644 --- a/src/fccharset.c +++ b/src/fccharset.c @@ -1,5 +1,5 @@ /* - * $XFree86: xc/lib/fontconfig/src/fccharset.c,v 1.12 2002/06/21 06:14:45 keithp Exp $ + * $XFree86: xc/lib/fontconfig/src/fccharset.c,v 1.13 2002/06/26 22:56:51 keithp Exp $ * * Copyright © 2001 Keith Packard, member of The XFree86 Project, Inc. * @@ -858,7 +858,7 @@ static int FcCharLeafTotal; static int FcCharLeafUsed; static FcCharLeaf * -FcNameParseBuildLeaf (FcCharLeaf *leaf) +FcCharSetFreezeLeaf (FcCharLeaf *leaf) { static FcCharLeafEnt *hashTable[FC_CHAR_LEAF_HASH_SIZE]; FcChar32 hash = FcCharLeafHash (leaf); @@ -915,7 +915,7 @@ static int FcCharSetUsed; static int FcCharSetTotalEnts, FcCharSetUsedEnts; static FcCharSet * -FcNameParseBuildSet (FcCharSet *fcs) +FcCharSetFreezeBase (FcCharSet *fcs) { static FcCharSetEnt *hashTable[FC_CHAR_SET_HASH_SIZE]; FcChar32 hash = FcCharSetHash (fcs); @@ -967,6 +967,36 @@ FcNameParseBuildSet (FcCharSet *fcs) return &ent->set; } +FcCharSet * +FcCharSetFreeze (FcCharSet *fcs) +{ + FcCharSet *b; + FcCharSet *n = 0; + FcCharLeaf *l; + int i; + + b = FcCharSetCreate (); + if (!b) + goto bail0; + for (i = 0; i < fcs->num; i++) + { + l = FcCharSetFreezeLeaf (fcs->leaves[i]); + if (!l) + goto bail1; + if (!FcCharSetInsertLeaf (b, fcs->numbers[i] << 8, l)) + goto bail1; + } + n = FcCharSetFreezeBase (b); +bail1: + if (b->leaves) + free (b->leaves); + if (b->numbers) + free (b->numbers); + free (b); +bail0: + return n; +} + FcCharSet * FcNameParseCharSet (FcChar8 *string) { @@ -995,7 +1025,7 @@ FcNameParseCharSet (FcChar8 *string) } if (bits) { - leaf = FcNameParseBuildLeaf (&temp); + leaf = FcCharSetFreezeLeaf (&temp); if (!leaf) goto bail1; if (!FcCharSetInsertLeaf (c, ucs4, leaf)) @@ -1023,7 +1053,7 @@ FcNameParseCharSet (FcChar8 *string) sizeof (FcCharSet) * FcCharSetUsed + FcCharSetUsedEnts * (sizeof (FcCharLeaf *) + sizeof (FcChar16))); #endif - n = FcNameParseBuildSet (c); + n = FcCharSetFreezeBase (c); bail1: if (c->leaves) free (c->leaves); diff --git a/src/fcfreetype.c b/src/fcfreetype.c index 1005090..ff5e5fa 100644 --- a/src/fcfreetype.c +++ b/src/fcfreetype.c @@ -1,5 +1,5 @@ /* - * $XFree86: $ + * $XFree86: xc/lib/fontconfig/src/fcfreetype.c,v 1.4 2002/05/31 23:21:25 keithp Exp $ * * Copyright © 2001 Keith Packard, member of The XFree86 Project, Inc. * @@ -29,13 +29,14 @@ #include #include #include +#include "fcknownsets.h" static const struct { int bit; FcChar8 *name; } FcCodePageRange[] = { { 0, (FcChar8 *) FC_LANG_LATIN_1 }, - { 1, (FcChar8 *) FC_LANG_LATIN_2_EASTERN_EUROPE }, + { 1, (FcChar8 *) FC_LANG_LATIN_2 }, { 2, (FcChar8 *) FC_LANG_CYRILLIC }, { 3, (FcChar8 *) FC_LANG_GREEK }, { 4, (FcChar8 *) FC_LANG_TURKISH }, @@ -75,6 +76,94 @@ static const struct { #define NUM_CODE_PAGE_RANGE (sizeof FcCodePageRange / sizeof FcCodePageRange[0]) +static const struct { + const FcCharSet *set; + FcChar32 size; + FcChar32 missing_tolerance; + FcChar8 *name; +} FcCodePageSet[] = { + { + &fcCharSet_Latin1_1252, + fcCharSet_Latin1_1252_size, + 8, + (FcChar8 *) FC_LANG_LATIN_1, + }, + { + &fcCharSet_Latin2_1250, + fcCharSet_Latin2_1250_size, + 8, + (FcChar8 *) FC_LANG_LATIN_2, + }, + { + &fcCharSet_Cyrillic_1251, + fcCharSet_Cyrillic_1251_size, + 16, + (FcChar8 *) FC_LANG_CYRILLIC, + }, + { + &fcCharSet_Greek_1253, + fcCharSet_Greek_1253_size, + 8, + (FcChar8 *) FC_LANG_GREEK, + }, + { + &fcCharSet_Turkish_1254, + fcCharSet_Turkish_1254_size, + 16, + (FcChar8 *) FC_LANG_TURKISH, + }, + { + &fcCharSet_Hebrew_1255, + fcCharSet_Hebrew_1255_size, + 16, + (FcChar8 *) FC_LANG_HEBREW, + }, + { + &fcCharSet_Arabic_1256, + fcCharSet_Arabic_1256_size, + 16, + (FcChar8 *) FC_LANG_ARABIC, + }, + { + &fcCharSet_Windows_Baltic_1257, + fcCharSet_Windows_Baltic_1257_size, + 16, + (FcChar8 *) FC_LANG_WINDOWS_BALTIC, + }, + { + &fcCharSet_Thai_874, + fcCharSet_Thai_874_size, + 16, + (FcChar8 *) FC_LANG_THAI, + }, + { + &fcCharSet_Japanese_932, + fcCharSet_Japanese_932_size, + 500, + (FcChar8 *) FC_LANG_JAPANESE, + }, + { + &fcCharSet_SimplifiedChinese_936, + fcCharSet_SimplifiedChinese_936_size, + 500, + (FcChar8 *) FC_LANG_SIMPLIFIED_CHINESE, + }, + { + &fcCharSet_Korean_949, + fcCharSet_Korean_949_size, + 500, + (FcChar8 *) FC_LANG_KOREAN_WANSUNG, + }, + { + &fcCharSet_TraditionalChinese_950, + fcCharSet_TraditionalChinese_950_size, + 500, + (FcChar8 *) FC_LANG_TRADITIONAL_CHINESE, + }, +}; + +#define NUM_CODE_PAGE_SET (sizeof FcCodePageSet / sizeof FcCodePageSet[0]) + FcPattern * FcFreeTypeQuery (const FcChar8 *file, int id, @@ -90,6 +179,9 @@ FcFreeTypeQuery (const FcChar8 *file, FT_Library ftLibrary; const FcChar8 *family; TT_OS2 *os2; + FcBool hasLang = FcFalse; + FcChar32 codepoints; + FcBool matchCodePage[NUM_CODE_PAGE_SET]; if (FT_Init_FreeType (&ftLibrary)) return 0; @@ -159,15 +251,49 @@ FcFreeTypeQuery (const FcChar8 *file, goto bail1; #endif + /* + * Get the OS/2 table and poke about + */ + os2 = (TT_OS2 *) FT_Get_Sfnt_Table (face, ft_sfnt_os2); + if (os2 && os2->version >= 0x0001 && os2->version != 0xffff) + { + for (i = 0; i < NUM_CODE_PAGE_RANGE; i++) + { + FT_ULong bits; + int bit; + if (FcCodePageRange[i].bit < 32) + { + bits = os2->ulCodePageRange1; + bit = FcCodePageRange[i].bit; + } + else + { + bits = os2->ulCodePageRange2; + bit = FcCodePageRange[i].bit - 32; + } + if (bits & (1 << bit)) + { + if (!FcPatternAddString (pat, FC_LANG, + FcCodePageRange[i].name)) + goto bail1; + hasLang = FcTrue; + } + } + } + + /* + * Compute the unicode coverage for the font + */ cs = FcFreeTypeCharSet (face, blanks); if (!cs) goto bail1; + codepoints = FcCharSetCount (cs); /* * Skip over PCF fonts that have no encoded characters; they're * usually just Unicode fonts transcoded to some legacy encoding */ - if (FcCharSetCount (cs) == 0) + if (codepoints == 0) { if (!strcmp(FT_MODULE_CLASS(&face->driver->root)->module_name, "pcf")) goto bail2; @@ -175,6 +301,80 @@ FcFreeTypeQuery (const FcChar8 *file, if (!FcPatternAddCharSet (pat, FC_CHARSET, cs)) goto bail2; + + if (!hasLang || (FcDebug() & FC_DBG_SCANV)) + { + /* + * Use the Unicode coverage to set lang if it wasn't + * set from the OS/2 tables + */ + + if (FcDebug() & FC_DBG_SCANV) + printf ("%s: ", family); + for (i = 0; i < NUM_CODE_PAGE_SET; i++) + { + FcChar32 missing; + + missing = FcCharSetSubtractCount (FcCodePageSet[i].set, + cs); + matchCodePage[i] = missing <= FcCodePageSet[i].missing_tolerance; + if (FcDebug() & FC_DBG_SCANV) + printf ("%s(%d) ", FcCodePageSet[i].name, missing); + } + if (FcDebug() & FC_DBG_SCANV) + printf ("\n"); + + if (hasLang) + { + FcChar8 *lang; + int j; + /* + * Validate the lang selections + */ + for (i = 0; FcPatternGetString (pat, FC_LANG, i, &lang) == FcResultMatch; i++) + { + for (j = 0; j < NUM_CODE_PAGE_SET; j++) + if (!strcmp ((char *) FcCodePageSet[j].name, + (char *) lang)) + { + if (!matchCodePage[j]) + printf ("%s(%s): missing lang %s\n", file, family, lang); + } + } + for (j = 0; j < NUM_CODE_PAGE_SET; j++) + { + if (!matchCodePage[j]) + continue; + lang = 0; + for (i = 0; FcPatternGetString (pat, FC_LANG, i, &lang) == FcResultMatch; i++) + { + if (!strcmp ((char *) FcCodePageSet[j].name, (char *) lang)) + break; + lang = 0; + } + if (!lang) + printf ("%s(%s): extra lang %s\n", file, family, FcCodePageSet[j].name); + } + } + else + { + /* + * None provided, use the charset derived ones + */ + for (i = 0; i < NUM_CODE_PAGE_SET; i++) + if (matchCodePage[i]) + { + if (!FcPatternAddString (pat, FC_LANG, + FcCodePageRange[i].name)) + goto bail1; + hasLang = TRUE; + } + } + } + if (!hasLang) + if (!FcPatternAddString (pat, FC_LANG, (FcChar8 *) FC_LANG_UNKNOWN)) + goto bail1; + /* * Drop our reference to the charset */ @@ -190,35 +390,6 @@ FcFreeTypeQuery (const FcChar8 *file, goto bail1; } - /* - * Get the OS/2 table and poke about - */ - os2 = (TT_OS2 *) FT_Get_Sfnt_Table (face, ft_sfnt_os2); - if (os2 && os2->version >= 0x0001 && os2->version != 0xffff) - { - for (i = 0; i < NUM_CODE_PAGE_RANGE; i++) - { - FT_ULong bits; - int bit; - if (FcCodePageRange[i].bit < 32) - { - bits = os2->ulCodePageRange1; - bit = FcCodePageRange[i].bit; - } - else - { - bits = os2->ulCodePageRange2; - bit = FcCodePageRange[i].bit - 32; - } - if (bits & (1 << bit)) - { - if (!FcPatternAddString (pat, FC_LANG, - FcCodePageRange[i].name)) - goto bail1; - } - } - } - FT_Done_Face (face); FT_Done_FreeType (ftLibrary); return pat; diff --git a/src/fcint.h b/src/fcint.h index 6918730..0678527 100644 --- a/src/fcint.h +++ b/src/fcint.h @@ -41,12 +41,6 @@ #include #endif -typedef struct _FcMatcher { - char *object; - double (*compare) (char *object, FcValue value1, FcValue value2); - int priority; -} FcMatcher; - typedef struct _FcSymbolic { const char *name; int value; @@ -67,6 +61,7 @@ typedef struct _FcSymbolic { #define FC_DBG_CACHEV 32 #define FC_DBG_PARSE 64 #define FC_DBG_SCAN 128 +#define FC_DBG_SCANV 256 #define FC_DBG_MEMORY 512 #define FC_MEM_CHARSET 0 @@ -87,8 +82,13 @@ typedef struct _FcSymbolic { #define FC_MEM_STRLIST 15 #define FC_MEM_CONFIG 16 +typedef enum _FcValueBinding { + FcValueBindingWeak, FcValueBindingStrong +} FcValueBinding; + typedef struct _FcValueList { struct _FcValueList *next; + FcValueBinding binding; FcValue value; } FcValueList; @@ -356,6 +356,9 @@ FcConfigCompareValue (const FcValue m, const FcValue v); /* fccharset.c */ +FcCharSet * +FcCharSetFreeze (FcCharSet *cs); + FcBool FcNameUnparseCharSet (FcStrBuf *buf, const FcCharSet *c); diff --git a/src/fcknownsets.h b/src/fcknownsets.h new file mode 100644 index 0000000..6a9dbd2 --- /dev/null +++ b/src/fcknownsets.h @@ -0,0 +1,1895 @@ +/* total size: 412 unique leaves: 403 */ + +static const FcCharLeaf leaves[403] = { + { { /* 0 */ + 0x00000000, 0xffffffff, 0xffffffff, 0xffffffff, + 0x00000000, 0x00000001, 0x00000000, 0x00000000, + } }, + { { /* 1 */ + 0xfffffffe, 0x87ffffff, 0x0fffffff, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + } }, + { { /* 2 */ + 0x33180000, 0x00000044, 0x00000000, 0x00000000, + 0x00000000, 0x00001000, 0x00000000, 0x00000000, + } }, + { { /* 3 */ + 0x00000000, 0xffffffff, 0xffffffff, 0xffffffff, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + } }, + { { /* 4 */ + 0x43722f8b, 0x0b042000, 0xe340e82c, 0x40c82800, + 0x49375944, 0x04407976, 0xa3f02c93, 0x08c50038, + } }, + { { /* 5 */ + 0x0003ee02, 0x35508000, 0x1e23e1c8, 0xc4498200, + 0x2942ad5a, 0x8060c000, 0xa49a461c, 0x052ac003, + } }, + { { /* 6 */ + 0xd6462a44, 0x08003dda, 0x14208388, 0x01700020, + 0x03022021, 0x40ac3000, 0x44628620, 0x8a0020a0, + } }, + { { /* 7 */ + 0x80040253, 0x14840402, 0x10047bfb, 0x11e27fa4, + 0x00a42441, 0x20c01421, 0x70003a50, 0x27430002, + } }, + { { /* 8 */ + 0x208245c9, 0x0fc14630, 0x28503c88, 0xa0248602, + 0x88062388, 0x40000e19, 0xeb6422aa, 0xcd28001c, + } }, + { { /* 9 */ + 0x02e1a120, 0x8200840b, 0x549e279b, 0xa0b38141, + 0x85080010, 0x08002061, 0x08d02f08, 0x010fbe3e, + } }, + { { /* 10 */ + 0xa803f718, 0x5b080a41, 0x00020504, 0x382a0500, + 0x00015041, 0x21081910, 0x00000313, 0x04046122, + } }, + { { /* 11 */ + 0x100140d0, 0x40228000, 0x40488050, 0x10000008, + 0x370006d1, 0x00005e80, 0x941000a0, 0x60000018, + } }, + { { /* 12 */ + 0x00900240, 0x00548000, 0x00080000, 0x00100900, + 0x00000040, 0x10105020, 0x4c022400, 0x06010001, + } }, + { { /* 13 */ + 0x814c2918, 0x08012100, 0x00036485, 0x10214452, + 0x00080904, 0x0000000d, 0x80004988, 0x16910001, + } }, + { { /* 14 */ + 0x40000765, 0x04338492, 0x45928c00, 0x52200016, + 0xd0080228, 0x4c084300, 0xc32a40a2, 0x2e009810, + } }, + { { /* 15 */ + 0x16708000, 0x40826e84, 0x04b3c390, 0x21187c85, + 0x02c8041c, 0x4a001120, 0x361b0a48, 0x89005540, + } }, + { { /* 16 */ + 0x9902000a, 0x10400221, 0x04000242, 0x00000044, + 0x0c040000, 0x00000010, 0x00001216, 0x00000242, + } }, + { { /* 17 */ + 0x00401a20, 0x00000400, 0xb5b30009, 0x15230a18, + 0x1fe89ba0, 0x8379507c, 0xc09d10fd, 0x0560dbf6, + } }, + { { /* 18 */ + 0x0242ef92, 0xdf020110, 0x08226961, 0x02029035, + 0x00030000, 0x45aa1a02, 0x02000001, 0x28518101, + } }, + { { /* 19 */ + 0x02d26080, 0x00000280, 0x00011800, 0x00009200, + 0x20000880, 0x35000405, 0x60442000, 0x609e49e6, + } }, + { { /* 20 */ + 0x2a42104c, 0xa1482820, 0x802010b1, 0x7b9c000e, + 0x14a08490, 0x41e028c1, 0x8c490704, 0x0cc8100d, + } }, + { { /* 21 */ + 0x89ba8412, 0x142202c0, 0x0ac05500, 0x92833ec4, + 0x43871ca3, 0x22a04703, 0x03c03028, 0xa0200801, + } }, + { { /* 22 */ + 0x30448000, 0x000085a3, 0x2225200e, 0x0001b73c, + 0x8c503220, 0x315d0099, 0x940200a0, 0x0e4b0003, + } }, + { { /* 23 */ + 0x8c20e342, 0xd0910080, 0xa3281d94, 0x60c1499c, + 0x07134406, 0x44445a90, 0x00000f88, 0x95c40040, + } }, + { { /* 24 */ + 0x84477581, 0xc0534402, 0x01082b83, 0x92424000, + 0x09a60611, 0x32220800, 0x1bddb384, 0xc08af000, + } }, + { { /* 25 */ + 0x00020282, 0x6c008800, 0x00219200, 0x8c844180, + 0x09441308, 0x000007a7, 0x0c418051, 0x00d06002, + } }, + { { /* 26 */ + 0x10d0a000, 0x44003004, 0x01000000, 0x07008201, + 0x440e0100, 0x08056830, 0x051464b2, 0x441410e6, + } }, + { { /* 27 */ + 0x21000011, 0xcbc09c08, 0x40c2e120, 0x41b4304c, + 0x9a8310ac, 0x328198b2, 0x00849822, 0xbc123369, + } }, + { { /* 28 */ + 0xc03bd6c0, 0x0c53a1a1, 0xea008a1e, 0x05d8cbf0, + 0x21c34390, 0x4a1c4805, 0x324002d0, 0xd79d0041, + } }, + { { /* 29 */ + 0xe8b02b09, 0x24527dc0, 0xd04bc240, 0xc8aba000, + 0x34a98a80, 0x41c98000, 0x241f8010, 0x487b9200, + } }, + { { /* 30 */ + 0x00cc0000, 0x33008406, 0x001b410f, 0x80402000, + 0xa0988022, 0x006ba186, 0x85a42a30, 0x06044181, + } }, + { { /* 31 */ + 0x00046021, 0xa0010080, 0x46b80400, 0x03a0e90f, + 0x18200000, 0x081040a0, 0x0001380a, 0xa8000500, + } }, + { { /* 32 */ + 0xc28a0404, 0x2720000a, 0x830c0910, 0x00000802, + 0x10806211, 0x0808000c, 0x0c08000c, 0x08400000, + } }, + { { /* 33 */ + 0x00441410, 0x6404000b, 0x800150c0, 0x8984047e, + 0x41400658, 0x94a4c000, 0x09dca862, 0x00001800, + } }, + { { /* 34 */ + 0x000a8100, 0x41900008, 0xe4a14007, 0x64452501, + 0x0e7d11ee, 0xfb084800, 0x08a81616, 0x0009c92e, + } }, + { { /* 35 */ + 0x4a821800, 0x6b6406a0, 0x16000002, 0x83905648, + 0x002a73a0, 0x00248000, 0x470288f9, 0x0faa4d02, + } }, + { { /* 36 */ + 0x8e800000, 0x7554b87b, 0xd9402418, 0x040cc880, + 0xb0410000, 0x04428c24, 0x001a5a34, 0xc1108000, + } }, + { { /* 37 */ + 0x00328046, 0x8106180d, 0xcd920002, 0x74016014, + 0x00916112, 0x420ac098, 0x8420040f, 0x40029a13, + } }, + { { /* 38 */ + 0xfd228a62, 0x40808188, 0x21031000, 0x31010808, + 0x07044420, 0x0388b812, 0xa3008900, 0x22020000, + } }, + { { /* 39 */ + 0x46001210, 0x00410042, 0x52415680, 0x200052f0, + 0x82148610, 0x46021004, 0x8035430a, 0xd80060e0, + } }, + { { /* 40 */ + 0x08010041, 0x6c653400, 0xab0411c1, 0x22040286, + 0x00000003, 0x00009084, 0x02814015, 0x33000202, + } }, + { { /* 41 */ + 0x38400400, 0xc0c00e20, 0x00850030, 0x0d250500, + 0x81d04ad0, 0x020c2280, 0x6240b605, 0x62802679, + } }, + { { /* 42 */ + 0x080802ea, 0x8579dd67, 0xdea0081b, 0x40008735, + 0xd1000a8c, 0xa22505aa, 0x15108440, 0x0080404d, + } }, + { { /* 43 */ + 0x8d220012, 0x058f1968, 0x3a1a9080, 0x85618464, + 0x2002ccc0, 0x732e0820, 0x0b3420a4, 0x14150004, + } }, + { { /* 44 */ + 0x82002001, 0x08000057, 0x00445004, 0x79051212, + 0x000940d0, 0x84004000, 0xd844054c, 0x5114409a, + } }, + { { /* 45 */ + 0x40000b12, 0x15800201, 0x08002001, 0xc200084a, + 0x40020800, 0x98093020, 0x18800000, 0x0008e22c, + } }, + { { /* 46 */ + 0x00040004, 0x001410e0, 0x20008020, 0x10009800, + 0x00827082, 0x1c000288, 0x00014c22, 0x08209100, + } }, + { { /* 47 */ + 0x00404002, 0x44001c00, 0x7cc10383, 0x84002121, + 0x0002e002, 0xe20a44c0, 0x81260e03, 0x080002d0, + } }, + { { /* 48 */ + 0x96902921, 0xb8c24001, 0x00806241, 0xa6510a06, + 0x812c0112, 0x0400c600, 0xa2800cb0, 0x8640a429, + } }, + { { /* 49 */ + 0x4a028000, 0x02003041, 0x0057ba40, 0x20205001, + 0x24b08880, 0x01122002, 0x000402d3, 0x00000211, + } }, + { { /* 50 */ + 0x40040080, 0xe0000c82, 0x00003008, 0x00081011, + 0x81a40208, 0x420e40a0, 0xc0400400, 0x48000081, + } }, + { { /* 51 */ + 0x0f912df5, 0x0629d807, 0x4001007c, 0x824e4546, + 0x1008c000, 0xed363005, 0x65400c80, 0x0810930b, + } }, + { { /* 52 */ + 0xe8200600, 0x6082c80a, 0x403400ca, 0x12012e02, + 0x19489004, 0x00000000, 0x00000000, 0x00000000, + } }, + { { /* 53 */ + 0x00000000, 0x05400000, 0x00311000, 0x02a54c00, + 0x44105520, 0x23040310, 0x80345422, 0x12010a03, + } }, + { { /* 54 */ + 0x01a1126b, 0xa0482000, 0x45400448, 0xe08d8000, + 0x28401af0, 0x04168626, 0x4c005018, 0x21120032, + } }, + { { /* 55 */ + 0x0d0005e4, 0x42008a08, 0x00334800, 0x87030860, + 0x34008501, 0xe4280109, 0x81002045, 0x5c1825a8, + } }, + { { /* 56 */ + 0xd80435a0, 0x02e01c02, 0x020000a1, 0x4146c050, + 0xa6046800, 0xbb8af260, 0xc8b60000, 0x600200e2, + } }, + { { /* 57 */ + 0x0080023e, 0x03728900, 0x00068681, 0x08880000, + 0x41404600, 0x20000e04, 0x10481622, 0x22178a00, + } }, + { { /* 58 */ + 0x00007418, 0x21021200, 0x08800200, 0x0420984a, + 0x12110000, 0x99040002, 0x04022a55, 0x10105000, + } }, + { { /* 59 */ + 0x459a0000, 0xa000b02a, 0x0208420a, 0x00002708, + 0x08128090, 0x04018740, 0x3020e202, 0x8c800630, + } }, + { { /* 60 */ + 0x04c004c4, 0x80002000, 0xd8314000, 0x02000080, + 0x00081400, 0x00000218, 0x8a100880, 0x40002010, + } }, + { { /* 61 */ + 0x1500010d, 0x00000000, 0x80a04000, 0x01500140, + 0x80002004, 0x04080004, 0x00000010, 0x4a049001, + } }, + { { /* 62 */ + 0x80000020, 0x0842000c, 0x2a8c3041, 0xc085090e, + 0x40c42906, 0x00100800, 0xb2308006, 0x21380102, + } }, + { { /* 63 */ + 0x030d0080, 0x09400420, 0x80000012, 0x80040410, + 0x004888ca, 0x24040602, 0x00040001, 0x01100008, + } }, + { { /* 64 */ + 0xa9c8550d, 0x0c522428, 0x48310000, 0x022f624d, + 0x412830a0, 0xd205057b, 0x1844a894, 0x45c26cc2, + } }, + { { /* 65 */ + 0x2ed14017, 0x02081901, 0x1500c202, 0x20919040, + 0x044d0401, 0x00000000, 0x00000000, 0x00000000, + } }, + { { /* 66 */ + 0x00000000, 0x80800000, 0x04201542, 0x06000c02, + 0x60001404, 0xb9d99f87, 0x540a059f, 0x3810245d, + } }, + { { /* 67 */ + 0x004825b0, 0x00000000, 0x00000000, 0x00990850, + 0x02000420, 0x44080108, 0x28009840, 0x0008810a, + } }, + { { /* 68 */ + 0x40018400, 0x00210400, 0x82000794, 0x00500001, + 0x00002482, 0x00001c00, 0x80043c01, 0x49000800, + } }, + { { /* 69 */ + 0xf83c0228, 0xcb0886c0, 0xa0006230, 0x00000004, + 0x18000000, 0x0007a148, 0x00124024, 0x22852c40, + } }, + { { /* 70 */ + 0xe6b3a96f, 0x5126400f, 0x723b6c86, 0xb5a4e20b, + 0x0222859f, 0x0123854c, 0x40000402, 0x20202102, + } }, + { { /* 71 */ + 0x02240004, 0x00042080, 0x00047e00, 0x01a01604, + 0x10042a80, 0x0032d800, 0x3183fa81, 0x00200488, + } }, + { { /* 72 */ + 0x40872000, 0x84100000, 0x48800221, 0x00000074, + 0x114a0029, 0x02c80000, 0x00049000, 0x11000410, + } }, + { { /* 73 */ + 0xc5010010, 0x0000c957, 0x08102d00, 0x50204000, + 0x04501000, 0x00013088, 0x40020008, 0x00400012, + } }, + { { /* 74 */ + 0x01000010, 0x01200820, 0x08060010, 0xa0000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + } }, + { { /* 75 */ + 0x00000000, 0x00000000, 0x00000000, 0x00800000, + 0x011e8a09, 0x18022138, 0x10700480, 0x00000006, + } }, + { { /* 76 */ + 0x10000000, 0x88044402, 0xf8013815, 0x21e9041c, + 0x1b306c60, 0x08820588, 0x1a607af3, 0x0ac5870c, + } }, + { { /* 77 */ + 0x524a00c1, 0x22050080, 0x50420114, 0x04902206, + 0x0000a800, 0x00002901, 0x10080840, 0x88480000, + } }, + { { /* 78 */ + 0x018f156f, 0x0b012000, 0x45107040, 0x000088a0, + 0x00000000, 0x00028100, 0x98000090, 0x7010e006, + } }, + { { /* 79 */ + 0x41091608, 0x00000101, 0x00963a20, 0x00000000, + 0x22400000, 0x021a7120, 0xa2270002, 0x80022000, + } }, + { { /* 80 */ + 0x0200c102, 0x00c10800, 0x8ca02029, 0x00000624, + 0x00000000, 0x01000100, 0x01180000, 0x00004020, + } }, + { { /* 81 */ + 0x04000000, 0x10020480, 0x0410803e, 0x00008000, + 0x80024000, 0x00004800, 0x00400200, 0x00000110, + } }, + { { /* 82 */ + 0x00252000, 0x08040020, 0x00800280, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x005802a0, + } }, + { { /* 83 */ + 0x08000200, 0x08000140, 0x20020000, 0x00041003, + 0x00000000, 0x00108200, 0x00800010, 0x07040000, + } }, + { { /* 84 */ + 0x44000000, 0x00000000, 0x00000000, 0xa2200000, + 0xa08c0000, 0x48300020, 0x59126008, 0x00100100, + } }, + { { /* 85 */ + 0x00084180, 0x08000001, 0x80044c00, 0x00801482, + 0x10212000, 0x00000000, 0x00000000, 0x00000000, + } }, + { { /* 86 */ + 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, + 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, + } }, + { { /* 87 */ + 0x00000fff, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + } }, + { { /* 88 */ + 0x00000000, 0xffffffff, 0xffffffff, 0xffffffff, + 0x00000000, 0x00530180, 0x00800000, 0x00800000, + } }, + { { /* 89 */ + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xfffe0000, 0xfffe03fb, 0x000003fb, 0x00000000, + } }, + { { /* 90 */ + 0xffff0002, 0xffffffff, 0x0002ffff, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + } }, + { { /* 91 */ + 0x33210000, 0x080d0063, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + } }, + { { /* 92 */ + 0x00400008, 0x00000802, 0x00000000, 0x03ff03ff, + 0x000f0000, 0x00000000, 0x00140000, 0x00000000, + } }, + { { /* 93 */ + 0xe402098d, 0x20305fa1, 0x00040000, 0x00000cc3, + 0x000000cc, 0x80000020, 0x00000000, 0x00000000, + } }, + { { /* 94 */ + 0x00040000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + } }, + { { /* 95 */ + 0x00000000, 0x00000000, 0x00000000, 0x000fffff, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + } }, + { { /* 96 */ + 0x3999900f, 0x99999939, 0x00000804, 0x00000000, + 0x00000000, 0x300c0003, 0x0000c8c0, 0x00008000, + } }, + { { /* 97 */ + 0x00000060, 0x00000000, 0x00000005, 0x0000a400, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + } }, + { { /* 98 */ + 0xa03fffef, 0x00000000, 0xfffffffe, 0xffffffff, + 0x780fffff, 0xfffffffe, 0xffffffff, 0x787fffff, + } }, + { { /* 99 */ + 0x00000000, 0x02060000, 0x00000000, 0x00000000, + 0x00000000, 0x000001f0, 0x00000000, 0x00000000, + } }, + { { /* 100 */ + 0x01102008, 0x084008cc, 0x00822600, 0x78000000, + 0x7000c000, 0x00000002, 0x00002010, 0x00000000, + } }, + { { /* 101 */ + 0x43f36f8b, 0x9b462542, 0xe3e0e82c, 0x400a0004, + 0xdb365f65, 0x04497977, 0xe3f0ecd7, 0x18c5603a, + } }, + { { /* 102 */ + 0x3403e60b, 0x37518000, 0x7eebe0c8, 0x98698200, + 0x2d56ad48, 0x8060e803, 0xad93661c, 0xc568c03a, + } }, + { { /* 103 */ + 0xc656aa60, 0x02403f7e, 0x146183cd, 0x21751020, + 0x07122021, 0x40bc3000, 0x4562a624, 0x0a3060a8, + } }, + { { /* 104 */ + 0x85740217, 0x9c840402, 0x14157ffb, 0x11e27f34, + 0x22efb665, 0x60ff1f75, 0x38403a70, 0x676336c3, + } }, + { { /* 105 */ + 0x20b24dd9, 0x0fc946b0, 0x4850bc98, 0xa03f8638, + 0x98162388, 0x5232be49, 0xeba422ab, 0xc72c00dd, + } }, + { { /* 106 */ + 0x26e1a1e7, 0x8f0a841b, 0x559e27eb, 0x89bfc241, + 0x85480014, 0x084d6361, 0xaad07f0c, 0x05cfff3e, + } }, + { { /* 107 */ + 0xa803ff1a, 0x7b407a41, 0x80024745, 0x38eb0500, + 0x1005dc51, 0x710c9b34, 0x01000397, 0xa4046366, + } }, + { { /* 108 */ + 0x005180d0, 0x430ac000, 0x30c89071, 0x58000008, + 0xf7000ed9, 0x00415f80, 0x941000b0, 0x62800018, + } }, + { { /* 109 */ + 0x09d00240, 0x01568200, 0x08015004, 0x05101d10, + 0x001084c1, 0x10504025, 0x4d8a410f, 0xa60d4009, + } }, + { { /* 110 */ + 0x914cab19, 0x098121c0, 0x0203c485, 0x80000672, + 0x00080b04, 0x0009141d, 0x905c49c9, 0x16900009, + } }, + { { /* 111 */ + 0x22200c65, 0x24338412, 0x47960c03, 0x42250a04, + 0xd0880028, 0x4f0c4900, 0xd3aa14a2, 0x3e87d830, + } }, + { { /* 112 */ + 0x1f618e04, 0x41867ea4, 0x2dbbc390, 0x211857ad, + 0x2a48241e, 0x4e041138, 0x161b0a40, 0x88400d60, + } }, + { { /* 113 */ + 0x9502020a, 0x10608221, 0x04000243, 0x80001444, + 0x0c040000, 0x70000000, 0x00c11a06, 0x0c00024a, + } }, + { { /* 114 */ + 0x00401a00, 0x40451404, 0xbdf30029, 0x052b0a78, + 0xbfa0bba9, 0x8379407c, 0xe91d12fd, 0xc5695bf6, + } }, + { { /* 115 */ + 0x444aeff6, 0xff022115, 0x402bed63, 0x0242d033, + 0x00131000, 0x5dca1b42, 0x020000a0, 0x2c61a703, + } }, + { { /* 116 */ + 0x8ff24880, 0x00000284, 0x100d5804, 0x0048b200, + 0x20011894, 0x37805004, 0x684d3200, 0x68be49ea, + } }, + { { /* 117 */ + 0x2e42184c, 0x21c9a820, 0x80b050b9, 0xff7c001e, + 0x14e0849a, 0x01e028c1, 0xac49870e, 0xdddb130f, + } }, + { { /* 118 */ + 0x89fbbe1a, 0x51b2a2e2, 0x32ca5522, 0x928b3ec6, + 0x438f1dbf, 0x32986703, 0x73c03028, 0xa9230811, + } }, + { { /* 119 */ + 0x3a65c000, 0x04028fe3, 0xa6252c4e, 0x00a1bf3d, + 0x8cd43e3a, 0x317c06c9, 0xd52a00e0, 0x0edf018b, + } }, + { { /* 120 */ + 0x8c22e34b, 0xf0911183, 0xa7287d94, 0x40fbc9ac, + 0x07534484, 0x44445a90, 0x00013fc8, 0xf5d40048, + } }, + { { /* 121 */ + 0xec5f7701, 0x891dc442, 0x49286b83, 0xd2424109, + 0x59fe061d, 0x3a221840, 0x3b9fb7e4, 0xc0eaf003, + } }, + { { /* 122 */ + 0x82021386, 0xe4008980, 0x10a1b200, 0x0cc44b80, + 0x8944d309, 0x48341faf, 0x0c458259, 0x0470420a, + } }, + { { /* 123 */ + 0x10c8a040, 0x44503140, 0x01004004, 0x05408281, + 0x642c0108, 0x1a056a30, 0x051460a6, 0x645690cf, + } }, + { { /* 124 */ + 0x31000021, 0xcbf09c18, 0x63e2e120, 0x01b5104c, + 0x9a83538c, 0x3281b8b2, 0x0a84987a, 0x0c0233e7, + } }, + { { /* 125 */ + 0xd038d6cd, 0x9872e1b1, 0xe2848a1e, 0x0459c3f4, + 0x23c2439a, 0xd3144845, 0x36400292, 0xffbd0241, + } }, + { { /* 126 */ + 0xe8f0eb09, 0xa5d27dc0, 0xd24bc242, 0xd0afa47f, + 0x34a11aa0, 0x0bd88247, 0x651bc453, 0xc83ad294, + } }, + { { /* 127 */ + 0x40c8001e, 0x33140e06, 0xb21f615f, 0xc0d00088, + 0xa898a02a, 0x166ba1c5, 0x85b4af50, 0x0604c08b, + } }, + { { /* 128 */ + 0x1e04f933, 0xa251056e, 0x76380400, 0x73b8ed07, + 0x19324406, 0xc8164081, 0x63097c8a, 0xaa042984, + } }, + { { /* 129 */ + 0xca9c1c24, 0x27614e0e, 0x830009d0, 0xc10c0846, + 0x10816011, 0x0908540d, 0xcc0a000e, 0x0c000514, + } }, + { { /* 130 */ + 0xa0440430, 0x6784008b, 0x8a195288, 0x8b18865e, + 0x41602e59, 0x9cbe8c10, 0x895c6861, 0x00089800, + } }, + { { /* 131 */ + 0x089a8100, 0xc1900018, 0xf4a14007, 0x640d8505, + 0x0e4d314e, 0xff0a4806, 0x2ea81632, 0x000b852e, + } }, + { { /* 132 */ + 0xca841810, 0x696c0e20, 0x16000032, 0x0390d658, + 0x1a6851a0, 0x11249000, 0x432698e1, 0x1fae5d52, + } }, + { { /* 133 */ + 0xae280fa0, 0x5700fafb, 0x99406408, 0xc044c880, + 0xb1419005, 0xa4c48424, 0x603a1a34, 0xc1949000, + } }, + { { /* 134 */ + 0x003a8246, 0xc106180d, 0x99100022, 0x1511e050, + 0x00824157, 0x022a041a, 0x8930004f, 0x446ad813, + } }, + { { /* 135 */ + 0xed228aa2, 0x400511c0, 0x01021000, 0x31018808, + 0x02044620, 0x0f08f800, 0xa2008900, 0x22020000, + } }, + { { /* 136 */ + 0x16108210, 0x10400042, 0x126052c0, 0x200052f4, + 0x82308510, 0x42021100, 0x80b5430a, 0xda2070e1, + } }, + { { /* 137 */ + 0x08012040, 0xfc653500, 0xab0419c1, 0x62140286, + 0x00440087, 0x42469085, 0x0a85405c, 0x33803207, + } }, + { { /* 138 */ + 0xb8c00400, 0xc0d0ce30, 0x0080c030, 0x0da50508, + 0x00400a90, 0x280c0200, 0x40446705, 0x41226429, + } }, + { { /* 139 */ + 0x000002e8, 0x847c4664, 0xde200002, 0x4049861d, + 0xc0000a08, 0x20010084, 0x10108400, 0x01c742cd, + } }, + { { /* 140 */ + 0xd52a703a, 0x1d8f9968, 0x3e12be50, 0x81d9aef5, + 0x2412cec4, 0x732e0828, 0x4b3424ac, 0xd41d020c, + } }, + { { /* 141 */ + 0x80002a02, 0x08110097, 0x114411c4, 0x7d451786, + 0x5e4949dd, 0x87914040, 0xd8c4254c, 0x491444ba, + } }, + { { /* 142 */ + 0xc8001b92, 0x15800271, 0x0c0000c1, 0xc200096a, + 0x40024800, 0xba493021, 0x1c802080, 0x1008e2ac, + } }, + { { /* 143 */ + 0x00341004, 0x841400e3, 0x20004020, 0x14149810, + 0x04aa70c2, 0x54208688, 0x04130c62, 0x20109180, + } }, + { { /* 144 */ + 0x02064082, 0x54011c40, 0xe4e90383, 0x84802125, + 0x2810e433, 0xe60944c0, 0x81260a03, 0x080112da, + } }, + { { /* 145 */ + 0x97906901, 0xf8864001, 0x0081e24d, 0xa6510a0e, + 0x81ec011a, 0x8441c600, 0xb62eadb8, 0x8741acef, + } }, + { { /* 146 */ + 0x4b028d54, 0x02681161, 0x2057bb60, 0x043350a0, + 0xf7b4a8c0, 0x01122402, 0x20009ad3, 0x00c82271, + } }, + { { /* 147 */ + 0x809e2081, 0xe1800c8a, 0x8151b009, 0x40281031, + 0x89a52a0e, 0x620e69b6, 0xd1444425, 0x4d548085, + } }, + { { /* 148 */ + 0x1fb12c75, 0x862dd807, 0x5841d97c, 0x226e414e, + 0x9e088200, 0xedb7f80d, 0x75668c80, 0x08149313, + } }, + { { /* 149 */ + 0xc8040e32, 0x6ea6484e, 0x66742c4a, 0xba0126c0, + 0x185dd70c, 0x00000000, 0x00000000, 0x00000000, + } }, + { { /* 150 */ + 0x00000000, 0x05400000, 0x813370a0, 0x03a54f81, + 0x641055ec, 0x2344c31a, 0x00341462, 0x1a090a43, + } }, + { { /* 151 */ + 0x13a5187b, 0xa8480102, 0xc5440440, 0xe2dd8106, + 0x2d481af0, 0x0416b626, 0x6e405058, 0x31128032, + } }, + { { /* 152 */ + 0x0c0007e4, 0x420a8208, 0x803b4840, 0x87134860, + 0x3428850d, 0xe5290319, 0x870a2345, 0x5c1825a9, + } }, + { { /* 153 */ + 0xd9c577a6, 0x03e85e00, 0xa7000081, 0x41c6cd54, + 0xa2042800, 0x2b0ab860, 0xda9e0020, 0x0e1a08ea, + } }, + { { /* 154 */ + 0x11c0427e, 0x03768908, 0x01058621, 0x98a80004, + 0xc44846a0, 0x20220d05, 0x914854a2, 0x28d78a01, + } }, + { { /* 155 */ + 0x00087898, 0x31221605, 0x08804340, 0x06a2fa4e, + 0x92110814, 0x9b142002, 0x16432e52, 0x90105000, + } }, + { { /* 156 */ + 0x85ba0041, 0x20203042, 0x07a84f0b, 0x40802f08, + 0x1a930591, 0x0601df50, 0x3021a202, 0x4e800630, + } }, + { { /* 157 */ + 0x04c80cc4, 0x8001a004, 0xd4316000, 0x0a020880, + 0x00281c00, 0x00418e18, 0xca106ad0, 0x4b00f210, + } }, + { { /* 158 */ + 0x1506274d, 0x88900220, 0x82a85a00, 0x81504549, + 0x80002004, 0x2c088804, 0x000508d1, 0x4ac48001, + } }, + { { /* 159 */ + 0x0062e0a0, 0x0a42008e, 0x6a8c3055, 0xe0a5090e, + 0x42c42906, 0x80b34814, 0xb330803e, 0x733c0102, + } }, + { { /* 160 */ + 0x700d1494, 0x09400c20, 0xc040301a, 0xc094a451, + 0x05c88dca, 0xa40c96c2, 0x34040001, 0x011000c8, + } }, + { { /* 161 */ + 0xa9cd550d, 0x1cda2428, 0x48370142, 0x120f7a4d, + 0x452a32b4, 0xd20531fb, 0xdc44b894, 0x45ca68d7, + } }, + { { /* 162 */ + 0x2ed15097, 0x42081943, 0x9d48d202, 0xa0979840, + 0x064d5409, 0x00000000, 0x00000000, 0x00000000, + } }, + { { /* 163 */ + 0x00000000, 0x84800000, 0x04215542, 0x17001c06, + 0x61107624, 0xb9ddff87, 0x5c0a659f, 0x3c11245d, + } }, + { { /* 164 */ + 0x005dadb0, 0x00000000, 0x00000000, 0x00db28d0, + 0x02000422, 0x44080108, 0xac409804, 0x90288d0a, + } }, + { { /* 165 */ + 0xe0018700, 0x00310400, 0x82211794, 0x10540019, + 0x021a2cb2, 0x40039c02, 0x8804bd60, 0x7900080c, + } }, + { { /* 166 */ + 0xba3c1628, 0xcb088640, 0x90807274, 0x0000001e, + 0xd8000000, 0x9c87e188, 0x04124034, 0x2791ae64, + } }, + { { /* 167 */ + 0xe6fbe86b, 0x5366408f, 0x537feea6, 0xb5e4e3ab, + 0x0002869f, 0x01228548, 0x48004402, 0x20a02116, + } }, + { { /* 168 */ + 0x02240004, 0x00052080, 0x01547e00, 0x01ac162c, + 0x10852a84, 0x05308c14, 0xfdc3fbc3, 0x906060fa, + } }, + { { /* 169 */ + 0x40336440, 0x96901200, 0x4e834b31, 0x418200d4, + 0x1d6a0129, 0x02802080, 0x02ad8000, 0x9f0c2691, + } }, + { { /* 170 */ + 0x67018044, 0x0c24d96f, 0x18d02910, 0x50215001, + 0x04d01000, 0x02017090, 0x61c30148, 0x01000132, + } }, + { { /* 171 */ + 0x07190088, 0x05620802, 0x4c0e0132, 0xf0a10405, + 0x00000002, 0x00000000, 0x00000000, 0x00000000, + } }, + { { /* 172 */ + 0x00000000, 0x00000000, 0x00000000, 0x00800000, + 0x035e8e8d, 0x5a0421bd, 0x11703488, 0x00000026, + } }, + { { /* 173 */ + 0x10000000, 0x8804c502, 0xf801b815, 0x25ed147c, + 0x3bb0ed60, 0x1bd78589, 0x1a627af3, 0x0ac50d0c, + } }, + { { /* 174 */ + 0x524ae5d1, 0x6b0d0490, 0x5266a35c, 0x16122b57, + 0x1101a872, 0x00182949, 0x10080948, 0x886c6000, + } }, + { { /* 175 */ + 0x058f916e, 0x39903012, 0x49b0f840, 0x001b88a0, + 0x00000000, 0x00428500, 0x98000058, 0x7014ea04, + } }, + { { /* 176 */ + 0x611d1628, 0x60005193, 0x00a71a24, 0x00000000, + 0x43c00000, 0x10187120, 0xa9270172, 0x89066004, + } }, + { { /* 177 */ + 0x020cc022, 0x40810900, 0x8ca0602d, 0x00000e34, + 0x00000000, 0x11012100, 0xd31a8011, 0x0892ec4c, + } }, + { { /* 178 */ + 0x85000040, 0x1806c7ac, 0x0512e03e, 0x00348000, + 0x80cec008, 0x0a126d01, 0x08568641, 0x0027011e, + } }, + { { /* 179 */ + 0x083d3751, 0x4e05e032, 0x048401c0, 0x01400081, + 0x00000000, 0x00000000, 0x00000000, 0x00591aa0, + } }, + { { /* 180 */ + 0x882443c8, 0xc8001d48, 0x72030152, 0x04059813, + 0x04008280, 0x0d148a10, 0x02088056, 0x2704a040, + } }, + { { /* 181 */ + 0x4e000000, 0x00000000, 0x00000000, 0xa3200000, + 0xa0ae1902, 0xdf002660, 0x7b17f010, 0x3ad08121, + } }, + { { /* 182 */ + 0x00284180, 0x48001003, 0x8014cc00, 0x00c414cf, + 0x30202000, 0x00000001, 0x00000000, 0x00000000, + } }, + { { /* 183 */ + 0x00000000, 0x00000200, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x10000000, 0x00000000, + } }, + { { /* 184 */ + 0xffffc000, 0x00003fff, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + } }, + { { /* 185 */ + 0xfffffffe, 0xffffffff, 0x7fffffff, 0xfffffffe, + 0xffffffff, 0x00000000, 0x00000000, 0x0000003f, + } }, + { { /* 186 */ + 0x08080002, 0x00000800, 0x00002000, 0x00000800, + 0x00000000, 0x00000000, 0x15554000, 0x960c3703, + } }, + { { /* 187 */ + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00030190, 0x00800280, 0x00800000, + } }, + { { /* 188 */ + 0x00000002, 0x00000000, 0x00020000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + } }, + { { /* 189 */ + 0x00100000, 0x08010040, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + } }, + { { /* 190 */ + 0x00400008, 0xa80a8008, 0x28000020, 0x10000420, + 0x000c0000, 0x00800000, 0x00000000, 0x00000000, + } }, + { { /* 191 */ + 0x64028100, 0x20f04e21, 0x01001110, 0x10004007, + 0x02000000, 0x00000020, 0x00000000, 0x00000000, + } }, + { { /* 192 */ + 0x00040000, 0x00000008, 0x00000000, 0x20000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + } }, + { { /* 193 */ + 0x00000000, 0x00000000, 0x00000000, 0x00080000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + } }, + { { /* 194 */ + 0x00000000, 0x00000000, 0x00000000, 0x00400000, + 0x00000000, 0x000c0003, 0x0000c8c0, 0x00000000, + } }, + { { /* 195 */ + 0x00000060, 0x01020000, 0x01020005, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + } }, + { { /* 196 */ + 0x00000000, 0x00000040, 0x00400002, 0x00020000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + } }, + { { /* 197 */ + 0x00000000, 0x00000000, 0x00000000, 0x00000200, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + } }, + { { /* 198 */ + 0x00000000, 0x00000000, 0x00000000, 0x00008000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + } }, + { { /* 199 */ + 0x00080028, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + } }, + { { /* 200 */ + 0x00000000, 0x00000000, 0x00000000, 0x00000080, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + } }, + { { /* 201 */ + 0x00000000, 0x00000000, 0x00000000, 0x00000002, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + } }, + { { /* 202 */ + 0x7f7b7f8b, 0xef553db4, 0xf35dfba8, 0x400b0243, + 0x8d3efb40, 0x8c2c7bf7, 0xe3fa6eff, 0xa8ed1d3a, + } }, + { { /* 203 */ + 0xcf83e602, 0x35558cf5, 0xffabe048, 0xd85992b9, + 0x2892ab18, 0x8020d7e9, 0xf583c438, 0x450ae74a, + } }, + { { /* 204 */ + 0x9714b000, 0x54007762, 0x1420d188, 0xc8c01020, + 0x00002121, 0x0c0413a8, 0x04408000, 0x082870c0, + } }, + { { /* 205 */ + 0x000408c0, 0x80000002, 0x14722b7b, 0x3bfb7924, + 0x1ae43327, 0x38ef9835, 0x28029ad1, 0xbf69a813, + } }, + { { /* 206 */ + 0x2fc665cf, 0x2fc96b11, 0x5053340e, 0xa00486a2, + 0xe8090106, 0xc00e0f0f, 0x81450a88, 0xc6010010, + } }, + { { /* 207 */ + 0x26e1a161, 0xce00444b, 0xd4eec7aa, 0x85bbcadf, + 0xa5203a74, 0x8840436c, 0x8bd23f06, 0x3befff79, + } }, + { { /* 208 */ + 0xe8eff75a, 0x5b36fbcb, 0x1be10d49, 0x39ee0154, + 0x2275d855, 0xa91ab9d8, 0xf0a7f3d7, 0xb40c67e0, + } }, + { { /* 209 */ + 0x081382c2, 0xd08bd491, 0x1061065a, 0x590074f2, + 0xb3128f9f, 0x0aaa0080, 0xb05e0230, 0x60a0857a, + } }, + { { /* 210 */ + 0xc900d303, 0x8a563098, 0x13907004, 0x00421f14, + 0x0008c060, 0x10808008, 0xec900400, 0xe6332817, + } }, + { { /* 211 */ + 0x90000758, 0x4e093708, 0xfc83f485, 0x18c8af53, + 0x080c187c, 0x01146adf, 0xa734c80c, 0x2710a011, + } }, + { { /* 212 */ + 0x422228c5, 0x00210413, 0x51123010, 0x40001820, + 0xc60c022b, 0x10000300, 0x00220022, 0x02495810, + } }, + { { /* 213 */ + 0x9670a094, 0x1792eeb0, 0x05f2cb96, 0x23580025, + 0x42cc25de, 0x4a04c938, 0x359f0c40, 0x8a001128, + } }, + { { /* 214 */ + 0x910a139a, 0x125e26a9, 0xae204e51, 0x84f00484, + 0x0c040000, 0x412c0400, 0x11541206, 0x00020a4b, + } }, + { { /* 215 */ + 0x00c00200, 0x80940000, 0xbfbb0001, 0x242b167c, + 0x7fa89bbb, 0xe3790c7f, 0xe00d10f4, 0x9f014132, + } }, + { { /* 216 */ + 0x35728652, 0xff1210b4, 0x4223cf27, 0x8602c47b, + 0x1cd33106, 0xa1aa3a0c, 0x02040812, 0x08012572, + } }, + { { /* 217 */ + 0x485040c0, 0x60106ad0, 0x39009c80, 0x00109a00, + 0x22000004, 0x00800000, 0x68002020, 0x609ecbe6, + } }, + { { /* 218 */ + 0x3f73916e, 0x218260c0, 0x48301034, 0xbd5c0006, + 0xd6fb8cd1, 0x43e820e1, 0x084e0600, 0xc4d00500, + } }, + { { /* 219 */ + 0x89aa8d1f, 0x5602a6e9, 0x23ed1001, 0x1a8b3656, + 0x13a51fb7, 0x30a06502, 0x23c7b278, 0xe9226c93, + } }, + { { /* 220 */ + 0x3a74e41f, 0x98a08fe3, 0x26252d0f, 0xfc49bf9c, + 0xac543218, 0x1916b949, 0xb5220c60, 0x0659fbc1, + } }, + { { /* 221 */ + 0x8420e343, 0x800048d9, 0x20225502, 0x00a18184, + 0x20104800, 0x40801380, 0x00160d04, 0x80200040, + } }, + { { /* 222 */ + 0x8de7fd40, 0xe0985436, 0x091e788b, 0xda49fec8, + 0x8dee0611, 0xba221937, 0x9fdd77f4, 0xf0daf3ec, + } }, + { { /* 223 */ + 0xec424386, 0x26048d3f, 0xca31fe6c, 0x0cc6628e, + 0x0145d785, 0x559977ad, 0x4045e250, 0xa154260b, + } }, + { { /* 224 */ + 0x58199827, 0xa6103443, 0x413405f2, 0x07003280, + 0x426600b4, 0x14217210, 0x41856025, 0x00000054, + } }, + { { /* 225 */ + 0x01040201, 0xcb70c820, 0x6a729320, 0x2095184c, + 0x9a8b1880, 0x3201aab2, 0x00c4d87a, 0x04c233e5, + } }, + { { /* 226 */ + 0xa238d44d, 0x5072b1a1, 0x84fc980a, 0x44d5e1d6, + 0x20c21094, 0x42104180, 0x22000000, 0xd29d0240, + } }, + { { /* 227 */ + 0xa8b12f01, 0xa63abf40, 0xd25bd35f, 0xd0ada723, + 0x75a10a92, 0x01e9adac, 0x771f801a, 0xa01b9225, + } }, + { { /* 228 */ + 0x20cadfa1, 0x77884602, 0x003b577f, 0x20d00bfe, + 0x0088806a, 0x0029a1c4, 0x05242a05, 0x16234009, + } }, + { { /* 229 */ + 0x00056822, 0xa2312010, 0x64901004, 0x1b8a4cc9, + 0x19302255, 0x08922980, 0x88115402, 0xa0042001, + } }, + { { /* 230 */ + 0x80000400, 0x6422850a, 0x0b810090, 0x1242882a, + 0x00834011, 0x00001a01, 0x00000000, 0x00000000, + } }, + { { /* 231 */ + 0x00000000, 0x4685009f, 0x0a0032c8, 0x1a010cfc, + 0x00402ed8, 0x80b80402, 0x0afca826, 0x22288c02, + } }, + { { /* 232 */ + 0x887ba0e0, 0x2135cfd6, 0xf8b106c7, 0x62558613, + 0x8a19936e, 0xfb0e6efa, 0x48f91630, 0x7c6bcd2f, + } }, + { { /* 233 */ + 0x4e845892, 0x7a2e4ca0, 0x561eedeb, 0x1592ce49, + 0xe8225324, 0x8124cfdb, 0x634218f1, 0x1a8a5853, + } }, + { { /* 234 */ + 0x24d37420, 0x0514ae3b, 0x8d547458, 0xe904d80a, + 0x91018268, 0x2cd684a4, 0xc4ba8886, 0x02100377, + } }, + { { /* 235 */ + 0x00388244, 0xc46fae91, 0x73442c44, 0x1515704d, + 0x10007310, 0x02480082, 0x40060205, 0x0000c003, + } }, + { { /* 236 */ + 0x0c020000, 0x92200008, 0x4040b050, 0xd161b804, + 0x32744621, 0x3b8af800, 0x8b00050f, 0x2280bbd0, + } }, + { { /* 237 */ + 0x07690600, 0x00c38040, 0x50005420, 0x250cc1d0, + 0x83108410, 0x02281101, 0x00304008, 0x020040a1, + } }, + { { /* 238 */ + 0x20000040, 0xabe33f88, 0xaa443180, 0x0624c2c6, + 0x8004ac13, 0x0251b000, 0x4285611e, 0x1d9ff303, + } }, + { { /* 239 */ + 0x78e8440a, 0xc3925e26, 0x00852082, 0x4080b041, + 0x88424a90, 0x0c8dca04, 0x4203a705, 0x000422a1, + } }, + { { /* 240 */ + 0x0c018668, 0x10f9d764, 0xdea00402, 0x60c12000, + 0x50014888, 0x04000080, 0x50040000, 0x80d0c05d, + } }, + { { /* 241 */ + 0x970aa010, 0x4dafbba0, 0x1e10dd61, 0x831404e0, + 0xa6d68848, 0x7327d83b, 0x497427bc, 0x92130ddc, + } }, + { { /* 242 */ + 0x8ba1142b, 0xd5392e75, 0x5450300b, 0x79109a18, + 0x024a49d4, 0x80164010, 0x89d7e564, 0x5316c020, + } }, + { { /* 243 */ + 0x86002a12, 0x15e8ab65, 0x0c0000cb, 0xe200596e, + 0x00067031, 0xa82916a4, 0x18802000, 0xe1487aac, + } }, + { { /* 244 */ + 0x84563207, 0x519132e8, 0x202550a1, 0x10807c00, + 0x9d8a7280, 0x421f00aa, 0x02310e22, 0x04941100, + } }, + { { /* 245 */ + 0x40080022, 0x5c100010, 0xe4c80343, 0x0580a1a5, + 0x04008433, 0x6e080080, 0x81262a4b, 0x2901aad8, + } }, + { { /* 246 */ + 0x4490684d, 0xba880009, 0x00820040, 0x84d10000, + 0xb1e6215b, 0x80083161, 0xc2400800, 0xa600a069, + } }, + { { /* 247 */ + 0x4a328d40, 0x550a5d71, 0x2d579aa0, 0x4aa64005, + 0x30b12021, 0x01123f06, 0x260a10c2, 0x50824402, + } }, + { { /* 248 */ + 0x80409880, 0x810004c0, 0x00002003, 0x38180000, + 0xf1a60200, 0x420e4434, 0x92e005a2, 0x09008101, + } }, + { { /* 249 */ + 0x00000400, 0x00008885, 0x00000000, 0x00804000, + 0x00000000, 0x00004040, 0x00000000, 0x00000000, + } }, + { { /* 250 */ + 0x00000000, 0x08000000, 0x00000082, 0x00000000, + 0x88000004, 0xe7efbcff, 0xffbfe7f8, 0xf1f92fec, + } }, + { { /* 251 */ + 0xbff8e271, 0x05704301, 0x85b30004, 0x42164706, + 0xe4105402, 0xb3040092, 0x81305422, 0x180b4263, + } }, + { { /* 252 */ + 0x13f5387b, 0xa9ea0705, 0x05143c4c, 0x80020600, + 0xbd481ad9, 0xf496ee37, 0x7ec0705f, 0x355fb832, + } }, + { { /* 253 */ + 0x455f8644, 0x41469000, 0x003b1d40, 0xce1362a1, + 0x39028505, 0x0c080548, 0x0000144f, 0x58003488, + } }, + { { /* 254 */ + 0xd8150071, 0x4be3bd00, 0x85008a90, 0xe61dc100, + 0xb386ed14, 0x639bff72, 0xd9bee592, 0x0a92887b, + } }, + { { /* 255 */ + 0x1c82d3fe, 0x177ab980, 0xc41782c9, 0x39809ffb, + 0x590c4260, 0x37c70f01, 0xb15094a3, 0x20070623, + } }, + { { /* 256 */ + 0x3102f85a, 0x310201c0, 0x1e820040, 0x056a3a0a, + 0x12805a04, 0xa7148002, 0xa04b2612, 0x90011069, + } }, + { { /* 257 */ + 0x848a1000, 0x3f801802, 0x42400708, 0x4e140110, + 0x180080b0, 0x0281c510, 0x10298202, 0x88000210, + } }, + { { /* 258 */ + 0x00420020, 0x11000280, 0x4413e000, 0xfe025804, + 0x30283c07, 0x04739798, 0xcb13ced1, 0x43196210, + } }, + { { /* 259 */ + 0x55ac278d, 0xc892422e, 0x02885380, 0x18514039, + 0x8088292c, 0x2428b900, 0x080e0c41, 0x42004421, + } }, + { { /* 260 */ + 0x08680408, 0x12040006, 0x02903031, 0xe0855b3e, + 0x10442936, 0x10822814, 0x83344266, 0x531b013c, + } }, + { { /* 261 */ + 0x0e0d0404, 0x00510c22, 0xc0000012, 0x88000040, + 0x0000004a, 0x00000000, 0x544403f6, 0x00088868, + } }, + { { /* 262 */ + 0x00000081, 0x40000000, 0x00000100, 0x02000000, + 0x00080600, 0x00000000, 0x00000000, 0x00000000, + } }, + { { /* 263 */ + 0x00000080, 0x00000040, 0x00000000, 0x00001040, + 0x00000000, 0xf7cdef3f, 0x7ce2ff73, 0x7ffff8fe, + } }, + { { /* 264 */ + 0x3f89fdfe, 0x009333fc, 0x042012c2, 0x07080c06, + 0x01101624, 0x00000000, 0x00000000, 0x00000000, + } }, + { { /* 265 */ + 0xe0000000, 0xfff3fffe, 0x7f79fc9f, 0x00f928df, + 0x80120c32, 0xd53a0008, 0xec021858, 0x2e289d18, + } }, + { { /* 266 */ + 0xe0109620, 0x2622d60c, 0x02000f91, 0x9055b240, + 0x501180a2, 0x04049800, 0x00004000, 0x00000000, + } }, + { { /* 267 */ + 0x00000000, 0x00000000, 0x00000000, 0xf991fbc0, + 0xdffb0ff8, 0x62430808, 0xfb3b41b6, 0x23896f74, + } }, + { { /* 268 */ + 0xecd7ae7f, 0x5900e047, 0x0989a096, 0xa030612c, + 0x2aaa090d, 0x4f7bd44e, 0x388bc4b2, 0x6110a9c6, + } }, + { { /* 269 */ + 0x42000014, 0x0202800c, 0x64853e48, 0x83f7d63e, + 0x0c073aa0, 0x04300400, 0x1002f680, 0x00000000, + } }, + { { /* 270 */ + 0x00000000, 0x00000000, 0x00000000, 0x00100000, + 0x00004000, 0x00004000, 0x00000100, 0x00000000, + } }, + { { /* 271 */ + 0x00000000, 0x40000000, 0x00000000, 0x00000400, + 0x00008000, 0x00000000, 0x00400400, 0x00000000, + } }, + { { /* 272 */ + 0x00000000, 0x40000000, 0x00000000, 0x00000800, + 0xe2bc4f00, 0xc83e7fe7, 0x3b00007f, 0xc7c73e0e, + } }, + { { /* 273 */ + 0x0f83193f, 0x1e31f37e, 0x38033687, 0x8041a008, + 0x00000000, 0x00000000, 0x00000000, 0x7f9fef00, + } }, + { { /* 274 */ + 0xb017c367, 0xb87e4406, 0x88313bf5, 0x00f41796, + 0x1391a960, 0x42490080, 0x0024f2f3, 0x42c88701, + } }, + { { /* 275 */ + 0x5048e3d3, 0x43052400, 0x4a4c0000, 0x10580227, + 0x01102820, 0x0014a809, 0x00000000, 0x006822c0, + } }, + { { /* 276 */ + 0x00000000, 0x00000000, 0x00000000, 0xffe00000, + 0x31db87ff, 0x00000091, 0xc1204000, 0x00000180, + } }, + { { /* 277 */ + 0x00012000, 0x00004000, 0x00300000, 0xb4f7e028, + 0x03c4adf3, 0x00000120, 0x00000000, 0x00000000, + } }, + { { /* 278 */ + 0x00000000, 0x00000000, 0x00000000, 0xfe7bf000, + 0x45c39df4, 0x15c301b2, 0x810a0027, 0x0a00a842, + } }, + { { /* 279 */ + 0x80088108, 0x18048008, 0x0012a3be, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + } }, + { { /* 280 */ + 0x00000000, 0x00000000, 0x00000000, 0x90000000, + 0x10006806, 0x01000810, 0xc0400008, 0x00000004, + } }, + { { /* 281 */ + 0x80000000, 0xe1eea06f, 0x41a2c438, 0xc00b2018, + 0xa00c0804, 0x09100040, 0x8112e210, 0x420086a5, + } }, + { { /* 282 */ + 0x02896800, 0x0a809005, 0x00030010, 0x80000000, + 0x8e001819, 0x00000001, 0x00000000, 0x00000000, + } }, + { { /* 283 */ + 0x00000010, 0x00000000, 0x40000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000028, + } }, + { { /* 284 */ + 0x00000000, 0xffffffff, 0xffffffff, 0xffffffff, + 0x00000000, 0x00838080, 0x00800000, 0x00800000, + } }, + { { /* 285 */ + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x02002e80, 0x00000000, + } }, + { { /* 286 */ + 0x33180000, 0x082400e0, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + } }, + { { /* 287 */ + 0x00000228, 0x00000000, 0x00000000, 0x000003ff, + 0x03cf0000, 0x00000000, 0x00000000, 0x00000000, + } }, + { { /* 288 */ + 0xc4200000, 0x00304e29, 0x00040000, 0x000000c3, + 0x02200000, 0x80000020, 0x00000000, 0x00000000, + } }, + { { /* 289 */ + 0x11111005, 0x10101010, 0xffff0000, 0x001fffff, + 0x0038fffe, 0x300c0003, 0x0000c8c0, 0x0000003c, + } }, + { { /* 290 */ + 0x00000060, 0x00000000, 0x00000005, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + } }, + { { /* 291 */ + 0x6037ff0f, 0x000003fe, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + } }, + { { /* 292 */ + 0xffffffe0, 0x000003ff, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + } }, + { { /* 293 */ + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000008, 0x00000000, 0x00000000, + } }, + { { /* 294 */ + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x7000c000, 0x00000002, 0x00264010, 0x00000000, + } }, + { { /* 295 */ + 0xc373ff8b, 0x1b0f6840, 0xf34ce9ac, 0xc0080200, + 0xca3e795c, 0x06487976, 0xf7f02fdf, 0xa8ff033a, + } }, + { { /* 296 */ + 0x233fef37, 0xfd59b004, 0xfffff3ca, 0xfff9de9f, + 0x7df7abff, 0x8eecc000, 0xffdbeebf, 0x45fad003, + } }, + { { /* 297 */ + 0xdffefae1, 0x10abbfef, 0xfcaaffeb, 0x24fdef3f, + 0x7f7678ad, 0xedfff00c, 0x2cfacff6, 0xeb6bf7f9, + } }, + { { /* 298 */ + 0x95bf1ffd, 0xbfbf6677, 0xfeb43bfb, 0x11e27bae, + 0x41bea681, 0x72c31435, 0x71917d70, 0x276b0003, + } }, + { { /* 299 */ + 0x70cf57cb, 0x0def4732, 0xfc747eda, 0xbdb4fe06, + 0x8bca3f9f, 0x58007e49, 0xebec228f, 0xddbb8a5c, + } }, + { { /* 300 */ + 0xb6e7ef60, 0xf293a40f, 0x549e37bb, 0x9bafd04b, + 0xf7d4c414, 0x0a1430b0, 0x88d02f08, 0x192fff7e, + } }, + { { /* 301 */ + 0xfb07ffda, 0x7beb7ff1, 0x0010c5ef, 0xfdff99ff, + 0x056779d7, 0xfdcbffe7, 0x4040c3ff, 0xbd8e6ff7, + } }, + { { /* 302 */ + 0x0497dffa, 0x5bfff4c0, 0xd0e7ed7b, 0xf8e0047e, + 0xb73eff9f, 0x882e7dfe, 0xbe7ffffd, 0xf6c483fe, + } }, + { { /* 303 */ + 0xb8fdf357, 0xef7dd680, 0x47885767, 0xc3dfff7d, + 0x37a9f0ff, 0x70fc7de0, 0xec9a3f6f, 0x86814cb3, + } }, + { { /* 304 */ + 0xdd5c3f9e, 0x4819f70d, 0x0007fea3, 0x38ffaf56, + 0xefb8980d, 0xb760403d, 0x9035d8ce, 0x3fff72bf, + } }, + { { /* 305 */ + 0x7a117ff7, 0xabfff7bb, 0x6fbeff00, 0xfe72a93c, + 0xf11bcfef, 0xfc0adb6b, 0xef7ec3e6, 0xf6109b9c, + } }, + { { /* 306 */ + 0x16f4f048, 0x5182feb5, 0x15bbc7b1, 0xfbdf6e87, + 0x63cde43f, 0x7e7ec1ff, 0x7d5ffdeb, 0xfcfe777b, + } }, + { { /* 307 */ + 0xdbea960b, 0x53e86229, 0xfdef37df, 0xbd8136f5, + 0xfcbddc18, 0xffffd2e4, 0xffe03fd7, 0xaff87f6f, + } }, + { { /* 308 */ + 0x6ed99bae, 0xf115f5fb, 0xbdfb79a9, 0xadaf5a3c, + 0x1facdbba, 0x837971fc, 0xc35f7cf7, 0x0567dfff, + } }, + { { /* 309 */ + 0x8467ff9a, 0xdf8b1534, 0x3373f9f3, 0x5e1af7bd, + 0xa03fbf40, 0x01ebffff, 0xcfdddfc0, 0xabd37500, + } }, + { { /* 310 */ + 0xeed6f8c3, 0xb7ff43fd, 0x42275eaf, 0xf6869bac, + 0xf6bc27d7, 0x35b7f787, 0xe176aacd, 0xe29f49e7, + } }, + { { /* 311 */ + 0xaff2545c, 0x61d82b3f, 0xbbb8fc3b, 0x7b7dffcf, + 0x1ce0bf95, 0x43ff7dfd, 0xfffe5ff6, 0xc4ced3ef, + } }, + { { /* 312 */ + 0xadbc8db6, 0x11eb63dc, 0x23d0df59, 0xf3dbbeb4, + 0xdbc71fe7, 0xfae4ff63, 0x63f7b22b, 0xadbaed3b, + } }, + { { /* 313 */ + 0x7efffe01, 0x02bcfff7, 0xef3d32ff, 0x8005fffc, + 0xbcf577fb, 0xfff7010d, 0xbf3afffb, 0xdfff0057, + } }, + { { /* 314 */ + 0xbd7def7b, 0xc8d4db88, 0xed7cfff3, 0x56ff5dee, + 0xac5f7e0d, 0xd57fff96, 0xc1403fee, 0xffe76ff9, + } }, + { { /* 315 */ + 0x8e77779b, 0xe45d6ebf, 0x5f1f6fcf, 0xfedfe07f, + 0x01fed7db, 0xfb7bff00, 0x1fdfffd4, 0xfffff800, + } }, + { { /* 316 */ + 0x007bfb8f, 0x7f5cbf00, 0x07f3ffff, 0x3de7eba0, + 0xfbd7f7bf, 0x6003ffbf, 0xbfedfffd, 0x027fefbb, + } }, + { { /* 317 */ + 0xddfdfe40, 0xe2f9fdff, 0xfb1f680b, 0xaffdfbe3, + 0xf7ed9fa4, 0xf80f7a7d, 0x0fd5eebe, 0xfd9fbb5d, + } }, + { { /* 318 */ + 0x3bf9f2db, 0xebccfe7f, 0x73fa876a, 0x9ffc95fc, + 0xfaf7109f, 0xbbcdddb7, 0xeccdf87e, 0x3c3ff366, + } }, + { { /* 319 */ + 0xb03ffffd, 0x067ee9f7, 0xfe0696ae, 0x5fd7d576, + 0xa3f33fd1, 0x6fb7cf07, 0x7f449fd1, 0xd3dd7b59, + } }, + { { /* 320 */ + 0xa9bdaf3b, 0xff3a7dcf, 0xf6ebfbe0, 0xffffb401, + 0xb7bf7afa, 0x0ffdc000, 0xff1fff7f, 0x95fffefc, + } }, + { { /* 321 */ + 0xb5dc0000, 0x3f3eef63, 0x001bfb7f, 0xfbf6e800, + 0xb8df9eef, 0x003fff9f, 0xf5ff7bd0, 0x3fffdfdb, + } }, + { { /* 322 */ + 0x00bffdf0, 0xbbbd8420, 0xffdedf37, 0x0ff3ff6d, + 0x5efb604c, 0xfafbfffb, 0x0219fe5e, 0xf9de79f4, + } }, + { { /* 323 */ + 0xebfaa7f7, 0xff3401eb, 0xef73ebd3, 0xc040afd7, + 0xdcff72bb, 0x2fd8f17f, 0xfe0bb8ec, 0x1f0bdda3, + } }, + { { /* 324 */ + 0x47cf8f1d, 0xffdeb12b, 0xda737fee, 0xcbc424ff, + 0xcbf2f75d, 0xb4edecfd, 0x4dddbff9, 0xfb8d99dd, + } }, + { { /* 325 */ + 0xaf7bbb7f, 0xc959ddfb, 0xfab5fc4f, 0x6d5fafe3, + 0x3f7dffff, 0xffdb7800, 0x7effb6ff, 0x022ffbaf, + } }, + { { /* 326 */ + 0xefc7ff9b, 0xffffffa5, 0xc7000007, 0xfff1f7ff, + 0x01bf7ffd, 0xfdbcdc00, 0xffffbff5, 0x3effff7f, + } }, + { { /* 327 */ + 0xbe000029, 0xff7ff9ff, 0xfd7e6efb, 0x039ecbff, + 0xfbdde300, 0xf6dfccff, 0x117fffff, 0xfbf6f800, + } }, + { { /* 328 */ + 0xd73ce7ef, 0xdfeffeef, 0xedbfc00b, 0xfdcdfedf, + 0x40fd7bf5, 0xb75fffff, 0xf930ffdf, 0xdc97fbdf, + } }, + { { /* 329 */ + 0xbff2fef3, 0xdfbf8fdf, 0xede6177f, 0x35530f7f, + 0x877e447c, 0x45bbfa12, 0x779eede0, 0xbfd98017, + } }, + { { /* 330 */ + 0xde897e55, 0x0447c16f, 0xf75d7ade, 0x290557ff, + 0xfe9586f7, 0xf32f97b3, 0x9f75cfff, 0xfb1771f7, + } }, + { { /* 331 */ + 0xee1934ee, 0xef6137cc, 0xef4c9fd6, 0xfbddd68f, + 0x6def7b73, 0xa431d7fe, 0x97d75e7f, 0xffd80f5b, + } }, + { { /* 332 */ + 0x7bce9d83, 0xdcff22ec, 0xef87763d, 0xfdeddfe7, + 0xa0fc4fff, 0xdbfc3b77, 0x7fdc3ded, 0xf5706fa9, + } }, + { { /* 333 */ + 0x2c403ffb, 0x847fff7f, 0xdeb7ec57, 0xf22fe69c, + 0xd5b50feb, 0xede7afeb, 0xfff08c2f, 0xe8f0537f, + } }, + { { /* 334 */ + 0xb5ffb99d, 0xe78fff66, 0xbe10d981, 0xe3c19c7c, + 0x27339cd1, 0xff6d0cbc, 0xefb7fcb7, 0xffffa0df, + } }, + { { /* 335 */ + 0xfe7bbf0b, 0x353fa3ff, 0x97cd13cc, 0xfb277637, + 0x7e6ccfd6, 0xed31ec50, 0xfc1c677c, 0x5fbff6fa, + } }, + { { /* 336 */ + 0xae2f0fba, 0x7ffea3ad, 0xde74fcf0, 0xf200ffef, + 0xfea2fbbf, 0xbcff3daf, 0x5fb9f694, 0x3f8ff3ad, + } }, + { { /* 337 */ + 0xa01ff26c, 0x01bfffef, 0x70057728, 0xda03ff35, + 0xc7fad2fb, 0x5c1d3fbf, 0xec33ff3a, 0xfe9cb7af, + } }, + { { /* 338 */ + 0x7a9f5236, 0xe722bffa, 0xfcff9ff7, 0xb61d2fbb, + 0x1dfded06, 0xefdf7dd7, 0xf166eb23, 0x0dc07ed9, + } }, + { { /* 339 */ + 0xdfbf3d3d, 0xba83c945, 0x9dd07dd1, 0xcf737b87, + 0xc3f59ff3, 0xc5fedf0d, 0x83020cb3, 0xaec0e879, + } }, + { { /* 340 */ + 0x6f0fc773, 0x093ffd7d, 0x0157fff1, 0x01ff62fb, + 0x3bf3fdb4, 0x43b2b013, 0xff305ed3, 0xeb9f0fff, + } }, + { { /* 341 */ + 0xf203feef, 0xfb893fef, 0x9e9937a9, 0xa72cdef9, + 0xc1f63733, 0xfe3e81ae, 0xf2f75d20, 0x69d7d585, + } }, + { { /* 342 */ + 0xffffffff, 0xff6fdb07, 0xd97fc4ff, 0xbe0fefce, + 0xf05ef17b, 0xffb7f6cf, 0xef845ef7, 0x0edfd7cb, + } }, + { { /* 343 */ + 0xfcffff08, 0xffffee3f, 0xd7ff13ff, 0x7ffdaf0f, + 0x1ffabdc7, 0x00000000, 0x00000000, 0x00000000, + } }, + { { /* 344 */ + 0x00000000, 0xe7400000, 0xf933bd38, 0xfeed7feb, + 0x7c767fe8, 0xffefb3f7, 0xd8b7feaf, 0xfbbfff6f, + } }, + { { /* 345 */ + 0xdbf7f8fb, 0xe2f91752, 0x754785c8, 0xe3ef9090, + 0x3f6d9ef4, 0x0536ee2e, 0x7ff3f7bc, 0x7f3fa07b, + } }, + { { /* 346 */ + 0xeb600567, 0x6601babe, 0x583ffcd8, 0x87dfcaf7, + 0xffa0bfcd, 0xfebf5bcd, 0xefa7b6fd, 0xdf9c77ef, + } }, + { { /* 347 */ + 0xf8773fb7, 0xb7fc9d27, 0xdfefcab5, 0xf1b6fb5a, + 0xef1fec39, 0x7ffbfbbf, 0xdafe000d, 0x4e7fbdfb, + } }, + { { /* 348 */ + 0x5ac033ff, 0x9ffebff5, 0x005fffbf, 0xfdf80000, + 0x6ffdffca, 0xa001cffd, 0xfbf2dfff, 0xff7fdfbf, + } }, + { { /* 349 */ + 0x080ffeda, 0xbfffba08, 0xeed77afd, 0x67f9fbeb, + 0xff93e044, 0x9f57df97, 0x08dffef7, 0xfedfdf80, + } }, + { { /* 350 */ + 0xf7feffc5, 0x6803fffb, 0x6bfa67fb, 0x5fe27fff, + 0xff73ffff, 0xe7fb87df, 0xf7a7ebfd, 0xefc7bf7e, + } }, + { { /* 351 */ + 0xdf821ef3, 0xdf7e76ff, 0xda7d79c9, 0x1e9befbe, + 0x77fb7ce0, 0xfffb87be, 0xffdb1bff, 0x4fe03f5c, + } }, + { { /* 352 */ + 0x5f0e7fff, 0xddbf77ff, 0xfffff04f, 0x0ff8ffff, + 0xfddfa3be, 0xfffdfc1c, 0xfb9e1f7d, 0xdedcbdff, + } }, + { { /* 353 */ + 0xbafb3f6f, 0xfbefdf7f, 0x2eec7d1b, 0xf2f7af8e, + 0xcfee7b0f, 0x77c61d96, 0xfff5fe07, 0x7fdfd982, + } }, + { { /* 354 */ + 0xc7ff5ee6, 0x79effeee, 0xffcf9a56, 0xde5efe5f, + 0xf9e8896e, 0xe6c4f45e, 0xbe7c0001, 0xdddf3b7f, + } }, + { { /* 355 */ + 0xe9efd59d, 0xde5334ac, 0x4bf7f573, 0x9eff7b4f, + 0x476eb8fe, 0xff450dfb, 0xfbfeabfd, 0xddffe9d7, + } }, + { { /* 356 */ + 0x7fffedf7, 0x7eebddfd, 0xb7ffcfe7, 0xef91bde9, + 0xd77c5d75, 0x00000000, 0x00000000, 0x00000000, + } }, + { { /* 357 */ + 0x00000000, 0xfa800000, 0xb4f1ffee, 0x2fefbf76, + 0x77bfb677, 0xfffd9fbf, 0xf6ae95bf, 0x7f3b75ff, + } }, + { { /* 358 */ + 0x0af9a7f5, 0x00000000, 0x00000000, 0x2bddfbd0, + 0x9a7ff633, 0xd6fcfdab, 0xbfebf9e6, 0xf41fdfdf, + } }, + { { /* 359 */ + 0xffffa6fd, 0xf37b4aff, 0xfef97fb7, 0x1d5cb6ff, + 0xe5ff7ff6, 0x24041f7b, 0xf99ebe05, 0xdff2dbe3, + } }, + { { /* 360 */ + 0xfdff6fef, 0xcbfcd679, 0xefffebfd, 0x0000001f, + 0x98000000, 0x8017e148, 0x00fe6a74, 0xfdf16d7f, + } }, + { { /* 361 */ + 0xfef3b87f, 0xf176e01f, 0x7b3fee96, 0xfffdeb8d, + 0xcbb3adff, 0xe17f84ef, 0xbff04daa, 0xfe3fbf3f, + } }, + { { /* 362 */ + 0xffd7ebff, 0xcf7fffdf, 0x85edfffb, 0x07bcd73f, + 0xfe0faeff, 0x76bffdaf, 0x37bbfaef, 0xa3ba7fdc, + } }, + { { /* 363 */ + 0x56f7b6ff, 0xe7df60f8, 0x4cdfff61, 0xff45b0fb, + 0x3ffa7ded, 0x1afc1fff, 0xe3afffff, 0xdf83c7d3, + } }, + { { /* 364 */ + 0xef7dfb57, 0x1378efff, 0x5ff7fec0, 0x5ee334bb, + 0xeff6f70d, 0x00bfd7fe, 0xf7f7f59d, 0xffe051de, + } }, + { { /* 365 */ + 0x037ffec9, 0xbfef5f01, 0x60a79ff1, 0xf1ffef1d, + 0x0000000f, 0x00000000, 0x00000000, 0x00000000, + } }, + { { /* 366 */ + 0x00000000, 0x00000000, 0x00000000, 0x3c800000, + 0xd91ffb4d, 0xfee37b3a, 0xdc7f3fe9, 0x0000003f, + } }, + { { /* 367 */ + 0x50000000, 0xbe07f51f, 0xf91bfc1d, 0x71ffbc1e, + 0x5bbe6ff9, 0x9b1b5796, 0xfffc7fff, 0xafe7872e, + } }, + { { /* 368 */ + 0xf34febf5, 0xe725dffd, 0x5d440bdc, 0xfddd5747, + 0x7790ed3f, 0x8ac87d7f, 0xf3f9fafa, 0xef4b202a, + } }, + { { /* 369 */ + 0x79cff5ff, 0x0ba5abd3, 0xfb8ff77a, 0x001f8ebd, + 0x00000000, 0xfd4ef300, 0x88001a57, 0x7654aeac, + } }, + { { /* 370 */ + 0xcdff17ad, 0xf42fffb2, 0xdbff5baa, 0x00000002, + 0x73c00000, 0x2e3ff9ea, 0xbbfffa8e, 0xffd376bc, + } }, + { { /* 371 */ + 0x7e72eefe, 0xe7f77ebd, 0xcefdf77f, 0x00000ff5, + 0x00000000, 0xdb9ba900, 0x917fa4c7, 0x7ecef8ca, + } }, + { { /* 372 */ + 0xc7e77d7a, 0xdcaecbbd, 0x8f76fd7e, 0x7cf391d3, + 0x4c2f01e5, 0xa360ed77, 0x5ef807db, 0x21811df7, + } }, + { { /* 373 */ + 0x309c6be0, 0xfade3b3a, 0xc3f57f53, 0x07ba61cd, + 0x00000000, 0x00000000, 0x00000000, 0xbefe26e0, + } }, + { { /* 374 */ + 0xebb503f9, 0xe9cbe36d, 0xbfde9c2f, 0xabbf9f83, + 0xffd51ff7, 0xdffeb7df, 0xffeffdae, 0xeffdfb7e, + } }, + { { /* 375 */ + 0x6ebfaaff, 0x00000000, 0x00000000, 0xb6200000, + 0xbe9e7fcd, 0x58f162b3, 0xfd7bf10d, 0xbefde9f1, + } }, + { { /* 376 */ + 0x5f6dc6c3, 0x69ffff3d, 0xfbf4ffcf, 0x4ff7dcfb, + 0x11372000, 0x00000015, 0x00000000, 0x00000000, + } }, + { { /* 377 */ + 0x00003000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + } }, + { { /* 378 */ + 0x00000000, 0xfffb0000, 0xfef7fe1f, 0x00000f7f, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + } }, + { { /* 379 */ + 0xffffff7a, 0x97ffffff, 0x7ffffffe, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x0000002b, + } }, + { { /* 380 */ + 0x00000000, 0xffffffff, 0xffffffff, 0x7fffffff, + 0x00000000, 0x09f37bd1, 0xb4d86a96, 0x34d86a96, + } }, + { { /* 381 */ + 0x0f03f0fc, 0x66000000, 0xc333019e, 0x1803c00c, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + } }, + { { /* 382 */ + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x2b000080, 0x00000000, + } }, + { { /* 383 */ + 0x00000000, 0xffffffff, 0xffffffff, 0x7fffffff, + 0x00000000, 0x08e37ad1, 0x00000000, 0x00000000, + } }, + { { /* 384 */ + 0xffff41f2, 0xffffffff, 0x41f2ffff, 0x00000000, + 0x00030000, 0x00000000, 0x00000000, 0x00000000, + } }, + { { /* 385 */ + 0x77180000, 0x06010047, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + } }, + { { /* 386 */ + 0x00400000, 0x00000004, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + } }, + { { /* 387 */ + 0x00000000, 0xffffffff, 0xffffffff, 0x7fffffff, + 0x00000000, 0xffffffff, 0xffffffff, 0xffffffff, + } }, + { { /* 388 */ + 0x00000000, 0x00000004, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + } }, + { { /* 389 */ + 0x00000000, 0xffffffff, 0xffffffff, 0x7fffffff, + 0x00000000, 0x28ff7ff9, 0x00040000, 0x80000000, + } }, + { { /* 390 */ + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xffffd760, 0xfffffffb, 0x00007fff, 0x00000000, + } }, + { { /* 391 */ + 0x77380000, 0x06010047, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + } }, + { { /* 392 */ + 0x00000000, 0xffffffff, 0xffffffff, 0x7fffffff, + 0x00000000, 0xffffffff, 0x9ffeffff, 0x9ffeffff, + } }, + { { /* 393 */ + 0xc0000000, 0x00030000, 0xc0000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + } }, + { { /* 394 */ + 0x00000000, 0xffffffff, 0xffffffff, 0x7fffffff, + 0x00000000, 0xffffffef, 0xfe000400, 0x98000000, + } }, + { { /* 395 */ + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0xfbff0000, 0xffff000f, 0x001f07ff, + } }, + { { /* 396 */ + 0x7718c000, 0x06010047, 0x00000000, 0x00000000, + 0x00000000, 0x00000400, 0x00000000, 0x00000000, + } }, + { { /* 397 */ + 0x00000000, 0xffffffff, 0xffffffff, 0x7fffffff, + 0x00000000, 0x7bfffffd, 0x00800001, 0x9a90cf85, + } }, + { { /* 398 */ + 0x88001000, 0x07fffffe, 0x0007ffff, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + } }, + { { /* 399 */ + 0x7718f000, 0x06010047, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + } }, + { { /* 400 */ + 0x00000000, 0xffffffff, 0xffffffff, 0x7fffffff, + 0x00000000, 0x7bff7aff, 0x91e80270, 0x10e80270, + } }, + { { /* 401 */ + 0x03cc30f3, 0x18c0cc0c, 0x0cc0307e, 0x7e0c0c03, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + } }, + { { /* 402 */ + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x02000000, 0x00000000, + } }, +}; + +#define L(n) ((FcCharLeaf *) &leaves[n]) + +static const FcCharLeaf *leaves_Thai_874[3] = { + L( 0), L( 1), L( 2), +}; + +static const FcChar16 numbers_Thai_874[3] = { + 0x0000, 0x000e, 0x0020, +}; + +static const FcCharLeaf *leaves_Korean_949[85] = { + L( 3), L( 4), L( 5), L( 6), L( 7), L( 8), L( 9), L( 10), + L( 11), L( 12), L( 13), L( 14), L( 15), L( 16), L( 17), L( 18), + L( 19), L( 20), L( 21), L( 22), L( 23), L( 24), L( 25), L( 26), + L( 27), L( 28), L( 29), L( 30), L( 31), L( 32), L( 33), L( 34), + L( 35), L( 36), L( 37), L( 38), L( 39), L( 40), L( 41), L( 42), + L( 43), L( 44), L( 45), L( 46), L( 47), L( 48), L( 49), L( 50), + L( 51), L( 52), L( 53), L( 54), L( 55), L( 56), L( 57), L( 58), + L( 59), L( 60), L( 61), L( 62), L( 63), L( 64), L( 65), L( 66), + L( 67), L( 68), L( 69), L( 70), L( 71), L( 72), L( 73), L( 74), + L( 75), L( 76), L( 77), L( 78), L( 79), L( 80), L( 81), L( 82), + L( 83), L( 84), L( 85), L( 86), L( 87), +}; + +static const FcChar16 numbers_Korean_949[85] = { + 0x0000, 0x004e, 0x004f, 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, + 0x0055, 0x0056, 0x0057, 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, + 0x005d, 0x005e, 0x005f, 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, + 0x0065, 0x0066, 0x0067, 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, + 0x006d, 0x006e, 0x006f, 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, + 0x0075, 0x0076, 0x0077, 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, + 0x007d, 0x007e, 0x007f, 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, + 0x0085, 0x0086, 0x0087, 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, + 0x008d, 0x008e, 0x008f, 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, + 0x0095, 0x0096, 0x0097, 0x0098, 0x0099, 0x009a, 0x009b, 0x009c, + 0x009d, 0x009e, 0x009f, 0x00f9, 0x00fa, +}; + +static const FcCharLeaf *leaves_Japanese_932[98] = { + L( 88), L( 89), L( 90), L( 91), L( 92), L( 93), L( 94), L( 95), + L( 96), L( 97), L( 98), L( 99), L(100), L(101), L(102), L(103), + L(104), L(105), L(106), L(107), L(108), L(109), L(110), L(111), + L(112), L(113), L(114), L(115), L(116), L(117), L(118), L(119), + L(120), L(121), L(122), L(123), L(124), L(125), L(126), L(127), + L(128), L(129), L(130), L(131), L(132), L(133), L(134), L(135), + L(136), L(137), L(138), L(139), L(140), L(141), L(142), L(143), + L(144), L(145), L(146), L(147), L(148), L(149), L(150), L(151), + L(152), L(153), L(154), L(155), L(156), L(157), L(158), L(159), + L(160), L(161), L(162), L(163), L(164), L(165), L(166), L(167), + L(168), L(169), L(170), L(171), L(172), L(173), L(174), L(175), + L(176), L(177), L(178), L(179), L(180), L(181), L(182), L(183), + L(184), L(185), +}; + +static const FcChar16 numbers_Japanese_932[98] = { + 0x0000, 0x0003, 0x0004, 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, + 0x0025, 0x0026, 0x0030, 0x0032, 0x0033, 0x004e, 0x004f, 0x0050, + 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, + 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, 0x0060, + 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 0x0068, + 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070, + 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, + 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f, 0x0080, + 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, 0x0088, + 0x0089, 0x008a, 0x008b, 0x008c, 0x008d, 0x008e, 0x008f, 0x0090, + 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, 0x0098, + 0x0099, 0x009a, 0x009b, 0x009c, 0x009d, 0x009e, 0x009f, 0x00f9, + 0x00fa, 0x00ff, +}; + +static const FcCharLeaf *leaves_SimplifiedChinese_936[98] = { + L(186), L(187), L(188), L(189), L(190), L(191), L(192), L(193), + L(194), L(195), L(196), L(197), L(198), L(199), L(200), L(201), + L(202), L(203), L(204), L(205), L(206), L(207), L(208), L(209), + L(210), L(211), L(212), L(213), L(214), L(215), L(216), L(217), + L(218), L(219), L(220), L(221), L(222), L(223), L(224), L(225), + L(226), L(227), L(228), L(229), L(230), L(231), L(232), L(233), + L(234), L(235), L(236), L(237), L(238), L(239), L(240), L(241), + L(242), L(243), L(244), L(245), L(246), L(247), L(248), L(249), + L(250), L(251), L(252), L(253), L(254), L(255), L(256), L(257), + L(258), L(259), L(260), L(261), L(262), L(263), L(264), L(265), + L(266), L(267), L(268), L(269), L(270), L(271), L(272), L(273), + L(274), L(275), L(276), L(277), L(278), L(279), L(280), L(281), + L(282), L(283), +}; + +static const FcChar16 numbers_SimplifiedChinese_936[98] = { + 0x0001, 0x0002, 0x0004, 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, + 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, 0x0030, 0x0031, 0x0049, + 0x004e, 0x004f, 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, + 0x0056, 0x0057, 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, + 0x005e, 0x005f, 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, + 0x0066, 0x0067, 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, + 0x006e, 0x006f, 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, + 0x0076, 0x0077, 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, + 0x007e, 0x007f, 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, + 0x0086, 0x0087, 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x008d, + 0x008e, 0x008f, 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, + 0x0096, 0x0097, 0x0098, 0x0099, 0x009a, 0x009b, 0x009c, 0x009e, + 0x009f, 0x00ff, +}; + +static const FcCharLeaf *leaves_TraditionalChinese_950[97] = { + L(284), L(285), L( 89), L(286), L(287), L(288), L(289), L(290), + L(291), L(292), L(293), L(294), L(295), L(296), L(297), L(298), + L(299), L(300), L(301), L(302), L(303), L(304), L(305), L(306), + L(307), L(308), L(309), L(310), L(311), L(312), L(313), L(314), + L(315), L(316), L(317), L(318), L(319), L(320), L(321), L(322), + L(323), L(324), L(325), L(326), L(327), L(328), L(329), L(330), + L(331), L(332), L(333), L(334), L(335), L(336), L(337), L(338), + L(339), L(340), L(341), L(342), L(343), L(344), L(345), L(346), + L(347), L(348), L(349), L(350), L(351), L(352), L(353), L(354), + L(355), L(356), L(357), L(358), L(359), L(360), L(361), L(362), + L(363), L(364), L(365), L(366), L(367), L(368), L(369), L(370), + L(371), L(372), L(373), L(374), L(375), L(376), L(377), L(378), + L(379), +}; + +static const FcChar16 numbers_TraditionalChinese_950[97] = { + 0x0000, 0x0002, 0x0003, 0x0020, 0x0021, 0x0022, 0x0025, 0x0026, + 0x0030, 0x0031, 0x0032, 0x0033, 0x004e, 0x004f, 0x0050, 0x0051, + 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, 0x0059, + 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, 0x0060, 0x0061, + 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 0x0068, 0x0069, + 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070, 0x0071, + 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, 0x0079, + 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f, 0x0080, 0x0081, + 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, 0x0088, 0x0089, + 0x008a, 0x008b, 0x008c, 0x008d, 0x008e, 0x008f, 0x0090, 0x0091, + 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, 0x0098, 0x0099, + 0x009a, 0x009b, 0x009c, 0x009d, 0x009e, 0x009f, 0x00fa, 0x00fe, + 0x00ff, +}; + +static const FcCharLeaf *leaves_Latin2_1250[3] = { + L(380), L(381), L(382), +}; + +static const FcChar16 numbers_Latin2_1250[3] = { + 0x0000, 0x0001, 0x0002, +}; + +static const FcCharLeaf *leaves_Cyrillic_1251[4] = { + L(383), L(384), L(385), L(386), +}; + +static const FcChar16 numbers_Cyrillic_1251[4] = { + 0x0000, 0x0004, 0x0020, 0x0021, +}; + +static const FcCharLeaf *leaves_Latin1_1252[3] = { + L(387), L(385), L(388), +}; + +static const FcChar16 numbers_Latin1_1252[3] = { + 0x0000, 0x0020, 0x0021, +}; + +static const FcCharLeaf *leaves_Greek_1253[4] = { + L(389), L(390), L(391), L(388), +}; + +static const FcChar16 numbers_Greek_1253[4] = { + 0x0000, 0x0003, 0x0020, 0x0021, +}; + +static const FcCharLeaf *leaves_Turkish_1254[4] = { + L(392), L(393), L(385), L(388), +}; + +static const FcChar16 numbers_Turkish_1254[4] = { + 0x0000, 0x0001, 0x0020, 0x0021, +}; + +static const FcCharLeaf *leaves_Hebrew_1255[4] = { + L(394), L(395), L(396), L(388), +}; + +static const FcChar16 numbers_Hebrew_1255[4] = { + 0x0000, 0x0005, 0x0020, 0x0021, +}; + +static const FcCharLeaf *leaves_Arabic_1256[4] = { + L(397), L(398), L(399), L(388), +}; + +static const FcChar16 numbers_Arabic_1256[4] = { + 0x0000, 0x0006, 0x0020, 0x0021, +}; + +static const FcCharLeaf *leaves_Windows_Baltic_1257[5] = { + L(400), L(401), L(402), L(385), L(388), +}; + +static const FcChar16 numbers_Windows_Baltic_1257[5] = { + 0x0000, 0x0001, 0x0002, 0x0020, 0x0021, +}; + +#undef L + +static const FcCharSet fcCharSet_Thai_874 = { + 1, FcTrue, 3, (FcCharLeaf **) leaves_Thai_874, (FcChar16 *) numbers_Thai_874 +}; + +#define fcCharSet_Thai_874_size 193 + +static const FcCharSet fcCharSet_Korean_949 = { + 1, FcTrue, 85, (FcCharLeaf **) leaves_Korean_949, (FcChar16 *) numbers_Korean_949 +}; + +#define fcCharSet_Korean_949_size 4984 + +static const FcCharSet fcCharSet_Japanese_932 = { + 1, FcTrue, 98, (FcCharLeaf **) leaves_Japanese_932, (FcChar16 *) numbers_Japanese_932 +}; + +#define fcCharSet_Japanese_932_size 7485 + +static const FcCharSet fcCharSet_SimplifiedChinese_936 = { + 1, FcTrue, 98, (FcCharLeaf **) leaves_SimplifiedChinese_936, (FcChar16 *) numbers_SimplifiedChinese_936 +}; + +#define fcCharSet_SimplifiedChinese_936_size 6494 + +static const FcCharSet fcCharSet_TraditionalChinese_950 = { + 1, FcTrue, 97, (FcCharLeaf **) leaves_TraditionalChinese_950, (FcChar16 *) numbers_TraditionalChinese_950 +}; + +#define fcCharSet_TraditionalChinese_950_size 13588 + +static const FcCharSet fcCharSet_Latin2_1250 = { + 1, FcTrue, 3, (FcCharLeaf **) leaves_Latin2_1250, (FcChar16 *) numbers_Latin2_1250 +}; + +#define fcCharSet_Latin2_1250_size 191 + +static const FcCharSet fcCharSet_Cyrillic_1251 = { + 1, FcTrue, 4, (FcCharLeaf **) leaves_Cyrillic_1251, (FcChar16 *) numbers_Cyrillic_1251 +}; + +#define fcCharSet_Cyrillic_1251_size 207 + +static const FcCharSet fcCharSet_Latin1_1252 = { + 1, FcTrue, 3, (FcCharLeaf **) leaves_Latin1_1252, (FcChar16 *) numbers_Latin1_1252 +}; + +#define fcCharSet_Latin1_1252_size 207 + +static const FcCharSet fcCharSet_Greek_1253 = { + 1, FcTrue, 4, (FcCharLeaf **) leaves_Greek_1253, (FcChar16 *) numbers_Greek_1253 +}; + +#define fcCharSet_Greek_1253_size 207 + +static const FcCharSet fcCharSet_Turkish_1254 = { + 1, FcTrue, 4, (FcCharLeaf **) leaves_Turkish_1254, (FcChar16 *) numbers_Turkish_1254 +}; + +#define fcCharSet_Turkish_1254_size 207 + +static const FcCharSet fcCharSet_Hebrew_1255 = { + 1, FcTrue, 4, (FcCharLeaf **) leaves_Hebrew_1255, (FcChar16 *) numbers_Hebrew_1255 +}; + +#define fcCharSet_Hebrew_1255_size 207 + +static const FcCharSet fcCharSet_Arabic_1256 = { + 1, FcTrue, 4, (FcCharLeaf **) leaves_Arabic_1256, (FcChar16 *) numbers_Arabic_1256 +}; + +#define fcCharSet_Arabic_1256_size 209 + +static const FcCharSet fcCharSet_Windows_Baltic_1257 = { + 1, FcTrue, 5, (FcCharLeaf **) leaves_Windows_Baltic_1257, (FcChar16 *) numbers_Windows_Baltic_1257 +}; + +#define fcCharSet_Windows_Baltic_1257_size 207 + diff --git a/src/fcmatch.c b/src/fcmatch.c index e1795fb..ace6d8c 100644 --- a/src/fcmatch.c +++ b/src/fcmatch.c @@ -1,5 +1,5 @@ /* - * $XFree86: xc/lib/fontconfig/src/fcmatch.c,v 1.13 2002/06/19 20:08:22 keithp Exp $ + * $XFree86: xc/lib/fontconfig/src/fcmatch.c,v 1.14 2002/06/19 21:32:18 keithp Exp $ * * Copyright © 2000 Keith Packard, member of The XFree86 Project, Inc. * @@ -97,50 +97,56 @@ FcCompareSize (char *object, FcValue value1, FcValue value2) return v; } +typedef struct _FcMatcher { + char *object; + double (*compare) (char *object, FcValue value1, FcValue value2); + int strong, weak; +} FcMatcher; + /* * Order is significant, it defines the precedence of * each value, earlier values are more significant than * later values */ static FcMatcher _FcMatchers [] = { - { FC_FOUNDRY, FcCompareString, }, -#define MATCH_FOUNDRY 0 + { FC_FOUNDRY, FcCompareString, 0, 0 }, +#define MATCH_FOUNDRY 0 - { FC_CHARSET, FcCompareCharSet }, -#define MATCH_CHARSET 1 + { FC_CHARSET, FcCompareCharSet, 1, 1 }, +#define MATCH_CHARSET 1 - { FC_LANG, FcCompareString }, -#define MATCH_LANG 2 + { FC_FAMILY, FcCompareString, 2, 4 }, +#define MATCH_FAMILY 2 - { FC_FAMILY, FcCompareString, }, -#define MATCH_FAMILY 3 + { FC_LANG, FcCompareString, 3, 3 }, +#define MATCH_LANG 3 - { FC_SPACING, FcCompareInteger, }, -#define MATCH_SPACING 4 + { FC_SPACING, FcCompareInteger, 5, 5 }, +#define MATCH_SPACING 4 - { FC_PIXEL_SIZE, FcCompareSize, }, -#define MATCH_PIXEL_SIZE 5 + { FC_PIXEL_SIZE, FcCompareSize, 6, 6 }, +#define MATCH_PIXEL_SIZE 5 - { FC_STYLE, FcCompareString, }, -#define MATCH_STYLE 6 + { FC_STYLE, FcCompareString, 7, 7 }, +#define MATCH_STYLE 6 - { FC_SLANT, FcCompareInteger, }, -#define MATCH_SLANT 7 + { FC_SLANT, FcCompareInteger, 8, 8 }, +#define MATCH_SLANT 7 - { FC_WEIGHT, FcCompareInteger, }, -#define MATCH_WEIGHT 8 + { FC_WEIGHT, FcCompareInteger, 9, 9 }, +#define MATCH_WEIGHT 8 - { FC_ANTIALIAS, FcCompareBool, }, -#define MATCH_ANTIALIAS 9 + { FC_ANTIALIAS, FcCompareBool, 10, 10 }, +#define MATCH_ANTIALIAS 9 - { FC_RASTERIZER, FcCompareString, }, -#define MATCH_RASTERIZER 10 + { FC_RASTERIZER, FcCompareString, 11, 11 }, +#define MATCH_RASTERIZER 10 - { FC_OUTLINE, FcCompareBool, }, -#define MATCH_OUTLINE 11 + { FC_OUTLINE, FcCompareBool, 12, 12 }, +#define MATCH_OUTLINE 11 }; -#define NUM_MATCHER (sizeof _FcMatchers / sizeof _FcMatchers[0]) +#define NUM_MATCH_VALUES 13 static FcBool FcCompareValueList (const char *object, @@ -151,9 +157,9 @@ FcCompareValueList (const char *object, FcResult *result) { FcValueList *v1, *v2; - double v, best; - int j; + double v, best, bestStrong, bestWeak; int i; + int j; /* * Locate the possible matching entry by examining the @@ -217,6 +223,8 @@ FcCompareValueList (const char *object, } #endif best = 1e99; + bestStrong = 1e99; + bestWeak = 1e99; j = 0; for (v1 = v1orig; v1; v1 = v1->next) { @@ -239,6 +247,16 @@ FcCompareValueList (const char *object, *bestValue = v2->value; best = v; } + if (v1->binding == FcValueBindingStrong) + { + if (v < bestStrong) + bestStrong = v; + } + else + { + if (v < bestWeak) + bestWeak = v; + } } j++; } @@ -251,7 +269,17 @@ FcCompareValueList (const char *object, printf ("\n"); } if (value) - value[i] += best; + { + int weak = _FcMatchers[i].weak; + int strong = _FcMatchers[i].strong; + if (weak == strong) + value[strong] += best; + else + { + value[weak] += bestWeak; + value[strong] += bestStrong; + } + } return FcTrue; } @@ -268,7 +296,7 @@ FcCompare (FcPattern *pat, { int i, i1, i2; - for (i = 0; i < NUM_MATCHER; i++) + for (i = 0; i < NUM_MATCH_VALUES; i++) value[i] = 0.0; i1 = 0; @@ -330,9 +358,9 @@ FcFontRenderPrepare (FcConfig *config, if (pe) { int j; - double score[NUM_MATCHER]; + double score[NUM_MATCH_VALUES]; - for (j = 0; j < NUM_MATCHER; j++) + for (j = 0; j < NUM_MATCH_VALUES; j++) score[j] = 0; if (!FcCompareValueList (pe->object, pe->values, fe->values, &v, score, &result)) @@ -340,7 +368,7 @@ FcFontRenderPrepare (FcConfig *config, FcPatternDestroy (new); return 0; } - for (j = 0; j < NUM_MATCHER; j++) + for (j = 0; j < NUM_MATCH_VALUES; j++) if (score[j] >= 100.0) { FcValueList *pv; @@ -372,14 +400,14 @@ FcFontSetMatch (FcConfig *config, FcPattern *p, FcResult *result) { - double score[NUM_MATCHER], bestscore[NUM_MATCHER]; + double score[NUM_MATCH_VALUES], bestscore[NUM_MATCH_VALUES]; int f; FcFontSet *s; FcPattern *best; int i; int set; - for (i = 0; i < NUM_MATCHER; i++) + for (i = 0; i < NUM_MATCH_VALUES; i++) bestscore[i] = 0; best = 0; if (FcDebug () & FC_DBG_MATCH) @@ -410,19 +438,19 @@ FcFontSetMatch (FcConfig *config, if (FcDebug () & FC_DBG_MATCHV) { printf ("Score"); - for (i = 0; i < NUM_MATCHER; i++) + for (i = 0; i < NUM_MATCH_VALUES; i++) { printf (" %g", score[i]); } printf ("\n"); } - for (i = 0; i < NUM_MATCHER; i++) + for (i = 0; i < NUM_MATCH_VALUES; i++) { if (best && bestscore[i] < score[i]) break; if (!best || score[i] < bestscore[i]) { - for (i = 0; i < NUM_MATCHER; i++) + for (i = 0; i < NUM_MATCH_VALUES; i++) bestscore[i] = score[i]; best = s->fonts[f]; break; @@ -433,7 +461,7 @@ FcFontSetMatch (FcConfig *config, if (FcDebug () & FC_DBG_MATCH) { printf ("Best score"); - for (i = 0; i < NUM_MATCHER; i++) + for (i = 0; i < NUM_MATCH_VALUES; i++) printf (" %g", bestscore[i]); FcPatternPrint (best); } @@ -469,7 +497,7 @@ FcFontMatch (FcConfig *config, typedef struct _FcSortNode { FcPattern *pattern; - double score[NUM_MATCHER]; + double score[NUM_MATCH_VALUES]; } FcSortNode; static int @@ -482,7 +510,7 @@ FcSortCompare (const void *aa, const void *ab) double ad = 0, bd = 0; int i; - i = NUM_MATCHER; + i = NUM_MATCH_VALUES; while (i-- && (ad = *as++) == (bd = *bs++)) ; return ad < bd ? -1 : ad > bd ? 1 : 0; @@ -589,7 +617,7 @@ FcFontSetSort (FcConfig *config, if (FcDebug () & FC_DBG_MATCHV) { printf ("Score"); - for (i = 0; i < NUM_MATCHER; i++) + for (i = 0; i < NUM_MATCH_VALUES; i++) { printf (" %g", new->score[i]); } diff --git a/src/fcname.c b/src/fcname.c index f61cf59..e6c0758 100644 --- a/src/fcname.c +++ b/src/fcname.c @@ -1,5 +1,5 @@ /* - * $XFree86: xc/lib/fontconfig/src/fcname.c,v 1.8 2002/06/19 20:08:22 keithp Exp $ + * $XFree86: xc/lib/fontconfig/src/fcname.c,v 1.9 2002/06/26 22:14:08 keithp Exp $ * * Copyright © 2000 Keith Packard, member of The XFree86 Project, Inc. * @@ -40,12 +40,17 @@ static const FcObjectType _FcBaseObjectTypes[] = { { FC_FOUNDRY, FcTypeString, }, /* { FC_CORE, FcTypeBool, }, */ { FC_ANTIALIAS, FcTypeBool, }, + { FC_HINTING, FcTypeBool, }, + { FC_VERTICAL_LAYOUT, FcTypeBool, }, + { FC_AUTOHINT, FcTypeBool, }, + { FC_GLOBAL_ADVANCE, FcTypeBool, }, /* { FC_XLFD, FcTypeString, }, */ { FC_FILE, FcTypeString, }, { FC_INDEX, FcTypeInteger, }, { FC_RASTERIZER, FcTypeString, }, { FC_OUTLINE, FcTypeBool, }, { FC_SCALABLE, FcTypeBool, }, + { FC_DPI, FcTypeDouble }, { FC_RGBA, FcTypeInteger, }, { FC_SCALE, FcTypeDouble, }, /* { FC_RENDER, FcTypeBool, },*/ diff --git a/src/fcpat.c b/src/fcpat.c index 3e19732..bab44f4 100644 --- a/src/fcpat.c +++ b/src/fcpat.c @@ -1,5 +1,5 @@ /* - * $XFree86: xc/lib/fontconfig/src/fcpat.c,v 1.7 2002/06/03 08:31:15 keithp Exp $ + * $XFree86: xc/lib/fontconfig/src/fcpat.c,v 1.9 2002/06/19 20:08:22 keithp Exp $ * * Copyright © 2000 Keith Packard, member of The XFree86 Project, Inc. * @@ -408,6 +408,7 @@ FcPatternAdd (FcPattern *p, const char *object, FcValue value, FcBool append) goto bail1; new->value = value; + new->binding = FcValueBindingStrong; new->next = 0; e = FcPatternInsertElt (p, object); -- 2.39.2