// File: /workspace/github_cpp_makefile_star2_O2/BenLangmead[P]bowtie/./ebwt.h
// Function: void Ebwt::initFromVector<SString<char>>(EList<FileBuf*, 128>&, EList<RefRecord, 128>&, EList<unsigned int, 128>&, unsigned int, RefReadInParams const&, std::basic_ofstream<char, std::char_traits<char>>&, std::basic_ofstream<char, std::char_traits<char>>&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&, int, bool, unsigned int, unsigned int, unsigned int, int, unsigned int)
void initFromVector(
		EList<FileBuf*>& is,
		EList<RefRecord>& szs,
		EList<uint32_t>& plens,
		TIndexOffU sztot,
		const RefReadInParams& refparams,
		ofstream& out1,
		ofstream& out2,
		const string& outfile,
		int nthreads,
		bool useBlockwise,
		TIndexOffU bmax,
		TIndexOffU bmaxSqrtMult,
		TIndexOffU bmaxDivN,
		int dcv,
		uint32_t seed)
	{
		// Compose text strings into single string
		VMSG_NL("Calculating joined length");
		TStr s; // holds the entire joined reference after call to joinToDisk
		TIndexOffU jlen;
		jlen = joinedLen(szs);
		assert_geq(jlen, sztot);
		VMSG_NL("Writing header");
		writeFromMemory(true, out1, out2);
		try {
			VMSG_NL("Reserving space for joined string");
			s.resize(jlen);
			VMSG_NL("Joining reference sequences");
			if(refparams.reverse == REF_READ_REVERSE) {
				{
					Timer timer(cout, "  Time to join reference sequences: ", _verbose);
					joinToDisk(is, szs, plens, sztot, refparams, s, out1, out2, seed);
				} {
					Timer timer(cout, "  Time to reverse reference sequence: ", _verbose);
					EList<RefRecord> tmp;
					s.reverse();
					reverseRefRecords(szs, tmp, false, false);
					szsToDisk(tmp, out1, refparams.reverse);
				}
			} else {
				Timer timer(cout, "  Time to join reference sequences: ", _verbose);
				joinToDisk(is, szs, plens, sztot, refparams, s, out1, out2, seed);
				szsToDisk(szs, out1, refparams.reverse);
			}
			// Joined reference sequence now in 's'
		} catch(bad_alloc& e) {
			// If we throw an allocation exception in the try block,
			// that means that the joined version of the reference
			// string itself is too larger to fit in memory.  The only
			// alternatives are to tell the user to give us more memory
			// or to try again with a packed representation of the
			// reference (if we haven't tried that already).
			cerr << "Could not allocate space for a joined string of " << jlen << " elements." << endl;
			if(!isPacked() && _passMemExc) {
				// Pass the exception up so that we can retry using a
				// packed string representation
				throw e;
			}
			// There's no point passing this exception on.  The fact
			// that we couldn't allocate the joined string means that
			// --bmax is irrelevant - the user should re-run with
			// ebwt-build-packed
			if(isPacked()) {
				cerr << "Please try running bowtie-build on a computer with more memory." << endl;
			} else {
				cerr << "Please try running bowtie-build in packed mode (-p/--packed) or in automatic" << endl
				     << "mode (-a/--auto), or try again on a computer with more memory." << endl;
			}
			if(sizeof(void*) == 4) {
				cerr << "If this computer has more than 4 GB of memory, try using a 64-bit executable;" << endl
				     << "this executable is 32-bit." << endl;
			}
			throw 1;
		}
		// Succesfully obtained joined reference string
		assert_geq(s.length(), jlen);
		if(bmax != OFF_MASK) {
			VMSG_NL("bmax according to bmax setting: " << bmax);
		}
		else if(bmaxSqrtMult != OFF_MASK) {
			bmax *= bmaxSqrtMult;
			VMSG_NL("bmax according to bmaxSqrtMult setting: " << bmax);
		}
		else if(bmaxDivN != OFF_MASK) {
			bmax = max<TIndexOffU>(jlen / bmaxDivN, 1);
			VMSG_NL("bmax according to bmaxDivN setting: " << bmax);
		}
		else {
			bmax = (TIndexOffU)sqrt(s.length());
			VMSG_NL("bmax defaulted to: " << bmax);
		}
		int iter = 0;
		bool first = true;
		// Look for bmax/dcv parameters that work.
		while(true) {
			if(!first && bmax < 40 && _passMemExc) {
				cerr << "Could not find approrpiate bmax/dcv settings for building this index." << endl;
				if(!isPacked()) {
					// Throw an exception exception so that we can
					// retry using a packed string representation
					throw bad_alloc();
				} else {
					cerr << "Already tried a packed string representation." << endl;
				}
				cerr << "Please try indexing this reference on a computer with more memory." << endl;
				if(sizeof(void*) == 4) {
					cerr << "If this computer has more than 4 GB of memory, try using a 64-bit executable;" << endl
						 << "this executable is 32-bit." << endl;
				}
				throw 1;
			}
			if(dcv > 4096) dcv = 4096;
			if((iter % 6) == 5 && dcv < 4096 && dcv != 0) {
				dcv <<= 1; // double difference-cover period
			} else {
				bmax -= (bmax >> 2); // reduce by 25%
			}
			VMSG("Using parameters --bmax " << bmax);
			if(dcv == 0) {
				VMSG_NL(" and *no difference cover*");
			} else {
				VMSG_NL(" --dcv " << dcv);
			}
			iter++;
			try {
				{
					VMSG_NL("  Doing ahead-of-time memory usage test");
					// Make a quick-and-dirty attempt to force a bad_alloc iff
					// we would have thrown one eventually as part of
					// constructing the DifferenceCoverSample
					dcv <<= 1;
					TIndexOffU sz = (TIndexOffU)DifferenceCoverSample<TStr>::simulateAllocs(s, dcv >> 1);
					if(nthreads > 1) sz *= (nthreads + 1);
					AutoArray<uint8_t> tmp(sz, EBWT_CAT);
					dcv >>= 1;
					// Likewise with the KarkkainenBlockwiseSA
					sz = (TIndexOffU)KarkkainenBlockwiseSA<TStr>::simulateAllocs(s, bmax);
					AutoArray<uint8_t> tmp2(sz, EBWT_CAT);
					// Now throw in the 'ftab' and 'isaSample' structures
					// that we'll eventually allocate in buildToDisk
					AutoArray<TIndexOffU> ftab(_eh._ftabLen * 2, EBWT_CAT);
					AutoArray<uint8_t> side(_eh._sideSz);
					// Grab another 20 MB out of caution
					AutoArray<uint32_t> extra(20*1024*1024, EBWT_CAT);
					// If we made it here without throwing bad_alloc, then we
					// passed the memory-usage stress test
					VMSG("  Passed!  Constructing with these parameters: --bmax " << bmax << " --dcv " << dcv);
					if(isPacked()) {
						VMSG(" --packed");
					}
					VMSG_NL("");
				}
				VMSG_NL("Constructing suffix-array element generator");
				KarkkainenBlockwiseSA<TStr> bsa(s, bmax, nthreads, dcv, seed, _sanity, _passMemExc, _verbose, outfile);
				assert(bsa.suffixItrIsReset());
				assert_eq(bsa.size(), s.length()+1);
				VMSG_NL("Converting suffix-array elements to index image");
				buildToDisk(bsa, s, out1, out2);
				out1.flush(); out2.flush();
				if(out1.fail() || out2.fail()) {
					cerr << "An error occurred writing the index to disk.  Please check if the disk is full." << endl;
					throw 1;
				}
				break;
			} catch(bad_alloc& e) {
				if(_passMemExc) {
					VMSG_NL("  Ran out of memory; automatically trying more memory-economical parameters.");
				} else {
					cerr << "Out of memory while constructing suffix array.  Please try using a smaller" << endl
						 << "number of blocks by specifying a smaller --bmax or a larger --bmaxdivn" << endl;
					throw 1;
				}
			}
			first = false;
		}
		assert(repOk());
		// Now write reference sequence names on the end
#ifdef ACCOUNT_FOR_ALL_GAP_REFS
		assert_geq(this->_refnames.size(), this->_nPat);
#else
		assert_eq(this->_refnames.size(), this->_nPat);
#endif
		for(TIndexOffU i = 0; i < this->_refnames.size(); i++) {
			out1 << this->_refnames[i] << endl;
		}
		out1 << '\0';
		out1.flush(); out2.flush();
		if(out1.fail() || out2.fail()) {
			cerr << "An error occurred writing the index to disk.  Please check if the disk is full." << endl;
			throw 1;
		}
		VMSG_NL("Returning from initFromVector");
	}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x3b8, %rsp            # imm = 0x3B8
