// File: /workspace/github_c_makefile_star2_O1/genometools[P]genometools/src/extended/snp_annotator_visitor.c
// Function: gt_snp_annotator_visitor_new
GtNodeVisitor* gt_snp_annotator_visitor_new(GtFeatureNode *gene,
                                            GtTransTable *trans_table,
                                            GtRegionMapping *rmap,
                                            GtError *err)
{
  GtNodeVisitor *nv;
  GtSNPAnnotatorVisitor *sav;
  gt_assert(gene && gt_feature_node_get_type(gene) == gt_symbol(gt_ft_gene));
  nv = gt_node_visitor_create(gt_snp_annotator_visitor_class());
  sav = snp_annotator_visitor_cast(nv);
  sav->gene = (GtFeatureNode*) gt_genome_node_ref((GtGenomeNode*) gene);
  sav->rmap = gt_region_mapping_ref(rmap);
  sav->mRNA_type = gt_symbol(gt_ft_mRNA);
  sav->CDS_type = gt_symbol(gt_ft_CDS);
  sav->SNV_type = gt_symbol(gt_ft_SNV);
  sav->SNP_type = gt_symbol(gt_ft_SNP);
  sav->rnaseqs = gt_hashmap_new(GT_HASH_DIRECT, NULL, gt_free_func);
  if (trans_table) {
    sav->tt = trans_table;
    sav->own_tt = false;
  } else {
    sav->tt = gt_trans_table_new_standard(err);
    sav->own_tt = true;
  }
  if (!sav->tt || gt_snp_annotator_visitor_prepare_gene(sav, err) != 0) {
    gt_node_visitor_delete(nv);
    return NULL;
  }
  return nv;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x38, %rsp
movq %rcx, 0x8(%rsp)
testq %rdi, %rdi
je 0x17df14
movq %rdx, %r14
movq %rsi, %rbx
movq %rdi, %r12
callq 0x149bb2
movq %rax, %r15
leaq 0x2692be(%rip), %rdi    # 0x3e6e4b
callq 0x12234f
cmpq %rax, %r15
jne 0x17df14
callq 0x17d3e8
movq %rax, %rdi
callq 0x16aef0
movq %rax, %r13
callq 0x17d3e8
movq %rax, %rdi
movq %r13, %rsi
callq 0x16af21
movq %rax, %r15
movq %r12, %rdi
callq 0x14b5fc
movq %rax, 0x10(%r15)
movq %r14, %rdi
callq 0x175a8b
movq %rax, 0x18(%r15)
leaq 0x206119(%rip), %rdi    # 0x383cf6
callq 0x12234f
movq %rax, 0x38(%r15)
leaq 0x20dbef(%rip), %rdi    # 0x38b7dc
callq 0x12234f
movq %rax, 0x40(%r15)
leaq 0x21eaef(%rip), %rdi    # 0x39c6ec
callq 0x12234f
movq %rax, 0x48(%r15)
leaq 0x21eae3(%rip), %rdi    # 0x39c6f0
callq 0x12234f
movq %rax, 0x50(%r15)
leaq -0x744ee(%rip), %rdx    # 0x10972f
xorl %r14d, %r14d
xorl %edi, %edi
xorl %esi, %esi
callq 0x105830
movq %rax, 0x20(%r15)
testq %rbx, %rbx
jne 0x17dc42
movq 0x8(%rsp), %rdi
callq 0x123d42
movq %rax, %rbx
movb $0x1, %r14b
movq %rbx, 0x28(%r15)
movb %r14b, 0x30(%r15)
testq %rbx, %rbx
je 0x17def7
movq %r13, 0x18(%rsp)
callq 0x1208f8
movq %rax, %r12
movq 0x10(%r15), %rdi
callq 0x14b89b
movq %rax, 0x20(%rsp)
movq 0x10(%r15), %rdi
callq 0x14b1a8
movq %rax, %r13
movq %rax, %rdi
callq 0x14b33e
testq %rax, %rax
je 0x17de36
movq %rax, %rbp
movq $0x0, (%rsp)
movq %rbp, %rdi
callq 0x149bb2
cmpq 0x38(%r15), %rax
je 0x17dcac
xorl %r14d, %r14d
jmp 0x17de18
cmpq $0x0, (%rsp)
je 0x17dd48
movq %r12, %rdi
callq 0x120d4c
leaq 0x1(%rax), %rdi
movl $0x1, %esi
leaq 0x21eb06(%rip), %rdx    # 0x39c7d5
movl $0x138, %ecx            # imm = 0x138
callq 0x1093ef
movq %rax, %rbx
movq %r12, %rdi
callq 0x120d23
movq %rax, %r14
movq %r12, %rdi
callq 0x120d4c
movq %rbx, %rdi
movq %r14, %rsi
movq %rax, %rdx
callq 0x17370
movq 0x10(%r15), %rdi
callq 0x14970e
xorl %r14d, %r14d
cmpl $0x1, %eax
jne 0x17dd29
movq %r12, %rdi
callq 0x120d4c
movq %rbx, %rdi
movq %rax, %rsi
movq 0x8(%rsp), %rdx
callq 0x177290
movl %eax, %r14d
testl %r14d, %r14d
jne 0x17dd4f
movq 0x20(%r15), %rdi
movq (%rsp), %rsi
movq %rbx, %rdx
callq 0x105a4c
movq %r12, %rdi
callq 0x120db4
jmp 0x17dd4b
xorl %r14d, %r14d
movq %rbp, (%rsp)
testl %r14d, %r14d
jne 0x17de18
movq %rbp, %rdi
callq 0x14b1a8
movq %rax, %rbp
movq %rax, %rdi
callq 0x14b33e
movq %rax, %rbx
testq %rax, %rax
je 0x17de0d
movq %rbx, %rdi
callq 0x149bb2
xorl %r14d, %r14d
cmpq 0x40(%r15), %rax
jne 0x17ddf2
movq %rbx, %rdi
callq 0x14b8df
movq %rdx, %r8
movq %rax, 0x28(%rsp)
movq %rdx, 0x30(%rsp)
movq 0x18(%r15), %rdi
leaq 0x10(%rsp), %rsi
movq 0x20(%rsp), %rdx
movq %rax, %rcx
movq 0x8(%rsp), %r9
callq 0x175a9d
movl %eax, %r14d
testl %eax, %eax
jne 0x17ddf2
movq 0x10(%rsp), %rbx
leaq 0x28(%rsp), %rdi
callq 0x117813
movq %r12, %rdi
movq %rbx, %rsi
movq %rax, %rdx
callq 0x120a9d
movq 0x10(%rsp), %rdi
leaq 0x21e9ed(%rip), %rsi    # 0x39c7d5
movl $0x150, %edx            # imm = 0x150
callq 0x109670
testl %r14d, %r14d
jne 0x17de10
movq %rbp, %rdi
callq 0x14b33e
movq %rax, %rbx
testq %rax, %rax
jne 0x17dd77
jmp 0x17de10
xorl %r14d, %r14d
movq %rbp, %rdi
callq 0x14b3d0
testl %r14d, %r14d
sete %bl
jne 0x17de43
movq %r13, %rdi
callq 0x14b33e
movq %rax, %rbp
testq %rax, %rax
jne 0x17dc96
jmp 0x17de43
movb $0x1, %bl
xorl %r14d, %r14d
movq $0x0, (%rsp)
testb %bl, %bl
je 0x17dedd
cmpq $0x0, (%rsp)
je 0x17dedd
movq %r12, %rdi
callq 0x120d4c
leaq 0x1(%rax), %rdi
leaq 0x21e96c(%rip), %rdx    # 0x39c7d5
movl $0x1, %esi
movl $0x159, %ecx            # imm = 0x159
callq 0x1093ef
movq %rax, %rbx
movq %r12, %rdi
callq 0x120d23
movq %rax, %r14
movq %r12, %rdi
callq 0x120d4c
movq %rbx, %rdi
movq %r14, %rsi
movq %rax, %rdx
callq 0x17370
movq 0x10(%r15), %rdi
callq 0x14970e
xorl %r14d, %r14d
cmpl $0x1, %eax
jne 0x17dec8
movq %r12, %rdi
callq 0x120d4c
movq %rbx, %rdi
movq %rax, %rsi
movq 0x8(%rsp), %rdx
callq 0x177290
movl %eax, %r14d
testl %r14d, %r14d
jne 0x17dedd
movq 0x20(%r15), %rdi
movq (%rsp), %rsi
movq %rbx, %rdx
callq 0x105a4c
movq %r13, %rdi
callq 0x14b3d0
movq %r12, %rdi
callq 0x121b03
testl %r14d, %r14d
movq 0x18(%rsp), %r13
je 0x17df02
movq %r13, %rdi
callq 0x16b162
xorl %r13d, %r13d
movq %r13, %rax
addq $0x38, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
callq 0x55f07
nopl (%rax)