From 860b5bf96745f0f187f329dbdfda656096f2e0a4 Mon Sep 17 00:00:00 2001 From: John Reiser Date: Wed, 13 Dec 2017 10:53:22 -0800 Subject: [PATCH] MH_EXECUTE diagnose syscall failure modified: stub/src/amd64-darwin.macho-fold.S --- src/stub/amd64-darwin.macho-fold.h | 392 ++++++++++++----------- src/stub/src/amd64-darwin.macho-fold.S | 45 ++- src/stub/tmp/amd64-darwin.macho-fold.map | 72 ++--- 3 files changed, 277 insertions(+), 232 deletions(-) diff --git a/src/stub/amd64-darwin.macho-fold.h b/src/stub/amd64-darwin.macho-fold.h index 2f24fcbc..30eee4b1 100644 --- a/src/stub/amd64-darwin.macho-fold.h +++ b/src/stub/amd64-darwin.macho-fold.h @@ -1,5 +1,5 @@ /* amd64-darwin.macho-fold.h - created from amd64-darwin.macho-fold.bin, 3184 (0xc70) bytes + created from amd64-darwin.macho-fold.bin, 3300 (0xce4) bytes This file is part of the UPX executable compressor. @@ -31,11 +31,11 @@ */ -#define STUB_AMD64_DARWIN_MACHO_FOLD_SIZE 3184 -#define STUB_AMD64_DARWIN_MACHO_FOLD_ADLER32 0x51ccdc24 -#define STUB_AMD64_DARWIN_MACHO_FOLD_CRC32 0xd9360930 +#define STUB_AMD64_DARWIN_MACHO_FOLD_SIZE 3300 +#define STUB_AMD64_DARWIN_MACHO_FOLD_ADLER32 0xacbe06bb +#define STUB_AMD64_DARWIN_MACHO_FOLD_CRC32 0xace91f80 -unsigned char stub_amd64_darwin_macho_fold[3184] = { +unsigned char stub_amd64_darwin_macho_fold[3300] = { /* 0x0000 */ 232, 74, 0, 0, 0,131,249, 73,117, 68, 83, 87, 72,141, 76, 55, /* 0x0010 */ 253, 94, 86, 91,235, 47, 72, 57,206,115, 50, 86, 94,172, 60,128, /* 0x0020 */ 114, 10, 60,143,119, 6,128,126,254, 15,116, 6, 44,232, 60, 1, @@ -43,196 +43,204 @@ unsigned char stub_amd64_darwin_macho_fold[3184] = { /* 0x0040 */ 41,248, 1,216,171, 72, 57,206,115, 3,172,235,223, 91,195, 65, /* 0x0050 */ 89, 76,137,247, 76,137,254, 73,137,228,139, 79, 24,184, 0, 8, /* 0x0060 */ 0, 0, 57,193, 15, 66,200, 73,141, 68, 36, 32, 73,137,232, 72, -/* 0x0070 */ 41,204, 72,137,226, 80,232,208, 9, 0, 0, 72,139, 40, 72,139, +/* 0x0070 */ 41,204, 72,137,226, 80,232, 68, 10, 0, 0, 72,139, 40, 72,139, /* 0x0080 */ 136,128, 0, 0, 0, 76,137,228, 72,137, 76, 36, 24, 95,232, 45, /* 0x0090 */ 0, 0, 0, 95, 94,184, 73, 0, 0, 2,255,229,139, 7, 15,200, /* 0x00a0 */ 137, 7,131,238, 4, 72,141,127, 4,119,241,195,176, 4,235, 2, /* 0x00b0 */ 176, 1,235, 2,176, 74,235, 2,176, 73,235, 2,176,153,235, 2, /* 0x00c0 */ 176, 6,235, 2,176, 5,235, 2,176,197,235, 2,176, 3, 15,182, -/* 0x00d0 */ 192, 13, 0, 0, 0, 2, 73,137,202, 15, 5,115, 4, 72,131,200, -/* 0x00e0 */ 255,195,144,144, 83,137,249, 65,137,208,191, 10, 0, 0, 0, 49, -/* 0x00f0 */ 210,137,200,247,247,131,248, 9,118, 5,107,255, 10,235,240,131, -/* 0x0100 */ 249, 9,118, 47,137,200, 49,210,247,247,186, 10, 0, 0, 0,137, -/* 0x0110 */ 211, 49,210, 65,137,193,137,248, 65, 15,175,193, 41,193,137,248, -/* 0x0120 */ 247,243, 65,141, 81, 48,137,199, 73, 99,192, 65,255,192,136, 20, -/* 0x0130 */ 6,235,204, 91,141, 65, 48, 73, 99,208, 65,255,192,136, 4, 22, -/* 0x0140 */ 68,137,192,195, 73,137,243, 65,137,210,184, 15, 0, 0, 0, 73, -/* 0x0150 */ 185, 0, 0, 0, 0, 0, 0, 0,240, 76,133,207,117, 8, 73,193, -/* 0x0160 */ 233, 4,255,200,117,243, 77,133,201,116, 52, 68,141, 4,133, 0, -/* 0x0170 */ 0, 0, 0, 68,137,193, 72,137,248, 73, 99,242, 72,211,232, 65, -/* 0x0180 */ 255,194,131,224, 15,141, 80, 87,141, 72, 48,131,248, 10, 15, 66, -/* 0x0190 */ 209, 65,131,232, 4, 73,193,233, 4, 65,136, 20, 51,117,212, 68, -/* 0x01a0 */ 137,208,195, 65, 85, 69, 49,237, 65, 84, 69, 49,228, 85, 72,137, -/* 0x01b0 */ 253, 83, 72,129,236,248, 0, 0, 0, 72,137, 84, 36, 80, 15,182, -/* 0x01c0 */ 208, 72,137,116, 36, 72, 72,141, 4,149, 0, 0, 0, 0, 72,141, -/* 0x01d0 */ 21, 75, 0, 0, 0, 72,137, 76, 36, 88, 76,137, 68, 36, 96, 76, -/* 0x01e0 */ 137, 76, 36,104, 72, 41,194, 72,141,132, 36,239, 0, 0, 0,199, -/* 0x01f0 */ 4, 36, 8, 0, 0, 0,199, 68, 36, 4, 48, 0, 0, 0,255,226, -/* 0x0200 */ 15, 41,120,241, 15, 41,112,225, 15, 41,104,209, 15, 41, 96,193, -/* 0x0210 */ 15, 41, 88,177, 15, 41, 80,161, 15, 41, 72,145, 15, 41, 64,129, -/* 0x0220 */ 72,141,132, 36, 32, 1, 0, 0, 72,137, 68, 36, 8, 72,141, 68, -/* 0x0230 */ 36, 64, 72,137, 68, 36, 16, 15,182, 93, 0, 72,255,197,132,219, -/* 0x0240 */ 117, 11, 77,133,237, 15,132,148, 1, 0, 0,235, 20,128,251, 37, -/* 0x0250 */ 116, 10, 77,133,237,117,224, 73,137,237,235,219, 77,133,237,116, -/* 0x0260 */ 34, 73,141,117,255, 72,137,234,191, 2, 0, 0, 0, 76, 41,234, -/* 0x0270 */ 69, 49,237,232, 52,254,255,255, 65, 1,196,132,219, 15,132, 92, -/* 0x0280 */ 1, 0, 0, 15,190, 69, 0, 72,255,197,131,248,112, 15,132,179, -/* 0x0290 */ 0, 0, 0,127, 15,133,192, 15,132, 66, 1, 0, 0,131,248,100, -/* 0x02a0 */ 116, 86,235, 14,131,248,117,116, 23,131,248,120, 15,132,210, 0, -/* 0x02b0 */ 0, 0, 72,141,117,255,186, 1, 0, 0, 0,233, 13, 1, 0, 0, -/* 0x02c0 */ 139, 4, 36, 72,141,116, 36, 32,131,248, 48,115, 15,137,193, 72, -/* 0x02d0 */ 3, 76, 36, 16,131,192, 8,137, 4, 36,235, 14, 72,139, 76, 36, -/* 0x02e0 */ 8, 72,141, 65, 8, 72,137, 68, 36, 8,139, 57, 49,210,232,241, -/* 0x02f0 */ 253,255,255,233,205, 0, 0, 0,139, 4, 36,131,248, 48,115, 15, -/* 0x0300 */ 137,194, 72, 3, 84, 36, 16,131,192, 8,137, 4, 36,235, 14, 72, -/* 0x0310 */ 139, 84, 36, 8, 72,141, 66, 8, 72,137, 68, 36, 8,139, 58, 49, -/* 0x0320 */ 210, 72,141, 92, 36, 32,133,255,121, 9,247,223,198, 68, 36, 32, -/* 0x0330 */ 45,178, 1, 72,137,222,232,169,253,255,255, 72,137,222, 72, 99, -/* 0x0340 */ 208,233,135, 0, 0, 0,139, 4, 36,198, 68, 36, 32, 48, 72,141, -/* 0x0350 */ 116, 36, 32,198, 68, 36, 33,120,131,248, 48,115, 15,137,193, 72, -/* 0x0360 */ 3, 76, 36, 16,131,192, 8,137, 4, 36,235, 14, 72,139, 76, 36, -/* 0x0370 */ 8, 72,141, 65, 8, 72,137, 68, 36, 8, 72,139, 57,186, 2, 0, -/* 0x0380 */ 0, 0,235, 60,139, 4, 36,198, 68, 36, 32, 48, 72,141,116, 36, -/* 0x0390 */ 32,198, 68, 36, 33,120,131,248, 48,115, 15,137,194, 72, 3, 84, -/* 0x03a0 */ 36, 16,131,192, 8,137, 4, 36,235, 14, 72,139, 84, 36, 8, 72, -/* 0x03b0 */ 141, 66, 8, 72,137, 68, 36, 8, 72, 99, 58,186, 2, 0, 0, 0, -/* 0x03c0 */ 232,127,253,255,255, 72,141,116, 36, 32, 72, 99,208,191, 2, 0, -/* 0x03d0 */ 0, 0,232,213,252,255,255, 65, 1,196,233, 88,254,255,255, 72, -/* 0x03e0 */ 129,196,248, 0, 0, 0, 68,137,224, 91, 93, 65, 92, 65, 93,195, -/* 0x03f0 */ 65, 85, 73,137,209, 73,137,240, 49,192, 65, 84, 73,137,244, 85, -/* 0x0400 */ 72,137,213, 83, 72,137,251, 72,137,222, 81, 76,139,111, 8, 72, -/* 0x0410 */ 139, 19,232, 23, 0, 0, 0,120,114,101, 97,100, 32, 37,112, 40, -/* 0x0420 */ 37,120, 32, 37,112, 41, 32, 37,112, 32, 37,120, 10, 0, 95, 76, -/* 0x0430 */ 137,233,232,108,253,255,255, 72,139, 19, 72, 57,234,115, 63, 72, -/* 0x0440 */ 139, 75, 8, 73,137,233, 77,137,224, 72,137,222, 49,192,232, 27, -/* 0x0450 */ 0, 0, 0,120,114,101, 97,100,102, 97,105,108, 32, 37,112, 40, -/* 0x0460 */ 37,120, 32, 37,112, 41, 32, 37,112, 32, 37,120, 10, 0, 95,232, -/* 0x0470 */ 47,253,255,255,191,127, 0, 0, 0,232, 50,252,255,255, 72,141, -/* 0x0480 */ 85,255, 72,131,250,255,116, 20, 65, 15,182, 69, 0, 72,255,202, -/* 0x0490 */ 73,255,197, 65,136, 4, 36, 73,255,196,235,230, 72, 1,107, 8, -/* 0x04a0 */ 72, 41, 43, 88, 91, 93, 65, 92, 65, 93,195, 65, 85, 73,137,213, -/* 0x04b0 */ 73,137,240, 49,192, 65, 84, 73,137,204, 85, 72,137,253,232, 49, -/* 0x04c0 */ 0, 0, 0,117,110,112, 97, 99,107, 69,120,116,101,110,116, 32, -/* 0x04d0 */ 105,110, 61, 37,112, 40, 37,120, 32, 37,112, 41, 32, 32,111,117, -/* 0x04e0 */ 116, 61, 37,112, 40, 37,120, 32, 37,112, 41, 32, 32, 37,112, 32, -/* 0x04f0 */ 37,112, 10, 0, 95, 83, 72,137,243, 72,131,236, 48, 72,139, 77, -/* 0x0500 */ 8, 65, 84, 82,255,118, 8, 76,139, 14, 72,139, 85, 0, 72,137, -/* 0x0510 */ 238,232,141,252,255,255, 72,131,196, 32, 72,131, 59, 0, 15,132, -/* 0x0520 */ 14, 1, 0, 0, 72,141,116, 36, 16,186, 12, 0, 0, 0, 72,137, -/* 0x0530 */ 239,232,186,254,255,255,139, 84, 36, 16,139,116, 36, 20,133,210, -/* 0x0540 */ 117, 21,129,254, 85, 80, 88, 33,117, 17, 72,131,125, 0, 0, 15, -/* 0x0550 */ 132,221, 0, 0, 0,235, 4,133,246,117, 10,191,127, 0, 0, 0, -/* 0x0560 */ 232, 75,251,255,255, 57,214,119, 7,137,208, 72, 59, 3,118, 53, -/* 0x0570 */ 72,139, 11, 49,192,232, 35, 0, 0, 0,115,122, 95, 99,112,114, -/* 0x0580 */ 61, 37,120, 32, 32,115,122, 95,117,110, 99, 61, 37,120, 32, 32, -/* 0x0590 */ 120,111, 45, 62,115,105,122,101, 61, 37,120, 10, 0, 95,232, 0, -/* 0x05a0 */ 252,255,255,235,182, 57,214, 76,139, 75, 8,115, 95, 68, 15,182, -/* 0x05b0 */ 68, 36, 24, 72,137, 68, 36, 8, 72,141, 76, 36, 8, 72,139,125, -/* 0x05c0 */ 8, 76,137,202, 65,255,213,133,192,117,144,139, 68, 36, 16, 72, -/* 0x05d0 */ 139,116, 36, 8, 72, 57,198,117,130, 15,182, 76, 36, 25,132,201, -/* 0x05e0 */ 15,149,194, 49,192, 77,133,228, 15,149,192,133,194,116, 15, 15, -/* 0x05f0 */ 182, 84, 36, 26, 15,182,201, 72,139,123, 8, 65,255,212,139, 68, -/* 0x0600 */ 36, 20, 72, 1, 69, 8, 72, 41, 69, 0,235, 13,137,242, 72,137, -/* 0x0610 */ 239, 76,137,206,232,215,253,255,255,139, 84, 36, 16, 72,139, 3, -/* 0x0620 */ 72, 1, 83, 8, 72, 41,208, 72,133,192, 72,137, 3,233,236,254, -/* 0x0630 */ 255,255, 72,131,196, 40, 91, 93, 65, 92, 65, 93,195, 65, 87, 65, -/* 0x0640 */ 86, 65, 85, 73,137,253, 73,131,197, 32, 65, 84, 85, 83, 72,131, -/* 0x0650 */ 196,128, 72,139,132, 36,184, 0, 0, 0, 72,137, 84, 36, 80, 49, -/* 0x0660 */ 210, 72,137,124, 36, 96,137,116, 36, 92,232, 49, 0, 0, 0,100, -/* 0x0670 */ 111, 95,120,109, 97,112, 32, 32,102,100,105, 61, 37,120, 32, 32, -/* 0x0680 */ 109,104,100,114, 61, 37,112, 32, 32,120,105, 61, 37,112, 40, 37, -/* 0x0690 */ 120, 32, 37,112, 41, 32,102, 95,117,110,102, 61, 37,112, 10, 0, -/* 0x06a0 */ 95, 72,137, 68, 36, 48, 49,192, 72,131,124, 36, 80, 0,137, 76, -/* 0x06b0 */ 36, 76, 76,137, 68, 36, 64, 76,137, 76, 36, 56, 72,199, 68, 36, -/* 0x06c0 */ 40, 0, 0, 0, 0, 72,199, 68, 36, 32, 0, 0, 0, 0,116, 12, -/* 0x06d0 */ 72,139, 76, 36, 80, 72,139, 81, 8, 72,139, 1,255,116, 36, 48, -/* 0x06e0 */ 73,137,209, 72,139, 76, 36, 88, 72,139, 84, 36,104,139,116, 36, -/* 0x06f0 */ 84, 73,137,192, 49,192,232,168,250,255,255, 65, 88, 65, 89, 49, -/* 0x0700 */ 210, 72,139, 68, 36, 88,199, 68, 36, 20, 0, 0, 0, 0, 59, 80, -/* 0x0710 */ 16, 15,131, 32, 3, 0, 0, 65,139, 69, 0,131,248, 25, 15,133, -/* 0x0720 */ 202, 2, 0, 0, 73,139, 77, 32, 72,133,201, 15,132,189, 2, 0, -/* 0x0730 */ 0, 73,139, 85, 48, 72,139,124, 36, 24, 72,137, 84, 36, 96, 73, -/* 0x0740 */ 3,125, 24, 73,137,215, 72,137,251, 72,137,253, 72,141, 12, 15, -/* 0x0750 */ 129,227,255, 15, 0, 0, 72,137,124, 36,104, 72, 41,221, 73, 1, -/* 0x0760 */ 223, 72,137, 76, 36, 8, 15,132, 28, 1, 0, 0, 72,131,124, 36, -/* 0x0770 */ 72, 0, 73,141, 71, 3, 72,139, 76, 36, 56, 73, 15, 68,199, 72, -/* 0x0780 */ 137, 4, 36, 72,139, 1, 72,131,248, 1, 25,192,131,224,240, 72, -/* 0x0790 */ 131,124, 36, 72, 0, 68,141,112, 18,117, 5, 72,133,210,117, 7, -/* 0x07a0 */ 65,129,206, 0, 16, 0, 0,131,203,255, 73,131,125, 48, 0, 68, -/* 0x07b0 */ 139,100, 36, 84, 15, 69, 92, 36, 68, 69, 3,101, 40, 69,137,240, -/* 0x07c0 */ 255,116, 36, 24,185, 3, 0, 0, 0, 72,137,238, 49,192,232, 67, -/* 0x07d0 */ 0, 0, 0,109,109, 97,112, 32, 32, 97,100,100,114, 61, 37,112, -/* 0x07e0 */ 32, 32,108,101,110, 61, 37,112, 32, 32,112,114,111,116, 61, 37, -/* 0x07f0 */ 120, 32, 32,102,108, 97,103,115, 61, 37,120, 32, 32,102,100, 61, -/* 0x0800 */ 37,100, 32, 32,111,102,102, 61, 37,112, 32, 32,114,101,108,111, -/* 0x0810 */ 99, 61, 37,112, 10, 0, 95, 65, 84, 72,139, 84, 36, 16, 65,137, -/* 0x0820 */ 217,232,125,249,255,255, 94, 95, 69,137,225, 65,137,216, 68,137, -/* 0x0830 */ 241,186, 3, 0, 0, 0, 72,137,239, 72,139, 52, 36,232,134,248, -/* 0x0840 */ 255,255, 72,137,198, 72,139, 68, 36, 56, 72,131, 56, 0,117, 11, -/* 0x0850 */ 72,137,245, 72,137, 48, 72,137,116, 36, 24, 72, 57,245,116, 40, -/* 0x0860 */ 72,137,234, 49,192,232, 19, 0, 0, 0,109, 97,100,100,114, 61, -/* 0x0870 */ 37,112, 32, 32, 97,100,100,114, 61, 37,112, 10, 0, 95,232, 32, -/* 0x0880 */ 249,255,255,233,250, 0, 0, 0, 72,131,124, 36, 72, 0,116, 47, -/* 0x0890 */ 73,131,125, 48, 0,116, 40, 73,131,125, 40, 0,117, 8, 72,139, -/* 0x08a0 */ 84, 36, 56, 72,137, 42, 72,139, 76, 36, 40, 72,139, 84, 36, 48, -/* 0x08b0 */ 72,141,116, 36, 96, 72,139,124, 36, 72,232,236,251,255,255, 72, -/* 0x08c0 */ 139, 76, 36, 56, 72,131, 57, 0, 15,149,194, 49,192, 77,133,255, -/* 0x08d0 */ 15,149,192,133,194,116,111, 73,131,125, 40, 0,117,104, 65,131, -/* 0x08e0 */ 125, 64, 0,116, 97, 76,137,233, 72, 43, 76, 36, 88, 73,137,232, -/* 0x08f0 */ 49,192,232, 37, 0, 0, 0,104, 97,116, 99,104, 61, 37,112, 32, -/* 0x0900 */ 32,115,101, 99,112, 61, 37,112, 32, 32,115,101,103,112, 61, 37, -/* 0x0910 */ 112, 32, 32,109,104,100,114, 61, 37,112, 10, 0, 95, 72,141, 76, -/* 0x0920 */ 13, 0, 72,141, 81, 72,139, 90, 48, 72,141, 92, 29, 0, 76,141, -/* 0x0930 */ 99,252, 76,137,230,232,105,248,255,255,199, 67,252,144, 15, 5, -/* 0x0940 */ 195, 76,137,100, 36, 32, 76,137,251, 74,141, 84, 61, 0, 72,247, -/* 0x0950 */ 219,129,227,255, 15, 0, 0, 72,137,216, 72,133,219,116, 11,198, -/* 0x0960 */ 2, 0, 72,255,194, 72,255,200,235,243, 77,133,255,116, 29, 65, -/* 0x0970 */ 139, 85, 60, 76,137,254, 72,137,239,232, 54,247,255,255,133,192, -/* 0x0980 */ 116, 10,191,127, 0, 0, 0,232, 36,247,255,255, 73,141, 4, 31, -/* 0x0990 */ 72, 1,197, 72, 59,108, 36, 8,115, 46, 72,133,237,116,124, 72, -/* 0x09a0 */ 41,108, 36, 8, 65,139, 85, 60, 69, 49,201, 72,139,116, 36, 8, -/* 0x09b0 */ 65,131,200,255,185, 18, 16, 0, 0, 72,137,239,232, 7,247,255, -/* 0x09c0 */ 255, 72, 57,197,116, 85,235,186, 72,131,124, 36, 72, 0,116, 75, -/* 0x09d0 */ 73,131,199, 3, 65,129,231,255, 15, 0, 0, 73,131,255, 3,119, -/* 0x09e0 */ 58, 76,137,254, 72,137,239,232,204,246,255,255,235, 45,131,232, -/* 0x09f0 */ 4,131,248, 1,119, 37, 72,184, 4, 0, 0, 0, 42, 0, 0, 0, -/* 0x0a00 */ 73, 57, 69, 8,117, 21, 72,139, 68, 36, 24, 73, 1,133,144, 0, -/* 0x0a10 */ 0, 0, 73,141, 85, 16, 72,137, 84, 36, 32, 65,139, 69, 4, 72, -/* 0x0a20 */ 139, 76, 36, 88,255, 68, 36, 20, 73, 1,197,139, 68, 36, 20, 59, -/* 0x0a30 */ 65, 16,233,218,252,255,255, 72,139, 68, 36, 32, 72,131,196,120, -/* 0x0a40 */ 91, 93, 65, 92, 65, 93, 65, 94, 65, 95,195, 65, 87, 77,137,207, -/* 0x0a50 */ 65, 86, 65, 85, 77,137,197, 65, 84, 85, 72,137,213, 72,141, 87, -/* 0x0a60 */ 24, 83, 72,131,236,104, 68,139, 79, 24, 72,137,116, 36, 88, 72, -/* 0x0a70 */ 139, 68, 36, 88, 76,141,116, 36, 48, 76,139,164, 36,160, 0, 0, -/* 0x0a80 */ 0, 72,137, 76, 36, 16, 76,137,249, 72,137, 84, 36, 72, 72,137, -/* 0x0a90 */ 84, 36, 40, 77,137,240, 72,131,232, 24, 76,137, 76, 36, 48, 72, -/* 0x0aa0 */ 139,116, 36, 88, 72,137, 68, 36, 64, 72,137, 68, 36, 32, 72,199, -/* 0x0ab0 */ 68, 36, 8, 0, 0, 0, 0,199, 68, 36, 4, 0, 0, 0, 0, 72, -/* 0x0ac0 */ 137,108, 36, 56, 65,255, 52, 36,232, 88, 0, 0, 0,117,112,120, -/* 0x0ad0 */ 95,109, 97,105,110, 32,115,122, 99, 61, 37,120, 32, 32,102, 95, -/* 0x0ae0 */ 100,101, 99, 61, 37,112, 32, 32,102, 95,117,110,102, 61, 37,112, -/* 0x0af0 */ 32, 32, 32, 32,120,111, 61, 37,112, 40, 37,120, 32, 37,112, 41, -/* 0x0b00 */ 32, 32,120,105, 61, 37,112, 40, 37,120, 32, 37,112, 41, 32, 32, -/* 0x0b10 */ 109,104,100,114,112,112, 61, 37,112, 32, 32,109,104,100,114,112, -/* 0x0b20 */ 61, 37,112, 10, 0, 95, 65, 84, 82, 76,137,234, 80, 49,192, 72, -/* 0x0b30 */ 141, 92, 36, 96, 83, 85,232,104,246,255,255, 72,131,196, 48, 76, -/* 0x0b40 */ 137,234, 76,137,246, 49,201, 72,137,223,232, 92,249,255,255, 80, -/* 0x0b50 */ 77,137,233, 77,137,224,131,201,255, 49,246, 72,137,239, 72,141, -/* 0x0b60 */ 84, 36, 40, 65, 87,232,211,250,255,255, 65, 92, 65, 94,139,117, -/* 0x0b70 */ 16, 72,141, 85, 32, 73,137,197, 49,201, 57,241, 15,131,218, 0, -/* 0x0b80 */ 0, 0,131, 58, 14, 15,133,196, 0, 0, 0,139,122, 8, 49,246, -/* 0x0b90 */ 49,192, 72,141, 60, 58, 49,210,232, 39,245,255,255,133,192, 65, -/* 0x0ba0 */ 137,196,120, 27,139, 76, 36, 4, 72,139, 84, 36, 16, 72,137,238, -/* 0x0bb0 */ 68,137,231,232, 4,245,255,255, 72, 57, 68, 36, 16,116, 19,191, -/* 0x0bc0 */ 127, 0, 0, 0,232,231,244,255,255,139, 91, 8,137, 92, 36, 4, -/* 0x0bd0 */ 235,210,139, 69, 0, 61,202,254,186,190,116, 7, 61,190,186,254, -/* 0x0be0 */ 202,117, 49, 72, 15,182,117, 7, 72,137,239, 72,141, 93, 8, 72, -/* 0x0bf0 */ 107,246, 20,131,198, 8,232,161,244,255,255,139, 69, 4, 49,201, -/* 0x0c00 */ 57,193,115, 16,129, 59, 7, 0, 0, 1,116,189,255,193, 72,131, -/* 0x0c10 */ 195, 20,235,236, 72,199, 68, 36, 24, 0, 0, 0, 0, 83, 69, 49, -/* 0x0c20 */ 201, 68,137,225, 49,210,106, 0,139,116, 36, 20, 72,137,239, 76, -/* 0x0c30 */ 141, 68, 36, 40,232, 4,250,255,255, 68,137,231, 76,137, 40, 72, -/* 0x0c40 */ 137, 68, 36, 24,232,119,244,255,255, 65, 90, 65, 91,235, 13,139, -/* 0x0c50 */ 66, 4,255,193, 72, 1,194,233, 30,255,255,255, 72,139, 68, 36, -/* 0x0c60 */ 8, 72,131,196,104, 91, 93, 65, 92, 65, 93, 65, 94, 65, 95,195 +/* 0x00d0 */ 192, 80, 13, 0, 0, 0, 2, 73,137,202, 15, 5,114, 2, 89,195, +/* 0x00e0 */ 72,137,194, 88, 87, 86, 82, 72,131,236,112, 72,137,231,232, 49, +/* 0x00f0 */ 0, 0, 0,176, 61,170, 72,139, 68, 36,112,232, 36, 0, 0, 0, +/* 0x0100 */ 176, 10,170, 72,137,250, 72, 41,226, 72,137,230,191, 2, 0, 0, +/* 0x0110 */ 0,184, 4, 0, 0, 2, 15, 5, 72,131,196,112, 89, 94, 95, 72, +/* 0x0120 */ 131,200,255,195, 72,141, 53, 28, 0, 0, 0, 72,137,194,185, 16, +/* 0x0130 */ 0, 0, 0, 72,193,194, 4,137,208,131,224, 15, 15,182, 4, 6, +/* 0x0140 */ 170,131,233, 1,117,237,195, 48, 49, 50, 51, 52, 53, 54, 55, 56, +/* 0x0150 */ 57, 97, 98, 99,100,101,102,144, 83,137,249, 65,137,208,191, 10, +/* 0x0160 */ 0, 0, 0, 49,210,137,200,247,247,131,248, 9,118, 5,107,255, +/* 0x0170 */ 10,235,240,131,249, 9,118, 47,137,200, 49,210,247,247,186, 10, +/* 0x0180 */ 0, 0, 0,137,211, 49,210, 65,137,193,137,248, 65, 15,175,193, +/* 0x0190 */ 41,193,137,248,247,243, 65,141, 81, 48,137,199, 73, 99,192, 65, +/* 0x01a0 */ 255,192,136, 20, 6,235,204, 91,141, 65, 48, 73, 99,208, 65,255, +/* 0x01b0 */ 192,136, 4, 22, 68,137,192,195, 73,137,243, 65,137,210,184, 15, +/* 0x01c0 */ 0, 0, 0, 73,185, 0, 0, 0, 0, 0, 0, 0,240, 76,133,207, +/* 0x01d0 */ 117, 8, 73,193,233, 4,255,200,117,243, 77,133,201,116, 52, 68, +/* 0x01e0 */ 141, 4,133, 0, 0, 0, 0, 68,137,193, 72,137,248, 73, 99,242, +/* 0x01f0 */ 72,211,232, 65,255,194,131,224, 15,141, 80, 87,141, 72, 48,131, +/* 0x0200 */ 248, 10, 15, 66,209, 65,131,232, 4, 73,193,233, 4, 65,136, 20, +/* 0x0210 */ 51,117,212, 68,137,208,195, 65, 85, 69, 49,237, 65, 84, 69, 49, +/* 0x0220 */ 228, 85, 72,137,253, 83, 72,129,236,248, 0, 0, 0, 72,137, 84, +/* 0x0230 */ 36, 80, 15,182,208, 72,137,116, 36, 72, 72,141, 4,149, 0, 0, +/* 0x0240 */ 0, 0, 72,141, 21, 75, 0, 0, 0, 72,137, 76, 36, 88, 76,137, +/* 0x0250 */ 68, 36, 96, 76,137, 76, 36,104, 72, 41,194, 72,141,132, 36,239, +/* 0x0260 */ 0, 0, 0,199, 4, 36, 8, 0, 0, 0,199, 68, 36, 4, 48, 0, +/* 0x0270 */ 0, 0,255,226, 15, 41,120,241, 15, 41,112,225, 15, 41,104,209, +/* 0x0280 */ 15, 41, 96,193, 15, 41, 88,177, 15, 41, 80,161, 15, 41, 72,145, +/* 0x0290 */ 15, 41, 64,129, 72,141,132, 36, 32, 1, 0, 0, 72,137, 68, 36, +/* 0x02a0 */ 8, 72,141, 68, 36, 64, 72,137, 68, 36, 16, 15,182, 93, 0, 72, +/* 0x02b0 */ 255,197,132,219,117, 11, 77,133,237, 15,132,148, 1, 0, 0,235, +/* 0x02c0 */ 20,128,251, 37,116, 10, 77,133,237,117,224, 73,137,237,235,219, +/* 0x02d0 */ 77,133,237,116, 34, 73,141,117,255, 72,137,234,191, 2, 0, 0, +/* 0x02e0 */ 0, 76, 41,234, 69, 49,237,232,192,253,255,255, 65, 1,196,132, +/* 0x02f0 */ 219, 15,132, 92, 1, 0, 0, 15,190, 69, 0, 72,255,197,131,248, +/* 0x0300 */ 112, 15,132,179, 0, 0, 0,127, 15,133,192, 15,132, 66, 1, 0, +/* 0x0310 */ 0,131,248,100,116, 86,235, 14,131,248,117,116, 23,131,248,120, +/* 0x0320 */ 15,132,210, 0, 0, 0, 72,141,117,255,186, 1, 0, 0, 0,233, +/* 0x0330 */ 13, 1, 0, 0,139, 4, 36, 72,141,116, 36, 32,131,248, 48,115, +/* 0x0340 */ 15,137,193, 72, 3, 76, 36, 16,131,192, 8,137, 4, 36,235, 14, +/* 0x0350 */ 72,139, 76, 36, 8, 72,141, 65, 8, 72,137, 68, 36, 8,139, 57, +/* 0x0360 */ 49,210,232,241,253,255,255,233,205, 0, 0, 0,139, 4, 36,131, +/* 0x0370 */ 248, 48,115, 15,137,194, 72, 3, 84, 36, 16,131,192, 8,137, 4, +/* 0x0380 */ 36,235, 14, 72,139, 84, 36, 8, 72,141, 66, 8, 72,137, 68, 36, +/* 0x0390 */ 8,139, 58, 49,210, 72,141, 92, 36, 32,133,255,121, 9,247,223, +/* 0x03a0 */ 198, 68, 36, 32, 45,178, 1, 72,137,222,232,169,253,255,255, 72, +/* 0x03b0 */ 137,222, 72, 99,208,233,135, 0, 0, 0,139, 4, 36,198, 68, 36, +/* 0x03c0 */ 32, 48, 72,141,116, 36, 32,198, 68, 36, 33,120,131,248, 48,115, +/* 0x03d0 */ 15,137,193, 72, 3, 76, 36, 16,131,192, 8,137, 4, 36,235, 14, +/* 0x03e0 */ 72,139, 76, 36, 8, 72,141, 65, 8, 72,137, 68, 36, 8, 72,139, +/* 0x03f0 */ 57,186, 2, 0, 0, 0,235, 60,139, 4, 36,198, 68, 36, 32, 48, +/* 0x0400 */ 72,141,116, 36, 32,198, 68, 36, 33,120,131,248, 48,115, 15,137, +/* 0x0410 */ 194, 72, 3, 84, 36, 16,131,192, 8,137, 4, 36,235, 14, 72,139, +/* 0x0420 */ 84, 36, 8, 72,141, 66, 8, 72,137, 68, 36, 8, 72, 99, 58,186, +/* 0x0430 */ 2, 0, 0, 0,232,127,253,255,255, 72,141,116, 36, 32, 72, 99, +/* 0x0440 */ 208,191, 2, 0, 0, 0,232, 97,252,255,255, 65, 1,196,233, 88, +/* 0x0450 */ 254,255,255, 72,129,196,248, 0, 0, 0, 68,137,224, 91, 93, 65, +/* 0x0460 */ 92, 65, 93,195, 65, 85, 73,137,209, 73,137,240, 49,192, 65, 84, +/* 0x0470 */ 73,137,244, 85, 72,137,213, 83, 72,137,251, 72,137,222, 81, 76, +/* 0x0480 */ 139,111, 8, 72,139, 19,232, 23, 0, 0, 0,120,114,101, 97,100, +/* 0x0490 */ 32, 37,112, 40, 37,120, 32, 37,112, 41, 32, 37,112, 32, 37,120, +/* 0x04a0 */ 10, 0, 95, 76,137,233,232,108,253,255,255, 72,139, 19, 72, 57, +/* 0x04b0 */ 234,115, 63, 72,139, 75, 8, 73,137,233, 77,137,224, 72,137,222, +/* 0x04c0 */ 49,192,232, 27, 0, 0, 0,120,114,101, 97,100,102, 97,105,108, +/* 0x04d0 */ 32, 37,112, 40, 37,120, 32, 37,112, 41, 32, 37,112, 32, 37,120, +/* 0x04e0 */ 10, 0, 95,232, 47,253,255,255,191,127, 0, 0, 0,232,190,251, +/* 0x04f0 */ 255,255, 72,141, 85,255, 72,131,250,255,116, 20, 65, 15,182, 69, +/* 0x0500 */ 0, 72,255,202, 73,255,197, 65,136, 4, 36, 73,255,196,235,230, +/* 0x0510 */ 72, 1,107, 8, 72, 41, 43, 88, 91, 93, 65, 92, 65, 93,195, 65, +/* 0x0520 */ 85, 73,137,213, 73,137,240, 49,192, 65, 84, 73,137,204, 85, 72, +/* 0x0530 */ 137,253,232, 49, 0, 0, 0,117,110,112, 97, 99,107, 69,120,116, +/* 0x0540 */ 101,110,116, 32,105,110, 61, 37,112, 40, 37,120, 32, 37,112, 41, +/* 0x0550 */ 32, 32,111,117,116, 61, 37,112, 40, 37,120, 32, 37,112, 41, 32, +/* 0x0560 */ 32, 37,112, 32, 37,112, 10, 0, 95, 83, 72,137,243, 72,131,236, +/* 0x0570 */ 48, 72,139, 77, 8, 65, 84, 82,255,118, 8, 76,139, 14, 72,139, +/* 0x0580 */ 85, 0, 72,137,238,232,141,252,255,255, 72,131,196, 32, 72,131, +/* 0x0590 */ 59, 0, 15,132, 14, 1, 0, 0, 72,141,116, 36, 16,186, 12, 0, +/* 0x05a0 */ 0, 0, 72,137,239,232,186,254,255,255,139, 84, 36, 16,139,116, +/* 0x05b0 */ 36, 20,133,210,117, 21,129,254, 85, 80, 88, 33,117, 17, 72,131, +/* 0x05c0 */ 125, 0, 0, 15,132,221, 0, 0, 0,235, 4,133,246,117, 10,191, +/* 0x05d0 */ 127, 0, 0, 0,232,215,250,255,255, 57,214,119, 7,137,208, 72, +/* 0x05e0 */ 59, 3,118, 53, 72,139, 11, 49,192,232, 35, 0, 0, 0,115,122, +/* 0x05f0 */ 95, 99,112,114, 61, 37,120, 32, 32,115,122, 95,117,110, 99, 61, +/* 0x0600 */ 37,120, 32, 32,120,111, 45, 62,115,105,122,101, 61, 37,120, 10, +/* 0x0610 */ 0, 95,232, 0,252,255,255,235,182, 57,214, 76,139, 75, 8,115, +/* 0x0620 */ 95, 68, 15,182, 68, 36, 24, 72,137, 68, 36, 8, 72,141, 76, 36, +/* 0x0630 */ 8, 72,139,125, 8, 76,137,202, 65,255,213,133,192,117,144,139, +/* 0x0640 */ 68, 36, 16, 72,139,116, 36, 8, 72, 57,198,117,130, 15,182, 76, +/* 0x0650 */ 36, 25,132,201, 15,149,194, 49,192, 77,133,228, 15,149,192,133, +/* 0x0660 */ 194,116, 15, 15,182, 84, 36, 26, 15,182,201, 72,139,123, 8, 65, +/* 0x0670 */ 255,212,139, 68, 36, 20, 72, 1, 69, 8, 72, 41, 69, 0,235, 13, +/* 0x0680 */ 137,242, 72,137,239, 76,137,206,232,215,253,255,255,139, 84, 36, +/* 0x0690 */ 16, 72,139, 3, 72, 1, 83, 8, 72, 41,208, 72,133,192, 72,137, +/* 0x06a0 */ 3,233,236,254,255,255, 72,131,196, 40, 91, 93, 65, 92, 65, 93, +/* 0x06b0 */ 195, 65, 87, 65, 86, 65, 85, 73,137,253, 73,131,197, 32, 65, 84, +/* 0x06c0 */ 85, 83, 72,131,196,128, 72,139,132, 36,184, 0, 0, 0, 72,137, +/* 0x06d0 */ 84, 36, 80, 49,210, 72,137,124, 36, 96,137,116, 36, 92,232, 49, +/* 0x06e0 */ 0, 0, 0,100,111, 95,120,109, 97,112, 32, 32,102,100,105, 61, +/* 0x06f0 */ 37,120, 32, 32,109,104,100,114, 61, 37,112, 32, 32,120,105, 61, +/* 0x0700 */ 37,112, 40, 37,120, 32, 37,112, 41, 32,102, 95,117,110,102, 61, +/* 0x0710 */ 37,112, 10, 0, 95, 72,137, 68, 36, 48, 49,192, 72,131,124, 36, +/* 0x0720 */ 80, 0,137, 76, 36, 76, 76,137, 68, 36, 64, 76,137, 76, 36, 56, +/* 0x0730 */ 72,199, 68, 36, 40, 0, 0, 0, 0, 72,199, 68, 36, 32, 0, 0, +/* 0x0740 */ 0, 0,116, 12, 72,139, 76, 36, 80, 72,139, 81, 8, 72,139, 1, +/* 0x0750 */ 255,116, 36, 48, 73,137,209, 72,139, 76, 36, 88, 72,139, 84, 36, +/* 0x0760 */ 104,139,116, 36, 84, 73,137,192, 49,192,232,168,250,255,255, 65, +/* 0x0770 */ 88, 65, 89, 49,210, 72,139, 68, 36, 88,199, 68, 36, 20, 0, 0, +/* 0x0780 */ 0, 0, 59, 80, 16, 15,131, 32, 3, 0, 0, 65,139, 69, 0,131, +/* 0x0790 */ 248, 25, 15,133,202, 2, 0, 0, 73,139, 77, 32, 72,133,201, 15, +/* 0x07a0 */ 132,189, 2, 0, 0, 73,139, 85, 48, 72,139,124, 36, 24, 72,137, +/* 0x07b0 */ 84, 36, 96, 73, 3,125, 24, 73,137,215, 72,137,251, 72,137,253, +/* 0x07c0 */ 72,141, 12, 15,129,227,255, 15, 0, 0, 72,137,124, 36,104, 72, +/* 0x07d0 */ 41,221, 73, 1,223, 72,137, 76, 36, 8, 15,132, 28, 1, 0, 0, +/* 0x07e0 */ 72,131,124, 36, 72, 0, 73,141, 71, 3, 72,139, 76, 36, 56, 73, +/* 0x07f0 */ 15, 68,199, 72,137, 4, 36, 72,139, 1, 72,131,248, 1, 25,192, +/* 0x0800 */ 131,224,240, 72,131,124, 36, 72, 0, 68,141,112, 18,117, 5, 72, +/* 0x0810 */ 133,210,117, 7, 65,129,206, 0, 16, 0, 0,131,203,255, 73,131, +/* 0x0820 */ 125, 48, 0, 68,139,100, 36, 84, 15, 69, 92, 36, 68, 69, 3,101, +/* 0x0830 */ 40, 69,137,240,255,116, 36, 24,185, 3, 0, 0, 0, 72,137,238, +/* 0x0840 */ 49,192,232, 67, 0, 0, 0,109,109, 97,112, 32, 32, 97,100,100, +/* 0x0850 */ 114, 61, 37,112, 32, 32,108,101,110, 61, 37,112, 32, 32,112,114, +/* 0x0860 */ 111,116, 61, 37,120, 32, 32,102,108, 97,103,115, 61, 37,120, 32, +/* 0x0870 */ 32,102,100, 61, 37,100, 32, 32,111,102,102, 61, 37,112, 32, 32, +/* 0x0880 */ 114,101,108,111, 99, 61, 37,112, 10, 0, 95, 65, 84, 72,139, 84, +/* 0x0890 */ 36, 16, 65,137,217,232,125,249,255,255, 94, 95, 69,137,225, 65, +/* 0x08a0 */ 137,216, 68,137,241,186, 3, 0, 0, 0, 72,137,239, 72,139, 52, +/* 0x08b0 */ 36,232, 18,248,255,255, 72,137,198, 72,139, 68, 36, 56, 72,131, +/* 0x08c0 */ 56, 0,117, 11, 72,137,245, 72,137, 48, 72,137,116, 36, 24, 72, +/* 0x08d0 */ 57,245,116, 40, 72,137,234, 49,192,232, 19, 0, 0, 0,109, 97, +/* 0x08e0 */ 100,100,114, 61, 37,112, 32, 32, 97,100,100,114, 61, 37,112, 10, +/* 0x08f0 */ 0, 95,232, 32,249,255,255,233,250, 0, 0, 0, 72,131,124, 36, +/* 0x0900 */ 72, 0,116, 47, 73,131,125, 48, 0,116, 40, 73,131,125, 40, 0, +/* 0x0910 */ 117, 8, 72,139, 84, 36, 56, 72,137, 42, 72,139, 76, 36, 40, 72, +/* 0x0920 */ 139, 84, 36, 48, 72,141,116, 36, 96, 72,139,124, 36, 72,232,236, +/* 0x0930 */ 251,255,255, 72,139, 76, 36, 56, 72,131, 57, 0, 15,149,194, 49, +/* 0x0940 */ 192, 77,133,255, 15,149,192,133,194,116,111, 73,131,125, 40, 0, +/* 0x0950 */ 117,104, 65,131,125, 64, 0,116, 97, 76,137,233, 72, 43, 76, 36, +/* 0x0960 */ 88, 73,137,232, 49,192,232, 37, 0, 0, 0,104, 97,116, 99,104, +/* 0x0970 */ 61, 37,112, 32, 32,115,101, 99,112, 61, 37,112, 32, 32,115,101, +/* 0x0980 */ 103,112, 61, 37,112, 32, 32,109,104,100,114, 61, 37,112, 10, 0, +/* 0x0990 */ 95, 72,141, 76, 13, 0, 72,141, 81, 72,139, 90, 48, 72,141, 92, +/* 0x09a0 */ 29, 0, 76,141, 99,252, 76,137,230,232,105,248,255,255,199, 67, +/* 0x09b0 */ 252,144, 15, 5,195, 76,137,100, 36, 32, 76,137,251, 74,141, 84, +/* 0x09c0 */ 61, 0, 72,247,219,129,227,255, 15, 0, 0, 72,137,216, 72,133, +/* 0x09d0 */ 219,116, 11,198, 2, 0, 72,255,194, 72,255,200,235,243, 77,133, +/* 0x09e0 */ 255,116, 29, 65,139, 85, 60, 76,137,254, 72,137,239,232,194,246, +/* 0x09f0 */ 255,255,133,192,116, 10,191,127, 0, 0, 0,232,176,246,255,255, +/* 0x0a00 */ 73,141, 4, 31, 72, 1,197, 72, 59,108, 36, 8,115, 46, 72,133, +/* 0x0a10 */ 237,116,124, 72, 41,108, 36, 8, 65,139, 85, 60, 69, 49,201, 72, +/* 0x0a20 */ 139,116, 36, 8, 65,131,200,255,185, 18, 16, 0, 0, 72,137,239, +/* 0x0a30 */ 232,147,246,255,255, 72, 57,197,116, 85,235,186, 72,131,124, 36, +/* 0x0a40 */ 72, 0,116, 75, 73,131,199, 3, 65,129,231,255, 15, 0, 0, 73, +/* 0x0a50 */ 131,255, 3,119, 58, 76,137,254, 72,137,239,232, 88,246,255,255, +/* 0x0a60 */ 235, 45,131,232, 4,131,248, 1,119, 37, 72,184, 4, 0, 0, 0, +/* 0x0a70 */ 42, 0, 0, 0, 73, 57, 69, 8,117, 21, 72,139, 68, 36, 24, 73, +/* 0x0a80 */ 1,133,144, 0, 0, 0, 73,141, 85, 16, 72,137, 84, 36, 32, 65, +/* 0x0a90 */ 139, 69, 4, 72,139, 76, 36, 88,255, 68, 36, 20, 73, 1,197,139, +/* 0x0aa0 */ 68, 36, 20, 59, 65, 16,233,218,252,255,255, 72,139, 68, 36, 32, +/* 0x0ab0 */ 72,131,196,120, 91, 93, 65, 92, 65, 93, 65, 94, 65, 95,195, 65, +/* 0x0ac0 */ 87, 77,137,207, 65, 86, 65, 85, 77,137,197, 65, 84, 85, 72,137, +/* 0x0ad0 */ 213, 72,141, 87, 24, 83, 72,131,236,104, 68,139, 79, 24, 72,137, +/* 0x0ae0 */ 116, 36, 88, 72,139, 68, 36, 88, 76,141,116, 36, 48, 76,139,164, +/* 0x0af0 */ 36,160, 0, 0, 0, 72,137, 76, 36, 16, 76,137,249, 72,137, 84, +/* 0x0b00 */ 36, 72, 72,137, 84, 36, 40, 77,137,240, 72,131,232, 24, 76,137, +/* 0x0b10 */ 76, 36, 48, 72,139,116, 36, 88, 72,137, 68, 36, 64, 72,137, 68, +/* 0x0b20 */ 36, 32, 72,199, 68, 36, 8, 0, 0, 0, 0,199, 68, 36, 4, 0, +/* 0x0b30 */ 0, 0, 0, 72,137,108, 36, 56, 65,255, 52, 36,232, 88, 0, 0, +/* 0x0b40 */ 0,117,112,120, 95,109, 97,105,110, 32,115,122, 99, 61, 37,120, +/* 0x0b50 */ 32, 32,102, 95,100,101, 99, 61, 37,112, 32, 32,102, 95,117,110, +/* 0x0b60 */ 102, 61, 37,112, 32, 32, 32, 32,120,111, 61, 37,112, 40, 37,120, +/* 0x0b70 */ 32, 37,112, 41, 32, 32,120,105, 61, 37,112, 40, 37,120, 32, 37, +/* 0x0b80 */ 112, 41, 32, 32,109,104,100,114,112,112, 61, 37,112, 32, 32,109, +/* 0x0b90 */ 104,100,114,112, 61, 37,112, 10, 0, 95, 65, 84, 82, 76,137,234, +/* 0x0ba0 */ 80, 49,192, 72,141, 92, 36, 96, 83, 85,232,104,246,255,255, 72, +/* 0x0bb0 */ 131,196, 48, 76,137,234, 76,137,246, 49,201, 72,137,223,232, 92, +/* 0x0bc0 */ 249,255,255, 80, 77,137,233, 77,137,224,131,201,255, 49,246, 72, +/* 0x0bd0 */ 137,239, 72,141, 84, 36, 40, 65, 87,232,211,250,255,255, 65, 92, +/* 0x0be0 */ 65, 94,139,117, 16, 72,141, 85, 32, 73,137,197, 49,201, 57,241, +/* 0x0bf0 */ 15,131,218, 0, 0, 0,131, 58, 14, 15,133,196, 0, 0, 0,139, +/* 0x0c00 */ 122, 8, 49,246, 49,192, 72,141, 60, 58, 49,210,232,179,244,255, +/* 0x0c10 */ 255,133,192, 65,137,196,120, 27,139, 76, 36, 4, 72,139, 84, 36, +/* 0x0c20 */ 16, 72,137,238, 68,137,231,232,144,244,255,255, 72, 57, 68, 36, +/* 0x0c30 */ 16,116, 19,191,127, 0, 0, 0,232,115,244,255,255,139, 91, 8, +/* 0x0c40 */ 137, 92, 36, 4,235,210,139, 69, 0, 61,202,254,186,190,116, 7, +/* 0x0c50 */ 61,190,186,254,202,117, 49, 72, 15,182,117, 7, 72,137,239, 72, +/* 0x0c60 */ 141, 93, 8, 72,107,246, 20,131,198, 8,232, 45,244,255,255,139, +/* 0x0c70 */ 69, 4, 49,201, 57,193,115, 16,129, 59, 7, 0, 0, 1,116,189, +/* 0x0c80 */ 255,193, 72,131,195, 20,235,236, 72,199, 68, 36, 24, 0, 0, 0, +/* 0x0c90 */ 0, 83, 69, 49,201, 68,137,225, 49,210,106, 0,139,116, 36, 20, +/* 0x0ca0 */ 72,137,239, 76,141, 68, 36, 40,232, 4,250,255,255, 68,137,231, +/* 0x0cb0 */ 76,137, 40, 72,137, 68, 36, 24,232, 3,244,255,255, 65, 90, 65, +/* 0x0cc0 */ 91,235, 13,139, 66, 4,255,193, 72, 1,194,233, 30,255,255,255, +/* 0x0cd0 */ 72,139, 68, 36, 8, 72,131,196,104, 91, 93, 65, 92, 65, 93, 65, +/* 0x0ce0 */ 94, 65, 95,195 }; diff --git a/src/stub/src/amd64-darwin.macho-fold.S b/src/stub/src/amd64-darwin.macho-fold.S index b8cf35dd..22437a3d 100644 --- a/src/stub/src/amd64-darwin.macho-fold.S +++ b/src/stub/src/amd64-darwin.macho-fold.S @@ -122,12 +122,49 @@ mmap: .globl mmap read: .globl read mov $SYS_read,%al - movzbl %al,%eax; or $SYSBASE,%eax + movzbl %al,%eax; push %rax // save SYS_nnn for error diagnosis + or $SYSBASE,%eax mov %rcx,%r10 syscall // .byte 0x0f,0x05 - jnc 0f - or $~0,%rax //mov errno,eax -0: + jc sysfail + pop %rcx // toss SYS_nnn ret +sysfail: // syscall failed: write hex error code on stderr + mov %rax,%rdx + pop %rax // SYS_nnn + push %rdi; push %rsi + push %rdx // retval + + sub $0x70,%rsp // alloca + mov %rsp,%rdi // output ptr + call pr_hex; movb $'=',%al; stosb + movq 0x70(%rsp),%rax // retval + call pr_hex; movb $'\n',%al; stosb + mov %rdi,%rdx + sub %rsp,%rdx // len + mov %rsp,%rsi // ptr + mov $2,%edi // FD_STDERR + mov $SYS_write+SYSBASE,%eax + syscall + add $0x70,%rsp + + pop %rcx // toss retval + pop %rsi; pop %rdi + or $~0,%rax //mov errno,eax + ret + +pr_hex: + lea hextab(%rip),%rsi + mov %rax,%rdx + mov $16,%ecx // char count +1: + rol $4,%rdx; mov %edx,%eax; and $0xf,%eax + movzbl (%rsi,%rax),%eax + stosb; sub $1,%ecx; jnz 1b + ret + +hextab: + .ascii "0123456789abcdef" + /* vim:set ts=8 sw=8 et: */ diff --git a/src/stub/tmp/amd64-darwin.macho-fold.map b/src/stub/tmp/amd64-darwin.macho-fold.map index 16e72d7b..9e27443d 100644 --- a/src/stub/tmp/amd64-darwin.macho-fold.map +++ b/src/stub/tmp/amd64-darwin.macho-fold.map @@ -72,9 +72,9 @@ LOAD tmp/amd64-darwin.macho-main.o .plt *(.plt) -.text 0x0000000008048000 0xc70 +.text 0x0000000008048000 0xce4 *(.text .stub .text.* .gnu.linkonce.t.*) - .text 0x0000000008048000 0xe2 tmp/amd64-darwin.macho-fold.o + .text 0x0000000008048000 0x157 tmp/amd64-darwin.macho-fold.o 0x00000000080480b8 munmap 0x000000000804809c bswap 0x00000000080480c8 mmap @@ -86,18 +86,18 @@ LOAD tmp/amd64-darwin.macho-main.o 0x00000000080480c4 open 0x00000000080480b4 mprotect 0x00000000080480c0 close - *fill* 0x00000000080480e2 0x2 90909090 - .text 0x00000000080480e4 0xb8c tmp/amd64-darwin.macho-main.o - 0x000000000804863d do_xmap - 0x0000000008048a4b upx_main + *fill* 0x0000000008048157 0x1 90909090 + .text 0x0000000008048158 0xb8c tmp/amd64-darwin.macho-main.o + 0x00000000080486b1 do_xmap + 0x0000000008048abf upx_main *(.text.*personality*) *(.gnu.warning) .fini *(.fini) - 0x0000000008048c70 PROVIDE (__etext, .) - 0x0000000008048c70 PROVIDE (_etext, .) - 0x0000000008048c70 PROVIDE (etext, .) + 0x0000000008048ce4 PROVIDE (__etext, .) + 0x0000000008048ce4 PROVIDE (_etext, .) + 0x0000000008048ce4 PROVIDE (etext, .) .rodata *(.rodata .rodata.* .gnu.linkonce.r.*) @@ -113,8 +113,8 @@ LOAD tmp/amd64-darwin.macho-main.o .gcc_except_table *(.gcc_except_table .gcc_except_table.*) - 0x0000000008048c70 . = (ALIGN (0x1000) - ((0x1000 - .) & 0xfff)) - 0x0000000008049c70 . = (0x1000 DATA_SEGMENT_ALIGN 0x1000) + 0x0000000008048ce4 . = (ALIGN (0x1000) - ((0x1000 - .) & 0xfff)) + 0x0000000008049ce4 . = (0x1000 DATA_SEGMENT_ALIGN 0x1000) .eh_frame *(.eh_frame) @@ -129,22 +129,22 @@ LOAD tmp/amd64-darwin.macho-main.o *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) -.preinit_array 0x0000000008049c70 0x0 - 0x0000000008049c70 PROVIDE (__preinit_array_start, .) +.preinit_array 0x0000000008049ce4 0x0 + 0x0000000008049ce4 PROVIDE (__preinit_array_start, .) *(.preinit_array) - 0x0000000008049c70 PROVIDE (__preinit_array_end, .) + 0x0000000008049ce4 PROVIDE (__preinit_array_end, .) -.init_array 0x0000000008049c70 0x0 - 0x0000000008049c70 PROVIDE (__init_array_start, .) +.init_array 0x0000000008049ce4 0x0 + 0x0000000008049ce4 PROVIDE (__init_array_start, .) *(SORT(.init_array.*)) *(.init_array) - 0x0000000008049c70 PROVIDE (__init_array_end, .) + 0x0000000008049ce4 PROVIDE (__init_array_end, .) -.fini_array 0x0000000008049c70 0x0 - 0x0000000008049c70 PROVIDE (__fini_array_start, .) +.fini_array 0x0000000008049ce4 0x0 + 0x0000000008049ce4 PROVIDE (__fini_array_start, .) *(.fini_array) *(SORT(.fini_array.*)) - 0x0000000008049c70 PROVIDE (__fini_array_end, .) + 0x0000000008049ce4 PROVIDE (__fini_array_end, .) .ctors *crtbegin*.o(.ctors) @@ -170,35 +170,35 @@ LOAD tmp/amd64-darwin.macho-main.o .got *(.got) - 0x0000000008049c70 . = (. DATA_SEGMENT_RELRO_END 0xc) + 0x0000000008049ce4 . = (. DATA_SEGMENT_RELRO_END 0xc) .got.plt *(.got.plt) -.data 0x0000000008049c70 0x0 +.data 0x0000000008049ce4 0x0 *(.data .data.* .gnu.linkonce.d.*) - .data 0x0000000008049c70 0x0 tmp/amd64-darwin.macho-fold.o - .data 0x0000000008049c70 0x0 tmp/amd64-darwin.macho-main.o + .data 0x0000000008049ce4 0x0 tmp/amd64-darwin.macho-fold.o + .data 0x0000000008049ce4 0x0 tmp/amd64-darwin.macho-main.o *(.gnu.linkonce.d.*personality*) .data1 *(.data1) - 0x0000000008049c70 _edata = . - 0x0000000008049c70 PROVIDE (edata, .) - 0x0000000008049c70 __bss_start = . + 0x0000000008049ce4 _edata = . + 0x0000000008049ce4 PROVIDE (edata, .) + 0x0000000008049ce4 __bss_start = . -.bss 0x0000000008049c70 0x0 +.bss 0x0000000008049ce4 0x0 *(.dynbss) *(.bss .bss.* .gnu.linkonce.b.*) - .bss 0x0000000008049c70 0x0 tmp/amd64-darwin.macho-fold.o - .bss 0x0000000008049c70 0x0 tmp/amd64-darwin.macho-main.o + .bss 0x0000000008049ce4 0x0 tmp/amd64-darwin.macho-fold.o + .bss 0x0000000008049ce4 0x0 tmp/amd64-darwin.macho-main.o *(COMMON) - 0x0000000008049c70 . = ALIGN ((. != 0x0)?0x4:0x1) - 0x0000000008049c70 . = ALIGN (0x4) - 0x0000000008049c70 . = ALIGN (0x4) - 0x0000000008049c70 _end = . - 0x0000000008049c70 PROVIDE (end, .) - 0x0000000008049c70 . = DATA_SEGMENT_END (.) + 0x0000000008049ce4 . = ALIGN ((. != 0x0)?0x4:0x1) + 0x0000000008049ce4 . = ALIGN (0x4) + 0x0000000008049ce4 . = ALIGN (0x4) + 0x0000000008049ce4 _end = . + 0x0000000008049ce4 PROVIDE (end, .) + 0x0000000008049ce4 . = DATA_SEGMENT_END (.) .stab *(.stab)