// File: /workspace/github_cpp_makefile_star2_O3/rpavlik[P]edid-decode/parse-di-ext-block.cpp
// Function: edid_state::parse_display_caps(unsigned char const*)
void edid_state::parse_display_caps(const unsigned char *x)
{
	data_block = "Display Capabities & Feature Support Set";
	printf("  %s:\n", data_block.c_str());

	unsigned short v = x[0x14];

	printf("    Legacy Modes: %s VGA/DOS Legacy Timing Modes are supported\n",
	       (v & 0x80) ? "All" : "Not all");
	printf("    Stereo Video: ");
	switch ((v & 0x70) >> 4) {
	case 0x00: printf("No direct stereo\n"); break;
	case 0x01: printf("Field seq. stereo via stereo sync signal\n"); break;
	case 0x02: printf("auto-stereoscopic, column interleave\n"); break;
	case 0x03: printf("auto-stereoscopic, line interleave\n"); break;
	default:
		   printf("Unknown (0x%02x)\n", (v & 0x70) >> 4);
		   fail("Unknown Stereo Video 0x%02x.\n", (v & 0x70) >> 4);
		   break;
	}
	printf("    Scaler On Board: %s\n", (v & 0x08) ? "Yes" : "No");
	printf("    Image Centering: %s\n", (v & 0x04) ? "Yes" : "No");
	printf("    Conditional Update: %s\n", (v & 0x02) ? "Yes" : "No");
	printf("    Interlaced Video: %s\n", (v & 0x01) ? "Yes" : "No");

	v = x[0x15];
	printf("    Frame Lock: %s\n", (v & 0x80) ? "Yes" : "No");
	printf("    Frame Rate Conversion: ");
	switch ((v & 0x60) >> 5) {
	case 0x00: printf("Not supported\n"); break;
	case 0x01: printf("Vertical is converted to a single frequency\n"); break;
	case 0x02: printf("Horizontal is convertred to a single frequency\n"); break;
	case 0x03: printf("Both Vertical & Horizontal are converted to single frequencies\n"); break;
	}
	if (v & 0x1f)
		fail("Bits 4-0 of byte 0x15 should be 0.\n");
	v = x[0x16] | (x[0x17] << 8);
	printf("    Vertical Frequency: ");
	if (!v) {
		printf("Not available\n");
	} else if (v == 0xffff) {
		printf("Reserved\n");
		fail("Vertical Frequency uses 0xffff (reserved value).\n");
	} else {
		printf("%.2f kHz\n", v / 100.0);
	}
	v = x[0x18] | (x[0x19] << 8);
	printf("    Horizontal Frequency: ");
	if (!v) {
		printf("Not available\n");
	} else if (v == 0xffff) {
		printf("Reserved\n");
		fail("Horizontal Frequency uses 0xffff (reserved value).\n");
	} else {
		printf("%.2f kHz\n", v / 100.0);
	}

	v = x[0x1a];
	printf("    Display/Scan Orientation Definition Type: ");
	switch ((v & 0xc0) >> 6) {
	case 0x00: printf("Not defined\n"); break;
	case 0x01: printf("Fixed Orientation\n"); break;
	case 0x02: printf("Pivots: Default Orientation\n"); break;
	case 0x03: printf("Pivots: Current Orientation (requires multiple EDID Extension Tables)\n"); break;
	}
	printf("    Screen Orientation: %s\n",
	       (v & 0x20) ? "Portrait" : "Landscape");
	printf("    Zero Pixel Location: ");
	switch ((v & 0x18) >> 3) {
	case 0x00: printf("Upper Left\n"); break;
	case 0x01: printf("Upper Right\n"); break;
	case 0x02: printf("Lower Left\n"); break;
	case 0x03: printf("Lower Right\n"); break;
	}
	printf("    Scan Direction: ");
	switch ((v & 0x06) >> 1) {
	case 0x00: printf("Not defined\n"); break;
	case 0x01: printf("Fast Scan is on the Major (Long) Axis and Slow Scan is on the Minor Axis\n"); break;
	case 0x02: printf("Fast Scan is on the Minor (Short) Axis and Slow Scan is on the Major Axis\n"); break;
	case 0x03:
		   printf("Reserved\n");
		   fail("Scan Direction used the reserved value 0x03.\n");
		   break;
	}
	printf("    Standalone Projector: %s\n",
	       (v & 0x01) ? "Yes" : "No");

	v = x[0x1b];
	printf("    Default Color/Luminance Decoding: ");
	switch (v) {
	case 0x00: printf("Not defined\n"); break;
	case 0x01: printf("BGR\n"); break;
	case 0x02: printf("Y/C (S-Video) NTSC\n"); break;
	case 0x03: printf("Y/C (S-Video) PAL\n"); break;
	case 0x04: printf("Y/C (S-Video) SECAM\n"); break;
	case 0x05: printf("YCrCb 4:4:4 per SMPTE 293M & 294M\n"); break;
	case 0x06: printf("YCrCb 4:2:2 per SMPTE 293M & 294M\n"); break;
	case 0x07: printf("YCrCb 4:2:0 per SMPTE 293M & 294M\n"); break;
	case 0x08: printf("YCrCb per SMPTE 260M (Legacy HDTV)\n"); break;
	case 0x09: printf("YPbPr per SMPTE 240M (Legacy HDTV)\n"); break;
	case 0x0a: printf("YCrCb per SMPTE 274M (Modern HDTV)\n"); break;
	case 0x0b: printf("YPbPr per SMPTE 274M (Modern HDTV)\n"); break;
	case 0x0c: printf("Y B-Y R-Y BetaCam (Sony)\n"); break;
	case 0x0d: printf("Y B-Y R-Y M-2 (Matsushita)\n"); break;
	case 0x0e: printf("Monochrome\n"); break;
	default:
		   printf("Unknown (0x%02x)\n", v);
		   fail("Unknown Default Color/Luminance Decoding 0x%02x.\n", v);
		   break;
	}
	v = x[0x1c];
	printf("    Preferred Color/Luminance Decoder: ");
	switch (v) {
	case 0x00: printf("Uses Default Decoding\n"); break;
	case 0x01: printf("BGR\n"); break;
	case 0x02: printf("Y/C (S-Video)\n"); break;
	case 0x03: printf("Yxx (SMPTE 2xxM)\n"); break;
	case 0x04: printf("Monochrome\n"); break;
	default:
		   printf("Unknown (0x%02x)\n", v);
		   fail("Unknown Preferred Color/Luminance Decoding 0x%02x.\n", v);
		   break;
	}
	v = x[0x1d];
	if (v && (x[0x1e] & 0xfc)) {
		printf("    Color/Luminance Decoding Capabilities:\n");
		printf("      BGR: %s\n", (v & 0x80) ? "Yes" : "No");
		printf("      Y/C (S-Video) NTSC: %s\n", (v & 0x40) ? "Yes" : "No");
		printf("      Y/C (S-Video) PAL: %s\n", (v & 0x20) ? "Yes" : "No");
		printf("      Y/C (S-Video) SECAM: %s\n", (v & 0x10) ? "Yes" : "No");
		printf("      YCrCb 4:4:4 per SMPTE 293M & 294M: %s\n", (v & 0x08) ? "Yes" : "No");
		printf("      YCrCb 4:2:2 per SMPTE 293M & 294M: %s\n", (v & 0x04) ? "Yes" : "No");
		printf("      YCrCb 4:2:0 per SMPTE 293M & 294M: %s\n", (v & 0x02) ? "Yes" : "No");
		printf("      YCrCb per SMPTE 260M (Legacy HDTV): %s\n", (v & 0x01) ? "Yes" : "No");
		v = x[0x1e];
		printf("      YPbPr per SMPTE 240M (Legacy HDTV): %s\n", (v & 0x80) ? "Yes" : "No");
		printf("      YCrCb per SMPTE 274M (Modern HDTV): %s\n", (v & 0x40) ? "Yes" : "No");
		printf("      YPbPr per SMPTE 274M (Modern HDTV): %s\n", (v & 0x20) ? "Yes" : "No");
		printf("      Y B-Y R-Y BetaCam (Sony): %s\n", (v & 0x10) ? "Yes" : "No");
		printf("      Y B-Y R-Y M-2 (Matsushita): %s\n", (v & 0x08) ? "Yes" : "No");
		printf("      Monochrome: %s\n", (v & 0x04) ? "Yes" : "No");
	} else {
		printf("    Color/Luminance Decoding Capabilities: None\n");
	}
	if (v & 0x03)
		fail("Bits 1-0 of byte 0x1e should be 0.\n");

	v = x[0x1f];
	printf("    Dithering: %s\n", (v & 0x80) ? "Yes" : "No");
	if (v & 0x7f)
		fail("Bits 6-0 of byte 0x1f should be 0.\n");
	v = x[0x20];
	printf("    Supported Color Bit-Depth of Sub-Channel 0 (Blue): ");
	if (!v) {
		printf("No Information\n");
	} else if (v <= 16) {
		printf("%u\n", v);
	} else {
		printf("Reserved (0x%02x)\n", v);
		fail("Supported Color Bit-Depth of Sub-Channel Blue value is 0x%02x.\n", v);
	}
	v = x[0x21];
	printf("    Supported Color Bit-Depth of Sub-Channel 1 (Green): ");
	if (!v) {
		printf("No Information\n");
	} else if (v <= 16) {
		printf("%u\n", v);
	} else {
		printf("Reserved (0x%02x)\n", v);
		fail("Supported Color Bit-Depth of Sub-Channel Green value is 0x%02x.\n", v);
	}
	v = x[0x22];
	printf("    Supported Color Bit-Depth of Sub-Channel 2 (Red): ");
	if (!v) {
		printf("No Information\n");
	} else if (v <= 16) {
		printf("%u\n", v);
	} else {
		printf("Reserved (0x%02x)\n", v);
		fail("Supported Color Bit-Depth of Sub-Channel Red value is 0x%02x.\n", v);
	}
	v = x[0x23];
	printf("    Supported Color Bit-Depth of Sub-Channel 0 (Cb/Pb): ");
	if (!v) {
		printf("No Information\n");
	} else if (v <= 16) {
		printf("%u\n", v);
	} else {
		printf("Reserved (0x%02x)\n", v);
		fail("Supported Color Bit-Depth of Sub-Channel Cb/Pb value is 0x%02x.\n", v);
	}
	v = x[0x24];
	printf("    Supported Color Bit-Depth of Sub-Channel 1 (Y): ");
	if (!v) {
		printf("No Information\n");
	} else if (v <= 16) {
		printf("%u\n", v);
	} else {
		printf("Reserved (0x%02x)\n", v);
		fail("Supported Color Bit-Depth of Sub-Channel Y value is 0x%02x.\n", v);
	}
	v = x[0x25];
	printf("    Supported Color Bit-Depth of Sub-Channel 2 (Cr/Pr): ");
	if (!v) {
		printf("No Information\n");
	} else if (v <= 16) {
		printf("%u\n", v);
	} else {
		printf("Reserved (0x%02x)\n", v);
		fail("Supported Color Bit-Depth of Sub-Channel Cr/Pr value is 0x%02x.\n", v);
	}

	v = x[0x26];
	printf("    Aspect Ratio Conversion Modes:");
	if (!v) {
		printf(" None\n");
	} else {
		printf("\n");
		printf("      Full Mode: %s\n", (v & 0x80) ? "Yes" : "No");
		printf("      Zoom Mode: %s\n", (v & 0x40) ? "Yes" : "No");
		printf("      Squeeze (Side Bars/Letterbox) Mode: %s\n", (v & 0x20) ? "Yes" : "No");
		printf("      Variable (Expand/Shrink) Mode: %s\n", (v & 0x10) ? "Yes" : "No");
	}
	if (v & 0x0f)
		fail("Bits 3-0 of byte 0x26 should be 0.\n");
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
movq %rsi, %rbx
movq %rdi, %r14
addq $0x30, %rdi
movq 0x38(%r14), %rdx
leaq 0x141a6(%rip), %rcx     # 0x32129
movl $0x28, %r8d
xorl %esi, %esi
callq 0x3390
movq 0x30(%r14), %rsi
leaq 0x6e70(%rip), %rdi      # 0x24e0b
xorl %eax, %eax
callq 0x3030
movzbl 0x14(%rbx), %ebp
testb %bpl, %bpl
leaq 0x141e6(%rip), %rax     # 0x32196
leaq 0x141db(%rip), %rsi     # 0x32192
cmovnsq %rax, %rsi
leaq 0x14190(%rip), %rdi     # 0x32152
xorl %eax, %eax
callq 0x3030
leaq 0x141ce(%rip), %rdi     # 0x3219e
xorl %eax, %eax
callq 0x3030
movl %ebp, %r14d
shrl $0x4, %r14d
andl $0x7, %r14d
cmpl $0x3, %r14d
ja 0x1e2ec
leaq 0x13a69(%rip), %rax     # 0x31a5c
movslq (%rax,%r14,4), %rcx
addq %rax, %rcx
jmpq *%rcx
leaq 0x15006(%rip), %rdi     # 0x33009
jmp 0x1e01e
leaq 0x14faf(%rip), %rdi     # 0x32fbb
jmp 0x1e01e
leaq 0x14f83(%rip), %rdi     # 0x32f98
jmp 0x1e01e
leaq 0x14fc2(%rip), %rdi     # 0x32fe0
callq 0x3380
testb $0x8, %bpl
leaq 0xe331(%rip), %r12      # 0x2c35f
leaq 0xe326(%rip), %r14      # 0x2c35b
movq %r14, %rsi
cmoveq %r12, %rsi
leaq 0x1418c(%rip), %rdi     # 0x321cf
xorl %eax, %eax
callq 0x3030
testb $0x4, %bpl
movq %r14, %rsi
cmoveq %r12, %rsi
leaq 0x1418c(%rip), %rdi     # 0x321e8
xorl %eax, %eax
callq 0x3030
testb $0x2, %bpl
movq %r14, %rsi
cmoveq %r12, %rsi
leaq 0x1418c(%rip), %rdi     # 0x32201
xorl %eax, %eax
callq 0x3030
testb $0x1, %bpl
movq %r14, %rsi
cmoveq %r12, %rsi
leaq 0x1418f(%rip), %rdi     # 0x3221d
xorl %eax, %eax
callq 0x3030
movzbl 0x15(%rbx), %ebp
testb %bpl, %bpl
movq %r14, %rsi
cmovnsq %r12, %rsi
leaq 0x1418d(%rip), %rdi     # 0x32237
xorl %eax, %eax
callq 0x3030
leaq 0x14193(%rip), %rdi     # 0x3224b
xorl %eax, %eax
callq 0x3030
movl %ebp, %eax
shrl $0x3, %eax
andl $0xc, %eax
leaq 0x13a3e(%rip), %rcx     # 0x31b0c
movslq (%rax,%rcx), %rdi
addq %rcx, %rdi
callq 0x3380
testb $0x1f, %bpl
je 0x1e0f0
leaq 0x14180(%rip), %rsi     # 0x32267
xorl %edi, %edi
xorl %eax, %eax
callq 0x37cc
movzwl 0x16(%rbx), %ebp
leaq 0x14190(%rip), %rdi     # 0x3228b
xorl %eax, %eax
callq 0x3030
cmpl $0xffff, %ebp           # imm = 0xFFFF
je 0x1e11c
testl %ebp, %ebp
jne 0x1e13a
leaq 0x14f9f(%rip), %rdi     # 0x330b4
callq 0x3380
jmp 0x1e157
leaq 0x1349d(%rip), %rdi     # 0x315c0
callq 0x3380
leaq 0x14175(%rip), %rsi     # 0x322a4
xorl %edi, %edi
xorl %eax, %eax
callq 0x37cc
jmp 0x1e157
movzwl %bp, %eax
cvtsi2sd %eax, %xmm0
divsd 0x1ed7(%rip), %xmm0     # 0x20020
leaq 0x14186(%rip), %rdi     # 0x322d6
movb $0x1, %al
callq 0x3030
movzwl 0x18(%rbx), %ebp
leaq 0x1417e(%rip), %rdi     # 0x322e0
xorl %eax, %eax
callq 0x3030
cmpl $0xffff, %ebp           # imm = 0xFFFF
je 0x1e183
testl %ebp, %ebp
jne 0x1e1a1
leaq 0x14f38(%rip), %rdi     # 0x330b4
callq 0x3380
jmp 0x1e1c1
leaq 0x13436(%rip), %rdi     # 0x315c0
callq 0x3380
leaq 0x14165(%rip), %rsi     # 0x322fb
xorl %edi, %edi
xorl %eax, %eax
callq 0x37cc
jmp 0x1e1c1
movzwl %bp, %eax
xorps %xmm0, %xmm0
cvtsi2sd %eax, %xmm0
divsd 0x1e6d(%rip), %xmm0     # 0x20020
leaq 0x1411c(%rip), %rdi     # 0x322d6
movb $0x1, %al
callq 0x3030
movzbl 0x1a(%rbx), %ebp
leaq 0x14163(%rip), %rdi     # 0x3232f
xorl %eax, %eax
callq 0x3030
movl %ebp, %eax
shrl $0x6, %eax
leaq 0x1393d(%rip), %rcx     # 0x31b1c
movslq (%rcx,%rax,4), %rdi
addq %rcx, %rdi
callq 0x3380
testb $0x20, %bpl
leaq 0xf8d7(%rip), %rax      # 0x2dacd
leaq 0xf8c7(%rip), %rsi      # 0x2dac4
cmoveq %rax, %rsi
leaq 0x14156(%rip), %rdi     # 0x3235e
xorl %eax, %eax
callq 0x3030
leaq 0x10edc(%rip), %rdi     # 0x2f0f2
xorl %eax, %eax
callq 0x3030
movl %ebp, %r15d
shrl %r15d
movl %r15d, %eax
andl $0xc, %eax
leaq 0x138fc(%rip), %rcx     # 0x31b2c
movslq (%rax,%rcx), %rdi
addq %rcx, %rdi
callq 0x3380
leaq 0x10ecb(%rip), %rdi     # 0x2f10e
xorl %eax, %eax
callq 0x3030
andl $0x3, %r15d
leaq 0x13817(%rip), %rax     # 0x31a6c
movslq (%rax,%r15,4), %rcx
addq %rax, %rcx
jmpq *%rcx
leaq 0xfb33(%rip), %rdi      # 0x2dd98
jmp 0x1e295
leaq 0xf909(%rip), %rdi      # 0x2db77
jmp 0x1e295
leaq 0x13349(%rip), %rdi     # 0x315c0
callq 0x3380
leaq 0xe02c(%rip), %rsi      # 0x2c2af
xorl %edi, %edi
xorl %eax, %eax
callq 0x37cc
jmp 0x1e29a
leaq 0xf92c(%rip), %rdi      # 0x2dbc1
callq 0x3380
testb $0x1, %bpl
movq %r14, %rsi
cmoveq %r12, %rsi
leaq 0x140ce(%rip), %rdi     # 0x3237a
xorl %eax, %eax
callq 0x3030
movzbl 0x1b(%rbx), %r15d
leaq 0x140d9(%rip), %rdi     # 0x32398
xorl %eax, %eax
callq 0x3030
cmpq $0xe, %r15
ja 0x1e354
leaq 0x137a5(%rip), %rax     # 0x31a7c
movslq (%rax,%r15,4), %rcx
addq %rax, %rcx
jmpq *%rcx
leaq 0xfab1(%rip), %rdi      # 0x2dd98
jmp 0x1e3c0
leaq 0x6c19(%rip), %rdi      # 0x24f0c
movl %r14d, %esi
xorl %eax, %eax
callq 0x3030
leaq 0x13ead(%rip), %rsi     # 0x321b1
xorl %edi, %edi
movl %r14d, %edx
xorl %eax, %eax
callq 0x37cc
jmp 0x1e023
leaq 0x14f79(%rip), %rdi     # 0x33295
jmp 0x1e3c0
leaq 0x14e42(%rip), %rdi     # 0x3316a
jmp 0x1e3c0
leaq 0x14f28(%rip), %rdi     # 0x3325c
jmp 0x1e3c0
leaq 0x14e11(%rip), %rdi     # 0x33151
jmp 0x1e3c0
leaq 0x14e67(%rip), %rdi     # 0x331b0
jmp 0x1e3c0
leaq 0x14f30(%rip), %rdi     # 0x33282
jmp 0x1e3c0
leaq 0x6bb1(%rip), %rdi      # 0x24f0c
movl %r15d, %esi
xorl %eax, %eax
callq 0x3030
leaq 0x14053(%rip), %rsi     # 0x323bf
xorl %edi, %edi
movl %r15d, %edx
xorl %eax, %eax
callq 0x37cc
jmp 0x1e3c5
leaq 0x14eef(%rip), %rdi     # 0x33270
jmp 0x1e3c0
leaq 0x14e6c(%rip), %rdi     # 0x331f6
jmp 0x1e3c0
leaq 0x14f2c(%rip), %rdi     # 0x332bf
jmp 0x1e3c0
leaq 0x14e9e(%rip), %rdi     # 0x3323a
jmp 0x1e3c0
leaq 0x14d91(%rip), %rdi     # 0x33136
jmp 0x1e3c0
leaq 0x14e6a(%rip), %rdi     # 0x33218
jmp 0x1e3c0
leaq 0x14dd6(%rip), %rdi     # 0x3318d
jmp 0x1e3c0
leaq 0x14e13(%rip), %rdi     # 0x331d3
callq 0x3380
movzbl 0x1c(%rbx), %r15d
leaq 0x14020(%rip), %rdi     # 0x323f1
xorl %eax, %eax
callq 0x3030
cmpq $0x4, %r15
ja 0x1e8e6
leaq 0x136cf(%rip), %rax     # 0x31ab8
movslq (%rax,%r15,4), %rcx
addq %rax, %rcx
jmpq *%rcx
leaq 0x14eca(%rip), %rdi     # 0x332c3
jmp 0x1e41d
leaq 0x14e93(%rip), %rdi     # 0x33295
jmp 0x1e41d
leaq 0x14ea6(%rip), %rdi     # 0x332b1
jmp 0x1e41d
leaq 0x14e8c(%rip), %rdi     # 0x332a0
jmp 0x1e41d
leaq 0x14ea2(%rip), %rdi     # 0x332bf
callq 0x3380
movzbl 0x1d(%rbx), %ebp
testl %ebp, %ebp
je 0x1e430
cmpb $0x4, 0x1e(%rbx)
jae 0x1e441
leaq 0x14ea2(%rip), %rdi     # 0x332d9
callq 0x3380
jmp 0x1e5ad
leaq 0x14ec1(%rip), %rdi     # 0x33309
callq 0x3380
testb %bpl, %bpl
movq %r14, %rsi
cmovnsq %r12, %rsi
leaq 0x13fef(%rip), %rdi     # 0x3244d
xorl %eax, %eax
callq 0x3030
testb $0x40, %bpl
movq %r14, %rsi
cmoveq %r12, %rsi
leaq 0x13fe5(%rip), %rdi     # 0x3245c
xorl %eax, %eax
callq 0x3030
testb $0x20, %bpl
movq %r14, %rsi
cmoveq %r12, %rsi
leaq 0x13fea(%rip), %rdi     # 0x3247a
xorl %eax, %eax
callq 0x3030
testb $0x10, %bpl
movq %r14, %rsi
cmoveq %r12, %rsi
leaq 0x13fee(%rip), %rdi     # 0x32497
xorl %eax, %eax
callq 0x3030
testb $0x8, %bpl
movq %r14, %rsi
cmoveq %r12, %rsi
leaq 0x13ff4(%rip), %rdi     # 0x324b6
xorl %eax, %eax
callq 0x3030
testb $0x4, %bpl
movq %r14, %rsi
cmoveq %r12, %rsi
leaq 0x14008(%rip), %rdi     # 0x324e3
xorl %eax, %eax
callq 0x3030
testb $0x2, %bpl
movq %r14, %rsi
cmoveq %r12, %rsi
leaq 0x1401c(%rip), %rdi     # 0x32510
xorl %eax, %eax
callq 0x3030
testb $0x1, %bpl
movq %r14, %rsi
cmoveq %r12, %rsi
leaq 0x14030(%rip), %rdi     # 0x3253d
xorl %eax, %eax
callq 0x3030
movzbl 0x1e(%rbx), %ebp
testb %bpl, %bpl
movq %r14, %rsi
cmovnsq %r12, %rsi
leaq 0x14042(%rip), %rdi     # 0x3256b
xorl %eax, %eax
callq 0x3030
testb $0x40, %bpl
movq %r14, %rsi
cmoveq %r12, %rsi
leaq 0x14057(%rip), %rdi     # 0x32599
xorl %eax, %eax
callq 0x3030
testb $0x20, %bpl
movq %r14, %rsi
cmoveq %r12, %rsi
leaq 0x1406c(%rip), %rdi     # 0x325c7
xorl %eax, %eax
callq 0x3030
testb $0x10, %bpl
movq %r14, %rsi
cmoveq %r12, %rsi
leaq 0x14081(%rip), %rdi     # 0x325f5
xorl %eax, %eax
callq 0x3030
testb $0x8, %bpl
movq %r14, %rsi
cmoveq %r12, %rsi
leaq 0x1408c(%rip), %rdi     # 0x32619
xorl %eax, %eax
callq 0x3030
testb $0x4, %bpl
movq %r14, %rsi
cmoveq %r12, %rsi
leaq 0x14099(%rip), %rdi     # 0x3263f
xorl %eax, %eax
callq 0x3030
testb $0x3, %bpl
je 0x1e5c3
leaq 0x1409b(%rip), %rsi     # 0x32655
xorl %edi, %edi
xorl %eax, %eax
callq 0x37cc
movb 0x1f(%rbx), %bpl
testb %bpl, %bpl
movq %r14, %rsi
cmovnsq %r12, %rsi
leaq 0x140a1(%rip), %rdi     # 0x32679
xorl %eax, %eax
callq 0x3030
testb $0x7f, %bpl
je 0x1e5f5
leaq 0x140a0(%rip), %rsi     # 0x3268c
xorl %edi, %edi
xorl %eax, %eax
callq 0x37cc
movzbl 0x20(%rbx), %ebp
leaq 0x140b0(%rip), %rdi     # 0x326b0
xorl %eax, %eax
callq 0x3030
testl %ebp, %ebp
je 0x1e623
cmpb $0x10, %bpl
ja 0x1e631
leaq 0x1120e(%rip), %rdi     # 0x2f826
movl %ebp, %esi
xorl %eax, %eax
callq 0x3030
jmp 0x1e653
leaq 0x14d0a(%rip), %rdi     # 0x33334
callq 0x3380
jmp 0x1e653
leaq 0x140b0(%rip), %rdi     # 0x326e8
movl %ebp, %esi
xorl %eax, %eax
callq 0x3030
leaq 0x140b3(%rip), %rsi     # 0x326fb
xorl %edi, %edi
movl %ebp, %edx
xorl %eax, %eax
callq 0x37cc
movzbl 0x21(%rbx), %ebp
leaq 0x140dd(%rip), %rdi     # 0x3273b
xorl %eax, %eax
callq 0x3030
testl %ebp, %ebp
je 0x1e681
cmpb $0x10, %bpl
ja 0x1e68f
leaq 0x111b0(%rip), %rdi     # 0x2f826
movl %ebp, %esi
xorl %eax, %eax
callq 0x3030
jmp 0x1e6b1
leaq 0x14cac(%rip), %rdi     # 0x33334
callq 0x3380
jmp 0x1e6b1
leaq 0x14052(%rip), %rdi     # 0x326e8
movl %ebp, %esi
xorl %eax, %eax
callq 0x3030
leaq 0x140ce(%rip), %rsi     # 0x32774
xorl %edi, %edi
movl %ebp, %edx
xorl %eax, %eax
callq 0x37cc
movzbl 0x22(%rbx), %ebp
leaq 0x140f9(%rip), %rdi     # 0x327b5
xorl %eax, %eax
callq 0x3030
testl %ebp, %ebp
je 0x1e6df
cmpb $0x10, %bpl
ja 0x1e6ed
leaq 0x11152(%rip), %rdi     # 0x2f826
movl %ebp, %esi
xorl %eax, %eax
callq 0x3030
jmp 0x1e70f
leaq 0x14c4e(%rip), %rdi     # 0x33334
callq 0x3380
jmp 0x1e70f
leaq 0x13ff4(%rip), %rdi     # 0x326e8
movl %ebp, %esi
xorl %eax, %eax
callq 0x3030
leaq 0x140e8(%rip), %rsi     # 0x327ec
xorl %edi, %edi
movl %ebp, %edx
xorl %eax, %eax
callq 0x37cc
movzbl 0x23(%rbx), %ebp
leaq 0x14111(%rip), %rdi     # 0x3282b
xorl %eax, %eax
callq 0x3030
testl %ebp, %ebp
je 0x1e73d
cmpb $0x10, %bpl
ja 0x1e74b
leaq 0x110f4(%rip), %rdi     # 0x2f826
movl %ebp, %esi
xorl %eax, %eax
callq 0x3030
jmp 0x1e76d
leaq 0x14bf0(%rip), %rdi     # 0x33334
callq 0x3380
jmp 0x1e76d
leaq 0x13f96(%rip), %rdi     # 0x326e8
movl %ebp, %esi
xorl %eax, %eax
callq 0x3030
leaq 0x14102(%rip), %rsi     # 0x32864
xorl %edi, %edi
movl %ebp, %edx
xorl %eax, %eax
callq 0x37cc
movzbl 0x24(%rbx), %ebp
leaq 0x1412d(%rip), %rdi     # 0x328a5
xorl %eax, %eax
callq 0x3030
testl %ebp, %ebp
je 0x1e79b
cmpb $0x10, %bpl
ja 0x1e7a9
leaq 0x11096(%rip), %rdi     # 0x2f826
movl %ebp, %esi
xorl %eax, %eax
callq 0x3030
jmp 0x1e7cb
leaq 0x14b92(%rip), %rdi     # 0x33334
callq 0x3380
jmp 0x1e7cb
leaq 0x13f38(%rip), %rdi     # 0x326e8
movl %ebp, %esi
xorl %eax, %eax
callq 0x3030
leaq 0x1411a(%rip), %rsi     # 0x328da
xorl %edi, %edi
movl %ebp, %edx
xorl %eax, %eax
callq 0x37cc
movzbl 0x25(%rbx), %ebp
leaq 0x14141(%rip), %rdi     # 0x32917
xorl %eax, %eax
callq 0x3030
testl %ebp, %ebp
je 0x1e7f9
cmpb $0x10, %bpl
ja 0x1e807
leaq 0x11038(%rip), %rdi     # 0x2f826
movl %ebp, %esi
xorl %eax, %eax
callq 0x3030
jmp 0x1e829
leaq 0x14b34(%rip), %rdi     # 0x33334
callq 0x3380
jmp 0x1e829
leaq 0x13eda(%rip), %rdi     # 0x326e8
movl %ebp, %esi
xorl %eax, %eax
callq 0x3030
leaq 0x14132(%rip), %rsi     # 0x32950
xorl %edi, %edi
movl %ebp, %edx
xorl %eax, %eax
callq 0x37cc
movzbl 0x26(%rbx), %ebx
leaq 0x1415d(%rip), %rdi     # 0x32991
xorl %eax, %eax
callq 0x3030
testl %ebx, %ebx
je 0x1e8c9
movl $0xa, %edi
callq 0x3310
testb %bl, %bl
movq %r14, %rsi
cmovnsq %r12, %rsi
leaq 0x14157(%rip), %rdi     # 0x329b4
xorl %eax, %eax
callq 0x3030
testb $0x40, %bl
movq %r14, %rsi
cmoveq %r12, %rsi
leaq 0x14154(%rip), %rdi     # 0x329c9
xorl %eax, %eax
callq 0x3030
testb $0x20, %bl
movq %r14, %rsi
cmoveq %r12, %rsi
leaq 0x14151(%rip), %rdi     # 0x329de
xorl %eax, %eax
callq 0x3030
testb $0x10, %bl
cmoveq %r12, %r14
leaq 0x1416a(%rip), %rdi     # 0x32a0c
movq %r14, %rsi
xorl %eax, %eax
callq 0x3030
testb $0xf, %bl
je 0x1e8dd
leaq 0x1417d(%rip), %rsi     # 0x32a35
xorl %edi, %edi
xorl %eax, %eax
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
jmp 0x37cc
leaq 0x14a33(%rip), %rdi     # 0x33303
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
jmp 0x3380
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq
leaq 0x661f(%rip), %rdi      # 0x24f0c
movl %r15d, %esi
xorl %eax, %eax
callq 0x3030
leaq 0x13b1b(%rip), %rsi     # 0x32419
xorl %edi, %edi
movl %r15d, %edx
xorl %eax, %eax
callq 0x37cc
jmp 0x1e422
nop