LLM4Binary/decompile-bench-makefile huggingface dataset:
// File: /workspace/github_c_makefile_star2_O2/jsummers[P]deark/modules/os2bmp.c
// Function: do_bitmap_header
static int do_bitmap_header(deark *c, struct os2icoctx *d, struct srcbitmap *srcbmp,
	i64 pos, const char *bitmapname)
{
	i64 pal_start;
	int saved_indent_level;
	int retval = 0;

	de_dbg_indent_save(c, &saved_indent_level);
	de_dbg(c, "%s %s bitmap header at %"I64_FMT, d->fmtname, bitmapname, pos);
	de_dbg_indent(c, 1);

	if(!get_bitmap_info(c, srcbmp, d->fmt, d->fmtname, pos))
		goto done;

	// read palette
	if (srcbmp->bi.pal_entries > 0) {
		pal_start = pos+14+srcbmp->bi.infohdrsize;
		de_dbg(c, "palette at %d", (int)pal_start);
		de_dbg_indent(c, 1);
		de_read_palette_rgb(c->infile, pal_start, srcbmp->bi.pal_entries, srcbmp->bi.bytes_per_pal_entry,
			srcbmp->pal, 256, DE_GETRGBFLAG_BGR);
		de_dbg_indent(c, -1);
	}

	if(srcbmp->bi.size_of_headers_and_pal<26) {
		de_err(c, "Bad %s image", d->fmtname);
		goto done;
	}

	retval = 1;

done:
	de_dbg_indent_restore(c, saved_indent_level);
	return retval;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x18, %rsp
movq %r8, %rbp
movq %rcx, %r13
movq %rdx, %r15
movq %rsi, %r14
movq %rdi, %rbx
leaq 0x14(%rsp), %rsi
callq 0xdebae
movq (%r14), %rdx
leaq 0x8dc11(%rip), %rsi     # 0x12462d
xorl %r12d, %r12d
movq %rbx, %rdi
movq %rbp, %rcx
movq %r13, %r8
xorl %eax, %eax
callq 0xde896
pushq $0x1
popq %rbp
movq %rbx, %rdi
movl %ebp, %esi
callq 0xdeba7
movl 0x8(%r14), %edx
movq %rbx, %rdi
movq %r15, %rsi
movq %r13, %rcx
callq 0x96db8
testl %eax, %eax
je 0x96adf
cmpq $0x0, 0x58(%r15)
jle 0x96abb
movq 0x20(%r15), %rax
leaq (%rax,%r13), %r12
addq $0xe, %r12
leaq 0x8c758(%rip), %rsi     # 0x1231c8
movq %rbx, %rdi
movl %r12d, %edx
xorl %eax, %eax
callq 0xde896
pushq $0x1
popq %rsi
movq %rbx, %rdi
callq 0xdeba7
movq 0x18(%rbx), %rdi
movq 0x50(%r15), %rcx
movq 0x58(%r15), %rdx
leaq 0xb8(%r15), %r8
movl $0x1, (%rsp)
movl $0x100, %r9d            # imm = 0x100
movq %r12, %rsi
callq 0xe7963
pushq $-0x1
popq %rsi
movq %rbx, %rdi
callq 0xdeba7
cmpq $0x19, 0x90(%r15)
movl %ebp, %r12d
jg 0x96adf
movq (%r14), %rdx
leaq 0x8db76(%rip), %rsi     # 0x124648
xorl %r12d, %r12d
movq %rbx, %rdi
xorl %eax, %eax
callq 0xdf2a5
movl 0x14(%rsp), %esi
movq %rbx, %rdi
callq 0xdebb7
movl %r12d, %eax
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/jsummers[P]deark/modules/os2bmp.c
// Function: do_read_bitmap
static int do_read_bitmap(deark *c, struct srcbitmap *srcbmp, int mask_mode, const char *bitmapname)
{
	int retval = 0;

	if(!srcbmp) goto done;
	if(srcbmp->img) goto done;

	if(mask_mode && srcbmp->bi.bitcount!=1) {
		mask_mode = 0;
	}

	srcbmp->img = de_bitmap_create(c, srcbmp->bi.width, srcbmp->bi.height, mask_mode?1:4);

	de_dbg(c, "%s pixel data at %"I64_FMT, bitmapname, srcbmp->bi.bitsoffset);

	if(mask_mode) {
		de_convert_image_bilevel(c->infile, srcbmp->bi.bitsoffset, srcbmp->bi.rowspan,
			srcbmp->img, 0);
	}
	else if(srcbmp->bi.bitcount<=8) {
		de_convert_image_paletted(c->infile, srcbmp->bi.bitsoffset, srcbmp->bi.bitcount,
			srcbmp->bi.rowspan, srcbmp->pal, srcbmp->img, 0);
	}
	else if(srcbmp->bi.bitcount==24) {
		de_convert_image_rgb(c->infile, srcbmp->bi.bitsoffset, srcbmp->bi.rowspan, 3,
			srcbmp->img, DE_GETRGBFLAG_BGR);
	}
	else {
		goto done;
	}

	retval = 1;
done:
	return retval;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
subq $0x10, %rsp
xorl %ebp, %ebp
testq %rsi, %rsi
je 0x96bbd
movq %rsi, %rbx
cmpq $0x0, (%rsi)
jne 0x96bbd
movq %rcx, %r15
movq %rdi, %r14
testl %edx, %edx
je 0x96b3f
xorl %r12d, %r12d
cmpq $0x1, 0x38(%rbx)
setne %r12b
leal (%r12,%r12,2), %ecx
incl %ecx
jmp 0x96b45
pushq $0x4
popq %rcx
movb $0x1, %r12b
movq 0x28(%rbx), %rsi
movq 0x30(%rbx), %rdx
movq %r14, %rdi
callq 0xe7437
movq %rax, (%rbx)
movq 0x18(%rbx), %rcx
leaq 0x8db2b(%rip), %rsi     # 0x12468e
movq %r14, %rdi
movq %r15, %rdx
xorl %eax, %eax
callq 0xde896
testb %r12b, %r12b
je 0x96ba3
movq 0x38(%rbx), %rdx
cmpq $0x8, %rdx
jg 0x96bcc
movq 0x18(%r14), %rdi
movq (%rbx), %r9
movq 0x18(%rbx), %rsi
movq 0x68(%rbx), %rcx
addq $0xb8, %rbx
andl $0x0, (%rsp)
movq %rbx, %r8
callq 0xe7cbc
jmp 0x96bba
movq 0x18(%r14), %rdi
movq (%rbx), %rcx
movq 0x18(%rbx), %rsi
movq 0x68(%rbx), %rdx
xorl %r8d, %r8d
callq 0xe77b7
pushq $0x1
popq %rbp
movl %ebp, %eax
addq $0x10, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq
xorl %ebp, %ebp
cmpq $0x18, %rdx
jne 0x96bbd
movq 0x18(%r14), %rdi
movq (%rbx), %r8
movq 0x18(%rbx), %rsi
movq 0x68(%rbx), %rdx
pushq $0x3
popq %rcx
pushq $0x1
popq %rbp
movl %ebp, %r9d
callq 0xe7f67
jmp 0x96bbd
// File: /workspace/github_c_makefile_star2_O2/jsummers[P]deark/modules/os2bmp.c
// Function: do_apply_os2bmp_mask
static void do_apply_os2bmp_mask(deark *c, de_bitmap *fg, de_bitmap *mask, int is_color)
{
	i64 i, j;
	i64 mask_adj_height;
	int inverse_used = 0;

	mask_adj_height = mask->height / 2;

	for(j=0; j<fg->height && j<mask_adj_height; j++) {
		for(i=0; i<fg->width && i<mask->width; i++) {
			u8 andmaskclr;
			u8 xormaskclr;
			u32 oldclr;
			u32 newclr;

			oldclr = de_bitmap_getpixel(fg, i, j);
			newclr = oldclr;
			xormaskclr = DE_COLOR_K(de_bitmap_getpixel(mask, i, j));
			andmaskclr =  DE_COLOR_K(de_bitmap_getpixel(mask, i, mask_adj_height+j));

			if(andmaskclr==0) {
				if(is_color) {
					// For color bitmaps, the XOR bit is not used when the AND bit is 0.
					// Always use foreground color.
					;
				}
				else {
					if(xormaskclr==0) {
						newclr = DE_STOCKCOLOR_BLACK;
					}
					else {
						newclr = DE_STOCKCOLOR_WHITE;
					}
				}
			}
			else {
				if(xormaskclr==0) { // transparent
					newclr = DE_SET_ALPHA(oldclr, 0);
				}
				else { // inverse background
					newclr = get_inv_bkgd_replacement_clr(i, j);
					inverse_used = 1;
				}
			}

			if(newclr!=oldclr) {
				de_bitmap_setpixel_rgb(fg, i, j, newclr);
			}
		}
	}

	if(inverse_used) {
		de_warn(c, "This image contains inverse background pixels, which are not fully supported.");
	}
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x28, %rsp
movl %ecx, 0x4(%rsp)
movq %rdx, %r14
movq %rsi, %r15
movq %rdi, 0x10(%rsp)
movq 0x10(%rdx), %rax
pushq $0x2
popq %rcx
cqto
idivq %rcx
movq $0x0, 0x8(%rsp)
xorl %r13d, %r13d
movq %rax, 0x18(%rsp)
cmpq 0x10(%r15), %r13
jge 0x96d08
cmpq %rax, %r13
jge 0x96d08
addq %r13, %rax
movq %rax, 0x20(%rsp)
xorl %r12d, %r12d
cmpq 0x8(%r15), %r12
jge 0x96cfb
cmpq 0x8(%r14), %r12
jge 0x96cfb
movq %r15, %rdi
movq %r12, %rsi
movq %r13, %rdx
callq 0xe735f
movl %eax, %ebp
movq %r14, %rdi
movq %r12, %rsi
movq %r13, %rdx
callq 0xe735f
movl %eax, %ebx
movq %r14, %rdi
movq %r12, %rsi
movq 0x20(%rsp), %rdx
callq 0xe735f
testl $0xff0000, %eax         # imm = 0xFF0000
je 0x96cbb
testl $0xff0000, %ebx         # imm = 0xFF0000
je 0x96cd9
leal (%r12,%r13), %eax
testb $0x1, %al
movl $0x80ff0080, %ecx       # imm = 0x80FF0080
movl $0x808000ff, %eax       # imm = 0x808000FF
cmovel %eax, %ecx
pushq $0x1
popq %rax
movq %rax, 0x8(%rsp)
jmp 0x96ce1
cmpl $0x0, 0x4(%rsp)
jne 0x96cf3
andl $0xff0000, %ebx         # imm = 0xFF0000
negl %ebx
movl $0x0, %ecx
sbbl %ecx, %ecx
orl $0xff000000, %ecx       # imm = 0xFF000000
jmp 0x96ce1
movl %ebp, %ecx
andl $0xffffff, %ecx         # imm = 0xFFFFFF
cmpl %ebp, %ecx
je 0x96cf3
movq %r15, %rdi
movq %r12, %rsi
movq %r13, %rdx
callq 0xe7287
incq %r12
jmp 0x96c4b
incq %r13
movq 0x18(%rsp), %rax
jmp 0x96c2d
cmpl $0x0, 0x8(%rsp)
je 0x96d30
leaq 0x847de(%rip), %rsi     # 0x11b4f4
movq 0x10(%rsp), %rdi
xorl %eax, %eax
addq $0x28, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0xdf05a
addq $0x28, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/jsummers[P]deark/modules/os2bmp.c
// Function: do_write_final_image
static void do_write_final_image(deark *c, struct os2icoctx *d, de_bitmap *img)
{
	de_finfo *fi = NULL;

	fi = de_finfo_create(c);
	if(d->srcbmp) {
		if(d->srcbmp->has_hotspot) {
			fi->has_hotspot = 1;
			fi->hotspot_x = d->srcbmp->bi.hotspot_x;
			fi->hotspot_y = (int)img->height - 1 - d->srcbmp->bi.hotspot_y;
		}
	}
	else if(d->maskbmp) {
		if(d->maskbmp->has_hotspot) {
			fi->has_hotspot = 1;
			fi->hotspot_x = d->maskbmp->bi.hotspot_x;
			fi->hotspot_y = (int)img->height - 1 - d->maskbmp->bi.hotspot_y;
		}
	}

	de_bitmap_write_to_file_finfo(img, fi, DE_CREATEFLAG_OPT_IMAGE | DE_CREATEFLAG_FLIP_IMAGE);

	de_finfo_destroy(c, fi);
}

// Assembly:
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
pushq %rax
movq %rdx, %r14
movq %rsi, %r12
movq %rdi, %rbx
callq 0xdfd1a
movq %rax, %r15
movq 0x10(%r12), %rax
testq %rax, %rax
jne 0x96d6c
movq 0x18(%r12), %rax
testq %rax, %rax
je 0x96d94
cmpb $0x0, 0xa8(%rax)
je 0x96d94
movb $0x1, 0xe(%r15)
movl 0xc(%rax), %ecx
movl %ecx, 0x98(%r15)
movl 0x10(%rax), %eax
notl %eax
addl 0x10(%r14), %eax
movl %eax, 0x9c(%r15)
pushq $0x6
popq %rdx
movq %r14, %rdi
movq %r15, %rsi
callq 0xe70ab
movq %rbx, %rdi
movq %r15, %rsi
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
jmp 0xdfd24
// File: /workspace/github_c_makefile_star2_O2/jsummers[P]deark/modules/os2bmp.c
// Function: get_bitmap_info
static int get_bitmap_info(deark *c, struct srcbitmap *srcbmp, enum fmtcode fmt,
	const char *fmtname, i64 pos)
{
	int retval = 0;
	unsigned int flags;

	flags = DE_BMPINFO_HAS_FILEHEADER;
	if(fmt==DE_OS2FMT_CP || fmt==DE_OS2FMT_PT) {
		srcbmp->has_hotspot = 1;
		flags |= DE_BMPINFO_HAS_HOTSPOT;
	}
	if(!fmtutil_get_bmpinfo(c, c->infile, &srcbmp->bi, pos, c->infile->len - pos, flags)) {
		de_err(c, "Invalid or unsupported bitmap");
		goto done;
	}

	if(srcbmp->bi.is_compressed) {
		if(srcbmp->bi.sizeImage_field) {
			srcbmp->bitssize = srcbmp->bi.sizeImage_field;
		}
		else {
			de_err(c, "Cannot determine bits size");
			goto done;
		}
	}
	else {
		srcbmp->bitssize = srcbmp->bi.rowspan * srcbmp->bi.height;
	}

	retval = 1;
done:
	return retval;
}

// Assembly:
pushq %rbp
pushq %r14
pushq %rbx
movq %rsi, %r14
movq %rdi, %rbx
cmpl $0xa, %edx
je 0x96dcc
cmpl $0x6, %edx
jne 0x96dd8
movb $0x1, 0xa8(%r14)
pushq $0x5
jmp 0x96dda
pushq $0x1
popq %r9
movq 0x18(%rbx), %rsi
leaq 0x8(%r14), %rdx
movq 0x18(%rsi), %r8
subq %rcx, %r8
movq %rbx, %rdi
callq 0xebba5
testl %eax, %eax
je 0x96e13
cmpl $0x0, 0xa0(%r14)
je 0x96e28
movq 0x48(%r14), %rax
testq %rax, %rax
jne 0x96e31
leaq 0x8d862(%rip), %rsi     # 0x124673
jmp 0x96e1a
leaq 0x8d83b(%rip), %rsi     # 0x124655
xorl %ebp, %ebp
movq %rbx, %rdi
xorl %eax, %eax
callq 0xdf2a5
jmp 0x96e3b
movq 0x30(%r14), %rax
imulq 0x68(%r14), %rax
movq %rax, 0xb0(%r14)
pushq $0x1
popq %rbp
movl %ebp, %eax
popq %rbx
popq %r14
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/jsummers[P]deark/modules/os2bmp.c
// Function: do_extract_one_image
static void do_extract_one_image(deark *c, i64 pos, enum fmtcode fmt,
	const char *fmtname, const char *ext)
{
	struct srcbitmap *srcbmp = NULL;
	dbuf *f = NULL;

	de_dbg(c, "%s image at %d", fmtname, (int)pos);
	de_dbg_indent(c, 1);

	srcbmp = de_malloc(c, sizeof(struct srcbitmap));

	if(!get_bitmap_info(c, srcbmp, fmt, fmtname, pos))
		goto done;

	f = dbuf_create_output_file(c, ext, NULL, 0);

	// First 10 bytes of the FILEHEADER can be copied unchanged.
	dbuf_copy(c->infile, pos, 10, f);

	// The "bits offset" is probably the only thing we need to adjust.
	dbuf_writeu32le(f, srcbmp->bi.size_of_headers_and_pal);

	// Copy the infoheader & palette
	dbuf_copy(c->infile, pos+14, srcbmp->bi.size_of_headers_and_pal-14, f);

	// Copy the bitmap
	if(srcbmp->bi.bitsoffset+srcbmp->bitssize > c->infile->len) goto done;
	dbuf_copy(c->infile, srcbmp->bi.bitsoffset, srcbmp->bitssize, f);

done:
	de_dbg_indent(c, -1);
	dbuf_close(f);
	do_free_srcbmp(c, srcbmp);
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
movq %r8, %r13
movl %edx, %ebp
movq %rsi, %r12
movq %rdi, %rbx
leaq 0x8d8e0(%rip), %rsi     # 0x12473f
xorl %r14d, %r14d
movq %rcx, %rdx
movl %r12d, %ecx
xorl %eax, %eax
callq 0xde896
pushq $0x1
popq %rsi
movq %rbx, %rdi
callq 0xdeba7
movl $0x4b8, %esi            # imm = 0x4B8
movq %rbx, %rdi
callq 0xdecaf
movq %rax, %r15
movq %rbx, %rdi
movq %rax, %rsi
movl %ebp, %edx
movq %r12, %rcx
callq 0x96db8
testl %eax, %eax
je 0x96f10
movq %rbx, %rdi
movq %r13, %rsi
xorl %edx, %edx
xorl %ecx, %ecx
callq 0xe4e62
movq %rax, %r14
movq 0x18(%rbx), %rdi
pushq $0xa
popq %rdx
movq %r12, %rsi
movq %rax, %rcx
callq 0xe45f4
movq 0x90(%r15), %rsi
movq %r14, %rdi
callq 0xe5f7f
movq 0x18(%rbx), %rdi
addq $0xe, %r12
movq 0x90(%r15), %rdx
addq $-0xe, %rdx
movq %r12, %rsi
movq %r14, %rcx
callq 0xe45f4
movq 0x18(%r15), %rsi
movq 0xb0(%r15), %rdx
leaq (%rdx,%rsi), %rax
movq 0x18(%rbx), %rdi
cmpq 0x18(%rdi), %rax
jg 0x96f10
movq %r14, %rcx
callq 0xe45f4
pushq $-0x1
popq %rsi
movq %rbx, %rdi
callq 0xdeba7
movq %r14, %rdi
callq 0xe5591
movq %rbx, %rdi
movq %r15, %rsi
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x969bc
// File: /workspace/github_c_makefile_star2_O2/jsummers[P]deark/modules/ole1.c
// Function: de_module_ole1
void de_module_ole1(deark *c, struct deark_module_info *mi)
{
	mi->id = "ole1";
	mi->desc = "OLE1.0 objects";
	mi->run_fn = de_run_ole1;
	mi->identify_fn = NULL;
	mi->flags |= DE_MODFLAG_HIDDEN;
}

// Assembly:
leaq 0x7574f(%rip), %rax     # 0x10c692
movq %rax, (%rsi)
leaq 0x8d80f(%rip), %rax     # 0x12475c
movq %rax, 0x8(%rsi)
leaq 0xe(%rip), %rax         # 0x96f66
movq %rax, 0x18(%rsi)
andq $0x0, 0x20(%rsi)
orb $0x1, 0x30(%rsi)
retq
// File: /workspace/github_c_makefile_star2_O2/jsummers[P]deark/modules/ole1.c
// Function: calc_skip_presentation_obj
static int calc_skip_presentation_obj(deark *c, lctx *d)
{
	UI format;
	int retval = 0;
	int ret;
	i64 n;

	if(!calc_chkver(c, d)) goto done;

	format = (UI)de_getu32le_p(&d->pos_for_calc_size);
	if(format==0) {
		retval = 1;
		goto done;
	}

	ret = calc_chkstring(c, d);
	if(ret) {
		d->pos_for_calc_size += 8; // width, height
		n = de_getu32le_p(&d->pos_for_calc_size);
		d->pos_for_calc_size += n; // Presentation data
	}
	else {
		n = de_getu32le_p(&d->pos_for_calc_size);
		if(n==0) {
			n = de_getu32le_p(&d->pos_for_calc_size);
			d->pos_for_calc_size += n; // Clipboard format name
		}
		n = de_getu32le_p(&d->pos_for_calc_size);
		d->pos_for_calc_size += n; // Presentation data
	}
	retval = 1;

done:
	return retval;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
movq %rsi, %rbx
movq %rdi, %r14
callq 0x981ed
testl %eax, %eax
je 0x982c7
movq 0x18(%r14), %rdi
addq $0x10, %rbx
movq %rbx, %rsi
callq 0xe40bf
pushq $0x1
popq %rbp
testl %eax, %eax
je 0x9830b
movq 0x18(%r14), %rdi
movq %rbx, %rsi
callq 0xe40bf
movq %rax, %r15
cmpq $0xf, %rax
jg 0x982cb
movq 0x18(%r14), %rdi
movq (%rbx), %rsi
pushq $0x1
popq %r8
pushq $0x5
popq %r9
movq %r15, %rdx
movq %r15, %rcx
callq 0xe495c
movq %rax, %r12
movq 0x8(%rax), %r13
leaq 0x9b4eb(%rip), %rsi     # 0x13376d
movq %r13, %rdi
callq 0x181a0
testl %eax, %eax
je 0x982b4
leaq 0xa4fbf(%rip), %rsi     # 0x13d254
movq %r13, %rdi
callq 0x181a0
testl %eax, %eax
je 0x982b4
leaq 0xa4fb6(%rip), %rsi     # 0x13d25e
movq %r13, %rdi
callq 0x181a0
testl %eax, %eax
jne 0x982ce
addq %r15, (%rbx)
movq %r14, %rdi
movq %r12, %rsi
callq 0xe4b94
pushq $0x8
popq %rax
jmp 0x982f9
xorl %ebp, %ebp
jmp 0x9830b
xorl %r12d, %r12d
addq %r15, (%rbx)
movq %r14, %rdi
movq %r12, %rsi
callq 0xe4b94
movq 0x18(%r14), %rdi
movq %rbx, %rsi
callq 0xe40bf
testq %rax, %rax
jne 0x982fc
movq 0x18(%r14), %rdi
movq %rbx, %rsi
callq 0xe40bf
addq %rax, (%rbx)
movq 0x18(%r14), %rdi
movq %rbx, %rsi
callq 0xe40bf
addq %rax, (%rbx)
movl %ebp, %eax
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/jsummers[P]deark/modules/os2pack.c
// Function: de_module_os2pack
void de_module_os2pack(deark *c, struct deark_module_info *mi)
{
	mi->id = "os2pack";
	mi->desc = "OS/2 PACK archive";
	mi->run_fn = de_run_os2pack;
	mi->identify_fn = de_identify_os2pack;
}

// Assembly:
leaq 0x8c7d1(%rip), %rax     # 0x124af4
movq %rax, (%rsi)
leaq 0x8c7cf(%rip), %rax     # 0x124afc
movq %rax, 0x8(%rsi)
leaq 0x10(%rip), %rax        # 0x98348
movq %rax, 0x18(%rsi)
leaq 0xa(%rip), %rax         # 0x9834d
movq %rax, 0x20(%rsi)
retq
// File: /workspace/github_c_makefile_star2_O2/jsummers[P]deark/modules/os2pack.c
// Function: de_module_os2pack2
void de_module_os2pack2(deark *c, struct deark_module_info *mi)
{
	mi->id = "os2pack2";
	mi->desc = "OS/2 PACK2 archive";
	mi->run_fn = de_run_os2pack2;
	mi->flags |= DE_MODFLAG_WARNPARSEONLY;
	mi->identify_fn = de_identify_os2pack2;
}

// Assembly:
leaq 0x8c7a4(%rip), %rax     # 0x124b0e
movq %rax, (%rsi)
leaq 0x8c7a3(%rip), %rax     # 0x124b17
movq %rax, 0x8(%rsi)
leaq 0x14(%rip), %rax        # 0x98393
movq %rax, 0x18(%rsi)
orb $0x20, 0x30(%rsi)
leaq 0xa(%rip), %rax         # 0x98398
movq %rax, 0x20(%rsi)
retq
// File: /workspace/github_c_makefile_star2_O2/jsummers[P]deark/modules/os2pack.c
// Function: os2pack_is_member_at
static UI os2pack_is_member_at(dbuf *f, i64 pos)
{
	UI sig;

	sig = (UI)dbuf_getu32be(f, pos);
	return (sig==0xa596feffU || sig==0xa596ffffU ||
		sig==0xa5960014U || sig==0xa596140aU) ? 1 : 0;
}

// Assembly:
pushq %rax
callq 0xe404f
movq %rax, %rcx
pushq $0x1
popq %rax
cmpl $0xa5960014, %ecx       # imm = 0xA5960014
je 0x98b1b
cmpl $0xa596feff, %ecx       # imm = 0xA596FEFF
je 0x98b1b
cmpl $0xa596ffff, %ecx       # imm = 0xA596FFFF
je 0x98b1b
xorl %eax, %eax
cmpl $0xa596140a, %ecx       # imm = 0xA596140A
sete %al
popq %rcx
retq
// File: /workspace/github_c_makefile_star2_O2/jsummers[P]deark/modules/os2pack.c
// Function: os2pack2_read_cmpr_method
static void os2pack2_read_cmpr_method(deark *c, i64 pos, i64 len)
{
	struct de_fourcc cmpr4cc;

	if(len<8) return;
	dbuf_read_fourcc(c->infile, pos+4, &cmpr4cc, 4, 0x0);
	de_dbg(c, "cmpr meth: '%s'", cmpr4cc.id_dbgstr); // Usually "fT19"
}

// Assembly:
cmpq $0x8, %rdx
jl 0x98b5c
pushq %rbx
subq $0x30, %rsp
movq %rdi, %rbx
movq 0x18(%rdi), %rdi
addq $0x4, %rsi
movq %rsp, %rdx
pushq $0x4
popq %rcx
xorl %r8d, %r8d
callq 0xe657c
leaq 0x10(%rsp), %rdx
leaq 0x8c0ac(%rip), %rsi     # 0x124bf9
movq %rbx, %rdi
xorl %eax, %eax
callq 0xde896
addq $0x30, %rsp
popq %rbx
retq
// File: /workspace/github_c_makefile_star2_O2/jsummers[P]deark/modules/officeart.c
// Function: de_module_officeart
void de_module_officeart(deark *c, struct deark_module_info *mi)
{
	mi->id = "officeart";
	mi->desc = "Office Art data";
	mi->run_fn = de_run_officeart;
	mi->flags |= DE_MODFLAG_HIDDEN;
}

// Assembly:
leaq 0x743e8(%rip), %rax     # 0x10cf6f
movq %rax, (%rsi)
leaq 0x8c0ef(%rip), %rax     # 0x124c80
movq %rax, 0x8(%rsi)
leaq 0x9(%rip), %rax         # 0x98ba5
movq %rax, 0x18(%rsi)
orb $0x1, 0x30(%rsi)
retq
// File: /workspace/github_c_makefile_star2_O2/jsummers[P]deark/modules/lbr.c
// Function: de_module_lbr
void de_module_lbr(deark *c, struct deark_module_info *mi)
{
	mi->id = "lbr";
	mi->desc = "LBR archive";
	mi->run_fn = de_run_lbr;
	mi->identify_fn = de_identify_lbr;
}

// Assembly:
leaq 0x8bd00(%rip), %rax     # 0x124db7
movq %rax, (%rsi)
leaq 0x8bcfa(%rip), %rax     # 0x124dbb
movq %rax, 0x8(%rsi)
leaq 0x10(%rip), %rax        # 0x990dc
movq %rax, 0x18(%rsi)
leaq 0x97(%rip), %rax        # 0x9916e
movq %rax, 0x20(%rsi)
retq
// File: /workspace/github_c_makefile_star2_O2/jsummers[P]deark/modules/lbr.c
// Function: de_run_lbr
static void de_run_lbr(deark *c, de_module_params *mparams)
{
	lctx *d = NULL;
	i64 pos = 0;

	d = de_malloc(c, sizeof(lctx));
	d->input_encoding = de_get_input_encoding(c, NULL, DE_ENCODING_ASCII);

	d->crco = de_crcobj_create(c, DE_CRCOBJ_CRC16_XMODEM);

	// Read directory
	if(!do_entry(c, d, pos, 1)) goto done;
	pos += LBR_DIRENT_SIZE;

	// Read member files
	while(pos+LBR_DIRENT_SIZE <= c->infile->len &&
		pos+LBR_DIRENT_SIZE <= d->dir_len_in_bytes)
	{
		if(!do_entry(c, d, pos, 0)) goto done;
		pos += LBR_DIRENT_SIZE;
	}

done:
	if(d) {
		de_crcobj_destroy(d->crco);
		de_free(c, d);
	}
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %rbx
pushq %rax
movq %rdi, %rbx
pushq $0x18
popq %rsi
callq 0xdecaf
movq %rax, %r14
pushq $0x1
popq %rbp
movq %rbx, %rdi
xorl %esi, %esi
movl %ebp, %edx
callq 0xe08d2
movl %eax, (%r14)
pushq $0x20
popq %rsi
movq %rbx, %rdi
callq 0xe0ae9
movq %rax, 0x10(%r14)
movq %rbx, %rdi
movq %r14, %rsi
xorl %edx, %edx
movl %ebp, %ecx
callq 0x9a60e
testl %eax, %eax
je 0x99150
pushq $0x20
popq %rdx
leaq 0x20(%rdx), %r15
movq 0x18(%rbx), %rax
cmpq 0x18(%rax), %r15
jg 0x99150
cmpq 0x8(%r14), %r15
jg 0x99150
movq %rbx, %rdi
movq %r14, %rsi
xorl %ecx, %ecx
callq 0x9a60e
movq %r15, %rdx
testl %eax, %eax
jne 0x99128
movq 0x10(%r14), %rdi
callq 0xe0e8d
movq %rbx, %rdi
movq %r14, %rsi
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
jmp 0xded32
// File: /workspace/github_c_makefile_star2_O2/jsummers[P]deark/modules/lbr.c
// Function: de_module_squeeze
void de_module_squeeze(deark *c, struct deark_module_info *mi)
{
	mi->id = "squeeze";
	mi->desc = "Squeeze (CP/M)";
	mi->run_fn = de_run_squeeze;
	mi->identify_fn = de_identify_squeeze;
}

// Assembly:
leaq 0xa44ea(%rip), %rax     # 0x13d681
movq %rax, (%rsi)
leaq 0x8bc26(%rip), %rax     # 0x124dc7
movq %rax, 0x8(%rsi)
leaq 0x10(%rip), %rax        # 0x991bc
movq %rax, 0x18(%rsi)
leaq 0x5a3(%rip), %rax       # 0x9975a
movq %rax, 0x20(%rsi)
retq
// File: /workspace/github_c_makefile_star2_O2/jsummers[P]deark/modules/lbr.c
// Function: de_module_crunch
void de_module_crunch(deark *c, struct deark_module_info *mi)
{
	mi->id = "crunch";
	mi->desc = "Crunch (CP/M)";
	mi->run_fn = de_run_crunch;
	mi->identify_fn = de_identify_crunch;
}

// Assembly:
leaq 0x8b64d(%rip), %rax     # 0x124dd6
movq %rax, (%rsi)
leaq 0x8b64a(%rip), %rax     # 0x124ddd
movq %rax, 0x8(%rsi)
leaq 0x10(%rip), %rax        # 0x997ae
movq %rax, 0x18(%rsi)
leaq 0x3d1(%rip), %rax       # 0x99b7a
movq %rax, 0x20(%rsi)
retq
// File: /workspace/github_c_makefile_star2_O2/jsummers[P]deark/modules/lbr.c
// Function: de_module_crlzh
void de_module_crlzh(deark *c, struct deark_module_info *mi)
{
	mi->id = "crlzh";
	mi->desc = "CRLZH (CP/M)";
	mi->run_fn = de_run_crlzh;
	mi->identify_fn = de_identify_crlzh;
}

// Assembly:
leaq 0x8b24e(%rip), %rax     # 0x124deb
movq %rax, (%rsi)
leaq 0x8b24a(%rip), %rax     # 0x124df1
movq %rax, 0x8(%rsi)
leaq 0x10(%rip), %rax        # 0x99bc2
movq %rax, 0x18(%rsi)
leaq 0x36e(%rip), %rax       # 0x99f2b
movq %rax, 0x20(%rsi)
retq
// File: /workspace/github_c_makefile_star2_O2/jsummers[P]deark/modules/lbr.c
// Function: de_module_zsq
void de_module_zsq(deark *c, struct deark_module_info *mi)
{
	mi->id = "zsq";
	mi->desc = "ZSQ (ZSQUSQ, LZW-compressed file)";
	mi->run_fn = de_run_zsq;
	mi->identify_fn = de_identify_zsq;
}

// Assembly:
leaq 0x8aeb0(%rip), %rax     # 0x124dfe
movq %rax, (%rsi)
leaq 0x8aeaa(%rip), %rax     # 0x124e02
movq %rax, 0x8(%rsi)
leaq 0x10(%rip), %rax        # 0x99f73
movq %rax, 0x18(%rsi)
leaq 0x2e6(%rip), %rax       # 0x9a254
movq %rax, 0x20(%rsi)
retq
// File: /workspace/github_c_makefile_star2_O2/jsummers[P]deark/modules/lbr.c
// Function: de_module_lzwcom
void de_module_lzwcom(deark *c, struct deark_module_info *mi)
{
	mi->id = "lzwcom";
	mi->desc = "LZWCOM compressed file";
	mi->run_fn = de_run_lzwcom;
	mi->identify_fn = NULL;
	mi->help_fn = de_help_lzwcom;
}

// Assembly:
leaq 0x8abad(%rip), %rax     # 0x124e24
movq %rax, (%rsi)
leaq 0x8abaa(%rip), %rax     # 0x124e2b
movq %rax, 0x8(%rsi)
leaq 0x15(%rip), %rax        # 0x9a2a1
movq %rax, 0x18(%rsi)
andq $0x0, 0x20(%rsi)
leaq 0x364(%rip), %rax       # 0x9a600
movq %rax, 0x28(%rsi)
retq
// File: /workspace/github_c_makefile_star2_O2/jsummers[P]deark/modules/lbr.c
// Function: handle_timestamp
static void handle_timestamp(deark *c, lctx *d, i64 date_raw, i64 time_raw,
	struct de_timestamp *ts, const char *name)
{
	i64 ut;
	char timestamp_buf[64];

	if(date_raw==0) {
		de_dbg(c, "%s: [not set]", name);
		return;
	}

	// Day 0 is Dec 31, 1977 (or it would be, if 0 weren't reserved).
	// Difference from Unix time (Jan 1, 1970) =
	//  365 days in 1970, 1971, 1973, 1974, 1975
	//  + 366 days in 1972, 1976
	//  + 364 days in 1977.
	ut = 86400 * (date_raw + (365*5 + 366*2 + 364));

	// Time of day is in DOS format.
	ut += 3600*(time_raw>>11); // hours
	ut += 60*(time_raw&0x07e0)>>5; // minutes
	ut += 2*(time_raw&0x001f); // seconds
	de_unix_time_to_timestamp(ut, ts, 0);
	de_timestamp_to_string(ts, timestamp_buf, sizeof(timestamp_buf), 0);
	de_dbg(c, "%s: %s", name, timestamp_buf);
}

// Assembly:
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
subq $0x48, %rsp
movq %r8, %rbx
movq %rdi, %r14
testq %rsi, %rsi
je 0x9ab6d
movq %rcx, %r15
imulq $0x15180, %rsi, %rax    # imm = 0x15180
movq %rdx, %rcx
sarq $0xb, %rcx
imulq $0xe10, %rcx, %rcx      # imm = 0xE10
addq %rax, %rcx
movl %edx, %eax
andl $0x1f, %eax
leaq (%rcx,%rax,2), %rax
andl $0x7e0, %edx            # imm = 0x7E0
imull $0x3c, %edx, %ecx
shrl $0x5, %ecx
leaq (%rcx,%rax), %rdi
addq $0xf0aed80, %rdi        # imm = 0xF0AED80
movq %r15, %rsi
xorl %edx, %edx
callq 0xe002e
movq %rsp, %r12
pushq $0x40
popq %rdx
movq %r15, %rdi
movq %r12, %rsi
xorl %ecx, %ecx
callq 0xe0644
leaq 0xa1361(%rip), %rsi     # 0x13beb2
movq %r14, %rdi
movq %rbx, %rdx
movq %r12, %rcx
xorl %eax, %eax
callq 0xde896
addq $0x48, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
retq
leaq 0x8a388(%rip), %rsi     # 0x124efc
movq %r14, %rdi
movq %rbx, %rdx
xorl %eax, %eax
addq $0x48, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
jmp 0xde896
// File: /workspace/github_c_makefile_star2_O2/jsummers[P]deark/modules/megapaint.c
// Function: de_module_bld
void de_module_bld(deark *c, struct deark_module_info *mi)
{
	mi->id = "bld";
	mi->desc = "MegaPaint BLD";
	mi->run_fn = de_run_bld;
	mi->identify_fn = de_identify_bld;
}

// Assembly:
leaq 0x8a3ec(%rip), %rax     # 0x1251eb
movq %rax, (%rsi)
leaq 0x8a3e6(%rip), %rax     # 0x1251ef
movq %rax, 0x8(%rsi)
leaq 0x10(%rip), %rax        # 0x9ae24
movq %rax, 0x18(%rsi)
leaq 0x1a3(%rip), %rax       # 0x9afc2
movq %rax, 0x20(%rsi)
retq
// File: /workspace/github_c_makefile_star2_O2/jsummers[P]deark/modules/megapaint.c
// Function: de_module_megapaint_pat
void de_module_megapaint_pat(deark *c, struct deark_module_info *mi)
{
	mi->id = "megapaint_pat";
	mi->desc = "MegaPaint Patterns";
	mi->run_fn = de_run_megapaint_pat;
	mi->identify_fn = de_identify_megapaint_pat;
}

// Assembly:
leaq 0x8a201(%rip), %rax     # 0x1251fd
movq %rax, (%rsi)
leaq 0x8a205(%rip), %rax     # 0x12520b
movq %rax, 0x8(%rsi)
leaq 0x10(%rip), %rax        # 0x9b021
movq %rax, 0x18(%rsi)
leaq 0x10f(%rip), %rax       # 0x9b12b
movq %rax, 0x20(%rsi)
retq
// File: /workspace/github_c_makefile_star2_O2/jsummers[P]deark/modules/megapaint.c
// Function: de_run_megapaint_pat
static void de_run_megapaint_pat(deark *c, de_module_params *mparams)
{
	// Note: This module is based on guesswork, and may be incomplete.
	de_bitmap *mainimg = NULL;
	i64 main_w, main_h;
	i64 pos = 0;
	i64 k;

	pos += 8;
	main_w = 1+(32+1)*16;
	main_h = 1+(32+1)*2;

	mainimg = de_bitmap_create(c, main_w, main_h, 1);
	de_bitmap_rect(mainimg, 0, 0, main_w, main_h, DE_MAKE_GRAY(128), 0);

	for(k=0; k<32; k++) {
		de_bitmap *img = NULL;
		i64 imgpos_x, imgpos_y;

		img = de_bitmap_create(c, 32, 32, 1);
		img->is_internal = 1;
		de_convert_image_bilevel(c->infile, pos, 4, img, DE_CVTF_WHITEISZERO);
		pos += 4*32;

		imgpos_x = 1+(32+1)*(k%16);
		imgpos_y = 1+(32+1)*(k/16);
		de_bitmap_copy_rect(img, mainimg, 0, 0, 32, 32, imgpos_x, imgpos_y, 0);
		de_bitmap_destroy(img);
	}

	de_bitmap_write_to_file(mainimg, NULL, 0);
	de_bitmap_destroy(mainimg);
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x28, %rsp
movq %rdi, %rbx
pushq $0x43
popq %r15
pushq $0x1
popq %rcx
movl $0x211, %esi            # imm = 0x211
movq %r15, %rdx
callq 0xe7437
andl $0x0, (%rsp)
xorl %ebp, %ebp
movl $0x211, %ecx            # imm = 0x211
movq %rax, 0x20(%rsp)
movq %rax, %rdi
xorl %esi, %esi
xorl %edx, %edx
movq %r15, %r8
movl $0xff808080, %r9d       # imm = 0xFF808080
callq 0xe8292
pushq $0x8
popq %r15
pushq $0x20
popq %r12
pushq $0x1
popq %r14
cmpq $0x1008, %r15           # imm = 0x1008
je 0x9b104
movq %rbx, %rdi
movq %r12, %rsi
movq %r12, %rdx
movl %r14d, %ecx
callq 0xe7437
movq %rax, %r13
movb $0x1, 0x38(%rax)
movq 0x18(%rbx), %rdi
movq %r15, %rsi
pushq $0x4
popq %rdx
movq %rax, %rcx
movl %r14d, %r8d
callq 0xe77b7
subq $-0x80, %r15
movl %ebp, %eax
andl $0xf, %eax
imulq $0x21, %rax, %rax
incq %rax
movq %rbp, %rcx
shrq $0x4, %rcx
imulq $0x21, %rcx, %rcx
incq %rcx
andl $0x0, 0x10(%rsp)
movq %rcx, 0x8(%rsp)
movq %rax, (%rsp)
movq %r13, %rdi
movq 0x20(%rsp), %rsi
xorl %edx, %edx
xorl %ecx, %ecx
movq %r12, %r8
movq %r12, %r9
callq 0xe8314
movq %r13, %rdi
callq 0xe7084
incq %rbp
jmp 0x9b077
movq 0x20(%rsp), %rbx
movq %rbx, %rdi
xorl %esi, %esi
xorl %edx, %edx
callq 0xe70b7
movq %rbx, %rdi
addq $0x28, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0xe7084
// File: /workspace/github_c_makefile_star2_O2/jsummers[P]deark/modules/megapaint.c
// Function: de_module_megapaint_lib
void de_module_megapaint_lib(deark *c, struct deark_module_info *mi)
{
	mi->id = "megapaint_lib";
	mi->desc = "MegaPaint Symbol Library";
	mi->run_fn = de_run_megapaint_lib;
	mi->identify_fn = de_identify_megapaint_lib;
}

// Assembly:
leaq 0x8a0ab(%rip), %rax     # 0x12521e
movq %rax, (%rsi)
leaq 0x8a0af(%rip), %rax     # 0x12522c
movq %rax, 0x8(%rsi)
leaq 0x10(%rip), %rax        # 0x9b198
movq %rax, 0x18(%rsi)
leaq 0x126(%rip), %rax       # 0x9b2b9
movq %rax, 0x20(%rsi)
retq
// File: /workspace/github_c_makefile_star2_O2/jsummers[P]deark/modules/megapaint.c
// Function: de_run_megapaint_lib
static void de_run_megapaint_lib(deark *c, de_module_params *mparams)
{
	// Note: This module is based on guesswork, and may be incomplete.
	const i64 idxpos = 14;
	i64 k;
	i64 nsyms;

	nsyms = 1+de_getu16be(12);
	de_dbg(c, "number of symbols: %d", (int)nsyms);

	for(k=0; k<nsyms; k++) {
		i64 sym_offs;
		i64 w, h, rowspan;

		sym_offs = de_getu32be(idxpos+4*k);
		de_dbg(c, "symbol #%d", (int)(1+k));
		de_dbg_indent(c, 1);
		de_dbg(c, "offset: %u", (unsigned int)sym_offs);

		w = 1+de_getu16be(sym_offs);
		h = 1+de_getu16be(sym_offs+2);
		de_dbg_dimensions(c, w, h);
		rowspan = ((w+15)/16)*2;
		de_convert_and_write_image_bilevel(c->infile, sym_offs+4, w, h, rowspan,
			DE_CVTF_WHITEISZERO, NULL, 0);
		de_dbg_indent(c, -1);
	}
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x18, %rsp
movq %rdi, %rbx
movq 0x18(%rdi), %rdi
pushq $0xc
popq %rsi
callq 0xe3f46
movq %rax, 0x10(%rsp)
leal 0x1(%rax), %edx
leaq 0x8a0d4(%rip), %rsi     # 0x125298
movq %rbx, %rdi
xorl %eax, %eax
callq 0xde896
pushq $0xe
popq %rax
xorl %r13d, %r13d
cmpq 0x10(%rsp), %r13
jg 0x9b2aa
movq 0x18(%rbx), %rdi
movq %rax, 0x8(%rsp)
movq 0x8(%rsp), %rsi
callq 0xe404f
movq %rax, %r12
incq %r13
movq %rbx, %rdi
leaq 0x8a0ac(%rip), %rsi     # 0x1252ae
movl %r13d, %edx
xorl %eax, %eax
callq 0xde896
movq %rbx, %rdi
pushq $0x1
popq %rsi
callq 0xdeba7
movq %rbx, %rdi
leaq 0x76e50(%rip), %rsi     # 0x112071
movl %r12d, %edx
xorl %eax, %eax
callq 0xde896
movq 0x18(%rbx), %rdi
movq %r12, %rsi
callq 0xe3f46
movq %rax, %r14
leaq 0x1(%rax), %rbp
movq 0x18(%rbx), %rdi
leaq 0x2(%r12), %rsi
callq 0xe3f46
leaq 0x1(%rax), %r15
movq %rbx, %rdi
movq %rbp, %rsi
movq %r15, %rdx
callq 0xdf038
addq $0x10, %r14
movq %r14, %rax
cqto
pushq $0x10
popq %rcx
idivq %rcx
leaq (%rax,%rax), %r8
movq 0x18(%rbx), %rdi
addq $0x4, %r12
movq %r12, %rsi
movq %rbp, %rdx
movq %r15, %rcx
pushq $0x1
popq %r9
pushq $0x0
pushq $0x0
callq 0xe7804
popq %rax
popq %rcx
movq %rbx, %rdi
pushq $-0x1
popq %rsi
callq 0xdeba7
movq 0x8(%rsp), %rax
addq $0x4, %rax
jmp 0x9b1d4
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/jsummers[P]deark/modules/nie.c
// Function: de_module_nie
void de_module_nie(deark *c, struct deark_module_info *mi)
{
	mi->id = "nie";
	mi->desc = "NIE/NII/NIA (Naive Image Formats)";
	mi->run_fn = de_run_nie;
	mi->identify_fn = de_identify_nie;
}

// Assembly:
leaq 0x89fbd(%rip), %rax     # 0x1252c8
movq %rax, (%rsi)
leaq 0x89fb7(%rip), %rax     # 0x1252cc
movq %rax, 0x8(%rsi)
leaq 0x10(%rip), %rax        # 0x9b330
movq %rax, 0x18(%rsi)
leaq 0x3ed(%rip), %rax       # 0x9b718
movq %rax, 0x20(%rsi)
retq
// File: /workspace/github_c_makefile_star2_O2/jsummers[P]deark/modules/nie.c
// Function: do_header
static int do_header(deark *c, lctx *d, i64 pos)
{
	u8 b;

	b = de_getbyte_p(&pos);
	if(b!=0xff) {
		de_err(c, "Unknown %s version", d->fmtname);
		return 0;
	}

	if(d->sig==SIG_NII) {
		pos += 3; // padding
	}
	else {
		b = de_getbyte_p(&pos);
		if(b=='b') {
			d->is_bgra = 1;
		}
		else if(b!='r') {
			d->bad_image_flag = 1;
		}
		de_dbg(c, "sample order: %sA", (d->is_bgra?"BGR":"RGB"));

		b = de_getbyte_p(&pos);
		if(b=='p') {
			d->premultiplied_alpha = 1;
		}
		else if(b!='n') {
			d->bad_image_flag = 1;
		}
		de_dbg(c, "premultiplied alpha: %d", d->premultiplied_alpha);

		b = de_getbyte_p(&pos);
		if(b=='8') {
			d->bytes_per_pixel = 8;
		}
		else if(b=='4') {
			d->bytes_per_pixel = 4;
		}
		else {
			d->bad_image_flag = 1;
		}
		de_dbg(c, "bytes/pixel: %d", (int)d->bytes_per_pixel);
	}

	d->width = de_getu32le_p(&pos);
	d->height = de_getu32le_p(&pos);
	de_dbg_dimensions(c, d->width, d->height);

	if(d->sig==SIG_NIE) return 1;

	read_NIIpayload(c, d, pos, 0);
	return 1;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %rbx
pushq %rax
movq %rsi, %r14
movq %rdi, %rbx
movq %rsp, %rsi
movq $0x4, (%rsi)
movq 0x18(%rdi), %rdi
callq 0xe3f2a
cmpb $-0x1, %al
je 0x9b781
movq 0x8(%r14), %rdx
leaq 0x89bc7(%rip), %rsi     # 0x125337
xorl %ebp, %ebp
movq %rbx, %rdi
xorl %eax, %eax
callq 0xdf2a5
jmp 0x9b8bf
cmpl $0x6ec3af49, (%r14)     # imm = 0x6EC3AF49
jne 0x9b794
addq $0x3, (%rsp)
jmp 0x9b870
movq 0x18(%rbx), %rdi
movq %rsp, %rsi
callq 0xe3f2a
cmpb $0x62, %al
je 0x9b7b0
movzbl %al, %eax
cmpl $0x72, %eax
je 0x9b7bb
pushq $0x30
jmp 0x9b7b2
pushq $0x10
popq %rax
movl $0x1, (%r14,%rax)
cmpl $0x0, 0x10(%r14)
leaq 0x96ea9(%rip), %rax     # 0x132670
leaq 0x8c0a4(%rip), %rdx     # 0x127872
cmoveq %rax, %rdx
leaq 0x89b71(%rip), %rsi     # 0x12534a
movq %rbx, %rdi
xorl %eax, %eax
callq 0xde896
movq 0x18(%rbx), %rdi
movq %rsp, %rsi
callq 0xe3f2a
cmpb $0x6e, %al
je 0x9b80d
movzbl %al, %eax
cmpl $0x70, %eax
jne 0x9b805
movl $0x1, 0x14(%r14)
jmp 0x9b80d
movl $0x1, 0x30(%r14)
movl 0x14(%r14), %edx
leaq 0x89b44(%rip), %rsi     # 0x12535c
movq %rbx, %rdi
xorl %eax, %eax
callq 0xde896
movq 0x18(%rbx), %rdi
movq %rsp, %rsi
callq 0xe3f2a
cmpb $0x34, %al
je 0x9b846
movzbl %al, %eax
cmpl $0x38, %eax
jne 0x9b853
movq $0x8, 0x18(%r14)
pushq $0x8
jmp 0x9b850
movq $0x4, 0x18(%r14)
pushq $0x4
popq %rdx
jmp 0x9b85f
movl $0x1, 0x30(%r14)
movl 0x18(%r14), %edx
leaq 0x97bb6(%rip), %rsi     # 0x13341c
movq %rbx, %rdi
xorl %eax, %eax
callq 0xde896
movq 0x18(%rbx), %rdi
movq %rsp, %r15
movq %r15, %rsi
callq 0xe40bf
movq %rax, 0x20(%r14)
movq 0x18(%rbx), %rdi
movq %r15, %rsi
callq 0xe40bf
movq %rax, 0x28(%r14)
movq 0x20(%r14), %rsi
movq %rbx, %rdi
movq %rax, %rdx
callq 0xdf038
pushq $0x1
popq %rbp
cmpl $0x6ec3af45, (%r14)     # imm = 0x6EC3AF45
je 0x9b8bf
movq (%rsp), %rdx
movq %rbx, %rdi
movq %r14, %rsi
xorl %ecx, %ecx
callq 0x9b8cc
movl %ebp, %eax
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/jsummers[P]deark/modules/nie.c
// Function: read_NIIpayload
static void read_NIIpayload(deark *c, lctx *d, i64 pos, int printCCD)
{
	u64 ccd_code;
	i64 ccd;

	ccd_code = dbuf_getu64le(c->infile, pos);
	if(ccd_code & 0x1) {
		d->found_last_frame_flag = 1;
	}
	if(printCCD) {
		ccd = (i64)(ccd_code>>2);
		de_dbg(c, "CCD: %"I64_FMT" (%f seconds)", ccd,
			(double)ccd/705600000.0);
	}
}

// Assembly:
pushq %rbp
pushq %r14
pushq %rbx
movl %ecx, %ebp
movq %rsi, %r14
movq %rdi, %rbx
movq 0x18(%rdi), %rdi
movq %rdx, %rsi
callq 0xe4218
testb $0x1, %al
je 0x9b8f0
movl $0x1, 0x34(%r14)
testl %ebp, %ebp
je 0x9b91d
shrq $0x2, %rax
cvtsi2sd %rax, %xmm0
divsd 0x899bb(%rip), %xmm0    # 0x1252c0
leaq 0x89a68(%rip), %rsi     # 0x125374
movq %rbx, %rdi
movq %rax, %rdx
movb $0x1, %al
popq %rbx
popq %r14
popq %rbp
jmp 0xde896
popq %rbx
popq %r14
popq %rbp
retq
nop
// File: /workspace/github_c_makefile_star2_O2/jsummers[P]deark/modules/installshld.c
// Function: de_module_is_z
void de_module_is_z(deark *c, struct deark_module_info *mi)
{
	mi->id = "is_z";
	mi->desc = "InstallShield Z";
	mi->run_fn = de_run_is_z;
	mi->identify_fn = de_identify_is_z;
}

// Assembly:
leaq 0x89a87(%rip), %rax     # 0x1253b2
movq %rax, (%rsi)
leaq 0x89a82(%rip), %rax     # 0x1253b7
movq %rax, 0x8(%rsi)
leaq 0x10(%rip), %rax        # 0x9b950
movq %rax, 0x18(%rsi)
leaq 0x867(%rip), %rax       # 0x9c1b2
movq %rax, 0x20(%rsi)
retq
// File: /workspace/github_c_makefile_star2_O2/jsummers[P]deark/modules/installshld.c
// Function: de_module_is_instarch
void de_module_is_instarch(deark *c, struct deark_module_info *mi)
{
	mi->id = "is_instarch";
	mi->id_alias[0] = "is_inst32i";
	mi->desc = "InstallShield installer archive (_inst32i.ex_)";
	mi->run_fn = de_run_is_instarch;
	mi->identify_fn = de_identify_is_instarch;
}

// Assembly:
leaq 0x891f0(%rip), %rax     # 0x1253c7
movq %rax, (%rsi)
leaq 0x891f2(%rip), %rax     # 0x1253d3
movq %rax, 0x38(%rsi)
leaq 0x891f2(%rip), %rax     # 0x1253de
movq %rax, 0x8(%rsi)
leaq 0x10(%rip), %rax        # 0x9c207
movq %rax, 0x18(%rsi)
leaq 0x264(%rip), %rax       # 0x9c466
movq %rax, 0x20(%rsi)
retq
// File: /workspace/github_c_makefile_star2_O2/jsummers[P]deark/modules/installshld.c
// Function: de_module_tscomp
void de_module_tscomp(deark *c, struct deark_module_info *mi)
{
	mi->id = "tscomp";
	mi->desc = "The Stirling Compressor";
	mi->run_fn = de_run_tscomp;
	mi->identify_fn = de_identify_tscomp;
}

// Assembly:
leaq 0x88f7e(%rip), %rax     # 0x12540d
movq %rax, (%rsi)
leaq 0x88f7b(%rip), %rax     # 0x125414
movq %rax, 0x8(%rsi)
leaq 0x10(%rip), %rax        # 0x9c4b4
movq %rax, 0x18(%rsi)
leaq 0x2da(%rip), %rax       # 0x9c789
movq %rax, 0x20(%rsi)
retq
// File: /workspace/github_c_makefile_star2_O2/jsummers[P]deark/modules/installshld.c
// Function: de_module_is_sfx
void de_module_is_sfx(deark *c, struct deark_module_info *mi)
{
	mi->id = "is_sfx";
	mi->desc = "InstallShield SFX EXE";
	mi->run_fn = de_run_is_sfx;
	mi->flags |= DE_MODFLAG_HIDDEN | DE_MODFLAG_INTERNALONLY;
}

// Assembly:
leaq 0x74117(%rip), %rax     # 0x1108c3
movq %rax, (%rsi)
leaq 0x88c76(%rip), %rax     # 0x12542c
movq %rax, 0x8(%rsi)
leaq 0x9(%rip), %rax         # 0x9c7ca
movq %rax, 0x18(%rsi)
orb $-0x7f, 0x30(%rsi)
retq
// File: /workspace/github_c_makefile_star2_O2/jsummers[P]deark/modules/os2ea.c
// Function: de_module_ea_data
void de_module_ea_data(deark *c, struct deark_module_info *mi)
{
	mi->id = "ea_data";
	mi->desc = "EA DATA (OS/2 extended attributes)";
	mi->run_fn = de_run_eadata;
	mi->identify_fn = de_identify_eadata;
	mi->help_fn = de_help_eadata;
}

// Assembly:
leaq 0x78cde(%rip), %rax     # 0x1157e5
movq %rax, (%rsi)
leaq 0x88cd7(%rip), %rax     # 0x1257e8
movq %rax, 0x8(%rsi)
leaq 0x1b(%rip), %rax        # 0x9cb37
movq %rax, 0x18(%rsi)
leaq 0x274(%rip), %rax       # 0x9cd9b
movq %rax, 0x20(%rsi)
leaq 0x2c3(%rip), %rax       # 0x9cdf5
movq %rax, 0x28(%rsi)
retq
// File: /workspace/github_c_makefile_star2_O2/jsummers[P]deark/modules/os2ea.c
// Function: de_identify_eadata
static int de_identify_eadata(deark *c)
{
	if(de_getu16be(0)!=0x4544) return 0;
	if(de_input_file_has_ext(c, " sf")) return 100;
	if(dbuf_is_all_zeroes(c->infile, 2, 30)) {
		return 20;
	}
	return 0;
}

// Assembly:
pushq %r14
pushq %rbx
pushq %rax
movq %rdi, %rbx
movq 0x18(%rdi), %rdi
xorl %r14d, %r14d
xorl %esi, %esi
callq 0xe3f46
cmpq $0x4544, %rax           # imm = 0x4544
jne 0x9cdea
leaq 0x88b93(%rip), %rsi     # 0x125952
movq %rbx, %rdi
callq 0xdfcd5
testl %eax, %eax
je 0x9cdd1
pushq $0x64
popq %r14
jmp 0x9cdea
movq 0x18(%rbx), %rdi
pushq $0x2
popq %rsi
pushq $0x1e
popq %rdx
callq 0xe66d2
testl %eax, %eax
pushq $0x14
popq %r14
cmovel %eax, %r14d
movl %r14d, %eax
addq $0x8, %rsp
popq %rbx
popq %r14
retq
// File: /workspace/github_c_makefile_star2_O2/jsummers[P]deark/modules/os2ea.c
// Function: eadata_do_raw_list
static void eadata_do_raw_list(deark *c, struct eadata_ctx *d, i64 pos1, i64 len)
{
	i64 pos = pos1;
	i64 endpos;
	de_ucstring *tmps = NULL;
	int saved_indent_level;

	de_dbg_indent_save(c, &saved_indent_level);
	tmps = ucstring_create(c);

	endpos = pos1 + len;

	while(1) {
		int ret;
		i64 bytes_consumed = 0;
		i64 offset_to_next_attr;
		i64 attr_pos;

		if(pos >= endpos) goto done;

		attr_pos = pos;
		de_dbg(c, "attribute at %"I64_FMT, attr_pos);
		de_dbg_indent(c, 1);
		offset_to_next_attr = de_getu32le_p(&pos);
		de_dbg(c, "offset to next attr: %"I64_FMT, offset_to_next_attr);

		ret = eadata_do_attribute(c, d, pos, endpos-pos, tmps, &bytes_consumed);
		if(!ret || bytes_consumed<1) goto done;
		if(offset_to_next_attr==0) goto done;
		pos = attr_pos + offset_to_next_attr;
		de_dbg_indent(c, -1);
	}

done:
	ucstring_destroy(tmps);
	de_dbg_indent_restore(c, saved_indent_level);
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x18, %rsp
movq %rcx, %r14
movq %rdx, %r13
movq %rsi, %r15
movq %rdi, %rbx
movq %rsp, %rax
movq %rdx, (%rax)
leaq 0xc(%rsp), %rsi
callq 0xdebae
movq %rbx, %rdi
callq 0xeac74
movq %rax, %rbp
addq %r13, %r14
andq $0x0, 0x10(%rsp)
cmpq %r14, %r13
jge 0x9ced5
movq %rbx, %rdi
leaq 0x88a02(%rip), %rsi     # 0x125856
movq %r13, %rdx
xorl %eax, %eax
callq 0xde896
movq %rbx, %rdi
pushq $0x1
popq %rsi
callq 0xdeba7
movq 0x18(%rbx), %rdi
movq %rsp, %rsi
callq 0xe40bf
movq %rax, %r12
movq %rbx, %rdi
leaq 0x889e5(%rip), %rsi     # 0x125867
movq %rax, %rdx
xorl %eax, %eax
callq 0xde896
movq (%rsp), %rdx
movq %r14, %rcx
subq %rdx, %rcx
movq %rbx, %rdi
movq %r15, %rsi
movq %rbp, %r8
leaq 0x10(%rsp), %r9
callq 0x9d184
testq %r12, %r12
je 0x9ced5
testl %eax, %eax
je 0x9ced5
cmpq $0x0, 0x10(%rsp)
jle 0x9ced5
addq %r13, %r12
movq %r12, (%rsp)
movq %rbx, %rdi
pushq $-0x1
popq %rsi
callq 0xdeba7
movq (%rsp), %r13
jmp 0x9ce3b
movq %rbp, %rdi
callq 0xeaf3c
movl 0xc(%rsp), %esi
movq %rbx, %rdi
callq 0xdebb7
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/jsummers[P]deark/modules/os2ea.c
// Function: eadata_do_attribute
static int eadata_do_attribute(deark *c, struct eadata_ctx *d, i64 pos1, i64 maxlen,
	de_ucstring *tmps, i64 *pbytes_consumed)
{
	i64 namelen;
	i64 attr_dpos;
	i64 attr_dlen;
	i64 tmpbc;
	UI attr_dtype;
	i64 pos = pos1;
	int retval = 0;

	pos++; // fEA
	namelen = (i64)de_getbyte_p(&pos);

	attr_dlen = (i64)de_getu16le_p(&pos);
	ucstring_empty(tmps);
	dbuf_read_to_ucstring(c->infile, pos, namelen, tmps, 0, DE_ENCODING_ASCII);
	de_dbg(c, "name: \"%s\"", ucstring_getpsz_d(tmps));
	pos += namelen + 1;
	attr_dpos = pos;
	de_dbg(c, "outer data len: %"I64_FMT, attr_dlen);
	if(attr_dpos + attr_dlen > pos1+maxlen) goto done;

	attr_dtype = (UI)de_getu16le_p(&pos);
	de_dbg(c, "data type: 0x%04x (%s)", attr_dtype, eadata_get_data_type_name(attr_dtype));

	tmpbc = 0;
	eadata_do_attribute_lowlevel(c, d, attr_dtype, attr_dpos+2, attr_dlen-2, &tmpbc, 0);

	pos = attr_dpos + attr_dlen;
	*pbytes_consumed = pos - pos1;
	retval = 1;
done:
	return retval;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x38, %rsp
movq %r9, 0x10(%rsp)
movq %r8, %rbp
movq %rcx, 0x20(%rsp)
movq %rdx, 0x18(%rsp)
movq %rsi, 0x8(%rsp)
movq %rdi, %r12
leaq 0x1(%rdx), %rax
leaq 0x28(%rsp), %r15
movq %rax, (%r15)
movq 0x18(%rdi), %rdi
movq %r15, %rsi
callq 0xe3f2a
movzbl %al, %r14d
movq 0x18(%r12), %rdi
movq %r15, %rsi
callq 0xe3fc4
movq %rax, %rbx
movq %rbp, %rdi
callq 0xeac85
movq 0x18(%r12), %rdi
movq (%r15), %rsi
pushq $0x1
popq %r9
movq %r14, %rdx
movq %rbp, %rcx
xorl %r8d, %r8d
callq 0xe4c9a
movq %rbp, %rdi
callq 0xeb877
leaq 0x783b2(%rip), %rsi     # 0x1155bb
movq %r12, %rdi
movq %rax, %rdx
xorl %eax, %eax
callq 0xde896
movq (%r15), %rax
leaq (%r14,%rax), %r13
leaq (%r14,%rax), %rbp
incq %rbp
movq %rbp, (%r15)
movq 0x18(%rsp), %r15
leaq 0x8864d(%rip), %rsi     # 0x125880
movq %r12, %rdi
movq %rbx, %rdx
xorl %eax, %eax
callq 0xde896
leaq (%rbx,%r13), %r14
incq %r14
movq 0x20(%rsp), %rax
addq %r15, %rax
cmpq %rax, %r14
movl $0x0, %eax
jg 0x9d2bf
movq %rbx, %r13
movq 0x18(%r12), %rdi
leaq 0x28(%rsp), %rsi
callq 0xe3fc4
movq %rax, %rbx
movl %ebx, %edi
callq 0x9d2ce
leaq 0x83360(%rip), %rsi     # 0x1205dc
movq %r12, %rdi
movl %ebx, %edx
movq %rax, %rcx
xorl %eax, %eax
callq 0xde896
addq $0x2, %rbp
addq $-0x2, %r13
andl $0x0, (%rsp)
leaq 0x30(%rsp), %r9
movq %r12, %rdi
movq 0x8(%rsp), %rsi
movl %ebx, %edx
movq %rbp, %rcx
movq %r13, %r8
callq 0x9d326
subq %r15, %r14
movq 0x10(%rsp), %rax
movq %r14, (%rax)
pushq $0x1
popq %rax
addq $0x38, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/jsummers[P]deark/modules/os2ea.c
// Function: eadata_get_data_type_name
static const char *eadata_get_data_type_name(UI t)
{
	const char *name = NULL;
	switch(t) {
	case 0xffde: name ="multi-val/single-type"; break;
	case 0xffdf: name ="multi-val/multi-type"; break;
	case 0xfffe: name ="binary"; break;
	case 0xfffd: name ="text"; break;
	case 0xfff9: name ="icon"; break;
	}

	return name?name:"?";
}

// Assembly:
cmpl $0xfffe, %edi           # imm = 0xFFFE
je 0x9d31e
cmpl $0xffdf, %edi           # imm = 0xFFDF
je 0x9d2fe
cmpl $0xfff9, %edi           # imm = 0xFFF9
je 0x9d30e
cmpl $0xfffd, %edi           # imm = 0xFFFD
je 0x9d306
cmpl $0xffde, %edi           # imm = 0xFFDE
jne 0x9d316
leaq 0x88597(%rip), %rax     # 0x125894
retq
leaq 0x885a5(%rip), %rax     # 0x1258aa
retq
leaq 0x8277e(%rip), %rax     # 0x11fa8b
retq
leaq 0x7aac5(%rip), %rax     # 0x117dda
retq
leaq 0x81bc4(%rip), %rax     # 0x11eee1
retq
leaq 0x95d24(%rip), %rax     # 0x133049
retq
// File: /workspace/github_c_makefile_star2_O2/jsummers[P]deark/modules/os2ea.c
// Function: eadata_is_ea_sector_at_offset
static int eadata_is_ea_sector_at_offset(deark *c, struct eadata_ctx *d, i64 pos, int strictmode)
{
	u8 b;

	if((UI)de_getu16be(pos)!=0x4541) return 0;
	if(strictmode) {
		if((UI)de_getu32be(pos+4)!=0) return 0;
		b = de_getbyte(pos+8);
		if(b<32) return 0;
		if((UI)de_getu32be(pos+22)!=0) return 0;
	}
	return 1;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %rbx
pushq %rax
movl %edx, %ebp
movq %rsi, %r14
movq %rdi, %r15
movq 0x18(%rdi), %rdi
callq 0xe3f46
xorl %ebx, %ebx
cmpl $0x4541, %eax           # imm = 0x4541
jne 0x9d6aa
testl %ebp, %ebp
je 0x9d6a7
movq 0x18(%r15), %rdi
leaq 0x4(%r14), %rsi
callq 0xe404f
testl %eax, %eax
jne 0x9d6aa
movq 0x18(%r15), %rdi
leaq 0x8(%r14), %rsi
callq 0xe3eb4
cmpb $0x20, %al
jb 0x9d6aa
movq 0x18(%r15), %rdi
addq $0x16, %r14
movq %r14, %rsi
callq 0xe404f
testl %eax, %eax
jne 0x9d6aa
pushq $0x1
popq %rbx
movl %ebx, %eax
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
nop
// File: /workspace/github_c_makefile_star2_O2/jsummers[P]deark/modules/os2bootlogo.c
// Function: de_module_os2bootlogo
void de_module_os2bootlogo(deark *c, struct deark_module_info *mi)
{
	mi->id = "os2bootlogo";
	mi->desc = "OS/2 boot logo";
	mi->run_fn = de_run_os2bootlogo;
	mi->identify_fn = de_identify_os2bootlogo;
}

// Assembly:
leaq 0x882d3(%rip), %rax     # 0x125992
movq %rax, (%rsi)
leaq 0x882d5(%rip), %rax     # 0x12599e
movq %rax, 0x8(%rsi)
leaq 0x10(%rip), %rax        # 0x9d6e4
movq %rax, 0x18(%rsi)
leaq 0x60a(%rip), %rax       # 0x9dce9
movq %rax, 0x20(%rsi)
retq
// File: /workspace/github_c_makefile_star2_O2/jsummers[P]deark/modules/os2bootlogo.c
// Function: de_identify_os2bootlogo
static int de_identify_os2bootlogo(deark *c)
{
	UI offs;
	UI len;
	UI i;
	UI next_expected_offs = 32;
	i64 pos = 0;

	for(i=0; i<4; i++) {
		offs = (UI)de_getu32le_p(&pos);
		if(offs!=next_expected_offs) return 0;
		len = (UI)de_getu32le_p(&pos);
		if(len<2) return 0;
		next_expected_offs = offs+len;
	}
	if(next_expected_offs!=c->infile->len) return 0;
	return 55;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
subq $0x10, %rsp
leaq 0x8(%rsp), %r14
andq $0x0, (%r14)
movq %rdi, %rbx
pushq $0x20
popq %r15
pushq $0x4
popq %r12
xorl %ebp, %ebp
subl $0x1, %r12d
jb 0x9dd38
movq 0x18(%rbx), %rdi
movq %r14, %rsi
callq 0xe40bf
cmpl %eax, %r15d
jne 0x9dd4b
movq 0x18(%rbx), %rdi
movq %r14, %rsi
callq 0xe40bf
cmpl $0x2, %eax
jb 0x9dd4b
addl %eax, %r15d
jmp 0x9dd0b
movl %r15d, %eax
movq 0x18(%rbx), %rcx
xorl %edx, %edx
cmpq %rax, 0x18(%rcx)
pushq $0x37
popq %rbp
cmovnel %edx, %ebp
movl %ebp, %eax
addq $0x10, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq