// File: BenLangmead[P]bowtie/./aligner.h
// Function: PairedBWAlignerV1<EbwtRangeSource>::advanceOrientation(bool)
void advanceOrientation(bool pairFw) {
		assert(!this->done);
		assert(!*donePair_);
		assert(!*chaseL_ || !*chaseR_);
		if(*chaseL_) {
			assert(!rangeMode_);
			assert(!*delayedchaseL_);
			assert(drL_->foundRange);
			assert(rchase_->foundOff() || rchase_->done);
			if(rchase_->foundOff()) {
				// Resolve this against the reference loci
				// determined for the other mate
				const bool overThresh = (*offsLsz_ + *offsRsz_) > mixedThresh_;
				if(!this->done && (overThresh || dontReconcile_)) {
					// Because the total size of both ranges exceeds
					// our threshold, we're now operating in "mixed
					// mode"
					const Range& r = drL_->range();
					assert(r.repOk());
					if(verbose_) cout << "Making an attempt to find the outstanding mate" << endl;
					this->done = resolveOutstandingInRef(
							pairFw, rchase_->off(),
					        r.ebwt->_plen[rchase_->off().first], r);
					if(++mixedAttempts_ > mixedAttemptLim_) {
						// Give up on this pair
						*donePair_ = true;
						return;
					}
				}
				rchase_->reset();
			} else {
				assert(rchase_->done);
				// Forget this range; keep looking for ranges
				*chaseL_ = false;
				drL_->foundRange = false;
				if(verbose_) cout << "Done with chase for first mate" << endl;
				if(*delayedchaseR_) {
					// Start chasing the delayed range
					if(verbose_) cout << "Resuming delayed chase for second mate" << endl;
					assert(drR_->foundRange);
					const Range& r = drR_->range();
					assert(r.repOk());
					TIndexOffU top = r.top;
					TIndexOffU bot = r.bot;
					uint32_t qlen = doneFw_? qlen1_ : qlen2_;
					rchase_->setTopBot(top, bot, qlen, rand_, r.ebwt);
					*chaseR_ = true;
					*delayedchaseR_ = false;
				}
			}
		} else if(*chaseR_) {
			assert(!rangeMode_);
			assert(!*delayedchaseR_);
			assert(drR_->foundRange);
			assert(rchase_->foundOff() || rchase_->done);
			if(rchase_->foundOff()) {
				// Resolve this against the reference loci
				// determined for the other mate
				const bool overThresh = (*offsLsz_ + *offsRsz_) > mixedThresh_;
				if(!this->done && (overThresh || dontReconcile_)) {
					// Because the total size of both ranges exceeds
					// our threshold, we're now operating in "mixed
					// mode"
					const Range& r = drR_->range();
					if(verbose_) cout << "Making an attempt to find the outstanding mate" << endl;
					this->done = resolveOutstandingInRef(
							!pairFw, rchase_->off(),
					        r.ebwt->_plen[rchase_->off().first], r);
					if(++mixedAttempts_ > mixedAttemptLim_) {
						// Give up on this pair
						*donePair_ = true;
						return;
					}
				}
				rchase_->reset();
			} else {
				assert(rchase_->done);
				// Forget this range; keep looking for ranges
				*chaseR_ = false;
				drR_->foundRange = false;
				if(verbose_) cout << "Done with chase for second mate" << endl;
				if(*delayedchaseL_) {
					// Start chasing the delayed range
					if(verbose_) cout << "Resuming delayed chase for first mate" << endl;
					assert(drL_->foundRange);
					const Range& r = drL_->range();
					assert(r.repOk());
					TIndexOffU top = r.top;
					TIndexOffU bot = r.bot;
					uint32_t qlen = doneFw_? qlen2_ : qlen1_;
					rchase_->setTopBot(top, bot, qlen, rand_, r.ebwt);
					*chaseL_ = true;
					*delayedchaseL_ = false;
				}
			}
		}
		if(!this->done && !*donePair_ && !*chaseL_ && !*chaseR_) {
			// Search for more ranges for whichever mate currently has
			// fewer candidate alignments
			if((*offsLsz_ < *offsRsz_ || drR_->done) && !drL_->done) {
				// If there are no more ranges for the other mate and
				// there are no candidate alignments either, then we're
				// not going to find a paired alignment in this
				// orientation.
				if(drR_->done && *offsRsz_ == 0) {
					// Give up on this orientation
					if(verbose_) cout << "Giving up on paired orientation " << (pairFw? "fw" : "rc") << " in mate 1" << endl;
					*donePair_ = true;
					if(verbose2_) cout << *offsLsz_ << " " << *offsRsz_ << endl;
					return;
				}
				assert(!*delayedchaseL_);
				if(!drL_->foundRange) drL_->advance(ADV_FOUND_RANGE);
				if(drL_->foundRange) {
#ifndef NDEBUG
					{
						std::set<int64_t>& s = (pairFw ? allTopsL_fw_ : allTopsL_rc_);
						int64_t t = drL_->range().top + 1; // add 1 to avoid 0
						if(!drL_->range().ebwt->fw()) t = -t; // invert for bw index
						assert(s.find(t) == s.end());
						s.insert(t);
					}
#endif
					// Add the size of this range to the total for this mate
					*offsLsz_ += (drL_->range().bot - drL_->range().top);
					if(*offsRsz_ == 0 && (!dontReconcile_ || *offsLsz_ > 3)) {
						// Delay chasing this range; we delay to avoid
						// needlessly chasing rows in this range when
						// the other mate doesn't end up aligning
						// anywhere
						if(verbose_) cout << "Delaying a chase for first mate" << endl;
						*delayedchaseL_ = true;
					} else {
						// Start chasing this range
						if(verbose2_) cout << *offsLsz_ << " " << *offsRsz_ << " " << drL_->range().top << endl;
						if(verbose_) cout << "Chasing a range for first mate" << endl;
						if(*offsLsz_ > symCeiling_ && *offsRsz_ > symCeiling_) {
							// Too many candidates for both mates; abort
							// without any more searching
							*donePair_ = true;
							return;
						}
						// If this is the first range for both mates,
						// choose the smaller range to chase down first
						if(*delayedchaseR_ && (*offsRsz_ < *offsLsz_)) {
							assert(drR_->foundRange);
							*delayedchaseR_ = false;
							*delayedchaseL_ = true;
							*chaseR_ = true;
							const Range& r = drR_->range();
							assert(r.repOk());
							uint32_t qlen = doneFw_? qlen1_ : qlen2_;
							rchase_->setTopBot(r.top, r.bot, qlen, rand_, r.ebwt);
						} else {
							// Use Burrows-Wheeler for this pair (as
							// usual)
							*chaseL_ = true;
							const Range& r = drL_->range();
							uint32_t qlen = doneFw_? qlen2_ : qlen1_;
							rchase_->setTopBot(r.top, r.bot, qlen, rand_, r.ebwt);
						}
					}
				}
			} else if(!drR_->done) {
				// If there are no more ranges for the other mate and
				// there are no candidate alignments either, then we're
				// not going to find a paired alignment in this
				// orientation.
				if(drL_->done && *offsLsz_ == 0) {
					// Give up on this orientation
					if(verbose_) cout << "Giving up on paired orientation " << (pairFw? "fw" : "rc") << " in mate 2" << endl;
					if(verbose2_) cout << *offsLsz_ << " " << *offsRsz_ << endl;
					*donePair_ = true;
					return;
				}
				assert(!*delayedchaseR_);
				if(!drR_->foundRange) drR_->advance(ADV_FOUND_RANGE);
				if(drR_->foundRange) {
#ifndef NDEBUG
					{
						std::set<int64_t>& s = (pairFw ? allTopsR_fw_ : allTopsR_rc_);
						int64_t t = drR_->range().top + 1; // add 1 to avoid 0
						if(!drR_->range().ebwt->fw()) t = -t; // invert for bw index
						assert(s.find(t) == s.end());
						s.insert(t);
					}
#endif
					// Add the size of this range to the total for this mate
					*offsRsz_ += (drR_->range().bot - drR_->range().top);
					if(*offsLsz_ == 0 && (!dontReconcile_ || *offsRsz_ > 3)) {
						// Delay chasing this range; we delay to avoid
						// needlessly chasing rows in this range when
						// the other mate doesn't end up aligning
						// anywhere
						if(verbose_) cout << "Delaying a chase for second mate" << endl;
						*delayedchaseR_ = true;
					} else {
						// Start chasing this range
						if(verbose2_) cout << *offsLsz_ << " " << *offsRsz_ << " " << drR_->range().top << endl;
						if(verbose_) cout << "Chasing a range for second mate" << endl;
						if(*offsLsz_ > symCeiling_ && *offsRsz_ > symCeiling_) {
							// Too many candidates for both mates; abort
							// without any more searching
							*donePair_ = true;
							return;
						}
						// If this is the first range for both mates,
						// choose the smaller range to chase down first
						if(*delayedchaseL_ && *offsLsz_ < *offsRsz_) {
							assert(drL_->foundRange);
							*delayedchaseL_ = false;
							*delayedchaseR_ = true;
							*chaseL_ = true;
							const Range& r = drL_->range();
							assert(r.repOk());
							uint32_t qlen = doneFw_? qlen2_ : qlen1_;
							rchase_->setTopBot(r.top, r.bot, qlen, rand_, r.ebwt);
						} else {
							// Use Burrows-Wheeler for this pair (as
							// usual)
							*chaseR_ = true;
							const Range& r = drR_->range();
							assert(r.repOk());
							uint32_t qlen = doneFw_? qlen1_ : qlen2_;
							rchase_->setTopBot(r.top, r.bot, qlen, rand_, r.ebwt);
						}
					}
				}
			} else {
				// Finished processing ranges for both mates
				assert(drL_->done && drR_->done);
				*donePair_ = true;
			}
		}
	}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x130, %rsp            # imm = 0x130
