// File: BenLangmead[P]bowtie/ebwt_search.cpp
// Function: parseOptions(int, char const**)
static void parseOptions(int argc, const char **argv) {
	int option_index = 0;
	int next_option;
	if(startVerbose) { cerr << "Parsing options: "; logTime(cerr, true); }
	do {
		next_option = getopt_long(
			argc, const_cast<char**>(argv),
			short_options, long_options, &option_index);
		switch (next_option) {
			case ARG_WRAPPER: wrapper = optarg; break;
			case '1': tokenize(optarg, ",", mates1); break;
			case '2': tokenize(optarg, ",", mates2); break;
			case ARG_ONETWO: tokenize(optarg, ",", mates12); format = TAB_MATE; break;
			case ARG_INTERLEAVED_FASTQ: tokenize(optarg, ",", mates12); format = INTERLEAVED; break;
			case 'f': format = FASTA; break;
			case 'F': {
				format = FASTA_CONT;
				pair<size_t, size_t> p = parsePair<size_t>(optarg, ',');
				fastaContLen = p.first;
				fastaContFreq = p.second;
				break;
			}
			case 'q': format = FASTQ; break;
			case 'r': format = RAW; break;
			case 'c': format = CMDLINE; break;
			case 'I':
				minInsert = (uint32_t)parseInt(0, "-I arg must be positive");
				break;
			case 'X':
				maxInsert = (uint32_t)parseInt(1, "-X arg must be at least 1");
				break;
			case 'x':
				ebwtFile = optarg;
				break;
			case 's':
				skipReads = (uint32_t)parseInt(0, "-s arg must be positive");
				break;
			case ARG_FF: mate1fw = true;  mate2fw = true;  mateFwSet = true; break;
			case ARG_RF: mate1fw = false; mate2fw = true;  mateFwSet = true; break;
			case ARG_FR: mate1fw = true;  mate2fw = false; mateFwSet = true; break;
			case ARG_RANGE: rangeMode = true; break;
			case 'S': outType = OUTPUT_SAM; break;
			case ARG_SHMEM: useShmem = true; break;
			case ARG_SHOWSEED: showSeed = true; break;
			case ARG_ALLOW_CONTAIN: gAllowMateContainment = true; break;
			case ARG_SUPPRESS_FIELDS: {
				EList<string> supp;
				tokenize(optarg, ",", supp);
				for(size_t i = 0; i < supp.size(); i++) {
					int ii = parseInt(1, "--suppress arg must be at least 1", supp[i].c_str());
					suppressOuts.set(ii-1);
				}
				break;
			}
			case ARG_MM: {
#ifdef BOWTIE_MM
				useMm = true;
				break;
#else
				cerr << "Memory-mapped I/O mode is disabled because bowtie was not compiled with" << endl
				     << "BOWTIE_MM defined.  Memory-mapped I/O is not supported under Windows.  If you" << endl
				     << "would like to use memory-mapped I/O on a platform that supports it, please" << endl
				     << "refrain from specifying BOWTIE_MM=0 when compiling Bowtie." << endl;
				throw 1;
#endif
			}
			case ARG_MMSWEEP: mmSweep = true; break;
			case ARG_HADOOPOUT: hadoopOut = true; break;
			case ARG_AL: dumpAlBase = optarg; break;
			case ARG_UN: dumpUnalBase = optarg; break;
			case ARG_MAXDUMP: dumpMaxBase = optarg; break;
			case ARG_SOLEXA_QUALS: solexaQuals = true; break;
			case ARG_integerQuals: integerQuals = true; break;
			case ARG_PHRED64: phred64Quals = true; break;
			case ARG_PHRED33: solexaQuals = false; phred64Quals = false; break;
			case ARG_NOMAQROUND: noMaqRound = true; break;
			case ARG_REFIDX: noRefNames = true; break;
			case ARG_STATEFUL: stateful = true; break;
			case ARG_REPORTSE: reportSe = true; break;
			case ARG_FULLREF: fullRef = true; break;
			case ARG_PREFETCH_WIDTH:
				prefetchWidth = parseInt(1, "--prewidth must be at least 1");
				break;
			case 'B':
				offBase = parseInt(-999999, "-B/--offbase cannot be a large negative number");
				break;
			case ARG_SEED:
				seed = parseInt(0, "--seed arg must be at least 0");
				break;
			case 'u':
				qUpto = (uint32_t)parseInt(1, "-u/--qupto arg must be at least 1");
				break;
			case 'k':
				khits = (uint32_t)parseInt(1, "-k arg must be at least 1");
				break;
			case 'Q':
				tokenize(optarg, ",", qualities);
				integerQuals = true;
				break;
			case ARG_QUALS1:
				tokenize(optarg, ",", qualities1);
				integerQuals = true;
				break;
			case ARG_QUALS2:
				tokenize(optarg, ",", qualities2);
				integerQuals = true;
				break;
			case 'M':
				sampleMax = true;
			case 'm':
				mhits = (uint32_t)parseInt(1, "-m arg must be at least 1");
				break;
			case 'z':
				mixedThresh = (uint32_t)parseInt(0, "-x arg must be at least 0");
				break;
			case ARG_MIXED_ATTEMPTS:
				mixedAttemptLim = (uint32_t)parseInt(1, "--pairtries arg must be at least 1");
				break;
			case ARG_CACHE_LIM:
				cacheLimit = (uint32_t)parseInt(1, "--cachelim arg must be at least 1");
				break;
			case ARG_CACHE_SZ:
				cacheSize = (uint32_t)parseInt(1, "--cachesz arg must be at least 1");
				cacheSize *= (1024 * 1024); // convert from MB to B
				break;
			case ARG_NO_RECONCILE:
				dontReconcileMates = true;
				break;
			case 'p':
				nthreads = parseInt(1, "-p/--threads arg must be at least 1");
				break;
			case ARG_THREAD_CEILING:
				thread_ceiling = parseInt(0, "--thread-ceiling must be at least 0");
				break;
			case ARG_THREAD_PIDDIR:
				thread_stealing_dir = optarg;
				break;
			case ARG_REORDER_SAM:
				reorder = true;
				break;
			case ARG_FILEPAR:
				fileParallel = true;
				break;
			case 'v':
				maqLike = 0;
				mismatches = parseInt(0, 3, "-v arg must be at least 0 and at most 3");
				break;
			case '3': trim3 = parseInt(0, "-3/--trim3 arg must be at least 0"); break;
			case '5': trim5 = parseInt(0, "-5/--trim5 arg must be at least 0"); break;
			case 'o': offRate = parseInt(1, "-o/--offrate arg must be at least 1"); break;
			case ARG_ISARATE: isaRate = parseInt(0, "--isarate arg must be at least 0"); break;
			case 'e': qualThresh = parseInt(1, "-e/--err arg must be at least 1"); break;
			case 'n': seedMms = parseInt(0, 3, "-n/--seedmms arg must be at least 0 and at most 3"); maqLike = 1; break;
			case 'l': seedLen = parseInt(5, "-l/--seedlen arg must be at least 5"); break;
			case 'h': printUsage(cout); throw 0; break;
			case ARG_USAGE: printUsage(cout); throw 0; break;
			case 'a': allHits = true; break;
			case 'y': tryHard = true; break;
			case ARG_CHUNKMBS: chunkPoolMegabytes = parseInt(1, "--chunkmbs arg must be at least 1"); break;
			case ARG_CHUNKSZ: chunkSz = parseInt(1, "--chunksz arg must be at least 1"); break;
			case ARG_CHUNKVERBOSE: chunkVerbose = true; break;
			case ARG_BETTER: stateful = true; better = true; break;
			case ARG_BEST: stateful = true; useV1 = false; break;
			case ARG_STRATA: strata = true; break;
			case ARG_VERBOSE: verbose = true; break;
			case ARG_STARTVERBOSE: startVerbose = true; break;
			case ARG_QUIET: quiet = true; break;
			case ARG_SANITY: sanityCheck = true; break;
			case 't': timing = true; break;
			case ARG_NO_FW: nofw = true; break;
			case ARG_NO_RC: norc = true; break;
			case ARG_STATS: stats = true; break;
			case ARG_PEV2: useV1 = false; break;
			case ARG_SAM_NO_QNAME_TRUNC: samNoQnameTrunc = true; break;
			case ARG_SAM_NOHEAD: samNoHead = true; break;
			case ARG_SAM_NOSQ: samNoSQ = true; break;
			case ARG_SAM_NO_UNAL: noUnal = true; break;
			case ARG_SAM_RG: {
				if(!rgs.empty()) rgs += '\t';
				rgs += optarg;
				break;
			}
			case ARG_COST: printCost = true; break;
			case ARG_DEFAULT_MAPQ:
				defaultMapq = parseInt(0, "--mapq must be positive");
				break;
			case ARG_MAXBTS: {
				maxBts  = parseInt(0, "--maxbts must be positive");
				maxBtsBetter = maxBts;
				break;
			}
			case ARG_STRAND_FIX: strandFix = true; break;
			case ARG_PARTITION: partitionSz = parse<int>(optarg); break;
			case ARG_READS_PER_BATCH: {
				if(optarg == NULL || parse<int>(optarg) < 1) {
					cerr << "--reads-per-batch arg must be at least 1" << endl;
					printUsage(cerr);
					throw 1;
				}
				// TODO: should output batch size be controlled separately?
				readsPerBatch = outBatchSz = parse<int>(optarg);
				break;
			}
			case ARG_ORIG:
				if(optarg == NULL || strlen(optarg) == 0) {
					cerr << "--orig arg must be followed by a string" << endl;
					printUsage(cerr);
					throw 1;
				}
				origString = optarg;
				break;
			case -1: break; /* Done with options. */
			case 0:
				if (long_options[option_index].flag != 0)
					break;
			default:
				printUsage(cerr);
				throw 1;
		}
	} while(next_option != -1);

	if (nthreads == 1 && !thread_stealing) {
		reorder = false;
	}
	if (reorder == true && outType != OUTPUT_SAM) {
		cerr << "Bowtie will reorder its output only when outputting SAM." << endl
		     << "Please specify the `-S` parameter if you intend on using this option." << endl;
		throw 1;
	}
	//bool paired = mates1.size() > 0 || mates2.size() > 0 || mates12.size() > 0;
	if(rangeMode) {
		// Tell the Ebwt loader to ignore the suffix-array portion of
		// the index.  We don't need it because the user isn't asking
		// for bowtie to report reference positions (just matrix
		// ranges).
		offRate = 32;
	}
	if(!maqLike && mismatches == 3) {
		// Much faster than normal 3-mismatch mode
		stateful = true;
	}
	if(mates1.size() != mates2.size()) {
		cerr << "Error: " << mates1.size() << " mate files/sequences were specified with -1, but " << mates2.size() << endl
		     << "mate files/sequences were specified with -2.  The same number of mate files/" << endl
		     << "sequences must be specified with -1 and -2." << endl;
		throw 1;
	}
	// Check for duplicate mate input files
	if(format != CMDLINE) {
		for(size_t i = 0; i < mates1.size(); i++) {
			for(size_t j = 0; j < mates2.size(); j++) {
				if(mates1[i] == mates2[j] && !quiet) {
					cerr << "Warning: Same mate file \"" << mates1[i] << "\" appears as argument to both -1 and -2" << endl;
				}
			}
		}
	}
	if(tryHard) {
		// Increase backtracking limit to huge number
		maxBts = maxBtsBetter = INT_MAX;
		// Increase number of paired-end scan attempts to huge number
		mixedAttemptLim = UINT_MAX;
	}
	if(!stateful && sampleMax) {
		if(!quiet) {
			cerr << "Warning: -M was specified w/o --best; automatically enabling --best" << endl;
		}
		stateful = true;
	}
	if(strata && !stateful) {
		cerr << "--strata must be combined with --best" << endl;
		throw 1;
	}
	if(strata && !allHits && khits == 1 && mhits == 0xffffffff) {
		cerr << "--strata has no effect unless combined with -m, -a, or -k N where N > 1" << endl;
		throw 1;
	}
	// If both -s and -u are used, we need to adjust qUpto accordingly
	// since it uses patid to know if we've reached the -u limit (and
	// patids are all shifted up by skipReads characters)
	if(qUpto + skipReads > qUpto) {
		qUpto += skipReads;
	}
	if(useShmem && useMm && !quiet) {
		cerr << "Warning: --shmem overrides --mm..." << endl;
		useMm = false;
	}
	if(!mateFwSet) {
		// Set nucleotide space default (--fr)
		mate1fw = true;
		mate2fw = false;
	}
	if(outType != OUTPUT_FULL && suppressOuts.count() > 0 && !quiet) {
		cerr << "Warning: Ignoring --suppress because output type is not default." << endl;
		cerr << "         --suppress is only available for the default output type." << endl;
		suppressOuts.clear();
	}
	thread_stealing = thread_ceiling > nthreads;
#ifdef _WIN32
	thread_stealing = false;
#endif
	if(thread_stealing && thread_stealing_dir.empty()) {
		cerr << "When --thread-ceiling is specified, must also specify --thread-piddir" << endl;
		throw 1;
	}
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x420, %rsp            # imm = 0x420
movl %edi, -0x4(%rbp)
movq %rsi, -0x10(%rbp)
movl $0x0, -0x14(%rbp)
testb $0x1, 0x98358(%rip)     # 0xab388
je 0x13056
movq 0x94fb7(%rip), %rdi     # 0xa7ff0
leaq 0x7751c(%rip), %rsi     # 0x8a55c
callq 0xa5d0
movq 0x94fa4(%rip), %rdi     # 0xa7ff0
movl $0x1, %esi
callq 0x10f50
jmp 0x13058
movl -0x4(%rbp), %edi
movq -0x10(%rbp), %rsi
movq 0x9561a(%rip), %rdx     # 0xa8680
leaq 0x95623(%rip), %rcx     # 0xa8690
leaq -0x14(%rbp), %r8
callq 0xaa80
movl %eax, -0x18(%rbp)
movl -0x18(%rbp), %eax
incl %eax
movl %eax, %ecx
movq %rcx, -0x300(%rbp)
subl $0x146, %eax            # imm = 0x146
ja 0x1434e
movq -0x300(%rbp), %rax
leaq 0x75f98(%rip), %rcx     # 0x89038
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq 0x94ec0(%rip), %rax     # 0xa7f70
movq (%rax), %rsi
leaq 0x98256(%rip), %rdi     # 0xab310
callq 0xa840
jmp 0x1437d
movq 0x94ea5(%rip), %rax     # 0xa7f70
movq (%rax), %rax
movq %rax, -0x310(%rbp)
leaq -0x39(%rbp), %rdi
movq %rdi, -0x308(%rbp)
callq 0xab70
movq -0x310(%rbp), %rsi
movq -0x308(%rbp), %rdx
leaq -0x38(%rbp), %rdi
callq 0x24c10
jmp 0x130fe
leaq -0x71(%rbp), %rdi
movq %rdi, -0x318(%rbp)
callq 0xab70
movq -0x318(%rbp), %rdx
leaq 0x7a61f(%rip), %rsi     # 0x8d73b
leaq -0x70(%rbp), %rdi
callq 0x24c10
jmp 0x13127
callq 0x27450
movq %rax, %rcx
leaq 0x9800a(%rip), %rdx     # 0xab140
leaq -0x38(%rbp), %rdi
leaq -0x70(%rbp), %rsi
callq 0x15dd0
jmp 0x13145
leaq -0x70(%rbp), %rdi
callq 0xacd8
leaq -0x71(%rbp), %rdi
callq 0xa670
leaq -0x38(%rbp), %rdi
callq 0xacd8
leaq -0x39(%rbp), %rdi
callq 0xa670
jmp 0x1437d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
jmp 0x131b1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
jmp 0x1319f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
leaq -0x70(%rbp), %rdi
callq 0xacd8
leaq -0x71(%rbp), %rdi
callq 0xa670
leaq -0x38(%rbp), %rdi
callq 0xacd8
leaq -0x39(%rbp), %rdi
callq 0xa670
jmp 0x14945
movq 0x94daa(%rip), %rax     # 0xa7f70
movq (%rax), %rax
movq %rax, -0x328(%rbp)
leaq -0x99(%rbp), %rdi
movq %rdi, -0x320(%rbp)
callq 0xab70
movq -0x328(%rbp), %rsi
movq -0x320(%rbp), %rdx
leaq -0x98(%rbp), %rdi
callq 0x24c10
jmp 0x131ff
leaq -0xc1(%rbp), %rdi
movq %rdi, -0x330(%rbp)
callq 0xab70
movq -0x330(%rbp), %rdx
leaq 0x7a51b(%rip), %rsi     # 0x8d73b
leaq -0xc0(%rbp), %rdi
callq 0x24c10
jmp 0x1322e
callq 0x27450
movq %rax, %rcx
leaq 0x97f23(%rip), %rdx     # 0xab160
leaq -0x98(%rbp), %rdi
leaq -0xc0(%rbp), %rsi
callq 0x15dd0
jmp 0x13252
leaq -0xc0(%rbp), %rdi
callq 0xacd8
leaq -0xc1(%rbp), %rdi
callq 0xa670
leaq -0x98(%rbp), %rdi
callq 0xacd8
leaq -0x99(%rbp), %rdi
callq 0xa670
jmp 0x1437d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
jmp 0x132d3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
jmp 0x132bb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
leaq -0xc0(%rbp), %rdi
callq 0xacd8
leaq -0xc1(%rbp), %rdi
callq 0xa670
leaq -0x98(%rbp), %rdi
callq 0xacd8
leaq -0x99(%rbp), %rdi
callq 0xa670
jmp 0x14945
movq 0x94c85(%rip), %rax     # 0xa7f70
movq (%rax), %rax
movq %rax, -0x340(%rbp)
leaq -0xe9(%rbp), %rdi
movq %rdi, -0x338(%rbp)
callq 0xab70
movq -0x340(%rbp), %rsi
movq -0x338(%rbp), %rdx
leaq -0xe8(%rbp), %rdi
callq 0x24c10
jmp 0x13324
leaq -0x111(%rbp), %rdi
movq %rdi, -0x348(%rbp)
callq 0xab70
movq -0x348(%rbp), %rdx
leaq 0x7a3f6(%rip), %rsi     # 0x8d73b
leaq -0x110(%rbp), %rdi
callq 0x24c10
jmp 0x13353
callq 0x27450
movq %rax, %rcx
leaq 0x97e1e(%rip), %rdx     # 0xab180
leaq -0xe8(%rbp), %rdi
leaq -0x110(%rbp), %rsi
callq 0x15dd0
jmp 0x13377
leaq -0x110(%rbp), %rdi
callq 0xacd8
leaq -0x111(%rbp), %rdi
callq 0xa670
leaq -0xe8(%rbp), %rdi
callq 0xacd8
leaq -0xe9(%rbp), %rdi
callq 0xa670
movl $0x5, 0x97ff3(%rip)     # 0xab3a4
jmp 0x1437d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
jmp 0x13402
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
jmp 0x133ea
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
leaq -0x110(%rbp), %rdi
callq 0xacd8
leaq -0x111(%rbp), %rdi
callq 0xa670
leaq -0xe8(%rbp), %rdi
callq 0xacd8
leaq -0xe9(%rbp), %rdi
callq 0xa670
jmp 0x14945
movq 0x94b56(%rip), %rax     # 0xa7f70
movq (%rax), %rax
movq %rax, -0x358(%rbp)
leaq -0x139(%rbp), %rdi
movq %rdi, -0x350(%rbp)
callq 0xab70
movq -0x358(%rbp), %rsi
movq -0x350(%rbp), %rdx
leaq -0x138(%rbp), %rdi
callq 0x24c10
jmp 0x13453
leaq -0x161(%rbp), %rdi
movq %rdi, -0x360(%rbp)
callq 0xab70
movq -0x360(%rbp), %rdx
leaq 0x7a2c7(%rip), %rsi     # 0x8d73b
leaq -0x160(%rbp), %rdi
callq 0x24c10
jmp 0x13482
callq 0x27450
movq %rax, %rcx
leaq 0x97cef(%rip), %rdx     # 0xab180
leaq -0x138(%rbp), %rdi
leaq -0x160(%rbp), %rsi
callq 0x15dd0
jmp 0x134a6
leaq -0x160(%rbp), %rdi
callq 0xacd8
leaq -0x161(%rbp), %rdi
callq 0xa670
leaq -0x138(%rbp), %rdi
callq 0xacd8
leaq -0x139(%rbp), %rdi
callq 0xa670
movl $0x4, 0x97ec4(%rip)     # 0xab3a4
jmp 0x1437d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
jmp 0x13531
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
jmp 0x13519
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
leaq -0x160(%rbp), %rdi
callq 0xacd8
leaq -0x161(%rbp), %rdi
callq 0xa670
leaq -0x138(%rbp), %rdi
callq 0xacd8
leaq -0x139(%rbp), %rdi
callq 0xa670
jmp 0x14945
movl $0x1, 0x97e58(%rip)     # 0xab3a4
jmp 0x1437d
movl $0x2, 0x97e49(%rip)     # 0xab3a4
movq 0x94a0e(%rip), %rax     # 0xa7f70
movq (%rax), %rdi
movl $0x2c, %esi
callq 0x27e40
movq %rax, -0x178(%rbp)
movq %rdx, -0x170(%rbp)
movq -0x178(%rbp), %rax
movq %rax, 0x97ee5(%rip)     # 0xab470
movq -0x170(%rbp), %rax
movq %rax, 0x97edf(%rip)     # 0xab478
jmp 0x1437d
movl $0x3, 0x97dfc(%rip)     # 0xab3a4
jmp 0x1437d
movl $0x6, 0x97ded(%rip)     # 0xab3a4
jmp 0x1437d
movl $0x7, 0x97dde(%rip)     # 0xab3a4
jmp 0x1437d
xorl %edi, %edi
leaq 0x76f9a(%rip), %rsi     # 0x8a56e
callq 0x18140
movl %eax, 0x97e55(%rip)     # 0xab434
jmp 0x1437d
movl $0x1, %edi
leaq 0x76f96(%rip), %rsi     # 0x8a586
callq 0x18140
movl %eax, 0x97e3d(%rip)     # 0xab438
jmp 0x1437d
movq 0x94969(%rip), %rax     # 0xa7f70
movq (%rax), %rsi
leaq 0x97d27(%rip), %rdi     # 0xab338
callq 0xa840
jmp 0x1437d
xorl %edi, %edi
leaq 0x76f7c(%rip), %rsi     # 0x8a5a0
callq 0x18140
movl %eax, 0x97e2d(%rip)     # 0xab45c
jmp 0x1437d
movb $0x1, 0x97e01(%rip)     # 0xab43c
movb $0x1, 0x97dfb(%rip)     # 0xab43d
movb $0x1, 0x97df5(%rip)     # 0xab43e
jmp 0x1437d
movb $0x0, 0x97de7(%rip)     # 0xab43c
movb $0x1, 0x97de1(%rip)     # 0xab43d
movb $0x1, 0x97ddb(%rip)     # 0xab43e
jmp 0x1437d
movb $0x1, 0x97dcd(%rip)     # 0xab43c
movb $0x0, 0x97dc7(%rip)     # 0xab43d
movb $0x1, 0x97dc1(%rip)     # 0xab43e
jmp 0x1437d
movb $0x1, 0x97d2c(%rip)     # 0xab3b5
jmp 0x1437d
movl $0x4, 0x97d68(%rip)     # 0xab400
jmp 0x1437d
movb $0x1, 0x97d86(%rip)     # 0xab42a
jmp 0x1437d
movb $0x1, 0x97bf8(%rip)     # 0xab2a8
jmp 0x1437d
movb $0x1, 0x97c74(%rip)     # 0xab330
jmp 0x1437d
leaq -0x198(%rbp), %rdi
callq 0x27220
movq 0x9489c(%rip), %rax     # 0xa7f70
movq (%rax), %rax
movq %rax, -0x370(%rbp)
leaq -0x1b9(%rbp), %rdi
movq %rdi, -0x368(%rbp)
callq 0xab70
movq -0x370(%rbp), %rsi
movq -0x368(%rbp), %rdx
leaq -0x1b8(%rbp), %rdi
callq 0x24c10
jmp 0x1370d
leaq -0x1e1(%rbp), %rdi
movq %rdi, -0x378(%rbp)
callq 0xab70
movq -0x378(%rbp), %rdx
leaq 0x7a00d(%rip), %rsi     # 0x8d73b
leaq -0x1e0(%rbp), %rdi
callq 0x24c10
jmp 0x1373c
callq 0x27450
movq %rax, %rcx
leaq -0x1b8(%rbp), %rdi
leaq -0x1e0(%rbp), %rsi
leaq -0x198(%rbp), %rdx
callq 0x15dd0
jmp 0x13760
leaq -0x1e0(%rbp), %rdi
callq 0xacd8
leaq -0x1e1(%rbp), %rdi
callq 0xa670
leaq -0x1b8(%rbp), %rdi
callq 0xacd8
leaq -0x1b9(%rbp), %rdi
callq 0xa670
movq $0x0, -0x1f0(%rbp)
movq -0x1f0(%rbp), %rax
movq %rax, -0x388(%rbp)
leaq -0x198(%rbp), %rdi
callq 0x26400
movq %rax, -0x380(%rbp)
jmp 0x137be
movq -0x388(%rbp), %rax
movq -0x380(%rbp), %rcx
cmpq %rcx, %rax
jae 0x138bc
movq -0x1f0(%rbp), %rsi
leaq -0x198(%rbp), %rdi
callq 0x27460
movq %rax, -0x390(%rbp)
jmp 0x137f1
movq -0x390(%rbp), %rdi
callq 0xa210
movq %rax, %rdx
leaq 0x76db1(%rip), %rsi     # 0x8a5b8
movl $0x1, %edi
callq 0x18170
movl %eax, -0x394(%rbp)
jmp 0x13819
movl -0x394(%rbp), %eax
movl %eax, -0x1f4(%rbp)
movl -0x1f4(%rbp), %esi
decl %esi
leaq 0x97a54(%rip), %rdi     # 0xab288
callq 0x27fb0
jmp 0x1383b
jmp 0x1383d
movq -0x1f0(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x1f0(%rbp)
jmp 0x1379b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
jmp 0x138a0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
jmp 0x13888
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
leaq -0x1e0(%rbp), %rdi
callq 0xacd8
leaq -0x1e1(%rbp), %rdi
callq 0xa670
leaq -0x1b8(%rbp), %rdi
callq 0xacd8
leaq -0x1b9(%rbp), %rdi
callq 0xa670
jmp 0x138cd
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
jmp 0x138cd
leaq -0x198(%rbp), %rdi
callq 0x27260
jmp 0x1437d
leaq -0x198(%rbp), %rdi
callq 0x27260
jmp 0x14945
movb $0x1, 0x97b46(%rip)     # 0xab42b
jmp 0x1437d
movb $0x1, 0x97b3b(%rip)     # 0xab42c
jmp 0x1437d
movb $0x1, 0x97b83(%rip)     # 0xab480
jmp 0x1437d
movq 0x94667(%rip), %rax     # 0xa7f70
movq (%rax), %rsi
leaq 0x978f5(%rip), %rdi     # 0xab208
callq 0xa840
jmp 0x1437d
movq 0x9464c(%rip), %rax     # 0xa7f70
movq (%rax), %rsi
leaq 0x978fa(%rip), %rdi     # 0xab228
callq 0xa840
jmp 0x1437d
movq 0x94631(%rip), %rax     # 0xa7f70
movq (%rax), %rsi
leaq 0x978ff(%rip), %rdi     # 0xab248
callq 0xa840
jmp 0x1437d
movb $0x1, 0x97a7a(%rip)     # 0xab3d4
jmp 0x1437d
movb $0x1, 0x97a70(%rip)     # 0xab3d6
jmp 0x1437d
movb $0x1, 0x97a63(%rip)     # 0xab3d5
jmp 0x1437d
movb $0x0, 0x97a56(%rip)     # 0xab3d4
movb $0x0, 0x97a50(%rip)     # 0xab3d5
jmp 0x1437d
movb $0x1, 0x97a97(%rip)     # 0xab428
jmp 0x1437d
movb $0x1, 0x97a67(%rip)     # 0xab404
jmp 0x1437d
movb $0x1, 0x97a84(%rip)     # 0xab42d
jmp 0x1437d
movb $0x1, 0x97ab9(%rip)     # 0xab46e
jmp 0x1437d
movb $0x1, 0x97ac0(%rip)     # 0xab481
jmp 0x1437d
movl $0x1, %edi
leaq 0x76c08(%rip), %rsi     # 0x8a5da
callq 0x18140
movl %eax, 0x97a53(%rip)     # 0xab430
jmp 0x1437d
movl $0xfff0bdc1, %edi       # imm = 0xFFF0BDC1
leaq 0x76c0a(%rip), %rsi     # 0x8a5f8
callq 0x18140
movl %eax, 0x97a5b(%rip)     # 0xab454
jmp 0x1437d
xorl %edi, %edi
leaq 0x76c20(%rip), %rsi     # 0x8a627
callq 0x18140
movl %eax, 0x9799e(%rip)     # 0xab3b0
jmp 0x1437d
movl $0x1, %edi
leaq 0x76c22(%rip), %rsi     # 0x8a645
callq 0x18140
movl %eax, 0x9798a(%rip)     # 0xab3b8
jmp 0x1437d
movl $0x1, %edi
leaq 0x76c28(%rip), %rsi     # 0x8a667
callq 0x18140
movl %eax, 0x979be(%rip)     # 0xab408
jmp 0x1437d
movq 0x9451a(%rip), %rax     # 0xa7f70
movq (%rax), %rax
movq %rax, -0x3a8(%rbp)
leaq -0x219(%rbp), %rdi
movq %rdi, -0x3a0(%rbp)
callq 0xab70
movq -0x3a8(%rbp), %rsi
movq -0x3a0(%rbp), %rdx
leaq -0x218(%rbp), %rdi
callq 0x24c10
jmp 0x13a8f
leaq -0x241(%rbp), %rdi
movq %rdi, -0x3b0(%rbp)
callq 0xab70
movq -0x3b0(%rbp), %rdx
leaq 0x79c8b(%rip), %rsi     # 0x8d73b
leaq -0x240(%rbp), %rdi
callq 0x24c10
jmp 0x13abe
callq 0x27450
movq %rax, %rcx
leaq 0x977e3(%rip), %rdx     # 0xab2b0
leaq -0x218(%rbp), %rdi
leaq -0x240(%rbp), %rsi
callq 0x15dd0
jmp 0x13ae2
leaq -0x240(%rbp), %rdi
callq 0xacd8
leaq -0x241(%rbp), %rdi
callq 0xa670
leaq -0x218(%rbp), %rdi
callq 0xacd8
leaq -0x219(%rbp), %rdi
callq 0xa670
movb $0x1, 0x978bd(%rip)     # 0xab3d6
jmp 0x1437d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
jmp 0x13b6a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
jmp 0x13b52
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
leaq -0x240(%rbp), %rdi
callq 0xacd8
leaq -0x241(%rbp), %rdi
callq 0xa670
leaq -0x218(%rbp), %rdi
callq 0xacd8
leaq -0x219(%rbp), %rdi
callq 0xa670
jmp 0x14945
movq 0x943ee(%rip), %rax     # 0xa7f70
movq (%rax), %rax
movq %rax, -0x3c0(%rbp)
leaq -0x269(%rbp), %rdi
movq %rdi, -0x3b8(%rbp)
callq 0xab70
movq -0x3c0(%rbp), %rsi
movq -0x3b8(%rbp), %rdx
leaq -0x268(%rbp), %rdi
callq 0x24c10
jmp 0x13bbb
leaq -0x291(%rbp), %rdi
movq %rdi, -0x3c8(%rbp)
callq 0xab70
movq -0x3c8(%rbp), %rdx
leaq 0x79b5f(%rip), %rsi     # 0x8d73b
leaq -0x290(%rbp), %rdi
callq 0x24c10
jmp 0x13bea
callq 0x27450
movq %rax, %rcx
leaq 0x976d7(%rip), %rdx     # 0xab2d0
leaq -0x268(%rbp), %rdi
leaq -0x290(%rbp), %rsi
callq 0x15dd0
jmp 0x13c0e
leaq -0x290(%rbp), %rdi
callq 0xacd8
leaq -0x291(%rbp), %rdi
callq 0xa670
leaq -0x268(%rbp), %rdi
callq 0xacd8
leaq -0x269(%rbp), %rdi
callq 0xa670
movb $0x1, 0x97791(%rip)     # 0xab3d6
jmp 0x1437d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
jmp 0x13c96
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
jmp 0x13c7e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
leaq -0x290(%rbp), %rdi
callq 0xacd8
leaq -0x291(%rbp), %rdi
callq 0xa670
leaq -0x268(%rbp), %rdi
callq 0xacd8
leaq -0x269(%rbp), %rdi
callq 0xa670
jmp 0x14945
movq 0x942c2(%rip), %rax     # 0xa7f70
movq (%rax), %rax
movq %rax, -0x3d8(%rbp)
leaq -0x2b9(%rbp), %rdi
movq %rdi, -0x3d0(%rbp)
callq 0xab70
movq -0x3d8(%rbp), %rsi
movq -0x3d0(%rbp), %rdx
leaq -0x2b8(%rbp), %rdi
callq 0x24c10
jmp 0x13ce7
leaq -0x2e1(%rbp), %rdi
movq %rdi, -0x3e0(%rbp)
callq 0xab70
movq -0x3e0(%rbp), %rdx
leaq 0x79a33(%rip), %rsi     # 0x8d73b
leaq -0x2e0(%rbp), %rdi
callq 0x24c10
jmp 0x13d16
callq 0x27450
movq %rax, %rcx
leaq 0x975cb(%rip), %rdx     # 0xab2f0
leaq -0x2b8(%rbp), %rdi
leaq -0x2e0(%rbp), %rsi
callq 0x15dd0
jmp 0x13d3a
leaq -0x2e0(%rbp), %rdi
callq 0xacd8
leaq -0x2e1(%rbp), %rdi
callq 0xa670
leaq -0x2b8(%rbp), %rdi
callq 0xacd8
leaq -0x2b9(%rbp), %rdi
callq 0xa670
movb $0x1, 0x97665(%rip)     # 0xab3d6
jmp 0x1437d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
jmp 0x13dc2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
jmp 0x13daa
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
leaq -0x2e0(%rbp), %rdi
callq 0xacd8
leaq -0x2e1(%rbp), %rdi
callq 0xa670
leaq -0x2b8(%rbp), %rdi
callq 0xacd8
leaq -0x2b9(%rbp), %rdi
callq 0xa670
jmp 0x14945
movb $0x1, 0x976ab(%rip)     # 0xab485
movl $0x1, %edi
leaq 0x7689b(%rip), %rsi     # 0x8a681
callq 0x18140
movl %eax, 0x9761b(%rip)     # 0xab40c
jmp 0x1437d
xorl %edi, %edi
leaq 0x7689c(%rip), %rsi     # 0x8a69b
callq 0x18140
movl %eax, 0x97636(%rip)     # 0xab440
jmp 0x1437d
movl $0x1, %edi
leaq 0x7689a(%rip), %rsi     # 0x8a6b5
callq 0x18140
movl %eax, 0x9761e(%rip)     # 0xab444
jmp 0x1437d
movl $0x1, %edi
leaq 0x768a1(%rip), %rsi     # 0x8a6d8
callq 0x18140
movl %eax, 0x9760a(%rip)     # 0xab44c
jmp 0x1437d
movl $0x1, %edi
leaq 0x768a7(%rip), %rsi     # 0x8a6fa
callq 0x18140
movl %eax, 0x975f2(%rip)     # 0xab450
movl 0x975ec(%rip), %eax     # 0xab450
shll $0x14, %eax
movl %eax, 0x975e3(%rip)     # 0xab450
jmp 0x1437d
movb $0x1, 0x975cf(%rip)     # 0xab448
jmp 0x1437d
movl $0x1, %edi
leaq 0x76891(%rip), %rsi     # 0x8a71b
callq 0x18140
movl %eax, 0x9755b(%rip)     # 0xab3f0
jmp 0x1437d
xorl %edi, %edi
leaq 0x7689c(%rip), %rsi     # 0x8a73f
callq 0x18140
movl %eax, 0x9754a(%rip)     # 0xab3f8
jmp 0x1437d
movq 0x940b6(%rip), %rax     # 0xa7f70
movq (%rax), %rsi
leaq 0x97324(%rip), %rdi     # 0xab1e8
callq 0xa840
jmp 0x1437d
movb $0x1, 0x9751f(%rip)     # 0xab3f4
jmp 0x1437d
movb $0x1, 0x97548(%rip)     # 0xab429
jmp 0x1437d
movl $0x0, 0x974e8(%rip)     # 0xab3d8
xorl %edi, %edi
movl $0x3, %esi
leaq 0x76865(%rip), %rdx     # 0x8a763
callq 0x181a0
movl %eax, 0x974c7(%rip)     # 0xab3d0
jmp 0x1437d
xorl %edi, %edi
leaq 0x76874(%rip), %rsi     # 0x8a78b
callq 0x18140
movl %eax, 0x9749e(%rip)     # 0xab3c0
jmp 0x1437d
xorl %edi, %edi
leaq 0x7687d(%rip), %rsi     # 0x8a7ad
callq 0x18140
movl %eax, 0x97481(%rip)     # 0xab3bc
jmp 0x1437d
movl $0x1, %edi
leaq 0x76883(%rip), %rsi     # 0x8a7cf
callq 0x18140
movl %eax, 0x97471(%rip)     # 0xab3c8
jmp 0x1437d
xorl %edi, %edi
leaq 0x7688e(%rip), %rsi     # 0x8a7f3
callq 0x18140
movl %eax, 0x9745c(%rip)     # 0xab3cc
jmp 0x1437d
movl $0x1, %edi
leaq 0x76893(%rip), %rsi     # 0x8a814
callq 0x18140
movl %eax, 0x97458(%rip)     # 0xab3e4
jmp 0x1437d
xorl %edi, %edi
movl $0x3, %esi
leaq 0x76895(%rip), %rdx     # 0x8a834
callq 0x181a0
movl %eax, 0x97436(%rip)     # 0xab3e0
movl $0x1, 0x97424(%rip)     # 0xab3d8
jmp 0x1437d
movl $0x5, %edi
leaq 0x768a1(%rip), %rsi     # 0x8a866
callq 0x18140
movl %eax, 0x9740c(%rip)     # 0xab3dc
jmp 0x1437d
movq 0x93fdc(%rip), %rdi     # 0xa7fb8
callq 0x14950
movl $0x4, %edi
callq 0xa290
movq %rax, %rdi
movl $0x0, (%rdi)
movq 0x93f55(%rip), %rsi     # 0xa7f50
xorl %eax, %eax
movl %eax, %edx
callq 0xab10
movq 0x93fad(%rip), %rdi     # 0xa7fb8
callq 0x14950
movl $0x4, %edi
callq 0xa290
movq %rax, %rdi
movl $0x0, (%rdi)
movq 0x93f26(%rip), %rsi     # 0xa7f50
xorl %eax, %eax
movl %eax, %edx
callq 0xab10
movb $0x1, 0x9737a(%rip)     # 0xab3b4
jmp 0x1437d
movb $0x1, 0x97412(%rip)     # 0xab458
jmp 0x1437d
movl $0x1, %edi
leaq 0x76833(%rip), %rsi     # 0x8a88a
callq 0x18140
movl %eax, 0x97402(%rip)     # 0xab464
jmp 0x1437d
movl $0x1, %edi
leaq 0x76839(%rip), %rsi     # 0x8a8ac
callq 0x18140
movl %eax, 0x973ea(%rip)     # 0xab468
jmp 0x1437d
movb $0x1, 0x973e2(%rip)     # 0xab46c
jmp 0x1437d
movb $0x1, 0x97397(%rip)     # 0xab42d
movb $0x1, 0x97373(%rip)     # 0xab410
jmp 0x1437d
movb $0x1, 0x97384(%rip)     # 0xab42d
movb $0x0, 0x973bd(%rip)     # 0xab46d
jmp 0x1437d
movb $0x1, 0x97355(%rip)     # 0xab411
jmp 0x1437d
movb $0x1, 0x972d8(%rip)     # 0xab3a0
jmp 0x1437d
movb $0x1, 0x972b4(%rip)     # 0xab388
jmp 0x1437d
movb $0x1, 0x970e0(%rip)     # 0xab1c0
jmp 0x1437d
movl $0x1, 0x972b9(%rip)     # 0xab3a8
jmp 0x1437d
movl $0x1, 0x9729e(%rip)     # 0xab39c
jmp 0x1437d
movb $0x1, 0x97356(%rip)     # 0xab460
jmp 0x1437d
movb $0x1, 0x9734b(%rip)     # 0xab461
jmp 0x1437d
movb $0x1, 0x97341(%rip)     # 0xab463
jmp 0x1437d
movb $0x0, 0x9733f(%rip)     # 0xab46d
jmp 0x1437d
movb $0x1, 0x97348(%rip)     # 0xab482
jmp 0x1437d
movb $0x1, 0x9733d(%rip)     # 0xab483
jmp 0x1437d
movb $0x1, 0x97332(%rip)     # 0xab484
jmp 0x1437d
movb $0x1, 0x971d3(%rip)     # 0xab331
jmp 0x1437d
leaq 0x970fe(%rip), %rdi     # 0xab268
callq 0xaa90
testb $0x1, %al
jne 0x14184
leaq 0x970ee(%rip), %rdi     # 0xab268
movl $0x9, %esi
callq 0xa360
movq 0x93de5(%rip), %rax     # 0xa7f70
movq (%rax), %rsi
leaq 0x970d3(%rip), %rdi     # 0xab268
callq 0xa5b0
jmp 0x1437d
movb $0x1, 0x972e6(%rip)     # 0xab48c
jmp 0x1437d
xorl %edi, %edi
leaq 0x76719(%rip), %rsi     # 0x8a8cd
callq 0x18140
movl %eax, 0x972c9(%rip)     # 0xab488
jmp 0x1437d
xorl %edi, %edi
leaq 0x76718(%rip), %rsi     # 0x8a8e5
callq 0x18140
movl %eax, 0x97214(%rip)     # 0xab3ec
movl 0x9720e(%rip), %eax     # 0xab3ec
movl %eax, 0x97204(%rip)     # 0xab3e8
jmp 0x1437d
movb $0x1, 0x97272(%rip)     # 0xab462
jmp 0x1437d
movq 0x93d74(%rip), %rax     # 0xa7f70
movq (%rax), %rdi
callq 0x28010
movl %eax, 0x9720a(%rip)     # 0xab414
jmp 0x1437d
movq 0x93d5a(%rip), %rax     # 0xa7f70
cmpq $0x0, (%rax)
je 0x14230
movq 0x93d4d(%rip), %rax     # 0xa7f70
movq (%rax), %rdi
callq 0x28010
cmpl $0x1, %eax
jge 0x14281
movq 0x93db9(%rip), %rdi     # 0xa7ff0
leaq 0x766c1(%rip), %rsi     # 0x8a8ff
callq 0xa5d0
movq %rax, %rdi
movq 0x93d1b(%rip), %rsi     # 0xa7f68
callq 0xa640
movq 0x93d97(%rip), %rdi     # 0xa7ff0
callq 0x14950
movl $0x4, %edi
callq 0xa290
movq %rax, %rdi
movl $0x1, (%rdi)
movq 0x93cd8(%rip), %rsi     # 0xa7f50
xorl %eax, %eax
movl %eax, %edx
callq 0xab10
movq 0x93ce8(%rip), %rax     # 0xa7f70
movq (%rax), %rdi
callq 0x28010
cltq
movq %rax, 0x97187(%rip)     # 0xab420
movl %eax, 0x97179(%rip)     # 0xab418
jmp 0x1437d
movq 0x93cc5(%rip), %rax     # 0xa7f70
cmpq $0x0, (%rax)
je 0x142c6
movq 0x93cb8(%rip), %rax     # 0xa7f70
movq (%rax), %rdi
callq 0xa230
cmpq $0x0, %rax
jne 0x14317
movq 0x93d23(%rip), %rdi     # 0xa7ff0
leaq 0x76654(%rip), %rsi     # 0x8a928
callq 0xa5d0
movq %rax, %rdi
movq 0x93c85(%rip), %rsi     # 0xa7f68
callq 0xa640
movq 0x93d01(%rip), %rdi     # 0xa7ff0
callq 0x14950
movl $0x4, %edi
callq 0xa290
movq %rax, %rdi
movl $0x1, (%rdi)
movq 0x93c42(%rip), %rsi     # 0xa7f50
xorl %eax, %eax
movl %eax, %edx
callq 0xab10
movq 0x93c52(%rip), %rax     # 0xa7f70
movq (%rax), %rsi
leaq 0x96ea0(%rip), %rdi     # 0xab1c8
callq 0xa840
jmp 0x1437d
jmp 0x1437d
movslq -0x14(%rbp), %rcx
leaq 0x94354(%rip), %rax     # 0xa8690
shlq $0x5, %rcx
addq %rcx, %rax
cmpq $0x0, 0x10(%rax)
je 0x1434c
jmp 0x1437d
jmp 0x1434e
movq 0x93c9b(%rip), %rdi     # 0xa7ff0
callq 0x14950
movl $0x4, %edi
callq 0xa290
movq %rax, %rdi
movl $0x1, (%rdi)
movq 0x93bdc(%rip), %rsi     # 0xa7f50
xorl %eax, %eax
movl %eax, %edx
callq 0xab10
jmp 0x1437f
cmpl $-0x1, -0x18(%rbp)
jne 0x13058
cmpl $0x1, 0x97060(%rip)     # 0xab3f0
jne 0x143a2
testb $0x1, 0x97063(%rip)     # 0xab3fc
jne 0x143a2
movb $0x0, 0x97052(%rip)     # 0xab3f4
movb 0x9704c(%rip), %al      # 0xab3f4
andb $0x1, %al
movzbl %al, %eax
cmpl $0x1, %eax
jne 0x1441e
cmpl $0x4, 0x97047(%rip)     # 0xab400
je 0x1441e
movq 0x93c2e(%rip), %rdi     # 0xa7ff0
leaq 0x76587(%rip), %rsi     # 0x8a950
callq 0xa5d0
movq %rax, %rdi
movq 0x93b90(%rip), %rsi     # 0xa7f68
callq 0xa640
movq %rax, %rdi
leaq 0x765a2(%rip), %rsi     # 0x8a989
callq 0xa5d0
movq %rax, %rdi
movq 0x93b72(%rip), %rsi     # 0xa7f68
callq 0xa640
movl $0x4, %edi
callq 0xa290
movq %rax, %rdi
movl $0x1, (%rdi)
movq 0x93b3b(%rip), %rsi     # 0xa7f50
xorl %eax, %eax
movl %eax, %edx
callq 0xab10
testb $0x1, 0x96f90(%rip)     # 0xab3b5
je 0x14431
movl $0x20, 0x96f97(%rip)    # 0xab3c8
cmpl $0x0, 0x96fa0(%rip)     # 0xab3d8
jne 0x1444a
cmpl $0x3, 0x96f8f(%rip)     # 0xab3d0
jne 0x1444a
movb $0x1, 0x96fe3(%rip)     # 0xab42d
leaq 0x96cef(%rip), %rdi     # 0xab140
callq 0x26400
movq %rax, -0x3e8(%rbp)
leaq 0x96cfc(%rip), %rdi     # 0xab160
callq 0x26400
movq %rax, %rcx
movq -0x3e8(%rbp), %rax
cmpq %rcx, %rax
je 0x14550
movq 0x93b6d(%rip), %rdi     # 0xa7ff0
leaq 0x76545(%rip), %rsi     # 0x8a9cf
callq 0xa5d0
movq %rax, -0x3f8(%rbp)
leaq 0x96ca3(%rip), %rdi     # 0xab140
callq 0x26400
movq -0x3f8(%rbp), %rdi
movq %rax, %rsi
callq 0xa130
movq %rax, %rdi
leaq 0x7651c(%rip), %rsi     # 0x8a9d7
callq 0xa5d0
movq %rax, -0x3f0(%rbp)
leaq 0x96c92(%rip), %rdi     # 0xab160
callq 0x26400
movq -0x3f0(%rbp), %rdi
movq %rax, %rsi
callq 0xa130
movq %rax, %rdi
movq 0x93a7c(%rip), %rsi     # 0xa7f68
callq 0xa640
movq %rax, %rdi
leaq 0x7650f(%rip), %rsi     # 0x8aa0a
callq 0xa5d0
movq %rax, %rdi
movq 0x93a5e(%rip), %rsi     # 0xa7f68
callq 0xa640
movq %rax, %rdi
leaq 0x7653e(%rip), %rsi     # 0x8aa57
callq 0xa5d0
movq %rax, %rdi
movq 0x93a40(%rip), %rsi     # 0xa7f68
callq 0xa640
movl $0x4, %edi
callq 0xa290
movq %rax, %rdi
movl $0x1, (%rdi)
movq 0x93a09(%rip), %rsi     # 0xa7f50
xorl %eax, %eax
movl %eax, %edx
callq 0xab10
cmpl $0x7, 0x96e4d(%rip)     # 0xab3a4
je 0x146a6
movq $0x0, -0x2f0(%rbp)
movq -0x2f0(%rbp), %rax
movq %rax, -0x400(%rbp)
leaq 0x96bc3(%rip), %rdi     # 0xab140
callq 0x26400
movq %rax, %rcx
movq -0x400(%rbp), %rax
cmpq %rcx, %rax
jae 0x146a4
movq $0x0, -0x2f8(%rbp)
movq -0x2f8(%rbp), %rax
movq %rax, -0x408(%rbp)
leaq 0x96bab(%rip), %rdi     # 0xab160
callq 0x26400
movq %rax, %rcx
movq -0x408(%rbp), %rax
cmpq %rcx, %rax
jae 0x1468b
movq -0x2f0(%rbp), %rsi
leaq 0x96b65(%rip), %rdi     # 0xab140
callq 0x27460
movq %rax, -0x410(%rbp)
movq -0x2f8(%rbp), %rsi
leaq 0x96b6b(%rip), %rdi     # 0xab160
callq 0x27460
movq -0x410(%rbp), %rdi
movq %rax, %rsi
callq 0x28140
testb $0x1, %al
jne 0x1460f
jmp 0x14672
testb $0x1, 0x96baa(%rip)     # 0xab1c0
jne 0x14672
movq 0x939d1(%rip), %rdi     # 0xa7ff0
leaq 0x7645d(%rip), %rsi     # 0x8aa83
callq 0xa5d0
movq %rax, -0x418(%rbp)
movq -0x2f0(%rbp), %rsi
leaq 0x96b00(%rip), %rdi     # 0xab140
callq 0x27460
movq -0x418(%rbp), %rdi
movq %rax, %rsi
callq 0xa540
movq %rax, %rdi
leaq 0x7643f(%rip), %rsi     # 0x8aa9d
callq 0xa5d0
movq %rax, %rdi
movq 0x938fb(%rip), %rsi     # 0xa7f68
callq 0xa640
jmp 0x14674
movq -0x2f8(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x2f8(%rbp)
jmp 0x145a0
jmp 0x1468d
movq -0x2f0(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x2f0(%rbp)
jmp 0x14568
jmp 0x146a6
testb $0x1, 0x96dab(%rip)     # 0xab458
je 0x146cd
movl $0x7fffffff, 0x96d2f(%rip) # imm = 0x7FFFFFFF
movl $0x7fffffff, 0x96d29(%rip) # imm = 0x7FFFFFFF
movl $0xffffffff, 0x96d77(%rip) # imm = 0xFFFFFFFF
testb $0x1, 0x96d59(%rip)     # 0xab42d
jne 0x14711
testb $0x1, 0x96da8(%rip)     # 0xab485
je 0x14711
testb $0x1, 0x96ada(%rip)     # 0xab1c0
jne 0x1470a
movq 0x93901(%rip), %rdi     # 0xa7ff0
leaq 0x763cf(%rip), %rsi     # 0x8aac5
callq 0xa5d0
movq %rax, %rdi
movq 0x93863(%rip), %rsi     # 0xa7f68
callq 0xa640
movb $0x1, 0x96d1c(%rip)     # 0xab42d
testb $0x1, 0x96cf9(%rip)     # 0xab411
je 0x14768
testb $0x1, 0x96d0c(%rip)     # 0xab42d
jne 0x14768
movq 0x938c6(%rip), %rdi     # 0xa7ff0
leaq 0x763d8(%rip), %rsi     # 0x8ab09
callq 0xa5d0
movq %rax, %rdi
movq 0x93828(%rip), %rsi     # 0xa7f68
callq 0xa640
movl $0x4, %edi
callq 0xa290
movq %rax, %rdi
movl $0x1, (%rdi)
movq 0x937f1(%rip), %rsi     # 0xa7f50
xorl %eax, %eax
movl %eax, %edx
callq 0xab10
testb $0x1, 0x96ca2(%rip)     # 0xab411
je 0x147d1
testb $0x1, 0x96c3c(%rip)     # 0xab3b4
jne 0x147d1
cmpl $0x1, 0x96c87(%rip)     # 0xab408
jne 0x147d1
cmpl $-0x1, 0x96c82(%rip)    # 0xab40c
jne 0x147d1
movq 0x9385d(%rip), %rdi     # 0xa7ff0
leaq 0x76395(%rip), %rsi     # 0x8ab2f
callq 0xa5d0
movq %rax, %rdi
movq 0x937bf(%rip), %rsi     # 0xa7f68
callq 0xa640
movl $0x4, %edi
callq 0xa290
movq %rax, %rdi
movl $0x1, (%rdi)
movq 0x93788(%rip), %rsi     # 0xa7f50
xorl %eax, %eax
movl %eax, %edx
callq 0xab10
movl 0x96be1(%rip), %eax     # 0xab3b8
addl 0x96c7f(%rip), %eax     # 0xab45c
cmpl 0x96bd5(%rip), %eax     # 0xab3b8
jbe 0x147f7
movl 0x96c71(%rip), %eax     # 0xab45c
addl 0x96bc7(%rip), %eax     # 0xab3b8
movl %eax, 0x96bc1(%rip)     # 0xab3b8
testb $0x1, 0x96c2c(%rip)     # 0xab42a
je 0x1483b
testb $0x1, 0x96c24(%rip)     # 0xab42b
je 0x1483b
testb $0x1, 0x969b0(%rip)     # 0xab1c0
jne 0x1483b
movq 0x937d7(%rip), %rdi     # 0xa7ff0
leaq 0x76357(%rip), %rsi     # 0x8ab77
callq 0xa5d0
movq %rax, %rdi
movq 0x93739(%rip), %rsi     # 0xa7f68
callq 0xa640
movb $0x0, 0x96bf0(%rip)     # 0xab42b
testb $0x1, 0x96bfc(%rip)     # 0xab43e
jne 0x14852
movb $0x1, 0x96bf1(%rip)     # 0xab43c
movb $0x0, 0x96beb(%rip)     # 0xab43d
cmpl $0x1, 0x96ba7(%rip)     # 0xab400
je 0x148c5
leaq 0x96a26(%rip), %rdi     # 0xab288
callq 0x281d0
cmpl $0x0, %eax
jbe 0x148c5
testb $0x1, 0x9694d(%rip)     # 0xab1c0
jne 0x148c5
movq 0x93774(%rip), %rdi     # 0xa7ff0
leaq 0x76317(%rip), %rsi     # 0x8ab9a
callq 0xa5d0
movq %rax, %rdi
movq 0x936d6(%rip), %rsi     # 0xa7f68
callq 0xa640
movq 0x93752(%rip), %rdi     # 0xa7ff0
leaq 0x76336(%rip), %rsi     # 0x8abdb
callq 0xa5d0
movq %rax, %rdi
movq 0x936b4(%rip), %rsi     # 0xa7f68
callq 0xa640
leaq 0x969c8(%rip), %rdi     # 0xab288
callq 0x27de0
movl 0x96b2d(%rip), %eax     # 0xab3f8
cmpl 0x96b1f(%rip), %eax     # 0xab3f0
setg %al
andb $0x1, %al
movb %al, 0x96b20(%rip)      # 0xab3fc
testb $0x1, 0x96b19(%rip)     # 0xab3fc
je 0x1493c
leaq 0x968fc(%rip), %rdi     # 0xab1e8
callq 0xaa90
testb $0x1, %al
jne 0x148f7
jmp 0x1493c
movq 0x936f2(%rip), %rdi     # 0xa7ff0
leaq 0x76319(%rip), %rsi     # 0x8ac1e
callq 0xa5d0
movq %rax, %rdi
movq 0x93654(%rip), %rsi     # 0xa7f68
callq 0xa640
movl $0x4, %edi
callq 0xa290
movq %rax, %rdi
movl $0x1, (%rdi)
movq 0x9361d(%rip), %rsi     # 0xa7f50
xorl %eax, %eax
movl %eax, %edx
callq 0xab10
addq $0x420, %rsp            # imm = 0x420
popq %rbp
retq
movq -0x48(%rbp), %rdi
callq 0xab60
nop