dos/exe: saved some bytes in device driver mode

This commit is contained in:
László Molnár 2006-05-18 15:17:53 +02:00
parent 7f76664a5d
commit bd1014abb6
3 changed files with 164 additions and 165 deletions

View File

@ -539,7 +539,7 @@ void PackExe::pack(OutputFile *fo)
memcpy(loader + 8, ibuf + 8, 2); memcpy(loader + 8, ibuf + 8, 2);
// copy original strategy // copy original strategy
memcpy(loader + 10, ibuf + 6, 2); memcpy(loader + 10, ibuf + 6, 2);
oh.ip = getLoaderSection("EXEENTRY") - 3; oh.ip = getLoaderSection("EXEENTRY") - 2;
} }
//fprintf(stderr,"\ne_len=%x d_len=%x clen=%x oo=%x ulen=%x destp=%x copys=%x images=%x",e_len,d_len,packedsize,ph.overlap_overhead,ph.u_len,destpara,copysize,ih_imagesize); //fprintf(stderr,"\ne_len=%x d_len=%x clen=%x oo=%x ulen=%x destp=%x copys=%x images=%x",e_len,d_len,packedsize,ph.overlap_overhead,ph.u_len,destpara,copysize,ih_imagesize);

View File

@ -64,11 +64,10 @@ strategy:
push bp push bp
push ds push ds
push es push es
mov ax, 1 db 0x72 ; "jc 0xf9" but flag C is 0 => nop
db 0xa9
exe_as_device_entry: exe_as_device_entry:
xor ax, ax stc ; flag C is 1
push ax pushf
; ============= ; =============
; ============= ENTRY POINT ; ============= ENTRY POINT
@ -83,7 +82,8 @@ exe_entry:
do_copy: do_copy:
mov ch, 0x80 ; 64 kbyte mov ch, 0x80 ; 64 kbyte
mov ax, cs mov ax, cs
add ax, 'DS' addaxds:
add ax, 'DS' ; MSB is referenced by the "sub" below
mov ds, ax mov ds, ax
add ax, 'ES' add ax, 'ES'
mov es, ax mov es, ax
@ -93,9 +93,9 @@ do_copy:
movsw movsw
cld cld
; __DEVICESUB__ ; __DEVICESUB__
sub [byte cs:si+do_copy+6+2], byte 0x10 sub [byte cs:si + addaxds + 4], byte 0x10
; __EXESUB__ ; __EXESUB__
sub [byte cs:si+do_copy-exe_entry+6+2], byte 0x10 sub [byte cs:si + addaxds - exe_entry + 4], byte 0x10
; __JNCDOCOPY__ ; __JNCDOCOPY__
jnc do_copy jnc do_copy
xchg ax, dx xchg ax, dx
@ -193,9 +193,8 @@ reloc_5:
pop ds pop ds
; __DEVICEEND__ ; __DEVICEEND__
pop ax popf
dec ax jc loaded_as_exe
jnz loaded_as_exe
pop es pop es
pop ds pop ds
pop bp pop bp
@ -203,8 +202,8 @@ reloc_5:
pop si pop si
pop bx ; get original device SS:SP pop bx ; get original device SS:SP
pop ax pop ax
mov ss,ax ; switch to device driver stack mov ss, ax ; switch to device driver stack
mov sp,bx mov sp, bx
pop dx pop dx
pop cx pop cx
pop bx pop bx

View File

