// File: chhylp123[P]hifiasm/Purge_Dups.cpp
// Function: hap_chaining(asg_arc_t_offset*, unsigned int, kvec_t_i32_warp*, kvec_t_i32_warp*, kvec_t_i32_warp*, kvec_t_u8_warp*, float, long long, long long, long long, kvec_hap_candidates*)
void hap_chaining(asg_arc_t_offset* x, uint32_t n, kvec_t_i32_warp* score_vc, kvec_t_i32_warp* prevIndex_vec, 
kvec_t_i32_warp* begIndex_vec, kvec_t_u8_warp* flag_vec, float band_width_threshold, long long max_skip, 
long long x_readLen, long long y_readLen, kvec_hap_candidates* u_can)
{
    #define DUP_OVLP_RATE 0.75
    score_vc->a.n = prevIndex_vec->a.n = begIndex_vec->a.n = flag_vec->a.n = 0;
    if(n == 0) return;
    kv_resize(int32_t, score_vc->a, n);
    kv_resize(int32_t, prevIndex_vec->a, n);
    kv_resize(int32_t, begIndex_vec->a, n);
    kv_resize(uint8_t, flag_vec->a, n);
    
    int32_t* Scores = score_vc->a.a;
    int32_t* Pres = prevIndex_vec->a.a;
    int32_t* Begs = begIndex_vec->a.a;
    uint8_t* Flag = flag_vec->a.a;
    long long i, j, n_max_skip, x_off, y_off, max_beg, max_j = -1, max_score, score;
    long long distance_x, distance_y, total_distance_x, total_distance_y, distance_gap;
    float gap_rate, band_width_penalty = 1 / band_width_threshold;
    long long max_result, max_i, min_xLen, tmp_xLen, chainLen = 0, dup = 0;
    max_result = max_i = -1; min_xLen = x_readLen * 2 + 2;
    for (i = 0; i < n; i++)
    {
		n_max_skip = 0;

        x_off = (long long)(x[i].Off>>32);
        y_off = (long long)((uint32_t)x[i].Off);
        max_j = -1;
        max_score = x[i].weight;
        max_beg = i; //i itself
        ///may have a pre-cut condition for j
        for (j = i - 1; j >= 0; --j) 
        {
            distance_x = x_off - (long long)(x[j].Off>>32);
            distance_y = y_off - (long long)((uint32_t)x[j].Off);
            ///x has been sorted by x_off
            if(distance_x <= 0 || distance_y <= 0) continue;

            total_distance_x = x_off - (long long)(x[Begs[j]].Off>>32);
            total_distance_y = y_off - (long long)((uint32_t)x[Begs[j]].Off);

            distance_gap = total_distance_x - total_distance_y;
            if(distance_gap < 0) distance_gap = -distance_gap;
            if(distance_gap > band_width_threshold * total_distance_x)
            {
                continue;
            }

            score = x[i].weight;
            gap_rate = (float)((float)(distance_gap)/(float)(total_distance_x));
            score -= (long long)(score * gap_rate * band_width_penalty);
            score += Scores[j];

            ///find a new max score
			if (score > max_score) {
				max_score = score;
				max_j = j;
				max_beg = Begs[j];
				n_max_skip = 0;
			} 
            else 
            {
				if (++n_max_skip > max_skip) break;
			}
        }

        Scores[i] = max_score;
        Pres[i] = max_j;
        Begs[i] = max_beg;

        if(Scores[i] > max_result)
        {
            max_result = Scores[i];
            max_i = i;
            min_xLen = get_hap_overlapLen(x_off, x_off, x_readLen, y_off, y_off, y_readLen, 
            NULL, NULL, NULL, NULL);
        }
        else if(Scores[i] == max_result)
        {
            tmp_xLen = get_hap_overlapLen(x_off, x_off, x_readLen, y_off, y_off, y_readLen, 
            NULL, NULL, NULL, NULL);

            if(tmp_xLen < min_xLen)
            {
                max_result = Scores[i];
                max_i = i;
                min_xLen = tmp_xLen;
            }
        }
        Flag[i] = 0;
    }

    // print_asg_arc_t_offset(x, n);
    // print_chain_data(Scores, Pres, Begs, n);
    while (max_i != -1)
    {
        get_chain_details(Pres, Begs, Flag, max_i, &chainLen, &dup);
        if(chainLen == 0) break;
        if(dup > chainLen*DUP_OVLP_RATE)
        {
            for (i = 0; i < chainLen; i++)
            {
                if(Flag[Begs[i]] == 1) continue;
                Flag[Begs[i]] = 2;
            }
            
        }
        else
        {
            push_hap_can(x, u_can, Begs, chainLen, x_readLen, y_readLen);

            for (i = 0; i < chainLen; i++)
            {
                Flag[Begs[i]] = 1;
            }
        }

        max_i = get_max_index(x, Scores, Flag, n, x_readLen, y_readLen);
    }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x120, %rsp            # imm = 0x120
movq 0x28(%rbp), %rax
movq 0x20(%rbp), %rax
movq 0x18(%rbp), %rax
movq 0x10(%rbp), %rax
movq %rdi, -0x8(%rbp)
movl %esi, -0xc(%rbp)
movq %rdx, -0x18(%rbp)
movq %rcx, -0x20(%rbp)
movq %r8, -0x28(%rbp)
movq %r9, -0x30(%rbp)
movss %xmm0, -0x34(%rbp)
movq -0x30(%rbp), %rax
movq $0x0, (%rax)
movq -0x28(%rbp), %rax
movq $0x0, (%rax)
movq -0x20(%rbp), %rax
movq $0x0, (%rax)
movq -0x18(%rbp), %rax
movq $0x0, (%rax)
cmpl $0x0, -0xc(%rbp)
jne 0x178d2e
jmp 0x17967e
jmp 0x178d30
movq -0x18(%rbp), %rax
movq 0x8(%rax), %rax
movl -0xc(%rbp), %ecx
cmpq %rcx, %rax
jae 0x178e0c
movl -0xc(%rbp), %eax
movl %eax, %ecx
movq -0x18(%rbp), %rax
movq %rcx, 0x8(%rax)
movq -0x18(%rbp), %rax
movq 0x8(%rax), %rcx
addq $-0x1, %rcx
movq %rcx, 0x8(%rax)
movq -0x18(%rbp), %rax
movq 0x8(%rax), %rcx
shrq %rcx
movq -0x18(%rbp), %rax
orq 0x8(%rax), %rcx
movq %rcx, 0x8(%rax)
movq -0x18(%rbp), %rax
movq 0x8(%rax), %rcx
shrq $0x2, %rcx
movq -0x18(%rbp), %rax
orq 0x8(%rax), %rcx
movq %rcx, 0x8(%rax)
movq -0x18(%rbp), %rax
movq 0x8(%rax), %rcx
shrq $0x4, %rcx
movq -0x18(%rbp), %rax
orq 0x8(%rax), %rcx
movq %rcx, 0x8(%rax)
movq -0x18(%rbp), %rax
movq 0x8(%rax), %rcx
shrq $0x8, %rcx
movq -0x18(%rbp), %rax
orq 0x8(%rax), %rcx
movq %rcx, 0x8(%rax)
movq -0x18(%rbp), %rax
movq 0x8(%rax), %rcx
shrq $0x10, %rcx
movq -0x18(%rbp), %rax
orq 0x8(%rax), %rcx
movq %rcx, 0x8(%rax)
movq -0x18(%rbp), %rax
movq 0x8(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x8(%rax)
movq -0x18(%rbp), %rax
movq 0x10(%rax), %rdi
movq -0x18(%rbp), %rax
movq 0x8(%rax), %rsi
shlq $0x2, %rsi
callq 0x2360
movq %rax, %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x10(%rax)
jmp 0x178e0e
jmp 0x178e10
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rax
movl -0xc(%rbp), %ecx
cmpq %rcx, %rax
jae 0x178eec
movl -0xc(%rbp), %eax
movl %eax, %ecx
movq -0x20(%rbp), %rax
movq %rcx, 0x8(%rax)
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rcx
addq $-0x1, %rcx
movq %rcx, 0x8(%rax)
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rcx
shrq %rcx
movq -0x20(%rbp), %rax
orq 0x8(%rax), %rcx
movq %rcx, 0x8(%rax)
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rcx
shrq $0x2, %rcx
movq -0x20(%rbp), %rax
orq 0x8(%rax), %rcx
movq %rcx, 0x8(%rax)
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rcx
shrq $0x4, %rcx
movq -0x20(%rbp), %rax
orq 0x8(%rax), %rcx
movq %rcx, 0x8(%rax)
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rcx
shrq $0x8, %rcx
movq -0x20(%rbp), %rax
orq 0x8(%rax), %rcx
movq %rcx, 0x8(%rax)
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rcx
shrq $0x10, %rcx
movq -0x20(%rbp), %rax
orq 0x8(%rax), %rcx
movq %rcx, 0x8(%rax)
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x8(%rax)
movq -0x20(%rbp), %rax
movq 0x10(%rax), %rdi
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rsi
shlq $0x2, %rsi
callq 0x2360
movq %rax, %rcx
movq -0x20(%rbp), %rax
movq %rcx, 0x10(%rax)
jmp 0x178eee
jmp 0x178ef0
movq -0x28(%rbp), %rax
movq 0x8(%rax), %rax
movl -0xc(%rbp), %ecx
cmpq %rcx, %rax
jae 0x178fcc
movl -0xc(%rbp), %eax
movl %eax, %ecx
movq -0x28(%rbp), %rax
movq %rcx, 0x8(%rax)
movq -0x28(%rbp), %rax
movq 0x8(%rax), %rcx
addq $-0x1, %rcx
movq %rcx, 0x8(%rax)
movq -0x28(%rbp), %rax
movq 0x8(%rax), %rcx
shrq %rcx
movq -0x28(%rbp), %rax
orq 0x8(%rax), %rcx
movq %rcx, 0x8(%rax)
movq -0x28(%rbp), %rax
movq 0x8(%rax), %rcx
shrq $0x2, %rcx
movq -0x28(%rbp), %rax
orq 0x8(%rax), %rcx
movq %rcx, 0x8(%rax)
movq -0x28(%rbp), %rax
movq 0x8(%rax), %rcx
shrq $0x4, %rcx
movq -0x28(%rbp), %rax
orq 0x8(%rax), %rcx
movq %rcx, 0x8(%rax)
movq -0x28(%rbp), %rax
movq 0x8(%rax), %rcx
shrq $0x8, %rcx
movq -0x28(%rbp), %rax
orq 0x8(%rax), %rcx
movq %rcx, 0x8(%rax)
movq -0x28(%rbp), %rax
movq 0x8(%rax), %rcx
shrq $0x10, %rcx
movq -0x28(%rbp), %rax
orq 0x8(%rax), %rcx
movq %rcx, 0x8(%rax)
movq -0x28(%rbp), %rax
movq 0x8(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x8(%rax)
movq -0x28(%rbp), %rax
movq 0x10(%rax), %rdi
movq -0x28(%rbp), %rax
movq 0x8(%rax), %rsi
shlq $0x2, %rsi
callq 0x2360
movq %rax, %rcx
movq -0x28(%rbp), %rax
movq %rcx, 0x10(%rax)
jmp 0x178fce
jmp 0x178fd0
movq -0x30(%rbp), %rax
movq 0x8(%rax), %rax
movl -0xc(%rbp), %ecx
cmpq %rcx, %rax
jae 0x1790ac
movl -0xc(%rbp), %eax
movl %eax, %ecx
movq -0x30(%rbp), %rax
movq %rcx, 0x8(%rax)
movq -0x30(%rbp), %rax
movq 0x8(%rax), %rcx
addq $-0x1, %rcx
movq %rcx, 0x8(%rax)
movq -0x30(%rbp), %rax
movq 0x8(%rax), %rcx
shrq %rcx
movq -0x30(%rbp), %rax
orq 0x8(%rax), %rcx
movq %rcx, 0x8(%rax)
movq -0x30(%rbp), %rax
movq 0x8(%rax), %rcx
shrq $0x2, %rcx
movq -0x30(%rbp), %rax
orq 0x8(%rax), %rcx
movq %rcx, 0x8(%rax)
movq -0x30(%rbp), %rax
movq 0x8(%rax), %rcx
shrq $0x4, %rcx
movq -0x30(%rbp), %rax
orq 0x8(%rax), %rcx
movq %rcx, 0x8(%rax)
movq -0x30(%rbp), %rax
movq 0x8(%rax), %rcx
shrq $0x8, %rcx
movq -0x30(%rbp), %rax
orq 0x8(%rax), %rcx
movq %rcx, 0x8(%rax)
movq -0x30(%rbp), %rax
movq 0x8(%rax), %rcx
shrq $0x10, %rcx
movq -0x30(%rbp), %rax
orq 0x8(%rax), %rcx
movq %rcx, 0x8(%rax)
movq -0x30(%rbp), %rax
movq 0x8(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x8(%rax)
movq -0x30(%rbp), %rax
movq 0x10(%rax), %rdi
movq -0x30(%rbp), %rax
movq 0x8(%rax), %rsi
shlq $0x0, %rsi
callq 0x2360
movq %rax, %rcx
movq -0x30(%rbp), %rax
movq %rcx, 0x10(%rax)
jmp 0x1790ae
movq -0x18(%rbp), %rax
movq 0x10(%rax), %rax
movq %rax, -0x40(%rbp)
movq -0x20(%rbp), %rax
movq 0x10(%rax), %rax
movq %rax, -0x48(%rbp)
movq -0x28(%rbp), %rax
movq 0x10(%rax), %rax
movq %rax, -0x50(%rbp)
movq -0x30(%rbp), %rax
movq 0x10(%rax), %rax
movq %rax, -0x58(%rbp)
movq $-0x1, -0x90(%rbp)
movss 0x205f9b(%rip), %xmm0   # 0x37f08c
divss -0x34(%rbp), %xmm0
movss %xmm0, -0xd0(%rbp)
movq $0x0, -0xf8(%rbp)
movq $0x0, -0x100(%rbp)
movq $-0x1, -0xe0(%rbp)
movq $-0x1, -0xd8(%rbp)
movq 0x18(%rbp), %rax
shlq %rax
addq $0x2, %rax
movq %rax, -0xe8(%rbp)
movq $0x0, -0x60(%rbp)
movq -0x60(%rbp), %rax
movl -0xc(%rbp), %ecx
cmpq %rcx, %rax
jge 0x17953e
movq $0x0, -0x70(%rbp)
movq -0x8(%rbp), %rax
imulq $0x28, -0x60(%rbp), %rcx
addq %rcx, %rax
movq 0x18(%rax), %rax
shrq $0x20, %rax
movq %rax, -0x78(%rbp)
movq -0x8(%rbp), %rax
imulq $0x28, -0x60(%rbp), %rcx
addq %rcx, %rax
movq 0x18(%rax), %rax
movl %eax, %eax
movq %rax, -0x80(%rbp)
movq $-0x1, -0x90(%rbp)
movq -0x8(%rbp), %rax
imulq $0x28, -0x60(%rbp), %rcx
addq %rcx, %rax
movq 0x20(%rax), %rax
movq %rax, -0x98(%rbp)
movq -0x60(%rbp), %rax
movq %rax, -0x88(%rbp)
movq -0x60(%rbp), %rax
subq $0x1, %rax
movq %rax, -0x68(%rbp)
cmpq $0x0, -0x68(%rbp)
jl 0x1793c2
movq -0x78(%rbp), %rax
movq -0x8(%rbp), %rcx
imulq $0x28, -0x68(%rbp), %rdx
addq %rdx, %rcx
movq 0x18(%rcx), %rcx
shrq $0x20, %rcx
subq %rcx, %rax
movq %rax, -0xa8(%rbp)
movq -0x80(%rbp), %rax
movq -0x8(%rbp), %rcx
imulq $0x28, -0x68(%rbp), %rdx
addq %rdx, %rcx
movq 0x18(%rcx), %rcx
movl %ecx, %ecx
subq %rcx, %rax
movq %rax, -0xb0(%rbp)
cmpq $0x0, -0xa8(%rbp)
jle 0x179224
cmpq $0x0, -0xb0(%rbp)
jg 0x179229
jmp 0x1793b1
movq -0x78(%rbp), %rax
movq -0x8(%rbp), %rcx
movq -0x50(%rbp), %rdx
movq -0x68(%rbp), %rsi
movslq (%rdx,%rsi,4), %rdx
imulq $0x28, %rdx, %rdx
addq %rdx, %rcx
movq 0x18(%rcx), %rcx
shrq $0x20, %rcx
subq %rcx, %rax
movq %rax, -0xb8(%rbp)
movq -0x80(%rbp), %rax
movq -0x8(%rbp), %rcx
movq -0x50(%rbp), %rdx
movq -0x68(%rbp), %rsi
movslq (%rdx,%rsi,4), %rdx
imulq $0x28, %rdx, %rdx
addq %rdx, %rcx
movq 0x18(%rcx), %rcx
movl %ecx, %ecx
subq %rcx, %rax
movq %rax, -0xc0(%rbp)
movq -0xb8(%rbp), %rax
subq -0xc0(%rbp), %rax
movq %rax, -0xc8(%rbp)
cmpq $0x0, -0xc8(%rbp)
jge 0x1792b0
xorl %eax, %eax
subq -0xc8(%rbp), %rax
movq %rax, -0xc8(%rbp)
cvtsi2ssq -0xc8(%rbp), %xmm0
movss -0x34(%rbp), %xmm1
cvtsi2ssq -0xb8(%rbp), %xmm2
mulss %xmm2, %xmm1
ucomiss %xmm1, %xmm0
jbe 0x1792d5
jmp 0x1793b1
movq -0x8(%rbp), %rax
imulq $0x28, -0x60(%rbp), %rcx
addq %rcx, %rax
movq 0x20(%rax), %rax
movq %rax, -0xa0(%rbp)
cvtsi2ssq -0xc8(%rbp), %xmm0
cvtsi2ssq -0xb8(%rbp), %xmm1
divss %xmm1, %xmm0
movss %xmm0, -0xcc(%rbp)
cvtsi2ssq -0xa0(%rbp), %xmm0
mulss -0xcc(%rbp), %xmm0
mulss -0xd0(%rbp), %xmm0
cvttss2si %xmm0, %rcx
movq -0xa0(%rbp), %rax
subq %rcx, %rax
movq %rax, -0xa0(%rbp)
movq -0x40(%rbp), %rax
movq -0x68(%rbp), %rcx
movslq (%rax,%rcx,4), %rax
addq -0xa0(%rbp), %rax
movq %rax, -0xa0(%rbp)
movq -0xa0(%rbp), %rax
cmpq -0x98(%rbp), %rax
jle 0x179399
movq -0xa0(%rbp), %rax
movq %rax, -0x98(%rbp)
movq -0x68(%rbp), %rax
movq %rax, -0x90(%rbp)
movq -0x50(%rbp), %rax
movq -0x68(%rbp), %rcx
movslq (%rax,%rcx,4), %rax
movq %rax, -0x88(%rbp)
movq $0x0, -0x70(%rbp)
jmp 0x1793af
movq -0x70(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x70(%rbp)
cmpq 0x10(%rbp), %rax
jle 0x1793ad
jmp 0x1793c2
jmp 0x1793af
jmp 0x1793b1
movq -0x68(%rbp), %rax
addq $-0x1, %rax
movq %rax, -0x68(%rbp)
jmp 0x1791c3
movq -0x98(%rbp), %rax
movl %eax, %edx
movq -0x40(%rbp), %rax
movq -0x60(%rbp), %rcx
movl %edx, (%rax,%rcx,4)
movq -0x90(%rbp), %rax
movl %eax, %edx
movq -0x48(%rbp), %rax
movq -0x60(%rbp), %rcx
movl %edx, (%rax,%rcx,4)
movq -0x88(%rbp), %rax
movl %eax, %edx
movq -0x50(%rbp), %rax
movq -0x60(%rbp), %rcx
movl %edx, (%rax,%rcx,4)
movq -0x40(%rbp), %rax
movq -0x60(%rbp), %rcx
movslq (%rax,%rcx,4), %rax
cmpq -0xd8(%rbp), %rax
jle 0x17947f
movq -0x40(%rbp), %rax
movq -0x60(%rbp), %rcx
movslq (%rax,%rcx,4), %rax
movq %rax, -0xd8(%rbp)
movq -0x60(%rbp), %rax
movq %rax, -0xe0(%rbp)
movq -0x78(%rbp), %rdi
movq -0x78(%rbp), %rsi
movq 0x18(%rbp), %rdx
movq -0x80(%rbp), %rcx
movq -0x80(%rbp), %r8
movq 0x20(%rbp), %r9
xorl %eax, %eax
movq $0x0, (%rsp)
movq $0x0, 0x8(%rsp)
movq $0x0, 0x10(%rsp)
movq $0x0, 0x18(%rsp)
callq 0x185700
movq %rax, -0xe8(%rbp)
jmp 0x179521
movq -0x40(%rbp), %rax
movq -0x60(%rbp), %rcx
movslq (%rax,%rcx,4), %rax
cmpq -0xd8(%rbp), %rax
jne 0x17951f
movq -0x78(%rbp), %rdi
movq -0x78(%rbp), %rsi
movq 0x18(%rbp), %rdx
movq -0x80(%rbp), %rcx
movq -0x80(%rbp), %r8
movq 0x20(%rbp), %r9
xorl %eax, %eax
movq $0x0, (%rsp)
movq $0x0, 0x8(%rsp)
movq $0x0, 0x10(%rsp)
movq $0x0, 0x18(%rsp)
callq 0x185700
movq %rax, -0xf0(%rbp)
movq -0xf0(%rbp), %rax
cmpq -0xe8(%rbp), %rax
jge 0x17951d
movq -0x40(%rbp), %rax
movq -0x60(%rbp), %rcx
movslq (%rax,%rcx,4), %rax
movq %rax, -0xd8(%rbp)
movq -0x60(%rbp), %rax
movq %rax, -0xe0(%rbp)
movq -0xf0(%rbp), %rax
movq %rax, -0xe8(%rbp)
jmp 0x17951f
jmp 0x179521
movq -0x58(%rbp), %rax
movq -0x60(%rbp), %rcx
movb $0x0, (%rax,%rcx)
movq -0x60(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x60(%rbp)
jmp 0x179144
jmp 0x179540
cmpq $-0x1, -0xe0(%rbp)
je 0x17967e
movq -0x48(%rbp), %rdi
movq -0x50(%rbp), %rsi
movq -0x58(%rbp), %rdx
movq -0xe0(%rbp), %rcx
leaq -0xf8(%rbp), %r8
leaq -0x100(%rbp), %r9
callq 0x185c90
cmpq $0x0, -0xf8(%rbp)
jne 0x179583
jmp 0x17967e
cvtsi2sdq -0x100(%rbp), %xmm0
cvtsi2sdq -0xf8(%rbp), %xmm1
movsd 0x205a83(%rip), %xmm2   # 0x37f020
mulsd %xmm2, %xmm1
ucomisd %xmm1, %xmm0
jbe 0x1795fb
movq $0x0, -0x60(%rbp)
movq -0x60(%rbp), %rax
cmpq -0xf8(%rbp), %rax
jge 0x1795f9
movq -0x58(%rbp), %rax
movq -0x50(%rbp), %rcx
movq -0x60(%rbp), %rdx
movslq (%rcx,%rdx,4), %rcx
movzbl (%rax,%rcx), %eax
cmpl $0x1, %eax
jne 0x1795d7
jmp 0x1795eb
movq -0x58(%rbp), %rax
movq -0x50(%rbp), %rcx
movq -0x60(%rbp), %rdx
movslq (%rcx,%rdx,4), %rcx
movb $0x2, (%rax,%rcx)
movq -0x60(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x60(%rbp)
jmp 0x1795af
jmp 0x179654
movq -0x8(%rbp), %rdi
movq 0x28(%rbp), %rsi
movq -0x50(%rbp), %rdx
movq -0xf8(%rbp), %rcx
movq 0x18(%rbp), %r8
movq 0x20(%rbp), %r9
callq 0x185d30
movq $0x0, -0x60(%rbp)
movq -0x60(%rbp), %rax
cmpq -0xf8(%rbp), %rax
jge 0x179652
movq -0x58(%rbp), %rax
movq -0x50(%rbp), %rcx
movq -0x60(%rbp), %rdx
movslq (%rcx,%rdx,4), %rcx
movb $0x1, (%rax,%rcx)
movq -0x60(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x60(%rbp)
jmp 0x179623
jmp 0x179654
movq -0x8(%rbp), %rdi
movq -0x40(%rbp), %rsi
movq -0x58(%rbp), %rdx
movl -0xc(%rbp), %eax
movl %eax, %ecx
movq 0x18(%rbp), %r8
movq 0x20(%rbp), %r9
callq 0x186010
movq %rax, -0xe0(%rbp)
jmp 0x179540
addq $0x120, %rsp            # imm = 0x120
popq %rbp
retq
nopw (%rax,%rax)