// File: BenLangmead[P]bowtie/./multikey_qsort.h
// Function: void selectionSortSufDcU8<S2bDnaString, S2bDnaString>(S2bDnaString const&, S2bDnaString const&, unsigned long, unsigned long*, unsigned long, DifferenceCoverSample<S2bDnaString> const&, unsigned char, unsigned long, unsigned long, unsigned long, bool)
static void selectionSortSufDcU8(
		const T1& host1,
		const T2& host,
        size_t hlen,
        TIndexOffU* s,
        size_t slen,
        const DifferenceCoverSample<T1>& dc,
        uint8_t hi,
        size_t begin,
        size_t end,
        size_t depth,
        bool sanityCheck = false)
{
#define ASSERT_SUF_LT(l, r) \
	if(sanityCheck &&						\
	   !sstr_suf_lt(host1, s[l], hlen, host1, s[r], hlen, false)) { \
		assert(false); \
	}

	assert_gt(end, begin+1);
	assert_leq(end-begin, SELECTION_SORT_CUTOFF);
	assert_eq(hi, 4);
	size_t v = dc.v();
	if(end == begin+2) {
		size_t off = dc.tieBreakOff(s[begin], s[begin+1]);
		if(off + s[begin] >= hlen ||
		   off + s[begin+1] >= hlen)
		{
			off = OFF_MASK;
		}
		if(off != OFF_MASK) {
			if(off < depth) {
				qsortSufDcU8<T1,T2>(host1, host, hlen, s, slen, dc,
				                    begin, end, sanityCheck);
				// It's helpful for debugging if we call this here
				if(sanityCheck) {
					sanityCheckOrderedSufs(host1, hlen, s, slen,
					                       OFF_MASK, begin, end);
				}
				return;
			}
			v = off - depth + 1;
		}
	}
	assert_leq(v, dc.v());
	size_t lim = v;
	assert_geq(lim, 0);
	for(size_t i = begin; i < end-1; i++) {
		size_t targ = i;
		size_t targoff = depth + s[i];
		for(size_t j = i+1; j < end; j++) {
			assert_neq(j, targ);
			size_t joff = depth + s[j];
			size_t k;
			for(k = 0; k <= lim; k++) {
				assert_neq(j, targ);
				uint8_t jc = (k + joff < hlen)    ? get_uint8(host, k + joff)    : hi;
				uint8_t tc = (k + targoff < hlen) ? get_uint8(host, k + targoff) : hi;
				assert(jc != hi || tc != hi);
				if(jc > tc) {
					// the jth suffix is greater than the current
					// smallest suffix
					ASSERT_SUF_LT(targ, j);
					break;
				} else if(jc < tc) {
					// the jth suffix is less than the current smallest
					// suffix, so update smallest to be j
					ASSERT_SUF_LT(j, targ);
					targ = j;
					targoff = joff;
					break;
				} else if(k == lim) {
					// Check whether either string ends immediately
					// after this character
					assert_leq(k + joff + 1, hlen);
					assert_leq(k + targoff + 1, hlen);
					if(k + joff + 1 == hlen) {
						// targ < j
						assert_neq(k + targoff + 1, hlen);
						ASSERT_SUF_LT(targ, j);
						break;
					} else if(k + targoff + 1 == hlen) {
						// j < targ
						ASSERT_SUF_LT(j, targ);
						targ = j;
						targoff = joff;
						break;
					}
				} else {
					// They're equal so far, keep going
				}
			}
			// The jth suffix was equal to the current smallest suffix
			// up to the difference-cover period, so disambiguate with
			// difference cover
			if(k == lim+1) {
				assert_neq(j, targ);
				if(sufDcLtU8(host1, host, hlen, s[j], s[targ], dc, sanityCheck)) {
					// j < targ
					assert(!sufDcLtU8(host1, host, hlen, s[targ], s[j], dc, sanityCheck));
					ASSERT_SUF_LT(j, targ);
					targ = j;
					targoff = joff;
				} else {
					assert(sufDcLtU8(host1, host, hlen, s[targ], s[j], dc, sanityCheck));
					ASSERT_SUF_LT(targ, j); // !
				}
			}
		}
		if(i != targ) {
			ASSERT_SUF_LT(targ, i);
			// swap i and targ
			TIndexOffU tmp = s[i];
			s[i] = s[targ];
			s[targ] = tmp;
		}
		for(size_t j = i+1; j < end; j++) {
			ASSERT_SUF_LT(i, j);
		}
	}
	if(sanityCheck) {
		sanityCheckOrderedSufs(host1, hlen, s, slen, OFF_MASK, begin, end);
	}
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xd0, %rsp
movb 0x30(%rbp), %al
movq 0x28(%rbp), %r10
movq 0x20(%rbp), %r10
movq 0x18(%rbp), %r10
movb 0x10(%rbp), %r10b
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movq %rcx, -0x20(%rbp)
movq %r8, -0x28(%rbp)
movq %r9, -0x30(%rbp)
andb $0x1, %al
movb %al, -0x31(%rbp)
movq 0x20(%rbp), %rax
movq 0x18(%rbp), %rcx
addq $0x1, %rcx
cmpq %rcx, %rax
ja 0x16319
movq 0x33d59(%rip), %rdi     # 0x49fc0
leaq 0x28e8a(%rip), %rsi     # 0x3f0f8
callq 0x5360
movq %rax, %rdi
movq 0x20(%rbp), %rsi
callq 0x50c0
movq %rax, %rdi
leaq 0x28e85(%rip), %rsi     # 0x3f10e
callq 0x5360
movq %rax, %rdi
movq 0x18(%rbp), %rsi
addq $0x1, %rsi
callq 0x50c0
movq %rax, %rdi
leaq 0x2b310(%rip), %rsi     # 0x415b8
callq 0x5360
movq %rax, %rdi
movq 0x33cc9(%rip), %rsi     # 0x49f80
callq 0x53c0
movq 0x33cfd(%rip), %rdi     # 0x49fc0
leaq 0x2bc64(%rip), %rsi     # 0x41f2e
callq 0x5360
movq %rax, %rdi
leaq 0x2a4b1(%rip), %rsi     # 0x4078a
callq 0x5360
movq %rax, %rdi
movl $0x37c, %esi            # imm = 0x37C
callq 0x5750
movq %rax, %rdi
movq 0x33c8b(%rip), %rsi     # 0x49f80
callq 0x53c0
leaq 0x2a369(%rip), %rdi     # 0x4066a
leaq 0x2bc26(%rip), %rsi     # 0x41f2e
movl $0x37c, %edx            # imm = 0x37C
leaq 0x2c5cd(%rip), %rcx     # 0x428e1
callq 0x51e0
movq 0x20(%rbp), %rax
subq 0x18(%rbp), %rax
cmpq $0x6, %rax
jbe 0x163e5
movq 0x33c8e(%rip), %rdi     # 0x49fc0
leaq 0x28e6a(%rip), %rsi     # 0x3f1a3
callq 0x5360
movq %rax, %rdi
movq 0x20(%rbp), %rsi
subq 0x18(%rbp), %rsi
callq 0x50c0
movq %rax, %rdi
leaq 0x28e62(%rip), %rsi     # 0x3f1ba
callq 0x5360
movq %rax, %rdi
movl $0x6, %esi
callq 0x5750
movq %rax, %rdi
leaq 0x2b244(%rip), %rsi     # 0x415b8
callq 0x5360
movq %rax, %rdi
movq 0x33bfd(%rip), %rsi     # 0x49f80
callq 0x53c0
movq 0x33c31(%rip), %rdi     # 0x49fc0
leaq 0x2bb98(%rip), %rsi     # 0x41f2e
callq 0x5360
movq %rax, %rdi
leaq 0x2a3e5(%rip), %rsi     # 0x4078a
callq 0x5360
movq %rax, %rdi
movl $0x37d, %esi            # imm = 0x37D
callq 0x5750
movq %rax, %rdi
movq 0x33bbf(%rip), %rsi     # 0x49f80
callq 0x53c0
leaq 0x2a29d(%rip), %rdi     # 0x4066a
leaq 0x2bb5a(%rip), %rsi     # 0x41f2e
movl $0x37d, %edx            # imm = 0x37D
leaq 0x2c501(%rip), %rcx     # 0x428e1
callq 0x51e0
movzbl 0x10(%rbp), %eax
cmpl $0x4, %eax
je 0x1651b
movq 0x33bc7(%rip), %rdi     # 0x49fc0
leaq 0x28d19(%rip), %rsi     # 0x3f119
callq 0x5360
movq %rax, %rdi
movzbl 0x10(%rbp), %esi
callq 0x5620
movq %rax, %rdi
leaq 0x28d14(%rip), %rsi     # 0x3f12f
callq 0x5360
movq %rax, %rdi
leaq 0x23b6(%rip), %rsi      # 0x187e0
callq 0x5120
movq %rax, %rdi
movzbl 0x10(%rbp), %esi
callq 0x5620
movq %rax, %rdi
leaq 0x23cb(%rip), %rsi      # 0x18810
callq 0x5120
movq %rax, %rdi
leaq 0x28ce0(%rip), %rsi     # 0x3f134
callq 0x5360
movq %rax, %rdi
movl $0x4, %esi
callq 0x5750
movq %rax, %rdi
leaq 0x28cbf(%rip), %rsi     # 0x3f12f
callq 0x5360
movq %rax, %rdi
leaq 0x2361(%rip), %rsi      # 0x187e0
callq 0x5120
movq %rax, %rdi
movl $0x4, %esi
callq 0x5750
movq %rax, %rdi
leaq 0x2375(%rip), %rsi      # 0x18810
callq 0x5120
movq %rax, %rdi
leaq 0x2b10e(%rip), %rsi     # 0x415b8
callq 0x5360
movq %rax, %rdi
movq 0x33ac7(%rip), %rsi     # 0x49f80
callq 0x53c0
movq 0x33afb(%rip), %rdi     # 0x49fc0
leaq 0x2ba62(%rip), %rsi     # 0x41f2e
callq 0x5360
movq %rax, %rdi
leaq 0x2a2af(%rip), %rsi     # 0x4078a
callq 0x5360
movq %rax, %rdi
movl $0x37e, %esi            # imm = 0x37E
callq 0x5750
movq %rax, %rdi
movq 0x33a89(%rip), %rsi     # 0x49f80
callq 0x53c0
leaq 0x2a167(%rip), %rdi     # 0x4066a
leaq 0x2ba24(%rip), %rsi     # 0x41f2e
movl $0x37e, %edx            # imm = 0x37E
leaq 0x2c3cb(%rip), %rcx     # 0x428e1
callq 0x51e0
movq -0x30(%rbp), %rdi
callq 0x33470
movl %eax, %eax
movq %rax, -0x40(%rbp)
movq 0x20(%rbp), %rax
movq 0x18(%rbp), %rcx
addq $0x2, %rcx
cmpq %rcx, %rax
jne 0x16630
movq -0x30(%rbp), %rdi
movq -0x20(%rbp), %rax
movq 0x18(%rbp), %rcx
movq (%rax,%rcx,8), %rsi
movq -0x20(%rbp), %rax
movq 0x18(%rbp), %rcx
movq 0x8(%rax,%rcx,8), %rdx
callq 0x34b20
movl %eax, %eax
movq %rax, -0x48(%rbp)
movq -0x48(%rbp), %rax
movq -0x20(%rbp), %rcx
movq 0x18(%rbp), %rdx
addq (%rcx,%rdx,8), %rax
cmpq -0x18(%rbp), %rax
jae 0x16594
movq -0x48(%rbp), %rax
movq -0x20(%rbp), %rcx
movq 0x18(%rbp), %rdx
addq 0x8(%rcx,%rdx,8), %rax
cmpq -0x18(%rbp), %rax
jb 0x1659c
movq $-0x1, -0x48(%rbp)
cmpq $-0x1, -0x48(%rbp)
je 0x1662e
movq -0x48(%rbp), %rax
cmpq 0x28(%rbp), %rax
jae 0x1661e
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movq -0x18(%rbp), %rdx
movq -0x20(%rbp), %rcx
movq -0x28(%rbp), %r8
movq -0x30(%rbp), %r9
movq 0x18(%rbp), %r11
movq 0x20(%rbp), %r10
movb -0x31(%rbp), %al
andb $0x1, %al
movq %r11, (%rsp)
movq %r10, 0x8(%rsp)
movzbl %al, %eax
movl %eax, 0x10(%rsp)
callq 0x33490
testb $0x1, -0x31(%rbp)
je 0x16619
movq -0x8(%rbp), %rdi
movq -0x18(%rbp), %rsi
movq -0x20(%rbp), %rdx
movq -0x28(%rbp), %rcx
movq 0x18(%rbp), %r9
movq 0x20(%rbp), %rax
movq $-0x1, %r8
movq %rax, (%rsp)
callq 0x32480
jmp 0x1756d
movq -0x48(%rbp), %rax
subq 0x28(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x40(%rbp)
jmp 0x16630
movq -0x40(%rbp), %rax
movq %rax, -0xa0(%rbp)
movq -0x30(%rbp), %rdi
callq 0x33470
movl %eax, %ecx
movq -0xa0(%rbp), %rax
movl %ecx, %ecx
cmpq %rcx, %rax
jbe 0x1671f
movq 0x33961(%rip), %rdi     # 0x49fc0
leaq 0x28b3d(%rip), %rsi     # 0x3f1a3
callq 0x5360
movq %rax, %rdi
movq -0x40(%rbp), %rsi
callq 0x50c0
movq %rax, %rdi
leaq 0x28b39(%rip), %rsi     # 0x3f1ba
callq 0x5360
movq %rax, -0xa8(%rbp)
movq -0x30(%rbp), %rdi
callq 0x33470
movq -0xa8(%rbp), %rdi
movl %eax, %esi
callq 0x5530
movq %rax, %rdi
leaq 0x2af0a(%rip), %rsi     # 0x415b8
callq 0x5360
movq %rax, %rdi
movq 0x338c3(%rip), %rsi     # 0x49f80
callq 0x53c0
movq 0x338f7(%rip), %rdi     # 0x49fc0
leaq 0x2b85e(%rip), %rsi     # 0x41f2e
callq 0x5360
movq %rax, %rdi
leaq 0x2a0ab(%rip), %rsi     # 0x4078a
callq 0x5360
movq %rax, %rdi
movl $0x395, %esi            # imm = 0x395
callq 0x5750
movq %rax, %rdi
movq 0x33885(%rip), %rsi     # 0x49f80
callq 0x53c0
leaq 0x29f63(%rip), %rdi     # 0x4066a
leaq 0x2b820(%rip), %rsi     # 0x41f2e
movl $0x395, %edx            # imm = 0x395
leaq 0x2c1c7(%rip), %rcx     # 0x428e1
callq 0x51e0
movq -0x40(%rbp), %rax
movq %rax, -0x50(%rbp)
cmpq $0x0, -0x50(%rbp)
jae 0x167e5
movq 0x33887(%rip), %rdi     # 0x49fc0
leaq 0x28ac5(%rip), %rsi     # 0x3f205
callq 0x5360
movq %rax, %rdi
movq -0x50(%rbp), %rsi
callq 0x50c0
movq %rax, %rdi
leaq 0x28ac1(%rip), %rsi     # 0x3f21c
callq 0x5360
movq %rax, %rdi
xorl %esi, %esi
callq 0x5750
movq %rax, %rdi
leaq 0x2ae44(%rip), %rsi     # 0x415b8
callq 0x5360
movq %rax, %rdi
movq 0x337fd(%rip), %rsi     # 0x49f80
callq 0x53c0
movq 0x33831(%rip), %rdi     # 0x49fc0
leaq 0x2b798(%rip), %rsi     # 0x41f2e
callq 0x5360
movq %rax, %rdi
leaq 0x29fe5(%rip), %rsi     # 0x4078a
callq 0x5360
movq %rax, %rdi
movl $0x397, %esi            # imm = 0x397
callq 0x5750
movq %rax, %rdi
movq 0x337bf(%rip), %rsi     # 0x49f80
callq 0x53c0
leaq 0x29e9d(%rip), %rdi     # 0x4066a
leaq 0x2b75a(%rip), %rsi     # 0x41f2e
movl $0x397, %edx            # imm = 0x397
leaq 0x2c101(%rip), %rcx     # 0x428e1
callq 0x51e0
movq 0x18(%rbp), %rax
movq %rax, -0x58(%rbp)
movq -0x58(%rbp), %rax
movq 0x20(%rbp), %rcx
subq $0x1, %rcx
cmpq %rcx, %rax
jae 0x1753f
movq -0x58(%rbp), %rax
movq %rax, -0x60(%rbp)
movq 0x28(%rbp), %rax
movq -0x20(%rbp), %rcx
movq -0x58(%rbp), %rdx
addq (%rcx,%rdx,8), %rax
movq %rax, -0x68(%rbp)
movq -0x58(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x70(%rbp)
movq -0x70(%rbp), %rax
cmpq 0x20(%rbp), %rax
jae 0x173ea
movq -0x70(%rbp), %rax
cmpq -0x60(%rbp), %rax
jne 0x1696d
movq 0x33773(%rip), %rdi     # 0x49fc0
leaq 0x28a96(%rip), %rsi     # 0x3f2ea
callq 0x5360
movq %rax, %rdi
movq -0x70(%rbp), %rsi
callq 0x50c0
movq %rax, %rdi
leaq 0x288c0(%rip), %rsi     # 0x3f12f
callq 0x5360
movq %rax, %rdi
leaq 0x1f62(%rip), %rsi      # 0x187e0
callq 0x5120
movq %rax, %rdi
movq -0x70(%rbp), %rsi
callq 0x50c0
movq %rax, %rdi
leaq 0x1f77(%rip), %rsi      # 0x18810
callq 0x5120
movq %rax, %rdi
leaq 0x2888c(%rip), %rsi     # 0x3f134
callq 0x5360
movq %rax, %rdi
movq -0x60(%rbp), %rsi
callq 0x50c0
movq %rax, %rdi
leaq 0x2886c(%rip), %rsi     # 0x3f12f
callq 0x5360
movq %rax, %rdi
leaq 0x1f0e(%rip), %rsi      # 0x187e0
callq 0x5120
movq %rax, %rdi
movq -0x60(%rbp), %rsi
callq 0x50c0
movq %rax, %rdi
leaq 0x1f23(%rip), %rsi      # 0x18810
callq 0x5120
movq %rax, %rdi
leaq 0x2acbc(%rip), %rsi     # 0x415b8
callq 0x5360
movq %rax, %rdi
movq 0x33675(%rip), %rsi     # 0x49f80
callq 0x53c0
movq 0x336a9(%rip), %rdi     # 0x49fc0
leaq 0x2b610(%rip), %rsi     # 0x41f2e
callq 0x5360
movq %rax, %rdi
leaq 0x29e5d(%rip), %rsi     # 0x4078a
callq 0x5360
movq %rax, %rdi
movl $0x39c, %esi            # imm = 0x39C
callq 0x5750
movq %rax, %rdi
movq 0x33637(%rip), %rsi     # 0x49f80
callq 0x53c0
leaq 0x29d15(%rip), %rdi     # 0x4066a
leaq 0x2b5d2(%rip), %rsi     # 0x41f2e
movl $0x39c, %edx            # imm = 0x39C
leaq 0x2bf79(%rip), %rcx     # 0x428e1
callq 0x51e0
movq 0x28(%rbp), %rax
movq -0x20(%rbp), %rcx
movq -0x70(%rbp), %rdx
addq (%rcx,%rdx,8), %rax
movq %rax, -0x78(%rbp)
movq $0x0, -0x80(%rbp)
movq -0x80(%rbp), %rax
cmpq -0x50(%rbp), %rax
ja 0x170b5
movq -0x70(%rbp), %rax
cmpq -0x60(%rbp), %rax
jne 0x16acc
movq 0x33614(%rip), %rdi     # 0x49fc0
leaq 0x28937(%rip), %rsi     # 0x3f2ea
callq 0x5360
movq %rax, %rdi
movq -0x70(%rbp), %rsi
callq 0x50c0
movq %rax, %rdi
leaq 0x28761(%rip), %rsi     # 0x3f12f
callq 0x5360
movq %rax, %rdi
leaq 0x1e03(%rip), %rsi      # 0x187e0
callq 0x5120
movq %rax, %rdi
movq -0x70(%rbp), %rsi
callq 0x50c0
movq %rax, %rdi
leaq 0x1e18(%rip), %rsi      # 0x18810
callq 0x5120
movq %rax, %rdi
leaq 0x2872d(%rip), %rsi     # 0x3f134
callq 0x5360
movq %rax, %rdi
movq -0x60(%rbp), %rsi
callq 0x50c0
movq %rax, %rdi
leaq 0x2870d(%rip), %rsi     # 0x3f12f
callq 0x5360
movq %rax, %rdi
leaq 0x1daf(%rip), %rsi      # 0x187e0
callq 0x5120
movq %rax, %rdi
movq -0x60(%rbp), %rsi
callq 0x50c0
movq %rax, %rdi
leaq 0x1dc4(%rip), %rsi      # 0x18810
callq 0x5120
movq %rax, %rdi
leaq 0x2ab5d(%rip), %rsi     # 0x415b8
callq 0x5360
movq %rax, %rdi
movq 0x33516(%rip), %rsi     # 0x49f80
callq 0x53c0
movq 0x3354a(%rip), %rdi     # 0x49fc0
leaq 0x2b4b1(%rip), %rsi     # 0x41f2e
callq 0x5360
movq %rax, %rdi
leaq 0x29cfe(%rip), %rsi     # 0x4078a
callq 0x5360
movq %rax, %rdi
movl $0x3a0, %esi            # imm = 0x3A0
callq 0x5750
movq %rax, %rdi
movq 0x334d8(%rip), %rsi     # 0x49f80
callq 0x53c0
leaq 0x29bb6(%rip), %rdi     # 0x4066a
leaq 0x2b473(%rip), %rsi     # 0x41f2e
movl $0x3a0, %edx            # imm = 0x3A0
leaq 0x2be1a(%rip), %rcx     # 0x428e1
callq 0x51e0
movq -0x80(%rbp), %rax
addq -0x78(%rbp), %rax
cmpq -0x18(%rbp), %rax
jae 0x16af3
movq -0x10(%rbp), %rdi
movq -0x80(%rbp), %rsi
addq -0x78(%rbp), %rsi
callq 0x36f70
movb %al, -0xa9(%rbp)
jmp 0x16afc
movb 0x10(%rbp), %al
movb %al, -0xa9(%rbp)
movb -0xa9(%rbp), %al
movb %al, -0x81(%rbp)
movq -0x80(%rbp), %rax
addq -0x68(%rbp), %rax
cmpq -0x18(%rbp), %rax
jae 0x16b2f
movq -0x10(%rbp), %rdi
movq -0x80(%rbp), %rsi
addq -0x68(%rbp), %rsi
callq 0x36f70
movb %al, -0xaa(%rbp)
jmp 0x16b38
movb 0x10(%rbp), %al
movb %al, -0xaa(%rbp)
movb -0xaa(%rbp), %al
movb %al, -0x82(%rbp)
movzbl -0x81(%rbp), %ecx
movzbl 0x10(%rbp), %edx
movb $0x1, %al
cmpl %edx, %ecx
movb %al, -0xab(%rbp)
jne 0x16b71
movzbl -0x82(%rbp), %eax
movzbl 0x10(%rbp), %ecx
cmpl %ecx, %eax
setne %al
movb %al, -0xab(%rbp)
movb -0xab(%rbp), %al
testb $0x1, %al
jne 0x16b7d
jmp 0x16b7f
jmp 0x16b9e
leaq 0x2be1c(%rip), %rdi     # 0x429a2
leaq 0x2b3a1(%rip), %rsi     # 0x41f2e
movl $0x3a3, %edx            # imm = 0x3A3
leaq 0x2bd48(%rip), %rcx     # 0x428e1
callq 0x51e0
movzbl -0x81(%rbp), %eax
movzbl -0x82(%rbp), %ecx
cmpl %ecx, %eax
jle 0x16c14
testb $0x1, -0x31(%rbp)
je 0x16c0f
movq -0x8(%rbp), %rdi
movq -0x20(%rbp), %rax
movq -0x60(%rbp), %rcx
movq (%rax,%rcx,8), %rsi
movq -0x18(%rbp), %rdx
movq -0x8(%rbp), %rcx
movq -0x20(%rbp), %rax
movq -0x70(%rbp), %r8
movq (%rax,%r8,8), %r8
movq -0x18(%rbp), %r9
xorl %eax, %eax
movl $0x0, (%rsp)
callq 0x15f40
testb $0x1, %al
jne 0x16c0f
leaq 0x2a0f1(%rip), %rdi     # 0x40ce8
leaq 0x2b330(%rip), %rsi     # 0x41f2e
movl $0x3a7, %edx            # imm = 0x3A7
leaq 0x2bcd7(%rip), %rcx     # 0x428e1
callq 0x51e0
jmp 0x170b5
movzbl -0x81(%rbp), %eax
movzbl -0x82(%rbp), %ecx
cmpl %ecx, %eax
jge 0x16c9a
testb $0x1, -0x31(%rbp)
je 0x16c85
movq -0x8(%rbp), %rdi
movq -0x20(%rbp), %rax
movq -0x70(%rbp), %rcx
movq (%rax,%rcx,8), %rsi
movq -0x18(%rbp), %rdx
movq -0x8(%rbp), %rcx
movq -0x20(%rbp), %rax
movq -0x60(%rbp), %r8
movq (%rax,%r8,8), %r8
movq -0x18(%rbp), %r9
xorl %eax, %eax
movl $0x0, (%rsp)
callq 0x15f40
testb $0x1, %al
jne 0x16c85
leaq 0x2a07b(%rip), %rdi     # 0x40ce8
leaq 0x2b2ba(%rip), %rsi     # 0x41f2e
movl $0x3ac, %edx            # imm = 0x3AC
leaq 0x2bc61(%rip), %rcx     # 0x428e1
callq 0x51e0
movq -0x70(%rbp), %rax
movq %rax, -0x60(%rbp)
movq -0x78(%rbp), %rax
movq %rax, -0x68(%rbp)
jmp 0x170b5
movq -0x80(%rbp), %rax
cmpq -0x50(%rbp), %rax
jne 0x1709c
movq -0x80(%rbp), %rax
addq -0x78(%rbp), %rax
addq $0x1, %rax
cmpq -0x18(%rbp), %rax
jbe 0x16d7b
movq 0x332fb(%rip), %rdi     # 0x49fc0
leaq 0x284d7(%rip), %rsi     # 0x3f1a3
callq 0x5360
movq %rax, %rdi
movq -0x80(%rbp), %rsi
addq -0x78(%rbp), %rsi
addq $0x1, %rsi
callq 0x50c0
movq %rax, %rdi
leaq 0x284cb(%rip), %rsi     # 0x3f1ba
callq 0x5360
movq %rax, %rdi
movq -0x18(%rbp), %rsi
callq 0x50c0
movq %rax, %rdi
leaq 0x2a8ae(%rip), %rsi     # 0x415b8
callq 0x5360
movq %rax, %rdi
movq 0x33267(%rip), %rsi     # 0x49f80
callq 0x53c0
movq 0x3329b(%rip), %rdi     # 0x49fc0
leaq 0x2b202(%rip), %rsi     # 0x41f2e
callq 0x5360
movq %rax, %rdi
leaq 0x29a4f(%rip), %rsi     # 0x4078a
callq 0x5360
movq %rax, %rdi
movl $0x3b3, %esi            # imm = 0x3B3
callq 0x5750
movq %rax, %rdi
movq 0x33229(%rip), %rsi     # 0x49f80
callq 0x53c0
leaq 0x29907(%rip), %rdi     # 0x4066a
leaq 0x2b1c4(%rip), %rsi     # 0x41f2e
movl $0x3b3, %edx            # imm = 0x3B3
leaq 0x2bb6b(%rip), %rcx     # 0x428e1
callq 0x51e0
movq -0x80(%rbp), %rax
addq -0x68(%rbp), %rax
addq $0x1, %rax
cmpq -0x18(%rbp), %rax
jbe 0x16e4e
movq 0x33228(%rip), %rdi     # 0x49fc0
leaq 0x28404(%rip), %rsi     # 0x3f1a3
callq 0x5360
movq %rax, %rdi
movq -0x80(%rbp), %rsi
addq -0x68(%rbp), %rsi
addq $0x1, %rsi
callq 0x50c0
movq %rax, %rdi
leaq 0x283f8(%rip), %rsi     # 0x3f1ba
callq 0x5360
movq %rax, %rdi
movq -0x18(%rbp), %rsi
callq 0x50c0
movq %rax, %rdi
leaq 0x2a7db(%rip), %rsi     # 0x415b8
callq 0x5360
movq %rax, %rdi
movq 0x33194(%rip), %rsi     # 0x49f80
callq 0x53c0
movq 0x331c8(%rip), %rdi     # 0x49fc0
leaq 0x2b12f(%rip), %rsi     # 0x41f2e
callq 0x5360
movq %rax, %rdi
leaq 0x2997c(%rip), %rsi     # 0x4078a
callq 0x5360
movq %rax, %rdi
movl $0x3b4, %esi            # imm = 0x3B4
callq 0x5750
movq %rax, %rdi
movq 0x33156(%rip), %rsi     # 0x49f80
callq 0x53c0
leaq 0x29834(%rip), %rdi     # 0x4066a
leaq 0x2b0f1(%rip), %rsi     # 0x41f2e
movl $0x3b4, %edx            # imm = 0x3B4
leaq 0x2ba98(%rip), %rcx     # 0x428e1
callq 0x51e0
movq -0x80(%rbp), %rax
addq -0x78(%rbp), %rax
addq $0x1, %rax
cmpq -0x18(%rbp), %rax
jne 0x17015
movq -0x80(%rbp), %rax
addq -0x68(%rbp), %rax
addq $0x1, %rax
cmpq -0x18(%rbp), %rax
jne 0x16fb1
movq 0x3313f(%rip), %rdi     # 0x49fc0
leaq 0x28462(%rip), %rsi     # 0x3f2ea
callq 0x5360
movq %rax, %rdi
movq -0x80(%rbp), %rsi
addq -0x68(%rbp), %rsi
addq $0x1, %rsi
callq 0x50c0
movq %rax, %rdi
leaq 0x28284(%rip), %rsi     # 0x3f12f
callq 0x5360
movq %rax, %rdi
leaq 0x1926(%rip), %rsi      # 0x187e0
callq 0x5120
movq %rax, %rdi
movq -0x80(%rbp), %rsi
addq -0x68(%rbp), %rsi
addq $0x1, %rsi
callq 0x50c0
movq %rax, %rdi
leaq 0x1933(%rip), %rsi      # 0x18810
callq 0x5120
movq %rax, %rdi
leaq 0x28248(%rip), %rsi     # 0x3f134
callq 0x5360
movq %rax, %rdi
movq -0x18(%rbp), %rsi
callq 0x50c0
movq %rax, %rdi
leaq 0x28228(%rip), %rsi     # 0x3f12f
callq 0x5360
movq %rax, %rdi
leaq 0x18ca(%rip), %rsi      # 0x187e0
callq 0x5120
movq %rax, %rdi
movq -0x18(%rbp), %rsi
callq 0x50c0
movq %rax, %rdi
leaq 0x18df(%rip), %rsi      # 0x18810
callq 0x5120
movq %rax, %rdi
leaq 0x2a678(%rip), %rsi     # 0x415b8
callq 0x5360
movq %rax, %rdi
movq 0x33031(%rip), %rsi     # 0x49f80
callq 0x53c0
movq 0x33065(%rip), %rdi     # 0x49fc0
leaq 0x2afcc(%rip), %rsi     # 0x41f2e
callq 0x5360
movq %rax, %rdi
leaq 0x29819(%rip), %rsi     # 0x4078a
callq 0x5360
movq %rax, %rdi
movl $0x3b7, %esi            # imm = 0x3B7
callq 0x5750
movq %rax, %rdi
movq 0x32ff3(%rip), %rsi     # 0x49f80
callq 0x53c0
leaq 0x296d1(%rip), %rdi     # 0x4066a
leaq 0x2af8e(%rip), %rsi     # 0x41f2e
movl $0x3b7, %edx            # imm = 0x3B7
leaq 0x2b935(%rip), %rcx     # 0x428e1
callq 0x51e0
testb $0x1, -0x31(%rbp)
je 0x17010
movq -0x8(%rbp), %rdi
movq -0x20(%rbp), %rax
movq -0x60(%rbp), %rcx
movq (%rax,%rcx,8), %rsi
movq -0x18(%rbp), %rdx
movq -0x8(%rbp), %rcx
movq -0x20(%rbp), %rax
movq -0x70(%rbp), %r8
movq (%rax,%r8,8), %r8
movq -0x18(%rbp), %r9
xorl %eax, %eax
movl $0x0, (%rsp)
callq 0x15f40
testb $0x1, %al
jne 0x17010
leaq 0x29cf0(%rip), %rdi     # 0x40ce8
leaq 0x2af2f(%rip), %rsi     # 0x41f2e
movl $0x3b8, %edx            # imm = 0x3B8
leaq 0x2b8d6(%rip), %rcx     # 0x428e1
callq 0x51e0
jmp 0x170b5
movq -0x80(%rbp), %rax
addq -0x68(%rbp), %rax
addq $0x1, %rax
cmpq -0x18(%rbp), %rax
jne 0x17098
testb $0x1, -0x31(%rbp)
je 0x17086
movq -0x8(%rbp), %rdi
movq -0x20(%rbp), %rax
movq -0x70(%rbp), %rcx
movq (%rax,%rcx,8), %rsi
movq -0x18(%rbp), %rdx
movq -0x8(%rbp), %rcx
movq -0x20(%rbp), %rax
movq -0x60(%rbp), %r8
movq (%rax,%r8,8), %r8
movq -0x18(%rbp), %r9
xorl %eax, %eax
movl $0x0, (%rsp)
callq 0x15f40
testb $0x1, %al
jne 0x17086
leaq 0x29c7a(%rip), %rdi     # 0x40ce8
leaq 0x2aeb9(%rip), %rsi     # 0x41f2e
movl $0x3bc, %edx            # imm = 0x3BC
leaq 0x2b860(%rip), %rcx     # 0x428e1
callq 0x51e0
movq -0x70(%rbp), %rax
movq %rax, -0x60(%rbp)
movq -0x78(%rbp), %rax
movq %rax, -0x68(%rbp)
jmp 0x170b5
jmp 0x1709a
jmp 0x1709e
jmp 0x1709e
jmp 0x170a0
jmp 0x170a2
jmp 0x170a4
movq -0x80(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x80(%rbp)
jmp 0x16989
movq -0x80(%rbp), %rax
movq -0x50(%rbp), %rcx
addq $0x1, %rcx
cmpq %rcx, %rax
jne 0x173d7
movq -0x70(%rbp), %rax
cmpq -0x60(%rbp), %rax
jne 0x171ff
movq 0x32ee1(%rip), %rdi     # 0x49fc0
leaq 0x28204(%rip), %rsi     # 0x3f2ea
callq 0x5360
movq %rax, %rdi
movq -0x70(%rbp), %rsi
callq 0x50c0
movq %rax, %rdi
leaq 0x2802e(%rip), %rsi     # 0x3f12f
callq 0x5360
movq %rax, %rdi
leaq 0x16d0(%rip), %rsi      # 0x187e0
callq 0x5120
movq %rax, %rdi
movq -0x70(%rbp), %rsi
callq 0x50c0
movq %rax, %rdi
leaq 0x16e5(%rip), %rsi      # 0x18810
callq 0x5120
movq %rax, %rdi
leaq 0x27ffa(%rip), %rsi     # 0x3f134
callq 0x5360
movq %rax, %rdi
movq -0x60(%rbp), %rsi
callq 0x50c0
movq %rax, %rdi
leaq 0x27fda(%rip), %rsi     # 0x3f12f
callq 0x5360
movq %rax, %rdi
leaq 0x167c(%rip), %rsi      # 0x187e0
callq 0x5120
movq %rax, %rdi
movq -0x60(%rbp), %rsi
callq 0x50c0
movq %rax, %rdi
leaq 0x1691(%rip), %rsi      # 0x18810
callq 0x5120
movq %rax, %rdi
leaq 0x2a42a(%rip), %rsi     # 0x415b8
callq 0x5360
movq %rax, %rdi
movq 0x32de3(%rip), %rsi     # 0x49f80
callq 0x53c0
movq 0x32e17(%rip), %rdi     # 0x49fc0
leaq 0x2ad7e(%rip), %rsi     # 0x41f2e
callq 0x5360
movq %rax, %rdi
leaq 0x295cb(%rip), %rsi     # 0x4078a
callq 0x5360
movq %rax, %rdi
movl $0x3c9, %esi            # imm = 0x3C9
callq 0x5750
movq %rax, %rdi
movq 0x32da5(%rip), %rsi     # 0x49f80
callq 0x53c0
leaq 0x29483(%rip), %rdi     # 0x4066a
leaq 0x2ad40(%rip), %rsi     # 0x41f2e
movl $0x3c9, %edx            # imm = 0x3C9
leaq 0x2b6e7(%rip), %rcx     # 0x428e1
callq 0x51e0
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movq -0x18(%rbp), %rdx
movq -0x20(%rbp), %rax
movq -0x70(%rbp), %rcx
movq (%rax,%rcx,8), %rcx
movq -0x20(%rbp), %rax
movq -0x60(%rbp), %r8
movq (%rax,%r8,8), %r8
movq -0x30(%rbp), %r9
movb -0x31(%rbp), %al
andb $0x1, %al
movzbl %al, %eax
movl %eax, (%rsp)
callq 0x345b0
testb $0x1, %al
jne 0x17240
jmp 0x17315
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movq -0x18(%rbp), %rdx
movq -0x20(%rbp), %rax
movq -0x60(%rbp), %rcx
movq (%rax,%rcx,8), %rcx
movq -0x20(%rbp), %rax
movq -0x70(%rbp), %r8
movq (%rax,%r8,8), %r8
movq -0x30(%rbp), %r9
movb -0x31(%rbp), %al
andb $0x1, %al
movzbl %al, %eax
movl %eax, (%rsp)
callq 0x345b0
xorb $-0x1, %al
testb $0x1, %al
jne 0x17280
jmp 0x17282
jmp 0x172a1
leaq 0x2b72e(%rip), %rdi     # 0x429b7
leaq 0x2ac9e(%rip), %rsi     # 0x41f2e
movl $0x3cc, %edx            # imm = 0x3CC
leaq 0x2b645(%rip), %rcx     # 0x428e1
callq 0x51e0
testb $0x1, -0x31(%rbp)
je 0x17300
movq -0x8(%rbp), %rdi
movq -0x20(%rbp), %rax
movq -0x70(%rbp), %rcx
movq (%rax,%rcx,8), %rsi
movq -0x18(%rbp), %rdx
movq -0x8(%rbp), %rcx
movq -0x20(%rbp), %rax
movq -0x60(%rbp), %r8
movq (%rax,%r8,8), %r8
movq -0x18(%rbp), %r9
xorl %eax, %eax
movl $0x0, (%rsp)
callq 0x15f40
testb $0x1, %al
jne 0x17300
leaq 0x29a00(%rip), %rdi     # 0x40ce8
leaq 0x2ac3f(%rip), %rsi     # 0x41f2e
movl $0x3cd, %edx            # imm = 0x3CD
leaq 0x2b5e6(%rip), %rcx     # 0x428e1
callq 0x51e0
movq -0x70(%rbp), %rax
movq %rax, -0x60(%rbp)
movq -0x78(%rbp), %rax
movq %rax, -0x68(%rbp)
jmp 0x173d5
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movq -0x18(%rbp), %rdx
movq -0x20(%rbp), %rax
movq -0x60(%rbp), %rcx
movq (%rax,%rcx,8), %rcx
movq -0x20(%rbp), %rax
movq -0x70(%rbp), %r8
movq (%rax,%r8,8), %r8
movq -0x30(%rbp), %r9
movb -0x31(%rbp), %al
andb $0x1, %al
movzbl %al, %eax
movl %eax, (%rsp)
callq 0x345b0
testb $0x1, %al
jne 0x17353
jmp 0x17355
jmp 0x17374
leaq 0x2b65c(%rip), %rdi     # 0x429b8
leaq 0x2abcb(%rip), %rsi     # 0x41f2e
movl $0x3d1, %edx            # imm = 0x3D1
leaq 0x2b572(%rip), %rcx     # 0x428e1
callq 0x51e0
testb $0x1, -0x31(%rbp)
je 0x173d3
movq -0x8(%rbp), %rdi
movq -0x20(%rbp), %rax
movq -0x60(%rbp), %rcx
movq (%rax,%rcx,8), %rsi
movq -0x18(%rbp), %rdx
movq -0x8(%rbp), %rcx
movq -0x20(%rbp), %rax
movq -0x70(%rbp), %r8
movq (%rax,%r8,8), %r8
movq -0x18(%rbp), %r9
xorl %eax, %eax
movl $0x0, (%rsp)
callq 0x15f40
testb $0x1, %al
jne 0x173d3
leaq 0x2992d(%rip), %rdi     # 0x40ce8
leaq 0x2ab6c(%rip), %rsi     # 0x41f2e
movl $0x3d2, %edx            # imm = 0x3D2
leaq 0x2b513(%rip), %rcx     # 0x428e1
callq 0x51e0
jmp 0x173d5
jmp 0x173d7
jmp 0x173d9
movq -0x70(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x70(%rbp)
jmp 0x1682a
movq -0x58(%rbp), %rax
cmpq -0x60(%rbp), %rax
je 0x17495
testb $0x1, -0x31(%rbp)
je 0x17457
movq -0x8(%rbp), %rdi
movq -0x20(%rbp), %rax
movq -0x60(%rbp), %rcx
movq (%rax,%rcx,8), %rsi
movq -0x18(%rbp), %rdx
movq -0x8(%rbp), %rcx
movq -0x20(%rbp), %rax
movq -0x58(%rbp), %r8
movq (%rax,%r8,8), %r8
movq -0x18(%rbp), %r9
xorl %eax, %eax
movl $0x0, (%rsp)
callq 0x15f40
testb $0x1, %al
jne 0x17457
leaq 0x298a9(%rip), %rdi     # 0x40ce8
leaq 0x2aae8(%rip), %rsi     # 0x41f2e
movl $0x3d7, %edx            # imm = 0x3D7
leaq 0x2b48f(%rip), %rcx     # 0x428e1
callq 0x51e0
movq -0x20(%rbp), %rax
movq -0x58(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq %rax, -0x90(%rbp)
movq -0x20(%rbp), %rax
movq -0x60(%rbp), %rcx
movq (%rax,%rcx,8), %rdx
movq -0x20(%rbp), %rax
movq -0x58(%rbp), %rcx
movq %rdx, (%rax,%rcx,8)
movq -0x90(%rbp), %rdx
movq -0x20(%rbp), %rax
movq -0x60(%rbp), %rcx
movq %rdx, (%rax,%rcx,8)
movq -0x58(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x98(%rbp)
movq -0x98(%rbp), %rax
cmpq 0x20(%rbp), %rax
jae 0x1752c
testb $0x1, -0x31(%rbp)
je 0x17513
movq -0x8(%rbp), %rdi
movq -0x20(%rbp), %rax
movq -0x58(%rbp), %rcx
movq (%rax,%rcx,8), %rsi
movq -0x18(%rbp), %rdx
movq -0x8(%rbp), %rcx
movq -0x20(%rbp), %rax
movq -0x98(%rbp), %r8
movq (%rax,%r8,8), %r8
movq -0x18(%rbp), %r9
xorl %eax, %eax
movl $0x0, (%rsp)
callq 0x15f40
testb $0x1, %al
jne 0x17513
leaq 0x297ed(%rip), %rdi     # 0x40ce8
leaq 0x2aa2c(%rip), %rsi     # 0x41f2e
movl $0x3de, %edx            # imm = 0x3DE
leaq 0x2b3d3(%rip), %rcx     # 0x428e1
callq 0x51e0
jmp 0x17515
movq -0x98(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x98(%rbp)
jmp 0x174a4
jmp 0x1752e
movq -0x58(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x58(%rbp)
jmp 0x167ed
testb $0x1, -0x31(%rbp)
je 0x1756d
movq -0x8(%rbp), %rdi
movq -0x18(%rbp), %rsi
movq -0x20(%rbp), %rdx
movq -0x28(%rbp), %rcx
movq 0x18(%rbp), %r9
movq 0x20(%rbp), %rax
movq $-0x1, %r8
movq %rax, (%rsp)
callq 0x32480
addq $0xd0, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)