// File: /workspace/github_c_makefile_star2_O2/genometools[P]genometools/src/ltr/ltrdigest_file_out_stream.c
// Function: gt_ltr_visitor_feature_node
static int gt_ltr_visitor_feature_node(GtNodeVisitor *nv, GtFeatureNode *fn,
                                       GT_UNUSED GtError *err)
{
  GtLTRVisitor *lv;
  GtRange node_range;
  GtArray *pdomarr = NULL;
  const char *pfamname;
  const char *fnt;
  lv = gt_ltr_visitor_cast(nv);
  gt_assert(lv);
  gt_error_check(err);

  fnt = gt_feature_node_get_type(fn);

  if (strcmp(fnt, gt_ft_LTR_retrotransposon) == 0)
  {
    lv->element->mainnode = fn;
  } else if (strcmp(fnt, gt_ft_long_terminal_repeat) == 0)
  {
    if (lv->element->leftLTR == NULL)
    {
      node_range = gt_genome_node_get_range((GtGenomeNode*) fn);
      lv->element->leftLTR = fn;
      /* compensate for 1-based node coords */
      lv->element->leftLTR_5 = node_range.start - 1;
      lv->element->leftLTR_3 = node_range.end - 1;
    }
    else
    {
      node_range = gt_genome_node_get_range((GtGenomeNode*) fn);
      lv->element->rightLTR = fn;
      /* compensate for 1-based node coords */
      lv->element->rightLTR_5 = node_range.start - 1;
      lv->element->rightLTR_3 = node_range.end - 1;
    }
  } else if (strcmp(fnt, gt_ft_target_site_duplication) == 0)
  {
    if (lv->element->leftTSD == NULL)
    {
      lv->element->leftTSD = fn;
    }
    else
    {
      lv->element->rightTSD = fn;
    }
  } else if (strcmp(fnt, gt_ft_RR_tract) == 0)
  {
    if (lv->element->ppt == NULL)
    {
      lv->element->ppt = fn;
    }
  } else if (strcmp(fnt, gt_ft_primer_binding_site) == 0)
  {
    if (lv->element->pbs == NULL)
    {
      lv->element->pbs = fn;
    }
  } else if (strcmp(fnt, gt_ft_protein_match) == 0)
  {
    char buf[BUFSIZ];
    if (!lv->element->pdoms)
    {
      lv->element->pdoms = gt_hashmap_new(GT_HASH_STRING, gt_free_func,
                                          (GtFree) gt_array_delete);
    }
    pfamname = gt_feature_node_get_attribute(fn, "name");
    (void) snprintf(buf, BUFSIZ-1, "%s", pfamname);
    gt_cstr_rep(buf, '/', '_');
    if (!(pdomarr = (GtArray*) gt_hashmap_get(lv->element->pdoms, buf)))
    {
      char *pfamcpy = gt_cstr_dup(buf);
      pdomarr = gt_array_new(sizeof (GtFeatureNode*));
      gt_hashmap_add(lv->element->pdoms, pfamcpy, pdomarr);
      if (lv->element->pdomorder != NULL)
        gt_array_add(lv->element->pdomorder, pfamcpy);
    }
    gt_array_add(pdomarr, fn);
  }
  return 0;
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
subq $0x2010, %rsp           # imm = 0x2010
movq %rdx, %r15
movq %rsi, %r14
movq %rdi, %rbx
movq %rsi, 0x8(%rsp)
callq 0x1bd90c
movq %rax, %rdi
movq %rbx, %rsi
callq 0x102dfe
testq %rax, %rax
je 0x1bdb8e
movq %rax, %rbx
testq %r15, %r15
je 0x1bd99a
movq %r15, %rdi
callq 0x89eb7
testb %al, %al
jne 0x1bdbbc
movq %r14, %rdi
callq 0xda338
movq %rax, %r15
leaq 0x17757a(%rip), %rsi    # 0x334f26
movq %rax, %rdi
callq 0x179e0
testl %eax, %eax
je 0x1bdb04
leaq 0x179e4e(%rip), %rsi    # 0x337811
movq %r15, %rdi
callq 0x179e0
testl %eax, %eax
je 0x1bdb0e
leaq 0x1792f2(%rip), %rsi    # 0x336ccc
movq %r15, %rdi
callq 0x179e0
testl %eax, %eax
je 0x1bdb3b
leaq 0x1a241d(%rip), %rsi    # 0x35fe0e
movq %r15, %rdi
callq 0x179e0
testl %eax, %eax
je 0x1bdb4c
leaq 0x1a2421(%rip), %rsi    # 0x35fe29
movq %r15, %rdi
callq 0x179e0
testl %eax, %eax
je 0x1bdb6a
leaq 0x16360a(%rip), %rsi    # 0x321029
movq %r15, %rdi
callq 0x179e0
testl %eax, %eax
jne 0x1bdb7f
movq 0x10(%rbx), %rax
cmpq $0x0, 0x68(%rax)
jne 0x1bda58
leaq -0x12a202(%rip), %rsi   # 0x9383f
leaq -0x164b8f(%rip), %rdx   # 0x58eb9
pushq $0x1
popq %rdi
callq 0x8f330
movq 0x10(%rbx), %rcx
movq %rax, 0x68(%rcx)
leaq 0x16510c(%rip), %rsi    # 0x322b6b
movq %r14, %rdi
callq 0xd9628
leaq 0x1ab43b(%rip), %rdx    # 0x368ea9
leaq 0x10(%rsp), %r14
movl $0x1fff, %esi           # imm = 0x1FFF
movq %r14, %rdi
movq %rax, %rcx
xorl %eax, %eax
callq 0x17bf0
pushq $0x2f
popq %rsi
pushq $0x5f
popq %rdx
movq %r14, %rdi
callq 0x6c3a8
movq 0x10(%rbx), %rax
movq 0x68(%rax), %rdi
movq %r14, %rsi
callq 0x8f482
movq %rax, %r14
testq %rax, %rax
jne 0x1bdaf2
leaq 0x10(%rsp), %rdi
callq 0x6c2be
movq %rax, %r15
movq %rax, (%rsp)
pushq $0x8
popq %rdi
callq 0x5809c
movq %rax, %r14
movq 0x10(%rbx), %rax
movq 0x68(%rax), %rdi
movq %r15, %rsi
movq %r14, %rdx
callq 0x8f4bd
movq 0x10(%rbx), %rax
movq 0x60(%rax), %rdi
testq %rdi, %rdi
je 0x1bdaf2
movq %rsp, %rsi
pushq $0x8
popq %rdx
callq 0x5851d
leaq 0x8(%rsp), %rsi
pushq $0x8
popq %rdx
movq %r14, %rdi
callq 0x5851d
jmp 0x1bdb7f
movq 0x10(%rbx), %rax
movq %r14, 0x20(%rax)
jmp 0x1bdb7f
movq 0x10(%rbx), %rax
movq 0x28(%rax), %r15
movq %r14, %rdi
callq 0xdd1f4
decq %rax
decq %rdx
movq 0x10(%rbx), %rcx
testq %r15, %r15
je 0x1bdb5d
movq %r14, 0x30(%rcx)
movq %rax, 0x18(%rcx)
movq %rdx, 0x10(%rcx)
jmp 0x1bdb7f
movq 0x10(%rbx), %rax
cmpq $0x0, 0x38(%rax)
je 0x1bdb7b
movq %r14, 0x40(%rax)
jmp 0x1bdb7f
movq 0x10(%rbx), %rax
cmpq $0x0, 0x48(%rax)
jne 0x1bdb7f
movq %r14, 0x48(%rax)
jmp 0x1bdb7f
movq %r14, 0x28(%rcx)
movq %rax, 0x8(%rcx)
movq %rdx, (%rcx)
jmp 0x1bdb7f
movq 0x10(%rbx), %rax
cmpq $0x0, 0x50(%rax)
jne 0x1bdb7f
movq %r14, 0x50(%rax)
jmp 0x1bdb7f
movq %r14, 0x38(%rax)
xorl %eax, %eax
addq $0x2010, %rsp           # imm = 0x2010
popq %rbx
popq %r14
popq %r15
retq
movq 0x27a3d3(%rip), %rax    # 0x437f68
movq (%rax), %rdi
leaq 0x127474(%rip), %rsi    # 0x2e5013
leaq 0x1a279b(%rip), %rdx    # 0x360341
leaq 0x1a2797(%rip), %rcx    # 0x360344
leaq 0x1a21e7(%rip), %r8     # 0x35fd9b
movl $0x8d, %r9d
jmp 0x1bdbe8
movq 0x27a3a5(%rip), %rax    # 0x437f68
movq (%rax), %rdi
leaq 0x127446(%rip), %rsi    # 0x2e5013
leaq 0x1275eb(%rip), %rdx    # 0x2e51bf
leaq 0x1a2769(%rip), %rcx    # 0x360344
leaq 0x1a21b9(%rip), %r8     # 0x35fd9b
movl $0x8e, %r9d
xorl %eax, %eax
callq 0x17a50
callq 0x17390