// File: chhylp123[P]hifiasm/Assembly.cpp
// Function: worker_ovec_related_reads(void*, long, int)
static void worker_ovec_related_reads(void *data, long i, int tid)
{
	ha_ovec_buf_t *b = ((ha_ovec_buf_t**)data)[tid];

    uint64_t k, queryNameLen;
    for (k = 0; k < R_INF_FLAG.query_num; k++)
    {
        queryNameLen = strlen(R_INF_FLAG.read_name[k]);
        if (queryNameLen != Get_NAME_LENGTH((R_INF),i)) continue;
        if (memcmp(R_INF_FLAG.read_name[k], Get_NAME((R_INF), i), Get_NAME_LENGTH((R_INF),i)) == 0)
        {
            break;
        }
    }

    if(k < R_INF_FLAG.query_num)
    {
        R_INF_FLAG.read_id[k] = i;
        int fully_cov, abnormal, q_idx = k;

        ha_get_candidates_interface(b->ab, i, &b->self_read, &b->olist, &b->olist_hp, &b->clist, 
        0.02, asm_opt.max_n_chain, 1, NULL/**&(b->k_flag)**/, &b->r_buf, &(R_INF.paf[i]), &(R_INF.reverse_paf[i]), &(b->tmp_region), &(R_INF_FLAG.candidate_count[q_idx]), &(b->sp));

        clear_Cigar_record(&b->cigar1);
        clear_Round2_alignment(&b->round2);

        correct_overlap(&b->olist, &R_INF, &b->self_read, &b->correct, &b->ovlp_read, &b->POA_Graph, &b->DAGCon,
                &b->cigar1, &b->hap, &b->round2, &b->r_buf, &(b->tmp_region.w_list), 0, 1, &fully_cov, &abnormal);

        b->num_read_base += b->self_read.length;
        b->num_correct_base += b->correct.corrected_base;
        b->num_recorrect_base += b->round2.dumy.corrected_base;

        push_cigar(R_INF.cigars, i, &b->cigar1);
        push_cigar(R_INF.second_round_cigar, i, &b->round2.cigar);

        R_INF.paf[i].is_fully_corrected = 0;
        if (fully_cov) {
            if (get_cigar_errors(&b->cigar1) == 0 && get_cigar_errors(&b->round2.cigar) == 0)
                R_INF.paf[i].is_fully_corrected = 1;
        }
        R_INF.paf[i].is_abnormal = abnormal;

        

        pthread_mutex_lock(&R_INF_FLAG.OutputMutex);

        fprintf(R_INF_FLAG.fp, "\n>%.*s, rid: %ld\n", (int)Get_NAME_LENGTH((R_INF), i), Get_NAME((R_INF), i), i);
        fprintf(R_INF_FLAG.fp, "%d-th round, len: %lu, hom_cov: %d, max_n_chain: %d\n", 
            asm_opt.number_of_round, Get_READ_LENGTH(R_INF, i), asm_opt.hom_cov, asm_opt.max_n_chain);

        fprintf(R_INF_FLAG.fp, "***************************k-mer counts (%d)***************************\n", (int)(R_INF_FLAG.candidate_count[q_idx].a.n));
        
        sort_kvec_t_u64_warp(&(R_INF_FLAG.candidate_count[q_idx]), 0);
        for (k = 0; k < R_INF_FLAG.candidate_count[q_idx].a.n; k++) 
        {
            fprintf(R_INF_FLAG.fp, "[%lu] Count(%u): %lu, filtered: %lu\n", k, 
            (uint32_t)R_INF_FLAG.candidate_count[q_idx].a.a[k], R_INF_FLAG.candidate_count[q_idx].a.a[k]>>33, 
            (R_INF_FLAG.candidate_count[q_idx].a.a[k]>>32)&(uint64_t)1);
        }

        
        fprintf(R_INF_FLAG.fp, "***************************forward ovlp***************************\n");
        for (k = 0; k < b->olist.length; k++) 
        {
            if(b->olist.list[k].is_match != 1) continue;
			fprintf(R_INF_FLAG.fp, "%.*s\n", (int)Get_NAME_LENGTH((R_INF), b->olist.list[k].y_id), Get_NAME((R_INF), b->olist.list[k].y_id));
            fprintf(R_INF_FLAG.fp, "qs: %u, qe: %u, ts: %u, te: %u, rev: %u, strong: %u, no_l_indel: %u, len: %lu\n",
            b->olist.list[k].x_pos_s, b->olist.list[k].x_pos_e, b->olist.list[k].y_pos_s, b->olist.list[k].y_pos_e, 
            b->olist.list[k].y_pos_strand, b->olist.list[k].strong, b->olist.list[k].without_large_indel,
            Get_READ_LENGTH(R_INF, b->olist.list[k].y_id));
		}

        fprintf(R_INF_FLAG.fp, "***************************reverse ovlp***************************\n");
        for (k = 0; k < b->olist.length; k++) 
        {
            if(b->olist.list[k].is_match != 2) continue;
			fprintf(R_INF_FLAG.fp, "%.*s\n", (int)Get_NAME_LENGTH((R_INF), b->olist.list[k].y_id), Get_NAME((R_INF), b->olist.list[k].y_id));
            fprintf(R_INF_FLAG.fp, "qs: %u, qe: %u, ts: %u, te: %u, rev: %u, strong: %u, no_l_indel: %u, len: %lu\n",
            b->olist.list[k].x_pos_s, b->olist.list[k].x_pos_e, b->olist.list[k].y_pos_s, b->olist.list[k].y_pos_e, 
            b->olist.list[k].y_pos_strand, b->olist.list[k].strong, b->olist.list[k].without_large_indel,
            Get_READ_LENGTH(R_INF, b->olist.list[k].y_id));
		}

        /**
        fprintf(R_INF_FLAG.fp, "***************************unmatched ovlp***************************\n");
        for (k = 0; k < b->olist.length; k++) 
        {
            if(b->olist.list[k].is_match == 1) continue;
            if(b->olist.list[k].is_match == 2) continue;
			fprintf(R_INF_FLAG.fp, "%.*s\n", (int)Get_NAME_LENGTH((R_INF), b->olist.list[k].y_id), Get_NAME((R_INF), b->olist.list[k].y_id));
            fprintf(R_INF_FLAG.fp, "qs: %u, qe: %u, ts: %u, te: %u, rev: %u, strong: %u, no_l_indel: %u, len: %lu\n",
            b->olist.list[k].x_pos_s, b->olist.list[k].x_pos_e, b->olist.list[k].y_pos_s, b->olist.list[k].y_pos_e, 
            b->olist.list[k].y_pos_strand, b->olist.list[k].strong, b->olist.list[k].without_large_indel,
            Get_READ_LENGTH(R_INF, b->olist.list[k].y_id));
		}
        **/

        R_INF.trio_flag[i] = AMBIGU;

        ///need to be fixed in r305
        // if(ha_idx_hp == NULL)
        // {
        //     R_INF.trio_flag[i] += collect_hp_regions(&b->olist, &R_INF, &(b->k_flag), RESEED_HP_RATE, Get_READ_LENGTH(R_INF, i), R_INF_FLAG.fp);
        // }
        
        fprintf(R_INF_FLAG.fp, "R_INF.trio_flag[%ld]: %u\n", i, R_INF.trio_flag[i]);
    

	    pthread_mutex_unlock(&R_INF_FLAG.OutputMutex);
    }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x98, %rsp
movq %rdi, -0x30(%rbp)
movq %rsi, -0x38(%rbp)
movl %edx, -0x3c(%rbp)
movq -0x30(%rbp), %rax
movslq -0x3c(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq %rax, -0x48(%rbp)
movq $0x0, -0x50(%rbp)
movq -0x50(%rbp), %rax
cmpq 0x3af796(%rip), %rax    # 0x3c5368
jae 0x15c7d
movq 0x3af779(%rip), %rax    # 0x3c5358
movq -0x50(%rbp), %rcx
movq (%rax,%rcx,8), %rdi
callq 0x20a0
movq %rax, -0x58(%rbp)
movq -0x58(%rbp), %rax
movq 0x3af715(%rip), %rcx    # 0x3c5310
movq -0x38(%rbp), %rdx
movq 0x8(%rcx,%rdx,8), %rcx
movq 0x3af705(%rip), %rdx    # 0x3c5310
movq -0x38(%rbp), %rsi
subq (%rdx,%rsi,8), %rcx
cmpq %rcx, %rax
je 0x15c1a
jmp 0x15c6c
movq 0x3af737(%rip), %rax    # 0x3c5358
movq -0x50(%rbp), %rcx
movq (%rax,%rcx,8), %rdi
movq 0x3af6a8(%rip), %rsi    # 0x3c52d8
movq 0x3af6d9(%rip), %rax    # 0x3c5310
movq -0x38(%rbp), %rcx
addq (%rax,%rcx,8), %rsi
movq 0x3af6ca(%rip), %rax    # 0x3c5310
movq -0x38(%rbp), %rcx
movq 0x8(%rax,%rcx,8), %rdx
movq 0x3af6ba(%rip), %rax    # 0x3c5310
movq -0x38(%rbp), %rcx
subq (%rax,%rcx,8), %rdx
callq 0x20b0
cmpl $0x0, %eax
jne 0x15c6a
jmp 0x15c7d
jmp 0x15c6c
movq -0x50(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x50(%rbp)
jmp 0x15bc7
movq -0x50(%rbp), %rax
cmpq 0x3af6e0(%rip), %rax    # 0x3c5368
jae 0x16547
movq -0x38(%rbp), %rdx
movq 0x3af6c7(%rip), %rax    # 0x3c5360
movq -0x50(%rbp), %rcx
movq %rdx, (%rax,%rcx,8)
movq -0x50(%rbp), %rax
movl %eax, -0x64(%rbp)
movq -0x48(%rbp), %rax
movq 0xe0(%rax), %rdi
movq -0x38(%rbp), %rsi
movq -0x48(%rbp), %rdx
addq $0x8, %rdx
movq -0x48(%rbp), %rcx
addq $0xa0, %rcx
movq -0x48(%rbp), %r8
addq $0xc0, %r8
movq -0x48(%rbp), %r9
addq $0x48, %r9
leaq 0x3aeb14(%rip), %rax    # 0x3c47f8
movl 0xe8(%rax), %r12d
movq -0x48(%rbp), %r15
addq $0x12160, %r15          # imm = 0x12160
movq 0x3af64b(%rip), %r14    # 0x3c5348
imulq $0x18, -0x38(%rbp), %rax
addq %rax, %r14
movq 0x3af644(%rip), %rbx    # 0x3c5350
imulq $0x18, -0x38(%rbp), %rax
addq %rax, %rbx
movq -0x48(%rbp), %r11
addq $0x121a0, %r11          # imm = 0x121A0
movq 0x3af64a(%rip), %r10    # 0x3c5370
movslq -0x64(%rbp), %rax
shlq $0x5, %rax
addq %rax, %r10
movq -0x48(%rbp), %rax
addq $0x12250, %rax          # imm = 0x12250
movsd 0x369305(%rip), %xmm0   # 0x37f048
xorl %r13d, %r13d
movl %r12d, (%rsp)
movl $0x1, 0x8(%rsp)
movq $0x0, 0x10(%rsp)
movq %r15, 0x18(%rsp)
movq %r14, 0x20(%rsp)
movq %rbx, 0x28(%rsp)
movq %r11, 0x30(%rsp)
movq %r10, 0x38(%rsp)
movq %rax, 0x40(%rsp)
callq 0x1a3450
movq -0x48(%rbp), %rdi
addq $0x108, %rdi            # imm = 0x108
callq 0x31d60
movq -0x48(%rbp), %rdi
addq $0x9330, %rdi           # imm = 0x9330
callq 0x31cb0
movq -0x48(%rbp), %rdi
addq $0xa0, %rdi
movq -0x48(%rbp), %rdx
addq $0x8, %rdx
movq -0x48(%rbp), %rcx
addq $0x2c0, %rcx            # imm = 0x2C0
movq -0x48(%rbp), %r8
addq $0x28, %r8
movq -0x48(%rbp), %r9
addq $0x148, %r9             # imm = 0x148
movq -0x48(%rbp), %r13
addq $0x200, %r13            # imm = 0x200
movq -0x48(%rbp), %r12
addq $0x108, %r12            # imm = 0x108
movq -0x48(%rbp), %r15
addq $0x9040, %r15           # imm = 0x9040
movq -0x48(%rbp), %r14
addq $0x9330, %r14           # imm = 0x9330
movq -0x48(%rbp), %rbx
addq $0x12160, %rbx          # imm = 0x12160
movq -0x48(%rbp), %r11
addq $0x121a0, %r11          # imm = 0x121A0
addq $0x48, %r11
leaq 0x3af4b4(%rip), %rsi    # 0x3c52d0
xorl %eax, %eax
leaq -0x5c(%rbp), %r10
leaq -0x60(%rbp), %rax
movq %r13, (%rsp)
movq %r12, 0x8(%rsp)
movq %r15, 0x10(%rsp)
movq %r14, 0x18(%rsp)
movq %rbx, 0x20(%rsp)
movq %r11, 0x28(%rsp)
movl $0x0, 0x30(%rsp)
movl $0x1, 0x38(%rsp)
movq %r10, 0x40(%rsp)
movq %rax, 0x48(%rsp)
callq 0x4c230
movq -0x48(%rbp), %rax
movq 0x10(%rax), %rcx
movq -0x48(%rbp), %rax
addq 0xf0(%rax), %rcx
movq %rcx, 0xf0(%rax)
movq -0x48(%rbp), %rax
movq 0x2e0(%rax), %rcx
movq -0x48(%rbp), %rax
addq 0xf8(%rax), %rcx
movq %rcx, 0xf8(%rax)
movq -0x48(%rbp), %rax
movq 0x9350(%rax), %rcx
movq -0x48(%rbp), %rax
addq 0x100(%rax), %rcx
movq %rcx, 0x100(%rax)
movq 0x3af47b(%rip), %rdi    # 0x3c5338
movq -0x38(%rbp), %rsi
movq -0x48(%rbp), %rdx
addq $0x108, %rdx            # imm = 0x108
callq 0x1c8a0
movq 0x3af468(%rip), %rdi    # 0x3c5340
movq -0x38(%rbp), %rsi
movq -0x48(%rbp), %rdx
addq $0x9330, %rdx           # imm = 0x9330
addq $0x8d80, %rdx           # imm = 0x8D80
callq 0x1c8a0
movq 0x3af44e(%rip), %rax    # 0x3c5348
imulq $0x18, -0x38(%rbp), %rcx
addq %rcx, %rax
movb $0x0, 0x10(%rax)
cmpl $0x0, -0x5c(%rbp)
je 0x15f52
movq -0x48(%rbp), %rdi
addq $0x108, %rdi            # imm = 0x108
callq 0x1ca30
cmpl $0x0, %eax
jne 0x15f50
movq -0x48(%rbp), %rdi
addq $0x9330, %rdi           # imm = 0x9330
addq $0x8d80, %rdi           # imm = 0x8D80
callq 0x1ca30
cmpl $0x0, %eax
jne 0x15f50
movq 0x3af404(%rip), %rax    # 0x3c5348
imulq $0x18, -0x38(%rbp), %rcx
addq %rcx, %rax
movb $0x1, 0x10(%rax)
jmp 0x15f52
movl -0x60(%rbp), %eax
movb %al, %cl
movq 0x3af3ea(%rip), %rax    # 0x3c5348
imulq $0x18, -0x38(%rbp), %rdx
addq %rdx, %rax
movb %cl, 0x11(%rax)
leaq 0x3af3e8(%rip), %rdi    # 0x3c5358
addq $0x38, %rdi
callq 0x22b0
movq 0x3af3f8(%rip), %rdi    # 0x3c5378
movq 0x3af389(%rip), %rax    # 0x3c5310
movq -0x38(%rbp), %rcx
movq 0x8(%rax,%rcx,8), %rax
movq 0x3af379(%rip), %rcx    # 0x3c5310
movq -0x38(%rbp), %rdx
subq (%rcx,%rdx,8), %rax
movl %eax, %edx
movq 0x3af330(%rip), %rcx    # 0x3c52d8
movq 0x3af361(%rip), %rax    # 0x3c5310
movq -0x38(%rbp), %rsi
addq (%rax,%rsi,8), %rcx
movq -0x38(%rbp), %r8
leaq 0x36be3e(%rip), %rsi    # 0x381e00
movb $0x0, %al
callq 0x22a0
movq 0x3af3a8(%rip), %rdi    # 0x3c5378
leaq 0x3ae821(%rip), %rax    # 0x3c47f8
movl 0xf8(%rax), %edx
movq 0x3af304(%rip), %rax    # 0x3c52e8
movq -0x38(%rbp), %rcx
movq (%rax,%rcx,8), %rcx
leaq 0x3ae805(%rip), %rax    # 0x3c47f8
movl 0xd0(%rax), %r8d
leaq 0x3ae7f7(%rip), %rax    # 0x3c47f8
movl 0xe8(%rax), %r9d
leaq 0x36be03(%rip), %rsi    # 0x381e12
movb $0x0, %al
callq 0x22a0
movq 0x3af35b(%rip), %rdi    # 0x3c5378
movq 0x3af34c(%rip), %rax    # 0x3c5370
movslq -0x64(%rbp), %rcx
shlq $0x5, %rcx
addq %rcx, %rax
movq (%rax), %rax
movl %eax, %edx
leaq 0x36be0c(%rip), %rsi    # 0x381e47
movb $0x0, %al
callq 0x22a0
movq 0x3af327(%rip), %rdi    # 0x3c5370
movslq -0x64(%rbp), %rax
shlq $0x5, %rax
addq %rax, %rdi
xorl %esi, %esi
callq 0xcd080
movq $0x0, -0x50(%rbp)
movq -0x50(%rbp), %rax
movq 0x3af302(%rip), %rcx    # 0x3c5370
movslq -0x64(%rbp), %rdx
shlq $0x5, %rdx
addq %rdx, %rcx
cmpq (%rcx), %rax
jae 0x16114
movq 0x3af2ef(%rip), %rdi    # 0x3c5378
movq -0x50(%rbp), %rdx
movq 0x3af2dc(%rip), %rax    # 0x3c5370
movslq -0x64(%rbp), %rcx
shlq $0x5, %rcx
addq %rcx, %rax
movq 0x10(%rax), %rax
movq -0x50(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movl %eax, %ecx
movq 0x3af2bc(%rip), %rax    # 0x3c5370
movslq -0x64(%rbp), %rsi
shlq $0x5, %rsi
addq %rsi, %rax
movq 0x10(%rax), %rax
movq -0x50(%rbp), %rsi
movq (%rax,%rsi,8), %r8
shrq $0x21, %r8
movq 0x3af29a(%rip), %rax    # 0x3c5370
movslq -0x64(%rbp), %rsi
shlq $0x5, %rsi
addq %rsi, %rax
movq 0x10(%rax), %rax
movq -0x50(%rbp), %rsi
movq (%rax,%rsi,8), %r9
shrq $0x20, %r9
andq $0x1, %r9
leaq 0x36bd94(%rip), %rsi    # 0x381e90
movb $0x0, %al
callq 0x22a0
movq -0x50(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x50(%rbp)
jmp 0x16063
movq 0x3af25d(%rip), %rdi    # 0x3c5378
leaq 0x36bd93(%rip), %rsi    # 0x381eb5
movb $0x0, %al
callq 0x22a0
movq $0x0, -0x50(%rbp)
movq -0x50(%rbp), %rax
movq -0x48(%rbp), %rcx
cmpq 0xb0(%rcx), %rax
jae 0x1630a
movq -0x48(%rbp), %rax
movq 0xa0(%rax), %rax
imulq $0xa8, -0x50(%rbp), %rcx
addq %rcx, %rax
movzbl 0x2c(%rax), %eax
cmpl $0x1, %eax
je 0x1616a
jmp 0x162f9
movq 0x3af207(%rip), %rdi    # 0x3c5378
movq 0x3af198(%rip), %rax    # 0x3c5310
movq -0x48(%rbp), %rcx
movq 0xa0(%rcx), %rcx
imulq $0xa8, -0x50(%rbp), %rdx
addq %rdx, %rcx
movl 0x10(%rcx), %ecx
addl $0x1, %ecx
movl %ecx, %ecx
movq (%rax,%rcx,8), %rax
movq 0x3af16f(%rip), %rcx    # 0x3c5310
movq -0x48(%rbp), %rdx
movq 0xa0(%rdx), %rdx
imulq $0xa8, -0x50(%rbp), %rsi
addq %rsi, %rdx
movl 0x10(%rdx), %edx
subq (%rcx,%rdx,8), %rax
movl %eax, %edx
movq 0x3af111(%rip), %rcx    # 0x3c52d8
movq 0x3af142(%rip), %rax    # 0x3c5310
movq -0x48(%rbp), %rsi
movq 0xa0(%rsi), %rsi
imulq $0xa8, -0x50(%rbp), %r8
addq %r8, %rsi
movl 0x10(%rsi), %esi
addq (%rax,%rsi,8), %rcx
leaq 0x380b58(%rip), %rsi    # 0x396d4a
movb $0x0, %al
callq 0x22a0
movq 0x3af178(%rip), %rdi    # 0x3c5378
movq -0x48(%rbp), %rax
movq 0xa0(%rax), %rax
imulq $0xa8, -0x50(%rbp), %rcx
addq %rcx, %rax
movl 0x4(%rax), %edx
movq -0x48(%rbp), %rax
movq 0xa0(%rax), %rax
imulq $0xa8, -0x50(%rbp), %rcx
addq %rcx, %rax
movl 0x8(%rax), %ecx
movq -0x48(%rbp), %rax
movq 0xa0(%rax), %rax
imulq $0xa8, -0x50(%rbp), %rsi
addq %rsi, %rax
movl 0x14(%rax), %r8d
movq -0x48(%rbp), %rax
movq 0xa0(%rax), %rax
imulq $0xa8, -0x50(%rbp), %rsi
addq %rsi, %rax
movl 0x18(%rax), %r9d
movq -0x48(%rbp), %rax
movq 0xa0(%rax), %rax
imulq $0xa8, -0x50(%rbp), %rsi
addq %rsi, %rax
movl 0x1c(%rax), %ebx
movq -0x48(%rbp), %rax
movq 0xa0(%rax), %rax
imulq $0xa8, -0x50(%rbp), %rsi
addq %rsi, %rax
movsbl 0x2e(%rax), %r11d
movq -0x48(%rbp), %rax
movq 0xa0(%rax), %rax
imulq $0xa8, -0x50(%rbp), %rsi
addq %rsi, %rax
movzbl 0x2d(%rax), %r10d
movq 0x3af02c(%rip), %rax    # 0x3c52e8
movq -0x48(%rbp), %rsi
movq 0xa0(%rsi), %rsi
imulq $0xa8, -0x50(%rbp), %r14
addq %r14, %rsi
movl 0x10(%rsi), %esi
movq (%rax,%rsi,8), %rax
leaq 0x36bc19(%rip), %rsi    # 0x381ef9
movl %ebx, (%rsp)
movl %r11d, 0x8(%rsp)
movl %r10d, 0x10(%rsp)
movq %rax, 0x18(%rsp)
movb $0x0, %al
callq 0x22a0
movq -0x50(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x50(%rbp)
jmp 0x16131
movq 0x3af067(%rip), %rdi    # 0x3c5378
leaq 0x36bc30(%rip), %rsi    # 0x381f48
movb $0x0, %al
callq 0x22a0
movq $0x0, -0x50(%rbp)
movq -0x50(%rbp), %rax
movq -0x48(%rbp), %rcx
cmpq 0xb0(%rcx), %rax
jae 0x16500
movq -0x48(%rbp), %rax
movq 0xa0(%rax), %rax
imulq $0xa8, -0x50(%rbp), %rcx
addq %rcx, %rax
movzbl 0x2c(%rax), %eax
cmpl $0x2, %eax
je 0x16360
jmp 0x164ef
movq 0x3af011(%rip), %rdi    # 0x3c5378
movq 0x3aefa2(%rip), %rax    # 0x3c5310
movq -0x48(%rbp), %rcx
movq 0xa0(%rcx), %rcx
imulq $0xa8, -0x50(%rbp), %rdx
addq %rdx, %rcx
movl 0x10(%rcx), %ecx
addl $0x1, %ecx
movl %ecx, %ecx
movq (%rax,%rcx,8), %rax
movq 0x3aef79(%rip), %rcx    # 0x3c5310
movq -0x48(%rbp), %rdx
movq 0xa0(%rdx), %rdx
imulq $0xa8, -0x50(%rbp), %rsi
addq %rsi, %rdx
movl 0x10(%rdx), %edx
subq (%rcx,%rdx,8), %rax
movl %eax, %edx
movq 0x3aef1b(%rip), %rcx    # 0x3c52d8
movq 0x3aef4c(%rip), %rax    # 0x3c5310
movq -0x48(%rbp), %rsi
movq 0xa0(%rsi), %rsi
imulq $0xa8, -0x50(%rbp), %r8
addq %r8, %rsi
movl 0x10(%rsi), %esi
addq (%rax,%rsi,8), %rcx
leaq 0x380962(%rip), %rsi    # 0x396d4a
movb $0x0, %al
callq 0x22a0
movq 0x3aef82(%rip), %rdi    # 0x3c5378
movq -0x48(%rbp), %rax
movq 0xa0(%rax), %rax
imulq $0xa8, -0x50(%rbp), %rcx
addq %rcx, %rax
movl 0x4(%rax), %edx
movq -0x48(%rbp), %rax
movq 0xa0(%rax), %rax
imulq $0xa8, -0x50(%rbp), %rcx
addq %rcx, %rax
movl 0x8(%rax), %ecx
movq -0x48(%rbp), %rax
movq 0xa0(%rax), %rax
imulq $0xa8, -0x50(%rbp), %rsi
addq %rsi, %rax
movl 0x14(%rax), %r8d
movq -0x48(%rbp), %rax
movq 0xa0(%rax), %rax
imulq $0xa8, -0x50(%rbp), %rsi
addq %rsi, %rax
movl 0x18(%rax), %r9d
movq -0x48(%rbp), %rax
movq 0xa0(%rax), %rax
imulq $0xa8, -0x50(%rbp), %rsi
addq %rsi, %rax
movl 0x1c(%rax), %ebx
movq -0x48(%rbp), %rax
movq 0xa0(%rax), %rax
imulq $0xa8, -0x50(%rbp), %rsi
addq %rsi, %rax
movsbl 0x2e(%rax), %r11d
movq -0x48(%rbp), %rax
movq 0xa0(%rax), %rax
imulq $0xa8, -0x50(%rbp), %rsi
addq %rsi, %rax
movzbl 0x2d(%rax), %r10d
movq 0x3aee36(%rip), %rax    # 0x3c52e8
movq -0x48(%rbp), %rsi
movq 0xa0(%rsi), %rsi
imulq $0xa8, -0x50(%rbp), %r14
addq %r14, %rsi
movl 0x10(%rsi), %esi
movq (%rax,%rsi,8), %rax
leaq 0x36ba23(%rip), %rsi    # 0x381ef9
movl %ebx, (%rsp)
movl %r11d, 0x8(%rsp)
movl %r10d, 0x10(%rsp)
movq %rax, 0x18(%rsp)
movb $0x0, %al
callq 0x22a0
movq -0x50(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x50(%rbp)
jmp 0x16327
movq 0x3aedf1(%rip), %rax    # 0x3c52f8
movq -0x38(%rbp), %rcx
movb $0x0, (%rax,%rcx)
movq 0x3aee62(%rip), %rdi    # 0x3c5378
movq -0x38(%rbp), %rdx
movq 0x3aedd7(%rip), %rax    # 0x3c52f8
movq -0x38(%rbp), %rcx
movzbl (%rax,%rcx), %ecx
leaq 0x36ba5c(%rip), %rsi    # 0x381f8c
movb $0x0, %al
callq 0x22a0
leaq 0x3aee1a(%rip), %rdi    # 0x3c5358
addq $0x38, %rdi
callq 0x2150
addq $0x98, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
nopl (%rax)