diff --git a/dlls/kernelbase/Makefile.in b/dlls/kernelbase/Makefile.in index 0fcc319e805..2cb0b2ed6a4 100644 --- a/dlls/kernelbase/Makefile.in +++ b/dlls/kernelbase/Makefile.in @@ -6,6 +6,7 @@ EXTRADLLFLAGS = -nodefaultlibs -nostartfiles -mno-cygwin C_SRCS = \ console.c \ debug.c \ + decompose.c \ digitmap.c \ file.c \ loader.c \ diff --git a/dlls/kernelbase/decompose.c b/dlls/kernelbase/decompose.c new file mode 100644 index 00000000000..c185507fd4b --- /dev/null +++ b/dlls/kernelbase/decompose.c @@ -0,0 +1,948 @@ +/* Unicode char composition */ +/* generated from http://www.unicode.org/Public/12.0.0/ucd/UnicodeData.txt */ +/* DO NOT EDIT!! */ + +#include "windef.h" + +static const WCHAR table[5856] = +{ + /* index */ + 0x0110, 0x0120, 0x0130, 0x0140, 0x0150, 0x0100, 0x0160, 0x0100, + 0x0100, 0x0170, 0x0180, 0x0190, 0x01a0, 0x01b0, 0x0100, 0x01c0, + 0x01d0, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, + 0x0100, 0x0100, 0x0100, 0x01e0, 0x0100, 0x0100, 0x01f0, 0x0200, + 0x0210, 0x0220, 0x0230, 0x0240, 0x0100, 0x0100, 0x0100, 0x0100, + 0x0100, 0x0100, 0x0250, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, + 0x0260, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, + 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, + 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, + 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, + 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, + 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, + 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, + 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, + 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, + 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, + 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, + 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, + 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, + 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, + 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, + 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, + 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, + 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, + 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, + 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, + 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, + 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, + 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, + 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, + 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, + 0x0100, 0x0270, 0x0280, 0x0290, 0x0100, 0x0100, 0x0100, 0x0100, + /* null sub-index */ + 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, + 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, + /* sub-index 00 */ + 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, + 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02c0, 0x02e0, 0x0300, 0x0320, + /* sub-index 01 */ + 0x0340, 0x0360, 0x0380, 0x03a0, 0x03c0, 0x03e0, 0x0400, 0x0420, + 0x02a0, 0x02a0, 0x0440, 0x0460, 0x0480, 0x04a0, 0x04c0, 0x04e0, + /* sub-index 02 */ + 0x0500, 0x0520, 0x0540, 0x0560, 0x02a0, 0x02a0, 0x02a0, 0x02a0, + 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, + /* sub-index 03 */ + 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x0580, 0x02a0, 0x02a0, 0x05a0, + 0x05c0, 0x05e0, 0x0600, 0x0620, 0x0640, 0x0660, 0x02a0, 0x02a0, + /* sub-index 04 */ + 0x0680, 0x06a0, 0x02a0, 0x06c0, 0x02a0, 0x06e0, 0x02a0, 0x0700, + 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x0720, 0x0740, 0x0760, 0x0780, + /* sub-index 06 */ + 0x02a0, 0x02a0, 0x07a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, + 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x07c0, 0x07e0, 0x02a0, 0x02a0, + /* sub-index 09 */ + 0x02a0, 0x02a0, 0x0800, 0x0820, 0x02a0, 0x0840, 0x02a0, 0x02a0, + 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x0860, 0x0880, 0x02a0, 0x02a0, + /* sub-index 0a */ + 0x02a0, 0x02a0, 0x02a0, 0x08a0, 0x02a0, 0x08c0, 0x02a0, 0x02a0, + 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, + /* sub-index 0b */ + 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x08e0, 0x0900, 0x02a0, 0x02a0, + 0x02a0, 0x0920, 0x02a0, 0x02a0, 0x0940, 0x02a0, 0x02a0, 0x02a0, + /* sub-index 0c */ + 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x0960, 0x02a0, 0x02a0, 0x02a0, + 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x0980, 0x02a0, 0x02a0, 0x02a0, + /* sub-index 0d */ + 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x09a0, 0x02a0, 0x02a0, 0x02a0, + 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x09c0, 0x02a0, 0x02a0, + /* sub-index 0f */ + 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x09e0, 0x0a00, 0x0a20, 0x0a40, + 0x0a60, 0x0a80, 0x0aa0, 0x0ac0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, + /* sub-index 10 */ + 0x02a0, 0x02a0, 0x0ae0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, + 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, + /* sub-index 1b */ + 0x0b00, 0x0b20, 0x02a0, 0x0b40, 0x0b60, 0x02a0, 0x02a0, 0x02a0, + 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, + /* sub-index 1e */ + 0x0b80, 0x0ba0, 0x0bc0, 0x0be0, 0x0c00, 0x0c20, 0x0c40, 0x0c60, + 0x0c80, 0x0ca0, 0x0cc0, 0x0ce0, 0x0d00, 0x0d20, 0x0d40, 0x0d60, + /* sub-index 1f */ + 0x0d80, 0x0da0, 0x0dc0, 0x0de0, 0x0e00, 0x0e20, 0x0e40, 0x0e60, + 0x0e80, 0x0ea0, 0x0ec0, 0x0ee0, 0x0f00, 0x0f20, 0x0f40, 0x0f60, + /* sub-index 20 */ + 0x0f80, 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, + 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, + /* sub-index 21 */ + 0x02a0, 0x02a0, 0x0fa0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, + 0x02a0, 0x0fc0, 0x0fe0, 0x02a0, 0x1000, 0x02a0, 0x02a0, 0x02a0, + /* sub-index 22 */ + 0x1020, 0x02a0, 0x1040, 0x02a0, 0x1060, 0x02a0, 0x1080, 0x10a0, + 0x10c0, 0x02a0, 0x10e0, 0x02a0, 0x02a0, 0x02a0, 0x1100, 0x02a0, + /* sub-index 23 */ + 0x02a0, 0x02a0, 0x1120, 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, + 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, + /* sub-index 2a */ + 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, + 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x1140, 0x02a0, 0x02a0, + /* sub-index 30 */ + 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x1160, 0x1180, 0x11a0, 0x11c0, + 0x02a0, 0x11e0, 0x1200, 0x1220, 0x1240, 0x1260, 0x02a0, 0x1280, + /* sub-index f9 */ + 0x12a0, 0x12c0, 0x12e0, 0x1300, 0x1320, 0x1340, 0x1360, 0x1380, + 0x13a0, 0x13c0, 0x13e0, 0x1400, 0x1420, 0x1440, 0x1460, 0x1480, + /* sub-index fa */ + 0x14a0, 0x14c0, 0x14e0, 0x1500, 0x1520, 0x1540, 0x1560, 0x1580, + 0x15a0, 0x15c0, 0x15e0, 0x1600, 0x1620, 0x1640, 0x02a0, 0x02a0, + /* sub-index fb */ + 0x02a0, 0x1660, 0x1680, 0x16a0, 0x16c0, 0x02a0, 0x02a0, 0x02a0, + 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, + /* null mapping */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x00c0 .. 0x00cf */ + 0x0041, 0x0300, 0x0041, 0x0301, 0x0041, 0x0302, 0x0041, 0x0303, + 0x0041, 0x0308, 0x0041, 0x030a, 0x0000, 0x0000, 0x0043, 0x0327, + 0x0045, 0x0300, 0x0045, 0x0301, 0x0045, 0x0302, 0x0045, 0x0308, + 0x0049, 0x0300, 0x0049, 0x0301, 0x0049, 0x0302, 0x0049, 0x0308, + /* 0x00d0 .. 0x00df */ + 0x0000, 0x0000, 0x004e, 0x0303, 0x004f, 0x0300, 0x004f, 0x0301, + 0x004f, 0x0302, 0x004f, 0x0303, 0x004f, 0x0308, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0055, 0x0300, 0x0055, 0x0301, 0x0055, 0x0302, + 0x0055, 0x0308, 0x0059, 0x0301, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x00e0 .. 0x00ef */ + 0x0061, 0x0300, 0x0061, 0x0301, 0x0061, 0x0302, 0x0061, 0x0303, + 0x0061, 0x0308, 0x0061, 0x030a, 0x0000, 0x0000, 0x0063, 0x0327, + 0x0065, 0x0300, 0x0065, 0x0301, 0x0065, 0x0302, 0x0065, 0x0308, + 0x0069, 0x0300, 0x0069, 0x0301, 0x0069, 0x0302, 0x0069, 0x0308, + /* 0x00f0 .. 0x00ff */ + 0x0000, 0x0000, 0x006e, 0x0303, 0x006f, 0x0300, 0x006f, 0x0301, + 0x006f, 0x0302, 0x006f, 0x0303, 0x006f, 0x0308, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0075, 0x0300, 0x0075, 0x0301, 0x0075, 0x0302, + 0x0075, 0x0308, 0x0079, 0x0301, 0x0000, 0x0000, 0x0079, 0x0308, + /* 0x0100 .. 0x010f */ + 0x0041, 0x0304, 0x0061, 0x0304, 0x0041, 0x0306, 0x0061, 0x0306, + 0x0041, 0x0328, 0x0061, 0x0328, 0x0043, 0x0301, 0x0063, 0x0301, + 0x0043, 0x0302, 0x0063, 0x0302, 0x0043, 0x0307, 0x0063, 0x0307, + 0x0043, 0x030c, 0x0063, 0x030c, 0x0044, 0x030c, 0x0064, 0x030c, + /* 0x0110 .. 0x011f */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0045, 0x0304, 0x0065, 0x0304, + 0x0045, 0x0306, 0x0065, 0x0306, 0x0045, 0x0307, 0x0065, 0x0307, + 0x0045, 0x0328, 0x0065, 0x0328, 0x0045, 0x030c, 0x0065, 0x030c, + 0x0047, 0x0302, 0x0067, 0x0302, 0x0047, 0x0306, 0x0067, 0x0306, + /* 0x0120 .. 0x012f */ + 0x0047, 0x0307, 0x0067, 0x0307, 0x0047, 0x0327, 0x0067, 0x0327, + 0x0048, 0x0302, 0x0068, 0x0302, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0049, 0x0303, 0x0069, 0x0303, 0x0049, 0x0304, 0x0069, 0x0304, + 0x0049, 0x0306, 0x0069, 0x0306, 0x0049, 0x0328, 0x0069, 0x0328, + /* 0x0130 .. 0x013f */ + 0x0049, 0x0307, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x004a, 0x0302, 0x006a, 0x0302, 0x004b, 0x0327, 0x006b, 0x0327, + 0x0000, 0x0000, 0x004c, 0x0301, 0x006c, 0x0301, 0x004c, 0x0327, + 0x006c, 0x0327, 0x004c, 0x030c, 0x006c, 0x030c, 0x0000, 0x0000, + /* 0x0140 .. 0x014f */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x004e, 0x0301, + 0x006e, 0x0301, 0x004e, 0x0327, 0x006e, 0x0327, 0x004e, 0x030c, + 0x006e, 0x030c, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x004f, 0x0304, 0x006f, 0x0304, 0x004f, 0x0306, 0x006f, 0x0306, + /* 0x0150 .. 0x015f */ + 0x004f, 0x030b, 0x006f, 0x030b, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0052, 0x0301, 0x0072, 0x0301, 0x0052, 0x0327, 0x0072, 0x0327, + 0x0052, 0x030c, 0x0072, 0x030c, 0x0053, 0x0301, 0x0073, 0x0301, + 0x0053, 0x0302, 0x0073, 0x0302, 0x0053, 0x0327, 0x0073, 0x0327, + /* 0x0160 .. 0x016f */ + 0x0053, 0x030c, 0x0073, 0x030c, 0x0054, 0x0327, 0x0074, 0x0327, + 0x0054, 0x030c, 0x0074, 0x030c, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0055, 0x0303, 0x0075, 0x0303, 0x0055, 0x0304, 0x0075, 0x0304, + 0x0055, 0x0306, 0x0075, 0x0306, 0x0055, 0x030a, 0x0075, 0x030a, + /* 0x0170 .. 0x017f */ + 0x0055, 0x030b, 0x0075, 0x030b, 0x0055, 0x0328, 0x0075, 0x0328, + 0x0057, 0x0302, 0x0077, 0x0302, 0x0059, 0x0302, 0x0079, 0x0302, + 0x0059, 0x0308, 0x005a, 0x0301, 0x007a, 0x0301, 0x005a, 0x0307, + 0x007a, 0x0307, 0x005a, 0x030c, 0x007a, 0x030c, 0x0000, 0x0000, + /* 0x01a0 .. 0x01af */ + 0x004f, 0x031b, 0x006f, 0x031b, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0055, 0x031b, + /* 0x01b0 .. 0x01bf */ + 0x0075, 0x031b, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x01c0 .. 0x01cf */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0041, 0x030c, 0x0061, 0x030c, 0x0049, 0x030c, + /* 0x01d0 .. 0x01df */ + 0x0069, 0x030c, 0x004f, 0x030c, 0x006f, 0x030c, 0x0055, 0x030c, + 0x0075, 0x030c, 0x00dc, 0x0304, 0x00fc, 0x0304, 0x00dc, 0x0301, + 0x00fc, 0x0301, 0x00dc, 0x030c, 0x00fc, 0x030c, 0x00dc, 0x0300, + 0x00fc, 0x0300, 0x0000, 0x0000, 0x00c4, 0x0304, 0x00e4, 0x0304, + /* 0x01e0 .. 0x01ef */ + 0x0226, 0x0304, 0x0227, 0x0304, 0x00c6, 0x0304, 0x00e6, 0x0304, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0047, 0x030c, 0x0067, 0x030c, + 0x004b, 0x030c, 0x006b, 0x030c, 0x004f, 0x0328, 0x006f, 0x0328, + 0x01ea, 0x0304, 0x01eb, 0x0304, 0x01b7, 0x030c, 0x0292, 0x030c, + /* 0x01f0 .. 0x01ff */ + 0x006a, 0x030c, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0047, 0x0301, 0x0067, 0x0301, 0x0000, 0x0000, 0x0000, 0x0000, + 0x004e, 0x0300, 0x006e, 0x0300, 0x00c5, 0x0301, 0x00e5, 0x0301, + 0x00c6, 0x0301, 0x00e6, 0x0301, 0x00d8, 0x0301, 0x00f8, 0x0301, + /* 0x0200 .. 0x020f */ + 0x0041, 0x030f, 0x0061, 0x030f, 0x0041, 0x0311, 0x0061, 0x0311, + 0x0045, 0x030f, 0x0065, 0x030f, 0x0045, 0x0311, 0x0065, 0x0311, + 0x0049, 0x030f, 0x0069, 0x030f, 0x0049, 0x0311, 0x0069, 0x0311, + 0x004f, 0x030f, 0x006f, 0x030f, 0x004f, 0x0311, 0x006f, 0x0311, + /* 0x0210 .. 0x021f */ + 0x0052, 0x030f, 0x0072, 0x030f, 0x0052, 0x0311, 0x0072, 0x0311, + 0x0055, 0x030f, 0x0075, 0x030f, 0x0055, 0x0311, 0x0075, 0x0311, + 0x0053, 0x0326, 0x0073, 0x0326, 0x0054, 0x0326, 0x0074, 0x0326, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0048, 0x030c, 0x0068, 0x030c, + /* 0x0220 .. 0x022f */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0041, 0x0307, 0x0061, 0x0307, + 0x0045, 0x0327, 0x0065, 0x0327, 0x00d6, 0x0304, 0x00f6, 0x0304, + 0x00d5, 0x0304, 0x00f5, 0x0304, 0x004f, 0x0307, 0x006f, 0x0307, + /* 0x0230 .. 0x023f */ + 0x022e, 0x0304, 0x022f, 0x0304, 0x0059, 0x0304, 0x0079, 0x0304, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x0340 .. 0x034f */ + 0x0300, 0x0000, 0x0301, 0x0000, 0x0000, 0x0000, 0x0313, 0x0000, + 0x0308, 0x0301, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x0370 .. 0x037f */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x02b9, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x003b, 0x0000, 0x0000, 0x0000, + /* 0x0380 .. 0x038f */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x00a8, 0x0301, 0x0391, 0x0301, 0x00b7, 0x0000, + 0x0395, 0x0301, 0x0397, 0x0301, 0x0399, 0x0301, 0x0000, 0x0000, + 0x039f, 0x0301, 0x0000, 0x0000, 0x03a5, 0x0301, 0x03a9, 0x0301, + /* 0x0390 .. 0x039f */ + 0x03ca, 0x0301, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x03a0 .. 0x03af */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0399, 0x0308, 0x03a5, 0x0308, + 0x03b1, 0x0301, 0x03b5, 0x0301, 0x03b7, 0x0301, 0x03b9, 0x0301, + /* 0x03b0 .. 0x03bf */ + 0x03cb, 0x0301, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x03c0 .. 0x03cf */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x03b9, 0x0308, 0x03c5, 0x0308, + 0x03bf, 0x0301, 0x03c5, 0x0301, 0x03c9, 0x0301, 0x0000, 0x0000, + /* 0x03d0 .. 0x03df */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x03d2, 0x0301, + 0x03d2, 0x0308, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x0400 .. 0x040f */ + 0x0415, 0x0300, 0x0415, 0x0308, 0x0000, 0x0000, 0x0413, 0x0301, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0406, 0x0308, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x041a, 0x0301, 0x0418, 0x0300, 0x0423, 0x0306, 0x0000, 0x0000, + /* 0x0410 .. 0x041f */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0418, 0x0306, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x0430 .. 0x043f */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0438, 0x0306, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x0450 .. 0x045f */ + 0x0435, 0x0300, 0x0435, 0x0308, 0x0000, 0x0000, 0x0433, 0x0301, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0456, 0x0308, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x043a, 0x0301, 0x0438, 0x0300, 0x0443, 0x0306, 0x0000, 0x0000, + /* 0x0470 .. 0x047f */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0474, 0x030f, 0x0475, 0x030f, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x04c0 .. 0x04cf */ + 0x0000, 0x0000, 0x0416, 0x0306, 0x0436, 0x0306, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x04d0 .. 0x04df */ + 0x0410, 0x0306, 0x0430, 0x0306, 0x0410, 0x0308, 0x0430, 0x0308, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0415, 0x0306, 0x0435, 0x0306, + 0x0000, 0x0000, 0x0000, 0x0000, 0x04d8, 0x0308, 0x04d9, 0x0308, + 0x0416, 0x0308, 0x0436, 0x0308, 0x0417, 0x0308, 0x0437, 0x0308, + /* 0x04e0 .. 0x04ef */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0418, 0x0304, 0x0438, 0x0304, + 0x0418, 0x0308, 0x0438, 0x0308, 0x041e, 0x0308, 0x043e, 0x0308, + 0x0000, 0x0000, 0x0000, 0x0000, 0x04e8, 0x0308, 0x04e9, 0x0308, + 0x042d, 0x0308, 0x044d, 0x0308, 0x0423, 0x0304, 0x0443, 0x0304, + /* 0x04f0 .. 0x04ff */ + 0x0423, 0x0308, 0x0443, 0x0308, 0x0423, 0x030b, 0x0443, 0x030b, + 0x0427, 0x0308, 0x0447, 0x0308, 0x0000, 0x0000, 0x0000, 0x0000, + 0x042b, 0x0308, 0x044b, 0x0308, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x0620 .. 0x062f */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0627, 0x0653, 0x0627, 0x0654, + 0x0648, 0x0654, 0x0627, 0x0655, 0x064a, 0x0654, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x06c0 .. 0x06cf */ + 0x06d5, 0x0654, 0x0000, 0x0000, 0x06c1, 0x0654, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x06d0 .. 0x06df */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x06d2, 0x0654, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x0920 .. 0x092f */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0928, 0x093c, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x0930 .. 0x093f */ + 0x0000, 0x0000, 0x0930, 0x093c, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0933, 0x093c, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x0950 .. 0x095f */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0915, 0x093c, 0x0916, 0x093c, 0x0917, 0x093c, 0x091c, 0x093c, + 0x0921, 0x093c, 0x0922, 0x093c, 0x092b, 0x093c, 0x092f, 0x093c, + /* 0x09c0 .. 0x09cf */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x09c7, 0x09be, + 0x09c7, 0x09d7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x09d0 .. 0x09df */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x09a1, 0x09bc, 0x09a2, 0x09bc, 0x0000, 0x0000, 0x09af, 0x09bc, + /* 0x0a30 .. 0x0a3f */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0a32, 0x0a3c, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0a38, 0x0a3c, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x0a50 .. 0x0a5f */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0a16, 0x0a3c, 0x0a17, 0x0a3c, 0x0a1c, 0x0a3c, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0a2b, 0x0a3c, 0x0000, 0x0000, + /* 0x0b40 .. 0x0b4f */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0b47, 0x0b56, 0x0000, 0x0000, 0x0000, 0x0000, 0x0b47, 0x0b3e, + 0x0b47, 0x0b57, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x0b50 .. 0x0b5f */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0b21, 0x0b3c, 0x0b22, 0x0b3c, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x0b90 .. 0x0b9f */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0b92, 0x0bd7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x0bc0 .. 0x0bcf */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0bc6, 0x0bbe, 0x0bc7, 0x0bbe, + 0x0bc6, 0x0bd7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x0c40 .. 0x0c4f */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0c46, 0x0c56, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x0cc0 .. 0x0ccf */ + 0x0cbf, 0x0cd5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0cc6, 0x0cd5, + 0x0cc6, 0x0cd6, 0x0000, 0x0000, 0x0cc6, 0x0cc2, 0x0cca, 0x0cd5, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x0d40 .. 0x0d4f */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0d46, 0x0d3e, 0x0d47, 0x0d3e, + 0x0d46, 0x0d57, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x0dd0 .. 0x0ddf */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0dd9, 0x0dca, 0x0000, 0x0000, + 0x0dd9, 0x0dcf, 0x0ddc, 0x0dca, 0x0dd9, 0x0ddf, 0x0000, 0x0000, + /* 0x0f40 .. 0x0f4f */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0f42, 0x0fb7, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0f4c, 0x0fb7, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x0f50 .. 0x0f5f */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0f51, 0x0fb7, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0f56, 0x0fb7, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0f5b, 0x0fb7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x0f60 .. 0x0f6f */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0f40, 0x0fb5, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x0f70 .. 0x0f7f */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0f71, 0x0f72, + 0x0000, 0x0000, 0x0f71, 0x0f74, 0x0fb2, 0x0f80, 0x0000, 0x0000, + 0x0fb3, 0x0f80, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x0f80 .. 0x0f8f */ + 0x0000, 0x0000, 0x0f71, 0x0f80, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x0f90 .. 0x0f9f */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0f92, 0x0fb7, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0f9c, 0x0fb7, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x0fa0 .. 0x0faf */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0fa1, 0x0fb7, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0fa6, 0x0fb7, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0fab, 0x0fb7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x0fb0 .. 0x0fbf */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0f90, 0x0fb5, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x1020 .. 0x102f */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x1025, 0x102e, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x1b00 .. 0x1b0f */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x1b05, 0x1b35, 0x0000, 0x0000, + 0x1b07, 0x1b35, 0x0000, 0x0000, 0x1b09, 0x1b35, 0x0000, 0x0000, + 0x1b0b, 0x1b35, 0x0000, 0x0000, 0x1b0d, 0x1b35, 0x0000, 0x0000, + /* 0x1b10 .. 0x1b1f */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x1b11, 0x1b35, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x1b30 .. 0x1b3f */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1b3a, 0x1b35, + 0x0000, 0x0000, 0x1b3c, 0x1b35, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x1b40 .. 0x1b4f */ + 0x1b3e, 0x1b35, 0x1b3f, 0x1b35, 0x0000, 0x0000, 0x1b42, 0x1b35, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x1e00 .. 0x1e0f */ + 0x0041, 0x0325, 0x0061, 0x0325, 0x0042, 0x0307, 0x0062, 0x0307, + 0x0042, 0x0323, 0x0062, 0x0323, 0x0042, 0x0331, 0x0062, 0x0331, + 0x00c7, 0x0301, 0x00e7, 0x0301, 0x0044, 0x0307, 0x0064, 0x0307, + 0x0044, 0x0323, 0x0064, 0x0323, 0x0044, 0x0331, 0x0064, 0x0331, + /* 0x1e10 .. 0x1e1f */ + 0x0044, 0x0327, 0x0064, 0x0327, 0x0044, 0x032d, 0x0064, 0x032d, + 0x0112, 0x0300, 0x0113, 0x0300, 0x0112, 0x0301, 0x0113, 0x0301, + 0x0045, 0x032d, 0x0065, 0x032d, 0x0045, 0x0330, 0x0065, 0x0330, + 0x0228, 0x0306, 0x0229, 0x0306, 0x0046, 0x0307, 0x0066, 0x0307, + /* 0x1e20 .. 0x1e2f */ + 0x0047, 0x0304, 0x0067, 0x0304, 0x0048, 0x0307, 0x0068, 0x0307, + 0x0048, 0x0323, 0x0068, 0x0323, 0x0048, 0x0308, 0x0068, 0x0308, + 0x0048, 0x0327, 0x0068, 0x0327, 0x0048, 0x032e, 0x0068, 0x032e, + 0x0049, 0x0330, 0x0069, 0x0330, 0x00cf, 0x0301, 0x00ef, 0x0301, + /* 0x1e30 .. 0x1e3f */ + 0x004b, 0x0301, 0x006b, 0x0301, 0x004b, 0x0323, 0x006b, 0x0323, + 0x004b, 0x0331, 0x006b, 0x0331, 0x004c, 0x0323, 0x006c, 0x0323, + 0x1e36, 0x0304, 0x1e37, 0x0304, 0x004c, 0x0331, 0x006c, 0x0331, + 0x004c, 0x032d, 0x006c, 0x032d, 0x004d, 0x0301, 0x006d, 0x0301, + /* 0x1e40 .. 0x1e4f */ + 0x004d, 0x0307, 0x006d, 0x0307, 0x004d, 0x0323, 0x006d, 0x0323, + 0x004e, 0x0307, 0x006e, 0x0307, 0x004e, 0x0323, 0x006e, 0x0323, + 0x004e, 0x0331, 0x006e, 0x0331, 0x004e, 0x032d, 0x006e, 0x032d, + 0x00d5, 0x0301, 0x00f5, 0x0301, 0x00d5, 0x0308, 0x00f5, 0x0308, + /* 0x1e50 .. 0x1e5f */ + 0x014c, 0x0300, 0x014d, 0x0300, 0x014c, 0x0301, 0x014d, 0x0301, + 0x0050, 0x0301, 0x0070, 0x0301, 0x0050, 0x0307, 0x0070, 0x0307, + 0x0052, 0x0307, 0x0072, 0x0307, 0x0052, 0x0323, 0x0072, 0x0323, + 0x1e5a, 0x0304, 0x1e5b, 0x0304, 0x0052, 0x0331, 0x0072, 0x0331, + /* 0x1e60 .. 0x1e6f */ + 0x0053, 0x0307, 0x0073, 0x0307, 0x0053, 0x0323, 0x0073, 0x0323, + 0x015a, 0x0307, 0x015b, 0x0307, 0x0160, 0x0307, 0x0161, 0x0307, + 0x1e62, 0x0307, 0x1e63, 0x0307, 0x0054, 0x0307, 0x0074, 0x0307, + 0x0054, 0x0323, 0x0074, 0x0323, 0x0054, 0x0331, 0x0074, 0x0331, + /* 0x1e70 .. 0x1e7f */ + 0x0054, 0x032d, 0x0074, 0x032d, 0x0055, 0x0324, 0x0075, 0x0324, + 0x0055, 0x0330, 0x0075, 0x0330, 0x0055, 0x032d, 0x0075, 0x032d, + 0x0168, 0x0301, 0x0169, 0x0301, 0x016a, 0x0308, 0x016b, 0x0308, + 0x0056, 0x0303, 0x0076, 0x0303, 0x0056, 0x0323, 0x0076, 0x0323, + /* 0x1e80 .. 0x1e8f */ + 0x0057, 0x0300, 0x0077, 0x0300, 0x0057, 0x0301, 0x0077, 0x0301, + 0x0057, 0x0308, 0x0077, 0x0308, 0x0057, 0x0307, 0x0077, 0x0307, + 0x0057, 0x0323, 0x0077, 0x0323, 0x0058, 0x0307, 0x0078, 0x0307, + 0x0058, 0x0308, 0x0078, 0x0308, 0x0059, 0x0307, 0x0079, 0x0307, + /* 0x1e90 .. 0x1e9f */ + 0x005a, 0x0302, 0x007a, 0x0302, 0x005a, 0x0323, 0x007a, 0x0323, + 0x005a, 0x0331, 0x007a, 0x0331, 0x0068, 0x0331, 0x0074, 0x0308, + 0x0077, 0x030a, 0x0079, 0x030a, 0x0000, 0x0000, 0x017f, 0x0307, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x1ea0 .. 0x1eaf */ + 0x0041, 0x0323, 0x0061, 0x0323, 0x0041, 0x0309, 0x0061, 0x0309, + 0x00c2, 0x0301, 0x00e2, 0x0301, 0x00c2, 0x0300, 0x00e2, 0x0300, + 0x00c2, 0x0309, 0x00e2, 0x0309, 0x00c2, 0x0303, 0x00e2, 0x0303, + 0x1ea0, 0x0302, 0x1ea1, 0x0302, 0x0102, 0x0301, 0x0103, 0x0301, + /* 0x1eb0 .. 0x1ebf */ + 0x0102, 0x0300, 0x0103, 0x0300, 0x0102, 0x0309, 0x0103, 0x0309, + 0x0102, 0x0303, 0x0103, 0x0303, 0x1ea0, 0x0306, 0x1ea1, 0x0306, + 0x0045, 0x0323, 0x0065, 0x0323, 0x0045, 0x0309, 0x0065, 0x0309, + 0x0045, 0x0303, 0x0065, 0x0303, 0x00ca, 0x0301, 0x00ea, 0x0301, + /* 0x1ec0 .. 0x1ecf */ + 0x00ca, 0x0300, 0x00ea, 0x0300, 0x00ca, 0x0309, 0x00ea, 0x0309, + 0x00ca, 0x0303, 0x00ea, 0x0303, 0x1eb8, 0x0302, 0x1eb9, 0x0302, + 0x0049, 0x0309, 0x0069, 0x0309, 0x0049, 0x0323, 0x0069, 0x0323, + 0x004f, 0x0323, 0x006f, 0x0323, 0x004f, 0x0309, 0x006f, 0x0309, + /* 0x1ed0 .. 0x1edf */ + 0x00d4, 0x0301, 0x00f4, 0x0301, 0x00d4, 0x0300, 0x00f4, 0x0300, + 0x00d4, 0x0309, 0x00f4, 0x0309, 0x00d4, 0x0303, 0x00f4, 0x0303, + 0x1ecc, 0x0302, 0x1ecd, 0x0302, 0x01a0, 0x0301, 0x01a1, 0x0301, + 0x01a0, 0x0300, 0x01a1, 0x0300, 0x01a0, 0x0309, 0x01a1, 0x0309, + /* 0x1ee0 .. 0x1eef */ + 0x01a0, 0x0303, 0x01a1, 0x0303, 0x01a0, 0x0323, 0x01a1, 0x0323, + 0x0055, 0x0323, 0x0075, 0x0323, 0x0055, 0x0309, 0x0075, 0x0309, + 0x01af, 0x0301, 0x01b0, 0x0301, 0x01af, 0x0300, 0x01b0, 0x0300, + 0x01af, 0x0309, 0x01b0, 0x0309, 0x01af, 0x0303, 0x01b0, 0x0303, + /* 0x1ef0 .. 0x1eff */ + 0x01af, 0x0323, 0x01b0, 0x0323, 0x0059, 0x0300, 0x0079, 0x0300, + 0x0059, 0x0323, 0x0079, 0x0323, 0x0059, 0x0309, 0x0079, 0x0309, + 0x0059, 0x0303, 0x0079, 0x0303, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x1f00 .. 0x1f0f */ + 0x03b1, 0x0313, 0x03b1, 0x0314, 0x1f00, 0x0300, 0x1f01, 0x0300, + 0x1f00, 0x0301, 0x1f01, 0x0301, 0x1f00, 0x0342, 0x1f01, 0x0342, + 0x0391, 0x0313, 0x0391, 0x0314, 0x1f08, 0x0300, 0x1f09, 0x0300, + 0x1f08, 0x0301, 0x1f09, 0x0301, 0x1f08, 0x0342, 0x1f09, 0x0342, + /* 0x1f10 .. 0x1f1f */ + 0x03b5, 0x0313, 0x03b5, 0x0314, 0x1f10, 0x0300, 0x1f11, 0x0300, + 0x1f10, 0x0301, 0x1f11, 0x0301, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0395, 0x0313, 0x0395, 0x0314, 0x1f18, 0x0300, 0x1f19, 0x0300, + 0x1f18, 0x0301, 0x1f19, 0x0301, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x1f20 .. 0x1f2f */ + 0x03b7, 0x0313, 0x03b7, 0x0314, 0x1f20, 0x0300, 0x1f21, 0x0300, + 0x1f20, 0x0301, 0x1f21, 0x0301, 0x1f20, 0x0342, 0x1f21, 0x0342, + 0x0397, 0x0313, 0x0397, 0x0314, 0x1f28, 0x0300, 0x1f29, 0x0300, + 0x1f28, 0x0301, 0x1f29, 0x0301, 0x1f28, 0x0342, 0x1f29, 0x0342, + /* 0x1f30 .. 0x1f3f */ + 0x03b9, 0x0313, 0x03b9, 0x0314, 0x1f30, 0x0300, 0x1f31, 0x0300, + 0x1f30, 0x0301, 0x1f31, 0x0301, 0x1f30, 0x0342, 0x1f31, 0x0342, + 0x0399, 0x0313, 0x0399, 0x0314, 0x1f38, 0x0300, 0x1f39, 0x0300, + 0x1f38, 0x0301, 0x1f39, 0x0301, 0x1f38, 0x0342, 0x1f39, 0x0342, + /* 0x1f40 .. 0x1f4f */ + 0x03bf, 0x0313, 0x03bf, 0x0314, 0x1f40, 0x0300, 0x1f41, 0x0300, + 0x1f40, 0x0301, 0x1f41, 0x0301, 0x0000, 0x0000, 0x0000, 0x0000, + 0x039f, 0x0313, 0x039f, 0x0314, 0x1f48, 0x0300, 0x1f49, 0x0300, + 0x1f48, 0x0301, 0x1f49, 0x0301, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x1f50 .. 0x1f5f */ + 0x03c5, 0x0313, 0x03c5, 0x0314, 0x1f50, 0x0300, 0x1f51, 0x0300, + 0x1f50, 0x0301, 0x1f51, 0x0301, 0x1f50, 0x0342, 0x1f51, 0x0342, + 0x0000, 0x0000, 0x03a5, 0x0314, 0x0000, 0x0000, 0x1f59, 0x0300, + 0x0000, 0x0000, 0x1f59, 0x0301, 0x0000, 0x0000, 0x1f59, 0x0342, + /* 0x1f60 .. 0x1f6f */ + 0x03c9, 0x0313, 0x03c9, 0x0314, 0x1f60, 0x0300, 0x1f61, 0x0300, + 0x1f60, 0x0301, 0x1f61, 0x0301, 0x1f60, 0x0342, 0x1f61, 0x0342, + 0x03a9, 0x0313, 0x03a9, 0x0314, 0x1f68, 0x0300, 0x1f69, 0x0300, + 0x1f68, 0x0301, 0x1f69, 0x0301, 0x1f68, 0x0342, 0x1f69, 0x0342, + /* 0x1f70 .. 0x1f7f */ + 0x03b1, 0x0300, 0x03ac, 0x0000, 0x03b5, 0x0300, 0x03ad, 0x0000, + 0x03b7, 0x0300, 0x03ae, 0x0000, 0x03b9, 0x0300, 0x03af, 0x0000, + 0x03bf, 0x0300, 0x03cc, 0x0000, 0x03c5, 0x0300, 0x03cd, 0x0000, + 0x03c9, 0x0300, 0x03ce, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x1f80 .. 0x1f8f */ + 0x1f00, 0x0345, 0x1f01, 0x0345, 0x1f02, 0x0345, 0x1f03, 0x0345, + 0x1f04, 0x0345, 0x1f05, 0x0345, 0x1f06, 0x0345, 0x1f07, 0x0345, + 0x1f08, 0x0345, 0x1f09, 0x0345, 0x1f0a, 0x0345, 0x1f0b, 0x0345, + 0x1f0c, 0x0345, 0x1f0d, 0x0345, 0x1f0e, 0x0345, 0x1f0f, 0x0345, + /* 0x1f90 .. 0x1f9f */ + 0x1f20, 0x0345, 0x1f21, 0x0345, 0x1f22, 0x0345, 0x1f23, 0x0345, + 0x1f24, 0x0345, 0x1f25, 0x0345, 0x1f26, 0x0345, 0x1f27, 0x0345, + 0x1f28, 0x0345, 0x1f29, 0x0345, 0x1f2a, 0x0345, 0x1f2b, 0x0345, + 0x1f2c, 0x0345, 0x1f2d, 0x0345, 0x1f2e, 0x0345, 0x1f2f, 0x0345, + /* 0x1fa0 .. 0x1faf */ + 0x1f60, 0x0345, 0x1f61, 0x0345, 0x1f62, 0x0345, 0x1f63, 0x0345, + 0x1f64, 0x0345, 0x1f65, 0x0345, 0x1f66, 0x0345, 0x1f67, 0x0345, + 0x1f68, 0x0345, 0x1f69, 0x0345, 0x1f6a, 0x0345, 0x1f6b, 0x0345, + 0x1f6c, 0x0345, 0x1f6d, 0x0345, 0x1f6e, 0x0345, 0x1f6f, 0x0345, + /* 0x1fb0 .. 0x1fbf */ + 0x03b1, 0x0306, 0x03b1, 0x0304, 0x1f70, 0x0345, 0x03b1, 0x0345, + 0x03ac, 0x0345, 0x0000, 0x0000, 0x03b1, 0x0342, 0x1fb6, 0x0345, + 0x0391, 0x0306, 0x0391, 0x0304, 0x0391, 0x0300, 0x0386, 0x0000, + 0x0391, 0x0345, 0x0000, 0x0000, 0x03b9, 0x0000, 0x0000, 0x0000, + /* 0x1fc0 .. 0x1fcf */ + 0x0000, 0x0000, 0x00a8, 0x0342, 0x1f74, 0x0345, 0x03b7, 0x0345, + 0x03ae, 0x0345, 0x0000, 0x0000, 0x03b7, 0x0342, 0x1fc6, 0x0345, + 0x0395, 0x0300, 0x0388, 0x0000, 0x0397, 0x0300, 0x0389, 0x0000, + 0x0397, 0x0345, 0x1fbf, 0x0300, 0x1fbf, 0x0301, 0x1fbf, 0x0342, + /* 0x1fd0 .. 0x1fdf */ + 0x03b9, 0x0306, 0x03b9, 0x0304, 0x03ca, 0x0300, 0x0390, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x03b9, 0x0342, 0x03ca, 0x0342, + 0x0399, 0x0306, 0x0399, 0x0304, 0x0399, 0x0300, 0x038a, 0x0000, + 0x0000, 0x0000, 0x1ffe, 0x0300, 0x1ffe, 0x0301, 0x1ffe, 0x0342, + /* 0x1fe0 .. 0x1fef */ + 0x03c5, 0x0306, 0x03c5, 0x0304, 0x03cb, 0x0300, 0x03b0, 0x0000, + 0x03c1, 0x0313, 0x03c1, 0x0314, 0x03c5, 0x0342, 0x03cb, 0x0342, + 0x03a5, 0x0306, 0x03a5, 0x0304, 0x03a5, 0x0300, 0x038e, 0x0000, + 0x03a1, 0x0314, 0x00a8, 0x0300, 0x0385, 0x0000, 0x0060, 0x0000, + /* 0x1ff0 .. 0x1fff */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x1f7c, 0x0345, 0x03c9, 0x0345, + 0x03ce, 0x0345, 0x0000, 0x0000, 0x03c9, 0x0342, 0x1ff6, 0x0345, + 0x039f, 0x0300, 0x038c, 0x0000, 0x03a9, 0x0300, 0x038f, 0x0000, + 0x03a9, 0x0345, 0x00b4, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x2000 .. 0x200f */ + 0x2002, 0x0000, 0x2003, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x2120 .. 0x212f */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x03a9, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x004b, 0x0000, 0x00c5, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x2190 .. 0x219f */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x2190, 0x0338, 0x2192, 0x0338, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x21a0 .. 0x21af */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x2194, 0x0338, 0x0000, 0x0000, + /* 0x21c0 .. 0x21cf */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x21d0, 0x0338, 0x21d4, 0x0338, 0x21d2, 0x0338, + /* 0x2200 .. 0x220f */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x2203, 0x0338, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x2208, 0x0338, 0x0000, 0x0000, 0x0000, 0x0000, + 0x220b, 0x0338, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x2220 .. 0x222f */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x2223, 0x0338, 0x0000, 0x0000, 0x2225, 0x0338, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x2240 .. 0x224f */ + 0x0000, 0x0000, 0x223c, 0x0338, 0x0000, 0x0000, 0x0000, 0x0000, + 0x2243, 0x0338, 0x0000, 0x0000, 0x0000, 0x0000, 0x2245, 0x0338, + 0x0000, 0x0000, 0x2248, 0x0338, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x2260 .. 0x226f */ + 0x003d, 0x0338, 0x0000, 0x0000, 0x2261, 0x0338, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x224d, 0x0338, 0x003c, 0x0338, 0x003e, 0x0338, + /* 0x2270 .. 0x227f */ + 0x2264, 0x0338, 0x2265, 0x0338, 0x0000, 0x0000, 0x0000, 0x0000, + 0x2272, 0x0338, 0x2273, 0x0338, 0x0000, 0x0000, 0x0000, 0x0000, + 0x2276, 0x0338, 0x2277, 0x0338, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x2280 .. 0x228f */ + 0x227a, 0x0338, 0x227b, 0x0338, 0x0000, 0x0000, 0x0000, 0x0000, + 0x2282, 0x0338, 0x2283, 0x0338, 0x0000, 0x0000, 0x0000, 0x0000, + 0x2286, 0x0338, 0x2287, 0x0338, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x22a0 .. 0x22af */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x22a2, 0x0338, 0x22a8, 0x0338, 0x22a9, 0x0338, 0x22ab, 0x0338, + /* 0x22e0 .. 0x22ef */ + 0x227c, 0x0338, 0x227d, 0x0338, 0x2291, 0x0338, 0x2292, 0x0338, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x22b2, 0x0338, 0x22b3, 0x0338, + 0x22b4, 0x0338, 0x22b5, 0x0338, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x2320 .. 0x232f */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x3008, 0x0000, 0x3009, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x2ad0 .. 0x2adf */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x2add, 0x0338, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x3040 .. 0x304f */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x304b, 0x3099, 0x0000, 0x0000, 0x304d, 0x3099, 0x0000, 0x0000, + /* 0x3050 .. 0x305f */ + 0x304f, 0x3099, 0x0000, 0x0000, 0x3051, 0x3099, 0x0000, 0x0000, + 0x3053, 0x3099, 0x0000, 0x0000, 0x3055, 0x3099, 0x0000, 0x0000, + 0x3057, 0x3099, 0x0000, 0x0000, 0x3059, 0x3099, 0x0000, 0x0000, + 0x305b, 0x3099, 0x0000, 0x0000, 0x305d, 0x3099, 0x0000, 0x0000, + /* 0x3060 .. 0x306f */ + 0x305f, 0x3099, 0x0000, 0x0000, 0x3061, 0x3099, 0x0000, 0x0000, + 0x0000, 0x0000, 0x3064, 0x3099, 0x0000, 0x0000, 0x3066, 0x3099, + 0x0000, 0x0000, 0x3068, 0x3099, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x3070 .. 0x307f */ + 0x306f, 0x3099, 0x306f, 0x309a, 0x0000, 0x0000, 0x3072, 0x3099, + 0x3072, 0x309a, 0x0000, 0x0000, 0x3075, 0x3099, 0x3075, 0x309a, + 0x0000, 0x0000, 0x3078, 0x3099, 0x3078, 0x309a, 0x0000, 0x0000, + 0x307b, 0x3099, 0x307b, 0x309a, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x3090 .. 0x309f */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x3046, 0x3099, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x309d, 0x3099, 0x0000, 0x0000, + /* 0x30a0 .. 0x30af */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x30ab, 0x3099, 0x0000, 0x0000, 0x30ad, 0x3099, 0x0000, 0x0000, + /* 0x30b0 .. 0x30bf */ + 0x30af, 0x3099, 0x0000, 0x0000, 0x30b1, 0x3099, 0x0000, 0x0000, + 0x30b3, 0x3099, 0x0000, 0x0000, 0x30b5, 0x3099, 0x0000, 0x0000, + 0x30b7, 0x3099, 0x0000, 0x0000, 0x30b9, 0x3099, 0x0000, 0x0000, + 0x30bb, 0x3099, 0x0000, 0x0000, 0x30bd, 0x3099, 0x0000, 0x0000, + /* 0x30c0 .. 0x30cf */ + 0x30bf, 0x3099, 0x0000, 0x0000, 0x30c1, 0x3099, 0x0000, 0x0000, + 0x0000, 0x0000, 0x30c4, 0x3099, 0x0000, 0x0000, 0x30c6, 0x3099, + 0x0000, 0x0000, 0x30c8, 0x3099, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x30d0 .. 0x30df */ + 0x30cf, 0x3099, 0x30cf, 0x309a, 0x0000, 0x0000, 0x30d2, 0x3099, + 0x30d2, 0x309a, 0x0000, 0x0000, 0x30d5, 0x3099, 0x30d5, 0x309a, + 0x0000, 0x0000, 0x30d8, 0x3099, 0x30d8, 0x309a, 0x0000, 0x0000, + 0x30db, 0x3099, 0x30db, 0x309a, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x30f0 .. 0x30ff */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x30a6, 0x3099, 0x0000, 0x0000, 0x0000, 0x0000, 0x30ef, 0x3099, + 0x30f0, 0x3099, 0x30f1, 0x3099, 0x30f2, 0x3099, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x30fd, 0x3099, 0x0000, 0x0000, + /* 0xf900 .. 0xf90f */ + 0x8c48, 0x0000, 0x66f4, 0x0000, 0x8eca, 0x0000, 0x8cc8, 0x0000, + 0x6ed1, 0x0000, 0x4e32, 0x0000, 0x53e5, 0x0000, 0x9f9c, 0x0000, + 0x9f9c, 0x0000, 0x5951, 0x0000, 0x91d1, 0x0000, 0x5587, 0x0000, + 0x5948, 0x0000, 0x61f6, 0x0000, 0x7669, 0x0000, 0x7f85, 0x0000, + /* 0xf910 .. 0xf91f */ + 0x863f, 0x0000, 0x87ba, 0x0000, 0x88f8, 0x0000, 0x908f, 0x0000, + 0x6a02, 0x0000, 0x6d1b, 0x0000, 0x70d9, 0x0000, 0x73de, 0x0000, + 0x843d, 0x0000, 0x916a, 0x0000, 0x99f1, 0x0000, 0x4e82, 0x0000, + 0x5375, 0x0000, 0x6b04, 0x0000, 0x721b, 0x0000, 0x862d, 0x0000, + /* 0xf920 .. 0xf92f */ + 0x9e1e, 0x0000, 0x5d50, 0x0000, 0x6feb, 0x0000, 0x85cd, 0x0000, + 0x8964, 0x0000, 0x62c9, 0x0000, 0x81d8, 0x0000, 0x881f, 0x0000, + 0x5eca, 0x0000, 0x6717, 0x0000, 0x6d6a, 0x0000, 0x72fc, 0x0000, + 0x90ce, 0x0000, 0x4f86, 0x0000, 0x51b7, 0x0000, 0x52de, 0x0000, + /* 0xf930 .. 0xf93f */ + 0x64c4, 0x0000, 0x6ad3, 0x0000, 0x7210, 0x0000, 0x76e7, 0x0000, + 0x8001, 0x0000, 0x8606, 0x0000, 0x865c, 0x0000, 0x8def, 0x0000, + 0x9732, 0x0000, 0x9b6f, 0x0000, 0x9dfa, 0x0000, 0x788c, 0x0000, + 0x797f, 0x0000, 0x7da0, 0x0000, 0x83c9, 0x0000, 0x9304, 0x0000, + /* 0xf940 .. 0xf94f */ + 0x9e7f, 0x0000, 0x8ad6, 0x0000, 0x58df, 0x0000, 0x5f04, 0x0000, + 0x7c60, 0x0000, 0x807e, 0x0000, 0x7262, 0x0000, 0x78ca, 0x0000, + 0x8cc2, 0x0000, 0x96f7, 0x0000, 0x58d8, 0x0000, 0x5c62, 0x0000, + 0x6a13, 0x0000, 0x6dda, 0x0000, 0x6f0f, 0x0000, 0x7d2f, 0x0000, + /* 0xf950 .. 0xf95f */ + 0x7e37, 0x0000, 0x964b, 0x0000, 0x52d2, 0x0000, 0x808b, 0x0000, + 0x51dc, 0x0000, 0x51cc, 0x0000, 0x7a1c, 0x0000, 0x7dbe, 0x0000, + 0x83f1, 0x0000, 0x9675, 0x0000, 0x8b80, 0x0000, 0x62cf, 0x0000, + 0x6a02, 0x0000, 0x8afe, 0x0000, 0x4e39, 0x0000, 0x5be7, 0x0000, + /* 0xf960 .. 0xf96f */ + 0x6012, 0x0000, 0x7387, 0x0000, 0x7570, 0x0000, 0x5317, 0x0000, + 0x78fb, 0x0000, 0x4fbf, 0x0000, 0x5fa9, 0x0000, 0x4e0d, 0x0000, + 0x6ccc, 0x0000, 0x6578, 0x0000, 0x7d22, 0x0000, 0x53c3, 0x0000, + 0x585e, 0x0000, 0x7701, 0x0000, 0x8449, 0x0000, 0x8aaa, 0x0000, + /* 0xf970 .. 0xf97f */ + 0x6bba, 0x0000, 0x8fb0, 0x0000, 0x6c88, 0x0000, 0x62fe, 0x0000, + 0x82e5, 0x0000, 0x63a0, 0x0000, 0x7565, 0x0000, 0x4eae, 0x0000, + 0x5169, 0x0000, 0x51c9, 0x0000, 0x6881, 0x0000, 0x7ce7, 0x0000, + 0x826f, 0x0000, 0x8ad2, 0x0000, 0x91cf, 0x0000, 0x52f5, 0x0000, + /* 0xf980 .. 0xf98f */ + 0x5442, 0x0000, 0x5973, 0x0000, 0x5eec, 0x0000, 0x65c5, 0x0000, + 0x6ffe, 0x0000, 0x792a, 0x0000, 0x95ad, 0x0000, 0x9a6a, 0x0000, + 0x9e97, 0x0000, 0x9ece, 0x0000, 0x529b, 0x0000, 0x66c6, 0x0000, + 0x6b77, 0x0000, 0x8f62, 0x0000, 0x5e74, 0x0000, 0x6190, 0x0000, + /* 0xf990 .. 0xf99f */ + 0x6200, 0x0000, 0x649a, 0x0000, 0x6f23, 0x0000, 0x7149, 0x0000, + 0x7489, 0x0000, 0x79ca, 0x0000, 0x7df4, 0x0000, 0x806f, 0x0000, + 0x8f26, 0x0000, 0x84ee, 0x0000, 0x9023, 0x0000, 0x934a, 0x0000, + 0x5217, 0x0000, 0x52a3, 0x0000, 0x54bd, 0x0000, 0x70c8, 0x0000, + /* 0xf9a0 .. 0xf9af */ + 0x88c2, 0x0000, 0x8aaa, 0x0000, 0x5ec9, 0x0000, 0x5ff5, 0x0000, + 0x637b, 0x0000, 0x6bae, 0x0000, 0x7c3e, 0x0000, 0x7375, 0x0000, + 0x4ee4, 0x0000, 0x56f9, 0x0000, 0x5be7, 0x0000, 0x5dba, 0x0000, + 0x601c, 0x0000, 0x73b2, 0x0000, 0x7469, 0x0000, 0x7f9a, 0x0000, + /* 0xf9b0 .. 0xf9bf */ + 0x8046, 0x0000, 0x9234, 0x0000, 0x96f6, 0x0000, 0x9748, 0x0000, + 0x9818, 0x0000, 0x4f8b, 0x0000, 0x79ae, 0x0000, 0x91b4, 0x0000, + 0x96b8, 0x0000, 0x60e1, 0x0000, 0x4e86, 0x0000, 0x50da, 0x0000, + 0x5bee, 0x0000, 0x5c3f, 0x0000, 0x6599, 0x0000, 0x6a02, 0x0000, + /* 0xf9c0 .. 0xf9cf */ + 0x71ce, 0x0000, 0x7642, 0x0000, 0x84fc, 0x0000, 0x907c, 0x0000, + 0x9f8d, 0x0000, 0x6688, 0x0000, 0x962e, 0x0000, 0x5289, 0x0000, + 0x677b, 0x0000, 0x67f3, 0x0000, 0x6d41, 0x0000, 0x6e9c, 0x0000, + 0x7409, 0x0000, 0x7559, 0x0000, 0x786b, 0x0000, 0x7d10, 0x0000, + /* 0xf9d0 .. 0xf9df */ + 0x985e, 0x0000, 0x516d, 0x0000, 0x622e, 0x0000, 0x9678, 0x0000, + 0x502b, 0x0000, 0x5d19, 0x0000, 0x6dea, 0x0000, 0x8f2a, 0x0000, + 0x5f8b, 0x0000, 0x6144, 0x0000, 0x6817, 0x0000, 0x7387, 0x0000, + 0x9686, 0x0000, 0x5229, 0x0000, 0x540f, 0x0000, 0x5c65, 0x0000, + /* 0xf9e0 .. 0xf9ef */ + 0x6613, 0x0000, 0x674e, 0x0000, 0x68a8, 0x0000, 0x6ce5, 0x0000, + 0x7406, 0x0000, 0x75e2, 0x0000, 0x7f79, 0x0000, 0x88cf, 0x0000, + 0x88e1, 0x0000, 0x91cc, 0x0000, 0x96e2, 0x0000, 0x533f, 0x0000, + 0x6eba, 0x0000, 0x541d, 0x0000, 0x71d0, 0x0000, 0x7498, 0x0000, + /* 0xf9f0 .. 0xf9ff */ + 0x85fa, 0x0000, 0x96a3, 0x0000, 0x9c57, 0x0000, 0x9e9f, 0x0000, + 0x6797, 0x0000, 0x6dcb, 0x0000, 0x81e8, 0x0000, 0x7acb, 0x0000, + 0x7b20, 0x0000, 0x7c92, 0x0000, 0x72c0, 0x0000, 0x7099, 0x0000, + 0x8b58, 0x0000, 0x4ec0, 0x0000, 0x8336, 0x0000, 0x523a, 0x0000, + /* 0xfa00 .. 0xfa0f */ + 0x5207, 0x0000, 0x5ea6, 0x0000, 0x62d3, 0x0000, 0x7cd6, 0x0000, + 0x5b85, 0x0000, 0x6d1e, 0x0000, 0x66b4, 0x0000, 0x8f3b, 0x0000, + 0x884c, 0x0000, 0x964d, 0x0000, 0x898b, 0x0000, 0x5ed3, 0x0000, + 0x5140, 0x0000, 0x55c0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0xfa10 .. 0xfa1f */ + 0x585a, 0x0000, 0x0000, 0x0000, 0x6674, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x51de, 0x0000, 0x732a, 0x0000, 0x76ca, 0x0000, + 0x793c, 0x0000, 0x795e, 0x0000, 0x7965, 0x0000, 0x798f, 0x0000, + 0x9756, 0x0000, 0x7cbe, 0x0000, 0x7fbd, 0x0000, 0x0000, 0x0000, + /* 0xfa20 .. 0xfa2f */ + 0x8612, 0x0000, 0x0000, 0x0000, 0x8af8, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x9038, 0x0000, 0x90fd, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x98ef, 0x0000, 0x98fc, 0x0000, + 0x9928, 0x0000, 0x9db4, 0x0000, 0x90de, 0x0000, 0x96b7, 0x0000, + /* 0xfa30 .. 0xfa3f */ + 0x4fae, 0x0000, 0x50e7, 0x0000, 0x514d, 0x0000, 0x52c9, 0x0000, + 0x52e4, 0x0000, 0x5351, 0x0000, 0x559d, 0x0000, 0x5606, 0x0000, + 0x5668, 0x0000, 0x5840, 0x0000, 0x58a8, 0x0000, 0x5c64, 0x0000, + 0x5c6e, 0x0000, 0x6094, 0x0000, 0x6168, 0x0000, 0x618e, 0x0000, + /* 0xfa40 .. 0xfa4f */ + 0x61f2, 0x0000, 0x654f, 0x0000, 0x65e2, 0x0000, 0x6691, 0x0000, + 0x6885, 0x0000, 0x6d77, 0x0000, 0x6e1a, 0x0000, 0x6f22, 0x0000, + 0x716e, 0x0000, 0x722b, 0x0000, 0x7422, 0x0000, 0x7891, 0x0000, + 0x793e, 0x0000, 0x7949, 0x0000, 0x7948, 0x0000, 0x7950, 0x0000, + /* 0xfa50 .. 0xfa5f */ + 0x7956, 0x0000, 0x795d, 0x0000, 0x798d, 0x0000, 0x798e, 0x0000, + 0x7a40, 0x0000, 0x7a81, 0x0000, 0x7bc0, 0x0000, 0x7df4, 0x0000, + 0x7e09, 0x0000, 0x7e41, 0x0000, 0x7f72, 0x0000, 0x8005, 0x0000, + 0x81ed, 0x0000, 0x8279, 0x0000, 0x8279, 0x0000, 0x8457, 0x0000, + /* 0xfa60 .. 0xfa6f */ + 0x8910, 0x0000, 0x8996, 0x0000, 0x8b01, 0x0000, 0x8b39, 0x0000, + 0x8cd3, 0x0000, 0x8d08, 0x0000, 0x8fb6, 0x0000, 0x9038, 0x0000, + 0x96e3, 0x0000, 0x97ff, 0x0000, 0x983b, 0x0000, 0x6075, 0x0000, + 0x0000, 0x0000, 0x8218, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0xfa70 .. 0xfa7f */ + 0x4e26, 0x0000, 0x51b5, 0x0000, 0x5168, 0x0000, 0x4f80, 0x0000, + 0x5145, 0x0000, 0x5180, 0x0000, 0x52c7, 0x0000, 0x52fa, 0x0000, + 0x559d, 0x0000, 0x5555, 0x0000, 0x5599, 0x0000, 0x55e2, 0x0000, + 0x585a, 0x0000, 0x58b3, 0x0000, 0x5944, 0x0000, 0x5954, 0x0000, + /* 0xfa80 .. 0xfa8f */ + 0x5a62, 0x0000, 0x5b28, 0x0000, 0x5ed2, 0x0000, 0x5ed9, 0x0000, + 0x5f69, 0x0000, 0x5fad, 0x0000, 0x60d8, 0x0000, 0x614e, 0x0000, + 0x6108, 0x0000, 0x618e, 0x0000, 0x6160, 0x0000, 0x61f2, 0x0000, + 0x6234, 0x0000, 0x63c4, 0x0000, 0x641c, 0x0000, 0x6452, 0x0000, + /* 0xfa90 .. 0xfa9f */ + 0x6556, 0x0000, 0x6674, 0x0000, 0x6717, 0x0000, 0x671b, 0x0000, + 0x6756, 0x0000, 0x6b79, 0x0000, 0x6bba, 0x0000, 0x6d41, 0x0000, + 0x6edb, 0x0000, 0x6ecb, 0x0000, 0x6f22, 0x0000, 0x701e, 0x0000, + 0x716e, 0x0000, 0x77a7, 0x0000, 0x7235, 0x0000, 0x72af, 0x0000, + /* 0xfaa0 .. 0xfaaf */ + 0x732a, 0x0000, 0x7471, 0x0000, 0x7506, 0x0000, 0x753b, 0x0000, + 0x761d, 0x0000, 0x761f, 0x0000, 0x76ca, 0x0000, 0x76db, 0x0000, + 0x76f4, 0x0000, 0x774a, 0x0000, 0x7740, 0x0000, 0x78cc, 0x0000, + 0x7ab1, 0x0000, 0x7bc0, 0x0000, 0x7c7b, 0x0000, 0x7d5b, 0x0000, + /* 0xfab0 .. 0xfabf */ + 0x7df4, 0x0000, 0x7f3e, 0x0000, 0x8005, 0x0000, 0x8352, 0x0000, + 0x83ef, 0x0000, 0x8779, 0x0000, 0x8941, 0x0000, 0x8986, 0x0000, + 0x8996, 0x0000, 0x8abf, 0x0000, 0x8af8, 0x0000, 0x8acb, 0x0000, + 0x8b01, 0x0000, 0x8afe, 0x0000, 0x8aed, 0x0000, 0x8b39, 0x0000, + /* 0xfac0 .. 0xfacf */ + 0x8b8a, 0x0000, 0x8d08, 0x0000, 0x8f38, 0x0000, 0x9072, 0x0000, + 0x9199, 0x0000, 0x9276, 0x0000, 0x967c, 0x0000, 0x96e3, 0x0000, + 0x9756, 0x0000, 0x97db, 0x0000, 0x97ff, 0x0000, 0x980b, 0x0000, + 0x983b, 0x0000, 0x9b12, 0x0000, 0x9f9c, 0x0000, 0x0000, 0x0000, + /* 0xfad0 .. 0xfadf */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x3b9d, 0x0000, 0x4018, 0x0000, + 0x4039, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x9f43, 0x0000, 0x9f8e, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0xfb10 .. 0xfb1f */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x05d9, 0x05b4, 0x0000, 0x0000, 0x05f2, 0x05b7, + /* 0xfb20 .. 0xfb2f */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x05e9, 0x05c1, 0x05e9, 0x05c2, + 0xfb49, 0x05c1, 0xfb49, 0x05c2, 0x05d0, 0x05b7, 0x05d0, 0x05b8, + /* 0xfb30 .. 0xfb3f */ + 0x05d0, 0x05bc, 0x05d1, 0x05bc, 0x05d2, 0x05bc, 0x05d3, 0x05bc, + 0x05d4, 0x05bc, 0x05d5, 0x05bc, 0x05d6, 0x05bc, 0x0000, 0x0000, + 0x05d8, 0x05bc, 0x05d9, 0x05bc, 0x05da, 0x05bc, 0x05db, 0x05bc, + 0x05dc, 0x05bc, 0x0000, 0x0000, 0x05de, 0x05bc, 0x0000, 0x0000, + /* 0xfb40 .. 0xfb4f */ + 0x05e0, 0x05bc, 0x05e1, 0x05bc, 0x0000, 0x0000, 0x05e3, 0x05bc, + 0x05e4, 0x05bc, 0x0000, 0x0000, 0x05e6, 0x05bc, 0x05e7, 0x05bc, + 0x05e8, 0x05bc, 0x05e9, 0x05bc, 0x05ea, 0x05bc, 0x05d5, 0x05b9, + 0x05d1, 0x05bf, 0x05db, 0x05bf, 0x05e4, 0x05bf, 0x0000, 0x0000 +}; + +unsigned int DECLSPEC_HIDDEN wine_decompose( int flags, WCHAR ch, WCHAR *dst, unsigned int dstlen ) +{ + const WCHAR *ptr = table + table[table[ch >> 8] + ((ch >> 4) & 0x0f)] + 2 * (ch & 0xf); + unsigned int res, len, dst_pos = 0; + + *dst = ch; + if (!*ptr) return 1; + len = ptr[1] ? 2 : 1; + if (dstlen < len) return 0; + /* apply the decomposition recursively */ + while (len--) + { + if (!(res = wine_decompose( flags, *ptr++, dst + dst_pos, dstlen - dst_pos - len ))) return 0; + dst_pos += res; + } + return dst_pos; +} diff --git a/dlls/kernelbase/kernelbase.spec b/dlls/kernelbase/kernelbase.spec index ed5d1f73f85..42476dcb8f2 100644 --- a/dlls/kernelbase/kernelbase.spec +++ b/dlls/kernelbase/kernelbase.spec @@ -957,7 +957,7 @@ # @ stub MoveFileWithProgressTransactedW @ stdcall MoveFileWithProgressW(wstr wstr ptr ptr long) kernel32.MoveFileWithProgressW @ stdcall MulDiv(long long long) kernel32.MulDiv -@ stdcall MultiByteToWideChar(long long str long ptr long) kernel32.MultiByteToWideChar +@ stdcall MultiByteToWideChar(long long str long ptr long) # @ stub NamedPipeEventEnum # @ stub NamedPipeEventSelect @ stdcall NeedCurrentDirectoryForExePathA(str) diff --git a/dlls/kernelbase/locale.c b/dlls/kernelbase/locale.c index d81da5195f8..24e01294628 100644 --- a/dlls/kernelbase/locale.c +++ b/dlls/kernelbase/locale.c @@ -41,6 +41,9 @@ WINE_DEFAULT_DEBUG_CHANNEL(nls); #define CALINFO_MAX_YEAR 2029 +extern UINT CDECL __wine_get_unix_codepage(void); +extern unsigned int wine_decompose( int flags, WCHAR ch, WCHAR *dst, unsigned int dstlen ) DECLSPEC_HIDDEN; + static HANDLE kernel32_handle; static const struct registry_value @@ -436,6 +439,409 @@ static int fold_digits( const WCHAR *src, int srclen, WCHAR *dst, int dstlen ) } +static int mbstowcs_cpsymbol( DWORD flags, const char *src, int srclen, WCHAR *dst, int dstlen ) +{ + int len, i; + + if (flags) + { + SetLastError( ERROR_INVALID_FLAGS ); + return 0; + } + if (!dstlen) return srclen; + len = min( srclen, dstlen ); + for (i = 0; i < len; i++) + { + unsigned char c = src[i]; + dst[i] = (c < 0x20) ? c : c + 0xf000; + } + if (len < srclen) + { + SetLastError( ERROR_INSUFFICIENT_BUFFER ); + return 0; + } + return len; +} + + +static int mbstowcs_utf7( DWORD flags, const char *src, int srclen, WCHAR *dst, int dstlen ) +{ + static const signed char base64_decoding_table[] = + { + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /* 0x00-0x0F */ + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /* 0x10-0x1F */ + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 62, -1, -1, -1, 63, /* 0x20-0x2F */ + 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, -1, -1, -1, /* 0x30-0x3F */ + -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, /* 0x40-0x4F */ + 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, -1, /* 0x50-0x5F */ + -1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, /* 0x60-0x6F */ + 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, -1, -1, -1, -1 /* 0x70-0x7F */ + }; + + const char *source_end = src + srclen; + int offset = 0, pos = 0; + DWORD byte_pair = 0; + + if (flags) + { + SetLastError( ERROR_INVALID_FLAGS ); + return 0; + } +#define OUTPUT(ch) \ + do { \ + if (dstlen > 0) \ + { \ + if (pos >= dstlen) goto overflow; \ + dst[pos] = (ch); \ + } \ + pos++; \ + } while(0) + + while (src < source_end) + { + if (*src == '+') + { + src++; + if (src >= source_end) break; + if (*src == '-') + { + /* just a plus sign escaped as +- */ + OUTPUT( '+' ); + src++; + continue; + } + + do + { + signed char sextet = *src; + if (sextet == '-') + { + /* skip over the dash and end base64 decoding + * the current, unfinished byte pair is discarded */ + src++; + offset = 0; + break; + } + if (sextet < 0) + { + /* the next character of src is < 0 and therefore not part of a base64 sequence + * the current, unfinished byte pair is NOT discarded in this case + * this is probably a bug in Windows */ + break; + } + sextet = base64_decoding_table[sextet]; + if (sextet == -1) + { + /* -1 means that the next character of src is not part of a base64 sequence + * in other words, all sextets in this base64 sequence have been processed + * the current, unfinished byte pair is discarded */ + offset = 0; + break; + } + + byte_pair = (byte_pair << 6) | sextet; + offset += 6; + if (offset >= 16) + { + /* this byte pair is done */ + OUTPUT( byte_pair >> (offset - 16) ); + offset -= 16; + } + src++; + } + while (src < source_end); + } + else + { + OUTPUT( (unsigned char)*src ); + src++; + } + } + return pos; + +overflow: + SetLastError( ERROR_INSUFFICIENT_BUFFER ); + return 0; +#undef OUTPUT +} + + +static int mbstowcs_utf8( DWORD flags, const char *src, int srclen, WCHAR *dst, int dstlen ) +{ + DWORD reslen; + NTSTATUS status; + + if (flags & ~(MB_PRECOMPOSED | MB_COMPOSITE | MB_USEGLYPHCHARS | MB_ERR_INVALID_CHARS)) + { + SetLastError( ERROR_INVALID_FLAGS ); + return 0; + } + if (!dstlen) dst = NULL; + status = RtlUTF8ToUnicodeN( dst, dstlen * sizeof(WCHAR), &reslen, src, srclen ); + if (status == STATUS_SOME_NOT_MAPPED) + { + if (flags & MB_ERR_INVALID_CHARS) + { + SetLastError( ERROR_NO_UNICODE_TRANSLATION ); + return 0; + } + } + else if (!set_ntstatus( status )) reslen = 0; + + return reslen / sizeof(WCHAR); +} + + +static inline int is_private_use_area_char( WCHAR code ) +{ + return (code >= 0xe000 && code <= 0xf8ff); +} + + +static int check_invalid_chars( const CPTABLEINFO *info, const unsigned char *src, int srclen ) +{ + if (info->DBCSOffsets) + { + for ( ; srclen; src++, srclen-- ) + { + USHORT off = info->DBCSOffsets[*src]; + if (off) + { + if (srclen == 1) break; /* partial char, error */ + if (info->DBCSOffsets[off + src[1]] == info->UniDefaultChar && + ((src[0] << 8) | src[1]) != info->TransDefaultChar) break; + src++; + srclen--; + continue; + } + if (info->MultiByteTable[*src] == info->UniDefaultChar && *src != info->TransDefaultChar) + break; + if (is_private_use_area_char( info->MultiByteTable[*src] )) break; + } + } + else + { + for ( ; srclen; src++, srclen-- ) + { + if (info->MultiByteTable[*src] == info->UniDefaultChar && *src != info->TransDefaultChar) + break; + if (is_private_use_area_char( info->MultiByteTable[*src] )) break; + } + } + return !!srclen; + +} + + +static int mbstowcs_decompose( const CPTABLEINFO *info, const unsigned char *src, int srclen, + WCHAR *dst, int dstlen ) +{ + WCHAR ch, dummy[4]; /* no decomposition is larger than 4 chars */ + USHORT off; + int len, res; + + if (info->DBCSOffsets) + { + if (!dstlen) /* compute length */ + { + for (len = 0; srclen; srclen--, src++) + { + if ((off = info->DBCSOffsets[*src])) + { + if (srclen > 1 && src[1]) + { + src++; + srclen--; + ch = info->DBCSOffsets[off + *src]; + } + else ch = info->UniDefaultChar; + } + else ch = info->MultiByteTable[*src]; + len += wine_decompose( 0, ch, dummy, 4 ); + } + return len; + } + + for (len = dstlen; srclen && len; srclen--, src++) + { + if ((off = info->DBCSOffsets[*src])) + { + if (srclen > 1 && src[1]) + { + src++; + srclen--; + ch = info->DBCSOffsets[off + *src]; + } + else ch = info->UniDefaultChar; + } + else ch = info->MultiByteTable[*src]; + if (!(res = wine_decompose( 0, ch, dst, len ))) break; + dst += res; + len -= res; + } + } + else + { + if (!dstlen) /* compute length */ + { + for (len = 0; srclen; srclen--, src++) + len += wine_decompose( 0, info->MultiByteTable[*src], dummy, 4 ); + return len; + } + + for (len = dstlen; srclen && len; srclen--, src++) + { + if (!(res = wine_decompose( 0, info->MultiByteTable[*src], dst, len ))) break; + len -= res; + dst += res; + } + } + + if (srclen) + { + SetLastError( ERROR_INSUFFICIENT_BUFFER ); + return 0; + } + return dstlen - len; +} + + +static int mbstowcs_sbcs( const CPTABLEINFO *info, const unsigned char *src, int srclen, + WCHAR *dst, int dstlen ) +{ + const USHORT *table = info->MultiByteTable; + int ret = srclen; + + if (!dstlen) return srclen; + + if (dstlen < srclen) /* buffer too small: fill it up to dstlen and return error */ + { + srclen = dstlen; + SetLastError( ERROR_INSUFFICIENT_BUFFER ); + ret = 0; + } + + while (srclen >= 16) + { + dst[0] = table[src[0]]; + dst[1] = table[src[1]]; + dst[2] = table[src[2]]; + dst[3] = table[src[3]]; + dst[4] = table[src[4]]; + dst[5] = table[src[5]]; + dst[6] = table[src[6]]; + dst[7] = table[src[7]]; + dst[8] = table[src[8]]; + dst[9] = table[src[9]]; + dst[10] = table[src[10]]; + dst[11] = table[src[11]]; + dst[12] = table[src[12]]; + dst[13] = table[src[13]]; + dst[14] = table[src[14]]; + dst[15] = table[src[15]]; + src += 16; + dst += 16; + srclen -= 16; + } + + /* now handle the remaining characters */ + src += srclen; + dst += srclen; + switch (srclen) + { + case 15: dst[-15] = table[src[-15]]; + case 14: dst[-14] = table[src[-14]]; + case 13: dst[-13] = table[src[-13]]; + case 12: dst[-12] = table[src[-12]]; + case 11: dst[-11] = table[src[-11]]; + case 10: dst[-10] = table[src[-10]]; + case 9: dst[-9] = table[src[-9]]; + case 8: dst[-8] = table[src[-8]]; + case 7: dst[-7] = table[src[-7]]; + case 6: dst[-6] = table[src[-6]]; + case 5: dst[-5] = table[src[-5]]; + case 4: dst[-4] = table[src[-4]]; + case 3: dst[-3] = table[src[-3]]; + case 2: dst[-2] = table[src[-2]]; + case 1: dst[-1] = table[src[-1]]; + case 0: break; + } + return ret; +} + + +static int mbstowcs_dbcs( const CPTABLEINFO *info, const unsigned char *src, int srclen, + WCHAR *dst, int dstlen ) +{ + USHORT off; + int i; + + if (!dstlen) + { + for (i = 0; srclen; i++, src++, srclen--) + if (info->DBCSOffsets[*src] && srclen > 1 && src[1]) { src++; srclen--; } + return i; + } + + for (i = dstlen; srclen && i; i--, srclen--, src++, dst++) + { + if ((off = info->DBCSOffsets[*src])) + { + if (srclen > 1 && src[1]) + { + src++; + srclen--; + *dst = info->DBCSOffsets[off + *src]; + } + else *dst = info->UniDefaultChar; + } + else *dst = info->MultiByteTable[*src]; + } + if (srclen) + { + SetLastError( ERROR_INSUFFICIENT_BUFFER ); + return 0; + } + return dstlen - i; +} + + +static int mbstowcs_codepage( UINT codepage, DWORD flags, const char *src, int srclen, + WCHAR *dst, int dstlen ) +{ + CPTABLEINFO local_info; + const CPTABLEINFO *info = get_codepage_table( codepage ); + const unsigned char *str = (const unsigned char *)src; + + if (!info) + { + SetLastError( ERROR_INVALID_PARAMETER ); + return 0; + } + if (flags & ~(MB_PRECOMPOSED | MB_COMPOSITE | MB_USEGLYPHCHARS | MB_ERR_INVALID_CHARS)) + { + SetLastError( ERROR_INVALID_FLAGS ); + return 0; + } + + if ((flags & MB_USEGLYPHCHARS) && info->MultiByteTable[256] == 256) + { + local_info = *info; + local_info.MultiByteTable += 257; + info = &local_info; + } + if ((flags & MB_ERR_INVALID_CHARS) && check_invalid_chars( info, str, srclen )) + { + SetLastError( ERROR_NO_UNICODE_TRANSLATION ); + return 0; + } + + if (flags & MB_COMPOSITE) return mbstowcs_decompose( info, str, srclen, dst, dstlen ); + if (info->DBCSOffsets) return mbstowcs_dbcs( info, str, srclen, dst, dstlen ); + return mbstowcs_sbcs( info, str, srclen, dst, dstlen ); +} + + /* Note: the Internal_ functions are not documented. The number of parameters * should be correct, but their exact meaning may not. */ @@ -1742,6 +2148,52 @@ LCID WINAPI DECLSPEC_HOTPATCH LocaleNameToLCID( const WCHAR *name, DWORD flags ) } +/****************************************************************************** + * MultiByteToWideChar (kernelbase.@) + */ +INT WINAPI DECLSPEC_HOTPATCH MultiByteToWideChar( UINT codepage, DWORD flags, const char *src, INT srclen, + WCHAR *dst, INT dstlen ) +{ + int ret; + + if (!src || !srclen || (!dst && dstlen) || dstlen < 0) + { + SetLastError( ERROR_INVALID_PARAMETER ); + return 0; + } + if (srclen < 0) srclen = strlen(src) + 1; + + switch (codepage) + { + case CP_SYMBOL: + ret = mbstowcs_cpsymbol( flags, src, srclen, dst, dstlen ); + break; + case CP_UTF7: + ret = mbstowcs_utf7( flags, src, srclen, dst, dstlen ); + break; + case CP_UTF8: + ret = mbstowcs_utf8( flags, src, srclen, dst, dstlen ); + break; + case CP_UNIXCP: + codepage = __wine_get_unix_codepage(); + if (codepage == CP_UTF8) + { + ret = mbstowcs_utf8( flags, src, srclen, dst, dstlen ); +#ifdef __APPLE__ /* work around broken Mac OS X filesystem that enforces decomposed Unicode */ + if (ret && dstlen) RtlNormalizeString( NormalizationC, dst, ret, dst, &ret ); +#endif + break; + } + /* fall through */ + default: + ret = mbstowcs_codepage( codepage, flags, src, srclen, dst, dstlen ); + break; + } + TRACE( "cp %d %s -> %s, ret = %d\n", codepage, debugstr_an(src, srclen), debugstr_wn(dst, ret), ret ); + return ret; +} + + /****************************************************************************** * NormalizeString (kernelbase.@) */ diff --git a/libs/port/decompose.c b/libs/port/decompose.c index 7026704be02..1c3d2b005dd 100644 --- a/libs/port/decompose.c +++ b/libs/port/decompose.c @@ -2,7 +2,7 @@ /* generated from http://www.unicode.org/Public/12.0.0/ucd/UnicodeData.txt */ /* DO NOT EDIT!! */ -#include "wine/unicode.h" +#include "windef.h" static const WCHAR table[5856] = { @@ -2195,6 +2195,8 @@ static const WCHAR compatmap_table[8152] = 0x2502, 0x2190, 0x2191, 0x2192, 0x2193, 0x25a0, 0x25cb }; +#include "wine/unicode.h" + static const WCHAR *get_compatmap_entry( WCHAR ch, unsigned int *len ) { unsigned short offset_offs = compatmap_table[compatmap_table[ch >> 8] + ((ch >> 4) & 0xf)] + (ch & 0xf); diff --git a/tools/make_unicode b/tools/make_unicode index 5f2c3a86ff3..afd090b9c14 100755 --- a/tools/make_unicode +++ b/tools/make_unicode @@ -2502,16 +2502,16 @@ sub dump_full_compat_table() ################################################################ # dump the char decomposition table -sub dump_decompose_table($) +sub dump_decompose_table($$) { - my $filename = shift; + my ($filename, $compat) = @_; open OUTPUT,">$filename.new" or die "Cannot create $filename"; print "Building $filename\n"; print OUTPUT "/* Unicode char composition */\n"; print OUTPUT "/* generated from $UNIDATA/UnicodeData.txt */\n"; print OUTPUT "/* DO NOT EDIT!! */\n\n"; - print OUTPUT "#include \"wine/unicode.h\"\n\n"; + print OUTPUT "#include \"windef.h\"\n\n"; # first determine all the 16-char subsets that contain something @@ -2587,11 +2587,13 @@ sub dump_decompose_table($) printf OUTPUT "%s", DUMP_ARRAY( "0x%04x", 0, @table ); } - printf OUTPUT "\n};\n\n"; + print OUTPUT "\n};\n\n"; + if ($compat) + { + dump_full_compat_table(); + print OUTPUT <<"EOF"; +#include "wine/unicode.h" - dump_full_compat_table(); - - print OUTPUT <<"EOF"; static const WCHAR *get_compatmap_entry( WCHAR ch, unsigned int *len ) { unsigned short offset_offs = compatmap_table[compatmap_table[ch >> 8] + ((ch >> 4) & 0xf)] + (ch & 0xf); @@ -2635,6 +2637,29 @@ unsigned int DECLSPEC_HIDDEN wine_decompose( int flags, WCHAR ch, WCHAR *dst, un return dst_pos; } EOF + } + else + { + print OUTPUT <<"EOF"; +unsigned int DECLSPEC_HIDDEN wine_decompose( int flags, WCHAR ch, WCHAR *dst, unsigned int dstlen ) +{ + const WCHAR *ptr = table + table[table[ch >> 8] + ((ch >> 4) & 0x0f)] + 2 * (ch & 0xf); + unsigned int res, len, dst_pos = 0; + + *dst = ch; + if (!*ptr) return 1; + len = ptr[1] ? 2 : 1; + if (dstlen < len) return 0; + /* apply the decomposition recursively */ + while (len--) + { + if (!(res = wine_decompose( flags, *ptr++, dst + dst_pos, dstlen - dst_pos - len ))) return 0; + dst_pos += res; + } + return dst_pos; +} +EOF + } close OUTPUT; save_file($filename); } @@ -2888,7 +2913,8 @@ READ_DEFAULTS( $DEFAULTS ); dump_case_mappings( "libs/port/casemap.c" ); dump_sortkeys( "libs/port/collation.c", READ_SORTKEYS_FILE() ); dump_compose_table( "libs/port/compose.c" ); -dump_decompose_table( "libs/port/decompose.c" ); +dump_decompose_table( "libs/port/decompose.c", 1 ); +dump_decompose_table( "dlls/kernelbase/decompose.c", 0 ); dump_ctype_tables( "libs/port/wctype.c" ); dump_bidi_dir_table( "dlls/gdi32/direction.c" ); dump_bidi_dir_table( "dlls/usp10/direction.c" );