movq %r9, %r14
movl %r8d, %r12d
movq %rcx, %rbp
movq %rdx, %r13
movq %rsi, %r15
movq %rdi, %rbx
cmpb $0x1, 0xc(%rdi)
jne 0xfe2d
leaq 0x60(%rsp), %rdi
callq 0x5200
leaq 0x70(%rsp), %rdi
leaq 0x161bc(%rip), %rsi     # 0x25fa3
callq 0x5350
movq %rax, %rdi
callq 0x5180
leaq 0x78(%rsp), %rsi
leaq 0x250(%rsp), %rdi
callq 0x5580
leaq 0x250(%rsp), %rsi
movq %rbx, %rdi
callq 0xb52a
leaq 0x250(%rsp), %rdi
callq 0x5778
leaq 0x60(%rsp), %rdi
callq 0x5240
movq %r15, 0x8(%rsp)
leaq 0x21c0f(%rip), %rax     # 0x31a48
movq %rax, 0x38(%rsp)
xorpd %xmm0, %xmm0
movupd %xmm0, 0x40(%rsp)
andq $0x0, 0x50(%rsp)
movq %rbx, %rdi
movq %r13, %rsi
callq 0xfd5e
movl %eax, %r15d
cmpb $0x1, 0xc(%rbx)
jne 0xfebe
leaq 0x60(%rsp), %rdi
callq 0x5200
leaq 0x70(%rsp), %rdi
leaq 0x16145(%rip), %rsi     # 0x25fbd
callq 0x5350
movq %rax, %rdi
callq 0x5180
leaq 0x78(%rsp), %rsi
leaq 0x250(%rsp), %rdi
callq 0x5580
leaq 0x250(%rsp), %rsi
movq %rbx, %rdi
callq 0xb52a
leaq 0x250(%rsp), %rdi
callq 0x5778
leaq 0x60(%rsp), %rdi
callq 0x5240
movq %r14, 0x20(%rsp)
movq 0x3f8(%rsp), %rcx
movq 0x3f0(%rsp), %rdx
pushq $0x1
popq %rsi
movq %rbx, %rdi
callq 0x7eb2
cmpb $0x1, 0xc(%rbx)
movl %r15d, %r14d
movq %r14, 0x28(%rsp)
jne 0xff48
leaq 0x60(%rsp), %rdi
callq 0x5200
leaq 0x70(%rsp), %rdi
leaq 0x160ca(%rip), %rsi     # 0x25fcc
callq 0x5350
movq %rax, %rdi
callq 0x5180
leaq 0x78(%rsp), %rsi
leaq 0x250(%rsp), %rdi
callq 0x5580
leaq 0x250(%rsp), %rsi
movq %rbx, %rdi
callq 0xb52a
leaq 0x250(%rsp), %rdi
callq 0x5778
leaq 0x60(%rsp), %rdi
callq 0x5240
leaq 0x38(%rsp), %rdi
movq %r14, %rsi
callq 0xb54a
cmpb $0x1, 0xc(%rbx)
jne 0xffb7
leaq 0x60(%rsp), %rdi
callq 0x5200
leaq 0x70(%rsp), %rdi
leaq 0x1607d(%rip), %rsi     # 0x25fee
callq 0x5350
movq %rax, %rdi
callq 0x5180
leaq 0x78(%rsp), %rsi
leaq 0x250(%rsp), %rdi
callq 0x5580
leaq 0x250(%rsp), %rsi
movq %rbx, %rdi
callq 0xb52a
leaq 0x250(%rsp), %rdi
callq 0x5778
leaq 0x60(%rsp), %rdi
callq 0x5240
movl %r15d, 0x1c(%rsp)
movq %r13, %r15
movq 0x20(%rsp), %r13
cmpl $0x1, (%r13)
jne 0x100f1
movb 0xc(%rbx), %r14b
xorl %edi, %edi
callq 0x5300
movq %rax, 0x60(%rsp)
movq 0x21fba(%rip), %rax     # 0x31fa0
movq %rax, 0x68(%rsp)
leaq 0x16018(%rip), %rax     # 0x2600a
movq %rax, 0x70(%rsp)
movb %r14b, 0x78(%rsp)
movq %rbx, %rdi
movq 0x8(%rsp), %rsi
movq %r15, %rdx
movq %rbp, %rcx
movl %r12d, %r8d
movq %r13, %r9
movl 0x438(%rsp), %eax
pushq %rax
pushq 0x400(%rsp)
pushq 0x400(%rsp)
leaq 0x50(%rsp), %rax
pushq %rax
callq 0x11156
addq $0x20, %rsp
leaq 0x60(%rsp), %r14
movq %r14, %rdi
callq 0xcb3e
movb 0xc(%rbx), %bpl
xorl %edi, %edi
callq 0x5300
movq %rax, (%r14)
movq 0x21f49(%rip), %rax     # 0x31fa0
movq %rax, 0x8(%r14)
leaq 0x15fcd(%rip), %rax     # 0x2602f
movq %rax, 0x10(%r14)
movb %bpl, 0x18(%r14)
movabsq $-0x100000000, %rax     # imm = 0xFFFFFFFF00000000
leaq 0x250(%rsp), %r14
movq %rax, (%r14)
andq $0x0, 0x8(%r14)
movq $0x80, 0x10(%r14)
andq $0x0, 0x18(%r14)
leaq 0x38(%rsp), %rdi
callq 0xfaec
movq %r15, %rdi
movq %r14, %rsi
xorl %edx, %edx
xorl %ecx, %ecx
callq 0x226b5
movq 0x20(%rsp), %rax
movl (%rax), %ecx
leaq 0x250(%rsp), %rsi
movq %rbx, %rdi
movq 0x3f0(%rsp), %rdx
callq 0x1149a
leaq 0x250(%rsp), %rdi
callq 0x1a5a8
leaq 0x60(%rsp), %rdi
callq 0xcb3e
pushq $0x1
popq %r13
movq 0x3f0(%rsp), %r15
jmp 0x1017d
movb 0xc(%rbx), %r14b
xorl %edi, %edi
callq 0x5300
movq %rax, 0x60(%rsp)
movq 0x21e98(%rip), %rax     # 0x31fa0
movq %rax, 0x68(%rsp)
leaq 0x15ef6(%rip), %rax     # 0x2600a
movq %rax, 0x70(%rsp)
movb %r14b, 0x78(%rsp)
movq %rbx, %rdi
movq 0x8(%rsp), %rsi
movq %r15, %r14
movq %r15, %rdx
movq %rbp, %rcx
movl %r12d, %r8d
movq %r13, %r9
movl 0x438(%rsp), %eax
pushq %rax
pushq 0x400(%rsp)
movq 0x400(%rsp), %r15
pushq %r15
leaq 0x50(%rsp), %rax
pushq %rax
callq 0x11156
addq $0x20, %rsp
movl (%r13), %ecx
movq %rbx, %rdi
movq %r14, %rsi
movq %r15, %rdx
callq 0x1149a
leaq 0x60(%rsp), %rdi
callq 0xcb3e
pushq $0x1
popq %r13
movl 0x418(%rsp), %ebp
cmpl $-0x1, %ebp
je 0x101e7
cmpb $0x1, 0xc(%rbx)
jne 0x10362
leaq 0x60(%rsp), %rdi
callq 0x5200
leaq 0x70(%rsp), %rdi
leaq 0x15fb5(%rip), %rsi     # 0x2615e
callq 0x5350
movl %ebp, %esi
movq %rax, %rdi
callq 0x51e0
movq %rax, %rdi
callq 0x5180
leaq 0x78(%rsp), %rsi
leaq 0x250(%rsp), %rdi
callq 0x5580
leaq 0x250(%rsp), %rsi
movq %rbx, %rdi
callq 0xb52a
jmp 0x1034b
movl 0x420(%rsp), %ebp
cmpl $-0x1, %ebp
je 0x10253
negl %ebp
cmpb $0x1, 0xc(%rbx)
jne 0x10362
leaq 0x60(%rsp), %rdi
callq 0x5200
leaq 0x70(%rsp), %rdi
leaq 0x15f6a(%rip), %rsi     # 0x2617f
callq 0x5350
movl %ebp, %esi
movq %rax, %rdi
callq 0x51e0
movq %rax, %rdi
callq 0x5180
leaq 0x78(%rsp), %rsi
leaq 0x250(%rsp), %rdi
callq 0x5580
leaq 0x250(%rsp), %rsi
movq %rbx, %rdi
callq 0xb52a
jmp 0x1034b
movl 0x428(%rsp), %ecx
cmpl $-0x1, %ecx
je 0x102cc
movl 0x1c(%rsp), %esi
movl %esi, %eax
xorl %edx, %edx
divl %ecx
movl %eax, %ebp
cmpl %ecx, %esi
cmovbl %r13d, %ebp
cmpb $0x1, 0xc(%rbx)
jne 0x10362
leaq 0x60(%rsp), %rdi
callq 0x5200
leaq 0x70(%rsp), %rdi
leaq 0x15f17(%rip), %rsi     # 0x261a8
callq 0x5350
movl %ebp, %esi
movq %rax, %rdi
callq 0x51e0
movq %rax, %rdi
callq 0x5180
leaq 0x78(%rsp), %rsi
leaq 0x250(%rsp), %rdi
callq 0x5580
leaq 0x250(%rsp), %rsi
movq %rbx, %rdi
callq 0xb52a
jmp 0x1034b
movsd 0x50(%rsp), %xmm0
unpcklps 0x13dc7(%rip), %xmm0    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]
subpd 0x13dcf(%rip), %xmm0    # 0x240b0
movapd %xmm0, %xmm1
unpckhpd %xmm0, %xmm1            # xmm1 = xmm1[1],xmm0[1]
addsd %xmm0, %xmm1
sqrtsd %xmm1, %xmm0
cvttsd2si %xmm0, %rbp
cmpb $0x1, 0xc(%rbx)
jne 0x10362
leaq 0x60(%rsp), %rdi
callq 0x5200
leaq 0x70(%rsp), %rdi
leaq 0x15ebb(%rip), %rsi     # 0x261cd
callq 0x5350
movl %ebp, %esi
movq %rax, %rdi
callq 0x51e0
movq %rax, %rdi
callq 0x5180
leaq 0x78(%rsp), %rsi
leaq 0x250(%rsp), %rdi
callq 0x5580
leaq 0x250(%rsp), %rsi
movq %rbx, %rdi
callq 0xb52a
leaq 0x250(%rsp), %rdi
callq 0x5778
leaq 0x60(%rsp), %rdi
callq 0x5240
movl 0x430(%rsp), %r12d
movl 0x408(%rsp), %eax
leal 0x1(%rax), %ecx
cmpl $0x2, %eax
cmovll %r13d, %ecx
movl %ecx, 0x1c(%rsp)
pushq $0x5
popq %rcx
pushq $0x6
popq %rsi
leaq 0x1600d(%rip), %rax     # 0x26399
movq %rax, 0x58(%rsp)
xorl %eax, %eax
xorl %r14d, %r14d
movl %eax, 0x28(%rsp)
xorl %edx, %edx
divl %esi
testb $0x1, %r14b
je 0x103b3
cmpl $0x27, %ebp
ja 0x103b3
cmpb $0x1, 0xd(%rbx)
je 0x10d5a
imull $0x6, %eax, %eax
movl %ecx, 0x34(%rsp)
addl %ecx, %eax
sete %al
movl $0x1000, %ecx           # imm = 0x1000
cmpl %ecx, %r12d
movl $0x1000, %r14d          # imm = 0x1000
cmovll %r12d, %r14d
setl %dl
testl %r12d, %r12d
setne %cl
andb %dl, %cl
andb %al, %cl
movl %ebp, %eax
shll %cl, %r14d
shrl $0x2, %eax
testb %cl, %cl
movl $0x0, %ecx
cmovnel %ecx, %eax
subl %eax, %ebp
cmpb $0x1, 0xc(%rbx)
movl %ebp, %eax
movq %rax, 0x8(%rsp)
jne 0x10459
leaq 0x60(%rsp), %rdi
callq 0x5200
leaq 0x70(%rsp), %rdi
leaq 0x15e83(%rip), %rsi     # 0x26298
callq 0x5350
movq %rax, %rdi
movq 0x8(%rsp), %rsi
callq 0x51e0
leaq 0x250(%rsp), %r12
movq %r12, %rdi
leaq 0x78(%rsp), %rsi
callq 0x5580
movq %rbx, %rdi
movq %r12, %rsi
callq 0xb52a
movq %r12, %rdi
callq 0x5778
leaq 0x60(%rsp), %rdi
callq 0x5240
movb 0xc(%rbx), %al
testl %r14d, %r14d
je 0x104b9
testb %al, %al
je 0x10512
leaq 0x60(%rsp), %rdi
callq 0x5200
leaq 0x70(%rsp), %rdi
leaq 0x15e4d(%rip), %rsi     # 0x262cc
callq 0x5350
movq %rax, %rdi
movl %r14d, %esi
callq 0x5660
movq %rax, %rdi
callq 0x5180
leaq 0x250(%rsp), %r12
movq %r12, %rdi
leaq 0x78(%rsp), %rsi
callq 0x5580
movq %rbx, %rdi
movq %r12, %rsi
callq 0xb52a
jmp 0x10500
testb %al, %al
je 0x10512
leaq 0x60(%rsp), %rdi
callq 0x5200
leaq 0x70(%rsp), %rdi
leaq 0x15dde(%rip), %rsi     # 0x262b1
callq 0x5350
movq %rax, %rdi
callq 0x5180
leaq 0x250(%rsp), %r12
movq %r12, %rdi
leaq 0x78(%rsp), %rsi
callq 0x5580
movq %rbx, %rdi
movq %r12, %rsi
callq 0xb52a
movq %r12, %rdi
callq 0x5778
leaq 0x60(%rsp), %rdi
callq 0x5240
cmpb $0x1, 0xc(%rbx)
movq %rbp, 0x20(%rsp)
jne 0x10572
leaq 0x60(%rsp), %rdi
callq 0x5200
leaq 0x70(%rsp), %rdi
leaq 0x15da1(%rip), %rsi     # 0x262d4
leaq 0x250(%rsp), %r12
callq 0x5350
movq %rax, %rdi
callq 0x5180
movq %r12, %rdi
leaq 0x78(%rsp), %rsi
callq 0x5580
movq %rbx, %rdi
movq %r12, %rsi
callq 0xb52a
movq %r12, %rdi
callq 0x5778
leaq 0x60(%rsp), %rdi
callq 0x5240
addl %r14d, %r14d
movl %r14d, %r12d
sarl %r12d
leaq 0x38(%rsp), %rdi
movl %r12d, %esi
callq 0x11596
movq %rax, %rbp
imull 0x1c(%rsp), %ebp
movl $0x1, 0x230(%rsp)
movq %rbp, %rdi
callq 0x5030
movq %rax, 0x238(%rsp)
movq %rax, %rdi
xorl %esi, %esi
movq %rbp, %rdx
callq 0x51b0
movq %rbp, 0x240(%rsp)
leaq 0x38(%rsp), %rdi
movq 0x20(%rsp), %rsi
callq 0x1161a
movl %eax, %r14d
movl $0x1, 0x218(%rsp)
movq %r14, %rdi
leaq 0x250(%rsp), %rbp
callq 0x5030
movq %rax, 0x220(%rsp)
movq %rax, %rdi
xorl %esi, %esi
movq %r14, %rdx
callq 0x51b0
movq %r14, 0x228(%rsp)
movl 0x130(%rbx), %esi
addl %esi, %esi
leaq 0x380(%rsp), %rdi
movl %r13d, %edx
callq 0x11660
movl 0x15c(%rbx), %r14d
andl $0x0, 0x200(%rsp)
movq %r14, %rdi
callq 0x5030
movq %rax, 0x208(%rsp)
movq %rax, %rdi
xorl %esi, %esi
movq %r14, %rdx
callq 0x51b0
movq %r14, 0x210(%rsp)
movl $0x1, 0x1e8(%rsp)
movl $0x5000000, %edi        # imm = 0x5000000
callq 0x5030
movq %rax, 0x1f0(%rsp)
movl $0x5000000, %edx        # imm = 0x5000000
movq %rax, %rdi
xorl %esi, %esi
callq 0x51b0
movq $0x1400000, 0x1f8(%rsp) # imm = 0x1400000
movb 0xc(%rbx), %al
cmpb $0x1, %al
jne 0x10704
leaq 0x60(%rsp), %rdi
callq 0x5200
leaq 0x70(%rsp), %rdi
leaq 0x15c51(%rip), %rsi     # 0x262fc
callq 0x5350
movq %rax, %rdi
movq 0x8(%rsp), %rsi
callq 0x51e0
movq %rax, %rdi
leaq 0x15c05(%rip), %rsi     # 0x262cc
callq 0x5350
movq %rax, %rdi
movl %r12d, %esi
callq 0x5660
movq %rbp, %rdi
leaq 0x78(%rsp), %rsi
callq 0x5580
movq %rbx, %rdi
movq %rbp, %rsi
callq 0xb52a
movq %rbp, %rdi
callq 0x5778
leaq 0x60(%rsp), %rdi
callq 0x5240
movb 0xc(%rbx), %al
cmpb $0x1, 0x180(%rbx)
jne 0x10759
testb $0x1, %al
je 0x10759
leaq 0x60(%rsp), %rdi
callq 0x5200
leaq 0x70(%rsp), %rdi
leaq 0x15c0c(%rip), %rsi     # 0x26333
callq 0x5350
movq %rbp, %rdi
leaq 0x78(%rsp), %rsi
callq 0x5580
movq %rbx, %rdi
movq %rbp, %rsi
callq 0xb52a
movq %rbp, %rdi
callq 0x5778
leaq 0x60(%rsp), %rdi
callq 0x5240
movb 0xc(%rbx), %al
testb $0x1, %al
je 0x107aa
leaq 0x60(%rsp), %rdi
callq 0x5200
leaq 0x70(%rsp), %rdi
leaq 0x16967(%rip), %rsi     # 0x270da
callq 0x5350
movq %rax, %rdi
callq 0x5180
movq %rbp, %rdi
leaq 0x78(%rsp), %rsi
callq 0x5580
movq %rbx, %rdi
movq %rbp, %rsi
callq 0xb52a
movq %rbp, %rdi
callq 0x5778
leaq 0x60(%rsp), %rdi
callq 0x5240
leaq 0x1e8(%rsp), %rdi
callq 0x116ac
leaq 0x200(%rsp), %rdi
callq 0x116ba
leaq 0x380(%rsp), %rdi
callq 0x116ac
leaq 0x218(%rsp), %rdi
callq 0x116ba
leaq 0x230(%rsp), %rdi
callq 0x116ba
movb 0xc(%rbx), %bpl
cmpb $0x1, %bpl
jne 0x1084e
leaq 0x60(%rsp), %rdi
callq 0x5200
leaq 0x70(%rsp), %rdi
leaq 0x15b32(%rip), %rsi     # 0x2633d
leaq 0x250(%rsp), %r14
callq 0x5350
movq %rax, %rdi
callq 0x5180
movq %r14, %rdi
leaq 0x78(%rsp), %rsi
callq 0x5580
movq %rbx, %rdi
movq %r14, %rsi
callq 0xb52a
movq %r14, %rdi
callq 0x5778
leaq 0x60(%rsp), %rdi
callq 0x5240
movb 0xc(%rbx), %bpl
movb 0xd(%rbx), %r13b
movb 0xe(%rbx), %r14b
leaq 0x398(%rsp), %rdi
movq 0x400(%rsp), %rsi
callq 0x54b0
subq $0x8, %rsp
movzbl %bpl, %eax
andl $0x1, %eax
movzbl %r13b, %r10d
movzbl %r14b, %r11d
leaq 0x258(%rsp), %r14
movq %r14, %rdi
leaq 0x40(%rsp), %rsi
movq 0x28(%rsp), %rdx
movl 0x410(%rsp), %ecx
movl %r12d, %r8d
movl 0x440(%rsp), %r9d
pushq 0x216f5(%rip)           # 0x31fa0
leaq 0x3a8(%rsp), %r13
pushq %r13
pushq %rax
pushq %r10
pushq %r11
callq 0x116c8
addq $0x30, %rsp
movq %r13, %rdi
callq 0x5778
cmpb $0x1, 0xc(%rbx)
jne 0x10926
leaq 0x60(%rsp), %rdi
callq 0x5200
leaq 0x70(%rsp), %rdi
leaq 0x15a82(%rip), %rsi     # 0x26369
callq 0x5350
movq %rax, %rdi
callq 0x5180
leaq 0x230(%rsp), %r13
movq %r13, %rdi
leaq 0x78(%rsp), %rsi
callq 0x5580
movq %rbx, %rdi
movq %r13, %rsi
callq 0xb52a
movq %r13, %rdi
callq 0x5778
leaq 0x60(%rsp), %rdi
callq 0x5240
movq %rbx, %rdi
movq %r14, %rsi
leaq 0x38(%rsp), %rdx
movq %r15, %rcx
movq 0x3f8(%rsp), %r8
callq 0x11878
movq %r15, %rdi
callq 0x51f0
movq 0x3f8(%rsp), %rdi
callq 0x51f0
movq (%r15), %rax
movq -0x18(%rax), %rax
testb $0x5, 0x20(%r15,%rax)
jne 0x10988
movq 0x3f8(%rsp), %rcx
movq (%rcx), %rax
movq -0x18(%rax), %rax
testb $0x5, 0x20(%rcx,%rax)
jne 0x10988
movq %r14, %rdi
callq 0x124ce
jmp 0x10c5e
movq 0x21661(%rip), %rdi     # 0x31ff0
leaq 0x15a03(%rip), %rsi     # 0x26399
callq 0x5350
movq %rax, %rdi
callq 0x5180
pushq $0x4
popq %rdi
callq 0x5190
movl $0x1, (%rax)
movq %rax, %rdi
movq 0x215a5(%rip), %rsi     # 0x31f60
xorl %edx, %edx
callq 0x5630
jmp 0x10e0e
jmp 0x10a12
jmp 0x10aca
jmp 0x10aca
jmp 0x10a51
movq %rdx, 0x10(%rsp)
movq %rax, 0x8(%rsp)
movq %r13, %rdi
callq 0x5778
jmp 0x10a8b
jmp 0x10a81
jmp 0x10b86
movq %rdx, 0x10(%rsp)
movq %rax, 0x8(%rsp)
movq %r14, %rdi
callq 0x5778
jmp 0x10abb
jmp 0x10ab1
movq %rdx, 0x10(%rsp)
movq %rax, 0x8(%rsp)
movq %rbp, %rdi
callq 0x5778
jmp 0x10b39
jmp 0x10aca
jmp 0x10b9f
movq %rdx, 0x10(%rsp)
movq %rax, 0x8(%rsp)
movq %rbp, %rdi
callq 0x5778
jmp 0x10b39
jmp 0x10b2f
jmp 0x10a51
movq %rdx, 0x10(%rsp)
movq %rax, 0x8(%rsp)
jmp 0x10b43
movq %rdx, 0x10(%rsp)
movq %rax, 0x8(%rsp)
movq %r12, %rdi
callq 0x5778
jmp 0x10b20
jmp 0x10b16
jmp 0x10b0a
movq %rdx, 0x10(%rsp)
movq %rax, 0x8(%rsp)
leaq 0x60(%rsp), %rdi
callq 0x5240
jmp 0x10b90
movq %rdx, 0x10(%rsp)
movq %rax, 0x8(%rsp)
movq %r13, %rdi
callq 0x5778
jmp 0x10ba9
movq %rdx, 0x10(%rsp)
movq %rax, 0x8(%rsp)
leaq 0x60(%rsp), %rdi
callq 0x5240
jmp 0x10ba9
movq %rdx, 0x10(%rsp)
movq %rax, 0x8(%rsp)
jmp 0x10b39
movq %rdx, 0x10(%rsp)
movq %rax, 0x8(%rsp)
jmp 0x10b50
movq %rdx, 0x10(%rsp)
movq %rax, 0x8(%rsp)
jmp 0x10b5d
movq %rdx, 0x10(%rsp)
movq %rax, 0x8(%rsp)
jmp 0x10b6a
jmp 0x10afc
movq %rdx, 0x10(%rsp)
movq %rax, 0x8(%rsp)
jmp 0x10b77
jmp 0x10b0a
movq %rdx, 0x10(%rsp)
movq %rax, 0x8(%rsp)
jmp 0x10b2a
movq %rdx, 0x10(%rsp)
movq %rax, 0x8(%rsp)
leaq 0x60(%rsp), %rdi
callq 0x5240
movl %r14d, %r12d
jmp 0x10ba9
movq %rdx, 0x10(%rsp)
movq %rax, 0x8(%rsp)
leaq 0x60(%rsp), %rdi
callq 0x5240
leaq 0x1e8(%rsp), %rdi
callq 0x116ac
leaq 0x200(%rsp), %rdi
callq 0x116ba
leaq 0x380(%rsp), %rdi
callq 0x116ac
leaq 0x218(%rsp), %rdi
callq 0x116ba
leaq 0x230(%rsp), %rdi
callq 0x116ba
jmp 0x10ba9
movq %rdx, 0x10(%rsp)
movq %rax, 0x8(%rsp)
leaq 0x250(%rsp), %rdi
callq 0x124ce
jmp 0x10ba9
movq %rdx, 0x10(%rsp)
movq %rax, 0x8(%rsp)
cmpl $0x1, 0x10(%rsp)
jne 0x11141
movq 0x8(%rsp), %rdi
callq 0x5150
cmpb $0x1, 0xd(%rbx)
jne 0x10e0e
cmpb $0x1, 0xc(%rbx)
jne 0x10c2a
leaq 0x60(%rsp), %rdi
callq 0x5200
leaq 0x70(%rsp), %rdi
leaq 0x15805(%rip), %rsi     # 0x263e9
callq 0x5350
movq %rax, %rdi
callq 0x5180
leaq 0x250(%rsp), %rdi
leaq 0x78(%rsp), %rsi
callq 0x5580
movq %rbx, %rdi
leaq 0x250(%rsp), %rsi
callq 0xb52a
leaq 0x250(%rsp), %rdi
callq 0x5778
leaq 0x60(%rsp), %rdi
callq 0x5240
movl 0x34(%rsp), %ebp
decl %ebp
movl 0x28(%rsp), %r13d
incl %r13d
movb $0x1, %r14b
callq 0x55c0
movl %r13d, %eax
movl %ebp, %ecx
pushq $0x1
popq %r13
movq 0x20(%rsp), %rbp
pushq $0x6
popq %rsi
movq 0x3f0(%rsp), %r15
jmp 0x10396
xorl %r14d, %r14d
movl %r14d, %r14d
cmpq %r14, 0xe0(%rbx)
jbe 0x10c90
movq %r14, %rsi
shlq $0x5, %rsi
addq 0xd0(%rbx), %rsi
movq %r15, %rdi
callq 0x52d0
movq %rax, %rdi
callq 0x5180
incl %r14d
jmp 0x10c61
movq %r15, %rdi
xorl %esi, %esi
callq 0x53f0
movq %r15, %rdi
callq 0x51f0
movq 0x3f8(%rsp), %rdi
callq 0x51f0
movq (%r15), %rax
movq -0x18(%rax), %rax
testb $0x5, 0x20(%r15,%rax)
jne 0x10da5
movq 0x3f8(%rsp), %rcx
movq (%rcx), %rax
movq -0x18(%rax), %rax
testb $0x5, 0x20(%rcx,%rax)
jne 0x10da5
cmpb $0x1, 0xc(%rbx)
jne 0x10d3e
leaq 0x60(%rsp), %rdi
callq 0x5200
leaq 0x70(%rsp), %rdi
leaq 0x157d0(%rip), %rsi     # 0x264c8
callq 0x5350
movq %rax, %rdi
callq 0x5180
leaq 0x78(%rsp), %rsi
leaq 0x250(%rsp), %rdi
callq 0x5580
leaq 0x250(%rsp), %rsi
movq %rbx, %rdi
callq 0xb52a
leaq 0x250(%rsp), %rdi
callq 0x5778
leaq 0x60(%rsp), %rdi
callq 0x5240
leaq 0x38(%rsp), %rdi
callq 0xb646
addq $0x3b8, %rsp            # imm = 0x3B8
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq 0x2128f(%rip), %rdi     # 0x31ff0
leaq 0x15479(%rip), %rsi     # 0x261e1
callq 0x5350
movq %rax, %rdi
callq 0x5180
cmpb $0x0, 0x180(%rbx)
je 0x10ddd
movq 0x2126b(%rip), %rdi     # 0x31ff0
leaq 0x1549b(%rip), %rsi     # 0x26227
callq 0x5350
movq %rax, %rdi
callq 0x5180
leaq 0x154b5(%rip), %rax     # 0x26255
movq %rax, 0x58(%rsp)
movq 0x21244(%rip), %rdi     # 0x31ff0
movq 0x58(%rsp), %rsi
callq 0x5350
movq %rax, %rdi
callq 0x5180
pushq $0x4
popq %rdi
callq 0x5190
movl $0x1, (%rax)
movq 0x2118d(%rip), %rsi     # 0x31f60
movq %rax, %rdi
xorl %edx, %edx
callq 0x5630
pushq $0x8
popq %rdi
callq 0x5190
movq 0x211ac(%rip), %rcx     # 0x31f98
addq $0x10, %rcx
movq %rcx, (%rax)
movq 0x211ae(%rip), %rsi     # 0x31fa8
movq 0x21187(%rip), %rdx     # 0x31f88
movq %rax, %rdi
callq 0x5630
jmp 0x110d8
movq 0x211db(%rip), %rdi     # 0x31ff0
leaq 0x1561a(%rip), %rsi     # 0x26436
callq 0x5350
movq %rax, %rdi
callq 0x5180
leaq 0x15651(%rip), %rsi     # 0x26481
movq %rax, %rdi
callq 0x5350
movq %rax, %rdi
callq 0x5180
pushq $0x4
popq %rdi
callq 0x5190
movl $0x1, (%rax)
movq 0x2110b(%rip), %rsi     # 0x31f60
movq %rax, %rdi
xorl %edx, %edx
callq 0x5630
jmp 0x110d8
jmp 0x10e92
jmp 0x1113c
movq %rax, 0x8(%rsp)
leaq 0x250(%rsp), %rdi
callq 0x5778
jmp 0x10e86
jmp 0x10e81
movq %rax, 0x8(%rsp)
leaq 0x60(%rsp), %rdi
callq 0x5240
jmp 0x10e97
movq %rax, 0x8(%rsp)
callq 0x55c0
jmp 0x11141
jmp 0x11132
jmp 0x10f0e
jmp 0x10fbc
jmp 0x1113c
jmp 0x10f0e
jmp 0x10fbc
jmp 0x1113c
jmp 0x10fbc
jmp 0x10f0e
jmp 0x10fbc
jmp 0x1113c
jmp 0x10fbc
jmp 0x10f0e
jmp 0x10fbc
jmp 0x1113c
jmp 0x10f0e
jmp 0x10fbc
jmp 0x1113c
jmp 0x10f0e
jmp 0x10fbc
jmp 0x1113c
jmp 0x10fbc
jmp 0x10fbc
jmp 0x10f0e
jmp 0x10fbc
jmp 0x1113c
movq %rax, 0x8(%rsp)
leaq 0x250(%rsp), %rdi
callq 0x5778
jmp 0x11109
jmp 0x10fbc
jmp 0x1113c
movq %rdx, %r14
movq %rax, 0x8(%rsp)
leaq 0x250(%rsp), %rdi
callq 0x5778
jmp 0x1100d
jmp 0x10ff1
jmp 0x10fdd
movq %rdx, %r14
movq %rax, 0x8(%rsp)
leaq 0x250(%rsp), %rdi
callq 0x5778
jmp 0x1100d
jmp 0x10ffb
jmp 0x11005
movq %rax, 0x8(%rsp)
leaq 0x250(%rsp), %rdi
callq 0x5778
jmp 0x11109
jmp 0x10ffb
jmp 0x11104
movq %rax, 0x8(%rsp)
leaq 0x250(%rsp), %rdi
callq 0x5778
jmp 0x1111a
jmp 0x1113c
jmp 0x11115
jmp 0x10fbc
jmp 0x10fbc
jmp 0x10fbc
movq %rax, 0x8(%rsp)
jmp 0x11109
movq %rdx, %r14
movq %rax, 0x8(%rsp)
leaq 0x250(%rsp), %rdi
callq 0x1a5a8
jmp 0x10fe5
movq %rdx, %r14
movq %rax, 0x8(%rsp)
leaq 0x60(%rsp), %rdi
callq 0xcb3e
jmp 0x11017
movq %rdx, %r14
movq %rax, 0x8(%rsp)
jmp 0x1100d
movq %rdx, %r14
movq %rax, 0x8(%rsp)
jmp 0x11017
movq %rdx, %r14
movq %rax, 0x8(%rsp)
leaq 0x60(%rsp), %rdi
callq 0x5240
cmpl $0x1, %r14d
jne 0x11141
movq 0x8(%rsp), %rdi
callq 0x5150
movq 0x20fbe(%rip), %r14     # 0x31ff0
leaq 0x1501d(%rip), %rsi     # 0x26056
movq %r14, %rdi
callq 0x5350
movq %rax, %rdi
movq 0x28(%rsp), %rsi
callq 0x51e0
leaq 0x15032(%rip), %rsi     # 0x26087
movq %rax, %rdi
callq 0x5350
movq %rax, %rdi
callq 0x5180
cmpb $0x0, 0x180(%rbx)
je 0x110a6
leaq 0x1501d(%rip), %rsi     # 0x26092
movq %r14, %rdi
callq 0x5350
movq %rax, %rdi
callq 0x5180
pushq $0x4
popq %rdi
callq 0x5190
movl $0x1, (%rax)
movq 0x20ec6(%rip), %rsi     # 0x31f60
movq %rax, %rdi
xorl %edx, %edx
callq 0x5630
jmp 0x110d8
cmpb $0x1, 0xd(%rbx)
jne 0x110d8
pushq $0x8
popq %rdi
callq 0x5190
movq 0x20edd(%rip), %rcx     # 0x31f98
addq $0x10, %rcx
movq %rcx, (%rax)
movq 0x20edf(%rip), %rsi     # 0x31fa8
movq 0x20eb8(%rip), %rdx     # 0x31f88
movq %rax, %rdi
callq 0x5630
movq 0x20f11(%rip), %rdi     # 0x31ff0
leaq 0x14fec(%rip), %rsi     # 0x260d2
callq 0x5350
movq %rax, %rdi
callq 0x5180
movq %rax, %r14
leaq 0x15022(%rip), %rsi     # 0x2611f
jmp 0x11075
jmp 0x1113c
movq %rax, 0x8(%rsp)
leaq 0x60(%rsp), %rdi
callq 0x5240
jmp 0x11141
movq %rax, 0x8(%rsp)
leaq 0x60(%rsp), %rdi
callq 0x5240
jmp 0x1114b
movq %rax, 0x8(%rsp)
callq 0x55c0
jmp 0x11141
movq %rax, %rdi
callq 0xb51f
jmp 0x1113c
movq %rax, 0x8(%rsp)
leaq 0x38(%rsp), %rdi
callq 0xb646
movq 0x8(%rsp), %rdi
callq 0x5680
nop