// File: /workspace/github_c_makefile_star2_O0/genometools[P]genometools/src/extended/stream_evaluator.c
// Function: process_real_feature
static int process_real_feature(GtFeatureNode *fn, void *data,
                                GT_UNUSED GtError *err)
{
  ProcessRealFeatureInfo *info = (ProcessRealFeatureInfo*) data;
  GtGenomeNode *gn_ref;
  GtRange range;

  gt_error_check(err);
  gt_assert(fn && data);

  if (gt_feature_node_has_type(fn, gt_ft_gene)) {
    switch (gt_feature_node_get_strand(fn)) {
      case GT_STRAND_FORWARD:
        gn_ref = gt_genome_node_ref((GtGenomeNode*) fn);
        gt_array_add(info->slot->genes_forward, gn_ref);
        break;
      case GT_STRAND_REVERSE:
        gn_ref = gt_genome_node_ref((GtGenomeNode*) fn);
        gt_array_add(info->slot->genes_reverse, gn_ref);
        break;
      default:
        if (info->verbose) {
          fprintf(stderr, "skipping real gene with unknown orientation "
                  "(line %u)\n",
                  gt_genome_node_get_line_number((GtGenomeNode*) fn));
        }
    }
  }
  else if (gt_feature_node_has_type(fn, gt_ft_mRNA)) {
    switch (gt_feature_node_get_strand(fn)) {
      case GT_STRAND_FORWARD:
        gn_ref = gt_genome_node_ref((GtGenomeNode*) fn);
        gt_array_add(info->slot->mRNAs_forward, gn_ref);
        break;
      case GT_STRAND_REVERSE:
        gn_ref = gt_genome_node_ref((GtGenomeNode*) fn);
        gt_array_add(info->slot->mRNAs_reverse, gn_ref);
        break;
      default:
        if (info->verbose) {
          fprintf(stderr, "skipping real mRNA with unknown orientation "
                  "(line %u)\n",
                  gt_genome_node_get_line_number((GtGenomeNode*) fn));
        }
    }
  }
  else if (gt_feature_node_has_type(fn, gt_ft_LTR_retrotransposon)) {
    gn_ref = gt_genome_node_ref((GtGenomeNode*) fn);
    gt_array_add(info->slot->LTRs, gn_ref);
  }
  else if (gt_feature_node_has_type(fn, gt_ft_CDS)) {
    range = gt_genome_node_get_range((GtGenomeNode*) fn);
    switch (gt_feature_node_get_strand(fn)) {
      case GT_STRAND_FORWARD:
        add_real_exon(info->slot->CDS_exons_forward, range, fn);
        /* nucleotide level */
        if (info->nuceval) {
          add_nucleotide_exon(info->slot->real_CDS_nucleotides_forward, range,
                              info->slot->real_range, NULL);
        }
        break;
      case GT_STRAND_REVERSE:
        add_real_exon(info->slot->CDS_exons_reverse, range, fn);
        /* nucleotide level */
        if (info->nuceval) {
          add_nucleotide_exon(info->slot->real_CDS_nucleotides_reverse, range,
                              info->slot->real_range, NULL);
        }
        break;
      default:
        if (info->verbose) {
          fprintf(stderr, "skipping real CDS exon with unknown orientation "
                  "(line %u)\n",
                  gt_genome_node_get_line_number((GtGenomeNode*) fn));
        }
    }
  }
  else if (gt_feature_node_has_type(fn, gt_ft_exon)) {
    range = gt_genome_node_get_range((GtGenomeNode*) fn);
    switch (gt_feature_node_get_strand(fn)) {
      case GT_STRAND_FORWARD:
        add_real_exon(info->slot->mRNA_exons_forward, range, fn);
        /* nucleotide level */
        if (info->nuceval) {
          add_nucleotide_exon(info->slot->real_mRNA_nucleotides_forward,
                              range, info->slot->real_range, NULL);
        }
        break;
      case GT_STRAND_REVERSE:
        add_real_exon(info->slot->mRNA_exons_reverse, range, fn);
        /* nucleotide level */
        if (info->nuceval) {
          add_nucleotide_exon(info->slot->real_mRNA_nucleotides_reverse,
                              range, info->slot->real_range, NULL);
        }
        break;
      default:
        if (info->verbose) {
          fprintf(stderr, "skipping real mRNA exon with unknown orientation "
                  "(line %u)\n",
                  gt_genome_node_get_line_number((GtGenomeNode*) fn));
        }
    }
  }
  return 0;
}

