// File: /workspace/github_cpp_makefile_star2_O1/CMU-SAFARI[P]Register-Interval/main.cpp
// Function: create_control_flow_graph(char*)
vector<basicBlock*> create_control_flow_graph(char* file_name){
    /* The control flow analysis of nvdisasm tool generates a CFG that its nodes are abstract basic blocks. So
     we first extract the abstract basic blocks from graphviz dot code (the output of nvdisasm tool) and then  we will create basic blocks and CFG.*/
    
    vector<basicBlock*> abstract_basic_blocks;
    
    //**********************getting input file and finding abstract basic blocks*******************************
        fstream file (file_name, fstream::in);
        
	char ch;
	string cfgString;
	string str = "";
	bool start = false;
	bool ready = false;
	bool OK = false;
	while (file >> noskipws >> ch)
	{
		cfgString = cfgString + ch;
	}

	for (int i = 0; i < cfgString.size(); i++){
		if (start){
			str = str + cfgString[i];
		}

		if (cfgString[i] == '"'){
			if (!start){
				start = true;
			}
			else{
				ready = true;
				start = false;
			}
		}

		if (ready){
			if (cfgString[i + 1] == '\n' || cfgString[i + 1] == 13){
				OK = true;
				ready = false;
			}
			else{
				ready = false;
				str = "";
			}
		}

		if (OK){
			str.erase(str.size() - 1, 1);
			auto temp = new basicBlock(str);
			abstract_basic_blocks.push_back(temp);
			OK = false;
			str = "";
		}
	}
	//******************************************************************************************

	//***************************setting code of abstract basic blocks*************************************
	int found1 = 0;
	int found2 = 0;
	string code;
	for (int i = 0; i < abstract_basic_blocks.size(); i++){
		code = "";
		found1 = cfgString.find("<entry>", found1 + 1, 7);
		found2 = cfgString.find("}\"]", found2 + 1, 3);
		for (int j = found1; j < found2 - 2; j++){
			code = code + cfgString[j];
		}
		abstract_basic_blocks[i]->set_code(code);
	}
	//******************************************************************************************

	//********************************Setting successors of abstract basic blocks******************************
	size_t found = 0;
	string tmp;
	int count = 0;
	for (int i = 0; i < abstract_basic_blocks.size(); i++){
		str = "\"";
		str = str + abstract_basic_blocks[i]->get_name();
		str = str + "\"";
		str = str + ":exit";
		found = 0;
		found = cfgString.find(str, found + 1);
		while (found != string::npos){
			count = 0;
			tmp = "";
			for (int j = found + 1; count < 3; j++){
				if (count == 2){
					tmp = tmp + cfgString[j];
				}

				if (cfgString[j] == '"')
					count++;
			}
			tmp.erase(tmp.end() - 1);
			for (int j = 0; j < abstract_basic_blocks.size(); j++){
				if (abstract_basic_blocks[j]->get_name() == tmp){
					abstract_basic_blocks[i]->add_successor(abstract_basic_blocks[j]);
					break;
				}
			}

			found = cfgString.find(str, found + 1);
		}
	}
	
	count = 0;
	for (int i = 0; i < abstract_basic_blocks.size(); i++){
		str = "\"";
		str = str + abstract_basic_blocks[i]->get_name();
		str = str + "\"";
		str = str + ":entry:s";
		found = 0;
		found = cfgString.find(str, found + 1);
		while (found != string::npos){
			count = 0;
			tmp = "";
			for (int j = found + 1; count < 3; j++){
				if (count == 2){
					tmp = tmp + cfgString[j];
				}

				if (cfgString[j] == '"')
					count++;
			}
			tmp.erase(tmp.end() - 1);
			for (int j = 0; j < abstract_basic_blocks.size(); j++){
				if (abstract_basic_blocks[j]->get_name() == tmp){
					abstract_basic_blocks[i]->add_successor(abstract_basic_blocks[j]);
					break;
				}
			}

			found = cfgString.find(str, found + 1);
		}
	}
	//************************************************************************************************

	//********************************Setting predecessors of abstract basic blocks**********************************
	vector<basicBlock*> x;
	for (int i = 0; i < abstract_basic_blocks.size(); i++){
		for (int j = 0; j < abstract_basic_blocks.size(); j++){
			x = abstract_basic_blocks[j]->get_successors();
			for (int k = 0; k < x.size(); k++){
				if (x[k]->get_name() == abstract_basic_blocks[i]->get_name()){
					abstract_basic_blocks[i]->add_predecessor(abstract_basic_blocks[j]);
				}
			}
		}
	}
	//************************************************************************************************
	
	//**************************Splitting abstract basic blocks to regular basic blocks***********************************
	auto basic_blocks = split_abstract_basic_blocks(abstract_basic_blocks);
	
	//***********************Extracting Registers of each basicBlock***************************************
	found = 0;
	for (int i = 0; i < basic_blocks.size(); i++){
		found = 0;
		code = basic_blocks[i]->get_code();
		found = code.find("R", found + 1, 1);
		while (found != string::npos){
			str = "R";
			if (code[found + 1] > 47 && code[found + 1] < 58){
				for (int j = found + 1; code[j] >47 && code[j] < 58; j++){
					str = str + code[j];
				}
				basic_blocks[i]->add_register(str);
			}

			found = code.find("R", found + 1, 1);
		}
	}
	//************************************************************************************************
        
        return basic_blocks;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x398, %rsp            # imm = 0x398
movq %rdi, -0xe8(%rbp)
xorps %xmm0, %xmm0
movaps %xmm0, -0x80(%rbp)
movq $0x0, -0x70(%rbp)
leaq -0x3b8(%rbp), %rdi
movl $0x8, %edx
callq 0x2290
leaq -0x118(%rbp), %rax
movq %rax, -0x10(%rax)
movq $0x0, -0x8(%rax)
movb $0x0, (%rax)
leaq -0x90(%rbp), %rax
movq %rax, -0x10(%rax)
leaq 0x55f7(%rip), %rdx      # 0xb0b6
leaq -0xa0(%rbp), %rdi
movq %rdx, %rsi
callq 0xa9c0
leaq -0x3b8(%rbp), %rbx
leaq -0x61(%rbp), %r14
leaq -0xe0(%rbp), %r15
leaq -0x128(%rbp), %r12
movq -0x3b8(%rbp), %rax
movq -0x18(%rax), %rax
andl $0xffffefff, -0x3a0(%rbp,%rax) # imm = 0xFFFFEFFF
movq %rbx, %rdi
movq %r14, %rsi
callq 0x2280
movq (%rax), %rcx
movq -0x18(%rcx), %rcx
testb $0x5, 0x20(%rax,%rcx)
jne 0x5b87
movb -0x61(%rbp), %r13b
leaq -0xd0(%rbp), %rax
movq %rax, -0xe0(%rbp)
movq -0x128(%rbp), %rsi
movq -0x120(%rbp), %rdx
addq %rsi, %rdx
movq %r15, %rdi
callq 0x96ba
movq -0xd8(%rbp), %rsi
movsbl %r13b, %r8d
movl $0x1, %ecx
movq %r15, %rdi
xorl %edx, %edx
callq 0x2390
movq %r12, %rdi
movq %r15, %rsi
callq 0x2270
movq -0xe0(%rbp), %rdi
leaq -0xd0(%rbp), %rax
cmpq %rax, %rdi
je 0x5ae7
callq 0x21c0
jmp 0x5ae7
cmpq $0x0, -0x120(%rbp)
je 0x5d78
xorl %r12d, %r12d
xorl %ebx, %ebx
xorl %r15d, %r15d
xorl %r13d, %r13d
movl %r15d, %eax
testb $0x1, %r13b
je 0x5c37
movq %r13, -0x38(%rbp)
movq %rbx, %r13
movq -0x128(%rbp), %rax
movb (%rax,%r12), %r14b
leaq -0xd0(%rbp), %rax
movq %rax, -0xe0(%rbp)
movq -0xa0(%rbp), %rsi
movq -0x98(%rbp), %rdx
addq %rsi, %rdx
leaq -0xe0(%rbp), %rbx
movq %rbx, %rdi
callq 0x96ba
movq -0xd8(%rbp), %rsi
movsbl %r14b, %r8d
movl $0x1, %ecx
movq %rbx, %rdi
xorl %edx, %edx
callq 0x2390
leaq -0xa0(%rbp), %rdi
movq %rbx, %rsi
callq 0x2270
movq -0xe0(%rbp), %rdi
leaq -0xd0(%rbp), %rax
cmpq %rax, %rdi
movq %r13, %rbx
je 0x5c31
callq 0x21c0
movb $0x1, %al
movq -0x38(%rbp), %r13
movq -0x128(%rbp), %rcx
cmpb $0x22, (%rcx,%r12)
sete -0x38(%rbp)
movzbl %al, %eax
movzbl %r15b, %r15d
cmovel %eax, %r15d
testb $0x1, %r15b
je 0x5c93
movzbl 0x1(%rcx,%r12), %ecx
xorl %r15d, %r15d
movb $0x1, %al
cmpl $0xa, %ecx
je 0x5c95
cmpl $0xd, %ecx
je 0x5c95
xorl %r15d, %r15d
movq -0x98(%rbp), %rdx
leaq -0xa0(%rbp), %rdi
xorl %esi, %esi
leaq 0x542f(%rip), %rcx      # 0xb0b6
xorl %r8d, %r8d
callq 0x2300
movl %ebx, %eax
jmp 0x5c95
movl %ebx, %eax
testb $0x1, %al
je 0x5d62
movq -0x98(%rbp), %rsi
decq %rsi
movl $0x1, %edx
leaq -0xa0(%rbp), %rdi
callq 0x2090
movl $0xf8, %edi
callq 0x21e0
movq %rax, %rbx
leaq -0x160(%rbp), %rax
movq %rax, -0x170(%rbp)
movq -0xa0(%rbp), %rsi
movq -0x98(%rbp), %rdx
addq %rsi, %rdx
leaq -0x170(%rbp), %r14
movq %r14, %rdi
callq 0x96ba
movq %rbx, %rdi
movq %r14, %rsi
callq 0x2c4a
movq -0x170(%rbp), %rdi
leaq -0x160(%rbp), %rax
cmpq %rax, %rdi
je 0x5d16
callq 0x21c0
movq %rbx, -0xe0(%rbp)
movq -0x78(%rbp), %rsi
cmpq -0x70(%rbp), %rsi
je 0x5d31
movq %rbx, (%rsi)
addq $0x8, -0x78(%rbp)
jmp 0x5d41
leaq -0x80(%rbp), %rdi
leaq -0xe0(%rbp), %rdx
callq 0x9e62
movq -0x98(%rbp), %rdx
leaq -0xa0(%rbp), %rdi
xorl %esi, %esi
leaq 0x535e(%rip), %rcx      # 0xb0b6
xorl %r8d, %r8d
callq 0x2300
xorl %eax, %eax
xorb -0x38(%rbp), %r13b
incq %r12
movl %eax, %ebx
cmpq %r12, -0x120(%rbp)
ja 0x5ba0
leaq -0xd0(%rbp), %rax
movq %rax, -0xe0(%rbp)
movq $0x0, -0xd8(%rbp)
movb $0x0, -0xd0(%rbp)
movq -0x78(%rbp), %rax
cmpq -0x80(%rbp), %rax
je 0x5f4f
leaq -0xb0(%rbp), %r14
xorl %r13d, %r13d
leaq -0xc0(%rbp), %rbx
movq $0x0, -0x38(%rbp)
movq $0x0, -0x30(%rbp)
movq -0xd8(%rbp), %rdx
leaq -0xe0(%rbp), %rdi
xorl %esi, %esi
leaq 0x52d8(%rip), %rcx      # 0xb0b6
xorl %r8d, %r8d
callq 0x2300
movq %r13, -0x130(%rbp)
movq -0x30(%rbp), %rdx
shlq $0x20, %rdx
movabsq $0x100000000, %r15      # imm = 0x100000000
addq %r15, %rdx
sarq $0x20, %rdx
movl $0x7, %ecx
leaq -0x128(%rbp), %r12
movq %r12, %rdi
leaq 0x5206(%rip), %rsi      # 0xb022
callq 0x2360
movq %rax, %r13
movq -0x38(%rbp), %rdx
shlq $0x20, %rdx
addq %r15, %rdx
sarq $0x20, %rdx
movl $0x3, %ecx
movq %r12, %rdi
leaq 0x51e8(%rip), %rsi      # 0xb02a
callq 0x2360
movq %rax, -0x38(%rbp)
addl $-0x2, %eax
movq %r13, -0x30(%rbp)
cmpl %r13d, %eax
jle 0x5edd
movq -0x30(%rbp), %rcx
movslq %ecx, %r15
movq -0x38(%rbp), %rax
movl %eax, %r13d
subl %ecx, %r13d
addl $-0x2, %r13d
movq -0x128(%rbp), %rax
movb (%rax,%r15), %r12b
movq %r14, -0xc0(%rbp)
movq -0xe0(%rbp), %rsi
movq -0xd8(%rbp), %rdx
addq %rsi, %rdx
movq %rbx, %rdi
callq 0x96ba
movq -0xb8(%rbp), %rsi
movsbl %r12b, %r8d
movl $0x1, %ecx
movq %rbx, %rdi
xorl %edx, %edx
callq 0x2390
leaq -0xe0(%rbp), %rdi
movq %rbx, %rsi
callq 0x2270
movq -0xc0(%rbp), %rdi
cmpq %r14, %rdi
je 0x5ed5
callq 0x21c0
incq %r15
decl %r13d
jne 0x5e70
movq -0x80(%rbp), %rax
movq -0x130(%rbp), %r13
movq (%rax,%r13,8), %r15
leaq -0x180(%rbp), %r12
movq %r12, -0x190(%rbp)
movq -0xe0(%rbp), %rsi
movq -0xd8(%rbp), %rdx
addq %rsi, %rdx
leaq -0x190(%rbp), %rdi
callq 0x96ba
movq %r15, %rdi
leaq -0x190(%rbp), %rsi
callq 0x2e46
movq -0x190(%rbp), %rdi
cmpq %r12, %rdi
je 0x5f37
callq 0x21c0
incq %r13
movq -0x78(%rbp), %rax
subq -0x80(%rbp), %rax
sarq $0x3, %rax
cmpq %r13, %rax
ja 0x5dc7
leaq -0xb0(%rbp), %rax
movq %rax, -0x10(%rax)
movq $0x0, -0x8(%rax)
movb $0x0, (%rax)
movq -0x78(%rbp), %rax
cmpq -0x80(%rbp), %rax
je 0x62dc
leaq -0x50(%rbp), %r12
movq $0x0, -0x30(%rbp)
leaq -0x108(%rbp), %rbx
leaq -0x60(%rbp), %r13
movq -0x98(%rbp), %rdx
movl $0x1, %r8d
leaq -0xa0(%rbp), %rdi
xorl %esi, %esi
leaq 0x5087(%rip), %rcx      # 0xb02e
callq 0x2300
movq -0x80(%rbp), %rax
movq -0x30(%rbp), %rcx
movq (%rax,%rcx,8), %rax
leaq -0xf8(%rbp), %rcx
movq %rcx, -0x108(%rbp)
movq 0x8(%rax), %rsi
movq 0x10(%rax), %rdx
addq %rsi, %rdx
movq %rbx, %rdi
callq 0x96ba
movq -0xa0(%rbp), %rcx
movq -0x98(%rbp), %r8
movq %rbx, %rdi
xorl %esi, %esi
xorl %edx, %edx
callq 0x2220
movq %r12, -0x60(%rbp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x6013
movq %rdx, -0x60(%rbp)
movq (%rcx), %rdx
movq %rdx, -0x50(%rbp)
jmp 0x601b
movups (%rcx), %xmm0
movups %xmm0, (%r12)
movq 0x8(%rax), %rdx
movq %rdx, -0x58(%rbp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq -0xa0(%rbp), %rdi
movq %r13, %rsi
callq 0x2270
movq -0x60(%rbp), %rdi
cmpq %r12, %rdi
je 0x604f
callq 0x21c0
movq -0x108(%rbp), %rdi
leaq -0xf8(%rbp), %rax
cmpq %rax, %rdi
je 0x6067
callq 0x21c0
movq %r12, -0x60(%rbp)
movq -0xa0(%rbp), %rsi
movq -0x98(%rbp), %rdx
addq %rsi, %rdx
movq %r13, %rdi
callq 0x96ba
movq %r13, %rdi
leaq 0x4fa0(%rip), %rsi      # 0xb02e
callq 0x23a0
leaq -0xa0(%rbp), %rdi
movq %r13, %rsi
callq 0x2270
movq -0x60(%rbp), %rdi
cmpq %r12, %rdi
je 0x60b0
callq 0x21c0
movq %r12, -0x60(%rbp)
movq -0xa0(%rbp), %rsi
movq -0x98(%rbp), %rdx
addq %rsi, %rdx
movq %r13, %rdi
callq 0x96ba
movq %r13, %rdi
leaq 0x4f59(%rip), %rsi      # 0xb030
callq 0x23a0
leaq -0xa0(%rbp), %rdi
movq %r13, %rsi
callq 0x2270
movq -0x60(%rbp), %rdi
cmpq %r12, %rdi
je 0x60f9
callq 0x21c0
movq -0xa0(%rbp), %rsi
movq -0x98(%rbp), %rcx
movl $0x1, %edx
leaq -0x128(%rbp), %rdi
callq 0x2360
cmpq $-0x1, %rax
je 0x62bc
movq %rax, %r14
movq -0xb8(%rbp), %rdx
leaq -0xc0(%rbp), %rdi
xorl %esi, %esi
leaq 0x4f7a(%rip), %rcx      # 0xb0b6
xorl %r8d, %r8d
callq 0x2300
incq %r14
movq %r14, -0x38(%rbp)
movslq %r14d, %r14
xorl %r15d, %r15d
cmpl $0x2, %r15d
jne 0x61b3
movq -0x128(%rbp), %rax
movb (%rax,%r14), %bl
movq %r12, -0x60(%rbp)
movq -0xc0(%rbp), %rsi
movq -0xb8(%rbp), %rdx
addq %rsi, %rdx
movq %r13, %rdi
callq 0x96ba
movq -0x58(%rbp), %rsi
movsbl %bl, %r8d
movl $0x1, %ecx
movq %r13, %rdi
xorl %edx, %edx
callq 0x2390
leaq -0xc0(%rbp), %rdi
movq %r13, %rsi
callq 0x2270
movq -0x60(%rbp), %rdi
cmpq %r12, %rdi
je 0x61b3
callq 0x21c0
movq -0x128(%rbp), %rax
xorl %ecx, %ecx
cmpb $0x22, (%rax,%r14)
sete %cl
addl %ecx, %r15d
incq %r14
cmpl $0x3, %r15d
jb 0x6151
movq -0xb8(%rbp), %rsi
decq %rsi
movl $0x1, %edx
leaq -0xc0(%rbp), %rdi
callq 0x2260
movq -0x80(%rbp), %rax
cmpq %rax, -0x78(%rbp)
je 0x628a
xorl %r14d, %r14d
movq (%rax,%r14,8), %rax
movq %r12, -0x60(%rbp)
movq 0x8(%rax), %rsi
movq 0x10(%rax), %rdx
addq %rsi, %rdx
movq %r13, %rdi
callq 0x96ba
movq -0x58(%rbp), %rdx
cmpq -0xb8(%rbp), %rdx
jne 0x6241
testq %rdx, %rdx
je 0x6246
movq -0xc0(%rbp), %rsi
movq -0x60(%rbp), %rdi
callq 0x21f0
testl %eax, %eax
sete %r15b
jmp 0x6249
xorl %r15d, %r15d
jmp 0x6249
movb $0x1, %r15b
movq -0x60(%rbp), %rdi
cmpq %r12, %rdi
je 0x6257
callq 0x21c0
testb %r15b, %r15b
jne 0x6275
incq %r14
movq -0x80(%rbp), %rax
movq -0x78(%rbp), %rcx
subq %rax, %rcx
sarq $0x3, %rcx
cmpq %r14, %rcx
ja 0x61fc
jmp 0x628a
movq -0x80(%rbp), %rax
movq -0x30(%rbp), %rcx
movq (%rax,%rcx,8), %rdi
movq (%rax,%r14,8), %rsi
callq 0x2f4a
movq -0xa0(%rbp), %rsi
movq -0x98(%rbp), %rcx
leaq -0x128(%rbp), %rdi
movq -0x38(%rbp), %rdx
callq 0x2360
movq %rax, %r14
cmpq $-0x1, %rax
leaq -0x108(%rbp), %rbx
jne 0x6125
movq -0x30(%rbp), %rdx
incq %rdx
movq -0x78(%rbp), %rax
subq -0x80(%rbp), %rax
sarq $0x3, %rax
movq %rdx, -0x30(%rbp)
cmpq %rdx, %rax
ja 0x5f8a
movq -0x78(%rbp), %rax
cmpq -0x80(%rbp), %rax
je 0x6653
leaq -0x50(%rbp), %r12
movq $0x0, -0x30(%rbp)
leaq -0x108(%rbp), %rbx
leaq -0x60(%rbp), %r13
movq -0x98(%rbp), %rdx
movl $0x1, %r8d
leaq -0xa0(%rbp), %rdi
xorl %esi, %esi
leaq 0x4d10(%rip), %rcx      # 0xb02e
callq 0x2300
movq -0x80(%rbp), %rax
movq -0x30(%rbp), %rcx
movq (%rax,%rcx,8), %rax
leaq -0xf8(%rbp), %rcx
movq %rcx, -0x108(%rbp)
movq 0x8(%rax), %rsi
movq 0x10(%rax), %rdx
addq %rsi, %rdx
movq %rbx, %rdi
callq 0x96ba
movq -0xa0(%rbp), %rcx
movq -0x98(%rbp), %r8
movq %rbx, %rdi
xorl %esi, %esi
xorl %edx, %edx
callq 0x2220
movq %r12, -0x60(%rbp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x638a
movq %rdx, -0x60(%rbp)
movq (%rcx), %rdx
movq %rdx, -0x50(%rbp)
jmp 0x6392
movups (%rcx), %xmm0
movups %xmm0, (%r12)
movq 0x8(%rax), %rdx
movq %rdx, -0x58(%rbp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq -0xa0(%rbp), %rdi
movq %r13, %rsi
callq 0x2270
movq -0x60(%rbp), %rdi
cmpq %r12, %rdi
je 0x63c6
callq 0x21c0
movq -0x108(%rbp), %rdi
leaq -0xf8(%rbp), %rax
cmpq %rax, %rdi
je 0x63de
callq 0x21c0
movq %r12, -0x60(%rbp)
movq -0xa0(%rbp), %rsi
movq -0x98(%rbp), %rdx
addq %rsi, %rdx
movq %r13, %rdi
callq 0x96ba
movq %r13, %rdi
leaq 0x4c29(%rip), %rsi      # 0xb02e
callq 0x23a0
leaq -0xa0(%rbp), %rdi
movq %r13, %rsi
callq 0x2270
movq -0x60(%rbp), %rdi
cmpq %r12, %rdi
je 0x6427
callq 0x21c0
movq %r12, -0x60(%rbp)
movq -0xa0(%rbp), %rsi
movq -0x98(%rbp), %rdx
addq %rsi, %rdx
movq %r13, %rdi
callq 0x96ba
movq %r13, %rdi
leaq 0x4be8(%rip), %rsi      # 0xb036
callq 0x23a0
leaq -0xa0(%rbp), %rdi
movq %r13, %rsi
callq 0x2270
movq -0x60(%rbp), %rdi
cmpq %r12, %rdi
je 0x6470
callq 0x21c0
movq -0xa0(%rbp), %rsi
movq -0x98(%rbp), %rcx
movl $0x1, %edx
leaq -0x128(%rbp), %rdi
callq 0x2360
cmpq $-0x1, %rax
je 0x6633
movq %rax, %r14
movq -0xb8(%rbp), %rdx
leaq -0xc0(%rbp), %rdi
xorl %esi, %esi
leaq 0x4c03(%rip), %rcx      # 0xb0b6
xorl %r8d, %r8d
callq 0x2300
incq %r14
movq %r14, -0x38(%rbp)
movslq %r14d, %r14
xorl %r15d, %r15d
cmpl $0x2, %r15d
jne 0x652a
movq -0x128(%rbp), %rax
movb (%rax,%r14), %bl
movq %r12, -0x60(%rbp)
movq -0xc0(%rbp), %rsi
movq -0xb8(%rbp), %rdx
addq %rsi, %rdx
movq %r13, %rdi
callq 0x96ba
movq -0x58(%rbp), %rsi
movsbl %bl, %r8d
movl $0x1, %ecx
movq %r13, %rdi
xorl %edx, %edx
callq 0x2390
leaq -0xc0(%rbp), %rdi
movq %r13, %rsi
callq 0x2270
movq -0x60(%rbp), %rdi
cmpq %r12, %rdi
je 0x652a
callq 0x21c0
movq -0x128(%rbp), %rax
xorl %ecx, %ecx
cmpb $0x22, (%rax,%r14)
sete %cl
addl %ecx, %r15d
incq %r14
cmpl $0x3, %r15d
jb 0x64c8
movq -0xb8(%rbp), %rsi
decq %rsi
movl $0x1, %edx
leaq -0xc0(%rbp), %rdi
callq 0x2260
movq -0x80(%rbp), %rax
cmpq %rax, -0x78(%rbp)
je 0x6601
xorl %r14d, %r14d
movq (%rax,%r14,8), %rax
movq %r12, -0x60(%rbp)
movq 0x8(%rax), %rsi
movq 0x10(%rax), %rdx
addq %rsi, %rdx
movq %r13, %rdi
callq 0x96ba
movq -0x58(%rbp), %rdx
cmpq -0xb8(%rbp), %rdx
jne 0x65b8
testq %rdx, %rdx
je 0x65bd
movq -0xc0(%rbp), %rsi
movq -0x60(%rbp), %rdi
callq 0x21f0
testl %eax, %eax
sete %r15b
jmp 0x65c0
xorl %r15d, %r15d
jmp 0x65c0
movb $0x1, %r15b
movq -0x60(%rbp), %rdi
cmpq %r12, %rdi
je 0x65ce
callq 0x21c0
testb %r15b, %r15b
jne 0x65ec
incq %r14
movq -0x80(%rbp), %rax
movq -0x78(%rbp), %rcx
subq %rax, %rcx
sarq $0x3, %rcx
cmpq %r14, %rcx
ja 0x6573
jmp 0x6601
movq -0x80(%rbp), %rax
movq -0x30(%rbp), %rcx
movq (%rax,%rcx,8), %rdi
movq (%rax,%r14,8), %rsi
callq 0x2f4a
movq -0xa0(%rbp), %rsi
movq -0x98(%rbp), %rcx
leaq -0x128(%rbp), %rdi
movq -0x38(%rbp), %rdx
callq 0x2360
movq %rax, %r14
cmpq $-0x1, %rax
leaq -0x108(%rbp), %rbx
jne 0x649c
movq -0x30(%rbp), %rdx
incq %rdx
movq -0x78(%rbp), %rax
subq -0x80(%rbp), %rax
sarq $0x3, %rax
movq %rdx, -0x30(%rbp)
cmpq %rdx, %rax
ja 0x6301
movq -0x78(%rbp), %rax
cmpq -0x80(%rbp), %rax
je 0x67ef
xorl %r15d, %r15d
xorl %r13d, %r13d
movq -0x80(%rbp), %rax
cmpq %rax, -0x78(%rbp)
je 0x67cf
xorl %ebx, %ebx
movq (%rax,%rbx,8), %rsi
addq $0x78, %rsi
leaq -0x60(%rbp), %rdi
callq 0x8e42
movq -0x60(%rbp), %r14
movq -0x58(%rbp), %r12
xorps %xmm0, %xmm0
movaps %xmm0, -0x60(%rbp)
movq $0x0, -0x50(%rbp)
testq %r13, %r13
je 0x66ac
movq %r13, %rdi
callq 0x21c0
movq %rbx, -0x38(%rbp)
movq -0x60(%rbp), %rdi
testq %rdi, %rdi
je 0x66be
callq 0x21c0
subq %r14, %r12
je 0x67ab
sarq $0x3, %r12
cmpq $0x1, %r12
adcq $0x0, %r12
xorl %r13d, %r13d
movq %r14, %rbx
movq (%r14,%r13,8), %rax
leaq -0x50(%rbp), %rcx
movq %rcx, -0x60(%rbp)
movq 0x8(%rax), %rsi
movq 0x10(%rax), %rdx
addq %rsi, %rdx
leaq -0x60(%rbp), %rdi
callq 0x96ba
movq -0x80(%rbp), %rax
movq (%rax,%r15,8), %rax
leaq -0xf8(%rbp), %rcx
movq %rcx, -0x108(%rbp)
movq 0x8(%rax), %rsi
movq 0x10(%rax), %rdx
addq %rsi, %rdx
leaq -0x108(%rbp), %rdi
callq 0x96ba
movq -0x58(%rbp), %rdx
cmpq -0x100(%rbp), %rdx
jne 0x6750
testq %rdx, %rdx
je 0x6755
movq -0x108(%rbp), %rsi
movq -0x60(%rbp), %rdi
callq 0x21f0
testl %eax, %eax
sete %r14b
jmp 0x6758
xorl %r14d, %r14d
jmp 0x6758
movb $0x1, %r14b
movq -0x108(%rbp), %rdi
leaq -0xf8(%rbp), %rax
cmpq %rax, %rdi
je 0x6770
callq 0x21c0
movq -0x60(%rbp), %rdi
leaq -0x50(%rbp), %rax
cmpq %rax, %rdi
je 0x6782
callq 0x21c0
testb %r14b, %r14b
je 0x679c
movq -0x80(%rbp), %rax
movq (%rax,%r15,8), %rdi
movq -0x38(%rbp), %rcx
movq (%rax,%rcx,8), %rsi
callq 0x2ed0
incq %r13
cmpq %r13, %r12
movq %rbx, %r14
jne 0x66d9
movq -0x38(%rbp), %rbx
incq %rbx
movq -0x80(%rbp), %rax
movq -0x78(%rbp), %rcx
subq %rax, %rcx
sarq $0x3, %rcx
movq %r14, %r13
cmpq %rbx, %rcx
ja 0x6677
jmp 0x67d2
movq %r13, %r14
movq -0x78(%rbp), %rax
subq -0x80(%rbp), %rax
incq %r15
sarq $0x3, %rax
movq %r14, %r13
cmpq %r15, %rax
ja 0x6667
jmp 0x67f2
xorl %r14d, %r14d
leaq -0x1a8(%rbp), %rdi
leaq -0x80(%rbp), %rsi
callq 0x8e42
leaq -0x1a8(%rbp), %rsi
movq -0xe8(%rbp), %rdi
movq %r14, -0x30(%rbp)
callq 0x79ab
movq -0x1a8(%rbp), %rdi
testq %rdi, %rdi
je 0x682a
callq 0x21c0
movq -0xe8(%rbp), %rcx
movq (%rcx), %rax
cmpq %rax, 0x8(%rcx)
je 0x6a33
leaq -0x50(%rbp), %rbx
xorl %r12d, %r12d
leaq -0x60(%rbp), %r15
leaq 0x47d0(%rip), %r13      # 0xb020
movq (%rax,%r12,8), %rax
movq %rbx, -0x60(%rbp)
movq 0x28(%rax), %rsi
movq 0x30(%rax), %rdx
addq %rsi, %rdx
movq %r15, %rdi
callq 0x96ba
movq %r12, -0x38(%rbp)
leaq -0xe0(%rbp), %rdi
movq %r15, %rsi
callq 0x2270
movq -0x60(%rbp), %rdi
cmpq %rbx, %rdi
je 0x688c
callq 0x21c0
movl $0x1, %edx
movl $0x1, %ecx
leaq -0xe0(%rbp), %rdi
movq %r13, %rsi
callq 0x2360
cmpq $-0x1, %rax
je 0x6a0e
movq %rax, %r12
movq -0x98(%rbp), %rdx
movl $0x1, %r8d
leaq -0xa0(%rbp), %rdi
xorl %esi, %esi
movq %r13, %rcx
callq 0x2300
movq -0xe0(%rbp), %rax
movb 0x1(%rax,%r12), %al
incq %r12
addb $-0x30, %al
cmpb $0x9, %al
ja 0x69e3
movslq %r12d, %rcx
movq -0xe0(%rbp), %rax
movb (%rax,%rcx), %dl
addb $-0x30, %dl
cmpb $0x9, %dl
ja 0x6974
addq %rcx, %rax
movslq %r12d, %r14
incq %r14
movb (%rax), %r13b
movq %rbx, -0x60(%rbp)
movq -0xa0(%rbp), %rsi
movq -0x98(%rbp), %rdx
addq %rsi, %rdx
movq %r15, %rdi
callq 0x96ba
movq -0x58(%rbp), %rsi
movsbl %r13b, %r8d
movl $0x1, %ecx
movq %r15, %rdi
xorl %edx, %edx
callq 0x2390
leaq -0xa0(%rbp), %rdi
movq %r15, %rsi
callq 0x2270
movq -0x60(%rbp), %rdi
cmpq %rbx, %rdi
je 0x695b
callq 0x21c0
movq -0xe0(%rbp), %rax
movb (%rax,%r14), %cl
addq %r14, %rax
addb $-0x30, %cl
incq %r14
cmpb $0xa, %cl
jb 0x6907
movq -0xe8(%rbp), %rax
movq (%rax), %rax
movq -0x38(%rbp), %rcx
movq (%rax,%rcx,8), %r13
leaq -0x140(%rbp), %rax
movq %rax, -0x150(%rbp)
movq -0xa0(%rbp), %rsi
movq -0x98(%rbp), %rdx
addq %rsi, %rdx
leaq -0x150(%rbp), %rdi
movq -0x30(%rbp), %r14
callq 0x96ba
addq $0xc0, %r13
movq %r13, %rdi
leaq -0x150(%rbp), %rsi
callq 0x9cf0
movq -0x150(%rbp), %rdi
leaq -0x140(%rbp), %rax
cmpq %rax, %rdi
je 0x69e3
callq 0x21c0
movl $0x1, %ecx
leaq -0xe0(%rbp), %rdi
leaq 0x462a(%rip), %r13      # 0xb020
movq %r13, %rsi
movq %r12, %rdx
callq 0x2360
movq %rax, %r12
cmpq $-0x1, %rax
jne 0x68b2
movq -0x38(%rbp), %r12
incq %r12
movq -0xe8(%rbp), %rcx
movq (%rcx), %rax
movq 0x8(%rcx), %rcx
subq %rax, %rcx
sarq $0x3, %rcx
cmpq %r12, %rcx
ja 0x6850
testq %r14, %r14
je 0x6a40
movq %r14, %rdi
callq 0x21c0
movq -0xc0(%rbp), %rdi
leaq -0xb0(%rbp), %rax
cmpq %rax, %rdi
je 0x6a58
callq 0x21c0
movq -0xe0(%rbp), %rdi
leaq -0xd0(%rbp), %rax
cmpq %rax, %rdi
je 0x6a70
callq 0x21c0
movq -0xa0(%rbp), %rdi
leaq -0x90(%rbp), %rax
cmpq %rax, %rdi
je 0x6a88
callq 0x21c0
movq -0x128(%rbp), %rdi
leaq -0x118(%rbp), %rax
cmpq %rax, %rdi
je 0x6aa0
callq 0x21c0
leaq -0x3b8(%rbp), %rdi
callq 0x2080
movq -0x80(%rbp), %rdi
testq %rdi, %rdi
je 0x6aba
callq 0x21c0
movq -0xe8(%rbp), %rax
addq $0x398, %rsp            # imm = 0x398
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq %rax, %r15
movq -0x1a8(%rbp), %rdi
testq %rdi, %rdi
je 0x6ae7
callq 0x21c0
movq -0x30(%rbp), %r14
jmp 0x6c8a
jmp 0x6c70
movq %rax, %r15
jmp 0x6cdf
movq %rax, %r15
jmp 0x6d03
movq %rax, %r15
movq -0x170(%rbp), %rdi
leaq -0x160(%rbp), %rax
cmpq %rax, %rdi
je 0x6b2a
callq 0x21c0
jmp 0x6b2a
jmp 0x6bbc
movq %rax, %r15
movq %rbx, %rdi
jmp 0x6cc2
jmp 0x6c05
jmp 0x6bbc
jmp 0x6c1d
jmp 0x6c62
jmp 0x6c5d
jmp 0x6c5d
jmp 0x6b70
jmp 0x6c5d
jmp 0x6c62
jmp 0x6c5d
jmp 0x6c62
jmp 0x6c5d
jmp 0x6c5d
movq %rax, %r15
movq -0x108(%rbp), %rdi
leaq -0xf8(%rbp), %rax
cmpq %rax, %rdi
jne 0x6c92
jmp 0x6c97
jmp 0x6c5d
jmp 0x6c62
jmp 0x6c5d
movq %rax, %r15
movq -0x190(%rbp), %rdi
cmpq %r12, %rdi
jne 0x6caa
jmp 0x6caf
jmp 0x6bbc
jmp 0x6c05
jmp 0x6bbc
movq %rax, %r15
jmp 0x6cc7
jmp 0x6c05
jmp 0x6c5d
jmp 0x6c5d
movq %rax, %r15
movq -0x150(%rbp), %rdi
leaq -0x140(%rbp), %rax
cmpq %rax, %rdi
je 0x6c3c
callq 0x21c0
jmp 0x6c3c
movq %rax, %r15
movq -0xc0(%rbp), %rdi
cmpq %r14, %rdi
jne 0x6caa
jmp 0x6caf
movq %rax, %r15
jmp 0x6caf
movq %rax, %r15
movq %r13, %r14
jmp 0x6c8a
jmp 0x6c5d
jmp 0x6c5d
jmp 0x6c5d
jmp 0x6c5d
movq %rax, %r15
jmp 0x6c3c
movq %rax, %r15
jmp 0x6c38
movq %rax, %r15
movq -0x60(%rbp), %rdi
cmpq %rbx, %rdi
je 0x6c38
callq 0x21c0
movq -0x30(%rbp), %r14
movq -0xe8(%rbp), %rax
movq (%rax), %rdi
testq %rdi, %rdi
jne 0x6c85
jmp 0x6c8a
movq %rax, %r15
movq %rbx, %r14
jmp 0x6c8a
jmp 0x6c5d
jmp 0x6c5d
jmp 0x6c5d
jmp 0x6c62
movq %rax, %r15
jmp 0x6c97
movq %rax, %r15
movq -0x60(%rbp), %rdi
cmpq %r12, %rdi
jne 0x6c92
jmp 0x6c97
movq %rax, %r15
jmp 0x6c8a
movq %rax, %r15
movq -0x60(%rbp), %rdi
leaq -0x50(%rbp), %rax
cmpq %rax, %rdi
je 0x6c8a
callq 0x21c0
testq %r14, %r14
je 0x6c97
movq %r14, %rdi
callq 0x21c0
leaq -0xb0(%rbp), %rax
movq -0xc0(%rbp), %rdi
cmpq %rax, %rdi
je 0x6caf
callq 0x21c0
movq -0xe0(%rbp), %rdi
leaq -0xd0(%rbp), %rax
cmpq %rax, %rdi
je 0x6cc7
callq 0x21c0
movq -0xa0(%rbp), %rdi
leaq -0x90(%rbp), %rax
cmpq %rax, %rdi
je 0x6cdf
callq 0x21c0
movq -0x128(%rbp), %rdi
leaq -0x118(%rbp), %rax
cmpq %rax, %rdi
je 0x6cf7
callq 0x21c0
leaq -0x3b8(%rbp), %rdi
callq 0x2080
movq -0x80(%rbp), %rdi
testq %rdi, %rdi
je 0x6d11
callq 0x21c0
movq %r15, %rdi
callq 0x2370