From 140a0315150617e2fb31f61bfdc26d3104bbbf69 Mon Sep 17 00:00:00 2001 From: John Reiser Date: Sun, 4 Jun 2017 16:52:43 -0700 Subject: [PATCH] arm64-linux.shlib-init modified: p_lx_elf.cpp modified: stub/src/arm64-linux.shlib-init.S modified: stub/arm64-linux.shlib-init.h modified: stub/tmp/arm64-linux.shlib-init.bin.dump --- src/p_lx_elf.cpp | 3 +- src/stub/arm64-linux.shlib-init.h | 1022 +++++++++--------- src/stub/src/arm64-linux.shlib-init.S | 177 ++- src/stub/tmp/arm64-linux.shlib-init.bin.dump | 26 +- 4 files changed, 593 insertions(+), 635 deletions(-) diff --git a/src/p_lx_elf.cpp b/src/p_lx_elf.cpp index df9cc5f6..1d406099 100644 --- a/src/p_lx_elf.cpp +++ b/src/p_lx_elf.cpp @@ -2444,6 +2444,7 @@ PackLinuxElf64arm::canPack() throwCantPack("first PT_LOAD.p_offset != 0; try '--force-execve'"); return false; } + hatch_off = phdr->p_memsz; break; } } @@ -2571,7 +2572,7 @@ PackLinuxElf64arm::canPack() if ( sh_addr==va_gash || (sh_addr==va_hash && 0==va_gash) ) { shdr= &shdri[get_te32(&shdr->sh_link)]; // the associated SHT_SYMTAB - hatch_off = (char *)&ehdri.e_ident[11] - (char *)&ehdri; + //hatch_off = (char *)&ehdri.e_ident[11] - (char *)&ehdri; break; } } diff --git a/src/stub/arm64-linux.shlib-init.h b/src/stub/arm64-linux.shlib-init.h index 15f6461e..3cc322af 100644 --- a/src/stub/arm64-linux.shlib-init.h +++ b/src/stub/arm64-linux.shlib-init.h @@ -1,5 +1,5 @@ /* arm64-linux.shlib-init.h - created from arm64-linux.shlib-init.bin, 8241 (0x2031) bytes + created from arm64-linux.shlib-init.bin, 8113 (0x1fb1) bytes This file is part of the UPX executable compressor. @@ -31,525 +31,517 @@ */ -#define STUB_ARM64_LINUX_SHLIB_INIT_SIZE 8241 -#define STUB_ARM64_LINUX_SHLIB_INIT_ADLER32 0x34ff4b4a -#define STUB_ARM64_LINUX_SHLIB_INIT_CRC32 0x82d80652 +#define STUB_ARM64_LINUX_SHLIB_INIT_SIZE 8113 +#define STUB_ARM64_LINUX_SHLIB_INIT_ADLER32 0x54c80b7d +#define STUB_ARM64_LINUX_SHLIB_INIT_CRC32 0xf51cd9f5 -unsigned char stub_arm64_linux_shlib_init[8241] = { +unsigned char stub_arm64_linux_shlib_init[8113] = { /* 0x0000 */ 127, 69, 76, 70, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x0010 */ 1, 0,183, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -/* 0x0020 */ 0, 0, 0, 0, 0, 0, 0, 0,144, 24, 0, 0, 0, 0, 0, 0, +/* 0x0020 */ 0, 0, 0, 0, 0, 0, 0, 0, 16, 24, 0, 0, 0, 0, 0, 0, /* 0x0030 */ 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, -/* 0x0040 */ 0, 0, 32,212,253,123,190,169,224, 11, 0,249,227, 19,190,169, -/* 0x0050 */ 230, 31, 1,169,224, 7,190,169,226, 11, 0,249,253, 3, 0,145, -/* 0x0060 */ 0, 0, 0,148,254, 15, 31,248,226, 15,191,169, 7, 64, 33,139, -/* 0x0070 */ 5, 0,128, 18, 4, 0,176, 82, 24, 0, 0, 20,227, 19,193,168, -/* 0x0080 */ 0, 0, 7,203, 66, 0, 3,203,130, 0, 0,185,228, 3, 0,170, -/* 0x0090 */ 224, 3, 3,170, 97, 0, 2,139, 32,123, 11,213, 32,117, 11,213, -/* 0x00a0 */ 0, 0, 1,145, 31, 0, 1,235,131,255,255, 84,224, 3, 4,170, -/* 0x00b0 */ 254, 7, 65,248,192, 3, 95,214,132, 0, 4, 43, 68, 0, 0, 52, -/* 0x00c0 */ 192, 3, 95,214, 4, 68, 64,184,132, 0, 4, 58,192, 3, 95,214, -/* 0x00d0 */ 3, 20, 64, 56, 67, 20, 0, 56,248,255,255,151,162,255,255, 84, -/* 0x00e0 */ 33, 0,128, 82, 4, 0, 0, 20, 33, 4, 0, 81,243,255,255,151, -/* 0x00f0 */ 33, 0, 1, 26,241,255,255,151, 33, 0, 1, 26,239,255,255,151, -/* 0x0100 */ 67,255,255, 84, 35, 12, 0,113, 1, 0,128, 82, 35, 1, 0, 84, -/* 0x0110 */ 5, 20, 64, 56,165, 32, 3, 42,229, 3, 37, 42, 5,251,255, 52, -/* 0x0120 */ 191, 0, 0,114,165,124, 1, 19,161, 1, 0, 84, 3, 0, 0, 20, -/* 0x0130 */ 226,255,255,151, 66, 1, 0, 84, 33, 0,128, 82,223,255,255,151, -/* 0x0140 */ 226, 0, 0, 84,221,255,255,151, 33, 0, 1, 26,219,255,255,151, -/* 0x0150 */ 163,255,255, 84, 33, 16, 0, 17, 4, 0, 0, 20,215,255,255,151, -/* 0x0160 */ 33, 0, 1, 26, 33, 8, 0, 17,191, 0, 20, 49, 33, 36,129, 26, -/* 0x0170 */ 67, 64, 33,139, 99,240, 95, 56, 67,200,101, 56, 67, 20, 0, 56, -/* 0x0180 */ 33, 4, 0,113,161,255,255, 84,212,255,255, 23,226, 15,190,169, -/* 0x0190 */ 254, 11, 0,249, 7, 64, 33,139, 5, 0,128, 18, 4, 0,176, 82, -/* 0x01a0 */ 24, 0, 0, 20,227, 19,193,168, 0, 0, 7,203, 66, 0, 3,203, -/* 0x01b0 */ 130, 0, 0,185,228, 3, 0,170,224, 3, 3,170, 97, 0, 2,139, -/* 0x01c0 */ 32,123, 11,213, 32,117, 11,213, 0, 0, 1,145, 31, 0, 1,235, -/* 0x01d0 */ 131,255,255, 84,224, 3, 4,170,254, 7, 65,248,192, 3, 95,214, -/* 0x01e0 */ 132, 0, 4, 43, 68, 0, 0, 52,192, 3, 95,214, 4, 68, 64,184, -/* 0x01f0 */ 132, 0, 4, 58,192, 3, 95,214, 3, 20, 64, 56, 67, 20, 0, 56, -/* 0x0200 */ 248,255,255,151,162,255,255, 84, 33, 0,128, 82, 4, 0, 0, 20, -/* 0x0210 */ 33, 4, 0, 81,243,255,255,151, 33, 0, 1, 58,241,255,255,151, -/* 0x0220 */ 33, 0, 1, 58,239,255,255,151, 67,255,255, 84, 35, 12, 0,113, -/* 0x0230 */ 1, 0,128, 82, 35, 1, 0, 84, 5, 20, 64, 56,165, 32, 3, 42, -/* 0x0240 */ 229, 3, 37, 42, 5,251,255, 52,163, 0, 1, 83,165,124, 1, 83, -/* 0x0250 */ 99, 0, 3, 43, 2, 0, 0, 20,226,255,255,151, 33, 0, 1, 58, -/* 0x0260 */ 224,255,255,151, 33, 0, 1, 58,225, 0, 0, 84, 33, 0,128, 82, -/* 0x0270 */ 220,255,255,151, 33, 0, 1, 58,218,255,255,151,163,255,255, 84, -/* 0x0280 */ 33, 8, 0, 17, 33, 4, 0, 17,191, 0, 20, 49, 33, 52,129, 26, -/* 0x0290 */ 67, 0, 64, 57, 67,200,101, 56, 67, 20, 0, 56, 33, 4, 0,113, -/* 0x02a0 */ 161,255,255, 84,215,255,255, 23, 1, 64, 33,139,225, 11,190,169, -/* 0x02b0 */ 227,123, 1,169, 5, 0,128, 18, 4, 0,176, 82, 31, 0, 0, 20, -/* 0x02c0 */ 228,123, 65,169,225, 15,194,168, 0, 0, 1,203, 66, 0, 3,203, -/* 0x02d0 */ 130, 0, 0,185,228, 3, 0,170,224, 3, 3,170, 97, 0, 2,139, -/* 0x02e0 */ 32,123, 11,213, 32,117, 11,213, 0, 0, 1,145, 31, 0, 1,235, -/* 0x02f0 */ 131,255,255, 84,224, 3, 4,170,192, 3, 95,214,132, 0, 4, 43, -/* 0x0300 */ 68, 0, 0, 52,192, 3, 95,214, 4, 68, 64,184,132, 0, 4, 58, -/* 0x0310 */ 192, 3, 95,214, 33, 0,128, 82,240, 3, 30,170,248,255,255,151, -/* 0x0320 */ 33, 0, 1, 58,246,255,255,151,163,255,255, 84, 0, 2, 31,214, -/* 0x0330 */ 3, 20, 64, 56, 67, 20, 0, 56,241,255,255,151,162,255,255, 84, -/* 0x0340 */ 245,255,255,151, 35, 12, 0,113, 1, 0,128, 82,163, 0, 0, 84, -/* 0x0350 */ 5, 20, 64, 56,165, 32, 3, 42,229, 3, 37, 42, 37,251,255, 52, -/* 0x0360 */ 231,255,255,151, 33, 0, 1, 58,229,255,255,151, 33, 0, 1, 58, -/* 0x0370 */ 97, 0, 0, 84,232,255,255,151, 33, 8, 0, 17,191, 0, 52, 49, -/* 0x0380 */ 33, 36,129, 26, 67,200,101, 56, 33, 4, 0,113, 67, 20, 0, 56, -/* 0x0390 */ 162,255,255, 84,233,255,255, 23,159, 56, 0,113, 1, 0, 0, 84, -/* 0x03a0 */ 1, 64, 33,139, 4, 0,128,210,225, 11,190,169,227,123, 1,169, -/* 0x03b0 */ 228, 19,191,169,224, 3, 0,145,227, 35, 0,145,230, 51, 0,145, -/* 0x03c0 */ 8, 0, 64, 57, 7,192,128, 82, 8,125, 3, 83,231, 32,200, 26, -/* 0x03d0 */ 253, 3, 0,145,231,192, 57, 17,232, 3, 0,145,255, 67, 39,203, -/* 0x03e0 */ 100, 16,129,168,127, 0, 8,235,195,255,255, 84,230, 3, 3,170, -/* 0x03f0 */ 229, 3, 7, 42,228, 3, 2,170, 34, 8, 0, 81,225, 3, 0,170, -/* 0x0400 */ 39, 20, 64, 56,231, 8, 0, 18,231, 11, 0, 57, 39, 20, 64, 56, -/* 0x0410 */ 232,124, 4, 83,232, 7, 0, 57,231, 12, 0, 18,231, 3, 0, 57, -/* 0x0420 */ 224, 3, 0,145, 17, 0, 0,148,191, 3, 0,145,228,123, 65,169, -/* 0x0430 */ 225, 15,194,168, 0, 0, 1,203, 66, 0, 3,203,130, 0, 0,185, -/* 0x0440 */ 228, 3, 0,170,224, 3, 3,170, 97, 0, 2,139, 32,123, 11,213, -/* 0x0450 */ 32,117, 11,213, 0, 0, 1,145, 31, 0, 1,235,131,255,255, 84, -/* 0x0460 */ 224, 3, 4,170,192, 3, 95,214,255, 67, 1,209, 39, 0,128, 82, -/* 0x0470 */ 17, 16, 0,145, 9,128,128, 82,243, 83, 0,169,245, 91, 1,169, -/* 0x0480 */ 247, 99, 2,169,249,107, 3,169,251,115, 4,169, 20, 8, 64, 57, -/* 0x0490 */ 19, 4, 64, 57, 22, 0, 64, 57,244, 32,212, 26,127, 0, 0,185, -/* 0x04a0 */ 243, 32,211, 26,223, 0, 0,185, 7, 0,128,210,148, 6, 0, 81, -/* 0x04b0 */ 8, 4, 64, 57, 10, 1, 22, 11,104, 6, 0, 81, 18, 1, 39, 30, -/* 0x04c0 */ 8, 96,128, 82, 8, 33,202, 26, 8,217, 28, 49,160, 0, 0, 84, -/* 0x04d0 */ 41,122, 39,120,231, 4, 0,145, 31, 1, 7,107,168,255,255, 84, -/* 0x04e0 */ 34, 64, 34,139, 63, 0, 2,235, 64, 16, 0, 84,235, 3, 1,170, -/* 0x04f0 */ 40, 4, 0,145,103, 85, 64, 56, 31, 1, 2,235,160, 15, 0, 84, -/* 0x0500 */ 9, 21, 64, 56, 31, 1, 11,235, 39, 33, 7, 42, 97,255,255, 84, -/* 0x0510 */ 229, 69, 0, 52, 8, 1,128, 82, 53, 0,128, 82, 18, 0,128, 82, -/* 0x0520 */ 9, 0,128, 18, 20, 1, 39, 30,104, 0,128, 82,177, 2, 39, 30, -/* 0x0530 */ 247, 3, 21, 42, 7, 1, 39, 30, 8, 86,128,210,165, 2, 39, 30, -/* 0x0540 */ 252, 3, 21, 42, 3, 1,103,158,104, 1,128, 82,234, 3, 18, 42, -/* 0x0550 */ 240, 3, 18, 42, 0, 1, 39, 30, 8,176, 41,145, 14,224,191, 18, -/* 0x0560 */ 15, 0,129, 82, 1, 1,103,158, 40, 1,128, 82, 2, 1, 39, 30, -/* 0x0570 */ 136, 2, 38, 30, 8, 1, 22, 75, 16, 1, 39, 30, 72,110, 28, 83, -/* 0x0580 */ 63, 1, 14,107, 25, 2, 20, 10, 13,125, 64,147,173,193, 57,139, -/* 0x0590 */ 173,249,127,211,232, 0, 0, 84,127, 1, 2,235,160, 10, 0, 84, -/* 0x05a0 */ 104, 1, 64, 57, 41, 93, 24, 83,107, 5, 0,145, 7, 33, 7, 42, -/* 0x05b0 */ 59,106,109,120, 40,125, 11, 83, 8,125, 27, 27,255, 0, 8,107, -/* 0x05c0 */ 130, 10, 0, 84, 73, 2, 38, 30, 19, 62, 1, 14, 95, 26, 0,113, -/* 0x05d0 */ 12, 2, 9, 10, 73, 41,211, 26,140, 33,214, 26,234, 1, 27, 75, -/* 0x05e0 */ 41, 1, 12, 11,106, 23,138, 11, 42,106, 45,120, 41, 5, 9, 11, -/* 0x05f0 */ 41, 93,120,211, 41,217, 28,145, 58, 6, 9,139,109, 31, 0, 84, -/* 0x0600 */ 10, 2, 28, 75, 41, 0,128, 82,153,104,106, 56, 7, 0, 0, 20, -/* 0x0610 */ 91,107, 42,120, 41,121, 31, 83,232, 3, 13, 42, 83, 57, 0, 53, -/* 0x0620 */ 63,253, 3,113,236, 3, 0, 84, 57,123, 31, 83, 31, 1, 14,107, -/* 0x0630 */ 51, 3, 24, 18, 56,121, 31, 83,106,126, 64,147, 74, 1, 4,145, -/* 0x0640 */ 74,193, 41,139, 74,249,127,211,232, 0, 0, 84,127, 1, 2,235, -/* 0x0650 */ 8, 93, 24, 83,224, 4, 0, 84,108, 1, 64, 57,107, 5, 0,145, -/* 0x0660 */ 135, 33, 7, 42, 76,107,106,120, 13,125, 11, 83,251, 1, 12, 75, -/* 0x0670 */ 173,125, 12, 27,155, 21,155, 11,140, 21, 76, 75,255, 0, 13,107, -/* 0x0680 */ 8, 1, 13, 75, 99,252,255, 84, 76,107, 42,120, 9, 7, 0, 17, -/* 0x0690 */ 231, 0, 13, 75,115,252,255, 53, 63,253, 3,113, 77, 27, 0, 84, -/* 0x06a0 */ 42, 29, 0, 83,233, 3, 8, 42,138, 72, 48, 56, 16, 6, 0, 17, -/* 0x06b0 */ 95, 38, 0,113,236, 49, 0, 84, 82, 14, 0, 81,191, 0, 16,107, -/* 0x06c0 */ 232,245,255, 84, 0,224,191, 18, 63, 1, 0,107,136, 0, 0, 84, -/* 0x06d0 */ 127, 1, 2,235,224, 0, 0, 84,107, 5, 0,145, 97, 1, 1,203, -/* 0x06e0 */ 97, 0, 0,185,208, 0, 0,185, 0, 0,128, 82, 2, 0, 0, 20, -/* 0x06f0 */ 32, 0,128, 82,243, 83, 64,169,245, 91, 65,169,247, 99, 66,169, -/* 0x0700 */ 249,107, 67,169,251,115, 68,169,255, 67, 1,145,192, 3, 95,214, -/* 0x0710 */ 58, 1, 8, 75, 74,126, 64,147,105, 23, 91, 75, 95, 3, 14,107, -/* 0x0720 */ 41,106, 45,120, 76, 1, 3,145,231, 0, 8, 75,140,249,127,211, -/* 0x0730 */ 232, 0, 0, 84,127, 1, 2,235,192,253,255, 84,104, 1, 64, 57, -/* 0x0740 */ 90, 95, 24, 83,107, 5, 0,145, 7, 33, 7, 42, 40,106,108,120, -/* 0x0750 */ 74,127, 11, 83, 74,125, 8, 27,255, 0, 10,107,130, 25, 0, 84, -/* 0x0760 */ 237, 0, 38, 30,233, 1, 8, 75, 95, 30, 0,113, 53, 2, 38, 30, -/* 0x0770 */ 8, 21,137, 11,241, 2, 39, 30, 40,106, 44,120,242,179,141, 26, -/* 0x0780 */ 12,160, 25,145,247, 3, 28, 42, 95, 1, 14,107,232, 0, 0, 84, -/* 0x0790 */ 127, 1, 2,235,224,250,255, 84,104, 1, 64, 57, 74, 93, 24, 83, -/* 0x07a0 */ 107, 5, 0,145, 7, 33, 7, 42,141, 1, 64,121, 73,125, 11, 83, -/* 0x07b0 */ 41,125, 13, 27,255, 0, 9,107, 98, 31, 0, 84, 40,115, 29, 83, -/* 0x07c0 */ 115, 0,128, 82,234, 1, 13, 75, 8,125, 64,147, 8, 9, 0,145, -/* 0x07d0 */ 173, 21,138, 11,228, 3, 39, 30,141, 1, 0,121,102, 2, 39, 30, -/* 0x07e0 */ 153, 5, 8,139,218, 0, 38, 30, 44, 0,128, 82, 6, 0, 0, 20, -/* 0x07f0 */ 13, 3, 0,121, 90, 7, 0,113,140,121, 31, 83,233, 3, 8, 42, -/* 0x0800 */ 32, 3, 0, 84, 63, 1, 14,107,147,121, 31, 83, 56,199, 44,139, -/* 0x0810 */ 232, 0, 0, 84,127, 1, 2,235, 41, 93, 24, 83,160,246,255, 84, -/* 0x0820 */ 104, 1, 64, 57,107, 5, 0,145, 7, 33, 7, 42, 8, 3, 64,121, -/* 0x0830 */ 42,125, 11, 83,237, 1, 8, 75, 27, 21, 72, 75, 13, 21,141, 11, -/* 0x0840 */ 72,125, 8, 27,255, 0, 8,107, 41, 1, 8, 75, 35,253,255, 84, -/* 0x0850 */ 27, 3, 0,121, 90, 7, 0,113,231, 0, 8, 75,108, 6, 0, 17, -/* 0x0860 */ 33,253,255, 84,166, 68,166, 46,138, 0, 38, 30, 95, 14, 0,113, -/* 0x0870 */ 200, 0, 38, 30, 72, 1, 8, 75, 8, 1, 12, 11, 6, 1, 39, 30, -/* 0x0880 */ 236, 22, 0, 84,234, 0, 38, 30, 31, 13, 0,113,220, 0,128, 82, -/* 0x0890 */ 10,209,138, 26, 40, 0,128, 82, 74,101, 26, 83, 74,125, 64,147, -/* 0x08a0 */ 74,193, 6,145, 91,249,127,211, 6, 0, 0, 20, 44,106, 57,120, -/* 0x08b0 */ 156, 7, 0,113, 8,121, 31, 83,233, 3, 10, 42, 32, 3, 0, 84, -/* 0x08c0 */ 63, 1, 14,107, 19,121, 31, 83,121,199, 40,139,232, 0, 0, 84, -/* 0x08d0 */ 127, 1, 2,235, 41, 93, 24, 83,192,240,255, 84,106, 1, 64, 57, -/* 0x08e0 */ 107, 5, 0,145, 71, 33, 7, 42, 42,106,121,120, 45,125, 11, 83, -/* 0x08f0 */ 236, 1, 10, 75, 90, 21, 74, 75, 76, 21,140, 11,170,125, 10, 27, -/* 0x0900 */ 255, 0, 10,107, 41, 1, 10, 75, 35,253,255, 84, 58,106, 57,120, -/* 0x0910 */ 156, 7, 0,113,231, 0, 10, 75,104, 6, 0, 17, 33,253,255, 84, -/* 0x0920 */ 10, 1, 1, 81, 95, 13, 0,113, 45, 17, 0, 84, 95, 53, 0,113, -/* 0x0930 */ 72, 1, 0, 18, 77,125, 1, 19, 12, 1, 31, 50,140, 32, 0, 84, -/* 0x0940 */ 104, 0,102,158,187, 5, 0, 81,152, 33,219, 26, 8,193, 42,203, -/* 0x0950 */ 8, 65, 56,139, 40, 6, 8,139, 8, 9, 0,209, 19, 1,103,158, -/* 0x0960 */ 40, 0,128, 82,252, 3, 8, 42, 7, 0, 0, 20, 83, 3, 0,121, -/* 0x0970 */ 8,121, 31, 83,233, 3, 10, 42,123, 7, 0,113,156,123, 31, 83, -/* 0x0980 */ 128, 14, 0, 84,106, 2,102,158, 63, 1, 14,107, 25,121, 31, 83, -/* 0x0990 */ 90,197, 40,139,232, 0, 0, 84,127, 1, 2,235, 41, 93, 24, 83, -/* 0x09a0 */ 128,234,255, 84,106, 1, 64, 57,107, 5, 0,145, 71, 33, 7, 42, -/* 0x09b0 */ 74, 3, 64,121, 45,125, 11, 83,243, 1, 10, 75, 76, 21, 74, 75, -/* 0x09c0 */ 83, 21,147, 11,170,125, 10, 27,255, 0, 10,107, 41, 1, 10, 75, -/* 0x09d0 */ 227,252,255, 84, 76, 3, 0,121, 24, 3, 28, 42,231, 0, 10, 75, -/* 0x09e0 */ 40, 7, 0, 17,229,255,255, 23, 41, 0,128, 82, 6, 0, 0, 20, -/* 0x09f0 */ 41,121, 31, 83, 74,107, 56,120, 63,253, 3,113,232, 3, 12, 42, -/* 0x0a00 */ 44, 3, 0, 84, 31, 1, 14,107, 51,121, 31, 83, 56,125,127,147, -/* 0x0a10 */ 232, 0, 0, 84,127, 1, 2,235, 8, 93, 24, 83,160,230,255, 84, -/* 0x0a20 */ 106, 1, 64, 57,107, 5, 0,145, 71, 33, 7, 42, 74,107,120,120, -/* 0x0a30 */ 12,125, 11, 83,237, 1, 10, 75,140,125, 10, 27, 89, 21, 74, 75, -/* 0x0a40 */ 74, 21,141, 11,255, 0, 12,107, 8, 1, 12, 75, 35,253,255, 84, -/* 0x0a50 */ 105, 6, 0, 17, 89,107, 56,120, 63,253, 3,113,231, 0, 12, 75, -/* 0x0a60 */ 45,253,255, 84, 42, 29, 0, 83, 95, 14, 0,113,138, 72, 48, 56, -/* 0x0a70 */ 233, 3, 8, 42, 16, 6, 0, 17,204,225,255, 84,191, 0, 16,107, -/* 0x0a80 */ 18, 0,128, 82,200,215,255, 84, 15,255,255, 23, 73, 3, 10, 75, -/* 0x0a90 */ 8, 21, 72, 75, 63, 1, 14,107, 40,106, 44,120,231, 0, 10, 75, -/* 0x0aa0 */ 154, 97, 0,145,232, 0, 0, 84,127, 1, 2,235, 32,226,255, 84, -/* 0x0ab0 */ 104, 1, 64, 57, 41, 93, 24, 83,107, 5, 0,145, 7, 33, 7, 42, -/* 0x0ac0 */ 40,106,122,120, 42,125, 11, 83, 74,125, 8, 27,255, 0, 10,107, -/* 0x0ad0 */ 66, 10, 0, 84,233, 1, 8, 75, 95, 1, 14,107,173,129, 7,145, -/* 0x0ae0 */ 8, 21,137, 11, 40,106, 58,120,232, 0, 0, 84,127, 1, 2,235, -/* 0x0af0 */ 0,224,255, 84,104, 1, 64, 57, 74, 93, 24, 83,107, 5, 0,145, -/* 0x0b00 */ 7, 33, 7, 42, 40,106,109,120, 73,125, 11, 83, 41,125, 8, 27, -/* 0x0b10 */ 255, 0, 9,107,226, 16, 0, 84,234, 1, 8, 75, 8, 21,138, 11, -/* 0x0b20 */ 40,106, 45,120,112,222,255, 52, 74, 0, 38, 30, 8, 2, 28, 75, -/* 0x0b30 */ 12, 0, 38, 30, 95, 30, 0,113, 82,177,140, 26,138,104,104, 56, -/* 0x0b40 */ 138, 72, 48, 56, 16, 6, 0, 17,221,254,255, 23,248, 3, 10, 42, -/* 0x0b50 */ 28, 7, 0, 49,128,219,255, 84, 82, 30, 0, 17,200, 0, 38, 30, -/* 0x0b60 */ 159, 3, 16,107, 12, 9, 0, 17, 72,220,255, 84,232, 3, 16, 42, -/* 0x0b70 */ 2, 0, 0, 20, 76,218,255, 52, 10, 2, 28, 75, 16, 6, 0, 17, -/* 0x0b80 */ 31, 2, 5,107,140, 5, 0, 81,138,104,106, 56,138, 72, 40, 56, -/* 0x0b90 */ 232, 3, 16, 42, 3,255,255, 84,191, 0, 16,107, 8,207,255, 84, -/* 0x0ba0 */ 201,254,255, 23, 74, 1, 9, 75,173, 21, 77, 75, 95, 1, 14,107, -/* 0x0bb0 */ 141, 1, 0,121,231, 0, 9, 75,232, 0, 0, 84,127, 1, 2,235, -/* 0x0bc0 */ 128,217,255, 84,104, 1, 64, 57, 74, 93, 24, 83,107, 5, 0,145, -/* 0x0bd0 */ 7, 33, 7, 42,141, 5, 64,121, 73,125, 11, 83, 41,125, 13, 27, -/* 0x0be0 */ 255, 0, 9,107, 34, 7, 0, 84, 40,115, 29, 83, 19, 1,128, 82, -/* 0x0bf0 */ 234, 1, 13, 75, 8,125, 64,147,100, 2, 39, 30, 8, 9, 2,145, -/* 0x0c00 */ 115, 0,128, 82,173, 21,138, 11,153, 5, 8,139,141, 5, 0,121, -/* 0x0c10 */ 102, 2, 39, 30,244,254,255, 23, 41, 1, 10, 75, 8, 21, 72, 75, -/* 0x0c20 */ 63, 1, 14,107, 40,106, 58,120,231, 0, 10, 75,154,193, 0,145, -/* 0x0c30 */ 232, 0, 0, 84,127, 1, 2,235,192,213,255, 84,104, 1, 64, 57, -/* 0x0c40 */ 41, 93, 24, 83,107, 5, 0,145, 7, 33, 7, 42, 45,106,122,120, -/* 0x0c50 */ 40,125, 11, 83, 10,125, 13, 27,255, 0, 10,107, 35, 5, 0, 84, -/* 0x0c60 */ 41, 1, 10, 75,173, 21, 77, 75, 63, 1, 14,107, 45,106, 58,120, -/* 0x0c70 */ 231, 0, 10, 75,140, 33, 1,145,232, 0, 0, 84,127, 1, 2,235, -/* 0x0c80 */ 128,211,255, 84,104, 1, 64, 57, 41, 93, 24, 83,107, 5, 0,145, -/* 0x0c90 */ 7, 33, 7, 42, 45,106,108,120, 40,125, 11, 83, 10,125, 13, 27, -/* 0x0ca0 */ 255, 0, 10,107, 2, 8, 0, 84,232, 1, 13, 75,233, 3, 28, 42, -/* 0x0cb0 */ 60, 2, 38, 30,173, 21,136, 11, 45,106, 44,120,241, 2, 39, 30, -/* 0x0cc0 */ 247, 3, 9, 42, 21, 0, 0, 20, 8, 2,128, 82,231, 0, 9, 75, -/* 0x0cd0 */ 173, 21, 77, 75,153, 17, 8,145, 4, 1, 39, 30, 8, 1,128, 82, -/* 0x0ce0 */ 141, 5, 0,121, 73, 1, 9, 75, 6, 1, 39, 30,190,254,255, 23, -/* 0x0cf0 */ 191, 0, 16,107, 82, 26, 0, 81, 40,196,255, 84,114,254,255, 23, -/* 0x0d00 */ 232, 1, 13, 75,233, 3, 28, 42,252, 3, 23, 42,247, 3, 9, 42, -/* 0x0d10 */ 173, 21,136, 11, 45,106, 58,120,136, 2, 38, 30, 95, 30, 0,113, -/* 0x0d20 */ 9, 0, 38, 30, 44, 0,102,158, 18,177,137, 26,151,254,255, 23, -/* 0x0d30 */ 8, 21, 72, 75, 74, 1, 9, 75,231, 0, 9, 75, 40,106, 45,120, -/* 0x0d40 */ 246,255,255, 23,232, 3, 13, 42, 84,254,255, 23,170, 21, 0, 81, -/* 0x0d50 */ 63, 1, 14,107,140,121, 31, 83,232, 0, 0, 84,127, 1, 2,235, -/* 0x0d60 */ 41, 93, 24, 83, 96,204,255, 84,104, 1, 64, 57,107, 5, 0,145, -/* 0x0d70 */ 7, 33, 7, 42, 41,125, 1, 83,255, 0, 9,107, 99, 0, 0, 84, -/* 0x0d80 */ 231, 0, 9, 75,140, 1, 0, 50, 74, 5, 0,113, 33,254,255, 84, -/* 0x0d90 */ 8, 32, 25,145,152,109, 28, 83,155, 0,128, 82, 19, 1,103,158, -/* 0x0da0 */ 240,254,255, 23,232, 3, 28, 42,231, 0, 10, 75,173, 21, 77, 75, -/* 0x0db0 */ 252, 3, 21, 42, 45,106, 44,120, 42, 1, 10, 75, 53, 2, 38, 30, -/* 0x0dc0 */ 241, 2, 39, 30,247, 3, 8, 42,212,255,255, 23,240, 3, 5, 42, -/* 0x0dd0 */ 227, 19,189,169,229, 27, 1,169,254, 19, 0,249,232, 3, 1,170, -/* 0x0de0 */ 45, 64, 34,139,233, 3, 4,170,142, 64, 37,139, 11, 16, 0,145, -/* 0x0df0 */ 6, 0, 64, 57, 5, 4, 64, 57, 4, 8, 64, 57,174, 0, 6, 11, -/* 0x0e00 */ 7, 0,128, 18,229, 32,197, 26,229, 3, 37, 42,228, 32,196, 26, -/* 0x0e10 */ 228, 3, 36, 42, 35, 0,128, 82, 34, 0,128, 82, 33, 0,128, 82, -/* 0x0e20 */ 32, 0,128, 82, 6, 0,128, 82,230, 31, 0,185, 2, 96,128, 82, -/* 0x0e30 */ 192,230,128, 82, 66, 32,206, 26, 66, 0, 0, 11, 0,128,128,210, -/* 0x0e40 */ 225, 3, 11,170, 0, 64, 0,170, 0,128, 0,170, 32,132, 0,248, -/* 0x0e50 */ 66, 16, 0,113,204,255,255, 84, 0, 21, 0,145,231, 0, 0,148, -/* 0x0e60 */ 31, 0, 8,235,193,255,255, 84,227, 67, 66,248,226, 19, 64,185, -/* 0x0e70 */ 36, 1, 3,203,128, 0, 2, 10,224, 47, 0,185, 0, 16, 6, 11, -/* 0x0e80 */ 97, 1, 0,145,225, 0, 0,148,129, 5, 0, 84,227, 23, 64,185, -/* 0x0e90 */ 226, 27, 64,185, 99, 0, 4, 10,224,115, 64, 57, 99, 32,194, 26, -/* 0x0ea0 */ 226, 3, 2, 75, 66, 32, 0, 17, 2, 36,194, 26, 99, 0, 2, 11, -/* 0x0eb0 */ 106,177, 57,145, 99, 4, 3, 11,227, 3, 3, 42, 32, 0,128, 82, -/* 0x0ec0 */ 74, 37, 3,139,223, 28, 0,113, 3, 2, 0, 84,227,125, 64,147, -/* 0x0ed0 */ 227, 3, 3,203, 37,105, 99, 56,165,120, 31, 83, 65, 1, 8,145, -/* 0x0ee0 */ 164, 0, 24, 18,227, 3, 4, 42, 33, 4, 3,139,201, 0, 0,148, -/* 0x0ef0 */ 3, 0, 0, 18,127, 32, 68,107,193, 0, 0, 84, 31, 0, 4,113, -/* 0x0f00 */ 195,254,255, 84, 5, 0, 0, 20,225, 3, 10,170,193, 0, 0,148, -/* 0x0f10 */ 31, 0, 4,113,163,255,255, 84, 98, 0,128, 82,195, 0,128, 82, -/* 0x0f20 */ 223, 40, 0,113, 67, 48,131, 26,223, 16, 0,113,195, 48,131, 26, -/* 0x0f30 */ 198, 0, 3, 75, 34, 0, 0, 20, 97, 1, 6,145,178, 0, 0,148, -/* 0x0f40 */ 129, 1, 0, 84,227, 11, 64,185,226, 7, 64,185,227, 15, 0,185, -/* 0x0f50 */ 226, 11, 0,185,239, 7, 0,185, 3, 0,128, 82,223, 28, 0,113, -/* 0x0f60 */ 102, 0,128, 82,102, 48,134, 26,106,145, 25,145, 42, 0, 0, 20, -/* 0x0f70 */ 97, 97, 6,145,164, 0, 0,148, 97, 2, 0, 84,227, 47, 64,185, -/* 0x0f80 */ 97,129, 7,145, 96, 16, 6, 11,160, 0, 0,148,161, 3, 0, 84, -/* 0x0f90 */ 35, 1,128, 82,223, 28, 0,113,102, 1,128, 82,102, 48,134, 26, -/* 0x0fa0 */ 227, 67, 66,248, 36, 1, 3,203,159, 0, 15,107,131, 17, 0, 84, -/* 0x0fb0 */ 227,125, 64,147,227, 3, 3,203, 32,105, 99, 56, 32, 21, 0, 56, -/* 0x0fc0 */ 121, 0, 0, 20, 97,193, 6,145,143, 0, 0,148,228, 7, 64,185, -/* 0x0fd0 */ 64, 1, 0, 84, 97, 33, 7,145,139, 0, 0,148,228, 11, 64,185, -/* 0x0fe0 */ 128, 0, 0, 84,227, 11, 64,185,228, 15, 64,185,227, 15, 0,185, -/* 0x0ff0 */ 227, 7, 64,185,227, 11, 0,185,239, 7, 0,185,239, 3, 4, 42, -/* 0x1000 */ 3, 1,128, 82,223, 28, 0,113,102, 1,128, 82,102, 48,134, 26, -/* 0x1010 */ 106,161, 41,145, 65, 1, 0,145,125, 0, 0,148, 1, 1, 0, 84, -/* 0x1020 */ 227, 47, 64,185, 69, 17, 0,145,227, 3, 3, 42, 2, 0,128, 82, -/* 0x1030 */ 165, 16, 3,139, 4, 1,128, 82, 14, 0, 0, 20, 65, 9, 0,145, -/* 0x1040 */ 115, 0, 0,148, 1, 1, 0, 84,227, 47, 64,185, 69, 17, 4,145, -/* 0x1050 */ 227, 3, 3, 42, 2, 1,128, 82,165, 16, 3,139, 4, 1,128, 82, -/* 0x1060 */ 4, 0, 0, 20, 69, 17, 8,145, 2, 2,128, 82, 4, 32,128, 82, -/* 0x1070 */ 226, 55, 0,185, 32, 0,128, 82,225, 3, 5,170,101, 0, 0,148, -/* 0x1080 */ 3, 0, 4,107,163,255,255, 84,229, 55, 64,185,165, 0, 3, 11, -/* 0x1090 */ 229, 55, 0,185,223, 16, 0,113,194, 6, 0, 84,198, 28, 0, 17, -/* 0x10a0 */ 99, 0,128, 82,191, 16, 0,113,101, 32,133, 26,227, 3, 5, 42, -/* 0x10b0 */ 101, 29, 3,139,165,128, 13,145, 32, 0,128, 82, 4, 8,128, 82, -/* 0x10c0 */ 225, 3, 5,170, 83, 0, 0,148, 3, 0, 4,107,163,255,255, 84, -/* 0x10d0 */ 227, 47, 0,185,127, 16, 0,113, 99, 4, 0, 84,100,124, 1, 83, -/* 0x10e0 */ 132, 4, 0, 81,111, 0, 0, 18,239, 1, 31, 50,127, 56, 0,113, -/* 0x10f0 */ 226, 0, 0, 84,239, 33,196, 26,106,121, 21,145,227, 1, 3, 75, -/* 0x1100 */ 227, 3, 3, 42, 74, 5, 3,139, 12, 0, 0, 20,132, 16, 0, 81, -/* 0x1110 */ 53, 0, 0,148,231,124, 1, 83,131, 1, 7,107,108, 32,140, 26, -/* 0x1120 */ 239, 1, 15, 26,132, 4, 0,113, 65,255,255, 84,106, 17, 25,145, -/* 0x1130 */ 239,109, 28, 83,132, 0,128, 82, 37, 0,128, 82, 32, 0,128, 82, -/* 0x1140 */ 225, 3, 10,170, 51, 0, 0,148, 31, 0, 0,114, 64, 0, 0, 84, -/* 0x1150 */ 239, 1, 5, 42,165,120, 31, 83,132, 4, 0,113, 33,255,255, 84, -/* 0x1160 */ 2, 0, 0, 20,239, 47, 64,185,239, 5, 0, 49,229, 55, 64,185, -/* 0x1170 */ 227, 67, 66,248,165, 8, 0, 17, 35, 1, 3,203,255, 1, 3,107, -/* 0x1180 */ 232, 2, 0, 84,227,125, 64,147,227, 3, 3,203, 32,105, 99, 56, -/* 0x1190 */ 32, 21, 0, 56, 63, 1, 14,235,194, 0, 0, 84,165, 4, 0,113, -/* 0x11a0 */ 97,255,255, 84,224,115, 0, 57, 63, 1, 14,235,227,229,255, 84, -/* 0x11b0 */ 13, 0, 0,148, 0, 0,128, 82,226, 19, 64,249, 3, 1, 2,203, -/* 0x11c0 */ 226, 31, 64,249, 67, 0, 0,185,226, 67, 66,248, 35, 1, 2,203, -/* 0x11d0 */ 226, 55, 64,249, 67, 0, 0,185,255,243, 0,145, 32, 0,128, 82, -/* 0x11e0 */ 246,255,255, 23,227,124, 24, 83,195, 0, 0, 53, 31, 1, 13,235, -/* 0x11f0 */ 231, 92, 24, 83, 66,255,255, 84, 3, 21, 64, 56,108, 32, 12, 42, -/* 0x1200 */ 192, 3, 95,214,224, 3, 6, 42, 33, 68, 32,139, 0, 0,128, 82, -/* 0x1210 */ 33, 68, 32,139,227,124, 24, 83,241, 3, 30,170, 94, 0, 0, 16, -/* 0x1220 */ 99,254,255, 52, 35, 0, 64,121,226,124, 11, 83, 98,124, 2, 27, -/* 0x1230 */ 159, 1, 2,107, 2, 1, 0, 84, 2, 0,129, 82,231, 3, 2, 42, -/* 0x1240 */ 66, 0, 3, 75, 0, 0, 0, 58, 99, 20, 66, 11, 35, 0, 0,121, -/* 0x1250 */ 32, 2, 95,214,140, 1, 2, 75,231, 0, 2, 75, 99, 20, 67, 75, -/* 0x1260 */ 0, 0, 0, 58, 35, 0, 0,121, 32, 2, 95,214,194, 3,128, 82, -/* 0x1270 */ 225, 0, 0, 16, 64, 0,128, 82, 8, 8,128, 82, 1, 0, 0,212, -/* 0x1280 */ 224, 15,128, 82,168, 11,128, 82, 1, 0, 0,212, 80, 82, 79, 84, -/* 0x1290 */ 95, 69, 88, 69, 67,124, 80, 82, 79, 84, 95, 87, 82, 73, 84, 69, -/* 0x12a0 */ 32,102, 97,105,108,101,100, 46, 10, 0,226, 3, 30,170, 65,208, -/* 0x12b0 */ 0,209,229, 3, 1,170, 36, 68, 64,184,165, 0, 4,203, 36, 68, -/* 0x12c0 */ 64,184,164, 0, 4,139,164, 75, 0,185, 36, 68, 64,184,164, 0, -/* 0x12d0 */ 4,139,228,207, 31,248, 36, 68, 64,184,160, 0, 4, 11, 1, 96, -/* 0x12e0 */ 0, 17,255, 35, 0,209, 36, 4, 64,185, 33, 48, 0,145, 33, 0, -/* 0x12f0 */ 4,139, 36, 68, 64,184, 5, 44, 12, 83,165,124, 22, 83,132, 8, -/* 0x1300 */ 5, 11,228,207, 31,184, 0, 8, 5, 75,224,207, 31,184,132, 8, -/* 0x1310 */ 5, 75, 0, 8, 5, 11,229,207, 31,184, 16, 0, 0,148, 99, 28, -/* 0x1320 */ 0, 18,127, 64, 1,113,129, 1, 0, 84, 33,252, 66,211, 65, 1, -/* 0x1330 */ 0,180, 33, 4, 0,209, 2,120, 97,184, 67,120, 26, 83,127, 20, -/* 0x1340 */ 0,113,129, 0, 0, 84, 66, 0, 1, 75, 98, 20, 26, 83, 2,120, -/* 0x1350 */ 33,184, 1,255,255,181,192, 3, 95,214,254,207, 31,248, 35, 20, -/* 0x1360 */ 64, 57,227,207, 31,248, 35, 24, 64, 57,227,207, 31,248,228,207, -/* 0x1370 */ 31,248,224,207, 31,248, 36, 68, 64,184,229, 3, 4, 42, 36, 68, -/* 0x1380 */ 64,184,228,207, 31,248,226,207, 31,248,163, 83, 1,209,227,207, -/* 0x1390 */ 31,248,224,207, 31,248,229,207, 31,248,225,207, 31,248, 35, 4, -/* 0x13a0 */ 64,146,165, 12, 0,145,165, 0, 3,139,163, 3, 93,184, 98, 8, -/* 0x13b0 */ 69,139,163,131, 89,184,115, 0, 0,148,163,131, 92,184,113, 0, -/* 0x13c0 */ 0,148, 67, 0, 0,148, 4, 0,128,146, 67, 6,128,210, 98, 0, -/* 0x13d0 */ 128,210,161,195, 93,248,160,131, 93,248,230, 3, 0,170,200, 27, -/* 0x13e0 */ 128, 82, 1, 0, 0,212, 31, 0, 6,235, 64, 0, 0, 84, 0, 0, -/* 0x13f0 */ 32,212,165, 3, 93,184,161, 67, 95,248, 44, 0, 0,148,226, 15, -/* 0x1400 */ 65,169,224, 7,194,168,228, 7, 65,248,128, 0, 63,214,255, 35, -/* 0x1410 */ 0,145, 10, 0, 0,148,232, 26,128, 82, 1, 0, 0,212,226, 11, -/* 0x1420 */ 64,249,224, 7,194,168,230, 31, 65,169,228, 23,194,168,225, 11, -/* 0x1430 */ 64,249,253,123,194,168, 32, 0, 31,214,164,195, 95,184,192, 7, -/* 0x1440 */ 64,169,128, 4, 0,169,226, 15, 65,169,224, 7,194,168,228, 51, -/* 0x1450 */ 193,168, 67, 0, 0,180,128, 0, 63,214,224, 3, 64,249,225, 67, -/* 0x1460 */ 64,248, 2, 0,128,210, 33, 0, 0,139, 33, 32, 0,145, 8, 0, -/* 0x1470 */ 176, 82, 1, 0, 0,212,224, 7,193,168,162, 0,128,210, 72, 28, -/* 0x1480 */ 128, 82, 1, 0, 0,212,254, 11, 64,249,224, 7,194,168,192, 3, -/* 0x1490 */ 31,214, 37,192, 95,184,165, 92, 0, 18,165, 4, 0, 17, 35, 68, -/* 0x14a0 */ 64,184,165, 4, 0, 81, 3, 68, 0,184,191, 8, 0,114,129,255, -/* 0x14b0 */ 255, 84,165,124, 3, 83,165, 0, 0, 52, 34, 12,193,168,165, 4, -/* 0x14c0 */ 0,113, 2, 12,129,168,165,255,255, 53,192, 3, 95,214,254,207, -/* 0x14d0 */ 31,248,227, 3, 30,170, 43, 0, 0,148, 65,244,126,211, 4, 0, -/* 0x14e0 */ 128,146, 67, 4,128,210,226, 0,128,210,161,195, 31,248, 0, 0, -/* 0x14f0 */ 128,210,200, 27,128, 82, 1, 0, 0,212, 31, 4, 64,177, 67, 0, -/* 0x1500 */ 0, 84, 0, 0, 32,212,160, 67, 31,248,161,131, 93,184,165, 3, -/* 0x1510 */ 93,184,230,255,255,151,161,131, 87,184,165,195, 87,184, 35, 4, -/* 0x1520 */ 0, 18, 33, 0, 3, 75,165, 0, 3, 11, 99, 0, 0, 11,163,131, -/* 0x1530 */ 23,184,165, 28, 0, 17,165,124, 3, 83,220,255,255,151,226, 3, -/* 0x1540 */ 0,170,161,131, 89,248,160,131, 25,248,210,255,255,151,161,131, -/* 0x1550 */ 92,248,160,131, 28,248,207,255,255,151,225, 71, 64,248,224,207, -/* 0x1560 */ 31,248,204,255,255,151,225, 3, 0,170,224, 3, 2,170, 2, 0, -/* 0x1570 */ 128,210, 8, 0,176, 82, 1, 0, 0,212,254, 71, 64,248,192, 3, -/* 0x1580 */ 31,214, 99,192, 95,184, 99, 92, 0, 18, 99, 4, 0, 17, 66, 0, -/* 0x1590 */ 3,139,192, 3, 95,214,102,105,108,101, 32,102,111,114,109, 97, -/* 0x15a0 */ 116, 32,101,108,102, 54, 52, 45,108,105,116,116,108,101, 97, 97, -/* 0x15b0 */ 114, 99,104, 54, 52, 10, 10, 83,101, 99,116,105,111,110,115, 58, -/* 0x15c0 */ 10, 73,100,120, 32, 78, 97,109,101, 32, 32, 32, 32, 32, 32, 32, -/* 0x15d0 */ 32, 32, 32, 83,105,122,101, 32, 32, 32, 32, 32, 32, 86, 77, 65, -/* 0x15e0 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 76, -/* 0x15f0 */ 77, 65, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, -/* 0x1600 */ 32, 70,105,108,101, 32,111,102,102, 32, 32, 65,108,103,110, 32, -/* 0x1610 */ 32, 70,108, 97,103,115, 10, 32, 32, 48, 32, 69, 76, 70, 77, 65, -/* 0x1620 */ 73, 78, 88, 32, 32, 32, 32, 32, 32, 48, 48, 48, 48, 48, 48, 50, -/* 0x1630 */ 52, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x1640 */ 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x1650 */ 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 52, 48, 32, -/* 0x1660 */ 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, -/* 0x1670 */ 32, 82, 69, 76, 79, 67, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, -/* 0x1680 */ 10, 32, 32, 49, 32, 78, 82, 86, 95, 72, 69, 65, 68, 32, 32, 32, -/* 0x1690 */ 32, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, -/* 0x16a0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, -/* 0x16b0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, -/* 0x16c0 */ 32, 48, 48, 48, 48, 48, 48, 54, 52, 32, 32, 50, 42, 42, 48, 32, -/* 0x16d0 */ 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 65, 68, 79, -/* 0x16e0 */ 78, 76, 89, 10, 32, 32, 50, 32, 78, 82, 86, 95, 84, 65, 73, 76, -/* 0x16f0 */ 32, 32, 32, 32, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, -/* 0x1700 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x1710 */ 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x1720 */ 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 54, 52, 32, 32, 50, 42, -/* 0x1730 */ 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, -/* 0x1740 */ 65, 68, 79, 78, 76, 89, 10, 32, 32, 51, 32, 78, 82, 86, 50, 69, -/* 0x1750 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 48, 48, 48, 48, 48, 49, 50, -/* 0x1760 */ 56, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x1770 */ 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x1780 */ 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 54, 52, 32, -/* 0x1790 */ 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, -/* 0x17a0 */ 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, 32, 52, 32, 78, 82, -/* 0x17b0 */ 86, 50, 68, 32, 32, 32, 32, 32, 32, 32, 32, 32, 48, 48, 48, 48, -/* 0x17c0 */ 48, 49, 49, 99, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x17d0 */ 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x17e0 */ 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 49, -/* 0x17f0 */ 56, 99, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, -/* 0x1800 */ 84, 83, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, 32, 53, -/* 0x1810 */ 32, 78, 82, 86, 50, 66, 32, 32, 32, 32, 32, 32, 32, 32, 32, 48, -/* 0x1820 */ 48, 48, 48, 48, 48,102, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, -/* 0x1830 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, -/* 0x1840 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, -/* 0x1850 */ 48, 48, 50, 97, 56, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, -/* 0x1860 */ 84, 69, 78, 84, 83, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, -/* 0x1870 */ 32, 32, 54, 32, 76, 90, 77, 65, 95, 69, 76, 70, 48, 48, 32, 32, -/* 0x1880 */ 32, 32, 48, 48, 48, 48, 48, 48,100, 48, 32, 32, 48, 48, 48, 48, -/* 0x1890 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, -/* 0x18a0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, -/* 0x18b0 */ 48, 48, 48, 48, 48, 51, 57, 56, 32, 32, 50, 42, 42, 48, 32, 32, -/* 0x18c0 */ 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 76, 79, 67, 44, -/* 0x18d0 */ 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, 32, 55, 32, 76, 90, -/* 0x18e0 */ 77, 65, 95, 68, 69, 67, 50, 48, 32, 32, 32, 32, 48, 48, 48, 48, -/* 0x18f0 */ 48, 57, 54, 56, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x1900 */ 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x1910 */ 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 52, -/* 0x1920 */ 54, 56, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, -/* 0x1930 */ 84, 83, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, 32, 56, -/* 0x1940 */ 32, 76, 90, 77, 65, 95, 68, 69, 67, 49, 48, 32, 32, 32, 32, 48, -/* 0x1950 */ 48, 48, 48, 48, 52, 57, 99, 32, 32, 48, 48, 48, 48, 48, 48, 48, -/* 0x1960 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, -/* 0x1970 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, -/* 0x1980 */ 48, 48,100,100, 48, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, -/* 0x1990 */ 84, 69, 78, 84, 83, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, -/* 0x19a0 */ 32, 32, 57, 32, 76, 90, 77, 65, 95, 68, 69, 67, 51, 48, 32, 32, -/* 0x19b0 */ 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, -/* 0x19c0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, -/* 0x19d0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, -/* 0x19e0 */ 48, 48, 48, 48, 49, 50, 54, 99, 32, 32, 50, 42, 42, 48, 32, 32, -/* 0x19f0 */ 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 65, 68, 79, 78, -/* 0x1a00 */ 76, 89, 10, 32, 49, 48, 32, 69, 76, 70, 77, 65, 73, 78, 89, 32, -/* 0x1a10 */ 32, 32, 32, 32, 32, 48, 48, 48, 48, 48, 48, 51,101, 32, 32, 48, -/* 0x1a20 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, -/* 0x1a30 */ 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x1a40 */ 48, 32, 32, 48, 48, 48, 48, 49, 50, 54, 99, 32, 32, 50, 42, 42, -/* 0x1a50 */ 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 65, -/* 0x1a60 */ 68, 79, 78, 76, 89, 10, 32, 49, 49, 32, 69, 76, 70, 77, 65, 73, -/* 0x1a70 */ 78, 90, 32, 32, 32, 32, 32, 32, 48, 48, 48, 48, 48, 50,101, 99, -/* 0x1a80 */ 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x1a90 */ 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x1aa0 */ 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 49, 50, 97, 97, 32, 32, -/* 0x1ab0 */ 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, -/* 0x1ac0 */ 82, 69, 65, 68, 79, 78, 76, 89, 10, 83, 89, 77, 66, 79, 76, 32, -/* 0x1ad0 */ 84, 65, 66, 76, 69, 58, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x1ae0 */ 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, -/* 0x1af0 */ 76, 90, 77, 65, 95, 68, 69, 67, 51, 48, 9, 48, 48, 48, 48, 48, -/* 0x1b00 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 76, 90, 77, 65, -/* 0x1b10 */ 95, 68, 69, 67, 51, 48, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x1b20 */ 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, -/* 0x1b30 */ 69, 76, 70, 77, 65, 73, 78, 90, 9, 48, 48, 48, 48, 48, 48, 48, -/* 0x1b40 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 69, 76, 70, 77, 65, 73, -/* 0x1b50 */ 78, 90, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x1b60 */ 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 69, 76, 70, 77, -/* 0x1b70 */ 65, 73, 78, 88, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x1b80 */ 48, 48, 48, 48, 48, 32, 69, 76, 70, 77, 65, 73, 78, 88, 10, 48, -/* 0x1b90 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, -/* 0x1ba0 */ 108, 32, 32, 32, 32,100, 32, 32, 78, 82, 86, 95, 72, 69, 65, 68, -/* 0x1bb0 */ 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x1bc0 */ 48, 32, 78, 82, 86, 95, 72, 69, 65, 68, 10, 48, 48, 48, 48, 48, -/* 0x1bd0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, -/* 0x1be0 */ 32,100, 32, 32, 78, 82, 86, 95, 84, 65, 73, 76, 9, 48, 48, 48, -/* 0x1bf0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 78, 82, -/* 0x1c00 */ 86, 95, 84, 65, 73, 76, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x1c10 */ 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, -/* 0x1c20 */ 78, 82, 86, 50, 69, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x1c30 */ 48, 48, 48, 48, 48, 48, 32, 78, 82, 86, 50, 69, 10, 48, 48, 48, -/* 0x1c40 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, -/* 0x1c50 */ 32, 32, 32,100, 32, 32, 78, 82, 86, 50, 68, 9, 48, 48, 48, 48, -/* 0x1c60 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 78, 82, 86, -/* 0x1c70 */ 50, 68, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x1c80 */ 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 78, 82, 86, 50, -/* 0x1c90 */ 66, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x1ca0 */ 48, 48, 32, 78, 82, 86, 50, 66, 10, 48, 48, 48, 48, 48, 48, 48, +/* 0x0040 */ 254, 3,191,169,224, 7,190,169,226,119, 1,169,253, 3, 0,145, +/* 0x0050 */ 0, 0, 0,148,254, 15, 31,248,226, 15,191,169, 7, 64, 33,139, +/* 0x0060 */ 5, 0,128, 18, 4, 0,176, 82, 24, 0, 0, 20,227, 19,193,168, +/* 0x0070 */ 0, 0, 7,203, 66, 0, 3,203,130, 0, 0,185,228, 3, 0,170, +/* 0x0080 */ 224, 3, 3,170, 97, 0, 2,139, 32,123, 11,213, 32,117, 11,213, +/* 0x0090 */ 0, 0, 1,145, 31, 0, 1,235,131,255,255, 84,224, 3, 4,170, +/* 0x00a0 */ 254, 7, 65,248,192, 3, 95,214,132, 0, 4, 43, 68, 0, 0, 52, +/* 0x00b0 */ 192, 3, 95,214, 4, 68, 64,184,132, 0, 4, 58,192, 3, 95,214, +/* 0x00c0 */ 3, 20, 64, 56, 67, 20, 0, 56,248,255,255,151,162,255,255, 84, +/* 0x00d0 */ 33, 0,128, 82, 4, 0, 0, 20, 33, 4, 0, 81,243,255,255,151, +/* 0x00e0 */ 33, 0, 1, 26,241,255,255,151, 33, 0, 1, 26,239,255,255,151, +/* 0x00f0 */ 67,255,255, 84, 35, 12, 0,113, 1, 0,128, 82, 35, 1, 0, 84, +/* 0x0100 */ 5, 20, 64, 56,165, 32, 3, 42,229, 3, 37, 42, 5,251,255, 52, +/* 0x0110 */ 191, 0, 0,114,165,124, 1, 19,161, 1, 0, 84, 3, 0, 0, 20, +/* 0x0120 */ 226,255,255,151, 66, 1, 0, 84, 33, 0,128, 82,223,255,255,151, +/* 0x0130 */ 226, 0, 0, 84,221,255,255,151, 33, 0, 1, 26,219,255,255,151, +/* 0x0140 */ 163,255,255, 84, 33, 16, 0, 17, 4, 0, 0, 20,215,255,255,151, +/* 0x0150 */ 33, 0, 1, 26, 33, 8, 0, 17,191, 0, 20, 49, 33, 36,129, 26, +/* 0x0160 */ 67, 64, 33,139, 99,240, 95, 56, 67,200,101, 56, 67, 20, 0, 56, +/* 0x0170 */ 33, 4, 0,113,161,255,255, 84,212,255,255, 23,226, 15,190,169, +/* 0x0180 */ 254, 11, 0,249, 7, 64, 33,139, 5, 0,128, 18, 4, 0,176, 82, +/* 0x0190 */ 24, 0, 0, 20,227, 19,193,168, 0, 0, 7,203, 66, 0, 3,203, +/* 0x01a0 */ 130, 0, 0,185,228, 3, 0,170,224, 3, 3,170, 97, 0, 2,139, +/* 0x01b0 */ 32,123, 11,213, 32,117, 11,213, 0, 0, 1,145, 31, 0, 1,235, +/* 0x01c0 */ 131,255,255, 84,224, 3, 4,170,254, 7, 65,248,192, 3, 95,214, +/* 0x01d0 */ 132, 0, 4, 43, 68, 0, 0, 52,192, 3, 95,214, 4, 68, 64,184, +/* 0x01e0 */ 132, 0, 4, 58,192, 3, 95,214, 3, 20, 64, 56, 67, 20, 0, 56, +/* 0x01f0 */ 248,255,255,151,162,255,255, 84, 33, 0,128, 82, 4, 0, 0, 20, +/* 0x0200 */ 33, 4, 0, 81,243,255,255,151, 33, 0, 1, 58,241,255,255,151, +/* 0x0210 */ 33, 0, 1, 58,239,255,255,151, 67,255,255, 84, 35, 12, 0,113, +/* 0x0220 */ 1, 0,128, 82, 35, 1, 0, 84, 5, 20, 64, 56,165, 32, 3, 42, +/* 0x0230 */ 229, 3, 37, 42, 5,251,255, 52,163, 0, 1, 83,165,124, 1, 83, +/* 0x0240 */ 99, 0, 3, 43, 2, 0, 0, 20,226,255,255,151, 33, 0, 1, 58, +/* 0x0250 */ 224,255,255,151, 33, 0, 1, 58,225, 0, 0, 84, 33, 0,128, 82, +/* 0x0260 */ 220,255,255,151, 33, 0, 1, 58,218,255,255,151,163,255,255, 84, +/* 0x0270 */ 33, 8, 0, 17, 33, 4, 0, 17,191, 0, 20, 49, 33, 52,129, 26, +/* 0x0280 */ 67, 0, 64, 57, 67,200,101, 56, 67, 20, 0, 56, 33, 4, 0,113, +/* 0x0290 */ 161,255,255, 84,215,255,255, 23, 1, 64, 33,139,225, 11,190,169, +/* 0x02a0 */ 227,123, 1,169, 5, 0,128, 18, 4, 0,176, 82, 31, 0, 0, 20, +/* 0x02b0 */ 228,123, 65,169,225, 15,194,168, 0, 0, 1,203, 66, 0, 3,203, +/* 0x02c0 */ 130, 0, 0,185,228, 3, 0,170,224, 3, 3,170, 97, 0, 2,139, +/* 0x02d0 */ 32,123, 11,213, 32,117, 11,213, 0, 0, 1,145, 31, 0, 1,235, +/* 0x02e0 */ 131,255,255, 84,224, 3, 4,170,192, 3, 95,214,132, 0, 4, 43, +/* 0x02f0 */ 68, 0, 0, 52,192, 3, 95,214, 4, 68, 64,184,132, 0, 4, 58, +/* 0x0300 */ 192, 3, 95,214, 33, 0,128, 82,240, 3, 30,170,248,255,255,151, +/* 0x0310 */ 33, 0, 1, 58,246,255,255,151,163,255,255, 84, 0, 2, 31,214, +/* 0x0320 */ 3, 20, 64, 56, 67, 20, 0, 56,241,255,255,151,162,255,255, 84, +/* 0x0330 */ 245,255,255,151, 35, 12, 0,113, 1, 0,128, 82,163, 0, 0, 84, +/* 0x0340 */ 5, 20, 64, 56,165, 32, 3, 42,229, 3, 37, 42, 37,251,255, 52, +/* 0x0350 */ 231,255,255,151, 33, 0, 1, 58,229,255,255,151, 33, 0, 1, 58, +/* 0x0360 */ 97, 0, 0, 84,232,255,255,151, 33, 8, 0, 17,191, 0, 52, 49, +/* 0x0370 */ 33, 36,129, 26, 67,200,101, 56, 33, 4, 0,113, 67, 20, 0, 56, +/* 0x0380 */ 162,255,255, 84,233,255,255, 23,159, 56, 0,113, 1, 0, 0, 84, +/* 0x0390 */ 1, 64, 33,139, 4, 0,128,210,225, 11,190,169,227,123, 1,169, +/* 0x03a0 */ 228, 19,191,169,224, 3, 0,145,227, 35, 0,145,230, 51, 0,145, +/* 0x03b0 */ 8, 0, 64, 57, 7,192,128, 82, 8,125, 3, 83,231, 32,200, 26, +/* 0x03c0 */ 253, 3, 0,145,231,192, 57, 17,232, 3, 0,145,255, 67, 39,203, +/* 0x03d0 */ 100, 16,129,168,127, 0, 8,235,195,255,255, 84,230, 3, 3,170, +/* 0x03e0 */ 229, 3, 7, 42,228, 3, 2,170, 34, 8, 0, 81,225, 3, 0,170, +/* 0x03f0 */ 39, 20, 64, 56,231, 8, 0, 18,231, 11, 0, 57, 39, 20, 64, 56, +/* 0x0400 */ 232,124, 4, 83,232, 7, 0, 57,231, 12, 0, 18,231, 3, 0, 57, +/* 0x0410 */ 224, 3, 0,145, 17, 0, 0,148,191, 3, 0,145,228,123, 65,169, +/* 0x0420 */ 225, 15,194,168, 0, 0, 1,203, 66, 0, 3,203,130, 0, 0,185, +/* 0x0430 */ 228, 3, 0,170,224, 3, 3,170, 97, 0, 2,139, 32,123, 11,213, +/* 0x0440 */ 32,117, 11,213, 0, 0, 1,145, 31, 0, 1,235,131,255,255, 84, +/* 0x0450 */ 224, 3, 4,170,192, 3, 95,214,255, 67, 1,209, 39, 0,128, 82, +/* 0x0460 */ 17, 16, 0,145, 9,128,128, 82,243, 83, 0,169,245, 91, 1,169, +/* 0x0470 */ 247, 99, 2,169,249,107, 3,169,251,115, 4,169, 20, 8, 64, 57, +/* 0x0480 */ 19, 4, 64, 57, 22, 0, 64, 57,244, 32,212, 26,127, 0, 0,185, +/* 0x0490 */ 243, 32,211, 26,223, 0, 0,185, 7, 0,128,210,148, 6, 0, 81, +/* 0x04a0 */ 8, 4, 64, 57, 10, 1, 22, 11,104, 6, 0, 81, 18, 1, 39, 30, +/* 0x04b0 */ 8, 96,128, 82, 8, 33,202, 26, 8,217, 28, 49,160, 0, 0, 84, +/* 0x04c0 */ 41,122, 39,120,231, 4, 0,145, 31, 1, 7,107,168,255,255, 84, +/* 0x04d0 */ 34, 64, 34,139, 63, 0, 2,235, 64, 16, 0, 84,235, 3, 1,170, +/* 0x04e0 */ 40, 4, 0,145,103, 85, 64, 56, 31, 1, 2,235,160, 15, 0, 84, +/* 0x04f0 */ 9, 21, 64, 56, 31, 1, 11,235, 39, 33, 7, 42, 97,255,255, 84, +/* 0x0500 */ 229, 69, 0, 52, 8, 1,128, 82, 53, 0,128, 82, 18, 0,128, 82, +/* 0x0510 */ 9, 0,128, 18, 20, 1, 39, 30,104, 0,128, 82,177, 2, 39, 30, +/* 0x0520 */ 247, 3, 21, 42, 7, 1, 39, 30, 8, 86,128,210,165, 2, 39, 30, +/* 0x0530 */ 252, 3, 21, 42, 3, 1,103,158,104, 1,128, 82,234, 3, 18, 42, +/* 0x0540 */ 240, 3, 18, 42, 0, 1, 39, 30, 8,176, 41,145, 14,224,191, 18, +/* 0x0550 */ 15, 0,129, 82, 1, 1,103,158, 40, 1,128, 82, 2, 1, 39, 30, +/* 0x0560 */ 136, 2, 38, 30, 8, 1, 22, 75, 16, 1, 39, 30, 72,110, 28, 83, +/* 0x0570 */ 63, 1, 14,107, 25, 2, 20, 10, 13,125, 64,147,173,193, 57,139, +/* 0x0580 */ 173,249,127,211,232, 0, 0, 84,127, 1, 2,235,160, 10, 0, 84, +/* 0x0590 */ 104, 1, 64, 57, 41, 93, 24, 83,107, 5, 0,145, 7, 33, 7, 42, +/* 0x05a0 */ 59,106,109,120, 40,125, 11, 83, 8,125, 27, 27,255, 0, 8,107, +/* 0x05b0 */ 130, 10, 0, 84, 73, 2, 38, 30, 19, 62, 1, 14, 95, 26, 0,113, +/* 0x05c0 */ 12, 2, 9, 10, 73, 41,211, 26,140, 33,214, 26,234, 1, 27, 75, +/* 0x05d0 */ 41, 1, 12, 11,106, 23,138, 11, 42,106, 45,120, 41, 5, 9, 11, +/* 0x05e0 */ 41, 93,120,211, 41,217, 28,145, 58, 6, 9,139,109, 31, 0, 84, +/* 0x05f0 */ 10, 2, 28, 75, 41, 0,128, 82,153,104,106, 56, 7, 0, 0, 20, +/* 0x0600 */ 91,107, 42,120, 41,121, 31, 83,232, 3, 13, 42, 83, 57, 0, 53, +/* 0x0610 */ 63,253, 3,113,236, 3, 0, 84, 57,123, 31, 83, 31, 1, 14,107, +/* 0x0620 */ 51, 3, 24, 18, 56,121, 31, 83,106,126, 64,147, 74, 1, 4,145, +/* 0x0630 */ 74,193, 41,139, 74,249,127,211,232, 0, 0, 84,127, 1, 2,235, +/* 0x0640 */ 8, 93, 24, 83,224, 4, 0, 84,108, 1, 64, 57,107, 5, 0,145, +/* 0x0650 */ 135, 33, 7, 42, 76,107,106,120, 13,125, 11, 83,251, 1, 12, 75, +/* 0x0660 */ 173,125, 12, 27,155, 21,155, 11,140, 21, 76, 75,255, 0, 13,107, +/* 0x0670 */ 8, 1, 13, 75, 99,252,255, 84, 76,107, 42,120, 9, 7, 0, 17, +/* 0x0680 */ 231, 0, 13, 75,115,252,255, 53, 63,253, 3,113, 77, 27, 0, 84, +/* 0x0690 */ 42, 29, 0, 83,233, 3, 8, 42,138, 72, 48, 56, 16, 6, 0, 17, +/* 0x06a0 */ 95, 38, 0,113,236, 49, 0, 84, 82, 14, 0, 81,191, 0, 16,107, +/* 0x06b0 */ 232,245,255, 84, 0,224,191, 18, 63, 1, 0,107,136, 0, 0, 84, +/* 0x06c0 */ 127, 1, 2,235,224, 0, 0, 84,107, 5, 0,145, 97, 1, 1,203, +/* 0x06d0 */ 97, 0, 0,185,208, 0, 0,185, 0, 0,128, 82, 2, 0, 0, 20, +/* 0x06e0 */ 32, 0,128, 82,243, 83, 64,169,245, 91, 65,169,247, 99, 66,169, +/* 0x06f0 */ 249,107, 67,169,251,115, 68,169,255, 67, 1,145,192, 3, 95,214, +/* 0x0700 */ 58, 1, 8, 75, 74,126, 64,147,105, 23, 91, 75, 95, 3, 14,107, +/* 0x0710 */ 41,106, 45,120, 76, 1, 3,145,231, 0, 8, 75,140,249,127,211, +/* 0x0720 */ 232, 0, 0, 84,127, 1, 2,235,192,253,255, 84,104, 1, 64, 57, +/* 0x0730 */ 90, 95, 24, 83,107, 5, 0,145, 7, 33, 7, 42, 40,106,108,120, +/* 0x0740 */ 74,127, 11, 83, 74,125, 8, 27,255, 0, 10,107,130, 25, 0, 84, +/* 0x0750 */ 237, 0, 38, 30,233, 1, 8, 75, 95, 30, 0,113, 53, 2, 38, 30, +/* 0x0760 */ 8, 21,137, 11,241, 2, 39, 30, 40,106, 44,120,242,179,141, 26, +/* 0x0770 */ 12,160, 25,145,247, 3, 28, 42, 95, 1, 14,107,232, 0, 0, 84, +/* 0x0780 */ 127, 1, 2,235,224,250,255, 84,104, 1, 64, 57, 74, 93, 24, 83, +/* 0x0790 */ 107, 5, 0,145, 7, 33, 7, 42,141, 1, 64,121, 73,125, 11, 83, +/* 0x07a0 */ 41,125, 13, 27,255, 0, 9,107, 98, 31, 0, 84, 40,115, 29, 83, +/* 0x07b0 */ 115, 0,128, 82,234, 1, 13, 75, 8,125, 64,147, 8, 9, 0,145, +/* 0x07c0 */ 173, 21,138, 11,228, 3, 39, 30,141, 1, 0,121,102, 2, 39, 30, +/* 0x07d0 */ 153, 5, 8,139,218, 0, 38, 30, 44, 0,128, 82, 6, 0, 0, 20, +/* 0x07e0 */ 13, 3, 0,121, 90, 7, 0,113,140,121, 31, 83,233, 3, 8, 42, +/* 0x07f0 */ 32, 3, 0, 84, 63, 1, 14,107,147,121, 31, 83, 56,199, 44,139, +/* 0x0800 */ 232, 0, 0, 84,127, 1, 2,235, 41, 93, 24, 83,160,246,255, 84, +/* 0x0810 */ 104, 1, 64, 57,107, 5, 0,145, 7, 33, 7, 42, 8, 3, 64,121, +/* 0x0820 */ 42,125, 11, 83,237, 1, 8, 75, 27, 21, 72, 75, 13, 21,141, 11, +/* 0x0830 */ 72,125, 8, 27,255, 0, 8,107, 41, 1, 8, 75, 35,253,255, 84, +/* 0x0840 */ 27, 3, 0,121, 90, 7, 0,113,231, 0, 8, 75,108, 6, 0, 17, +/* 0x0850 */ 33,253,255, 84,166, 68,166, 46,138, 0, 38, 30, 95, 14, 0,113, +/* 0x0860 */ 200, 0, 38, 30, 72, 1, 8, 75, 8, 1, 12, 11, 6, 1, 39, 30, +/* 0x0870 */ 236, 22, 0, 84,234, 0, 38, 30, 31, 13, 0,113,220, 0,128, 82, +/* 0x0880 */ 10,209,138, 26, 40, 0,128, 82, 74,101, 26, 83, 74,125, 64,147, +/* 0x0890 */ 74,193, 6,145, 91,249,127,211, 6, 0, 0, 20, 44,106, 57,120, +/* 0x08a0 */ 156, 7, 0,113, 8,121, 31, 83,233, 3, 10, 42, 32, 3, 0, 84, +/* 0x08b0 */ 63, 1, 14,107, 19,121, 31, 83,121,199, 40,139,232, 0, 0, 84, +/* 0x08c0 */ 127, 1, 2,235, 41, 93, 24, 83,192,240,255, 84,106, 1, 64, 57, +/* 0x08d0 */ 107, 5, 0,145, 71, 33, 7, 42, 42,106,121,120, 45,125, 11, 83, +/* 0x08e0 */ 236, 1, 10, 75, 90, 21, 74, 75, 76, 21,140, 11,170,125, 10, 27, +/* 0x08f0 */ 255, 0, 10,107, 41, 1, 10, 75, 35,253,255, 84, 58,106, 57,120, +/* 0x0900 */ 156, 7, 0,113,231, 0, 10, 75,104, 6, 0, 17, 33,253,255, 84, +/* 0x0910 */ 10, 1, 1, 81, 95, 13, 0,113, 45, 17, 0, 84, 95, 53, 0,113, +/* 0x0920 */ 72, 1, 0, 18, 77,125, 1, 19, 12, 1, 31, 50,140, 32, 0, 84, +/* 0x0930 */ 104, 0,102,158,187, 5, 0, 81,152, 33,219, 26, 8,193, 42,203, +/* 0x0940 */ 8, 65, 56,139, 40, 6, 8,139, 8, 9, 0,209, 19, 1,103,158, +/* 0x0950 */ 40, 0,128, 82,252, 3, 8, 42, 7, 0, 0, 20, 83, 3, 0,121, +/* 0x0960 */ 8,121, 31, 83,233, 3, 10, 42,123, 7, 0,113,156,123, 31, 83, +/* 0x0970 */ 128, 14, 0, 84,106, 2,102,158, 63, 1, 14,107, 25,121, 31, 83, +/* 0x0980 */ 90,197, 40,139,232, 0, 0, 84,127, 1, 2,235, 41, 93, 24, 83, +/* 0x0990 */ 128,234,255, 84,106, 1, 64, 57,107, 5, 0,145, 71, 33, 7, 42, +/* 0x09a0 */ 74, 3, 64,121, 45,125, 11, 83,243, 1, 10, 75, 76, 21, 74, 75, +/* 0x09b0 */ 83, 21,147, 11,170,125, 10, 27,255, 0, 10,107, 41, 1, 10, 75, +/* 0x09c0 */ 227,252,255, 84, 76, 3, 0,121, 24, 3, 28, 42,231, 0, 10, 75, +/* 0x09d0 */ 40, 7, 0, 17,229,255,255, 23, 41, 0,128, 82, 6, 0, 0, 20, +/* 0x09e0 */ 41,121, 31, 83, 74,107, 56,120, 63,253, 3,113,232, 3, 12, 42, +/* 0x09f0 */ 44, 3, 0, 84, 31, 1, 14,107, 51,121, 31, 83, 56,125,127,147, +/* 0x0a00 */ 232, 0, 0, 84,127, 1, 2,235, 8, 93, 24, 83,160,230,255, 84, +/* 0x0a10 */ 106, 1, 64, 57,107, 5, 0,145, 71, 33, 7, 42, 74,107,120,120, +/* 0x0a20 */ 12,125, 11, 83,237, 1, 10, 75,140,125, 10, 27, 89, 21, 74, 75, +/* 0x0a30 */ 74, 21,141, 11,255, 0, 12,107, 8, 1, 12, 75, 35,253,255, 84, +/* 0x0a40 */ 105, 6, 0, 17, 89,107, 56,120, 63,253, 3,113,231, 0, 12, 75, +/* 0x0a50 */ 45,253,255, 84, 42, 29, 0, 83, 95, 14, 0,113,138, 72, 48, 56, +/* 0x0a60 */ 233, 3, 8, 42, 16, 6, 0, 17,204,225,255, 84,191, 0, 16,107, +/* 0x0a70 */ 18, 0,128, 82,200,215,255, 84, 15,255,255, 23, 73, 3, 10, 75, +/* 0x0a80 */ 8, 21, 72, 75, 63, 1, 14,107, 40,106, 44,120,231, 0, 10, 75, +/* 0x0a90 */ 154, 97, 0,145,232, 0, 0, 84,127, 1, 2,235, 32,226,255, 84, +/* 0x0aa0 */ 104, 1, 64, 57, 41, 93, 24, 83,107, 5, 0,145, 7, 33, 7, 42, +/* 0x0ab0 */ 40,106,122,120, 42,125, 11, 83, 74,125, 8, 27,255, 0, 10,107, +/* 0x0ac0 */ 66, 10, 0, 84,233, 1, 8, 75, 95, 1, 14,107,173,129, 7,145, +/* 0x0ad0 */ 8, 21,137, 11, 40,106, 58,120,232, 0, 0, 84,127, 1, 2,235, +/* 0x0ae0 */ 0,224,255, 84,104, 1, 64, 57, 74, 93, 24, 83,107, 5, 0,145, +/* 0x0af0 */ 7, 33, 7, 42, 40,106,109,120, 73,125, 11, 83, 41,125, 8, 27, +/* 0x0b00 */ 255, 0, 9,107,226, 16, 0, 84,234, 1, 8, 75, 8, 21,138, 11, +/* 0x0b10 */ 40,106, 45,120,112,222,255, 52, 74, 0, 38, 30, 8, 2, 28, 75, +/* 0x0b20 */ 12, 0, 38, 30, 95, 30, 0,113, 82,177,140, 26,138,104,104, 56, +/* 0x0b30 */ 138, 72, 48, 56, 16, 6, 0, 17,221,254,255, 23,248, 3, 10, 42, +/* 0x0b40 */ 28, 7, 0, 49,128,219,255, 84, 82, 30, 0, 17,200, 0, 38, 30, +/* 0x0b50 */ 159, 3, 16,107, 12, 9, 0, 17, 72,220,255, 84,232, 3, 16, 42, +/* 0x0b60 */ 2, 0, 0, 20, 76,218,255, 52, 10, 2, 28, 75, 16, 6, 0, 17, +/* 0x0b70 */ 31, 2, 5,107,140, 5, 0, 81,138,104,106, 56,138, 72, 40, 56, +/* 0x0b80 */ 232, 3, 16, 42, 3,255,255, 84,191, 0, 16,107, 8,207,255, 84, +/* 0x0b90 */ 201,254,255, 23, 74, 1, 9, 75,173, 21, 77, 75, 95, 1, 14,107, +/* 0x0ba0 */ 141, 1, 0,121,231, 0, 9, 75,232, 0, 0, 84,127, 1, 2,235, +/* 0x0bb0 */ 128,217,255, 84,104, 1, 64, 57, 74, 93, 24, 83,107, 5, 0,145, +/* 0x0bc0 */ 7, 33, 7, 42,141, 5, 64,121, 73,125, 11, 83, 41,125, 13, 27, +/* 0x0bd0 */ 255, 0, 9,107, 34, 7, 0, 84, 40,115, 29, 83, 19, 1,128, 82, +/* 0x0be0 */ 234, 1, 13, 75, 8,125, 64,147,100, 2, 39, 30, 8, 9, 2,145, +/* 0x0bf0 */ 115, 0,128, 82,173, 21,138, 11,153, 5, 8,139,141, 5, 0,121, +/* 0x0c00 */ 102, 2, 39, 30,244,254,255, 23, 41, 1, 10, 75, 8, 21, 72, 75, +/* 0x0c10 */ 63, 1, 14,107, 40,106, 58,120,231, 0, 10, 75,154,193, 0,145, +/* 0x0c20 */ 232, 0, 0, 84,127, 1, 2,235,192,213,255, 84,104, 1, 64, 57, +/* 0x0c30 */ 41, 93, 24, 83,107, 5, 0,145, 7, 33, 7, 42, 45,106,122,120, +/* 0x0c40 */ 40,125, 11, 83, 10,125, 13, 27,255, 0, 10,107, 35, 5, 0, 84, +/* 0x0c50 */ 41, 1, 10, 75,173, 21, 77, 75, 63, 1, 14,107, 45,106, 58,120, +/* 0x0c60 */ 231, 0, 10, 75,140, 33, 1,145,232, 0, 0, 84,127, 1, 2,235, +/* 0x0c70 */ 128,211,255, 84,104, 1, 64, 57, 41, 93, 24, 83,107, 5, 0,145, +/* 0x0c80 */ 7, 33, 7, 42, 45,106,108,120, 40,125, 11, 83, 10,125, 13, 27, +/* 0x0c90 */ 255, 0, 10,107, 2, 8, 0, 84,232, 1, 13, 75,233, 3, 28, 42, +/* 0x0ca0 */ 60, 2, 38, 30,173, 21,136, 11, 45,106, 44,120,241, 2, 39, 30, +/* 0x0cb0 */ 247, 3, 9, 42, 21, 0, 0, 20, 8, 2,128, 82,231, 0, 9, 75, +/* 0x0cc0 */ 173, 21, 77, 75,153, 17, 8,145, 4, 1, 39, 30, 8, 1,128, 82, +/* 0x0cd0 */ 141, 5, 0,121, 73, 1, 9, 75, 6, 1, 39, 30,190,254,255, 23, +/* 0x0ce0 */ 191, 0, 16,107, 82, 26, 0, 81, 40,196,255, 84,114,254,255, 23, +/* 0x0cf0 */ 232, 1, 13, 75,233, 3, 28, 42,252, 3, 23, 42,247, 3, 9, 42, +/* 0x0d00 */ 173, 21,136, 11, 45,106, 58,120,136, 2, 38, 30, 95, 30, 0,113, +/* 0x0d10 */ 9, 0, 38, 30, 44, 0,102,158, 18,177,137, 26,151,254,255, 23, +/* 0x0d20 */ 8, 21, 72, 75, 74, 1, 9, 75,231, 0, 9, 75, 40,106, 45,120, +/* 0x0d30 */ 246,255,255, 23,232, 3, 13, 42, 84,254,255, 23,170, 21, 0, 81, +/* 0x0d40 */ 63, 1, 14,107,140,121, 31, 83,232, 0, 0, 84,127, 1, 2,235, +/* 0x0d50 */ 41, 93, 24, 83, 96,204,255, 84,104, 1, 64, 57,107, 5, 0,145, +/* 0x0d60 */ 7, 33, 7, 42, 41,125, 1, 83,255, 0, 9,107, 99, 0, 0, 84, +/* 0x0d70 */ 231, 0, 9, 75,140, 1, 0, 50, 74, 5, 0,113, 33,254,255, 84, +/* 0x0d80 */ 8, 32, 25,145,152,109, 28, 83,155, 0,128, 82, 19, 1,103,158, +/* 0x0d90 */ 240,254,255, 23,232, 3, 28, 42,231, 0, 10, 75,173, 21, 77, 75, +/* 0x0da0 */ 252, 3, 21, 42, 45,106, 44,120, 42, 1, 10, 75, 53, 2, 38, 30, +/* 0x0db0 */ 241, 2, 39, 30,247, 3, 8, 42,212,255,255, 23,240, 3, 5, 42, +/* 0x0dc0 */ 227, 19,189,169,229, 27, 1,169,254, 19, 0,249,232, 3, 1,170, +/* 0x0dd0 */ 45, 64, 34,139,233, 3, 4,170,142, 64, 37,139, 11, 16, 0,145, +/* 0x0de0 */ 6, 0, 64, 57, 5, 4, 64, 57, 4, 8, 64, 57,174, 0, 6, 11, +/* 0x0df0 */ 7, 0,128, 18,229, 32,197, 26,229, 3, 37, 42,228, 32,196, 26, +/* 0x0e00 */ 228, 3, 36, 42, 35, 0,128, 82, 34, 0,128, 82, 33, 0,128, 82, +/* 0x0e10 */ 32, 0,128, 82, 6, 0,128, 82,230, 31, 0,185, 2, 96,128, 82, +/* 0x0e20 */ 192,230,128, 82, 66, 32,206, 26, 66, 0, 0, 11, 0,128,128,210, +/* 0x0e30 */ 225, 3, 11,170, 0, 64, 0,170, 0,128, 0,170, 32,132, 0,248, +/* 0x0e40 */ 66, 16, 0,113,204,255,255, 84, 0, 21, 0,145,231, 0, 0,148, +/* 0x0e50 */ 31, 0, 8,235,193,255,255, 84,227, 67, 66,248,226, 19, 64,185, +/* 0x0e60 */ 36, 1, 3,203,128, 0, 2, 10,224, 47, 0,185, 0, 16, 6, 11, +/* 0x0e70 */ 97, 1, 0,145,225, 0, 0,148,129, 5, 0, 84,227, 23, 64,185, +/* 0x0e80 */ 226, 27, 64,185, 99, 0, 4, 10,224,115, 64, 57, 99, 32,194, 26, +/* 0x0e90 */ 226, 3, 2, 75, 66, 32, 0, 17, 2, 36,194, 26, 99, 0, 2, 11, +/* 0x0ea0 */ 106,177, 57,145, 99, 4, 3, 11,227, 3, 3, 42, 32, 0,128, 82, +/* 0x0eb0 */ 74, 37, 3,139,223, 28, 0,113, 3, 2, 0, 84,227,125, 64,147, +/* 0x0ec0 */ 227, 3, 3,203, 37,105, 99, 56,165,120, 31, 83, 65, 1, 8,145, +/* 0x0ed0 */ 164, 0, 24, 18,227, 3, 4, 42, 33, 4, 3,139,201, 0, 0,148, +/* 0x0ee0 */ 3, 0, 0, 18,127, 32, 68,107,193, 0, 0, 84, 31, 0, 4,113, +/* 0x0ef0 */ 195,254,255, 84, 5, 0, 0, 20,225, 3, 10,170,193, 0, 0,148, +/* 0x0f00 */ 31, 0, 4,113,163,255,255, 84, 98, 0,128, 82,195, 0,128, 82, +/* 0x0f10 */ 223, 40, 0,113, 67, 48,131, 26,223, 16, 0,113,195, 48,131, 26, +/* 0x0f20 */ 198, 0, 3, 75, 34, 0, 0, 20, 97, 1, 6,145,178, 0, 0,148, +/* 0x0f30 */ 129, 1, 0, 84,227, 11, 64,185,226, 7, 64,185,227, 15, 0,185, +/* 0x0f40 */ 226, 11, 0,185,239, 7, 0,185, 3, 0,128, 82,223, 28, 0,113, +/* 0x0f50 */ 102, 0,128, 82,102, 48,134, 26,106,145, 25,145, 42, 0, 0, 20, +/* 0x0f60 */ 97, 97, 6,145,164, 0, 0,148, 97, 2, 0, 84,227, 47, 64,185, +/* 0x0f70 */ 97,129, 7,145, 96, 16, 6, 11,160, 0, 0,148,161, 3, 0, 84, +/* 0x0f80 */ 35, 1,128, 82,223, 28, 0,113,102, 1,128, 82,102, 48,134, 26, +/* 0x0f90 */ 227, 67, 66,248, 36, 1, 3,203,159, 0, 15,107,131, 17, 0, 84, +/* 0x0fa0 */ 227,125, 64,147,227, 3, 3,203, 32,105, 99, 56, 32, 21, 0, 56, +/* 0x0fb0 */ 121, 0, 0, 20, 97,193, 6,145,143, 0, 0,148,228, 7, 64,185, +/* 0x0fc0 */ 64, 1, 0, 84, 97, 33, 7,145,139, 0, 0,148,228, 11, 64,185, +/* 0x0fd0 */ 128, 0, 0, 84,227, 11, 64,185,228, 15, 64,185,227, 15, 0,185, +/* 0x0fe0 */ 227, 7, 64,185,227, 11, 0,185,239, 7, 0,185,239, 3, 4, 42, +/* 0x0ff0 */ 3, 1,128, 82,223, 28, 0,113,102, 1,128, 82,102, 48,134, 26, +/* 0x1000 */ 106,161, 41,145, 65, 1, 0,145,125, 0, 0,148, 1, 1, 0, 84, +/* 0x1010 */ 227, 47, 64,185, 69, 17, 0,145,227, 3, 3, 42, 2, 0,128, 82, +/* 0x1020 */ 165, 16, 3,139, 4, 1,128, 82, 14, 0, 0, 20, 65, 9, 0,145, +/* 0x1030 */ 115, 0, 0,148, 1, 1, 0, 84,227, 47, 64,185, 69, 17, 4,145, +/* 0x1040 */ 227, 3, 3, 42, 2, 1,128, 82,165, 16, 3,139, 4, 1,128, 82, +/* 0x1050 */ 4, 0, 0, 20, 69, 17, 8,145, 2, 2,128, 82, 4, 32,128, 82, +/* 0x1060 */ 226, 55, 0,185, 32, 0,128, 82,225, 3, 5,170,101, 0, 0,148, +/* 0x1070 */ 3, 0, 4,107,163,255,255, 84,229, 55, 64,185,165, 0, 3, 11, +/* 0x1080 */ 229, 55, 0,185,223, 16, 0,113,194, 6, 0, 84,198, 28, 0, 17, +/* 0x1090 */ 99, 0,128, 82,191, 16, 0,113,101, 32,133, 26,227, 3, 5, 42, +/* 0x10a0 */ 101, 29, 3,139,165,128, 13,145, 32, 0,128, 82, 4, 8,128, 82, +/* 0x10b0 */ 225, 3, 5,170, 83, 0, 0,148, 3, 0, 4,107,163,255,255, 84, +/* 0x10c0 */ 227, 47, 0,185,127, 16, 0,113, 99, 4, 0, 84,100,124, 1, 83, +/* 0x10d0 */ 132, 4, 0, 81,111, 0, 0, 18,239, 1, 31, 50,127, 56, 0,113, +/* 0x10e0 */ 226, 0, 0, 84,239, 33,196, 26,106,121, 21,145,227, 1, 3, 75, +/* 0x10f0 */ 227, 3, 3, 42, 74, 5, 3,139, 12, 0, 0, 20,132, 16, 0, 81, +/* 0x1100 */ 53, 0, 0,148,231,124, 1, 83,131, 1, 7,107,108, 32,140, 26, +/* 0x1110 */ 239, 1, 15, 26,132, 4, 0,113, 65,255,255, 84,106, 17, 25,145, +/* 0x1120 */ 239,109, 28, 83,132, 0,128, 82, 37, 0,128, 82, 32, 0,128, 82, +/* 0x1130 */ 225, 3, 10,170, 51, 0, 0,148, 31, 0, 0,114, 64, 0, 0, 84, +/* 0x1140 */ 239, 1, 5, 42,165,120, 31, 83,132, 4, 0,113, 33,255,255, 84, +/* 0x1150 */ 2, 0, 0, 20,239, 47, 64,185,239, 5, 0, 49,229, 55, 64,185, +/* 0x1160 */ 227, 67, 66,248,165, 8, 0, 17, 35, 1, 3,203,255, 1, 3,107, +/* 0x1170 */ 232, 2, 0, 84,227,125, 64,147,227, 3, 3,203, 32,105, 99, 56, +/* 0x1180 */ 32, 21, 0, 56, 63, 1, 14,235,194, 0, 0, 84,165, 4, 0,113, +/* 0x1190 */ 97,255,255, 84,224,115, 0, 57, 63, 1, 14,235,227,229,255, 84, +/* 0x11a0 */ 13, 0, 0,148, 0, 0,128, 82,226, 19, 64,249, 3, 1, 2,203, +/* 0x11b0 */ 226, 31, 64,249, 67, 0, 0,185,226, 67, 66,248, 35, 1, 2,203, +/* 0x11c0 */ 226, 55, 64,249, 67, 0, 0,185,255,243, 0,145, 32, 0,128, 82, +/* 0x11d0 */ 246,255,255, 23,227,124, 24, 83,195, 0, 0, 53, 31, 1, 13,235, +/* 0x11e0 */ 231, 92, 24, 83, 66,255,255, 84, 3, 21, 64, 56,108, 32, 12, 42, +/* 0x11f0 */ 192, 3, 95,214,224, 3, 6, 42, 33, 68, 32,139, 0, 0,128, 82, +/* 0x1200 */ 33, 68, 32,139,227,124, 24, 83,241, 3, 30,170, 94, 0, 0, 16, +/* 0x1210 */ 99,254,255, 52, 35, 0, 64,121,226,124, 11, 83, 98,124, 2, 27, +/* 0x1220 */ 159, 1, 2,107, 2, 1, 0, 84, 2, 0,129, 82,231, 3, 2, 42, +/* 0x1230 */ 66, 0, 3, 75, 0, 0, 0, 58, 99, 20, 66, 11, 35, 0, 0,121, +/* 0x1240 */ 32, 2, 95,214,140, 1, 2, 75,231, 0, 2, 75, 99, 20, 67, 75, +/* 0x1250 */ 0, 0, 0, 58, 35, 0, 0,121, 32, 2, 95,214,194, 3,128, 82, +/* 0x1260 */ 225, 0, 0, 16, 64, 0,128, 82, 8, 8,128, 82, 1, 0, 0,212, +/* 0x1270 */ 224, 15,128, 82,168, 11,128, 82, 1, 0, 0,212, 80, 82, 79, 84, +/* 0x1280 */ 95, 69, 88, 69, 67,124, 80, 82, 79, 84, 95, 87, 82, 73, 84, 69, +/* 0x1290 */ 32,102, 97,105,108,101,100, 46, 10, 0,226, 3, 30,170, 65,144, +/* 0x12a0 */ 0,209,229, 3, 1,170, 36, 68, 64,184,165, 0, 4,203, 36, 68, +/* 0x12b0 */ 64,184,164, 0, 4,139,164, 23, 0,249, 36, 68, 64,184,164, 0, +/* 0x12c0 */ 4,139,228, 15, 31,248, 36, 68, 64,184,160, 0, 4,139, 1, 96, +/* 0x12d0 */ 0,145,255, 67, 0,209, 36, 4, 64,185, 33, 48, 0,145, 33, 0, +/* 0x12e0 */ 4,139, 36, 68, 64,184, 5, 44, 12, 83,165,124, 22, 83,132, 8, +/* 0x12f0 */ 5, 11, 0, 8, 5,203,224, 19,191,169,132, 8, 5, 75, 0, 8, +/* 0x1300 */ 5,139, 16, 0, 0,148, 99, 28, 0, 18,127, 64, 1,113,129, 1, +/* 0x1310 */ 0, 84, 33,252, 66,211, 65, 1, 0,180, 33, 4, 0,209, 2,120, +/* 0x1320 */ 97,184, 67,120, 26, 83,127, 20, 0,113,129, 0, 0, 84, 66, 0, +/* 0x1330 */ 1, 75, 98, 20, 26, 83, 2,120, 33,184, 1,255,255,181,192, 3, +/* 0x1340 */ 95,214,254, 23,191,169, 35, 20, 64, 57, 38, 24, 64, 57,224, 19, +/* 0x1350 */ 190,169,230, 15, 1,169, 36, 68, 64,184,229, 3, 4, 42, 36, 68, +/* 0x1360 */ 64,184,226, 19,191,169,163, 99, 1,209,225, 23,190,169,224, 15, +/* 0x1370 */ 1,169,165, 12, 0,145,163,131, 92,184, 98, 8, 69,139,163, 3, +/* 0x1380 */ 89,248, 97, 0, 0,148,163, 3, 92,248, 95, 0, 0,148, 57, 0, +/* 0x1390 */ 0,148, 5, 0,128,210, 4, 0,128,146, 67, 6,128,210, 98, 0, +/* 0x13a0 */ 128,210,161,131, 93,248,160, 3, 93,248,230, 3, 0,170,200, 27, +/* 0x13b0 */ 128, 82, 1, 0, 0,212, 31, 0, 6,235, 64, 0, 0, 84, 0, 0, +/* 0x13c0 */ 32,212,165,131, 92,184,161, 3, 94,248, 31, 0, 0,148,226, 15, +/* 0x13d0 */ 65,169,224, 7,194,168,228, 7, 65,248,128, 0, 63,214, 7, 0, +/* 0x13e0 */ 0,148,232, 26,128, 82, 1, 0, 0,212,226,119, 65,169,224, 7, +/* 0x13f0 */ 194,168,254, 15,193,168, 96, 0, 31,214,164, 3, 95,248,192, 7, +/* 0x1400 */ 64,169,128, 4, 0,169,192, 11, 64,249,128, 8, 0,249,226, 15, +/* 0x1410 */ 65,169,224, 7,194,168,228, 7, 65,248, 67, 0, 0,180,128, 0, +/* 0x1420 */ 63,214,224, 7,193,168,162, 0,128,210, 72, 28,128, 82, 1, 0, +/* 0x1430 */ 0,212,254, 11, 64,249,224, 7,194,168,192, 3, 31,214, 37,192, +/* 0x1440 */ 95,184,165, 92, 0, 18,191, 0, 0,114,165,124, 1, 83, 96, 0, +/* 0x1450 */ 0, 84, 35, 68, 64,184, 3, 68, 0,184,165, 0, 0, 52, 34, 12, +/* 0x1460 */ 193, 40,165, 4, 0, 81, 2, 12,129, 40,165,255,255, 53,192, 3, +/* 0x1470 */ 95,214,254, 15, 31,248,227, 3, 30,170, 35, 0, 0,148, 65,244, +/* 0x1480 */ 126,211, 5, 0,128,210, 4, 0,128,146, 67, 4,128,210,226, 0, +/* 0x1490 */ 128,210,161,131, 30,248, 0, 0,128,210,200, 27,128, 82, 1, 0, +/* 0x14a0 */ 0,212, 31, 4, 64,177, 67, 0, 0, 84, 0, 0, 32,212,160, 3, +/* 0x14b0 */ 30,248,161, 3, 93,248,165,131, 92,184,227,255,255,151,161, 3, +/* 0x14c0 */ 87,248,165,131, 87,184,160, 3, 23,248,165, 12, 0, 17,165,124, +/* 0x14d0 */ 2, 83,221,255,255,151,226, 3, 0,170,161, 3, 89,248,160, 3, +/* 0x14e0 */ 25,248,215,255,255,151,161, 3, 92,248,160, 3, 28,248,212,255, +/* 0x14f0 */ 255,151,225, 7, 65,248,224, 15, 31,248,209,255,255,151,254, 7, +/* 0x1500 */ 65,248,192, 3, 31,214, 99,192, 95,184, 99, 92, 0, 18, 66, 0, +/* 0x1510 */ 3,139,192, 3, 95,214,102,105,108,101, 32,102,111,114,109, 97, +/* 0x1520 */ 116, 32,101,108,102, 54, 52, 45,108,105,116,116,108,101, 97, 97, +/* 0x1530 */ 114, 99,104, 54, 52, 10, 10, 83,101, 99,116,105,111,110,115, 58, +/* 0x1540 */ 10, 73,100,120, 32, 78, 97,109,101, 32, 32, 32, 32, 32, 32, 32, +/* 0x1550 */ 32, 32, 32, 83,105,122,101, 32, 32, 32, 32, 32, 32, 86, 77, 65, +/* 0x1560 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 76, +/* 0x1570 */ 77, 65, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, +/* 0x1580 */ 32, 70,105,108,101, 32,111,102,102, 32, 32, 65,108,103,110, 32, +/* 0x1590 */ 32, 70,108, 97,103,115, 10, 32, 32, 48, 32, 69, 76, 70, 77, 65, +/* 0x15a0 */ 73, 78, 88, 32, 32, 32, 32, 32, 32, 48, 48, 48, 48, 48, 48, 49, +/* 0x15b0 */ 52, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x15c0 */ 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x15d0 */ 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 52, 48, 32, +/* 0x15e0 */ 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, +/* 0x15f0 */ 32, 82, 69, 76, 79, 67, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, +/* 0x1600 */ 10, 32, 32, 49, 32, 78, 82, 86, 95, 72, 69, 65, 68, 32, 32, 32, +/* 0x1610 */ 32, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, +/* 0x1620 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, +/* 0x1630 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, +/* 0x1640 */ 32, 48, 48, 48, 48, 48, 48, 53, 52, 32, 32, 50, 42, 42, 48, 32, +/* 0x1650 */ 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 65, 68, 79, +/* 0x1660 */ 78, 76, 89, 10, 32, 32, 50, 32, 78, 82, 86, 95, 84, 65, 73, 76, +/* 0x1670 */ 32, 32, 32, 32, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, +/* 0x1680 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x1690 */ 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x16a0 */ 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 53, 52, 32, 32, 50, 42, +/* 0x16b0 */ 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, +/* 0x16c0 */ 65, 68, 79, 78, 76, 89, 10, 32, 32, 51, 32, 78, 82, 86, 50, 69, +/* 0x16d0 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 48, 48, 48, 48, 48, 49, 50, +/* 0x16e0 */ 56, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x16f0 */ 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x1700 */ 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 53, 52, 32, +/* 0x1710 */ 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, +/* 0x1720 */ 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, 32, 52, 32, 78, 82, +/* 0x1730 */ 86, 50, 68, 32, 32, 32, 32, 32, 32, 32, 32, 32, 48, 48, 48, 48, +/* 0x1740 */ 48, 49, 49, 99, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x1750 */ 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x1760 */ 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 49, +/* 0x1770 */ 55, 99, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, +/* 0x1780 */ 84, 83, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, 32, 53, +/* 0x1790 */ 32, 78, 82, 86, 50, 66, 32, 32, 32, 32, 32, 32, 32, 32, 32, 48, +/* 0x17a0 */ 48, 48, 48, 48, 48,102, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, +/* 0x17b0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, +/* 0x17c0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, +/* 0x17d0 */ 48, 48, 50, 57, 56, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, +/* 0x17e0 */ 84, 69, 78, 84, 83, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, +/* 0x17f0 */ 32, 32, 54, 32, 76, 90, 77, 65, 95, 69, 76, 70, 48, 48, 32, 32, +/* 0x1800 */ 32, 32, 48, 48, 48, 48, 48, 48,100, 48, 32, 32, 48, 48, 48, 48, +/* 0x1810 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, +/* 0x1820 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, +/* 0x1830 */ 48, 48, 48, 48, 48, 51, 56, 56, 32, 32, 50, 42, 42, 48, 32, 32, +/* 0x1840 */ 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 76, 79, 67, 44, +/* 0x1850 */ 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, 32, 55, 32, 76, 90, +/* 0x1860 */ 77, 65, 95, 68, 69, 67, 50, 48, 32, 32, 32, 32, 48, 48, 48, 48, +/* 0x1870 */ 48, 57, 54, 56, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x1880 */ 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x1890 */ 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 52, +/* 0x18a0 */ 53, 56, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, +/* 0x18b0 */ 84, 83, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, 32, 56, +/* 0x18c0 */ 32, 76, 90, 77, 65, 95, 68, 69, 67, 49, 48, 32, 32, 32, 32, 48, +/* 0x18d0 */ 48, 48, 48, 48, 52, 57, 99, 32, 32, 48, 48, 48, 48, 48, 48, 48, +/* 0x18e0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, +/* 0x18f0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, +/* 0x1900 */ 48, 48,100, 99, 48, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, +/* 0x1910 */ 84, 69, 78, 84, 83, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, +/* 0x1920 */ 32, 32, 57, 32, 76, 90, 77, 65, 95, 68, 69, 67, 51, 48, 32, 32, +/* 0x1930 */ 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, +/* 0x1940 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, +/* 0x1950 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, +/* 0x1960 */ 48, 48, 48, 48, 49, 50, 53, 99, 32, 32, 50, 42, 42, 48, 32, 32, +/* 0x1970 */ 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 65, 68, 79, 78, +/* 0x1980 */ 76, 89, 10, 32, 49, 48, 32, 69, 76, 70, 77, 65, 73, 78, 89, 32, +/* 0x1990 */ 32, 32, 32, 32, 32, 48, 48, 48, 48, 48, 48, 51,101, 32, 32, 48, +/* 0x19a0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, +/* 0x19b0 */ 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x19c0 */ 48, 32, 32, 48, 48, 48, 48, 49, 50, 53, 99, 32, 32, 50, 42, 42, +/* 0x19d0 */ 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 65, +/* 0x19e0 */ 68, 79, 78, 76, 89, 10, 32, 49, 49, 32, 69, 76, 70, 77, 65, 73, +/* 0x19f0 */ 78, 90, 32, 32, 32, 32, 32, 32, 48, 48, 48, 48, 48, 50, 55, 99, +/* 0x1a00 */ 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x1a10 */ 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x1a20 */ 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 49, 50, 57, 97, 32, 32, +/* 0x1a30 */ 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, +/* 0x1a40 */ 82, 69, 65, 68, 79, 78, 76, 89, 10, 83, 89, 77, 66, 79, 76, 32, +/* 0x1a50 */ 84, 65, 66, 76, 69, 58, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x1a60 */ 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, +/* 0x1a70 */ 76, 90, 77, 65, 95, 68, 69, 67, 51, 48, 9, 48, 48, 48, 48, 48, +/* 0x1a80 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 76, 90, 77, 65, +/* 0x1a90 */ 95, 68, 69, 67, 51, 48, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x1aa0 */ 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, +/* 0x1ab0 */ 69, 76, 70, 77, 65, 73, 78, 90, 9, 48, 48, 48, 48, 48, 48, 48, +/* 0x1ac0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 69, 76, 70, 77, 65, 73, +/* 0x1ad0 */ 78, 90, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x1ae0 */ 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 69, 76, 70, 77, +/* 0x1af0 */ 65, 73, 78, 88, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x1b00 */ 48, 48, 48, 48, 48, 32, 69, 76, 70, 77, 65, 73, 78, 88, 10, 48, +/* 0x1b10 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, +/* 0x1b20 */ 108, 32, 32, 32, 32,100, 32, 32, 78, 82, 86, 95, 72, 69, 65, 68, +/* 0x1b30 */ 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x1b40 */ 48, 32, 78, 82, 86, 95, 72, 69, 65, 68, 10, 48, 48, 48, 48, 48, +/* 0x1b50 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, +/* 0x1b60 */ 32,100, 32, 32, 78, 82, 86, 95, 84, 65, 73, 76, 9, 48, 48, 48, +/* 0x1b70 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 78, 82, +/* 0x1b80 */ 86, 95, 84, 65, 73, 76, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x1b90 */ 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, +/* 0x1ba0 */ 78, 82, 86, 50, 69, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x1bb0 */ 48, 48, 48, 48, 48, 48, 32, 78, 82, 86, 50, 69, 10, 48, 48, 48, +/* 0x1bc0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, +/* 0x1bd0 */ 32, 32, 32,100, 32, 32, 78, 82, 86, 50, 68, 9, 48, 48, 48, 48, +/* 0x1be0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 78, 82, 86, +/* 0x1bf0 */ 50, 68, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x1c00 */ 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 78, 82, 86, 50, +/* 0x1c10 */ 66, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x1c20 */ 48, 48, 32, 78, 82, 86, 50, 66, 10, 48, 48, 48, 48, 48, 48, 48, +/* 0x1c30 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, +/* 0x1c40 */ 32, 32, 76, 90, 77, 65, 95, 69, 76, 70, 48, 48, 9, 48, 48, 48, +/* 0x1c50 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 76, 90, +/* 0x1c60 */ 77, 65, 95, 69, 76, 70, 48, 48, 10, 48, 48, 48, 48, 48, 48, 48, +/* 0x1c70 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, +/* 0x1c80 */ 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 50, 48, 9, 48, 48, 48, +/* 0x1c90 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 76, 90, +/* 0x1ca0 */ 77, 65, 95, 68, 69, 67, 50, 48, 10, 48, 48, 48, 48, 48, 48, 48, /* 0x1cb0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, -/* 0x1cc0 */ 32, 32, 76, 90, 77, 65, 95, 69, 76, 70, 48, 48, 9, 48, 48, 48, +/* 0x1cc0 */ 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 49, 48, 9, 48, 48, 48, /* 0x1cd0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 76, 90, -/* 0x1ce0 */ 77, 65, 95, 69, 76, 70, 48, 48, 10, 48, 48, 48, 48, 48, 48, 48, +/* 0x1ce0 */ 77, 65, 95, 68, 69, 67, 49, 48, 10, 48, 48, 48, 48, 48, 48, 48, /* 0x1cf0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, -/* 0x1d00 */ 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 50, 48, 9, 48, 48, 48, -/* 0x1d10 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 76, 90, -/* 0x1d20 */ 77, 65, 95, 68, 69, 67, 50, 48, 10, 48, 48, 48, 48, 48, 48, 48, -/* 0x1d30 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, -/* 0x1d40 */ 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 49, 48, 9, 48, 48, 48, -/* 0x1d50 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 76, 90, -/* 0x1d60 */ 77, 65, 95, 68, 69, 67, 49, 48, 10, 48, 48, 48, 48, 48, 48, 48, -/* 0x1d70 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, -/* 0x1d80 */ 32, 32, 69, 76, 70, 77, 65, 73, 78, 89, 9, 48, 48, 48, 48, 48, -/* 0x1d90 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 69, 76, 70, 77, -/* 0x1da0 */ 65, 73, 78, 89, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x1db0 */ 48, 48, 48, 48, 48, 32,103, 32, 32, 32, 32, 32, 32, 32, 69, 76, -/* 0x1dc0 */ 70, 77, 65, 73, 78, 88, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x1dd0 */ 48, 48, 48, 48, 48, 48, 48, 32, 95,115,116, 97,114,116, 10, 48, -/* 0x1de0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, -/* 0x1df0 */ 103, 32, 32, 32, 32, 32, 70, 32, 78, 82, 86, 50, 69, 9, 48, 48, -/* 0x1e00 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 49, 50, 56, 32,117, -/* 0x1e10 */ 99,108, 95,110,114,118, 50,101, 95,100,101, 99,111,109,112,114, -/* 0x1e20 */ 101,115,115, 95, 51, 50, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x1e30 */ 48, 48, 48, 48, 48, 48, 48, 32,103, 32, 32, 32, 32, 32, 70, 32, -/* 0x1e40 */ 78, 82, 86, 50, 68, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x1e50 */ 48, 48, 48, 49, 49, 99, 32,117, 99,108, 95,110,114,118, 50,100, -/* 0x1e60 */ 95,100,101, 99,111,109,112,114,101,115,115, 95, 51, 50, 10, 48, -/* 0x1e70 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, -/* 0x1e80 */ 103, 32, 32, 32, 32, 32, 70, 32, 78, 82, 86, 50, 66, 9, 48, 48, -/* 0x1e90 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,102, 48, 32,117, -/* 0x1ea0 */ 99,108, 95,110,114,118, 50, 98, 95,100,101, 99,111,109,112,114, -/* 0x1eb0 */ 101,115,115, 95, 51, 50, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x1ec0 */ 48, 48, 48, 48, 48, 48, 48, 32,103, 32, 32, 32, 32, 32, 32, 32, -/* 0x1ed0 */ 76, 90, 77, 65, 95, 68, 69, 67, 49, 48, 9, 48, 48, 48, 48, 48, -/* 0x1ee0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 76,122,109, 97, -/* 0x1ef0 */ 68,101, 99,111,100,101, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x1f00 */ 48, 48, 48, 48, 48, 48, 48, 32,103, 32, 32, 32, 32, 32, 32, 32, -/* 0x1f10 */ 69, 76, 70, 77, 65, 73, 78, 89, 9, 48, 48, 48, 48, 48, 48, 48, -/* 0x1f20 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,101,110,100, 95,100,101, -/* 0x1f30 */ 99,111,109,112,114,101,115,115, 10, 10, 82, 69, 76, 79, 67, 65, -/* 0x1f40 */ 84, 73, 79, 78, 32, 82, 69, 67, 79, 82, 68, 83, 32, 70, 79, 82, -/* 0x1f50 */ 32, 91, 69, 76, 70, 77, 65, 73, 78, 88, 93, 58, 10, 79, 70, 70, -/* 0x1f60 */ 83, 69, 84, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 84, 89, -/* 0x1f70 */ 80, 69, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, -/* 0x1f80 */ 86, 65, 76, 85, 69, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x1f90 */ 48, 48, 48, 48, 50, 48, 32, 82, 95, 65, 65, 82, 67, 72, 54, 52, -/* 0x1fa0 */ 95, 67, 65, 76, 76, 50, 54, 32, 32, 69, 76, 70, 77, 65, 73, 78, -/* 0x1fb0 */ 90, 10, 10, 82, 69, 76, 79, 67, 65, 84, 73, 79, 78, 32, 82, 69, -/* 0x1fc0 */ 67, 79, 82, 68, 83, 32, 70, 79, 82, 32, 91, 76, 90, 77, 65, 95, -/* 0x1fd0 */ 69, 76, 70, 48, 48, 93, 58, 10, 79, 70, 70, 83, 69, 84, 32, 32, -/* 0x1fe0 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 84, 89, 80, 69, 32, 32, 32, -/* 0x1ff0 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 86, 65, 76, 85, 69, -/* 0x2000 */ 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x2010 */ 52, 32, 82, 95, 65, 65, 82, 67, 72, 54, 52, 95, 67, 79, 78, 68, -/* 0x2020 */ 66, 82, 49, 57, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 51, 48, -/* 0x2030 */ 10 +/* 0x1d00 */ 32, 32, 69, 76, 70, 77, 65, 73, 78, 89, 9, 48, 48, 48, 48, 48, +/* 0x1d10 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 69, 76, 70, 77, +/* 0x1d20 */ 65, 73, 78, 89, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x1d30 */ 48, 48, 48, 48, 48, 32,103, 32, 32, 32, 32, 32, 32, 32, 69, 76, +/* 0x1d40 */ 70, 77, 65, 73, 78, 88, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x1d50 */ 48, 48, 48, 48, 48, 48, 48, 32, 95,115,116, 97,114,116, 10, 48, +/* 0x1d60 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, +/* 0x1d70 */ 103, 32, 32, 32, 32, 32, 70, 32, 78, 82, 86, 50, 69, 9, 48, 48, +/* 0x1d80 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 49, 50, 56, 32,117, +/* 0x1d90 */ 99,108, 95,110,114,118, 50,101, 95,100,101, 99,111,109,112,114, +/* 0x1da0 */ 101,115,115, 95, 51, 50, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x1db0 */ 48, 48, 48, 48, 48, 48, 48, 32,103, 32, 32, 32, 32, 32, 70, 32, +/* 0x1dc0 */ 78, 82, 86, 50, 68, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x1dd0 */ 48, 48, 48, 49, 49, 99, 32,117, 99,108, 95,110,114,118, 50,100, +/* 0x1de0 */ 95,100,101, 99,111,109,112,114,101,115,115, 95, 51, 50, 10, 48, +/* 0x1df0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, +/* 0x1e00 */ 103, 32, 32, 32, 32, 32, 70, 32, 78, 82, 86, 50, 66, 9, 48, 48, +/* 0x1e10 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,102, 48, 32,117, +/* 0x1e20 */ 99,108, 95,110,114,118, 50, 98, 95,100,101, 99,111,109,112,114, +/* 0x1e30 */ 101,115,115, 95, 51, 50, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x1e40 */ 48, 48, 48, 48, 48, 48, 48, 32,103, 32, 32, 32, 32, 32, 32, 32, +/* 0x1e50 */ 76, 90, 77, 65, 95, 68, 69, 67, 49, 48, 9, 48, 48, 48, 48, 48, +/* 0x1e60 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 76,122,109, 97, +/* 0x1e70 */ 68,101, 99,111,100,101, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x1e80 */ 48, 48, 48, 48, 48, 48, 48, 32,103, 32, 32, 32, 32, 32, 32, 32, +/* 0x1e90 */ 69, 76, 70, 77, 65, 73, 78, 89, 9, 48, 48, 48, 48, 48, 48, 48, +/* 0x1ea0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,101,110,100, 95,100,101, +/* 0x1eb0 */ 99,111,109,112,114,101,115,115, 10, 10, 82, 69, 76, 79, 67, 65, +/* 0x1ec0 */ 84, 73, 79, 78, 32, 82, 69, 67, 79, 82, 68, 83, 32, 70, 79, 82, +/* 0x1ed0 */ 32, 91, 69, 76, 70, 77, 65, 73, 78, 88, 93, 58, 10, 79, 70, 70, +/* 0x1ee0 */ 83, 69, 84, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 84, 89, +/* 0x1ef0 */ 80, 69, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, +/* 0x1f00 */ 86, 65, 76, 85, 69, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x1f10 */ 48, 48, 48, 48, 49, 48, 32, 82, 95, 65, 65, 82, 67, 72, 54, 52, +/* 0x1f20 */ 95, 67, 65, 76, 76, 50, 54, 32, 32, 69, 76, 70, 77, 65, 73, 78, +/* 0x1f30 */ 90, 10, 10, 82, 69, 76, 79, 67, 65, 84, 73, 79, 78, 32, 82, 69, +/* 0x1f40 */ 67, 79, 82, 68, 83, 32, 70, 79, 82, 32, 91, 76, 90, 77, 65, 95, +/* 0x1f50 */ 69, 76, 70, 48, 48, 93, 58, 10, 79, 70, 70, 83, 69, 84, 32, 32, +/* 0x1f60 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 84, 89, 80, 69, 32, 32, 32, +/* 0x1f70 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 86, 65, 76, 85, 69, +/* 0x1f80 */ 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x1f90 */ 52, 32, 82, 95, 65, 65, 82, 67, 72, 54, 52, 95, 67, 79, 78, 68, +/* 0x1fa0 */ 66, 82, 49, 57, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 51, 48, +/* 0x1fb0 */ 10 }; diff --git a/src/stub/src/arm64-linux.shlib-init.S b/src/stub/src/arm64-linux.shlib-init.S index 248f6db2..070739f2 100644 --- a/src/stub/src/arm64-linux.shlib-init.S +++ b/src/stub/src/arm64-linux.shlib-init.S @@ -66,6 +66,7 @@ __ARM_NR_cacheflush = (1<<31) // FIXME #define arg3 x2 #define arg4 x3 #define arg5 x4 +#define arg6 x5 #define edi w0 #define esi w1 @@ -93,19 +94,23 @@ __ARM_NR_cacheflush = (1<<31) // FIXME #define bits w4 #define off w5 +#define tmp1w w3 +#define tmp1x x3 +#define tmp2w w6 +#define tmp2x x6 + section ELFMAINX // .long offset(.) // detect relocation // .long offset(user DT_INIT) // .long offset(escape_hatch) -// .long offset({p_info; b_info; compressed data}) +// .long offset({l_info; p_info; b_info; compressed data}) _start: .globl _start - brk #0 // for debugging - PUSH3(x29,x30,x0) - PUSH4(arg4,arg5,x6,x7) - PUSH3(arg1,arg2,arg3) +// brk #0 // debugging + PUSH2(lr,x0) // x0= placeholder for user DT_INIT + PUSH4(arg1,arg2,arg3,fp) mov fp,sp -o_uinit= (3+4+2)*8 // pc +o_uinit= 5*8 // pc bl main // push &f_decompress f_decompress: @@ -144,13 +149,6 @@ L71: /* IDENTSTR goes here */ section ELFMAINZ -.macro push reg - str \reg,[sp,#-4]! -.endm -.macro pop reg - ldr \reg,[sp],#4 -.endm - #define lodsl ldr eax,[rsi],#4 #define lodslu lodsl @@ -175,14 +173,14 @@ main: add rsi,rdx,# _start - f_decompress - 4*4 mov rcx,rsi lodsl; sub rcx,rcx,rax; //str ecx,[fp,#o_reloc] - lodsl; add rax,rcx,rax; str eax,[fp,#o_uinit] // reloc DT_INIT for step 12 - lodsl; add rax,rcx,rax; push rax // reloc &hatch for step 10 -o_hatch= -1*4 - lodsl; add edi,ecx,eax // &l_info; also destination for decompress - add esi,edi,#sz_l_info + sz_p_info // &b_info + lodsl; add rax,rcx,rax; str rax,[fp,#o_uinit] // reloc DT_INIT for step 12 + lodsl; add rax,rcx,rax; PUSH1(rax) // reloc &hatch for step 10 +o_hatch= -2*8 // HOLE + lodsl; add rdi,rcx,rax // &l_info; also destination for decompress + add rsi,rdi,#sz_l_info + sz_p_info // &b_info - sub sp,sp,#2*4 // param space: munmap temp pages step 9 -p_unmap= -3*4 + sub sp,sp,#2*8 // param space: munmap temp pages step 9 +p_unmap= -4*8 ldr eax,[rsi,#4]; add rsi,rsi,#3*4 // sz_cpr add rsi,rsi,rax // skip unpack helper block @@ -190,13 +188,12 @@ p_unmap= -3*4 lodslu // eax=dstlen lsl ecx,edi,# (32-PAGE_SHIFT) lsr ecx,ecx,#2+(32-PAGE_SHIFT) // ecx= w_fragment - add eax,eax,ecx,lsl #2; push eax // params: mprotect restored pages step 8 - sub edi,edi,ecx,lsl #2; push edi -p_mprot= -5*8 + add eax,eax,ecx,lsl #2 + sub rdi,rdi,rcx,lsl #2 + PUSH2(rdi,rax) // params: mprotect restored pages step 8 +p_mprot= -6*8 sub eax,eax,ecx,lsl #2 // dstlen - add edi,edi,ecx,lsl #2 // dst - push ecx // w_fragment -o_wfrag= -6*8 + add rdi,rdi,rcx,lsl #2 // dst bl L610 f_unfilter: // (char *ptr, uint len, uint cto, uint fid) @@ -225,39 +222,36 @@ unfret: ret L610: - push lr -o_unflt= -7*8 - ldrb tmp,[rsi,#b_method-4+1]; push tmpx // ftid - ldrb tmp,[rsi,#b_method-4+2]; push tmpx // cto8 - push rax // dstlen also for unfilter step 7 - push rdi // dst param for unfilter step 7 -p_unflt= -11*8 + PUSH2(lr,rcx) // f_unf, w_frag +o_wfrag = -7*8 +o_unflt= -8*8 + ldrb tmp1w,[rsi,# b_method-4+1] // ftid + ldrb tmp2w,[rsi,# b_method-4+2] // cto8 + PUSH4(rdi,rax,tmp2x,tmp1x) // dst, dstlen, cto8, ftid for unfilter step 7 +p_unflt= -12*8 lodslu; mov ecx,eax // ecx= srclen - lodslu; push rax // method,filter,cto,junk - push rdx // &decompress -o_uncpr= -13*8 - add tmpx,fp,#p_unflt+1*4; push tmpx // &dstlen - push rdi // dst - push rcx // srclen - push rsi // src; arglist ready for decompress step 6 -p_uncpr= -17*8 + lodslu + PUSH2(rdx,rax) // &decompress, {method,filter,cto,junk} +o_uncpr= -14*8 + add tmpx,fp,#p_unflt+1*8 + PUSH4(rsi,rcx,rdi,tmpx) // src,srclen,dst,&dstlen arglist ready for decompress step 6 +p_uncpr= -18*8 - and tmpx,rsi,#3 // length of prefix alignment add rcx,rcx,#3 // allow suffix alignment - add rcx,rcx,tmpx // prefix increases byte length ldr tmp,[fp,#o_wfrag]; add rdx,tmpx,rcx,lsr #2 // w_srclen + w_frag - ldr tmp,[fp,#o_uncpr]; bl wlen_subr - ldr tmp,[fp,#o_unflt]; bl wlen_subr + ldr tmpx,[fp,#o_uncpr]; bl wlen_subr + ldr tmpx,[fp,#o_unflt]; bl wlen_subr bl L220 supervise: // Allocate pages for result of decompressing. // These replace the compressed source and the following hole. + mov arg6,#0 mov arg5,#-1 // cater to *BSD for fd of MAP_ANON mov arg4,#MAP_PRIVATE|MAP_ANONYMOUS|MAP_FIXED mov arg3,#PROT_READ|PROT_WRITE - ldr arg2,[fp,#p_mprot+4] // dstlen + ldr arg2,[fp,#p_mprot+8] // dstlen ldr arg1,[fp,#p_mprot ] // dst mov x6,arg1 // required result do_sys __NR_mmap64; cmp x0,x6; beq 0f; brk #0; 0: @@ -268,81 +262,63 @@ supervise: ldr rsi,[fp,#p_unmap] bl movsl +//p_uncpr POP4(arg1,arg2,arg3,arg4) POP1(rax) blr rax // decompress - add sp,sp,#8 // toss arg5 bl L620 //hatch: - do_sys __NR_munmap - POP3(arg1,arg2,arg3) - POP4(rax,rcx,x6,x7) - POP3(fp,lr,x1) - br x1 + do_sys __NR_munmap // 2 instr + POP4(arg1,arg2,arg3,fp) // 2 instr + POP2(lr,arg4) // 1 instr; arg4= user DT_INIT + br arg4 L620: // Implant escape hatch at end of .text - ldr eax,[fp,#o_hatch] - ldp arg1,arg2,[lr] + ldr rax,[fp,#o_hatch] + ldp arg1,arg2,[lr] // 4 instr stp arg1,arg2,[rax] + ldr arg1,[lr,#2*8] // 2 instr + str arg1,[rax,#2*8] //p_unflt POP4(arg1,arg2,arg3,arg4) - POP2(rax,x12) // x12= w_fragment [toss] + POP1(rax) // f_unf cbz arg4,0f // 0==ftid ==> no filter blr rax // unfilter 0: //p_mprot - ldr arg1,[sp,#0*4] // lo(dst) - ldr arg2,[sp,#1*4] // len - mov arg3,#0 - add arg2,arg2,arg1 // hi(dst) - add arg2,arg2,#2*4 // len(hatch) - do_sys __ARM_NR_cacheflush - POP2(arg1,arg2) mov arg3,#PROT_READ|PROT_EXEC do_sys __NR_mprotect //p_unmap -#if defined(ARMEL_EABI4) //{ -// first part of do_sys7t __NR_munmap -.if __NR_munmap <= 0xff - mov r7,#__NR_munmap -.else - mov r7,#__NR_munmap>>16 - lsl r7,r7,#16 - add r7,r7,#__NR_munmap - ((__NR_munmap>>16)<<16) -.endif -#endif //} POP3(arg1,arg2,lr) - br lr // togo hatch + br lr // goto hatch movsl_subr: ldr ecx,[rsi,#-4] // 'bl ' instruction word bic ecx,ecx,#0xff<<24 // displacment field - add ecx,ecx,#1 // displ omits one word -// FALL THROUGH to the part of 'movsl' that trims to a multiple of 8 words. -// 7/8 of the time this is faster; 1/8 of the time it's slower. -9: - ldr tmp,[rsi],#4; sub ecx,ecx,#1 +movsl: // rdi= 4-byte aligned dst; rsi= 4-byte aligned src; ecx= word count + tst ecx,#1; lsr ecx,ecx,#1; beq 5f + ldr tmp,[rsi],#4 str tmp,[rdi],#4 -movsl: // rdi= 4-byte aligned dst; esi= 4-byte aligned src; ecx= word count - tst ecx,#7; bne 9b // work ecx down to multiple of 8 - lsr ecx,ecx,#3; cbz ecx,9f +5: + cbz ecx,9f 7: - ldp x2,x3,[rsi],#2*8; subs ecx,ecx,#1 - stp x2,x3,[rdi],#2*8; cbnz ecx,7b + ldp w2,w3,[rsi],#2*4; sub ecx,ecx,#1 + stp w2,w3,[rdi],#2*4; cbnz ecx,7b 9: ret L220: - push lr // &supervise -o_super= -18*8 + PUSH1(lr) // &supervise +o_super= -20*8 // HOLE mov tmpx,lr; bl wlen_subr // wlen_supervise lsl arg2,rdx,#2 // convert to bytes // Allocate pages to hold temporary copy. + mov arg6,#0 mov arg5,#-1 // cater to *BSD for fd of MAP_ANON mov arg4,#MAP_PRIVATE|MAP_ANONYMOUS mov arg3,#PROT_READ|PROT_WRITE|PROT_EXEC @@ -351,21 +327,16 @@ o_super= -18*8 do_sys __NR_mmap64; cmn x0,#4096; bcc 0f; brk #0; 0: str x0,[fp,#p_unmap+0*8] // address to unmap - ldr esi,[fp,#p_mprot] + ldr rsi,[fp,#p_mprot] //mov edi,r0 // edi= dst NOP: edi==r0 ldr ecx,[fp,#o_wfrag] // w_fragment bl movsl // copy the fragment - ldr esi,[fp,#p_uncpr+0*4] // src - ldr ecx,[fp,#p_uncpr+1*4] // len - and tmp,esi,#3 // length of prefix alignment - sub esi,esi,tmp // down to word aligned - add ecx,ecx,tmp // prefix increases byte length - add tmp,tmp,edi // skip prefix at destination - str tmp,[fp,#p_uncpr+0*4] // dst - add ecx,ecx,#7 // round up to full words - lsr ecx,ecx,#3 - bl movsl // copy all aligned words that contain compressed data + ldr rsi,[fp,#p_uncpr] // src + ldr ecx,[fp,#p_uncpr+1*8] // len + str rdi,[fp,#p_uncpr] + add ecx,ecx,#3; lsr ecx,ecx,#2 + bl movsl // copy compressed data mov rdx,rdi // lo(dst) of copied code @@ -377,21 +348,15 @@ o_super= -18*8 str rdi,[fp,#o_unflt] bl movsl_subr // copy unfilter - pop rsi // &supervise - push rdi // &copied + POP1(rsi) // &supervise + PUSH1(rdi) // &copied bl movsl_subr // copy supervisor - mov arg2,rdi // hi(dst) of copied code - mov arg1,rdx // lo(dst) of copied code - mov arg3,#0 - do_sys __ARM_NR_cacheflush + POP1(lr); br lr // goto copied supervisor - pop lr; br lr // goto copied supervisor - -wlen_subr: // edx+= nwords of inline subr at *tmp +wlen_subr: // rdx+= nwords of inline subr at *tmp ldr tmp,[tmpx,#-4] // 'bl ' instruction word bic tmp,tmp,#0xff<<24 // displacment field - add tmp,tmp,#1 // displ omits one word add rdx,rdx,tmpx ret diff --git a/src/stub/tmp/arm64-linux.shlib-init.bin.dump b/src/stub/tmp/arm64-linux.shlib-init.bin.dump index 5a22182e..5ee44e5e 100644 --- a/src/stub/tmp/arm64-linux.shlib-init.bin.dump +++ b/src/stub/tmp/arm64-linux.shlib-init.bin.dump @@ -2,18 +2,18 @@ file format elf64-littleaarch64 Sections: Idx Name Size VMA LMA File off Algn Flags - 0 ELFMAINX 00000024 0000000000000000 0000000000000000 00000040 2**0 CONTENTS, RELOC, READONLY - 1 NRV_HEAD 00000000 0000000000000000 0000000000000000 00000064 2**0 CONTENTS, READONLY - 2 NRV_TAIL 00000000 0000000000000000 0000000000000000 00000064 2**0 CONTENTS, READONLY - 3 NRV2E 00000128 0000000000000000 0000000000000000 00000064 2**0 CONTENTS, READONLY - 4 NRV2D 0000011c 0000000000000000 0000000000000000 0000018c 2**0 CONTENTS, READONLY - 5 NRV2B 000000f0 0000000000000000 0000000000000000 000002a8 2**0 CONTENTS, READONLY - 6 LZMA_ELF00 000000d0 0000000000000000 0000000000000000 00000398 2**0 CONTENTS, RELOC, READONLY - 7 LZMA_DEC20 00000968 0000000000000000 0000000000000000 00000468 2**0 CONTENTS, READONLY - 8 LZMA_DEC10 0000049c 0000000000000000 0000000000000000 00000dd0 2**0 CONTENTS, READONLY - 9 LZMA_DEC30 00000000 0000000000000000 0000000000000000 0000126c 2**0 CONTENTS, READONLY - 10 ELFMAINY 0000003e 0000000000000000 0000000000000000 0000126c 2**0 CONTENTS, READONLY - 11 ELFMAINZ 000002ec 0000000000000000 0000000000000000 000012aa 2**0 CONTENTS, READONLY + 0 ELFMAINX 00000014 0000000000000000 0000000000000000 00000040 2**0 CONTENTS, RELOC, READONLY + 1 NRV_HEAD 00000000 0000000000000000 0000000000000000 00000054 2**0 CONTENTS, READONLY + 2 NRV_TAIL 00000000 0000000000000000 0000000000000000 00000054 2**0 CONTENTS, READONLY + 3 NRV2E 00000128 0000000000000000 0000000000000000 00000054 2**0 CONTENTS, READONLY + 4 NRV2D 0000011c 0000000000000000 0000000000000000 0000017c 2**0 CONTENTS, READONLY + 5 NRV2B 000000f0 0000000000000000 0000000000000000 00000298 2**0 CONTENTS, READONLY + 6 LZMA_ELF00 000000d0 0000000000000000 0000000000000000 00000388 2**0 CONTENTS, RELOC, READONLY + 7 LZMA_DEC20 00000968 0000000000000000 0000000000000000 00000458 2**0 CONTENTS, READONLY + 8 LZMA_DEC10 0000049c 0000000000000000 0000000000000000 00000dc0 2**0 CONTENTS, READONLY + 9 LZMA_DEC30 00000000 0000000000000000 0000000000000000 0000125c 2**0 CONTENTS, READONLY + 10 ELFMAINY 0000003e 0000000000000000 0000000000000000 0000125c 2**0 CONTENTS, READONLY + 11 ELFMAINZ 0000027c 0000000000000000 0000000000000000 0000129a 2**0 CONTENTS, READONLY SYMBOL TABLE: 0000000000000000 l d LZMA_DEC30 0000000000000000 LZMA_DEC30 0000000000000000 l d ELFMAINZ 0000000000000000 ELFMAINZ @@ -36,7 +36,7 @@ SYMBOL TABLE: RELOCATION RECORDS FOR [ELFMAINX]: OFFSET TYPE VALUE -0000000000000020 R_AARCH64_CALL26 ELFMAINZ +0000000000000010 R_AARCH64_CALL26 ELFMAINZ RELOCATION RECORDS FOR [LZMA_ELF00]: OFFSET TYPE VALUE