// File: /workspace/github_cpp_makefile_star2_O1/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, 0xf4(%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 %esi, %esi
cmpl %ecx, %edx
setl %sil
addl %eax, %esi
leaq (,%r15,8), %rax
testq %r15, %r15
movl %esi, 0x40(%rsp)
movl %esi, 0xc4(%rsp)
movq $-0x1, %r14
cmovnsq %rax, %r14
movq %r14, %rdi
callq 0x5030
movq %rax, 0x178(%r12)
testq %r15, %r15
jle 0x23a72
xorl %ebx, %ebx
movl $0x80, %edi
callq 0x5030
movq 0x178(%r12), %rcx
movq %rax, (%rcx,%rbx,8)
movq %r12, %r13
xorl %r12d, %r12d
movl $0x18, %edi
callq 0x5330
xorps %xmm0, %xmm0
movups %xmm0, (%rax)
movq $0x0, 0x10(%rax)
movq 0x178(%r13), %rcx
movq (%rcx,%rbx,8), %rcx
movq %rax, (%rcx,%r12,8)
incq %r12
cmpq $0x10, %r12
jne 0x23a37
incq %rbx
cmpq %r15, %rbx
movq %r13, %r12
jne 0x23a1b
movq %r14, %rdi
callq 0x5030
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
movq %r12, %rbx
jle 0x23c5d
xorl %r15d, %r15d
leaq 0x538(%rsp), %r14
xorl %r12d, %r12d
movl $0x28, %edi
callq 0x5030
movq 0x180(%rbx), %rcx
movq %rax, (%rcx,%r12,8)
movl $0x28, %edi
callq 0x5030
movq 0x188(%rbx), %rcx
movq %rax, (%rcx,%r12,8)
movl $0x28, %edi
callq 0x5030
movq 0x190(%rbx), %rcx
movq %rax, (%rcx,%r12,8)
movl $0x28, %edi
callq 0x5030
movq 0x198(%rbx), %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(%rbx), %rcx
movq (%rcx,%r12,8), %rcx
movq %rax, (%rcx,%r13)
movq 0x180(%rbx), %rax
movq (%rax,%r12,8), %rax
movq (%rax,%r13), %rdi
movl %r15d, 0x538(%rsp)
movl $0x10, %esi
movq %r14, %rdx
callq 0x29a7a
movl $0x18, %edi
callq 0x5330
xorps %xmm0, %xmm0
movups %xmm0, (%rax)
movq %r15, 0x10(%rax)
movq 0x188(%rbx), %rcx
movq (%rcx,%r12,8), %rcx
movq %rax, (%rcx,%r13)
movq 0x188(%rbx), %rax
movq (%rax,%r12,8), %rax
movq (%rax,%r13), %rdi
movl %r15d, 0x538(%rsp)
movl $0x10, %esi
movq %r14, %rdx
callq 0x29a7a
movl $0x18, %edi
callq 0x5330
xorps %xmm0, %xmm0
movups %xmm0, (%rax)
movq %r15, 0x10(%rax)
movq 0x190(%rbx), %rcx
movq (%rcx,%r12,8), %rcx
movq %rax, (%rcx,%r13)
movq 0x190(%rbx), %rax
movq (%rax,%r12,8), %rax
movq (%rax,%r13), %rdi
movl %r15d, 0x538(%rsp)
movl $0x10, %esi
movq %r14, %rdx
callq 0x29a7a
movl $0x18, %edi
callq 0x5330
xorps %xmm0, %xmm0
movups %xmm0, (%rax)
movq %r15, 0x10(%rax)
movq 0x198(%rbx), %rcx
movq (%rcx,%r12,8), %rcx
movq %rax, (%rcx,%r13)
movq 0x198(%rbx), %rax
movq (%rax,%r12,8), %rax
movq (%rax,%r13), %rdi
movl %r15d, 0x538(%rsp)
movl $0x10, %esi
movq %r14, %rdx
callq 0x29a7a
addq $0x8, %r13
cmpq $0x28, %r13
jne 0x23b23
incq %r12
movslq 0x4(%rbx), %rax
cmpq %rax, %r12
jl 0x23acc
xorps %xmm0, %xmm0
movaps %xmm0, 0x320(%rsp)
movq $0x0, 0x330(%rsp)
movl $0x0, 0xc0(%rsp)
movq %rbx, 0x48(%rsp)
movl 0x4(%rbx), %eax
decl %eax
je 0x23d57
leaq -0xd002(%rip), %rbx     # 0x16c94
leaq 0x338(%rsp), %r14
leaq 0xf4(%rsp), %r13
leaq 0xc4(%rsp), %rbp
leaq 0xc0(%rsp), %r15
leaq 0x320(%rsp), %r12
movq 0x48(%rsp), %rdx
movq %rbx, 0x538(%rsp)
movq $0x0, 0x540(%rsp)
movq %rdx, 0x108(%rsp)
movq %r14, %rdi
leaq 0x538(%rsp), %rsi
leaq 0x108(%rsp), %rdx
movq %r13, %rcx
movq %rbp, %r8
movq %r15, %r9
callq 0x29aae
movq %r12, %rdi
movq %r14, %rsi
callq 0x2c3f8
cmpq $0x0, 0x338(%rsp)
jne 0x263f5
movl 0xc4(%rsp), %eax
movl %eax, 0xf4(%rsp)
addl 0x40(%rsp), %eax
movl %eax, 0xc4(%rsp)
movl 0xc0(%rsp), %ecx
incl %ecx
movl %ecx, 0xc0(%rsp)
movq 0x48(%rsp), %rdx
movl 0x4(%rdx), %eax
decl %eax
cmpl %eax, %ecx
jb 0x23cc3
jmp 0x23d5e
xorl %ecx, %ecx
movq 0x48(%rsp), %rdx
cmpl %eax, %ecx
movq %rdx, %r12
je 0x23dab
movq 0x18264(%rip), %r14     # 0x3bfd0
leaq 0xdb02(%rip), %rsi      # 0x31875
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 0x18232(%rip), %rdi     # 0x3bfd0
callq 0x5040
movq %rax, %rdi
callq 0x5240
movslq 0xf4(%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 0x23df2
movl 0xc4(%rsp), %edx
movl 0xc0(%rsp), %ecx
movq %r12, %rdi
callq 0x16c94
jmp 0x23e38
movq 0x181d7(%rip), %r14     # 0x3bfd0
leaq 0xda95(%rip), %rsi      # 0x31895
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 0x181a5(%rip), %rdi     # 0x3bfd0
callq 0x5040
movq %rax, %rdi
callq 0x5240
movq 0x320(%rsp), %r14
movq 0x328(%rsp), %rbx
cmpq %rbx, %r14
je 0x23e5b
movq %r14, %rdi
callq 0x5580
addq $0x8, %r14
jmp 0x23e48
movq 0x1816e(%rip), %r14     # 0x3bfd0
leaq 0xda4b(%rip), %rsi      # 0x318b4
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 0x1813c(%rip), %rdi     # 0x3bfd0
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 0x112ce
leaq 0xd6e8(%rip), %rsi      # 0x315c3
leaq 0x20(%rsp), %rdi
callq 0x5630
movq 0x1a0(%r12), %rsi
movq 0x1a8(%r12), %rdx
leaq 0x20(%rsp), %rdi
callq 0x50f0
leaq 0x118(%rsp), %rsi
movq %rsi, -0x10(%rsi)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x23f2f
movq %rdx, 0x108(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x118(%rsp)
jmp 0x23f35
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0x8(%rax), %rdx
leaq 0x108(%rsp), %rdi
movq %rdx, 0x8(%rdi)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0xd96c(%rip), %rsi      # 0x318c7
callq 0x5630
leaq 0x348(%rsp), %rsi
movq %rsi, -0x10(%rsi)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x23f90
movq %rdx, 0x338(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x348(%rsp)
jmp 0x23f96
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 0x23fec
movq 0x348(%rsp), %rsi
incq %rsi
callq 0x5340
movq 0x108(%rsp), %rdi
leaq 0x118(%rsp), %rax
cmpq %rax, %rdi
je 0x24011
movq 0x118(%rsp), %rsi
incq %rsi
callq 0x5340
movq 0x20(%rsp), %rdi
cmpq %r13, %rdi
je 0x24028
movq 0x30(%rsp), %rsi
incq %rsi
callq 0x5340
movq 0x17fa1(%rip), %r14     # 0x3bfd0
leaq 0xd897(%rip), %rsi      # 0x318cd
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 0x17f6f(%rip), %rdi     # 0x3bfd0
callq 0x5040
movq %rax, %rdi
callq 0x5240
leaq 0x108(%rsp), %rdi
leaq 0x118(%rsp), %rax
movq %rax, (%rdi)
leaq 0x338(%rsp), %rsi
movq $0x84, (%rsi)
xorl %edx, %edx
callq 0x55d0
movq %rax, %r15
movq %rax, 0x108(%rsp)
movq 0x338(%rsp), %rbx
movq %rbx, 0x118(%rsp)
leaq 0xd83a(%rip), %rsi      # 0x318f3
movl $0x84, %edx
movq %rax, %rdi
callq 0x52b0
movq %rbx, 0x110(%rsp)
movb $0x0, (%r15,%rbx)
movq 0x108(%rsp), %rsi
movq 0x110(%rsp), %rdx
movq 0x17ee6(%rip), %rdi     # 0x3bfd0
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 0xd858(%rip), %rsi      # 0x31978
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 0xd80f(%rip), %rsi      # 0x31984
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 0x108(%rsp), %rsi
movq 0x110(%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), %rax
cmpq %rax, 0x1f8(%r12)
je 0x25577
leaq 0x230(%rsp), %r14
leaq 0x2f0(%rsp), %rbp
movq $0x0, 0x1b8(%rsp)
movq 0x208(%r12), %rcx
cmpq %rcx, 0x210(%r12)
je 0x25544
movq 0x1b8(%rsp), %rdx
movl (%rax,%rdx,4), %eax
leal (%rax,%rax), %edx
andl $0x2, %edx
movl %edx, 0x218(%rsp)
movl %eax, %edx
negl %edx
cmovsl %eax, %edx
movl %edx, 0x100(%rsp)
shrl $0x1f, %eax
movq %rax, 0x148(%rsp)
movq $0x0, 0x1c0(%rsp)
movq 0x220(%r12), %rax
cmpq %rax, 0x228(%r12)
je 0x25511
movq 0x1c0(%rsp), %rdx
movl (%rcx,%rdx,4), %ecx
movl %ecx, %edx
andl $0x1, %edx
orl 0x218(%rsp), %edx
shll $0x2, %edx
movl %edx, 0x21c(%rsp)
movl %ecx, %edx
negl %edx
cmovsl %ecx, %edx
movl %edx, 0xbc(%rsp)
shrl $0x1f, %ecx
movq %rcx, 0xf8(%rsp)
xorl %edx, %edx
movq %rdx, 0x1c8(%rsp)
movl (%rax,%rdx,4), %eax
movq %rax, 0xb0(%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 0x60(%rsp), %rax
movq %rax, 0x50(%rsp)
movq %rcx, 0x58(%rsp)
movb %cl, 0x60(%rsp)
leaq 0xa0(%rsp), %rax
movq %rax, 0x90(%rsp)
movq %rcx, 0x98(%rsp)
movb %cl, 0xa0(%rsp)
leaq 0xd8(%rsp), %rax
movq %rax, 0xc8(%rsp)
movq %rcx, 0xd0(%rsp)
movb %cl, 0xd8(%rsp)
leaq 0x80(%rsp), %rax
movq %rax, 0x70(%rsp)
movq %rcx, 0x78(%rsp)
movb %cl, 0x80(%rsp)
cmpl $0x0, 0x268(%r12)
jle 0x2497a
movq 0xb0(%rsp), %rax
movl %eax, %r15d
andl $0x3, %r15d
orl 0x21c(%rsp), %r15d
xorl %ebx, %ebx
movq %r15, 0x1d0(%rsp)
movq 0x250(%r12), %rax
movsd (%rax,%rbx,8), %xmm0
movl $0x148, %edx            # imm = 0x148
movq %rsp, %rdi
movq 0x17bcf(%rip), %rsi     # 0x3bfa8
leaq 0xd6c9(%rip), %rcx      # 0x31aa9
movb $0x1, %al
callq 0x2af34
movq (%rsp), %rsi
movq 0x8(%rsp), %rdx
leaq 0x338(%rsp), %rdi
callq 0x50f0
movq (%rsp), %rdi
leaq 0x10(%rsp), %rax
cmpq %rax, %rdi
je 0x24418
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x5340
movq %rbx, 0x40(%rsp)
movslq 0x4(%r12), %rax
testq %rax, %rax
jle 0x24525
movq 0x180(%r12), %rcx
movq %rcx, 0xe8(%rsp)
movq 0x188(%r12), %rcx
movq %rcx, 0x150(%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 0xe8(%rsp), %rcx
movq (%rcx,%r9,8), %rdx
movq 0x40(%rsp), %rcx
movq (%rdx,%rcx,8), %rdx
movq (%rdx), %r10
movq 0x8(%rdx), %rdx
subq %r10, %rdx
sarq $0x2, %rdx
cmpq %r15, %rdx
movq %r15, %rsi
jbe 0x26328
movq 0x150(%rsp), %rdx
movq (%rdx,%r9,8), %rdx
movq (%rdx,%rcx,8), %rdx
movq (%rdx), %r11
movq 0x8(%rdx), %rdx
subq %r11, %rdx
sarq $0x2, %rdx
cmpq %rsi, %rdx
jbe 0x26328
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 0x26328
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 0x26328
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
jne 0x24469
jmp 0x24530
xorl %r13d, %r13d
xorl %r12d, %r12d
xorl %ebx, %ebx
xorl %r14d, %r14d
movl %r13d, %esi
negl %esi
cmovsl %r13d, %esi
movl $0x1, %ebp
cmpl $0xa, %esi
jb 0x24584
movl $0x4, %ebp
movl %esi, %eax
cmpl $0x63, %eax
jbe 0x2457d
cmpl $0x3e7, %eax            # imm = 0x3E7
jbe 0x24582
cmpl $0x2710, %eax           # imm = 0x2710
jb 0x24584
movl %eax, %ecx
movl $0xd1b71759, %edx       # imm = 0xD1B71759
imulq %rdx, %rcx
shrq $0x2d, %rcx
addl $0x4, %ebp
cmpl $0x1869f, %eax          # imm = 0x1869F
movl %ecx, %eax
ja 0x2454a
addl $-0x3, %ebp
jmp 0x24584
addl $-0x2, %ebp
jmp 0x24584
decl %ebp
movl %esi, 0xe8(%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 0xe8(%rsp), %edx
callq 0xe3b6
movq (%rsp), %rsi
movq 0x8(%rsp), %rdx
leaq 0x20(%rsp), %rdi
callq 0x50f0
movq (%rsp), %rdi
leaq 0x10(%rsp), %r15
cmpq %r15, %rdi
je 0x245ed
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x5340
movl %r12d, %r13d
negl %r13d
cmovsl %r12d, %r13d
movl $0x1, %ebp
cmpl $0xa, %r13d
jb 0x24644
movl $0x4, %ebp
movl %r13d, %eax
cmpl $0x63, %eax
jbe 0x2463d
cmpl $0x3e7, %eax            # imm = 0x3E7
jbe 0x24642
cmpl $0x2710, %eax           # imm = 0x2710
jb 0x24644
movl %eax, %ecx
movl $0xd1b71759, %edx       # imm = 0xD1B71759
imulq %rdx, %rcx
shrq $0x2d, %rcx
addl $0x4, %ebp
cmpl $0x1869f, %eax          # imm = 0x1869F
movl %ecx, %eax
ja 0x2460a
addl $-0x3, %ebp
jmp 0x24644
addl $-0x2, %ebp
jmp 0x24644
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 0xe3b6
movq (%rsp), %rsi
movq 0x8(%rsp), %rdx
leaq 0x50(%rsp), %rdi
callq 0x50f0
movq (%rsp), %rdi
cmpq %r15, %rdi
je 0x24697
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x5340
movq 0x48(%rsp), %rax
cvtsi2ssl 0x4c(%rax), %xmm0
movq 0x270(%rax), %rax
movss 0xcc24(%rip), %xmm1     # 0x312d4
movq 0x40(%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 0x2471a
movl $0x4, %ebp
movl %r12d, %eax
cmpl $0x63, %eax
jbe 0x24713
cmpl $0x3e7, %eax            # imm = 0x3E7
jbe 0x24718
cmpl $0x2710, %eax           # imm = 0x2710
jb 0x2471a
movl %eax, %ecx
movl $0xd1b71759, %edx       # imm = 0xD1B71759
imulq %rdx, %rcx
shrq $0x2d, %rcx
addl $0x4, %ebp
cmpl $0x1869f, %eax          # imm = 0x1869F
movl %ecx, %eax
ja 0x246e0
addl $-0x3, %ebp
jmp 0x2471a
addl $-0x2, %ebp
jmp 0x2471a
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 0xe3b6
movq (%rsp), %rsi
movq 0x8(%rsp), %rdx
leaq 0x90(%rsp), %rdi
callq 0x50f0
movq (%rsp), %rdi
leaq 0x10(%rsp), %r15
cmpq %r15, %rdi
je 0x2477b
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x5340
movl %ebx, %r12d
negl %r12d
cmovsl %ebx, %r12d
movl $0x1, %ebp
cmpl $0xa, %r12d
jb 0x247d2
movl $0x4, %ebp
movl %r12d, %eax
cmpl $0x63, %eax
jbe 0x247cb
cmpl $0x3e7, %eax            # imm = 0x3E7
jbe 0x247d0
cmpl $0x2710, %eax           # imm = 0x2710
jb 0x247d2
movl %eax, %ecx
movl $0xd1b71759, %edx       # imm = 0xD1B71759
imulq %rdx, %rcx
shrq $0x2d, %rcx
addl $0x4, %ebp
cmpl $0x1869f, %eax          # imm = 0x1869F
movl %ecx, %eax
ja 0x24798
addl $-0x3, %ebp
jmp 0x247d2
addl $-0x2, %ebp
jmp 0x247d2
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 0xe3b6
movq (%rsp), %rsi
movq 0x8(%rsp), %rdx
leaq 0xc8(%rsp), %rdi
callq 0x50f0
movq (%rsp), %rdi
cmpq %r15, %rdi
je 0x24825
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x5340
movl %r14d, %r12d
negl %r12d
cmovsl %r14d, %r12d
movl $0x1, %ebp
cmpl $0xa, %r12d
leaq 0xcd22(%rip), %rbx      # 0x31561
jb 0x24883
movl $0x4, %ebp
movl %r12d, %eax
cmpl $0x63, %eax
jbe 0x2487c
cmpl $0x3e7, %eax            # imm = 0x3E7
jbe 0x24881
cmpl $0x2710, %eax           # imm = 0x2710
jb 0x24883
movl %eax, %ecx
movl $0xd1b71759, %edx       # imm = 0xD1B71759
imulq %rdx, %rcx
shrq $0x2d, %rcx
addl $0x4, %ebp
cmpl $0x1869f, %eax          # imm = 0x1869F
movl %ecx, %eax
ja 0x24849
addl $-0x3, %ebp
jmp 0x24883
addl $-0x2, %ebp
jmp 0x24883
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 0xe3b6
movq (%rsp), %rsi
movq 0x8(%rsp), %rdx
leaq 0x70(%rsp), %rdi
callq 0x50f0
movq (%rsp), %rdi
cmpq %r15, %rdi
leaq 0x30(%rsp), %r13
je 0x248db
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x5340
movq 0x48(%rsp), %r12
movslq 0x268(%r12), %rax
decq %rax
cmpq %rax, 0x40(%rsp)
leaq 0x230(%rsp), %r14
leaq 0x2f0(%rsp), %rbp
movq 0x1d0(%rsp), %r15
jge 0x24961
leaq 0x338(%rsp), %rdi
movq %rbx, %rsi
callq 0x5630
leaq 0x20(%rsp), %rdi
movq %rbx, %rsi
callq 0x5630
leaq 0x50(%rsp), %rdi
movq %rbx, %rsi
callq 0x5630
leaq 0x90(%rsp), %rdi
movq %rbx, %rsi
callq 0x5630
leaq 0xc8(%rsp), %rdi
movq %rbx, %rsi
callq 0x5630
leaq 0x70(%rsp), %rdi
movq %rbx, %rsi
callq 0x5630
movq 0x40(%rsp), %rbx
incq %rbx
movslq 0x268(%r12), %rax
cmpq %rax, %rbx
jl 0x243bd
movl $0x1, %r15d
cmpl $0xa, 0x100(%rsp)
leaq 0x300(%rsp), %rbx
movq 0x148(%rsp), %r12
jb 0x249e5
movl $0x4, %r15d
movl 0x100(%rsp), %eax
cmpl $0x63, %eax
jbe 0x249dc
cmpl $0x3e7, %eax            # imm = 0x3E7
jbe 0x249e2
cmpl $0x2710, %eax           # imm = 0x2710
jb 0x249e5
movl %eax, %ecx
movl $0xd1b71759, %edx       # imm = 0xD1B71759
imulq %rdx, %rcx
shrq $0x2d, %rcx
addl $0x4, %r15d
cmpl $0x1869f, %eax          # imm = 0x1869F
movl %ecx, %eax
ja 0x249a7
addl $-0x3, %r15d
jmp 0x249e5
addl $-0x2, %r15d
jmp 0x249e5
decl %r15d
leal (%r15,%r12), %esi
leaq 0x310(%rsp), %rax
movq %rax, 0x300(%rsp)
movq %rbx, %rdi
movl $0x2d, %edx
callq 0x53b0
movq 0x300(%rsp), %rdi
addq %r12, %rdi
movl %r15d, %esi
movl 0x100(%rsp), %edx
callq 0xe3b6
movq %rbx, %rdi
leaq 0xcb97(%rip), %rsi      # 0x315c1
callq 0x5630
leaq 0x188(%rsp), %rsi
movq %rsi, 0x178(%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x24a63
movq %rdx, 0x178(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x188(%rsp)
jmp 0x24a69
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0xf8(%rsp), %rbx
movl 0xbc(%rsp), %r12d
movq 0x8(%rax), %rdx
movq %rdx, 0x180(%rsp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movl $0x1, %r15d
cmpl $0xa, %r12d
jb 0x24ae7
movl $0x4, %r15d
movl %r12d, %eax
cmpl $0x63, %eax
jbe 0x24ade
cmpl $0x3e7, %eax            # imm = 0x3E7
jbe 0x24ae4
cmpl $0x2710, %eax           # imm = 0x2710
jb 0x24ae7
movl %eax, %ecx
movl $0xd1b71759, %edx       # imm = 0xD1B71759
imulq %rdx, %rcx
shrq $0x2d, %rcx
addl $0x4, %r15d
cmpl $0x1869f, %eax          # imm = 0x1869F
movl %ecx, %eax
ja 0x24aa9
addl $-0x3, %r15d
jmp 0x24ae7
addl $-0x2, %r15d
jmp 0x24ae7
decl %r15d
leal (%r15,%rbx), %esi
leaq 0x208(%rsp), %rax
movq %rax, 0x1f8(%rsp)
leaq 0x1f8(%rsp), %rdi
movl $0x2d, %edx
callq 0x53b0
movq 0x1f8(%rsp), %rdi
addq %rbx, %rdi
movl %r15d, %esi
movl %r12d, %edx
callq 0xe3b6
movq 0x178(%rsp), %rcx
movl $0xf, %esi
leaq 0x188(%rsp), %rax
cmpq %rax, %rcx
je 0x24b45
movq 0x188(%rsp), %rsi
movq 0x180(%rsp), %r8
movq 0x200(%rsp), %rdx
leaq (%rdx,%r8), %rax
cmpq %rsi, %rax
jbe 0x24b82
movl $0xf, %esi
leaq 0x208(%rsp), %rdi
cmpq %rdi, 0x1f8(%rsp)
je 0x24b7d
movq 0x208(%rsp), %rsi
cmpq %rsi, %rax
jbe 0x24b99
movq 0x1f8(%rsp), %rsi
leaq 0x178(%rsp), %rdi
callq 0x50f0
jmp 0x24baa
leaq 0x1f8(%rsp), %rdi
xorl %esi, %esi
xorl %edx, %edx
callq 0x5380
movq %r14, 0x220(%rsp)
movq (%rax), %rdx
leaq 0x10(%rax), %rcx
cmpq %rcx, %rdx
je 0x24bd3
movq %rdx, 0x220(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x230(%rsp)
jmp 0x24bda
movups (%rcx), %xmm0
movups %xmm0, (%r14)
movq %rax, %rdx
addq $0x8, %rdx
movq 0x8(%rax), %rsi
movq %rsi, 0x228(%rsp)
movq %rcx, (%rax)
movq $0x0, (%rdx)
movb $0x0, (%rcx)
leaq 0x220(%rsp), %rdi
leaq 0xc9b8(%rip), %rsi      # 0x315c1
callq 0x5630
leaq 0x1a8(%rsp), %rsi
movq %rsi, 0x198(%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x24c42
movq %rdx, 0x198(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x1a8(%rsp)
jmp 0x24c48
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 0xb0(%rsp), %rbx
movl %ebx, %r15d
negl %r15d
cmovsl %ebx, %r15d
movl $0x1, %r12d
cmpl $0xa, %r15d
jb 0x24cd0
movl $0x4, %r12d
movl %r15d, %eax
cmpl $0x63, %eax
jbe 0x24cbf
cmpl $0x3e7, %eax            # imm = 0x3E7
jbe 0x24cc5
cmpl $0x2710, %eax           # imm = 0x2710
jb 0x24cc8
movl %eax, %ecx
movl $0xd1b71759, %edx       # imm = 0xD1B71759
imulq %rdx, %rcx
shrq $0x2d, %rcx
addl $0x4, %r12d
cmpl $0x1869f, %eax          # imm = 0x1869F
movl %ecx, %eax
ja 0x24c8a
addl $-0x3, %r12d
jmp 0x24cc8
addl $-0x2, %r12d
jmp 0x24cc8
decl %r12d
movq 0xb0(%rsp), %rbx
shrl $0x1f, %ebx
leal (%r12,%rbx), %esi
leaq 0x1e8(%rsp), %rax
movq %rax, 0x1d8(%rsp)
leaq 0x1d8(%rsp), %rdi
movl $0x2d, %edx
callq 0x53b0
addq 0x1d8(%rsp), %rbx
movq %rbx, %rdi
movl %r12d, %esi
movl %r15d, %edx
callq 0xe3b6
movq 0x198(%rsp), %rcx
movl $0xf, %esi
leaq 0x1a8(%rsp), %rax
cmpq %rax, %rcx
je 0x24d31
movq 0x1a8(%rsp), %rsi
movq 0x1a0(%rsp), %r8
movq 0x1e0(%rsp), %rdx
leaq (%rdx,%r8), %rax
cmpq %rsi, %rax
movq 0x48(%rsp), %r12
jbe 0x24d73
movl $0xf, %esi
leaq 0x1e8(%rsp), %rdi
cmpq %rdi, 0x1d8(%rsp)
je 0x24d6e
movq 0x1e8(%rsp), %rsi
cmpq %rsi, %rax
jbe 0x24d8a
movq 0x1d8(%rsp), %rsi
leaq 0x198(%rsp), %rdi
callq 0x50f0
jmp 0x24d9b
leaq 0x1d8(%rsp), %rdi
xorl %esi, %esi
xorl %edx, %edx
callq 0x5380
leaq 0x138(%rsp), %rsi
movq %rsi, 0x128(%rsp)
movq (%rax), %rdx
leaq 0x10(%rax), %rcx
cmpq %rcx, %rdx
je 0x24dcc
movq %rdx, 0x128(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x138(%rsp)
jmp 0x24dd2
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq %rax, %rdx
addq $0x8, %rdx
movq 0x8(%rax), %rsi
movq %rsi, 0x130(%rsp)
movq %rcx, (%rax)
movq $0x0, (%rdx)
movb $0x0, (%rcx)
leaq 0x128(%rsp), %rdi
leaq 0xc7c0(%rip), %rsi      # 0x315c1
callq 0x5630
leaq 0x168(%rsp), %rsi
movq %rsi, 0x158(%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x24e3a
movq %rdx, 0x158(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x168(%rsp)
jmp 0x24e40
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0x8(%rax), %rdx
movq %rdx, 0x160(%rsp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq 0x338(%rsp), %rsi
movq 0x340(%rsp), %rdx
leaq 0x158(%rsp), %rdi
callq 0x50f0
leaq 0x250(%rsp), %rsi
movq %rsi, 0x240(%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x24eac
movq %rdx, 0x240(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x250(%rsp)
jmp 0x24eb2
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0x8(%rax), %rdx
movq %rdx, 0x248(%rsp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0x240(%rsp), %rdi
leaq 0xc6e5(%rip), %rsi      # 0x315c1
callq 0x5630
leaq 0x270(%rsp), %rsi
movq %rsi, 0x260(%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x24f15
movq %rdx, 0x260(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x270(%rsp)
jmp 0x24f1b
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0x8(%rax), %rdx
movq %rdx, 0x268(%rsp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq 0x20(%rsp), %rsi
movq 0x28(%rsp), %rdx
leaq 0x260(%rsp), %rdi
callq 0x50f0
leaq 0x290(%rsp), %rsi
movq %rsi, 0x280(%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x24f81
movq %rdx, 0x280(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x290(%rsp)
jmp 0x24f87
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0x8(%rax), %rdx
movq %rdx, 0x288(%rsp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0x280(%rsp), %rdi
leaq 0xc610(%rip), %rsi      # 0x315c1
callq 0x5630
leaq 0x2b0(%rsp), %rsi
movq %rsi, 0x2a0(%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x24fea
movq %rdx, 0x2a0(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x2b0(%rsp)
jmp 0x24ff0
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0x8(%rax), %rdx
movq %rdx, 0x2a8(%rsp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq 0x50(%rsp), %rsi
movq 0x58(%rsp), %rdx
leaq 0x2a0(%rsp), %rdi
callq 0x50f0
leaq 0x2d0(%rsp), %rsi
movq %rsi, 0x2c0(%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x25056
movq %rdx, 0x2c0(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x2d0(%rsp)
jmp 0x2505c
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0x8(%rax), %rdx
movq %rdx, 0x2c8(%rsp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0x2c0(%rsp), %rdi
leaq 0xc53b(%rip), %rsi      # 0x315c1
callq 0x5630
movq %rbp, 0x2e0(%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x250b7
movq %rdx, 0x2e0(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x2f0(%rsp)
jmp 0x250be
movups (%rcx), %xmm0
movups %xmm0, (%rbp)
movq 0x8(%rax), %rdx
movq %rdx, 0x2e8(%rsp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq 0x90(%rsp), %rsi
movq 0x98(%rsp), %rdx
leaq 0x2e0(%rsp), %rdi
callq 0x50f0
leaq 0x10(%rsp), %rsi
movq %rsi, (%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x2511c
movq %rdx, (%rsp)
movq (%rcx), %rdx
movq %rdx, 0x10(%rsp)
jmp 0x25122
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 0x2e0(%rsp), %rdi
cmpq %rbp, %rdi
je 0x25157
movq 0x2f0(%rsp), %rsi
incq %rsi
callq 0x5340
movq 0x2c0(%rsp), %rdi
leaq 0x2d0(%rsp), %rax
cmpq %rax, %rdi
je 0x2517c
movq 0x2d0(%rsp), %rsi
incq %rsi
callq 0x5340
movq 0x2a0(%rsp), %rdi
leaq 0x2b0(%rsp), %rax
cmpq %rax, %rdi
je 0x251a1
movq 0x2b0(%rsp), %rsi
incq %rsi
callq 0x5340
movq 0x280(%rsp), %rdi
leaq 0x290(%rsp), %rax
cmpq %rax, %rdi
je 0x251c6
movq 0x290(%rsp), %rsi
incq %rsi
callq 0x5340
movq 0x260(%rsp), %rdi
leaq 0x270(%rsp), %rax
cmpq %rax, %rdi
je 0x251eb
movq 0x270(%rsp), %rsi
incq %rsi
callq 0x5340
movq 0x240(%rsp), %rdi
leaq 0x250(%rsp), %rax
cmpq %rax, %rdi
je 0x25210
movq 0x250(%rsp), %rsi
incq %rsi
callq 0x5340
movq 0x158(%rsp), %rdi
leaq 0x168(%rsp), %rax
cmpq %rax, %rdi
je 0x25235
movq 0x168(%rsp), %rsi
incq %rsi
callq 0x5340
movq 0x128(%rsp), %rdi
leaq 0x138(%rsp), %rax
cmpq %rax, %rdi
je 0x2525a
movq 0x138(%rsp), %rsi
incq %rsi
callq 0x5340
movq 0x1d8(%rsp), %rdi
leaq 0x1e8(%rsp), %rax
cmpq %rax, %rdi
je 0x2527f
movq 0x1e8(%rsp), %rsi
incq %rsi
callq 0x5340
movq 0x198(%rsp), %rdi
leaq 0x1a8(%rsp), %rax
cmpq %rax, %rdi
je 0x252a4
movq 0x1a8(%rsp), %rsi
incq %rsi
callq 0x5340
movq 0x220(%rsp), %rdi
cmpq %r14, %rdi
je 0x252c1
movq 0x230(%rsp), %rsi
incq %rsi
callq 0x5340
movq 0x1f8(%rsp), %rdi
leaq 0x208(%rsp), %rax
cmpq %rax, %rdi
je 0x252e6
movq 0x208(%rsp), %rsi
incq %rsi
callq 0x5340
movq 0x178(%rsp), %rdi
leaq 0x188(%rsp), %rax
cmpq %rax, %rdi
je 0x2530b
movq 0x188(%rsp), %rsi
incq %rsi
callq 0x5340
movq 0x300(%rsp), %rdi
leaq 0x310(%rsp), %rax
cmpq %rax, %rdi
je 0x25330
movq 0x310(%rsp), %rsi
incq %rsi
callq 0x5340
movq (%rsp), %rsi
movq 0x8(%rsp), %rdx
movq 0x16c90(%rip), %rdi     # 0x3bfd0
callq 0x53a0
movq %rax, %r15
movl $0x1, %edx
movq %rax, %rdi
leaq 0xc26a(%rip), %rsi      # 0x315c1
callq 0x53a0
movq 0xc8(%rsp), %rsi
movq 0xd0(%rsp), %rdx
movq %r15, %rdi
callq 0x53a0
movq %rax, %r15
movl $0x1, %edx
movq %rax, %rdi
leaq 0xc23b(%rip), %rsi      # 0x315c1
callq 0x53a0
movq 0x70(%rsp), %rsi
movq 0x78(%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 0x25422
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x5340
movq 0x70(%rsp), %rdi
leaq 0x80(%rsp), %rax
cmpq %rax, %rdi
je 0x25444
movq 0x80(%rsp), %rsi
incq %rsi
callq 0x5340
movq 0xc8(%rsp), %rdi
leaq 0xd8(%rsp), %rax
cmpq %rax, %rdi
je 0x25469
movq 0xd8(%rsp), %rsi
incq %rsi
callq 0x5340
movq 0x90(%rsp), %rdi
leaq 0xa0(%rsp), %rax
cmpq %rax, %rdi
je 0x2548e
movq 0xa0(%rsp), %rsi
incq %rsi
callq 0x5340
movq 0x50(%rsp), %rdi
leaq 0x60(%rsp), %rax
cmpq %rax, %rdi
je 0x254aa
movq 0x60(%rsp), %rsi
incq %rsi
callq 0x5340
movq 0x20(%rsp), %rdi
cmpq %r13, %rdi
je 0x254c1
movq 0x30(%rsp), %rsi
incq %rsi
callq 0x5340
movq 0x338(%rsp), %rdi
leaq 0x348(%rsp), %rax
cmpq %rax, %rdi
je 0x254e6
movq 0x348(%rsp), %rsi
incq %rsi
callq 0x5340
movq 0x1c8(%rsp), %rdx
incq %rdx
movq 0x220(%r12), %rax
movq 0x228(%r12), %rcx
subq %rax, %rcx
sarq $0x2, %rcx
cmpq %rdx, %rcx
ja 0x242e1
movq 0x1c0(%rsp), %rsi
incq %rsi
movq 0x208(%r12), %rcx
movq 0x210(%r12), %rax
subq %rcx, %rax
sarq $0x2, %rax
movq %rsi, 0x1c0(%rsp)
cmpq %rsi, %rax
ja 0x2428f
movq 0x1b8(%rsp), %rsi
incq %rsi
movq 0x1f0(%r12), %rax
movq 0x1f8(%r12), %rcx
subq %rax, %rcx
sarq $0x2, %rcx
movq %rsi, 0x1b8(%rsp)
cmpq %rsi, %rcx
ja 0x2423c
leaq 0x538(%rsp), %rdi
callq 0x5440
movq 0x1f0(%r12), %rax
cmpq %rax, 0x1f8(%r12)
je 0x260a7
leaq 0xd8(%rsp), %rdi
movq 0x16a0f(%rip), %rcx     # 0x3bfb8
movq (%rcx), %rdx
movq %rdx, 0xb0(%rsp)
movq 0x18(%rcx), %rcx
movq %rcx, 0x100(%rsp)
movq $0x0, 0x148(%rsp)
leaq 0xc8(%rsp), %rbx
movq 0x208(%r12), %rcx
cmpq %rcx, 0x210(%r12)
je 0x26074
movq 0x148(%rsp), %rdx
movl (%rax,%rdx,4), %esi
leal (%rsi,%rsi), %eax
andl $0x2, %eax
movl %eax, 0xbc(%rsp)
movl %esi, %eax
negl %eax
cmovsl %esi, %eax
movl %eax, 0xe8(%rsp)
shrl $0x1f, %esi
movq $0x0, 0xf8(%rsp)
movq %rsi, 0x1d0(%rsp)
movq 0x220(%r12), %rax
cmpq %rax, 0x228(%r12)
je 0x26041
movq 0xf8(%rsp), %rdx
movl (%rcx,%rdx,4), %ecx
movl %ecx, %edx
andl $0x1, %edx
orl 0xbc(%rsp), %edx
shll $0x2, %edx
movl %edx, 0x1c8(%rsp)
movl %ecx, %edx
negl %edx
cmovsl %ecx, %edx
movl %edx, 0x40(%rsp)
shrl $0x1f, %ecx
movq %rcx, 0x150(%rsp)
xorl %r15d, %r15d
movl $0x1, %r13d
cmpl $0xa, 0xe8(%rsp)
movl $0xd1b71759, %r12d      # imm = 0xD1B71759
jb 0x256d6
movl $0x4, %r13d
movl 0xe8(%rsp), %ecx
cmpl $0x63, %ecx
jbe 0x256cd
cmpl $0x3e7, %ecx            # imm = 0x3E7
jbe 0x256d3
cmpl $0x2710, %ecx           # imm = 0x2710
jb 0x256d6
movl %ecx, %edx
imulq %r12, %rdx
shrq $0x2d, %rdx
addl $0x4, %r13d
cmpl $0x1869f, %ecx          # imm = 0x1869F
movl %edx, %ecx
ja 0x2569a
addl $-0x3, %r13d
jmp 0x256d6
addl $-0x2, %r13d
jmp 0x256d6
decl %r13d
movl (%rax,%r15,4), %r14d
movq %rsi, %rbp
addl %r13d, %esi
movq %rdi, 0xc8(%rsp)
movq %rbx, %rdi
movl $0x2d, %edx
callq 0x53b0
movq 0xc8(%rsp), %rdi
addq %rbp, %rdi
movl %r13d, %esi
movl 0xe8(%rsp), %edx
callq 0xe3b6
movq %rbx, %rdi
leaq 0xc274(%rip), %rsi      # 0x3198d
callq 0x5630
leaq 0xa0(%rsp), %rsi
movq %rsi, 0x90(%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x25752
movq %rdx, 0x90(%rsp)
movq (%rcx), %rdx
movq %rdx, 0xa0(%rsp)
jmp 0x25758
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0x150(%rsp), %rsi
movq 0x8(%rax), %rdx
movq %rdx, 0x98(%rsp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movl $0x1, %r13d
cmpl $0xa, 0x40(%rsp)
jb 0x257cb
movl $0x4, %r13d
movl 0x40(%rsp), %eax
cmpl $0x63, %eax
jbe 0x257c2
cmpl $0x3e7, %eax            # imm = 0x3E7
jbe 0x257c8
cmpl $0x2710, %eax           # imm = 0x2710
jb 0x257cb
movl %eax, %ecx
imulq %r12, %rcx
shrq $0x2d, %rcx
addl $0x4, %r13d
cmpl $0x1869f, %eax          # imm = 0x1869F
movl %ecx, %eax
ja 0x25792
addl $-0x3, %r13d
jmp 0x257cb
addl $-0x2, %r13d
jmp 0x257cb
decl %r13d
movq %rsi, %rbp
addl %r13d, %esi
leaq 0x80(%rsp), %rax
movq %rax, 0x70(%rsp)
leaq 0x70(%rsp), %rdi
movl $0x2d, %edx
callq 0x53b0
movq 0x70(%rsp), %rdi
addq %rbp, %rdi
movl %r13d, %esi
movl 0x40(%rsp), %edx
callq 0xe3b6
movq 0x90(%rsp), %rcx
movl $0xf, %esi
leaq 0xa0(%rsp), %rax
cmpq %rax, %rcx
je 0x25823
movq 0xa0(%rsp), %rsi
movq 0x98(%rsp), %r8
movq 0x78(%rsp), %rdx
leaq (%rdx,%r8), %rax
cmpq %rsi, %rax
jbe 0x2585a
movl $0xf, %esi
leaq 0x80(%rsp), %rdi
cmpq %rdi, 0x70(%rsp)
je 0x25855
movq 0x80(%rsp), %rsi
cmpq %rsi, %rax
jbe 0x2586e
movq 0x70(%rsp), %rsi
leaq 0x90(%rsp), %rdi
callq 0x50f0
jmp 0x2587c
leaq 0x70(%rsp), %rdi
xorl %esi, %esi
xorl %edx, %edx
callq 0x5380
leaq 0x60(%rsp), %rsi
movq %rsi, 0x50(%rsp)
movq (%rax), %rdx
leaq 0x10(%rax), %rcx
cmpq %rcx, %rdx
je 0x258a1
movq %rdx, 0x50(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x60(%rsp)
jmp 0x258a7
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq %rax, %rdx
addq $0x8, %rdx
movq 0x8(%rax), %rsi
movq %rsi, 0x58(%rsp)
movq %rcx, (%rax)
movq $0x0, (%rdx)
movb $0x0, (%rcx)
leaq 0x50(%rsp), %rdi
leaq 0xc0bd(%rip), %rsi      # 0x3198d
callq 0x5630
leaq 0x348(%rsp), %rsi
movq %rsi, 0x338(%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x25909
movq %rdx, 0x338(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x348(%rsp)
jmp 0x2590f
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 0x2597c
movl $0x4, %ebp
movl %r13d, %eax
cmpl $0x63, %eax
jbe 0x25975
cmpl $0x3e7, %eax            # imm = 0x3E7
jbe 0x2597a
cmpl $0x2710, %eax           # imm = 0x2710
jb 0x2597c
movl %eax, %ecx
imulq %r12, %rcx
shrq $0x2d, %rcx
addl $0x4, %ebp
cmpl $0x1869f, %eax          # imm = 0x1869F
movl %ecx, %eax
ja 0x25947
addl $-0x3, %ebp
jmp 0x2597c
addl $-0x2, %ebp
jmp 0x2597c
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 0xe3b6
movq 0x338(%rsp), %rcx
movl $0xf, %esi
leaq 0x348(%rsp), %rax
cmpq %rax, %rcx
je 0x259d0
movq 0x348(%rsp), %rsi
movq 0x340(%rsp), %r8
movq 0x8(%rsp), %rdx
leaq (%rdx,%r8), %rax
cmpq %rsi, %rax
movq 0x48(%rsp), %r12
jbe 0x25a05
movl $0xf, %esi
leaq 0x10(%rsp), %rdi
cmpq %rdi, (%rsp)
je 0x25a00
movq 0x10(%rsp), %rsi
cmpq %rsi, %rax
jbe 0x25a18
movq (%rsp), %rsi
leaq 0x338(%rsp), %rdi
callq 0x50f0
jmp 0x25a24
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 0x25a49
movq %rdx, 0x20(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x30(%rsp)
jmp 0x25a4f
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 0x25a87
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x5340
movq 0x338(%rsp), %rdi
leaq 0x348(%rsp), %rax
cmpq %rax, %rdi
je 0x25aac
movq 0x348(%rsp), %rsi
incq %rsi
callq 0x5340
movq 0x50(%rsp), %rdi
leaq 0x60(%rsp), %rax
cmpq %rax, %rdi
je 0x25ac8
movq 0x60(%rsp), %rsi
incq %rsi
callq 0x5340
movq 0x70(%rsp), %rdi
leaq 0x80(%rsp), %rax
cmpq %rax, %rdi
je 0x25aea
movq 0x80(%rsp), %rsi
incq %rsi
callq 0x5340
movq 0x90(%rsp), %rdi
leaq 0xa0(%rsp), %rax
cmpq %rax, %rdi
je 0x25b0f
movq 0xa0(%rsp), %rsi
incq %rsi
callq 0x5340
movq 0xc8(%rsp), %rdi
leaq 0xd8(%rsp), %rax
cmpq %rax, %rdi
je 0x25b34
movq 0xd8(%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 0x112ce
movq %r13, %rdi
leaq 0xba51(%rip), %rsi      # 0x315c3
callq 0x5630
movq 0x1a0(%r12), %rsi
movq 0x1a8(%r12), %rdx
movq %r13, %rdi
callq 0x50f0
leaq 0x80(%rsp), %rsi
movq %rsi, 0x70(%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x25bbd
movq %rdx, 0x70(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x80(%rsp)
jmp 0x25bc3
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0x8(%rax), %rdx
movq %rdx, 0x78(%rsp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0x70(%rsp), %rdi
leaq 0xbe6f(%rip), %rsi      # 0x31a56
callq 0x5630
leaq 0xd8(%rsp), %rsi
movq %rsi, 0xc8(%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x25c20
movq %rdx, 0xc8(%rsp)
movq (%rcx), %rdx
movq %rdx, 0xd8(%rsp)
jmp 0x25c26
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0x8(%rax), %rdx
movq %rdx, 0xd0(%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 0xa0(%rsp), %rsi
movq %rsi, 0x90(%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x25c87
movq %rdx, 0x90(%rsp)
movq (%rcx), %rdx
movq %rdx, 0xa0(%rsp)
jmp 0x25c8d
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0x8(%rax), %rdx
movq %rdx, 0x98(%rsp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0x90(%rsp), %rdi
leaq 0xbcd8(%rip), %rsi      # 0x3198f
callq 0x5630
leaq 0x60(%rsp), %rsi
movq %rsi, 0x50(%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x25ce4
movq %rdx, 0x50(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x60(%rsp)
jmp 0x25cea
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0x8(%rax), %rdx
movq %rdx, 0x58(%rsp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0x338(%rsp), %rdi
leaq 0x50(%rsp), %rsi
movl $0x10, %edx
callq 0x5160
movq 0x50(%rsp), %rdi
leaq 0x60(%rsp), %rax
cmpq %rax, %rdi
je 0x25d35
movq 0x60(%rsp), %rsi
incq %rsi
callq 0x5340
movq 0x90(%rsp), %rdi
leaq 0xa0(%rsp), %rax
cmpq %rax, %rdi
je 0x25d5a
movq 0xa0(%rsp), %rsi
incq %rsi
callq 0x5340
movq 0xc8(%rsp), %rdi
leaq 0xd8(%rsp), %rax
cmpq %rax, %rdi
je 0x25d7f
movq 0xd8(%rsp), %rsi
incq %rsi
callq 0x5340
movq 0x70(%rsp), %rdi
leaq 0x80(%rsp), %rax
cmpq %rax, %rdi
je 0x25da1
movq 0x80(%rsp), %rsi
incq %rsi
callq 0x5340
movq (%rsp), %rdi
leaq 0x10(%rsp), %rax
cmpq %rax, %rdi
je 0x25dbc
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x5340
movl $0x7, %edx
leaq 0x338(%rsp), %rdi
leaq 0xbbc6(%rip), %rsi      # 0x31996
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 0xbb74(%rip), %rsi      # 0x3199e
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 0xbb22(%rip), %rsi      # 0x319a6
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
cmpl $0x0, 0x4(%r12)
jle 0x25fa4
andl $0x3, %r14d
orl 0x1c8(%rsp), %r14d
movl %r14d, %ebx
xorl %r14d, %r14d
movq 0x178(%r12), %rax
movq (%rax,%r14,8), %rax
movq (%rax,%rbx,8), %rax
movq (%rax), %rdi
cmpq %rdi, 0x8(%rax)
je 0x25f8e
xorl %r12d, %r12d
xorl %r13d, %r13d
addq %r12, %rdi
movl $0x20, %esi
xorl %edx, %edx
callq 0x52f0
cmpq $-0x1, %rax
je 0x25f5c
movq 0x48(%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 0x26336
movq (%rax,%r12), %rsi
movq 0x8(%rax,%r12), %rdx
leaq 0x338(%rsp), %rdi
callq 0x53a0
incq %r13
movq 0x48(%rsp), %rax
movq 0x178(%rax), %rax
movq (%rax,%r14,8), %rax
movq (%rax,%rbx,8), %rax
movq (%rax), %rdi
movq 0x8(%rax), %rax
subq %rdi, %rax
sarq $0x5, %rax
addq $0x20, %r12
cmpq %r13, %rax
ja 0x25f06
incq %r14
movq 0x48(%rsp), %r12
movslq 0x4(%r12), %rax
cmpq %rax, %r14
jl 0x25ee3
leaq 0x338(%rsp), %rdi
callq 0x5440
movq %rbp, %rbx
movq 0xb0(%rsp), %rax
movq %rax, 0x338(%rsp)
movq -0x18(%rax), %rax
movq 0x100(%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 0x2600e
movq 0x30(%rsp), %rsi
incq %rsi
callq 0x5340
incq %r15
movq 0x220(%r12), %rax
movq 0x228(%r12), %rcx
subq %rax, %rcx
sarq $0x2, %rcx
cmpq %r15, %rcx
leaq 0xd8(%rsp), %rdi
movq 0x1d0(%rsp), %rsi
ja 0x25677
movq 0xf8(%rsp), %r8
incq %r8
movq 0x208(%r12), %rcx
movq 0x210(%r12), %rax
subq %rcx, %rax
sarq $0x2, %rax
movq %r8, 0xf8(%rsp)
cmpq %r8, %rax
ja 0x25627
movq 0x148(%rsp), %rsi
incq %rsi
movq 0x1f0(%r12), %rax
movq 0x1f8(%r12), %rcx
subq %rax, %rcx
sarq $0x2, %rcx
movq %rsi, 0x148(%rsp)
cmpq %rsi, %rcx
ja 0x255d4
cmpl $0x0, 0x4(%r12)
jle 0x26252
xorl %ebx, %ebx
xorl %r15d, %r15d
movq 0x178(%r12), %rax
movq (%rax,%rbx,8), %rax
movq (%rax,%r15,8), %r14
testq %r14, %r14
je 0x260e2
movq %r14, %rdi
callq 0xe7ca
movl $0x18, %esi
movq %r14, %rdi
callq 0x5340
incq %r15
cmpq $0x10, %r15
jne 0x260b8
xorl %r15d, %r15d
movq 0x180(%r12), %rax
movq (%rax,%rbx,8), %rax
movq (%rax,%r15,8), %r14
testq %r14, %r14
je 0x26124
movq (%r14), %rdi
testq %rdi, %rdi
je 0x26117
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 0x2615a
movq (%r14), %rdi
testq %rdi, %rdi
je 0x2614d
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 0x26190
movq (%r14), %rdi
testq %rdi, %rdi
je 0x26183
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 0x261c6
movq (%r14), %rdi
testq %rdi, %rdi
je 0x261b9
movq 0x10(%r14), %rsi
subq %rdi, %rsi
callq 0x5340
movl $0x18, %esi
movq %r14, %rdi
callq 0x5340
incq %r15
cmpq $0x5, %r15
jne 0x260ee
movq 0x178(%r12), %rax
movq (%rax,%rbx,8), %rdi
testq %rdi, %rdi
je 0x261e9
callq 0x53f0
movq 0x180(%r12), %rax
movq (%rax,%rbx,8), %rdi
testq %rdi, %rdi
je 0x261ff
callq 0x53f0
movq 0x188(%r12), %rax
movq (%rax,%rbx,8), %rdi
testq %rdi, %rdi
je 0x26215
callq 0x53f0
movq 0x190(%r12), %rax
movq (%rax,%rbx,8), %rdi
testq %rdi, %rdi
je 0x2622b
callq 0x53f0
movq 0x198(%r12), %rax
movq (%rax,%rbx,8), %rdi
testq %rdi, %rdi
je 0x26241
callq 0x53f0
incq %rbx
movslq 0x4(%r12), %rax
cmpq %rax, %rbx
jl 0x260b5
movq 0x178(%r12), %rdi
testq %rdi, %rdi
je 0x26264
callq 0x53f0
movq 0x180(%r12), %rdi
testq %rdi, %rdi
je 0x26276
callq 0x53f0
movq 0x188(%r12), %rdi
testq %rdi, %rdi
je 0x26288
callq 0x53f0
movq 0x190(%r12), %rdi
testq %rdi, %rdi
je 0x2629a
callq 0x53f0
movq 0x198(%r12), %rdi
testq %rdi, %rdi
je 0x262ac
callq 0x53f0
movq 0x108(%rsp), %rdi
leaq 0x118(%rsp), %rax
cmpq %rax, %rdi
je 0x262d1
movq 0x118(%rsp), %rsi
incq %rsi
callq 0x5340
movq 0x15ce0(%rip), %rax     # 0x3bfb8
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 0x320(%rsp), %rdi
callq 0x28ea6
addq $0x738, %rsp            # imm = 0x738
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0xb795(%rip), %rdi      # 0x31ac4
xorl %eax, %eax
callq 0x5490
leaq 0xb787(%rip), %rdi      # 0x31ac4
movq %r13, %rsi
xorl %eax, %eax
callq 0x5490
jmp 0x267e9
jmp 0x263db
movq %rax, %rbx
movq 0x338(%rsp), %rdi
leaq 0x348(%rsp), %rax
cmpq %rax, %rdi
je 0x2637e
movq 0x348(%rsp), %rsi
incq %rsi
callq 0x5340
jmp 0x2637e
movq %rax, %rbx
movq 0x108(%rsp), %rdi
leaq 0x118(%rsp), %rax
cmpq %rax, %rdi
je 0x263a8
movq 0x118(%rsp), %rsi
incq %rsi
callq 0x5340
jmp 0x263a8
movq %rax, %rbx
movq 0x20(%rsp), %rdi
leaq 0x30(%rsp), %rax
cmpq %rax, %rdi
jne 0x263cd
jmp 0x26a2d
movq %rax, %rbx
movq 0x20(%rsp), %rdi
cmpq %r13, %rdi
je 0x26a2d
movq 0x30(%rsp), %rsi
jmp 0x26a25
jmp 0x263db
jmp 0x263fc
movq %rax, %rbx
jmp 0x26a2d
jmp 0x263fc
jmp 0x267e9
cmpq $0x0, 0x338(%rsp)
je 0x263fc
callq 0x50d0
jmp 0x263fc
movq %rax, %rbx
jmp 0x26a65
movq %rax, %rbx
leaq 0x138(%rsp), %r15
leaq 0x168(%rsp), %r12
jmp 0x26473
movq %rax, %rbx
movq 0x2e0(%rsp), %rdi
cmpq %rbp, %rdi
je 0x2643e
movq 0x2f0(%rsp), %rsi
incq %rsi
callq 0x5340
jmp 0x2643e
movq %rax, %rbx
leaq 0x138(%rsp), %r15
leaq 0x168(%rsp), %r12
leaq 0x2d0(%rsp), %rax
movq 0x2c0(%rsp), %rdi
cmpq %rax, %rdi
je 0x26473
movq 0x2d0(%rsp), %rsi
incq %rsi
callq 0x5340
leaq 0x2b0(%rsp), %rax
movq 0x2a0(%rsp), %rdi
cmpq %rax, %rdi
je 0x264ad
movq 0x2b0(%rsp), %rsi
incq %rsi
callq 0x5340
jmp 0x264ad
movq %rax, %rbx
leaq 0x138(%rsp), %r15
leaq 0x168(%rsp), %r12
leaq 0x290(%rsp), %rax
movq 0x280(%rsp), %rdi
cmpq %rax, %rdi
je 0x264e7
movq 0x290(%rsp), %rsi
incq %rsi
callq 0x5340
jmp 0x264e7
movq %rax, %rbx
leaq 0x138(%rsp), %r15
leaq 0x168(%rsp), %r12
leaq 0x270(%rsp), %rax
movq 0x260(%rsp), %rdi
cmpq %rax, %rdi
je 0x2652e
movq 0x270(%rsp), %rsi
incq %rsi
callq 0x5340
jmp 0x2652e
movq %rax, %rbx
jmp 0x265d9
jmp 0x268d7
movq %rax, %rbx
leaq 0x138(%rsp), %r15
leaq 0x168(%rsp), %r12
leaq 0x250(%rsp), %rax
movq 0x240(%rsp), %rdi
cmpq %rax, %rdi
je 0x26568
movq 0x250(%rsp), %rsi
incq %rsi
callq 0x5340
jmp 0x26568
movq %rax, %rbx
leaq 0x138(%rsp), %r15
leaq 0x168(%rsp), %r12
movq 0x158(%rsp), %rdi
cmpq %r12, %rdi
je 0x26592
movq 0x168(%rsp), %rsi
incq %rsi
callq 0x5340
jmp 0x26592
movq %rax, %rbx
leaq 0x138(%rsp), %r15
movq 0x128(%rsp), %rdi
cmpq %r15, %rdi
je 0x265b4
movq 0x138(%rsp), %rsi
incq %rsi
callq 0x5340
jmp 0x265b4
movq %rax, %rbx
movq 0x1d8(%rsp), %rdi
leaq 0x1e8(%rsp), %rax
cmpq %rax, %rdi
je 0x265d9
movq 0x1e8(%rsp), %rsi
incq %rsi
callq 0x5340
leaq 0x1a8(%rsp), %rax
movq 0x198(%rsp), %rdi
cmpq %rax, %rdi
je 0x265fe
movq 0x1a8(%rsp), %rsi
incq %rsi
callq 0x5340
movq 0x220(%rsp), %rdi
cmpq %r14, %rdi
je 0x2661b
movq 0x230(%rsp), %rsi
incq %rsi
callq 0x5340
movq 0x1f8(%rsp), %rdi
leaq 0x208(%rsp), %rax
cmpq %rax, %rdi
je 0x26640
movq 0x208(%rsp), %rsi
incq %rsi
callq 0x5340
leaq 0x188(%rsp), %rax
movq 0x178(%rsp), %rdi
cmpq %rax, %rdi
je 0x26665
movq 0x188(%rsp), %rsi
incq %rsi
callq 0x5340
movq 0x300(%rsp), %rdi
leaq 0x310(%rsp), %rax
cmpq %rax, %rdi
je 0x26944
movq 0x310(%rsp), %rsi
jmp 0x268cb
movq %rax, %rbx
jmp 0x265fe
movq %rax, %rbx
jmp 0x2661b
movq %rax, %rbx
jmp 0x26640
movq %rax, %rbx
jmp 0x26665
movq %rax, %rbx
jmp 0x266f7
movq %rax, %rbx
jmp 0x266d2
movq %rax, %rbx
jmp 0x2691f
movq %rax, %rbx
movq (%rsp), %rdi
leaq 0x10(%rsp), %rax
cmpq %rax, %rdi
je 0x266d2
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x5340
movq 0x338(%rsp), %rdi
leaq 0x348(%rsp), %rax
cmpq %rax, %rdi
je 0x266f7
movq 0x348(%rsp), %rsi
incq %rsi
callq 0x5340
movq 0x50(%rsp), %rdi
leaq 0x60(%rsp), %rax
cmpq %rax, %rdi
je 0x267fe
movq 0x60(%rsp), %rsi
incq %rsi
callq 0x5340
jmp 0x267fe
jmp 0x268de
jmp 0x26723
movq %rax, %rbx
jmp 0x267c5
movq %rax, %rbx
jmp 0x2677e
movq %rax, %rbx
jmp 0x267a3
movq %rax, %rbx
jmp 0x26759
movq %rax, %rbx
movq 0x50(%rsp), %rdi
leaq 0x60(%rsp), %rax
cmpq %rax, %rdi
je 0x26759
movq 0x60(%rsp), %rsi
incq %rsi
callq 0x5340
movq 0x90(%rsp), %rdi
leaq 0xa0(%rsp), %rax
cmpq %rax, %rdi
je 0x2677e
movq 0xa0(%rsp), %rsi
incq %rsi
callq 0x5340
movq 0xc8(%rsp), %rdi
leaq 0xd8(%rsp), %rax
cmpq %rax, %rdi
je 0x267a3
movq 0xd8(%rsp), %rsi
incq %rsi
callq 0x5340
movq 0x70(%rsp), %rdi
leaq 0x80(%rsp), %rax
cmpq %rax, %rdi
je 0x267c5
movq 0x80(%rsp), %rsi
incq %rsi
callq 0x5340
movq (%rsp), %rdi
leaq 0x10(%rsp), %rax
cmpq %rax, %rdi
je 0x268e1
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x5340
jmp 0x268e1
movq %rax, %rbx
jmp 0x26a08
movq %rax, %rbx
jmp 0x26845
movq %rax, %rbx
jmp 0x26820
movq %rax, %rbx
movq 0x70(%rsp), %rdi
leaq 0x80(%rsp), %rax
cmpq %rax, %rdi
je 0x26820
movq 0x80(%rsp), %rsi
incq %rsi
callq 0x5340
movq 0x90(%rsp), %rdi
leaq 0xa0(%rsp), %rax
cmpq %rax, %rdi
je 0x26845
movq 0xa0(%rsp), %rsi
incq %rsi
callq 0x5340
movq 0xc8(%rsp), %rdi
leaq 0xd8(%rsp), %rax
cmpq %rax, %rdi
je 0x26a08
movq 0xd8(%rsp), %rsi
jmp 0x26a00
jmp 0x268b5
jmp 0x2693c
jmp 0x26874
movq %rax, %rbx
movq (%rsp), %rdi
leaq 0x10(%rsp), %rax
cmpq %rax, %rdi
jmp 0x268a7
jmp 0x2693c
jmp 0x2693c
jmp 0x2689d
jmp 0x2693c
jmp 0x2689d
jmp 0x2693c
movq %rax, %rbx
movq (%rsp), %rdi
cmpq %r15, %rdi
leaq 0x30(%rsp), %r13
jne 0x268c6
jmp 0x26944
jmp 0x268d7
movq %rax, %rbx
movq (%rsp), %rdi
leaq 0x10(%rsp), %rax
cmpq %rax, %rdi
je 0x26944
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x5340
jmp 0x26944
jmp 0x268de
movq %rax, %rbx
jmp 0x26944
jmp 0x268de
movq %rax, %rbx
movq 0xb0(%rsp), %rax
movq %rax, 0x338(%rsp)
movq -0x18(%rax), %rax
movq 0x100(%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 0x26a08
movq 0x30(%rsp), %rsi
jmp 0x26a00
movq %rax, %rbx
leaq 0x30(%rsp), %r13
movq 0x70(%rsp), %rdi
leaq 0x80(%rsp), %rax
cmpq %rax, %rdi
je 0x26966
movq 0x80(%rsp), %rsi
incq %rsi
callq 0x5340
movq 0xc8(%rsp), %rdi
leaq 0xd8(%rsp), %rax
cmpq %rax, %rdi
je 0x2698b
movq 0xd8(%rsp), %rsi
incq %rsi
callq 0x5340
movq 0x90(%rsp), %rdi
leaq 0xa0(%rsp), %rax
cmpq %rax, %rdi
je 0x269b0
movq 0xa0(%rsp), %rsi
incq %rsi
callq 0x5340
movq 0x50(%rsp), %rdi
leaq 0x60(%rsp), %rax
cmpq %rax, %rdi
je 0x269cc
movq 0x60(%rsp), %rsi
incq %rsi
callq 0x5340
movq 0x20(%rsp), %rdi
cmpq %r13, %rdi
je 0x269e3
movq 0x30(%rsp), %rsi
incq %rsi
callq 0x5340
movq 0x338(%rsp), %rdi
leaq 0x348(%rsp), %rax
cmpq %rax, %rdi
je 0x26a08
movq 0x348(%rsp), %rsi
incq %rsi
callq 0x5340
movq 0x108(%rsp), %rdi
leaq 0x118(%rsp), %rax
cmpq %rax, %rdi
je 0x26a2d
movq 0x118(%rsp), %rsi
incq %rsi
callq 0x5340
movq 0x15584(%rip), %rax     # 0x3bfb8
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 0x320(%rsp), %rdi
callq 0x28ea6
movq %rbx, %rdi
callq 0x55c0