// File: codeandkey[P]neocortex/src/uci.cpp
// Function: neocortex::uci::start()
void uci::start() {
	std::string handshake  = read_command();
	search::Search searcher;

	if (handshake != "uci") {
		throw std::runtime_error(util::format("Invalid UCI: expected 'uci', read '%s'", handshake.c_str()));
	}

	std::cout << "uciok\n";
	std::cout << "id name " << uci::NAME << "\n";
	std::cout << "id author " << uci::AUTHOR << "\n";
	std::cout << "option name Threads type spin default " << searcher.max_threads() << " min 1 max " << searcher.max_threads() << "\n";

	while (true) {
		std::string command = read_command();
		std::vector<std::string> parts = util::split(command, ' ');

		if (!parts.size()) continue;
			
		if (parts[0] == "quit") {
			break;
		}
		else if (parts[0] == "isready") {
			std::cout << "readyok\n";
		}
		else if (parts[0] == "stop") {
			searcher.stop();
		}
		else if (parts[0] == "setoption") {
			if (parts.size() > 1) {
				if (parts[1] == "Threads") {
					if (parts.size() < 4) {
						neocortex_warn("setoption: not enough parameters\n");
					}
					else {
						if (parts[2] == "value") {
							searcher.set_threads(std::stoi(parts[3]));
						}
						else {
							neocortex_warn("setoption: expected 'value', read '%s'\n", parts[2].c_str());
						}
					}
				}
			}
			else {
				neocortex_warn("setoption: argument required\n");
			}
		}
		else if (parts[0] == "go") {
			int wtime = -1, btime = -1, winc = -1, binc = -1, depth = -1, movetime = -1;
			bool infinite = false;

			/* Parse UCI options. */
			for (size_t i = 1; i < parts.size(); ++i) {
				if (isdigit(parts[i][0])) continue;

				if (parts[i] == "wtime") wtime = safe_parseint(parts, i + 1);
				else if (parts[i] == "btime") btime = safe_parseint(parts, i + 1);
				else if (parts[i] == "winc") winc = safe_parseint(parts, i + 1);
				else if (parts[i] == "binc") binc = safe_parseint(parts, i + 1);
				else if (parts[i] == "depth") depth = safe_parseint(parts, i + 1);
				else if (parts[i] == "movetime") movetime = safe_parseint(parts, i + 1);
				else if (parts[i] == "infinite") infinite = true;
				else if (parts[i] == "movestogo") {} /* ignore movestogo */
				else {
					throw util::fmterr("Invalid argument: %s", parts[i].c_str());
				}
			}

#ifndef NDEBUG
			std::string dbg, fen;
			searcher.get_position().evaluate(&dbg);
			fen = searcher.get_position().to_fen();
			neocortex_info("position [%s]:\n%s\n", fen.c_str(), dbg.c_str());
#endif

			searcher.go(write_info, write_bestmove, wtime, btime, winc, binc, depth, movetime, infinite);
		}
		else if (parts[0] == "dump") {
			std::string dbg, fen;
			searcher.get_position().evaluate(&dbg);
			fen = searcher.get_position().to_fen();
			neocortex_info("position [%s]:\n%s\n", fen.c_str(), dbg.c_str());
			neocortex_info("position [%s] dump:\n%s\n", fen.c_str(), searcher.get_position().dump().c_str());
		}
		else if (parts[0] == "position") {
			searcher.stop();

			if (parts.size() < 2) {
				neocortex_warn("Invalid UCI: position must be followed by 'startpos' or a FEN\n");
				continue;
			}

			Position pos;
			int expected_moves = 2;

			if (parts[1] != "startpos") {
				if (parts.size() < 7) {
					neocortex_warn("Invalid UCI: not enough FEN fields for position [need %d, have %d]\n", 6, parts.size());
					continue;
				}

				std::string fen = util::join(std::vector<std::string>(parts.begin() + 1, parts.begin() + 7), " ");

				pos = fen;
				expected_moves = 7;
			}

			if (expected_moves < (int) parts.size()) {
				if (parts[expected_moves] != "moves") {
					neocortex_warn("Invalid UCI: expected 'moves', read '%s'\n", parts[expected_moves].c_str());
					continue;
				}

				for (size_t i = (size_t) expected_moves + 1; i < parts.size(); ++i) {
					Move pl_moves[MAX_PL_MOVES], matched_move = Move::null;
					int num_pl_moves;

					num_pl_moves = pos.pseudolegal_moves(pl_moves);

					for (int j = 0; j < num_pl_moves; ++j) {
						if (pl_moves[j].match_uci(parts[i])) {
							assert(matched_move == Move::null);
							matched_move = pl_moves[j];
						}
					}

					if (matched_move == Move::null) {
						neocortex_warn("Invalid UCI: unmatched move '%s'\n", parts[i].c_str());
						break;
					}

					pos.make_move(matched_move);
				}
			}

			searcher.load(pos);
			neocortex_debug("Loaded position %s\n", pos.to_fen().c_str());
		}
	}
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %rbx
subq $0x51ba8, %rsp          # imm = 0x51BA8
leaq -0x28(%rbp), %rdi
callq 0x1e9c0
leaq -0x103a8(%rbp), %rdi
callq 0xc550
jmp 0x1ca33
leaq -0x8230(%rbp), %rdi
leaq -0x103a8(%rbp), %rsi
callq 0x15f10
jmp 0x1ca48
leaq -0x103a8(%rbp), %rdi
callq 0x190b0
leaq 0xb721(%rip), %rsi      # 0x2817c
leaq -0x28(%rbp), %rdi
callq 0x1edb0
movb %al, -0x519a9(%rbp)
jmp 0x1ca6c
movb -0x519a9(%rbp), %al
testb $0x1, %al
jne 0x1ca7b
jmp 0x1cbe9
movb $0x1, -0x103fa(%rbp)
movl $0x10, %edi
callq 0x51b0
movq %rax, -0x519c0(%rbp)
leaq -0x103f9(%rbp), %rdi
movq %rdi, -0x519b8(%rbp)
callq 0x56d0
movq -0x519b8(%rbp), %rdx
leaq 0xb6cc(%rip), %rsi      # 0x28180
leaq -0x103f8(%rbp), %rdi
callq 0x89b0
jmp 0x1cac2
leaq -0x28(%rbp), %rdi
callq 0x5140
movq %rax, %rdx
leaq -0x103d8(%rbp), %rdi
leaq -0x103f8(%rbp), %rsi
callq 0x9ca0
jmp 0x1cae3
movq -0x519c0(%rbp), %rdi
leaq -0x103d8(%rbp), %rsi
callq 0x5620
jmp 0x1caf8
movq -0x519c0(%rbp), %rdi
movb $0x0, -0x103fa(%rbp)
movq 0x164e3(%rip), %rsi     # 0x32ff0
movq 0x16484(%rip), %rdx     # 0x32f98
callq 0x5680
jmp 0x1e9b8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x103b0(%rbp)
movl %eax, -0x103b4(%rbp)
jmp 0x1e9a3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x103b0(%rbp)
movl %eax, -0x103b4(%rbp)
leaq -0x103a8(%rbp), %rdi
callq 0x190b0
jmp 0x1e9a3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x103b0(%rbp)
movl %eax, -0x103b4(%rbp)
jmp 0x1e997
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x103b0(%rbp)
movl %eax, -0x103b4(%rbp)
jmp 0x1cbc1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x103b0(%rbp)
movl %eax, -0x103b4(%rbp)
jmp 0x1cbb5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x103b0(%rbp)
movl %eax, -0x103b4(%rbp)
leaq -0x103d8(%rbp), %rdi
callq 0x5230
leaq -0x103f8(%rbp), %rdi
callq 0x5230
leaq -0x103f9(%rbp), %rdi
callq 0x5480
testb $0x1, -0x103fa(%rbp)
jne 0x1cbd8
jmp 0x1cbe4
movq -0x519c0(%rbp), %rdi
callq 0x5300
jmp 0x1e997
movq 0x163b8(%rip), %rdi     # 0x32fa8
leaq 0xb5b0(%rip), %rsi      # 0x281a7
callq 0x5410
jmp 0x1cbfe
movq 0x163a3(%rip), %rdi     # 0x32fa8
leaq 0xb5a2(%rip), %rsi      # 0x281ae
callq 0x5410
movq %rax, -0x519c8(%rbp)
jmp 0x1cc1a
movq -0x519c8(%rbp), %rdi
leaq 0xb58f(%rip), %rsi      # 0x281b7
callq 0x5410
movq %rax, -0x519d0(%rbp)
jmp 0x1cc36
movq -0x519d0(%rbp), %rdi
leaq 0xb10c(%rip), %rsi      # 0x27d50
callq 0x5410
jmp 0x1cc4b
movq 0x16356(%rip), %rdi     # 0x32fa8
leaq 0xb578(%rip), %rsi      # 0x281d1
callq 0x5410
movq %rax, -0x519d8(%rbp)
jmp 0x1cc67
movq -0x519d8(%rbp), %rdi
leaq 0xb567(%rip), %rsi      # 0x281dc
callq 0x5410
movq %rax, -0x519e0(%rbp)
jmp 0x1cc83
movq -0x519e0(%rbp), %rdi
leaq 0xb0bf(%rip), %rsi      # 0x27d50
callq 0x5410
jmp 0x1cc98
movq 0x16309(%rip), %rdi     # 0x32fa8
leaq 0xb545(%rip), %rsi      # 0x281eb
callq 0x5410
movq %rax, -0x519e8(%rbp)
jmp 0x1ccb4
leaq -0x8230(%rbp), %rdi
callq 0x184d0
movl %eax, -0x519ec(%rbp)
jmp 0x1ccc8
movl -0x519ec(%rbp), %esi
movq -0x519e8(%rbp), %rdi
callq 0x5690
movq %rax, -0x519f8(%rbp)
jmp 0x1cce3
movq -0x519f8(%rbp), %rdi
leaq 0xb521(%rip), %rsi      # 0x28212
callq 0x5410
movq %rax, -0x51a00(%rbp)
jmp 0x1ccff
leaq -0x8230(%rbp), %rdi
callq 0x184d0
movl %eax, -0x51a04(%rbp)
jmp 0x1cd13
movl -0x51a04(%rbp), %esi
movq -0x51a00(%rbp), %rdi
callq 0x5690
movq %rax, -0x51a10(%rbp)
jmp 0x1cd2e
movq -0x51a10(%rbp), %rdi
leaq 0xb014(%rip), %rsi      # 0x27d50
callq 0x5410
jmp 0x1cd43
jmp 0x1cd45
jmp 0x1cd47
leaq -0x10420(%rbp), %rdi
callq 0x1e9c0
jmp 0x1cd55
leaq -0x10458(%rbp), %rdi
leaq -0x10420(%rbp), %rsi
callq 0x5150
jmp 0x1cd6a
leaq -0x10438(%rbp), %rdi
leaq -0x10458(%rbp), %rsi
movl $0x20, %edx
callq 0x21e90
jmp 0x1cd84
leaq -0x10458(%rbp), %rdi
callq 0x5230
leaq -0x10438(%rbp), %rdi
callq 0x88c0
cmpq $0x0, %rax
jne 0x1cdeb
movl $0x2, -0x1045c(%rbp)
jmp 0x1e91c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x103b0(%rbp)
movl %eax, -0x103b4(%rbp)
jmp 0x1e96a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x103b0(%rbp)
movl %eax, -0x103b4(%rbp)
leaq -0x10458(%rbp), %rdi
callq 0x5230
jmp 0x1e96a
xorl %eax, %eax
movl %eax, %esi
leaq -0x10438(%rbp), %rdi
callq 0x14b30
movq %rax, %rdi
leaq 0xb419(%rip), %rsi      # 0x2821e
callq 0x1bf70
movb %al, -0x51a11(%rbp)
jmp 0x1ce12
movb -0x51a11(%rbp), %al
testb $0x1, %al
jne 0x1ce1e
jmp 0x1ce44
movl $0x3, -0x1045c(%rbp)
jmp 0x1e91c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x103b0(%rbp)
movl %eax, -0x103b4(%rbp)
jmp 0x1e95e
xorl %eax, %eax
movl %eax, %esi
leaq -0x10438(%rbp), %rdi
callq 0x14b30
movq %rax, %rdi
leaq 0xb3c5(%rip), %rsi      # 0x28223
callq 0x1bf70
movb %al, -0x51a12(%rbp)
jmp 0x1ce6b
movb -0x51a12(%rbp), %al
testb $0x1, %al
jne 0x1ce77
jmp 0x1ce91
movq 0x1612a(%rip), %rdi     # 0x32fa8
leaq 0xb3a6(%rip), %rsi      # 0x2822b
callq 0x5410
jmp 0x1ce8c
jmp 0x1e910
xorl %eax, %eax
movl %eax, %esi
leaq -0x10438(%rbp), %rdi
callq 0x14b30
movq %rax, %rdi
leaq 0xb389(%rip), %rsi      # 0x28234
callq 0x1bf70
movb %al, -0x51a13(%rbp)
jmp 0x1ceb8
movb -0x51a13(%rbp), %al
testb $0x1, %al
jne 0x1cec4
jmp 0x1ced7
leaq -0x8230(%rbp), %rdi
callq 0x16110
jmp 0x1ced2
jmp 0x1e90e
xorl %eax, %eax
movl %eax, %esi
leaq -0x10438(%rbp), %rdi
callq 0x14b30
movq %rax, %rdi
leaq 0xb348(%rip), %rsi      # 0x28239
callq 0x1bf70
movb %al, -0x51a14(%rbp)
jmp 0x1cefe
movb -0x51a14(%rbp), %al
testb $0x1, %al
jne 0x1cf0d
jmp 0x1d1e2
leaq -0x10438(%rbp), %rdi
callq 0x88c0
cmpq $0x1, %rax
jbe 0x1d143
leaq -0x10438(%rbp), %rdi
movl $0x1, %esi
callq 0x14b30
movq %rax, %rdi
leaq 0xb305(%rip), %rsi      # 0x28243
callq 0x1bf70
movb %al, -0x51a15(%rbp)
jmp 0x1cf4b
movb -0x51a15(%rbp), %al
testb $0x1, %al
jne 0x1cf5a
jmp 0x1d13e
leaq -0x10438(%rbp), %rdi
callq 0x88c0
cmpq $0x4, %rax
jae 0x1d00d
leaq -0x10481(%rbp), %rdi
movq %rdi, -0x51a20(%rbp)
callq 0x56d0
movq -0x51a20(%rbp), %rdx
leaq 0xb2ba(%rip), %rsi      # 0x2824b
leaq -0x10480(%rbp), %rdi
callq 0x89b0
jmp 0x1cf9f
leaq -0x10480(%rbp), %rdi
callq 0x1ede0
jmp 0x1cfad
leaq -0x10480(%rbp), %rdi
callq 0x5230
leaq -0x10481(%rbp), %rdi
callq 0x5480
jmp 0x1d13c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x103b0(%rbp)
movl %eax, -0x103b4(%rbp)
jmp 0x1cffc
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x103b0(%rbp)
movl %eax, -0x103b4(%rbp)
leaq -0x10480(%rbp), %rdi
callq 0x5230
leaq -0x10481(%rbp), %rdi
callq 0x5480
jmp 0x1e95e
leaq -0x10438(%rbp), %rdi
movl $0x2, %esi
callq 0x14b30
movq %rax, %rdi
leaq 0xb245(%rip), %rsi      # 0x2826d
callq 0x1bf70
movb %al, -0x51a21(%rbp)
jmp 0x1d035
movb -0x51a21(%rbp), %al
testb $0x1, %al
jne 0x1d041
jmp 0x1d084
leaq -0x10438(%rbp), %rdi
movl $0x3, %esi
callq 0x14b30
movq %rax, %rdi
xorl %eax, %eax
movl %eax, %esi
movl $0xa, %edx
callq 0x14b50
movl %eax, -0x51a28(%rbp)
jmp 0x1d06b
movl -0x51a28(%rbp), %esi
leaq -0x8230(%rbp), %rdi
callq 0x15fd0
jmp 0x1d07f
jmp 0x1d13a
leaq -0x104a9(%rbp), %rdi
movq %rdi, -0x51a30(%rbp)
callq 0x56d0
movq -0x51a30(%rbp), %rdx
leaq 0xb1ce(%rip), %rsi      # 0x28273
leaq -0x104a8(%rbp), %rdi
callq 0x89b0
jmp 0x1d0b3
leaq -0x10438(%rbp), %rdi
movl $0x2, %esi
callq 0x14b30
movq %rax, %rdi
callq 0x5140
movq %rax, %rsi
leaq -0x104a8(%rbp), %rdi
callq 0x1eff0
jmp 0x1d0dd
leaq -0x104a8(%rbp), %rdi
callq 0x5230
leaq -0x104a9(%rbp), %rdi
callq 0x5480
jmp 0x1d13a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x103b0(%rbp)
movl %eax, -0x103b4(%rbp)
jmp 0x1d129
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x103b0(%rbp)
movl %eax, -0x103b4(%rbp)
leaq -0x104a8(%rbp), %rdi
callq 0x5230
leaq -0x104a9(%rbp), %rdi
callq 0x5480
jmp 0x1e95e
jmp 0x1d13c
jmp 0x1d13e
jmp 0x1d1dd
leaq -0x104d1(%rbp), %rdi
movq %rdi, -0x51a38(%rbp)
callq 0x56d0
movq -0x51a38(%rbp), %rdx
leaq 0xb137(%rip), %rsi      # 0x2829b
leaq -0x104d0(%rbp), %rdi
callq 0x89b0
jmp 0x1d172
leaq -0x104d0(%rbp), %rdi
callq 0x1ede0
jmp 0x1d180
leaq -0x104d0(%rbp), %rdi
callq 0x5230
leaq -0x104d1(%rbp), %rdi
callq 0x5480
jmp 0x1d1dd
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x103b0(%rbp)
movl %eax, -0x103b4(%rbp)
jmp 0x1d1cc
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x103b0(%rbp)
movl %eax, -0x103b4(%rbp)
leaq -0x104d0(%rbp), %rdi
callq 0x5230
leaq -0x104d1(%rbp), %rdi
callq 0x5480
jmp 0x1e95e
jmp 0x1e90c
xorl %eax, %eax
movl %eax, %esi
leaq -0x10438(%rbp), %rdi
callq 0x14b30
movq %rax, %rdi
leaq 0xb0f2(%rip), %rsi      # 0x282ee
callq 0x1bf70
movb %al, -0x51a39(%rbp)
jmp 0x1d209
movb -0x51a39(%rbp), %al
testb $0x1, %al
jne 0x1d218
jmp 0x1db38
movl $0xffffffff, -0x104d8(%rbp) # imm = 0xFFFFFFFF
movl $0xffffffff, -0x104dc(%rbp) # imm = 0xFFFFFFFF
movl $0xffffffff, -0x104e0(%rbp) # imm = 0xFFFFFFFF
movl $0xffffffff, -0x104e4(%rbp) # imm = 0xFFFFFFFF
movl $0xffffffff, -0x104e8(%rbp) # imm = 0xFFFFFFFF
movl $0xffffffff, -0x104ec(%rbp) # imm = 0xFFFFFFFF
movb $0x0, -0x104ed(%rbp)
movq $0x1, -0x104f8(%rbp)
movq -0x104f8(%rbp), %rax
movq %rax, -0x51a48(%rbp)
leaq -0x10438(%rbp), %rdi
callq 0x88c0
movq %rax, %rcx
movq -0x51a48(%rbp), %rax
cmpq %rcx, %rax
jae 0x1d868
movq -0x104f8(%rbp), %rsi
leaq -0x10438(%rbp), %rdi
callq 0x14b30
movq %rax, %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x5740
movq %rax, -0x51a50(%rbp)
jmp 0x1d2bb
movq -0x51a50(%rbp), %rax
movsbl (%rax), %edi
callq 0x53b0
cmpl $0x0, %eax
je 0x1d2d4
jmp 0x1d851
movq -0x104f8(%rbp), %rsi
leaq -0x10438(%rbp), %rdi
callq 0x14b30
movq %rax, %rdi
leaq 0xafc8(%rip), %rsi      # 0x282b9
callq 0x1bf70
movb %al, -0x51a51(%rbp)
jmp 0x1d2fe
movb -0x51a51(%rbp), %al
testb $0x1, %al
jne 0x1d30a
jmp 0x1d37d
leaq -0x10510(%rbp), %rdi
leaq -0x10438(%rbp), %rsi
callq 0x1f200
jmp 0x1d31f
movq -0x104f8(%rbp), %rsi
incq %rsi
leaq -0x10510(%rbp), %rdi
callq 0x1ea70
movl %eax, -0x51a58(%rbp)
jmp 0x1d33d
movl -0x51a58(%rbp), %eax
movl %eax, -0x104d8(%rbp)
leaq -0x10510(%rbp), %rdi
callq 0x8c90
jmp 0x1d84f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x103b0(%rbp)
movl %eax, -0x103b4(%rbp)
leaq -0x10510(%rbp), %rdi
callq 0x8c90
jmp 0x1e95e
movq -0x104f8(%rbp), %rsi
leaq -0x10438(%rbp), %rdi
callq 0x14b30
movq %rax, %rdi
leaq 0xaf25(%rip), %rsi      # 0x282bf
callq 0x1bf70
movb %al, -0x51a59(%rbp)
jmp 0x1d3a7
movb -0x51a59(%rbp), %al
testb $0x1, %al
jne 0x1d3b3
jmp 0x1d426
leaq -0x10528(%rbp), %rdi
leaq -0x10438(%rbp), %rsi
callq 0x1f200
jmp 0x1d3c8
movq -0x104f8(%rbp), %rsi
incq %rsi
leaq -0x10528(%rbp), %rdi
callq 0x1ea70
movl %eax, -0x51a60(%rbp)
jmp 0x1d3e6
movl -0x51a60(%rbp), %eax
movl %eax, -0x104dc(%rbp)
leaq -0x10528(%rbp), %rdi
callq 0x8c90
jmp 0x1d84d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x103b0(%rbp)
movl %eax, -0x103b4(%rbp)
leaq -0x10528(%rbp), %rdi
callq 0x8c90
jmp 0x1e95e
movq -0x104f8(%rbp), %rsi
leaq -0x10438(%rbp), %rdi
callq 0x14b30
movq %rax, %rdi
leaq 0xae82(%rip), %rsi      # 0x282c5
callq 0x1bf70
movb %al, -0x51a61(%rbp)
jmp 0x1d450
movb -0x51a61(%rbp), %al
testb $0x1, %al
jne 0x1d45c
jmp 0x1d4cf
leaq -0x10540(%rbp), %rdi
leaq -0x10438(%rbp), %rsi
callq 0x1f200
jmp 0x1d471
movq -0x104f8(%rbp), %rsi
incq %rsi
leaq -0x10540(%rbp), %rdi
callq 0x1ea70
movl %eax, -0x51a68(%rbp)
jmp 0x1d48f
movl -0x51a68(%rbp), %eax
movl %eax, -0x104e0(%rbp)
leaq -0x10540(%rbp), %rdi
callq 0x8c90
jmp 0x1d84b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x103b0(%rbp)
movl %eax, -0x103b4(%rbp)
leaq -0x10540(%rbp), %rdi
callq 0x8c90
jmp 0x1e95e
movq -0x104f8(%rbp), %rsi
leaq -0x10438(%rbp), %rdi
callq 0x14b30
movq %rax, %rdi
leaq 0xadde(%rip), %rsi      # 0x282ca
callq 0x1bf70
movb %al, -0x51a69(%rbp)
jmp 0x1d4f9
movb -0x51a69(%rbp), %al
testb $0x1, %al
jne 0x1d505
jmp 0x1d578
leaq -0x10558(%rbp), %rdi
leaq -0x10438(%rbp), %rsi
callq 0x1f200
jmp 0x1d51a
movq -0x104f8(%rbp), %rsi
incq %rsi
leaq -0x10558(%rbp), %rdi
callq 0x1ea70
movl %eax, -0x51a70(%rbp)
jmp 0x1d538
movl -0x51a70(%rbp), %eax
movl %eax, -0x104e4(%rbp)
leaq -0x10558(%rbp), %rdi
callq 0x8c90
jmp 0x1d849
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x103b0(%rbp)
movl %eax, -0x103b4(%rbp)
leaq -0x10558(%rbp), %rdi
callq 0x8c90
jmp 0x1e95e
movq -0x104f8(%rbp), %rsi
leaq -0x10438(%rbp), %rdi
callq 0x14b30
movq %rax, %rdi
leaq 0xad3a(%rip), %rsi      # 0x282cf
callq 0x1bf70
movb %al, -0x51a71(%rbp)
jmp 0x1d5a2
movb -0x51a71(%rbp), %al
testb $0x1, %al
jne 0x1d5ae
jmp 0x1d621
leaq -0x10570(%rbp), %rdi
leaq -0x10438(%rbp), %rsi
callq 0x1f200
jmp 0x1d5c3
movq -0x104f8(%rbp), %rsi
incq %rsi
leaq -0x10570(%rbp), %rdi
callq 0x1ea70
movl %eax, -0x51a78(%rbp)
jmp 0x1d5e1
movl -0x51a78(%rbp), %eax
movl %eax, -0x104e8(%rbp)
leaq -0x10570(%rbp), %rdi
callq 0x8c90
jmp 0x1d847
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x103b0(%rbp)
movl %eax, -0x103b4(%rbp)
leaq -0x10570(%rbp), %rdi
callq 0x8c90
jmp 0x1e95e
movq -0x104f8(%rbp), %rsi
leaq -0x10438(%rbp), %rdi
callq 0x14b30
movq %rax, %rdi
leaq 0xac97(%rip), %rsi      # 0x282d5
callq 0x1bf70
movb %al, -0x51a79(%rbp)
jmp 0x1d64b
movb -0x51a79(%rbp), %al
testb $0x1, %al
jne 0x1d657
jmp 0x1d6ca
leaq -0x10588(%rbp), %rdi
leaq -0x10438(%rbp), %rsi
callq 0x1f200
jmp 0x1d66c
movq -0x104f8(%rbp), %rsi
incq %rsi
leaq -0x10588(%rbp), %rdi
callq 0x1ea70
movl %eax, -0x51a80(%rbp)
jmp 0x1d68a
movl -0x51a80(%rbp), %eax
movl %eax, -0x104ec(%rbp)
leaq -0x10588(%rbp), %rdi
callq 0x8c90
jmp 0x1d845
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x103b0(%rbp)
movl %eax, -0x103b4(%rbp)
leaq -0x10588(%rbp), %rdi
callq 0x8c90
jmp 0x1e95e
movq -0x104f8(%rbp), %rsi
leaq -0x10438(%rbp), %rdi
callq 0x14b30
movq %rax, %rdi
leaq 0xabf7(%rip), %rsi      # 0x282de
callq 0x1bf70
movb %al, -0x51a81(%rbp)
jmp 0x1d6f4
movb -0x51a81(%rbp), %al
testb $0x1, %al
jne 0x1d700
jmp 0x1d70c
movb $0x1, -0x104ed(%rbp)
jmp 0x1d843
movq -0x104f8(%rbp), %rsi
leaq -0x10438(%rbp), %rdi
callq 0x14b30
movq %rax, %rdi
leaq 0xabbe(%rip), %rsi      # 0x282e7
callq 0x1bf70
movb %al, -0x51a82(%rbp)
jmp 0x1d736
movb -0x51a82(%rbp), %al
testb $0x1, %al
jne 0x1d742
jmp 0x1d747
jmp 0x1d841
movb $0x1, -0x105aa(%rbp)
movl $0x8, %edi
callq 0x51b0
movq %rax, -0x51a98(%rbp)
leaq -0x105a9(%rbp), %rdi
movq %rdi, -0x51a90(%rbp)
callq 0x56d0
movq -0x51a90(%rbp), %rdx
leaq 0xab71(%rip), %rsi      # 0x282f1
leaq -0x105a8(%rbp), %rdi
callq 0x89b0
jmp 0x1d78e
movq -0x104f8(%rbp), %rsi
leaq -0x10438(%rbp), %rdi
callq 0x14b30
movq %rax, %rdi
callq 0x5140
movq -0x51a98(%rbp), %rdi
movq %rax, %rdx
leaq -0x105a8(%rbp), %rsi
callq 0x8b80
jmp 0x1d7c1
movq -0x51a98(%rbp), %rdi
movb $0x0, -0x105aa(%rbp)
movq 0x157fa(%rip), %rsi     # 0x32fd0
movq 0x1580b(%rip), %rdx     # 0x32fe8
callq 0x5680
jmp 0x1e9b8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x103b0(%rbp)
movl %eax, -0x103b4(%rbp)
jmp 0x1d819
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x103b0(%rbp)
movl %eax, -0x103b4(%rbp)
leaq -0x105a8(%rbp), %rdi
callq 0x5230
leaq -0x105a9(%rbp), %rdi
callq 0x5480
testb $0x1, -0x105aa(%rbp)
jne 0x1d830
jmp 0x1d83c
movq -0x51a98(%rbp), %rdi
callq 0x5300
jmp 0x1e95e
jmp 0x1d843
jmp 0x1d845
jmp 0x1d847
jmp 0x1d849
jmp 0x1d84b
jmp 0x1d84d
jmp 0x1d84f
jmp 0x1d851
movq -0x104f8(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x104f8(%rbp)
jmp 0x1d266
leaq -0x105d0(%rbp), %rdi
callq 0x5540
leaq -0x105f0(%rbp), %rdi
callq 0x5540
leaq -0x18768(%rbp), %rdi
leaq -0x8230(%rbp), %rsi
callq 0x18520
jmp 0x1d895
leaq -0x18768(%rbp), %rdi
leaq -0x105d0(%rbp), %rsi
callq 0x12400
jmp 0x1d8aa
leaq -0x18768(%rbp), %rdi
callq 0x190b0
leaq -0x20900(%rbp), %rdi
leaq -0x8230(%rbp), %rsi
callq 0x18520
jmp 0x1d8cb
leaq -0x18788(%rbp), %rdi
leaq -0x20900(%rbp), %rsi
callq 0xcd40
jmp 0x1d8e0
leaq -0x105f0(%rbp), %rdi
leaq -0x18788(%rbp), %rsi
movq %rsi, -0x51aa8(%rbp)
callq 0x54d0
movq -0x51aa8(%rbp), %rdi
callq 0x5230
leaq -0x20900(%rbp), %rdi
callq 0x190b0
leaq -0x20921(%rbp), %rdi
movq %rdi, -0x51aa0(%rbp)
callq 0x56d0
movq -0x51aa0(%rbp), %rdx
leaq 0xa9d3(%rip), %rsi      # 0x28306
leaq -0x20920(%rbp), %rdi
callq 0x89b0
jmp 0x1d941
leaq -0x105f0(%rbp), %rdi
callq 0x5140
movq %rax, -0x51ab0(%rbp)
leaq -0x105d0(%rbp), %rdi
callq 0x5140
movq -0x51ab0(%rbp), %rsi
movq %rax, %rdx
leaq -0x20920(%rbp), %rdi
callq 0x1f2f0
jmp 0x1d978
leaq -0x20920(%rbp), %rdi
callq 0x5230
leaq -0x20921(%rbp), %rdi
callq 0x5480
leaq 0x1219(%rip), %rsi      # 0x1ebb0
leaq -0x20948(%rbp), %rdi
movq %rdi, -0x51ac0(%rbp)
callq 0x1f510
leaq 0x127f(%rip), %rsi      # 0x1ec30
leaq -0x20968(%rbp), %rdi
movq %rdi, -0x51ab8(%rbp)
callq 0x1f5a0
movq -0x51ac0(%rbp), %rsi
movq -0x51ab8(%rbp), %rdx
movl -0x104d8(%rbp), %ecx
movl -0x104dc(%rbp), %r8d
movl -0x104e0(%rbp), %r9d
movl -0x104e4(%rbp), %edi
movl -0x104e8(%rbp), %r10d
movl -0x104ec(%rbp), %r11d
movzbl -0x104ed(%rbp), %ebx
andl $0x1, %ebx
movq %rsp, %rax
movl %ebx, 0x18(%rax)
movl %r11d, 0x10(%rax)
movl %r10d, 0x8(%rax)
movl %edi, (%rax)
leaq -0x8230(%rbp), %rdi
callq 0x16180
jmp 0x1da22
leaq -0x20968(%rbp), %rdi
callq 0x1a310
leaq -0x20948(%rbp), %rdi
callq 0x19300
leaq -0x105f0(%rbp), %rdi
callq 0x5230
leaq -0x105d0(%rbp), %rdi
callq 0x5230
jmp 0x1e90a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x103b0(%rbp)
movl %eax, -0x103b4(%rbp)
jmp 0x1db1b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x103b0(%rbp)
movl %eax, -0x103b4(%rbp)
leaq -0x18768(%rbp), %rdi
callq 0x190b0
jmp 0x1db1b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x103b0(%rbp)
movl %eax, -0x103b4(%rbp)
leaq -0x20900(%rbp), %rdi
callq 0x190b0
jmp 0x1db1b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x103b0(%rbp)
movl %eax, -0x103b4(%rbp)
jmp 0x1dae3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x103b0(%rbp)
movl %eax, -0x103b4(%rbp)
leaq -0x20920(%rbp), %rdi
callq 0x5230
leaq -0x20921(%rbp), %rdi
callq 0x5480
jmp 0x1db1b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x103b0(%rbp)
movl %eax, -0x103b4(%rbp)
leaq -0x20968(%rbp), %rdi
callq 0x1a310
leaq -0x20948(%rbp), %rdi
callq 0x19300
leaq -0x105f0(%rbp), %rdi
callq 0x5230
leaq -0x105d0(%rbp), %rdi
callq 0x5230
jmp 0x1e95e
xorl %eax, %eax
movl %eax, %esi
leaq -0x10438(%rbp), %rdi
callq 0x14b30
movq %rax, %rdi
leaq 0xa7c7(%rip), %rsi      # 0x28319
callq 0x1bf70
movb %al, -0x51ac1(%rbp)
jmp 0x1db5f
movb -0x51ac1(%rbp), %al
testb $0x1, %al
jne 0x1db6e
jmp 0x1deab
leaq -0x20988(%rbp), %rdi
callq 0x5540
leaq -0x209a8(%rbp), %rdi
callq 0x5540
leaq -0x28b20(%rbp), %rdi
leaq -0x8230(%rbp), %rsi
callq 0x18520
jmp 0x1db9b
leaq -0x28b20(%rbp), %rdi
leaq -0x20988(%rbp), %rsi
callq 0x12400
jmp 0x1dbb0
leaq -0x28b20(%rbp), %rdi
callq 0x190b0
leaq -0x30cb8(%rbp), %rdi
leaq -0x8230(%rbp), %rsi
callq 0x18520
jmp 0x1dbd1
leaq -0x28b40(%rbp), %rdi
leaq -0x30cb8(%rbp), %rsi
callq 0xcd40
jmp 0x1dbe6
leaq -0x209a8(%rbp), %rdi
leaq -0x28b40(%rbp), %rsi
movq %rsi, -0x51ad8(%rbp)
callq 0x54d0
movq -0x51ad8(%rbp), %rdi
callq 0x5230
leaq -0x30cb8(%rbp), %rdi
callq 0x190b0
leaq -0x30cd9(%rbp), %rdi
movq %rdi, -0x51ad0(%rbp)
callq 0x56d0
movq -0x51ad0(%rbp), %rdx
leaq 0xa6cd(%rip), %rsi      # 0x28306
leaq -0x30cd8(%rbp), %rdi
callq 0x89b0
jmp 0x1dc47
leaq -0x209a8(%rbp), %rdi
callq 0x5140
movq %rax, -0x51ae0(%rbp)
leaq -0x20988(%rbp), %rdi
callq 0x5140
movq -0x51ae0(%rbp), %rsi
movq %rax, %rdx
leaq -0x30cd8(%rbp), %rdi
callq 0x1f2f0
jmp 0x1dc7e
leaq -0x30cd8(%rbp), %rdi
callq 0x5230
leaq -0x30cd9(%rbp), %rdi
callq 0x5480
leaq -0x30d01(%rbp), %rdi
movq %rdi, -0x51ae8(%rbp)
callq 0x56d0
movq -0x51ae8(%rbp), %rdx
leaq 0xa667(%rip), %rsi      # 0x2831e
leaq -0x30d00(%rbp), %rdi
callq 0x89b0
jmp 0x1dcc5
leaq -0x209a8(%rbp), %rdi
callq 0x5140
movq %rax, -0x51af0(%rbp)
leaq -0x38ea0(%rbp), %rdi
leaq -0x8230(%rbp), %rsi
callq 0x18520
jmp 0x1dced
leaq -0x30d28(%rbp), %rdi
leaq -0x38ea0(%rbp), %rsi
callq 0x140b0
jmp 0x1dd02
leaq -0x30d28(%rbp), %rdi
callq 0x5140
movq -0x51af0(%rbp), %rsi
movq %rax, %rdx
leaq -0x30d00(%rbp), %rdi
callq 0x1f2f0
jmp 0x1dd26
leaq -0x30d28(%rbp), %rdi
callq 0x5230
leaq -0x38ea0(%rbp), %rdi
callq 0x190b0
leaq -0x30d00(%rbp), %rdi
callq 0x5230
leaq -0x30d01(%rbp), %rdi
callq 0x5480
leaq -0x209a8(%rbp), %rdi
callq 0x5230
leaq -0x20988(%rbp), %rdi
callq 0x5230
jmp 0x1e908
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x103b0(%rbp)
movl %eax, -0x103b4(%rbp)
jmp 0x1de8e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x103b0(%rbp)
movl %eax, -0x103b4(%rbp)
leaq -0x28b20(%rbp), %rdi
callq 0x190b0
jmp 0x1de8e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x103b0(%rbp)
movl %eax, -0x103b4(%rbp)
leaq -0x30cb8(%rbp), %rdi
callq 0x190b0
jmp 0x1de8e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x103b0(%rbp)
movl %eax, -0x103b4(%rbp)
jmp 0x1de02
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x103b0(%rbp)
movl %eax, -0x103b4(%rbp)
leaq -0x30cd8(%rbp), %rdi
callq 0x5230
leaq -0x30cd9(%rbp), %rdi
callq 0x5480
jmp 0x1de8e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x103b0(%rbp)
movl %eax, -0x103b4(%rbp)
jmp 0x1de82
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x103b0(%rbp)
movl %eax, -0x103b4(%rbp)
jmp 0x1de76
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x103b0(%rbp)
movl %eax, -0x103b4(%rbp)
jmp 0x1de6a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x103b0(%rbp)
movl %eax, -0x103b4(%rbp)
leaq -0x30d28(%rbp), %rdi
callq 0x5230
leaq -0x38ea0(%rbp), %rdi
callq 0x190b0
leaq -0x30d00(%rbp), %rdi
callq 0x5230
leaq -0x30d01(%rbp), %rdi
callq 0x5480
leaq -0x209a8(%rbp), %rdi
callq 0x5230
leaq -0x20988(%rbp), %rdi
callq 0x5230
jmp 0x1e95e
xorl %eax, %eax
movl %eax, %esi
leaq -0x10438(%rbp), %rdi
callq 0x14b30
movq %rax, %rdi
leaq 0xa471(%rip), %rsi      # 0x28336
callq 0x1bf70
movb %al, -0x51af1(%rbp)
jmp 0x1ded2
movb -0x51af1(%rbp), %al
testb $0x1, %al
jne 0x1dee1
jmp 0x1e906
leaq -0x8230(%rbp), %rdi
callq 0x16110
jmp 0x1deef
leaq -0x10438(%rbp), %rdi
callq 0x88c0
cmpq $0x2, %rax
jae 0x1dfac
leaq -0x38ec1(%rbp), %rdi
movq %rdi, -0x51b00(%rbp)
callq 0x56d0
movq -0x51b00(%rbp), %rdx
leaq 0xa419(%rip), %rsi      # 0x2833f
leaq -0x38ec0(%rbp), %rdi
callq 0x89b0
jmp 0x1df34
leaq -0x38ec0(%rbp), %rdi
callq 0x1ede0
jmp 0x1df42
leaq -0x38ec0(%rbp), %rdi
callq 0x5230
leaq -0x38ec1(%rbp), %rdi
callq 0x5480
movl $0x2, -0x1045c(%rbp)
jmp 0x1e91c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x103b0(%rbp)
movl %eax, -0x103b4(%rbp)
jmp 0x1df9b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x103b0(%rbp)
movl %eax, -0x103b4(%rbp)
leaq -0x38ec0(%rbp), %rdi
callq 0x5230
leaq -0x38ec1(%rbp), %rdi
callq 0x5480
jmp 0x1e95e
leaq -0x41040(%rbp), %rdi
callq 0xc550
jmp 0x1dfba
movl $0x2, -0x41044(%rbp)
leaq -0x10438(%rbp), %rdi
movl $0x1, %esi
callq 0x14b30
movq %rax, %rdi
leaq 0xa39f(%rip), %rsi      # 0x2837e
callq 0x1edb0
movb %al, -0x51b01(%rbp)
jmp 0x1dfec
movb -0x51b01(%rbp), %al
testb $0x1, %al
jne 0x1dffb
jmp 0x1e313
leaq -0x10438(%rbp), %rdi
callq 0x88c0
cmpq $0x7, %rax
jae 0x1e0e3
leaq -0x41069(%rbp), %rdi
movq %rdi, -0x51b10(%rbp)
callq 0x56d0
movq -0x51b10(%rbp), %rdx
leaq 0xa355(%rip), %rsi      # 0x28387
leaq -0x41068(%rbp), %rdi
callq 0x89b0
jmp 0x1e040
leaq -0x10438(%rbp), %rdi
callq 0x88c0
movq %rax, %rdx
leaq -0x41068(%rbp), %rdi
movl $0x6, %esi
callq 0x1f630
jmp 0x1e062
leaq -0x41068(%rbp), %rdi
callq 0x5230
leaq -0x41069(%rbp), %rdi
callq 0x5480
movl $0x2, -0x1045c(%rbp)
jmp 0x1e859
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x103b0(%rbp)
movl %eax, -0x103b4(%rbp)
jmp 0x1e8f8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x103b0(%rbp)
movl %eax, -0x103b4(%rbp)
jmp 0x1e0d2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x103b0(%rbp)
movl %eax, -0x103b4(%rbp)
leaq -0x41068(%rbp), %rdi
callq 0x5230
leaq -0x41069(%rbp), %rdi
callq 0x5480
jmp 0x1e8f8
leaq -0x10438(%rbp), %rdi
movq %rdi, -0x51b20(%rbp)
callq 0x8a60
movq %rax, -0x410b8(%rbp)
leaq -0x410b8(%rbp), %rdi
movl $0x1, %esi
callq 0x1f850
movq -0x51b20(%rbp), %rdi
movq %rax, -0x410b0(%rbp)
callq 0x8a60
movq %rax, -0x410c8(%rbp)
leaq -0x410c8(%rbp), %rdi
movl $0x7, %esi
callq 0x1f850
movq %rax, -0x410c0(%rbp)
leaq -0x410c9(%rbp), %rdi
movq %rdi, -0x51b18(%rbp)
callq 0x1f890
movq -0x51b18(%rbp), %rcx
movq -0x410b0(%rbp), %rsi
movq -0x410c0(%rbp), %rdx
leaq -0x410a8(%rbp), %rdi
callq 0x1f8b0
jmp 0x1e176
leaq -0x410f1(%rbp), %rdi
movq %rdi, -0x51b28(%rbp)
callq 0x56d0
movq -0x51b28(%rbp), %rdx
leaq 0x9df8(%rip), %rsi      # 0x27f8f
leaq -0x410f0(%rbp), %rdi
callq 0x89b0
jmp 0x1e1a5
leaq -0x41090(%rbp), %rdi
leaq -0x410a8(%rbp), %rsi
leaq -0x410f0(%rbp), %rdx
callq 0x22360
jmp 0x1e1c1
leaq -0x410f0(%rbp), %rdi
callq 0x5230
leaq -0x410f1(%rbp), %rdi
callq 0x5480
leaq -0x410a8(%rbp), %rdi
callq 0x8c90
leaq -0x410c9(%rbp), %rdi
callq 0x9260
leaq -0x49290(%rbp), %rdi
leaq -0x41090(%rbp), %rsi
callq 0x5150
jmp 0x1e206
leaq -0x49270(%rbp), %rdi
leaq -0x49290(%rbp), %rsi
callq 0xc7a0
jmp 0x1e21b
leaq -0x41040(%rbp), %rdi
leaq -0x49270(%rbp), %rsi
callq 0x1f930
leaq -0x49270(%rbp), %rdi
callq 0x190b0
leaq -0x49290(%rbp), %rdi
callq 0x5230
movl $0x7, -0x41044(%rbp)
leaq -0x41090(%rbp), %rdi
callq 0x5230
jmp 0x1e313
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x103b0(%rbp)
movl %eax, -0x103b4(%rbp)
jmp 0x1e2bf
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x103b0(%rbp)
movl %eax, -0x103b4(%rbp)
jmp 0x1e2a7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x103b0(%rbp)
movl %eax, -0x103b4(%rbp)
leaq -0x410f0(%rbp), %rdi
callq 0x5230
leaq -0x410f1(%rbp), %rdi
callq 0x5480
leaq -0x410a8(%rbp), %rdi
callq 0x8c90
leaq -0x410c9(%rbp), %rdi
callq 0x9260
jmp 0x1e8f8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x103b0(%rbp)
movl %eax, -0x103b4(%rbp)
jmp 0x1e302
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x103b0(%rbp)
movl %eax, -0x103b4(%rbp)
leaq -0x49290(%rbp), %rdi
callq 0x5230
leaq -0x41090(%rbp), %rdi
callq 0x5230
jmp 0x1e8f8
movl -0x41044(%rbp), %eax
movl %eax, -0x51b2c(%rbp)
leaq -0x10438(%rbp), %rdi
callq 0x88c0
movq %rax, %rcx
movl -0x51b2c(%rbp), %eax
cmpl %ecx, %eax
jge 0x1e794
movslq -0x41044(%rbp), %rsi
leaq -0x10438(%rbp), %rdi
callq 0x14b30
movq %rax, %rdi
leaq 0xa072(%rip), %rsi      # 0x283cb
callq 0x1edb0
movb %al, -0x51b2d(%rbp)
jmp 0x1e366
movb -0x51b2d(%rbp), %al
testb $0x1, %al
jne 0x1e375
jmp 0x1e43a
leaq -0x492b1(%rbp), %rdi
movq %rdi, -0x51b38(%rbp)
callq 0x56d0
movq -0x51b38(%rbp), %rdx
leaq 0xa03b(%rip), %rsi      # 0x283d1
leaq -0x492b0(%rbp), %rdi
callq 0x89b0
jmp 0x1e3a4
movslq -0x41044(%rbp), %rsi
leaq -0x10438(%rbp), %rdi
callq 0x14b30
movq %rax, %rdi
callq 0x5140
movq %rax, %rsi
leaq -0x492b0(%rbp), %rdi
callq 0x1eff0
jmp 0x1e3d0
leaq -0x492b0(%rbp), %rdi
callq 0x5230
leaq -0x492b1(%rbp), %rdi
callq 0x5480
movl $0x2, -0x1045c(%rbp)
jmp 0x1e859
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x103b0(%rbp)
movl %eax, -0x103b4(%rbp)
jmp 0x1e429
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x103b0(%rbp)
movl %eax, -0x103b4(%rbp)
leaq -0x492b0(%rbp), %rdi
callq 0x5230
leaq -0x492b1(%rbp), %rdi
callq 0x5480
jmp 0x1e8f8
movslq -0x41044(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x492c0(%rbp)
movq -0x492c0(%rbp), %rax
movq %rax, -0x51b40(%rbp)
leaq -0x10438(%rbp), %rdi
callq 0x88c0
movq %rax, %rcx
movq -0x51b40(%rbp), %rax
cmpq %rcx, %rax
jae 0x1e792
leaq -0x49770(%rbp), %rax
movq %rax, %rcx
addq $0x4b0, %rcx            # imm = 0x4B0
movq %rcx, -0x51b50(%rbp)
movq %rax, -0x51b48(%rbp)
movq -0x51b48(%rbp), %rdi
movq %rdi, -0x51b58(%rbp)
callq 0xa870
jmp 0x1e4ad
movq -0x51b50(%rbp), %rcx
movq -0x51b58(%rbp), %rax
addq $0xc, %rax
cmpq %rcx, %rax
movq %rax, -0x51b48(%rbp)
jne 0x1e498
leaq 0x1e7b6(%rip), %rax     # 0x3cc88
movl 0x8(%rax), %ecx
movl %ecx, -0x49778(%rbp)
movq (%rax), %rax
movq %rax, -0x49780(%rbp)
leaq -0x41040(%rbp), %rdi
leaq -0x49770(%rbp), %rsi
callq 0xe050
movl %eax, -0x51b5c(%rbp)
jmp 0x1e500
movl -0x51b5c(%rbp), %eax
movl %eax, -0x49784(%rbp)
movl $0x0, -0x49788(%rbp)
movl -0x49788(%rbp), %eax
cmpl -0x49784(%rbp), %eax
jge 0x1e645
movslq -0x49788(%rbp), %rax
leaq (%rax,%rax,2), %rax
leaq -0x49770(%rbp,%rax,4), %rax
movq %rax, -0x51b68(%rbp)
movq -0x492c0(%rbp), %rsi
leaq -0x10438(%rbp), %rdi
callq 0x14b30
movq %rax, %rsi
leaq -0x497a8(%rbp), %rdi
callq 0x5150
jmp 0x1e566
movq -0x51b68(%rbp), %rdi
leaq -0x497a8(%rbp), %rsi
callq 0xad40
movb %al, -0x51b69(%rbp)
jmp 0x1e581
leaq -0x497a8(%rbp), %rdi
callq 0x5230
movb -0x51b69(%rbp), %al
testb $0x1, %al
jne 0x1e59c
jmp 0x1e62f
leaq 0x1e6e5(%rip), %rsi     # 0x3cc88
leaq -0x49780(%rbp), %rdi
callq 0xadc0
movb %al, -0x51b6a(%rbp)
jmp 0x1e5b7
movb -0x51b6a(%rbp), %al
testb $0x1, %al
jne 0x1e5c3
jmp 0x1e5c5
jmp 0x1e607
leaq 0x9e2f(%rip), %rdi      # 0x283fb
leaq 0x9e43(%rip), %rsi      # 0x28416
movl $0xa9, %edx
leaq 0x9e43(%rip), %rcx      # 0x28422
callq 0x5290
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x103b0(%rbp)
movl %eax, -0x103b4(%rbp)
leaq -0x497a8(%rbp), %rdi
callq 0x5230
jmp 0x1e8f8
movslq -0x49788(%rbp), %rcx
leaq -0x49770(%rbp), %rax
imulq $0xc, %rcx, %rcx
addq %rcx, %rax
movq (%rax), %rcx
movq %rcx, -0x49780(%rbp)
movl 0x8(%rax), %eax
movl %eax, -0x49778(%rbp)
jmp 0x1e631
movl -0x49788(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x49788(%rbp)
jmp 0x1e516
leaq 0x1e63c(%rip), %rsi     # 0x3cc88
leaq -0x49780(%rbp), %rdi
callq 0xadc0
movb %al, -0x51b6b(%rbp)
jmp 0x1e660
movb -0x51b6b(%rbp), %al
testb $0x1, %al
jne 0x1e66f
jmp 0x1e72a
leaq -0x497c9(%rbp), %rdi
movq %rdi, -0x51b78(%rbp)
callq 0x56d0
movq -0x51b78(%rbp), %rdx
leaq 0x9daf(%rip), %rsi      # 0x2843f
leaq -0x497c8(%rbp), %rdi
callq 0x89b0
jmp 0x1e69e
movq -0x492c0(%rbp), %rsi
leaq -0x10438(%rbp), %rdi
callq 0x14b30
movq %rax, %rdi
callq 0x5140
movq %rax, %rsi
leaq -0x497c8(%rbp), %rdi
callq 0x1eff0
jmp 0x1e6ca
leaq -0x497c8(%rbp), %rdi
callq 0x5230
leaq -0x497c9(%rbp), %rdi
callq 0x5480
jmp 0x1e792
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x103b0(%rbp)
movl %eax, -0x103b4(%rbp)
jmp 0x1e719
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x103b0(%rbp)
movl %eax, -0x103b4(%rbp)
leaq -0x497c8(%rbp), %rdi
callq 0x5230
leaq -0x497c9(%rbp), %rdi
callq 0x5480
jmp 0x1e8f8
movl -0x49778(%rbp), %eax
movl %eax, -0x497d0(%rbp)
movq -0x49780(%rbp), %rax
movq %rax, -0x497d8(%rbp)
movl -0x497d0(%rbp), %eax
movl %eax, -0x497e0(%rbp)
movq -0x497d8(%rbp), %rax
movq %rax, -0x497e8(%rbp)
movq -0x497e8(%rbp), %rsi
movl -0x497e0(%rbp), %edx
leaq -0x41040(%rbp), %rdi
callq 0xd190
jmp 0x1e779
jmp 0x1e77b
movq -0x492c0(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x492c0(%rbp)
jmp 0x1e44c
jmp 0x1e794
leaq -0x51960(%rbp), %rdi
leaq -0x41040(%rbp), %rsi
callq 0x18f20
jmp 0x1e7a9
leaq -0x8230(%rbp), %rdi
leaq -0x51960(%rbp), %rsi
callq 0x17a60
jmp 0x1e7be
leaq -0x51960(%rbp), %rdi
callq 0x190b0
leaq -0x51981(%rbp), %rdi
movq %rdi, -0x51b80(%rbp)
callq 0x56d0
movq -0x51b80(%rbp), %rdx
leaq 0x9c76(%rip), %rsi      # 0x28461
leaq -0x51980(%rbp), %rdi
callq 0x89b0
jmp 0x1e7f9
leaq -0x519a8(%rbp), %rdi
leaq -0x41040(%rbp), %rsi
callq 0xcd40
jmp 0x1e80e
leaq -0x519a8(%rbp), %rdi
callq 0x5140
movq %rax, %rsi
leaq -0x51980(%rbp), %rdi
callq 0x1f9a0
jmp 0x1e82b
leaq -0x519a8(%rbp), %rdi
callq 0x5230
leaq -0x51980(%rbp), %rdi
callq 0x5230
leaq -0x51981(%rbp), %rdi
callq 0x5480
movl $0x0, -0x1045c(%rbp)
leaq -0x41040(%rbp), %rdi
callq 0x190b0
movl -0x1045c(%rbp), %eax
testl %eax, %eax
jne 0x1e91c
jmp 0x1e875
jmp 0x1e906
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x103b0(%rbp)
movl %eax, -0x103b4(%rbp)
leaq -0x51960(%rbp), %rdi
callq 0x190b0
jmp 0x1e8f8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x103b0(%rbp)
movl %eax, -0x103b4(%rbp)
jmp 0x1e8ec
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x103b0(%rbp)
movl %eax, -0x103b4(%rbp)
jmp 0x1e8e0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x103b0(%rbp)
movl %eax, -0x103b4(%rbp)
leaq -0x519a8(%rbp), %rdi
callq 0x5230
leaq -0x51980(%rbp), %rdi
callq 0x5230
leaq -0x51981(%rbp), %rdi
callq 0x5480
leaq -0x41040(%rbp), %rdi
callq 0x190b0
jmp 0x1e95e
jmp 0x1e908
jmp 0x1e90a
jmp 0x1e90c
jmp 0x1e90e
jmp 0x1e910
jmp 0x1e912
movl $0x0, -0x1045c(%rbp)
leaq -0x10438(%rbp), %rdi
callq 0x8c90
leaq -0x10420(%rbp), %rdi
callq 0x5230
movl -0x1045c(%rbp), %eax
movl %eax, -0x51b84(%rbp)
testl %eax, %eax
je 0x1e959
jmp 0x1e946
movl -0x51b84(%rbp), %eax
subl $0x2, %eax
je 0x1cd45
jmp 0x1e957
jmp 0x1e978
jmp 0x1cd45
leaq -0x10438(%rbp), %rdi
callq 0x8c90
leaq -0x10420(%rbp), %rdi
callq 0x5230
jmp 0x1e997
leaq -0x8230(%rbp), %rdi
callq 0x160b0
leaq -0x28(%rbp), %rdi
callq 0x5230
addq $0x51ba8, %rsp          # imm = 0x51BA8
popq %rbx
popq %rbp
retq
leaq -0x8230(%rbp), %rdi
callq 0x160b0
leaq -0x28(%rbp), %rdi
callq 0x5230
movq -0x103b0(%rbp), %rdi
callq 0x56c0
nopl (%rax,%rax)