// File: BenLangmead[P]bowtie/ebwt_build.cpp
// Function: bowtie_build
int bowtie_build(int argc, const char **argv) {
	try {
		// Reset all global state, including getopt state
		opterr = optind = 1;
		resetOptions();

		string infile;
		EList<string> infiles;
		string outfile;

		parseOptions(argc, argv);
		argv0 = argv[0];
		if(showVersion) {
			cout << argv0 << " version " << BOWTIE_VERSION << endl;
			if(sizeof(void*) == 4) {
				cout << "32-bit" << endl;
			} else if(sizeof(void*) == 8) {
				cout << "64-bit" << endl;
			} else {
				cout << "Neither 32- nor 64-bit: sizeof(void*) = " << sizeof(void*) << endl;
			}
			cout << "Built on " << BUILD_HOST << endl;
			cout << BUILD_TIME << endl;
			cout << "Compiler: " << COMPILER_VERSION << endl;
			cout << "Options: " << COMPILER_OPTIONS << endl;
			cout << "Sizeof {int, long, long long, void*, size_t, off_t}: {"
				 << sizeof(int)
				 << ", " << sizeof(long) << ", " << sizeof(long long)
				 << ", " << sizeof(void *) << ", " << sizeof(size_t)
				 << ", " << sizeof(off_t) << "}" << endl;
			return 0;
		}

		// Get input filename
		if(optind >= argc) {
			cerr << "No input sequence or sequence file specified!" << endl;
			printUsage(cerr);
			return 1;
		}
		infile = argv[optind++];

		// Get output filename
		if(optind >= argc) {
			cerr << "No output file specified!" << endl;
			printUsage(cerr);
			return 1;
		}
		outfile = argv[optind++];

		tokenize(infile, ",", infiles);
		if(infiles.size() < 1) {
			cerr << "Tokenized input file list was empty!" << endl;
			printUsage(cerr);
			return 1;
		}

		// Optionally summarize
		if(verbose) {
			cout << "Settings:" << endl
				 << "  Output files: \"" << outfile << ".*." + gEbwt_ext + "\"" << endl
				 << "  Line rate: " << lineRate << " (line is " << (1<<lineRate) << " bytes)" << endl
				 << "  Lines per side: " << linesPerSide << " (side is " << ((1<<lineRate)*linesPerSide) << " bytes)" << endl
				 << "  Offset rate: " << offRate << " (one in " << (1<<offRate) << ")" << endl
				 << "  FTable chars: " << ftabChars << endl
				 << "  Strings: " << (packed? "packed" : "unpacked") << endl
				 ;
			if(bmax == OFF_MASK) {
				cout << "  Max bucket size: default" << endl;
			} else {
				cout << "  Max bucket size: " << bmax << endl;
			}
			if(bmaxMultSqrt == OFF_MASK) {
				cout << "  Max bucket size, sqrt multiplier: default" << endl;
			} else {
				cout << "  Max bucket size, sqrt multiplier: " << bmaxMultSqrt << endl;
			}
			if(bmaxDivN == 0xffffffff) {
				cout << "  Max bucket size, len divisor: default" << endl;
			} else {
				cout << "  Max bucket size, len divisor: " << bmaxDivN << endl;
			}
			cout << "  Difference-cover sample period: " << dcv << endl;
			cout << "  Endianness: " << (bigEndian? "big":"little") << endl
				 << "  Actual local endianness: " << (currentlyBigEndian()? "big":"little") << endl
				 << "  Sanity checking: " << (sanityCheck? "enabled":"disabled") << endl;
	#ifdef NDEBUG
			cout << "  Assertions: disabled" << endl;
	#else
			cout << "  Assertions: enabled" << endl;
	#endif
			cout << "  Random seed: " << seed << endl;
			cout << "  Sizeofs: void*:" << sizeof(void*) << ", int:" << sizeof(int) << ", long:" << sizeof(long) << ", size_t:" << sizeof(size_t) << endl;
			cout << "Input files DNA, " << file_format_names[format] << ":" << endl;
			for(size_t i = 0; i < infiles.size(); i++) {
				cout << "  " << infiles[i] << endl;
			}
		}
		// Seed random number generator
		srand(seed);
		{
			Timer timer(cout, "Total time for call to driver() for forward index: ", verbose);
			if(!packed) {
				try {
					driver<BTRefString >(infile, infiles, outfile);
				} catch(bad_alloc& e) {
					if(autoMem) {
						cerr << "Switching to a packed string representation." << endl;
						packed = true;
					} else {
						throw e;
					}
				}
			}
			if(packed) {
				driver<S2bDnaString>(infile, infiles, outfile);
			}
		}
		if(doubleEbwt) {
			srand(seed);
			Timer timer(cout, "Total time for backward call to driver() for mirror index: ", verbose);
			if(!packed) {
				try {
					driver<BTRefString >(infile, infiles, outfile + ".rev", true);
				} catch(bad_alloc& e) {
					if(autoMem) {
						cerr << "Switching to a packed string representation." << endl;
						packed = true;
					} else {
						throw e;
					}
				}
			}
			if(packed) {
				driver<S2bDnaString>(infile, infiles, outfile + ".rev", true);
			}
		}
		return 0;
	} catch(std::exception& e) {
		cerr << "Command: ";
		for(int i = 0; i < argc; i++) cerr << argv[i] << " ";
		cerr << endl;
		return 1;
	} catch(int e) {
		if(e != 0) {
			cerr << "Command: ";
			for(int i = 0; i < argc; i++) cerr << argv[i] << " ";
			cerr << endl;
		}
		return e;
	}
  }

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x4e0, %rsp            # imm = 0x4E0
movl %edi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq 0x4610f(%rip), %rax     # 0x51fb8
movl $0x1, (%rax)
movq 0x46112(%rip), %rax     # 0x51fc8
movl $0x1, (%rax)
callq 0xd420
jmp 0xbec3
leaq -0x40(%rbp), %rdi
callq 0x6630
leaq -0x60(%rbp), %rdi
callq 0x16d00
jmp 0xbed7
leaq -0x80(%rbp), %rdi
callq 0x6630
movl -0x8(%rbp), %edi
movq -0x10(%rbp), %rsi
callq 0xd510
jmp 0xbeee
movq -0x10(%rbp), %rax
movq (%rax), %rax
movq %rax, 0x48f74(%rip)     # 0x54e70
cmpl $0x0, 0x48f75(%rip)     # 0x54e78
je 0xc279
movq 0x48f60(%rip), %rsi     # 0x54e70
movq 0x46091(%rip), %rdi     # 0x51fa8
callq 0x6410
movq %rax, -0x1a8(%rbp)
jmp 0xbf25
movq -0x1a8(%rbp), %rdi
leaq 0x388fd(%rip), %rsi     # 0x44830
callq 0x6410
movq %rax, -0x1b0(%rbp)
jmp 0xbf41
movq -0x1b0(%rbp), %rdi
leaq 0x388eb(%rip), %rsi     # 0x4483a
callq 0x6410
movq %rax, -0x1b8(%rbp)
jmp 0xbf5d
movq -0x1b8(%rbp), %rdi
movq 0x45ffd(%rip), %rsi     # 0x51f68
callq 0x6470
jmp 0xbf72
movq 0x4602f(%rip), %rdi     # 0x51fa8
leaq 0x388c0(%rip), %rsi     # 0x44840
callq 0x6410
movq %rax, -0x1c0(%rbp)
jmp 0xbf8e
movq -0x1c0(%rbp), %rdi
movq 0x45fcc(%rip), %rsi     # 0x51f68
callq 0x6470
jmp 0xbfa3
movq 0x45ffe(%rip), %rdi     # 0x51fa8
leaq 0x38896(%rip), %rsi     # 0x44847
callq 0x6410
movq %rax, -0x1c8(%rbp)
jmp 0xbfbf
movq -0x1c8(%rbp), %rdi
leaq 0x38884(%rip), %rsi     # 0x44851
callq 0x6410
movq %rax, -0x1d0(%rbp)
jmp 0xbfdb
movq -0x1d0(%rbp), %rdi
movq 0x45f7f(%rip), %rsi     # 0x51f68
callq 0x6470
jmp 0xbff0
movq 0x45fb1(%rip), %rdi     # 0x51fa8
leaq 0x38860(%rip), %rsi     # 0x4485e
callq 0x6410
movq %rax, -0x1d8(%rbp)
jmp 0xc00c
movq -0x1d8(%rbp), %rdi
movq 0x45f4e(%rip), %rsi     # 0x51f68
callq 0x6470
jmp 0xc021
movq 0x45f80(%rip), %rdi     # 0x51fa8
leaq 0x38843(%rip), %rsi     # 0x44872
callq 0x6410
movq %rax, -0x1e0(%rbp)
jmp 0xc03d
movq -0x1e0(%rbp), %rdi
leaq 0x38832(%rip), %rsi     # 0x4487d
callq 0x6410
movq %rax, -0x1e8(%rbp)
jmp 0xc059
movq -0x1e8(%rbp), %rdi
movq 0x45f01(%rip), %rsi     # 0x51f68
callq 0x6470
jmp 0xc06e
movq 0x45f33(%rip), %rdi     # 0x51fa8
leaq 0x3885d(%rip), %rsi     # 0x448d9
callq 0x6410
movq %rax, -0x1f0(%rbp)
jmp 0xc08a
movq -0x1f0(%rbp), %rdi
leaq 0x3884b(%rip), %rsi     # 0x448e3
callq 0x6410
movq %rax, -0x1f8(%rbp)
jmp 0xc0a6
movq -0x1f8(%rbp), %rdi
movq 0x45eb4(%rip), %rsi     # 0x51f68
callq 0x6470
jmp 0xc0bb
movq 0x45ee6(%rip), %rdi     # 0x51fa8
leaq 0x38856(%rip), %rsi     # 0x4491f
callq 0x6410
movq %rax, -0x200(%rbp)
jmp 0xc0d7
movq -0x200(%rbp), %rdi
movl $0x4, %esi
callq 0x6100
movq %rax, -0x208(%rbp)
jmp 0xc0f1
movq -0x208(%rbp), %rdi
leaq 0x38b02(%rip), %rsi     # 0x44c01
callq 0x6410
movq %rax, -0x210(%rbp)
jmp 0xc10d
movq -0x210(%rbp), %rdi
movl $0x8, %esi
callq 0x6100
movq %rax, -0x218(%rbp)
jmp 0xc127
movq -0x218(%rbp), %rdi
leaq 0x38acc(%rip), %rsi     # 0x44c01
callq 0x6410
movq %rax, -0x220(%rbp)
jmp 0xc143
movq -0x220(%rbp), %rdi
movl $0x8, %esi
callq 0x6100
movq %rax, -0x228(%rbp)
jmp 0xc15d
movq -0x228(%rbp), %rdi
leaq 0x38a96(%rip), %rsi     # 0x44c01
callq 0x6410
movq %rax, -0x230(%rbp)
jmp 0xc179
movq -0x230(%rbp), %rdi
movl $0x8, %esi
callq 0x6100
movq %rax, -0x238(%rbp)
jmp 0xc193
movq -0x238(%rbp), %rdi
leaq 0x38a60(%rip), %rsi     # 0x44c01
callq 0x6410
movq %rax, -0x240(%rbp)
jmp 0xc1af
movq -0x240(%rbp), %rdi
movl $0x8, %esi
callq 0x6100
movq %rax, -0x248(%rbp)
jmp 0xc1c9
movq -0x248(%rbp), %rdi
leaq 0x38a2a(%rip), %rsi     # 0x44c01
callq 0x6410
movq %rax, -0x250(%rbp)
jmp 0xc1e5
movq -0x250(%rbp), %rdi
movl $0x8, %esi
callq 0x6100
movq %rax, -0x258(%rbp)
jmp 0xc1ff
movq -0x258(%rbp), %rdi
leaq 0x37ec7(%rip), %rsi     # 0x440d4
callq 0x6410
movq %rax, -0x260(%rbp)
jmp 0xc21b
movq -0x260(%rbp), %rdi
movq 0x45d3f(%rip), %rsi     # 0x51f68
callq 0x6470
jmp 0xc230
movl $0x0, -0x4(%rbp)
movl $0x1, -0x84(%rbp)
jmp 0xd1ee
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x18(%rbp)
movl %eax, -0x1c(%rbp)
jmp 0xd229
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x18(%rbp)
movl %eax, -0x1c(%rbp)
jmp 0xd220
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x18(%rbp)
movl %eax, -0x1c(%rbp)
jmp 0xd20e
movq 0x45d38(%rip), %rax     # 0x51fb8
movl (%rax), %eax
cmpl -0x8(%rbp), %eax
jl 0xc2dc
movq 0x45d62(%rip), %rdi     # 0x51ff0
leaq 0x386c1(%rip), %rsi     # 0x44956
callq 0x6410
movq %rax, -0x268(%rbp)
jmp 0xc2a3
movq -0x268(%rbp), %rdi
movq 0x45cb7(%rip), %rsi     # 0x51f68
callq 0x6470
jmp 0xc2b8
movq 0x45d31(%rip), %rdi     # 0x51ff0
callq 0xd9f0
jmp 0xc2c6
movl $0x1, -0x4(%rbp)
movl $0x1, -0x84(%rbp)
jmp 0xd1ee
movq -0x10(%rbp), %rax
movq 0x45cd1(%rip), %rdx     # 0x51fb8
movslq (%rdx), %rcx
movl %ecx, %esi
incl %esi
movl %esi, (%rdx)
movq (%rax,%rcx,8), %rsi
leaq -0x40(%rbp), %rdi
callq 0x6620
jmp 0xc2ff
movq 0x45cb2(%rip), %rax     # 0x51fb8
movl (%rax), %eax
cmpl -0x8(%rbp), %eax
jl 0xc362
movq 0x45cdc(%rip), %rdi     # 0x51ff0
leaq 0x38669(%rip), %rsi     # 0x44984
callq 0x6410
movq %rax, -0x270(%rbp)
jmp 0xc329
movq -0x270(%rbp), %rdi
movq 0x45c31(%rip), %rsi     # 0x51f68
callq 0x6470
jmp 0xc33e
movq 0x45cab(%rip), %rdi     # 0x51ff0
callq 0xd9f0
jmp 0xc34c
movl $0x1, -0x4(%rbp)
movl $0x1, -0x84(%rbp)
jmp 0xd1ee
movq -0x10(%rbp), %rax
movq 0x45c4b(%rip), %rdx     # 0x51fb8
movslq (%rdx), %rcx
movl %ecx, %esi
incl %esi
movl %esi, (%rdx)
movq (%rax,%rcx,8), %rsi
leaq -0x80(%rbp), %rdi
callq 0x6620
jmp 0xc385
leaq -0xa9(%rbp), %rdi
movq %rdi, -0x278(%rbp)
callq 0x6860
movq -0x278(%rbp), %rdx
leaq 0x381a0(%rip), %rsi     # 0x44546
leaq -0xa8(%rbp), %rdi
callq 0x146f0
jmp 0xc3b4
callq 0x16d40
movq %rax, %rcx
leaq -0x40(%rbp), %rdi
leaq -0xa8(%rbp), %rsi
leaq -0x60(%rbp), %rdx
callq 0xe150
jmp 0xc3d2
leaq -0xa8(%rbp), %rdi
callq 0x69a8
leaq -0xa9(%rbp), %rdi
callq 0x64a0
leaq -0x60(%rbp), %rdi
callq 0x15ee0
movq %rax, -0x280(%rbp)
jmp 0xc3fc
movq -0x280(%rbp), %rax
cmpq $0x1, %rax
jae 0xc499
movq 0x45bdc(%rip), %rdi     # 0x51ff0
leaq 0x38583(%rip), %rsi     # 0x4499e
callq 0x6410
movq %rax, -0x288(%rbp)
jmp 0xc429
movq -0x288(%rbp), %rdi
movq 0x45b31(%rip), %rsi     # 0x51f68
callq 0x6470
jmp 0xc43e
movq 0x45bab(%rip), %rdi     # 0x51ff0
callq 0xd9f0
jmp 0xc44c
movl $0x1, -0x4(%rbp)
movl $0x1, -0x84(%rbp)
jmp 0xd1ee
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x18(%rbp)
movl %eax, -0x1c(%rbp)
jmp 0xc488
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x18(%rbp)
movl %eax, -0x1c(%rbp)
leaq -0xa8(%rbp), %rdi
callq 0x69a8
leaq -0xa9(%rbp), %rdi
callq 0x64a0
jmp 0xd20e
testb $0x1, 0x489dc(%rip)     # 0x54e7c
je 0xce5f
movq 0x45afb(%rip), %rdi     # 0x51fa8
leaq 0x3850f(%rip), %rsi     # 0x449c3
callq 0x6410
movq %rax, -0x290(%rbp)
jmp 0xc4c2
movq -0x290(%rbp), %rdi
movq 0x45a98(%rip), %rsi     # 0x51f68
callq 0x6470
movq %rax, -0x298(%rbp)
jmp 0xc4de
movq -0x298(%rbp), %rdi
leaq 0x384e1(%rip), %rsi     # 0x449cd
callq 0x6410
movq %rax, -0x2a0(%rbp)
jmp 0xc4fa
movq -0x2a0(%rbp), %rdi
leaq -0x80(%rbp), %rsi
callq 0x6380
movq %rax, -0x2a8(%rbp)
jmp 0xc513
leaq 0x384c5(%rip), %rsi     # 0x449df
leaq 0x4aa3f(%rip), %rdx     # 0x56f60
leaq -0xf0(%rbp), %rdi
callq 0x16da0
jmp 0xc52f
leaq 0x39726(%rip), %rdx     # 0x45c5c
leaq -0xd0(%rbp), %rdi
leaq -0xf0(%rbp), %rsi
callq 0x16d50
jmp 0xc54b
movq -0x2a8(%rbp), %rdi
leaq -0xd0(%rbp), %rsi
callq 0x6380
movq %rax, -0x2b0(%rbp)
jmp 0xc567
movq -0x2b0(%rbp), %rdi
movq 0x459f3(%rip), %rsi     # 0x51f68
callq 0x6470
movq %rax, -0x2b8(%rbp)
jmp 0xc583
movq -0x2b8(%rbp), %rdi
leaq 0x38452(%rip), %rsi     # 0x449e3
callq 0x6410
movq %rax, -0x2c0(%rbp)
jmp 0xc59f
movq -0x2c0(%rbp), %rdi
movl 0x488d4(%rip), %esi     # 0x54e80
callq 0x6830
movq %rax, -0x2c8(%rbp)
jmp 0xc5ba
movq -0x2c8(%rbp), %rdi
leaq 0x38429(%rip), %rsi     # 0x449f1
callq 0x6410
movq %rax, -0x2d0(%rbp)
jmp 0xc5d6
movq -0x2d0(%rbp), %rdi
movb 0x4889d(%rip), %cl      # 0x54e80
movl $0x1, %esi
shll %cl, %esi
callq 0x6830
movq %rax, -0x2d8(%rbp)
jmp 0xc5f8
movq -0x2d8(%rbp), %rdi
leaq 0x383f6(%rip), %rsi     # 0x449fc
callq 0x6410
movq %rax, -0x2e0(%rbp)
jmp 0xc614
movq -0x2e0(%rbp), %rdi
movq 0x45946(%rip), %rsi     # 0x51f68
callq 0x6470
movq %rax, -0x2e8(%rbp)
jmp 0xc630
movq -0x2e8(%rbp), %rdi
leaq 0x383c6(%rip), %rsi     # 0x44a04
callq 0x6410
movq %rax, -0x2f0(%rbp)
jmp 0xc64c
movq -0x2f0(%rbp), %rdi
movl 0x4882b(%rip), %esi     # 0x54e84
callq 0x6830
movq %rax, -0x2f8(%rbp)
jmp 0xc667
movq -0x2f8(%rbp), %rdi
leaq 0x383a2(%rip), %rsi     # 0x44a17
callq 0x6410
movq %rax, -0x300(%rbp)
jmp 0xc683
movq -0x300(%rbp), %rdi
movb 0x487f0(%rip), %cl      # 0x54e80
movl $0x1, %esi
shll %cl, %esi
movl 0x487e7(%rip), %eax     # 0x54e84
imull %eax, %esi
callq 0x6830
movq %rax, -0x308(%rbp)
jmp 0xc6ae
movq -0x308(%rbp), %rdi
leaq 0x38340(%rip), %rsi     # 0x449fc
callq 0x6410
movq %rax, -0x310(%rbp)
jmp 0xc6ca
movq -0x310(%rbp), %rdi
movq 0x45890(%rip), %rsi     # 0x51f68
callq 0x6470
movq %rax, -0x318(%rbp)
jmp 0xc6e6
movq -0x318(%rbp), %rdi
leaq 0x3832e(%rip), %rsi     # 0x44a22
callq 0x6410
movq %rax, -0x320(%rbp)
jmp 0xc702
movq -0x320(%rbp), %rdi
movl 0x48779(%rip), %esi     # 0x54e88
callq 0x6830
movq %rax, -0x328(%rbp)
jmp 0xc71d
movq -0x328(%rbp), %rdi
leaq 0x38307(%rip), %rsi     # 0x44a32
callq 0x6410
movq %rax, -0x330(%rbp)
jmp 0xc739
movq -0x330(%rbp), %rdi
movb 0x48742(%rip), %cl      # 0x54e88
movl $0x1, %esi
shll %cl, %esi
callq 0x6830
movq %rax, -0x338(%rbp)
jmp 0xc75b
movq -0x338(%rbp), %rdi
leaq 0x37c5c(%rip), %rsi     # 0x443c5
callq 0x6410
movq %rax, -0x340(%rbp)
jmp 0xc777
movq -0x340(%rbp), %rdi
movq 0x457e3(%rip), %rsi     # 0x51f68
callq 0x6470
movq %rax, -0x348(%rbp)
jmp 0xc793
movq -0x348(%rbp), %rdi
leaq 0x3829b(%rip), %rsi     # 0x44a3c
callq 0x6410
movq %rax, -0x350(%rbp)
jmp 0xc7af
movq -0x350(%rbp), %rdi
movl 0x486d0(%rip), %esi     # 0x54e8c
callq 0x6830
movq %rax, -0x358(%rbp)
jmp 0xc7ca
movq -0x358(%rbp), %rdi
movq 0x45790(%rip), %rsi     # 0x51f68
callq 0x6470
movq %rax, -0x360(%rbp)
jmp 0xc7e6
movq -0x360(%rbp), %rdi
leaq 0x38259(%rip), %rsi     # 0x44a4d
callq 0x6410
movq %rax, -0x368(%rbp)
jmp 0xc802
movq -0x368(%rbp), %rdi
movb 0x48681(%rip), %cl      # 0x54e90
leaq 0x39a90(%rip), %rax     # 0x462a6
leaq 0x3823c(%rip), %rsi     # 0x44a59
testb $0x1, %cl
cmovneq %rax, %rsi
callq 0x6410
movq %rax, -0x370(%rbp)
jmp 0xc832
movq -0x370(%rbp), %rdi
movq 0x45728(%rip), %rsi     # 0x51f68
callq 0x6470
jmp 0xc847
leaq -0xd0(%rbp), %rdi
callq 0x69a8
leaq -0xf0(%rbp), %rdi
callq 0x69a8
cmpl $-0x1, 0x4862e(%rip)    # 0x54e94
jne 0xc8d5
movq 0x45739(%rip), %rdi     # 0x51fa8
leaq 0x381ec(%rip), %rsi     # 0x44a62
callq 0x6410
movq %rax, -0x378(%rbp)
jmp 0xc884
movq -0x378(%rbp), %rdi
movq 0x456d6(%rip), %rsi     # 0x51f68
callq 0x6470
jmp 0xc899
jmp 0xc923
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x18(%rbp)
movl %eax, -0x1c(%rbp)
jmp 0xc8c4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x18(%rbp)
movl %eax, -0x1c(%rbp)
leaq -0xd0(%rbp), %rdi
callq 0x69a8
leaq -0xf0(%rbp), %rdi
callq 0x69a8
jmp 0xd20e
movq 0x456cc(%rip), %rdi     # 0x51fa8
leaq 0x3819a(%rip), %rsi     # 0x44a7d
callq 0x6410
movq %rax, -0x380(%rbp)
jmp 0xc8f1
movq -0x380(%rbp), %rdi
movl 0x48596(%rip), %esi     # 0x54e94
callq 0x65f0
movq %rax, -0x388(%rbp)
jmp 0xc90c
movq -0x388(%rbp), %rdi
movq 0x4564e(%rip), %rsi     # 0x51f68
callq 0x6470
jmp 0xc921
jmp 0xc923
cmpl $-0x1, 0x4856e(%rip)    # 0x54e98
jne 0xc95f
movq 0x45675(%rip), %rdi     # 0x51fa8
leaq 0x38157(%rip), %rsi     # 0x44a91
callq 0x6410
movq %rax, -0x390(%rbp)
jmp 0xc948
movq -0x390(%rbp), %rdi
movq 0x45612(%rip), %rsi     # 0x51f68
callq 0x6470
jmp 0xc95d
jmp 0xc9ad
movq 0x45642(%rip), %rdi     # 0x51fa8
leaq 0x38150(%rip), %rsi     # 0x44abd
callq 0x6410
movq %rax, -0x398(%rbp)
jmp 0xc97b
movq -0x398(%rbp), %rdi
movl 0x48510(%rip), %esi     # 0x54e98
callq 0x65f0
movq %rax, -0x3a0(%rbp)
jmp 0xc996
movq -0x3a0(%rbp), %rdi
movq 0x455c4(%rip), %rsi     # 0x51f68
callq 0x6470
jmp 0xc9ab
jmp 0xc9ad
cmpl $-0x1, 0x484e8(%rip)    # 0x54e9c
jne 0xc9e9
movq 0x455eb(%rip), %rdi     # 0x51fa8
leaq 0x3811e(%rip), %rsi     # 0x44ae2
callq 0x6410
movq %rax, -0x3a8(%rbp)
jmp 0xc9d2
movq -0x3a8(%rbp), %rdi
movq 0x45588(%rip), %rsi     # 0x51f68
callq 0x6470
jmp 0xc9e7
jmp 0xca37
movq 0x455b8(%rip), %rdi     # 0x51fa8
leaq 0x38113(%rip), %rsi     # 0x44b0a
callq 0x6410
movq %rax, -0x3b0(%rbp)
jmp 0xca05
movq -0x3b0(%rbp), %rdi
movl 0x4848a(%rip), %esi     # 0x54e9c
callq 0x65f0
movq %rax, -0x3b8(%rbp)
jmp 0xca20
movq -0x3b8(%rbp), %rdi
movq 0x4553a(%rip), %rsi     # 0x51f68
callq 0x6470
jmp 0xca35
jmp 0xca37
movq 0x4556a(%rip), %rdi     # 0x51fa8
leaq 0x380e6(%rip), %rsi     # 0x44b2b
callq 0x6410
movq %rax, -0x3c0(%rbp)
jmp 0xca53
movq -0x3c0(%rbp), %rdi
movl 0x48440(%rip), %esi     # 0x54ea0
callq 0x6830
movq %rax, -0x3c8(%rbp)
jmp 0xca6e
movq -0x3c8(%rbp), %rdi
movq 0x454ec(%rip), %rsi     # 0x51f68
callq 0x6470
jmp 0xca83
movq 0x4551e(%rip), %rdi     # 0x51fa8
leaq 0x380bd(%rip), %rsi     # 0x44b4e
callq 0x6410
movq %rax, -0x3d0(%rbp)
jmp 0xca9f
movq -0x3d0(%rbp), %rdi
movl 0x483f8(%rip), %eax     # 0x54ea4
testl %eax, %eax
leaq 0x380a8(%rip), %rax     # 0x44b5d
leaq 0x380a5(%rip), %rsi     # 0x44b61
cmovneq %rax, %rsi
callq 0x6410
movq %rax, -0x3d8(%rbp)
jmp 0xcace
movq -0x3d8(%rbp), %rdi
movq 0x4548c(%rip), %rsi     # 0x51f68
callq 0x6470
movq %rax, -0x3e0(%rbp)
jmp 0xcaea
movq -0x3e0(%rbp), %rdi
leaq 0x38070(%rip), %rsi     # 0x44b68
callq 0x6410
movq %rax, -0x3e8(%rbp)
jmp 0xcb06
callq 0xe280
movb %al, -0x3e9(%rbp)
jmp 0xcb13
movq -0x3e8(%rbp), %rdi
movb -0x3e9(%rbp), %cl
leaq 0x38036(%rip), %rax     # 0x44b5d
leaq 0x38033(%rip), %rsi     # 0x44b61
testb $0x1, %cl
cmovneq %rax, %rsi
callq 0x6410
movq %rax, -0x3f8(%rbp)
jmp 0xcb43
movq -0x3f8(%rbp), %rdi
movq 0x45417(%rip), %rsi     # 0x51f68
callq 0x6470
movq %rax, -0x400(%rbp)
jmp 0xcb5f
movq -0x400(%rbp), %rdi
leaq 0x38017(%rip), %rsi     # 0x44b84
callq 0x6410
movq %rax, -0x408(%rbp)
jmp 0xcb7b
movq -0x408(%rbp), %rdi
movl 0x48320(%rip), %eax     # 0x54ea8
testl %eax, %eax
leaq 0x38007(%rip), %rax     # 0x44b98
leaq 0x38016(%rip), %rsi     # 0x44bae
cmovneq %rax, %rsi
callq 0x6410
movq %rax, -0x410(%rbp)
jmp 0xcbaa
movq -0x410(%rbp), %rdi
movq 0x453b0(%rip), %rsi     # 0x51f68
callq 0x6470
jmp 0xcbbf
movq 0x453e2(%rip), %rdi     # 0x51fa8
leaq 0x37fd3(%rip), %rsi     # 0x44ba0
callq 0x6410
movq %rax, -0x418(%rbp)
jmp 0xcbdb
movq -0x418(%rbp), %rdi
movq 0x4537f(%rip), %rsi     # 0x51f68
callq 0x6470
jmp 0xcbf0
movq 0x453b1(%rip), %rdi     # 0x51fa8
leaq 0x37fb9(%rip), %rsi     # 0x44bb7
callq 0x6410
movq %rax, -0x420(%rbp)
jmp 0xcc0c
movq -0x420(%rbp), %rdi
movl 0x48293(%rip), %esi     # 0x54eac
callq 0x6830
movq %rax, -0x428(%rbp)
jmp 0xcc27
movq -0x428(%rbp), %rdi
movq 0x45333(%rip), %rsi     # 0x51f68
callq 0x6470
jmp 0xcc3c
movq 0x45365(%rip), %rdi     # 0x51fa8
leaq 0x37f7d(%rip), %rsi     # 0x44bc7
callq 0x6410
movq %rax, -0x430(%rbp)
jmp 0xcc58
movq -0x430(%rbp), %rdi
movl $0x8, %esi
callq 0x6100
movq %rax, -0x438(%rbp)
jmp 0xcc72
movq -0x438(%rbp), %rdi
leaq 0x37f59(%rip), %rsi     # 0x44bd9
callq 0x6410
movq %rax, -0x440(%rbp)
jmp 0xcc8e
movq -0x440(%rbp), %rdi
movl $0x4, %esi
callq 0x6100
movq %rax, -0x448(%rbp)
jmp 0xcca8
movq -0x448(%rbp), %rdi
leaq 0x37f2a(%rip), %rsi     # 0x44be0
callq 0x6410
movq %rax, -0x450(%rbp)
jmp 0xccc4
movq -0x450(%rbp), %rdi
movl $0x8, %esi
callq 0x6100
movq %rax, -0x458(%rbp)
jmp 0xccde
movq -0x458(%rbp), %rdi
leaq 0x37efc(%rip), %rsi     # 0x44be8
callq 0x6410
movq %rax, -0x460(%rbp)
jmp 0xccfa
movq -0x460(%rbp), %rdi
movl $0x8, %esi
callq 0x6100
movq %rax, -0x468(%rbp)
jmp 0xcd14
movq -0x468(%rbp), %rdi
movq 0x45246(%rip), %rsi     # 0x51f68
callq 0x6470
jmp 0xcd29
movq 0x45278(%rip), %rdi     # 0x51fa8
leaq 0x37ebb(%rip), %rsi     # 0x44bf2
callq 0x6410
movq %rax, -0x470(%rbp)
jmp 0xcd45
movq -0x470(%rbp), %rdi
movslq 0x4815d(%rip), %rax     # 0x54eb0
shlq $0x5, %rax
leaq 0x47f52(%rip), %rsi     # 0x54cb0
addq %rax, %rsi
callq 0x6380
movq %rax, -0x478(%rbp)
jmp 0xcd6f
movq -0x478(%rbp), %rdi
leaq 0x38108(%rip), %rsi     # 0x44e85
callq 0x6410
movq %rax, -0x480(%rbp)
jmp 0xcd8b
movq -0x480(%rbp), %rdi
movq 0x451cf(%rip), %rsi     # 0x51f68
callq 0x6470
jmp 0xcda0
movq $0x0, -0xf8(%rbp)
movq -0xf8(%rbp), %rax
movq %rax, -0x490(%rbp)
leaq -0x60(%rbp), %rdi
callq 0x15ee0
movq %rax, -0x488(%rbp)
jmp 0xcdcb
movq -0x490(%rbp), %rax
movq -0x488(%rbp), %rcx
cmpq %rcx, %rax
jae 0xce5d
movq 0x451c3(%rip), %rdi     # 0x51fa8
leaq 0x37e18(%rip), %rsi     # 0x44c04
callq 0x6410
movq %rax, -0x498(%rbp)
jmp 0xcdfa
movq -0xf8(%rbp), %rsi
leaq -0x60(%rbp), %rdi
callq 0x16eb0
movq %rax, -0x4a0(%rbp)
jmp 0xce13
movq -0x4a0(%rbp), %rsi
movq -0x498(%rbp), %rdi
callq 0x6380
movq %rax, -0x4a8(%rbp)
jmp 0xce2f
movq -0x4a8(%rbp), %rdi
movq 0x4512b(%rip), %rsi     # 0x51f68
callq 0x6470
jmp 0xce44
jmp 0xce46
movq -0xf8(%rbp), %rax
addq $0x1, %rax
movq %rax, -0xf8(%rbp)
jmp 0xcdab
jmp 0xce5f
movl 0x48047(%rip), %edi     # 0x54eac
callq 0x63f0
movzbl 0x4800b(%rip), %ecx     # 0x54e7c
andl $0x1, %ecx
movq 0x4512d(%rip), %rsi     # 0x51fa8
leaq 0x37d85(%rip), %rdx     # 0x44c07
leaq -0x118(%rbp), %rdi
callq 0x16ee0
jmp 0xce90
testb $0x1, 0x47ff9(%rip)     # 0x54e90
jne 0xcf99
leaq -0x40(%rbp), %rdi
leaq -0x60(%rbp), %rsi
leaq -0x80(%rbp), %rdx
xorl %ecx, %ecx
callq 0xe2a0
jmp 0xceb2
jmp 0xcf81
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x18(%rbp)
movl %eax, -0x1c(%rbp)
movl -0x1c(%rbp), %eax
movl $0x3, %ecx
cmpl %ecx, %eax
jne 0xd055
movq -0x18(%rbp), %rdi
callq 0x61a0
movq %rax, -0x120(%rbp)
testb $0x1, 0x47fca(%rip)     # 0x54eb4
je 0xcf39
movq 0x450fd(%rip), %rdi     # 0x51ff0
leaq 0x37d41(%rip), %rsi     # 0x44c3b
callq 0x6410
movq %rax, -0x4b0(%rbp)
jmp 0xcf08
movq -0x4b0(%rbp), %rdi
movq 0x45052(%rip), %rsi     # 0x51f68
callq 0x6470
jmp 0xcf1d
movb $0x1, 0x47f6c(%rip)     # 0x54e90
jmp 0xcf78
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x18(%rbp)
movl %eax, -0x1c(%rbp)
callq 0x6770
jmp 0xcf94
movl $0x8, %edi
callq 0x61f0
movq %rax, %rdi
movq %rdi, -0x4b8(%rbp)
movq -0x120(%rbp), %rsi
callq 0x147a0
movq -0x4b8(%rbp), %rdi
movq 0x45049(%rip), %rsi     # 0x51fb0
movq 0x4501a(%rip), %rdx     # 0x51f88
callq 0x67f0
jmp 0xd413
callq 0x6770
jmp 0xcf7f
jmp 0xcf81
jmp 0xcf99
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x18(%rbp)
movl %eax, -0x1c(%rbp)
jmp 0xd055
jmp 0xd055
testb $0x1, 0x47ef0(%rip)     # 0x54e90
je 0xcfb9
leaq -0x40(%rbp), %rdi
leaq -0x60(%rbp), %rsi
leaq -0x80(%rbp), %rdx
xorl %ecx, %ecx
callq 0xf300
jmp 0xcfb7
jmp 0xcfb9
leaq -0x118(%rbp), %rdi
callq 0x16f40
testb $0x1, 0x47ee9(%rip)     # 0x54eb5
je 0xd1dd
movl 0x47ed4(%rip), %edi     # 0x54eac
callq 0x63f0
movzbl 0x47e98(%rip), %ecx     # 0x54e7c
andl $0x1, %ecx
movq 0x44fba(%rip), %rsi     # 0x51fa8
leaq 0x37c73(%rip), %rdx     # 0x44c68
leaq -0x140(%rbp), %rdi
callq 0x16ee0
jmp 0xd003
testb $0x1, 0x47e86(%rip)     # 0x54e90
jne 0xd15c
leaq 0x37c8d(%rip), %rdx     # 0x44ca4
leaq -0x160(%rbp), %rdi
leaq -0x80(%rbp), %rsi
callq 0x15d70
jmp 0xd029
leaq -0x40(%rbp), %rdi
leaq -0x60(%rbp), %rsi
leaq -0x160(%rbp), %rdx
movl $0x1, %ecx
callq 0xe2a0
jmp 0xd044
leaq -0x160(%rbp), %rdi
callq 0x69a8
jmp 0xd14a
leaq -0x118(%rbp), %rdi
callq 0x16f40
jmp 0xd20e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x18(%rbp)
movl %eax, -0x1c(%rbp)
jmp 0xd08c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x18(%rbp)
movl %eax, -0x1c(%rbp)
leaq -0x160(%rbp), %rdi
callq 0x69a8
movl -0x1c(%rbp), %eax
movl $0x3, %ecx
cmpl %ecx, %eax
jne 0xd1cf
movq -0x18(%rbp), %rdi
callq 0x61a0
movq %rax, -0x168(%rbp)
testb $0x1, 0x47e01(%rip)     # 0x54eb4
je 0xd102
movq 0x44f34(%rip), %rdi     # 0x51ff0
leaq 0x37b78(%rip), %rsi     # 0x44c3b
callq 0x6410
movq %rax, -0x4c0(%rbp)
jmp 0xd0d1
movq -0x4c0(%rbp), %rdi
movq 0x44e89(%rip), %rsi     # 0x51f68
callq 0x6470
jmp 0xd0e6
movb $0x1, 0x47da3(%rip)     # 0x54e90
jmp 0xd141
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x18(%rbp)
movl %eax, -0x1c(%rbp)
callq 0x6770
jmp 0xd15a
movl $0x8, %edi
callq 0x61f0
movq %rax, %rdi
movq %rdi, -0x4c8(%rbp)
movq -0x168(%rbp), %rsi
callq 0x147a0
movq -0x4c8(%rbp), %rdi
movq 0x44e80(%rip), %rsi     # 0x51fb0
movq 0x44e51(%rip), %rdx     # 0x51f88
callq 0x67f0
jmp 0xd413
callq 0x6770
jmp 0xd148
jmp 0xd14a
jmp 0xd15c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x18(%rbp)
movl %eax, -0x1c(%rbp)
jmp 0xd1cf
jmp 0xd1cf
testb $0x1, 0x47d2d(%rip)     # 0x54e90
je 0xd1c1
leaq 0x37b38(%rip), %rdx     # 0x44ca4
leaq -0x188(%rbp), %rdi
leaq -0x80(%rbp), %rsi
callq 0x15d70
jmp 0xd17e
leaq -0x40(%rbp), %rdi
leaq -0x60(%rbp), %rsi
leaq -0x188(%rbp), %rdx
movl $0x1, %ecx
callq 0xf300
jmp 0xd199
leaq -0x188(%rbp), %rdi
callq 0x69a8
jmp 0xd1c1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x18(%rbp)
movl %eax, -0x1c(%rbp)
leaq -0x188(%rbp), %rdi
callq 0x69a8
jmp 0xd1cf
leaq -0x140(%rbp), %rdi
callq 0x16f40
jmp 0xd1dd
leaq -0x140(%rbp), %rdi
callq 0x16f40
jmp 0xd20e
movl $0x0, -0x4(%rbp)
movl $0x1, -0x84(%rbp)
leaq -0x80(%rbp), %rdi
callq 0x69a8
leaq -0x60(%rbp), %rdi
callq 0x16f80
leaq -0x40(%rbp), %rdi
callq 0x69a8
jmp 0xd3f6
leaq -0x80(%rbp), %rdi
callq 0x69a8
leaq -0x60(%rbp), %rdi
callq 0x16f80
leaq -0x40(%rbp), %rdi
callq 0x69a8
movl -0x1c(%rbp), %eax
movl %eax, -0x4cc(%rbp)
movl $0x2, %ecx
cmpl %ecx, %eax
jne 0xd2c9
movq -0x18(%rbp), %rdi
callq 0x61a0
movq %rax, -0x198(%rbp)
movq 0x44d9a(%rip), %rdi     # 0x51ff0
leaq 0x37a4c(%rip), %rsi     # 0x44ca9
callq 0x6410
jmp 0xd264
movl $0x0, -0x19c(%rbp)
movl -0x19c(%rbp), %eax
cmpl -0x8(%rbp), %eax
jge 0xd3c7
movq -0x10(%rbp), %rax
movslq -0x19c(%rbp), %rcx
movq (%rax,%rcx,8), %rsi
movq 0x44d5d(%rip), %rdi     # 0x51ff0
callq 0x6410
movq %rax, -0x4d8(%rbp)
jmp 0xd2a1
movq -0x4d8(%rbp), %rdi
leaq 0x37956(%rip), %rsi     # 0x44c05
callq 0x6410
jmp 0xd2b6
jmp 0xd2b8
movl -0x19c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x19c(%rbp)
jmp 0xd26e
movl -0x4cc(%rbp), %eax
movl $0x1, %ecx
cmpl %ecx, %eax
jne 0xd402
movq -0x18(%rbp), %rdi
callq 0x61a0
movl (%rax), %eax
movl %eax, -0x18c(%rbp)
cmpl $0x0, -0x18c(%rbp)
je 0xd39a
movq 0x44cef(%rip), %rdi     # 0x51ff0
leaq 0x379a1(%rip), %rsi     # 0x44ca9
callq 0x6410
jmp 0xd30f
movl $0x0, -0x190(%rbp)
movl -0x190(%rbp), %eax
cmpl -0x8(%rbp), %eax
jge 0xd383
movq -0x10(%rbp), %rax
movslq -0x190(%rbp), %rcx
movq (%rax,%rcx,8), %rsi
movq 0x44cb6(%rip), %rdi     # 0x51ff0
callq 0x6410
movq %rax, -0x4e0(%rbp)
jmp 0xd348
movq -0x4e0(%rbp), %rdi
leaq 0x378af(%rip), %rsi     # 0x44c05
callq 0x6410
jmp 0xd35d
jmp 0xd35f
movl -0x190(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x190(%rbp)
jmp 0xd319
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x18(%rbp)
movl %eax, -0x1c(%rbp)
callq 0x6770
jmp 0xd402
movq 0x44c66(%rip), %rdi     # 0x51ff0
movq 0x44bd7(%rip), %rsi     # 0x51f68
callq 0x6470
jmp 0xd398
jmp 0xd39a
movl -0x18c(%rbp), %eax
movl %eax, -0x4(%rbp)
movl $0x1, -0x84(%rbp)
callq 0x6770
jmp 0xd3f6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x18(%rbp)
movl %eax, -0x1c(%rbp)
callq 0x6770
jmp 0xd3f4
movq 0x44c22(%rip), %rdi     # 0x51ff0
movq 0x44b93(%rip), %rsi     # 0x51f68
callq 0x6470
jmp 0xd3dc
movl $0x1, -0x4(%rbp)
movl $0x1, -0x84(%rbp)
callq 0x6770
jmp 0xd3f6
jmp 0xd402
movl -0x4(%rbp), %eax
addq $0x4e0, %rsp            # imm = 0x4E0
popq %rbp
retq
movq -0x18(%rbp), %rdi
callq 0x6850
movq %rax, %rdi
callq 0x147e0
nopw %cs:(%rax,%rax)