// File: Laakeri[P]Triangulator/src/solver.cpp
// Function: main
int main(int argc, char** argv) {
	assert(argc == 1 || argc == 2 || argc == 3);
	int upperBound = -1;
	int problem = -1;
	
	for (int i = 1; i < argc; i++) {
		string s(argv[i]);
		if (s == "-treewidth") {
			problem = PROBLEM_TREEWIDTH;
		}
		else if (s == "-minfill") {
			problem = PROBLEM_MINFILL;
		}
		else if (s == "-bayes") {
			problem = PROBLEM_BAYES;
		}
		else if (s == "-hyper") {
			problem = PROBLEM_HYPER;
		}
		else if (s == "-frachyper") {
			problem = PROBLEM_FRACHYPER;
		}
		else if (s == "-pmcprogress") {
			PMC::setPrintProgress(true);
		}
		else if (s.size() > 3 && s.substr(0, 3) == "-k=") {
			upperBound = 0;
			for (int j = 3; j < (int)s.size(); j++) {
				assert(isdigit(s[j]));
				upperBound *= 10;
				upperBound += (s[j] - '0');
			}
			cerr<<"Upper bound set to "<<upperBound<<endl;
		}
		else {
			cerr<<"invalid arg"<<endl;
			abort();
		}
	}
	if (problem == -1) {
		cerr<<"No problem specified, defaulting to treewidth"<<endl;
		problem = PROBLEM_TREEWIDTH;
	}
	
	if (upperBound != -1 && problem != PROBLEM_MINFILL && problem != PROBLEM_TREEWIDTH) {
		cerr<<"WARNING: UPPER BOUND HAS EFFECT ONLY FOR TREEWIDTH AND MINFILL"<<endl;
	}
	
	if (problem == PROBLEM_BAYES) {
		Bayes::solve();
	}
	else if (problem == PROBLEM_HYPER) {
		Hyper::solve();
	}
	else if (problem == PROBLEM_FRACHYPER) {
		Hyper::solveFrac();
	}
	else {
		Timer timer;
		timer.start();
		set<pair<int, int> > edges;
		IO io;
		int n = io.readInput(cin, edges);
		assert(n <= maxN);
		Graph G(edges);
		
		if (upperBound == -1) {
			upperBound = (int)1e9;
		}
		if (problem == PROBLEM_MINFILL) {
			if (n == 0) return 0;
			vector<pair<int, int> > sol = MinFill::SolveGraph::solveGraph(G, 0, upperBound, 0);
			
			if (sol == FAILSOLUTION) {
				assert(upperBound < (int)1e9);
				cout<<"No fill in with <= "<<upperBound<<" edges"<<endl;
				cerr<<"No fill in with <= "<<upperBound<<" edges"<<endl;
			}
			else {
				// check correctness
				G.addEdges(sol);
				auto fill0 = MCS::MCS_MP(G);
				assert(fill0.F.size() == 0);
				
				sol = G.mapBack(sol);
				
				io.printFill(cout, sol);
				
				cerr<<"Fill edges: "<<sol.size()<<endl;
				cerr<<"*Treewidth: "<<MCS::getTreeWidth(G)<<endl;
				cerr<<"Time: "<<timer.getTime().count()<<endl;
			}
		}
		else if (problem == PROBLEM_TREEWIDTH) {
			pair<int, vector<pair<int, int> > > sol = TreeWidth::SolveGraph::solveGraph(G, 0, 0, upperBound);
			
			if (sol.S == FAILSOLUTION) {
				assert(upperBound < (int)1e9);
				cout<<"Treewidth > "<<upperBound<<endl;
				cerr<<"Treewidth > "<<upperBound<<endl;
			}
			else {
				// check correctness
				G.addEdges(sol.S);
				auto fill0 = MCS::MCS_MP(G);
				assert(fill0.F.size() == 0);
				
				int treeWidth = MCS::getTreeWidth(G);
				
				assert(treeWidth == sol.F);
				
				auto treeDecomposition = MCS::getTreeDecomposition(G);
				treeDecomposition = G.mapBack(treeDecomposition);
				
				for (auto& bag : treeDecomposition.F) {
					assert((int)bag.size()-1 <= treeWidth);
				}
				
				if (G.n > 0) {
					Graph testT(treeDecomposition.S);
					assert(testT.isConnected());
					assert(testT.n == G.n);
					assert(testT.m == G.n - 1);
				}
				
				io.printTreeDecomposition(cout, treeDecomposition);
				
				cerr<<"Treewidth: "<<treeWidth<<endl;
				cerr<<"*Fill edges: "<<sol.S.size()<<endl;
				cerr<<"Time: "<<timer.getTime().count()<<endl;
			}
		}
		else {
			abort();
		}
	}
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x510, %rsp            # imm = 0x510
movl $0x0, -0x4(%rbp)
movl %edi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movb $0x1, %al
cmpl $0x1, -0x8(%rbp)
movb %al, -0x399(%rbp)
je 0x4392
movb $0x1, %al
cmpl $0x2, -0x8(%rbp)
movb %al, -0x399(%rbp)
je 0x4392
cmpl $0x3, -0x8(%rbp)
sete %al
movb %al, -0x399(%rbp)
movb -0x399(%rbp), %al
testb $0x1, %al
jne 0x439e
jmp 0x43a0
jmp 0x43bf
leaq 0x54c5d(%rip), %rdi     # 0x59004
leaq 0x54c7a(%rip), %rsi     # 0x59028
movl $0x16, %edx
leaq 0x54c79(%rip), %rcx     # 0x59033
callq 0x31a0
movl $0xffffffff, -0x14(%rbp) # imm = 0xFFFFFFFF
movl $0xffffffff, -0x18(%rbp) # imm = 0xFFFFFFFF
movl $0x1, -0x1c(%rbp)
movl -0x1c(%rbp), %eax
cmpl -0x8(%rbp), %eax
jge 0x4795
movq -0x10(%rbp), %rax
movslq -0x1c(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq %rax, -0x3b0(%rbp)
leaq -0x41(%rbp), %rdi
movq %rdi, -0x3a8(%rbp)
callq 0x3490
movq -0x3b0(%rbp), %rsi
movq -0x3a8(%rbp), %rdx
leaq -0x40(%rbp), %rdi
callq 0x54d0
jmp 0x441c
leaq -0x41(%rbp), %rdi
callq 0x3320
leaq 0x54c1e(%rip), %rsi     # 0x5904a
leaq -0x40(%rbp), %rdi
callq 0x5580
movb %al, -0x3b1(%rbp)
jmp 0x443d
movb -0x3b1(%rbp), %al
testb $0x1, %al
jne 0x4449
jmp 0x4480
movl $0x2, -0x18(%rbp)
jmp 0x4770
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
leaq -0x41(%rbp), %rdi
callq 0x3320
jmp 0x5374
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
jmp 0x4787
leaq 0x54bce(%rip), %rsi     # 0x59055
leaq -0x40(%rbp), %rdi
callq 0x5580
movb %al, -0x3b2(%rbp)
jmp 0x4498
movb -0x3b2(%rbp), %al
testb $0x1, %al
jne 0x44a4
jmp 0x44b0
movl $0x1, -0x18(%rbp)
jmp 0x476e
leaq 0x54ba7(%rip), %rsi     # 0x5905e
leaq -0x40(%rbp), %rdi
callq 0x5580
movb %al, -0x3b3(%rbp)
jmp 0x44c8
movb -0x3b3(%rbp), %al
testb $0x1, %al
jne 0x44d4
jmp 0x44e0
movl $0x3, -0x18(%rbp)
jmp 0x476c
leaq 0x54b7e(%rip), %rsi     # 0x59065
leaq -0x40(%rbp), %rdi
callq 0x5580
movb %al, -0x3b4(%rbp)
jmp 0x44f8
movb -0x3b4(%rbp), %al
testb $0x1, %al
jne 0x4504
jmp 0x4510
movl $0x4, -0x18(%rbp)
jmp 0x476a
leaq 0x54b55(%rip), %rsi     # 0x5906c
leaq -0x40(%rbp), %rdi
callq 0x5580
movb %al, -0x3b5(%rbp)
jmp 0x4528
movb -0x3b5(%rbp), %al
testb $0x1, %al
jne 0x4534
jmp 0x4540
movl $0x6, -0x18(%rbp)
jmp 0x4768
leaq 0x54b30(%rip), %rsi     # 0x59077
leaq -0x40(%rbp), %rdi
callq 0x5580
movb %al, -0x3b6(%rbp)
jmp 0x4558
movb -0x3b6(%rbp), %al
testb $0x1, %al
jne 0x4564
jmp 0x4575
movl $0x1, %edi
callq 0x3a050
jmp 0x4570
jmp 0x4766
leaq -0x40(%rbp), %rdi
callq 0x31e0
movq %rax, %rcx
movb $0x0, -0x79(%rbp)
xorl %eax, %eax
cmpq $0x3, %rcx
movb %al, -0x3b7(%rbp)
jbe 0x45d5
xorl %eax, %eax
movl %eax, %edx
leaq -0x78(%rbp), %rdi
leaq -0x40(%rbp), %rsi
movl $0x3, %ecx
callq 0x32e0
jmp 0x45ab
movb $0x1, -0x79(%rbp)
leaq 0x54ace(%rip), %rsi     # 0x59084
leaq -0x78(%rbp), %rdi
callq 0x5580
movb %al, -0x3b8(%rbp)
jmp 0x45c7
movb -0x3b8(%rbp), %al
movb %al, -0x3b7(%rbp)
jmp 0x45d5
movb -0x3b7(%rbp), %al
movb %al, -0x3b9(%rbp)
testb $0x1, -0x79(%rbp)
jne 0x45e9
jmp 0x45f2
leaq -0x78(%rbp), %rdi
callq 0x3190
movb -0x3b9(%rbp), %al
testb $0x1, %al
jne 0x4601
jmp 0x472e
movl $0x0, -0x14(%rbp)
movl $0x3, -0x80(%rbp)
movl -0x80(%rbp), %eax
movl %eax, -0x3c0(%rbp)
leaq -0x40(%rbp), %rdi
callq 0x31e0
movq %rax, %rcx
movl -0x3c0(%rbp), %eax
cmpl %ecx, %eax
jge 0x46e3
movslq -0x80(%rbp), %rsi
leaq -0x40(%rbp), %rdi
callq 0x34e0
movq %rax, -0x3c8(%rbp)
jmp 0x4648
movq -0x3c8(%rbp), %rax
movsbl (%rax), %edi
callq 0x32a0
cmpl $0x0, %eax
je 0x465e
jmp 0x469f
leaq 0x54a23(%rip), %rdi     # 0x59088
leaq 0x549bc(%rip), %rsi     # 0x59028
movl $0x31, %edx
leaq 0x549bb(%rip), %rcx     # 0x59033
callq 0x31a0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
testb $0x1, -0x79(%rbp)
jne 0x4691
jmp 0x469a
leaq -0x78(%rbp), %rdi
callq 0x3190
jmp 0x4787
movl -0x14(%rbp), %ecx
addl %ecx, %ecx
movl %ecx, %eax
leal (%rax,%rax,4), %eax
movl %eax, -0x14(%rbp)
movslq -0x80(%rbp), %rsi
leaq -0x40(%rbp), %rdi
callq 0x34e0
movq %rax, -0x3d0(%rbp)
jmp 0x46c2
movq -0x3d0(%rbp), %rax
movsbl (%rax), %eax
subl $0x30, %eax
addl -0x14(%rbp), %eax
movl %eax, -0x14(%rbp)
movl -0x80(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x80(%rbp)
jmp 0x460f
movq 0x75906(%rip), %rdi     # 0x79ff0
leaq 0x549a5(%rip), %rsi     # 0x59096
callq 0x32b0
movq %rax, -0x3d8(%rbp)
jmp 0x46ff
movq -0x3d8(%rbp), %rdi
movl -0x14(%rbp), %esi
callq 0x3470
movq %rax, -0x3e0(%rbp)
jmp 0x4717
movq -0x3e0(%rbp), %rdi
movq 0x75893(%rip), %rsi     # 0x79fb8
callq 0x3300
jmp 0x472c
jmp 0x4764
movq 0x758bb(%rip), %rdi     # 0x79ff0
leaq 0x5496e(%rip), %rsi     # 0x590aa
callq 0x32b0
movq %rax, -0x3e8(%rbp)
jmp 0x474a
movq -0x3e8(%rbp), %rdi
movq 0x75860(%rip), %rsi     # 0x79fb8
callq 0x3300
jmp 0x475f
callq 0x3140
jmp 0x4766
jmp 0x4768
jmp 0x476a
jmp 0x476c
jmp 0x476e
jmp 0x4770
leaq -0x40(%rbp), %rdi
callq 0x3190
movl -0x1c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x1c(%rbp)
jmp 0x43d4
leaq -0x40(%rbp), %rdi
callq 0x3190
jmp 0x5374
cmpl $-0x1, -0x18(%rbp)
jne 0x47c4
movq 0x7584e(%rip), %rdi     # 0x79ff0
leaq 0x5490d(%rip), %rsi     # 0x590b6
callq 0x32b0
movq %rax, %rdi
movq 0x75800(%rip), %rsi     # 0x79fb8
callq 0x3300
movl $0x2, -0x18(%rbp)
cmpl $-0x1, -0x14(%rbp)
je 0x47f8
cmpl $0x1, -0x18(%rbp)
je 0x47f8
cmpl $0x2, -0x18(%rbp)
je 0x47f8
movq 0x75813(%rip), %rdi     # 0x79ff0
leaq 0x54900(%rip), %rsi     # 0x590e4
callq 0x32b0
movq %rax, %rdi
movq 0x757c5(%rip), %rsi     # 0x79fb8
callq 0x3300
cmpl $0x3, -0x18(%rbp)
jne 0x4808
callq 0x9db0
jmp 0x5368
cmpl $0x4, -0x18(%rbp)
jne 0x4818
callq 0x208a0
jmp 0x5366
cmpl $0x6, -0x18(%rbp)
jne 0x4828
callq 0x21040
jmp 0x5364
leaq -0x98(%rbp), %rdi
movq %rdi, -0x408(%rbp)
callq 0x55820
movq -0x408(%rbp), %rdi
callq 0x55870
leaq -0xc8(%rbp), %rdi
movq %rdi, -0x3f8(%rbp)
callq 0x55b0
leaq -0x118(%rbp), %rdi
movq %rdi, -0x400(%rbp)
callq 0x55d0
movq -0x400(%rbp), %rdi
movq -0x3f8(%rbp), %rdx
movq 0x75756(%rip), %rsi     # 0x79fd8
callq 0x250c0
movl %eax, -0x3ec(%rbp)
jmp 0x488f
movl -0x3ec(%rbp), %eax
movl %eax, -0x11c(%rbp)
cmpl $0xc350, -0x11c(%rbp)   # imm = 0xC350
jg 0x48a9
jmp 0x48d9
leaq 0x54873(%rip), %rdi     # 0x59123
leaq 0x54771(%rip), %rsi     # 0x59028
movl $0x54, %edx
leaq 0x54770(%rip), %rcx     # 0x59033
callq 0x31a0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
jmp 0x534a
leaq -0x178(%rbp), %rdi
leaq -0xc8(%rbp), %rsi
callq 0x15430
jmp 0x48ee
cmpl $-0x1, -0x14(%rbp)
jne 0x48fb
movl $0x3b9aca00, -0x14(%rbp) # imm = 0x3B9ACA00
cmpl $0x1, -0x18(%rbp)
jne 0x4d0d
cmpl $0x0, -0x11c(%rbp)
jne 0x4924
movl $0x0, -0x4(%rbp)
movl $0x1, -0x17c(%rbp)
jmp 0x530a
movl -0x14(%rbp), %ecx
leaq -0x198(%rbp), %rdi
leaq -0x178(%rbp), %rsi
xorl %r8d, %r8d
movl %r8d, %edx
callq 0x30370
jmp 0x4942
leaq 0x75967(%rip), %rsi     # 0x7a2b0
leaq -0x198(%rbp), %rdi
callq 0x5600
movb %al, -0x409(%rbp)
jmp 0x495d
movb -0x409(%rbp), %al
testb $0x1, %al
jne 0x496c
jmp 0x4a87
cmpl $0x3b9aca00, -0x14(%rbp) # imm = 0x3B9ACA00
jge 0x4977
jmp 0x49b8
leaq 0x547af(%rip), %rdi     # 0x5912d
leaq 0x546a3(%rip), %rsi     # 0x59028
movl $0x5f, %edx
leaq 0x546a2(%rip), %rcx     # 0x59033
callq 0x31a0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
jmp 0x533e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
jmp 0x4cfc
movq 0x75609(%rip), %rdi     # 0x79fc8
leaq 0x5477d(%rip), %rsi     # 0x59143
callq 0x32b0
movq %rax, -0x418(%rbp)
jmp 0x49d4
movq -0x418(%rbp), %rdi
movl -0x14(%rbp), %esi
callq 0x3470
movq %rax, -0x420(%rbp)
jmp 0x49ec
movq -0x420(%rbp), %rdi
leaq 0x5475d(%rip), %rsi     # 0x59157
callq 0x32b0
movq %rax, -0x428(%rbp)
jmp 0x4a08
movq -0x428(%rbp), %rdi
movq 0x755a2(%rip), %rsi     # 0x79fb8
callq 0x3300
jmp 0x4a1d
movq 0x755cc(%rip), %rdi     # 0x79ff0
leaq 0x54718(%rip), %rsi     # 0x59143
callq 0x32b0
movq %rax, -0x430(%rbp)
jmp 0x4a39
movq -0x430(%rbp), %rdi
movl -0x14(%rbp), %esi
callq 0x3470
movq %rax, -0x438(%rbp)
jmp 0x4a51
movq -0x438(%rbp), %rdi
leaq 0x546f8(%rip), %rsi     # 0x59157
callq 0x32b0
movq %rax, -0x440(%rbp)
jmp 0x4a6d
movq -0x440(%rbp), %rdi
movq 0x7553d(%rip), %rsi     # 0x79fb8
callq 0x3300
jmp 0x4a82
jmp 0x4ceb
leaq -0x178(%rbp), %rdi
leaq -0x198(%rbp), %rsi
callq 0x15db0
jmp 0x4a9c
leaq -0x1c8(%rbp), %rdi
leaq -0x178(%rbp), %rsi
callq 0x28a90
jmp 0x4ab1
leaq -0x1c8(%rbp), %rdi
callq 0x5680
cmpq $0x0, %rax
jne 0x4ac5
jmp 0x4ae4
leaq 0x54692(%rip), %rdi     # 0x5915e
leaq 0x54555(%rip), %rsi     # 0x59028
movl $0x67, %edx
leaq 0x54554(%rip), %rcx     # 0x59033
callq 0x31a0
leaq -0x1f8(%rbp), %rdi
leaq -0x198(%rbp), %rsi
callq 0x56a0
jmp 0x4af9
leaq -0x1e0(%rbp), %rdi
leaq -0x178(%rbp), %rsi
leaq -0x1f8(%rbp), %rdx
callq 0x16aa0
jmp 0x4b15
leaq -0x198(%rbp), %rdi
movq %rdi, -0x448(%rbp)
leaq -0x1e0(%rbp), %rsi
movq %rsi, -0x450(%rbp)
callq 0x5790
movq -0x450(%rbp), %rdi
callq 0x5470
leaq -0x1f8(%rbp), %rdi
callq 0x5470
movq -0x448(%rbp), %rdx
movq 0x7546c(%rip), %rsi     # 0x79fc8
leaq -0x118(%rbp), %rdi
callq 0x25ef0
jmp 0x4b6a
movq 0x7547f(%rip), %rdi     # 0x79ff0
leaq 0x54684(%rip), %rsi     # 0x591fc
callq 0x32b0
movq %rax, -0x458(%rbp)
jmp 0x4b86
leaq -0x198(%rbp), %rdi
callq 0x5680
movq -0x458(%rbp), %rdi
movq %rax, %rsi
callq 0x3080
movq %rax, -0x460(%rbp)
jmp 0x4baa
movq -0x460(%rbp), %rdi
movq 0x75400(%rip), %rsi     # 0x79fb8
callq 0x3300
jmp 0x4bbf
movq 0x7542a(%rip), %rdi     # 0x79ff0
leaq 0x545a5(%rip), %rsi     # 0x59172
callq 0x32b0
movq %rax, -0x468(%rbp)
jmp 0x4bdb
leaq -0x178(%rbp), %rdi
callq 0x29da0
movl %eax, -0x46c(%rbp)
jmp 0x4bef
movl -0x46c(%rbp), %esi
movq -0x468(%rbp), %rdi
callq 0x3470
movq %rax, -0x478(%rbp)
jmp 0x4c0a
movq -0x478(%rbp), %rdi
movq 0x753a0(%rip), %rsi     # 0x79fb8
callq 0x3300
jmp 0x4c1f
movq 0x753ca(%rip), %rdi     # 0x79ff0
leaq 0x54552(%rip), %rsi     # 0x5917f
callq 0x32b0
movq %rax, -0x480(%rbp)
jmp 0x4c3b
leaq -0x98(%rbp), %rdi
callq 0x55920
movsd %xmm0, -0x488(%rbp)
jmp 0x4c51
movsd -0x488(%rbp), %xmm0
movsd %xmm0, -0x200(%rbp)
leaq -0x200(%rbp), %rdi
callq 0x57c0
movsd %xmm0, -0x490(%rbp)
jmp 0x4c77
movsd -0x490(%rbp), %xmm0
movq -0x480(%rbp), %rdi
callq 0x34c0
movq %rax, -0x498(%rbp)
jmp 0x4c94
movq -0x498(%rbp), %rdi
movq 0x75316(%rip), %rsi     # 0x79fb8
callq 0x3300
jmp 0x4ca9
leaq -0x1c8(%rbp), %rdi
callq 0x57e0
jmp 0x4ceb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
jmp 0x4cdd
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
leaq -0x1f8(%rbp), %rdi
callq 0x5470
leaq -0x1c8(%rbp), %rdi
callq 0x57e0
jmp 0x4cfc
leaq -0x198(%rbp), %rdi
callq 0x5470
jmp 0x5300
leaq -0x198(%rbp), %rdi
callq 0x5470
jmp 0x533e
cmpl $0x2, -0x18(%rbp)
jne 0x52f9
movl -0x14(%rbp), %r8d
leaq -0x220(%rbp), %rdi
leaq -0x178(%rbp), %rsi
xorl %ecx, %ecx
movl %ecx, %edx
callq 0x56cb0
jmp 0x4d34
leaq -0x218(%rbp), %rdi
leaq 0x7556e(%rip), %rsi     # 0x7a2b0
callq 0x5600
movb %al, -0x499(%rbp)
jmp 0x4d4f
movb -0x499(%rbp), %al
testb $0x1, %al
jne 0x4d5e
jmp 0x4e30
cmpl $0x3b9aca00, -0x14(%rbp) # imm = 0x3B9ACA00
jge 0x4d69
jmp 0x4d99
leaq 0x543bd(%rip), %rdi     # 0x5912d
leaq 0x542b1(%rip), %rsi     # 0x59028
movl $0x76, %edx
leaq 0x542b0(%rip), %rcx     # 0x59033
callq 0x31a0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
jmp 0x52eb
movq 0x75228(%rip), %rdi     # 0x79fc8
leaq 0x543df(%rip), %rsi     # 0x59186
callq 0x32b0
movq %rax, -0x4a8(%rbp)
jmp 0x4db5
movq -0x4a8(%rbp), %rdi
movl -0x14(%rbp), %esi
callq 0x3470
movq %rax, -0x4b0(%rbp)
jmp 0x4dcd
movq -0x4b0(%rbp), %rdi
movq 0x751dd(%rip), %rsi     # 0x79fb8
callq 0x3300
jmp 0x4de2
movq 0x75207(%rip), %rdi     # 0x79ff0
leaq 0x54396(%rip), %rsi     # 0x59186
callq 0x32b0
movq %rax, -0x4b8(%rbp)
jmp 0x4dfe
movq -0x4b8(%rbp), %rdi
movl -0x14(%rbp), %esi
callq 0x3470
movq %rax, -0x4c0(%rbp)
jmp 0x4e16
movq -0x4c0(%rbp), %rdi
movq 0x75194(%rip), %rsi     # 0x79fb8
callq 0x3300
jmp 0x4e2b
jmp 0x52dd
leaq -0x218(%rbp), %rsi
leaq -0x178(%rbp), %rdi
callq 0x15db0
jmp 0x4e45
leaq -0x250(%rbp), %rdi
leaq -0x178(%rbp), %rsi
callq 0x28a90
jmp 0x4e5a
leaq -0x250(%rbp), %rdi
callq 0x5680
cmpq $0x0, %rax
jne 0x4e6e
jmp 0x4e8d
leaq 0x542e9(%rip), %rdi     # 0x5915e
leaq 0x541ac(%rip), %rsi     # 0x59028
movl $0x7e, %edx
leaq 0x541ab(%rip), %rcx     # 0x59033
callq 0x31a0
leaq -0x178(%rbp), %rdi
callq 0x29da0
movl %eax, -0x4c4(%rbp)
jmp 0x4ea1
movl -0x4c4(%rbp), %eax
movl %eax, -0x254(%rbp)
movl -0x254(%rbp), %eax
cmpl -0x220(%rbp), %eax
jne 0x4ebd
jmp 0x4eed
leaq 0x542cf(%rip), %rdi     # 0x59193
leaq 0x5415d(%rip), %rsi     # 0x59028
movl $0x82, %edx
leaq 0x5415c(%rip), %rcx     # 0x59033
callq 0x31a0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
jmp 0x52cf
leaq -0x288(%rbp), %rdi
leaq -0x178(%rbp), %rsi
callq 0x2ba40
jmp 0x4f02
leaq -0x2e8(%rbp), %rdi
leaq -0x288(%rbp), %rsi
callq 0x5810
jmp 0x4f17
leaq -0x2b8(%rbp), %rdi
leaq -0x178(%rbp), %rsi
leaq -0x2e8(%rbp), %rdx
callq 0x16b60
jmp 0x4f33
leaq -0x288(%rbp), %rdi
leaq -0x2b8(%rbp), %rsi
callq 0x5870
leaq -0x2b8(%rbp), %rdi
callq 0x58b0
leaq -0x2e8(%rbp), %rdi
callq 0x58b0
leaq -0x288(%rbp), %rax
movq %rax, -0x2f0(%rbp)
movq -0x2f0(%rbp), %rdi
callq 0x58e0
movq %rax, -0x2f8(%rbp)
movq -0x2f0(%rbp), %rdi
callq 0x5910
movq %rax, -0x300(%rbp)
leaq -0x2f8(%rbp), %rdi
leaq -0x300(%rbp), %rsi
callq 0x5940
testb $0x1, %al
jne 0x4fae
jmp 0x503a
leaq -0x2f8(%rbp), %rdi
callq 0x5980
movq %rax, -0x308(%rbp)
movq -0x308(%rbp), %rdi
callq 0x59a0
subl $0x1, %eax
cmpl -0x254(%rbp), %eax
jg 0x4fda
jmp 0x5027
leaq 0x541c5(%rip), %rdi     # 0x591a6
leaq 0x54040(%rip), %rsi     # 0x59028
movl $0x88, %edx
leaq 0x5403f(%rip), %rcx     # 0x59033
callq 0x31a0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
jmp 0x52c3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
leaq -0x2e8(%rbp), %rdi
callq 0x58b0
jmp 0x52c3
jmp 0x5029
leaq -0x2f8(%rbp), %rdi
callq 0x59c0
jmp 0x4f92
cmpl $0x0, -0x128(%rbp)
jle 0x5129
leaq -0x270(%rbp), %rsi
leaq -0x360(%rbp), %rdi
callq 0x158e0
jmp 0x505c
leaq -0x360(%rbp), %rdi
callq 0x16d00
movb %al, -0x4c5(%rbp)
jmp 0x5070
movb -0x4c5(%rbp), %al
testb $0x1, %al
jne 0x507c
jmp 0x507e
jmp 0x50ba
leaq 0x54140(%rip), %rdi     # 0x591c5
leaq 0x53f9c(%rip), %rsi     # 0x59028
movl $0x8d, %edx
leaq 0x53f9b(%rip), %rcx     # 0x59033
callq 0x31a0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
leaq -0x360(%rbp), %rdi
callq 0x59e0
jmp 0x52c3
movl -0x310(%rbp), %eax
cmpl -0x128(%rbp), %eax
jne 0x50ca
jmp 0x50e9
leaq 0x54108(%rip), %rdi     # 0x591d9
leaq 0x53f50(%rip), %rsi     # 0x59028
movl $0x8e, %edx
leaq 0x53f4f(%rip), %rcx     # 0x59033
callq 0x31a0
movl -0x30c(%rbp), %eax
movl -0x128(%rbp), %ecx
subl $0x1, %ecx
cmpl %ecx, %eax
jne 0x50fe
jmp 0x511d
leaq 0x540e3(%rip), %rdi     # 0x591e8
leaq 0x53f1c(%rip), %rsi     # 0x59028
movl $0x8f, %edx
leaq 0x53f1b(%rip), %rcx     # 0x59033
callq 0x31a0
leaq -0x360(%rbp), %rdi
callq 0x59e0
leaq -0x390(%rbp), %rdi
leaq -0x288(%rbp), %rsi
callq 0x5810
jmp 0x513e
movq 0x74e83(%rip), %rsi     # 0x79fc8
leaq -0x118(%rbp), %rdi
leaq -0x390(%rbp), %rdx
callq 0x26070
jmp 0x515a
leaq -0x390(%rbp), %rdi
callq 0x58b0
movq 0x74e83(%rip), %rdi     # 0x79ff0
leaq 0x53fff(%rip), %rsi     # 0x59173
callq 0x32b0
movq %rax, -0x4d0(%rbp)
jmp 0x5182
movq -0x4d0(%rbp), %rdi
movl -0x254(%rbp), %esi
callq 0x3470
movq %rax, -0x4d8(%rbp)
jmp 0x519d
movq -0x4d8(%rbp), %rdi
movq 0x74e0d(%rip), %rsi     # 0x79fb8
callq 0x3300
jmp 0x51b2
movq 0x74e37(%rip), %rdi     # 0x79ff0
leaq 0x5403b(%rip), %rsi     # 0x591fb
callq 0x32b0
movq %rax, -0x4e0(%rbp)
jmp 0x51ce
leaq -0x218(%rbp), %rdi
callq 0x5680
movq -0x4e0(%rbp), %rdi
movq %rax, %rsi
callq 0x3080
movq %rax, -0x4e8(%rbp)
jmp 0x51f2
movq -0x4e8(%rbp), %rdi
movq 0x74db8(%rip), %rsi     # 0x79fb8
callq 0x3300
jmp 0x5207
movq 0x74de2(%rip), %rdi     # 0x79ff0
leaq 0x53f6a(%rip), %rsi     # 0x5917f
callq 0x32b0
movq %rax, -0x4f0(%rbp)
jmp 0x5223
leaq -0x98(%rbp), %rdi
callq 0x55920
movsd %xmm0, -0x4f8(%rbp)
jmp 0x5239
movsd -0x4f8(%rbp), %xmm0
movsd %xmm0, -0x398(%rbp)
leaq -0x398(%rbp), %rdi
callq 0x57c0
movsd %xmm0, -0x500(%rbp)
jmp 0x525f
movsd -0x500(%rbp), %xmm0
movq -0x4f0(%rbp), %rdi
callq 0x34c0
movq %rax, -0x508(%rbp)
jmp 0x527c
movq -0x508(%rbp), %rdi
movq 0x74d2e(%rip), %rsi     # 0x79fb8
callq 0x3300
jmp 0x5291
leaq -0x288(%rbp), %rdi
callq 0x58b0
leaq -0x250(%rbp), %rdi
callq 0x57e0
jmp 0x52dd
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
leaq -0x390(%rbp), %rdi
callq 0x58b0
leaq -0x288(%rbp), %rdi
callq 0x58b0
leaq -0x250(%rbp), %rdi
callq 0x57e0
jmp 0x52eb
leaq -0x220(%rbp), %rdi
callq 0x5a20
jmp 0x52fe
leaq -0x220(%rbp), %rdi
callq 0x5a20
jmp 0x533e
callq 0x3140
jmp 0x5300
movl $0x0, -0x17c(%rbp)
leaq -0x178(%rbp), %rdi
callq 0x59e0
leaq -0x118(%rbp), %rdi
callq 0x5a40
leaq -0xc8(%rbp), %rdi
callq 0x5a70
movl -0x17c(%rbp), %eax
testl %eax, %eax
je 0x533c
jmp 0x533a
jmp 0x5368
jmp 0x5364
leaq -0x178(%rbp), %rdi
callq 0x59e0
leaq -0x118(%rbp), %rdi
callq 0x5a40
leaq -0xc8(%rbp), %rdi
callq 0x5a70
jmp 0x5374
jmp 0x5366
jmp 0x5368
movl -0x4(%rbp), %eax
addq $0x510, %rsp            # imm = 0x510
popq %rbp
retq
movq -0x50(%rbp), %rdi
callq 0x3480
nopl (%rax)