// File: /workspace/github_cpp_makefile_star2_O1/moporgic[P]2048-Framework/2048.cpp
// Function: main
int main(int argc, const char* argv[]) {
	std::cout << "2048 Demo: ";
	std::copy(argv, argv + argc, std::ostream_iterator<const char*>(std::cout, " "));
	std::cout << std::endl << std::endl;

	size_t total = 1000, block = 0, limit = 0;
	std::string slide_args, place_args;
	std::string load_path, save_path;
	for (int i = 1; i < argc; i++) {
		std::string arg = argv[i];
		auto match_arg = [&](std::string flag) -> bool {
			auto it = arg.find_first_not_of('-');
			return arg.find(flag, it) == it;
		};
		auto next_opt = [&]() -> std::string {
			auto it = arg.find('=') + 1;
			return it ? arg.substr(it) : argv[++i];
		};
		if (match_arg("total")) {
			total = std::stoull(next_opt());
		} else if (match_arg("block")) {
			block = std::stoull(next_opt());
		} else if (match_arg("limit")) {
			limit = std::stoull(next_opt());
		} else if (match_arg("slide") || match_arg("play")) {
			slide_args = next_opt();
		} else if (match_arg("place") || match_arg("env")) {
			place_args = next_opt();
		} else if (match_arg("load")) {
			load_path = next_opt();
		} else if (match_arg("save")) {
			save_path = next_opt();
		}
	}

	statistics stats(total, block, limit);

	if (load_path.size()) {
		std::ifstream in(load_path, std::ios::in);
		in >> stats;
		in.close();
		if (stats.is_finished()) stats.summary();
	}

	random_slider slide(slide_args);
	random_placer place(place_args);

	while (!stats.is_finished()) {
//		std::cerr << "======== Game " << stats.step() << " ========" << std::endl;
		slide.open_episode("~:" + place.name());
		place.open_episode(slide.name() + ":~");

		stats.open_episode(slide.name() + ":" + place.name());
		episode& game = stats.back();
		while (true) {
			agent& who = game.take_turns(slide, place);
			action move = who.take_action(game.state());
//			std::cerr << game.state() << "#" << game.step() << " " << who.name() << ": " << move << std::endl;
			if (game.apply_action(move) != true) break;
			if (who.check_for_win(game.state())) break;
		}
		agent& win = game.last_turns(slide, place);
		stats.close_episode(win.name());

		slide.close_episode(win.name());
		place.close_episode(win.name());
	}

	if (save_path.size()) {
		std::ofstream out(save_path, std::ios::out | std::ios::trunc);
		out << stats;
		out.close();
	}

	return 0;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x598, %rsp            # imm = 0x598
movq %rsi, 0x8(%rsp)
movl %edi, %ebx
movq 0x995d(%rip), %r14      # 0xcfd8
leaq 0x5a2e(%rip), %rsi      # 0x90b0
movl $0xb, %edx
movq %r14, %rdi
callq 0x32d0
movq %r14, 0x340(%rsp)
leaq 0x5b41(%rip), %rax      # 0x91df
movq %rax, 0x348(%rsp)
movl %ebx, 0x14(%rsp)
testl %ebx, %ebx
jle 0x36da
movl 0x14(%rsp), %ebx
incq %rbx
leaq 0x340(%rsp), %r15
movq 0x8(%rsp), %r12
movq %r15, %rdi
movq %r12, %rsi
callq 0x88e8
addq $0x8, %r12
decq %rbx
cmpq $0x1, %rbx
jg 0x36c2
movq (%r14), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x3270
movsbl %al, %esi
movq %r14, %rdi
callq 0x3030
movq %rax, %rdi
callq 0x31b0
movq %rax, %r14
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x3270
movsbl %al, %esi
movq %r14, %rdi
callq 0x3030
movq %rax, %rdi
callq 0x31b0
leaq 0x210(%rsp), %rax
movq %rax, -0x10(%rax)
xorl %ecx, %ecx
movq %rcx, -0x8(%rax)
movb %cl, (%rax)
leaq 0x1f0(%rsp), %rax
movq %rax, -0x10(%rax)
movq %rcx, -0x8(%rax)
movb %cl, (%rax)
leaq 0x190(%rsp), %rax
movq %rax, -0x10(%rax)
movq %rcx, -0x8(%rax)
movb %cl, (%rax)
leaq 0x170(%rsp), %rax
movq %rax, -0x10(%rax)
movq %rcx, -0x8(%rax)
movq $0x0, 0x40(%rsp)
movb %cl, (%rax)
movl $0x3e8, %eax            # imm = 0x3E8
movq %rax, 0x50(%rsp)
movl $0x0, %eax
movq %rax, 0x48(%rsp)
cmpl $0x2, 0x14(%rsp)
jl 0x40d0
leaq 0x68(%rsp), %r15
leaq 0x2d0(%rsp), %r14
movl $0x1, %ebx
movl $0x3e8, %eax            # imm = 0x3E8
movq %rax, 0x50(%rsp)
movq $0x0, 0x48(%rsp)
leaq 0x340(%rsp), %rbp
movq $0x0, 0x40(%rsp)
movslq %ebx, %r13
movq 0x8(%rsp), %rax
movq (%rax,%r13,8), %rsi
movq %rbp, %rdi
leaq 0x98(%rsp), %rdx
callq 0x3110
movq %r15, 0x58(%rsp)
leaq 0x58(%rsp), %rdi
leaq 0x58bc(%rip), %rsi      # 0x90bc
leaq 0x58ba(%rip), %rdx      # 0x90c1
callq 0x5918
movq %rbp, %rdi
movl $0x2d, %esi
xorl %edx, %edx
callq 0x3240
movq %rax, %r12
movq 0x58(%rsp), %rsi
movq 0x60(%rsp), %rcx
movq %rbp, %rdi
movq %rax, %rdx
callq 0x3410
movq %rax, %rbp
movq 0x58(%rsp), %rdi
cmpq %r15, %rdi
je 0x3845
callq 0x3250
cmpq %r12, %rbp
leaq 0x310(%rsp), %r15
jne 0x3898
leaq 0x340(%rsp), %r15
movq %r15, %rdi
movl $0x3d, %esi
xorl %edx, %edx
callq 0x3300
movq %rax, %r12
incq %r12
jne 0x395c
movq 0x8(%rsp), %rax
movq 0x8(%rax,%r13,8), %rsi
leaq 0x98(%rsp), %rdi
leaq 0x19(%rsp), %rdx
callq 0x3110
incl %ebx
jmp 0x3976
movq %r15, 0x300(%rsp)
leaq 0x300(%rsp), %rdi
leaq 0x5813(%rip), %rsi      # 0x90c2
leaq 0x5811(%rip), %rdx      # 0x90c7
callq 0x5918
leaq 0x340(%rsp), %rbp
movq %rbp, %rdi
movl $0x2d, %esi
xorl %edx, %edx
callq 0x3240
movq %rax, %r12
movq 0x300(%rsp), %rsi
movq 0x308(%rsp), %rcx
movq %rbp, %rdi
movq %rax, %rdx
callq 0x3410
movq %rax, %rbp
movq 0x300(%rsp), %rdi
cmpq %r15, %rdi
je 0x3905
callq 0x3250
cmpq %r12, %rbp
leaq 0x2f0(%rsp), %r15
jne 0x39d3
leaq 0x340(%rsp), %r15
movq %r15, %rdi
movl $0x3d, %esi
xorl %edx, %edx
callq 0x3300
movq %rax, %r12
incq %r12
jne 0x3a8f
movq 0x8(%rsp), %rax
movq 0x8(%rax,%r13,8), %rsi
leaq 0x98(%rsp), %rdi
leaq 0x1a(%rsp), %rdx
callq 0x3110
incl %ebx
jmp 0x3aa9
leaq 0x98(%rsp), %rdi
movq %r15, %rsi
movq %r12, %rdx
movq $-0x1, %rcx
callq 0x32a0
testq %r12, %r12
movq 0x98(%rsp), %r12
callq 0x3050
movq %rax, %rbp
movl (%rax), %r15d
movl $0x0, (%rax)
movq %r12, %rdi
leaq 0x220(%rsp), %rsi
movl $0xa, %edx
callq 0x3330
cmpq %r12, 0x220(%rsp)
je 0x4751
movl (%rbp), %ecx
testl %ecx, %ecx
movq %rax, 0x50(%rsp)
je 0x3cd4
cmpl $0x22, %ecx
jne 0x3cd8
jmp 0x475d
movq %r15, 0x2e0(%rsp)
leaq 0x2e0(%rsp), %rdi
leaq 0x56de(%rip), %rsi      # 0x90c8
leaq 0x56dc(%rip), %rdx      # 0x90cd
callq 0x5918
leaq 0x340(%rsp), %rbp
movq %rbp, %rdi
movl $0x2d, %esi
xorl %edx, %edx
callq 0x3240
movq %rax, %r12
movq 0x2e0(%rsp), %rsi
movq 0x2e8(%rsp), %rcx
movq %rbp, %rdi
movq %rax, %rdx
callq 0x3410
movq %rax, %rbp
movq 0x2e0(%rsp), %rdi
cmpq %r15, %rdi
je 0x3a40
callq 0x3250
cmpq %r12, %rbp
jne 0x3b06
leaq 0x340(%rsp), %r12
movq %r12, %rdi
movl $0x3d, %esi
xorl %edx, %edx
callq 0x3300
movq %rax, %r15
incq %r15
jne 0x3c65
movq 0x8(%rsp), %rax
movq 0x8(%rax,%r13,8), %rsi
leaq 0x98(%rsp), %rdi
leaq 0x1b(%rsp), %rdx
callq 0x3110
incl %ebx
jmp 0x3c7f
leaq 0x98(%rsp), %rdi
movq %r15, %rsi
movq %r12, %rdx
movq $-0x1, %rcx
callq 0x32a0
testq %r12, %r12
movq 0x98(%rsp), %r12
callq 0x3050
movq %rax, %rbp
movl (%rax), %r15d
movl $0x0, (%rax)
movq %r12, %rdi
leaq 0x220(%rsp), %rsi
movl $0xa, %edx
callq 0x3330
cmpq %r12, 0x220(%rsp)
je 0x4769
movl (%rbp), %ecx
testl %ecx, %ecx
movq %rax, 0x48(%rsp)
je 0x3cd4
cmpl $0x22, %ecx
jne 0x3cd8
jmp 0x4781
leaq 0x150(%rsp), %rax
movq %rax, 0x140(%rsp)
leaq 0x140(%rsp), %rdi
leaq 0x55a9(%rip), %rsi      # 0x90ce
leaq 0x55a7(%rip), %rdx      # 0x90d3
callq 0x5918
leaq 0x340(%rsp), %r15
movq %r15, %rdi
movl $0x2d, %esi
xorl %edx, %edx
callq 0x3240
movq %rax, %rbp
movq 0x140(%rsp), %rsi
movq 0x148(%rsp), %rcx
movq %r15, %rdi
movq %rax, %rdx
callq 0x3410
movq %rax, %r12
movb $0x1, %r15b
cmpq %rbp, %rax
je 0x3bd8
leaq 0x1d0(%rsp), %rax
movq %rax, 0x1c0(%rsp)
leaq 0x1c0(%rsp), %rdi
leaq 0x5544(%rip), %rsi      # 0x90d4
leaq 0x5541(%rip), %rdx      # 0x90d8
callq 0x5918
leaq 0x340(%rsp), %r15
movq %r15, %rdi
movl $0x2d, %esi
xorl %edx, %edx
callq 0x3240
movq 0x1c0(%rsp), %rsi
movq 0x1c8(%rsp), %rcx
movq %r15, %rdi
movq %rax, %rdx
movq %rax, %r15
callq 0x3410
cmpq %r15, %rax
sete %r15b
cmpq %rbp, %r12
je 0x3bf7
movq 0x1c0(%rsp), %rdi
leaq 0x1d0(%rsp), %rax
cmpq %rax, %rdi
je 0x3bf7
callq 0x3250
movq 0x140(%rsp), %rdi
leaq 0x150(%rsp), %rax
cmpq %rax, %rdi
leaq 0x340(%rsp), %rbp
je 0x3c19
callq 0x3250
testb %r15b, %r15b
je 0x3d2a
movq %rbp, %rdi
movl $0x3d, %esi
xorl %edx, %edx
callq 0x3300
movq %rax, %r12
incq %r12
leaq 0x68(%rsp), %r15
jne 0x3e7d
movq 0x8(%rsp), %rax
movq 0x8(%rax,%r13,8), %rsi
leaq 0x98(%rsp), %rdi
leaq 0x1c(%rsp), %rdx
callq 0x3110
incl %ebx
jmp 0x3e97
leaq 0x98(%rsp), %rdi
movq %r12, %rsi
movq %r15, %rdx
movq $-0x1, %rcx
callq 0x32a0
testq %r15, %r15
movq 0x98(%rsp), %r12
callq 0x3050
movq %rax, %rbp
movl (%rax), %r15d
movl $0x0, (%rax)
movq %r12, %rdi
leaq 0x220(%rsp), %rsi
movl $0xa, %edx
callq 0x3330
cmpq %r12, 0x220(%rsp)
je 0x4775
movl (%rbp), %ecx
testl %ecx, %ecx
movq %rax, 0x40(%rsp)
je 0x3cd4
cmpl $0x22, %ecx
jne 0x3cd8
jmp 0x478d
movl %r15d, (%rbp)
movq 0x98(%rsp), %rdi
leaq 0xa8(%rsp), %rax
cmpq %rax, %rdi
je 0x3cf2
callq 0x3250
leaq 0x68(%rsp), %r15
leaq 0x340(%rsp), %rbp
movq 0x340(%rsp), %rdi
leaq 0x350(%rsp), %rax
cmpq %rax, %rdi
je 0x3d19
callq 0x3250
incl %ebx
cmpl 0x14(%rsp), %ebx
jl 0x37d3
jmp 0x40d0
leaq 0x130(%rsp), %rax
movq %rax, 0x120(%rsp)
leaq 0x120(%rsp), %rdi
leaq 0x5390(%rip), %rsi      # 0x90d9
leaq 0x538e(%rip), %rdx      # 0x90de
callq 0x5918
movq %rbp, %rdi
movl $0x2d, %esi
xorl %edx, %edx
callq 0x3240
movq %rbp, %rdi
movq %rax, %rbp
movq 0x120(%rsp), %rsi
movq 0x128(%rsp), %rcx
movq %rax, %rdx
callq 0x3410
movq %rax, %r12
movb $0x1, %r15b
cmpq %rbp, %rax
je 0x3df4
leaq 0x1b0(%rsp), %rax
movq %rax, 0x1a0(%rsp)
leaq 0x1a0(%rsp), %rdi
leaq 0x5333(%rip), %rsi      # 0x90df
leaq 0x532f(%rip), %rdx      # 0x90e2
callq 0x5918
leaq 0x340(%rsp), %r15
movq %r15, %rdi
movl $0x2d, %esi
xorl %edx, %edx
callq 0x3240
movq 0x1a0(%rsp), %rsi
movq 0x1a8(%rsp), %rcx
movq %r15, %rdi
movq %rax, %rdx
movq %rax, %r15
callq 0x3410
cmpq %r15, %rax
sete %r15b
cmpq %rbp, %r12
je 0x3e13
movq 0x1a0(%rsp), %rdi
leaq 0x1b0(%rsp), %rax
cmpq %rax, %rdi
je 0x3e13
callq 0x3250
movq 0x120(%rsp), %rdi
leaq 0x130(%rsp), %rax
cmpq %rax, %rdi
leaq 0x340(%rsp), %rbp
je 0x3e35
callq 0x3250
testb %r15b, %r15b
je 0x3ea7
movq %rbp, %rdi
movl $0x3d, %esi
xorl %edx, %edx
callq 0x3300
movq %rax, %r12
incq %r12
leaq 0x68(%rsp), %r15
jne 0x3f6a
movq 0x8(%rsp), %rax
movq 0x8(%rax,%r13,8), %rsi
leaq 0x98(%rsp), %rdi
leaq 0x1d(%rsp), %rdx
callq 0x3110
incl %ebx
jmp 0x3f84
leaq 0x98(%rsp), %rdi
movq %rbp, %rsi
movq %r12, %rdx
movq $-0x1, %rcx
callq 0x32a0
testq %r12, %r12
leaq 0x200(%rsp), %rdi
jmp 0x40a0
movq %r14, %rbp
movq %r14, 0x2c0(%rsp)
leaq 0x2c0(%rsp), %rdi
leaq 0x5222(%rip), %rsi      # 0x90e3
leaq 0x521f(%rip), %rdx      # 0x90e7
callq 0x5918
leaq 0x68(%rsp), %r15
leaq 0x340(%rsp), %r12
movq %r12, %rdi
movl $0x2d, %esi
xorl %edx, %edx
callq 0x3240
movq 0x2c0(%rsp), %rsi
movq 0x2c8(%rsp), %rcx
movq %r12, %rdi
movq %rax, %r12
movq %rax, %rdx
callq 0x3410
movq 0x2c0(%rsp), %rdi
cmpq %rbp, %rdi
je 0x3f1f
movq %rax, %rbp
callq 0x3250
movq %rbp, %rax
cmpq %r12, %rax
jne 0x3f94
leaq 0x340(%rsp), %rbp
movq %rbp, %rdi
movl $0x3d, %esi
xorl %edx, %edx
callq 0x3300
movq %rax, %r12
incq %r12
jne 0x4054
movq 0x8(%rsp), %rax
movq 0x8(%rax,%r13,8), %rsi
leaq 0x98(%rsp), %rdi
leaq 0x1e(%rsp), %rdx
callq 0x3110
incl %ebx
jmp 0x406e
leaq 0x98(%rsp), %rdi
movq %rbp, %rsi
movq %r12, %rdx
movq $-0x1, %rcx
callq 0x32a0
testq %r12, %r12
leaq 0x1e0(%rsp), %rdi
jmp 0x40a0
leaq 0x2b0(%rsp), %rbp
movq %rbp, 0x2a0(%rsp)
leaq 0x2a0(%rsp), %rdi
leaq 0x5135(%rip), %rsi      # 0x90e8
leaq 0x5132(%rip), %rdx      # 0x90ec
callq 0x5918
leaq 0x340(%rsp), %r12
movq %r12, %rdi
movl $0x2d, %esi
xorl %edx, %edx
callq 0x3240
movq 0x2a0(%rsp), %rsi
movq 0x2a8(%rsp), %rcx
movq %r12, %rdi
movq %rax, %r12
movq %rax, %rdx
callq 0x3410
movq 0x2a0(%rsp), %rdi
cmpq %rbp, %rdi
je 0x400c
movq %rax, %rbp
callq 0x3250
movq %rbp, %rax
cmpq %r12, %rax
jne 0x3cf7
leaq 0x340(%rsp), %rbp
movq %rbp, %rdi
movl $0x3d, %esi
xorl %edx, %edx
callq 0x3300
movq %rax, %r12
incq %r12
jne 0x407b
movq 0x8(%rsp), %rax
movq 0x8(%rax,%r13,8), %rsi
leaq 0x98(%rsp), %rdi
leaq 0x1f(%rsp), %rdx
callq 0x3110
incl %ebx
jmp 0x4095
leaq 0x98(%rsp), %rdi
movq %rbp, %rsi
movq %r12, %rdx
movq $-0x1, %rcx
callq 0x32a0
testq %r12, %r12
leaq 0x180(%rsp), %rdi
jmp 0x40a0
leaq 0x98(%rsp), %rdi
movq %rbp, %rsi
movq %r12, %rdx
movq $-0x1, %rcx
callq 0x32a0
testq %r12, %r12
leaq 0x160(%rsp), %rdi
leaq 0x98(%rsp), %rsi
callq 0x32e0
movq 0x98(%rsp), %rdi
leaq 0xa8(%rsp), %rax
cmpq %rax, %rdi
je 0x3cff
callq 0x3250
jmp 0x3cff
leaq 0x240(%rsp), %rdi
movq 0x50(%rsp), %rax
movq %rax, -0x20(%rdi)
movq 0x48(%rsp), %rcx
testq %rcx, %rcx
cmoveq %rax, %rcx
movq %rcx, -0x18(%rdi)
movq 0x40(%rsp), %rcx
testq %rcx, %rcx
cmoveq %rax, %rcx
movq %rcx, -0x10(%rdi)
xorps %xmm0, %xmm0
movups %xmm0, -0x8(%rdi)
movups %xmm0, 0x8(%rdi)
movups %xmm0, 0x18(%rdi)
movups %xmm0, 0x28(%rdi)
movups %xmm0, 0x38(%rdi)
movq $0x0, 0x48(%rdi)
xorl %esi, %esi
callq 0x59a8
cmpq $0x0, 0x188(%rsp)
je 0x419a
leaq 0x340(%rsp), %rdi
leaq 0x180(%rsp), %rsi
movl $0x8, %edx
callq 0x33c0
leaq 0x340(%rsp), %rdi
leaq 0x220(%rsp), %rsi
callq 0x4ac0
leaq 0x340(%rsp), %rdi
callq 0x30a0
movq 0x238(%rsp), %rax
cmpq 0x220(%rsp), %rax
jb 0x418d
leaq 0x220(%rsp), %rdi
callq 0x4c58
leaq 0x340(%rsp), %rdi
callq 0x30b0
leaq 0x548(%rsp), %rdi
leaq 0x200(%rsp), %rsi
callq 0x4caa
leaq 0x98(%rsp), %r15
leaq 0x1e0(%rsp), %rsi
movq %r15, %rdi
callq 0x4d24
movq 0x238(%rsp), %rax
cmpq 0x220(%rsp), %rax
jae 0x4620
leaq 0x350(%rsp), %rbx
leaq 0x30(%rsp), %r14
leaq 0x20(%rsp), %r13
leaq 0x340(%rsp), %rbp
movq %r13, %rdi
movq %r15, %rsi
callq 0x4dd2
movl $0x2, %r8d
movq %r13, %rdi
xorl %esi, %esi
xorl %edx, %edx
leaq 0x4ed7(%rip), %rcx      # 0x90ed
callq 0x32c0
movq %rbx, 0x340(%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x4247
movq %rdx, 0x340(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x350(%rsp)
jmp 0x424d
movups (%rcx), %xmm0
movups %xmm0, (%rbx)
movq 0x8(%rax), %rdx
movq %rdx, 0x348(%rsp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq 0x340(%rsp), %rdi
cmpq %rbx, %rdi
je 0x427a
callq 0x3250
movq 0x20(%rsp), %rdi
cmpq %r14, %rdi
je 0x4289
callq 0x3250
movq %r13, %rdi
leaq 0x548(%rsp), %rsi
callq 0x4dd2
movq %r13, %rdi
leaq 0x4e4d(%rip), %rsi      # 0x90f0
callq 0x3470
movq %rbx, 0x340(%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x42d4
movq %rdx, 0x340(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x350(%rsp)
jmp 0x42da
movups (%rcx), %xmm0
movups %xmm0, (%rbx)
movq 0x8(%rax), %rdx
movq %rdx, 0x348(%rsp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq 0x340(%rsp), %rdi
cmpq %rbx, %rdi
je 0x4307
callq 0x3250
movq 0x20(%rsp), %rdi
cmpq %r14, %rdi
je 0x4316
callq 0x3250
leaq 0x320(%rsp), %r12
movq %r12, %rdi
leaq 0x548(%rsp), %rsi
callq 0x4dd2
movq %r12, %rdi
leaq 0x4db6(%rip), %rsi      # 0x90ee
callq 0x3470
movq %r14, 0x20(%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x4360
movq %rdx, 0x20(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x30(%rsp)
jmp 0x4367
movups (%rcx), %xmm0
movups %xmm0, (%r14)
movq 0x8(%rax), %rdx
movq %rdx, 0x28(%rsp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0x78(%rsp), %rdi
movq %r15, %rsi
callq 0x4dd2
movq 0x20(%rsp), %rcx
movl $0xf, %esi
cmpq %r14, %rcx
je 0x43a0
movq 0x30(%rsp), %rsi
movq 0x28(%rsp), %r8
movq 0x80(%rsp), %rdx
leaq (%rdx,%r8), %rax
cmpq %rsi, %rax
jbe 0x43d7
movl $0xf, %esi
leaq 0x88(%rsp), %rdi
cmpq %rdi, 0x78(%rsp)
je 0x43d2
movq 0x88(%rsp), %rsi
cmpq %rsi, %rax
jbe 0x43e6
movq 0x78(%rsp), %rsi
movq %r13, %rdi
callq 0x30d0
jmp 0x43f4
leaq 0x78(%rsp), %rdi
xorl %esi, %esi
xorl %edx, %edx
callq 0x32c0
movq %rbx, 0x340(%rsp)
movq (%rax), %rdx
leaq 0x10(%rax), %rcx
cmpq %rcx, %rdx
je 0x441d
movq %rdx, 0x340(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x350(%rsp)
jmp 0x4423
movups (%rcx), %xmm0
movups %xmm0, (%rbx)
movq %rax, %rdx
addq $0x8, %rdx
movq 0x8(%rax), %rsi
movq %rsi, 0x348(%rsp)
movq %rcx, (%rax)
movq $0x0, (%rdx)
movb $0x0, (%rcx)
leaq 0x220(%rsp), %rdi
movq %rbp, %rsi
callq 0x4e50
movq 0x340(%rsp), %rdi
cmpq %rbx, %rdi
je 0x4465
callq 0x3250
movq 0x78(%rsp), %rdi
leaq 0x88(%rsp), %rax
cmpq %rax, %rdi
je 0x447c
callq 0x3250
movq 0x20(%rsp), %rdi
cmpq %r14, %rdi
je 0x448b
callq 0x3250
movq 0x320(%rsp), %rdi
leaq 0x330(%rsp), %rax
cmpq %rax, %rdi
je 0x44a5
callq 0x3250
movq 0x270(%rsp), %rbx
cmpq 0x278(%rsp), %rbx
jne 0x44cb
movq 0x288(%rsp), %rax
movq -0x8(%rax), %rbx
movl $0x180, %eax            # imm = 0x180
addq %rax, %rbx
leaq -0xc0(%rbx), %r13
callq 0x3060
movabsq $0x431bde82d7b634db, %rcx # imm = 0x431BDE82D7B634DB
imulq %rcx
movq %rdx, %rax
shrq $0x3f, %rax
sarq $0x12, %rdx
addq %rax, %rdx
movq %rdx, -0x58(%rbx)
movq -0x68(%rbx), %rax
subq -0x70(%rbx), %rax
leaq 0x548(%rsp), %r14
testb $0x20, %al
je 0x450d
movq %r15, %r14
shlq $0x1b, %rax
movabsq $0x100000001, %rcx      # imm = 0x100000001
cmpq %rcx, %rax
cmovbq %r15, %r14
movq (%r14), %rax
movq %rbp, %rdi
movq %r14, %rsi
movq %r13, %rdx
callq *0x20(%rax)
leaq 0x85a8(%rip), %rax      # 0xcae0
movq %rax, 0x290(%rsp)
movl 0x348(%rsp), %eax
movl %eax, 0x298(%rsp)
movq %r13, %rdi
leaq 0x290(%rsp), %rsi
callq 0x4eac
testb %al, %al
je 0x4576
movq (%r14), %rax
movq %r14, %rdi
movq %r13, %rsi
callq *0x28(%rax)
testb %al, %al
je 0x44d2
movq %r13, %rdi
leaq 0x548(%rsp), %rsi
movq %r15, %rdx
callq 0x4f32
movq %rax, %r13
movq (%rax), %rax
movq %rbp, %rdi
movq %r13, %rsi
callq *0x40(%rax)
leaq 0x350(%rsp), %rbx
leaq 0x220(%rsp), %rdi
movq %rbp, %rsi
callq 0x4fae
movq 0x340(%rsp), %rdi
cmpq %rbx, %rdi
je 0x45c2
callq 0x3250
movq (%r13), %rax
movq %rbp, %rdi
movq %r13, %rsi
callq *0x40(%rax)
movq 0x340(%rsp), %rdi
cmpq %rbx, %rdi
je 0x45e1
callq 0x3250
movq (%r13), %rax
movq %rbp, %rdi
movq %r13, %rsi
callq *0x40(%rax)
movq 0x340(%rsp), %rdi
cmpq %rbx, %rdi
leaq 0x30(%rsp), %r14
leaq 0x20(%rsp), %r13
je 0x460a
callq 0x3250
movq 0x238(%rsp), %rax
cmpq 0x220(%rsp), %rax
jb 0x41f7
cmpq $0x0, 0x168(%rsp)
je 0x469f
leaq 0x340(%rsp), %rdi
leaq 0x160(%rsp), %rsi
movl $0x30, %edx
callq 0x3480
leaq 0x340(%rsp), %rdi
leaq 0x220(%rsp), %rsi
callq 0x4ff7
leaq 0x340(%rsp), %rdi
callq 0x3340
movq 0x8962(%rip), %rax      # 0xcfd0
movq (%rax), %rcx
movq 0x18(%rax), %rax
leaq 0x348(%rsp), %rdi
movq %rcx, -0x8(%rdi)
movq -0x18(%rcx), %rcx
movq %rax, 0x340(%rsp,%rcx)
callq 0x3220
leaq 0x438(%rsp), %rdi
callq 0x30e0
leaq 0x863a(%rip), %rbx      # 0xcce0
leaq 0xa0(%rsp), %rdi
movq %rbx, -0x8(%rdi)
callq 0x786c
leaq 0x550(%rsp), %rdi
movq %rbx, -0x8(%rdi)
callq 0x786c
leaq 0x240(%rsp), %rdi
callq 0x851c
movq 0x160(%rsp), %rdi
leaq 0x170(%rsp), %rax
cmpq %rax, %rdi
je 0x46ef
callq 0x3250
movq 0x180(%rsp), %rdi
leaq 0x190(%rsp), %rax
cmpq %rax, %rdi
je 0x4709
callq 0x3250
movq 0x1e0(%rsp), %rdi
leaq 0x1f0(%rsp), %rax
cmpq %rax, %rdi
je 0x4723
callq 0x3250
movq 0x200(%rsp), %rdi
leaq 0x210(%rsp), %rax
cmpq %rax, %rdi
je 0x473d
callq 0x3250
xorl %eax, %eax
addq $0x598, %rsp            # imm = 0x598
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0x49ee(%rip), %rdi      # 0x9146
callq 0x3170
leaq 0x49e2(%rip), %rdi      # 0x9146
callq 0x3350
leaq 0x49d6(%rip), %rdi      # 0x9146
callq 0x3170
leaq 0x49ca(%rip), %rdi      # 0x9146
callq 0x3170
leaq 0x49be(%rip), %rdi      # 0x9146
callq 0x3350
leaq 0x49b2(%rip), %rdi      # 0x9146
callq 0x3350
jmp 0x4947
jmp 0x4947
jmp 0x4947
jmp 0x4947
jmp 0x4947
movq %rax, %rbx
movq 0x120(%rsp), %rdi
leaq 0x130(%rsp), %rax
jmp 0x486e
jmp 0x496a
jmp 0x47f8
jmp 0x4947
jmp 0x4947
movq %rax, %rbx
movq 0x140(%rsp), %rdi
leaq 0x150(%rsp), %rax
jmp 0x486e
movq %rax, %rbx
jmp 0x4985
movq %rax, %rbx
jmp 0x499d
jmp 0x4942
movq %rax, %rbx
leaq 0x340(%rsp), %rdi
callq 0x3370
jmp 0x496d
movq %rax, %rbx
leaq 0x340(%rsp), %rdi
callq 0x30b0
jmp 0x499d
jmp 0x4947
jmp 0x4947
jmp 0x4851
jmp 0x4947
jmp 0x4947
jmp 0x4851
jmp 0x4947
jmp 0x4947
movq %rax, %rbx
cmpl $0x0, (%rbp)
jne 0x485e
movl %r15d, (%rbp)
movq 0x98(%rsp), %rdi
leaq 0xa8(%rsp), %rax
cmpq %rax, %rdi
je 0x494a
callq 0x3250
jmp 0x494a
jmp 0x496a
jmp 0x496a
movq %rbx, %rcx
movq %rax, %rbx
movq 0x340(%rsp), %rdi
cmpq %rcx, %rdi
jne 0x493b
jmp 0x496d
jmp 0x496a
jmp 0x496a
jmp 0x496a
jmp 0x48bd
jmp 0x496a
movq %rax, %rbx
movq 0x20(%rsp), %rdi
cmpq %r14, %rdi
jne 0x493b
jmp 0x496d
jmp 0x496a
movq %rax, %rbx
jmp 0x4926
movq %rax, %rbx
jmp 0x4912
movq %rax, %rbx
jmp 0x48fb
movq %rbx, %rcx
movq %rax, %rbx
movq 0x340(%rsp), %rdi
cmpq %rcx, %rdi
je 0x48fb
callq 0x3250
movq 0x78(%rsp), %rdi
leaq 0x88(%rsp), %rax
cmpq %rax, %rdi
je 0x4912
callq 0x3250
movq 0x20(%rsp), %rdi
leaq 0x30(%rsp), %rax
cmpq %rax, %rdi
je 0x4926
callq 0x3250
movq 0x320(%rsp), %rdi
leaq 0x330(%rsp), %rax
cmpq %rax, %rdi
je 0x496d
callq 0x3250
jmp 0x496d
movq %rax, %rbx
jmp 0x49aa
movq %rax, %rbx
movq 0x340(%rsp), %rdi
leaq 0x350(%rsp), %rax
cmpq %rax, %rdi
je 0x49aa
callq 0x3250
jmp 0x49aa
jmp 0x496a
jmp 0x496a
movq %rax, %rbx
leaq 0x836c(%rip), %rax      # 0xcce0
leaq 0xa0(%rsp), %rdi
movq %rax, -0x8(%rdi)
callq 0x786c
leaq 0x8354(%rip), %rax      # 0xcce0
leaq 0x550(%rsp), %rdi
movq %rax, -0x8(%rdi)
callq 0x786c
leaq 0x240(%rsp), %rdi
callq 0x851c
leaq 0x170(%rsp), %rax
movq 0x160(%rsp), %rdi
cmpq %rax, %rdi
je 0x49c4
callq 0x3250
movq 0x180(%rsp), %rdi
leaq 0x190(%rsp), %rax
cmpq %rax, %rdi
je 0x49de
callq 0x3250
movq 0x1e0(%rsp), %rdi
leaq 0x1f0(%rsp), %rax
cmpq %rax, %rdi
je 0x49f8
callq 0x3250
movq 0x200(%rsp), %rdi
leaq 0x210(%rsp), %rax
cmpq %rax, %rdi
je 0x4a12
callq 0x3250
movq %rbx, %rdi
callq 0x3420