@ -1,4 +1,4 @@
/* l_exe.h -- created from l_exe.bin, 2381 (0x94d) bytes /* l_exe.h -- created from l_exe.bin, 2377 (0x949) bytes
This file is part of the UPX executable compressor. This file is part of the UPX executable compressor.
@ -27,158 +27,158 @@
*/ */
#define NRV_LOADER_SIZE 2381 #define NRV_LOADER_SIZE 2377
#define NRV_LOADER_ADLER32 0x33a66f6c #define NRV_LOADER_ADLER32 0xe8176e1e
#define NRV_LOADER_CRC32 0x35b523f4 #define NRV_LOADER_CRC32 0x723ae5c1
unsigned char nrv_loader[2381] = { unsigned char nrv_loader[2377] = {
255,255,255,255, 0, 0, 12, 0, 0, 0, 83, 84, 14, 46,255, 54, /* 0x 0 */ 255,255,255,255, 0, 0, 12, 0, 0, 0, 83, 84, 14, 46,255, 54, /* 0x 0 */
10, 0, 80, 83, 81, 82,140,200, 5, 79, 83,187, 79, 80,140,209, /* 0x 10 */ 10, 0, 80, 83, 81, 82,140,200, 5, 79, 83,187, 79, 80,140,209, /* 0x 10 */
137,226,142,208,137,220, 81, 82, 86, 87, 85, 30, 6,184, 1, 0, /* 0x 20 */ 137,226,142,208,137,220, 81, 82, 86, 87, 85, 30, 6,114,249,156, /* 0x 20 */
169, 49,192, 80,185, 67, 88,190, 83, 73,137,247, 30,169,181,128, /* 0x 30 */ 185, 67, 88,190, 83, 73,137,247, 30,169,181,128,140,200, 5, 68, /* 0x 30 */
140,200, 5, 68, 83,142,216, 5, 69, 83,142,192,253,243,165,252, /* 0x 40 */ 83,142,216, 5, 69, 83,142,192,253,243,165,252, 46,128,108, 66, /* 0x 40 */
46,128,108, 70, 16, 46,128,108, 18, 16,115, 0,146,175,173, 14, /* 0x 50 */ 16, 46,128,108, 18, 16,115, 0,146,175,173, 14, 14, 14, 6, 31, /* 0x 50 */
14, 14, 6, 31, 7, 22,189, 66, 80,187, 66, 88, 85,203, 85, 80, /* 0x 60 */ 7, 22,189, 66, 80,187, 66, 88, 85,203, 85, 80, 88, 33,161,216, /* 0x 60 */
88, 33,161,216,208,213, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 70 */ 208,213, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 70 */
0, 0, 0, 0, 0, 0, 0, 0, 45,164, 0,255,117, 3,232, 0, /* 0x 80 */ 0, 0, 0, 0, 45,164, 0,255,117, 3,232, 0, 0,114,246, 65, /* 0x 80 */
0,114,246, 65,140,192, 1,255,115, 5,128,196, 8,142,192,209, /* 0x 90 */ 140,192, 1,255,115, 5,128,196, 8,142,192,209,239,232, 0, 0, /* 0x 90 */
239,232, 0, 0,227, 0,115,249, 73, 73,116, 0, 1,201, 1,201, /* 0x a0 */ 227, 0,115,249, 73, 73,116, 0, 1,201, 1,201, 1,201, 1,201, /* 0x a0 */
1,201, 1,201,193,225, 4,137,205,138, 28, 70,246,211, 49,201, /* 0x b0 */ 193,225, 4,137,205,138, 28, 70,246,211, 49,201,232, 0, 0, 17, /* 0x b0 */
232, 0, 0, 17,201,117, 8, 65,232, 0, 0,115,251, 65, 65,129, /* 0x c0 */ 201,117, 8, 65,232, 0, 0,115,251, 65, 65,129,253,209, 0,131, /* 0x c0 */
253,209, 0,131,217,254, 41,232,114, 14,142,216,141, 1, 40,252, /* 0x d0 */ 217,254, 41,232,114, 14,142,216,141, 1, 40,252,150,243,164,150, /* 0x d0 */
150,243,164,150,142,218,235, 0,209,224,209,224,209,224,209,224, /* 0x e0 */ 142,218,235, 0,209,224,209,224,209,224,209,224, 80, 49,192,142, /* 0x e0 */
80, 49,192,142,216, 88,193,224, 4,106, 0, 31, 1,216, 1,248, /* 0x f0 */ 216, 88,193,224, 4,106, 0, 31, 1,216, 1,248,235, 0, 0,255, /* 0x f0 */
235, 0, 0,255,117, 3,232, 6, 0, 17,201, 0,255,117, 0,138, /* 0x 100 */ 117, 3,232, 6, 0, 17,201, 0,255,117, 0,138, 60, 17,246,115, /* 0x 100 */
60, 17,246,115, 5,128,198, 8,142,218,209,238, 70, 16,255,195, /* 0x 110 */ 5,128,198, 8,142,218,209,238, 70, 16,255,195,164, 0,255,117, /* 0x 110 */
164, 0,255,117, 3,232, 0, 0,114,246, 65,140,192, 1,255,115, /* 0x 120 */ 3,232, 0, 0,114,246, 65,140,192, 1,255,115, 5,128,196, 8, /* 0x 120 */
5,128,196, 8,142,192,209,239,232, 0, 0,114, 10, 73,232, 0, /* 0x 130 */ 142,192,209,239,232, 0, 0,114, 10, 73,232, 0, 0, 17,201,121, /* 0x 130 */
0, 17,201,121,243,235, 0, 73, 73,116, 0, 1,201, 1,201, 1, /* 0x 140 */ 243,235, 0, 73, 73,116, 0, 1,201, 1,201, 1,201,193,225, 3, /* 0x 140 */
201,193,225, 3,137,205,138, 28, 70,246,211, 49,201,208,235,235, /* 0x 150 */ 137,205,138, 28, 70,246,211, 49,201,208,235,235, 3,232, 0, 0, /* 0x 150 */
3,232, 0, 0, 17,201,232, 0, 0, 17,201,117, 8, 65,232, 0, /* 0x 160 */ 17,201,232, 0, 0, 17,201,117, 8, 65,232, 0, 0,115,251, 65, /* 0x 160 */
0,115,251, 65, 65,131,253, 81,131,217,254, 41,232,114, 14,142, /* 0x 170 */ 65,131,253, 81,131,217,254, 41,232,114, 14,142,216,141, 1, 40, /* 0x 170 */
216,141, 1, 40,252,150,243,164,150,142,218,235, 0,209,224,209, /* 0x 180 */ 252,150,243,164,150,142,218,235, 0,209,224,209,224,209,224,209, /* 0x 180 */
224,209,224,209,224, 80, 49,192,142,216, 88,193,224, 4,106, 0, /* 0x 190 */ 224, 80, 49,192,142,216, 88,193,224, 4,106, 0, 31, 1,216, 1, /* 0x 190 */
31, 1,216, 1,248,235, 0, 0,255,117, 3,232, 6, 0, 17,201, /* 0x 1a0 */ 248,235, 0, 0,255,117, 3,232, 6, 0, 17,201, 0,255,117, 0, /* 0x 1a0 */
0,255,117, 0,138, 60, 17,246,115, 5,128,198, 8,142,218,209, /* 0x 1b0 */ 138, 60, 17,246,115, 5,128,198, 8,142,218,209,238, 70, 16,255, /* 0x 1b0 */
238, 70, 16,255,195,164, 0,255,117, 3,232, 0, 0,114,246, 65, /* 0x 1c0 */ 195,164, 0,255,117, 3,232, 0, 0,114,246, 65,140,192, 1,255, /* 0x 1c0 */
140,192, 1,255,115, 5,128,196, 8,142,192,209,239,232, 0, 0, /* 0x 1d0 */ 115, 5,128,196, 8,142,192,209,239,232, 0, 0,114, 10, 73,232, /* 0x 1d0 */
114, 10, 73,232, 0, 0, 17,201,121,243,235, 0, 73, 73,116, 0, /* 0x 1e0 */ 0, 0, 17,201,121,243,235, 0, 73, 73,116, 0, 1,201, 1,201, /* 0x 1e0 */
1,201, 1,201, 1,201,193,225, 3,137,205,138, 28, 70,246,211, /* 0x 1f0 */ 1,201,193,225, 3,137,205,138, 28, 70,246,211, 49,201,208,235, /* 0x 1f0 */
49,201,208,235,115, 12,232, 0, 0, 17,201,235, 18,232, 0, 0, /* 0x 200 */ 115, 12,232, 0, 0, 17,201,235, 18,232, 0, 0,114,244, 65,232, /* 0x 200 */
114,244, 65,232, 0, 0,114,238,232, 0, 0,115,251, 65, 65,131, /* 0x 210 */ 0, 0,114,238,232, 0, 0,115,251, 65, 65,131,253, 81,131,217, /* 0x 210 */
253, 81,131,217,253, 41,232,114, 14,142,216,141, 1, 40,252,150, /* 0x 220 */ 253, 41,232,114, 14,142,216,141, 1, 40,252,150,243,164,150,142, /* 0x 220 */
243,164,150,142,218,235, 0,209,224,209,224,209,224,209,224, 80, /* 0x 230 */ 218,235, 0,209,224,209,224,209,224,209,224, 80, 49,192,142,216, /* 0x 230 */
49,192,142,216, 88,193,224, 4,106, 0, 31, 1,216, 1,248,235, /* 0x 240 */ 88,193,224, 4,106, 0, 31, 1,216, 1,248,235, 0, 0,255,117, /* 0x 240 */
0, 0,255,117, 3,232, 6, 0, 17,201, 0,255,117, 0,138, 60, /* 0x 250 */ 3,232, 6, 0, 17,201, 0,255,117, 0,138, 60, 17,246,115, 5, /* 0x 250 */
17,246,115, 5,128,198, 8,142,218,209,238, 70, 16,255,195, 93, /* 0x 260 */ 128,198, 8,142,218,209,238, 70, 16,255,195, 93,140,192,128,236, /* 0x 260 */
140,192,128,236, 6,142,216, 6, 31,141,181, 82, 83,173, 91,145, /* 0x 270 */ 6,142,216, 6, 31,141,181, 82, 83,173, 91,145,173,146,173,151, /* 0x 270 */
173,146,173,151,173, 1,195,142,195, 49,192, 1,199, 38, 1, 45, /* 0x 280 */ 173, 1,195,142,195, 49,192, 1,199, 38, 1, 45,172, 72,116, 0, /* 0x 280 */
172, 72,116, 0, 64,117,244, 71, 71, 38,128, 61,154,117,249, 38, /* 0x 290 */ 64,117,244, 71, 71, 38,128, 61,154,117,249, 38, 57, 85, 3,119, /* 0x 290 */
57, 85, 3,119,243,176, 3,235, 0,129,199,254, 0,114, 0,226, /* 0x 2a0 */ 243,176, 3,235, 0,129,199,254, 0,114, 0,226, 0, 7, 6, 31, /* 0x 2a0 */
0, 7, 6, 31, 88, 72,117, 16, 7, 31, 93, 95, 94, 91, 88,142, /* 0x 2b0 */ 157,114, 16, 7, 31, 93, 95, 94, 91, 88,142,208,137,220, 90, 89, /* 0x 2b0 */
208,137,220, 90, 89, 91, 88,203,141,134, 83, 83,142,208,188, 83, /* 0x 2c0 */ 91, 88,203,141,134, 83, 83,142,208,188, 83, 80,234, 73, 80, 67, /* 0x 2c0 */
80,234, 73, 80, 67, 83,129,197, 67, 83, 85,184, 73, 80, 80,203, /* 0x 2d0 */ 83,129,197, 67, 83, 85,184, 73, 80, 80,203, 0, 68, 69, 86, 73, /* 0x 2d0 */
68, 69, 86, 73, 67, 69, 69, 78, 84, 82, 89, 0, 0, 0, 0, 0, /* 0x 2e0 */ 67, 69, 69, 78, 84, 82, 89, 0, 0, 0, 0, 0, 69, 88, 69, 69, /* 0x 2e0 */
69, 88, 69, 69, 78, 84, 82, 89, 0, 52, 0, 0, 0, 68, 69, 86, /* 0x 2f0 */ 78, 84, 82, 89, 0, 48, 0, 0, 0, 68, 69, 86, 73, 67, 69, 83, /* 0x 2f0 */
73, 67, 69, 83, 85, 66, 0, 80, 0, 0, 0, 69, 88, 69, 83, 85, /* 0x 300 */ 85, 66, 0, 76, 0, 0, 0, 69, 88, 69, 83, 85, 66, 0, 81, 0, /* 0x 300 */
66, 0, 85, 0, 0, 0, 74, 78, 67, 68, 79, 67, 79, 80, 89, 0, /* 0x 310 */ 0, 0, 74, 78, 67, 68, 79, 67, 79, 80, 89, 0, 86, 0, 0, 0, /* 0x 310 */
90, 0, 0, 0, 0, 0, 0, 0, 92, 0, 0, 0, 69, 88, 69, 69, /* 0x 320 */ 0, 0, 0, 0, 88, 0, 0, 0, 69, 88, 69, 69, 78, 84, 82, 89, /* 0x 320 */
78, 84, 82, 89, 0, 10, 0, 0, 0, 69, 88, 69, 82, 69, 76, 80, /* 0x 330 */ 0, 10, 0, 0, 0, 69, 88, 69, 82, 69, 76, 80, 85, 0, 91, 0, /* 0x 330 */
85, 0, 95, 0, 0, 0, 69, 88, 69, 77, 65, 73, 78, 52, 0, 96, /* 0x 340 */ 0, 0, 69, 88, 69, 77, 65, 73, 78, 52, 0, 92, 0, 0, 0, 85, /* 0x 340 */
0, 0, 0, 85, 80, 88, 49, 72, 69, 65, 68, 0,110, 0, 0, 0, /* 0x 350 */ 80, 88, 49, 72, 69, 65, 68, 0,106, 0, 0, 0, 69, 88, 69, 67, /* 0x 350 */
69, 88, 69, 67, 85, 84, 80, 79, 0,137, 0, 0, 0, 78, 82, 86, /* 0x 360 */ 85, 84, 80, 79, 0,133, 0, 0, 0, 78, 82, 86, 50, 66, 49, 54, /* 0x 360 */
50, 66, 49, 54, 83, 0,137, 0, 0, 0, 0, 0, 0, 0,145, 0, /* 0x 370 */ 83, 0,133, 0, 0, 0, 0, 0, 0, 0,141, 0, 0, 0, 78, 82, /* 0x 370 */
0, 0, 78, 82, 86, 50, 66, 69, 88, 51, 0, 19, 0, 0, 0, 78, /* 0x 380 */ 86, 50, 66, 69, 88, 51, 0, 19, 0, 0, 0, 78, 50, 66, 54, 52, /* 0x 380 */
50, 66, 54, 52, 75, 48, 49, 0,150, 0, 0, 0, 78, 82, 86, 50, /* 0x 390 */ 75, 48, 49, 0,146, 0, 0, 0, 78, 82, 86, 50, 66, 69, 88, 49, /* 0x 390 */
66, 69, 88, 49, 0,161, 0, 0, 0, 0, 0, 0, 0,164, 0, 0, /* 0x 3a0 */ 0,157, 0, 0, 0, 0, 0, 0, 0,160, 0, 0, 0, 78, 82, 86, /* 0x 3a0 */
0, 78, 82, 86, 50, 66, 69, 88, 51, 0, 6, 0, 0, 0, 0, 0, /* 0x 3b0 */ 50, 66, 69, 88, 51, 0, 6, 0, 0, 0, 0, 0, 0, 0,162, 0, /* 0x 3b0 */
0, 0,166, 0, 0, 0, 78, 82, 86, 50, 66, 69, 88, 57, 0, 4, /* 0x 3c0 */ 0, 0, 78, 82, 86, 50, 66, 69, 88, 57, 0, 4, 0, 0, 0, 0, /* 0x 3c0 */
0, 0, 0, 0, 0, 0, 0,172, 0, 0, 0, 78, 82, 86, 50, 66, /* 0x 3d0 */ 0, 0, 0,168, 0, 0, 0, 78, 82, 86, 50, 66, 69, 88, 50, 0, /* 0x 3d0 */
69, 88, 50, 0, 9, 0, 0, 0, 78, 50, 66, 88, 56, 54, 48, 49, /* 0x 3e0 */ 9, 0, 0, 0, 78, 50, 66, 88, 56, 54, 48, 49, 0,168, 0, 0, /* 0x 3e0 */
0,172, 0, 0, 0, 78, 50, 66, 50, 56, 54, 48, 49, 0,180, 0, /* 0x 3f0 */ 0, 78, 50, 66, 50, 56, 54, 48, 49, 0,176, 0, 0, 0, 78, 82, /* 0x 3f0 */
0, 0, 78, 82, 86, 50, 66, 69, 88, 50, 0,183, 0, 0, 0, 0, /* 0x 400 */ 86, 50, 66, 69, 88, 50, 0,179, 0, 0, 0, 0, 0, 0, 0,191, /* 0x 400 */
0, 0, 0,195, 0, 0, 0, 78, 82, 86, 50, 66, 69, 88, 51, 0, /* 0x 410 */ 0, 0, 0, 78, 82, 86, 50, 66, 69, 88, 51, 0, 6, 0, 0, 0, /* 0x 410 */
6, 0, 0, 0, 0, 0, 0, 0,203, 0, 0, 0, 78, 82, 86, 50, /* 0x 420 */ 0, 0, 0, 0,199, 0, 0, 0, 78, 82, 86, 50, 66, 69, 88, 51, /* 0x 420 */
66, 69, 88, 51, 0, 6, 0, 0, 0, 0, 0, 0, 0,232, 0, 0, /* 0x 430 */ 0, 6, 0, 0, 0, 0, 0, 0, 0,228, 0, 0, 0, 78, 82, 86, /* 0x 430 */
0, 78, 82, 86, 50, 66, 49, 54, 83, 0, 1, 0, 0, 0, 78, 50, /* 0x 440 */ 50, 66, 49, 54, 83, 0, 1, 0, 0, 0, 78, 50, 66, 88, 56, 54, /* 0x 440 */
66, 88, 56, 54, 48, 50, 0,232, 0, 0, 0, 78, 50, 66, 50, 56, /* 0x 450 */ 48, 50, 0,228, 0, 0, 0, 78, 50, 66, 50, 56, 54, 48, 50, 0, /* 0x 450 */
54, 48, 50, 0,246, 0, 0, 0, 78, 82, 86, 50, 66, 69, 88, 51, /* 0x 460 */ 242, 0, 0, 0, 78, 82, 86, 50, 66, 69, 88, 51, 0,248, 0, 0, /* 0x 460 */
0,252, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 0, 78, 82, 86, /* 0x 470 */ 0, 0, 0, 0, 0,254, 0, 0, 0, 78, 82, 86, 50, 66, 69, 88, /* 0x 470 */
50, 66, 69, 88, 50, 0, 39, 0, 0, 0, 0, 0, 0, 0, 15, 1, /* 0x 480 */ 50, 0, 39, 0, 0, 0, 0, 0, 0, 0, 11, 1, 0, 0, 78, 82, /* 0x 480 */
0, 0, 78, 82, 86, 50, 66, 69, 88, 57, 0, 3, 0, 0, 0, 78, /* 0x 490 */ 86, 50, 66, 69, 88, 57, 0, 3, 0, 0, 0, 78, 50, 66, 54, 52, /* 0x 490 */
50, 66, 54, 52, 75, 48, 50, 0, 17, 1, 0, 0, 78, 82, 86, 50, /* 0x 4a0 */ 75, 48, 50, 0, 13, 1, 0, 0, 78, 82, 86, 50, 66, 69, 88, 57, /* 0x 4a0 */
66, 69, 88, 57, 0, 28, 1, 0, 0, 78, 82, 86, 50, 66, 49, 54, /* 0x 4b0 */ 0, 24, 1, 0, 0, 78, 82, 86, 50, 66, 49, 54, 69, 0, 28, 1, /* 0x 4b0 */
69, 0, 32, 1, 0, 0, 78, 82, 86, 50, 68, 49, 54, 83, 0, 32, /* 0x 4c0 */ 0, 0, 78, 82, 86, 50, 68, 49, 54, 83, 0, 28, 1, 0, 0, 0, /* 0x 4c0 */
1, 0, 0, 0, 0, 0, 0, 40, 1, 0, 0, 78, 82, 86, 50, 68, /* 0x 4d0 */ 0, 0, 0, 36, 1, 0, 0, 78, 82, 86, 50, 68, 69, 88, 51, 0, /* 0x 4d0 */
69, 88, 51, 0, 19, 0, 0, 0, 78, 50, 68, 54, 52, 75, 48, 49, /* 0x 4e0 */ 19, 0, 0, 0, 78, 50, 68, 54, 52, 75, 48, 49, 0, 41, 1, 0, /* 0x 4e0 */
0, 45, 1, 0, 0, 78, 82, 86, 50, 68, 69, 88, 49, 0, 56, 1, /* 0x 4f0 */ 0, 78, 82, 86, 50, 68, 69, 88, 49, 0, 52, 1, 0, 0, 0, 0, /* 0x 4f0 */
0, 0, 0, 0, 0, 0, 59, 1, 0, 0, 78, 82, 86, 50, 68, 69, /* 0x 500 */ 0, 0, 55, 1, 0, 0, 78, 82, 86, 50, 68, 69, 88, 51, 0, 6, /* 0x 500 */
88, 51, 0, 6, 0, 0, 0, 0, 0, 0, 0, 65, 1, 0, 0, 78, /* 0x 510 */ 0, 0, 0, 0, 0, 0, 0, 61, 1, 0, 0, 78, 82, 86, 50, 68, /* 0x 510 */
82, 86, 50, 68, 69, 88, 51, 0, 15, 0, 0, 0, 0, 0, 0, 0, /* 0x 520 */ 69, 88, 51, 0, 15, 0, 0, 0, 0, 0, 0, 0, 67, 1, 0, 0, /* 0x 520 */
71, 1, 0, 0, 78, 82, 86, 50, 68, 69, 88, 57, 0, 4, 0, 0, /* 0x 530 */ 78, 82, 86, 50, 68, 69, 88, 57, 0, 4, 0, 0, 0, 0, 0, 0, /* 0x 530 */
0, 0, 0, 0, 0, 75, 1, 0, 0, 78, 82, 86, 50, 68, 69, 88, /* 0x 540 */ 0, 71, 1, 0, 0, 78, 82, 86, 50, 68, 69, 88, 50, 0, 13, 0, /* 0x 540 */
50, 0, 13, 0, 0, 0, 78, 50, 68, 88, 56, 54, 48, 49, 0, 75, /* 0x 550 */ 0, 0, 78, 50, 68, 88, 56, 54, 48, 49, 0, 71, 1, 0, 0, 78, /* 0x 550 */
1, 0, 0, 78, 50, 68, 50, 56, 54, 48, 49, 0, 81, 1, 0, 0, /* 0x 560 */ 50, 68, 50, 56, 54, 48, 49, 0, 77, 1, 0, 0, 78, 82, 86, 50, /* 0x 560 */
78, 82, 86, 50, 68, 69, 88, 50, 0, 84, 1, 0, 0, 0, 0, 0, /* 0x 570 */ 68, 69, 88, 50, 0, 80, 1, 0, 0, 0, 0, 0, 0, 96, 1, 0, /* 0x 570 */
0,100, 1, 0, 0, 78, 82, 86, 50, 68, 69, 88, 51, 0, 15, 0, /* 0x 580 */ 0, 78, 82, 86, 50, 68, 69, 88, 51, 0, 15, 0, 0, 0, 0, 0, /* 0x 580 */
0, 0, 0, 0, 0, 0,105, 1, 0, 0, 78, 82, 86, 50, 68, 69, /* 0x 590 */ 0, 0,101, 1, 0, 0, 78, 82, 86, 50, 68, 69, 88, 51, 0, 15, /* 0x 590 */
88, 51, 0, 15, 0, 0, 0, 0, 0, 0, 0,113, 1, 0, 0, 78, /* 0x 5a0 */ 0, 0, 0, 0, 0, 0, 0,109, 1, 0, 0, 78, 82, 86, 50, 68, /* 0x 5a0 */
82, 86, 50, 68, 69, 88, 51, 0, 6, 0, 0, 0, 0, 0, 0, 0, /* 0x 5b0 */ 69, 88, 51, 0, 6, 0, 0, 0, 0, 0, 0, 0,137, 1, 0, 0, /* 0x 5b0 */
141, 1, 0, 0, 78, 82, 86, 50, 68, 49, 54, 83, 0, 1, 0, 0, /* 0x 5c0 */ 78, 82, 86, 50, 68, 49, 54, 83, 0, 1, 0, 0, 0, 78, 50, 68, /* 0x 5c0 */
0, 78, 50, 68, 88, 56, 54, 48, 50, 0,141, 1, 0, 0, 78, 50, /* 0x 5d0 */ 88, 56, 54, 48, 50, 0,137, 1, 0, 0, 78, 50, 68, 50, 56, 54, /* 0x 5d0 */
68, 50, 56, 54, 48, 50, 0,155, 1, 0, 0, 78, 82, 86, 50, 68, /* 0x 5e0 */ 48, 50, 0,151, 1, 0, 0, 78, 82, 86, 50, 68, 69, 88, 51, 0, /* 0x 5e0 */
69, 88, 51, 0,161, 1, 0, 0, 0, 0, 0, 0,167, 1, 0, 0, /* 0x 5f0 */ 157, 1, 0, 0, 0, 0, 0, 0,163, 1, 0, 0, 78, 82, 86, 50, /* 0x 5f0 */
78, 82, 86, 50, 68, 69, 88, 50, 0, 47, 0, 0, 0, 0, 0, 0, /* 0x 600 */ 68, 69, 88, 50, 0, 47, 0, 0, 0, 0, 0, 0, 0,176, 1, 0, /* 0x 600 */
0,180, 1, 0, 0, 78, 82, 86, 50, 68, 69, 88, 57, 0, 3, 0, /* 0x 610 */ 0, 78, 82, 86, 50, 68, 69, 88, 57, 0, 3, 0, 0, 0, 78, 50, /* 0x 610 */
0, 0, 78, 50, 68, 54, 52, 75, 48, 50, 0,182, 1, 0, 0, 78, /* 0x 620 */ 68, 54, 52, 75, 48, 50, 0,178, 1, 0, 0, 78, 82, 86, 50, 68, /* 0x 620 */
82, 86, 50, 68, 69, 88, 57, 0,193, 1, 0, 0, 78, 82, 86, 50, /* 0x 630 */ 69, 88, 57, 0,189, 1, 0, 0, 78, 82, 86, 50, 68, 49, 54, 69, /* 0x 630 */
68, 49, 54, 69, 0,197, 1, 0, 0, 78, 82, 86, 50, 69, 49, 54, /* 0x 640 */ 0,193, 1, 0, 0, 78, 82, 86, 50, 69, 49, 54, 83, 0,193, 1, /* 0x 640 */
83, 0,197, 1, 0, 0, 0, 0, 0, 0,205, 1, 0, 0, 78, 82, /* 0x 650 */ 0, 0, 0, 0, 0, 0,201, 1, 0, 0, 78, 82, 86, 50, 69, 69, /* 0x 650 */
86, 50, 69, 69, 88, 51, 0, 19, 0, 0, 0, 78, 50, 69, 54, 52, /* 0x 660 */ 88, 51, 0, 19, 0, 0, 0, 78, 50, 69, 54, 52, 75, 48, 49, 0, /* 0x 660 */
75, 48, 49, 0,210, 1, 0, 0, 78, 82, 86, 50, 69, 69, 88, 49, /* 0x 670 */ 206, 1, 0, 0, 78, 82, 86, 50, 69, 69, 88, 49, 0,217, 1, 0, /* 0x 670 */
0,221, 1, 0, 0, 0, 0, 0, 0,224, 1, 0, 0, 78, 82, 86, /* 0x 680 */ 0, 0, 0, 0, 0,220, 1, 0, 0, 78, 82, 86, 50, 69, 69, 88, /* 0x 680 */
50, 69, 69, 88, 51, 0, 6, 0, 0, 0, 0, 0, 0, 0,230, 1, /* 0x 690 */ 51, 0, 6, 0, 0, 0, 0, 0, 0, 0,226, 1, 0, 0, 78, 82, /* 0x 690 */
0, 0, 78, 82, 86, 50, 69, 69, 88, 51, 0, 15, 0, 0, 0, 0, /* 0x 6a0 */ 86, 50, 69, 69, 88, 51, 0, 15, 0, 0, 0, 0, 0, 0, 0,232, /* 0x 6a0 */
0, 0, 0,236, 1, 0, 0, 78, 82, 86, 50, 69, 69, 88, 57, 0, /* 0x 6b0 */ 1, 0, 0, 78, 82, 86, 50, 69, 69, 88, 57, 0, 4, 0, 0, 0, /* 0x 6b0 */
4, 0, 0, 0, 0, 0, 0, 0,240, 1, 0, 0, 78, 82, 86, 50, /* 0x 6c0 */ 0, 0, 0, 0,236, 1, 0, 0, 78, 82, 86, 50, 69, 69, 88, 50, /* 0x 6c0 */
69, 69, 88, 50, 0, 20, 0, 0, 0, 78, 50, 69, 88, 56, 54, 48, /* 0x 6d0 */ 0, 20, 0, 0, 0, 78, 50, 69, 88, 56, 54, 48, 49, 0,236, 1, /* 0x 6d0 */
49, 0,240, 1, 0, 0, 78, 50, 69, 50, 56, 54, 48, 49, 0,246, /* 0x 6e0 */ 0, 0, 78, 50, 69, 50, 56, 54, 48, 49, 0,242, 1, 0, 0, 78, /* 0x 6e0 */
1, 0, 0, 78, 82, 86, 50, 69, 69, 88, 50, 0,249, 1, 0, 0, /* 0x 6f0 */ 82, 86, 50, 69, 69, 88, 50, 0,245, 1, 0, 0, 0, 0, 0, 0, /* 0x 6f0 */
0, 0, 0, 0, 9, 2, 0, 0, 78, 82, 86, 50, 69, 69, 88, 51, /* 0x 700 */ 5, 2, 0, 0, 78, 82, 86, 50, 69, 69, 88, 51, 0, 15, 0, 0, /* 0x 700 */
0, 15, 0, 0, 0, 0, 0, 0, 0, 16, 2, 0, 0, 78, 82, 86, /* 0x 710 */ 0, 0, 0, 0, 0, 12, 2, 0, 0, 78, 82, 86, 50, 69, 69, 88, /* 0x 710 */
50, 69, 69, 88, 51, 0, 15, 0, 0, 0, 0, 0, 0, 0, 22, 2, /* 0x 720 */ 51, 0, 15, 0, 0, 0, 0, 0, 0, 0, 18, 2, 0, 0, 78, 82, /* 0x 720 */
0, 0, 78, 82, 86, 50, 69, 69, 88, 51, 0, 15, 0, 0, 0, 0, /* 0x 730 */ 86, 50, 69, 69, 88, 51, 0, 15, 0, 0, 0, 0, 0, 0, 0, 23, /* 0x 730 */
0, 0, 0, 27, 2, 0, 0, 78, 82, 86, 50, 69, 69, 88, 51, 0, /* 0x 740 */ 2, 0, 0, 78, 82, 86, 50, 69, 69, 88, 51, 0, 6, 0, 0, 0, /* 0x 740 */
6, 0, 0, 0, 0, 0, 0, 0, 55, 2, 0, 0, 78, 82, 86, 50, /* 0x 750 */ 0, 0, 0, 0, 51, 2, 0, 0, 78, 82, 86, 50, 69, 49, 54, 83, /* 0x 750 */
69, 49, 54, 83, 0, 1, 0, 0, 0, 78, 50, 69, 88, 56, 54, 48, /* 0x 760 */ 0, 1, 0, 0, 0, 78, 50, 69, 88, 56, 54, 48, 50, 0, 51, 2, /* 0x 760 */
50, 0, 55, 2, 0, 0, 78, 50, 69, 50, 56, 54, 48, 50, 0, 69, /* 0x 770 */ 0, 0, 78, 50, 69, 50, 56, 54, 48, 50, 0, 65, 2, 0, 0, 78, /* 0x 770 */
2, 0, 0, 78, 82, 86, 50, 69, 69, 88, 51, 0, 75, 2, 0, 0, /* 0x 780 */ 82, 86, 50, 69, 69, 88, 51, 0, 71, 2, 0, 0, 0, 0, 0, 0, /* 0x 780 */
0, 0, 0, 0, 81, 2, 0, 0, 78, 82, 86, 50, 69, 69, 88, 50, /* 0x 790 */ 77, 2, 0, 0, 78, 82, 86, 50, 69, 69, 88, 50, 0, 52, 0, 0, /* 0x 790 */
0, 52, 0, 0, 0, 0, 0, 0, 0, 94, 2, 0, 0, 78, 82, 86, /* 0x 7a0 */ 0, 0, 0, 0, 0, 90, 2, 0, 0, 78, 82, 86, 50, 69, 69, 88, /* 0x 7a0 */
50, 69, 69, 88, 57, 0, 3, 0, 0, 0, 78, 50, 69, 54, 52, 75, /* 0x 7b0 */ 57, 0, 3, 0, 0, 0, 78, 50, 69, 54, 52, 75, 48, 50, 0, 92, /* 0x 7b0 */
48, 50, 0, 96, 2, 0, 0, 78, 82, 86, 50, 69, 69, 88, 57, 0, /* 0x 7c0 */ 2, 0, 0, 78, 82, 86, 50, 69, 69, 88, 57, 0,103, 2, 0, 0, /* 0x 7c0 */
107, 2, 0, 0, 78, 82, 86, 50, 69, 49, 54, 69, 0,111, 2, 0, /* 0x 7d0 */ 78, 82, 86, 50, 69, 49, 54, 69, 0,107, 2, 0, 0, 69, 88, 69, /* 0x 7d0 */
0, 69, 88, 69, 77, 65, 73, 78, 53, 0,111, 2, 0, 0, 69, 88, /* 0x 7e0 */ 77, 65, 73, 78, 53, 0,107, 2, 0, 0, 69, 88, 69, 82, 69, 76, /* 0x 7e0 */
69, 82, 69, 76, 79, 67, 0,112, 2, 0, 0, 69, 88, 69, 65, 68, /* 0x 7f0 */ 79, 67, 0,108, 2, 0, 0, 69, 88, 69, 65, 68, 74, 85, 83, 0, /* 0x 7f0 */
74, 85, 83, 0,112, 2, 0, 0, 69, 88, 69, 78, 79, 65, 68, 74, /* 0x 800 */ 108, 2, 0, 0, 69, 88, 69, 78, 79, 65, 68, 74, 0,115, 2, 0, /* 0x 800 */
0,119, 2, 0, 0, 69, 88, 69, 82, 69, 76, 79, 49, 0,121, 2, /* 0x 810 */ 0, 69, 88, 69, 82, 69, 76, 79, 49, 0,117, 2, 0, 0, 0, 0, /* 0x 810 */
0, 0, 0, 0, 0, 0,148, 2, 0, 0, 69, 88, 69, 82, 69, 76, /* 0x 820 */ 0, 0,144, 2, 0, 0, 69, 88, 69, 82, 69, 76, 79, 50, 0, 0, /* 0x 820 */
79, 50, 0, 0, 0, 0, 0, 69, 88, 69, 82, 69, 76, 57, 65, 0, /* 0x 830 */ 0, 0, 0, 69, 88, 69, 82, 69, 76, 57, 65, 0,147, 2, 0, 0, /* 0x 830 */
151, 2, 0, 0, 0, 0, 0, 0,169, 2, 0, 0, 69, 88, 69, 82, /* 0x 840 */ 0, 0, 0, 0,165, 2, 0, 0, 69, 88, 69, 82, 69, 76, 79, 49, /* 0x 840 */
69, 76, 79, 49, 0, 18, 0, 0, 0, 69, 88, 69, 82, 69, 76, 79, /* 0x 850 */ 0, 18, 0, 0, 0, 69, 88, 69, 82, 69, 76, 79, 50, 0,165, 2, /* 0x 850 */
50, 0,169, 2, 0, 0, 69, 88, 69, 82, 69, 66, 73, 71, 0,173, /* 0x 860 */ 0, 0, 69, 88, 69, 82, 69, 66, 73, 71, 0,169, 2, 0, 0, 0, /* 0x 860 */
2, 0, 0, 0, 0, 0, 0,175, 2, 0, 0, 69, 88, 69, 82, 69, /* 0x 870 */ 0, 0, 0,171, 2, 0, 0, 69, 88, 69, 82, 69, 76, 79, 49, 0, /* 0x 870 */
76, 79, 49, 0, 9, 0, 0, 0, 69, 88, 69, 82, 69, 76, 79, 51, /* 0x 880 */ 9, 0, 0, 0, 69, 88, 69, 82, 69, 76, 79, 51, 0,171, 2, 0, /* 0x 880 */
0,175, 2, 0, 0, 0, 0, 0, 0,177, 2, 0, 0, 69, 88, 69, /* 0x 890 */ 0, 0, 0, 0, 0,173, 2, 0, 0, 69, 88, 69, 82, 69, 76, 79, /* 0x 890 */
82, 69, 76, 79, 49, 0, 23, 0, 0, 0, 69, 88, 69, 77, 65, 73, /* 0x 8a0 */ 49, 0, 23, 0, 0, 0, 69, 88, 69, 77, 65, 73, 78, 56, 0,173, /* 0x 8a0 */
78, 56, 0,177, 2, 0, 0, 68, 69, 86, 73, 67, 69, 69, 78, 68, /* 0x 8b0 */ 2, 0, 0, 68, 69, 86, 73, 67, 69, 69, 78, 68, 0,176, 2, 0, /* 0x 8b0 */
0,180, 2, 0, 0, 69, 88, 69, 83, 84, 65, 67, 75, 0,200, 2, /* 0x 8c0 */ 0, 69, 88, 69, 83, 84, 65, 67, 75, 0,195, 2, 0, 0, 69, 88, /* 0x 8c0 */
0, 0, 69, 88, 69, 68, 85, 77, 77, 83, 0,206, 2, 0, 0, 69, /* 0x 8d0 */ 69, 68, 85, 77, 77, 83, 0,201, 2, 0, 0, 69, 88, 69, 83, 84, /* 0x 8d0 */
88, 69, 83, 84, 65, 83, 80, 0,206, 2, 0, 0, 69, 88, 69, 68, /* 0x 8e0 */ 65, 83, 80, 0,201, 2, 0, 0, 69, 88, 69, 68, 85, 77, 77, 80, /* 0x 8e0 */
85, 77, 77, 80, 0,209, 2, 0, 0, 69, 88, 69, 74, 85, 77, 80, /* 0x 8f0 */ 0,204, 2, 0, 0, 69, 88, 69, 74, 85, 77, 80, 70, 0,204, 2, /* 0x 8f0 */
70, 0,209, 2, 0, 0, 69, 88, 69, 82, 69, 84, 85, 82, 0,214, /* 0x 900 */ 0, 0, 69, 88, 69, 82, 69, 84, 85, 82, 0,209, 2, 0, 0, 69, /* 0x 900 */
2, 0, 0, 69, 88, 69, 82, 67, 83, 80, 79, 0,214, 2, 0, 0, /* 0x 910 */ 88, 69, 82, 67, 83, 80, 79, 0,209, 2, 0, 0, 69, 88, 69, 82, /* 0x 910 */
69, 88, 69, 82, 69, 84, 73, 80, 0,218, 2, 0, 0, 69, 88, 69, /* 0x 920 */ 69, 84, 73, 80, 0,213, 2, 0, 0, 69, 88, 69, 68, 85, 77, 77, /* 0x 920 */
68, 85, 77, 77, 90, 0,224, 2, 0, 0, 69, 88, 69, 84, 72, 69, /* 0x 930 */ 90, 0,219, 2, 0, 0, 69, 88, 69, 84, 72, 69, 78, 68, 0,219, /* 0x 930 */
78, 68, 0,224, 2, 0, 0,255,255,255,255,224, 2 /* 0x 940 */ 2, 0, 0,255,255,255,255,219, 2 /* 0x 940 */
}; };