movb %sil, %al
movq %rdi, -0x8(%rbp)
andb $0x1, %al
movb %al, -0x9(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0xb8(%rbp)
movq 0x21d8(%rax), %rax
testb $0x1, (%rax)
je 0x60f79
movq -0xb8(%rbp), %rax
movq 0xb8(%rax), %rdi
callq 0x4bee0
testb $0x1, %al
jne 0x60cce
jmp 0x60e39
movq -0xb8(%rbp), %rax
movq 0x2228(%rax), %rcx
movl (%rcx), %ecx
movq 0x2230(%rax), %rdx
addl (%rdx), %ecx
cmpl 0xa8(%rax), %ecx
seta %cl
andb $0x1, %cl
movb %cl, -0xa(%rbp)
testb $0x1, 0x8(%rax)
jne 0x60e21
testb $0x1, -0xa(%rbp)
jne 0x60d1a
movq -0xb8(%rbp), %rax
testb $0x1, 0xa0(%rax)
je 0x60e21
movq -0xb8(%rbp), %rax
movq 0x21f8(%rax), %rdi
movq (%rdi), %rax
callq *0x30(%rax)
movq %rax, %rcx
movq -0xb8(%rbp), %rax
movq %rcx, -0x18(%rbp)
testb $0x1, 0xc0(%rax)
je 0x60d67
movq 0x4726c(%rip), %rdi     # 0xa7fb8
leaq 0x2c1d2(%rip), %rsi     # 0x8cf25
callq 0xa5d0
movq %rax, %rdi
movq 0x47206(%rip), %rsi     # 0xa7f68
callq 0xa640
movq -0xb8(%rbp), %rax
movb -0x9(%rbp), %cl
movb %cl, -0xb9(%rbp)
movq 0xb8(%rax), %rdi
callq 0x4c360
movq %rax, %rcx
movq -0xb8(%rbp), %rax
movq %rcx, -0x20(%rbp)
movq -0x18(%rbp), %rcx
movq 0x58(%rcx), %rcx
movq 0x80(%rcx), %rcx
movq %rcx, -0xc8(%rbp)
movq 0xb8(%rax), %rdi
callq 0x4c360
movq -0xc8(%rbp), %rcx
movq -0xb8(%rbp), %rdi
movq %rax, %rdx
movb -0xb9(%rbp), %al
movq %rdx, -0x28(%rbp)
movl -0x28(%rbp), %edx
movl (%rcx,%rdx,4), %ecx
movq -0x18(%rbp), %r8
leaq -0x20(%rbp), %rdx
andb $0x1, %al
movzbl %al, %esi
callq 0x61ce0
movq -0xb8(%rbp), %rcx
andb $0x1, %al
movb %al, 0x8(%rcx)
movl 0xb0(%rcx), %eax
addl $0x1, %eax
movl %eax, 0xb0(%rcx)
cmpl 0xac(%rcx), %eax
jbe 0x60e1f
movq -0xb8(%rbp), %rax
movq 0x2238(%rax), %rax
movb $0x1, (%rax)
jmp 0x61cd0
jmp 0x60e21
movq -0xb8(%rbp), %rax
movq 0xb8(%rax), %rdi
callq 0x4c3a0
jmp 0x60f74
movq -0xb8(%rbp), %rax
movq 0x21d8(%rax), %rcx
movb $0x0, (%rcx)
movq 0x21f8(%rax), %rcx
movb $0x0, 0x8(%rcx)
testb $0x1, 0xc0(%rax)
je 0x60e80
movq 0x47153(%rip), %rdi     # 0xa7fb8
leaq 0x2c0e8(%rip), %rsi     # 0x8cf54
callq 0xa5d0
movq %rax, %rdi
movq 0x470ed(%rip), %rsi     # 0xa7f68
callq 0xa640
movq -0xb8(%rbp), %rax
movq 0x21f0(%rax), %rax
testb $0x1, (%rax)
je 0x60f72
movq -0xb8(%rbp), %rax
testb $0x1, 0xc0(%rax)
je 0x60ec9
movq 0x4710a(%rip), %rdi     # 0xa7fb8
leaq 0x2c0be(%rip), %rsi     # 0x8cf73
callq 0xa5d0
movq %rax, %rdi
movq 0x470a4(%rip), %rsi     # 0xa7f68
callq 0xa640
movq -0xb8(%rbp), %rax
movq 0x2200(%rax), %rdi
movq (%rdi), %rax
callq *0x30(%rax)
movq %rax, %rcx
movq -0xb8(%rbp), %rax
movq %rcx, -0x30(%rbp)
movq -0x30(%rbp), %rcx
movl (%rcx), %ecx
movl %ecx, -0x34(%rbp)
movq -0x30(%rbp), %rcx
movl 0x4(%rcx), %ecx
movl %ecx, -0x38(%rbp)
testb $0x1, 0x68(%rax)
je 0x60f16
movq -0xb8(%rbp), %rax
movl 0x60(%rax), %eax
movl %eax, -0xcc(%rbp)
jmp 0x60f26
movq -0xb8(%rbp), %rax
movl 0x64(%rax), %eax
movl %eax, -0xcc(%rbp)
movq -0xb8(%rbp), %r8
movl -0xcc(%rbp), %eax
movl %eax, -0x3c(%rbp)
movq 0xb8(%r8), %rdi
movl -0x34(%rbp), %esi
movl -0x38(%rbp), %edx
movl -0x3c(%rbp), %ecx
addq $0x38, %r8
movq -0x30(%rbp), %rax
movq 0x58(%rax), %r9
callq 0x4c3c0
movq -0xb8(%rbp), %rax
movq 0x21e0(%rax), %rcx
movb $0x1, (%rcx)
movq 0x21f0(%rax), %rax
movb $0x0, (%rax)
jmp 0x60f74
jmp 0x6125a
movq -0xb8(%rbp), %rax
movq 0x21e0(%rax), %rax
testb $0x1, (%rax)
je 0x61258
movq -0xb8(%rbp), %rax
movq 0xb8(%rax), %rdi
callq 0x4bee0
testb $0x1, %al
jne 0x60fac
jmp 0x6111b
movq -0xb8(%rbp), %rax
movq 0x2228(%rax), %rcx
movl (%rcx), %ecx
movq 0x2230(%rax), %rdx
addl (%rdx), %ecx
cmpl 0xa8(%rax), %ecx
seta %cl
andb $0x1, %cl
movb %cl, -0x3d(%rbp)
testb $0x1, 0x8(%rax)
jne 0x61103
testb $0x1, -0x3d(%rbp)
jne 0x60ff8
movq -0xb8(%rbp), %rax
testb $0x1, 0xa0(%rax)
je 0x61103
movq -0xb8(%rbp), %rax
movq 0x2200(%rax), %rdi
movq (%rdi), %rax
callq *0x30(%rax)
movq %rax, %rcx
movq -0xb8(%rbp), %rax
movq %rcx, -0x48(%rbp)
testb $0x1, 0xc0(%rax)
je 0x61045
movq 0x46f8e(%rip), %rdi     # 0xa7fb8
leaq 0x2bef4(%rip), %rsi     # 0x8cf25
callq 0xa5d0
movq %rax, %rdi
movq 0x46f28(%rip), %rsi     # 0xa7f68
callq 0xa640
movq -0xb8(%rbp), %rax
movb -0x9(%rbp), %cl
xorb $-0x1, %cl
movb %cl, -0xcd(%rbp)
movq 0xb8(%rax), %rdi
callq 0x4c360
movq %rax, %rcx
movq -0xb8(%rbp), %rax
movq %rcx, -0x50(%rbp)
movq -0x48(%rbp), %rcx
movq 0x58(%rcx), %rcx
movq 0x80(%rcx), %rcx
movq %rcx, -0xd8(%rbp)
movq 0xb8(%rax), %rdi
callq 0x4c360
movq -0xd8(%rbp), %rcx
movq -0xb8(%rbp), %rdi
movq %rax, %rdx
movb -0xcd(%rbp), %al
movq %rdx, -0x58(%rbp)
movl -0x58(%rbp), %edx
movl (%rcx,%rdx,4), %ecx
movq -0x48(%rbp), %r8
movzbl %al, %esi
andl $0x1, %esi
leaq -0x50(%rbp), %rdx
callq 0x61ce0
movq -0xb8(%rbp), %rcx
andb $0x1, %al
movb %al, 0x8(%rcx)
movl 0xb0(%rcx), %eax
addl $0x1, %eax
movl %eax, 0xb0(%rcx)
cmpl 0xac(%rcx), %eax
jbe 0x61101
movq -0xb8(%rbp), %rax
movq 0x2238(%rax), %rax
movb $0x1, (%rax)
jmp 0x61cd0
jmp 0x61103
movq -0xb8(%rbp), %rax
movq 0xb8(%rax), %rdi
callq 0x4c3a0
jmp 0x61256
movq -0xb8(%rbp), %rax
movq 0x21e0(%rax), %rcx
movb $0x0, (%rcx)
movq 0x2200(%rax), %rcx
movb $0x0, 0x8(%rcx)
testb $0x1, 0xc0(%rax)
je 0x61162
movq 0x46e71(%rip), %rdi     # 0xa7fb8
leaq 0x2be4c(%rip), %rsi     # 0x8cf9a
callq 0xa5d0
movq %rax, %rdi
movq 0x46e0b(%rip), %rsi     # 0xa7f68
callq 0xa640
movq -0xb8(%rbp), %rax
movq 0x21e8(%rax), %rax
testb $0x1, (%rax)
je 0x61254
movq -0xb8(%rbp), %rax
testb $0x1, 0xc0(%rax)
je 0x611ab
movq 0x46e28(%rip), %rdi     # 0xa7fb8
leaq 0x2be23(%rip), %rsi     # 0x8cfba
callq 0xa5d0
movq %rax, %rdi
movq 0x46dc2(%rip), %rsi     # 0xa7f68
callq 0xa640
movq -0xb8(%rbp), %rax
movq 0x21f8(%rax), %rdi
movq (%rdi), %rax
callq *0x30(%rax)
movq %rax, %rcx
movq -0xb8(%rbp), %rax
movq %rcx, -0x60(%rbp)
movq -0x60(%rbp), %rcx
movl (%rcx), %ecx
movl %ecx, -0x64(%rbp)
movq -0x60(%rbp), %rcx
movl 0x4(%rcx), %ecx
movl %ecx, -0x68(%rbp)
testb $0x1, 0x68(%rax)
je 0x611f8
movq -0xb8(%rbp), %rax
movl 0x64(%rax), %eax
movl %eax, -0xdc(%rbp)
jmp 0x61208
movq -0xb8(%rbp), %rax
movl 0x60(%rax), %eax
movl %eax, -0xdc(%rbp)
movq -0xb8(%rbp), %r8
movl -0xdc(%rbp), %eax
movl %eax, -0x6c(%rbp)
movq 0xb8(%r8), %rdi
movl -0x64(%rbp), %esi
movl -0x68(%rbp), %edx
movl -0x6c(%rbp), %ecx
addq $0x38, %r8
movq -0x60(%rbp), %rax
movq 0x58(%rax), %r9
callq 0x4c3c0
movq -0xb8(%rbp), %rax
movq 0x21d8(%rax), %rcx
movb $0x1, (%rcx)
movq 0x21e8(%rax), %rax
movb $0x0, (%rax)
jmp 0x61256
jmp 0x61258
jmp 0x6125a
movq -0xb8(%rbp), %rax
testb $0x1, 0x8(%rax)
jne 0x61cd0
movq -0xb8(%rbp), %rax
movq 0x2238(%rax), %rax
testb $0x1, (%rax)
jne 0x61cd0
movq -0xb8(%rbp), %rax
movq 0x21d8(%rax), %rax
testb $0x1, (%rax)
jne 0x61cd0
movq -0xb8(%rbp), %rax
movq 0x21e0(%rax), %rax
testb $0x1, (%rax)
jne 0x61cd0
movq -0xb8(%rbp), %rcx
movq 0x2228(%rcx), %rax
movl (%rax), %eax
movq 0x2230(%rcx), %rcx
cmpl (%rcx), %eax
jb 0x612e3
movq -0xb8(%rbp), %rax
movq 0x2200(%rax), %rax
testb $0x1, 0x9(%rax)
je 0x617c4
movq -0xb8(%rbp), %rax
movq 0x21f8(%rax), %rax
testb $0x1, 0x9(%rax)
jne 0x617c4
movq -0xb8(%rbp), %rax
movq 0x2200(%rax), %rax
testb $0x1, 0x9(%rax)
je 0x6141c
movq -0xb8(%rbp), %rax
movq 0x2230(%rax), %rax
cmpl $0x0, (%rax)
jne 0x6141c
movq -0xb8(%rbp), %rax
testb $0x1, 0xc0(%rax)
je 0x613ab
movq 0x46c77(%rip), %rdi     # 0xa7fb8
leaq 0x2bc98(%rip), %rsi     # 0x8cfe0
callq 0xa5d0
movq %rax, -0xe8(%rbp)
testb $0x1, -0x9(%rbp)
je 0x6136a
leaq 0x29aa3(%rip), %rax     # 0x8ae04
movq %rax, -0xf0(%rbp)
jmp 0x6137a
leaq 0x29a98(%rip), %rax     # 0x8ae09
movq %rax, -0xf0(%rbp)
jmp 0x6137a
movq -0xe8(%rbp), %rdi
movq -0xf0(%rbp), %rsi
callq 0xa5d0
movq %rax, %rdi
leaq 0x2bc6a(%rip), %rsi     # 0x8d001
callq 0xa5d0
movq %rax, %rdi
movq 0x46bc2(%rip), %rsi     # 0xa7f68
callq 0xa640
movq -0xb8(%rbp), %rax
movq 0x2238(%rax), %rcx
movb $0x1, (%rcx)
testb $0x1, 0x22a8(%rax)
je 0x61417
movq -0xb8(%rbp), %rax
movq 0x2228(%rax), %rax
movl (%rax), %esi
movq 0x46bdc(%rip), %rdi     # 0xa7fb8
callq 0xa810
movq %rax, %rdi
leaq 0x2bd19(%rip), %rsi     # 0x8d104
callq 0xa5d0
movq %rax, %rdi
movq -0xb8(%rbp), %rax
movq 0x2230(%rax), %rax
movl (%rax), %esi
callq 0xa810
movq %rax, %rdi
movq 0x46b56(%rip), %rsi     # 0xa7f68
callq 0xa640
jmp 0x61cd0
movq -0xb8(%rbp), %rax
movq 0x21f8(%rax), %rax
testb $0x1, 0x8(%rax)
jne 0x61449
movq -0xb8(%rbp), %rax
movq 0x21f8(%rax), %rdi
movq (%rdi), %rax
movl $0x1, %esi
callq *0x20(%rax)
movq -0xb8(%rbp), %rax
movq 0x21f8(%rax), %rax
testb $0x1, 0x8(%rax)
je 0x617bf
movq -0xb8(%rbp), %rax
movq 0x21f8(%rax), %rdi
movq (%rdi), %rax
callq *0x30(%rax)
movq %rax, %rcx
movq -0xb8(%rbp), %rax
movl 0x4(%rcx), %ecx
movl %ecx, -0xf4(%rbp)
movq 0x21f8(%rax), %rdi
movq (%rdi), %rax
callq *0x30(%rax)
movl -0xf4(%rbp), %edx
movq %rax, %rcx
movq -0xb8(%rbp), %rax
subl (%rcx), %edx
movq 0x2228(%rax), %rcx
addl (%rcx), %edx
movl %edx, (%rcx)
movq 0x2230(%rax), %rax
cmpl $0x0, (%rax)
jne 0x61529
movq -0xb8(%rbp), %rax
testb $0x1, 0xa0(%rax)
je 0x614e1
movq -0xb8(%rbp), %rax
movq 0x2228(%rax), %rax
cmpl $0x3, (%rax)
jbe 0x61529
movq -0xb8(%rbp), %rax
testb $0x1, 0xc0(%rax)
je 0x61513
movq 0x46ac0(%rip), %rdi     # 0xa7fb8
leaq 0x2bb0d(%rip), %rsi     # 0x8d00c
callq 0xa5d0
movq %rax, %rdi
movq 0x46a5a(%rip), %rsi     # 0xa7f68
callq 0xa640
movq -0xb8(%rbp), %rax
movq 0x21e8(%rax), %rax
movb $0x1, (%rax)
jmp 0x617bd
movq -0xb8(%rbp), %rax
testb $0x1, 0x22a8(%rax)
je 0x615ca
movq -0xb8(%rbp), %rax
movq 0x2228(%rax), %rax
movl (%rax), %esi
movq 0x46a64(%rip), %rdi     # 0xa7fb8
callq 0xa810
movq %rax, %rdi
leaq 0x2bba1(%rip), %rsi     # 0x8d104
callq 0xa5d0
movq %rax, %rdi
movq -0xb8(%rbp), %rax
movq 0x2230(%rax), %rax
movl (%rax), %esi
callq 0xa810
movq %rax, %rdi
leaq 0x2bb7a(%rip), %rsi     # 0x8d104
callq 0xa5d0
movq %rax, %rcx
movq -0xb8(%rbp), %rax
movq %rcx, -0x100(%rbp)
movq 0x21f8(%rax), %rdi
movq (%rdi), %rax
callq *0x30(%rax)
movq -0x100(%rbp), %rdi
movl (%rax), %esi
callq 0xa810
movq %rax, %rdi
movq 0x469a3(%rip), %rsi     # 0xa7f68
callq 0xa640
movq -0xb8(%rbp), %rax
testb $0x1, 0xc0(%rax)
je 0x615fc
movq 0x469d7(%rip), %rdi     # 0xa7fb8
leaq 0x2ba44(%rip), %rsi     # 0x8d02c
callq 0xa5d0
movq %rax, %rdi
movq 0x46971(%rip), %rsi     # 0xa7f68
callq 0xa640
movq -0xb8(%rbp), %rcx
movq 0x2228(%rcx), %rax
movl (%rax), %eax
cmpl 0xa4(%rcx), %eax
jbe 0x61642
movq -0xb8(%rbp), %rcx
movq 0x2230(%rcx), %rax
movl (%rax), %eax
cmpl 0xa4(%rcx), %eax
jbe 0x61642
movq -0xb8(%rbp), %rax
movq 0x2238(%rax), %rax
movb $0x1, (%rax)
jmp 0x61cd0
movq -0xb8(%rbp), %rax
movq 0x21f0(%rax), %rax
testb $0x1, (%rax)
je 0x6171d
movq -0xb8(%rbp), %rcx
movq 0x2230(%rcx), %rax
movl (%rax), %eax
movq 0x2228(%rcx), %rcx
cmpl (%rcx), %eax
jae 0x6171d
movq -0xb8(%rbp), %rax
movq 0x21f0(%rax), %rcx
movb $0x0, (%rcx)
movq 0x21e8(%rax), %rcx
movb $0x1, (%rcx)
movq 0x21e0(%rax), %rcx
movb $0x1, (%rcx)
movq 0x2200(%rax), %rdi
movq (%rdi), %rax
callq *0x30(%rax)
movq %rax, %rcx
movq -0xb8(%rbp), %rax
movq %rcx, -0x78(%rbp)
testb $0x1, 0x68(%rax)
je 0x616d0
movq -0xb8(%rbp), %rax
movl 0x60(%rax), %eax
movl %eax, -0x104(%rbp)
jmp 0x616e0
movq -0xb8(%rbp), %rax
movl 0x64(%rax), %eax
movl %eax, -0x104(%rbp)
movq -0xb8(%rbp), %r8
movl -0x104(%rbp), %eax
movl %eax, -0x7c(%rbp)
movq 0xb8(%r8), %rdi
movq -0x78(%rbp), %rax
movl (%rax), %esi
movq -0x78(%rbp), %rax
movl 0x4(%rax), %edx
movl -0x7c(%rbp), %ecx
addq $0x38, %r8
movq -0x78(%rbp), %rax
movq 0x58(%rax), %r9
callq 0x4c3c0
jmp 0x617bb
movq -0xb8(%rbp), %rax
movq 0x21d8(%rax), %rcx
movb $0x1, (%rcx)
movq 0x21f8(%rax), %rdi
movq (%rdi), %rax
callq *0x30(%rax)
movq %rax, %rcx
movq -0xb8(%rbp), %rax
movq %rcx, -0x88(%rbp)
testb $0x1, 0x68(%rax)
je 0x61764
movq -0xb8(%rbp), %rax
movl 0x64(%rax), %eax
movl %eax, -0x108(%rbp)
jmp 0x61774
movq -0xb8(%rbp), %rax
movl 0x60(%rax), %eax
movl %eax, -0x108(%rbp)
movq -0xb8(%rbp), %r8
movl -0x108(%rbp), %eax
movl %eax, -0x8c(%rbp)
movq 0xb8(%r8), %rdi
movq -0x88(%rbp), %rax
movl (%rax), %esi
movq -0x88(%rbp), %rax
movl 0x4(%rax), %edx
movl -0x8c(%rbp), %ecx
addq $0x38, %r8
movq -0x88(%rbp), %rax
movq 0x58(%rax), %r9
callq 0x4c3c0
jmp 0x617bd
jmp 0x617bf
jmp 0x61cce
movq -0xb8(%rbp), %rax
movq 0x2200(%rax), %rax
testb $0x1, 0x9(%rax)
jne 0x61cbb
movq -0xb8(%rbp), %rax
movq 0x21f8(%rax), %rax
testb $0x1, 0x9(%rax)
je 0x61904
movq -0xb8(%rbp), %rax
movq 0x2228(%rax), %rax
cmpl $0x0, (%rax)
jne 0x61904
movq -0xb8(%rbp), %rax
testb $0x1, 0xc0(%rax)
je 0x6188c
movq 0x46796(%rip), %rdi     # 0xa7fb8
leaq 0x2b7b7(%rip), %rsi     # 0x8cfe0
callq 0xa5d0
movq %rax, -0x110(%rbp)
testb $0x1, -0x9(%rbp)
je 0x6184b
leaq 0x295c2(%rip), %rax     # 0x8ae04
movq %rax, -0x118(%rbp)
jmp 0x6185b
leaq 0x295b7(%rip), %rax     # 0x8ae09
movq %rax, -0x118(%rbp)
jmp 0x6185b
movq -0x110(%rbp), %rdi
movq -0x118(%rbp), %rsi
callq 0xa5d0
movq %rax, %rdi
leaq 0x2b7d3(%rip), %rsi     # 0x8d04b
callq 0xa5d0
movq %rax, %rdi
movq 0x466e1(%rip), %rsi     # 0xa7f68
callq 0xa640
movq -0xb8(%rbp), %rax
testb $0x1, 0x22a8(%rax)
je 0x618ee
movq -0xb8(%rbp), %rax
movq 0x2228(%rax), %rax
movl (%rax), %esi
movq 0x46705(%rip), %rdi     # 0xa7fb8
callq 0xa810
movq %rax, %rdi
leaq 0x2b842(%rip), %rsi     # 0x8d104
callq 0xa5d0
movq %rax, %rdi
movq -0xb8(%rbp), %rax
movq 0x2230(%rax), %rax
movl (%rax), %esi
callq 0xa810
movq %rax, %rdi
movq 0x4667f(%rip), %rsi     # 0xa7f68
callq 0xa640
movq -0xb8(%rbp), %rax
movq 0x2238(%rax), %rax
movb $0x1, (%rax)
jmp 0x61cd0
movq -0xb8(%rbp), %rax
movq 0x2200(%rax), %rax
testb $0x1, 0x8(%rax)
jne 0x61931
movq -0xb8(%rbp), %rax
movq 0x2200(%rax), %rdi
movq (%rdi), %rax
movl $0x1, %esi
callq *0x20(%rax)
movq -0xb8(%rbp), %rax
movq 0x2200(%rax), %rax
testb $0x1, 0x8(%rax)
je 0x61cb9
movq -0xb8(%rbp), %rax
movq 0x2200(%rax), %rdi
movq (%rdi), %rax
callq *0x30(%rax)
movq %rax, %rcx
movq -0xb8(%rbp), %rax
movl 0x4(%rcx), %ecx
movl %ecx, -0x11c(%rbp)
movq 0x2200(%rax), %rdi
movq (%rdi), %rax
callq *0x30(%rax)
movl -0x11c(%rbp), %edx
movq %rax, %rcx
movq -0xb8(%rbp), %rax
subl (%rcx), %edx
movq 0x2230(%rax), %rcx
addl (%rcx), %edx
movl %edx, (%rcx)
movq 0x2228(%rax), %rax
cmpl $0x0, (%rax)
jne 0x61a11
movq -0xb8(%rbp), %rax
testb $0x1, 0xa0(%rax)
je 0x619c9
movq -0xb8(%rbp), %rax
movq 0x2230(%rax), %rax
cmpl $0x3, (%rax)
jbe 0x61a11
movq -0xb8(%rbp), %rax
testb $0x1, 0xc0(%rax)
je 0x619fb
movq 0x465d8(%rip), %rdi     # 0xa7fb8
leaq 0x2b66f(%rip), %rsi     # 0x8d056
callq 0xa5d0
movq %rax, %rdi
movq 0x46572(%rip), %rsi     # 0xa7f68
callq 0xa640
movq -0xb8(%rbp), %rax
movq 0x21f0(%rax), %rax
movb $0x1, (%rax)
jmp 0x61cb7
movq -0xb8(%rbp), %rax
testb $0x1, 0x22a8(%rax)
je 0x61ab2
movq -0xb8(%rbp), %rax
movq 0x2228(%rax), %rax
movl (%rax), %esi
movq 0x4657c(%rip), %rdi     # 0xa7fb8
callq 0xa810
movq %rax, %rdi
leaq 0x2b6b9(%rip), %rsi     # 0x8d104
callq 0xa5d0
movq %rax, %rdi
movq -0xb8(%rbp), %rax
movq 0x2230(%rax), %rax
movl (%rax), %esi
callq 0xa810
movq %rax, %rdi
leaq 0x2b692(%rip), %rsi     # 0x8d104
callq 0xa5d0
movq %rax, %rcx
movq -0xb8(%rbp), %rax
movq %rcx, -0x128(%rbp)
movq 0x2200(%rax), %rdi
movq (%rdi), %rax
callq *0x30(%rax)
movq -0x128(%rbp), %rdi
movl (%rax), %esi
callq 0xa810
movq %rax, %rdi
movq 0x464bb(%rip), %rsi     # 0xa7f68
callq 0xa640
movq -0xb8(%rbp), %rax
testb $0x1, 0xc0(%rax)
je 0x61ae4
movq 0x464ef(%rip), %rdi     # 0xa7fb8
leaq 0x2b5a7(%rip), %rsi     # 0x8d077
callq 0xa5d0
movq %rax, %rdi
movq 0x46489(%rip), %rsi     # 0xa7f68
callq 0xa640
movq -0xb8(%rbp), %rcx
movq 0x2228(%rcx), %rax
movl (%rax), %eax
cmpl 0xa4(%rcx), %eax
jbe 0x61b2a
movq -0xb8(%rbp), %rcx
movq 0x2230(%rcx), %rax
movl (%rax), %eax
cmpl 0xa4(%rcx), %eax
jbe 0x61b2a
movq -0xb8(%rbp), %rax
movq 0x2238(%rax), %rax
movb $0x1, (%rax)
jmp 0x61cd0
movq -0xb8(%rbp), %rax
movq 0x21e8(%rax), %rax
testb $0x1, (%rax)
je 0x61c17
movq -0xb8(%rbp), %rcx
movq 0x2228(%rcx), %rax
movl (%rax), %eax
movq 0x2230(%rcx), %rcx
cmpl (%rcx), %eax
jae 0x61c17
movq -0xb8(%rbp), %rax
movq 0x21e8(%rax), %rcx
movb $0x0, (%rcx)
movq 0x21f0(%rax), %rcx
movb $0x1, (%rcx)
movq 0x21d8(%rax), %rcx
movb $0x1, (%rcx)
movq 0x21f8(%rax), %rdi
movq (%rdi), %rax
callq *0x30(%rax)
movq %rax, %rcx
movq -0xb8(%rbp), %rax
movq %rcx, -0x98(%rbp)
testb $0x1, 0x68(%rax)
je 0x61bbb
movq -0xb8(%rbp), %rax
movl 0x64(%rax), %eax
movl %eax, -0x12c(%rbp)
jmp 0x61bcb
movq -0xb8(%rbp), %rax
movl 0x60(%rax), %eax
movl %eax, -0x12c(%rbp)
movq -0xb8(%rbp), %r8
movl -0x12c(%rbp), %eax
movl %eax, -0x9c(%rbp)
movq 0xb8(%r8), %rdi
movq -0x98(%rbp), %rax
movl (%rax), %esi
movq -0x98(%rbp), %rax
movl 0x4(%rax), %edx
movl -0x9c(%rbp), %ecx
addq $0x38, %r8
movq -0x98(%rbp), %rax
movq 0x58(%rax), %r9
callq 0x4c3c0
jmp 0x61cb5
movq -0xb8(%rbp), %rax
movq 0x21e0(%rax), %rcx
movb $0x1, (%rcx)
movq 0x2200(%rax), %rdi
movq (%rdi), %rax
callq *0x30(%rax)
movq %rax, %rcx
movq -0xb8(%rbp), %rax
movq %rcx, -0xa8(%rbp)
testb $0x1, 0x68(%rax)
je 0x61c5e
movq -0xb8(%rbp), %rax
movl 0x60(%rax), %eax
movl %eax, -0x130(%rbp)
jmp 0x61c6e
movq -0xb8(%rbp), %rax
movl 0x64(%rax), %eax
movl %eax, -0x130(%rbp)
movq -0xb8(%rbp), %r8
movl -0x130(%rbp), %eax
movl %eax, -0xac(%rbp)
movq 0xb8(%r8), %rdi
movq -0xa8(%rbp), %rax
movl (%rax), %esi
movq -0xa8(%rbp), %rax
movl 0x4(%rax), %edx
movl -0xac(%rbp), %ecx
addq $0x38, %r8
movq -0xa8(%rbp), %rax
movq 0x58(%rax), %r9
callq 0x4c3c0
jmp 0x61cb7
jmp 0x61cb9
jmp 0x61ccc
movq -0xb8(%rbp), %rax
movq 0x2238(%rax), %rax
movb $0x1, (%rax)
jmp 0x61cce
jmp 0x61cd0
addq $0x130, %rsp            # imm = 0x130
popq %rbp
retq
nopl (%rax)