// File: /workspace/github_cpp_makefile_star2_O1/MarkCBell[P]twister/./twister/kernel/manifold.cpp
// Function: construct_manifold(manifold&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>)
void construct_manifold(manifold &M, std::string surface_file_contents, std::string gluing, std::string handles)
{
	// These will hold all the pieces of information for the manifold.
	std::vector<annulus> annuli;
	std::vector<rectangle> rectangles;
	std::vector<std::string> annulus_name, annulus_name_inverse, rectangle_name, rectangle_name_inverse, macro_name, macro;
	
	// Fill up the manifold with interesting information from the surface_file_contents.
	initialise_manifold(M, annuli, rectangles, annulus_name, annulus_name_inverse, rectangle_name, rectangle_name_inverse, macro_name, macro, surface_file_contents);
	
	// Format the commands.
	format_command(handles, annulus_name, annulus_name_inverse, rectangle_name, rectangle_name_inverse, macro_name, macro);
	format_command(gluing, annulus_name, annulus_name_inverse, rectangle_name, rectangle_name_inverse, macro_name, macro);
	
	output_debugging("\nParsed handles: " + handles + "\nParsed gluing: " + gluing + "\n", 1);
	
	int num_annuli = int(annulus_name.size());
	int num_rectangles = int(rectangle_name.size());
	
	if (handles != "")  // Attach handles (if needed).
	{
		size_t marker = 0;
		
		do
		{
			std::string handle_location = find_next_substring(handles, separator, marker);
			
			if (handle_location == "") continue;  // Skip it if there is no action.
			
			bool performed_action = false;  // Records if we actually performed an action.
			for (int i = 0; i < num_annuli; i++)
			{
				if ((annulus_name[i] == handle_location) || (annulus_name_inverse[i] == handle_location))
				{
					annuli[i].twohandle((annulus_name[i] == handle_location));
					performed_action = true;
					break;  // Annuli / rectangle names are unique, so we can give up if we get a hit.
				}
			}
			if (performed_action) continue;
			
			output_warning("No annulus named '" + handle_location + "' found to attach a handle to.");
		} while (marker != 0);
	}
	
	M.insert_layer();  // Insert layer #1 to prevent rooftop access.
	
	// Reset the layer flags on cubes and marked points.
	for (int i = 0; i < int(M.marked_points.size()); i++)
		M.marked_points[i] = half_twisted;
	
	for (int i = 0; i < int(M.cubes.size()); i++)
		M.cubes[i]->set_status(false);
	
	// We parse the gluing w = w_1 ... w_n from left to right, so our twists are 
	// stacked from top to bottom. So when a curve c at the bottom is pushed up 
	// the resulting curve at the top is w(c) = w_1( ... w_n(c) ... ), i.e. mapping
	// classes act on the left.
	if (gluing != "")  // Twist / drill (if needed).
	{
		size_t marker = 0;
		
		do
		{
			std::string action_name = find_next_substring(gluing, separator, marker);
			
			if (action_name == "") continue;  // Skip it if there is no action.
			
			bool drilling = (action_name.substr(0, 1) == drill);  // Are we drilling?
			if (drilling) action_name = action_name.substr(1);  // If so, drop the drill symbol.
			
			bool performed_action = false;  // Records if we actually performed an action.
			
			for (int i = 0; i < num_annuli; i++)
			{
				if ((annulus_name[i] == action_name) || (annulus_name_inverse[i] == action_name))
				{
					if (drilling)
						annuli[i].drill();
					else
						annuli[i].twist((annulus_name[i] == action_name) ? plus : minus);
					
					performed_action = true;
					break;  // Annuli / rectangle names are unique, so we can give up if we get a hit.
				}
			}
			if (performed_action) continue;
			
			for (int i = 0; i < num_rectangles; i++)
			{
				if ((rectangle_name[i] == action_name) || (rectangle_name_inverse[i] == action_name))
				{
					if (drilling)
						rectangles[i].drill();
					else
						rectangles[i].half_twist((rectangle_name[i] == action_name) ? plus : minus);
					
					performed_action = true;
					break;  // Annuli / rectangle names are unique, so we can give up if we get a hit.
				}
			}
			if (performed_action) continue;
			
			// If our action_name didn't match any curves then throw a warning.
			output_warning("No annulus or rectangle named '" + action_name + "' found to twist or half-twist.");
		} while (marker != 0);
	}
	
	M.tidy_boundary();
	
	return;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x2b8, %rsp            # imm = 0x2B8
movq %rcx, 0x60(%rsp)
movq %rdx, 0x70(%rsp)
movq %rdi, 0x80(%rsp)
xorps %xmm0, %xmm0
movaps %xmm0, 0x210(%rsp)
xorl %eax, %eax
movq %rax, 0x220(%rsp)
movq %rax, 0x240(%rsp)
movaps %xmm0, 0x230(%rsp)
movq %rax, 0xa0(%rsp)
movaps %xmm0, 0x90(%rsp)
movq %rax, 0x100(%rsp)
movaps %xmm0, 0xf0(%rsp)
movq %rax, 0xe0(%rsp)
movaps %xmm0, 0xd0(%rsp)
movq %rax, 0x1a0(%rsp)
movaps %xmm0, 0x190(%rsp)
movq %rax, 0x200(%rsp)
movaps %xmm0, 0x1f0(%rsp)
movq %rax, 0x290(%rsp)
movaps %xmm0, 0x280(%rsp)
leaq 0x2a8(%rsp), %r15
movq %r15, -0x10(%r15)
movq (%rsi), %rax
movq 0x8(%rsi), %rdx
addq %rax, %rdx
leaq 0x298(%rsp), %rbx
movq %rbx, %rdi
movq %rax, %rsi
callq 0x878e
leaq 0x280(%rsp), %r14
leaq 0x1f0(%rsp), %rax
leaq 0x190(%rsp), %r10
leaq 0x210(%rsp), %rsi
leaq 0x230(%rsp), %rdx
leaq 0x90(%rsp), %rcx
leaq 0xf0(%rsp), %r8
leaq 0xd0(%rsp), %r9
movq 0x80(%rsp), %rdi
pushq %rbx
pushq %r14
pushq %rax
pushq %r10
callq 0x454c
addq $0x20, %rsp
movq 0x298(%rsp), %rdi
cmpq %r15, %rdi
je 0x73ab
movq 0x2a8(%rsp), %rsi
incq %rsi
callq 0x3220
subq $0x8, %rsp
leaq 0x98(%rsp), %rsi
leaq 0xf8(%rsp), %rdx
leaq 0xd8(%rsp), %rcx
leaq 0x198(%rsp), %r8
leaq 0x1f8(%rsp), %r9
movq 0x68(%rsp), %rdi
pushq %r14
callq 0xd08b
addq $0x10, %rsp
subq $0x8, %rsp
leaq 0x98(%rsp), %rsi
leaq 0xf8(%rsp), %rdx
leaq 0xd8(%rsp), %rcx
leaq 0x198(%rsp), %r8
leaq 0x1f8(%rsp), %r9
movq 0x78(%rsp), %rdi
pushq %r14
callq 0xd08b
addq $0x10, %rsp
leaq 0xfd50(%rip), %rsi      # 0x1717a
leaq 0x150(%rsp), %rdi
movq 0x60(%rsp), %rdx
callq 0x44c2
leaq 0xfd49(%rip), %rsi      # 0x1718c
leaq 0x150(%rsp), %rdi
callq 0x3420
leaq 0x50(%rsp), %rbp
movq %rbp, -0x10(%rbp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x7477
movq %rdx, 0x40(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x50(%rsp)
jmp 0x747e
movups (%rcx), %xmm0
movups %xmm0, (%rbp)
movq 0x8(%rax), %rdx
leaq 0x40(%rsp), %rdi
movq %rdx, 0x8(%rdi)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq 0x70(%rsp), %rax
movq (%rax), %rsi
movq 0x8(%rax), %rdx
callq 0x30d0
leaq 0x28(%rsp), %r13
movq %r13, -0x10(%r13)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x74d2
movq %rdx, 0x18(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x28(%rsp)
jmp 0x74da
movups (%rcx), %xmm0
movups %xmm0, (%r13)
movq 0x8(%rax), %rdx
leaq 0x18(%rsp), %rdi
movq %rdx, 0x8(%rdi)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0xfb57(%rip), %rsi      # 0x17054
callq 0x3420
leaq 0x270(%rsp), %r14
movq %r14, -0x10(%r14)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x7532
movq %rdx, 0x260(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x270(%rsp)
jmp 0x7539
movups (%rcx), %xmm0
movups %xmm0, (%r14)
movq 0x8(%rax), %rdx
leaq 0x260(%rsp), %rdi
movq %rdx, 0x8(%rdi)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movl $0x1, %esi
callq 0x4209
movq 0x260(%rsp), %rdi
cmpq %r14, %rdi
je 0x757f
movq 0x270(%rsp), %rsi
incq %rsi
callq 0x3220
movq 0x18(%rsp), %rdi
cmpq %r13, %rdi
je 0x7596
movq 0x28(%rsp), %rsi
incq %rsi
callq 0x3220
movq 0x40(%rsp), %rdi
cmpq %rbp, %rdi
je 0x75ad
movq 0x50(%rsp), %rsi
incq %rsi
callq 0x3220
leaq 0x160(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x75ce
movq 0x160(%rsp), %rsi
incq %rsi
callq 0x3220
movq 0x98(%rsp), %rax
subq 0x90(%rsp), %rax
shrq $0x5, %rax
movq %rax, 0x78(%rsp)
movq 0xd8(%rsp), %rax
subq 0xd0(%rsp), %rax
movq %rax, 0x88(%rsp)
leaq 0xfcf3(%rip), %rsi      # 0x172f9
movq 0x60(%rsp), %rdi
callq 0x30c0
testl %eax, %eax
je 0x7918
leaq 0x150(%rsp), %rax
movq $0x0, (%rax)
leaq 0x180(%rsp), %rbx
leaq 0x1e0(%rsp), %r15
movq 0x78(%rsp), %rax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
movq %rax, 0x68(%rsp)
movq %rbx, 0x170(%rsp)
movq 0x60(%rsp), %rax
movq (%rax), %rsi
movq 0x8(%rax), %rdx
addq %rsi, %rdx
leaq 0x170(%rsp), %rdi
callq 0x878e
movq %r15, 0x1d0(%rsp)
movq 0x16d7f(%rip), %rsi     # 0x1e3f8
movq 0x16d80(%rip), %rdx     # 0x1e400
addq %rsi, %rdx
leaq 0x1d0(%rsp), %r14
movq %r14, %rdi
callq 0x878e
leaq 0x18(%rsp), %rdi
leaq 0x170(%rsp), %rsi
movq %r14, %rdx
leaq 0x150(%rsp), %rcx
callq 0xa261
movq 0x1d0(%rsp), %rdi
cmpq %r15, %rdi
je 0x76cd
movq 0x1e0(%rsp), %rsi
incq %rsi
callq 0x3220
movq 0x170(%rsp), %rdi
cmpq %rbx, %rdi
je 0x76ea
movq 0x180(%rsp), %rsi
incq %rsi
callq 0x3220
leaq 0x18(%rsp), %rdi
leaq 0xfc03(%rip), %rsi      # 0x172f9
callq 0x30c0
testl %eax, %eax
je 0x78f2
cmpl $0x0, 0x78(%rsp)
jle 0x77a5
movq 0x90(%rsp), %rax
movq %rax, 0x10(%rsp)
movq 0x18(%rsp), %rax
movq %rax, 0x38(%rsp)
movq 0x20(%rsp), %rbp
movq 0xf0(%rsp), %rbx
movq 0x68(%rsp), %r13
xorl %r15d, %r15d
xorl %r12d, %r12d
movq 0x10(%rsp), %rax
movq 0x8(%rax,%r15), %r14
cmpq %rbp, %r14
jne 0x7773
testq %r14, %r14
je 0x7806
movq 0x10(%rsp), %rax
movq (%rax,%r15), %rdi
movq 0x38(%rsp), %rsi
movq %r14, %rdx
callq 0x3230
testl %eax, %eax
je 0x7806
movq 0x8(%rbx,%r15), %rdx
cmpq %rbp, %rdx
jne 0x7798
testq %rdx, %rdx
je 0x7806
movq (%rbx,%r15), %rdi
movq 0x38(%rsp), %rsi
callq 0x3230
testl %eax, %eax
je 0x7806
addq $-0x18, %r12
addq $0x20, %r15
decq %r13
jne 0x773d
leaq 0x40(%rsp), %rbx
movq %rbx, %rdi
leaq 0xf9e9(%rip), %rsi      # 0x1719d
leaq 0x18(%rsp), %rdx
callq 0x44c2
movq %rbx, %rdi
leaq 0xf9e8(%rip), %rsi      # 0x171b0
callq 0x3420
leaq 0x1c0(%rsp), %r14
movq %r14, 0x1b0(%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
leaq 0x50(%rsp), %rbp
je 0x784a
movq %rdx, 0x1b0(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x1c0(%rsp)
jmp 0x7851
movq 0x210(%rsp), %rbx
cmpq %rbp, %r14
jne 0x78c4
testq %r14, %r14
leaq 0x28(%rsp), %r13
leaq 0x50(%rsp), %rbp
je 0x78d2
movq 0x18(%rsp), %rsi
movq 0x10(%rsp), %rax
movq (%rax,%r15), %rdi
movq %r14, %rdx
callq 0x3230
testl %eax, %eax
sete %al
jmp 0x78d4
movups (%rcx), %xmm0
movups %xmm0, (%r14)
leaq 0x28(%rsp), %r13
leaq 0x180(%rsp), %rbx
leaq 0x1e0(%rsp), %r15
movq 0x8(%rax), %rdx
movq %rdx, 0x1b8(%rsp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0x1b0(%rsp), %rdi
callq 0x4285
movq 0x1b0(%rsp), %rdi
cmpq %r14, %rdi
je 0x78ab
movq 0x1c0(%rsp), %rsi
incq %rsi
callq 0x3220
movq 0x40(%rsp), %rdi
cmpq %rbp, %rdi
je 0x78f2
movq 0x50(%rsp), %rsi
incq %rsi
callq 0x3220
jmp 0x78f2
xorl %eax, %eax
leaq 0x28(%rsp), %r13
leaq 0x50(%rsp), %rbp
jmp 0x78d4
movb $0x1, %al
subq %r12, %rbx
movzbl %al, %esi
movq %rbx, %rdi
callq 0xf51a
leaq 0x180(%rsp), %rbx
leaq 0x1e0(%rsp), %r15
movq 0x18(%rsp), %rdi
cmpq %r13, %rdi
je 0x7909
movq 0x28(%rsp), %rsi
incq %rsi
callq 0x3220
cmpq $0x0, 0x150(%rsp)
jne 0x7646
movq 0x80(%rsp), %rbx
movq %rbx, %rdi
callq 0x105e6
movq 0x58(%rbx), %rax
movq 0x60(%rbx), %rcx
subq %rax, %rcx
shrq $0x2, %rcx
testl %ecx, %ecx
jle 0x7952
andl $0x7fffffff, %ecx       # imm = 0x7FFFFFFF
xorl %edx, %edx
movl $0x2, (%rax,%rdx,4)
incq %rdx
cmpq %rdx, %rcx
jne 0x7943
movq 0x40(%rbx), %rax
movq 0x48(%rbx), %rcx
subq %rax, %rcx
shrq $0x3, %rcx
testl %ecx, %ecx
jle 0x797d
andl $0x7fffffff, %ecx       # imm = 0x7FFFFFFF
xorl %edx, %edx
movq (%rax,%rdx,8), %rsi
movb $0x0, 0x32(%rsi)
incq %rdx
cmpq %rdx, %rcx
jne 0x796d
leaq 0xf975(%rip), %rsi      # 0x172f9
movq 0x70(%rsp), %rdi
callq 0x30c0
testl %eax, %eax
je 0x7f19
movq 0x88(%rsp), %rdx
shrq $0x5, %rdx
leaq 0x150(%rsp), %rax
movq $0x0, (%rax)
leaq 0xc0(%rsp), %r12
leaq 0x140(%rsp), %rbx
movq 0x78(%rsp), %rcx
testl %ecx, %ecx
setg 0xf(%rsp)
movslq %ecx, %rax
movq %rax, 0x250(%rsp)
movl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
andq %rax, %rcx
movq %rcx, 0x60(%rsp)
movq %rdx, 0x88(%rsp)
andq %rax, %rdx
movq %rdx, 0x258(%rsp)
movq %r12, 0xb0(%rsp)
movq 0x70(%rsp), %rax
movq (%rax), %rsi
movq 0x8(%rax), %rdx
addq %rsi, %rdx
leaq 0xb0(%rsp), %rdi
callq 0x878e
movq %rbx, 0x130(%rsp)
movq 0x169cd(%rip), %rsi     # 0x1e3f8
movq 0x169ce(%rip), %rdx     # 0x1e400
addq %rsi, %rdx
leaq 0x130(%rsp), %r14
movq %r14, %rdi
callq 0x878e
leaq 0x18(%rsp), %rdi
leaq 0xb0(%rsp), %rsi
movq %r14, %rdx
leaq 0x150(%rsp), %rcx
callq 0xa261
movq 0x130(%rsp), %rdi
cmpq %rbx, %rdi
je 0x7a7f
movq 0x140(%rsp), %rsi
incq %rsi
callq 0x3220
movq 0xb0(%rsp), %rdi
cmpq %r12, %rdi
je 0x7a9c
movq 0xc0(%rsp), %rsi
incq %rsi
callq 0x3220
leaq 0x18(%rsp), %rdi
leaq 0xf851(%rip), %rsi      # 0x172f9
callq 0x30c0
testl %eax, %eax
je 0x7ef3
movl $0x1, %ecx
leaq 0x40(%rsp), %r14
movq %r14, %rdi
leaq 0x18(%rsp), %rbx
movq %rbx, %rsi
xorl %edx, %edx
callq 0x3240
movq 0x48(%rsp), %rdx
cmpq 0x16943(%rip), %rdx     # 0x1e420
jne 0x7afd
testq %rdx, %rdx
je 0x7b02
movq 0x1692d(%rip), %rsi     # 0x1e418
movq 0x40(%rsp), %rdi
callq 0x3230
testl %eax, %eax
sete %r15b
jmp 0x7b05
xorl %r15d, %r15d
jmp 0x7b05
movb $0x1, %r15b
movq 0x40(%rsp), %rdi
cmpq %rbp, %rdi
je 0x7b1c
movq 0x50(%rsp), %rsi
incq %rsi
callq 0x3220
testb %r15b, %r15b
je 0x7b5a
movl $0x1, %edx
movq %r14, %rdi
movq %rbx, %rsi
movq $-0x1, %rcx
callq 0x3240
movq %rbx, %rdi
movq %r14, %rsi
callq 0x32a0
movq 0x40(%rsp), %rdi
cmpq %rbp, %rdi
je 0x7b5a
movq 0x50(%rsp), %rsi
incq %rsi
callq 0x3220
movl %r15d, 0x68(%rsp)
movb 0xf(%rsp), %al
cmpl $0x0, 0x78(%rsp)
jle 0x7c16
movq 0x90(%rsp), %rax
movq %rax, 0x10(%rsp)
movq 0x18(%rsp), %rax
movq %rax, 0x38(%rsp)
movq 0x20(%rsp), %r12
movq 0xf0(%rsp), %r15
xorl %r13d, %r13d
xorl %r14d, %r14d
xorl %ebp, %ebp
movq 0x10(%rsp), %rax
movq 0x8(%rax,%r13), %rbx
cmpq %r12, %rbx
jne 0x7bd0
testq %rbx, %rbx
je 0x7d4e
movq 0x10(%rsp), %rax
movq (%rax,%r13), %rdi
movq 0x38(%rsp), %rsi
movq %rbx, %rdx
callq 0x3230
testl %eax, %eax
je 0x7d4e
movq 0x8(%r15,%r13), %rdx
cmpq %r12, %rdx
jne 0x7bf9
testq %rdx, %rdx
je 0x7d4e
movq (%r15,%r13), %rdi
movq 0x38(%rsp), %rsi
callq 0x3230
testl %eax, %eax
je 0x7d4e
incq %rbp
addq $-0x18, %r14
addq $0x20, %r13
cmpq %rbp, 0x60(%rsp)
jne 0x7b9a
cmpq 0x250(%rsp), %rbp
setl %al
movb %al, 0xe(%rsp)
cmpl $0x0, 0x88(%rsp)
jle 0x7cc6
movq 0xd0(%rsp), %rax
movq %rax, 0x10(%rsp)
movq 0x18(%rsp), %rax
movq %rax, 0x38(%rsp)
movq 0x20(%rsp), %r12
movq 0x190(%rsp), %r14
movq 0x258(%rsp), %rbp
xorl %r13d, %r13d
xorl %r15d, %r15d
movq 0x10(%rsp), %rax
movq 0x8(%rax,%r13), %rbx
cmpq %r12, %rbx
jne 0x7c90
testq %rbx, %rbx
je 0x7d87
movq 0x10(%rsp), %rax
movq (%rax,%r13), %rdi
movq 0x38(%rsp), %rsi
movq %rbx, %rdx
callq 0x3230
testl %eax, %eax
je 0x7d87
movq 0x8(%r14,%r13), %rdx
cmpq %r12, %rdx
jne 0x7cb9
testq %rdx, %rdx
je 0x7d87
movq (%r14,%r13), %rdi
movq 0x38(%rsp), %rsi
callq 0x3230
testl %eax, %eax
je 0x7d87
addq $-0x28, %r15
addq $0x20, %r13
decq %rbp
jne 0x7c5a
cmpb $0x0, 0xe(%rsp)
leaq 0x28(%rsp), %r13
leaq 0x50(%rsp), %rbp
leaq 0xc0(%rsp), %r12
leaq 0x140(%rsp), %rbx
jne 0x7ef3
leaq 0x40(%rsp), %r14
movq %r14, %rdi
leaq 0xf4d5(%rip), %rsi      # 0x171cf
leaq 0x18(%rsp), %rdx
callq 0x44c2
movq %r14, %rdi
leaq 0xf4e1(%rip), %rsi      # 0x171ef
callq 0x3420
leaq 0x120(%rsp), %rsi
movq %rsi, 0x110(%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x7e51
movq %rdx, 0x110(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x120(%rsp)
jmp 0x7e57
movq 0x210(%rsp), %r15
subq %r14, %r15
cmpb $0x0, 0x68(%rsp)
je 0x7dc0
movq %r15, %rdi
leaq 0x28(%rsp), %r13
callq 0x1037a
leaq 0x50(%rsp), %rbp
leaq 0xc0(%rsp), %r12
leaq 0x140(%rsp), %rbx
jmp 0x7ef3
movq 0x230(%rsp), %r14
subq %r15, %r14
cmpb $0x0, 0x68(%rsp)
leaq 0x50(%rsp), %rbp
je 0x7e0b
movq %r14, %rdi
leaq 0x28(%rsp), %r13
callq 0x10ad0
leaq 0xc0(%rsp), %r12
leaq 0x140(%rsp), %rbx
jmp 0x7ef3
movl $0xffffffff, %esi       # imm = 0xFFFFFFFF
cmpq %r12, %rbx
leaq 0x50(%rsp), %rbp
leaq 0xc0(%rsp), %r12
jne 0x7ec2
testq %rbx, %rbx
je 0x7ebd
movq 0x18(%rsp), %rsi
movq 0x10(%rsp), %rax
movq (%rax,%r13), %rdi
movq %rbx, %rdx
callq 0x3230
negl %eax
movl $0x0, %esi
sbbl %esi, %esi
orl $0x1, %esi
jmp 0x7ec2
movl $0xffffffff, %esi       # imm = 0xFFFFFFFF
cmpq %r12, %rbx
leaq 0xc0(%rsp), %r12
jne 0x7ede
testq %rbx, %rbx
je 0x7ed9
movq 0x18(%rsp), %rsi
movq 0x10(%rsp), %rax
movq (%rax,%r13), %rdi
movq %rbx, %rdx
callq 0x3230
negl %eax
movl $0x0, %esi
sbbl %esi, %esi
orl $0x1, %esi
jmp 0x7ede
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0x8(%rax), %rdx
movq %rdx, 0x118(%rsp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0x110(%rsp), %rdi
callq 0x4285
movq 0x110(%rsp), %rdi
leaq 0x120(%rsp), %rax
cmpq %rax, %rdi
je 0x7ea4
movq 0x120(%rsp), %rsi
incq %rsi
callq 0x3220
movq 0x40(%rsp), %rdi
cmpq %rbp, %rdi
je 0x7ef3
movq 0x50(%rsp), %rsi
incq %rsi
callq 0x3220
jmp 0x7ef3
movl $0x1, %esi
movq %r15, %rdi
leaq 0x28(%rsp), %r13
callq 0xfa6e
leaq 0x140(%rsp), %rbx
jmp 0x7ef3
movl $0x1, %esi
movq %r14, %rdi
leaq 0x28(%rsp), %r13
callq 0x110e4
leaq 0x140(%rsp), %rbx
movq 0x18(%rsp), %rdi
cmpq %r13, %rdi
je 0x7f0a
movq 0x28(%rsp), %rsi
incq %rsi
callq 0x3220
cmpq $0x0, 0x150(%rsp)
jne 0x79f8
movq 0x80(%rsp), %rdi
callq 0x131ba
leaq 0x280(%rsp), %rdi
callq 0x8550
leaq 0x1f0(%rsp), %rdi
callq 0x8550
leaq 0x190(%rsp), %rdi
callq 0x8550
leaq 0xd0(%rsp), %rdi
callq 0x8550
leaq 0xf0(%rsp), %rdi
callq 0x8550
leaq 0x90(%rsp), %rdi
callq 0x8550
leaq 0x230(%rsp), %rdi
callq 0x85ac
leaq 0x210(%rsp), %rdi
callq 0x85ee
addq $0x2b8, %rsp            # imm = 0x2B8
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq %rax, %rbx
movq 0x260(%rsp), %rdi
cmpq %r14, %rdi
je 0x7fc5
movq 0x270(%rsp), %rsi
incq %rsi
callq 0x3220
jmp 0x7fc5
movq %rax, %rbx
movq 0x18(%rsp), %rdi
leaq 0x28(%rsp), %rax
cmpq %rax, %rdi
je 0x7fe6
movq 0x28(%rsp), %rsi
incq %rsi
callq 0x3220
jmp 0x7fe6
movq %rax, %rbx
movq 0x40(%rsp), %rdi
leaq 0x50(%rsp), %rax
cmpq %rax, %rdi
je 0x8007
movq 0x50(%rsp), %rsi
incq %rsi
callq 0x3220
jmp 0x8007
movq %rax, %rbx
leaq 0x160(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x8182
movq 0x160(%rsp), %rsi
jmp 0x817a
jmp 0x8135
movq %rax, %rbx
movq 0x298(%rsp), %rdi
cmpq %r15, %rdi
je 0x8182
movq 0x2a8(%rsp), %rsi
jmp 0x817a
jmp 0x8135
movq %rax, %rbx
movq 0x110(%rsp), %rdi
leaq 0x120(%rsp), %rax
cmpq %rax, %rdi
je 0x80ae
movq 0x120(%rsp), %rsi
jmp 0x80a6
jmp 0x8087
jmp 0x80cc
jmp 0x8135
jmp 0x80cc
jmp 0x80cc
jmp 0x80cc
jmp 0x80cc
movq %rax, %rbx
jmp 0x80ae
jmp 0x80cc
movq %rax, %rbx
movq 0x1b0(%rsp), %rdi
cmpq %r14, %rdi
je 0x80ae
movq 0x1c0(%rsp), %rsi
incq %rsi
callq 0x3220
movq 0x40(%rsp), %rdi
leaq 0x50(%rsp), %rax
cmpq %rax, %rdi
je 0x80cf
movq 0x50(%rsp), %rsi
incq %rsi
callq 0x3220
jmp 0x80cf
movq %rax, %rbx
movq 0x18(%rsp), %rdi
leaq 0x28(%rsp), %rax
cmpq %rax, %rdi
je 0x8182
movq 0x28(%rsp), %rsi
jmp 0x817a
jmp 0x8135
movq %rax, %rbx
jmp 0x8116
movq %rbx, %rcx
movq %rax, %rbx
movq 0x130(%rsp), %rdi
cmpq %rcx, %rdi
je 0x8116
movq 0x140(%rsp), %rsi
incq %rsi
callq 0x3220
movq 0xb0(%rsp), %rdi
leaq 0xc0(%rsp), %rax
cmpq %rax, %rdi
je 0x8182
movq 0xc0(%rsp), %rsi
jmp 0x817a
movq %rax, %rbx
jmp 0x8182
movq %rbx, %r14
movq %rax, %rbx
jmp 0x8165
movq %rbx, %r14
movq %rax, %rbx
movq 0x1d0(%rsp), %rdi
cmpq %r15, %rdi
je 0x8165
movq 0x1e0(%rsp), %rsi
incq %rsi
callq 0x3220
movq 0x170(%rsp), %rdi
cmpq %r14, %rdi
je 0x8182
movq 0x180(%rsp), %rsi
incq %rsi
callq 0x3220
leaq 0x280(%rsp), %rdi
callq 0x8550
leaq 0x1f0(%rsp), %rdi
callq 0x8550
leaq 0x190(%rsp), %rdi
callq 0x8550
leaq 0xd0(%rsp), %rdi
callq 0x8550
leaq 0xf0(%rsp), %rdi
callq 0x8550
leaq 0x90(%rsp), %rdi
callq 0x8550
leaq 0x230(%rsp), %rdi
callq 0x85ac
leaq 0x210(%rsp), %rdi
callq 0x85ee
movq %rbx, %rdi
callq 0x33e0