// Assembly:
subq $0x98, %rsp
movq %rdi, 0x90(%rsp)
movq %rsi, 0x88(%rsp)
movq %rdx, 0x80(%rsp)
movq 0x88(%rsp), %rax
movq %rax, 0x78(%rsp)
cmpq $0x0, 0x80(%rsp)
je 0xed102
movq 0x80(%rsp), %rdi
callq 0xc270
testb $0x1, %al
jne 0xed0ca
jmp 0xed102
movq 0xc6f07(%rip), %rax     # 0x1b3fd8
movq (%rax), %rdi
leaq 0x70f8b(%rip), %rsi     # 0x15e066
leaq 0x71566(%rip), %rdx     # 0x15e648
leaq 0x8d72f(%rip), %rcx     # 0x17a818
leaq 0x8d4b8(%rip), %r8      # 0x17a5a8
movl $0x1d3, %r9d            # imm = 0x1D3
movb $0x0, %al
callq 0xb890
callq 0xb2e0
jmp 0xed104
jmp 0xed106
cmpq $0x0, 0x90(%rsp)
je 0xed11c
cmpq $0x0, 0x88(%rsp)
jne 0xed154
movq 0xc6eb5(%rip), %rax     # 0x1b3fd8
movq (%rax), %rdi
leaq 0x70f39(%rip), %rsi     # 0x15e066
leaq 0x8d6f9(%rip), %rdx     # 0x17a82d
leaq 0x8d6dd(%rip), %rcx     # 0x17a818
leaq 0x8d466(%rip), %r8      # 0x17a5a8
movl $0x1d4, %r9d            # imm = 0x1D4
movb $0x0, %al
callq 0xb890
callq 0xb2e0
jmp 0xed156
movq 0x90(%rsp), %rdi
leaq 0xa23ab(%rip), %rsi     # 0x18f510
callq 0x21700
testb $0x1, %al
jne 0xed173
jmp 0xed237
movq 0x90(%rsp), %rdi
callq 0x20a10
movl %eax, %ecx
movl %ecx, 0x3c(%rsp)
testl %eax, %eax
je 0xed197
jmp 0xed18c
movl 0x3c(%rsp), %eax
subl $0x1, %eax
je 0xed1c5
jmp 0xed1f4
movq 0x90(%rsp), %rdi
callq 0x25140
movq %rax, 0x70(%rsp)
movq 0x78(%rsp), %rax
movq (%rax), %rax
movq (%rax), %rdi
leaq 0x70(%rsp), %rsi
movl $0x8, %edx
callq 0x76220
jmp 0xed232
movq 0x90(%rsp), %rdi
callq 0x25140
movq %rax, 0x70(%rsp)
movq 0x78(%rsp), %rax
movq (%rax), %rax
movq 0x8(%rax), %rdi
leaq 0x70(%rsp), %rsi
movl $0x8, %edx
callq 0x76220
jmp 0xed232
movq 0x78(%rsp), %rax
testb $0x1, 0x9(%rax)
je 0xed230
movq 0xc6dd2(%rip), %rax     # 0x1b3fd8
movq (%rax), %rax
movq %rax, 0x30(%rsp)
movq 0x90(%rsp), %rdi
callq 0x25850
movq 0x30(%rsp), %rdi
movl %eax, %edx
leaq 0x8d60f(%rip), %rsi     # 0x17a838
movb $0x0, %al
callq 0xb890
jmp 0xed232
jmp 0xed64a
movq 0x90(%rsp), %rdi
leaq 0x74a50(%rip), %rsi     # 0x161c96
callq 0x21700
testb $0x1, %al
jne 0xed254
jmp 0xed319
movq 0x90(%rsp), %rdi
callq 0x20a10
movl %eax, %ecx
movl %ecx, 0x2c(%rsp)
testl %eax, %eax
je 0xed278
jmp 0xed26d
movl 0x2c(%rsp), %eax
subl $0x1, %eax
je 0xed2a7
jmp 0xed2d6
movq 0x90(%rsp), %rdi
callq 0x25140
movq %rax, 0x70(%rsp)
movq 0x78(%rsp), %rax
movq (%rax), %rax
movq 0x10(%rax), %rdi
leaq 0x70(%rsp), %rsi
movl $0x8, %edx
callq 0x76220
jmp 0xed314
movq 0x90(%rsp), %rdi
callq 0x25140
movq %rax, 0x70(%rsp)
movq 0x78(%rsp), %rax
movq (%rax), %rax
movq 0x18(%rax), %rdi
leaq 0x70(%rsp), %rsi
movl $0x8, %edx
callq 0x76220
jmp 0xed314
movq 0x78(%rsp), %rax
testb $0x1, 0x9(%rax)
je 0xed312
movq 0xc6cf0(%rip), %rax     # 0x1b3fd8
movq (%rax), %rax
movq %rax, 0x20(%rsp)
movq 0x90(%rsp), %rdi
callq 0x25850
movq 0x20(%rsp), %rdi
movl %eax, %edx
leaq 0x8d564(%rip), %rsi     # 0x17a86f
movb $0x0, %al
callq 0xb890
jmp 0xed314
jmp 0xed648
movq 0x90(%rsp), %rdi
leaq 0x8d57e(%rip), %rsi     # 0x17a8a6
callq 0x21700
testb $0x1, %al
jne 0xed333
jmp 0xed365
movq 0x90(%rsp), %rdi
callq 0x25140
movq %rax, 0x70(%rsp)
movq 0x78(%rsp), %rax
movq (%rax), %rax
movq 0x20(%rax), %rdi
leaq 0x70(%rsp), %rsi
movl $0x8, %edx
callq 0x76220
jmp 0xed646
movq 0x90(%rsp), %rdi
leaq 0x74ec7(%rip), %rsi     # 0x16223b
callq 0x21700
testb $0x1, %al
jne 0xed382
jmp 0xed4d6
movq 0x90(%rsp), %rdi
callq 0x259f0
movq %rax, 0x50(%rsp)
movq %rdx, 0x58(%rsp)
movups 0x50(%rsp), %xmm0
movaps %xmm0, 0x60(%rsp)
movq 0x90(%rsp), %rdi
callq 0x20a10
movl %eax, %ecx
movl %ecx, 0x1c(%rsp)
testl %eax, %eax
je 0xed3ca
jmp 0xed3bc
movl 0x1c(%rsp), %eax
subl $0x1, %eax
je 0xed430
jmp 0xed493
movq 0x78(%rsp), %rax
movq (%rax), %rax
movq 0x38(%rax), %rdi
movq 0x90(%rsp), %rcx
movq 0x60(%rsp), %rsi
movq 0x68(%rsp), %rdx
callq 0xf0220
movq 0x78(%rsp), %rax
testb $0x1, 0x8(%rax)
je 0xed42b
movq 0x78(%rsp), %rax
movq (%rax), %rax
movq 0xb8(%rax), %rdi
movq 0x78(%rsp), %rax
movq (%rax), %rax
movq 0x60(%rsp), %rsi
movq 0x68(%rsp), %rdx
movq 0x68(%rax), %rcx
movq 0x70(%rax), %r8
xorl %eax, %eax
movl %eax, %r9d
callq 0xf0370
jmp 0xed4d1
movq 0x78(%rsp), %rax
movq (%rax), %rax
movq 0x40(%rax), %rdi
movq 0x90(%rsp), %rcx
movq 0x60(%rsp), %rsi
movq 0x68(%rsp), %rdx
callq 0xf0220
movq 0x78(%rsp), %rax
testb $0x1, 0x8(%rax)
je 0xed491
movq 0x78(%rsp), %rax
movq (%rax), %rax
movq 0xc8(%rax), %rdi
movq 0x78(%rsp), %rax
movq (%rax), %rax
movq 0x60(%rsp), %rsi
movq 0x68(%rsp), %rdx
movq 0x68(%rax), %rcx
movq 0x70(%rax), %r8
xorl %eax, %eax
movl %eax, %r9d
callq 0xf0370
jmp 0xed4d1
movq 0x78(%rsp), %rax
testb $0x1, 0x9(%rax)
je 0xed4cf
movq 0xc6b33(%rip), %rax     # 0x1b3fd8
movq (%rax), %rax
movq %rax, 0x10(%rsp)
movq 0x90(%rsp), %rdi
callq 0x25850
movq 0x10(%rsp), %rdi
movl %eax, %edx
leaq 0x8d3f2(%rip), %rsi     # 0x17a8ba
movb $0x0, %al
callq 0xb890
jmp 0xed4d1
jmp 0xed644
movq 0x90(%rsp), %rdi
leaq 0x8d8d1(%rip), %rsi     # 0x17adb6
callq 0x21700
testb $0x1, %al
jne 0xed4f3
jmp 0xed642
movq 0x90(%rsp), %rdi
callq 0x259f0
movq %rax, 0x40(%rsp)
movq %rdx, 0x48(%rsp)
movups 0x40(%rsp), %xmm0
movaps %xmm0, 0x60(%rsp)
movq 0x90(%rsp), %rdi
callq 0x20a10
movl %eax, %ecx
movl %ecx, 0xc(%rsp)
testl %eax, %eax
je 0xed53b
jmp 0xed52d
movl 0xc(%rsp), %eax
subl $0x1, %eax
je 0xed5a1
jmp 0xed604
movq 0x78(%rsp), %rax
movq (%rax), %rax
movq 0x28(%rax), %rdi
movq 0x90(%rsp), %rcx
movq 0x60(%rsp), %rsi
movq 0x68(%rsp), %rdx
callq 0xf0220
movq 0x78(%rsp), %rax
testb $0x1, 0x8(%rax)
je 0xed59c
movq 0x78(%rsp), %rax
movq (%rax), %rax
movq 0x98(%rax), %rdi
movq 0x78(%rsp), %rax
movq (%rax), %rax
movq 0x60(%rsp), %rsi
movq 0x68(%rsp), %rdx
movq 0x68(%rax), %rcx
movq 0x70(%rax), %r8
xorl %eax, %eax
movl %eax, %r9d
callq 0xf0370
jmp 0xed640
movq 0x78(%rsp), %rax
movq (%rax), %rax
movq 0x30(%rax), %rdi
movq 0x90(%rsp), %rcx
movq 0x60(%rsp), %rsi
movq 0x68(%rsp), %rdx
callq 0xf0220
movq 0x78(%rsp), %rax
testb $0x1, 0x8(%rax)
je 0xed602
movq 0x78(%rsp), %rax
movq (%rax), %rax
movq 0xa8(%rax), %rdi
movq 0x78(%rsp), %rax
movq (%rax), %rax
movq 0x60(%rsp), %rsi
movq 0x68(%rsp), %rdx
movq 0x68(%rax), %rcx
movq 0x70(%rax), %r8
xorl %eax, %eax
movl %eax, %r9d
callq 0xf0370
jmp 0xed640
movq 0x78(%rsp), %rax
testb $0x1, 0x9(%rax)
je 0xed63e
movq 0xc69c2(%rip), %rax     # 0x1b3fd8
movq (%rax), %rax
movq %rax, (%rsp)
movq 0x90(%rsp), %rdi
callq 0x25850
movq (%rsp), %rdi
movl %eax, %edx
leaq 0x8d2be(%rip), %rsi     # 0x17a8f5
movb $0x0, %al
callq 0xb890
jmp 0xed640
jmp 0xed642
jmp 0xed644
jmp 0xed646
jmp 0xed648
jmp 0xed64a
xorl %eax, %eax
addq $0x98, %rsp
retq
nopw %cs:(%rax,%rax)