// File: /workspace/github_cpp_makefile_star2_O2/CK7[P]abawaca/src/ScafDpData.cpp
// Function: ScafDpData::ScafDpData(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>>)
ScafDpData::ScafDpData(string esom_names_file, string fasta_file, string info_file)
{
	FILE* fp = NULL;
	char line[8192] = {};

	if(!(fp = fopen(info_file.c_str(), "r"))) {
		throw invalid_argument(string(__FILE__) + " (" + to_string(__LINE__) + "): could not read " + info_file);
	}

	map<string, double>	scaf_name2cvg;
	while(fgets(line, 8192, fp)) {
		// gwd1_scaffold_0 556922  17.599  0.363   0
		char seq_name[512];
		double cvg, gc;
		size_t Ns, length;
		if(sscanf(line, "%s %lu %lf %lf %lu", seq_name, &length, &cvg, &gc, &Ns) != 5) {
			char s[2048];
			sprintf(s, "%s (%d): Illegal line in file %s:\n%s", __FILE__, __LINE__, info_file.c_str(), line);
			throw invalid_argument(s);
		}
		scaf_name2cvg.insert(pair<string, double>(seq_name, cvg));
	}
	fclose(fp);

	if(!(fp = fopen(esom_names_file.c_str(), "r"))) {
		char s[2048];
		sprintf(s, "%s (%d): could not read %s", __FILE__, __LINE__, esom_names_file.c_str());
		throw invalid_argument(s);
	}

	if(!fgets(line, 8192, fp)) {
		char s[2048];
		sprintf(s, "%s (%d): file %s is empty", __FILE__, __LINE__, esom_names_file.c_str());
		throw invalid_argument(s);
	}

	// % 8430
	unsigned int t1, t2;
	char	c;
	if((sscanf(line, "%c %u", &c, &t1) != 2) || (c != '%')) {
		char s[2048];
		sprintf(s, "%s (%d): unexpected line in file %s:\n%s", __FILE__, __LINE__, esom_names_file.c_str(), line);
		throw invalid_argument(s);
	}

	map<string, set<DataPoint> >	scaf2dps;
	while(fgets(line, 8192, fp)) {
		// 1    gwd1_scaffold_20283_1   gwd1_scaffold_20283:(1,2072), 1 segment(s), 2072/2072 non-N bps
		// 1	gwd1_scaffold_0_1	gwd1_scaffold_0(1, 2003), 2003/2003 non-Ns bps
		size_t 	dp=0, start=0, end=0, non_Ns=0, length=0, nsegments=0;
		char	scaf[512]{}, gene_name[512]={}, *p1, *p2, *p3, *p4, *p5;

		p1 = strchr(line, ':');
		p2 = strchr(line, '(');
		p3 = strchr(line, ')');
		p4 = strchr(line, '/');
		p5 = strchr(line, ',');
		if(!p1 || !p2 || !p3 || !p4 || !p5) {
			char s[2048];
			sprintf(s, "\n%s (%d): unexpected line in file %s:\n%s\n", __FILE__, __LINE__, esom_names_file.c_str(), line);
			throw invalid_argument(s);
		}
		*p1 = *p2 = *p3 = *p4 = *p5 = ' ';
		if((sscanf(line, "%lu %s %s %lu %lu , %lu segment(s), %lu %lu non-N bps", &dp, gene_name, scaf, &start, &end, &nsegments, &non_Ns, &length) != 8) &&
		   (sscanf(line, "%lu %s %s %lu %lu , %lu %lu non-N bps", &dp, gene_name, scaf, &start, &end, &non_Ns, &length) != 7)) {
			char s[2048];
			sprintf(s, "\n%s (%d): unexpected line in file %s:\n%sdp=%lu, gene_name=%s, scaf=%s, start=%lu, end=%lu, nsegments=%lu, non_Ns=%lu, length=%lu\nMake sure that your esom files were generated using prepare_esom_files.pl v1.05 or later\n",
				 __FILE__, __LINE__, esom_names_file.c_str(), line, dp, gene_name, scaf, start, end, nsegments, non_Ns, length);
			throw invalid_argument(s);
		}
		auto sit = scaf2dps.find(scaf);
		if(sit == scaf2dps.end()) {
			scaf2dps.insert(pair<string, set<DataPoint> >(scaf, set<DataPoint>()));
			sit = scaf2dps.find(scaf);
		}
		sit->second.insert(DataPoint(0, dp, 0, start, end, length-non_Ns));
	}
	fclose(fp);

	dps.resize(1);
	for(auto sit = scaf2dps.begin(); sit != scaf2dps.end(); sit++) {
		if(sit->second.size() == 1)
			continue;
		scaf_name2id_map.insert(pair<string, size_t>(sit->first, scaf_name2id_map.size()+1));
		for(auto dpit=sit->second.begin(); dpit != sit->second.end(); dpit++) {
			dps.push_back(DataPoint(dps.size(), dpit->get_name(), scaf_name2id_map.size(), dpit->get_start(), dpit->get_end(), dpit->get_Ns()));
			dp_name2id_map.insert(pair<size_t, size_t>(dps.back().get_name(), dps.back().get_iid()));
		}
	}

	scafs.resize(scaf_name2id_map.size()+1);
	Bio::SeqIORead_fasta<Bio::DNASequence>	reader(fasta_file);
	Bio::DNASequence* seq_obj;

	while((seq_obj = reader.next_seq()) != NULL) {
		auto it=scaf_name2id_map.find(seq_obj->display_id());
		auto mit = scaf_name2cvg.find(seq_obj->display_id());
		double cvg = (mit == scaf_name2cvg.end())? 0 : mit->second;
		if(it != scaf_name2id_map.end()) {
			scafs[it->second] = Seq(it->second, seq_obj, cvg);
		}
		else {
			delete(seq_obj);
		}
	}

	auto it=dps.begin();
	for(++it; it!=dps.end(); it++)
		scafs[it->get_scaf_id()] += *it;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x2d38, %rsp           # imm = 0x2D38
movq %rcx, %r14
movq %rdx, -0xf8(%rbp)
movq %rdi, %r15
leaq 0x8(%rdi), %rax
andl $0x0, 0x8(%rdi)
andq $0x0, 0x10(%rdi)
movq %rax, 0x18(%rdi)
movq %rax, -0x100(%rbp)
movq %rax, 0x20(%rdi)
andq $0x0, 0x28(%rdi)
movq %rsi, -0x48(%rbp)
andl $0x0, 0x38(%rdi)
leaq 0x30(%rdi), %rax
movq %rax, -0x88(%rbp)
andq $0x0, 0x40(%rdi)
leaq 0x38(%rdi), %rax
movq %rax, 0x48(%rdi)
movq %rax, 0x50(%rdi)
leaq 0x60(%rdi), %rax
movq %rax, -0x60(%rbp)
leaq 0x78(%rdi), %rax
movq %rax, -0x58(%rbp)
xorps %xmm0, %xmm0
movups %xmm0, 0x58(%rdi)
movups %xmm0, 0x68(%rdi)
movups %xmm0, 0x78(%rdi)
andq $0x0, 0x88(%rdi)
leaq -0x2d60(%rbp), %rdi
movl $0x2000, %edx           # imm = 0x2000
xorl %esi, %esi
callq 0x41f0
movq %r14, -0x40(%rbp)
movq (%r14), %rdi
leaq 0xc18f(%rip), %rsi      # 0x15131
callq 0x4400
testq %rax, %rax
movq %r15, -0x30(%rbp)
je 0x9790
movq %rax, %rbx
leaq -0x130(%rbp), %rax
andl $0x0, (%rax)
andq $0x0, 0x8(%rax)
movq %rax, 0x10(%rax)
movq %rax, 0x18(%rax)
andq $0x0, 0x20(%rax)
leaq -0x2d60(%rbp), %r13
leaq -0x360(%rbp), %r14
leaq -0xd60(%rbp), %r15
leaq -0xb60(%rbp), %r12
movq %r13, %rdi
movl $0x2000, %esi           # imm = 0x2000
movq %rbx, %rdx
callq 0x45a0
testq %rax, %rax
je 0x9065
subq $0x8, %rsp
movq %r13, %rdi
leaq 0xc774(%rip), %rsi      # 0x15786
movq %r14, %rdx
leaq -0x50(%rbp), %rcx
movq %r15, %r8
leaq -0xf0(%rbp), %r9
xorl %eax, %eax
leaq -0xc0(%rbp), %r10
pushq %r10
callq 0x4330
popq %rcx
popq %rdx
cmpl $0x5, %eax
jne 0x9650
movq %r12, %rdi
movq %r14, %rsi
movq %r15, %rdx
callq 0x9dd8
leaq -0x138(%rbp), %rdi
movq %r12, %rsi
callq 0xacc8
movq %r12, %rdi
callq 0x4180
jmp 0x8fef
movq %rbx, %rdi
callq 0x4350
movq -0x48(%rbp), %rax
movq (%rax), %rdi
leaq 0xc0b6(%rip), %rsi      # 0x15131
callq 0x4400
testq %rax, %rax
je 0x9856
movq %rax, %r14
leaq -0x2d60(%rbp), %rdi
movl $0x2000, %esi           # imm = 0x2000
movq %rax, %rdx
callq 0x45a0
testq %rax, %rax
movq -0x30(%rbp), %rbx
je 0x98b0
leaq 0xc73f(%rip), %rsi      # 0x157f3
leaq -0x2d60(%rbp), %rdi
leaq -0x31(%rbp), %rdx
leaq -0x104(%rbp), %rcx
xorl %eax, %eax
callq 0x4330
cmpl $0x2, %eax
jne 0x9907
cmpb $0x25, -0x31(%rbp)
jne 0x9907
leaq -0xe8(%rbp), %rax
andl $0x0, (%rax)
andq $0x0, 0x8(%rax)
movq %rax, 0x10(%rax)
movq %rax, 0x18(%rax)
andq $0x0, 0x20(%rax)
leaq -0x2d60(%rbp), %r13
leaq -0x360(%rbp), %r15
leaq -0xd60(%rbp), %r12
movq %r14, -0x40(%rbp)
movq %r13, %rdi
movl $0x2000, %esi           # imm = 0x2000
movq %r14, %rdx
callq 0x45a0
testq %rax, %rax
je 0x93b6
andq $0x0, -0x50(%rbp)
andq $0x0, -0x80(%rbp)
andq $0x0, -0x78(%rbp)
andq $0x0, -0x70(%rbp)
andq $0x0, -0x68(%rbp)
andq $0x0, -0x90(%rbp)
movl $0x200, %edx            # imm = 0x200
movq %r15, %rdi
xorl %esi, %esi
callq 0x41f0
movl $0x200, %edx            # imm = 0x200
movq %r12, %rdi
xorl %esi, %esi
callq 0x41f0
movq %r13, %rdi
pushq $0x3a
popq %rsi
callq 0x4130
movq %rax, %r14
movq %r13, %rdi
pushq $0x28
popq %rsi
callq 0x4130
movq %rax, %r15
movq %r13, %rdi
pushq $0x29
popq %rsi
callq 0x4130
movq %rax, %r12
movq %r13, %rdi
pushq $0x2f
popq %rsi
callq 0x4130
movq %r13, %rdi
movq %rax, %r13
movq %rdi, %rbx
pushq $0x2c
popq %rsi
callq 0x4130
testq %r14, %r14
je 0x96b1
testq %r15, %r15
je 0x96b1
testq %r12, %r12
je 0x96b1
testq %r13, %r13
je 0x96b1
testq %rax, %rax
je 0x96b1
movb $0x20, %cl
movb %cl, (%rax)
movb %cl, (%r13)
movb %cl, (%r12)
movb %cl, (%r15)
movb %cl, (%r14)
movq %rbx, %r13
movq %rbx, %rdi
leaq 0xc64c(%rip), %rsi      # 0x1584b
leaq -0x50(%rbp), %rdx
leaq -0xd60(%rbp), %r12
movq %r12, %rcx
leaq -0x360(%rbp), %r15
movq %r15, %r8
leaq -0x80(%rbp), %r9
xorl %eax, %eax
leaq -0x68(%rbp), %r10
pushq %r10
leaq -0x70(%rbp), %r10
pushq %r10
leaq -0x90(%rbp), %r10
pushq %r10
leaq -0x78(%rbp), %r10
pushq %r10
callq 0x4330
addq $0x20, %rsp
cmpl $0x8, %eax
je 0x9288
subq $0x8, %rsp
movq %r13, %rdi
leaq 0xc62d(%rip), %rsi      # 0x15881
leaq -0x50(%rbp), %rdx
movq %r12, %rcx
movq %r15, %r8
leaq -0x80(%rbp), %r9
xorl %eax, %eax
leaq -0x68(%rbp), %r10
pushq %r10
leaq -0x70(%rbp), %r10
pushq %r10
leaq -0x78(%rbp), %r10
pushq %r10
callq 0x4330
addq $0x20, %rsp
cmpl $0x7, %eax
jne 0x9712
leaq -0xb60(%rbp), %rbx
movq %rbx, %rdi
movq %r15, %rsi
leaq -0xc0(%rbp), %rdx
callq 0x4140
leaq -0xf0(%rbp), %rdi
movq %rbx, %rsi
callq 0xaeea
movq %rax, %r14
movq %rbx, %rdi
callq 0x4180
leaq -0xe8(%rbp), %rax
cmpq %rax, %r14
jne 0x935a
xorps %xmm0, %xmm0
movaps %xmm0, -0xc0(%rbp)
andq $0x0, -0xb0(%rbp)
leaq -0xb8(%rbp), %rax
movq %rax, -0xa8(%rbp)
movq %rax, -0xa0(%rbp)
andq $0x0, -0x98(%rbp)
movq %rbx, %rdi
movq %r15, %rsi
leaq -0xc0(%rbp), %rdx
callq 0x9e06
leaq -0xf0(%rbp), %rdi
movq %rbx, %rsi
callq 0xaf74
movq %rbx, %rdi
callq 0x9e3c
leaq -0xc0(%rbp), %r14
movq %r14, %rdi
callq 0xa48a
movq %rbx, %rdi
movq %r15, %rsi
movq %r14, %rdx
callq 0x4140
leaq -0xf0(%rbp), %rdi
movq %rbx, %rsi
callq 0xaeea
movq %rax, %r14
movq %rbx, %rdi
callq 0x4180
addq $0x40, %r14
movq -0x50(%rbp), %rax
movq -0x68(%rbp), %rcx
subq -0x70(%rbp), %rcx
movq -0x80(%rbp), %rdx
andq $0x0, -0xb60(%rbp)
movq %rax, -0xb58(%rbp)
andq $0x0, -0xb50(%rbp)
movq -0x78(%rbp), %rax
movq %rdx, -0xb48(%rbp)
movq %rax, -0xb40(%rbp)
movq %rcx, -0xb38(%rbp)
movq %r14, %rdi
movq %rbx, %rsi
callq 0xb188
movq -0x40(%rbp), %r14
movq -0x30(%rbp), %rbx
jmp 0x9115
movq %r14, %rdi
callq 0x4350
pushq $0x1
popq %rsi
movq -0x60(%rbp), %rdi
callq 0x9e5c
movq -0xd8(%rbp), %rcx
leaq -0xb60(%rbp), %r12
pushq $0x30
popq %r15
leaq -0xe8(%rbp), %rax
cmpq %rax, %rcx
je 0x94d5
movq %rcx, -0x40(%rbp)
cmpq $0x1, 0x68(%rcx)
jne 0x9409
movq -0x40(%rbp), %rdi
callq 0x4250
movq %rax, %rcx
movq -0x30(%rbp), %rbx
jmp 0x93dc
movq -0x40(%rbp), %r13
leaq 0x20(%r13), %rsi
movq -0x30(%rbp), %r14
movq 0x28(%r14), %rbx
movq %r12, %rdi
callq 0x44d0
incq %rbx
movq %rbx, -0xb40(%rbp)
movq %r14, %rdi
movq %r12, %rsi
callq 0xb50a
movq %r12, %rdi
callq 0x4180
movq 0x58(%r13), %r14
addq $0x48, %r13
cmpq %r13, %r14
je 0x93f7
movq -0x30(%rbp), %rbx
movq 0x28(%rbx), %rcx
movq 0x68(%rbx), %rax
subq 0x60(%rbx), %rax
cqto
idivq %r15
movq 0x28(%r14), %rdx
movups 0x38(%r14), %xmm0
movq 0x48(%r14), %rsi
movq %rax, -0xb60(%rbp)
movq %rdx, -0xb58(%rbp)
movq %rcx, -0xb50(%rbp)
movups %xmm0, -0xb48(%rbp)
movq %rsi, -0xb38(%rbp)
movq -0x60(%rbp), %rdi
movq %r12, %rsi
callq 0xb714
movq 0x68(%rbx), %rax
movq -0x30(%rax), %rcx
movq -0x28(%rax), %rax
movq %rax, -0xb60(%rbp)
movq %rcx, -0xb58(%rbp)
movq -0x88(%rbp), %rdi
movq %r12, %rsi
callq 0xb844
movq %r14, %rdi
callq 0x43d0
movq %rax, %r14
jmp 0x9446
movq 0x28(%rbx), %rsi
incq %rsi
movq -0x58(%rbp), %rdi
callq 0x9ea2
leaq -0x158(%rbp), %rdi
movq -0xf8(%rbp), %rsi
callq 0x44d0
leaq -0xb60(%rbp), %rdi
leaq -0x158(%rbp), %rsi
callq 0x9ee4
leaq -0x158(%rbp), %rdi
callq 0x4180
leaq -0x350(%rbp), %r13
leaq -0xb60(%rbp), %rdi
callq 0x9f52
movq %rax, %r14
testq %rax, %rax
je 0x95eb
leaq 0x8(%r14), %r12
movq %rbx, %rdi
movq %r12, %rsi
callq 0xc044
movq %rax, %r15
leaq -0x138(%rbp), %rdi
movq %r12, %rsi
callq 0xc0ce
leaq -0x130(%rbp), %rcx
cmpq %rcx, %rax
je 0x956a
movsd 0x40(%rax), %xmm0
jmp 0x956d
xorps %xmm0, %xmm0
cmpq -0x100(%rbp), %r15
je 0x95dd
movq 0x40(%r15), %rax
movq %rax, -0x360(%rbp)
andl $0x0, -0x350(%rbp)
andq $0x0, -0x348(%rbp)
movq %r13, -0x340(%rbp)
movq %r13, -0x338(%rbp)
andq $0x0, -0x330(%rbp)
movq %r14, -0x328(%rbp)
movsd %xmm0, -0x320(%rbp)
imulq $0x48, %rax, %rdi
movq -0x58(%rbp), %rax
addq (%rax), %rdi
leaq -0x360(%rbp), %rsi
callq 0xa2f6
leaq -0x358(%rbp), %rdi
callq 0x780c
jmp 0x951e
movq (%r14), %rax
movq %r14, %rdi
callq *0x8(%rax)
jmp 0x951e
movq -0x60(%rbp), %rax
movq (%rax), %rsi
addq $0x30, %rsi
movq -0x30(%rbp), %rax
cmpq 0x68(%rax), %rsi
je 0x961a
imulq $0x48, 0x10(%rsi), %rdi
movq -0x58(%rbp), %rax
addq (%rax), %rdi
leaq 0x30(%rsi), %rbx
callq 0xa354
movq %rbx, %rsi
jmp 0x95f6
leaq -0xb60(%rbp), %rdi
callq 0xa922
leaq -0xf0(%rbp), %rdi
callq 0xabb8
leaq -0x138(%rbp), %rdi
callq 0xac50
addq $0x2d38, %rsp           # imm = 0x2D38
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq -0x40(%rbp), %rax
movq (%rax), %r8
leaq 0xc13b(%rip), %rsi      # 0x15799
leaq 0xc0fb(%rip), %rdx      # 0x15760
leaq -0xb60(%rbp), %r15
pushq $0x1c
popq %rcx
leaq -0x2d60(%rbp), %r9
movq %r15, %rdi
xorl %eax, %eax
callq 0x4080
pushq $0x10
popq %rdi
callq 0x41b0
movq %rax, %r14
movq %rax, %rdi
movq %r15, %rsi
callq 0x46e0
movq 0x1592b(%rip), %rsi     # 0x1efc8
movq 0x15914(%rip), %rdx     # 0x1efb8
movq %r14, %rdi
callq 0x4620
jmp 0x9963
movq -0x48(%rbp), %rax
movq (%rax), %r8
leaq 0xc162(%rip), %rsi      # 0x15821
leaq 0xc09a(%rip), %rdx      # 0x15760
leaq -0xb60(%rbp), %r15
pushq $0x46
popq %rcx
leaq -0x2d60(%rbp), %r9
movq %r15, %rdi
xorl %eax, %eax
callq 0x4080
pushq $0x10
popq %rdi
callq 0x41b0
movq %rax, %r14
movq %rax, %rdi
movq %r15, %rsi
callq 0x46e0
movq 0x158ca(%rip), %rsi     # 0x1efc8
movq 0x158b3(%rip), %rdx     # 0x1efb8
movq %r14, %rdi
callq 0x4620
jmp 0x9963
movq -0x48(%rbp), %rax
movq (%rax), %r8
leaq 0xc187(%rip), %rsi      # 0x158a7
leaq 0xc039(%rip), %rdx      # 0x15760
leaq -0xb60(%rbp), %r14
pushq $0x4e
popq %rcx
leaq -0x2d60(%rbp), %r9
movq %r14, %rdi
xorl %eax, %eax
pushq -0x68(%rbp)
pushq -0x70(%rbp)
pushq -0x90(%rbp)
pushq -0x78(%rbp)
pushq -0x80(%rbp)
pushq %r15
pushq %r12
pushq -0x50(%rbp)
callq 0x4080
addq $0x40, %rsp
pushq $0x10
popq %rdi
callq 0x41b0
movq %rax, %r15
movq %rax, %rdi
movq %r14, %rsi
callq 0x46e0
movq 0x1584c(%rip), %rsi     # 0x1efc8
movq 0x15835(%rip), %rdx     # 0x1efb8
movq %r15, %rdi
callq 0x4620
jmp 0x9963
pushq $0x10
popq %rdi
callq 0x41b0
movq %rax, %r12
leaq 0xbfbe(%rip), %rsi      # 0x15760
leaq -0xf0(%rbp), %rdi
leaq -0x50(%rbp), %rdx
callq 0x4140
leaq 0xc744(%rip), %rdx      # 0x15efd
leaq -0x138(%rbp), %rdi
leaq -0xf0(%rbp), %rsi
callq 0x9d4e
leaq -0xc0(%rbp), %rdi
pushq $0x11
popq %rsi
callq 0x9d77
leaq -0xd60(%rbp), %rdi
leaq -0x138(%rbp), %rsi
leaq -0xc0(%rbp), %rdx
callq 0x8231
leaq 0xbf77(%rip), %rdx      # 0x15773
leaq -0x360(%rbp), %rdi
leaq -0xd60(%rbp), %rsi
callq 0x9d4e
leaq -0xb60(%rbp), %rdi
leaq -0x360(%rbp), %rsi
movq -0x40(%rbp), %rdx
callq 0x8208
movb $0x1, %r14b
leaq -0xb60(%rbp), %rsi
movq %r12, %rdi
callq 0x4650
xorl %r14d, %r14d
movq 0x15786(%rip), %rsi     # 0x1efc8
movq 0x1576f(%rip), %rdx     # 0x1efb8
movq %r12, %rdi
callq 0x4620
jmp 0x9963
movq -0x48(%rbp), %rax
movq (%rax), %r8
leaq 0xbf5a(%rip), %rsi      # 0x157be
leaq 0xbef5(%rip), %rdx      # 0x15760
leaq -0xb60(%rbp), %r15
pushq $0x25
popq %rcx
movq %r15, %rdi
xorl %eax, %eax
callq 0x4080
pushq $0x10
popq %rdi
callq 0x41b0
movq %rax, %r14
movq %rax, %rdi
movq %r15, %rsi
callq 0x46e0
movq 0x1572c(%rip), %rsi     # 0x1efc8
movq 0x15715(%rip), %rdx     # 0x1efb8
movq %r14, %rdi
callq 0x4620
jmp 0x9963
movq -0x48(%rbp), %rax
movq (%rax), %r8
leaq 0xbf1b(%rip), %rsi      # 0x157d9
leaq 0xbe9b(%rip), %rdx      # 0x15760
leaq -0xb60(%rbp), %r15
pushq $0x2b
popq %rcx
movq %r15, %rdi
xorl %eax, %eax
callq 0x4080
pushq $0x10
popq %rdi
callq 0x41b0
movq %rax, %r14
movq %rax, %rdi
movq %r15, %rsi
callq 0x46e0
movq 0x156d2(%rip), %rsi     # 0x1efc8
movq 0x156bb(%rip), %rdx     # 0x1efb8
movq %r14, %rdi
callq 0x4620
jmp 0x9963
movq -0x48(%rbp), %rax
movq (%rax), %r8
leaq 0xbee4(%rip), %rsi      # 0x157f9
leaq 0xbe44(%rip), %rdx      # 0x15760
leaq -0xb60(%rbp), %r15
pushq $0x34
popq %rcx
leaq -0x2d60(%rbp), %r9
movq %r15, %rdi
xorl %eax, %eax
callq 0x4080
pushq $0x10
popq %rdi
callq 0x41b0
movq %rax, %r14
movq %rax, %rdi
movq %r15, %rsi
callq 0x46e0
movq 0x15674(%rip), %rsi     # 0x1efc8
movq 0x1565d(%rip), %rdx     # 0x1efb8
movq %r14, %rdi
callq 0x4620
movq %rax, %r13
leaq -0xb60(%rbp), %rdi
callq 0x4180
jmp 0x997a
movq %rax, %r13
movb $0x1, %r14b
leaq -0x360(%rbp), %rdi
callq 0x4180
jmp 0x998e
movq %rax, %r13
movb $0x1, %r14b
leaq -0xd60(%rbp), %rdi
callq 0x4180
jmp 0x99a2
movq %rax, %r13
movb $0x1, %r14b
leaq -0xc0(%rbp), %rdi
callq 0x4180
jmp 0x99b6
movq %rax, %r13
movb $0x1, %r14b
leaq -0x138(%rbp), %rdi
callq 0x4180
jmp 0x99ca
movq %rax, %r13
movb $0x1, %r14b
leaq -0xf0(%rbp), %rdi
callq 0x4180
testb %r14b, %r14b
movq -0x30(%rbp), %rbx
jne 0x9a09
jmp 0x9b1a
jmp 0x9acb
jmp 0x9a8b
jmp 0x9acb
jmp 0x9a8b
jmp 0x9acb
jmp 0x9a8b
movq %rax, %r13
movq -0x30(%rbp), %rbx
movq %r12, %rdi
callq 0x4260
jmp 0x9b1a
movq %rax, %r13
leaq -0x158(%rbp), %rdi
callq 0x4180
jmp 0x9b02
jmp 0x9af6
jmp 0x9af6
jmp 0x9afb
movq %rax, %r13
movq %r15, %rdi
jmp 0x9a82
movq %rax, %r13
jmp 0x9a5c
jmp 0x9ab6
jmp 0x9afb
movq %rax, %r13
leaq -0xb60(%rbp), %rdi
callq 0x9e3c
leaq -0xc0(%rbp), %rdi
callq 0xa48a
jmp 0x9afe
jmp 0x9ab6
movq %rax, %r13
movq %r14, %rbx
jmp 0x9b02
jmp 0x9afb
movq %rax, %r13
movq %r14, %rdi
callq 0x4260
jmp 0x9afe
jmp 0x9acb
movq %rax, %r13
movq %r14, %rdi
callq 0x4260
jmp 0x9adf
movq %rax, %r13
leaq -0x358(%rbp), %rdi
callq 0x780c
jmp 0x9ae8
movq %rax, %r13
movq -0x30(%rbp), %rbx
jmp 0x9ae8
jmp 0x9ae5
jmp 0x9ae5
movq %rax, %r13
leaq -0xb60(%rbp), %rdi
callq 0x4180
jmp 0x9afe
jmp 0x9afb
jmp 0x9afb
movq %rax, %r13
jmp 0x9adf
movq %rax, %r13
leaq -0xb60(%rbp), %rdi
callq 0x4180
movq -0x30(%rbp), %rbx
jmp 0x9b0e
movq %rax, %r13
leaq -0xb60(%rbp), %rdi
callq 0xa922
jmp 0x9b02
movq %rax, %r13
jmp 0x9b02
movq %rax, %r13
movq -0x30(%rbp), %rbx
leaq -0xf0(%rbp), %rdi
callq 0xabb8
leaq -0x138(%rbp), %rdi
callq 0xac50
movq -0x58(%rbp), %rdi
callq 0x77a6
movq -0x60(%rbp), %rdi
callq 0x7862
movq -0x88(%rbp), %rdi
callq 0x76fa
movq %rbx, %rdi
callq 0x7876
movq %r13, %rdi
callq 0x4660