// File: /workspace/github_cpp_makefile_star2_O1/WeiqiangZhou[P]BIRD/source/predict_main.cpp
// Function: main
int main(int argc, char *argv[])
{
	char infile[255];
	char outfile[255];
    char outfile_expr[255];
	char libfile[255]="./model_file.bin";
	int write_flag = 0;
    int log_flag = 0;
	int locus_model = 0;
	double up_bound = 14;
	int opt;
    int match_mode = 0;
    std::string sep_str = ".";

	if(argc == 1)
	{
		help_info();
		return 1;
	}

	while ((opt = getopt(argc,argv,"b:i:o:u:wthle")) != EOF)
	{
		switch(opt)
		{
			case 'b':
				strcpy(libfile, optarg);
				break;
			case 'i':
				strcpy(infile, optarg);
				break;
			case 'o':
				strcpy(outfile, optarg);
				break;
			case 'u':
				up_bound = atof(optarg);
				break;
			case 'w':
				write_flag = 1;
				break;
            case 't':
                log_flag = 1;
                break;
			case 'h':
				help_info();
				return 1;
			case 'l':
				locus_model = 1;
				break;
            case 'e':
                match_mode = 1;
                break;
			case '?':
				std::cout << "Please input the correct parameters." << std::endl;
				std::cout << "Standard output: BIRD_predict -b model_file.bin -i input_file.txt -o output_file.txt" << std::endl;
				std::cout << "WIG output: BIRD_predict -b model_file.bin -i input_file.txt -o output_name -w" << std::endl;
				return 1;
			default:
				abort();
		}
	}

	//output parameters
	std::cout << "Using model file: " << libfile << std::endl;
	std::cout << "Input file name: " << infile << std::endl;
	std::cout << "Output file name: " << outfile << std::endl;
	std::cout << "Using upper bound: " << up_bound << std::endl;
	if(write_flag)
	{
		std::cout << "Output mode: wig file" << std::endl;
	}
	else
	{
		std::cout << "Output mode: data matrix" << std::endl;
	}

	if(locus_model)
	{
		std::cout << "Prediction mode: locus-level model" << std::endl;
	}
	else
	{
		std::cout << "Prediction mode: full model" << std::endl;
	}

	Exondata exonin;
	Exondata *indata = &exonin;
	int predictor_size, sample_size, cluster_size, var_size, loci_size, bin_size, DH_num1, DH_num2, DH_num3;

	if (ReadPar(libfile, loci_size, predictor_size, cluster_size, bin_size, var_size, DH_num1, DH_num2, DH_num3))
	{
		return 1;
	}

	double *quantile_in = new double[predictor_size];
	int *cluster_idx = new int[predictor_size];
	double *exon_mean = new double[predictor_size];
	double *exon_sd = new double[predictor_size];
	double *DNase_mean = new double[loci_size];
	double *DNase_sd = new double[loci_size];

	double **coef = new double *[var_size];
	for (int j = 0; j < var_size; j++)
	{
		coef[j] = new double[loci_size]();
	}

	int **pre_idx = new int *[var_size];
	for (int j = 0; j < var_size; j++)
	{
		pre_idx[j] = new int[loci_size]();
	}

	char **select_loci = new char *[loci_size];
	for (int j = 0; j < loci_size; j++)
	{
		select_loci[j] = new char[30];
	}

	char **TC_id = new char *[predictor_size];
	for (int j = 0; j < predictor_size; j++)
	{
		TC_id[j] = new char[30];
	}

	//DH cluster model
	double **dis_matrix = new double *[3];
	for (int j = 0; j < 3; j++)
	{
		dis_matrix[j] = new double[loci_size]();
	}

	int **DH_cluster = new int *[3];
	for (int j = 0; j < 3; j++)
	{
		DH_cluster[j] = new int[loci_size]();
	}

	double **DH_coef1 = new double *[var_size];
	for (int j = 0; j < var_size; j++)
	{
		DH_coef1[j] = new double[DH_num1]();
	}

	double **DH_coef2 = new double *[var_size];
	for (int j = 0; j < var_size; j++)
	{
		DH_coef2[j] = new double[DH_num2]();
	}

	double **DH_coef3 = new double *[var_size];
	for (int j = 0; j < var_size; j++)
	{
		DH_coef3[j] = new double[DH_num3]();
	}

	int **DH_pre_idx1 = new int *[var_size];
	for (int j = 0; j < var_size; j++)
	{
		DH_pre_idx1[j] = new int[DH_num1]();
	}

	int **DH_pre_idx2 = new int *[var_size];
	for (int j = 0; j < var_size; j++)
	{
		DH_pre_idx2[j] = new int[DH_num2]();
	}

	int **DH_pre_idx3 = new int *[var_size];
	for (int j = 0; j < var_size; j++)
	{
		DH_pre_idx3[j] = new int[DH_num3]();
	}

	//read in modle file
	if (ReadinModel(libfile, quantile_in, exon_mean, exon_sd, coef, DNase_mean, DNase_sd, pre_idx, TC_id, cluster_idx, select_loci, predictor_size, var_size, loci_size, dis_matrix, DH_cluster, DH_coef1, DH_coef2, DH_coef3, DH_pre_idx1, DH_pre_idx2, DH_pre_idx3, DH_num1, DH_num2, DH_num3))
	{
		return 1;
	}
	//read in gene expression data
	if (ReadinExon(infile, indata))
	{
		return 1;
	}

    int *match_idx = new int[predictor_size];
    
    //match and check gene expression data
    std::cout << "Matching the input gene expression data." << std::endl;
    if(match_mode == 1)
    {
        //use exact match
        if (MatchExon(TC_id, indata, predictor_size, match_idx))
        {
            std::cout << "Gene expression data format incorrect: No gene id matches the library file." << std::endl;
            std::cout << "Please check sample input file for reference." << std::endl;
            return 1;
        }
    }
    else
    {
        //match id before separate character
        if (MatchExon_sep(TC_id, indata, predictor_size, match_idx, sep_str))
        {
            std::cout << "Gene expression data format incorrect: No gene id matches the library file." << std::endl;
            std::cout << "Please check sample input file for reference." << std::endl;
            return 1;
        }
    }
    
    std::cout << "Processing data..." << std::endl;
    
	sample_size = (int)exonin.sample_name.size();

	double ** data_norm = new double *[sample_size];
	double ** data_mean = new double *[sample_size];
	double ** output = new double *[sample_size];
	double ** DH_pre1 = new double *[sample_size];
	double ** DH_pre2 = new double *[sample_size];
	double ** DH_pre3 = new double *[sample_size];

	for (int i = 0; i < sample_size; i++)
	{
		data_norm[i] = new double[predictor_size]();
		data_mean[i] = new double[cluster_size]();
		output[i] = new double[loci_size]();
		DH_pre1[i] = new double[DH_num1]();
		DH_pre2[i] = new double[DH_num2]();
		DH_pre3[i] = new double[DH_num3]();
	}

	for (int i = 0; i < sample_size; i++)
	{
		for (int j = 0; j < predictor_size; j++)
		{
            if(match_idx[j] != -1)
            {
                data_norm[i][j] = log2(exonin.data[match_idx[j]][i] + 1);
            }
            else
            {
                data_norm[i][j] = 0;
            }
		}
	}
    
    strcpy(outfile_expr, infile);
    strcat(outfile_expr, ".match.txt");
    WriteExpr(data_norm, exonin.sample_name, TC_id, outfile_expr, predictor_size, sample_size);
    
    for (int i = 0; i < sample_size; i++)
    {
        QuantileNorm(data_norm[i], quantile_in, predictor_size);
    }

	StandardizeRow(data_norm, exon_mean, exon_sd, predictor_size, sample_size); //standardize gene expression data
	ClusterMean(data_norm, data_mean, cluster_idx, predictor_size, cluster_size, sample_size); //get gene expression cluster mean;

	if(locus_model != 1)
	{
		//Locus level prediction
		Regression(data_mean, output, coef, pre_idx, var_size, loci_size, sample_size);

		//DH cluster level prediction
		Regression(data_mean, DH_pre1, DH_coef1, DH_pre_idx1, var_size, DH_num1, sample_size);
		Regression(data_mean, DH_pre2, DH_coef2, DH_pre_idx2, var_size, DH_num2, sample_size);
		Regression(data_mean, DH_pre3, DH_coef3, DH_pre_idx3, var_size, DH_num3, sample_size);

		//Combine result from locus level and DH cluster level
		ModelAverage(output, DH_pre1, DH_pre2, DH_pre3, dis_matrix, DH_cluster, loci_size, sample_size);
		std::cout << "Using full model for prediction." << std::endl;
	}
	else
	{
		//Locus level prediction
		Regression(data_mean, output, coef, pre_idx, var_size, loci_size, sample_size);
		std::cout << "Using locus-level model for prediction." << std::endl;
	}

  	//convert predicted value back to original scale
	StandardizeRow_r(output, DNase_mean, DNase_sd, loci_size, sample_size);

  	//write output file
	std::cout << "Writing output file..." << std::endl;
	if (WriteWIG(output, select_loci, exonin.sample_name, outfile, bin_size, loci_size, sample_size, write_flag, up_bound, log_flag))
	{
		return 1;
	}

	//release memory.
	ReleaseExondata(exonin);
	delete[] quantile_in;
	delete[] cluster_idx;
	for (int i = 0; i < sample_size; i++)
	{
		delete[] data_norm[i];
		delete[] data_mean[i];
		delete[] output[i];
		delete[] DH_pre1[i];
		delete[] DH_pre2[i];
		delete[] DH_pre3[i];
	}
	for (int i = 0; i < var_size; i++)
	{
		delete[] coef[i];
		delete[] pre_idx[i];
		delete[] DH_coef1[i];
		delete[] DH_coef2[i];
		delete[] DH_coef3[i];
		delete[] DH_pre_idx1[i];
		delete[] DH_pre_idx2[i];
		delete[] DH_pre_idx3[i];
	}
	for (int i = 0; i < 3; i++)
	{
		delete[] dis_matrix[i];
		delete[] DH_cluster[i];
	}
	for (int i = 0; i < predictor_size; i++)
	{
		delete[] TC_id[i];
	}
	for (int i = 0; i < loci_size; i++)
	{
		delete[] select_loci[i];
	}
	delete[] data_norm;
	delete[] data_mean;
	delete[] output;
	delete[] DH_pre1;
	delete[] DH_pre2;
	delete[] DH_pre3;
	delete[] coef;
	delete[] pre_idx;
	delete[] DH_coef1;
	delete[] DH_coef2;
	delete[] DH_coef3;
	delete[] DH_pre_idx1;
	delete[] DH_pre_idx2;
	delete[] DH_pre_idx3;
	delete[] TC_id;
	delete[] select_loci;
	delete[] dis_matrix;
	delete[] DH_cluster;
	return 0;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x648, %rsp            # imm = 0x648
movq %rsi, %rbx
movl %edi, %r14d
leaq 0x5a33(%rip), %rsi      # 0x8080
leaq -0x370(%rbp), %rdi
movl $0xff, %edx
callq 0x2190
leaq -0x1c8(%rbp), %rax
movq %rax, -0x10(%rax)
leaq 0x6142(%rip), %rsi      # 0x87b2
leaq 0x613c(%rip), %rdx      # 0x87b3
leaq -0x1d8(%rbp), %rdi
callq 0x3fd6
cmpl $0x1, %r14d
jne 0x26c2
movl $0x1, -0x64(%rbp)
callq 0x6306
movq -0x1d8(%rbp), %rdi
leaq -0x1c8(%rbp), %rax
cmpq %rax, %rdi
je 0x26ad
callq 0x21d0
movl -0x64(%rbp), %eax
addq $0x648, %rsp            # imm = 0x648
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movsd 0x593e(%rip), %xmm0     # 0x8008
movsd %xmm0, -0x128(%rbp)
movl $0x0, -0x108(%rbp)
leaq 0x5a9c(%rip), %r15      # 0x817f
leaq 0x5936(%rip), %r12      # 0x8020
movl $0x0, -0x8c(%rbp)
movq $0x0, -0x168(%rbp)
xorl %eax, %eax
movl %eax, %r13d
movl %r14d, %edi
movq %rbx, %rsi
movq %r15, %rdx
callq 0x2080
leal -0x62(%rax), %ecx
cmpl $0x15, %ecx
ja 0x27be
movl $0x1, %eax
movslq (%r12,%rcx,4), %rcx
addq %r12, %rcx
jmpq *%rcx
movq 0x9895(%rip), %rax      # 0xbfc8
movq (%rax), %rsi
leaq -0x370(%rbp), %rdi
jmp 0x2792
movl $0x1, -0x108(%rbp)
movl %r13d, %eax
jmp 0x2701
movl $0x1, -0x8c(%rbp)
movl %r13d, %eax
jmp 0x2701
movl $0x1, %eax
movq %rax, -0x168(%rbp)
movl %r13d, %eax
jmp 0x2701
movq 0x9853(%rip), %rax      # 0xbfc8
movq (%rax), %rsi
leaq -0x670(%rbp), %rdi
jmp 0x2792
movq 0x9840(%rip), %rax      # 0xbfc8
movq (%rax), %rsi
leaq -0x570(%rbp), %rdi
callq 0x21c0
movl %r13d, %eax
jmp 0x2701
movq 0x9822(%rip), %rax      # 0xbfc8
movq (%rax), %rdi
callq 0x2260
movsd %xmm0, -0x128(%rbp)
movl %r13d, %eax
jmp 0x2701
cmpl $-0x1, %eax
je 0x28ae
cmpl $0x3f, %eax
jne 0x3ac4
movq 0x9801(%rip), %rbx      # 0xbfd8
leaq 0x59af(%rip), %rsi      # 0x818d
movl $0x24, %edx
movq %rbx, %rdi
callq 0x2230
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x21e0
movsbl %al, %esi
movq 0x97cf(%rip), %rdi      # 0xbfd8
callq 0x2040
movq %rax, %rdi
callq 0x2150
movq 0x97bb(%rip), %rbx      # 0xbfd8
leaq 0x598e(%rip), %rsi      # 0x81b2
movl $0x54, %edx
movq %rbx, %rdi
callq 0x2230
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x21e0
movsbl %al, %esi
movq 0x9789(%rip), %rdi      # 0xbfd8
callq 0x2040
movq %rax, %rdi
callq 0x2150
movq 0x9775(%rip), %rbx      # 0xbfd8
leaq 0x599d(%rip), %rsi      # 0x8207
movl $0x4e, %edx
movq %rbx, %rdi
callq 0x2230
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x21e0
movsbl %al, %esi
movq 0x9743(%rip), %rdi      # 0xbfd8
callq 0x2040
movl $0x1, -0x64(%rbp)
movq %rax, %rdi
callq 0x2150
jmp 0x2695
movq 0x9723(%rip), %rdi      # 0xbfd8
leaq 0x599a(%rip), %rsi      # 0x8256
movl $0x12, %edx
callq 0x2230
leaq -0x370(%rbp), %r14
movq %r14, %rdi
callq 0x2100
movq 0x96fc(%rip), %rbx      # 0xbfd8
movq %rbx, %rdi
movq %r14, %rsi
movq %rax, %rdx
callq 0x2230
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x21e0
movsbl %al, %esi
movq 0x96d0(%rip), %rdi      # 0xbfd8
callq 0x2040
movq %rax, %rdi
callq 0x2150
movq 0x96bc(%rip), %rdi      # 0xbfd8
leaq 0x5946(%rip), %rsi      # 0x8269
movl $0x11, %edx
callq 0x2230
leaq -0x570(%rbp), %r14
movq %r14, %rdi
callq 0x2100
movq 0x9695(%rip), %rbx      # 0xbfd8
movq %rbx, %rdi
movq %r14, %rsi
movq %rax, %rdx
callq 0x2230
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x21e0
movsbl %al, %esi
movq 0x9669(%rip), %rdi      # 0xbfd8
callq 0x2040
movq %rax, %rdi
callq 0x2150
movq 0x9655(%rip), %rdi      # 0xbfd8
leaq 0x58f1(%rip), %rsi      # 0x827b
movl $0x12, %edx
callq 0x2230
leaq -0x670(%rbp), %r14
movq %r14, %rdi
callq 0x2100
movq 0x962e(%rip), %rbx      # 0xbfd8
movq %rbx, %rdi
movq %r14, %rsi
movq %rax, %rdx
callq 0x2230
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x21e0
movsbl %al, %esi
movq 0x9602(%rip), %rdi      # 0xbfd8
callq 0x2040
movq %rax, %rdi
callq 0x2150
movq 0x95ee(%rip), %rdi      # 0xbfd8
leaq 0x589d(%rip), %rsi      # 0x828e
movl $0x13, %edx
callq 0x2230
movq 0x95d6(%rip), %rdi      # 0xbfd8
movsd -0x128(%rbp), %xmm0
callq 0x2320
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x21e0
movsbl %al, %esi
movq %rbx, %rdi
callq 0x2040
movq %rax, %rdi
callq 0x2150
xorl %eax, %eax
testl %r13d, %r13d
sete %al
leaq 0x5870(%rip), %rcx      # 0x82b8
leaq 0x5853(%rip), %rsi      # 0x82a2
cmoveq %rcx, %rsi
leaq 0x15(%rax,%rax,2), %rdx
movq 0x9579(%rip), %rbx      # 0xbfd8
movq %rbx, %rdi
callq 0x2230
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x21e0
movsbl %al, %esi
movq 0x9553(%rip), %rdi      # 0xbfd8
callq 0x2040
movq %rax, %rdi
callq 0x2150
cmpl $0x0, -0x8c(%rbp)
leaq 0x5854(%rip), %rax      # 0x82f4
leaq 0x582a(%rip), %rsi      # 0x82d1
cmoveq %rax, %rsi
movl $0x1b, %eax
movl $0x22, %edx
cmoveq %rax, %rdx
movq 0x9518(%rip), %rbx      # 0xbfd8
movq %rbx, %rdi
callq 0x2230
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x21e0
movsbl %al, %esi
movq 0x94f2(%rip), %rdi      # 0xbfd8
callq 0x2040
movq %rax, %rdi
callq 0x2150
xorpd %xmm0, %xmm0
movapd %xmm0, -0x180(%rbp)
movapd %xmm0, -0x190(%rbp)
movapd %xmm0, -0x1a0(%rbp)
movapd %xmm0, -0x1b0(%rbp)
movq $0x0, -0x170(%rbp)
subq $0x8, %rsp
leaq -0x4c(%rbp), %rax
leaq -0x50(%rbp), %r10
leaq -0x54(%rbp), %r11
leaq -0x370(%rbp), %rdi
leaq -0x3c(%rbp), %rsi
leaq -0x2c(%rbp), %rdx
leaq -0x10c(%rbp), %rcx
leaq -0x12c(%rbp), %r8
leaq -0x40(%rbp), %r9
pushq %rax
pushq %r10
pushq %r11
callq 0x5621
addq $0x20, %rsp
movl $0x1, -0x64(%rbp)
testl %eax, %eax
jne 0x3a9b
movslq -0x2c(%rbp), %r14
leaq (,%r14,8), %rdi
testq %r14, %r14
movq $-0x1, %rbx
cmovsq %rbx, %rdi
movq %rdi, -0x80(%rbp)
callq 0x2030
movq %rax, -0x120(%rbp)
leaq (,%r14,4), %rdi
movq %r14, -0xb0(%rbp)
testl %r14d, %r14d
cmovsq %rbx, %rdi
callq 0x2030
movq %rax, -0x118(%rbp)
movq -0x80(%rbp), %rbx
movq %rbx, %rdi
callq 0x2030
movq %rax, -0x150(%rbp)
movq %rbx, %rdi
callq 0x2030
movq %rax, -0x148(%rbp)
movslq -0x3c(%rbp), %rcx
leaq (,%rcx,8), %rax
movq %rcx, -0x78(%rbp)
testq %rcx, %rcx
movq $-0x1, %r14
cmovnsq %rax, %r14
movq %r14, %rdi
callq 0x2030
movq %rax, -0x140(%rbp)
movq %r14, %rdi
callq 0x2030
movq %rax, -0x138(%rbp)
movslq -0x40(%rbp), %rbx
leaq (,%rbx,8), %rax
testq %rbx, %rbx
movq $-0x1, %rdi
cmovnsq %rax, %rdi
movq %rdi, -0x48(%rbp)
callq 0x2030
movq %rax, -0xa8(%rbp)
movq %rbx, -0x38(%rbp)
testl %ebx, %ebx
jle 0x2c7b
xorl %r15d, %r15d
movq %r14, %rdi
callq 0x2030
movq %rax, %r12
movq %rax, %rdi
xorl %esi, %esi
movq %r14, %rdx
callq 0x2130
movq -0xa8(%rbp), %rax
movq %r12, (%rax,%r15,8)
incq %r15
cmpq %r15, -0x38(%rbp)
jne 0x2c4f
movq -0x48(%rbp), %rdi
callq 0x2030
movq %rax, -0xa0(%rbp)
cmpl $0x0, -0x38(%rbp)
jle 0x2cd8
movq -0x78(%rbp), %rcx
leaq (,%rcx,4), %rax
testl %ecx, %ecx
movq $-0x1, %r12
cmovnsq %rax, %r12
xorl %ebx, %ebx
movq %r12, %rdi
callq 0x2030
movq %rax, %r15
movq %rax, %rdi
xorl %esi, %esi
movq %r12, %rdx
callq 0x2130
movq -0xa0(%rbp), %rax
movq %r15, (%rax,%rbx,8)
incq %rbx
cmpq %rbx, -0x38(%rbp)
jne 0x2cac
movq %r14, %rdi
callq 0x2030
movq %rax, -0xf8(%rbp)
cmpl $0x0, -0x78(%rbp)
jle 0x2d0d
xorl %ebx, %ebx
movl $0x1e, %edi
callq 0x2030
movq -0xf8(%rbp), %rcx
movq %rax, (%rcx,%rbx,8)
incq %rbx
cmpq %rbx, -0x78(%rbp)
jne 0x2cef
movq -0x80(%rbp), %rdi
callq 0x2030
movq %rax, -0x88(%rbp)
cmpl $0x0, -0xb0(%rbp)
jle 0x2d49
xorl %ebx, %ebx
movl $0x1e, %edi
callq 0x2030
movq -0x88(%rbp), %rcx
movq %rax, (%rcx,%rbx,8)
incq %rbx
cmpq %rbx, -0xb0(%rbp)
jne 0x2d28
movl $0x18, %edi
callq 0x2030
movq %rax, -0x80(%rbp)
xorl %ebx, %ebx
movq %r14, %rdi
callq 0x2030
movq %rax, %r15
movq %rax, %rdi
xorl %esi, %esi
movq %r14, %rdx
callq 0x2130
movq -0x80(%rbp), %rax
movq %r15, (%rax,%rbx,8)
incq %rbx
cmpq $0x3, %rbx
jne 0x2d59
movl $0x18, %edi
callq 0x2030
movq %rax, -0x100(%rbp)
movq -0x78(%rbp), %rcx
leaq (,%rcx,4), %rax
testl %ecx, %ecx
movq $-0x1, %r12
cmovnsq %rax, %r12
xorl %ebx, %ebx
movq %r12, %rdi
callq 0x2030
movq %rax, %r15
movq %rax, %rdi
xorl %esi, %esi
movq %r12, %rdx
callq 0x2130
movq -0x100(%rbp), %rax
movq %r15, (%rax,%rbx,8)
incq %rbx
cmpq $0x3, %rbx
jne 0x2dae
movq -0x48(%rbp), %rdi
callq 0x2030
movq %rax, -0xf0(%rbp)
cmpl $0x0, -0x38(%rbp)
jle 0x2e38
movslq -0x54(%rbp), %rax
leaq (,%rax,8), %rcx
testq %rax, %rax
movq $-0x1, %r12
cmovnsq %rcx, %r12
xorl %ebx, %ebx
movq %r12, %rdi
callq 0x2030
movq %rax, %r15
movq %rax, %rdi
xorl %esi, %esi
movq %r12, %rdx
callq 0x2130
movq -0xf0(%rbp), %rax
movq %r15, (%rax,%rbx,8)
incq %rbx
cmpq %rbx, -0x38(%rbp)
jne 0x2e0c
movq -0x48(%rbp), %rdi
callq 0x2030
movq %rax, -0xe8(%rbp)
cmpl $0x0, -0x38(%rbp)
jle 0x2e96
movslq -0x50(%rbp), %rax
leaq (,%rax,8), %rcx
testq %rax, %rax
movq $-0x1, %r12
cmovnsq %rcx, %r12
xorl %ebx, %ebx
movq %r12, %rdi
callq 0x2030
movq %rax, %r15
movq %rax, %rdi
xorl %esi, %esi
movq %r12, %rdx
callq 0x2130
movq -0xe8(%rbp), %rax
movq %r15, (%rax,%rbx,8)
incq %rbx
cmpq %rbx, -0x38(%rbp)
jne 0x2e6a
movq -0x48(%rbp), %rdi
callq 0x2030
movq %rax, -0xe0(%rbp)
cmpl $0x0, -0x38(%rbp)
jle 0x2ef4
movslq -0x4c(%rbp), %rax
leaq (,%rax,8), %rcx
testq %rax, %rax
movq $-0x1, %r12
cmovnsq %rcx, %r12
xorl %ebx, %ebx
movq %r12, %rdi
callq 0x2030
movq %rax, %r15
movq %rax, %rdi
xorl %esi, %esi
movq %r12, %rdx
callq 0x2130
movq -0xe0(%rbp), %rax
movq %r15, (%rax,%rbx,8)
incq %rbx
cmpq %rbx, -0x38(%rbp)
jne 0x2ec8
movq -0x48(%rbp), %rdi
callq 0x2030
movq %rax, -0xd8(%rbp)
cmpl $0x0, -0x38(%rbp)
jle 0x2f52
movslq -0x54(%rbp), %rax
leaq (,%rax,4), %rcx
testq %rax, %rax
movq $-0x1, %r12
cmovnsq %rcx, %r12
xorl %ebx, %ebx
movq %r12, %rdi
callq 0x2030
movq %rax, %r15
movq %rax, %rdi
xorl %esi, %esi
movq %r12, %rdx
callq 0x2130
movq -0xd8(%rbp), %rax
movq %r15, (%rax,%rbx,8)
incq %rbx
cmpq %rbx, -0x38(%rbp)
jne 0x2f26
movq -0x48(%rbp), %rdi
callq 0x2030
movq %rax, -0xd0(%rbp)
cmpl $0x0, -0x38(%rbp)
jle 0x2fb0
movslq -0x50(%rbp), %rax
leaq (,%rax,4), %rcx
testq %rax, %rax
movq $-0x1, %r12
cmovnsq %rcx, %r12
xorl %ebx, %ebx
movq %r12, %rdi
callq 0x2030
movq %rax, %r15
movq %rax, %rdi
xorl %esi, %esi
movq %r12, %rdx
callq 0x2130
movq -0xd0(%rbp), %rax
movq %r15, (%rax,%rbx,8)
incq %rbx
cmpq %rbx, -0x38(%rbp)
jne 0x2f84
movq -0x48(%rbp), %rdi
callq 0x2030
movq %rax, -0x48(%rbp)
cmpl $0x0, -0x38(%rbp)
jle 0x3008
movslq -0x4c(%rbp), %rax
leaq (,%rax,4), %rcx
testq %rax, %rax
movq $-0x1, %r15
cmovnsq %rcx, %r15
xorl %ebx, %ebx
movq %r15, %rdi
callq 0x2030
movq %rax, %r12
movq %rax, %rdi
xorl %esi, %esi
movq %r15, %rdx
callq 0x2130
movq -0x48(%rbp), %rax
movq %r12, (%rax,%rbx,8)
incq %rbx
cmpq %rbx, -0x38(%rbp)
jne 0x2fdf
movl -0x54(%rbp), %eax
movl -0x50(%rbp), %r10d
movl -0x4c(%rbp), %r11d
subq $0x8, %rsp
leaq -0x370(%rbp), %rdi
movq -0x120(%rbp), %rsi
movq -0x150(%rbp), %rdx
movq -0x148(%rbp), %rcx
movq -0xa8(%rbp), %r8
movq -0x140(%rbp), %r9
pushq %r11
pushq %r10
pushq %rax
pushq -0x48(%rbp)
pushq -0xd0(%rbp)
pushq -0xd8(%rbp)
pushq -0xe0(%rbp)
pushq -0xe8(%rbp)
pushq -0xf0(%rbp)
pushq -0x100(%rbp)
pushq -0x80(%rbp)
pushq -0x78(%rbp)
pushq -0x38(%rbp)
pushq -0xb0(%rbp)
pushq -0xf8(%rbp)
pushq -0x118(%rbp)
pushq -0x88(%rbp)
pushq -0xa0(%rbp)
pushq -0x138(%rbp)
callq 0x51f9
addq $0xa0, %rsp
testl %eax, %eax
jne 0x3a9b
leaq -0x570(%rbp), %rdi
leaq -0x1b0(%rbp), %rsi
callq 0x48d3
testl %eax, %eax
jne 0x3a9b
movslq -0x2c(%rbp), %rax
leaq (,%rax,4), %rcx
testq %rax, %rax
movq $-0x1, %rdi
cmovnsq %rcx, %rdi
callq 0x2030
movq %rax, %r12
movq 0x8ee6(%rip), %rdi      # 0xbfd8
leaq 0x5217(%rip), %rsi      # 0x8310
movl $0x28, %edx
callq 0x2230
movq 0x8ece(%rip), %rdi      # 0xbfd8
callq 0x2110
movl -0x2c(%rbp), %r15d
cmpl $0x0, -0x108(%rbp)
je 0x318a
leaq -0x1b0(%rbp), %rsi
movq -0x88(%rbp), %rdi
movl %r15d, %edx
movq %r12, %rcx
callq 0x4546
testl %eax, %eax
je 0x31ef
movq 0x8e94(%rip), %rdi      # 0xbfd8
leaq 0x51ee(%rip), %rsi      # 0x8339
movl $0x4b, %edx
callq 0x2230
movq 0x8e7c(%rip), %rdi      # 0xbfd8
callq 0x2110
movq 0x8e70(%rip), %rdi      # 0xbfd8
leaq 0x5216(%rip), %rsi      # 0x8385
movl $0x2d, %edx
callq 0x2230
movq 0x8e58(%rip), %rdi      # 0xbfd8
callq 0x2110
jmp 0x3a9b
leaq -0x218(%rbp), %r14
movq %r14, -0x10(%r14)
movq -0x1d8(%rbp), %rsi
movq -0x1d0(%rbp), %rdx
addq %rsi, %rdx
leaq -0x228(%rbp), %rdi
callq 0x3f3c
leaq -0x1b0(%rbp), %rsi
leaq -0x228(%rbp), %r8
movq -0x88(%rbp), %rdi
movl %r15d, %edx
movq %r12, %rcx
callq 0x4283
movl %eax, %r15d
movq -0x228(%rbp), %rdi
cmpq %r14, %rdi
je 0x31e6
callq 0x21d0
testl %r15d, %r15d
jne 0x313d
movq 0x8de2(%rip), %rdi      # 0xbfd8
leaq 0x51b6(%rip), %rsi      # 0x83b3
movl $0x12, %edx
callq 0x2230
movq 0x8dca(%rip), %rdi      # 0xbfd8
callq 0x2110
movq -0x1a8(%rbp), %rbx
subq -0x1b0(%rbp), %rbx
movq %rbx, %rax
shlq $0x1b, %rax
movq %rax, %rcx
sarq $0x1d, %rcx
testq %rax, %rax
movq $-0x1, %r14
cmovnsq %rcx, %r14
movq %r14, %rdi
callq 0x2030
movq %rax, %r15
movq %r14, %rdi
callq 0x2030
movq %rax, -0x60(%rbp)
movq %r14, %rdi
callq 0x2030
movq %rax, -0x70(%rbp)
movq %r14, %rdi
callq 0x2030
movq %rax, -0xc8(%rbp)
movq %r14, %rdi
callq 0x2030
movq %rax, -0xc0(%rbp)
movq %r14, %rdi
callq 0x2030
movq %rax, -0xb8(%rbp)
shrq $0x5, %rbx
movq %rbx, -0x98(%rbp)
testl %ebx, %ebx
jle 0x344f
movslq -0x2c(%rbp), %rax
leaq (,%rax,8), %rcx
testq %rax, %rax
movq $-0x1, %rax
cmovsq %rax, %rcx
movq %rcx, -0x38(%rbp)
movslq -0x10c(%rbp), %rcx
leaq (,%rcx,8), %rdx
testq %rcx, %rcx
cmovsq %rax, %rdx
movq %rdx, -0x108(%rbp)
movslq -0x3c(%rbp), %rcx
leaq (,%rcx,8), %rdx
testq %rcx, %rcx
cmovsq %rax, %rdx
movq %rdx, -0x78(%rbp)
movslq -0x54(%rbp), %rcx
leaq (,%rcx,8), %rdx
testq %rcx, %rcx
cmovsq %rax, %rdx
movq %rdx, -0xb0(%rbp)
movslq -0x50(%rbp), %rcx
leaq (,%rcx,8), %rdx
testq %rcx, %rcx
cmovsq %rax, %rdx
movq %rdx, -0x160(%rbp)
movslq -0x4c(%rbp), %rcx
leaq (,%rcx,8), %rdx
testq %rcx, %rcx
cmovsq %rax, %rdx
movq %rdx, -0x158(%rbp)
movq -0x98(%rbp), %rax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
movq %rax, -0x1b8(%rbp)
xorl %r14d, %r14d
movq -0x38(%rbp), %rdi
callq 0x2030
movq %rax, %rbx
movq %rax, %rdi
xorl %esi, %esi
movq -0x38(%rbp), %rdx
callq 0x2130
movq %rbx, (%r15,%r14,8)
movq -0x108(%rbp), %rdi
callq 0x2030
movq %rax, %rbx
movq %rax, %rdi
xorl %esi, %esi
movq -0x108(%rbp), %rdx
callq 0x2130
movq -0x60(%rbp), %rax
movq %rbx, (%rax,%r14,8)
movq -0x78(%rbp), %rdi
callq 0x2030
movq %rax, %rbx
movq %rax, %rdi
xorl %esi, %esi
movq -0x78(%rbp), %rdx
callq 0x2130
movq -0x70(%rbp), %rax
movq %rbx, (%rax,%r14,8)
movq -0xb0(%rbp), %rdi
callq 0x2030
movq %rax, %rbx
movq %rax, %rdi
xorl %esi, %esi
movq -0xb0(%rbp), %rdx
callq 0x2130
movq -0xc8(%rbp), %rax
movq %rbx, (%rax,%r14,8)
movq -0x160(%rbp), %rdi
callq 0x2030
movq %rax, %rbx
movq %rax, %rdi
xorl %esi, %esi
movq -0x160(%rbp), %rdx
callq 0x2130
movq -0xc0(%rbp), %rax
movq %rbx, (%rax,%r14,8)
movq -0x158(%rbp), %rdi
callq 0x2030
movq %rax, %rbx
movq %rax, %rdi
xorl %esi, %esi
movq -0x158(%rbp), %rdx
callq 0x2130
movq -0xb8(%rbp), %rax
movq %rbx, (%rax,%r14,8)
incq %r14
cmpq %r14, -0x1b8(%rbp)
jne 0x3356
cmpl $0x0, -0x98(%rbp)
jle 0x34c3
movq -0x98(%rbp), %rax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
movq %rax, -0x38(%rbp)
xorl %r14d, %r14d
cmpl $0x0, -0x2c(%rbp)
jle 0x34ba
xorl %ebx, %ebx
movslq (%r12,%rbx,4), %rax
cmpq $-0x1, %rax
je 0x34a1
movq -0x180(%rbp), %rcx
leaq (%rax,%rax,2), %rax
movq (%rcx,%rax,8), %rax
movsd (%rax,%r14,8), %xmm0
addsd 0x4b76(%rip), %xmm0     # 0x8010
callq 0x23a0
jmp 0x34a5
xorpd %xmm0, %xmm0
movq (%r15,%r14,8), %rax
movsd %xmm0, (%rax,%rbx,8)
incq %rbx
movslq -0x2c(%rbp), %rax
cmpq %rax, %rbx
jl 0x3473
incq %r14
cmpq -0x38(%rbp), %r14
jne 0x346b
leaq -0x470(%rbp), %r12
leaq -0x570(%rbp), %rsi
movq %r12, %rdi
callq 0x21c0
movq %r12, %rdi
callq 0x2100
movabsq $0x742e686374616d2e, %rcx # imm = 0x742E686374616D2E
movq %rcx, -0x470(%rbp,%rax)
movl $0x747874, -0x469(%rbp,%rax) # imm = 0x747874
leaq -0x208(%rbp), %rdi
leaq -0x1b0(%rbp), %rsi
callq 0x3b92
movq -0x98(%rbp), %rbx
movl -0x2c(%rbp), %r8d
leaq -0x208(%rbp), %rsi
leaq -0x470(%rbp), %rcx
movq %r15, %rdi
movq -0x88(%rbp), %rdx
movl %ebx, %r9d
callq 0x46c9
leaq -0x208(%rbp), %rdi
callq 0x3c20
testl %ebx, %ebx
jle 0x3577
movq -0x98(%rbp), %rbx
andl $0x7fffffff, %ebx       # imm = 0x7FFFFFFF
xorl %r14d, %r14d
movq (%r15,%r14,8), %rdi
movl -0x2c(%rbp), %edx
movq -0x120(%rbp), %rsi
callq 0x4eb5
incq %r14
cmpq %r14, %rbx
jne 0x355c
movl -0x2c(%rbp), %ecx
movq %r15, %rdi
movq -0x150(%rbp), %rsi
movq -0x148(%rbp), %rdx
movq -0x98(%rbp), %r14
movl %r14d, %r8d
callq 0x5007
movl -0x2c(%rbp), %ecx
movl -0x10c(%rbp), %r8d
movq %r15, %rdi
movq -0x60(%rbp), %rsi
movq -0x118(%rbp), %rdx
movl %r14d, %r9d
callq 0x50c3
movl -0x40(%rbp), %r8d
movl -0x3c(%rbp), %r9d
cmpl $0x0, -0x8c(%rbp)
je 0x3601
subq $0x8, %rsp
movq -0x60(%rbp), %rdi
movq -0x70(%rbp), %rsi
movq -0xa8(%rbp), %rdx
movq -0xa0(%rbp), %rcx
pushq %r14
callq 0x57b1
addq $0x10, %rsp
movl $0x27, %edx
leaq 0x4df6(%rip), %rsi      # 0x83f2
jmp 0x36f2
subq $0x8, %rsp
movq -0x60(%rbp), %rdi
movq -0x70(%rbp), %rsi
movq -0xa8(%rbp), %rdx
movq -0xa0(%rbp), %rcx
pushq %r14
callq 0x57b1
addq $0x10, %rsp
movl -0x40(%rbp), %r8d
movl -0x54(%rbp), %r9d
subq $0x8, %rsp
movq -0x60(%rbp), %rdi
movq -0xc8(%rbp), %rsi
movq -0xf0(%rbp), %rdx
movq -0xd8(%rbp), %rcx
pushq %r14
callq 0x57b1
addq $0x10, %rsp
movl -0x40(%rbp), %r8d
movl -0x50(%rbp), %r9d
subq $0x8, %rsp
movq -0x60(%rbp), %rdi
movq -0xc0(%rbp), %rsi
movq -0xe8(%rbp), %rdx
movq -0xd0(%rbp), %rcx
pushq %r14
callq 0x57b1
addq $0x10, %rsp
movl -0x40(%rbp), %r8d
movl -0x4c(%rbp), %r9d
subq $0x8, %rsp
movq -0x60(%rbp), %rdi
movq -0xb8(%rbp), %rsi
movq -0xe0(%rbp), %rdx
movq -0x48(%rbp), %rcx
pushq %r14
callq 0x57b1
addq $0x10, %rsp
movl -0x3c(%rbp), %eax
movq -0x70(%rbp), %rdi
movq -0xc8(%rbp), %rsi
movq -0xc0(%rbp), %rdx
movq -0xb8(%rbp), %rcx
movq -0x80(%rbp), %r8
movq -0x100(%rbp), %r9
pushq %r14
pushq %rax
callq 0x583f
addq $0x10, %rsp
movl $0x20, %edx
leaq 0x4cdf(%rip), %rsi      # 0x83d1
movq 0x88df(%rip), %rdi      # 0xbfd8
callq 0x2230
movq 0x88d3(%rip), %rdi      # 0xbfd8
callq 0x2110
movl -0x3c(%rbp), %ecx
movq -0x70(%rbp), %rdi
movq -0x140(%rbp), %rsi
movq -0x138(%rbp), %rdx
movl %r14d, %r8d
callq 0x507d
movq 0x88aa(%rip), %rdi      # 0xbfd8
leaq 0x4ce5(%rip), %rsi      # 0x841a
movl $0x16, %edx
callq 0x2230
movq 0x8892(%rip), %rdi      # 0xbfd8
callq 0x2110
leaq -0x1f0(%rbp), %rdi
leaq -0x1b0(%rbp), %rsi
callq 0x3b92
movl -0x12c(%rbp), %r8d
movl -0x3c(%rbp), %r9d
subq $0x8, %rsp
leaq -0x1f0(%rbp), %rdx
leaq -0x670(%rbp), %rcx
movq -0x70(%rbp), %rdi
movq -0xf8(%rbp), %rsi
movsd -0x128(%rbp), %xmm0
pushq -0x168(%rbp)
pushq %r13
pushq %r14
callq 0x5929
addq $0x20, %rsp
movl %eax, %r12d
leaq -0x1f0(%rbp), %rdi
callq 0x3c20
testl %r12d, %r12d
jne 0x3a9b
leaq -0x270(%rbp), %rdi
leaq -0x1b0(%rbp), %rsi
callq 0x3c6e
leaq -0x270(%rbp), %rdi
callq 0x413c
leaq -0x270(%rbp), %rdi
callq 0x3cce
movq -0x120(%rbp), %rdi
callq 0x2270
movq -0x118(%rbp), %rdi
callq 0x2270
testl %r14d, %r14d
jle 0x3887
andl $0x7fffffff, %r14d      # imm = 0x7FFFFFFF
xorl %ebx, %ebx
movq (%r15,%rbx,8), %rdi
testq %rdi, %rdi
je 0x381c
callq 0x2270
movq -0x60(%rbp), %rax
movq (%rax,%rbx,8), %rdi
testq %rdi, %rdi
je 0x382e
callq 0x2270
movq -0x70(%rbp), %rax
movq (%rax,%rbx,8), %rdi
testq %rdi, %rdi
je 0x3840
callq 0x2270
movq -0xc8(%rbp), %rax
movq (%rax,%rbx,8), %rdi
testq %rdi, %rdi
je 0x3855
callq 0x2270
movq -0xc0(%rbp), %rax
movq (%rax,%rbx,8), %rdi
testq %rdi, %rdi
je 0x386a
callq 0x2270
movq -0xb8(%rbp), %rax
movq (%rax,%rbx,8), %rdi
testq %rdi, %rdi
je 0x387f
callq 0x2270
incq %rbx
cmpq %rbx, %r14
jne 0x380e
cmpl $0x0, -0x40(%rbp)
jle 0x3948
xorl %ebx, %ebx
movq -0xa8(%rbp), %rax
movq (%rax,%rbx,8), %rdi
testq %rdi, %rdi
je 0x38a8
callq 0x2270
movq -0xa0(%rbp), %rax
movq (%rax,%rbx,8), %rdi
testq %rdi, %rdi
je 0x38bd
callq 0x2270
movq -0xf0(%rbp), %rax
movq (%rax,%rbx,8), %rdi
testq %rdi, %rdi
je 0x38d2
callq 0x2270
movq -0xe8(%rbp), %rax
movq (%rax,%rbx,8), %rdi
testq %rdi, %rdi
je 0x38e7
callq 0x2270
movq -0xe0(%rbp), %rax
movq (%rax,%rbx,8), %rdi
testq %rdi, %rdi
je 0x38fc
callq 0x2270
movq -0xd8(%rbp), %rax
movq (%rax,%rbx,8), %rdi
testq %rdi, %rdi
je 0x3911
callq 0x2270
movq -0xd0(%rbp), %rax
movq (%rax,%rbx,8), %rdi
testq %rdi, %rdi
je 0x3926
callq 0x2270
movq -0x48(%rbp), %rax
movq (%rax,%rbx,8), %rdi
testq %rdi, %rdi
je 0x3938
callq 0x2270
incq %rbx
movslq -0x40(%rbp), %rax
cmpq %rax, %rbx
jl 0x3893
xorl %ebx, %ebx
movq -0x80(%rbp), %rax
movq (%rax,%rbx,8), %rdi
testq %rdi, %rdi
je 0x395c
callq 0x2270
movq -0x100(%rbp), %rax
movq (%rax,%rbx,8), %rdi
testq %rdi, %rdi
je 0x3971
callq 0x2270
incq %rbx
cmpq $0x3, %rbx
jne 0x394a
cmpl $0x0, -0x2c(%rbp)
jle 0x39a3
xorl %ebx, %ebx
movq -0x88(%rbp), %rax
movq (%rax,%rbx,8), %rdi
testq %rdi, %rdi
je 0x3997
callq 0x2270
incq %rbx
movslq -0x2c(%rbp), %rax
cmpq %rax, %rbx
jl 0x3982
cmpl $0x0, -0x3c(%rbp)
jle 0x39cc
xorl %ebx, %ebx
movq -0xf8(%rbp), %rax
movq (%rax,%rbx,8), %rdi
testq %rdi, %rdi
je 0x39c0
callq 0x2270
incq %rbx
movslq -0x3c(%rbp), %rax
cmpq %rax, %rbx
jl 0x39ab
movq %r15, %rdi
callq 0x2270
movq -0x60(%rbp), %rdi
callq 0x2270
movq -0x70(%rbp), %rdi
callq 0x2270
movq -0xc8(%rbp), %rdi
callq 0x2270
movq -0xc0(%rbp), %rdi
callq 0x2270
movq -0xb8(%rbp), %rdi
callq 0x2270
movq -0xa8(%rbp), %rdi
callq 0x2270
movq -0xa0(%rbp), %rdi
callq 0x2270
movq -0xf0(%rbp), %rdi
callq 0x2270
movq -0xe8(%rbp), %rdi
callq 0x2270
movq -0xe0(%rbp), %rdi
callq 0x2270
movq -0xd8(%rbp), %rdi
callq 0x2270
movq -0xd0(%rbp), %rdi
callq 0x2270
movq -0x48(%rbp), %rdi
callq 0x2270
movq -0x88(%rbp), %rdi
callq 0x2270
movq -0xf8(%rbp), %rdi
callq 0x2270
movq -0x80(%rbp), %rdi
callq 0x2270
movq -0x100(%rbp), %rdi
callq 0x2270
movl $0x0, -0x64(%rbp)
leaq -0x180(%rbp), %rdi
callq 0x3ef2
leaq -0x198(%rbp), %rdi
callq 0x3c20
leaq -0x1b0(%rbp), %rdi
callq 0x3c20
jmp 0x2695
callq 0x2140
movq %rax, %rbx
leaq -0x270(%rbp), %rdi
callq 0x3cce
jmp 0x3b61
movq %rax, %rbx
leaq -0x1f0(%rbp), %rdi
jmp 0x3af3
movq %rax, %rbx
leaq -0x208(%rbp), %rdi
callq 0x3c20
jmp 0x3b61
jmp 0x3b5e
jmp 0x3b5e
jmp 0x3b5e
jmp 0x3b5e
jmp 0x3b5e
movq %rax, %rbx
movq -0x228(%rbp), %rdi
cmpq %r14, %rdi
je 0x3b61
callq 0x21d0
jmp 0x3b61
jmp 0x3b5e
jmp 0x3b5e
jmp 0x3b5e
jmp 0x3b5e
jmp 0x3b5e
jmp 0x3b5e
jmp 0x3b5e
jmp 0x3b5e
jmp 0x3b5e
jmp 0x3b5e
jmp 0x3b5e
jmp 0x3b5e
jmp 0x3b5e
jmp 0x3b5e
jmp 0x3b5e
jmp 0x3b5e
jmp 0x3b5e
jmp 0x3b5e
jmp 0x3b5e
jmp 0x3b5e
jmp 0x3b5e
jmp 0x3b5e
jmp 0x3b5e
jmp 0x3b5e
jmp 0x3b5e
jmp 0x3b5e
jmp 0x3b5e
jmp 0x3b5e
jmp 0x3b5e
jmp 0x3b5e
jmp 0x3b5e
jmp 0x3b5e
jmp 0x3b5e
jmp 0x3b5e
movq %rax, %rbx
leaq -0x1b0(%rbp), %rdi
callq 0x3cce
jmp 0x3b72
movq %rax, %rbx
movq -0x1d8(%rbp), %rdi
leaq -0x1c8(%rbp), %rax
cmpq %rax, %rdi
je 0x3b8a
callq 0x21d0
movq %rbx, %rdi
callq 0x2380