// File: /workspace/github_cpp_makefile_star2_O3/chhylp123[P]hifiasm/inter.cpp
// Function: quick_rechain(overlap_region_alloc*, ul_ov_t*, long, kv_rtrace_t*, ul_idx_t const*, ug_opt_t const*, long, double, long, long, long, long, bit_extz_t*, long, All_reads*, char*, UC_Read*, double, int*, int*, int*, int*, long*, long*)
int64_t quick_rechain(overlap_region_alloc* ol, ul_ov_t *a, int64_t a_n, kv_rtrace_t *trace, const ul_idx_t *uref, const ug_opt_t *uopt, 
int64_t bw, double diff_ec_ul, int64_t qlen, int64_t max_skip, int64_t max_iter, int64_t max_dis, 
bit_extz_t *exz, int64_t trans_sc, All_reads *ridx, char* qstr, UC_Read *tu, double e_rate, 
int32_t *f, int32_t *c_n, int32_t *c_sc, int32_t *rch, int64_t *p, int64_t *t)
{
	int64_t mm_ovlp, x, i, j, sc, csc, mm_sc, mm_idx, mm_n, sn, n_skip, end_j; 
	ul_ov_t *li, *lj; rtrace_iter tc; int64_t st, max_ii, max, max_n; uint32_t li_v;
	memset(t, 0, (a_n*sizeof((*t)))); 

	for (i = st = 0, max_ii = -1; i < a_n; ++i) {
        li = &(a[i]); li_v = (li->tn<<1)|li->rev; rch[i] = INT32_MAX;
		csc = li->qe - li->qs; csc -= (((int64_t)li->sec)*trans_sc);
        mm_sc = INT32_MIN; mm_idx = -1; mm_n = 0; 
        n_skip = 0; end_j = -1; tc.k = INT32_MAX;
		// if((i>=15) && (rch_connect(rch[15], 18))) {
		// 	fprintf(stderr, ">>>[i::%ld] (id::%u)%.*s\t%c\trch[i]::%d\n", i, li->tn,
		// 				(int)Get_NAME_LENGTH(R_INF, a[i].tn), Get_NAME(R_INF, a[i].tn), 
		// 				"+-"[a[i].rev], rch[15]);
		// }
		if(li->el) {
			mm_ovlp = max_ovlp_src_contain(uopt, li_v^1);        
			x = (li->qs + mm_ovlp)*diff_ec_ul; 
			if(x < bw) x = bw; 
			x += li->qs + mm_ovlp;
			if (x > qlen+1) x = qlen+1;
			x = find_ul_ov_max(i, a, x+G_CHAIN_INDEL); 
			if ((x-st) > max_iter) st = x-max_iter;
			for (j = x; j >= st; --j) { // collect potential destination vertices
				lj = &(a[j]); 
				rch[j] = (i<<2); rch[j] += 3;//set it to unaviable
				// if((i>=15) && (rch_connect(rch[15], 18))) {
				// 	fprintf(stderr, "**j::%ld**[i::%ld] (id::%u)%.*s\t%c\trch[i]::%d\n", j, i, li->tn,
				// 				(int)Get_NAME_LENGTH(R_INF, a[i].tn), Get_NAME(R_INF, a[i].tn), 
				// 				"+-"[a[i].rev], rch[15]);
				// }
				if(!(lj->el)) continue;
				if(lj->qe <= li->qs) break;//even this pair has a overlap, its length will be very small; just ignore
				if(lj->qs > li->qs) continue;///no contain
				sc = quick_rechain_sc(a, ol, uref, uopt, bw, diff_ec_ul, ridx, trace, qstr, tu, 
				&tc, e_rate, exz, trans_sc, f, i, j);
				if(sc == INT32_MIN) continue;
				// if(li->tn == 23989) {
				// 	fprintf(stderr, "*[i::%ld] (id::%u)%.*s\t%c\tj::%ld\t%.*s\n", i, li->tn,
				// 		(int)Get_NAME_LENGTH(R_INF, a[i].tn), Get_NAME(R_INF, a[i].tn), 
				// 		"+-"[a[i].rev], j, (int)Get_NAME_LENGTH(R_INF, lj->tn), Get_NAME(R_INF, lj->tn));
				// }
				rch[j] = (i<<2);//set it to aviable
				sn = c_n[j] + 1;
				if((sc > mm_sc) || ((sc == mm_sc) && (sn > mm_n))) {
					mm_sc = sc, mm_idx = j; mm_n = sn; 
					if (n_skip > 0) --n_skip;
				} else if (t[j] == i) {
					if (++n_skip > max_skip)
						break;
				}
				if (p[j] >= 0) t[p[j]] = i;
			}
			// if((i>=15) && (rch_connect(rch[15], 18))) {
			// 	fprintf(stderr, ">>>1[i::%ld] (id::%u)%.*s\t%c\trch[i]::%d\n", i, li->tn,
			// 				(int)Get_NAME_LENGTH(R_INF, a[i].tn), Get_NAME(R_INF, a[i].tn), 
			// 				"+-"[a[i].rev], rch[15]);
			// }

			end_j = j;
			if (max_ii < 0 || (a[i].qe>(a[max_ii].qe+max_dis))) {//too long
				max = INT32_MIN; max_n = INT32_MIN; max_ii = -1;
				for (j = i - 1; (j >= st) && (a[i].qe<=(max_dis+a[j].qe)); --j) {
					if ((max < f[j]) || ((max == f[j]) && (max_n < c_n[j]))) {
						max = f[j]; max_n = c_n[j]; max_ii = j;
					}
				}
			}
			// if((i>=15) && (rch_connect(rch[15], 18))) {
			// 	fprintf(stderr, ">>>2[i::%ld] (id::%u)%.*s\t%c\trch[i]::%d\n", i, li->tn,
			// 				(int)Get_NAME_LENGTH(R_INF, a[i].tn), Get_NAME(R_INF, a[i].tn), 
			// 				"+-"[a[i].rev], rch[15]);
			// }

			if (max_ii >= 0 && max_ii < end_j) {///just have a try with a[i]<->a[max_ii]
				lj = &(a[max_ii]); 
				if((lj->el) && (lj->qe > li->qs) && (lj->qs <= li->qs)) {
					sc = quick_rechain_sc(a, ol, uref, uopt, bw, diff_ec_ul, ridx, trace, qstr, tu, 
					&tc, e_rate, exz, trans_sc, f, i, max_ii);
					///as max_ii < end_j, get_rid_backward_cigar_err still works
					if(sc != INT32_MIN) {
						sn = c_n[max_ii] + 1;
						if((sc > mm_sc) || ((sc == mm_sc) && (sn > mm_n))) {
							mm_sc = sc; mm_idx = max_ii; mm_n = sn; 
						}
					}
				}
			}
			// if((i>=15) && (rch_connect(rch[15], 18))) {
			// 	fprintf(stderr, ">>>3[i::%ld] (id::%u)%.*s\t%c\trch[i]::%d\n", i, li->tn,
			// 				(int)Get_NAME_LENGTH(R_INF, a[i].tn), Get_NAME(R_INF, a[i].tn), 
			// 				"+-"[a[i].rev], rch[15]);
			// }
			sc = csc; sn = 1;///for i itself
			if((sc > mm_sc) || ((sc == mm_sc) && (sn > mm_n))) {
				mm_sc = sc, mm_idx = -1; mm_n = sn; 
			}

			if(mm_sc < 0) {
				mm_sc = csc; mm_idx = -1; mm_n = 1;
			}
			// if(li->tn == 23989) {
			// 	fprintf(stderr, "+[i::%ld] (id::%u)%.*s\t%c\tj::%ld\t%.*s\n", i, li->tn,
			// 		(int)Get_NAME_LENGTH(R_INF, a[i].tn), Get_NAME(R_INF, a[i].tn), 
			// 		"+-"[a[i].rev], mm_idx, mm_idx>=0?((int)Get_NAME_LENGTH(R_INF, a[mm_idx].tn)):(1), 
			// 		mm_idx>=0?(Get_NAME(R_INF, a[mm_idx].tn)):("*"));
			// }
			if(mm_idx >= 0) {
				///mo meed to update mm_sc and is_fc
				quick_rechain_propagate_transitive_reduction(uref, uopt, ridx, bw, diff_ec_ul, a, x+1, i, rch, f, p, c_n, t, &mm_sc, &mm_idx, &mm_n);
			}
			// if(li->tn == 23989) {
			// 	fprintf(stderr, "-[i::%ld] (id::%u)%.*s\t%c\tj::%ld\t%.*s\n", i, li->tn,
			// 		(int)Get_NAME_LENGTH(R_INF, a[i].tn), Get_NAME(R_INF, a[i].tn), 
			// 		"+-"[a[i].rev], mm_idx, mm_idx>=0?((int)Get_NAME_LENGTH(R_INF, a[mm_idx].tn)):(1), 
			// 		mm_idx>=0?(Get_NAME(R_INF, a[mm_idx].tn)):("*"));
			// }
		}
		f[i] = mm_sc; p[i] = mm_idx; c_n[i] = mm_n; 
		if ((max_ii < 0) || ((a[i].qe<=max_dis+a[max_ii].qe) && (f[max_ii]<f[i]))) {
			max_ii = i;
		}
	}

	int64_t cl = 0; i = a_n-1; 
	while (i >= 0) {
		// fprintf(stderr, "i::%ld[M::%s] (id::%u)%.*s\t%c\tq::[%u, %u)\tt::[%u, %u)\tc::%u\n", 
		// i, __func__, a[i].tn, (int)Get_NAME_LENGTH(R_INF, a[i].tn), Get_NAME(R_INF, a[i].tn), 
		// 			"+-"[a[i].rev], a[i].qs, a[i].qe, a[i].ts, a[i].te, !a[i].el);
        t[cl++] = i; i = p[i];
    }
	return cl;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x158, %rsp            # imm = 0x158
movsd %xmm1, 0x90(%rsp)
movsd %xmm0, 0x58(%rsp)
movq %r9, 0x50(%rsp)
movq %r8, 0x60(%rsp)
movq %rcx, 0x88(%rsp)
movq %rdx, %rbx
movq %rsi, %rbp
movq %rdi, 0x80(%rsp)
movq 0x208(%rsp), %rdi
leaq (,%rdx,8), %rdx
xorl %r14d, %r14d
xorl %esi, %esi
callq 0x20e0
testq %rbx, %rbx
jle 0x1beed9
movq 0x200(%rsp), %r15
movq 0x1f8(%rsp), %r11
movq 0x1e8(%rsp), %r14
movq 0x198(%rsp), %rax
incq %rax
movq %rax, 0xa8(%rsp)
leaq 0x4(%rbp), %rax
movq %rax, 0xa0(%rsp)
leaq -0x14(%rbp), %r12
movq $-0x1, %rdx
xorl %r10d, %r10d
movq $-0x1, %rdi
xorl %r13d, %r13d
movq %rbx, 0xb0(%rsp)
movq %rbp, 0x98(%rsp)
leaq (,%r13,8), %rax
addq %r13, %rax
leaq (%rax,%rax,2), %rcx
addq %r13, %rcx
leaq (%rcx,%rbp), %rax
movq %rax, 0x30(%rsp)
movl 0xc(%rbp,%rcx), %esi
movl 0x18(%rbp,%rcx), %eax
movl $0x7fffffff, (%r11,%r13,4) # imm = 0x7FFFFFFF
movl 0x4(%rbp,%rcx), %r9d
movl 0x8(%rbp,%rcx), %r8d
movl 0x18(%rbp,%rcx), %ecx
movq $0x7fffffff, 0xc0(%rsp) # imm = 0x7FFFFFFF
btl $0x1e, %ecx
jb 0x1be80d
movq $-0x80000000, %rsi      # imm = 0x80000000
xorl %ecx, %ecx
movq $-0x1, %r8
jmp 0x1bed54
movq %rcx, 0xb8(%rsp)
movq %r8, 0x28(%rsp)
movq %rdi, (%rsp)
movq %rdx, 0x48(%rsp)
movq %r12, 0x78(%rsp)
shldl $0x1, %eax, %esi
xorl $0x1, %esi
movq 0x50(%rsp), %rdi
movq %r10, %rbx
movq %r9, %r14
callq 0x1be0f4
movq %r14, 0x20(%rsp)
addq %r14, %rax
xorps %xmm0, %xmm0
cvtsi2sd %rax, %xmm0
mulsd 0x58(%rsp), %xmm0
cvttsd2si %xmm0, %rdx
movq 0x190(%rsp), %rcx
cmpq %rcx, %rdx
cmovleq %rcx, %rdx
addq %rax, %rdx
movq 0xa8(%rsp), %rax
cmpq %rax, %rdx
cmovgeq %rax, %rdx
subl $-0x80, %edx
movl %r13d, %edi
movq %rbp, %rsi
callq 0x1a83b5
movq %rbx, %r10
movl %eax, 0x70(%rsp)
cltq
movq %rax, %rcx
subq %rbx, %rcx
movq %rax, %rdx
movq 0x1a8(%rsp), %rsi
subq %rsi, %rdx
cmpq %rsi, %rcx
cmovgq %rdx, %r10
cmpq %rax, %r10
movq %r10, 0x18(%rsp)
jle 0x1be8db
movq $-0x80000000, 0x10(%rsp) # imm = 0x80000000
movq $-0x1, %rsi
xorl %r12d, %r12d
movq 0x1f8(%rsp), %r11
movq (%rsp), %rdx
jmp 0x1beacf
leal (,%r13,4), %ecx
movl %ecx, 0x74(%rsp)
leal 0x3(,%r13,4), %r14d
leaq (%rax,%rax,8), %rcx
leaq (%rcx,%rcx,2), %rbx
movq 0xa0(%rsp), %rcx
addq %rax, %rcx
addq %rcx, %rbx
movq $-0x1, %rsi
movq $-0x80000000, 0x10(%rsp) # imm = 0x80000000
movq $0x0, 0x8(%rsp)
movq %rax, %rbp
xorl %r15d, %r15d
movq 0x1f8(%rsp), %r11
movq (%rsp), %rdx
movq %r13, 0x68(%rsp)
movl %r14d, (%r11,%rbp,4)
testb $0x40, 0x17(%rbx)
je 0x1be954
movq 0x30(%rsp), %rax
movl 0x4(%rax), %eax
cmpl %eax, 0x4(%rbx)
jbe 0x1beac9
cmpl %eax, (%rbx)
jbe 0x1be96f
movq %r15, %r12
leaq -0x1(%rbp), %rax
addq $-0x1c, %rbx
movq %r12, %r15
cmpq %r10, %rbp
movq %rax, %rbp
jg 0x1be935
jmp 0x1beacf
movq %r13, %rax
movq %rsi, %r13
subq $0x8, %rsp
movq 0xa0(%rsp), %rdi
movq 0x88(%rsp), %rsi
movq 0x68(%rsp), %rdx
movq 0x58(%rsp), %rcx
movq 0x198(%rsp), %r8
movsd 0x60(%rsp), %xmm0
movq 0x1d0(%rsp), %r9
movsd 0x98(%rsp), %xmm1
pushq %rbp
pushq %rax
pushq 0x1f8(%rsp)
pushq 0x1e0(%rsp)
pushq 0x1e0(%rsp)
leaq 0xf0(%rsp), %rax
pushq %rax
pushq 0x210(%rsp)
pushq 0x210(%rsp)
pushq 0xd0(%rsp)
callq 0x1be2d9
addq $0x50, %rsp
cmpq $-0x80000000, %rax      # imm = 0x80000000
jne 0x1bea19
movq %r15, %r12
movq 0x1f8(%rsp), %r11
movq 0x18(%rsp), %r10
movq (%rsp), %rdx
movq %r13, %rsi
movq 0x68(%rsp), %r13
jmp 0x1be957
movq 0x1f8(%rsp), %r11
movl 0x74(%rsp), %ecx
movl %ecx, (%r11,%rbp,4)
movq 0x1e8(%rsp), %rcx
movslq (%rcx,%rbp,4), %r12
incq %r12
cmpq 0x10(%rsp), %rax
movq 0x18(%rsp), %r10
movq (%rsp), %rdx
jg 0x1bea52
movq %r13, %rsi
jne 0x1bea76
cmpq %r12, %r15
jge 0x1bea76
xorl %ecx, %ecx
movq 0x8(%rsp), %rsi
testq %rsi, %rsi
setg %cl
subq %rcx, %rsi
movq %rsi, 0x8(%rsp)
movq %rbp, %rsi
movq %rax, 0x10(%rsp)
movq 0x68(%rsp), %r13
jmp 0x1beaa3
movq 0x208(%rsp), %rax
movq 0x68(%rsp), %r13
cmpq %r13, (%rax,%rbp,8)
jne 0x1beaa0
movq 0x8(%rsp), %rax
cmpq 0x1a0(%rsp), %rax
jge 0x1beac9
incq %rax
movq %rax, 0x8(%rsp)
movq %r15, %r12
movq 0x200(%rsp), %rax
movq (%rax,%rbp,8), %rax
testq %rax, %rax
js 0x1be957
movq 0x208(%rsp), %rcx
movq %r13, (%rcx,%rax,8)
jmp 0x1be957
movq %r15, %r12
movq %rbp, %rax
movq %r12, 0x38(%rsp)
movq %rsi, 0x8(%rsp)
movq %rsi, 0x40(%rsp)
testq %rdx, %rdx
movq 0xb0(%rsp), %rbx
movq 0x200(%rsp), %r15
movq 0x98(%rsp), %rbp
movq 0x1e8(%rsp), %r14
js 0x1beb2f
movq 0x30(%rsp), %rcx
movl 0x8(%rcx), %ecx
movq (%rsp), %rsi
leaq (%rsi,%rsi,8), %rdx
leaq (%rdx,%rdx,2), %rdx
addq %rsi, %rdx
movl 0x8(%rbp,%rdx), %edx
addq 0x1b0(%rsp), %rdx
cmpq %rcx, %rdx
jge 0x1bebbf
movq $-0x1, %rdi
cmpq %r10, %r13
jle 0x1bec0c
movq 0x30(%rsp), %rcx
movl 0x8(%rcx), %ecx
movq $-0x1, (%rsp)
movq $-0x80000000, %rdi      # imm = 0x80000000
movq 0x78(%rsp), %rdx
movq 0x48(%rsp), %rsi
movq $-0x80000000, %r8       # imm = 0x80000000
movl (%rdx), %r9d
addq 0x1b0(%rsp), %r9
cmpq %rcx, %r9
jl 0x1bebbf
movq 0x1e0(%rsp), %r9
movslq (%r9,%rsi,4), %r9
cmpq %r9, %r8
jge 0x1beb95
movslq (%r14,%rsi,4), %rdi
movq %rsi, (%rsp)
movq %r9, %r8
jmp 0x1bebaa
jne 0x1bebaa
movslq (%r14,%rsi,4), %r10
cmpq %r10, %rdi
jge 0x1bebaa
movq %rsi, (%rsp)
movq %r9, %r8
movq %r10, %rdi
leaq -0x1(%rsi), %r9
addq $-0x1c, %rdx
movq 0x18(%rsp), %r10
cmpq %r10, %rsi
movq %r9, %rsi
jg 0x1beb67
movq (%rsp), %rdi
testq %rdi, %rdi
js 0x1bec0c
cmpq %rax, %rdi
movq 0x28(%rsp), %rsi
movq 0x20(%rsp), %rdx
movq 0x8(%rsp), %r8
jge 0x1bec07
leaq (%rdi,%rdi,8), %rax
leaq (%rax,%rax,2), %rax
addq %rdi, %rax
testb $0x40, 0x1b(%rbp,%rax)
je 0x1bec07
addq %rbp, %rax
movq 0x30(%rsp), %rcx
movl 0x4(%rcx), %ecx
cmpl %ecx, 0x8(%rax)
jbe 0x1bec07
cmpl %ecx, 0x4(%rax)
jbe 0x1bedbd
movq %r12, %rcx
jmp 0x1bec1e
movq %r12, %rcx
movq 0x28(%rsp), %rsi
movq 0x20(%rsp), %rdx
movq 0x8(%rsp), %r8
subl %edx, %esi
movq 0xb8(%rsp), %rax
andl $0x3fffffff, %eax       # imm = 0x3FFFFFFF
imulq 0x1c0(%rsp), %rax
subq %rax, %rsi
cmpq 0x10(%rsp), %rsi
movq 0x78(%rsp), %r12
jg 0x1bec4c
jne 0x1bec71
testq %rcx, %rcx
jg 0x1bec71
movq $-0x1, 0x40(%rsp)
movq $0x1, 0x38(%rsp)
testq %rsi, %rsi
movq 0x48(%rsp), %rdx
jns 0x1bed48
jmp 0x1bed36
cmpq $0x0, 0x10(%rsp)
movq 0x48(%rsp), %rdx
js 0x1bed36
testq %r8, %r8
js 0x1bed2f
movl 0x70(%rsp), %r9d
incl %r9d
subq $0x50, %rsp
leaq 0x88(%rsp), %rax
movq %rax, 0x40(%rsp)
leaq 0x90(%rsp), %rax
movq %rax, 0x38(%rsp)
movq 0x258(%rsp), %rax
movq %rax, 0x28(%rsp)
movq %r14, 0x20(%rsp)
movq %r15, 0x18(%rsp)
movq %r11, 0x8(%rsp)
movq %r13, (%rsp)
movq %rdi, 0x50(%rsp)
movq 0xb0(%rsp), %rdi
movq 0xa0(%rsp), %rsi
movq 0x218(%rsp), %rdx
movq 0x1e0(%rsp), %rcx
movsd 0xa8(%rsp), %xmm0
movq %rbp, %r8
callq 0x1be44e
movq 0x50(%rsp), %rdi
movq 0x68(%rsp), %r10
movq 0x98(%rsp), %rdx
movq 0x248(%rsp), %r11
addq $0x50, %rsp
movq 0x40(%rsp), %r8
movq 0x38(%rsp), %rcx
movq 0x10(%rsp), %rsi
jmp 0x1bed54
movq $-0x1, 0x40(%rsp)
movq $0x1, 0x38(%rsp)
movq $-0x1, %r8
movl $0x1, %ecx
movq 0x1e0(%rsp), %rax
movl %esi, (%rax,%r13,4)
movq %r8, (%r15,%r13,8)
movl %ecx, (%r14,%r13,4)
testq %rdi, %rdi
js 0x1beda2
movq 0x30(%rsp), %rax
movl 0x8(%rax), %eax
leaq (%rdi,%rdi,8), %rcx
leaq (%rcx,%rcx,2), %rcx
addq %rdi, %rcx
movl 0x8(%rbp,%rcx), %ecx
addq 0x1b0(%rsp), %rcx
cmpq %rax, %rcx
jl 0x1beda5
movq 0x1e0(%rsp), %rcx
movl (%rcx,%rdi,4), %eax
cmpl (%rcx,%r13,4), %eax
jge 0x1beda5
movq %r13, %rdi
incq %r13
incq %rdx
addq $0x1c, %r12
cmpq %rbx, %r13
jne 0x1be7ad
jmp 0x1beeb1
subq $0x8, %rsp
movq %rdi, %rax
movq %rbp, %rdi
movq 0x88(%rsp), %rsi
movq 0x68(%rsp), %rdx
movq 0x58(%rsp), %rcx
movq 0x198(%rsp), %r8
movsd 0x60(%rsp), %xmm0
movq 0x1d0(%rsp), %r9
movsd 0x98(%rsp), %xmm1
movq %rax, 0x8(%rsp)
pushq %rax
pushq %r13
pushq 0x1f8(%rsp)
pushq 0x1e0(%rsp)
pushq 0x1e0(%rsp)
leaq 0xf0(%rsp), %rax
pushq %rax
pushq 0x210(%rsp)
pushq 0x210(%rsp)
pushq 0xd0(%rsp)
callq 0x1be2d9
addq $0x50, %rsp
cmpq $-0x80000000, %rax      # imm = 0x80000000
jne 0x1bee5d
movq %r12, %rcx
movq 0x1f8(%rsp), %r11
movq 0x18(%rsp), %r10
movq (%rsp), %rdi
jmp 0x1bec0f
movq (%rsp), %rdi
movslq (%r14,%rdi,4), %rcx
incq %rcx
cmpq 0x10(%rsp), %rax
movq 0x1f8(%rsp), %r11
movq 0x18(%rsp), %r10
movq 0x28(%rsp), %rsi
movq 0x20(%rsp), %rdx
movq 0x8(%rsp), %r8
jg 0x1bee9a
jne 0x1bec07
cmpq %rcx, %r12
jge 0x1bec07
movq %rdi, 0x40(%rsp)
movq %rcx, 0x38(%rsp)
movq %rdi, %r8
movq %rax, 0x10(%rsp)
jmp 0x1bec1e
testq %rbx, %rbx
jle 0x1beed6
decq %rbx
xorl %r14d, %r14d
movq 0x208(%rsp), %rax
movq %rbx, (%rax,%r14,8)
incq %r14
movq (%r15,%rbx,8), %rbx
testq %rbx, %rbx
jns 0x1beec4
jmp 0x1beed9
xorl %r14d, %r14d
movq %r14, %rax
addq $0x158, %rsp            # imm = 0x158
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq