// File: /workspace/github_cpp_makefile_star2_O3/rpavlik[P]edid-decode/parse-displayid-block.cpp
// Function: edid_state::parse_displayid_block(unsigned char const*)
void edid_state::parse_displayid_block(const unsigned char *x)
{
	unsigned version = x[1];
	unsigned length = x[2];
	unsigned prod_type = x[3]; // future check: based on type, check for required data blocks
	unsigned ext_count = x[4];
	unsigned i;

	printf("  Version: %u.%u\n  Extension Count: %u\n",
	       version >> 4, version & 0xf, ext_count);

	if (dispid.is_base_block) {
		dispid.version = version;
		printf("  %s: %s\n", product_type(prod_type, true).c_str(),
		       product_type(prod_type, false).c_str());
		if (!prod_type)
			fail("DisplayID Base Block has no product type.\n");
		if (ext_count != dispid.preparsed_displayid_blocks - 1)
			fail("Expected %u DisplayID Extension Block%s, but got %u.\n",
			     ext_count,
			     ext_count > 1 ? "s" : "",
			     dispid.preparsed_displayid_blocks - 1);
	} else {
		if (prod_type)
			fail("Product Type should be 0 in extension block.\n");
		if (ext_count)
			fail("Extension Count should be 0 in extension block.\n");
		if (version != dispid.version)
			fail("Got version %u.%u, expected %u.%u.\n",
			     version >> 4, version & 0xf,
			     dispid.version >> 4, dispid.version & 0xf);
	}

	if (length > 121) {
		fail("DisplayID length %d is greater than 121.\n", length);
		length = 121;
	}

	unsigned offset = 5;
	bool first_data_block = true;
	while (length > 0) {
		unsigned tag = x[offset];
		unsigned oui = 0;

		switch (tag) {
		// DisplayID 1.3:
		case 0x00: data_block = "Product Identification Data Block (" + utohex(tag) + ")"; break;
		case 0x01: data_block = "Display Parameters Data Block (" + utohex(tag) + ")"; break;
		case 0x02: data_block = "Color Characteristics Data Block"; break;
		case 0x03: data_block = "Video Timing Modes Type 1 - Detailed Timings Data Block"; break;
		case 0x04: data_block = "Video Timing Modes Type 2 - Detailed Timings Data Block"; break;
		case 0x05: data_block = "Video Timing Modes Type 3 - Short Timings Data Block"; break;
		case 0x06: data_block = "Video Timing Modes Type 4 - DMT Timings Data Block"; break;
		case 0x07: data_block = "Supported Timing Modes Type 1 - VESA DMT Timings Data Block"; break;
		case 0x08: data_block = "Supported Timing Modes Type 2 - CTA-861 Timings Data Block"; break;
		case 0x09: data_block = "Video Timing Range Data Block"; break;
		case 0x0a: data_block = "Product Serial Number Data Block"; break;
		case 0x0b: data_block = "GP ASCII String Data Block"; break;
		case 0x0c: data_block = "Display Device Data Data Block"; break;
		case 0x0d: data_block = "Interface Power Sequencing Data Block"; break;
		case 0x0e: data_block = "Transfer Characteristics Data Block"; break;
		case 0x0f: data_block = "Display Interface Data Block"; break;
		case 0x10: data_block = "Stereo Display Interface Data Block (" + utohex(tag) + ")"; break;
		case 0x11: data_block = "Video Timing Modes Type 5 - Short Timings Data Block"; break;
		case 0x12: data_block = "Tiled Display Topology Data Block (" + utohex(tag) + ")"; break;
		case 0x13: data_block = "Video Timing Modes Type 6 - Detailed Timings Data Block"; break;
		// 0x14 .. 0x7e RESERVED for Additional VESA-defined Data Blocks
		// DisplayID 2.0
		case 0x20: data_block = "Product Identification Data Block (" + utohex(tag) + ")"; break;
		case 0x21: data_block = "Display Parameters Data Block (" + utohex(tag) + ")"; break;
		case 0x22: data_block = "Video Timing Modes Type 7 - Detailed Timings Data Block"; break;
		case 0x23: data_block = "Video Timing Modes Type 8 - Enumerated Timing Codes Data Block"; break;
		case 0x24: data_block = "Video Timing Modes Type 9 - Formula-based Timings Data Block"; break;
		case 0x25: data_block = "Dynamic Video Timing Range Limits Data Block"; break;
		case 0x26: data_block = "Display Interface Features Data Block"; break;
		case 0x27: data_block = "Stereo Display Interface Data Block (" + utohex(tag) + ")"; break;
		case 0x28: data_block = "Tiled Display Topology Data Block (" + utohex(tag) + ")"; break;
		case 0x29: data_block = "ContainerID Data Block"; break;
		case 0x32: data_block = "Video Timing Modes Type 10 - Formula-based Timings Data Block"; break;
		// 0x2a .. 0x7d RESERVED for Additional VESA-defined Data Blocks
		case 0x7e: // DisplayID 2.0
		case 0x7f: // DisplayID 1.3
			if ((tag == 0x7e && version >= 0x20) ||
			    (tag == 0x7f && version < 0x20)) {
				oui = (x[offset + 3] << 16) + (x[offset + 4] << 8) + x[offset + 5];
				const char *name = oui_name(oui);
				bool reversed = false;

				if (!name) {
					name = oui_name(oui, true);
					if (name)
						reversed = true;
				}
				if (name)
					data_block = std::string("Vendor-Specific Data Block (") + name + ")";
				else
					data_block = "Vendor-Specific Data Block, OUI " + ouitohex(oui);
				if (reversed)
					fail((std::string("OUI ") + ouitohex(oui) + " is in the wrong byte order.\n").c_str());
			} else {
				data_block = "Unknown DisplayID Data Block (" + utohex(tag) + ")";
			}
			break;
		// 0x80 RESERVED
		case 0x81: data_block = "CTA-861 DisplayID Data Block (" + utohex(tag) + ")"; break;
		// 0x82 .. 0xff RESERVED
		default:   data_block = "Unknown DisplayID Data Block (" + utohex(tag) + ")"; break;
		}

		if (version >= 0x20 && (tag < 0x20 || tag == 0x7f))
			fail("Use of DisplayID v1.x tag for DisplayID v%u.%u.\n",
			     version >> 4, version & 0xf);
		if (version < 0x20 && tag >= 0x20 && tag <= 0x7e)
			fail("Use of DisplayID v2.0 tag for DisplayID v%u.%u.\n",
			     version >> 4, version & 0xf);

		if (length < 3) {
			// report a problem when the remaining bytes are not 0.
			if (tag || x[offset + 1]) {
				fail("Not enough bytes remain (%d) for a DisplayID data block or the DisplayID filler is non-0.\n", length);
			}
			break;
		}

		unsigned block_rev = x[offset + 1] & 0x07;
		unsigned len = x[offset + 2];

		if (length < len + 3) {
			fail("The length of this DisplayID data block (%d) exceeds the number of bytes remaining (%d).\n", len + 3, length);
			break;
		}

		if (!tag && !len) {
			// A Product Identification Data Block with no payload bytes is not valid - assume this is the end.
			if (!memchk(x + offset, length)) {
				fail("Non-0 filler bytes in the DisplayID block.\n");
			}
			break;
		}

		printf("  %s:\n", data_block.c_str());

		switch (tag) {
		case 0x00: parse_displayid_product_id(x + offset); break;
		case 0x01: parse_displayid_parameters(x + offset); break;
		case 0x02: parse_displayid_color_characteristics(x + offset); break;
		case 0x03:
			   check_displayid_datablock_revision(x[offset + 1], 0, block_rev & 1);
			   for (i = 0; i < len / 20; i++)
				   parse_displayid_type_1_7_timing(&x[offset + 3 + (i * 20)], false, block_rev);
			   break;
		case 0x04:
			   check_displayid_datablock_revision(x[offset + 1]);
			   for (i = 0; i < len / 11; i++)
				   parse_displayid_type_2_timing(&x[offset + 3 + (i * 11)]);
			   break;
		case 0x05:
			   check_displayid_datablock_revision(x[offset + 1], 0, block_rev & 1);
			   for (i = 0; i < len / 3; i++)
				   parse_displayid_type_3_timing(&x[offset + 3 + (i * 3)]);
			   break;
		case 0x06:
			   check_displayid_datablock_revision(x[offset + 1], 0xc0, 1);
			   for (i = 0; i < len; i++)
				   parse_displayid_type_4_8_timing((x[offset + 1] & 0xc0) >> 6, x[offset + 3 + i]);
			   break;
		case 0x07:
			   check_displayid_datablock_revision(x[offset + 1]);
			   for (i = 0; i < min(len, 10) * 8; i++)
				   if (x[offset + 3 + i / 8] & (1 << (i % 8))) {
					   char type[16];
					   sprintf(type, "DMT 0x%02x", i + 1);
					   print_timings("    ", find_dmt_id(i + 1), type);
				   }
			   break;
		case 0x08:
			   check_displayid_datablock_revision(x[offset + 1]);
			   for (i = 0; i < min(len, 8) * 8; i++)
				   if (x[offset + 3 + i / 8] & (1 << (i % 8))) {
					   char type[16];
					   sprintf(type, "VIC %3u", i + 1);
					   print_timings("    ", find_vic_id(i + 1), type);
				   }
			   break;
		case 0x09: parse_displayid_video_timing_range_limits(x + offset); break;
		case 0x0a:
		case 0x0b: parse_displayid_string(x + offset); break;
		case 0x0c: parse_displayid_display_device(x + offset); break;
		case 0x0d: parse_displayid_intf_power_sequencing(x + offset); break;
		case 0x0e: parse_displayid_transfer_characteristics(x + offset); break;
		case 0x0f: parse_displayid_display_intf(x + offset); break;
		case 0x10: parse_displayid_stereo_display_intf(x + offset); break;
		case 0x11:
			   check_displayid_datablock_revision(x[offset + 1]);
			   for (i = 0; i < len / 7; i++)
				   parse_displayid_type_5_timing(&x[offset + 3 + (i * 7)]);
			   break;
		case 0x12: parse_displayid_tiled_display_topology(x + offset, false); break;
		case 0x13:
			   check_displayid_datablock_revision(x[offset + 1]);
			   for (i = 0; i < len; i += (x[offset + 3 + i + 2] & 0x40) ? 17 : 14)
				   parse_displayid_type_6_timing(&x[offset + 3 + i]);
			   break;
		case 0x20: parse_displayid_product_id(x + offset); break;
		case 0x21:
			   if (block_rev >= 1)
				   check_displayid_datablock_revision(x[offset + 1], 0x80, 1);
			   else
				   check_displayid_datablock_revision(x[offset + 1], 0x80, 0);
			   parse_displayid_parameters_v2(x + offset, block_rev);
			   break;
		case 0x22: {
			   unsigned sz = 20;

			   if (block_rev >= 2)
				   check_displayid_datablock_revision(x[offset + 1], 0x08, 2);
			   else if (block_rev == 1)
				   check_displayid_datablock_revision(x[offset + 1], 0x08, 1);
			   else
				   check_displayid_datablock_revision(x[offset + 1]);
			   sz += (x[offset + 1] & 0x70) >> 4;
			   if (block_rev >= 1 && (x[offset + 1] & 0x08))
				   printf("    These timings support DSC pass-through\n");
			   for (i = 0; i < len / sz; i++)
				   parse_displayid_type_1_7_timing(&x[offset + 3 + i * sz], true, block_rev);
			   break;
		}
		case 0x23:
			   if (block_rev)
				   check_displayid_datablock_revision(x[offset + 1], 0xe8, 1);
			   else
				   check_displayid_datablock_revision(x[offset + 1], 0xc8);
			   if (x[offset + 1] & 0x08) {
				   for (i = 0; i < len / 2; i++)
					   parse_displayid_type_4_8_timing((x[offset + 1] & 0xc0) >> 6,
									   x[offset + 3 + i * 2] |
									   (x[offset + 4 + i * 2] << 8));
			   } else {
				   for (i = 0; i < len; i++)
					   parse_displayid_type_4_8_timing((x[offset + 1] & 0xc0) >> 6,
									   x[offset + 3 + i]);
			   }
			   break;
		case 0x24:
			   check_displayid_datablock_revision(x[offset + 1]);
			   for (i = 0; i < len / 6; i++)
				   parse_displayid_type_9_timing(&x[offset + 3 + i * 6]);
			   break;
		case 0x25: parse_displayid_dynamic_video_timings_range_limits(x + offset); break;
		case 0x26: parse_displayid_interface_features(x + offset); break;
		case 0x27: parse_displayid_stereo_display_intf(x + offset); break;
		case 0x28: parse_displayid_tiled_display_topology(x + offset, true); break;
		case 0x29: parse_displayid_ContainerID(x + offset); break;
		case 0x32: {
			   unsigned sz = 6 + ((x[offset + 1] & 0x70) >> 4);

			   check_displayid_datablock_revision(x[offset + 1], 0x10);
			   for (i = 0; i < len / sz; i++)
				   parse_displayid_type_10_timing(&x[offset + 3 + i * sz]);
			   break;
		}
		case 0x81: parse_displayid_cta_data_block(x + offset); break;
		case 0x7e:
			if (oui == 0x3a0292) {
				parse_displayid_vesa(x + offset);
				break;
			}
			// fall-through
		default: hex_block("    ", x + offset + 3, len); break;
		}

		if ((tag == 0x00 || tag == 0x20) &&
		    (!dispid.is_base_block || !first_data_block))
			fail("%s is required to be the first DisplayID Data Block.\n",
			     data_block.c_str());
		length -= len + 3;
		offset += len + 3;
		first_data_block = false;
	}

	/*
	 * DisplayID length field is number of following bytes
	 * but checksum is calculated over the entire structure
	 * (excluding DisplayID-in-EDID magic byte)
	 */
	data_block.clear();
	do_checksum("  ", x + 1, x[2] + 5);

	if (!memchk(x + 1 + x[2] + 5, 0x7f - (1 + x[2] + 5))) {
		data_block = "Padding";
		fail("DisplayID padding contains non-zero bytes.\n");
	}
	dispid.is_base_block = false;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0xd8, %rsp
movq %rsi, %r14
movq %rdi, %r15
movzbl 0x1(%rsi), %r13d
movzbl 0x2(%rsi), %ebp
movb 0x3(%rsi), %r12b
movzbl 0x4(%rsi), %ebx
movl %r13d, %esi
shrl $0x4, %esi
movl %r13d, %edx
andl $0xf, %edx
leaq 0x14b6e(%rip), %rdi     # 0x30289
movl %esi, 0xa0(%rsp)
movl %edx, 0x9c(%rsp)
movl %ebx, %ecx
xorl %eax, %eax
callq 0x3030
cmpb $0x1, 0x91c(%r15)
movq %r15, 0x40(%rsp)
movq %r14, 0x10(%rsp)
movl %r13d, 0x4c(%rsp)
jne 0x1b83c
movl %ebp, 0x98(%rsp)
movb %r13b, 0x910(%r15)
movzbl %r12b, %ebp
movq %r15, %r14
leaq 0x50(%rsp), %r15
movq %r15, %rdi
movq %r14, %rsi
movl %ebp, %edx
movl $0x1, %ecx
callq 0x1afde
movq (%r15), %r15
leaq 0x20(%rsp), %rdi
movq %r14, %rsi
movl %ebp, %edx
xorl %ecx, %ecx
callq 0x1afde
leaq 0x30(%rsp), %r13
movq -0x10(%r13), %rdx
leaq 0x14b12(%rip), %rdi     # 0x302b1
movq %r15, %rsi
xorl %eax, %eax
callq 0x3030
movq -0x10(%r13), %rdi
cmpq %r13, %rdi
je 0x1b7bf
movq 0x30(%rsp), %rsi
incq %rsi
callq 0x3260
leaq 0x60(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
movq 0x40(%rsp), %r15
movq 0x10(%rsp), %r14
movl 0x98(%rsp), %ebp
je 0x1b7eb
movq 0x60(%rsp), %rsi
incq %rsi
callq 0x3260
testb %r12b, %r12b
jne 0x1b800
leaq 0x14ac4(%rip), %rsi     # 0x302bb
xorl %edi, %edi
xorl %eax, %eax
callq 0x37cc
movl 0x918(%r15), %r8d
decl %r8d
cmpl %ebx, %r8d
je 0x1b89d
cmpb $0x2, %bl
leaq 0x5556(%rip), %rax      # 0x20d73
leaq 0x5465(%rip), %rcx      # 0x20c89
cmovaeq %rax, %rcx
leaq 0x14ab7(%rip), %rsi     # 0x302e6
xorl %edi, %edi
movl %ebx, %edx
xorl %eax, %eax
callq 0x37cc
jmp 0x1b89d
testb %r12b, %r12b
je 0x1b851
leaq 0x14ad4(%rip), %rsi     # 0x3031c
xorl %edi, %edi
xorl %eax, %eax
callq 0x37cc
testl %ebx, %ebx
je 0x1b865
leaq 0x14aee(%rip), %rsi     # 0x3034a
xorl %edi, %edi
xorl %eax, %eax
callq 0x37cc
movzbl 0x910(%r15), %r9d
cmpb %r9b, 0x4c(%rsp)
je 0x1b89d
movl %r9d, %r8d
shrl $0x4, %r8d
andl $0xf, %r9d
leaq 0x14af5(%rip), %rsi     # 0x3037b
xorl %edi, %edi
movl 0xa0(%rsp), %edx
movl 0x9c(%rsp), %ecx
xorl %eax, %eax
callq 0x37cc
cmpb $0x7a, %bpl
jb 0x1b8c3
leaq 0x14af5(%rip), %rsi     # 0x3039f
xorl %edi, %edi
movl %ebp, %edx
xorl %eax, %eax
callq 0x37cc
movl $0x79, %ebp
movl 0x4c(%rsp), %ebx
movq %r14, %r8
jmp 0x1b8d2
testl %ebp, %ebp
movl 0x4c(%rsp), %ebx
movq %r14, %r8
je 0x1d084
leaq 0x30(%r15), %rax
movq %rax, 0x18(%rsp)
movl $0x5, %r13d
movb $0x1, %al
leaq 0x70(%rsp), %r12
movl %eax, 0xa4(%rsp)
movl %r13d, %eax
movq %rax, %r14
movzbl (%r8,%rax), %esi
cmpq $0x32, %rsi
movq %rsi, 0xa8(%rsp)
movl %ebp, 0x98(%rsp)
ja 0x1b976
leaq 0x12eba(%rip), %rcx     # 0x2e7d0
movslq (%rcx,%rsi,4), %rax
addq %rcx, %rax
jmpq *%rax
leaq 0x70(%rsp), %rbx
movq %rbx, %rdi
xorl %esi, %esi
callq 0x59f2
leaq 0x14a94(%rip), %rcx     # 0x303c9
movl $0x23, %r8d
movq %rbx, %rdi
xorl %esi, %esi
xorl %edx, %edx
callq 0x3290
leaq 0x30(%rsp), %rbx
movq %rbx, 0x20(%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x1c09a
movq %rdx, 0x20(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x30(%rsp)
jmp 0x1c0a0
leal -0x7e(%rsi), %eax
cmpl $0x2, %eax
jae 0x1b9f5
cmpb $0x20, %bl
setb %al
setae %dl
cmpl $0x7e, %esi
sete %dil
cmpl $0x7f, %esi
sete %cl
testb %dil, %dl
jne 0x1bf1e
andb %cl, %al
jne 0x1bf1e
movq %r12, %rdi
callq 0x59f2
movl $0x1e, %r8d
movq %r12, %rdi
xorl %esi, %esi
xorl %edx, %edx
leaq 0x14eca(%rip), %rcx     # 0x3088b
callq 0x3290
leaq 0x30(%rsp), %rsi
movq %rsi, 0x20(%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x1cafc
movq %rdx, 0x20(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x30(%rsp)
jmp 0x1cb02
cmpl $0x81, %esi
jne 0x1ba52
movq %r12, %rdi
movl $0x81, %esi
callq 0x59f2
movl $0x1e, %r8d
movq %r12, %rdi
xorl %esi, %esi
xorl %edx, %edx
leaq 0x14e8c(%rip), %rcx     # 0x308aa
callq 0x3290
leaq 0x30(%rsp), %rsi
movq %rsi, 0x20(%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x1cb2d
movq %rdx, 0x20(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x30(%rsp)
jmp 0x1cb33
movq %r12, %rdi
callq 0x59f2
movl $0x1e, %r8d
movq %r12, %rdi
xorl %esi, %esi
xorl %edx, %edx
leaq 0x14e1d(%rip), %rcx     # 0x3088b
callq 0x3290
leaq 0x30(%rsp), %rsi
movq %rsi, 0x20(%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x1bf67
movq %rdx, 0x20(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x30(%rsp)
jmp 0x1bf6d
movq 0x38(%r15), %rdx
leaq 0x14d24(%rip), %rcx     # 0x307d1
jmp 0x1bd1a
leaq 0x70(%rsp), %rbx
movq %rbx, %rdi
movl $0x28, %esi
callq 0x59f2
leaq 0x14bc9(%rip), %rcx     # 0x30694
movl $0x23, %r8d
movq %rbx, %rdi
xorl %esi, %esi
xorl %edx, %edx
callq 0x3290
leaq 0x30(%rsp), %rbx
movq %rbx, 0x20(%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x1bf9b
movq %rdx, 0x20(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x30(%rsp)
jmp 0x1bfa1
leaq 0x70(%rsp), %rbx
movq %rbx, %rdi
movl $0x10, %esi
callq 0x59f2
leaq 0x14b14(%rip), %rcx     # 0x30639
movl $0x25, %r8d
movq %rbx, %rdi
xorl %esi, %esi
xorl %edx, %edx
callq 0x3290
leaq 0x30(%rsp), %rbx
movq %rbx, 0x20(%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x1bfce
movq %rdx, 0x20(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x30(%rsp)
jmp 0x1bfd4
movq 0x38(%r15), %rdx
leaq 0x14a2a(%rip), %rcx     # 0x3059b
jmp 0x1bc6e
leaq 0x70(%rsp), %rbx
movq %rbx, %rdi
movl $0x27, %esi
callq 0x59f2
leaq 0x14aaa(%rip), %rcx     # 0x30639
movl $0x25, %r8d
movq %rbx, %rdi
xorl %esi, %esi
xorl %edx, %edx
callq 0x3290
leaq 0x30(%rsp), %rbx
movq %rbx, 0x20(%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x1c001
movq %rdx, 0x20(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x30(%rsp)
jmp 0x1c007
movq 0x38(%r15), %rdx
leaq 0x14a41(%rip), %rcx     # 0x3061c
xorl %r12d, %r12d
movl $0x1c, %r8d
jmp 0x1beb5
movq 0x38(%r15), %rdx
leaq 0x1483a(%rip), %rcx     # 0x3042e
jmp 0x1beac
leaq 0x70(%rsp), %rbx
movq %rbx, %rdi
movl $0x12, %esi
callq 0x59f2
leaq 0x14a82(%rip), %rcx     # 0x30694
movl $0x23, %r8d
movq %rbx, %rdi
xorl %esi, %esi
xorl %edx, %edx
callq 0x3290
leaq 0x30(%rsp), %rbx
movq %rbx, 0x20(%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x1c034
movq %rdx, 0x20(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x30(%rsp)
jmp 0x1c03a
movq 0x38(%r15), %rdx
leaq 0x14808(%rip), %rcx     # 0x30466
jmp 0x1beac
movq 0x38(%r15), %rdx
leaq 0x1479f(%rip), %rcx     # 0x3040d
xorl %r12d, %r12d
movl $0x20, %r8d
jmp 0x1beb5
movq 0x38(%r15), %rdx
leaq 0x14b70(%rip), %rcx     # 0x307f7
xorl %r12d, %r12d
movl $0x16, %r8d
jmp 0x1beb5
leaq 0x70(%rsp), %rbx
movq %rbx, %rdi
movl $0x1, %esi
callq 0x59f2
leaq 0x1473f(%rip), %rcx     # 0x303ed
movl $0x1f, %r8d
movq %rbx, %rdi
xorl %esi, %esi
xorl %edx, %edx
callq 0x3290
leaq 0x30(%rsp), %rbx
movq %rbx, 0x20(%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x1c067
movq %rdx, 0x20(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x30(%rsp)
jmp 0x1c06d
movq 0x38(%r15), %rdx
leaq 0x147a4(%rip), %rcx     # 0x3049e
jmp 0x1bdc9
movq 0x38(%r15), %rdx
leaq 0x149e6(%rip), %rcx     # 0x306f0
jmp 0x1beac
movq 0x38(%r15), %rdx
leaq 0x148dc(%rip), %rcx     # 0x305f6
xorl %r12d, %r12d
movl $0x25, %r8d
jmp 0x1beb5
movq 0x38(%r15), %rdx
leaq 0x1484a(%rip), %rcx     # 0x3057d
xorl %r12d, %r12d
movl $0x1d, %r8d
jmp 0x1beb5
movq 0x38(%r15), %rdx
leaq 0x147f6(%rip), %rcx     # 0x30542
xorl %r12d, %r12d
movl $0x3a, %r8d
jmp 0x1beb5
movq 0x38(%r15), %rdx
leaq 0x1476e(%rip), %rcx     # 0x304d3
xorl %r12d, %r12d
movl $0x32, %r8d
jmp 0x1beb5
movq 0x38(%r15), %rdx
leaq 0x14788(%rip), %rcx     # 0x30506
xorl %r12d, %r12d
movl $0x3b, %r8d
jmp 0x1beb5
movq 0x38(%r15), %rdx
leaq 0x14840(%rip), %rcx     # 0x305d7
xorl %r12d, %r12d
movl $0x1e, %r8d
jmp 0x1beb5
movq 0x38(%r15), %rdx
leaq 0x1480c(%rip), %rcx     # 0x305bc
xorl %r12d, %r12d
movl $0x1a, %r8d
jmp 0x1beb5
movq 0x38(%r15), %rdx
leaq 0x14896(%rip), %rcx     # 0x3065f
xorl %r12d, %r12d
movl $0x34, %r8d
jmp 0x1beb5
leaq 0x70(%rsp), %rbx
movq %rbx, %rdi
movl $0x21, %esi
callq 0x59f2
leaq 0x145fd(%rip), %rcx     # 0x303ed
movl $0x1f, %r8d
movq %rbx, %rdi
xorl %esi, %esi
xorl %edx, %edx
callq 0x3290
leaq 0x30(%rsp), %rbx
movq %rbx, 0x20(%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x1c0ca
movq %rdx, 0x20(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x30(%rsp)
jmp 0x1c0d0
movq 0x38(%r15), %rdx
leaq 0x1492b(%rip), %rcx     # 0x30767
xorl %r12d, %r12d
movl $0x3c, %r8d
jmp 0x1beb5
leaq 0x70(%rsp), %rbx
movq %rbx, %rdi
movl $0x20, %esi
callq 0x59f2
leaq 0x14569(%rip), %rcx     # 0x303c9
movl $0x23, %r8d
movq %rbx, %rdi
xorl %esi, %esi
xorl %edx, %edx
callq 0x3290
leaq 0x30(%rsp), %rbx
movq %rbx, 0x20(%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x1c0fa
movq %rdx, 0x20(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x30(%rsp)
jmp 0x1c100
movq 0x38(%r15), %rdx
leaq 0x1480c(%rip), %rcx     # 0x306b8
xorl %r12d, %r12d
movl $0x37, %r8d
movq 0x18(%rsp), %rdi
xorl %esi, %esi
callq 0x3390
jmp 0x1c1db
movq 0x38(%r15), %rdx
leaq 0xf49b(%rip), %rcx      # 0x2b36c
xorl %r12d, %r12d
movl $0x23, %r8d
jmp 0x1beb5
movq 0x38(%r15), %rdx
leaq 0x14841(%rip), %rcx     # 0x30728
xorl %r12d, %r12d
movl $0x3e, %r8d
jmp 0x1beb5
movq 0x38(%r15), %rdx
leaq 0x14911(%rip), %rcx     # 0x3080e
xorl %r12d, %r12d
movl $0x3d, %r8d
jmp 0x1beb5
movq 0x38(%r15), %rdx
leaq 0x14891(%rip), %rcx     # 0x307a4
xorl %r12d, %r12d
movl $0x2c, %r8d
jmp 0x1beb5
leal 0x3(%r13), %eax
movzbl (%r8,%rax), %eax
shll $0x10, %eax
leal 0x4(%r13), %ecx
movzbl (%r8,%rcx), %ecx
shll $0x8, %ecx
orl %eax, %ecx
movq %r13, 0x90(%rsp)
leal 0x5(%r13), %eax
movzbl (%r8,%rax), %ebx
orl %ecx, %ebx
xorl %ebp, %ebp
movl %ebx, %edi
xorl %esi, %esi
callq 0x5a41
testq %rax, %rax
je 0x1ca7e
movq %rax, %r13
jmp 0x1ca9a
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0x8(%rax), %rdx
movq %rdx, 0x28(%rsp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0x20(%rsp), %rdi
leaq 0x1091c(%rip), %rsi     # 0x2c8ad
callq 0x3420
jmp 0x1cb5c
movups (%rcx), %xmm0
movups %xmm0, (%rbx)
movq 0x8(%rax), %rdx
leaq 0x20(%rsp), %rdi
movq %rdx, 0x8(%rdi)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0x108e9(%rip), %rsi     # 0x2c8ad
callq 0x3420
jmp 0x1c128
movups (%rcx), %xmm0
movups %xmm0, (%rbx)
movq 0x8(%rax), %rdx
leaq 0x20(%rsp), %rdi
movq %rdx, 0x8(%rdi)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0x108b6(%rip), %rsi     # 0x2c8ad
callq 0x3420
jmp 0x1c128
movups (%rcx), %xmm0
movups %xmm0, (%rbx)
movq 0x8(%rax), %rdx
leaq 0x20(%rsp), %rdi
movq %rdx, 0x8(%rdi)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0x10883(%rip), %rsi     # 0x2c8ad
callq 0x3420
jmp 0x1c128
movups (%rcx), %xmm0
movups %xmm0, (%rbx)
movq 0x8(%rax), %rdx
leaq 0x20(%rsp), %rdi
movq %rdx, 0x8(%rdi)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0x10850(%rip), %rsi     # 0x2c8ad
callq 0x3420
jmp 0x1c128
movups (%rcx), %xmm0
movups %xmm0, (%rbx)
movq 0x8(%rax), %rdx
leaq 0x20(%rsp), %rdi
movq %rdx, 0x8(%rdi)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0x1081d(%rip), %rsi     # 0x2c8ad
callq 0x3420
jmp 0x1c128
movups (%rcx), %xmm0
movups %xmm0, (%rbx)
movq 0x8(%rax), %rdx
leaq 0x20(%rsp), %rdi
movq %rdx, 0x8(%rdi)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0x107ea(%rip), %rsi     # 0x2c8ad
callq 0x3420
jmp 0x1c128
movups (%rcx), %xmm0
movups %xmm0, (%rbx)
movq 0x8(%rax), %rdx
leaq 0x20(%rsp), %rdi
movq %rdx, 0x8(%rdi)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0x107ba(%rip), %rsi     # 0x2c8ad
callq 0x3420
jmp 0x1c128
movups (%rcx), %xmm0
movups %xmm0, (%rbx)
movq 0x8(%rax), %rdx
leaq 0x20(%rsp), %rdi
movq %rdx, 0x8(%rdi)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0x1078a(%rip), %rsi     # 0x2c8ad
callq 0x3420
leaq 0x60(%rsp), %r12
movq %r12, 0x50(%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x1c150
movq %rdx, 0x50(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x60(%rsp)
jmp 0x1c158
movups (%rcx), %xmm0
movups %xmm0, (%r12)
movq 0x8(%rax), %rdx
leaq 0x50(%rsp), %rbx
movq %rdx, 0x8(%rbx)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq 0x18(%rsp), %rdi
movq %rbx, %rsi
callq 0x32d0
movq (%rbx), %rdi
cmpq %r12, %rdi
je 0x1c196
movq 0x60(%rsp), %rsi
incq %rsi
callq 0x3260
movq 0x20(%rsp), %rdi
leaq 0x30(%rsp), %rax
cmpq %rax, %rdi
movl 0x4c(%rsp), %ebx
je 0x1c1b6
movq 0x30(%rsp), %rsi
incq %rsi
callq 0x3260
movq 0x70(%rsp), %rdi
leaq 0x80(%rsp), %rax
cmpq %rax, %rdi
je 0x1c1d8
movq 0x80(%rsp), %rsi
incq %rsi
callq 0x3260
xorl %r12d, %r12d
cmpb $0x20, %bl
movq 0xa8(%rsp), %r9
jb 0x1c203
cmpb $0x20, %r9b
setb %al
cmpl $0x7f, %r9d
sete %cl
orb %al, %cl
leaq 0x146ca(%rip), %rsi     # 0x308c9
jne 0x1c212
jmp 0x1c231
leal -0x20(%r9), %eax
leaq 0x146ec(%rip), %rsi     # 0x308fa
cmpb $0x5e, %al
ja 0x1c231
xorl %edi, %edi
movl 0xa0(%rsp), %edx
movl 0x9c(%rsp), %ecx
xorl %eax, %eax
callq 0x37cc
movq 0xa8(%rsp), %r9
cmpl $0x2, %ebp
movq 0x10(%rsp), %r8
jbe 0x1d023
leal 0x2(%r13), %eax
movzbl (%r8,%rax), %ebx
leal 0x3(%rbx), %edx
cmpl %edx, %ebp
jb 0x1d046
addq %r8, %r14
movl %ebx, %eax
orl %r9d, %eax
je 0x1d05a
movl %edx, 0xb4(%rsp)
leal 0x1(%r13), %r15d
movzbl (%r8,%r15), %ebp
movq 0x18(%rsp), %rax
movq (%rax), %rsi
leaq 0x8b8b(%rip), %rdi      # 0x24e0b
xorl %eax, %eax
callq 0x3030
movq 0xa8(%rsp), %rax
cmpl $0x32, %eax
ja 0x1c2da
movl %ebp, %r12d
andl $0x7, %r12d
movl %eax, %eax
leaq 0x125f8(%rip), %rcx     # 0x2e89c
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq 0x40(%rsp), %rbx
movq %rbx, %rdi
movq %r14, %rsi
callq 0x16166
movl 0xa4(%rsp), %eax
testb %al, 0x91c(%rbx)
movq 0x10(%rsp), %r8
je 0x1c95b
jmp 0x1c979
cmpl $0x7e, %eax
je 0x1c8f3
cmpl $0x81, %eax
jne 0x1c902
movq 0x40(%rsp), %rdi
movq %r14, %rsi
callq 0x1ae7c
jmp 0x1c88a
movq %r13, 0x90(%rsp)
movq %r14, %rsi
callq 0x17b1c
jmp 0x1c92a
movq 0x40(%rsp), %rdi
movq %r14, %rsi
callq 0x18620
jmp 0x1c88a
movq %r14, %rsi
callq 0x1a706
jmp 0x1c88a
movq 0x40(%rsp), %rdi
movq %r14, %rsi
movl $0x1, %edx
jmp 0x1c885
movq 0x40(%rsp), %rdi
movq %r14, %rsi
callq 0x1a434
jmp 0x1c88a
movq 0x40(%rsp), %rdi
movq %r14, %rsi
callq 0x17b66
jmp 0x1c88a
movq 0x40(%rsp), %rdi
movq %r14, %rsi
callq 0x17f50
jmp 0x1c88a
movq 0x10(%rsp), %r14
movzbl (%r14,%r15), %esi
xorl %ebp, %ebp
xorl %edx, %edx
xorl %ecx, %ecx
callq 0x1611c
movq %r14, %r8
cmpl $0xa, %ebx
movl $0xa, %r15d
cmovbl %ebx, %r15d
testl %ebx, %ebx
je 0x1c979
shll $0x3, %r15d
movq %r13, 0x90(%rsp)
leal 0x3(%r13), %r12d
movq %r8, %r14
movl %ebp, %eax
shrl $0x3, %eax
addl %r12d, %eax
movzbl (%r14,%rax), %eax
movl %ebp, %ecx
andl $0x7, %ecx
incl %ebp
btl %ecx, %eax
jae 0x1c41e
leaq 0x4503(%rip), %rsi      # 0x208df
leaq 0x50(%rsp), %rbx
movq %rbx, %rdi
movl %ebp, %edx
xorl %eax, %eax
callq 0x3070
movzbl %bpl, %edi
callq 0x8df0
movl $0x1, (%rsp)
leaq 0x9093(%rip), %rsi      # 0x25497
leaq 0x487e(%rip), %r8       # 0x20c89
movq 0x40(%rsp), %rdi
movq %rax, %rdx
movq %rbx, %rcx
xorl %r9d, %r9d
callq 0x3e8c
cmpl %r15d, %ebp
movq 0x10(%rsp), %r14
jne 0x1c3bc
jmp 0x1c92f
movq 0x40(%rsp), %rdi
movq %r14, %rsi
callq 0x162d2
jmp 0x1c88a
movq 0x10(%rsp), %r14
movzbl (%r14,%r15), %esi
xorl %ebp, %ebp
xorl %edx, %edx
xorl %ecx, %ecx
callq 0x1611c
movq %r14, %r8
cmpl $0x8, %ebx
movl $0x8, %r15d
cmovbl %ebx, %r15d
testq %rbx, %rbx
je 0x1c979
shll $0x3, %r15d
movq %r13, 0x90(%rsp)
leal 0x3(%r13), %r12d
movq %r8, %r14
movl %ebp, %eax
shrl $0x3, %eax
addl %r12d, %eax
movzbl (%r14,%rax), %eax
movl %ebp, %ecx
andl $0x7, %ecx
incl %ebp
btl %ecx, %eax
jae 0x1c4e2
leaq 0x4464(%rip), %rsi      # 0x20904
leaq 0x50(%rsp), %rbx
movq %rbx, %rdi
movl %ebp, %edx
xorl %eax, %eax
callq 0x3070
movzbl %bpl, %edi
callq 0xdfcf
movl $0x1, (%rsp)
leaq 0x8fcf(%rip), %rsi      # 0x25497
leaq 0x47ba(%rip), %r8       # 0x20c89
movq 0x40(%rsp), %rdi
movq %rax, %rdx
movq %rbx, %rcx
xorl %r9d, %r9d
callq 0x3e8c
cmpl %r15d, %ebp
movq 0x10(%rsp), %r14
jne 0x1c480
jmp 0x1c92f
movq %r14, %rsi
callq 0x1a364
jmp 0x1c88a
movq 0x10(%rsp), %r14
movzbl (%r14,%r15), %esi
andb $0x1, %bpl
movzbl %bpl, %ecx
xorl %edx, %edx
callq 0x1611c
movq %r14, %r8
cmpb $0x3, %bl
jb 0x1c979
imull $0xab, %ebx, %ebx
shrl $0x9, %ebx
movq %r13, 0x90(%rsp)
leal 0x3(%r13), %ebp
movq %r8, %r14
movq 0x40(%rsp), %r15
movl %ebp, %esi
addq %r14, %rsi
movq %r15, %rdi
callq 0x17424
addl $0x3, %ebp
decq %rbx
jne 0x1c540
jmp 0x1c92f
movq 0x40(%rsp), %rdi
movq %r14, %rsi
callq 0x164ce
jmp 0x1c88a
movq %r14, %rsi
callq 0x17e7c
jmp 0x1c88a
movq 0x10(%rsp), %r14
movzbl (%r14,%r15), %esi
movl $0xc0, %edx
movl $0x1, %ecx
callq 0x1611c
movq %r14, %r8
testq %rbx, %rbx
je 0x1c979
movq %r13, 0x90(%rsp)
leal 0x3(%r13), %ebp
movq 0x40(%rsp), %r12
movq %r8, %r14
movb (%r14,%r15), %al
shrb $0x6, %al
movl %ebp, %ecx
movzbl (%r14,%rcx), %edx
movzbl %al, %esi
movq %r12, %rdi
xorl %ecx, %ecx
callq 0x177d0
incl %ebp
decq %rbx
jne 0x1c5b2
jmp 0x1c92f
movq 0x10(%rsp), %r14
movzbl (%r14,%r15), %esi
xorl %r15d, %r15d
xorl %edx, %edx
xorl %ecx, %ecx
callq 0x1611c
movq %r14, %r8
testq %rbx, %rbx
je 0x1c979
movq %r13, 0x90(%rsp)
leal 0x3(%r13), %r12d
movq 0x40(%rsp), %rbp
movq %r8, %r14
leal (%r12,%r15), %esi
addq %r14, %rsi
movq %rbp, %rdi
callq 0x1924a
leal (%r12,%r15), %eax
addl $0x2, %eax
movb (%r14,%rax), %al
andb $0x40, %al
shrb $0x6, %al
movzbl %al, %eax
leal (%rax,%rax,2), %eax
addl %eax, %r15d
addl $0xe, %r15d
cmpl %ebx, %r15d
jb 0x1c60f
jmp 0x1c92f
movq 0x10(%rsp), %r14
movzbl (%r14,%r15), %esi
andb $0x1, %bpl
movzbl %bpl, %ecx
xorl %edx, %edx
callq 0x1611c
movq %r14, %r8
cmpb $0x14, %bl
jb 0x1c979
imull $0xcd, %ebx, %ebx
shrl $0xc, %ebx
movq %r13, 0x90(%rsp)
leal 0x3(%r13), %ebp
movq 0x40(%rsp), %r15
movq %r8, %r14
movl %ebp, %esi
addq %r14, %rsi
movq %r15, %rdi
xorl %edx, %edx
movl %r12d, %ecx
xorl %r8d, %r8d
callq 0x166ca
addl $0x14, %ebp
decq %rbx
jne 0x1c687
jmp 0x1c92f
xorl %ecx, %ecx
testb %r12b, %r12b
setne %cl
movq 0x10(%rsp), %rbx
movzbl (%rbx,%r15), %esi
movl $0x80, %edx
callq 0x1611c
movq 0x40(%rsp), %rdi
movq %r14, %rsi
movl %r12d, %edx
callq 0x19938
jmp 0x1c976
movq %r14, %rsi
callq 0x17a0c
jmp 0x1c88a
movq 0x10(%rsp), %rax
movzbl (%rax,%r15), %esi
testb %r12b, %r12b
je 0x1c9cc
movl $0xe8, %edx
movl $0x1, %ecx
jmp 0x1c9d3
movq 0x10(%rsp), %r14
movzbl (%r14,%r15), %esi
xorl %edx, %edx
xorl %ecx, %ecx
callq 0x1611c
movq %r14, %r8
cmpb $0x6, %bl
jb 0x1c979
imull $0xab, %ebx, %ebx
shrl $0xa, %ebx
movq %r13, 0x90(%rsp)
leal 0x3(%r13), %ebp
movq %r8, %r14
movq 0x40(%rsp), %r15
movl %ebp, %esi
addq %r14, %rsi
movq %r15, %rdi
callq 0x19eb2
addl $0x6, %ebp
decq %rbx
jne 0x1c745
jmp 0x1c92f
movq 0x10(%rsp), %r14
movzbl (%r14,%r15), %esi
xorl %edx, %edx
xorl %ecx, %ecx
callq 0x1611c
movq %r14, %r8
cmpb $0xb, %bl
jb 0x1c979
imull $0x75, %ebx, %eax
shrl $0x8, %eax
subb %al, %bl
shrb %bl
addb %al, %bl
shrb $0x3, %bl
movq %r13, 0x90(%rsp)
leal 0x3(%r13), %ebp
movzbl %bl, %ebx
movq %r8, %r14
movq 0x40(%rsp), %r15
movl %ebp, %esi
addq %r14, %rsi
movq %r15, %rdi
callq 0x16dc0
addl $0xb, %ebp
decq %rbx
jne 0x1c7a4
jmp 0x1c92f
movq 0x10(%rsp), %r14
movzbl (%r14,%r15), %esi
movl %esi, %ebp
shrb $0x4, %bpl
movl %ebp, %r15d
andb $0x7, %r15b
addb $0x6, %r15b
movl $0x10, %edx
xorl %ecx, %ecx
callq 0x1611c
movq %r14, %r8
cmpb %bl, %r15b
ja 0x1c979
movzbl %bl, %eax
divb %r15b
movq %r13, 0x90(%rsp)
leal 0x3(%r13), %ebx
movzbl %al, %eax
cmpb $0x2, %al
movl $0x1, %ecx
cmovael %eax, %ecx
movzbl %cl, %r15d
movzbl %bpl, %ebp
andl $0x7, %ebp
addl $0x6, %ebp
negq %r15
movq %r8, %r14
movq 0x40(%rsp), %r12
movl %ebx, %esi
addq %r14, %rsi
movq %r12, %rdi
xorl %edx, %edx
callq 0x1a77c
addl %ebp, %ebx
incq %r15
jne 0x1c829
jmp 0x1c92f
cmpb $0x2, %r12b
jb 0x1c9a7
movq 0x10(%rsp), %r14
movzbl (%r14,%r15), %esi
movl $0x8, %edx
movl $0x2, %ecx
callq 0x1611c
jmp 0x1cd87
movq 0x40(%rsp), %rdi
movq %r14, %rsi
callq 0x1818a
jmp 0x1c88a
movq 0x40(%rsp), %rdi
movq %r14, %rsi
xorl %edx, %edx
callq 0x18f1c
movq 0x10(%rsp), %r8
jmp 0x1c979
movq 0x10(%rsp), %r14
movzbl (%r14,%r15), %esi
xorl %edx, %edx
xorl %ecx, %ecx
callq 0x1611c
movq %r14, %r8
cmpb $0x7, %bl
jb 0x1c979
leal (%rbx,%rbx,8), %eax
leal (%rbx,%rax,4), %eax
shrl $0x8, %eax
subb %al, %bl
shrb %bl
addb %al, %bl
shrb $0x2, %bl
movq %r13, 0x90(%rsp)
leal 0x3(%r13), %ebp
movzbl %bl, %ebx
movq %r8, %r14
movq 0x40(%rsp), %r15
movl %ebp, %esi
addq %r14, %rsi
movq %r15, %rdi
callq 0x18968
addl $0x7, %ebp
decq %rbx
jne 0x1c8dc
jmp 0x1c92f
testb %r12b, %r12b
je 0x1c902
movq %r14, %rsi
callq 0x1ad66
jmp 0x1c88a
movq %r13, 0x90(%rsp)
addq $0x3, %r14
leaq 0x8b82(%rip), %rdi      # 0x25497
movq %r14, %rsi
movl %ebx, %edx
movl $0x1, %ecx
movl $0x10, %r8d
callq 0x5bd2
movq 0x10(%rsp), %r14
testb $-0x21, 0xa8(%rsp)
movq %r14, %r8
movq 0x90(%rsp), %r13
jne 0x1c979
movq 0x40(%rsp), %rax
movl 0xa4(%rsp), %ecx
andb 0x91c(%rax), %cl
testb $0x1, %cl
jne 0x1c979
movq 0x18(%rsp), %rax
movq (%rax), %rdx
xorl %edi, %edi
leaq 0x140a0(%rip), %rsi     # 0x30a0c
xorl %eax, %eax
movq %r8, %rbx
callq 0x37cc
movq %rbx, %r8
movl 0xb4(%rsp), %ecx
addl %ecx, %r13d
xorl %eax, %eax
movl 0x98(%rsp), %ebp
subl %ecx, %ebp
movq 0x40(%rsp), %r15
movl 0x4c(%rsp), %ebx
leaq 0x70(%rsp), %r12
jne 0x1b8e8
jmp 0x1d084
movq 0x10(%rsp), %rax
movb (%rax,%r15), %al
movzbl %al, %esi
cmpb $0x1, %r12b
jne 0x1cd79
movl $0x8, %edx
movl $0x1, %ecx
jmp 0x1cd7d
movl $0xc8, %edx
xorl %ecx, %ecx
callq 0x1611c
movq 0x10(%rsp), %r8
testb $0x8, (%r8,%r15)
jne 0x1ca23
testl %ebx, %ebx
je 0x1c979
movq %r13, 0x90(%rsp)
leal 0x3(%r13), %ebp
movq 0x40(%rsp), %r12
movq %r8, %r14
movb (%r14,%r15), %al
shrb $0x6, %al
movl %ebp, %ecx
movzbl (%r14,%rcx), %edx
movzbl %al, %esi
movq %r12, %rdi
xorl %ecx, %ecx
callq 0x177d0
incl %ebp
decq %rbx
jne 0x1c9fc
jmp 0x1c92f
cmpb $0x2, %bl
jb 0x1c979
shrl %ebx
movq %r13, 0x90(%rsp)
leal 0x3(%r13), %r12d
movq 0x40(%rsp), %rbp
movq %r8, %r14
movb (%r14,%r15), %al
shrb $0x6, %al
movl %r12d, %ecx
movzbl (%r14,%rcx), %ecx
leal 0x1(%r12), %edx
movzbl (%r14,%rdx), %edx
shll $0x8, %edx
orl %ecx, %edx
movzwl %dx, %edx
movzbl %al, %esi
movq %rbp, %rdi
xorl %ecx, %ecx
callq 0x177d0
addl $0x2, %r12d
decq %rbx
jne 0x1ca42
jmp 0x1c92f
movl %ebx, %edi
movl $0x1, %esi
callq 0x5a41
movq %rax, %r13
testq %rax, %rax
setne %bpl
je 0x1ce11
leaq 0x80(%rsp), %rax
movq %rax, 0x70(%rsp)
leaq 0x70(%rsp), %r12
movq %r12, %rdi
leaq 0xe7f8(%rip), %rsi      # 0x2b2ae
leaq 0xe80d(%rip), %rdx      # 0x2b2ca
callq 0x8d58
movq %r12, %rdi
movq %r13, %rsi
callq 0x3420
leaq 0x30(%rsp), %rsi
movq %rsi, 0x20(%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x1cbe2
movq %rdx, 0x20(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x30(%rsp)
jmp 0x1cbe8
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0x8(%rax), %rdx
movq %rdx, 0x28(%rsp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0x20(%rsp), %rdi
leaq 0xfd87(%rip), %rsi      # 0x2c8ad
callq 0x3420
jmp 0x1cb5c
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0x8(%rax), %rdx
movq %rdx, 0x28(%rsp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0x20(%rsp), %rdi
leaq 0xfd56(%rip), %rsi      # 0x2c8ad
callq 0x3420
leaq 0x60(%rsp), %r12
movq %r12, 0x50(%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x1cb84
movq %rdx, 0x50(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x60(%rsp)
jmp 0x1cb8c
movups (%rcx), %xmm0
movups %xmm0, (%r12)
movq 0x8(%rax), %rdx
movq %rdx, 0x58(%rsp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq 0x18(%rsp), %rdi
leaq 0x50(%rsp), %rsi
callq 0x32d0
movq 0x50(%rsp), %rdi
cmpq %r12, %rdi
je 0x1cbca
movq 0x60(%rsp), %rsi
incq %rsi
callq 0x3260
movq 0x20(%rsp), %rdi
leaq 0x30(%rsp), %rax
cmpq %rax, %rdi
jne 0x1c1a9
jmp 0x1c1b6
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0x8(%rax), %rdx
movq %rdx, 0x28(%rsp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0x20(%rsp), %rdi
leaq 0xfca1(%rip), %rsi      # 0x2c8ad
callq 0x3420
leaq 0x60(%rsp), %r13
movq %r13, 0x50(%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x1cc39
movq %rdx, 0x50(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x60(%rsp)
jmp 0x1cc41
movups (%rcx), %xmm0
movups %xmm0, (%r13)
movq 0x8(%rax), %rdx
movq %rdx, 0x58(%rsp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq 0x18(%rsp), %rdi
leaq 0x50(%rsp), %rsi
callq 0x32d0
movq 0x50(%rsp), %rdi
cmpq %r13, %rdi
je 0x1cc7f
movq 0x60(%rsp), %rsi
incq %rsi
callq 0x3260
movq 0x20(%rsp), %rdi
leaq 0x30(%rsp), %rax
cmpq %rax, %rdi
movq 0x90(%rsp), %r13
je 0x1cca3
movq 0x30(%rsp), %rsi
incq %rsi
callq 0x3260
movq 0x70(%rsp), %rdi
leaq 0x80(%rsp), %rax
cmpq %rax, %rdi
leaq 0x70(%rsp), %r12
je 0x1ccca
movq 0x80(%rsp), %rsi
incq %rsi
callq 0x3260
testb %bpl, %bpl
movl 0x98(%rsp), %ebp
je 0x1d010
leaq 0x80(%rsp), %rax
movq %rax, 0x70(%rsp)
movq %r12, %rdi
leaq 0x13b77(%rip), %rsi     # 0x30868
leaq 0x13b74(%rip), %rdx     # 0x3086c
callq 0x8d58
leaq 0xb8(%rsp), %rdi
movl %ebx, %esi
callq 0x5b45
movq 0x70(%rsp), %rcx
movl $0xf, %edi
leaq 0x80(%rsp), %rax
cmpq %rax, %rcx
je 0x1cd2b
movq 0x80(%rsp), %rdi
movq 0x78(%rsp), %r8
movq 0xb8(%rsp), %rsi
movq 0xc0(%rsp), %rdx
leaq (%rdx,%r8), %rax
cmpq %rdi, %rax
jbe 0x1cd6c
movl $0xf, %edi
leaq 0xc8(%rsp), %r9
cmpq %r9, %rsi
je 0x1cd63
movq 0xc8(%rsp), %rdi
cmpq %rdi, %rax
jbe 0x1ce6f
movq %r12, %rdi
callq 0x30b0
jmp 0x1ce80
xorl %edx, %edx
xorl %ecx, %ecx
callq 0x1611c
movq 0x10(%rsp), %r14
movzbl (%r14,%r15), %r15d
testb %r12b, %r12b
movq %r14, %r8
je 0x1cdad
movl %r15d, %eax
andl $0x8, %eax
je 0x1cdad
leaq 0x14b24(%rip), %rdi     # 0x318c7
callq 0x3380
movq 0x10(%rsp), %r8
shrl $0x4, %r15d
andl $0x7, %r15d
addl $0x14, %r15d
cmpl %ebx, %r15d
ja 0x1c979
movzbl %bl, %eax
divb %r15b
movq %r13, 0x90(%rsp)
leal 0x3(%r13), %ebx
movzbl %al, %eax
cmpb $0x2, %al
movl $0x1, %ecx
cmovael %eax, %ecx
movzbl %cl, %ebp
movq %r8, %r14
movq 0x40(%rsp), %r13
movl %ebx, %esi
addq %r14, %rsi
movq %r13, %rdi
movl $0x1, %edx
movl %r12d, %ecx
xorl %r8d, %r8d
callq 0x166ca
addl %r15d, %ebx
decq %rbp
jne 0x1cdec
jmp 0x1c92f
leaq 0x20(%rsp), %r13
movq %r13, %rdi
movl %ebx, %esi
callq 0x5b45
movl $0x20, %r8d
movq %r13, %rdi
xorl %esi, %esi
xorl %edx, %edx
leaq 0x13a18(%rip), %rcx     # 0x3084c
callq 0x3290
leaq 0x60(%rsp), %r13
movq %r13, 0x50(%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
movl 0x98(%rsp), %ebp
je 0x1cfa6
movq %rdx, 0x50(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x60(%rsp)
jmp 0x1cfae
leaq 0xb8(%rsp), %rdi
xorl %esi, %esi
xorl %edx, %edx
callq 0x3290
leaq 0x30(%rsp), %rsi
movq %rsi, 0x20(%rsp)
movq (%rax), %rdx
leaq 0x10(%rax), %rcx
cmpq %rcx, %rdx
je 0x1cea5
movq %rdx, 0x20(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x30(%rsp)
jmp 0x1ceab
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq %rax, %rdx
addq $0x8, %rdx
movq 0x8(%rax), %rsi
movq %rsi, 0x28(%rsp)
movq %rcx, (%rax)
movq $0x0, (%rdx)
movb $0x0, (%rcx)
leaq 0x20(%rsp), %rdi
leaq 0x13999(%rip), %rsi     # 0x3086d
callq 0x3420
leaq 0x60(%rsp), %rsi
movq %rsi, 0x50(%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x1cf01
movq %rdx, 0x50(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x60(%rsp)
jmp 0x1cf07
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0x8(%rax), %rdx
movq %rdx, 0x58(%rsp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq 0x50(%rsp), %rsi
xorl %edi, %edi
xorl %eax, %eax
callq 0x37cc
movq 0x50(%rsp), %rdi
leaq 0x60(%rsp), %rax
cmpq %rax, %rdi
je 0x1cf49
movq 0x60(%rsp), %rsi
incq %rsi
callq 0x3260
movq 0x20(%rsp), %rdi
leaq 0x30(%rsp), %rax
cmpq %rax, %rdi
je 0x1cf65
movq 0x30(%rsp), %rsi
incq %rsi
callq 0x3260
movq 0xb8(%rsp), %rdi
leaq 0xc8(%rsp), %rax
cmpq %rax, %rdi
je 0x1cf8a
movq 0xc8(%rsp), %rsi
incq %rsi
callq 0x3260
movq 0x70(%rsp), %rdi
leaq 0x80(%rsp), %rax
cmpq %rax, %rdi
je 0x1d010
movq 0x80(%rsp), %rsi
jmp 0x1d008
movups (%rcx), %xmm0
movups %xmm0, (%r13)
movq 0x8(%rax), %rdx
movq %rdx, 0x58(%rsp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq 0x18(%rsp), %rdi
leaq 0x50(%rsp), %rsi
callq 0x32d0
movq 0x50(%rsp), %rdi
cmpq %r13, %rdi
je 0x1cfec
movq 0x60(%rsp), %rsi
incq %rsi
callq 0x3260
movq 0x20(%rsp), %rdi
leaq 0x30(%rsp), %rax
cmpq %rax, %rdi
movq 0x90(%rsp), %r13
je 0x1d010
movq 0x30(%rsp), %rsi
incq %rsi
callq 0x3260
cmpl $0x3a0292, %ebx         # imm = 0x3A0292
sete %r12b
movl 0x4c(%rsp), %ebx
jmp 0x1c1db
testl %r9d, %r9d
jne 0x1d032
incl %r13d
cmpb $0x0, (%r8,%r13)
je 0x1d084
leaq 0x138f2(%rip), %rsi     # 0x3092b
xorl %edi, %edi
movl %ebp, %edx
xorl %eax, %eax
callq 0x37cc
jmp 0x1d07f
leaq 0x13939(%rip), %rsi     # 0x30986
xorl %edi, %edi
movl %ebp, %ecx
xorl %eax, %eax
callq 0x37cc
jmp 0x1d07f
movq %r14, %rdi
movl %ebp, %esi
xorl %edx, %edx
callq 0x5ba5
movq 0x10(%rsp), %r8
testb %al, %al
jne 0x1d084
leaq 0x1396a(%rip), %rsi     # 0x309e0
xorl %edi, %edi
xorl %eax, %eax
callq 0x37cc
movq 0x10(%rsp), %r8
leaq 0x1(%r8), %rbx
movq $0x0, 0x38(%r15)
movq 0x30(%r15), %rax
movb $0x0, (%rax)
movzbl 0x2(%r8), %edx
addq $0x5, %rdx
leaq 0x83f2(%rip), %rdi      # 0x25499
movq %rbx, %rsi
movq %r8, %r14
callq 0x3b70
movzbl 0x2(%r14), %eax
leaq (%rbx,%rax), %rdi
addq $0x5, %rdi
movl $0x79, %esi
subl %eax, %esi
xorl %edx, %edx
callq 0x5ba5
testb %al, %al
jne 0x1d0fd
leaq 0x30(%r15), %rdi
movq 0x38(%r15), %rdx
leaq 0xe590(%rip), %rcx      # 0x2b670
movl $0x7, %r8d
xorl %esi, %esi
callq 0x3390
leaq 0x1394e(%rip), %rsi     # 0x30a42
xorl %edi, %edi
xorl %eax, %eax
callq 0x37cc
movb $0x0, 0x91c(%r15)
addq $0xd8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq %rax, %rbx
movq 0x20(%rsp), %rdi
leaq 0x30(%rsp), %rax
cmpq %rax, %rdi
je 0x1d226
movq 0x30(%rsp), %rsi
jmp 0x1d21e
movq %rax, %rbx
movq 0x50(%rsp), %rdi
leaq 0x60(%rsp), %rax
cmpq %rax, %rdi
je 0x1d15b
movq 0x60(%rsp), %rsi
incq %rsi
callq 0x3260
jmp 0x1d15b
movq %rax, %rbx
movq 0x20(%rsp), %rdi
leaq 0x30(%rsp), %rax
cmpq %rax, %rdi
je 0x1d17c
movq 0x30(%rsp), %rsi
incq %rsi
callq 0x3260
jmp 0x1d17c
movq %rax, %rbx
movq 0xb8(%rsp), %rdi
leaq 0xc8(%rsp), %rax
cmpq %rax, %rdi
je 0x1d204
movq 0xc8(%rsp), %rsi
jmp 0x1d1f7
jmp 0x1d201
jmp 0x1d1a3
jmp 0x1d1e0
jmp 0x1d201
movq %rax, %rbx
jmp 0x1d226
jmp 0x1d1e0
jmp 0x1d201
jmp 0x1d1e0
jmp 0x1d201
jmp 0x1d1cc
jmp 0x1d201
jmp 0x1d1cc
jmp 0x1d201
jmp 0x1d1cc
jmp 0x1d201
jmp 0x1d1cc
jmp 0x1d201
jmp 0x1d1cc
jmp 0x1d201
jmp 0x1d1cc
jmp 0x1d201
jmp 0x1d1cc
jmp 0x1d201
movq %rbx, %rcx
movq %rax, %rbx
movq 0x20(%rsp), %rdi
cmpq %rcx, %rdi
jne 0x1d1f2
jmp 0x1d204
jmp 0x1d201
movq %rax, %rbx
movq 0x20(%rsp), %rdi
leaq 0x30(%rsp), %rax
cmpq %rax, %rdi
je 0x1d204
movq 0x30(%rsp), %rsi
incq %rsi
callq 0x3260
jmp 0x1d204
movq %rax, %rbx
movq 0x70(%rsp), %rdi
leaq 0x80(%rsp), %rax
cmpq %rax, %rdi
je 0x1d226
movq 0x80(%rsp), %rsi
incq %rsi
callq 0x3260
movq %rbx, %rdi
callq 0x3400
movq %rax, %rbx
leaq 0x60(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x1d226
movq 0x60(%rsp), %rsi
jmp 0x1d21e