// File: BenLangmead[P]bowtie/./multikey_qsort.h
// Function: void mkeyQSortSuf2<SString<char>>(SString<char> const&, unsigned long, unsigned int*, unsigned long, unsigned int*, int, unsigned long, unsigned long, unsigned long, unsigned long, EList<unsigned long, 128>*)
void mkeyQSortSuf2(
	const T& host,
	size_t hlen,
	TIndexOffU *s,
	size_t slen,
	TIndexOffU *s2,
	int hi,
	size_t _begin,
	size_t _end,
	size_t _depth,
	size_t upto = OFF_MASK,
	EList<size_t>* boundaries = NULL)
{
	EList<EList<QSortRange> > block_list;
	while(true) {
		size_t begin = 0, end = 0, depth = 0;
		if(block_list.size() == 0) {
			begin = _begin;
			end = _end;
			depth = _depth;
		} else {
			if(block_list.back().size() > 0) {
				begin = block_list.back()[0].begin;
				end = block_list.back()[0].end;
				depth = block_list.back()[0].depth;
				block_list.back().erase(0);
			} else {
				block_list.resize(block_list.size() - 1);
				if(block_list.size() == 0) {
					break;
				}
			}
		}
		if(depth == upto) {
			if(boundaries != NULL) {
				(*boundaries).push_back(end);
			}
			continue;
		}
		assert_leq(begin, slen);
		assert_leq(end, slen);
		size_t a, b, c, d, /*e,*/ r;
		size_t n = end - begin;
		if(n <= 1) { // 1-element list already sorted
			if(n == 1 && boundaries != NULL) {
				boundaries->push_back(end);
			}
			continue;
		}
		CHOOSE_AND_SWAP_PIVOT(SWAP2, CHAR_AT_SUF); // pick pivot, swap it into [begin]
		int v = CHAR_AT_SUF(begin, depth); // v <- randomly-selected pivot value
#ifndef NDEBUG
		{
			bool stillInBounds = false;
			for(size_t i = begin; i < end; i++) {
				if(depth < (hlen-s[i])) {
					stillInBounds = true;
					break;
				} else { /* already fell off this suffix */ }
			}
			assert(stillInBounds); // >=1 suffix must still be in bounds
		}
#endif
		a = b = begin;
		c = d = /*e =*/ end-1;
		while(true) {
			// Invariant: everything before a is = pivot, everything
			// between a and b is <
			int bc = 0; // shouldn't have to init but gcc on Mac complains
			while(b <= c && v >= (bc = CHAR_AT_SUF(b, depth))) {
			if(v == bc) {
				SWAP2(s, s2, a, b); a++;
			}
			b++;
		}
		// Invariant: everything after d is = pivot, everything
		// between c and d is >
		int cc = 0; // shouldn't have to init but gcc on Mac complains
		while(b <= c && v <= (cc = CHAR_AT_SUF(c, depth))) {
			if(v == cc) {
				SWAP2(s, s2, c, d); d--; /*e--;*/
			}
			//else if(c == e && v == hi) e--;
			c--;
		}
		if(b > c) break;
			SWAP2(s, s2, b, c);
			b++;
			c--;
		}
		assert(a > begin || c < end-1);                      // there was at least one =s
		assert_lt(/*e*/d-c, n); // they can't all have been > pivot
		assert_lt(b-a, n); // they can't all have been < pivot
		assert(assertPartitionedSuf(host, s, slen, hi, v, begin, end, depth));  // check pre-=-swap invariant
		r = min(a-begin, b-a); VECSWAP2(s, s2, begin, b-r,   r);  // swap left = to center
		r = min(d-c, end-d-1); VECSWAP2(s, s2, b,     end-r, r);  // swap right = to center
		assert(assertPartitionedSuf2(host, s, slen, hi, v, begin, end, depth)); // check post-=-swap invariant
		r = b-a; // r <- # of <'s
		EList<QSortRange> tmp1;
		block_list.push_back(tmp1);
		block_list.back().clear();
		if(r > 0) { // recurse on <'s
			QSortRange tmp2;
			block_list.back().push_back(tmp2);
			block_list.back().back().begin = begin;
			block_list.back().back().end = begin + r;
			block_list.back().back().depth = depth;
		}
		// Do not recurse on ='s if the pivot was the off-the-end value;
		// they're already fully sorted
		//if(v != hi) { // recurse on ='s
			QSortRange tmp3;
			block_list.back().push_back(tmp3);
			block_list.back().back().begin = begin + r;
			block_list.back().back().end = begin + r + (a-begin) + (end-d-1);
			block_list.back().back().depth = depth + 1;
			//}
		r = d-c;   // r <- # of >'s excluding those exhausted
		if(r > 0 /*&& v < hi-1*/) { // recurse on >'s
			QSortRange tmp4;
			block_list.back().push_back(tmp4);
			block_list.back().back().begin = end - r;
			block_list.back().back().end = end;
			block_list.back().back().depth = depth;
		}
	}
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x2f0, %rsp            # imm = 0x2F0
movq 0x30(%rbp), %rax
movq 0x28(%rbp), %rax
movq 0x20(%rbp), %rax
movq 0x18(%rbp), %rax
movq 0x10(%rbp), %rax
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movq %rcx, -0x20(%rbp)
movq %r8, -0x28(%rbp)
movl %r9d, -0x2c(%rbp)
leaq -0x50(%rbp), %rdi
callq 0x2c010
jmp 0x2b2a2
movq $0x0, -0x58(%rbp)
movq $0x0, -0x60(%rbp)
movq $0x0, -0x68(%rbp)
leaq -0x50(%rbp), %rdi
callq 0x2c050
movq %rax, -0x148(%rbp)
jmp 0x2b2cc
movq -0x148(%rbp), %rax
cmpq $0x0, %rax
jne 0x2b307
movq 0x10(%rbp), %rax
movq %rax, -0x58(%rbp)
movq 0x18(%rbp), %rax
movq %rax, -0x60(%rbp)
movq 0x20(%rbp), %rax
movq %rax, -0x68(%rbp)
jmp 0x2b461
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
jmp 0x2bff0
leaq -0x50(%rbp), %rdi
callq 0x2c070
movq %rax, -0x150(%rbp)
jmp 0x2b319
movq -0x150(%rbp), %rdi
callq 0x2c0a0
movq %rax, -0x158(%rbp)
jmp 0x2b32e
movq -0x158(%rbp), %rax
cmpq $0x0, %rax
jbe 0x2b412
leaq -0x50(%rbp), %rdi
callq 0x2c070
movq %rax, -0x160(%rbp)
jmp 0x2b351
movq -0x160(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x2c0c0
movq %rax, -0x168(%rbp)
jmp 0x2b36a
movq -0x168(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x58(%rbp)
leaq -0x50(%rbp), %rdi
callq 0x2c070
movq %rax, -0x170(%rbp)
jmp 0x2b38a
movq -0x170(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x2c0c0
movq %rax, -0x178(%rbp)
jmp 0x2b3a3
movq -0x178(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x60(%rbp)
leaq -0x50(%rbp), %rdi
callq 0x2c070
movq %rax, -0x180(%rbp)
jmp 0x2b3c4
movq -0x180(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x2c0c0
movq %rax, -0x188(%rbp)
jmp 0x2b3dd
movq -0x188(%rbp), %rax
movq 0x10(%rax), %rax
movq %rax, -0x68(%rbp)
leaq -0x50(%rbp), %rdi
callq 0x2c070
movq %rax, -0x190(%rbp)
jmp 0x2b3fe
movq -0x190(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x2c0e0
jmp 0x2b410
jmp 0x2b45f
leaq -0x50(%rbp), %rdi
callq 0x2c050
movq %rax, -0x198(%rbp)
jmp 0x2b424
movq -0x198(%rbp), %rsi
decq %rsi
leaq -0x50(%rbp), %rdi
callq 0x2c170
jmp 0x2b439
leaq -0x50(%rbp), %rdi
callq 0x2c050
movq %rax, -0x1a0(%rbp)
jmp 0x2b44b
movq -0x1a0(%rbp), %rax
cmpq $0x0, %rax
jne 0x2b45d
jmp 0x2bfde
jmp 0x2b45f
jmp 0x2b461
movq -0x68(%rbp), %rax
cmpq 0x28(%rbp), %rax
jne 0x2b488
cmpq $0x0, 0x30(%rbp)
je 0x2b483
movq 0x30(%rbp), %rdi
leaq -0x60(%rbp), %rsi
callq 0x1a040
jmp 0x2b481
jmp 0x2b483
jmp 0x2b2a0
movq -0x60(%rbp), %rax
subq -0x58(%rbp), %rax
movq %rax, -0xa8(%rbp)
cmpq $0x1, -0xa8(%rbp)
ja 0x2b4c8
cmpq $0x1, -0xa8(%rbp)
jne 0x2b4c3
cmpq $0x0, 0x30(%rbp)
je 0x2b4c3
movq 0x30(%rbp), %rdi
leaq -0x60(%rbp), %rsi
callq 0x1a040
jmp 0x2b4c1
jmp 0x2b4c3
jmp 0x2b2a0
movq -0x58(%rbp), %rax
movq %rax, -0x80(%rbp)
cmpq $0x5, -0xa8(%rbp)
jb 0x2b7f9
movq -0x68(%rbp), %rax
movq -0x18(%rbp), %rcx
movq -0x58(%rbp), %rdx
movl 0x4(%rcx,%rdx,4), %ecx
addq %rcx, %rax
cmpq -0x10(%rbp), %rax
jae 0x2b51e
movq -0x8(%rbp), %rdi
movq -0x68(%rbp), %rsi
movq -0x18(%rbp), %rax
movq -0x58(%rbp), %rcx
movl 0x4(%rax,%rcx,4), %eax
addq %rax, %rsi
callq 0x14c30
movsbl (%rax), %eax
movl %eax, -0x1a4(%rbp)
jmp 0x2b527
movl -0x2c(%rbp), %eax
movl %eax, -0x1a4(%rbp)
movl -0x1a4(%rbp), %eax
cmpl $0x1, %eax
je 0x2b586
movq -0x68(%rbp), %rax
movq -0x18(%rbp), %rcx
movq -0x58(%rbp), %rdx
movl 0x4(%rcx,%rdx,4), %ecx
addq %rcx, %rax
cmpq -0x10(%rbp), %rax
jae 0x2b572
movq -0x8(%rbp), %rdi
movq -0x68(%rbp), %rsi
movq -0x18(%rbp), %rax
movq -0x58(%rbp), %rcx
movl 0x4(%rax,%rcx,4), %eax
addq %rax, %rsi
callq 0x14c30
movsbl (%rax), %eax
movl %eax, -0x1a8(%rbp)
jmp 0x2b57b
movl -0x2c(%rbp), %eax
movl %eax, -0x1a8(%rbp)
movl -0x1a8(%rbp), %eax
cmpl $0x2, %eax
jne 0x2b597
movq -0x58(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x80(%rbp)
jmp 0x2b7c3
movq -0x68(%rbp), %rax
movq -0x18(%rbp), %rcx
movq -0x58(%rbp), %rdx
movl 0x8(%rcx,%rdx,4), %ecx
addq %rcx, %rax
cmpq -0x10(%rbp), %rax
jae 0x2b5d7
movq -0x8(%rbp), %rdi
movq -0x68(%rbp), %rsi
movq -0x18(%rbp), %rax
movq -0x58(%rbp), %rcx
movl 0x8(%rax,%rcx,4), %eax
addq %rax, %rsi
callq 0x14c30
movsbl (%rax), %eax
movl %eax, -0x1ac(%rbp)
jmp 0x2b5e0
movl -0x2c(%rbp), %eax
movl %eax, -0x1ac(%rbp)
movl -0x1ac(%rbp), %eax
cmpl $0x1, %eax
je 0x2b63f
movq -0x68(%rbp), %rax
movq -0x18(%rbp), %rcx
movq -0x58(%rbp), %rdx
movl 0x8(%rcx,%rdx,4), %ecx
addq %rcx, %rax
cmpq -0x10(%rbp), %rax
jae 0x2b62b
movq -0x8(%rbp), %rdi
movq -0x68(%rbp), %rsi
movq -0x18(%rbp), %rax
movq -0x58(%rbp), %rcx
movl 0x8(%rax,%rcx,4), %eax
addq %rax, %rsi
callq 0x14c30
movsbl (%rax), %eax
movl %eax, -0x1b0(%rbp)
jmp 0x2b634
movl -0x2c(%rbp), %eax
movl %eax, -0x1b0(%rbp)
movl -0x1b0(%rbp), %eax
cmpl $0x2, %eax
jne 0x2b650
movq -0x58(%rbp), %rax
addq $0x2, %rax
movq %rax, -0x80(%rbp)
jmp 0x2b7c1
movq -0x68(%rbp), %rax
movq -0x18(%rbp), %rcx
movq -0x58(%rbp), %rdx
movl 0xc(%rcx,%rdx,4), %ecx
addq %rcx, %rax
cmpq -0x10(%rbp), %rax
jae 0x2b690
movq -0x8(%rbp), %rdi
movq -0x68(%rbp), %rsi
movq -0x18(%rbp), %rax
movq -0x58(%rbp), %rcx
movl 0xc(%rax,%rcx,4), %eax
addq %rax, %rsi
callq 0x14c30
movsbl (%rax), %eax
movl %eax, -0x1b4(%rbp)
jmp 0x2b699
movl -0x2c(%rbp), %eax
movl %eax, -0x1b4(%rbp)
movl -0x1b4(%rbp), %eax
cmpl $0x1, %eax
je 0x2b6f8
movq -0x68(%rbp), %rax
movq -0x18(%rbp), %rcx
movq -0x58(%rbp), %rdx
movl 0xc(%rcx,%rdx,4), %ecx
addq %rcx, %rax
cmpq -0x10(%rbp), %rax
jae 0x2b6e4
movq -0x8(%rbp), %rdi
movq -0x68(%rbp), %rsi
movq -0x18(%rbp), %rax
movq -0x58(%rbp), %rcx
movl 0xc(%rax,%rcx,4), %eax
addq %rax, %rsi
callq 0x14c30
movsbl (%rax), %eax
movl %eax, -0x1b8(%rbp)
jmp 0x2b6ed
movl -0x2c(%rbp), %eax
movl %eax, -0x1b8(%rbp)
movl -0x1b8(%rbp), %eax
cmpl $0x2, %eax
jne 0x2b709
movq -0x58(%rbp), %rax
addq $0x3, %rax
movq %rax, -0x80(%rbp)
jmp 0x2b7bf
movq -0x68(%rbp), %rax
movq -0x18(%rbp), %rcx
movq -0x58(%rbp), %rdx
movl 0x10(%rcx,%rdx,4), %ecx
addq %rcx, %rax
cmpq -0x10(%rbp), %rax
jae 0x2b749
movq -0x8(%rbp), %rdi
movq -0x68(%rbp), %rsi
movq -0x18(%rbp), %rax
movq -0x58(%rbp), %rcx
movl 0x10(%rax,%rcx,4), %eax
addq %rax, %rsi
callq 0x14c30
movsbl (%rax), %eax
movl %eax, -0x1bc(%rbp)
jmp 0x2b752
movl -0x2c(%rbp), %eax
movl %eax, -0x1bc(%rbp)
movl -0x1bc(%rbp), %eax
cmpl $0x1, %eax
je 0x2b7b1
movq -0x68(%rbp), %rax
movq -0x18(%rbp), %rcx
movq -0x58(%rbp), %rdx
movl 0x10(%rcx,%rdx,4), %ecx
addq %rcx, %rax
cmpq -0x10(%rbp), %rax
jae 0x2b79d
movq -0x8(%rbp), %rdi
movq -0x68(%rbp), %rsi
movq -0x18(%rbp), %rax
movq -0x58(%rbp), %rcx
movl 0x10(%rax,%rcx,4), %eax
addq %rax, %rsi
callq 0x14c30
movsbl (%rax), %eax
movl %eax, -0x1c0(%rbp)
jmp 0x2b7a6
movl -0x2c(%rbp), %eax
movl %eax, -0x1c0(%rbp)
movl -0x1c0(%rbp), %eax
cmpl $0x2, %eax
jne 0x2b7bd
movq -0x58(%rbp), %rax
addq $0x4, %rax
movq %rax, -0x80(%rbp)
jmp 0x2b7bf
jmp 0x2b7c1
jmp 0x2b7c3
movq -0x80(%rbp), %rax
cmpq -0x58(%rbp), %rax
je 0x2b7f7
movq -0x18(%rbp), %rdi
movq -0x20(%rbp), %rsi
movq -0x58(%rbp), %rdx
movq -0x80(%rbp), %rcx
callq 0x10f10
movq -0x28(%rbp), %rdi
movq -0x20(%rbp), %rsi
movq -0x58(%rbp), %rdx
movq -0x80(%rbp), %rcx
callq 0x10f10
jmp 0x2b7f9
movq -0x68(%rbp), %rax
movq -0x18(%rbp), %rcx
movq -0x58(%rbp), %rdx
movl (%rcx,%rdx,4), %ecx
addq %rcx, %rax
cmpq -0x10(%rbp), %rax
jae 0x2b837
movq -0x8(%rbp), %rdi
movq -0x68(%rbp), %rsi
movq -0x18(%rbp), %rax
movq -0x58(%rbp), %rcx
movl (%rax,%rcx,4), %eax
addq %rax, %rsi
callq 0x14c30
movsbl (%rax), %eax
movl %eax, -0x1c4(%rbp)
jmp 0x2b840
movl -0x2c(%rbp), %eax
movl %eax, -0x1c4(%rbp)
movl -0x1c4(%rbp), %eax
movl %eax, -0xac(%rbp)
movq -0x58(%rbp), %rax
movq %rax, -0x88(%rbp)
movq %rax, -0x80(%rbp)
movq -0x60(%rbp), %rax
subq $0x1, %rax
movq %rax, -0x98(%rbp)
movq %rax, -0x90(%rbp)
jmp 0x2b873
movl $0x0, -0xb0(%rbp)
movq -0x88(%rbp), %rcx
xorl %eax, %eax
cmpq -0x90(%rbp), %rcx
movb %al, -0x1c5(%rbp)
ja 0x2b90b
movl -0xac(%rbp), %eax
movl %eax, -0x1cc(%rbp)
movq -0x68(%rbp), %rax
movq -0x18(%rbp), %rcx
movq -0x88(%rbp), %rdx
movl (%rcx,%rdx,4), %ecx
addq %rcx, %rax
cmpq -0x10(%rbp), %rax
jae 0x2b8e5
movq -0x8(%rbp), %rdi
movq -0x68(%rbp), %rsi
movq -0x18(%rbp), %rax
movq -0x88(%rbp), %rcx
movl (%rax,%rcx,4), %eax
addq %rax, %rsi
callq 0x14c30
movsbl (%rax), %eax
movl %eax, -0x1d0(%rbp)
jmp 0x2b8ee
movl -0x2c(%rbp), %eax
movl %eax, -0x1d0(%rbp)
movl -0x1cc(%rbp), %eax
movl -0x1d0(%rbp), %ecx
movl %ecx, -0xb0(%rbp)
cmpl %ecx, %eax
setge %al
movb %al, -0x1c5(%rbp)
movb -0x1c5(%rbp), %al
testb $0x1, %al
jne 0x2b917
jmp 0x2b978
movl -0xac(%rbp), %eax
cmpl -0xb0(%rbp), %eax
jne 0x2b961
movq -0x18(%rbp), %rdi
movq -0x20(%rbp), %rsi
movq -0x80(%rbp), %rdx
movq -0x88(%rbp), %rcx
callq 0x10f10
movq -0x28(%rbp), %rdi
movq -0x20(%rbp), %rsi
movq -0x80(%rbp), %rdx
movq -0x88(%rbp), %rcx
callq 0x10f10
movq -0x80(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x80(%rbp)
movq -0x88(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x88(%rbp)
jmp 0x2b87d
movl $0x0, -0xb4(%rbp)
movq -0x88(%rbp), %rcx
xorl %eax, %eax
cmpq -0x90(%rbp), %rcx
movb %al, -0x1d1(%rbp)
ja 0x2ba10
movl -0xac(%rbp), %eax
movl %eax, -0x1d8(%rbp)
movq -0x68(%rbp), %rax
movq -0x18(%rbp), %rcx
movq -0x90(%rbp), %rdx
movl (%rcx,%rdx,4), %ecx
addq %rcx, %rax
cmpq -0x10(%rbp), %rax
jae 0x2b9ea
movq -0x8(%rbp), %rdi
movq -0x68(%rbp), %rsi
movq -0x18(%rbp), %rax
movq -0x90(%rbp), %rcx
movl (%rax,%rcx,4), %eax
addq %rax, %rsi
callq 0x14c30
movsbl (%rax), %eax
movl %eax, -0x1dc(%rbp)
jmp 0x2b9f3
movl -0x2c(%rbp), %eax
movl %eax, -0x1dc(%rbp)
movl -0x1d8(%rbp), %eax
movl -0x1dc(%rbp), %ecx
movl %ecx, -0xb4(%rbp)
cmpl %ecx, %eax
setle %al
movb %al, -0x1d1(%rbp)
movb -0x1d1(%rbp), %al
testb $0x1, %al
jne 0x2ba1c
jmp 0x2ba89
movl -0xac(%rbp), %eax
cmpl -0xb4(%rbp), %eax
jne 0x2ba72
movq -0x18(%rbp), %rdi
movq -0x20(%rbp), %rsi
movq -0x90(%rbp), %rdx
movq -0x98(%rbp), %rcx
callq 0x10f10
movq -0x28(%rbp), %rdi
movq -0x20(%rbp), %rsi
movq -0x90(%rbp), %rdx
movq -0x98(%rbp), %rcx
callq 0x10f10
movq -0x98(%rbp), %rax
addq $-0x1, %rax
movq %rax, -0x98(%rbp)
movq -0x90(%rbp), %rax
addq $-0x1, %rax
movq %rax, -0x90(%rbp)
jmp 0x2b982
movq -0x88(%rbp), %rax
cmpq -0x90(%rbp), %rax
jbe 0x2ba9b
jmp 0x2bafa
movq -0x18(%rbp), %rdi
movq -0x20(%rbp), %rsi
movq -0x88(%rbp), %rdx
movq -0x90(%rbp), %rcx
callq 0x10f10
movq -0x28(%rbp), %rdi
movq -0x20(%rbp), %rsi
movq -0x88(%rbp), %rdx
movq -0x90(%rbp), %rcx
callq 0x10f10
movq -0x88(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x88(%rbp)
movq -0x90(%rbp), %rax
addq $-0x1, %rax
movq %rax, -0x90(%rbp)
jmp 0x2b871
movq -0x80(%rbp), %rax
subq -0x58(%rbp), %rax
movq %rax, -0xc0(%rbp)
movq -0x88(%rbp), %rax
subq -0x80(%rbp), %rax
movq %rax, -0xc8(%rbp)
leaq -0xc0(%rbp), %rdi
leaq -0xc8(%rbp), %rsi
callq 0x19900
movq (%rax), %rax
movq %rax, -0xa0(%rbp)
cmpq $0x0, -0xa0(%rbp)
jbe 0x2bb7a
movq -0x18(%rbp), %rdi
movq -0x20(%rbp), %rsi
movq -0x28(%rbp), %rdx
movq -0x58(%rbp), %rcx
movq -0x88(%rbp), %r8
movq -0xa0(%rbp), %r9
subq %r9, %r8
movq -0x60(%rbp), %r10
movq %rsp, %rax
movq %r10, 0x8(%rax)
movq %rcx, (%rax)
callq 0x12940
jmp 0x2bb78
jmp 0x2bb7a
movq -0x98(%rbp), %rax
subq -0x90(%rbp), %rax
movq %rax, -0xd0(%rbp)
movq -0x60(%rbp), %rax
subq -0x98(%rbp), %rax
subq $0x1, %rax
movq %rax, -0xd8(%rbp)
leaq -0xd0(%rbp), %rdi
leaq -0xd8(%rbp), %rsi
callq 0x19900
movq (%rax), %rax
movq %rax, -0xa0(%rbp)
cmpq $0x0, -0xa0(%rbp)
jbe 0x2bc07
movq -0x18(%rbp), %rdi
movq -0x20(%rbp), %rsi
movq -0x28(%rbp), %rdx
movq -0x88(%rbp), %rcx
movq -0x60(%rbp), %r11
movq -0xa0(%rbp), %r9
movq %r11, %r8
subq %r9, %r8
movq -0x58(%rbp), %r10
movq %rsp, %rax
movq %r11, 0x8(%rax)
movq %r10, (%rax)
callq 0x12940
jmp 0x2bc05
jmp 0x2bc07
movq -0x88(%rbp), %rax
movq -0x80(%rbp), %rcx
subq %rcx, %rax
movq %rax, -0xa0(%rbp)
leaq -0xf8(%rbp), %rdi
callq 0x2c1f0
jmp 0x2bc2a
leaq -0x50(%rbp), %rdi
leaq -0xf8(%rbp), %rsi
callq 0x2c230
jmp 0x2bc3c
leaq -0x50(%rbp), %rdi
callq 0x2c070
movq %rax, -0x1e8(%rbp)
jmp 0x2bc4e
movq -0x1e8(%rbp), %rdi
callq 0x2c2b0
jmp 0x2bc5c
cmpq $0x0, -0xa0(%rbp)
jbe 0x2bd85
leaq -0x50(%rbp), %rdi
callq 0x2c070
movq %rax, -0x1f0(%rbp)
jmp 0x2bc7c
movq -0x1f0(%rbp), %rdi
leaq -0x110(%rbp), %rsi
callq 0x2c2d0
jmp 0x2bc91
movq -0x58(%rbp), %rax
movq %rax, -0x200(%rbp)
leaq -0x50(%rbp), %rdi
callq 0x2c070
movq %rax, -0x1f8(%rbp)
jmp 0x2bcae
movq -0x1f8(%rbp), %rdi
callq 0x2c360
movq %rax, -0x208(%rbp)
jmp 0x2bcc3
movq -0x208(%rbp), %rax
movq -0x200(%rbp), %rcx
movq %rcx, (%rax)
movq -0x58(%rbp), %rax
movq -0xa0(%rbp), %rcx
addq %rcx, %rax
movq %rax, -0x218(%rbp)
leaq -0x50(%rbp), %rdi
callq 0x2c070
movq %rax, -0x210(%rbp)
jmp 0x2bcfb
movq -0x210(%rbp), %rdi
callq 0x2c360
movq %rax, -0x220(%rbp)
jmp 0x2bd10
movq -0x220(%rbp), %rax
movq -0x218(%rbp), %rcx
movq %rcx, 0x8(%rax)
movq -0x68(%rbp), %rax
movq %rax, -0x230(%rbp)
leaq -0x50(%rbp), %rdi
callq 0x2c070
movq %rax, -0x228(%rbp)
jmp 0x2bd3f
movq -0x228(%rbp), %rdi
callq 0x2c360
movq %rax, -0x238(%rbp)
jmp 0x2bd54
movq -0x238(%rbp), %rax
movq -0x230(%rbp), %rcx
movq %rcx, 0x10(%rax)
jmp 0x2bd85
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
leaq -0xf8(%rbp), %rdi
callq 0x2c390
jmp 0x2bff0
leaq -0x50(%rbp), %rdi
callq 0x2c070
movq %rax, -0x240(%rbp)
jmp 0x2bd97
movq -0x240(%rbp), %rdi
leaq -0x128(%rbp), %rsi
callq 0x2c2d0
jmp 0x2bdac
movq -0x58(%rbp), %rax
movq -0xa0(%rbp), %rcx
addq %rcx, %rax
movq %rax, -0x250(%rbp)
leaq -0x50(%rbp), %rdi
callq 0x2c070
movq %rax, -0x248(%rbp)
jmp 0x2bdd3
movq -0x248(%rbp), %rdi
callq 0x2c360
movq %rax, -0x258(%rbp)
jmp 0x2bde8
movq -0x258(%rbp), %rax
movq -0x250(%rbp), %rcx
movq %rcx, (%rax)
movq -0x58(%rbp), %rdx
movq -0xa0(%rbp), %rax
movq %rdx, %rcx
addq %rax, %rcx
movq -0x80(%rbp), %rax
subq %rdx, %rax
addq %rax, %rcx
movq -0x60(%rbp), %rax
movq -0x98(%rbp), %rdx
subq %rdx, %rax
leaq -0x1(%rax,%rcx), %rax
movq %rax, -0x268(%rbp)
leaq -0x50(%rbp), %rdi
callq 0x2c070
movq %rax, -0x260(%rbp)
jmp 0x2be40
movq -0x260(%rbp), %rdi
callq 0x2c360
movq %rax, -0x270(%rbp)
jmp 0x2be55
movq -0x270(%rbp), %rax
movq -0x268(%rbp), %rcx
movq %rcx, 0x8(%rax)
movq -0x68(%rbp), %rax
incq %rax
movq %rax, -0x280(%rbp)
leaq -0x50(%rbp), %rdi
callq 0x2c070
movq %rax, -0x278(%rbp)
jmp 0x2be87
movq -0x278(%rbp), %rdi
callq 0x2c360
movq %rax, -0x288(%rbp)
jmp 0x2be9c
movq -0x288(%rbp), %rax
movq -0x280(%rbp), %rcx
movq %rcx, 0x10(%rax)
movq -0x98(%rbp), %rax
subq -0x90(%rbp), %rax
movq %rax, -0xa0(%rbp)
cmpq $0x0, -0xa0(%rbp)
jbe 0x2bfcd
leaq -0x50(%rbp), %rdi
callq 0x2c070
movq %rax, -0x290(%rbp)
jmp 0x2bee3
movq -0x290(%rbp), %rdi
leaq -0x140(%rbp), %rsi
callq 0x2c2d0
jmp 0x2bef8
movq -0x60(%rbp), %rax
movq -0xa0(%rbp), %rcx
subq %rcx, %rax
movq %rax, -0x2a0(%rbp)
leaq -0x50(%rbp), %rdi
callq 0x2c070
movq %rax, -0x298(%rbp)
jmp 0x2bf1f
movq -0x298(%rbp), %rdi
callq 0x2c360
movq %rax, -0x2a8(%rbp)
jmp 0x2bf34
movq -0x2a8(%rbp), %rax
movq -0x2a0(%rbp), %rcx
movq %rcx, (%rax)
movq -0x60(%rbp), %rax
movq %rax, -0x2b8(%rbp)
leaq -0x50(%rbp), %rdi
callq 0x2c070
movq %rax, -0x2b0(%rbp)
jmp 0x2bf62
movq -0x2b0(%rbp), %rdi
callq 0x2c360
movq %rax, -0x2c0(%rbp)
jmp 0x2bf77
movq -0x2c0(%rbp), %rax
movq -0x2b8(%rbp), %rcx
movq %rcx, 0x8(%rax)
movq -0x68(%rbp), %rax
movq %rax, -0x2d0(%rbp)
leaq -0x50(%rbp), %rdi
callq 0x2c070
movq %rax, -0x2c8(%rbp)
jmp 0x2bfa6
movq -0x2c8(%rbp), %rdi
callq 0x2c360
movq %rax, -0x2d8(%rbp)
jmp 0x2bfbb
movq -0x2d8(%rbp), %rax
movq -0x2d0(%rbp), %rcx
movq %rcx, 0x10(%rax)
leaq -0xf8(%rbp), %rdi
callq 0x2c390
jmp 0x2b2a0
leaq -0x50(%rbp), %rdi
callq 0x2c3b0
addq $0x2f0, %rsp            # imm = 0x2F0
popq %rbp
retq
leaq -0x50(%rbp), %rdi
callq 0x2c3b0
movq -0x70(%rbp), %rdi
callq 0x6850
nopw %cs:(%rax,%rax)
nopl (%rax)