diff --git a/dlls/wineps.drv/Makefile.in b/dlls/wineps.drv/Makefile.in index aa8d15759b4..9fe0497c2b2 100644 --- a/dlls/wineps.drv/Makefile.in +++ b/dlls/wineps.drv/Makefile.in @@ -45,6 +45,7 @@ C_SRCS = \ data/ZapfChancery_MediumItalic.c \ data/ZapfDingbats.c \ data/agl.c \ + direction.c \ download.c \ driver.c \ encode.c \ diff --git a/dlls/wineps.drv/direction.c b/dlls/wineps.drv/direction.c new file mode 100644 index 00000000000..721ffbe6281 --- /dev/null +++ b/dlls/wineps.drv/direction.c @@ -0,0 +1,717 @@ +/* Unicode BiDi direction table */ +/* Automatically generated; DO NOT EDIT!! */ + +#include "windef.h" + +const unsigned short DECLSPEC_HIDDEN bidi_direction_table[5631] = +{ + /* level 1 offsets */ + 0x0110, 0x0120, 0x0130, 0x0140, 0x0144, 0x0152, 0x0152, 0x0152, + 0x0152, 0x0152, 0x015e, 0x0152, 0x0152, 0x0152, 0x0152, 0x016a, + 0x017a, 0x018a, 0x0152, 0x019a, 0x0152, 0x0152, 0x01a0, 0x0152, + 0x0152, 0x0152, 0x0152, 0x01b0, 0x01bd, 0x01cd, 0x01dd, 0x01ed, + 0x0152, 0x0152, 0x0152, 0x0152, 0x0152, 0x0152, 0x0152, 0x0152, + 0x0152, 0x0152, 0x0152, 0x0152, 0x0152, 0x0152, 0x0152, 0x0152, + 0x0152, 0x0152, 0x0152, 0x0152, 0x0152, 0x0152, 0x0152, 0x0152, + 0x0152, 0x0152, 0x0152, 0x0152, 0x0152, 0x0152, 0x0152, 0x0152, + 0x0152, 0x0152, 0x0152, 0x0152, 0x0152, 0x0152, 0x0152, 0x0152, + 0x0152, 0x0152, 0x0152, 0x0152, 0x0152, 0x0152, 0x0152, 0x0152, + 0x0152, 0x0152, 0x0152, 0x0152, 0x0152, 0x0152, 0x0152, 0x0152, + 0x0152, 0x0152, 0x0152, 0x0152, 0x0152, 0x0152, 0x0152, 0x0152, + 0x0152, 0x0152, 0x0152, 0x0152, 0x0152, 0x0152, 0x0152, 0x0152, + 0x0152, 0x0152, 0x0152, 0x0152, 0x0152, 0x0152, 0x0152, 0x0152, + 0x0152, 0x0152, 0x0152, 0x0152, 0x0152, 0x0152, 0x0152, 0x0152, + 0x0152, 0x0152, 0x0152, 0x0152, 0x0152, 0x0152, 0x0152, 0x0152, + 0x0152, 0x0152, 0x0152, 0x0152, 0x0152, 0x0152, 0x0152, 0x0152, + 0x0152, 0x0152, 0x0152, 0x0152, 0x0152, 0x0152, 0x0152, 0x0152, + 0x0152, 0x0152, 0x0152, 0x0152, 0x0152, 0x0152, 0x0152, 0x0152, + 0x0152, 0x0152, 0x0152, 0x0152, 0x0152, 0x0152, 0x0152, 0x0152, + 0x0152, 0x0152, 0x0152, 0x0152, 0x0152, 0x0152, 0x0152, 0x0152, + 0x0152, 0x0152, 0x0152, 0x0152, 0x0152, 0x0152, 0x0152, 0x0152, + 0x0152, 0x0152, 0x0152, 0x0152, 0x0152, 0x0152, 0x0152, 0x0152, + 0x0152, 0x0152, 0x0152, 0x0152, 0x0152, 0x0152, 0x0152, 0x0152, + 0x0152, 0x0152, 0x0152, 0x0152, 0x0152, 0x0152, 0x0152, 0x0152, + 0x0152, 0x0152, 0x0152, 0x0152, 0x0152, 0x0152, 0x0152, 0x0152, + 0x0152, 0x0152, 0x0152, 0x0152, 0x0152, 0x0152, 0x0152, 0x0152, + 0x0152, 0x0152, 0x0152, 0x0152, 0x0152, 0x0152, 0x0152, 0x0152, + 0x01fd, 0x0152, 0x0152, 0x0152, 0x0152, 0x0152, 0x0152, 0x0152, + 0x0152, 0x0152, 0x0152, 0x0152, 0x0152, 0x0152, 0x0152, 0x0152, + 0x0152, 0x0152, 0x0152, 0x0152, 0x0152, 0x0152, 0x0152, 0x0152, + 0x0152, 0x0152, 0x0152, 0x0152, 0x0152, 0x0152, 0x0152, 0x0152, + 0x0152, 0x0152, 0x0152, 0x0152, 0x0152, 0x0152, 0x0152, 0x0152, + 0x0152, 0x0152, 0x0152, 0x0152, 0x0152, 0x0152, 0x0152, 0x0152, + /* level 2 offsets */ + 0x020d, 0x021d, 0x0222, 0x0232, 0x0242, 0x024b, 0x025b, 0x026b, + 0x027b, 0x028b, 0x029b, 0x02ab, 0x02bb, 0x02cb, 0x02d9, 0x02e8, + 0x02f6, 0x021d, 0x021d, 0x0301, 0x0311, 0x021d, 0x0319, 0x0328, + 0x0338, 0x0346, 0x0356, 0x0366, 0x0376, 0x0386, 0x021d, 0x0396, + 0x03a6, 0x03b6, 0x03c5, 0x03d2, 0x03e0, 0x03ef, 0x03f5, 0x03ef, + 0x021d, 0x03ef, 0x03ef, 0x0400, 0x0410, 0x0420, 0x0430, 0x0440, + 0x0450, 0x0460, 0x046f, 0x047c, 0x021d, 0x021d, 0x021d, 0x021d, + 0x021d, 0x021d, 0x021d, 0x021d, 0x021d, 0x021d, 0x021d, 0x021d, + 0x021d, 0x048c, 0x021d, 0x021d, 0x021d, 0x021d, 0x021d, 0x021d, + 0x021d, 0x021d, 0x021d, 0x021d, 0x021d, 0x021d, 0x021d, 0x021d, + 0x021d, 0x021d, 0x049c, 0x021d, 0x04ac, 0x04bc, 0x04cc, 0x04dc, + 0x04eb, 0x04fb, 0x021d, 0x021d, 0x021d, 0x021d, 0x021d, 0x021d, + 0x021d, 0x021d, 0x021d, 0x021d, 0x021d, 0x050a, 0x0518, 0x0525, + 0x0535, 0x0545, 0x021d, 0x0555, 0x0565, 0x0575, 0x021d, 0x021d, + 0x021d, 0x021d, 0x0585, 0x0595, 0x05a5, 0x05b5, 0x05c5, 0x05d5, + 0x05df, 0x05ef, 0x05ff, 0x060f, 0x061d, 0x062d, 0x063a, 0x0647, + 0x0655, 0x0664, 0x0672, 0x067f, 0x068f, 0x021d, 0x069c, 0x06a9, + 0x06b3, 0x06c3, 0x021d, 0x021d, 0x021d, 0x021d, 0x06d3, 0x021d, + 0x021d, 0x021d, 0x021d, 0x021d, 0x021d, 0x021d, 0x021d, 0x021d, + 0x021d, 0x021d, 0x06d9, 0x06e9, 0x021d, 0x021d, 0x021d, 0x06f5, + 0x021d, 0x021d, 0x021d, 0x021d, 0x021d, 0x021d, 0x021d, 0x021d, + 0x021d, 0x021d, 0x021d, 0x021d, 0x0704, 0x021d, 0x021d, 0x021d, + 0x021d, 0x021d, 0x021d, 0x021d, 0x021d, 0x021d, 0x021d, 0x021d, + 0x021d, 0x021d, 0x021d, 0x021d, 0x0714, 0x021d, 0x071e, 0x072e, + 0x073e, 0x021d, 0x021d, 0x0744, 0x0753, 0x021d, 0x021d, 0x0763, + 0x021d, 0x021d, 0x021d, 0x021d, 0x021d, 0x0773, 0x06e9, 0x077c, + 0x021d, 0x078c, 0x021d, 0x021d, 0x021d, 0x079c, 0x07ac, 0x021d, + 0x021d, 0x07b5, 0x07c5, 0x07d5, 0x021d, 0x07e5, 0x07f5, 0x0800, + 0x03ef, 0x03ef, 0x03ef, 0x0810, 0x0820, 0x0830, 0x03ef, 0x0840, + 0x0850, 0x021d, 0x021d, 0x021d, 0x021d, 0x0860, 0x0870, 0x021d, + 0x021d, 0x021d, 0x021d, 0x021d, 0x021d, 0x021d, 0x021d, 0x021d, + 0x021d, 0x021d, 0x021d, 0x021d, 0x021d, + /* level 3 offsets */ + 0x0880, 0x088e, 0x089e, 0x08ae, 0x08bd, 0x08c2, 0x08bd, 0x08d2, + 0x08e1, 0x08e7, 0x08f7, 0x0907, 0x0917, 0x0920, 0x0917, 0x0920, + 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, + 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, + 0x0928, 0x0936, 0x0936, 0x0946, 0x0955, 0x0965, 0x0965, 0x0965, + 0x0965, 0x0965, 0x0965, 0x0965, 0x0975, 0x0984, 0x0917, 0x0917, + 0x0917, 0x0917, 0x0917, 0x0917, 0x0921, 0x0917, 0x0917, 0x0917, + 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, 0x0991, 0x0917, 0x0917, + 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, 0x099b, 0x09ab, + 0x0965, 0x09ad, 0x09bb, 0x09cb, 0x09d0, 0x09df, 0x09ef, 0x09ff, + 0x0a0a, 0x0a0a, 0x0a0f, 0x0965, 0x0a1f, 0x0a09, 0x0a0a, 0x0a0a, + 0x0a0a, 0x0a0a, 0x0a0a, 0x0a2c, 0x0a3b, 0x0a4b, 0x0a55, 0x0a64, + 0x0a0a, 0x0965, 0x0a74, 0x0a0a, 0x0a0a, 0x0a0a, 0x0a0a, 0x0a0a, + 0x0a6e, 0x0a84, 0x09cb, 0x09cb, 0x0a94, 0x0aa0, 0x09cb, 0x0aae, + 0x0aba, 0x09cc, 0x09cb, 0x0aca, 0x0ada, 0x0a0a, 0x0aea, 0x0afa, + 0x0a0a, 0x0a0a, 0x0a6a, 0x0965, 0x0b08, 0x0965, 0x0b15, 0x0917, + 0x0917, 0x0b1b, 0x0b2a, 0x0993, 0x0b38, 0x0917, 0x0b47, 0x0917, + 0x0917, 0x0b3c, 0x0b56, 0x0917, 0x0b38, 0x0b64, 0x0b73, 0x0917, + 0x0917, 0x0b3c, 0x0b82, 0x0b47, 0x0917, 0x0b8e, 0x0b73, 0x0917, + 0x0917, 0x0b3c, 0x0b9d, 0x0917, 0x0b38, 0x0bac, 0x0b47, 0x0917, + 0x0917, 0x0bbc, 0x0b56, 0x0bcc, 0x0b38, 0x0917, 0x0b46, 0x0917, + 0x0917, 0x0917, 0x0b3b, 0x0917, 0x0917, 0x0bd9, 0x0be9, 0x0917, + 0x0917, 0x0bee, 0x0bfd, 0x0bcc, 0x0b38, 0x0c0b, 0x0b47, 0x0917, + 0x0917, 0x0b3c, 0x0b77, 0x0917, 0x0b38, 0x0917, 0x0c1b, 0x0917, + 0x0917, 0x0b78, 0x0b56, 0x0917, 0x0b38, 0x0917, 0x0b47, 0x0917, + 0x0917, 0x0917, 0x0b3e, 0x0c29, 0x0917, 0x0917, 0x0917, 0x0c38, + 0x0c48, 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, 0x0c57, + 0x098c, 0x0917, 0x0917, 0x0917, 0x0c64, 0x0917, 0x0c6f, 0x0917, + 0x0917, 0x0917, 0x0c7e, 0x0c88, 0x0c95, 0x0965, 0x0968, 0x0b42, + 0x0917, 0x0917, 0x0917, 0x0b4a, 0x0ca4, 0x0917, 0x0b7b, 0x0cb2, + 0x0cc1, 0x0ccf, 0x0cdd, 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, + 0x0917, 0x0b4a, 0x0917, 0x0917, 0x0917, 0x0ced, 0x0917, 0x0917, + 0x0917, 0x0917, 0x0917, 0x0917, 0x08bd, 0x0917, 0x0917, 0x0917, + 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, + 0x0917, 0x0917, 0x0917, 0x0917, 0x0cfd, 0x0d02, 0x0917, 0x0917, + 0x0917, 0x0917, 0x0917, 0x0917, 0x0d10, 0x0917, 0x0b38, 0x0917, + 0x0b38, 0x0917, 0x0b38, 0x0917, 0x0917, 0x0917, 0x0d1c, 0x0c33, + 0x0d26, 0x0917, 0x0ced, 0x0d36, 0x0917, 0x0917, 0x0917, 0x0917, + 0x0917, 0x0917, 0x0917, 0x0bcc, 0x0917, 0x0b3f, 0x0917, 0x0917, + 0x0917, 0x0917, 0x0917, 0x0d45, 0x0d53, 0x0d63, 0x0917, 0x0917, + 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, 0x08bf, 0x0955, + 0x0955, 0x0917, 0x0d6c, 0x0917, 0x0917, 0x0917, 0x0d78, 0x0d86, + 0x0d93, 0x0917, 0x0917, 0x0917, 0x0965, 0x0966, 0x0917, 0x0917, + 0x0917, 0x0b14, 0x0917, 0x0917, 0x0da3, 0x0b46, 0x0917, 0x0db0, + 0x0b14, 0x0c1b, 0x0917, 0x0dc0, 0x0917, 0x0917, 0x0917, 0x0dce, + 0x0c1b, 0x0917, 0x0917, 0x0b4b, 0x0ddd, 0x0917, 0x0917, 0x0917, + 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, 0x0ded, 0x0dfc, + 0x0e05, 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, + 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, 0x0965, 0x0965, 0x0965, + 0x0965, 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, + 0x0917, 0x0917, 0x0917, 0x0917, 0x0e0f, 0x08d0, 0x08c0, 0x08c0, + 0x0d00, 0x0e1f, 0x0955, 0x0e2f, 0x0e3f, 0x0e4b, 0x0e50, 0x0e60, + 0x0e70, 0x0e80, 0x0917, 0x0e90, 0x0e90, 0x0e9f, 0x0965, 0x0965, + 0x0cb2, 0x0eaf, 0x0ebb, 0x0ec9, 0x0ed8, 0x0ee8, 0x0955, 0x0917, + 0x0917, 0x0ef6, 0x0955, 0x0955, 0x0955, 0x0955, 0x0955, 0x0955, + 0x0955, 0x0f06, 0x0955, 0x0955, 0x0955, 0x0955, 0x0955, 0x0955, + 0x0955, 0x0955, 0x0955, 0x0955, 0x0955, 0x0955, 0x0955, 0x0955, + 0x0f10, 0x0917, 0x0917, 0x0917, 0x08c2, 0x0955, 0x094f, 0x0955, + 0x0955, 0x0955, 0x0955, 0x0955, 0x0955, 0x0f0f, 0x0917, 0x093b, + 0x0917, 0x0955, 0x0955, 0x0f20, 0x0f28, 0x0917, 0x0917, 0x0917, + 0x0917, 0x0f16, 0x0955, 0x0955, 0x0955, 0x0955, 0x0955, 0x0955, + 0x0955, 0x0955, 0x0955, 0x0955, 0x0955, 0x0955, 0x0955, 0x0955, + 0x0955, 0x0955, 0x0f38, 0x0955, 0x0955, 0x0955, 0x0955, 0x0955, + 0x0955, 0x0955, 0x0f45, 0x0955, 0x094e, 0x0955, 0x0955, 0x0955, + 0x0955, 0x0955, 0x0955, 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, + 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, + 0x0917, 0x0f55, 0x0f64, 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, + 0x0917, 0x0917, 0x0cb3, 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, + 0x0917, 0x0965, 0x0965, 0x0955, 0x0955, 0x0955, 0x0955, 0x0955, + 0x0938, 0x0917, 0x0917, 0x0955, 0x0f6d, 0x0955, 0x0955, 0x0955, + 0x0955, 0x0955, 0x08ba, 0x0955, 0x0955, 0x0955, 0x0955, 0x0955, + 0x0955, 0x0955, 0x0955, 0x0955, 0x0955, 0x0955, 0x0955, 0x0955, + 0x0f10, 0x0917, 0x093a, 0x0f7d, 0x0955, 0x0f8c, 0x0f9c, 0x0917, + 0x0917, 0x0917, 0x0917, 0x0917, 0x0fac, 0x08bd, 0x0917, 0x0917, + 0x0917, 0x0917, 0x091c, 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, + 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, 0x0955, + 0x0955, 0x08ba, 0x0917, 0x0d00, 0x0917, 0x0917, 0x0917, 0x0955, + 0x0917, 0x0fb9, 0x0917, 0x0917, 0x0917, 0x0954, 0x08c1, 0x0917, + 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, 0x0fc8, 0x0917, + 0x0917, 0x0917, 0x0917, 0x0917, 0x08bf, 0x0917, 0x08be, 0x0917, + 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, + 0x0917, 0x0917, 0x0917, 0x0955, 0x0955, 0x0955, 0x0955, 0x0917, + 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, + 0x0955, 0x0955, 0x0955, 0x0f0f, 0x0917, 0x0917, 0x0917, 0x08c0, + 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, 0x0cb3, 0x0fd8, 0x0917, + 0x0b49, 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, 0x0c1b, 0x0955, + 0x0955, 0x08bc, 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, 0x091f, + 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, 0x0fe8, + 0x0917, 0x0ff4, 0x1001, 0x0917, 0x0917, 0x0917, 0x0eee, 0x0917, + 0x0917, 0x0917, 0x0917, 0x100d, 0x0917, 0x0965, 0x0b16, 0x0917, + 0x0917, 0x1017, 0x0917, 0x1025, 0x0c1b, 0x0917, 0x0917, 0x0b15, + 0x0917, 0x0917, 0x1035, 0x0917, 0x0917, 0x0b43, 0x0917, 0x0917, + 0x1043, 0x0cac, 0x1052, 0x0917, 0x0917, 0x0b3c, 0x0917, 0x0917, + 0x0917, 0x1062, 0x0b47, 0x0917, 0x0b77, 0x0b42, 0x0917, 0x0917, + 0x0917, 0x0917, 0x0917, 0x0917, 0x0ed8, 0x0917, 0x0917, 0x0917, + 0x0917, 0x0917, 0x0917, 0x0917, 0x1072, 0x0917, 0x1080, 0x108f, + 0x1099, 0x10a9, 0x0a0a, 0x0a0a, 0x0a0a, 0x0a0a, 0x0a0a, 0x0a0a, + 0x0a0a, 0x10b9, 0x0ae7, 0x0a0a, 0x0a0a, 0x0a0a, 0x0a0a, 0x0a0a, + 0x0a0a, 0x0a0a, 0x0a0a, 0x0a0a, 0x0a0a, 0x0a0a, 0x0a0a, 0x0a0a, + 0x0a0a, 0x0a0a, 0x0a0a, 0x10c9, 0x0955, 0x0a0a, 0x0a0a, 0x0a0a, + 0x0a0a, 0x0ae8, 0x0a0a, 0x0a0a, 0x10d9, 0x0917, 0x0917, 0x10e9, + 0x0965, 0x0ced, 0x0965, 0x0955, 0x0955, 0x10f9, 0x1109, 0x1119, + 0x0a0a, 0x0a0a, 0x0a0a, 0x0a0a, 0x0a0a, 0x0a0a, 0x0a0a, 0x111f, + 0x112f, 0x08ae, 0x08bd, 0x08c2, 0x08bd, 0x08c2, 0x0f10, 0x0917, + 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, 0x113f, 0x08c4, + 0x114e, 0x0917, 0x0917, 0x0917, 0x0955, 0x0955, 0x0955, 0x0955, + 0x0939, 0x0939, 0x08bd, 0x0917, 0x0917, 0x0917, 0x0917, 0x0cdd, + 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, + 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, 0x115e, 0x0f28, + 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, 0x116e, + 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, + 0x117e, 0x09cb, 0x09cb, 0x1188, 0x09cb, 0x1197, 0x09cb, 0x09cb, + 0x09cb, 0x09cc, 0x09c4, 0x0917, 0x0917, 0x0917, 0x09cb, 0x11a4, + 0x09cb, 0x11af, 0x09cb, 0x11bf, 0x0917, 0x0917, 0x0917, 0x0917, + 0x09cb, 0x09cb, 0x09cb, 0x09d3, 0x09cb, 0x09c9, 0x09cb, 0x09cb, + 0x11ce, 0x11de, 0x09cb, 0x11e8, 0x11f8, 0x11f8, 0x09cb, 0x09cb, + 0x09cb, 0x09cb, 0x0917, 0x0917, 0x09cb, 0x09cb, 0x1208, 0x1213, + 0x09cb, 0x09cb, 0x09cb, 0x1223, 0x09cb, 0x1233, 0x09cb, 0x1240, + 0x09cb, 0x124e, 0x0a8b, 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, + 0x09cb, 0x09cb, 0x09cb, 0x09cb, 0x11f8, 0x0917, 0x0917, 0x0917, + 0x09cb, 0x09cb, 0x09cb, 0x1258, 0x09cb, 0x09cb, 0x09cb, 0x1268, + 0x0a0a, 0x0a0a, 0x1278, 0x1288, 0x0917, 0x0917, 0x0917, 0x0917, + 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, + 0x1298, 0x1299, 0x09cb, 0x09cb, 0x12a9, 0x12b9, 0x0917, 0x0917, + 0x0917, 0x0b4a, 0x09cb, 0x09cb, 0x12c9, 0x0a0a, 0x0a6e, 0x12d9, + 0x0917, 0x09cb, 0x12e9, 0x0917, 0x0917, 0x09cb, 0x09cf, 0x0917, + 0x09cb, 0x1213, 0x0b47, 0x0917, 0x0917, 0x1015, 0x0994, 0x0936, + 0x0f10, 0x12f9, 0x0c1b, 0x0917, 0x0917, 0x1305, 0x0b46, 0x0917, + 0x0917, 0x0917, 0x0b15, 0x0917, 0x1310, 0x0b13, 0x0917, 0x0917, + 0x0917, 0x0b45, 0x0c1b, 0x0917, 0x0917, 0x1026, 0x12ff, 0x0917, + 0x0917, 0x0917, 0x0cb3, 0x131e, 0x0b47, 0x0917, 0x0917, 0x0917, + 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, 0x0cb3, 0x101a, 0x0917, + 0x0c1b, 0x0917, 0x0917, 0x0b78, 0x0cb2, 0x0917, 0x098e, 0x0b13, + 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, + 0x1015, 0x0c29, 0x132d, 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, + 0x133c, 0x0b72, 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, + 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, 0x1349, 0x0cb2, 0x0b77, + 0x0917, 0x0917, 0x0917, 0x1359, 0x0cb2, 0x0917, 0x0939, 0x0917, + 0x0917, 0x0917, 0x0b1a, 0x1368, 0x0917, 0x0917, 0x0917, 0x0917, + 0x0b4a, 0x1376, 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, + 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, 0x0cb3, + 0x0c85, 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, + 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, 0x1382, 0x0b45, 0x0917, + 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, 0x1304, + 0x0cb2, 0x0917, 0x1391, 0x0917, 0x0917, 0x139e, 0x0b41, 0x13ad, + 0x0917, 0x0917, 0x1013, 0x13bd, 0x0917, 0x0917, 0x0917, 0x0917, + 0x0917, 0x0917, 0x13cd, 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, + 0x0c7d, 0x13dd, 0x13ec, 0x0917, 0x0917, 0x0917, 0x0917, 0x13fb, + 0x1368, 0x0917, 0x0917, 0x0917, 0x0917, 0x140a, 0x0917, 0x0917, + 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, + 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, 0x0e0a, 0x0c1b, 0x0917, + 0x0917, 0x116e, 0x140f, 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, + 0x0917, 0x0917, 0x0917, 0x141a, 0x1429, 0x08bc, 0x0917, 0x0917, + 0x0917, 0x0917, 0x1439, 0x0995, 0x0917, 0x0917, 0x0917, 0x0917, + 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, + 0x0917, 0x0917, 0x0917, 0x0b13, 0x0917, 0x0917, 0x0917, 0x0994, + 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, + 0x0917, 0x0917, 0x0917, 0x0917, 0x0cb3, 0x0917, 0x0917, 0x0917, + 0x0cb3, 0x0b15, 0x0917, 0x0917, 0x0917, 0x0917, 0x1449, 0x0917, + 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, + 0x0b76, 0x1459, 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, 0x0965, + 0x0965, 0x0967, 0x0965, 0x0994, 0x0917, 0x0917, 0x0917, 0x0917, + 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, 0x1462, + 0x146f, 0x147c, 0x0917, 0x0b4d, 0x0917, 0x0917, 0x0917, 0x0928, + 0x0917, 0x0955, 0x0955, 0x0955, 0x0955, 0x148c, 0x0917, 0x0917, + 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, + 0x0917, 0x0955, 0x0955, 0x0955, 0x0955, 0x0955, 0x0f0f, 0x0917, + 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, + 0x0917, 0x0917, 0x0917, 0x0917, 0x091c, 0x0917, 0x0917, 0x1497, + 0x0917, 0x0917, 0x08be, 0x0917, 0x0917, 0x0917, 0x091e, 0x0917, + 0x0917, 0x0917, 0x1499, 0x14a7, 0x14a7, 0x14a7, 0x0965, 0x0965, + 0x0965, 0x14b7, 0x0965, 0x0965, 0x0968, 0x0b43, 0x0b44, 0x0db0, + 0x09ab, 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, 0x14c2, 0x14ca, + 0x14d8, 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, 0x0cb3, 0x0917, + 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, + 0x0917, 0x132d, 0x0917, 0x0917, 0x0917, 0x0b4b, 0x14e3, 0x0917, + 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, + 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, 0x0b4b, 0x0917, 0x09cb, + 0x09cb, 0x09cb, 0x09cb, 0x09cb, 0x09cb, 0x09cb, 0x09cb, 0x09cb, + 0x09cb, 0x09cb, 0x09cb, 0x14f3, 0x0994, 0x0917, 0x0917, 0x09cb, + 0x09cb, 0x09cb, 0x09cb, 0x14ff, 0x09d1, 0x0917, 0x0917, 0x0917, + 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, 0x0ae9, + 0x0a0a, 0x0a0a, 0x0a0a, 0x150f, 0x0917, 0x0917, 0x0917, 0x0917, + 0x0ae9, 0x0a0a, 0x0a0a, 0x151f, 0x0917, 0x0917, 0x0917, 0x0917, + 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, + 0x111a, 0x0a0a, 0x152e, 0x153b, 0x1549, 0x1559, 0x1567, 0x156f, + 0x157f, 0x158a, 0x1599, 0x158a, 0x0917, 0x0917, 0x0917, 0x08bc, + 0x0955, 0x0955, 0x093a, 0x0955, 0x0955, 0x0955, 0x0955, 0x0955, + 0x0955, 0x08ba, 0x15a9, 0x0954, 0x0954, 0x0954, 0x0955, 0x0f10, + 0x15b9, 0x0917, 0x08be, 0x0917, 0x0917, 0x0917, 0x0f16, 0x0917, + 0x0917, 0x0917, 0x091a, 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, + 0x0917, 0x0f10, 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, + 0x0917, 0x0917, 0x0917, 0x0955, 0x0955, 0x0955, 0x0955, 0x0955, + 0x0955, 0x0955, 0x0955, 0x0955, 0x0955, 0x0955, 0x0955, 0x0955, + 0x15c4, 0x0939, 0x0939, 0x0955, 0x0955, 0x0955, 0x0955, 0x0955, + 0x0955, 0x0955, 0x15c5, 0x0955, 0x0955, 0x0955, 0x0955, 0x0955, + 0x0ced, 0x093a, 0x08bd, 0x093a, 0x0955, 0x0955, 0x0955, 0x0f0e, + 0x0ced, 0x0955, 0x0955, 0x0f0e, 0x0955, 0x0938, 0x08bc, 0x0917, + 0x0917, 0x0917, 0x0917, 0x0955, 0x0955, 0x0955, 0x0955, 0x0955, + 0x08ba, 0x0938, 0x0939, 0x0f0d, 0x0955, 0x0955, 0x15d0, 0x15df, + 0x093a, 0x0f0d, 0x0f0d, 0x0955, 0x0955, 0x0955, 0x0955, 0x0955, + 0x0955, 0x0955, 0x0955, 0x0955, 0x0951, 0x0955, 0x0955, 0x093b, + 0x0917, 0x0917, 0x1164, 0x15ef, 0x0917, 0x08e7, 0x08e7, 0x08e7, + 0x08e7, 0x08e7, 0x08e7, 0x0917, 0x0917, 0x0917, 0x0917, 0x0917, + 0x0917, 0x0917, 0x0917, 0x0965, 0x0965, 0x0965, 0x0965, 0x0965, + 0x0965, 0x0965, 0x0965, 0x0965, 0x0965, 0x0965, 0x0965, 0x0965, + 0x0965, 0x0965, 0x0917, + /* values */ + 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, + 0x000a, 0x000b, 0x000d, 0x000b, 0x000c, 0x000d, 0x000a, 0x000a, + 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, + 0x000a, 0x000a, 0x000d, 0x000d, 0x000d, 0x000b, 0x000c, 0x0000, + 0x0000, 0x0009, 0x0009, 0x0009, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0008, 0x0007, 0x0008, 0x0007, 0x0007, 0x0004, 0x0004, + 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, + 0x0007, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0000, 0x0000, 0x0000, + 0x0000, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000d, 0x000a, + 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, + 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x0007, + 0x0000, 0x0009, 0x0009, 0x0009, 0x0009, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0001, 0x0000, 0x0000, 0x000a, 0x0000, 0x0000, 0x0009, + 0x0009, 0x0004, 0x0004, 0x0000, 0x0001, 0x0000, 0x0000, 0x0000, + 0x0004, 0x0001, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0000, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0000, 0x0000, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0006, 0x0006, 0x0006, + 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, + 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0000, 0x0000, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0000, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0000, 0x0000, 0x0001, 0x0000, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0006, 0x0006, 0x0006, 0x0006, + 0x0006, 0x0006, 0x0006, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0000, 0x0001, 0x0001, + 0x0000, 0x0000, 0x0009, 0x0001, 0x0006, 0x0006, 0x0006, 0x0006, + 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, + 0x0006, 0x0006, 0x0006, 0x0002, 0x0006, 0x0006, 0x0002, 0x0006, + 0x0006, 0x0002, 0x0006, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, + 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, + 0x0002, 0x0002, 0x0002, 0x0001, 0x0001, 0x0001, 0x0001, 0x0002, + 0x0002, 0x0002, 0x0002, 0x0002, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0003, + 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0000, 0x0000, 0x0005, + 0x0009, 0x0009, 0x0005, 0x0007, 0x0005, 0x0000, 0x0000, 0x0006, + 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, + 0x0006, 0x0006, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, + 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, + 0x0005, 0x0005, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0003, + 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, + 0x0003, 0x0009, 0x0003, 0x0003, 0x0005, 0x0005, 0x0005, 0x0005, + 0x0005, 0x0005, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, + 0x0006, 0x0003, 0x0000, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, + 0x0005, 0x0005, 0x0006, 0x0006, 0x0000, 0x0006, 0x0006, 0x0006, + 0x0006, 0x0005, 0x0005, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, + 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0005, 0x0005, 0x0005, + 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, + 0x0005, 0x0005, 0x0005, 0x0001, 0x0005, 0x0006, 0x0005, 0x0005, + 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, + 0x0005, 0x0005, 0x0005, 0x0005, 0x0006, 0x0006, 0x0006, 0x0006, + 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0001, + 0x0001, 0x0005, 0x0005, 0x0005, 0x0006, 0x0005, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0002, 0x0002, 0x0002, 0x0002, + 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0006, + 0x0006, 0x0006, 0x0006, 0x0006, 0x0002, 0x0002, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0002, 0x0001, 0x0001, 0x0006, 0x0002, 0x0002, + 0x0002, 0x0002, 0x0002, 0x0002, 0x0006, 0x0006, 0x0006, 0x0006, + 0x0002, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0002, 0x0006, + 0x0006, 0x0006, 0x0002, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, + 0x0001, 0x0001, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, + 0x0002, 0x0002, 0x0002, 0x0006, 0x0006, 0x0006, 0x0001, 0x0001, + 0x0002, 0x0001, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, + 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, + 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, + 0x0005, 0x0001, 0x0003, 0x0003, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, + 0x0006, 0x0006, 0x0003, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, + 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0006, 0x0001, 0x0006, + 0x0001, 0x0001, 0x0001, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, + 0x0006, 0x0006, 0x0006, 0x0001, 0x0001, 0x0001, 0x0001, 0x0006, + 0x0001, 0x0001, 0x0006, 0x0006, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0006, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0006, + 0x0006, 0x0006, 0x0006, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0006, 0x0001, 0x0001, 0x0009, 0x0009, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0009, + 0x0001, 0x0001, 0x0006, 0x0001, 0x0006, 0x0006, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0006, 0x0006, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0006, 0x0006, 0x0001, 0x0001, 0x0006, 0x0006, 0x0006, + 0x0001, 0x0001, 0x0001, 0x0006, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0006, 0x0006, + 0x0006, 0x0006, 0x0006, 0x0001, 0x0006, 0x0006, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0006, 0x0001, 0x0001, 0x0009, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0006, 0x0006, + 0x0006, 0x0006, 0x0006, 0x0006, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0006, 0x0001, 0x0001, 0x0006, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0006, 0x0006, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0009, 0x0000, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0006, 0x0001, 0x0001, 0x0001, 0x0006, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0006, 0x0001, 0x0006, 0x0006, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0006, 0x0006, 0x0006, 0x0001, 0x0006, + 0x0006, 0x0006, 0x0006, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0001, 0x0006, 0x0006, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0006, 0x0006, 0x0006, 0x0001, 0x0006, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0006, 0x0001, 0x0001, 0x0006, 0x0006, 0x0006, 0x0006, + 0x0006, 0x0006, 0x0006, 0x0001, 0x0001, 0x0001, 0x0001, 0x0009, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0006, + 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0001, + 0x0006, 0x0001, 0x0001, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, + 0x0006, 0x0006, 0x0006, 0x0006, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0006, 0x0006, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0006, 0x0001, 0x0006, 0x0001, + 0x0006, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0001, 0x0006, + 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, + 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0001, 0x0006, 0x0006, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0006, 0x0006, 0x0006, + 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0001, 0x0006, 0x0006, + 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0001, 0x0006, 0x0006, + 0x0006, 0x0006, 0x0006, 0x0006, 0x0001, 0x0006, 0x0006, 0x0001, + 0x0001, 0x0006, 0x0006, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0006, 0x0006, 0x0006, 0x0006, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0006, 0x0001, 0x0001, 0x0006, 0x0006, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0006, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0006, 0x0001, 0x0001, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x000c, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0000, 0x0000, 0x0001, + 0x0001, 0x0001, 0x0006, 0x0006, 0x0006, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0006, 0x0006, 0x0001, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, + 0x0006, 0x0006, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0009, 0x0001, 0x0006, 0x0001, 0x0001, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0006, 0x0006, 0x0006, 0x000a, 0x0006, 0x0006, 0x0006, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0006, 0x0006, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0006, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0006, 0x0006, 0x0006, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0000, 0x0001, 0x0001, 0x0001, 0x0000, + 0x0000, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0006, 0x0006, 0x0001, 0x0001, 0x0006, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0006, 0x0001, + 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0001, + 0x0006, 0x0001, 0x0001, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, + 0x0006, 0x0006, 0x0006, 0x0001, 0x0001, 0x0001, 0x0006, 0x0006, + 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, + 0x0001, 0x0001, 0x0006, 0x0001, 0x0001, 0x0001, 0x0001, 0x0006, + 0x0001, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0001, 0x0006, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, + 0x0001, 0x0001, 0x0006, 0x0006, 0x0006, 0x0006, 0x0001, 0x0001, + 0x0006, 0x0006, 0x0001, 0x0006, 0x0006, 0x0006, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0006, 0x0001, 0x0006, 0x0006, + 0x0001, 0x0001, 0x0001, 0x0006, 0x0001, 0x0006, 0x0006, 0x0006, + 0x0006, 0x0001, 0x0001, 0x0006, 0x0006, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0006, 0x0006, 0x0006, + 0x0001, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, + 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0001, 0x0006, 0x0006, + 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0006, 0x0001, 0x0001, 0x0001, 0x0006, 0x0006, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0000, 0x0001, 0x0000, 0x000c, + 0x000c, 0x000c, 0x000c, 0x000c, 0x000c, 0x000c, 0x000c, 0x000c, + 0x000c, 0x000c, 0x000a, 0x000a, 0x000a, 0x0001, 0x0002, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000c, + 0x000d, 0x0011, 0x000f, 0x0012, 0x0010, 0x000e, 0x0007, 0x0009, + 0x0009, 0x0009, 0x0009, 0x0009, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0007, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000c, + 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x0001, 0x0013, 0x0014, + 0x0015, 0x0016, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, + 0x0004, 0x0001, 0x0001, 0x0001, 0x0004, 0x0004, 0x0004, 0x0004, + 0x0004, 0x0004, 0x0008, 0x0008, 0x0000, 0x0000, 0x0000, 0x0001, + 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, + 0x0004, 0x0004, 0x0008, 0x0008, 0x0000, 0x0000, 0x0000, 0x0001, + 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, + 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0000, + 0x0000, 0x0001, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0000, + 0x0000, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0000, + 0x0001, 0x0000, 0x0000, 0x0000, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0000, 0x0001, + 0x0000, 0x0001, 0x0000, 0x0001, 0x0001, 0x0001, 0x0001, 0x0009, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0000, 0x0000, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0000, + 0x0000, 0x0000, 0x0001, 0x0001, 0x0001, 0x0001, 0x0000, 0x0000, + 0x0008, 0x0009, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, + 0x0004, 0x0004, 0x0004, 0x0004, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0001, 0x0001, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0006, 0x0006, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000c, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0001, 0x0001, 0x0001, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0006, 0x0006, + 0x0006, 0x0006, 0x0001, 0x0001, 0x0000, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0000, 0x0000, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0000, 0x0000, 0x0000, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0006, 0x0006, 0x0000, + 0x0000, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0000, 0x0000, 0x0000, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0006, 0x0006, 0x0006, 0x0000, 0x0006, 0x0006, 0x0006, 0x0006, + 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0000, 0x0000, + 0x0001, 0x0001, 0x0006, 0x0001, 0x0001, 0x0001, 0x0006, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0006, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0006, 0x0006, 0x0001, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0006, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0009, 0x0009, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0006, 0x0006, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0006, 0x0006, 0x0006, + 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0006, 0x0006, 0x0006, 0x0006, + 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0001, 0x0001, 0x0001, + 0x0006, 0x0001, 0x0001, 0x0006, 0x0006, 0x0006, 0x0006, 0x0001, + 0x0001, 0x0006, 0x0006, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0006, 0x0006, 0x0006, 0x0006, + 0x0006, 0x0006, 0x0001, 0x0001, 0x0001, 0x0006, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0006, 0x0001, + 0x0001, 0x0001, 0x0006, 0x0001, 0x0006, 0x0006, 0x0006, 0x0001, + 0x0001, 0x0006, 0x0006, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0006, 0x0006, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0006, + 0x0001, 0x0001, 0x0006, 0x0001, 0x0001, 0x0001, 0x0001, 0x0006, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0002, 0x0006, 0x0002, + 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, + 0x0008, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, + 0x0001, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0001, 0x0002, + 0x0001, 0x0002, 0x0002, 0x0001, 0x0002, 0x0002, 0x0001, 0x0002, + 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, + 0x0002, 0x0005, 0x0005, 0x0005, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, + 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0000, + 0x0000, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, + 0x0005, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0000, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, + 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0000, 0x0000, + 0x0000, 0x0007, 0x0000, 0x0007, 0x0001, 0x0000, 0x0007, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0009, 0x0000, 0x0000, 0x0008, 0x0008, 0x0000, 0x0000, 0x0000, + 0x0001, 0x0000, 0x0009, 0x0009, 0x0000, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0001, 0x0005, + 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, + 0x0005, 0x0005, 0x0005, 0x0005, 0x0001, 0x0001, 0x000a, 0x0001, + 0x0000, 0x0000, 0x0009, 0x0009, 0x0009, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0008, 0x0007, 0x0008, 0x0007, 0x0007, 0x0009, + 0x0009, 0x0000, 0x0000, 0x0000, 0x0009, 0x0009, 0x0001, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0000, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0006, 0x0004, + 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, + 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0006, 0x0006, 0x0006, 0x0006, + 0x0006, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0002, 0x0002, + 0x0002, 0x0002, 0x0002, 0x0002, 0x0001, 0x0001, 0x0002, 0x0001, + 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0001, 0x0002, + 0x0002, 0x0001, 0x0001, 0x0001, 0x0002, 0x0001, 0x0001, 0x0002, + 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0001, 0x0002, 0x0002, + 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0001, + 0x0002, 0x0002, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0002, + 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, + 0x0002, 0x0002, 0x0002, 0x0001, 0x0001, 0x0001, 0x0000, 0x0002, + 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, + 0x0002, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0002, 0x0006, + 0x0006, 0x0006, 0x0001, 0x0006, 0x0006, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0006, 0x0006, 0x0006, 0x0006, 0x0002, 0x0002, + 0x0002, 0x0002, 0x0001, 0x0002, 0x0002, 0x0002, 0x0001, 0x0002, + 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0001, 0x0001, + 0x0006, 0x0006, 0x0006, 0x0001, 0x0001, 0x0001, 0x0001, 0x0006, + 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, + 0x0002, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0006, 0x0006, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, + 0x0002, 0x0002, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, + 0x0002, 0x0001, 0x0001, 0x0001, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, + 0x0002, 0x0001, 0x0001, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, + 0x0002, 0x0002, 0x0002, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0002, + 0x0002, 0x0002, 0x0002, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0002, 0x0002, 0x0002, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, + 0x0005, 0x0005, 0x0005, 0x0005, 0x0006, 0x0006, 0x0006, 0x0006, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, + 0x0003, 0x0003, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, + 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, + 0x0001, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, + 0x0002, 0x0002, 0x0002, 0x0001, 0x0006, 0x0006, 0x0002, 0x0001, + 0x0001, 0x0002, 0x0002, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, + 0x0002, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0006, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, + 0x0005, 0x0005, 0x0005, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0002, 0x0002, 0x0006, 0x0006, 0x0006, 0x0006, 0x0002, + 0x0002, 0x0002, 0x0002, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0006, 0x0001, 0x0001, 0x0006, 0x0006, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0006, 0x0006, 0x0006, 0x0006, 0x0001, 0x0001, 0x0006, 0x0006, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0006, + 0x0006, 0x0006, 0x0006, 0x0006, 0x0001, 0x0006, 0x0006, 0x0006, + 0x0001, 0x0001, 0x0006, 0x0001, 0x0006, 0x0006, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0006, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0006, 0x0001, 0x0001, 0x0001, 0x0006, + 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0001, 0x0006, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0006, 0x0006, 0x0006, 0x0006, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0006, 0x0006, 0x0001, + 0x0006, 0x0001, 0x0001, 0x0001, 0x0006, 0x0006, 0x0006, 0x0006, + 0x0006, 0x0006, 0x0006, 0x0006, 0x0001, 0x0001, 0x0006, 0x0001, + 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0001, 0x0006, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0006, 0x0006, 0x0006, 0x0006, 0x0001, 0x0006, 0x0006, 0x0006, + 0x0006, 0x0006, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0006, 0x0006, 0x0001, + 0x0006, 0x0001, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, + 0x0001, 0x0001, 0x0006, 0x0006, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0001, + 0x0001, 0x0006, 0x0006, 0x0006, 0x0006, 0x0001, 0x0006, 0x0006, + 0x0006, 0x0006, 0x0006, 0x0006, 0x0001, 0x0001, 0x0006, 0x0006, + 0x0006, 0x0001, 0x0001, 0x0001, 0x0001, 0x0006, 0x0006, 0x0006, + 0x0006, 0x0006, 0x0006, 0x0006, 0x0001, 0x0006, 0x0006, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0006, 0x0006, 0x0006, + 0x0006, 0x0006, 0x0006, 0x0006, 0x0001, 0x0006, 0x0006, 0x0006, + 0x0006, 0x0006, 0x0006, 0x0001, 0x0001, 0x0006, 0x0006, 0x0006, + 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0001, 0x0001, 0x0006, + 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0001, 0x0006, 0x0006, + 0x0001, 0x0006, 0x0006, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0006, 0x0006, 0x0006, 0x0006, + 0x0006, 0x0006, 0x0001, 0x0001, 0x0001, 0x0006, 0x0001, 0x0006, + 0x0006, 0x0001, 0x0006, 0x0006, 0x0001, 0x0001, 0x0001, 0x0006, + 0x0001, 0x0006, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0009, + 0x0009, 0x0009, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0006, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, + 0x0006, 0x0001, 0x0001, 0x0000, 0x0001, 0x0006, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x000a, 0x000a, 0x000a, 0x000a, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0006, 0x0006, 0x0006, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, + 0x000a, 0x000a, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0001, + 0x0001, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0000, 0x0000, 0x0006, 0x0006, + 0x0006, 0x0000, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0000, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0004, + 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, + 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0006, + 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, + 0x0006, 0x0001, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, + 0x0006, 0x0006, 0x0006, 0x0001, 0x0001, 0x0006, 0x0006, 0x0006, + 0x0006, 0x0006, 0x0001, 0x0006, 0x0006, 0x0001, 0x0006, 0x0006, + 0x0006, 0x0006, 0x0006, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0009, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, + 0x0001, 0x0001, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, + 0x0002, 0x0002, 0x0002, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, + 0x0006, 0x0006, 0x0002, 0x0001, 0x0001, 0x0001, 0x0001, 0x0005, + 0x0005, 0x0005, 0x0005, 0x0005, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0005, + 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, + 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0001, 0x0001, 0x0005, + 0x0005, 0x0001, 0x0005, 0x0001, 0x0001, 0x0005, 0x0001, 0x0005, + 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0001, 0x0005, + 0x0005, 0x0005, 0x0005, 0x0001, 0x0005, 0x0001, 0x0005, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0005, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0005, 0x0001, 0x0005, 0x0001, 0x0005, 0x0001, 0x0005, 0x0005, + 0x0005, 0x0001, 0x0005, 0x0005, 0x0001, 0x0005, 0x0001, 0x0001, + 0x0005, 0x0001, 0x0005, 0x0001, 0x0005, 0x0001, 0x0005, 0x0001, + 0x0005, 0x0005, 0x0001, 0x0005, 0x0001, 0x0001, 0x0005, 0x0005, + 0x0005, 0x0005, 0x0001, 0x0005, 0x0005, 0x0005, 0x0005, 0x0001, + 0x0005, 0x0005, 0x0005, 0x0005, 0x0001, 0x0005, 0x0001, 0x0005, + 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, + 0x0005, 0x0001, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, + 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0005, 0x0005, 0x0005, 0x0001, 0x0005, 0x0005, + 0x0005, 0x0005, 0x0005, 0x0001, 0x0005, 0x0005, 0x0005, 0x0005, + 0x0005, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0001, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, + 0x0004, 0x0004, 0x0004, 0x0004, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0000, 0x0000, 0x0001, + 0x000a, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001 +}; diff --git a/dlls/wineps.drv/printproc.c b/dlls/wineps.drv/printproc.c index 858a118b41b..b40f7a7962c 100644 --- a/dlls/wineps.drv/printproc.c +++ b/dlls/wineps.drv/printproc.c @@ -25,6 +25,7 @@ #include #include #include +#include #include "psdrv.h" @@ -1143,6 +1144,585 @@ static BOOL get_text_extent(struct pp_data *data, const WCHAR *str, INT count, return ret; } +extern const unsigned short bidi_direction_table[] DECLSPEC_HIDDEN; + +/*------------------------------------------------------------------------ + Bidirectional Character Types + + as defined by the Unicode Bidirectional Algorithm Table 3-7. + + Note: + + The list of bidirectional character types here is not grouped the + same way as the table 3-7, since the numeric values for the types + are chosen to keep the state and action tables compact. +------------------------------------------------------------------------*/ +enum directions +{ + /* input types */ + /* ON MUST be zero, code relies on ON = N = 0 */ + ON = 0, /* Other Neutral */ + L, /* Left Letter */ + R, /* Right Letter */ + AN, /* Arabic Number */ + EN, /* European Number */ + AL, /* Arabic Letter (Right-to-left) */ + NSM, /* Non-spacing Mark */ + CS, /* Common Separator */ + ES, /* European Separator */ + ET, /* European Terminator (post/prefix e.g. $ and %) */ + + /* resolved types */ + BN, /* Boundary neutral (type of RLE etc after explicit levels) */ + + /* input types, */ + S, /* Segment Separator (TAB) // used only in L1 */ + WS, /* White space // used only in L1 */ + B, /* Paragraph Separator (aka as PS) */ + + /* types for explicit controls */ + RLO, /* these are used only in X1-X9 */ + RLE, + LRO, + LRE, + PDF, + + LRI, /* Isolate formatting characters new with 6.3 */ + RLI, + FSI, + PDI, + + /* resolved types, also resolved directions */ + NI = ON, /* alias, where ON, WS and S are treated the same */ +}; + +static inline unsigned short get_table_entry_32(const unsigned short *table, UINT ch) +{ + return table[table[table[table[ch >> 12] + ((ch >> 8) & 0x0f)] + ((ch >> 4) & 0x0f)] + (ch & 0xf)]; +} + +/* Convert the libwine information to the direction enum */ +static void classify(LPCWSTR lpString, WORD *chartype, DWORD uCount) +{ + unsigned i; + + for (i = 0; i < uCount; ++i) + chartype[i] = get_table_entry_32(bidi_direction_table, lpString[i]); +} + +/* Set a run of cval values at locations all prior to, but not including */ +/* iStart, to the new value nval. */ +static void SetDeferredRun(BYTE *pval, int cval, int iStart, int nval) +{ + int i = iStart - 1; + for (; i >= iStart - cval; i--) + { + pval[i] = nval; + } +} + +/* THE PARAGRAPH LEVEL */ + +/*------------------------------------------------------------------------ + Function: resolveParagraphs + + Resolves the input strings into blocks over which the algorithm + is then applied. + + Implements Rule P1 of the Unicode Bidi Algorithm + + Input: Text string + Character count + + Output: revised character count + + Note: This is a very simplistic function. In effect it restricts + the action of the algorithm to the first paragraph in the input + where a paragraph ends at the end of the first block separator + or at the end of the input text. + +------------------------------------------------------------------------*/ + +static int resolveParagraphs(WORD *types, int cch) +{ + /* skip characters not of type B */ + int ich = 0; + for(; ich < cch && types[ich] != B; ich++); + /* stop after first B, make it a BN for use in the next steps */ + if (ich < cch && types[ich] == B) + types[ich++] = BN; + return ich; +} + +/* REORDER */ +/*------------------------------------------------------------------------ + Function: resolveLines + + Breaks a paragraph into lines + + Input: Array of line break flags + Character count + In/Out: Array of characters + + Returns the count of characters on the first line + + Note: This function only breaks lines at hard line breaks. Other + line breaks can be passed in. If pbrk[n] is TRUE, then a break + occurs after the character in pszInput[n]. Breaks before the first + character are not allowed. +------------------------------------------------------------------------*/ +static int resolveLines(LPCWSTR pszInput, const BOOL * pbrk, int cch) +{ + /* skip characters not of type LS */ + int ich = 0; + for(; ich < cch; ich++) + { + if (pszInput[ich] == (WCHAR)'\n' || (pbrk && pbrk[ich])) + { + ich++; + break; + } + } + + return ich; +} + +/*------------------------------------------------------------------------ + Function: resolveWhiteSpace + + Resolves levels for WS and S + Implements rule L1 of the Unicode bidi Algorithm. + + Input: Base embedding level + Character count + Array of direction classes (for one line of text) + + In/Out: Array of embedding levels (for one line of text) + + Note: this should be applied a line at a time. The default driver + code supplied in this file assumes a single line of text; for + a real implementation, cch and the initial pointer values + would have to be adjusted. +------------------------------------------------------------------------*/ +static void resolveWhitespace(int baselevel, const WORD *pcls, BYTE *plevel, int cch) +{ + int cchrun = 0; + BYTE oldlevel = baselevel; + + int ich = 0; + for (; ich < cch; ich++) + { + switch(pcls[ich]) + { + default: + cchrun = 0; /* any other character breaks the run */ + break; + case WS: + cchrun++; + break; + + case RLE: + case LRE: + case LRO: + case RLO: + case PDF: + case LRI: + case RLI: + case FSI: + case PDI: + case BN: + plevel[ich] = oldlevel; + cchrun++; + break; + + case S: + case B: + /* reset levels for WS before eot */ + SetDeferredRun(plevel, cchrun, ich, baselevel); + cchrun = 0; + plevel[ich] = baselevel; + break; + } + oldlevel = plevel[ich]; + } + /* reset level before eot */ + SetDeferredRun(plevel, cchrun, ich, baselevel); +} + +/*------------------------------------------------------------------------ + Function: BidiLines + + Implements the Line-by-Line phases of the Unicode Bidi Algorithm + + Input: Count of characters + Array of character directions + + Inp/Out: Input text + Array of levels + +------------------------------------------------------------------------*/ +static void BidiLines(int baselevel, LPWSTR pszOutLine, LPCWSTR pszLine, const WORD * pclsLine, + BYTE * plevelLine, int cchPara, const BOOL * pbrk) +{ + int cchLine = 0; + int done = 0; + int *run; + + run = HeapAlloc(GetProcessHeap(), 0, cchPara * sizeof(int)); + if (!run) + { + WARN("Out of memory\n"); + return; + } + + do + { + /* break lines at LS */ + cchLine = resolveLines(pszLine, pbrk, cchPara); + + /* resolve whitespace */ + resolveWhitespace(baselevel, pclsLine, plevelLine, cchLine); + + if (pszOutLine) + { + int i; + /* reorder each line in place */ + ScriptLayout(cchLine, plevelLine, NULL, run); + for (i = 0; i < cchLine; i++) + pszOutLine[done+run[i]] = pszLine[i]; + } + + pszLine += cchLine; + plevelLine += cchLine; + pbrk += pbrk ? cchLine : 0; + pclsLine += cchLine; + cchPara -= cchLine; + done += cchLine; + + } while (cchPara); + + HeapFree(GetProcessHeap(), 0, run); +} + +#define WINE_GCPW_FORCE_LTR 0 +#define WINE_GCPW_FORCE_RTL 1 +#define WINE_GCPW_DIR_MASK 3 + +static BOOL BIDI_Reorder(HDC hDC, /* [in] Display DC */ + LPCWSTR lpString, /* [in] The string for which information is to be returned */ + INT uCount, /* [in] Number of WCHARs in string. */ + DWORD dwFlags, /* [in] GetCharacterPlacement compatible flags */ + DWORD dwWineGCP_Flags, /* [in] Wine internal flags - Force paragraph direction */ + LPWSTR lpOutString, /* [out] Reordered string */ + INT uCountOut, /* [in] Size of output buffer */ + UINT *lpOrder, /* [out] Logical -> Visual order map */ + WORD **lpGlyphs, /* [out] reordered, mirrored, shaped glyphs to display */ + INT *cGlyphs) /* [out] number of glyphs generated */ +{ + WORD *chartype = NULL; + BYTE *levels = NULL; + INT i, done; + unsigned glyph_i; + BOOL is_complex, ret = FALSE; + + int maxItems; + int nItems; + SCRIPT_CONTROL Control; + SCRIPT_STATE State; + SCRIPT_ITEM *pItems = NULL; + HRESULT res; + SCRIPT_CACHE psc = NULL; + WORD *run_glyphs = NULL; + WORD *pwLogClust = NULL; + SCRIPT_VISATTR *psva = NULL; + DWORD cMaxGlyphs = 0; + BOOL doGlyphs = TRUE; + + TRACE("%s, %d, 0x%08lx lpOutString=%p, lpOrder=%p\n", + debugstr_wn(lpString, uCount), uCount, dwFlags, + lpOutString, lpOrder); + + memset(&Control, 0, sizeof(Control)); + memset(&State, 0, sizeof(State)); + if (lpGlyphs) + *lpGlyphs = NULL; + + if (!(dwFlags & GCP_REORDER)) + { + FIXME("Asked to reorder without reorder flag set\n"); + return FALSE; + } + + if (lpOutString && uCountOut < uCount) + { + FIXME("lpOutString too small\n"); + return FALSE; + } + + chartype = HeapAlloc(GetProcessHeap(), 0, uCount * sizeof(WORD)); + if (!chartype) + { + WARN("Out of memory\n"); + return FALSE; + } + + if (lpOutString) + memcpy(lpOutString, lpString, uCount * sizeof(WCHAR)); + + is_complex = FALSE; + for (i = 0; i < uCount && !is_complex; i++) + { + if ((lpString[i] >= 0x900 && lpString[i] <= 0xfff) || + (lpString[i] >= 0x1cd0 && lpString[i] <= 0x1cff) || + (lpString[i] >= 0xa840 && lpString[i] <= 0xa8ff)) + is_complex = TRUE; + } + + /* Verify reordering will be required */ + if (WINE_GCPW_FORCE_RTL == (dwWineGCP_Flags & WINE_GCPW_DIR_MASK)) + State.uBidiLevel = 1; + else if (!is_complex) + { + done = 1; + classify(lpString, chartype, uCount); + for (i = 0; i < uCount; i++) + switch (chartype[i]) + { + case R: + case AL: + case RLE: + case RLO: + done = 0; + break; + } + if (done) + { + HeapFree(GetProcessHeap(), 0, chartype); + if (lpOrder) + { + for (i = 0; i < uCount; i++) + lpOrder[i] = i; + } + return TRUE; + } + } + + levels = HeapAlloc(GetProcessHeap(), 0, uCount * sizeof(BYTE)); + if (!levels) + { + WARN("Out of memory\n"); + goto cleanup; + } + + maxItems = 5; + pItems = HeapAlloc(GetProcessHeap(),0, maxItems * sizeof(SCRIPT_ITEM)); + if (!pItems) + { + WARN("Out of memory\n"); + goto cleanup; + } + + if (lpGlyphs) + { + cMaxGlyphs = 1.5 * uCount + 16; + run_glyphs = HeapAlloc(GetProcessHeap(),0,sizeof(WORD) * cMaxGlyphs); + if (!run_glyphs) + { + WARN("Out of memory\n"); + goto cleanup; + } + pwLogClust = HeapAlloc(GetProcessHeap(),0,sizeof(WORD) * uCount); + if (!pwLogClust) + { + WARN("Out of memory\n"); + goto cleanup; + } + psva = HeapAlloc(GetProcessHeap(),0,sizeof(SCRIPT_VISATTR) * cMaxGlyphs); + if (!psva) + { + WARN("Out of memory\n"); + goto cleanup; + } + } + + done = 0; + glyph_i = 0; + while (done < uCount) + { + INT j; + classify(lpString + done, chartype, uCount - done); + /* limit text to first block */ + i = resolveParagraphs(chartype, uCount - done); + for (j = 0; j < i; ++j) + switch(chartype[j]) + { + case B: + case S: + case WS: + case ON: chartype[j] = NI; + default: continue; + } + + res = ScriptItemize(lpString + done, i, maxItems, &Control, &State, pItems, &nItems); + while (res == E_OUTOFMEMORY) + { + SCRIPT_ITEM *new_pItems = HeapReAlloc(GetProcessHeap(), 0, pItems, sizeof(*pItems) * maxItems * 2); + if (!new_pItems) + { + WARN("Out of memory\n"); + goto cleanup; + } + pItems = new_pItems; + maxItems *= 2; + res = ScriptItemize(lpString + done, i, maxItems, &Control, &State, pItems, &nItems); + } + + if (lpOutString || lpOrder) + for (j = 0; j < nItems; j++) + { + int k; + for (k = pItems[j].iCharPos; k < pItems[j+1].iCharPos; k++) + levels[k] = pItems[j].a.s.uBidiLevel; + } + + if (lpOutString) + { + /* assign directional types again, but for WS, S this time */ + classify(lpString + done, chartype, i); + + BidiLines(State.uBidiLevel, lpOutString + done, lpString + done, + chartype, levels, i, 0); + } + + if (lpOrder) + { + int k, lastgood; + for (j = lastgood = 0; j < i; ++j) + if (levels[j] != levels[lastgood]) + { + --j; + if (levels[lastgood] & 1) + for (k = j; k >= lastgood; --k) + lpOrder[done + k] = done + j - k; + else + for (k = lastgood; k <= j; ++k) + lpOrder[done + k] = done + k; + lastgood = ++j; + } + if (levels[lastgood] & 1) + for (k = j - 1; k >= lastgood; --k) + lpOrder[done + k] = done + j - 1 - k; + else + for (k = lastgood; k < j; ++k) + lpOrder[done + k] = done + k; + } + + if (lpGlyphs && doGlyphs) + { + BYTE *runOrder; + int *visOrder; + SCRIPT_ITEM *curItem; + + runOrder = HeapAlloc(GetProcessHeap(), 0, maxItems * sizeof(*runOrder)); + visOrder = HeapAlloc(GetProcessHeap(), 0, maxItems * sizeof(*visOrder)); + if (!runOrder || !visOrder) + { + WARN("Out of memory\n"); + HeapFree(GetProcessHeap(), 0, runOrder); + HeapFree(GetProcessHeap(), 0, visOrder); + goto cleanup; + } + + for (j = 0; j < nItems; j++) + runOrder[j] = pItems[j].a.s.uBidiLevel; + + ScriptLayout(nItems, runOrder, visOrder, NULL); + + for (j = 0; j < nItems; j++) + { + int k; + int cChars,cOutGlyphs; + curItem = &pItems[visOrder[j]]; + + cChars = pItems[visOrder[j]+1].iCharPos - curItem->iCharPos; + + res = ScriptShape(hDC, &psc, lpString + done + curItem->iCharPos, cChars, cMaxGlyphs, &curItem->a, run_glyphs, pwLogClust, psva, &cOutGlyphs); + while (res == E_OUTOFMEMORY) + { + WORD *new_run_glyphs = HeapReAlloc(GetProcessHeap(), 0, run_glyphs, sizeof(*run_glyphs) * cMaxGlyphs * 2); + SCRIPT_VISATTR *new_psva = HeapReAlloc(GetProcessHeap(), 0, psva, sizeof(*psva) * cMaxGlyphs * 2); + if (!new_run_glyphs || !new_psva) + { + WARN("Out of memory\n"); + HeapFree(GetProcessHeap(), 0, runOrder); + HeapFree(GetProcessHeap(), 0, visOrder); + HeapFree(GetProcessHeap(), 0, *lpGlyphs); + *lpGlyphs = NULL; + if (new_run_glyphs) + run_glyphs = new_run_glyphs; + if (new_psva) + psva = new_psva; + goto cleanup; + } + run_glyphs = new_run_glyphs; + psva = new_psva; + cMaxGlyphs *= 2; + res = ScriptShape(hDC, &psc, lpString + done + curItem->iCharPos, cChars, cMaxGlyphs, &curItem->a, run_glyphs, pwLogClust, psva, &cOutGlyphs); + } + if (res) + { + if (res == USP_E_SCRIPT_NOT_IN_FONT) + TRACE("Unable to shape with currently selected font\n"); + else + FIXME("Unable to shape string (%lx)\n",res); + j = nItems; + doGlyphs = FALSE; + HeapFree(GetProcessHeap(), 0, *lpGlyphs); + *lpGlyphs = NULL; + } + else + { + WORD *new_glyphs; + if (*lpGlyphs) + new_glyphs = HeapReAlloc(GetProcessHeap(), 0, *lpGlyphs, sizeof(**lpGlyphs) * (glyph_i + cOutGlyphs)); + else + new_glyphs = HeapAlloc(GetProcessHeap(), 0, sizeof(**lpGlyphs) * (glyph_i + cOutGlyphs)); + if (!new_glyphs) + { + WARN("Out of memory\n"); + HeapFree(GetProcessHeap(), 0, runOrder); + HeapFree(GetProcessHeap(), 0, visOrder); + HeapFree(GetProcessHeap(), 0, *lpGlyphs); + *lpGlyphs = NULL; + goto cleanup; + } + *lpGlyphs = new_glyphs; + for (k = 0; k < cOutGlyphs; k++) + (*lpGlyphs)[glyph_i+k] = run_glyphs[k]; + glyph_i += cOutGlyphs; + } + } + HeapFree(GetProcessHeap(), 0, runOrder); + HeapFree(GetProcessHeap(), 0, visOrder); + } + + done += i; + } + if (cGlyphs) + *cGlyphs = glyph_i; + + ret = TRUE; +cleanup: + HeapFree(GetProcessHeap(), 0, chartype); + HeapFree(GetProcessHeap(), 0, levels); + HeapFree(GetProcessHeap(), 0, pItems); + HeapFree(GetProcessHeap(), 0, run_glyphs); + HeapFree(GetProcessHeap(), 0, pwLogClust); + HeapFree(GetProcessHeap(), 0, psva); + ScriptFreeCache(&psc); + return ret; +} + static inline BOOL intersect_rect(RECT *dst, const RECT *src1, const RECT *src2) { dst->left = max(src1->left, src2->left); @@ -1182,9 +1762,28 @@ static BOOL ext_text_out(struct pp_data *data, HANDLETABLE *htable, RECT rc; POINT *deltas = NULL, width = {0, 0}; INT breakRem; + WORD *glyphs = NULL; XFORM xform; - /* TODO: Add BiDi support */ + if (!(flags & (ETO_GLYPH_INDEX | ETO_IGNORELANGUAGE)) && count > 0) + { + int glyphs_count = 0; + UINT bidi_flags; + + bidi_flags = (GetTextAlign(hdc) & TA_RTLREADING) || (flags & ETO_RTLREADING) + ? WINE_GCPW_FORCE_RTL : WINE_GCPW_FORCE_LTR; + + BIDI_Reorder(hdc, str, count, GCP_REORDER, bidi_flags, + NULL, 0, NULL, &glyphs, &glyphs_count); + + flags |= ETO_IGNORELANGUAGE; + if (glyphs) + { + flags |= ETO_GLYPH_INDEX; + count = glyphs_count; + str = glyphs; + } + } align = GetTextAlign(hdc); breakRem = data->break_rem; @@ -1504,6 +2103,7 @@ done: DeleteObject(hbrush); } + HeapFree(GetProcessHeap(), 0, glyphs); return ret; } diff --git a/tools/make_unicode b/tools/make_unicode index 2d1a90fafbc..d0e3afc4294 100755 --- a/tools/make_unicode +++ b/tools/make_unicode @@ -5807,6 +5807,7 @@ chdir ".." if -f "./make_unicode"; load_data(); dump_bidi_dir_table( "dlls/gdi32/uniscribe/direction.c" ); dump_bidi_dir_table( "dlls/dwrite/direction.c" ); +dump_bidi_dir_table( "dlls/wineps.drv/direction.c" ); dump_mirroring( "dlls/gdi32/uniscribe/mirror.c" ); dump_mirroring( "dlls/dwrite/mirror.c" ); dump_bracket( "dlls/gdi32/uniscribe/bracket.c" );