// File: chhylp123[P]hifiasm/Overlaps.cpp
// Function: check_different_haps(asg_t*, ma_ug_t*, asg_t*, unsigned int, unsigned int, ma_hit_t_alloc*, buf_t*, buf_t*, R_to_U*, unsigned char*, unsigned int, unsigned int)
inline uint32_t check_different_haps(asg_t *nsg, ma_ug_t *ug, asg_t *read_sg, 
uint32_t v_0, uint32_t v_1, ma_hit_t_alloc* reverse_sources, buf_t* b_0, buf_t* b_1, 
R_to_U* ruIndex, uint8_t* is_r_het, uint32_t min_edge_length, uint32_t stops_threshold)
{
	uint32_t vEnd, qn, tn, j, is_Unitig, uId;
	long long ELen_0, ELen_1, tmp, max_stop_nodeLen, max_stop_baseLen;

	b_0->b.n = b_1->b.n = 0;
	if(get_unitig(nsg, ug, v_0, &vEnd, &ELen_0, &tmp, &max_stop_nodeLen, &max_stop_baseLen, 
	stops_threshold, b_0) == LOOP)
	{
		return UNAVAILABLE;
	}
	if(get_unitig(nsg, ug, v_1, &vEnd, &ELen_1, &tmp, &max_stop_nodeLen, &max_stop_baseLen, 
	stops_threshold, b_1) == LOOP)
	{
		return UNAVAILABLE;
	}
	if(ELen_0<=min_edge_length || ELen_1<=min_edge_length) return UNAVAILABLE;

	rIdContig b_max, b_min;
	b_max.b_0 = b_min.b_0 = NULL;
	b_max.offset = b_max.readI = b_max.untigI = 0;
	b_min.offset = b_min.readI = b_min.untigI = 0;

	if(ELen_0<=ELen_1)
	{
        b_min.b_0 = b_0;
        b_max.b_0 = b_1;
    }
    else
    {
        b_min.b_0 = b_1;
        b_max.b_0 = b_0;
    }

	uint32_t max_count = 0, min_count = 0, n_het = 0, n_hom = 0;
	ma_utg_t *node_min = NULL, *node_max = NULL;
	if(ug != NULL)
	{
		/*****************************label all unitigs****************************************/
		for (b_max.untigI = 0; b_max.untigI < b_max.b_0->b.n; b_max.untigI++)
		{
			node_max = &(ug->u.a[b_max.b_0->b.a[b_max.untigI]>>1]);
			///each read
			for (b_max.readI = 0; b_max.readI < node_max->n; b_max.readI++)
			{
				qn = (node_max->a[b_max.readI]>>33);
				set_R_to_U(ruIndex, qn, (b_max.b_0->b.a[b_max.untigI]>>1), 1, &(read_sg->seq[qn].c));
			}
		}
		/*****************************label all unitigs****************************************/

		///each unitig
		for (b_min.untigI = 0; b_min.untigI < b_min.b_0->b.n; b_min.untigI++)
		{
			
			node_min = &(ug->u.a[(b_min.b_0->b.a[b_min.untigI]>>1)]);

			///each read
			for (b_min.readI = 0; b_min.readI < node_min->n; b_min.readI++)
        	{
				qn = node_min->a[b_min.readI]>>33;

				/************************BUG: don't forget****************************/
				if(reverse_sources[qn].length > 0) min_count++;
                if((is_r_het[qn] & C_HET) || (is_r_het[qn] & P_HET)) n_het++;
                n_hom++;
				/************************BUG: don't forget****************************/
				for (j = 0; j < (long long)reverse_sources[qn].length; j++)
				{
					tn = Get_tn(reverse_sources[qn].buffer[j]);
					if(read_sg->seq[tn].del == 1)
					{
						get_R_to_U(ruIndex, tn, &tn, &is_Unitig);
						if(tn == (uint32_t)-1 || is_Unitig == 1 || read_sg->seq[tn].del == 1) continue;
					}

					get_R_to_U(ruIndex, tn, &uId, &is_Unitig);
					if(uId!=(uint32_t)-1 && is_Unitig == 1)
					{
                        // if(v_0==510 && v_1==67) fprintf(stderr, "###untigI-%u, readI-%um, un-%u\n", b_min.untigI, b_min.readI, (uint32_t)node_min->n);
						max_count++;
						break;
					}
				}
			}
		}
		/*****************************label all unitigs****************************************/
		for (b_max.untigI = 0; b_max.untigI < b_max.b_0->b.n; b_max.untigI++)
		{
			node_max = &(ug->u.a[b_max.b_0->b.a[b_max.untigI]>>1]);
			///each read
			for (b_max.readI = 0; b_max.readI < node_max->n; b_max.readI++)
			{
				qn = (node_max->a[b_max.readI]>>33);
				ruIndex->index[qn] = (uint32_t)-1;
			}
		}
		/*****************************label all unitigs****************************************/
	}
	else
	{
		/*****************************label all reads****************************************/
		for (b_max.untigI = 0; b_max.untigI < b_max.b_0->b.n; b_max.untigI++)
		{
			qn = (b_max.b_0->b.a[b_max.untigI]>>1);
			set_R_to_U(ruIndex, qn, 1, 1, &(read_sg->seq[qn].c));
		}
		/*****************************label all reads****************************************/

		///each read
		for (b_min.untigI = 0; b_min.untigI < b_min.b_0->b.n; b_min.untigI++)
		{
			qn = (b_min.b_0->b.a[b_min.untigI]>>1);

			/************************BUG: don't forget****************************/
			if(reverse_sources[qn].length > 0) min_count++;
			if((is_r_het[qn] & C_HET) || (is_r_het[qn] & P_HET)) n_het++;
            n_hom++;
			/************************BUG: don't forget****************************/

			for (j = 0; j < (long long)reverse_sources[qn].length; j++)
        	{
            	tn = Get_tn(reverse_sources[qn].buffer[j]);
				if(nsg->seq[tn].del == 1)
				{
					get_R_to_U(ruIndex, tn, &tn, &is_Unitig);
					if(tn == (uint32_t)-1 || is_Unitig == 1 || nsg->seq[tn].del == 1) continue;
				}


				get_R_to_U(ruIndex, tn, &uId, &is_Unitig);
				if(uId!=(uint32_t)-1 && is_Unitig == 1)
				{
					max_count++;
					break;
				}
			}
		}

		/*****************************label all reads****************************************/
		for (b_max.untigI = 0; b_max.untigI < b_max.b_0->b.n; b_max.untigI++)
		{
			qn = (b_max.b_0->b.a[b_max.untigI]>>1);
			ruIndex->index[qn] = (uint32_t)-1;
		}
		/*****************************label all reads****************************************/
	}

	if(min_count == 0) return UNAVAILABLE;
	if(max_count > min_count*asm_opt.purge_simi_thres && n_het >= n_hom*HET_HOM_RATE) return PLOID;
	return NON_PLOID;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %rbx
subq $0xe8, %rsp
movl 0x38(%rbp), %eax
movl 0x30(%rbp), %eax
movq 0x28(%rbp), %rax
movq 0x20(%rbp), %rax
movq 0x18(%rbp), %rax
movq 0x10(%rbp), %rax
movq %rdi, -0x18(%rbp)
movq %rsi, -0x20(%rbp)
movq %rdx, -0x28(%rbp)
movl %ecx, -0x2c(%rbp)
movl %r8d, -0x30(%rbp)
movq %r9, -0x38(%rbp)
movq 0x18(%rbp), %rax
movq $0x0, 0x38(%rax)
movq 0x10(%rbp), %rax
movq $0x0, 0x38(%rax)
movq -0x18(%rbp), %rdi
movq -0x20(%rbp), %rsi
movl -0x2c(%rbp), %edx
movl 0x38(%rbp), %r10d
movq 0x10(%rbp), %rax
leaq -0x3c(%rbp), %rcx
leaq -0x58(%rbp), %r8
leaq -0x68(%rbp), %r9
leaq -0x70(%rbp), %rbx
leaq -0x78(%rbp), %r11
movq %rbx, (%rsp)
movq %r11, 0x8(%rsp)
movl %r10d, 0x10(%rsp)
movq %rax, 0x18(%rsp)
callq 0x166c30
cmpl $0x7, %eax
jne 0x167571
movl $0xffffffff, -0xc(%rbp) # imm = 0xFFFFFFFF
jmp 0x167d25
movq -0x18(%rbp), %rdi
movq -0x20(%rbp), %rsi
movl -0x30(%rbp), %edx
movl 0x38(%rbp), %r10d
movq 0x18(%rbp), %rax
leaq -0x3c(%rbp), %rcx
leaq -0x60(%rbp), %r8
leaq -0x68(%rbp), %r9
leaq -0x70(%rbp), %rbx
leaq -0x78(%rbp), %r11
movq %rbx, (%rsp)
movq %r11, 0x8(%rsp)
movl %r10d, 0x10(%rsp)
movq %rax, 0x18(%rsp)
callq 0x166c30
cmpl $0x7, %eax
jne 0x1675c1
movl $0xffffffff, -0xc(%rbp) # imm = 0xFFFFFFFF
jmp 0x167d25
movq -0x58(%rbp), %rax
movl 0x30(%rbp), %ecx
cmpq %rcx, %rax
jle 0x1675d9
movq -0x60(%rbp), %rax
movl 0x30(%rbp), %ecx
cmpq %rcx, %rax
jg 0x1675e5
movl $0xffffffff, -0xc(%rbp) # imm = 0xFFFFFFFF
jmp 0x167d25
movq $0x0, -0xa8(%rbp)
movq $0x0, -0x90(%rbp)
movl $0x0, -0x88(%rbp)
movl $0x0, -0x84(%rbp)
movl $0x0, -0x80(%rbp)
movl $0x0, -0xa0(%rbp)
movl $0x0, -0x9c(%rbp)
movl $0x0, -0x98(%rbp)
movq -0x58(%rbp), %rax
cmpq -0x60(%rbp), %rax
jg 0x167656
movq 0x10(%rbp), %rax
movq %rax, -0xa8(%rbp)
movq 0x18(%rbp), %rax
movq %rax, -0x90(%rbp)
jmp 0x16766c
movq 0x18(%rbp), %rax
movq %rax, -0xa8(%rbp)
movq 0x10(%rbp), %rax
movq %rax, -0x90(%rbp)
movl $0x0, -0xac(%rbp)
movl $0x0, -0xb0(%rbp)
movl $0x0, -0xb4(%rbp)
movl $0x0, -0xb8(%rbp)
movq $0x0, -0xc0(%rbp)
movq $0x0, -0xc8(%rbp)
cmpq $0x0, -0x20(%rbp)
je 0x167a59
movl $0x0, -0x88(%rbp)
movl -0x88(%rbp), %eax
movq -0x90(%rbp), %rcx
cmpq 0x38(%rcx), %rax
jae 0x1677a0
movq -0x20(%rbp), %rax
movq 0x10(%rax), %rax
movq -0x90(%rbp), %rcx
movq 0x48(%rcx), %rcx
movl -0x88(%rbp), %edx
movl (%rcx,%rdx,4), %ecx
shrl %ecx
movl %ecx, %ecx
imulq $0x28, %rcx, %rcx
addq %rcx, %rax
movq %rax, -0xc8(%rbp)
movl $0x0, -0x84(%rbp)
movl -0x84(%rbp), %eax
movq -0xc8(%rbp), %rcx
cmpl 0x10(%rcx), %eax
jae 0x16778a
movq -0xc8(%rbp), %rax
movq 0x18(%rax), %rax
movl -0x84(%rbp), %ecx
movq (%rax,%rcx,8), %rax
shrq $0x21, %rax
movl %eax, -0x40(%rbp)
movq 0x20(%rbp), %rdi
movl -0x40(%rbp), %esi
movq -0x90(%rbp), %rax
movq 0x48(%rax), %rax
movl -0x88(%rbp), %ecx
movl (%rax,%rcx,4), %edx
shrl %edx
movq -0x28(%rbp), %rax
movq 0x20(%rax), %r8
movl -0x40(%rbp), %eax
shlq $0x3, %rax
addq %rax, %r8
addq $0x4, %r8
movl $0x1, %ecx
callq 0xd0e20
movl -0x84(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x84(%rbp)
jmp 0x16770e
jmp 0x16778c
movl -0x88(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x88(%rbp)
jmp 0x1676bf
movl $0x0, -0xa0(%rbp)
movl -0xa0(%rbp), %eax
movq -0xa8(%rbp), %rcx
cmpq 0x38(%rcx), %rax
jae 0x167994
movq -0x20(%rbp), %rax
movq 0x10(%rax), %rax
movq -0xa8(%rbp), %rcx
movq 0x48(%rcx), %rcx
movl -0xa0(%rbp), %edx
movl (%rcx,%rdx,4), %ecx
shrl %ecx
movl %ecx, %ecx
imulq $0x28, %rcx, %rcx
addq %rcx, %rax
movq %rax, -0xc0(%rbp)
movl $0x0, -0x9c(%rbp)
movl -0x9c(%rbp), %eax
movq -0xc0(%rbp), %rcx
cmpl 0x10(%rcx), %eax
jae 0x16797e
movq -0xc0(%rbp), %rax
movq 0x18(%rax), %rax
movl -0x9c(%rbp), %ecx
movq (%rax,%rcx,8), %rax
shrq $0x21, %rax
movl %eax, -0x40(%rbp)
movq -0x38(%rbp), %rax
movl -0x40(%rbp), %ecx
imulq $0x18, %rcx, %rcx
addq %rcx, %rax
cmpl $0x0, 0xc(%rax)
jbe 0x16784e
movl -0xb0(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xb0(%rbp)
movq 0x28(%rbp), %rax
movl -0x40(%rbp), %ecx
movzbl (%rax,%rcx), %eax
andl $0x1, %eax
cmpl $0x0, %eax
jne 0x167874
movq 0x28(%rbp), %rax
movl -0x40(%rbp), %ecx
movzbl (%rax,%rcx), %eax
andl $0x2, %eax
cmpl $0x0, %eax
je 0x167883
movl -0xb4(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xb4(%rbp)
movl -0xb8(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xb8(%rbp)
movl $0x0, -0x48(%rbp)
movl -0x48(%rbp), %eax
movq -0x38(%rbp), %rcx
movl -0x40(%rbp), %edx
imulq $0x18, %rdx, %rdx
addq %rdx, %rcx
movl 0xc(%rcx), %ecx
cmpq %rcx, %rax
jge 0x167968
movq -0x38(%rbp), %rax
movl -0x40(%rbp), %ecx
imulq $0x18, %rcx, %rcx
addq %rcx, %rax
movq (%rax), %rax
movl -0x48(%rbp), %ecx
imulq $0x28, %rcx, %rcx
addq %rcx, %rax
movl 0xc(%rax), %eax
movl %eax, -0x44(%rbp)
movq -0x28(%rbp), %rax
movq 0x20(%rax), %rax
movl -0x44(%rbp), %ecx
movl (%rax,%rcx,8), %eax
shrl $0x1f, %eax
cmpl $0x1, %eax
jne 0x167927
movq 0x20(%rbp), %rdi
movl -0x44(%rbp), %esi
leaq -0x44(%rbp), %rdx
leaq -0x4c(%rbp), %rcx
callq 0xd3d50
cmpl $-0x1, -0x44(%rbp)
je 0x167923
cmpl $0x1, -0x4c(%rbp)
je 0x167923
movq -0x28(%rbp), %rax
movq 0x20(%rax), %rax
movl -0x44(%rbp), %ecx
movl (%rax,%rcx,8), %eax
shrl $0x1f, %eax
cmpl $0x1, %eax
jne 0x167925
jmp 0x16795a
jmp 0x167927
movq 0x20(%rbp), %rdi
movl -0x44(%rbp), %esi
leaq -0x50(%rbp), %rdx
leaq -0x4c(%rbp), %rcx
callq 0xd3d50
cmpl $-0x1, -0x50(%rbp)
je 0x167958
cmpl $0x1, -0x4c(%rbp)
jne 0x167958
movl -0xac(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xac(%rbp)
jmp 0x167968
jmp 0x16795a
movl -0x48(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x48(%rbp)
jmp 0x167899
jmp 0x16796a
movl -0x9c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x9c(%rbp)
jmp 0x1677f9
jmp 0x167980
movl -0xa0(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xa0(%rbp)
jmp 0x1677aa
movl $0x0, -0x88(%rbp)
movl -0x88(%rbp), %eax
movq -0x90(%rbp), %rcx
cmpq 0x38(%rcx), %rax
jae 0x167a54
movq -0x20(%rbp), %rax
movq 0x10(%rax), %rax
movq -0x90(%rbp), %rcx
movq 0x48(%rcx), %rcx
movl -0x88(%rbp), %edx
movl (%rcx,%rdx,4), %ecx
shrl %ecx
movl %ecx, %ecx
imulq $0x28, %rcx, %rcx
addq %rcx, %rax
movq %rax, -0xc8(%rbp)
movl $0x0, -0x84(%rbp)
movl -0x84(%rbp), %eax
movq -0xc8(%rbp), %rcx
cmpl 0x10(%rcx), %eax
jae 0x167a3e
movq -0xc8(%rbp), %rax
movq 0x18(%rax), %rax
movl -0x84(%rbp), %ecx
movq (%rax,%rcx,8), %rax
shrq $0x21, %rax
movl %eax, -0x40(%rbp)
movq 0x20(%rbp), %rax
movq 0x8(%rax), %rax
movl -0x40(%rbp), %ecx
movl $0xffffffff, (%rax,%rcx,4) # imm = 0xFFFFFFFF
movl -0x84(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x84(%rbp)
jmp 0x1679ed
jmp 0x167a40
movl -0x88(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x88(%rbp)
jmp 0x16799e
jmp 0x167cb1
movl $0x0, -0x88(%rbp)
movl -0x88(%rbp), %eax
movq -0x90(%rbp), %rcx
cmpq 0x38(%rcx), %rax
jae 0x167ac9
movq -0x90(%rbp), %rax
movq 0x48(%rax), %rax
movl -0x88(%rbp), %ecx
movl (%rax,%rcx,4), %eax
shrl %eax
movl %eax, -0x40(%rbp)
movq 0x20(%rbp), %rdi
movl -0x40(%rbp), %esi
movq -0x28(%rbp), %rax
movq 0x20(%rax), %r8
movl -0x40(%rbp), %eax
shlq $0x3, %rax
addq %rax, %r8
addq $0x4, %r8
movl $0x1, %ecx
movl %ecx, %edx
callq 0xd0e20
movl -0x88(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x88(%rbp)
jmp 0x167a63
movl $0x0, -0xa0(%rbp)
movl -0xa0(%rbp), %eax
movq -0xa8(%rbp), %rcx
cmpq 0x38(%rcx), %rax
jae 0x167c56
movq -0xa8(%rbp), %rax
movq 0x48(%rax), %rax
movl -0xa0(%rbp), %ecx
movl (%rax,%rcx,4), %eax
shrl %eax
movl %eax, -0x40(%rbp)
movq -0x38(%rbp), %rax
movl -0x40(%rbp), %ecx
imulq $0x18, %rcx, %rcx
addq %rcx, %rax
cmpl $0x0, 0xc(%rax)
jbe 0x167b26
movl -0xb0(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xb0(%rbp)
movq 0x28(%rbp), %rax
movl -0x40(%rbp), %ecx
movzbl (%rax,%rcx), %eax
andl $0x1, %eax
cmpl $0x0, %eax
jne 0x167b4c
movq 0x28(%rbp), %rax
movl -0x40(%rbp), %ecx
movzbl (%rax,%rcx), %eax
andl $0x2, %eax
cmpl $0x0, %eax
je 0x167b5b
movl -0xb4(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xb4(%rbp)
movl -0xb8(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xb8(%rbp)
movl $0x0, -0x48(%rbp)
movl -0x48(%rbp), %eax
movq -0x38(%rbp), %rcx
movl -0x40(%rbp), %edx
imulq $0x18, %rdx, %rdx
addq %rdx, %rcx
movl 0xc(%rcx), %ecx
cmpq %rcx, %rax
jge 0x167c40
movq -0x38(%rbp), %rax
movl -0x40(%rbp), %ecx
imulq $0x18, %rcx, %rcx
addq %rcx, %rax
movq (%rax), %rax
movl -0x48(%rbp), %ecx
imulq $0x28, %rcx, %rcx
addq %rcx, %rax
movl 0xc(%rax), %eax
movl %eax, -0x44(%rbp)
movq -0x18(%rbp), %rax
movq 0x20(%rax), %rax
movl -0x44(%rbp), %ecx
movl (%rax,%rcx,8), %eax
shrl $0x1f, %eax
cmpl $0x1, %eax
jne 0x167bff
movq 0x20(%rbp), %rdi
movl -0x44(%rbp), %esi
leaq -0x44(%rbp), %rdx
leaq -0x4c(%rbp), %rcx
callq 0xd3d50
cmpl $-0x1, -0x44(%rbp)
je 0x167bfb
cmpl $0x1, -0x4c(%rbp)
je 0x167bfb
movq -0x18(%rbp), %rax
movq 0x20(%rax), %rax
movl -0x44(%rbp), %ecx
movl (%rax,%rcx,8), %eax
shrl $0x1f, %eax
cmpl $0x1, %eax
jne 0x167bfd
jmp 0x167c32
jmp 0x167bff
movq 0x20(%rbp), %rdi
movl -0x44(%rbp), %esi
leaq -0x50(%rbp), %rdx
leaq -0x4c(%rbp), %rcx
callq 0xd3d50
cmpl $-0x1, -0x50(%rbp)
je 0x167c30
cmpl $0x1, -0x4c(%rbp)
jne 0x167c30
movl -0xac(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xac(%rbp)
jmp 0x167c40
jmp 0x167c32
movl -0x48(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x48(%rbp)
jmp 0x167b71
jmp 0x167c42
movl -0xa0(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xa0(%rbp)
jmp 0x167ad3
movl $0x0, -0x88(%rbp)
movl -0x88(%rbp), %eax
movq -0x90(%rbp), %rcx
cmpq 0x38(%rcx), %rax
jae 0x167caf
movq -0x90(%rbp), %rax
movq 0x48(%rax), %rax
movl -0x88(%rbp), %ecx
movl (%rax,%rcx,4), %eax
shrl %eax
movl %eax, -0x40(%rbp)
movq 0x20(%rbp), %rax
movq 0x8(%rax), %rax
movl -0x40(%rbp), %ecx
movl $0xffffffff, (%rax,%rcx,4) # imm = 0xFFFFFFFF
movl -0x88(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x88(%rbp)
jmp 0x167c60
jmp 0x167cb1
cmpl $0x0, -0xb0(%rbp)
jne 0x167cc3
movl $0xffffffff, -0xc(%rbp) # imm = 0xFFFFFFFF
jmp 0x167d25
movl -0xac(%rbp), %eax
cvtsi2ss %rax, %xmm0
movl -0xb0(%rbp), %eax
cvtsi2ss %rax, %xmm1
leaq 0x25cb18(%rip), %rax    # 0x3c47f8
mulss 0x16c(%rax), %xmm1
ucomiss %xmm1, %xmm0
jbe 0x167d1e
movl -0xb4(%rbp), %eax
cvtsi2sd %rax, %xmm0
movl -0xb8(%rbp), %eax
cvtsi2sd %rax, %xmm1
movsd 0x21a51d(%rip), %xmm2   # 0x382228
mulsd %xmm2, %xmm1
ucomisd %xmm1, %xmm0
jb 0x167d1e
movl $0x0, -0xc(%rbp)
jmp 0x167d25
movl $0x1, -0xc(%rbp)
movl -0xc(%rbp), %eax
addq $0xe8, %rsp
popq %rbx
popq %rbp
retq
nopw %cs:(%rax,%rax)
nopl (%rax)