// File: chhylp123[P]hifiasm/Correct.cpp
// Function: retrieve_str_seq_exz(UC_Read*, long, long, long, long, unsigned char, ul_idx_t const*, hpc_t*, All_reads*, long)
inline char *retrieve_str_seq_exz(UC_Read *tu, int64_t s, int64_t l, 
int64_t ps, int64_t pl, uint8_t rev, const ul_idx_t *uref, hpc_t *hpc_g, 
All_reads *rref, int64_t id)
{
    if(!hpc_g) {
        char *str; int64_t ss = s, sl = l; tu->length = l;
        UC_Read_resize(*tu, sl); str = tu->seq; 
        if(s == ps) {
            if(l <= pl) return tu->seq;
            str = tu->seq + pl; ss = ps + pl; sl = l - pl;
        }
        if(uref) {
            retrieve_u_seq(NULL, str, &(uref->ug->u.a[id]), rev, ss, sl, NULL);
        } else if(rref) {
            recover_UC_Read_sub_region(str, ss, sl, rev, rref, id);
        }
        return tu->seq;
    } else {
        return hpc_str(*hpc_g, id, rev) + s;
    }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x70, %rsp
movb %r9b, %al
movq 0x28(%rbp), %r9
movq 0x20(%rbp), %r9
movq 0x18(%rbp), %r9
movq 0x10(%rbp), %r9
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq %rdx, -0x20(%rbp)
movq %rcx, -0x28(%rbp)
movq %r8, -0x30(%rbp)
movb %al, -0x31(%rbp)
cmpq $0x0, 0x18(%rbp)
jne 0xc0ddd
movq -0x18(%rbp), %rax
movq %rax, -0x48(%rbp)
movq -0x20(%rbp), %rax
movq %rax, -0x50(%rbp)
movq -0x20(%rbp), %rcx
movq -0x10(%rbp), %rax
movq %rcx, 0x8(%rax)
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rax
cmpq -0x50(%rbp), %rax
jge 0xc0d11
movq -0x10(%rbp), %rax
movq (%rax), %rdi
movq -0x50(%rbp), %rsi
shlq $0x0, %rsi
callq 0x2360
movq %rax, %rcx
movq -0x10(%rbp), %rax
movq %rcx, (%rax)
movq -0x50(%rbp), %rcx
movq -0x10(%rbp), %rax
movq %rcx, 0x10(%rax)
jmp 0xc0d13
movq -0x10(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x40(%rbp)
movq -0x18(%rbp), %rax
cmpq -0x28(%rbp), %rax
jne 0xc0d69
movq -0x20(%rbp), %rax
cmpq -0x30(%rbp), %rax
jg 0xc0d42
movq -0x10(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x8(%rbp)
jmp 0xc0e3b
movq -0x10(%rbp), %rax
movq (%rax), %rax
addq -0x30(%rbp), %rax
movq %rax, -0x40(%rbp)
movq -0x28(%rbp), %rax
addq -0x30(%rbp), %rax
movq %rax, -0x48(%rbp)
movq -0x20(%rbp), %rax
subq -0x30(%rbp), %rax
movq %rax, -0x50(%rbp)
cmpq $0x0, 0x10(%rbp)
je 0xc0da8
movq -0x40(%rbp), %rsi
movq 0x10(%rbp), %rax
movq (%rax), %rax
movq 0x10(%rax), %rdx
imulq $0x28, 0x28(%rbp), %rax
addq %rax, %rdx
movb -0x31(%rbp), %al
movq -0x48(%rbp), %r8
movq -0x50(%rbp), %r9
xorl %ecx, %ecx
movl %ecx, %edi
movzbl %al, %ecx
movq $0x0, (%rsp)
callq 0x10980
jmp 0xc0dd0
cmpq $0x0, 0x20(%rbp)
je 0xc0dce
movq -0x40(%rbp), %rdi
movq -0x48(%rbp), %rsi
movq -0x50(%rbp), %rdx
movb -0x31(%rbp), %al
movq 0x20(%rbp), %r8
movq 0x28(%rbp), %r9
movzbl %al, %ecx
callq 0x9a30
jmp 0xc0dd0
movq -0x10(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x8(%rbp)
jmp 0xc0e3b
movq 0x18(%rbp), %rax
movq (%rax), %rax
movq 0x10(%rax), %rax
imulq $0x28, 0x28(%rbp), %rcx
addq %rcx, %rax
movq 0x20(%rax), %rax
movq %rax, -0x58(%rbp)
cmpb $0x0, -0x31(%rbp)
je 0xc0e1f
movq 0x18(%rbp), %rax
movq (%rax), %rax
movq 0x10(%rax), %rax
imulq $0x28, 0x28(%rbp), %rcx
addq %rcx, %rax
movl (%rax), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
sarl %eax
movl %eax, -0x5c(%rbp)
jmp 0xc0e26
xorl %eax, %eax
movl %eax, -0x5c(%rbp)
jmp 0xc0e26
movq -0x58(%rbp), %rax
movl -0x5c(%rbp), %ecx
movslq %ecx, %rcx
addq %rcx, %rax
addq -0x18(%rbp), %rax
movq %rax, -0x8(%rbp)
movq -0x8(%rbp), %rax
addq $0x70, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)
nop