// File: /workspace/github_cpp_makefile_star2_O3/medvedevgroup[P]varmatch/src/wholegenome.cpp
// Function: WholeGenome::ClusteringMatchMultiThread()
void WholeGenome::ClusteringMatchMultiThread() {
	int start = 0;
	int cluster_number = variants_by_cluster.size(); // cluster number
	int cluster_end_boundary = start + cluster_number; // end cluster id, exclusive
	int cluster_step = cluster_number / thread_num; // assign clusters to threads
	if (cluster_step * thread_num < cluster_number) cluster_step++;
	int end = start + cluster_step;
	//initialize vector size
	//complex_match_records = new vector<string>*[thread_num];
	match_records_by_mode_by_thread = new vector<string>**[thread_num];

    //query_matches_by_mode_by_thread = new vector<int> ** [thread_num];

	for(int i = 0; i < thread_num; i++){
        match_records_by_mode_by_thread[i] = new vector<string>*[MATCH_MODE_NUM];
        //max_path_num_by_mode_by_thread.push_back(vector<int>());
        for(int j = 0; j < MATCH_MODE_NUM; j++){
            match_records_by_mode_by_thread[i][j] = new vector<string>;
            //max_path_num_by_mode_by_thread[i].push_back(0);
        }
	}

    baseline_total_match_num = new vector<int>** [thread_num];
    query_total_match_num = new vector<int> ** [thread_num];

    baseline_total_edit_distance = new vector<int>** [thread_num];
    query_total_edit_distance = new vector<int>** [thread_num];

    for(int i = 0; i < thread_num; i++){
        
        baseline_total_match_num[i] = new vector<int>* [ROC_SAMPLE_NUM];
        query_total_match_num[i] = new vector<int>* [ROC_SAMPLE_NUM];

        baseline_total_edit_distance[i] = new vector<int> * [ROC_SAMPLE_NUM];
        query_total_edit_distance[i] = new vector<int>* [ROC_SAMPLE_NUM];

        for(int j = 0; j < ROC_SAMPLE_NUM; j++){
            baseline_total_match_num[i][j] = new vector<int>;
            baseline_total_match_num[i][j]->resize(MATCH_MODE_NUM, 0);
            query_total_match_num[i][j] = new vector<int>;
            query_total_match_num[i][j]->resize(MATCH_MODE_NUM, 0);

            baseline_total_edit_distance[i][j] = new vector<int>;
            baseline_total_edit_distance[i][j]->resize(MATCH_MODE_NUM, 0);
            query_total_edit_distance[i][j] = new vector<int>;
            query_total_edit_distance[i][j]->resize(MATCH_MODE_NUM, 0);
        }
    }

	vector<thread> threads;
	//spawn threads
	unsigned i = 0;
	for (; i < thread_num - 1; i++) {
		threads.push_back(thread(&WholeGenome::ClusteringMatchInThread, this, start, end, i));
		start = end;
		end = start + cluster_step;
	}
	// also you need to do a job in main thread
	// i equals to (thread_num - 1)
	if (i != thread_num - 1) {
		dout << "[Error] thread number not match" << endl;
	}
	if (start >= variants_by_cluster.size()) {
		dout << "[Error] index out of map range" << endl;
	}
	else {
		ClusteringMatchInThread(start, end, i);
	}

	// call join() on each thread in turn before this function?
    std::for_each(threads.begin(), threads.end(), std::mem_fn(&std::thread::join));

    //output all results
    cout << "writing results..." << endl;
    ofstream output_stat_file;
    output_stat_file.open(output_dir + "/" + output_prefix+".stat");

    cout << "=========VarMatch Result Stat.=======" << endl;
    string stat_head_string = "#score_unit\tmatch_mode\tscore_unit\tqual_threshold\tbaseline_match_num\tquery_match_num\tquery_total_num\tbaseline_total_ED\tquery_total_ED";
    cout << stat_head_string << endl;
    output_stat_file << "##Baseline:" << baseline_variant_total_num << endl;
    output_stat_file << "##Query:"<< query_variant_total_num << endl;
    output_stat_file << stat_head_string << endl;

    int score_unit;
    int match_mode;
    int score_scheme;

    for(int x = 0; x < score_unit_list.size(); x++){
        score_unit = score_unit_list[x];
        for(int y = 0; y < match_mode_list.size(); y++){
            match_mode = match_mode_list[y];
            for(int z = 0; z < score_scheme_list.size(); z++){
                score_scheme = score_scheme_list[z];
                int mode_index = GetIndexFromMatchScore(score_unit, match_mode, score_scheme);
                int total_ref_complex = 0;
                int total_que_complex = 0;

                string threshold_string = "";
                string baseline_match_num_string = "";
                string query_match_num_string = "";
                string query_total_num_string = "";

                string baseline_edit_distance_string = "";
                string query_edit_distance_string = "";

                for(int t = 0; t < threshold_num; t++){
                    
                    threshold_string += to_string(threshold_list[t]);

                    int baseline_match_num_by_threshold_by_mode = 0;
                    int query_match_num_by_threshold_by_mode = 0;

                    int baseline_edit_distance_by_threshold_by_mode = 0;
                    int query_edit_distance_by_threshold_by_mode = 0;

                    for(int i = 0; i < thread_num; i++){
                        baseline_match_num_by_threshold_by_mode += baseline_total_match_num[i][t]->at(mode_index);
                        query_match_num_by_threshold_by_mode += query_total_match_num[i][t]->at(mode_index);

                        baseline_edit_distance_by_threshold_by_mode += baseline_total_edit_distance[i][t]->at(mode_index);
                        query_edit_distance_by_threshold_by_mode += query_total_edit_distance[i][t]->at(mode_index);
                    }

                    baseline_match_num_string += to_string(baseline_match_num_by_threshold_by_mode);
                    query_match_num_string += to_string(query_match_num_by_threshold_by_mode);
                    query_total_num_string += to_string((int)(query_variant_total_num * (1-per_list[t])) );

                    baseline_edit_distance_string += to_string(baseline_edit_distance_by_threshold_by_mode);
                    query_edit_distance_string += to_string(query_edit_distance_by_threshold_by_mode);

                    if(t < threshold_num-1){
                        threshold_string += ",";
                        baseline_match_num_string += ",";
                        query_match_num_string += ",";
                        query_total_num_string += ",";
                        baseline_edit_distance_string += ",";
                        query_edit_distance_string += ",";
                    }
                                  
                }

                string total_match_num_string = to_string(score_unit) + "\t" +
                                                to_string(match_mode) + "\t" + 
                                                to_string(score_scheme) + "\t" +
                                                threshold_string + "\t" +
                                                baseline_match_num_string + "\t" + 
                                                query_match_num_string + "\t" + 
                                                query_total_num_string;// + "\t" + to_string(mode_index);
                cout << total_match_num_string << "\t" << baseline_edit_distance_string << "\t" << query_edit_distance_string << endl;;
                output_stat_file << total_match_num_string << endl;
            }
        }
    }
    output_stat_file.close();

    int bench_mode_index = GetIndexFromMatchScore(0, 0, 0);

    for(int x = 0; x < score_unit_list.size(); x++){
        score_unit = score_unit_list[x];
        for(int y = 0; y < match_mode_list.size(); y++){
            match_mode = match_mode_list[y];
            for(int z = 0; z < score_scheme_list.size(); z++){
                score_scheme = score_scheme_list[z];
                int mode_index = GetIndexFromMatchScore(score_unit, match_mode, score_scheme);
                string filename_index = to_string(score_unit) + "_" + to_string(match_mode) + "_" + to_string(score_scheme);
                
                ofstream output_complex_file;
                output_complex_file.open(output_dir + "/" + output_prefix+"."+filename_index+".match");

                output_complex_file << "##VCF1:" << ref_vcf_filename << endl;
                output_complex_file << "##VCF2:" << que_vcf_filename << endl;
                output_complex_file << "#CHROM\tPOS\tREF\tALT\tVCF1\tVCF2\tPHASE1\tPHASE2\tSCORE" << endl;

                for(int i = 0; i < thread_num; i++){
                    for(int k = 0; k < match_records_by_mode_by_thread[i][mode_index]->size(); k++){
                        if (match_records_by_mode_by_thread[i][mode_index]->at(k).find_first_not_of(' ') != std::string::npos) {
                            //if(match_records_by_mode_by_thread[i][mode_index]->at(k)[0] == '$'){
                                //int bench_mode_index = stoi(match_records_by_mode_by_thread[i][mode_index]->at(k).erase(0,1));
                                //output_complex_file << match_records_by_mode_by_thread[i][0]->at(k);
                            //}else{
                                output_complex_file << match_records_by_mode_by_thread[i][mode_index]->at(k);
                            //}
                        }
                    }
                }
                output_complex_file.close();
            }
        }
    }

    // int max_path_num = 0;
    // for(int i = 0; i < thread_num; i++){
    //     for(int j = 0; j < MATCH_MODE_NUM; j++){
    //         max_path_num = max(max_path_num, max_path_num_by_mode_by_thread[i][j]);
    //         //max_path_num += max_path_num_by_mode_by_thread[i][j];
    //     }
    // }

    //cout << "max path number: " << max_path_num << endl;

    // clear all matching records
	for(int i = 0; i < thread_num; i++){
        for(int j = 0; j < MATCH_MODE_NUM; j++){
            delete match_records_by_mode_by_thread[i][j];

        }
        for(int j = 0; j < ROC_SAMPLE_NUM; j++){
            delete baseline_total_match_num[i][j];
            delete query_total_match_num[i][j];

            delete baseline_total_edit_distance[i][j];
            delete query_total_edit_distance[i][j];
        }
        delete[] match_records_by_mode_by_thread[i];
        delete[] baseline_total_match_num[i];
        delete[] query_total_match_num[i];
        
        delete[] baseline_total_edit_distance[i];
        delete[] query_total_edit_distance[i];
	}
	delete[] match_records_by_mode_by_thread;
    delete[] baseline_total_match_num;
    delete[] query_total_match_num;

    delete[] baseline_total_edit_distance;
    delete[] query_total_edit_distance;
    //max_path_num_by_mode_by_thread.clear();

}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x738, %rsp            # imm = 0x738
movq %rdi, %r12
movl $0x0, 0xec(%rsp)
movq 0x168(%rdi), %rax
subq 0x160(%rdi), %rax
shrq $0x3, %rax
imull $0xaaaaaaab, %eax, %ecx # imm = 0xAAAAAAAB
movslq 0x4(%rdi), %r15
movl %ecx, %eax
cltd
idivl %r15d
movl %eax, %edx
imull %r15d, %edx
xorl %ebx, %ebx
cmpl %ecx, %edx
setl %bl
addl %eax, %ebx
leaq (,%r15,8), %rax
testq %r15, %r15
movl %ebx, 0xbc(%rsp)
movq $-0x1, %r14
cmovnsq %rax, %r14
movq %r14, %rdi
callq 0x5030
movq %r12, 0xb0(%rsp)
movq %rax, 0x178(%r12)
testq %r15, %r15
jle 0x23599
xorl %r12d, %r12d
movq 0xb0(%rsp), %rbp
movl $0x80, %edi
callq 0x5030
movq 0x178(%rbp), %rcx
movq %rax, (%rcx,%r12,8)
xorl %r13d, %r13d
movl $0x18, %edi
callq 0x5330
xorps %xmm0, %xmm0
movups %xmm0, (%rax)
movq $0x0, 0x10(%rax)
movq 0x178(%rbp), %rcx
movq (%rcx,%r12,8), %rcx
movq %rax, (%rcx,%r13,8)
incq %r13
cmpq $0x10, %r13
jne 0x23561
incq %r12
cmpq %r15, %r12
jne 0x23549
movq %r14, %rdi
callq 0x5030
movq 0xb0(%rsp), %r12
movq %rax, 0x180(%r12)
movq %r14, %rdi
callq 0x5030
movq %rax, 0x188(%r12)
movq %r14, %rdi
callq 0x5030
movq %rax, 0x190(%r12)
movq %r14, %rdi
callq 0x5030
movq %rax, 0x198(%r12)
testl %r15d, %r15d
jle 0x237b8
xorl %r15d, %r15d
leaq 0x538(%rsp), %r14
movq %r12, %rbp
xorl %r12d, %r12d
movl $0x28, %edi
callq 0x5030
movq 0x180(%rbp), %rcx
movq %rax, (%rcx,%r12,8)
movl $0x28, %edi
callq 0x5030
movq 0x188(%rbp), %rcx
movq %rax, (%rcx,%r12,8)
movl $0x28, %edi
callq 0x5030
movq 0x190(%rbp), %rcx
movq %rax, (%rcx,%r12,8)
movl $0x28, %edi
callq 0x5030
movq 0x198(%rbp), %rcx
movq %rax, (%rcx,%r12,8)
xorl %r13d, %r13d
movl $0x18, %edi
callq 0x5330
xorps %xmm0, %xmm0
movups %xmm0, (%rax)
movq %r15, 0x10(%rax)
movq 0x180(%rbp), %rcx
movq (%rcx,%r12,8), %rcx
movq %rax, (%rcx,%r13)
movq 0x180(%rbp), %rax
movq (%rax,%r12,8), %rax
movq (%rax,%r13), %rdi
movl %r15d, 0x538(%rsp)
movl $0x10, %esi
movq %r14, %rdx
callq 0x295f2
movl $0x18, %edi
callq 0x5330
xorps %xmm0, %xmm0
movups %xmm0, (%rax)
movq %r15, 0x10(%rax)
movq 0x188(%rbp), %rcx
movq (%rcx,%r12,8), %rcx
movq %rax, (%rcx,%r13)
movq 0x188(%rbp), %rax
movq (%rax,%r12,8), %rax
movq (%rax,%r13), %rdi
movl %r15d, 0x538(%rsp)
movl $0x10, %esi
movq %r14, %rdx
callq 0x295f2
movl $0x18, %edi
callq 0x5330
xorps %xmm0, %xmm0
movups %xmm0, (%rax)
movq %r15, 0x10(%rax)
movq 0x190(%rbp), %rcx
movq (%rcx,%r12,8), %rcx
movq %rax, (%rcx,%r13)
movq 0x190(%rbp), %rax
movq (%rax,%r12,8), %rax
movq (%rax,%r13), %rdi
movl %r15d, 0x538(%rsp)
movl $0x10, %esi
movq %r14, %rdx
callq 0x295f2
movl $0x18, %edi
callq 0x5330
xorps %xmm0, %xmm0
movups %xmm0, (%rax)
movq %r15, 0x10(%rax)
movq 0x198(%rbp), %rcx
movq (%rcx,%r12,8), %rcx
movq %rax, (%rcx,%r13)
movq 0x198(%rbp), %rax
movq (%rax,%r12,8), %rax
movq (%rax,%r13), %rdi
movl %r15d, 0x538(%rsp)
movl $0x10, %esi
movq %r14, %rdx
callq 0x295f2
addq $0x8, %r13
cmpq $0x28, %r13
jne 0x23652
incq %r12
movslq 0x4(%rbp), %rax
cmpq %rax, %r12
jl 0x235fb
xorps %xmm0, %xmm0
movaps %xmm0, 0x220(%rsp)
movq $0x0, 0x230(%rsp)
movl $0x0, 0x44(%rsp)
cmpl $0x1, %eax
movq %rbp, %r12
jne 0x237d7
jmp 0x238ba
xorps %xmm0, %xmm0
movaps %xmm0, 0x220(%rsp)
movq $0x0, 0x230(%rsp)
movl $0x0, 0x44(%rsp)
leaq -0xcce8(%rip), %rax     # 0x16af6
leaq 0x538(%rsp), %rsi
movq %rax, (%rsi)
movq $0x0, 0x8(%rsi)
leaq 0xf8(%rsp), %rdx
movq %r12, (%rdx)
leaq 0x338(%rsp), %rdi
leaq 0xec(%rsp), %rcx
leaq 0xbc(%rsp), %r8
leaq 0x44(%rsp), %r9
callq 0x29626
leaq 0x220(%rsp), %rdi
leaq 0x338(%rsp), %rsi
callq 0x2be7c
cmpq $0x0, 0x338(%rsp)
jne 0x25f2e
movl 0xbc(%rsp), %eax
movl %eax, 0xec(%rsp)
addl %ebx, %eax
movl %eax, 0xbc(%rsp)
movl 0x44(%rsp), %eax
incl %eax
movl %eax, 0x44(%rsp)
movl 0x4(%r12), %ecx
decl %ecx
cmpl %ecx, %eax
jb 0x237d7
je 0x238ba
movq 0x19755(%rip), %r14     # 0x3cfd0
leaq 0xe023(%rip), %rsi      # 0x318a5
movl $0x1f, %edx
movq %r14, %rdi
callq 0x53a0
movq (%r14), %rax
addq -0x18(%rax), %r14
movq %r14, %rdi
movl $0xa, %esi
callq 0x5310
movsbl %al, %esi
movq 0x19723(%rip), %rdi     # 0x3cfd0
callq 0x5040
movq %rax, %rdi
callq 0x5240
movslq 0xec(%rsp), %rsi
movq 0x168(%r12), %rax
subq 0x160(%r12), %rax
sarq $0x3, %rax
movabsq $-0x5555555555555555, %rcx # imm = 0xAAAAAAAAAAAAAAAB
imulq %rax, %rcx
cmpq %rsi, %rcx
jbe 0x238fe
movl 0xbc(%rsp), %edx
movl 0x44(%rsp), %ecx
movq %r12, %rdi
callq 0x16af6
jmp 0x23944
movq 0x196cb(%rip), %r14     # 0x3cfd0
leaq 0xdfb9(%rip), %rsi      # 0x318c5
movl $0x1e, %edx
movq %r14, %rdi
callq 0x53a0
movq (%r14), %rax
addq -0x18(%rax), %r14
movq %r14, %rdi
movl $0xa, %esi
callq 0x5310
movsbl %al, %esi
movq 0x19699(%rip), %rdi     # 0x3cfd0
callq 0x5040
movq %rax, %rdi
callq 0x5240
movq 0x220(%rsp), %r14
movq 0x228(%rsp), %rbx
cmpq %rbx, %r14
je 0x23967
movq %r14, %rdi
callq 0x5580
addq $0x8, %r14
jmp 0x23954
movq 0x19662(%rip), %r14     # 0x3cfd0
leaq 0xdf6f(%rip), %rsi      # 0x318e4
movl $0x12, %edx
movq %r14, %rdi
callq 0x53a0
movq (%r14), %rax
addq -0x18(%rax), %r14
movq %r14, %rdi
movl $0xa, %esi
callq 0x5310
movsbl %al, %esi
movq 0x19630(%rip), %rdi     # 0x3cfd0
callq 0x5040
movq %rax, %rdi
callq 0x5240
leaq 0x538(%rsp), %rdi
callq 0x5570
leaq 0x30(%rsp), %r13
movq %r13, -0x10(%r13)
movq 0x1c0(%r12), %rsi
movq 0x1c8(%r12), %rdx
addq %rsi, %rdx
leaq 0x20(%rsp), %rdi
callq 0x1123c
leaq 0xdc0c(%rip), %rsi      # 0x315f3
leaq 0x20(%rsp), %rdi
callq 0x5630
movq 0x1a0(%r12), %rsi
movq 0x1a8(%r12), %rdx
leaq 0x20(%rsp), %rdi
callq 0x50f0
leaq 0x108(%rsp), %rsi
movq %rsi, -0x10(%rsi)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x23a3b
movq %rdx, 0xf8(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x108(%rsp)
jmp 0x23a41
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0x8(%rax), %rdx
leaq 0xf8(%rsp), %rdi
movq %rdx, 0x8(%rdi)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0xde90(%rip), %rsi      # 0x318f7
callq 0x5630
leaq 0x348(%rsp), %rsi
movq %rsi, -0x10(%rsi)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x23a9c
movq %rdx, 0x338(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x348(%rsp)
jmp 0x23aa2
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0x8(%rax), %rdx
leaq 0x338(%rsp), %rsi
movq %rdx, 0x8(%rsi)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0x538(%rsp), %rdi
movl $0x10, %edx
callq 0x5160
movq 0x338(%rsp), %rdi
leaq 0x348(%rsp), %rax
cmpq %rax, %rdi
je 0x23af8
movq 0x348(%rsp), %rsi
incq %rsi
callq 0x5340
movq 0xf8(%rsp), %rdi
leaq 0x108(%rsp), %rax
cmpq %rax, %rdi
je 0x23b1d
movq 0x108(%rsp), %rsi
incq %rsi
callq 0x5340
movq 0x20(%rsp), %rdi
cmpq %r13, %rdi
je 0x23b34
movq 0x30(%rsp), %rsi
incq %rsi
callq 0x5340
movq 0x19495(%rip), %r14     # 0x3cfd0
leaq 0xddbb(%rip), %rsi      # 0x318fd
movl $0x25, %edx
movq %r14, %rdi
callq 0x53a0
movq (%r14), %rax
addq -0x18(%rax), %r14
movq %r14, %rdi
movl $0xa, %esi
callq 0x5310
movsbl %al, %esi
movq 0x19463(%rip), %rdi     # 0x3cfd0
callq 0x5040
movq %rax, %rdi
callq 0x5240
leaq 0xf8(%rsp), %rdi
leaq 0x108(%rsp), %rax
movq %rax, (%rdi)
leaq 0x338(%rsp), %rsi
movq $0x84, (%rsi)
xorl %edx, %edx
callq 0x55d0
movq %rax, %r15
movq %rax, 0xf8(%rsp)
movq 0x338(%rsp), %rbx
movq %rbx, 0x108(%rsp)
leaq 0xdd5e(%rip), %rsi      # 0x31923
movl $0x84, %edx
movq %rax, %rdi
callq 0x52b0
movq %rbx, 0x100(%rsp)
movb $0x0, (%r15,%rbx)
movq 0xf8(%rsp), %rsi
movq 0x100(%rsp), %rdx
movq 0x193da(%rip), %rdi     # 0x3cfd0
callq 0x53a0
movq %rax, %r15
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r15, %rdi
movl $0xa, %esi
callq 0x5310
movsbl %al, %esi
movq %r15, %rdi
callq 0x5040
movq %rax, %rdi
callq 0x5240
leaq 0xdd7c(%rip), %rsi      # 0x319a8
leaq 0x538(%rsp), %rdi
movl $0xb, %edx
callq 0x53a0
movl 0x48(%r12), %esi
leaq 0x538(%rsp), %rdi
callq 0x55a0
movq %rax, %r15
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r15, %rdi
movl $0xa, %esi
callq 0x5310
movsbl %al, %esi
movq %r15, %rdi
callq 0x5040
movq %rax, %rdi
callq 0x5240
leaq 0xdd33(%rip), %rsi      # 0x319b4
leaq 0x538(%rsp), %rdi
movl $0x8, %edx
callq 0x53a0
movl 0x4c(%r12), %esi
leaq 0x538(%rsp), %rdi
callq 0x55a0
movq %rax, %r15
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r15, %rdi
movl $0xa, %esi
callq 0x5310
movsbl %al, %esi
movq %r15, %rdi
callq 0x5040
movq %rax, %rdi
callq 0x5240
movq 0xf8(%rsp), %rsi
movq 0x100(%rsp), %rdx
leaq 0x538(%rsp), %rdi
callq 0x53a0
movq %rax, %r15
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r15, %rdi
movl $0xa, %esi
callq 0x5310
movsbl %al, %esi
movq %r15, %rdi
callq 0x5040
movq %rax, %rdi
callq 0x5240
movq 0x1f0(%r12), %rdx
movq 0x1f8(%r12), %rsi
cmpq %rdx, %rsi
je 0x250a3
leaq 0x210(%rsp), %r14
movq 0x208(%r12), %rax
movq 0x210(%r12), %rcx
movq %rcx, %rdi
movq $0x0, 0x158(%rsp)
cmpq %rax, %rdi
je 0x2507a
movq 0x158(%rsp), %rsi
movl (%rdx,%rsi,4), %edx
leal (%rdx,%rdx), %esi
andl $0x2, %esi
movl %esi, 0x1b8(%rsp)
movl %edx, %esi
negl %esi
cmovsl %edx, %esi
movl %esi, 0xf0(%rsp)
shrl $0x1f, %edx
movq %rdx, 0x138(%rsp)
movq 0x220(%r12), %rdx
movq 0x228(%r12), %rsi
movq $0x0, 0x160(%rsp)
cmpq %rdx, %rsi
je 0x2503c
movq 0x160(%rsp), %rcx
movl (%rax,%rcx,4), %eax
movl %eax, %ecx
andl $0x1, %ecx
orl 0x1b8(%rsp), %ecx
shll $0x2, %ecx
movl %ecx, 0x1bc(%rsp)
movl %eax, %ecx
negl %ecx
cmovsl %eax, %ecx
movl %ecx, 0xb8(%rsp)
shrl $0x1f, %eax
movq %rax, 0x150(%rsp)
xorl %eax, %eax
movq %rax, 0x168(%rsp)
movl (%rdx,%rax,4), %eax
movq %rax, 0xa8(%rsp)
leaq 0x348(%rsp), %rax
movq %rax, 0x338(%rsp)
xorl %ecx, %ecx
movq %rcx, 0x340(%rsp)
movb %cl, 0x348(%rsp)
movq %r13, 0x20(%rsp)
movq %rcx, 0x28(%rsp)
movb %cl, 0x30(%rsp)
leaq 0x58(%rsp), %rax
movq %rax, 0x48(%rsp)
movq %rcx, 0x50(%rsp)
movb %cl, 0x58(%rsp)
leaq 0x98(%rsp), %rax
movq %rax, 0x88(%rsp)
movq %rcx, 0x90(%rsp)
movb %cl, 0x98(%rsp)
leaq 0xd0(%rsp), %rax
movq %rax, 0xc0(%rsp)
movq %rcx, 0xc8(%rsp)
movb %cl, 0xd0(%rsp)
leaq 0x78(%rsp), %rax
movq %rax, 0x68(%rsp)
movq %rcx, 0x70(%rsp)
movb %cl, 0x78(%rsp)
cmpl $0x0, 0x268(%r12)
jle 0x2448f
movq 0xa8(%rsp), %rax
movl %eax, %r15d
andl $0x3, %r15d
orl 0x1bc(%rsp), %r15d
xorl %ebp, %ebp
movq %r15, 0x170(%rsp)
movq 0x250(%r12), %rax
movsd (%rax,%rbp,8), %xmm0
movl $0x148, %edx            # imm = 0x148
movq %rsp, %rdi
movq 0x190c5(%rip), %rsi     # 0x3cfa8
leaq 0xdbef(%rip), %rcx      # 0x31ad9
movb $0x1, %al
callq 0x2aa44
movq (%rsp), %rsi
movq 0x8(%rsp), %rdx
leaq 0x338(%rsp), %rdi
callq 0x50f0
movq (%rsp), %rdi
leaq 0x10(%rsp), %rax
cmpq %rax, %rdi
je 0x23f22
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x5340
movslq 0x4(%r12), %rax
testq %rax, %rax
jle 0x2402b
movq 0x180(%r12), %rcx
movq %rcx, 0xe0(%rsp)
movq 0x188(%r12), %rcx
movq %rcx, 0x148(%rsp)
movq 0x190(%r12), %rdi
movq 0x198(%r12), %r8
xorl %r9d, %r9d
xorl %r14d, %r14d
xorl %ebx, %ebx
xorl %r12d, %r12d
xorl %r13d, %r13d
movq 0xe0(%rsp), %rcx
movq (%rcx,%r9,8), %rdx
movq (%rdx,%rbp,8), %rdx
movq (%rdx), %r10
movq 0x8(%rdx), %rdx
subq %r10, %rdx
sarq $0x2, %rdx
cmpq %r15, %rdx
movq %r15, %rsi
jbe 0x25e5f
movq %rbp, %rcx
movq 0x148(%rsp), %rdx
movq (%rdx,%r9,8), %rdx
movq (%rdx,%rbp,8), %rdx
movq (%rdx), %r11
movq 0x8(%rdx), %rdx
subq %r11, %rdx
sarq $0x2, %rdx
cmpq %rsi, %rdx
jbe 0x25e5f
movq (%rdi,%r9,8), %rdx
movq (%rdx,%rcx,8), %rdx
movq (%rdx), %rbp
movq 0x8(%rdx), %rdx
subq %rbp, %rdx
sarq $0x2, %rdx
cmpq %rsi, %rdx
jbe 0x25e5f
movq (%r8,%r9,8), %rdx
movq (%rdx,%rcx,8), %rdx
movq (%rdx), %r15
movq 0x8(%rdx), %rdx
subq %r15, %rdx
sarq $0x2, %rdx
cmpq %rsi, %rdx
jbe 0x25e5f
addl (%r10,%rsi,4), %r13d
addl (%r11,%rsi,4), %r12d
leal (,%rsi,4), %edx
addl (%rbp,%rdx), %ebx
addl (%r15,%rdx), %r14d
incq %r9
cmpq %r9, %rax
movq %rsi, %r15
movq %rcx, %rbp
jne 0x23f6e
jmp 0x24036
xorl %r13d, %r13d
xorl %r12d, %r12d
xorl %ebx, %ebx
xorl %r14d, %r14d
movq %rbp, 0x140(%rsp)
movl %r13d, %esi
negl %esi
cmovsl %r13d, %esi
movl $0x1, %ebp
cmpl $0xa, %esi
jb 0x24092
movl $0x4, %ebp
movl %esi, %eax
movl $0xd1b71759, %edx       # imm = 0xD1B71759
cmpl $0x63, %eax
jbe 0x2408b
cmpl $0x3e7, %eax            # imm = 0x3E7
jbe 0x24090
cmpl $0x2710, %eax           # imm = 0x2710
jb 0x24092
movl %eax, %ecx
imulq %rdx, %rcx
shrq $0x2d, %rcx
addl $0x4, %ebp
cmpl $0x1869f, %eax          # imm = 0x1869F
movl %ecx, %eax
ja 0x2405d
addl $-0x3, %ebp
jmp 0x24092
addl $-0x2, %ebp
jmp 0x24092
decl %ebp
movl %esi, 0xe0(%rsp)
shrl $0x1f, %r13d
leal (%rbp,%r13), %esi
leaq 0x10(%rsp), %rax
movq %rax, (%rsp)
movq %rsp, %rdi
movl $0x2d, %edx
callq 0x53b0
movl %r13d, %edi
addq (%rsp), %rdi
movl %ebp, %esi
movl 0xe0(%rsp), %edx
callq 0xe33a
movq (%rsp), %rsi
movq 0x8(%rsp), %rdx
leaq 0x20(%rsp), %rdi
callq 0x50f0
movq (%rsp), %rdi
leaq 0x10(%rsp), %r15
cmpq %r15, %rdi
je 0x240fb
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x5340
movl %r12d, %r13d
negl %r13d
cmovsl %r12d, %r13d
movl $0x1, %ebp
cmpl $0xa, %r13d
jb 0x24152
movl $0x4, %ebp
movl %r13d, %eax
movl $0xd1b71759, %edx       # imm = 0xD1B71759
cmpl $0x63, %eax
jbe 0x2414b
cmpl $0x3e7, %eax            # imm = 0x3E7
jbe 0x24150
cmpl $0x2710, %eax           # imm = 0x2710
jb 0x24152
movl %eax, %ecx
imulq %rdx, %rcx
shrq $0x2d, %rcx
addl $0x4, %ebp
cmpl $0x1869f, %eax          # imm = 0x1869F
movl %ecx, %eax
ja 0x2411d
addl $-0x3, %ebp
jmp 0x24152
addl $-0x2, %ebp
jmp 0x24152
decl %ebp
shrl $0x1f, %r12d
leal (%r12,%rbp), %esi
movq %r15, (%rsp)
movq %rsp, %rdi
movl $0x2d, %edx
callq 0x53b0
movl %r12d, %edi
addq (%rsp), %rdi
movl %ebp, %esi
movl %r13d, %edx
callq 0xe33a
movq (%rsp), %rsi
movq 0x8(%rsp), %rdx
leaq 0x48(%rsp), %rdi
callq 0x50f0
movq (%rsp), %rdi
cmpq %r15, %rdi
je 0x241a5
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x5340
movq 0xb0(%rsp), %rax
cvtsi2ssl 0x4c(%rax), %xmm0
movq 0x270(%rax), %rax
movss 0xd143(%rip), %xmm1     # 0x31304
movq 0x140(%rsp), %rcx
subss (%rax,%rcx,4), %xmm1
mulss %xmm0, %xmm1
cvttss2si %xmm1, %r13d
movl %r13d, %r12d
negl %r12d
cmovsl %r13d, %r12d
movl $0x1, %ebp
cmpl $0xa, %r12d
jb 0x2422e
movl $0x4, %ebp
movl %r12d, %eax
movl $0xd1b71759, %edx       # imm = 0xD1B71759
cmpl $0x63, %eax
jbe 0x24227
cmpl $0x3e7, %eax            # imm = 0x3E7
jbe 0x2422c
cmpl $0x2710, %eax           # imm = 0x2710
jb 0x2422e
movl %eax, %ecx
imulq %rdx, %rcx
shrq $0x2d, %rcx
addl $0x4, %ebp
cmpl $0x1869f, %eax          # imm = 0x1869F
movl %ecx, %eax
ja 0x241f9
addl $-0x3, %ebp
jmp 0x2422e
addl $-0x2, %ebp
jmp 0x2422e
decl %ebp
shrl $0x1f, %r13d
leal (%rbp,%r13), %esi
leaq 0x10(%rsp), %rax
movq %rax, (%rsp)
movq %rsp, %rdi
movl $0x2d, %edx
callq 0x53b0
movl %r13d, %edi
addq (%rsp), %rdi
movl %ebp, %esi
movl %r12d, %edx
callq 0xe33a
movq (%rsp), %rsi
movq 0x8(%rsp), %rdx
leaq 0x88(%rsp), %rdi
callq 0x50f0
movq (%rsp), %rdi
leaq 0x10(%rsp), %r15
cmpq %r15, %rdi
je 0x2428f
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x5340
movl %ebx, %r12d
negl %r12d
cmovsl %ebx, %r12d
movl $0x1, %ebp
cmpl $0xa, %r12d
jb 0x242e6
movl $0x4, %ebp
movl %r12d, %eax
movl $0xd1b71759, %edx       # imm = 0xD1B71759
cmpl $0x63, %eax
jbe 0x242df
cmpl $0x3e7, %eax            # imm = 0x3E7
jbe 0x242e4
cmpl $0x2710, %eax           # imm = 0x2710
jb 0x242e6
movl %eax, %ecx
imulq %rdx, %rcx
shrq $0x2d, %rcx
addl $0x4, %ebp
cmpl $0x1869f, %eax          # imm = 0x1869F
movl %ecx, %eax
ja 0x242b1
addl $-0x3, %ebp
jmp 0x242e6
addl $-0x2, %ebp
jmp 0x242e6
decl %ebp
shrl $0x1f, %ebx
leal (%rbx,%rbp), %esi
movq %r15, (%rsp)
movq %rsp, %rdi
movl $0x2d, %edx
callq 0x53b0
movl %ebx, %edi
addq (%rsp), %rdi
movl %ebp, %esi
movl %r12d, %edx
callq 0xe33a
movq (%rsp), %rsi
movq 0x8(%rsp), %rdx
leaq 0xc0(%rsp), %rdi
callq 0x50f0
movq (%rsp), %rdi
cmpq %r15, %rdi
je 0x24339
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x5340
movl %r14d, %r12d
negl %r12d
cmovsl %r14d, %r12d
movl $0x1, %ebp
cmpl $0xa, %r12d
jb 0x24390
movl $0x4, %ebp
movl %r12d, %eax
movl $0xd1b71759, %edx       # imm = 0xD1B71759
cmpl $0x63, %eax
jbe 0x24389
cmpl $0x3e7, %eax            # imm = 0x3E7
jbe 0x2438e
cmpl $0x2710, %eax           # imm = 0x2710
jb 0x24390
movl %eax, %ecx
imulq %rdx, %rcx
shrq $0x2d, %rcx
addl $0x4, %ebp
cmpl $0x1869f, %eax          # imm = 0x1869F
movl %ecx, %eax
ja 0x2435b
addl $-0x3, %ebp
jmp 0x24390
addl $-0x2, %ebp
jmp 0x24390
decl %ebp
shrl $0x1f, %r14d
leal (%r14,%rbp), %esi
movq %r15, (%rsp)
movq %rsp, %rdi
movl $0x2d, %edx
callq 0x53b0
movl %r14d, %edi
addq (%rsp), %rdi
movl %ebp, %esi
movl %r12d, %edx
callq 0xe33a
movq (%rsp), %rsi
movq 0x8(%rsp), %rdx
leaq 0x68(%rsp), %rdi
callq 0x50f0
movq (%rsp), %rdi
cmpq %r15, %rdi
leaq 0x30(%rsp), %r13
je 0x243e8
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x5340
movq 0xb0(%rsp), %r12
movslq 0x268(%r12), %rax
movq %rax, %rcx
decq %rcx
movq 0x140(%rsp), %rbp
cmpq %rcx, %rbp
leaq 0x210(%rsp), %r14
leaq 0xd179(%rip), %rbx      # 0x31591
movq 0x170(%rsp), %r15
jge 0x24481
leaq 0x338(%rsp), %rdi
movq %rbx, %rsi
callq 0x5630
leaq 0x20(%rsp), %rdi
movq %rbx, %rsi
callq 0x5630
leaq 0x48(%rsp), %rdi
movq %rbx, %rsi
callq 0x5630
leaq 0x88(%rsp), %rdi
movq %rbx, %rsi
callq 0x5630
leaq 0xc0(%rsp), %rdi
movq %rbx, %rsi
callq 0x5630
leaq 0x68(%rsp), %rdi
movq %rbx, %rsi
callq 0x5630
movl 0x268(%r12), %eax
incq %rbp
cltq
cmpq %rax, %rbp
jl 0x23ec7
movl $0x1, %r15d
cmpl $0xa, 0xf0(%rsp)
leaq 0x318(%rsp), %rbx
movq 0x138(%rsp), %r12
jb 0x244fa
movl $0x4, %r15d
movl 0xf0(%rsp), %eax
movl $0xd1b71759, %edx       # imm = 0xD1B71759
cmpl $0x63, %eax
jbe 0x244f1
cmpl $0x3e7, %eax            # imm = 0x3E7
jbe 0x244f7
cmpl $0x2710, %eax           # imm = 0x2710
jb 0x244fa
movl %eax, %ecx
imulq %rdx, %rcx
shrq $0x2d, %rcx
addl $0x4, %r15d
cmpl $0x1869f, %eax          # imm = 0x1869F
movl %ecx, %eax
ja 0x244c1
addl $-0x3, %r15d
jmp 0x244fa
addl $-0x2, %r15d
jmp 0x244fa
decl %r15d
leal (%r15,%r12), %esi
leaq 0x328(%rsp), %rax
movq %rax, 0x318(%rsp)
movq %rbx, %rdi
movl $0x2d, %edx
callq 0x53b0
movq 0x318(%rsp), %rdi
addq %r12, %rdi
movl %r15d, %esi
movl 0xf0(%rsp), %edx
callq 0xe33a
movq %rbx, %rdi
leaq 0xd0b2(%rip), %rsi      # 0x315f1
callq 0x5630
leaq 0x188(%rsp), %rsi
movq %rsi, 0x178(%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x24578
movq %rdx, 0x178(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x188(%rsp)
jmp 0x2457e
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0x150(%rsp), %rbx
movl 0xb8(%rsp), %ebp
movq 0x8(%rax), %rdx
movq %rdx, 0x180(%rsp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movl $0x1, %r15d
cmpl $0xa, %ebp
jb 0x245f9
movl $0x4, %r15d
movl %ebp, %eax
movl $0xd1b71759, %edx       # imm = 0xD1B71759
cmpl $0x63, %eax
jbe 0x245f0
cmpl $0x3e7, %eax            # imm = 0x3E7
jbe 0x245f6
cmpl $0x2710, %eax           # imm = 0x2710
jb 0x245f9
movl %eax, %ecx
imulq %rdx, %rcx
shrq $0x2d, %rcx
addl $0x4, %r15d
cmpl $0x1869f, %eax          # imm = 0x1869F
movl %ecx, %eax
ja 0x245c0
addl $-0x3, %r15d
jmp 0x245f9
addl $-0x2, %r15d
jmp 0x245f9
decl %r15d
leal (%r15,%rbx), %esi
leaq 0x1f0(%rsp), %rax
movq %rax, 0x1e0(%rsp)
leaq 0x1e0(%rsp), %rdi
movl $0x2d, %edx
callq 0x53b0
movq 0x1e0(%rsp), %rdi
addq %rbx, %rdi
movl %r15d, %esi
movl %ebp, %edx
callq 0xe33a
movq 0x178(%rsp), %rcx
movl $0xf, %edi
leaq 0x188(%rsp), %rax
cmpq %rax, %rcx
je 0x24656
movq 0x188(%rsp), %rdi
movq 0x180(%rsp), %r8
movq 0x1e0(%rsp), %rsi
movq 0x1e8(%rsp), %rdx
leaq (%rdx,%r8), %rax
cmpq %rdi, %rax
jbe 0x24696
movl $0xf, %edi
leaq 0x1f0(%rsp), %r9
cmpq %r9, %rsi
je 0x24691
movq 0x1f0(%rsp), %rdi
cmpq %rdi, %rax
jbe 0x246a5
leaq 0x178(%rsp), %rdi
callq 0x50f0
jmp 0x246b6
leaq 0x1e0(%rsp), %rdi
xorl %esi, %esi
xorl %edx, %edx
callq 0x5380
movq %r14, 0x200(%rsp)
movq (%rax), %rdx
leaq 0x10(%rax), %rcx
cmpq %rcx, %rdx
je 0x246df
movq %rdx, 0x200(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x210(%rsp)
jmp 0x246e6
movups (%rcx), %xmm0
movups %xmm0, (%r14)
movq %rax, %rdx
addq $0x8, %rdx
movq 0x8(%rax), %rsi
movq %rsi, 0x208(%rsp)
movq %rcx, (%rax)
movq $0x0, (%rdx)
movb $0x0, (%rcx)
leaq 0x200(%rsp), %rdi
leaq 0xcedc(%rip), %rsi      # 0x315f1
callq 0x5630
leaq 0x1a8(%rsp), %rsi
movq %rsi, 0x198(%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x2474e
movq %rdx, 0x198(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x1a8(%rsp)
jmp 0x24754
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0x8(%rax), %rdx
movq %rdx, 0x1a0(%rsp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq 0xa8(%rsp), %rbx
movl %ebx, %r15d
negl %r15d
cmovsl %ebx, %r15d
movl $0x1, %r12d
cmpl $0xa, %r15d
jb 0x247dc
movl $0x4, %r12d
movl %r15d, %eax
movl $0xd1b71759, %edx       # imm = 0xD1B71759
cmpl $0x63, %eax
jbe 0x247cb
cmpl $0x3e7, %eax            # imm = 0x3E7
jbe 0x247d1
cmpl $0x2710, %eax           # imm = 0x2710
jb 0x247d4
movl %eax, %ecx
imulq %rdx, %rcx
shrq $0x2d, %rcx
addl $0x4, %r12d
cmpl $0x1869f, %eax          # imm = 0x1869F
movl %ecx, %eax
ja 0x2479b
addl $-0x3, %r12d
jmp 0x247d4
addl $-0x2, %r12d
jmp 0x247d4
decl %r12d
movq 0xa8(%rsp), %rbx
shrl $0x1f, %ebx
leal (%r12,%rbx), %esi
leaq 0x1d0(%rsp), %rax
movq %rax, 0x1c0(%rsp)
leaq 0x1c0(%rsp), %rdi
movl $0x2d, %edx
callq 0x53b0
addq 0x1c0(%rsp), %rbx
movq %rbx, %rdi
movl %r12d, %esi
movl %r15d, %edx
callq 0xe33a
movq 0x198(%rsp), %rcx
movl $0xf, %edi
leaq 0x1a8(%rsp), %rax
cmpq %rax, %rcx
je 0x2483d
movq 0x1a8(%rsp), %rdi
movq 0x1a0(%rsp), %r8
movq 0x1c0(%rsp), %rsi
movq 0x1c8(%rsp), %rdx
leaq (%rdx,%r8), %rax
cmpq %rdi, %rax
movq 0xb0(%rsp), %r12
jbe 0x24885
movl $0xf, %edi
leaq 0x1d0(%rsp), %r9
cmpq %r9, %rsi
je 0x24880
movq 0x1d0(%rsp), %rdi
cmpq %rdi, %rax
jbe 0x24894
leaq 0x198(%rsp), %rdi
callq 0x50f0
jmp 0x248a5
leaq 0x1c0(%rsp), %rdi
xorl %esi, %esi
xorl %edx, %edx
callq 0x5380
leaq 0x128(%rsp), %rsi
movq %rsi, 0x118(%rsp)
movq (%rax), %rdx
leaq 0x10(%rax), %rcx
cmpq %rcx, %rdx
je 0x248d6
movq %rdx, 0x118(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x128(%rsp)
jmp 0x248dc
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq %rax, %rdx
addq $0x8, %rdx
movq 0x8(%rax), %rsi
movq %rsi, 0x120(%rsp)
movq %rcx, (%rax)
movq $0x0, (%rdx)
movb $0x0, (%rcx)
leaq 0x118(%rsp), %rdi
leaq 0xcce6(%rip), %rsi      # 0x315f1
callq 0x5630
leaq 0x248(%rsp), %rsi
movq %rsi, 0x238(%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x24944
movq %rdx, 0x238(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x248(%rsp)
jmp 0x2494a
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0x8(%rax), %rdx
movq %rdx, 0x240(%rsp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq 0x338(%rsp), %rsi
movq 0x340(%rsp), %rdx
leaq 0x238(%rsp), %rdi
callq 0x50f0
leaq 0x268(%rsp), %rsi
movq %rsi, 0x258(%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x249b6
movq %rdx, 0x258(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x268(%rsp)
jmp 0x249bc
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0x8(%rax), %rdx
movq %rdx, 0x260(%rsp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0x258(%rsp), %rdi
leaq 0xcc0b(%rip), %rsi      # 0x315f1
callq 0x5630
leaq 0x288(%rsp), %rsi
movq %rsi, 0x278(%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x24a1f
movq %rdx, 0x278(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x288(%rsp)
jmp 0x24a25
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0x8(%rax), %rdx
movq %rdx, 0x280(%rsp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq 0x20(%rsp), %rsi
movq 0x28(%rsp), %rdx
leaq 0x278(%rsp), %rdi
callq 0x50f0
leaq 0x2a8(%rsp), %rsi
movq %rsi, 0x298(%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x24a8b
movq %rdx, 0x298(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x2a8(%rsp)
jmp 0x24a91
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0x8(%rax), %rdx
movq %rdx, 0x2a0(%rsp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0x298(%rsp), %rdi
leaq 0xcb36(%rip), %rsi      # 0x315f1
callq 0x5630
leaq 0x2c8(%rsp), %rsi
movq %rsi, 0x2b8(%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x24af4
movq %rdx, 0x2b8(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x2c8(%rsp)
jmp 0x24afa
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0x8(%rax), %rdx
movq %rdx, 0x2c0(%rsp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq 0x48(%rsp), %rsi
movq 0x50(%rsp), %rdx
leaq 0x2b8(%rsp), %rdi
callq 0x50f0
leaq 0x2e8(%rsp), %rsi
movq %rsi, 0x2d8(%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x24b60
movq %rdx, 0x2d8(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x2e8(%rsp)
jmp 0x24b66
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0x8(%rax), %rdx
movq %rdx, 0x2e0(%rsp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0x2d8(%rsp), %rdi
leaq 0xca61(%rip), %rsi      # 0x315f1
callq 0x5630
leaq 0x308(%rsp), %rsi
movq %rsi, 0x2f8(%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x24bc9
movq %rdx, 0x2f8(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x308(%rsp)
jmp 0x24bcf
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0x8(%rax), %rdx
movq %rdx, 0x300(%rsp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq 0x88(%rsp), %rsi
movq 0x90(%rsp), %rdx
leaq 0x2f8(%rsp), %rdi
callq 0x50f0
leaq 0x10(%rsp), %rsi
movq %rsi, (%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x24c2d
movq %rdx, (%rsp)
movq (%rcx), %rdx
movq %rdx, 0x10(%rsp)
jmp 0x24c33
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0x8(%rax), %rdx
movq %rdx, 0x8(%rsp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq 0x2f8(%rsp), %rdi
leaq 0x308(%rsp), %rax
cmpq %rax, %rdi
je 0x24c70
movq 0x308(%rsp), %rsi
incq %rsi
callq 0x5340
movq 0x2d8(%rsp), %rdi
leaq 0x2e8(%rsp), %rax
cmpq %rax, %rdi
je 0x24c95
movq 0x2e8(%rsp), %rsi
incq %rsi
callq 0x5340
movq 0x2b8(%rsp), %rdi
leaq 0x2c8(%rsp), %rax
cmpq %rax, %rdi
je 0x24cba
movq 0x2c8(%rsp), %rsi
incq %rsi
callq 0x5340
movq 0x298(%rsp), %rdi
leaq 0x2a8(%rsp), %rax
cmpq %rax, %rdi
je 0x24cdf
movq 0x2a8(%rsp), %rsi
incq %rsi
callq 0x5340
movq 0x278(%rsp), %rdi
leaq 0x288(%rsp), %rax
cmpq %rax, %rdi
je 0x24d04
movq 0x288(%rsp), %rsi
incq %rsi
callq 0x5340
movq 0x258(%rsp), %rdi
leaq 0x268(%rsp), %rax
cmpq %rax, %rdi
je 0x24d29
movq 0x268(%rsp), %rsi
incq %rsi
callq 0x5340
movq 0x238(%rsp), %rdi
leaq 0x248(%rsp), %rax
cmpq %rax, %rdi
je 0x24d4e
movq 0x248(%rsp), %rsi
incq %rsi
callq 0x5340
movq 0x118(%rsp), %rdi
leaq 0x128(%rsp), %rax
cmpq %rax, %rdi
je 0x24d73
movq 0x128(%rsp), %rsi
incq %rsi
callq 0x5340
movq 0x1c0(%rsp), %rdi
leaq 0x1d0(%rsp), %rax
cmpq %rax, %rdi
je 0x24d98
movq 0x1d0(%rsp), %rsi
incq %rsi
callq 0x5340
movq 0x198(%rsp), %rdi
leaq 0x1a8(%rsp), %rax
cmpq %rax, %rdi
je 0x24dbd
movq 0x1a8(%rsp), %rsi
incq %rsi
callq 0x5340
movq 0x200(%rsp), %rdi
cmpq %r14, %rdi
je 0x24dda
movq 0x210(%rsp), %rsi
incq %rsi
callq 0x5340
movq 0x1e0(%rsp), %rdi
leaq 0x1f0(%rsp), %rax
cmpq %rax, %rdi
je 0x24dff
movq 0x1f0(%rsp), %rsi
incq %rsi
callq 0x5340
movq 0x178(%rsp), %rdi
leaq 0x188(%rsp), %rax
cmpq %rax, %rdi
je 0x24e24
movq 0x188(%rsp), %rsi
incq %rsi
callq 0x5340
movq 0x318(%rsp), %rdi
leaq 0x328(%rsp), %rax
cmpq %rax, %rdi
je 0x24e49
movq 0x328(%rsp), %rsi
incq %rsi
callq 0x5340
movq (%rsp), %rsi
movq 0x8(%rsp), %rdx
movq 0x18177(%rip), %rdi     # 0x3cfd0
callq 0x53a0
movq %rax, %r15
movl $0x1, %edx
movq %rax, %rdi
leaq 0xc781(%rip), %rsi      # 0x315f1
callq 0x53a0
movq 0xc0(%rsp), %rsi
movq 0xc8(%rsp), %rdx
movq %r15, %rdi
callq 0x53a0
movq %rax, %r15
movl $0x1, %edx
movq %rax, %rdi
leaq 0xc752(%rip), %rsi      # 0x315f1
callq 0x53a0
movq 0x68(%rsp), %rsi
movq 0x70(%rsp), %rdx
movq %r15, %rdi
callq 0x53a0
movq %rax, %r15
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r15, %rdi
movl $0xa, %esi
callq 0x5310
movsbl %al, %esi
movq %r15, %rdi
callq 0x5040
movq %rax, %rdi
callq 0x5240
movq (%rsp), %rsi
movq 0x8(%rsp), %rdx
leaq 0x538(%rsp), %rdi
callq 0x53a0
movq %rax, %r15
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r15, %rdi
movl $0xa, %esi
callq 0x5310
movsbl %al, %esi
movq %r15, %rdi
callq 0x5040
movq %rax, %rdi
callq 0x5240
movq (%rsp), %rdi
leaq 0x10(%rsp), %rax
cmpq %rax, %rdi
je 0x24f3b
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x5340
movq 0x68(%rsp), %rdi
leaq 0x78(%rsp), %rax
cmpq %rax, %rdi
je 0x24f57
movq 0x78(%rsp), %rsi
incq %rsi
callq 0x5340
movq 0xc0(%rsp), %rdi
leaq 0xd0(%rsp), %rax
cmpq %rax, %rdi
je 0x24f7c
movq 0xd0(%rsp), %rsi
incq %rsi
callq 0x5340
movq 0x88(%rsp), %rdi
leaq 0x98(%rsp), %rax
cmpq %rax, %rdi
je 0x24fa1
movq 0x98(%rsp), %rsi
incq %rsi
callq 0x5340
movq 0x48(%rsp), %rdi
leaq 0x58(%rsp), %rax
cmpq %rax, %rdi
je 0x24fbd
movq 0x58(%rsp), %rsi
incq %rsi
callq 0x5340
movq 0x20(%rsp), %rdi
cmpq %r13, %rdi
je 0x24fd4
movq 0x30(%rsp), %rsi
incq %rsi
callq 0x5340
movq 0x338(%rsp), %rdi
leaq 0x348(%rsp), %rax
cmpq %rax, %rdi
je 0x24ff9
movq 0x348(%rsp), %rsi
incq %rsi
callq 0x5340
movq 0x168(%rsp), %rcx
incq %rcx
movq 0x220(%r12), %rdx
movq 0x228(%r12), %rsi
movq %rsi, %rax
subq %rdx, %rax
sarq $0x2, %rax
cmpq %rcx, %rax
movq %rcx, %rax
ja 0x23df1
movq 0x208(%r12), %rax
movq 0x210(%r12), %rcx
jmp 0x2503f
movq %rdx, %rsi
movq 0x160(%rsp), %r9
incq %r9
movq %rcx, %rdi
subq %rax, %rdi
sarq $0x2, %rdi
movq %r9, 0x160(%rsp)
cmpq %r9, %rdi
ja 0x23dac
movq 0x1f0(%r12), %rdx
movq 0x1f8(%r12), %rsi
movq %rcx, %rdi
jmp 0x2507d
movq %rax, %rdi
movq 0x158(%rsp), %r10
incq %r10
movq %rsi, %r8
subq %rdx, %r8
sarq $0x2, %r8
movq %r10, 0x158(%rsp)
cmpq %r10, %r8
ja 0x23d56
leaq 0x538(%rsp), %rdi
callq 0x5440
movq 0x1f0(%r12), %rdx
movq 0x1f8(%r12), %rsi
cmpq %rdx, %rsi
je 0x25bde
movq 0x17ee8(%rip), %rax     # 0x3cfb8
movq (%rax), %rcx
movq %rcx, 0xa8(%rsp)
movq 0x18(%rax), %rax
movq %rax, 0xf0(%rsp)
movq 0x208(%r12), %rax
movq 0x210(%r12), %rcx
movq $0x0, 0x138(%rsp)
leaq 0xc0(%rsp), %rbx
movq %rcx, %rdi
cmpq %rax, %rdi
je 0x25bb5
movq 0x138(%rsp), %rsi
movl (%rdx,%rsi,4), %r8d
leal (%r8,%r8), %edx
andl $0x2, %edx
movl %edx, 0xb8(%rsp)
movl %r8d, %edx
negl %edx
cmovsl %r8d, %edx
movl %edx, 0x148(%rsp)
shrl $0x1f, %r8d
movq 0x220(%r12), %rdx
movq 0x228(%r12), %rsi
xorl %r9d, %r9d
movq %r8, 0x170(%rsp)
cmpq %rdx, %rsi
je 0x25b87
movq %r9, 0x150(%rsp)
movl (%rax,%r9,4), %eax
movl %eax, %ecx
andl $0x1, %ecx
orl 0xb8(%rsp), %ecx
shll $0x2, %ecx
movl %ecx, 0x168(%rsp)
movl %eax, %ecx
negl %ecx
cmovsl %eax, %ecx
movl %ecx, 0xe0(%rsp)
shrl $0x1f, %eax
movq %rax, 0x140(%rsp)
xorl %r15d, %r15d
movl $0x1, %r13d
cmpl $0xa, 0x148(%rsp)
leaq 0xd0(%rsp), %rdi
movl $0xd1b71759, %r12d      # imm = 0xD1B71759
jb 0x2520b
movl $0x4, %r13d
movl 0x148(%rsp), %eax
cmpl $0x63, %eax
jbe 0x25202
cmpl $0x3e7, %eax            # imm = 0x3E7
jbe 0x25208
cmpl $0x2710, %eax           # imm = 0x2710
jb 0x2520b
movl %eax, %ecx
imulq %r12, %rcx
shrq $0x2d, %rcx
addl $0x4, %r13d
cmpl $0x1869f, %eax          # imm = 0x1869F
movl %ecx, %eax
ja 0x251d2
addl $-0x3, %r13d
jmp 0x2520b
addl $-0x2, %r13d
jmp 0x2520b
decl %r13d
movl (%rdx,%r15,4), %r14d
leal (%r8,%r13), %esi
movq %rdi, 0xc0(%rsp)
movq %rbx, %rdi
movl $0x2d, %edx
movq %r8, %rbp
callq 0x53b0
movq 0xc0(%rsp), %rdi
addq %rbp, %rdi
movl %r13d, %esi
movl 0x148(%rsp), %edx
callq 0xe33a
movq %rbx, %rdi
leaq 0xc76e(%rip), %rsi      # 0x319bd
callq 0x5630
leaq 0x98(%rsp), %rsi
movq %rsi, 0x88(%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x25288
movq %rdx, 0x88(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x98(%rsp)
jmp 0x2528e
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
leaq 0x78(%rsp), %rdi
movq 0x140(%rsp), %rsi
movq 0x8(%rax), %rdx
movq %rdx, 0x90(%rsp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movl $0x1, %r13d
cmpl $0xa, 0xe0(%rsp)
jb 0x2530c
movl $0x4, %r13d
movl 0xe0(%rsp), %eax
cmpl $0x63, %eax
jbe 0x25303
cmpl $0x3e7, %eax            # imm = 0x3E7
jbe 0x25309
cmpl $0x2710, %eax           # imm = 0x2710
jb 0x2530c
movl %eax, %ecx
imulq %r12, %rcx
shrq $0x2d, %rcx
addl $0x4, %r13d
cmpl $0x1869f, %eax          # imm = 0x1869F
movl %ecx, %eax
ja 0x252d3
addl $-0x3, %r13d
jmp 0x2530c
addl $-0x2, %r13d
jmp 0x2530c
decl %r13d
movq %rsi, %rbp
addl %r13d, %esi
movq %rdi, 0x68(%rsp)
leaq 0x68(%rsp), %rdi
movl $0x2d, %edx
callq 0x53b0
movq 0x68(%rsp), %rdi
addq %rbp, %rdi
movl %r13d, %esi
movl 0xe0(%rsp), %edx
callq 0xe33a
movq 0x88(%rsp), %rcx
movl $0xf, %edi
leaq 0x98(%rsp), %rax
cmpq %rax, %rcx
je 0x2535f
movq 0x98(%rsp), %rdi
movq 0x90(%rsp), %r8
movq 0x68(%rsp), %rsi
movq 0x70(%rsp), %rdx
leaq (%rdx,%r8), %rax
cmpq %rdi, %rax
jbe 0x25393
movl $0xf, %edi
leaq 0x78(%rsp), %r9
cmpq %r9, %rsi
je 0x2538e
movq 0x78(%rsp), %rdi
cmpq %rdi, %rax
jbe 0x253a2
leaq 0x88(%rsp), %rdi
callq 0x50f0
jmp 0x253b0
leaq 0x68(%rsp), %rdi
xorl %esi, %esi
xorl %edx, %edx
callq 0x5380
leaq 0x58(%rsp), %rsi
movq %rsi, 0x48(%rsp)
movq (%rax), %rdx
leaq 0x10(%rax), %rcx
cmpq %rcx, %rdx
je 0x253d5
movq %rdx, 0x48(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x58(%rsp)
jmp 0x253db
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq %rax, %rdx
addq $0x8, %rdx
movq 0x8(%rax), %rsi
movq %rsi, 0x50(%rsp)
movq %rcx, (%rax)
movq $0x0, (%rdx)
movb $0x0, (%rcx)
leaq 0x48(%rsp), %rdi
leaq 0xc5b9(%rip), %rsi      # 0x319bd
callq 0x5630
leaq 0x348(%rsp), %rsi
movq %rsi, 0x338(%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x2543d
movq %rdx, 0x338(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x348(%rsp)
jmp 0x25443
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0x8(%rax), %rdx
movq %rdx, 0x340(%rsp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movl %r14d, %r13d
negl %r13d
cmovsl %r14d, %r13d
movl $0x1, %ebp
cmpl $0xa, %r13d
jb 0x254b0
movl $0x4, %ebp
movl %r13d, %eax
cmpl $0x63, %eax
jbe 0x254a9
cmpl $0x3e7, %eax            # imm = 0x3E7
jbe 0x254ae
cmpl $0x2710, %eax           # imm = 0x2710
jb 0x254b0
movl %eax, %ecx
imulq %r12, %rcx
shrq $0x2d, %rcx
addl $0x4, %ebp
cmpl $0x1869f, %eax          # imm = 0x1869F
movl %ecx, %eax
ja 0x2547b
addl $-0x3, %ebp
jmp 0x254b0
addl $-0x2, %ebp
jmp 0x254b0
decl %ebp
movl %r14d, %r12d
shrl $0x1f, %r12d
leal (%r12,%rbp), %esi
leaq 0x10(%rsp), %rax
movq %rax, (%rsp)
movq %rsp, %rdi
movl $0x2d, %edx
callq 0x53b0
addq (%rsp), %r12
movq %r12, %rdi
movl %ebp, %esi
movl %r13d, %edx
callq 0xe33a
movq 0x338(%rsp), %rcx
movl $0xf, %edi
leaq 0x348(%rsp), %rax
cmpq %rax, %rcx
je 0x25504
movq 0x348(%rsp), %rdi
movq 0x340(%rsp), %r8
movq (%rsp), %rsi
movq 0x8(%rsp), %rdx
leaq (%rdx,%r8), %rax
cmpq %rdi, %rax
movq 0xb0(%rsp), %r12
jbe 0x2553f
movl $0xf, %edi
leaq 0x10(%rsp), %r9
cmpq %r9, %rsi
je 0x2553a
movq 0x10(%rsp), %rdi
cmpq %rdi, %rax
jbe 0x2554e
leaq 0x338(%rsp), %rdi
callq 0x50f0
jmp 0x2555a
movq %rsp, %rdi
xorl %esi, %esi
xorl %edx, %edx
callq 0x5380
leaq 0x30(%rsp), %rsi
movq %rsi, 0x20(%rsp)
movq (%rax), %rdx
leaq 0x10(%rax), %rcx
cmpq %rcx, %rdx
je 0x2557f
movq %rdx, 0x20(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x30(%rsp)
jmp 0x25585
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq %rax, %rdx
addq $0x8, %rdx
movq 0x8(%rax), %rsi
movq %rsi, 0x28(%rsp)
movq %rcx, (%rax)
movq $0x0, (%rdx)
movb $0x0, (%rcx)
movq (%rsp), %rdi
leaq 0x10(%rsp), %rax
cmpq %rax, %rdi
je 0x255bd
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x5340
movq 0x338(%rsp), %rdi
leaq 0x348(%rsp), %rax
cmpq %rax, %rdi
je 0x255e2
movq 0x348(%rsp), %rsi
incq %rsi
callq 0x5340
movq 0x48(%rsp), %rdi
leaq 0x58(%rsp), %rax
cmpq %rax, %rdi
je 0x255fe
movq 0x58(%rsp), %rsi
incq %rsi
callq 0x5340
movq 0x68(%rsp), %rdi
leaq 0x78(%rsp), %rax
cmpq %rax, %rdi
je 0x2561a
movq 0x78(%rsp), %rsi
incq %rsi
callq 0x5340
movq 0x88(%rsp), %rdi
leaq 0x98(%rsp), %rax
cmpq %rax, %rdi
je 0x2563f
movq 0x98(%rsp), %rsi
incq %rsi
callq 0x5340
movq 0xc0(%rsp), %rdi
leaq 0xd0(%rsp), %rax
cmpq %rax, %rdi
je 0x25664
movq 0xd0(%rsp), %rsi
incq %rsi
callq 0x5340
leaq 0x338(%rsp), %rdi
callq 0x5570
leaq 0x10(%rsp), %rax
movq %rax, (%rsp)
movq 0x1c0(%r12), %rsi
movq 0x1c8(%r12), %rdx
addq %rsi, %rdx
movq %rsp, %r13
movq %r13, %rdi
callq 0x1123c
movq %r13, %rdi
leaq 0xbf51(%rip), %rsi      # 0x315f3
callq 0x5630
movq 0x1a0(%r12), %rsi
movq 0x1a8(%r12), %rdx
movq %r13, %rdi
callq 0x50f0
leaq 0x78(%rsp), %rsi
movq %rsi, 0x68(%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x256e7
movq %rdx, 0x68(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x78(%rsp)
jmp 0x256ed
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0x8(%rax), %rdx
movq %rdx, 0x70(%rsp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0x68(%rsp), %rdi
leaq 0xc375(%rip), %rsi      # 0x31a86
callq 0x5630
leaq 0xd0(%rsp), %rsi
movq %rsi, 0xc0(%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x2574a
movq %rdx, 0xc0(%rsp)
movq (%rcx), %rdx
movq %rdx, 0xd0(%rsp)
jmp 0x25750
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0x8(%rax), %rdx
movq %rdx, 0xc8(%rsp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq 0x20(%rsp), %rsi
movq 0x28(%rsp), %rdx
movq %rbx, %rdi
callq 0x50f0
leaq 0x98(%rsp), %rsi
movq %rsi, 0x88(%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x257b1
movq %rdx, 0x88(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x98(%rsp)
jmp 0x257b7
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0x8(%rax), %rdx
movq %rdx, 0x90(%rsp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0x88(%rsp), %rdi
leaq 0xc1de(%rip), %rsi      # 0x319bf
callq 0x5630
leaq 0x58(%rsp), %rsi
movq %rsi, 0x48(%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x2580e
movq %rdx, 0x48(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x58(%rsp)
jmp 0x25814
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0x8(%rax), %rdx
movq %rdx, 0x50(%rsp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0x338(%rsp), %rdi
leaq 0x48(%rsp), %rsi
movl $0x10, %edx
callq 0x5160
movq 0x48(%rsp), %rdi
leaq 0x58(%rsp), %rax
cmpq %rax, %rdi
je 0x2585f
movq 0x58(%rsp), %rsi
incq %rsi
callq 0x5340
movq 0x88(%rsp), %rdi
leaq 0x98(%rsp), %rax
cmpq %rax, %rdi
je 0x25884
movq 0x98(%rsp), %rsi
incq %rsi
callq 0x5340
movq 0xc0(%rsp), %rdi
leaq 0xd0(%rsp), %rax
cmpq %rax, %rdi
je 0x258a9
movq 0xd0(%rsp), %rsi
incq %rsi
callq 0x5340
movq 0x68(%rsp), %rdi
leaq 0x78(%rsp), %rax
cmpq %rax, %rdi
je 0x258c5
movq 0x78(%rsp), %rsi
incq %rsi
callq 0x5340
movq (%rsp), %rdi
leaq 0x10(%rsp), %rax
cmpq %rax, %rdi
je 0x258e0
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x5340
movl $0x7, %edx
leaq 0x338(%rsp), %rdi
leaq 0xc0d2(%rip), %rsi      # 0x319c6
callq 0x53a0
movq 0x8(%r12), %rsi
movq 0x10(%r12), %rdx
leaq 0x338(%rsp), %rdi
callq 0x53a0
movq %rax, %r13
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r13, %rdi
movl $0xa, %esi
callq 0x5310
movsbl %al, %esi
movq %r13, %rdi
callq 0x5040
movq %rax, %rdi
callq 0x5240
movl $0x7, %edx
leaq 0x338(%rsp), %rdi
leaq 0xc080(%rip), %rsi      # 0x319ce
callq 0x53a0
movq 0x28(%r12), %rsi
movq 0x30(%r12), %rdx
leaq 0x338(%rsp), %rdi
callq 0x53a0
movq %rax, %r13
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r13, %rdi
movl $0xa, %esi
callq 0x5310
movsbl %al, %esi
movq %r13, %rdi
callq 0x5040
movq %rax, %rdi
callq 0x5240
movl $0x30, %edx
leaq 0x338(%rsp), %rdi
leaq 0xc02e(%rip), %rsi      # 0x319d6
callq 0x53a0
movq 0x338(%rsp), %rax
movq -0x18(%rax), %rdi
leaq 0x338(%rsp), %rax
addq %rax, %rdi
movl $0xa, %esi
callq 0x5310
movsbl %al, %esi
leaq 0x338(%rsp), %rdi
callq 0x5040
movq %rax, %rdi
callq 0x5240
movq %rbx, %rbp
movl 0x4(%r12), %ecx
testl %ecx, %ecx
jle 0x25ad5
andl $0x3, %r14d
orl 0x168(%rsp), %r14d
movl %r14d, %ebx
movq 0x178(%r12), %rax
xorl %r14d, %r14d
movq (%rax,%r14,8), %rdx
movq (%rdx,%rbx,8), %rdx
movq (%rdx), %rdi
cmpq %rdi, 0x8(%rdx)
je 0x25ac6
xorl %r12d, %r12d
xorl %r13d, %r13d
addq %r12, %rdi
movl $0x20, %esi
xorl %edx, %edx
callq 0x52f0
cmpq $-0x1, %rax
je 0x25a84
movq 0xb0(%rsp), %rax
movq 0x178(%rax), %rax
movq (%rax,%r14,8), %rax
movq (%rax,%rbx,8), %rcx
movq (%rcx), %rax
movq 0x8(%rcx), %rdx
subq %rax, %rdx
sarq $0x5, %rdx
cmpq %r13, %rdx
jbe 0x25e6d
movq (%rax,%r12), %rsi
movq 0x8(%rax,%r12), %rdx
leaq 0x338(%rsp), %rdi
callq 0x53a0
incq %r13
movq 0xb0(%rsp), %rax
movq 0x178(%rax), %rax
movq (%rax,%r14,8), %rcx
movq (%rcx,%rbx,8), %rcx
movq (%rcx), %rdi
movq 0x8(%rcx), %rcx
subq %rdi, %rcx
sarq $0x5, %rcx
addq $0x20, %r12
cmpq %r13, %rcx
ja 0x25a2b
movq 0xb0(%rsp), %r12
movl 0x4(%r12), %ecx
incq %r14
movslq %ecx, %rdx
cmpq %rdx, %r14
jl 0x25a10
leaq 0x338(%rsp), %rdi
callq 0x5440
movq %rbp, %rbx
movq 0xa8(%rsp), %rax
movq %rax, 0x338(%rsp)
movq -0x18(%rax), %rax
movq 0xf0(%rsp), %rcx
movq %rcx, 0x338(%rsp,%rax)
leaq 0x340(%rsp), %rdi
callq 0x52c0
leaq 0x430(%rsp), %rdi
callq 0x5100
movq 0x20(%rsp), %rdi
leaq 0x30(%rsp), %rax
cmpq %rax, %rdi
je 0x25b3f
movq 0x30(%rsp), %rsi
incq %rsi
callq 0x5340
incq %r15
movq 0x220(%r12), %rdx
movq 0x228(%r12), %rsi
movq %rsi, %rax
subq %rdx, %rax
sarq $0x2, %rax
cmpq %r15, %rax
movq 0x170(%rsp), %r8
ja 0x251a7
movq 0x208(%r12), %rax
movq 0x210(%r12), %rcx
movq 0x150(%rsp), %r9
jmp 0x25b8a
movq %rdx, %rsi
incq %r9
movq %rcx, %rdi
subq %rax, %rdi
sarq $0x2, %rdi
cmpq %r9, %rdi
ja 0x25160
movq 0x1f0(%r12), %rdx
movq 0x1f8(%r12), %rsi
movq %rcx, %rdi
jmp 0x25bb8
movq %rax, %rdi
movq 0x138(%rsp), %r10
incq %r10
movq %rsi, %r8
subq %rdx, %r8
sarq $0x2, %r8
movq %r10, 0x138(%rsp)
cmpq %r10, %r8
ja 0x2510e
cmpl $0x0, 0x4(%r12)
jle 0x25d89
xorl %ebx, %ebx
xorl %r15d, %r15d
movq 0x178(%r12), %rax
movq (%rax,%rbx,8), %rax
movq (%rax,%r15,8), %r14
testq %r14, %r14
je 0x25c0c
movq %r14, %rdi
callq 0xe71c
movl $0x18, %esi
movq %r14, %rdi
callq 0x5340
incq %r15
cmpq $0x10, %r15
jne 0x25bef
xorl %r15d, %r15d
movq 0x180(%r12), %rax
movq (%rax,%rbx,8), %rax
movq (%rax,%r15,8), %r14
testq %r14, %r14
je 0x25c4e
movq (%r14), %rdi
testq %rdi, %rdi
je 0x25c4e
movq 0x10(%r14), %rsi
subq %rdi, %rsi
callq 0x5340
movl $0x18, %esi
movq %r14, %rdi
callq 0x5340
movq 0x188(%r12), %rax
movq (%rax,%rbx,8), %rax
movq (%rax,%r15,8), %r14
testq %r14, %r14
je 0x25c84
movq (%r14), %rdi
testq %rdi, %rdi
je 0x25c84
movq 0x10(%r14), %rsi
subq %rdi, %rsi
callq 0x5340
movl $0x18, %esi
movq %r14, %rdi
callq 0x5340
movq 0x190(%r12), %rax
movq (%rax,%rbx,8), %rax
movq (%rax,%r15,8), %r14
testq %r14, %r14
je 0x25cba
movq (%r14), %rdi
testq %rdi, %rdi
je 0x25cba
movq 0x10(%r14), %rsi
subq %rdi, %rsi
callq 0x5340
movl $0x18, %esi
movq %r14, %rdi
callq 0x5340
movq 0x198(%r12), %rax
movq (%rax,%rbx,8), %rax
movq (%rax,%r15,8), %r14
testq %r14, %r14
je 0x25cf0
movq (%r14), %rdi
testq %rdi, %rdi
je 0x25cf0
movq 0x10(%r14), %rsi
subq %rdi, %rsi
callq 0x5340
movl $0x18, %esi
movq %r14, %rdi
callq 0x5340
incq %r15
cmpq $0x5, %r15
jne 0x25c25
movq 0x178(%r12), %rax
movq (%rax,%rbx,8), %rdi
testq %rdi, %rdi
je 0x25d20
callq 0x53f0
movq 0x180(%r12), %rax
movq (%rax,%rbx,8), %rdi
testq %rdi, %rdi
je 0x25d36
callq 0x53f0
movq 0x188(%r12), %rax
movq (%rax,%rbx,8), %rdi
testq %rdi, %rdi
je 0x25d4c
callq 0x53f0
movq 0x190(%r12), %rax
movq (%rax,%rbx,8), %rdi
testq %rdi, %rdi
je 0x25d62
callq 0x53f0
movq 0x198(%r12), %rax
movq (%rax,%rbx,8), %rdi
testq %rdi, %rdi
je 0x25d78
callq 0x53f0
incq %rbx
movslq 0x4(%r12), %rax
cmpq %rax, %rbx
jl 0x25bec
movq 0x178(%r12), %rdi
testq %rdi, %rdi
je 0x25d9b
callq 0x53f0
movq 0x180(%r12), %rdi
testq %rdi, %rdi
je 0x25dad
callq 0x53f0
movq 0x188(%r12), %rdi
testq %rdi, %rdi
je 0x25dbf
callq 0x53f0
movq 0x190(%r12), %rdi
testq %rdi, %rdi
je 0x25dd1
callq 0x53f0
movq 0x198(%r12), %rdi
testq %rdi, %rdi
je 0x25de3
callq 0x53f0
movq 0xf8(%rsp), %rdi
leaq 0x108(%rsp), %rax
cmpq %rax, %rdi
je 0x25e08
movq 0x108(%rsp), %rsi
incq %rsi
callq 0x5340
movq 0x171a9(%rip), %rax     # 0x3cfb8
movq (%rax), %rcx
movq 0x18(%rax), %rax
leaq 0x540(%rsp), %rdi
movq %rcx, -0x8(%rdi)
movq -0x18(%rcx), %rcx
movq %rax, 0x538(%rsp,%rcx)
callq 0x52c0
leaq 0x630(%rsp), %rdi
callq 0x5100
leaq 0x220(%rsp), %rdi
callq 0x28a16
addq $0x738, %rsp            # imm = 0x738
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0xbc8e(%rip), %rdi      # 0x31af4
xorl %eax, %eax
callq 0x5490
leaq 0xbc80(%rip), %rdi      # 0x31af4
movq %r13, %rsi
xorl %eax, %eax
callq 0x5490
jmp 0x262fa
jmp 0x25f12
movq %rax, %rbx
movq 0x338(%rsp), %rdi
leaq 0x348(%rsp), %rax
cmpq %rax, %rdi
je 0x25eb5
movq 0x348(%rsp), %rsi
incq %rsi
callq 0x5340
jmp 0x25eb5
movq %rax, %rbx
movq 0xf8(%rsp), %rdi
leaq 0x108(%rsp), %rax
cmpq %rax, %rdi
je 0x25edf
movq 0x108(%rsp), %rsi
incq %rsi
callq 0x5340
jmp 0x25edf
movq %rax, %rbx
movq 0x20(%rsp), %rdi
leaq 0x30(%rsp), %rax
cmpq %rax, %rdi
jne 0x25f04
jmp 0x26532
movq %rax, %rbx
movq 0x20(%rsp), %rdi
cmpq %r13, %rdi
je 0x26532
movq 0x30(%rsp), %rsi
jmp 0x2652a
jmp 0x25f12
jmp 0x25f33
movq %rax, %rbx
jmp 0x26532
jmp 0x25f33
jmp 0x262fa
jmp 0x25f33
cmpq $0x0, 0x338(%rsp)
je 0x25f33
callq 0x50d0
movq %rax, %rbx
jmp 0x2656a
movq %rax, %rbx
leaq 0x128(%rsp), %r15
jmp 0x25fa2
movq %rax, %rbx
movq 0x2f8(%rsp), %rdi
leaq 0x308(%rsp), %rax
cmpq %rax, %rdi
je 0x25f75
movq 0x308(%rsp), %rsi
incq %rsi
callq 0x5340
jmp 0x25f75
movq %rax, %rbx
leaq 0x128(%rsp), %r15
movq 0x2d8(%rsp), %rdi
leaq 0x2e8(%rsp), %rax
cmpq %rax, %rdi
je 0x25fa2
movq 0x2e8(%rsp), %rsi
incq %rsi
callq 0x5340
movq 0x2b8(%rsp), %rdi
leaq 0x2c8(%rsp), %rax
cmpq %rax, %rdi
je 0x25fd4
movq 0x2c8(%rsp), %rsi
incq %rsi
callq 0x5340
jmp 0x25fd4
movq %rax, %rbx
leaq 0x128(%rsp), %r15
movq 0x298(%rsp), %rdi
leaq 0x2a8(%rsp), %rax
cmpq %rax, %rdi
je 0x26006
movq 0x2a8(%rsp), %rsi
incq %rsi
callq 0x5340
jmp 0x26006
movq %rax, %rbx
leaq 0x128(%rsp), %r15
movq 0x278(%rsp), %rdi
leaq 0x288(%rsp), %rax
cmpq %rax, %rdi
je 0x26045
movq 0x288(%rsp), %rsi
incq %rsi
callq 0x5340
jmp 0x26045
movq %rax, %rbx
jmp 0x260f0
jmp 0x263e2
movq %rax, %rbx
leaq 0x128(%rsp), %r15
movq 0x258(%rsp), %rdi
leaq 0x268(%rsp), %rax
cmpq %rax, %rdi
je 0x26077
movq 0x268(%rsp), %rsi
incq %rsi
callq 0x5340
jmp 0x26077
movq %rax, %rbx
leaq 0x128(%rsp), %r15
movq 0x238(%rsp), %rdi
leaq 0x248(%rsp), %rax
cmpq %rax, %rdi
je 0x260a9
movq 0x248(%rsp), %rsi
incq %rsi
callq 0x5340
jmp 0x260a9
movq %rax, %rbx
leaq 0x128(%rsp), %r15
movq 0x118(%rsp), %rdi
cmpq %r15, %rdi
je 0x260cb
movq 0x128(%rsp), %rsi
incq %rsi
callq 0x5340
jmp 0x260cb
movq %rax, %rbx
movq 0x1c0(%rsp), %rdi
leaq 0x1d0(%rsp), %rax
cmpq %rax, %rdi
je 0x260f0
movq 0x1d0(%rsp), %rsi
incq %rsi
callq 0x5340
movq 0x198(%rsp), %rdi
leaq 0x1a8(%rsp), %rax
cmpq %rax, %rdi
je 0x26115
movq 0x1a8(%rsp), %rsi
incq %rsi
callq 0x5340
movq 0x200(%rsp), %rdi
cmpq %r14, %rdi
je 0x26132
movq 0x210(%rsp), %rsi
incq %rsi
callq 0x5340
movq 0x1e0(%rsp), %rdi
leaq 0x1f0(%rsp), %rax
cmpq %rax, %rdi
je 0x26157
movq 0x1f0(%rsp), %rsi
incq %rsi
callq 0x5340
movq 0x178(%rsp), %rdi
leaq 0x188(%rsp), %rax
cmpq %rax, %rdi
je 0x2617c
movq 0x188(%rsp), %rsi
incq %rsi
callq 0x5340
movq 0x318(%rsp), %rdi
leaq 0x328(%rsp), %rax
cmpq %rax, %rdi
je 0x2644f
movq 0x328(%rsp), %rsi
jmp 0x263d6
movq %rax, %rbx
jmp 0x26115
movq %rax, %rbx
jmp 0x26132
movq %rax, %rbx
jmp 0x26157
movq %rax, %rbx
jmp 0x2617c
movq %rax, %rbx
jmp 0x2620e
movq %rax, %rbx
jmp 0x261e9
movq %rax, %rbx
jmp 0x2642a
movq %rax, %rbx
movq (%rsp), %rdi
leaq 0x10(%rsp), %rax
cmpq %rax, %rdi
je 0x261e9
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x5340
movq 0x338(%rsp), %rdi
leaq 0x348(%rsp), %rax
cmpq %rax, %rdi
je 0x2620e
movq 0x348(%rsp), %rsi
incq %rsi
callq 0x5340
movq 0x48(%rsp), %rdi
leaq 0x58(%rsp), %rax
cmpq %rax, %rdi
je 0x2630f
movq 0x58(%rsp), %rsi
incq %rsi
callq 0x5340
jmp 0x2630f
jmp 0x263e9
jmp 0x2623a
movq %rax, %rbx
jmp 0x262d6
movq %rax, %rbx
jmp 0x26295
movq %rax, %rbx
jmp 0x262ba
movq %rax, %rbx
jmp 0x26270
movq %rax, %rbx
movq 0x48(%rsp), %rdi
leaq 0x58(%rsp), %rax
cmpq %rax, %rdi
je 0x26270
movq 0x58(%rsp), %rsi
incq %rsi
callq 0x5340
movq 0x88(%rsp), %rdi
leaq 0x98(%rsp), %rax
cmpq %rax, %rdi
je 0x26295
movq 0x98(%rsp), %rsi
incq %rsi
callq 0x5340
movq 0xc0(%rsp), %rdi
leaq 0xd0(%rsp), %rax
cmpq %rax, %rdi
je 0x262ba
movq 0xd0(%rsp), %rsi
incq %rsi
callq 0x5340
movq 0x68(%rsp), %rdi
leaq 0x78(%rsp), %rax
cmpq %rax, %rdi
je 0x262d6
movq 0x78(%rsp), %rsi
incq %rsi
callq 0x5340
movq (%rsp), %rdi
leaq 0x10(%rsp), %rax
cmpq %rax, %rdi
je 0x263ec
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x5340
jmp 0x263ec
movq %rax, %rbx
jmp 0x2650d
movq %rax, %rbx
jmp 0x26350
movq %rax, %rbx
jmp 0x2632b
movq %rax, %rbx
movq 0x68(%rsp), %rdi
leaq 0x78(%rsp), %rax
cmpq %rax, %rdi
je 0x2632b
movq 0x78(%rsp), %rsi
incq %rsi
callq 0x5340
movq 0x88(%rsp), %rdi
leaq 0x98(%rsp), %rax
cmpq %rax, %rdi
je 0x26350
movq 0x98(%rsp), %rsi
incq %rsi
callq 0x5340
movq 0xc0(%rsp), %rdi
leaq 0xd0(%rsp), %rax
cmpq %rax, %rdi
je 0x2650d
movq 0xd0(%rsp), %rsi
jmp 0x26505
jmp 0x263c0
jmp 0x26447
jmp 0x2637f
movq %rax, %rbx
movq (%rsp), %rdi
leaq 0x10(%rsp), %rax
cmpq %rax, %rdi
jmp 0x263b2
jmp 0x26447
jmp 0x26447
jmp 0x263a8
jmp 0x26447
jmp 0x263a8
jmp 0x26447
movq %rax, %rbx
movq (%rsp), %rdi
cmpq %r15, %rdi
leaq 0x30(%rsp), %r13
jne 0x263d1
jmp 0x2644f
jmp 0x263e2
movq %rax, %rbx
movq (%rsp), %rdi
leaq 0x10(%rsp), %rax
cmpq %rax, %rdi
je 0x2644f
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x5340
jmp 0x2644f
jmp 0x263e9
movq %rax, %rbx
jmp 0x2644f
jmp 0x263e9
movq %rax, %rbx
movq 0xa8(%rsp), %rax
movq %rax, 0x338(%rsp)
movq -0x18(%rax), %rax
movq 0xf0(%rsp), %rcx
movq %rcx, 0x338(%rsp,%rax)
leaq 0x340(%rsp), %rdi
callq 0x52c0
leaq 0x430(%rsp), %rdi
callq 0x5100
movq 0x20(%rsp), %rdi
leaq 0x30(%rsp), %rax
cmpq %rax, %rdi
je 0x2650d
movq 0x30(%rsp), %rsi
jmp 0x26505
movq %rax, %rbx
leaq 0x30(%rsp), %r13
movq 0x68(%rsp), %rdi
leaq 0x78(%rsp), %rax
cmpq %rax, %rdi
je 0x2646b
movq 0x78(%rsp), %rsi
incq %rsi
callq 0x5340
movq 0xc0(%rsp), %rdi
leaq 0xd0(%rsp), %rax
cmpq %rax, %rdi
je 0x26490
movq 0xd0(%rsp), %rsi
incq %rsi
callq 0x5340
movq 0x88(%rsp), %rdi
leaq 0x98(%rsp), %rax
cmpq %rax, %rdi
je 0x264b5
movq 0x98(%rsp), %rsi
incq %rsi
callq 0x5340
movq 0x48(%rsp), %rdi
leaq 0x58(%rsp), %rax
cmpq %rax, %rdi
je 0x264d1
movq 0x58(%rsp), %rsi
incq %rsi
callq 0x5340
movq 0x20(%rsp), %rdi
cmpq %r13, %rdi
je 0x264e8
movq 0x30(%rsp), %rsi
incq %rsi
callq 0x5340
movq 0x338(%rsp), %rdi
leaq 0x348(%rsp), %rax
cmpq %rax, %rdi
je 0x2650d
movq 0x348(%rsp), %rsi
incq %rsi
callq 0x5340
movq 0xf8(%rsp), %rdi
leaq 0x108(%rsp), %rax
cmpq %rax, %rdi
je 0x26532
movq 0x108(%rsp), %rsi
incq %rsi
callq 0x5340
movq 0x16a7f(%rip), %rax     # 0x3cfb8
movq (%rax), %rcx
movq 0x18(%rax), %rax
leaq 0x540(%rsp), %rdi
movq %rcx, -0x8(%rdi)
movq -0x18(%rcx), %rcx
movq %rax, 0x538(%rsp,%rcx)
callq 0x52c0
leaq 0x630(%rsp), %rdi
callq 0x5100
leaq 0x220(%rsp), %rdi
callq 0x28a16
movq %rbx, %rdi
callq 0x55c0
nop