// File: chhylp123[P]hifiasm/inter.cpp
// Function: fill_ctg_path_trans_idx(glchain_t*, unsigned long, unsigned long, unsigned int, unsigned int, kv_u_trans_t*)
void fill_ctg_path_trans_idx(glchain_t *a, uint64_t n, uint64_t qn, uint32_t qoff, uint32_t toff, kv_u_trans_t *ou)
{
	kv_resize(uint64_t, ou->idx, qn);
	memset(ou->idx.a, -1, sizeof((*(ou->idx.a)))*qn); 

	uint64_t i, k, l, pn; kv_ul_ov_t *s = NULL; u_trans_t *z = NULL;
	for(i = pn = 0; i < n; i++) {
		s = &(a[i].tk); pn += s->n;
		for (k = 1, l = 0; k <= s->n; k++) {
			if(k == s->n || s->a[l].qn != s->a[k].qn) {
				assert(ou->idx.a[s->a[l].qn] == (uint64_t)-1);
				ou->idx.a[s->a[l].qn] = (i<<32)|l;
				l = k;
			}
		}
	}
	kv_resize(u_trans_t, *ou, ou->n+(pn<<1)); l = ou->n;

	for (i = 0; i < qn; i++) {
		if(ou->idx.a[i] == (uint64_t)-1) {
			ou->idx.a[i] = 0; continue;
		}
		s = &(a[ou->idx.a[i]>>32].tk);
		for(k = l = (uint32_t)ou->idx.a[i]; k < s->n && s->a[l].qn == s->a[k].qn; k++) {
			kv_pushp(u_trans_t, *ou, &z);
			z->qn = s->a[k].qn+qoff; z->qs = s->a[k].qs; z->qe = s->a[k].qe; 
			z->tn = s->a[k].tn+toff; z->ts = s->a[k].ts; z->te = s->a[k].te; 
			z->rev = s->a[k].rev; 	 z->f = s->a[k].el;  z->nw = s->a[k].sec; 
			z->occ = s->a[k].sec;    z->del = 0;


			kv_pushp(u_trans_t, *ou, &z);
			z->tn = s->a[k].qn+qoff; z->ts = s->a[k].qs; z->te = s->a[k].qe; 
			z->qn = s->a[k].tn+toff; z->qs = s->a[k].ts; z->qe = s->a[k].te; 
			z->rev = s->a[k].rev; 	 z->f = s->a[k].el;  z->nw = s->a[k].sec; 
			z->occ = s->a[k].sec;    z->del = 0;

		}
		// p->idx.a[i] = pn - (k - l); p->idx.a[i] <<= 32; p->idx.a[i] |= k - l; ///pn += k - l;
	}
	// assert(l + (pn<<1) == ou->n);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x70, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movl %ecx, -0x1c(%rbp)
movl %r8d, -0x20(%rbp)
movq %r9, -0x28(%rbp)
movq -0x28(%rbp), %rax
movq 0x20(%rax), %rax
cmpq -0x18(%rbp), %rax
jae 0x2ec878
movq -0x18(%rbp), %rcx
movq -0x28(%rbp), %rax
movq %rcx, 0x20(%rax)
movq -0x28(%rbp), %rax
movq 0x20(%rax), %rcx
addq $-0x1, %rcx
movq %rcx, 0x20(%rax)
movq -0x28(%rbp), %rax
movq 0x20(%rax), %rcx
shrq %rcx
movq -0x28(%rbp), %rax
orq 0x20(%rax), %rcx
movq %rcx, 0x20(%rax)
movq -0x28(%rbp), %rax
movq 0x20(%rax), %rcx
shrq $0x2, %rcx
movq -0x28(%rbp), %rax
orq 0x20(%rax), %rcx
movq %rcx, 0x20(%rax)
movq -0x28(%rbp), %rax
movq 0x20(%rax), %rcx
shrq $0x4, %rcx
movq -0x28(%rbp), %rax
orq 0x20(%rax), %rcx
movq %rcx, 0x20(%rax)
movq -0x28(%rbp), %rax
movq 0x20(%rax), %rcx
shrq $0x8, %rcx
movq -0x28(%rbp), %rax
orq 0x20(%rax), %rcx
movq %rcx, 0x20(%rax)
movq -0x28(%rbp), %rax
movq 0x20(%rax), %rcx
shrq $0x10, %rcx
movq -0x28(%rbp), %rax
orq 0x20(%rax), %rcx
movq %rcx, 0x20(%rax)
movq -0x28(%rbp), %rax
movq 0x20(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x20(%rax)
movq -0x28(%rbp), %rax
movq 0x28(%rax), %rdi
movq -0x28(%rbp), %rax
movq 0x20(%rax), %rsi
shlq $0x3, %rsi
callq 0x2360
movq %rax, %rcx
movq -0x28(%rbp), %rax
movq %rcx, 0x28(%rax)
jmp 0x2ec87a
movq -0x28(%rbp), %rax
movq 0x28(%rax), %rdi
movq -0x18(%rbp), %rdx
shlq $0x3, %rdx
movl $0xff, %esi
callq 0x2100
movq $0x0, -0x50(%rbp)
movq $0x0, -0x58(%rbp)
movq $0x0, -0x48(%rbp)
movq $0x0, -0x30(%rbp)
movq -0x30(%rbp), %rax
cmpq -0x10(%rbp), %rax
jae 0x2ec9d2
movq -0x8(%rbp), %rax
imulq $0x68, -0x30(%rbp), %rcx
addq %rcx, %rax
addq $0x18, %rax
movq %rax, -0x50(%rbp)
movq -0x50(%rbp), %rax
movq 0x8(%rax), %rax
addq -0x48(%rbp), %rax
movq %rax, -0x48(%rbp)
movq $0x1, -0x38(%rbp)
movq $0x0, -0x40(%rbp)
movq -0x38(%rbp), %rax
movq -0x50(%rbp), %rcx
cmpq 0x8(%rcx), %rax
ja 0x2ec9bf
movq -0x38(%rbp), %rax
movq -0x50(%rbp), %rcx
cmpq 0x8(%rcx), %rax
je 0x2ec93a
movq -0x50(%rbp), %rax
movq (%rax), %rax
imulq $0x1c, -0x40(%rbp), %rcx
addq %rcx, %rax
movl (%rax), %eax
movq -0x50(%rbp), %rcx
movq (%rcx), %rcx
imulq $0x1c, -0x38(%rbp), %rdx
addq %rdx, %rcx
cmpl (%rcx), %eax
je 0x2ec9ac
movq -0x28(%rbp), %rax
movq 0x28(%rax), %rax
movq -0x50(%rbp), %rcx
movq (%rcx), %rcx
imulq $0x1c, -0x40(%rbp), %rdx
addq %rdx, %rcx
movl (%rcx), %ecx
cmpq $-0x1, (%rax,%rcx,8)
jne 0x2ec95c
jmp 0x2ec97b
leaq 0xa7e16(%rip), %rdi     # 0x394779
leaq 0xa3ec5(%rip), %rsi     # 0x39082f
movl $0x49e7, %edx           # imm = 0x49E7
leaq 0xa7e29(%rip), %rcx     # 0x39479f
callq 0x2130
movq -0x30(%rbp), %rdx
shlq $0x20, %rdx
orq -0x40(%rbp), %rdx
movq -0x28(%rbp), %rax
movq 0x28(%rax), %rax
movq -0x50(%rbp), %rcx
movq (%rcx), %rcx
imulq $0x1c, -0x40(%rbp), %rsi
addq %rsi, %rcx
movl (%rcx), %ecx
movq %rdx, (%rax,%rcx,8)
movq -0x38(%rbp), %rax
movq %rax, -0x40(%rbp)
jmp 0x2ec9ae
movq -0x38(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x38(%rbp)
jmp 0x2ec8f6
jmp 0x2ec9c1
movq -0x30(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x30(%rbp)
jmp 0x2ec8b4
jmp 0x2ec9d4
movq -0x28(%rbp), %rax
movq 0x8(%rax), %rax
movq -0x28(%rbp), %rcx
movq (%rcx), %rcx
movq -0x48(%rbp), %rdx
shlq %rdx
addq %rdx, %rcx
cmpq %rcx, %rax
jae 0x2ecac7
movq -0x28(%rbp), %rax
movq (%rax), %rcx
movq -0x48(%rbp), %rax
shlq %rax
addq %rax, %rcx
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
imulq $0x30, 0x8(%rax), %rsi
callq 0x2360
movq %rax, %rcx
movq -0x28(%rbp), %rax
movq %rcx, 0x10(%rax)
jmp 0x2ecac9
movq -0x28(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x40(%rbp)
movq $0x0, -0x30(%rbp)
movq -0x30(%rbp), %rax
cmpq -0x18(%rbp), %rax
jae 0x2ecfec
movq -0x28(%rbp), %rax
movq 0x28(%rax), %rax
movq -0x30(%rbp), %rcx
cmpq $-0x1, (%rax,%rcx,8)
jne 0x2ecb16
movq -0x28(%rbp), %rax
movq 0x28(%rax), %rax
movq -0x30(%rbp), %rcx
movq $0x0, (%rax,%rcx,8)
jmp 0x2ecfdb
movq -0x8(%rbp), %rax
movq -0x28(%rbp), %rcx
movq 0x28(%rcx), %rcx
movq -0x30(%rbp), %rdx
movq (%rcx,%rdx,8), %rcx
shrq $0x20, %rcx
imulq $0x68, %rcx, %rcx
addq %rcx, %rax
addq $0x18, %rax
movq %rax, -0x50(%rbp)
movq -0x28(%rbp), %rax
movq 0x28(%rax), %rax
movq -0x30(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movl %eax, %eax
movq %rax, -0x40(%rbp)
movq %rax, -0x38(%rbp)
movq -0x38(%rbp), %rcx
movq -0x50(%rbp), %rdx
xorl %eax, %eax
cmpq 0x8(%rdx), %rcx
movb %al, -0x59(%rbp)
jae 0x2ecb92
movq -0x50(%rbp), %rax
movq (%rax), %rax
imulq $0x1c, -0x40(%rbp), %rcx
addq %rcx, %rax
movl (%rax), %eax
movq -0x50(%rbp), %rcx
movq (%rcx), %rcx
imulq $0x1c, -0x38(%rbp), %rdx
addq %rdx, %rcx
cmpl (%rcx), %eax
sete %al
movb %al, -0x59(%rbp)
movb -0x59(%rbp), %al
testb $0x1, %al
jne 0x2ecb9e
jmp 0x2ecfd9
jmp 0x2ecba0
movq -0x28(%rbp), %rax
movq (%rax), %rax
movq -0x28(%rbp), %rcx
cmpq 0x8(%rcx), %rax
jne 0x2ecc05
movq -0x28(%rbp), %rax
cmpq $0x0, 0x8(%rax)
je 0x2ecbcd
movq -0x28(%rbp), %rax
movq 0x8(%rax), %rax
shlq %rax
movq %rax, -0x68(%rbp)
jmp 0x2ecbd8
movl $0x2, %eax
movq %rax, -0x68(%rbp)
jmp 0x2ecbd8
movq -0x68(%rbp), %rcx
movq -0x28(%rbp), %rax
movq %rcx, 0x8(%rax)
movq -0x28(%rbp), %rax
movq 0x10(%rax), %rdi
movq -0x28(%rbp), %rax
imulq $0x30, 0x8(%rax), %rsi
callq 0x2360
movq %rax, %rcx
movq -0x28(%rbp), %rax
movq %rcx, 0x10(%rax)
movq -0x28(%rbp), %rax
movq 0x10(%rax), %rax
movq -0x28(%rbp), %rdx
movq (%rdx), %rcx
movq %rcx, %rsi
addq $0x1, %rsi
movq %rsi, (%rdx)
imulq $0x30, %rcx, %rcx
addq %rcx, %rax
movq %rax, -0x58(%rbp)
movq -0x50(%rbp), %rax
movq (%rax), %rax
movq -0x38(%rbp), %rdx
leaq (%rdx,%rdx,8), %rcx
leaq (%rcx,%rcx,2), %rcx
addq %rdx, %rcx
movl (%rax,%rcx), %ecx
movl -0x1c(%rbp), %eax
addl %eax, %ecx
movq -0x58(%rbp), %rax
movl %ecx, 0x8(%rax)
movq -0x50(%rbp), %rax
movq (%rax), %rax
movq -0x38(%rbp), %rdx
leaq (%rdx,%rdx,8), %rcx
leaq (%rcx,%rcx,2), %rcx
addq %rdx, %rcx
movl 0x4(%rax,%rcx), %ecx
movq -0x58(%rbp), %rax
movl %ecx, (%rax)
movq -0x50(%rbp), %rax
movq (%rax), %rax
movq -0x38(%rbp), %rdx
leaq (%rdx,%rdx,8), %rcx
leaq (%rcx,%rcx,2), %rcx
addq %rdx, %rcx
movl 0x8(%rax,%rcx), %ecx
movq -0x58(%rbp), %rax
movl %ecx, 0x4(%rax)
movq -0x50(%rbp), %rax
movq (%rax), %rax
movq -0x38(%rbp), %rdx
leaq (%rdx,%rdx,8), %rcx
leaq (%rcx,%rcx,2), %rcx
addq %rdx, %rcx
movl 0xc(%rax,%rcx), %ecx
movl -0x20(%rbp), %eax
addl %eax, %ecx
movq -0x58(%rbp), %rax
movl %ecx, 0x14(%rax)
movq -0x50(%rbp), %rax
movq (%rax), %rax
movq -0x38(%rbp), %rdx
leaq (%rdx,%rdx,8), %rcx
leaq (%rcx,%rcx,2), %rcx
addq %rdx, %rcx
movl 0x10(%rax,%rcx), %ecx
movq -0x58(%rbp), %rax
movl %ecx, 0xc(%rax)
movq -0x50(%rbp), %rax
movq (%rax), %rax
movq -0x38(%rbp), %rdx
leaq (%rdx,%rdx,8), %rcx
leaq (%rcx,%rcx,2), %rcx
addq %rdx, %rcx
movl 0x14(%rax,%rcx), %ecx
movq -0x58(%rbp), %rax
movl %ecx, 0x10(%rax)
movq -0x50(%rbp), %rax
movq (%rax), %rax
movq -0x38(%rbp), %rdx
leaq (%rdx,%rdx,8), %rcx
leaq (%rcx,%rcx,2), %rcx
addq %rdx, %rcx
movl 0x18(%rax,%rcx), %eax
shrl $0x1f, %eax
movb %al, %dl
movq -0x58(%rbp), %rax
movb 0x28(%rax), %cl
shlb $0x6, %dl
andb $-0x41, %cl
orb %dl, %cl
movb %cl, 0x28(%rax)
movq -0x50(%rbp), %rax
movq (%rax), %rax
movq -0x38(%rbp), %rdx
leaq (%rdx,%rdx,8), %rcx
leaq (%rcx,%rcx,2), %rcx
addq %rdx, %rcx
movl 0x18(%rax,%rcx), %eax
shrl $0x1e, %eax
movb %al, %dl
andb $0x1, %dl
movq -0x58(%rbp), %rax
movb 0x28(%rax), %cl
andb $-0x40, %cl
orb %dl, %cl
movb %cl, 0x28(%rax)
movq -0x50(%rbp), %rax
movq (%rax), %rax
movq -0x38(%rbp), %rdx
leaq (%rdx,%rdx,8), %rcx
leaq (%rcx,%rcx,2), %rcx
addq %rdx, %rcx
movl 0x18(%rax,%rcx), %eax
andl $0x3fffffff, %eax       # imm = 0x3FFFFFFF
cvtsi2sd %eax, %xmm0
movq -0x58(%rbp), %rax
movsd %xmm0, 0x20(%rax)
movq -0x50(%rbp), %rax
movq (%rax), %rax
imulq $0x1c, -0x38(%rbp), %rcx
addq %rcx, %rax
movl 0x18(%rax), %ecx
andl $0x3fffffff, %ecx       # imm = 0x3FFFFFFF
movq -0x58(%rbp), %rax
movl %ecx, 0x18(%rax)
movq -0x58(%rbp), %rax
movb 0x28(%rax), %cl
andb $0x7f, %cl
orb $0x0, %cl
movb %cl, 0x28(%rax)
movq -0x28(%rbp), %rax
movq (%rax), %rax
movq -0x28(%rbp), %rcx
cmpq 0x8(%rcx), %rax
jne 0x2ece19
movq -0x28(%rbp), %rax
cmpq $0x0, 0x8(%rax)
je 0x2ecde1
movq -0x28(%rbp), %rax
movq 0x8(%rax), %rax
shlq %rax
movq %rax, -0x70(%rbp)
jmp 0x2ecdec
movl $0x2, %eax
movq %rax, -0x70(%rbp)
jmp 0x2ecdec
movq -0x70(%rbp), %rcx
movq -0x28(%rbp), %rax
movq %rcx, 0x8(%rax)
movq -0x28(%rbp), %rax
movq 0x10(%rax), %rdi
movq -0x28(%rbp), %rax
imulq $0x30, 0x8(%rax), %rsi
callq 0x2360
movq %rax, %rcx
movq -0x28(%rbp), %rax
movq %rcx, 0x10(%rax)
movq -0x28(%rbp), %rax
movq 0x10(%rax), %rax
movq -0x28(%rbp), %rdx
movq (%rdx), %rcx
movq %rcx, %rsi
addq $0x1, %rsi
movq %rsi, (%rdx)
imulq $0x30, %rcx, %rcx
addq %rcx, %rax
movq %rax, -0x58(%rbp)
movq -0x50(%rbp), %rax
movq (%rax), %rax
movq -0x38(%rbp), %rdx
leaq (%rdx,%rdx,8), %rcx
leaq (%rcx,%rcx,2), %rcx
addq %rdx, %rcx
movl (%rax,%rcx), %ecx
movl -0x1c(%rbp), %eax
addl %eax, %ecx
movq -0x58(%rbp), %rax
movl %ecx, 0x14(%rax)
movq -0x50(%rbp), %rax
movq (%rax), %rax
movq -0x38(%rbp), %rdx
leaq (%rdx,%rdx,8), %rcx
leaq (%rcx,%rcx,2), %rcx
addq %rdx, %rcx
movl 0x4(%rax,%rcx), %ecx
movq -0x58(%rbp), %rax
movl %ecx, 0xc(%rax)
movq -0x50(%rbp), %rax
movq (%rax), %rax
movq -0x38(%rbp), %rdx
leaq (%rdx,%rdx,8), %rcx
leaq (%rcx,%rcx,2), %rcx
addq %rdx, %rcx
movl 0x8(%rax,%rcx), %ecx
movq -0x58(%rbp), %rax
movl %ecx, 0x10(%rax)
movq -0x50(%rbp), %rax
movq (%rax), %rax
movq -0x38(%rbp), %rdx
leaq (%rdx,%rdx,8), %rcx
leaq (%rcx,%rcx,2), %rcx
addq %rdx, %rcx
movl 0xc(%rax,%rcx), %ecx
movl -0x20(%rbp), %eax
addl %eax, %ecx
movq -0x58(%rbp), %rax
movl %ecx, 0x8(%rax)
movq -0x50(%rbp), %rax
movq (%rax), %rax
movq -0x38(%rbp), %rdx
leaq (%rdx,%rdx,8), %rcx
leaq (%rcx,%rcx,2), %rcx
addq %rdx, %rcx
movl 0x10(%rax,%rcx), %ecx
movq -0x58(%rbp), %rax
movl %ecx, (%rax)
movq -0x50(%rbp), %rax
movq (%rax), %rax
movq -0x38(%rbp), %rdx
leaq (%rdx,%rdx,8), %rcx
leaq (%rcx,%rcx,2), %rcx
addq %rdx, %rcx
movl 0x14(%rax,%rcx), %ecx
movq -0x58(%rbp), %rax
movl %ecx, 0x4(%rax)
movq -0x50(%rbp), %rax
movq (%rax), %rax
movq -0x38(%rbp), %rdx
leaq (%rdx,%rdx,8), %rcx
leaq (%rcx,%rcx,2), %rcx
addq %rdx, %rcx
movl 0x18(%rax,%rcx), %eax
shrl $0x1f, %eax
movb %al, %dl
movq -0x58(%rbp), %rax
movb 0x28(%rax), %cl
shlb $0x6, %dl
andb $-0x41, %cl
orb %dl, %cl
movb %cl, 0x28(%rax)
movq -0x50(%rbp), %rax
movq (%rax), %rax
movq -0x38(%rbp), %rdx
leaq (%rdx,%rdx,8), %rcx
leaq (%rcx,%rcx,2), %rcx
addq %rdx, %rcx
movl 0x18(%rax,%rcx), %eax
shrl $0x1e, %eax
movb %al, %dl
andb $0x1, %dl
movq -0x58(%rbp), %rax
movb 0x28(%rax), %cl
andb $-0x40, %cl
orb %dl, %cl
movb %cl, 0x28(%rax)
movq -0x50(%rbp), %rax
movq (%rax), %rax
movq -0x38(%rbp), %rdx
leaq (%rdx,%rdx,8), %rcx
leaq (%rcx,%rcx,2), %rcx
addq %rdx, %rcx
movl 0x18(%rax,%rcx), %eax
andl $0x3fffffff, %eax       # imm = 0x3FFFFFFF
cvtsi2sd %eax, %xmm0
movq -0x58(%rbp), %rax
movsd %xmm0, 0x20(%rax)
movq -0x50(%rbp), %rax
movq (%rax), %rax
imulq $0x1c, -0x38(%rbp), %rcx
addq %rcx, %rax
movl 0x18(%rax), %ecx
andl $0x3fffffff, %ecx       # imm = 0x3FFFFFFF
movq -0x58(%rbp), %rax
movl %ecx, 0x18(%rax)
movq -0x58(%rbp), %rax
movb 0x28(%rax), %cl
andb $0x7f, %cl
orb $0x0, %cl
movb %cl, 0x28(%rax)
movq -0x38(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x38(%rbp)
jmp 0x2ecb57
jmp 0x2ecfdb
movq -0x30(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x30(%rbp)
jmp 0x2ecadc
addq $0x70, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)