// File: BenLangmead[P]bowtie/ebwt_search.cpp
// Function: exactSearch(PatternComposer&, HitSink&, Ebwt&, EList<SString<char>, 128>&)
static void exactSearch(PatternComposer& _patsrc,
                        HitSink& _sink,
                        Ebwt& ebwt,
                        EList<BTRefString >& os)
{
	exactSearch_patsrc = &_patsrc;
	exactSearch_sink   = &_sink;
	exactSearch_ebwt   = &ebwt;
	exactSearch_os     = &os;

	assert(!ebwt.isInMemory());
	{
		// Load the rest of (vast majority of) the backward Ebwt into
		// memory
		Timer _t(cerr, "Time loading forward index: ", timing);
		ebwt.loadIntoMemory(-1, !noRefNames, startVerbose);
	}

	BitPairReference *refs = NULL;
	bool pair = mates1.size() > 0 || mates12.size() > 0;
	if((pair && mixedThresh < 0xffffffff)) {
		Timer _t(cerr, "Time loading reference: ", timing);
		refs = new BitPairReference(adjustedEbwtFileBase, sanityCheck, NULL, &os, false, true, useMm, useShmem, mmSweep, verbose, startVerbose);
		if(!refs->loaded()) throw 1;
	}
	exactSearch_refs   = refs;
	int tids[max(nthreads, thread_ceiling)];
#if (__cplusplus >= 201103L)
	EList<std::thread*> threads;
	EList<thread_tracking_pair> tps;
	tps.resizeExact(max(nthreads, thread_ceiling));
#else
	EList<tthread::thread*> threads;
#endif

#if (__cplusplus >= 201103L)
	std::atomic<int> all_threads_done;
	all_threads_done = 0;
#endif
	CHUD_START();
	{
		Timer _t(cerr, "Time for 0-mismatch search: ", timing);

#ifndef _WIN32
		int pid = 0;
		if(thread_stealing) {
			pid = getpid();
			write_pid(thread_stealing_dir.c_str(), pid);
			thread_counter = 0;
		}
#endif

		for(int i = 0; i < nthreads; i++) {
			tids[i] = i;
#if (__cplusplus >= 201103L)
			tps[i].tid = tids[i];
			tps[i].done = &all_threads_done;
			if (i == nthreads - 1) {
				if(stateful) {
					exactSearchWorkerStateful((void*)&tps[i]);
				} else {
					exactSearchWorker((void*)&tps[i]);
				}
			}
			else {
				if(stateful) {
					threads.push_back(new std::thread(exactSearchWorkerStateful, (void*)&tps[i]));
				} else {
					threads.push_back(new std::thread(exactSearchWorker, (void*)&tps[i]));
				}
				threads[i]->detach();
				SLEEP(10);
			}
#else
			if (i == nthreads - 1) {
				if(stateful) {
					exactSearchWorkerStateful((void*)(tids + i));
				} else {
					exactSearchWorker((void*)(tids + i));
				}
			}
			else {
				if(stateful) {
					threads.push_back(new tthread::thread(exactSearchWorkerStateful, (void *)(tids + i)));
				} else {
					threads.push_back(new tthread::thread(exactSearchWorker, (void *)(tids + i)));
				}
			}
#endif
		}

#ifndef _WIN32
		if(thread_stealing) {
			int orig_threads = nthreads, steal_ctr = 1;
			for(int j = 0; j < 10; j++) {
				sleep(1);
			}
			while(thread_counter > 0) {
				if(steal_thread(pid, orig_threads)) {
					nthreads++;
					tids[nthreads-1] = nthreads;
#if (__cplusplus >= 201103L)
					tps[nthreads-1].tid = nthreads - 1;
					tps[nthreads-1].done = &all_threads_done;
					if(stateful) {
						threads.push_back(new std::thread(exactSearchWorkerStateful, (void*)&tps[nthreads-1]));
					} else {
						threads.push_back(new std::thread(exactSearchWorker, (void*)&tps[nthreads-1]));
					}
					threads[nthreads-1]->detach();
					SLEEP(10);
#else
					if(stateful) {
						threads.push_back(new tthread::thread(exactSearchWorkerStateful, (void *)(tids + nthreads - 1)));
					} else {
						threads.push_back(new tthread::thread(exactSearchWorker, (void *)(tids + nthreads - 1)));
					}
#endif
					cerr << "pid " << pid << " started new worker # " << nthreads << endl;
				}
				steal_ctr++;
				for(int j = 0; j < 10; j++) {
					sleep(1);
				}
			}
		}
#endif

#if (__cplusplus >= 201103L)
		while(all_threads_done < nthreads) {
			SLEEP(10);
		}
#else
		for (int i = 0; i < nthreads - 1; i++) {
			threads[i]->join();
		}
#endif

#ifndef _WIN32
		if(thread_stealing) {
			del_pid(thread_stealing_dir.c_str(), pid);
		}
#endif
	}
	if(refs != NULL) delete refs;

	for (int i = 0; i < nthreads - 1; i++) {
		if (threads[i] != NULL) {
			delete threads[i];
		}
	}
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x1d0, %rsp            # imm = 0x1D0
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movq %rcx, -0x20(%rbp)
movq -0x8(%rbp), %rax
movq %rax, 0x90712(%rip)     # 0xab578
movq -0x10(%rbp), %rax
movq %rax, 0x9070f(%rip)     # 0xab580
movq -0x18(%rbp), %rax
movq %rax, 0x9070c(%rip)     # 0xab588
movq -0x20(%rbp), %rax
movq %rax, 0x90709(%rip)     # 0xab590
movl 0x9050f(%rip), %eax     # 0xab39c
testl %eax, %eax
setne %al
movzbl %al, %ecx
movq 0x8d154(%rip), %rsi     # 0xa7ff0
leaq 0x718b4(%rip), %rdx     # 0x8c757
leaq -0x40(%rbp), %rdi
callq 0x273f0
movq -0x18(%rbp), %rdi
movb 0x9054e(%rip), %al      # 0xab404
notb %al
movzbl 0x904c9(%rip), %ecx     # 0xab388
andl $0x1, %ecx
movzbl %al, %edx
andl $0x1, %edx
movl $0xffffffff, %esi       # imm = 0xFFFFFFFF
callq 0x290f0
jmp 0x1aed4
leaq -0x40(%rbp), %rdi
callq 0x27490
movq $0x0, -0x58(%rbp)
leaq 0x90254(%rip), %rdi     # 0xab140
callq 0x26400
movq %rax, %rcx
movb $0x1, %al
cmpq $0x0, %rcx
movb %al, -0x159(%rbp)
ja 0x1af1b
leaq 0x90277(%rip), %rdi     # 0xab180
callq 0x26400
cmpq $0x0, %rax
seta %al
movb %al, -0x159(%rbp)
movb -0x159(%rbp), %al
andb $0x1, %al
movb %al, -0x59(%rbp)
testb $0x1, -0x59(%rbp)
je 0x1b09d
cmpl $-0x1, 0x90509(%rip)    # 0xab440
jae 0x1b09d
movl 0x90459(%rip), %eax     # 0xab39c
testl %eax, %eax
setne %al
movzbl %al, %ecx
movq 0x8d09e(%rip), %rsi     # 0xa7ff0
leaq 0x717e5(%rip), %rdx     # 0x8c73e
leaq -0x80(%rbp), %rdi
callq 0x273f0
movl $0x568, %edi            # imm = 0x568
callq 0xa5f0
movq %rax, -0x168(%rbp)
jmp 0x1af75
movq -0x168(%rbp), %rdi
movl 0x90426(%rip), %eax     # 0xab3a8
testl %eax, %eax
setne %al
movq -0x20(%rbp), %r8
movzbl 0x90499(%rip), %edx     # 0xab42b
movzbl 0x90491(%rip), %esi     # 0xab42a
movzbl 0x9048b(%rip), %r9d     # 0xab42c
movzbl 0x903f7(%rip), %r10d    # 0xab3a0
movzbl 0x903d7(%rip), %r11d    # 0xab388
subq $0x30, %rsp
andl $0x1, %r11d
movq %rsp, %rcx
movl %r11d, 0x28(%rcx)
andl $0x1, %r10d
movl %r10d, 0x20(%rcx)
andl $0x1, %r9d
movl %r9d, 0x18(%rcx)
andl $0x1, %esi
movl %esi, 0x10(%rcx)
andl $0x1, %edx
movl %edx, 0x8(%rcx)
movl $0x1, (%rcx)
movzbl %al, %edx
leaq 0x901b4(%rip), %rsi     # 0xab1a0
xorl %r9d, %r9d
movl %r9d, %ecx
callq 0x2fe70
addq $0x30, %rsp
jmp 0x1affd
movq -0x168(%rbp), %rax
movq %rax, -0x58(%rbp)
movq -0x58(%rbp), %rdi
callq 0x31950
testb $0x1, %al
jne 0x1b084
movl $0x4, %edi
callq 0xa290
movq %rax, %rdi
movl $0x1, (%rdi)
movq 0x8cf21(%rip), %rsi     # 0xa7f50
xorl %eax, %eax
movl %eax, %edx
callq 0xab10
jmp 0x1b8ef
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
leaq -0x40(%rbp), %rdi
callq 0x27490
jmp 0x1b8e6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
jmp 0x1b08f
movq -0x168(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
movl $0x568, %esi            # imm = 0x568
callq 0xa600
jmp 0x1b08f
leaq -0x80(%rbp), %rdi
callq 0x27490
jmp 0x1b09d
leaq -0x80(%rbp), %rdi
callq 0x27490
jmp 0x1b8e6
movq -0x58(%rbp), %rax
movq %rax, 0x904f0(%rip)     # 0xab598
leaq 0x90341(%rip), %rdi     # 0xab3f0
leaq 0x90342(%rip), %rsi     # 0xab3f8
callq 0x31970
movl (%rax), %eax
movq %rsp, %rcx
movq %rcx, -0x88(%rbp)
leaq 0xf(,%rax,4), %rdx
andq $-0x10, %rdx
movq %rsp, %rcx
subq %rdx, %rcx
movq %rcx, -0x170(%rbp)
movq %rcx, %rsp
movq %rax, -0x90(%rbp)
leaq -0xb0(%rbp), %rdi
callq 0x319b0
leaq -0xd0(%rbp), %rdi
callq 0x319f0
jmp 0x1b104
leaq 0x902e5(%rip), %rdi     # 0xab3f0
leaq 0x902e6(%rip), %rsi     # 0xab3f8
callq 0x31970
movslq (%rax), %rsi
leaq -0xd0(%rbp), %rdi
callq 0x31a30
jmp 0x1b128
leaq -0xd4(%rbp), %rdi
xorl %esi, %esi
callq 0x31ab0
movl 0x90260(%rip), %eax     # 0xab39c
testl %eax, %eax
setne %al
movzbl %al, %ecx
movq 0x8cea5(%rip), %rsi     # 0xa7ff0
leaq 0x723b0(%rip), %rdx     # 0x8d502
leaq -0xf8(%rbp), %rdi
callq 0x273f0
jmp 0x1b160
movl $0x0, -0xfc(%rbp)
testb $0x1, 0x9028b(%rip)     # 0xab3fc
je 0x1b1dd
callq 0xa910
movl %eax, -0xfc(%rbp)
leaq 0x90063(%rip), %rdi     # 0xab1e8
callq 0xa210
movq %rax, %rdi
movl -0xfc(%rbp), %esi
callq 0x1c7c0
jmp 0x1b19a
leaq 0x901bb(%rip), %rdi     # 0xab35c
xorl %esi, %esi
callq 0x31ab0
jmp 0x1b1dd
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
jmp 0x1b8da
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
jmp 0x1b8ce
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
jmp 0x1b808
movl $0x0, -0x100(%rbp)
movl -0x100(%rbp), %eax
cmpl 0x901fd(%rip), %eax     # 0xab3f0
jge 0x1b42f
movq -0x170(%rbp), %rax
movl -0x100(%rbp), %edx
movslq -0x100(%rbp), %rcx
movl %edx, (%rax,%rcx,4)
movslq -0x100(%rbp), %rcx
movl (%rax,%rcx,4), %eax
movl %eax, -0x174(%rbp)
movslq -0x100(%rbp), %rsi
leaq -0xd0(%rbp), %rdi
callq 0x31b50
movl -0x174(%rbp), %ecx
movl %ecx, (%rax)
movslq -0x100(%rbp), %rsi
leaq -0xd0(%rbp), %rdi
callq 0x31b50
leaq -0xd4(%rbp), %rcx
movq %rcx, 0x8(%rax)
movl -0x100(%rbp), %eax
movl 0x9018b(%rip), %ecx     # 0xab3f0
subl $0x1, %ecx
cmpl %ecx, %eax
jne 0x1b2b8
testb $0x1, 0x901ba(%rip)     # 0xab42d
je 0x1b294
movslq -0x100(%rbp), %rsi
leaq -0xd0(%rbp), %rdi
callq 0x31b50
movq %rax, %rdi
callq 0x22860
jmp 0x1b292
jmp 0x1b2b3
movslq -0x100(%rbp), %rsi
leaq -0xd0(%rbp), %rdi
callq 0x31b50
movq %rax, %rdi
callq 0x22eb0
jmp 0x1b2b1
jmp 0x1b2b3
jmp 0x1b419
testb $0x1, 0x9016e(%rip)     # 0xab42d
je 0x1b358
movl $0x8, %edi
callq 0xa5f0
movq %rax, -0x180(%rbp)
jmp 0x1b2d8
movslq -0x100(%rbp), %rsi
leaq -0xd0(%rbp), %rdi
callq 0x31b50
movq -0x180(%rbp), %rdi
movq %rax, -0x110(%rbp)
leaq 0x7560(%rip), %rsi      # 0x22860
leaq -0x110(%rbp), %rdx
callq 0x31bf0
jmp 0x1b30e
movq -0x180(%rbp), %rax
movq %rax, -0x108(%rbp)
leaq -0xb0(%rbp), %rdi
leaq -0x108(%rbp), %rsi
callq 0x31b80
jmp 0x1b331
jmp 0x1b3e8
movq -0x180(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
movl $0x8, %esi
callq 0xa600
jmp 0x1b808
movl $0x8, %edi
callq 0xa5f0
movq %rax, -0x188(%rbp)
jmp 0x1b36b
movslq -0x100(%rbp), %rsi
leaq -0xd0(%rbp), %rdi
callq 0x31b50
movq -0x188(%rbp), %rdi
movq %rax, -0x120(%rbp)
leaq 0x7b1d(%rip), %rsi      # 0x22eb0
leaq -0x120(%rbp), %rdx
callq 0x31bf0
jmp 0x1b3a1
movq -0x188(%rbp), %rax
movq %rax, -0x118(%rbp)
leaq -0xb0(%rbp), %rdi
leaq -0x118(%rbp), %rsi
callq 0x31b80
jmp 0x1b3c4
jmp 0x1b3e8
movq -0x188(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
movl $0x8, %esi
callq 0xa600
jmp 0x1b808
movslq -0x100(%rbp), %rsi
leaq -0xb0(%rbp), %rdi
callq 0x31cb0
movq (%rax), %rdi
callq 0xab50
jmp 0x1b405
leaq 0x6e2b4(%rip), %rdi     # 0x896c0
xorl %eax, %eax
movl %eax, %esi
callq 0xa1b0
jmp 0x1b417
jmp 0x1b419
jmp 0x1b41b
movl -0x100(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x100(%rbp)
jmp 0x1b1e7
testb $0x1, 0x8ffc6(%rip)     # 0xab3fc
je 0x1b778
movl 0x8ffae(%rip), %eax     # 0xab3f0
movl %eax, -0x124(%rbp)
movl $0x1, -0x128(%rbp)
movl $0x0, -0x12c(%rbp)
cmpl $0xa, -0x12c(%rbp)
jge 0x1b484
movl $0x1, %edi
callq 0xa450
jmp 0x1b471
jmp 0x1b473
movl -0x12c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x12c(%rbp)
jmp 0x1b45c
jmp 0x1b486
leaq 0x8fecf(%rip), %rdi     # 0xab35c
callq 0x31ce0
cmpl $0x0, %eax
jle 0x1b776
movl -0xfc(%rbp), %edi
movl -0x124(%rbp), %esi
callq 0x1f730
movb %al, -0x189(%rbp)
jmp 0x1b4b4
movb -0x189(%rbp), %al
testb $0x1, %al
jne 0x1b4c3
jmp 0x1b730
movq -0x170(%rbp), %rax
movl 0x8ff20(%rip), %ecx     # 0xab3f0
addl $0x1, %ecx
movl %ecx, 0x8ff17(%rip)     # 0xab3f0
movl 0x8ff11(%rip), %edx     # 0xab3f0
movl 0x8ff0b(%rip), %ecx     # 0xab3f0
subl $0x1, %ecx
movslq %ecx, %rcx
movl %edx, (%rax,%rcx,4)
movl 0x8fefc(%rip), %eax     # 0xab3f0
subl $0x1, %eax
movl %eax, -0x190(%rbp)
movl 0x8feed(%rip), %eax     # 0xab3f0
subl $0x1, %eax
movslq %eax, %rsi
leaq -0xd0(%rbp), %rdi
callq 0x31b50
movl -0x190(%rbp), %ecx
movl %ecx, (%rax)
movl 0x8fecd(%rip), %eax     # 0xab3f0
subl $0x1, %eax
movslq %eax, %rsi
leaq -0xd0(%rbp), %rdi
callq 0x31b50
leaq -0xd4(%rbp), %rcx
movq %rcx, 0x8(%rax)
testb $0x1, 0x8fee6(%rip)     # 0xab42d
je 0x1b5e4
movl $0x8, %edi
callq 0xa5f0
movq %rax, -0x198(%rbp)
jmp 0x1b560
movl 0x8fe8a(%rip), %eax     # 0xab3f0
decl %eax
movslq %eax, %rsi
leaq -0xd0(%rbp), %rdi
callq 0x31b50
movq -0x198(%rbp), %rdi
movq %rax, -0x140(%rbp)
leaq 0x72d4(%rip), %rsi      # 0x22860
leaq -0x140(%rbp), %rdx
callq 0x31bf0
jmp 0x1b59a
movq -0x198(%rbp), %rax
movq %rax, -0x138(%rbp)
leaq -0xb0(%rbp), %rdi
leaq -0x138(%rbp), %rsi
callq 0x31b80
jmp 0x1b5bd
jmp 0x1b678
movq -0x198(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
movl $0x8, %esi
callq 0xa600
jmp 0x1b808
movl $0x8, %edi
callq 0xa5f0
movq %rax, -0x1a0(%rbp)
jmp 0x1b5f7
movl 0x8fdf3(%rip), %eax     # 0xab3f0
decl %eax
movslq %eax, %rsi
leaq -0xd0(%rbp), %rdi
callq 0x31b50
movq -0x1a0(%rbp), %rdi
movq %rax, -0x150(%rbp)
leaq 0x788d(%rip), %rsi      # 0x22eb0
leaq -0x150(%rbp), %rdx
callq 0x31bf0
jmp 0x1b631
movq -0x1a0(%rbp), %rax
movq %rax, -0x148(%rbp)
leaq -0xb0(%rbp), %rdi
leaq -0x148(%rbp), %rsi
callq 0x31b80
jmp 0x1b654
jmp 0x1b678
movq -0x1a0(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
movl $0x8, %esi
callq 0xa600
jmp 0x1b808
movl 0x8fd72(%rip), %eax     # 0xab3f0
decl %eax
movslq %eax, %rsi
leaq -0xb0(%rbp), %rdi
callq 0x31cb0
movq (%rax), %rdi
callq 0xab50
jmp 0x1b699
leaq 0x6e030(%rip), %rdi     # 0x896d0
xorl %eax, %eax
movl %eax, %esi
callq 0xa1b0
jmp 0x1b6ab
movq 0x8c93e(%rip), %rdi     # 0xa7ff0
leaq 0x710fa(%rip), %rsi     # 0x8c7b3
callq 0xa5d0
movq %rax, -0x1a8(%rbp)
jmp 0x1b6c7
movq -0x1a8(%rbp), %rdi
movl -0xfc(%rbp), %esi
callq 0xab40
movq %rax, -0x1b0(%rbp)
jmp 0x1b6e2
movq -0x1b0(%rbp), %rdi
leaq 0x710c8(%rip), %rsi     # 0x8c7b8
callq 0xa5d0
movq %rax, -0x1b8(%rbp)
jmp 0x1b6fe
movq -0x1b8(%rbp), %rdi
movl 0x8fce5(%rip), %esi     # 0xab3f0
callq 0xab40
movq %rax, -0x1c0(%rbp)
jmp 0x1b719
movq -0x1c0(%rbp), %rdi
movq 0x8c841(%rip), %rsi     # 0xa7f68
callq 0xa640
jmp 0x1b72e
jmp 0x1b730
movl -0x128(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x128(%rbp)
movl $0x0, -0x154(%rbp)
cmpl $0xa, -0x154(%rbp)
jge 0x1b771
movl $0x1, %edi
callq 0xa450
jmp 0x1b75e
jmp 0x1b760
movl -0x154(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x154(%rbp)
jmp 0x1b749
jmp 0x1b486
jmp 0x1b778
jmp 0x1b77a
leaq -0xd4(%rbp), %rdi
callq 0x31ce0
cmpl 0x8fc64(%rip), %eax     # 0xab3f0
jge 0x1b7a2
leaq 0x6df4b(%rip), %rdi     # 0x896e0
xorl %eax, %eax
movl %eax, %esi
callq 0xa1b0
jmp 0x1b7a0
jmp 0x1b77a
testb $0x1, 0x8fc53(%rip)     # 0xab3fc
je 0x1b7c5
leaq 0x8fa36(%rip), %rdi     # 0xab1e8
callq 0xa210
movq %rax, %rdi
movl -0xfc(%rbp), %esi
callq 0x11ac0
leaq -0xf8(%rbp), %rdi
callq 0x27490
cmpq $0x0, -0x58(%rbp)
je 0x1b819
movq -0x58(%rbp), %rax
movq %rax, -0x1c8(%rbp)
cmpq $0x0, %rax
je 0x1b806
movq -0x1c8(%rbp), %rdi
callq 0x31d60
movq -0x1c8(%rbp), %rdi
movl $0x568, %esi            # imm = 0x568
callq 0xa600
jmp 0x1b819
leaq -0xf8(%rbp), %rdi
callq 0x27490
jmp 0x1b8ce
movl $0x0, -0x158(%rbp)
movl -0x158(%rbp), %eax
movl 0x8fbc1(%rip), %ecx     # 0xab3f0
subl $0x1, %ecx
cmpl %ecx, %eax
jge 0x1b8a7
movslq -0x158(%rbp), %rsi
leaq -0xb0(%rbp), %rdi
callq 0x31cb0
cmpq $0x0, (%rax)
je 0x1b891
movslq -0x158(%rbp), %rsi
leaq -0xb0(%rbp), %rdi
callq 0x31cb0
movq (%rax), %rax
movq %rax, -0x1d0(%rbp)
cmpq $0x0, %rax
je 0x1b88f
movq -0x1d0(%rbp), %rdi
callq 0x31e90
movq -0x1d0(%rbp), %rdi
movl $0x8, %esi
callq 0xa600
jmp 0x1b891
jmp 0x1b893
movl -0x158(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x158(%rbp)
jmp 0x1b823
leaq -0xd0(%rbp), %rdi
callq 0x31ec0
leaq -0xb0(%rbp), %rdi
callq 0x31ee0
movq -0x88(%rbp), %rax
movq %rax, %rsp
movq %rbp, %rsp
popq %rbp
retq
leaq -0xd0(%rbp), %rdi
callq 0x31ec0
leaq -0xb0(%rbp), %rdi
callq 0x31ee0
movq -0x48(%rbp), %rdi
callq 0xab60
nop