// File: splatlab[P]debgr/debruijn_graph.cc
// Function: main
int main ( int argc, char *argv[] )
{
	if (argc < 2) {
		cout << "Insufficient arguments!" << endl;
		abort();
	}
	struct timeval start1, end1;
	struct timezone tzp;

	// De-serialize QFs
	QF occurences, begins, ends, true_kmers;
	{
		string exact_ext(".exact");
		string first_ext(".first");
		string last_ext(".last");
		string ser_ext(".ser");
		string exact_cqf = string(argv[1]) + exact_ext;
		string main_cqf = string(argv[1]) + ser_ext;
		string first_cqf = string(argv[1]) + first_ext;
		string last_cqf = string(argv[1]) + last_ext;
		//Initialize the QF
		cout << "Reading CQFs off disk:" << endl;
		qf_deserialize(&true_kmers, exact_cqf.c_str());
		qf_deserialize(&occurences, main_cqf.c_str());
		qf_deserialize(&begins, first_cqf.c_str());
		qf_deserialize(&ends, last_cqf.c_str());
	}

	// Building first dBG
	dna::debruijn_graph
		dbg(K,
				dna::kmer_counter_cqf<dna::debruijn_graph::edge>(K, occurences),
				dna::kmer_counter_lossless_cqf<dna::debruijn_graph::node>(K-1, begins),
				dna::kmer_counter_lossless_cqf<dna::debruijn_graph::node>(K-1, ends),
				map<dna::debruijn_graph::node, uint64_t>());
	
	// ofstream before("/tmp/before.dot");
	// dbg.print_reachable_graph("reachable_graph", before);

	dna::debruijn_graph dbg_orig = dbg;

	cout << "Finding false positive kmers." << endl;
	unordered_set<debruijn_graph::edge> fp_kmers;
	unordered_set<debruijn_graph::edge> abundance_errors;
	gettimeofday(&start1, &tzp);
	for (const auto & e : dbg.reachable_edges()) {
		uint64_t hash = kmercounting::HashUtil::hash_64(e.val, BITMASK(2*K));
		if (qf_count_key_value(&true_kmers, hash, 0) == 0)
			fp_kmers.insert(e);
		if (qf_count_key_value(&true_kmers, hash, 0) != dbg.abundance(e))
			abundance_errors.insert(e);
	}
	gettimeofday(&end1, &tzp);
	print_time_elapsed("", &start1, &end1);
	cout << "Number of reachable fp kmers: " << fp_kmers.size() << endl;
	cout << "Number of reachable abundance errors kmers: " << abundance_errors.size() << endl;

	cout << "Counting nodes." << endl;
	gettimeofday(&start1, &tzp);
	uint64_t nnodes = 0, nedges = 0;
	for (const auto & n : dbg.reachable_nodes())
		nnodes++;
	gettimeofday(&end1, &tzp);
	print_time_elapsed("", &start1, &end1);
	cout << "Number of nodes: " << nnodes << endl;

	cout << "Counting edges." << endl;
	gettimeofday(&start1, &tzp);
	for (const auto & e : dbg.reachable_edges())
		nedges++;
	gettimeofday(&end1, &tzp);
	print_time_elapsed("", &start1, &end1);
	cout << "Number of edges: " << nedges << endl;

	cout << "Correcting abundances:" << endl;
	dbg.update_corrections();

	uint64_t num_fp_kmers_not_found_by_correction = 0;
	for (const auto & e : fp_kmers) {
		if (dbg.abundance(e)) {
			num_fp_kmers_not_found_by_correction++;
			ofstream nbhd("/tmp/fp-" + ((string)e) + ".dot");
			dbg_orig.print_nearby_graph((string)e, nbhd, left_node(e), 6);
		}
	}
	cout << "Num of false-positive k-mers not found by correcting abundance: " << num_fp_kmers_not_found_by_correction << endl;

	uint64_t num_abundance_errors_not_found_by_correction = 0;
	uint64_t num_over_counts = 0;
	uint64_t num_under_counts = 0;
	for (const auto & e : abundance_errors) {
		uint64_t hash = kmercounting::HashUtil::hash_64(e.val, BITMASK(2*K));
		if (dbg.abundance(e) != qf_count_key_value(&true_kmers, hash, 0)) {
			num_abundance_errors_not_found_by_correction++;
			ofstream nbhd("/tmp/ae-" + ((string)e) + ".dot");
			dbg_orig.print_nearby_graph((string)e, nbhd, left_node(e), 6);
			if (dbg.abundance(e) > qf_count_key_value(&true_kmers, hash, 0))
				num_over_counts++;
			else
				num_under_counts++;
		}
	}
	cout << "Num of abundance errors not found by correcting abundance: " << num_abundance_errors_not_found_by_correction << endl;
	cout << "Num of over counts: " << num_over_counts << endl;
	cout << "Num of under counts: " << num_under_counts << endl;

	QFi cfi;
	uint64_t num_fn_kmers = 0;
	qf_iterator(&true_kmers, &cfi, 0);
	do {
		uint64_t key = 0, value = 0, count = 0;
		qfi_get(&cfi, &key, &value, &count);
		uint64_t item = kmercounting::HashUtil::hash_64i(key, BITMASK(2*K));

		dna::debruijn_graph::edge e = debruijn_graph::edge(K, item);
		if (dbg.abundance(e) == 0) {
			num_fn_kmers++;
			ofstream nbhd("/tmp/fn-" + ((string)e) + ".dot");
			dbg_orig.print_nearby_graph((string)e, nbhd, left_node(e), 6);
		}
	} while (!qfi_next(&cfi));
	cout << "Number of false negative kmers: " << num_fn_kmers << endl;

	cout << "Testing local correction performance" << endl;
	gettimeofday(&start1, &tzp);
	uint64_t random_query_abundance_errors = 0;
	for (uint64_t i = 0; i < 1000000; i++) {
		dna::debruijn_graph::edge e(K, random() & BITMASK(2*K));
		dbg.update_corrections(left_node(e));
		uint64_t hash = kmercounting::HashUtil::hash_64(e.val, BITMASK(2*K));
		assert(dbg.abundance(e) >= qf_count_key_value(&true_kmers, hash, 0));
		if (dbg.abundance(e) != qf_count_key_value(&true_kmers, hash, 0)) {
			random_query_abundance_errors++;		
		}
	}
	gettimeofday(&end1, &tzp);
	print_time_elapsed("", &start1, &end1);
	cout << "Number of random query abundance errors: " << random_query_abundance_errors << endl;

	cout << "Testing navigation query performance." << endl;
	nedges = 0;
	gettimeofday(&start1, &tzp);
	for (const auto & e : dbg.reachable_edges())
		nedges++;
	gettimeofday(&end1, &tzp);
	print_time_elapsed("", &start1, &end1);
	cout << "Number of edges: " << nedges << endl;

	cout << "Testing random query performance." << endl;
	gettimeofday(&start1, &tzp);
	for (uint64_t i = 0; i < 1000000; i++) {
		dna::debruijn_graph::edge e(K, random() & BITMASK(2*K));
		uint64_t hash = kmercounting::HashUtil::hash_64(e.val, BITMASK(2*K));
		assert(dbg.abundance(e) >= qf_count_key_value(&true_kmers, hash, 0));
		if (dbg.abundance(e) != qf_count_key_value(&true_kmers, hash, 0)) {
			random_query_abundance_errors++;		
		}
	}
	gettimeofday(&end1, &tzp);
	print_time_elapsed("", &start1, &end1);
	cout << "Number of random query abundance errors: " << random_query_abundance_errors << endl;

	return 0;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x1e40, %rsp           # imm = 0x1E40
movl $0x0, -0x4(%rbp)
movl %edi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
cmpl $0x2, -0x8(%rbp)
jge 0xb186
movq 0x2ee6a(%rip), %rdi     # 0x39fd0
leaq 0x1f36d(%rip), %rsi     # 0x2a4da
callq 0x3290
movq %rax, %rdi
movq 0x2ee3c(%rip), %rsi     # 0x39fb8
callq 0x32e0
callq 0x3110
leaq -0xb9(%rbp), %rdi
movq %rdi, -0x1b20(%rbp)
callq 0x3490
movq -0x1b20(%rbp), %rdx
leaq 0x1f34b(%rip), %rsi     # 0x2a4f2
leaq -0xb8(%rbp), %rdi
callq 0x33b0
jmp 0xb1b5
leaq -0xb9(%rbp), %rdi
callq 0x3310
leaq -0xf1(%rbp), %rdi
movq %rdi, -0x1b28(%rbp)
callq 0x3490
movq -0x1b28(%rbp), %rdx
leaq 0x1f317(%rip), %rsi     # 0x2a4f9
leaq -0xf0(%rbp), %rdi
callq 0x33b0
jmp 0xb1f0
leaq -0xf1(%rbp), %rdi
callq 0x3310
leaq -0x119(%rbp), %rdi
movq %rdi, -0x1b30(%rbp)
callq 0x3490
movq -0x1b30(%rbp), %rdx
leaq 0x1f2e3(%rip), %rsi     # 0x2a500
leaq -0x118(%rbp), %rdi
callq 0x33b0
jmp 0xb22b
leaq -0x119(%rbp), %rdi
callq 0x3310
leaq -0x141(%rbp), %rdi
movq %rdi, -0x1b38(%rbp)
callq 0x3490
movq -0x1b38(%rbp), %rdx
leaq 0x1f2ae(%rip), %rsi     # 0x2a506
leaq -0x140(%rbp), %rdi
callq 0x33b0
jmp 0xb266
leaq -0x141(%rbp), %rdi
callq 0x3310
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x1b48(%rbp)
leaq -0x189(%rbp), %rdi
movq %rdi, -0x1b40(%rbp)
callq 0x3490
movq -0x1b48(%rbp), %rsi
movq -0x1b40(%rbp), %rdx
leaq -0x188(%rbp), %rdi
callq 0x33b0
jmp 0xb2b0
leaq -0x168(%rbp), %rdi
leaq -0x188(%rbp), %rsi
leaq -0xb8(%rbp), %rdx
callq 0x12df0
jmp 0xb2cc
leaq -0x188(%rbp), %rdi
callq 0x3150
leaq -0x189(%rbp), %rdi
callq 0x3310
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x1b58(%rbp)
leaq -0x1d1(%rbp), %rdi
movq %rdi, -0x1b50(%rbp)
callq 0x3490
movq -0x1b58(%rbp), %rsi
movq -0x1b50(%rbp), %rdx
leaq -0x1d0(%rbp), %rdi
callq 0x33b0
jmp 0xb322
leaq -0x1b0(%rbp), %rdi
leaq -0x1d0(%rbp), %rsi
leaq -0x140(%rbp), %rdx
callq 0x12df0
jmp 0xb33e
leaq -0x1d0(%rbp), %rdi
callq 0x3150
leaq -0x1d1(%rbp), %rdi
callq 0x3310
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x1b68(%rbp)
leaq -0x219(%rbp), %rdi
movq %rdi, -0x1b60(%rbp)
callq 0x3490
movq -0x1b68(%rbp), %rsi
movq -0x1b60(%rbp), %rdx
leaq -0x218(%rbp), %rdi
callq 0x33b0
jmp 0xb394
leaq -0x1f8(%rbp), %rdi
leaq -0x218(%rbp), %rsi
leaq -0xf0(%rbp), %rdx
callq 0x12df0
jmp 0xb3b0
leaq -0x218(%rbp), %rdi
callq 0x3150
leaq -0x219(%rbp), %rdi
callq 0x3310
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x1b78(%rbp)
leaq -0x261(%rbp), %rdi
movq %rdi, -0x1b70(%rbp)
callq 0x3490
movq -0x1b78(%rbp), %rsi
movq -0x1b70(%rbp), %rdx
leaq -0x260(%rbp), %rdi
callq 0x33b0
jmp 0xb406
leaq -0x240(%rbp), %rdi
leaq -0x260(%rbp), %rsi
leaq -0x118(%rbp), %rdx
callq 0x12df0
jmp 0xb422
leaq -0x260(%rbp), %rdi
callq 0x3150
leaq -0x261(%rbp), %rdi
callq 0x3310
movq 0x2eb8f(%rip), %rdi     # 0x39fd0
leaq 0x1f0c3(%rip), %rsi     # 0x2a50b
callq 0x3290
movq %rax, -0x1b80(%rbp)
jmp 0xb456
movq -0x1b80(%rbp), %rdi
movq 0x2eb54(%rip), %rsi     # 0x39fb8
callq 0x32e0
jmp 0xb46b
leaq -0x168(%rbp), %rdi
callq 0x30c0
movq %rax, %rsi
leaq -0x98(%rbp), %rdi
callq 0x25240
jmp 0xb488
leaq -0x1b0(%rbp), %rdi
callq 0x30c0
movq %rax, %rsi
leaq -0x50(%rbp), %rdi
callq 0x25240
jmp 0xb4a2
leaq -0x1f8(%rbp), %rdi
callq 0x30c0
movq %rax, %rsi
leaq -0x68(%rbp), %rdi
callq 0x25240
jmp 0xb4bc
leaq -0x240(%rbp), %rdi
callq 0x30c0
movq %rax, %rsi
leaq -0x80(%rbp), %rdi
callq 0x25240
jmp 0xb4d6
leaq -0x240(%rbp), %rdi
callq 0x3150
leaq -0x1f8(%rbp), %rdi
callq 0x3150
leaq -0x1b0(%rbp), %rdi
callq 0x3150
leaq -0x168(%rbp), %rdi
callq 0x3150
leaq -0x140(%rbp), %rdi
callq 0x3150
leaq -0x118(%rbp), %rdi
callq 0x3150
leaq -0xf0(%rbp), %rdi
callq 0x3150
leaq -0xb8(%rbp), %rdi
callq 0x3150
movq -0x40(%rbp), %rax
movq %rax, -0x350(%rbp)
movups -0x50(%rbp), %xmm0
movaps %xmm0, -0x360(%rbp)
movq -0x350(%rbp), %rcx
movq %rsp, %rax
movq %rcx, 0x10(%rax)
movaps -0x360(%rbp), %xmm0
movups %xmm0, (%rax)
leaq -0x340(%rbp), %rdi
movq %rdi, -0x1ba0(%rbp)
movl $0x1c, %esi
callq 0x12e40
movq -0x58(%rbp), %rax
movq %rax, -0x390(%rbp)
movups -0x68(%rbp), %xmm0
movaps %xmm0, -0x3a0(%rbp)
movq -0x390(%rbp), %rcx
movq %rsp, %rax
movq %rcx, 0x10(%rax)
movaps -0x3a0(%rbp), %xmm0
movups %xmm0, (%rax)
leaq -0x388(%rbp), %rdi
movq %rdi, -0x1b98(%rbp)
movl $0x1b, %esi
movq %rsi, -0x1ba8(%rbp)
callq 0x12e90
movq -0x1ba8(%rbp), %rsi
movq -0x70(%rbp), %rax
movq %rax, -0x3d0(%rbp)
movups -0x80(%rbp), %xmm0
movaps %xmm0, -0x3e0(%rbp)
movq -0x3d0(%rbp), %rcx
movq %rsp, %rax
movq %rcx, 0x10(%rax)
movaps -0x3e0(%rbp), %xmm0
movups %xmm0, (%rax)
leaq -0x3c8(%rbp), %rdi
movq %rdi, -0x1b90(%rbp)
callq 0x12e90
xorps %xmm0, %xmm0
movaps %xmm0, -0x3f0(%rbp)
movaps %xmm0, -0x400(%rbp)
movaps %xmm0, -0x410(%rbp)
leaq -0x410(%rbp), %rdi
movq %rdi, -0x1b88(%rbp)
callq 0x12f10
movq -0x1ba0(%rbp), %rdx
movq -0x1b98(%rbp), %rcx
movq -0x1b90(%rbp), %r8
movq -0x1b88(%rbp), %r9
leaq -0x318(%rbp), %rdi
movl $0x1c, %esi
callq 0x43c0
jmp 0xb66b
leaq -0x410(%rbp), %rdi
callq 0x12f30
leaq -0x4c0(%rbp), %rdi
leaq -0x318(%rbp), %rsi
callq 0x12f50
jmp 0xb68c
movq 0x2e93d(%rip), %rdi     # 0x39fd0
leaq 0x1ee88(%rip), %rsi     # 0x2a522
callq 0x3290
movq %rax, -0x1bb0(%rbp)
jmp 0xb6a8
movq -0x1bb0(%rbp), %rdi
movq 0x2e902(%rip), %rsi     # 0x39fb8
callq 0x32e0
jmp 0xb6bd
leaq -0x4f8(%rbp), %rdi
callq 0xfa60
leaq -0x530(%rbp), %rdi
callq 0xfa60
leaq -0x20(%rbp), %rdi
leaq -0x38(%rbp), %rsi
callq 0x3440
leaq -0x580(%rbp), %rdi
leaq -0x318(%rbp), %rsi
callq 0x51c0
jmp 0xb6f7
leaq -0x580(%rbp), %rax
movq %rax, -0x538(%rbp)
movq -0x538(%rbp), %rsi
leaq -0x6e0(%rbp), %rdi
callq 0x12fd0
jmp 0xb71a
movq -0x538(%rbp), %rsi
leaq -0x840(%rbp), %rdi
callq 0x13060
jmp 0xb72f
jmp 0xb731
leaq -0x6e0(%rbp), %rdi
leaq -0x840(%rbp), %rsi
callq 0x13110
movb %al, -0x1bb1(%rbp)
jmp 0xb74c
movb -0x1bb1(%rbp), %al
testb $0x1, %al
jne 0xba47
jmp 0xb75c
leaq -0x840(%rbp), %rdi
callq 0x135b0
leaq -0x6e0(%rbp), %rdi
callq 0x135b0
leaq -0x580(%rbp), %rdi
callq 0xed50
jmp 0xbbf8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc8(%rbp)
movl %eax, -0xcc(%rbp)
leaq -0xb9(%rbp), %rdi
callq 0x3310
jmp 0xd6fe
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc8(%rbp)
movl %eax, -0xcc(%rbp)
leaq -0xf1(%rbp), %rdi
callq 0x3310
jmp 0xb97d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc8(%rbp)
movl %eax, -0xcc(%rbp)
leaq -0x119(%rbp), %rdi
callq 0x3310
jmp 0xb971
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc8(%rbp)
movl %eax, -0xcc(%rbp)
leaq -0x141(%rbp), %rdi
callq 0x3310
jmp 0xb965
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc8(%rbp)
movl %eax, -0xcc(%rbp)
jmp 0xb843
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc8(%rbp)
movl %eax, -0xcc(%rbp)
leaq -0x188(%rbp), %rdi
callq 0x3150
leaq -0x189(%rbp), %rdi
callq 0x3310
jmp 0xb959
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc8(%rbp)
movl %eax, -0xcc(%rbp)
jmp 0xb886
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc8(%rbp)
movl %eax, -0xcc(%rbp)
leaq -0x1d0(%rbp), %rdi
callq 0x3150
leaq -0x1d1(%rbp), %rdi
callq 0x3310
jmp 0xb94d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc8(%rbp)
movl %eax, -0xcc(%rbp)
jmp 0xb8c9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc8(%rbp)
movl %eax, -0xcc(%rbp)
leaq -0x218(%rbp), %rdi
callq 0x3150
leaq -0x219(%rbp), %rdi
callq 0x3310
jmp 0xb941
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc8(%rbp)
movl %eax, -0xcc(%rbp)
jmp 0xb909
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc8(%rbp)
movl %eax, -0xcc(%rbp)
leaq -0x260(%rbp), %rdi
callq 0x3150
leaq -0x261(%rbp), %rdi
callq 0x3310
jmp 0xb935
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc8(%rbp)
movl %eax, -0xcc(%rbp)
leaq -0x240(%rbp), %rdi
callq 0x3150
leaq -0x1f8(%rbp), %rdi
callq 0x3150
leaq -0x1b0(%rbp), %rdi
callq 0x3150
leaq -0x168(%rbp), %rdi
callq 0x3150
leaq -0x140(%rbp), %rdi
callq 0x3150
leaq -0x118(%rbp), %rdi
callq 0x3150
leaq -0xf0(%rbp), %rdi
callq 0x3150
leaq -0xb8(%rbp), %rdi
callq 0x3150
jmp 0xd6fe
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc8(%rbp)
movl %eax, -0xcc(%rbp)
leaq -0x410(%rbp), %rdi
callq 0x12f30
jmp 0xd6fe
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc8(%rbp)
movl %eax, -0xcc(%rbp)
jmp 0xd6f2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc8(%rbp)
movl %eax, -0xcc(%rbp)
jmp 0xd6e6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc8(%rbp)
movl %eax, -0xcc(%rbp)
jmp 0xd6ce
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc8(%rbp)
movl %eax, -0xcc(%rbp)
jmp 0xbbe7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc8(%rbp)
movl %eax, -0xcc(%rbp)
jmp 0xbbdb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc8(%rbp)
movl %eax, -0xcc(%rbp)
leaq -0x840(%rbp), %rdi
callq 0x135b0
jmp 0xbbdb
leaq -0x6e0(%rbp), %rdi
callq 0x131a0
movq %rdx, -0x1bc0(%rbp)
movl %eax, -0x1bb8(%rbp)
jmp 0xba62
movq -0x1bc0(%rbp), %rax
movl -0x1bb8(%rbp), %ecx
movl %ecx, -0x858(%rbp)
movq %rax, -0x850(%rbp)
leaq -0x858(%rbp), %rax
movq %rax, -0x848(%rbp)
movq -0x848(%rbp), %rax
movq 0x8(%rax), %rdi
movabsq $0xffffffffffffff, %rsi # imm = 0xFFFFFFFFFFFFFF
callq 0x24450
movq %rax, -0x1bc8(%rbp)
jmp 0xbaad
movq -0x1bc8(%rbp), %rax
movq %rax, -0x860(%rbp)
movq -0x860(%rbp), %rsi
xorl %eax, %eax
movl %eax, %edx
leaq -0x98(%rbp), %rdi
callq 0x26860
movq %rax, -0x1bd0(%rbp)
jmp 0xbadb
movq -0x1bd0(%rbp), %rax
cmpq $0x0, %rax
jne 0xbb24
movq -0x848(%rbp), %rsi
leaq -0x4f8(%rbp), %rdi
callq 0x10680
movb %dl, -0x1bd9(%rbp)
movq %rax, -0x1bd8(%rbp)
jmp 0xbb0a
movb -0x1bd9(%rbp), %al
movq -0x1bd8(%rbp), %rcx
movq %rcx, -0x870(%rbp)
movb %al, -0x868(%rbp)
movq -0x860(%rbp), %rsi
xorl %eax, %eax
movl %eax, %edx
leaq -0x98(%rbp), %rdi
callq 0x26860
movq %rax, -0x1be8(%rbp)
jmp 0xbb44
movq -0x848(%rbp), %rax
movups (%rax), %xmm0
movaps %xmm0, -0x880(%rbp)
movl -0x880(%rbp), %esi
movq -0x878(%rbp), %rdx
leaq -0x318(%rbp), %rdi
callq 0x4450
movq %rax, -0x1bf0(%rbp)
jmp 0xbb77
movq -0x1be8(%rbp), %rax
movq -0x1bf0(%rbp), %rcx
cmpq %rcx, %rax
je 0xbbc6
movq -0x848(%rbp), %rsi
leaq -0x530(%rbp), %rdi
callq 0x10680
movb %dl, -0x1bf9(%rbp)
movq %rax, -0x1bf8(%rbp)
jmp 0xbbac
movb -0x1bf9(%rbp), %al
movq -0x1bf8(%rbp), %rcx
movq %rcx, -0x890(%rbp)
movb %al, -0x888(%rbp)
jmp 0xbbc8
leaq -0x6e0(%rbp), %rdi
callq 0x131d0
jmp 0xbbd6
jmp 0xb731
leaq -0x6e0(%rbp), %rdi
callq 0x135b0
leaq -0x580(%rbp), %rdi
callq 0xed50
jmp 0xd6ce
leaq -0x30(%rbp), %rdi
leaq -0x38(%rbp), %rsi
callq 0x3440
leaq -0x8b1(%rbp), %rdi
movq %rdi, -0x1c08(%rbp)
callq 0x3490
movq -0x1c08(%rbp), %rdx
leaq 0x1ee85(%rip), %rsi     # 0x2aaab
leaq -0x8b0(%rbp), %rdi
callq 0x33b0
jmp 0xbc34
leaq -0x8b0(%rbp), %rdi
leaq -0x20(%rbp), %rsi
leaq -0x30(%rbp), %rdx
callq 0xd710
jmp 0xbc4a
leaq -0x8b0(%rbp), %rdi
callq 0x3150
leaq -0x8b1(%rbp), %rdi
callq 0x3310
movq 0x2e367(%rip), %rdi     # 0x39fd0
leaq 0x1e8d0(%rip), %rsi     # 0x2a540
callq 0x3290
movq %rax, -0x1c10(%rbp)
jmp 0xbc7e
leaq -0x4f8(%rbp), %rdi
callq 0x13600
movq -0x1c10(%rbp), %rdi
movq %rax, %rsi
callq 0x3060
movq %rax, -0x1c18(%rbp)
jmp 0xbca2
movq -0x1c18(%rbp), %rdi
movq 0x2e308(%rip), %rsi     # 0x39fb8
callq 0x32e0
jmp 0xbcb7
movq 0x2e312(%rip), %rdi     # 0x39fd0
leaq 0x1e89a(%rip), %rsi     # 0x2a55f
callq 0x3290
movq %rax, -0x1c20(%rbp)
jmp 0xbcd3
leaq -0x530(%rbp), %rdi
callq 0x13600
movq -0x1c20(%rbp), %rdi
movq %rax, %rsi
callq 0x3060
movq %rax, -0x1c28(%rbp)
jmp 0xbcf7
movq -0x1c28(%rbp), %rdi
movq 0x2e2b3(%rip), %rsi     # 0x39fb8
callq 0x32e0
jmp 0xbd0c
movq 0x2e2bd(%rip), %rdi     # 0x39fd0
leaq 0x1e872(%rip), %rsi     # 0x2a58c
callq 0x3290
movq %rax, -0x1c30(%rbp)
jmp 0xbd28
movq -0x1c30(%rbp), %rdi
movq 0x2e282(%rip), %rsi     # 0x39fb8
callq 0x32e0
jmp 0xbd3d
leaq -0x20(%rbp), %rdi
leaq -0x38(%rbp), %rsi
callq 0x3440
movq $0x0, -0x8c0(%rbp)
movq $0x0, -0x8c8(%rbp)
leaq -0x918(%rbp), %rdi
leaq -0x318(%rbp), %rsi
callq 0x4cb0
jmp 0xbd75
leaq -0x918(%rbp), %rax
movq %rax, -0x8d0(%rbp)
movq -0x8d0(%rbp), %rsi
leaq -0x9a8(%rbp), %rdi
callq 0x13620
jmp 0xbd98
movq -0x8d0(%rbp), %rsi
leaq -0xa38(%rbp), %rdi
callq 0x136b0
jmp 0xbdad
jmp 0xbdaf
leaq -0x9a8(%rbp), %rdi
leaq -0xa38(%rbp), %rsi
callq 0x13760
movb %al, -0x1c31(%rbp)
jmp 0xbdca
movb -0x1c31(%rbp), %al
testb $0x1, %al
jne 0xbe94
jmp 0xbdda
leaq -0xa38(%rbp), %rdi
callq 0x13b40
leaq -0x9a8(%rbp), %rdi
callq 0x13b40
leaq -0x918(%rbp), %rdi
callq 0xed70
jmp 0xbf19
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc8(%rbp)
movl %eax, -0xcc(%rbp)
jmp 0xbe35
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc8(%rbp)
movl %eax, -0xcc(%rbp)
leaq -0x8b0(%rbp), %rdi
callq 0x3150
leaq -0x8b1(%rbp), %rdi
callq 0x3310
jmp 0xd6ce
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc8(%rbp)
movl %eax, -0xcc(%rbp)
jmp 0xbf08
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc8(%rbp)
movl %eax, -0xcc(%rbp)
jmp 0xbefc
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc8(%rbp)
movl %eax, -0xcc(%rbp)
leaq -0xa38(%rbp), %rdi
callq 0x13b40
jmp 0xbefc
leaq -0x9a8(%rbp), %rdi
callq 0x137b0
movq %rdx, -0x1c40(%rbp)
movl %eax, -0x1c38(%rbp)
jmp 0xbeaf
movq -0x1c40(%rbp), %rax
movl -0x1c38(%rbp), %ecx
movl %ecx, -0xa50(%rbp)
movq %rax, -0xa48(%rbp)
leaq -0xa50(%rbp), %rax
movq %rax, -0xa40(%rbp)
movq -0x8c0(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x8c0(%rbp)
leaq -0x9a8(%rbp), %rdi
callq 0x137f0
jmp 0xbef7
jmp 0xbdaf
leaq -0x9a8(%rbp), %rdi
callq 0x13b40
leaq -0x918(%rbp), %rdi
callq 0xed70
jmp 0xd6ce
leaq -0x30(%rbp), %rdi
leaq -0x38(%rbp), %rsi
callq 0x3440
leaq -0xa71(%rbp), %rdi
movq %rdi, -0x1c48(%rbp)
callq 0x3490
movq -0x1c48(%rbp), %rdx
leaq 0x1eb64(%rip), %rsi     # 0x2aaab
leaq -0xa70(%rbp), %rdi
callq 0x33b0
jmp 0xbf55
leaq -0xa70(%rbp), %rdi
leaq -0x20(%rbp), %rsi
leaq -0x30(%rbp), %rdx
callq 0xd710
jmp 0xbf6b
leaq -0xa70(%rbp), %rdi
callq 0x3150
leaq -0xa71(%rbp), %rdi
callq 0x3310
movq 0x2e046(%rip), %rdi     # 0x39fd0
leaq 0x1e60b(%rip), %rsi     # 0x2a59c
callq 0x3290
movq %rax, -0x1c50(%rbp)
jmp 0xbf9f
movq -0x1c50(%rbp), %rdi
movq -0x8c0(%rbp), %rsi
callq 0x3060
movq %rax, -0x1c58(%rbp)
jmp 0xbfbb
movq -0x1c58(%rbp), %rdi
movq 0x2dfef(%rip), %rsi     # 0x39fb8
callq 0x32e0
jmp 0xbfd0
movq 0x2dff9(%rip), %rdi     # 0x39fd0
leaq 0x1e5d0(%rip), %rsi     # 0x2a5ae
callq 0x3290
movq %rax, -0x1c60(%rbp)
jmp 0xbfec
movq -0x1c60(%rbp), %rdi
movq 0x2dfbe(%rip), %rsi     # 0x39fb8
callq 0x32e0
jmp 0xc001
leaq -0x20(%rbp), %rdi
leaq -0x38(%rbp), %rsi
callq 0x3440
leaq -0xac8(%rbp), %rdi
leaq -0x318(%rbp), %rsi
callq 0x51c0
jmp 0xc023
leaq -0xac8(%rbp), %rax
movq %rax, -0xa80(%rbp)
movq -0xa80(%rbp), %rsi
leaq -0xc28(%rbp), %rdi
callq 0x12fd0
jmp 0xc046
movq -0xa80(%rbp), %rsi
leaq -0xd88(%rbp), %rdi
callq 0x13060
jmp 0xc05b
jmp 0xc05d
leaq -0xc28(%rbp), %rdi
leaq -0xd88(%rbp), %rsi
callq 0x13110
movb %al, -0x1c61(%rbp)
jmp 0xc078
movb -0x1c61(%rbp), %al
testb $0x1, %al
jne 0xc142
jmp 0xc088
leaq -0xd88(%rbp), %rdi
callq 0x135b0
leaq -0xc28(%rbp), %rdi
callq 0x135b0
leaq -0xac8(%rbp), %rdi
callq 0xed50
jmp 0xc1c7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc8(%rbp)
movl %eax, -0xcc(%rbp)
jmp 0xc0e3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc8(%rbp)
movl %eax, -0xcc(%rbp)
leaq -0xa70(%rbp), %rdi
callq 0x3150
leaq -0xa71(%rbp), %rdi
callq 0x3310
jmp 0xd6ce
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc8(%rbp)
movl %eax, -0xcc(%rbp)
jmp 0xc1b6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc8(%rbp)
movl %eax, -0xcc(%rbp)
jmp 0xc1aa
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc8(%rbp)
movl %eax, -0xcc(%rbp)
leaq -0xd88(%rbp), %rdi
callq 0x135b0
jmp 0xc1aa
leaq -0xc28(%rbp), %rdi
callq 0x131a0
movq %rdx, -0x1c70(%rbp)
movl %eax, -0x1c68(%rbp)
jmp 0xc15d
movq -0x1c70(%rbp), %rax
movl -0x1c68(%rbp), %ecx
movl %ecx, -0xda0(%rbp)
movq %rax, -0xd98(%rbp)
leaq -0xda0(%rbp), %rax
movq %rax, -0xd90(%rbp)
movq -0x8c8(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x8c8(%rbp)
leaq -0xc28(%rbp), %rdi
callq 0x131d0
jmp 0xc1a5
jmp 0xc05d
leaq -0xc28(%rbp), %rdi
callq 0x135b0
leaq -0xac8(%rbp), %rdi
callq 0xed50
jmp 0xd6ce
leaq -0x30(%rbp), %rdi
leaq -0x38(%rbp), %rsi
callq 0x3440
leaq -0xdc1(%rbp), %rdi
movq %rdi, -0x1c78(%rbp)
callq 0x3490
movq -0x1c78(%rbp), %rdx
leaq 0x1e8b6(%rip), %rsi     # 0x2aaab
leaq -0xdc0(%rbp), %rdi
callq 0x33b0
jmp 0xc203
leaq -0xdc0(%rbp), %rdi
leaq -0x20(%rbp), %rsi
leaq -0x30(%rbp), %rdx
callq 0xd710
jmp 0xc219
leaq -0xdc0(%rbp), %rdi
callq 0x3150
leaq -0xdc1(%rbp), %rdi
callq 0x3310
movq 0x2dd98(%rip), %rdi     # 0x39fd0
leaq 0x1e37f(%rip), %rsi     # 0x2a5be
callq 0x3290
movq %rax, -0x1c80(%rbp)
jmp 0xc24d
movq -0x1c80(%rbp), %rdi
movq -0x8c8(%rbp), %rsi
callq 0x3060
movq %rax, -0x1c88(%rbp)
jmp 0xc269
movq -0x1c88(%rbp), %rdi
movq 0x2dd41(%rip), %rsi     # 0x39fb8
callq 0x32e0
jmp 0xc27e
movq 0x2dd4b(%rip), %rdi     # 0x39fd0
leaq 0x1e344(%rip), %rsi     # 0x2a5d0
callq 0x3290
movq %rax, -0x1c90(%rbp)
jmp 0xc29a
movq -0x1c90(%rbp), %rdi
movq 0x2dd10(%rip), %rsi     # 0x39fb8
callq 0x32e0
jmp 0xc2af
leaq -0x318(%rbp), %rdi
callq 0x9c70
jmp 0xc2bd
movq $0x0, -0xdd0(%rbp)
leaq -0x4f8(%rbp), %rax
movq %rax, -0xdd8(%rbp)
movq -0xdd8(%rbp), %rdi
callq 0x106c0
movq %rax, -0xde0(%rbp)
movq -0xdd8(%rbp), %rdi
callq 0x106f0
movq %rax, -0xde8(%rbp)
leaq -0xde0(%rbp), %rdi
leaq -0xde8(%rbp), %rsi
callq 0x10720
testb $0x1, %al
jne 0xc318
jmp 0xc5b4
leaq -0xde0(%rbp), %rdi
callq 0x10750
movq %rax, -0xdf0(%rbp)
movq -0xdf0(%rbp), %rax
movups (%rax), %xmm0
movaps %xmm0, -0xe00(%rbp)
movl -0xe00(%rbp), %esi
movq -0xdf8(%rbp), %rdx
leaq -0x318(%rbp), %rdi
callq 0x4450
movq %rax, -0x1c98(%rbp)
jmp 0xc35e
movq -0x1c98(%rbp), %rax
cmpq $0x0, %rax
je 0xc5a1
movq -0xdd0(%rbp), %rax
incq %rax
movq %rax, -0xdd0(%rbp)
movq -0xdf0(%rbp), %rsi
leaq -0x1060(%rbp), %rdi
callq 0x3a50
jmp 0xc395
leaq 0x1e24b(%rip), %rsi     # 0x2a5e7
leaq -0x1040(%rbp), %rdi
leaq -0x1060(%rbp), %rdx
callq 0x13bc0
jmp 0xc3b1
leaq 0x1e238(%rip), %rdx     # 0x2a5f0
leaq -0x1020(%rbp), %rdi
leaq -0x1040(%rbp), %rsi
callq 0x13b70
jmp 0xc3cd
leaq -0x1000(%rbp), %rdi
leaq -0x1020(%rbp), %rsi
movl $0x10, %edx
callq 0x34d0
jmp 0xc3e7
leaq -0x1020(%rbp), %rdi
callq 0x3150
leaq -0x1040(%rbp), %rdi
callq 0x3150
leaq -0x1060(%rbp), %rdi
callq 0x3150
movq -0xdf0(%rbp), %rsi
leaq -0x1080(%rbp), %rdi
callq 0x3a50
jmp 0xc420
movq -0xdf0(%rbp), %rax
movups (%rax), %xmm0
movaps %xmm0, -0x10a0(%rbp)
movl -0x10a0(%rbp), %edi
movq -0x1098(%rbp), %rsi
callq 0x7680
movq %rdx, -0x1ca8(%rbp)
movl %eax, -0x1c9c(%rbp)
jmp 0xc452
movq -0x1ca8(%rbp), %rax
movl -0x1c9c(%rbp), %ecx
movl %ecx, -0x1090(%rbp)
movq %rax, -0x1088(%rbp)
movl -0x1090(%rbp), %ecx
movq -0x1088(%rbp), %r8
leaq -0x4c0(%rbp), %rdi
leaq -0x1080(%rbp), %rsi
leaq -0x1000(%rbp), %rdx
movl $0x6, %r9d
callq 0x7820
jmp 0xc49b
leaq -0x1080(%rbp), %rdi
callq 0x3150
leaq -0x1000(%rbp), %rdi
callq 0x3400
jmp 0xc5a1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc8(%rbp)
movl %eax, -0xcc(%rbp)
jmp 0xc4ea
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc8(%rbp)
movl %eax, -0xcc(%rbp)
leaq -0xdc0(%rbp), %rdi
callq 0x3150
leaq -0xdc1(%rbp), %rdi
callq 0x3310
jmp 0xd6ce
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc8(%rbp)
movl %eax, -0xcc(%rbp)
jmp 0xc54d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc8(%rbp)
movl %eax, -0xcc(%rbp)
jmp 0xc541
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc8(%rbp)
movl %eax, -0xcc(%rbp)
leaq -0x1020(%rbp), %rdi
callq 0x3150
leaq -0x1040(%rbp), %rdi
callq 0x3150
leaq -0x1060(%rbp), %rdi
callq 0x3150
jmp 0xd6ce
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc8(%rbp)
movl %eax, -0xcc(%rbp)
jmp 0xc590
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc8(%rbp)
movl %eax, -0xcc(%rbp)
leaq -0x1080(%rbp), %rdi
callq 0x3150
leaq -0x1000(%rbp), %rdi
callq 0x3400
jmp 0xd6ce
jmp 0xc5a3
leaq -0xde0(%rbp), %rdi
callq 0x10780
jmp 0xc2fc
movq 0x2da15(%rip), %rdi     # 0x39fd0
leaq 0x1e033(%rip), %rsi     # 0x2a5f5
callq 0x3290
movq %rax, -0x1cb0(%rbp)
jmp 0xc5d0
movq -0x1cb0(%rbp), %rdi
movq -0xdd0(%rbp), %rsi
callq 0x3060
movq %rax, -0x1cb8(%rbp)
jmp 0xc5ec
movq -0x1cb8(%rbp), %rdi
movq 0x2d9be(%rip), %rsi     # 0x39fb8
callq 0x32e0
jmp 0xc601
movq $0x0, -0x10a8(%rbp)
movq $0x0, -0x10b0(%rbp)
movq $0x0, -0x10b8(%rbp)
leaq -0x530(%rbp), %rax
movq %rax, -0x10c0(%rbp)
movq -0x10c0(%rbp), %rdi
callq 0x106c0
movq %rax, -0x10c8(%rbp)
movq -0x10c0(%rbp), %rdi
callq 0x106f0
movq %rax, -0x10d0(%rbp)
leaq -0x10c8(%rbp), %rdi
leaq -0x10d0(%rbp), %rsi
callq 0x10720
testb $0x1, %al
jne 0xc672
jmp 0xc9b4
leaq -0x10c8(%rbp), %rdi
callq 0x10750
movq %rax, -0x10d8(%rbp)
movq -0x10d8(%rbp), %rax
movq 0x8(%rax), %rdi
movabsq $0xffffffffffffff, %rsi # imm = 0xFFFFFFFFFFFFFF
callq 0x24450
movq %rax, -0x1cc0(%rbp)
jmp 0xc6a8
movq -0x1cc0(%rbp), %rax
movq %rax, -0x10e0(%rbp)
movq -0x10d8(%rbp), %rax
movups (%rax), %xmm0
movaps %xmm0, -0x10f0(%rbp)
movl -0x10f0(%rbp), %esi
movq -0x10e8(%rbp), %rdx
leaq -0x318(%rbp), %rdi
callq 0x4450
movq %rax, -0x1cc8(%rbp)
jmp 0xc6e9
movq -0x10e0(%rbp), %rsi
xorl %eax, %eax
movl %eax, %edx
leaq -0x98(%rbp), %rdi
callq 0x26860
movq %rax, -0x1cd0(%rbp)
jmp 0xc709
movq -0x1cc8(%rbp), %rax
movq -0x1cd0(%rbp), %rcx
cmpq %rcx, %rax
je 0xc9a1
movq -0x10a8(%rbp), %rax
incq %rax
movq %rax, -0x10a8(%rbp)
movq -0x10d8(%rbp), %rsi
leaq -0x1350(%rbp), %rdi
callq 0x3a50
jmp 0xc746
leaq 0x1dee9(%rip), %rsi     # 0x2a636
leaq -0x1330(%rbp), %rdi
leaq -0x1350(%rbp), %rdx
callq 0x13bc0
jmp 0xc762
leaq 0x1de87(%rip), %rdx     # 0x2a5f0
leaq -0x1310(%rbp), %rdi
leaq -0x1330(%rbp), %rsi
callq 0x13b70
jmp 0xc77e
leaq -0x12f0(%rbp), %rdi
leaq -0x1310(%rbp), %rsi
movl $0x10, %edx
callq 0x34d0
jmp 0xc798
leaq -0x1310(%rbp), %rdi
callq 0x3150
leaq -0x1330(%rbp), %rdi
callq 0x3150
leaq -0x1350(%rbp), %rdi
callq 0x3150
movq -0x10d8(%rbp), %rsi
leaq -0x1370(%rbp), %rdi
callq 0x3a50
jmp 0xc7d1
movq -0x10d8(%rbp), %rax
movups (%rax), %xmm0
movaps %xmm0, -0x1390(%rbp)
movl -0x1390(%rbp), %edi
movq -0x1388(%rbp), %rsi
callq 0x7680
movq %rdx, -0x1ce0(%rbp)
movl %eax, -0x1cd4(%rbp)
jmp 0xc803
movq -0x1ce0(%rbp), %rax
movl -0x1cd4(%rbp), %ecx
movl %ecx, -0x1380(%rbp)
movq %rax, -0x1378(%rbp)
movl -0x1380(%rbp), %ecx
movq -0x1378(%rbp), %r8
leaq -0x4c0(%rbp), %rdi
leaq -0x1370(%rbp), %rsi
leaq -0x12f0(%rbp), %rdx
movl $0x6, %r9d
callq 0x7820
jmp 0xc84c
leaq -0x1370(%rbp), %rdi
callq 0x3150
movq -0x10d8(%rbp), %rax
movups (%rax), %xmm0
movaps %xmm0, -0x13a0(%rbp)
movl -0x13a0(%rbp), %esi
movq -0x1398(%rbp), %rdx
leaq -0x318(%rbp), %rdi
callq 0x4450
movq %rax, -0x1ce8(%rbp)
jmp 0xc88b
movq -0x10e0(%rbp), %rsi
xorl %eax, %eax
movl %eax, %edx
leaq -0x98(%rbp), %rdi
callq 0x26860
movq %rax, -0x1cf0(%rbp)
jmp 0xc8ab
movq -0x1ce8(%rbp), %rax
movq -0x1cf0(%rbp), %rcx
cmpq %rcx, %rax
jbe 0xc970
movq -0x10b0(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x10b0(%rbp)
jmp 0xc982
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc8(%rbp)
movl %eax, -0xcc(%rbp)
jmp 0xc92b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc8(%rbp)
movl %eax, -0xcc(%rbp)
jmp 0xc91f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc8(%rbp)
movl %eax, -0xcc(%rbp)
leaq -0x1310(%rbp), %rdi
callq 0x3150
leaq -0x1330(%rbp), %rdi
callq 0x3150
leaq -0x1350(%rbp), %rdi
callq 0x3150
jmp 0xd6ce
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc8(%rbp)
movl %eax, -0xcc(%rbp)
jmp 0xc990
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc8(%rbp)
movl %eax, -0xcc(%rbp)
leaq -0x1370(%rbp), %rdi
callq 0x3150
jmp 0xc990
movq -0x10b8(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x10b8(%rbp)
leaq -0x12f0(%rbp), %rdi
callq 0x3400
jmp 0xc9a1
leaq -0x12f0(%rbp), %rdi
callq 0x3400
jmp 0xd6ce
jmp 0xc9a3
leaq -0x10c8(%rbp), %rdi
callq 0x10780
jmp 0xc656
movq 0x2d615(%rip), %rdi     # 0x39fd0
leaq 0x1dc7d(%rip), %rsi     # 0x2a63f
callq 0x3290
movq %rax, -0x1cf8(%rbp)
jmp 0xc9d0
movq -0x1cf8(%rbp), %rdi
movq -0x10a8(%rbp), %rsi
callq 0x3060
movq %rax, -0x1d00(%rbp)
jmp 0xc9ec
movq -0x1d00(%rbp), %rdi
movq 0x2d5be(%rip), %rsi     # 0x39fb8
callq 0x32e0
jmp 0xca01
movq 0x2d5c8(%rip), %rdi     # 0x39fd0
leaq 0x1dc6c(%rip), %rsi     # 0x2a67b
callq 0x3290
movq %rax, -0x1d08(%rbp)
jmp 0xca1d
movq -0x1d08(%rbp), %rdi
movq -0x10b0(%rbp), %rsi
callq 0x3060
movq %rax, -0x1d10(%rbp)
jmp 0xca39
movq -0x1d10(%rbp), %rdi
movq 0x2d571(%rip), %rsi     # 0x39fb8
callq 0x32e0
jmp 0xca4e
movq 0x2d57b(%rip), %rdi     # 0x39fd0
leaq 0x1dc34(%rip), %rsi     # 0x2a690
callq 0x3290
movq %rax, -0x1d18(%rbp)
jmp 0xca6a
movq -0x1d18(%rbp), %rdi
movq -0x10b8(%rbp), %rsi
callq 0x3060
movq %rax, -0x1d20(%rbp)
jmp 0xca86
movq -0x1d20(%rbp), %rdi
movq 0x2d524(%rip), %rsi     # 0x39fb8
callq 0x32e0
jmp 0xca9b
movq $0x0, -0x13d8(%rbp)
xorl %eax, %eax
movl %eax, %edx
leaq -0x98(%rbp), %rdi
leaq -0x13d0(%rbp), %rsi
callq 0x273d0
jmp 0xcabf
jmp 0xcac1
movq $0x0, -0x13e0(%rbp)
movq $0x0, -0x13e8(%rbp)
movq $0x0, -0x13f0(%rbp)
leaq -0x13d0(%rbp), %rdi
leaq -0x13e0(%rbp), %rsi
leaq -0x13e8(%rbp), %rdx
leaq -0x13f0(%rbp), %rcx
callq 0x275d0
jmp 0xcb05
movq -0x13e0(%rbp), %rdi
movabsq $0xffffffffffffff, %rsi # imm = 0xFFFFFFFFFFFFFF
callq 0x24520
movq %rax, -0x1d28(%rbp)
jmp 0xcb24
movq -0x1d28(%rbp), %rax
movq %rax, -0x13f8(%rbp)
movq -0x13f8(%rbp), %rdx
leaq -0x1408(%rbp), %rdi
movl $0x1c, %esi
callq 0x4200
jmp 0xcb4c
movups -0x1408(%rbp), %xmm0
movaps %xmm0, -0x1420(%rbp)
movl -0x1420(%rbp), %esi
movq -0x1418(%rbp), %rdx
leaq -0x318(%rbp), %rdi
callq 0x4450
movq %rax, -0x1d30(%rbp)
jmp 0xcb7c
movq -0x1d30(%rbp), %rax
cmpq $0x0, %rax
jne 0xcd79
movq -0x13d8(%rbp), %rax
incq %rax
movq %rax, -0x13d8(%rbp)
leaq -0x1680(%rbp), %rdi
leaq -0x1408(%rbp), %rsi
callq 0x3a50
jmp 0xcbb3
leaq 0x1daec(%rip), %rsi     # 0x2a6a6
leaq -0x1660(%rbp), %rdi
leaq -0x1680(%rbp), %rdx
callq 0x13bc0
jmp 0xcbcf
leaq 0x1da1a(%rip), %rdx     # 0x2a5f0
leaq -0x1640(%rbp), %rdi
leaq -0x1660(%rbp), %rsi
callq 0x13b70
jmp 0xcbeb
leaq -0x1620(%rbp), %rdi
leaq -0x1640(%rbp), %rsi
movl $0x10, %edx
callq 0x34d0
jmp 0xcc05
leaq -0x1640(%rbp), %rdi
callq 0x3150
leaq -0x1660(%rbp), %rdi
callq 0x3150
leaq -0x1680(%rbp), %rdi
callq 0x3150
leaq -0x16a0(%rbp), %rdi
leaq -0x1408(%rbp), %rsi
callq 0x3a50
jmp 0xcc3e
movups -0x1408(%rbp), %xmm0
movaps %xmm0, -0x16c0(%rbp)
movl -0x16c0(%rbp), %edi
movq -0x16b8(%rbp), %rsi
callq 0x7680
movq %rdx, -0x1d40(%rbp)
movl %eax, -0x1d34(%rbp)
jmp 0xcc6d
movq -0x1d40(%rbp), %rax
movl -0x1d34(%rbp), %ecx
movl %ecx, -0x16b0(%rbp)
movq %rax, -0x16a8(%rbp)
movl -0x16b0(%rbp), %ecx
movq -0x16a8(%rbp), %r8
leaq -0x4c0(%rbp), %rdi
leaq -0x16a0(%rbp), %rsi
leaq -0x1620(%rbp), %rdx
movl $0x6, %r9d
callq 0x7820
jmp 0xccb6
leaq -0x16a0(%rbp), %rdi
callq 0x3150
leaq -0x1620(%rbp), %rdi
callq 0x3400
jmp 0xcd79
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc8(%rbp)
movl %eax, -0xcc(%rbp)
jmp 0xcd25
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc8(%rbp)
movl %eax, -0xcc(%rbp)
jmp 0xcd19
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc8(%rbp)
movl %eax, -0xcc(%rbp)
leaq -0x1640(%rbp), %rdi
callq 0x3150
leaq -0x1660(%rbp), %rdi
callq 0x3150
leaq -0x1680(%rbp), %rdi
callq 0x3150
jmp 0xd6ce
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc8(%rbp)
movl %eax, -0xcc(%rbp)
jmp 0xcd68
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc8(%rbp)
movl %eax, -0xcc(%rbp)
leaq -0x16a0(%rbp), %rdi
callq 0x3150
leaq -0x1620(%rbp), %rdi
callq 0x3400
jmp 0xd6ce
jmp 0xcd7b
leaq -0x13d0(%rbp), %rdi
callq 0x27680
movl %eax, -0x1d44(%rbp)
jmp 0xcd8f
movl -0x1d44(%rbp), %eax
cmpl $0x0, %eax
setne %al
xorb $-0x1, %al
testb $0x1, %al
jne 0xcac1
movq 0x2d224(%rip), %rdi     # 0x39fd0
leaq 0x1d8fc(%rip), %rsi     # 0x2a6af
callq 0x3290
movq %rax, -0x1d50(%rbp)
jmp 0xcdc1
movq -0x1d50(%rbp), %rdi
movq -0x13d8(%rbp), %rsi
callq 0x3060
movq %rax, -0x1d58(%rbp)
jmp 0xcddd
movq -0x1d58(%rbp), %rdi
movq 0x2d1cd(%rip), %rsi     # 0x39fb8
callq 0x32e0
jmp 0xcdf2
movq 0x2d1d7(%rip), %rdi     # 0x39fd0
leaq 0x1d8d0(%rip), %rsi     # 0x2a6d0
callq 0x3290
movq %rax, -0x1d60(%rbp)
jmp 0xce0e
movq -0x1d60(%rbp), %rdi
movq 0x2d19c(%rip), %rsi     # 0x39fb8
callq 0x32e0
jmp 0xce23
leaq -0x20(%rbp), %rdi
leaq -0x38(%rbp), %rsi
callq 0x3440
movq $0x0, -0x16c8(%rbp)
movq $0x0, -0x16d0(%rbp)
cmpq $0xf4240, -0x16d0(%rbp) # imm = 0xF4240
jae 0xd022
callq 0x30e0
movq %rax, %rdx
movabsq $0xffffffffffffff, %rax # imm = 0xFFFFFFFFFFFFFF
andq %rax, %rdx
leaq -0x16e0(%rbp), %rdi
movl $0x1c, %esi
callq 0x4200
jmp 0xce7f
movups -0x16e0(%rbp), %xmm0
movaps %xmm0, -0x1700(%rbp)
movl -0x1700(%rbp), %edi
movq -0x16f8(%rbp), %rsi
callq 0x7680
movq %rdx, -0x1d70(%rbp)
movl %eax, -0x1d64(%rbp)
jmp 0xceae
movq -0x1d70(%rbp), %rax
movl -0x1d64(%rbp), %ecx
movl %ecx, -0x16f0(%rbp)
movq %rax, -0x16e8(%rbp)
movl -0x16f0(%rbp), %esi
movq -0x16e8(%rbp), %rdx
leaq -0x318(%rbp), %rdi
callq 0x9be0
jmp 0xcee3
movq -0x16d8(%rbp), %rdi
movabsq $0xffffffffffffff, %rsi # imm = 0xFFFFFFFFFFFFFF
callq 0x24450
movq %rax, -0x1d78(%rbp)
jmp 0xcf02
movq -0x1d78(%rbp), %rax
movq %rax, -0x1708(%rbp)
movups -0x16e0(%rbp), %xmm0
movaps %xmm0, -0x1720(%rbp)
movl -0x1720(%rbp), %esi
movq -0x1718(%rbp), %rdx
leaq -0x318(%rbp), %rdi
callq 0x4450
movq %rax, -0x1d80(%rbp)
jmp 0xcf40
movq -0x1708(%rbp), %rsi
xorl %eax, %eax
movl %eax, %edx
leaq -0x98(%rbp), %rdi
callq 0x26860
movq %rax, -0x1d88(%rbp)
jmp 0xcf60
movq -0x1d80(%rbp), %rax
movq -0x1d88(%rbp), %rcx
cmpq %rcx, %rax
jb 0xcf75
jmp 0xcf94
leaq 0x1d779(%rip), %rdi     # 0x2a6f5
leaq 0x1d206(%rip), %rsi     # 0x2a189
movl $0x60e, %edx            # imm = 0x60E
leaq 0x1d7a3(%rip), %rcx     # 0x2a732
callq 0x3160
movups -0x16e0(%rbp), %xmm0
movaps %xmm0, -0x1730(%rbp)
movl -0x1730(%rbp), %esi
movq -0x1728(%rbp), %rdx
leaq -0x318(%rbp), %rdi
callq 0x4450
movq %rax, -0x1d90(%rbp)
jmp 0xcfc4
movq -0x1708(%rbp), %rsi
xorl %eax, %eax
movl %eax, %edx
leaq -0x98(%rbp), %rdi
callq 0x26860
movq %rax, -0x1d98(%rbp)
jmp 0xcfe4
movq -0x1d90(%rbp), %rax
movq -0x1d98(%rbp), %rcx
cmpq %rcx, %rax
je 0xd009
movq -0x16c8(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x16c8(%rbp)
jmp 0xd00b
movq -0x16d0(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x16d0(%rbp)
jmp 0xce46
leaq -0x30(%rbp), %rdi
leaq -0x38(%rbp), %rsi
callq 0x3440
leaq -0x1751(%rbp), %rdi
movq %rdi, -0x1da0(%rbp)
callq 0x3490
movq -0x1da0(%rbp), %rdx
leaq 0x1da5b(%rip), %rsi     # 0x2aaab
leaq -0x1750(%rbp), %rdi
callq 0x33b0
jmp 0xd05e
leaq -0x1750(%rbp), %rdi
leaq -0x20(%rbp), %rsi
leaq -0x30(%rbp), %rdx
callq 0xd710
jmp 0xd074
leaq -0x1750(%rbp), %rdi
callq 0x3150
leaq -0x1751(%rbp), %rdi
callq 0x3310
movq 0x2cf3d(%rip), %rdi     # 0x39fd0
leaq 0x1d6af(%rip), %rsi     # 0x2a749
callq 0x3290
movq %rax, -0x1da8(%rbp)
jmp 0xd0a8
movq -0x1da8(%rbp), %rdi
movq -0x16c8(%rbp), %rsi
callq 0x3060
movq %rax, -0x1db0(%rbp)
jmp 0xd0c4
movq -0x1db0(%rbp), %rdi
movq 0x2cee6(%rip), %rsi     # 0x39fb8
callq 0x32e0
jmp 0xd0d9
movq 0x2cef0(%rip), %rdi     # 0x39fd0
leaq 0x1d68c(%rip), %rsi     # 0x2a773
callq 0x3290
movq %rax, -0x1db8(%rbp)
jmp 0xd0f5
movq -0x1db8(%rbp), %rdi
movq 0x2ceb5(%rip), %rsi     # 0x39fb8
callq 0x32e0
jmp 0xd10a
movq $0x0, -0x8c8(%rbp)
leaq -0x20(%rbp), %rdi
leaq -0x38(%rbp), %rsi
callq 0x3440
leaq -0x17a8(%rbp), %rdi
leaq -0x318(%rbp), %rsi
callq 0x51c0
jmp 0xd137
leaq -0x17a8(%rbp), %rax
movq %rax, -0x1760(%rbp)
movq -0x1760(%rbp), %rsi
leaq -0x1908(%rbp), %rdi
callq 0x12fd0
jmp 0xd15a
movq -0x1760(%rbp), %rsi
leaq -0x1a68(%rbp), %rdi
callq 0x13060
jmp 0xd16f
jmp 0xd171
leaq -0x1908(%rbp), %rdi
leaq -0x1a68(%rbp), %rsi
callq 0x13110
movb %al, -0x1db9(%rbp)
jmp 0xd18c
movb -0x1db9(%rbp), %al
testb $0x1, %al
jne 0xd256
jmp 0xd19c
leaq -0x1a68(%rbp), %rdi
callq 0x135b0
leaq -0x1908(%rbp), %rdi
callq 0x135b0
leaq -0x17a8(%rbp), %rdi
callq 0xed50
jmp 0xd2db
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc8(%rbp)
movl %eax, -0xcc(%rbp)
jmp 0xd1f7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc8(%rbp)
movl %eax, -0xcc(%rbp)
leaq -0x1750(%rbp), %rdi
callq 0x3150
leaq -0x1751(%rbp), %rdi
callq 0x3310
jmp 0xd6ce
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc8(%rbp)
movl %eax, -0xcc(%rbp)
jmp 0xd2ca
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc8(%rbp)
movl %eax, -0xcc(%rbp)
jmp 0xd2be
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc8(%rbp)
movl %eax, -0xcc(%rbp)
leaq -0x1a68(%rbp), %rdi
callq 0x135b0
jmp 0xd2be
leaq -0x1908(%rbp), %rdi
callq 0x131a0
movq %rdx, -0x1dc8(%rbp)
movl %eax, -0x1dc0(%rbp)
jmp 0xd271
movq -0x1dc8(%rbp), %rax
movl -0x1dc0(%rbp), %ecx
movl %ecx, -0x1a80(%rbp)
movq %rax, -0x1a78(%rbp)
leaq -0x1a80(%rbp), %rax
movq %rax, -0x1a70(%rbp)
movq -0x8c8(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x8c8(%rbp)
leaq -0x1908(%rbp), %rdi
callq 0x131d0
jmp 0xd2b9
jmp 0xd171
leaq -0x1908(%rbp), %rdi
callq 0x135b0
leaq -0x17a8(%rbp), %rdi
callq 0xed50
jmp 0xd6ce
leaq -0x30(%rbp), %rdi
leaq -0x38(%rbp), %rsi
callq 0x3440
leaq -0x1aa1(%rbp), %rdi
movq %rdi, -0x1dd0(%rbp)
callq 0x3490
movq -0x1dd0(%rbp), %rdx
leaq 0x1d7a2(%rip), %rsi     # 0x2aaab
leaq -0x1aa0(%rbp), %rdi
callq 0x33b0
jmp 0xd317
leaq -0x1aa0(%rbp), %rdi
leaq -0x20(%rbp), %rsi
leaq -0x30(%rbp), %rdx
callq 0xd710
jmp 0xd32d
leaq -0x1aa0(%rbp), %rdi
callq 0x3150
leaq -0x1aa1(%rbp), %rdi
callq 0x3310
movq 0x2cc84(%rip), %rdi     # 0x39fd0
leaq 0x1d26b(%rip), %rsi     # 0x2a5be
callq 0x3290
movq %rax, -0x1dd8(%rbp)
jmp 0xd361
movq -0x1dd8(%rbp), %rdi
movq -0x8c8(%rbp), %rsi
callq 0x3060
movq %rax, -0x1de0(%rbp)
jmp 0xd37d
movq -0x1de0(%rbp), %rdi
movq 0x2cc2d(%rip), %rsi     # 0x39fb8
callq 0x32e0
jmp 0xd392
movq 0x2cc37(%rip), %rdi     # 0x39fd0
leaq 0x1d3f9(%rip), %rsi     # 0x2a799
callq 0x3290
movq %rax, -0x1de8(%rbp)
jmp 0xd3ae
movq -0x1de8(%rbp), %rdi
movq 0x2cbfc(%rip), %rsi     # 0x39fb8
callq 0x32e0
jmp 0xd3c3
leaq -0x20(%rbp), %rdi
leaq -0x38(%rbp), %rsi
callq 0x3440
movq $0x0, -0x1ab0(%rbp)
cmpq $0xf4240, -0x1ab0(%rbp) # imm = 0xF4240
jae 0xd596
callq 0x30e0
movq %rax, %rdx
movabsq $0xffffffffffffff, %rax # imm = 0xFFFFFFFFFFFFFF
andq %rax, %rdx
leaq -0x1ac0(%rbp), %rdi
movl $0x1c, %esi
callq 0x4200
jmp 0xd414
movq -0x1ab8(%rbp), %rdi
movabsq $0xffffffffffffff, %rsi # imm = 0xFFFFFFFFFFFFFF
callq 0x24450
movq %rax, -0x1df0(%rbp)
jmp 0xd433
movq -0x1df0(%rbp), %rax
movq %rax, -0x1ac8(%rbp)
movups -0x1ac0(%rbp), %xmm0
movaps %xmm0, -0x1ae0(%rbp)
movl -0x1ae0(%rbp), %esi
movq -0x1ad8(%rbp), %rdx
leaq -0x318(%rbp), %rdi
callq 0x4450
movq %rax, -0x1df8(%rbp)
jmp 0xd471
movq -0x1ac8(%rbp), %rsi
xorl %eax, %eax
movl %eax, %edx
leaq -0x98(%rbp), %rdi
callq 0x26860
movq %rax, -0x1e00(%rbp)
jmp 0xd491
movq -0x1df8(%rbp), %rax
movq -0x1e00(%rbp), %rcx
cmpq %rcx, %rax
jb 0xd4a6
jmp 0xd508
leaq 0x1d248(%rip), %rdi     # 0x2a6f5
leaq 0x1ccd5(%rip), %rsi     # 0x2a189
movl $0x625, %edx            # imm = 0x625
leaq 0x1d272(%rip), %rcx     # 0x2a732
callq 0x3160
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc8(%rbp)
movl %eax, -0xcc(%rbp)
jmp 0xd4f7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc8(%rbp)
movl %eax, -0xcc(%rbp)
leaq -0x1aa0(%rbp), %rdi
callq 0x3150
leaq -0x1aa1(%rbp), %rdi
callq 0x3310
jmp 0xd6ce
movups -0x1ac0(%rbp), %xmm0
movaps %xmm0, -0x1af0(%rbp)
movl -0x1af0(%rbp), %esi
movq -0x1ae8(%rbp), %rdx
leaq -0x318(%rbp), %rdi
callq 0x4450
movq %rax, -0x1e08(%rbp)
jmp 0xd538
movq -0x1ac8(%rbp), %rsi
xorl %eax, %eax
movl %eax, %edx
leaq -0x98(%rbp), %rdi
callq 0x26860
movq %rax, -0x1e10(%rbp)
jmp 0xd558
movq -0x1e08(%rbp), %rax
movq -0x1e10(%rbp), %rcx
cmpq %rcx, %rax
je 0xd57d
movq -0x16c8(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x16c8(%rbp)
jmp 0xd57f
movq -0x1ab0(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x1ab0(%rbp)
jmp 0xd3db
leaq -0x30(%rbp), %rdi
leaq -0x38(%rbp), %rsi
callq 0x3440
leaq -0x1b11(%rbp), %rdi
movq %rdi, -0x1e18(%rbp)
callq 0x3490
movq -0x1e18(%rbp), %rdx
leaq 0x1d4e7(%rip), %rsi     # 0x2aaab
leaq -0x1b10(%rbp), %rdi
callq 0x33b0
jmp 0xd5d2
leaq -0x1b10(%rbp), %rdi
leaq -0x20(%rbp), %rsi
leaq -0x30(%rbp), %rdx
callq 0xd710
jmp 0xd5e8
leaq -0x1b10(%rbp), %rdi
callq 0x3150
leaq -0x1b11(%rbp), %rdi
callq 0x3310
movq 0x2c9c9(%rip), %rdi     # 0x39fd0
leaq 0x1d13b(%rip), %rsi     # 0x2a749
callq 0x3290
movq %rax, -0x1e20(%rbp)
jmp 0xd61c
movq -0x1e20(%rbp), %rdi
movq -0x16c8(%rbp), %rsi
callq 0x3060
movq %rax, -0x1e28(%rbp)
jmp 0xd638
movq -0x1e28(%rbp), %rdi
movq 0x2c972(%rip), %rsi     # 0x39fb8
callq 0x32e0
jmp 0xd64d
movl $0x0, -0x4(%rbp)
leaq -0x530(%rbp), %rdi
callq 0xded0
leaq -0x4f8(%rbp), %rdi
callq 0xded0
leaq -0x4c0(%rbp), %rdi
callq 0x13c10
leaq -0x318(%rbp), %rdi
callq 0x13c10
movl -0x4(%rbp), %eax
addq $0x1e40, %rsp           # imm = 0x1E40
popq %rbp
retq
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc8(%rbp)
movl %eax, -0xcc(%rbp)
jmp 0xd6c2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc8(%rbp)
movl %eax, -0xcc(%rbp)
leaq -0x1b10(%rbp), %rdi
callq 0x3150
leaq -0x1b11(%rbp), %rdi
callq 0x3310
leaq -0x530(%rbp), %rdi
callq 0xded0
leaq -0x4f8(%rbp), %rdi
callq 0xded0
leaq -0x4c0(%rbp), %rdi
callq 0x13c10
leaq -0x318(%rbp), %rdi
callq 0x13c10
movq -0xc8(%rbp), %rdi
callq 0x3480
nopw (%rax,%rax)