// File: /workspace/github_c_makefile_star2_O3/icebert[P]pblat/lib/chain.c
// Function: chainReadChainLine
struct chain *chainReadChainLine(struct lineFile *lf)
/* Read line that starts with chain.  Allocate memory
 * and fill in values.  However don't read link lines. */
{
char *row[13];
int wordCount;
struct chain *chain;

wordCount = lineFileChop(lf, row);
if (wordCount == 0)
    return NULL;
if (wordCount < 12)
    errAbort("Expecting at least 12 words line %d of %s", 
    	lf->lineIx, lf->fileName);
if (!sameString(row[0], "chain"))
    errAbort("Expecting 'chain' line %d of %s", lf->lineIx, lf->fileName);
AllocVar(chain);
chain->score = atof(row[1]);
chain->tName = cloneString(row[2]);
chain->tSize = lineFileNeedNum(lf, row, 3);
if (wordCount >= 13)
    chain->id = lineFileNeedNum(lf, row, 12);
else
    chainIdNext(chain);

/* skip tStrand for now, always implicitly + */
chain->tStart = lineFileNeedNum(lf, row, 5);
chain->tEnd = lineFileNeedNum(lf, row, 6);
chain->qName = cloneString(row[7]);
chain->qSize = lineFileNeedNum(lf, row, 8);
chain->qStrand = row[9][0];
chain->qStart = lineFileNeedNum(lf, row, 10);
chain->qEnd = lineFileNeedNum(lf, row, 11);
if (chain->qStart >= chain->qEnd || chain->tStart >= chain->tEnd)
    errAbort("End before start line %d of %s", lf->lineIx, lf->fileName);
if (chain->qStart < 0 || chain->tStart < 0)
    errAbort("Start before zero line %d of %s", lf->lineIx, lf->fileName);
if (chain->qEnd > chain->qSize || chain->tEnd > chain->tSize)
    errAbort("Past end of sequence line %d of %s", lf->lineIx, lf->fileName);
return chain;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %rbx
subq $0x68, %rsp
movq %rdi, %rbx
movq %rsp, %rsi
movl $0xd, %edx
callq 0x2b359
testl %eax, %eax
je 0x1ecee
movl %eax, %ebp
cmpl $0xb, %eax
jg 0x1ec6e
movl 0x28(%rbx), %esi
movq 0x8(%rbx), %rdx
leaq 0x70ff2(%rip), %rdi     # 0x8fc59
xorl %eax, %eax
callq 0x26e94
movq (%rsp), %rdi
leaq 0x7100a(%rip), %rsi     # 0x8fc83
callq 0x6a50
testl %eax, %eax
je 0x1ec97
movl 0x28(%rbx), %esi
movq 0x8(%rbx), %rdx
leaq 0x70ff9(%rip), %rdi     # 0x8fc89
xorl %eax, %eax
callq 0x26e94
movl $0x50, %edi
callq 0x2dff4
movq %rax, %r14
movq %rsp, %r15
movq 0x8(%r15), %rdi
callq 0x6920
movsd %xmm0, 0x10(%r14)
movq 0x10(%r15), %rdi
callq 0x1feba
movq %rax, 0x18(%r14)
movq %rbx, %rdi
movq %r15, %rsi
movl $0x3, %edx
callq 0x2b605
movl %eax, 0x20(%r14)
cmpl $0xd, %ebp
jl 0x1ecf6
movq %rsp, %rsi
movq %rbx, %rdi
movl $0xc, %edx
callq 0x2b605
jmp 0x1ed05
xorl %r14d, %r14d
jmp 0x1edfb
movl 0xa1910(%rip), %eax     # 0xc060c
leal 0x1(%rax), %ecx
movl %ecx, 0xa1907(%rip)     # 0xc060c
movl %eax, 0x48(%r14)
movq %rsp, %r15
movq %rbx, %rdi
movq %r15, %rsi
movl $0x5, %edx
callq 0x2b605
movl %eax, 0x24(%r14)
movq %rbx, %rdi
movq %r15, %rsi
movl $0x6, %edx
callq 0x2b605
movl %eax, 0x28(%r14)
movq 0x38(%r15), %rdi
callq 0x1feba
movq %rax, 0x30(%r14)
movq %rbx, %rdi
movq %r15, %rsi
movl $0x8, %edx
callq 0x2b605
movl %eax, 0x38(%r14)
movq 0x48(%r15), %rax
movb (%rax), %al
movb %al, 0x3c(%r14)
movq %rbx, %rdi
movq %r15, %rsi
movl $0xa, %edx
callq 0x2b605
movl %eax, 0x40(%r14)
movq %rbx, %rdi
movq %r15, %rsi
movl $0xb, %edx
callq 0x2b605
movl %eax, 0x44(%r14)
movl 0x40(%r14), %ecx
cmpl %eax, %ecx
jge 0x1ed99
movl 0x24(%r14), %eax
cmpl 0x28(%r14), %eax
jl 0x1edb2
movl 0x28(%rbx), %esi
movq 0x8(%rbx), %rdx
leaq 0x70f02(%rip), %rdi     # 0x8fca9
xorl %eax, %eax
callq 0x26e94
movl 0x40(%r14), %ecx
testl %ecx, %ecx
js 0x1edbd
cmpl $0x0, 0x24(%r14)
jns 0x1edd2
movl 0x28(%rbx), %esi
movq 0x8(%rbx), %rdx
leaq 0x70efd(%rip), %rdi     # 0x8fcc8
xorl %eax, %eax
callq 0x26e94
movl 0x44(%r14), %eax
cmpl 0x38(%r14), %eax
jg 0x1ede6
movl 0x28(%r14), %eax
cmpl 0x20(%r14), %eax
jle 0x1edfb
movl 0x28(%rbx), %esi
movq 0x8(%rbx), %rdx
leaq 0x70ef4(%rip), %rdi     # 0x8fce8
xorl %eax, %eax
callq 0x26e94
movq %r14, %rax
addq $0x68, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq