// File: /workspace/github_c_makefile_star2_O3/genometools[P]genometools/src/ltr/gt_ltrharvest.c
// Function: gt_ltrharvest_option_parser_new
static GtOptionParser* gt_ltrharvest_option_parser_new(void *tool_arguments)
{
  LTRharvestArguments *arguments = tool_arguments;
  GtOptionParser *op;
  GtOption *optionindex,
           *optionltrsearchseqrange,
           *optionseed,
           *optionminlenltr,
           *optionmaxlenltr,
           *optionmindistltr,
           *optionmaxdistltr,
           *optionmintsd,
           *optionmaxtsd,
           *optionsimilar,
           *optionmotif,
           *optionmotifmis,
           *optionvic,
           *optionoverlaps,
           *optionxdrop,
           *optionmat,
           *optionmis,
           *optionins,
           *optiondel,
           *optionv,
           *optiontabout,
           *optionmd5,
           *optionseqids,
           *optionoffset,
           *optionlongoutput,
           *optionout,
           *optionoutinner,
           *optiongff3,
           *optionscan;
  GtRange default_ltrsearchseqrange = {0,0};
  static const char *overlaps[] = {
    "best", /* the default */
    "no",
    "all",
    NULL
  };

  gt_assert(arguments);

  op = gt_option_parser_new("[option ...] -index <indexname>",
                            "Predict LTR retrotransposons.");

  /* -index */
  optionindex = gt_option_new_string("index",
                             "specify the name of the enhanced suffix "
                             "array index (mandatory)",
                             arguments->str_indexname, NULL);
  gt_option_is_mandatory(optionindex);
  gt_option_parser_add_option(op, optionindex);

  /* -range */
  optionltrsearchseqrange
    = gt_option_new_range("range",
                          "specify range in the input sequence(s) in which LTR "
                          "pairs are searched",
                          &arguments->searchrange,
                          &default_ltrsearchseqrange);
  gt_option_parser_add_option(op, optionltrsearchseqrange);

  /* -seed */
  optionseed = gt_option_new_uword_min("seed",
                               "specify minimum seed length for"
                               " exact repeats",
                               &arguments->minseedlength,
                               30UL,
                               1UL);
  gt_option_parser_add_option(op, optionseed);

  /* -minlenltr */
  optionminlenltr = gt_option_new_uword_min_max("minlenltr",
                               "specify minimum length for each LTR",
                               &arguments->minltrlength,
                               100UL,
                               1UL,
                               GT_UNDEF_UWORD);
  gt_option_parser_add_option(op, optionminlenltr);

  /* -maxlenltr */
  optionmaxlenltr = gt_option_new_uword_min_max("maxlenltr",
                               "specify maximum length for each LTR",
                               &arguments->maxltrlength,
                               1000UL,
                               1UL,
                               GT_UNDEF_UWORD);
  gt_option_parser_add_option(op, optionmaxlenltr);

  /* -mindistltr */
  optionmindistltr = gt_option_new_uword_min_max("mindistltr",
                               "specify minimum distance of "
                               "LTR startpositions",
                               &arguments->mindistance,
                               1000UL,
                               1UL,
                               GT_UNDEF_UWORD);
  gt_option_parser_add_option(op, optionmindistltr);

  /* -maxdistltr */
  optionmaxdistltr = gt_option_new_uword_min_max("maxdistltr",
                               "specify maximum distance of "
                               "LTR startpositions",
                               &arguments->maxdistance,
                               15000UL,
                               1UL,
                               GT_UNDEF_UWORD);
  gt_option_parser_add_option(op, optionmaxdistltr);

  /* -similar */
  optionsimilar = gt_option_new_double_min_max("similar",
                               "specify similaritythreshold in "
                               "range [1..100%]",
                               &arguments->similaritythreshold,
                               (double) 85.0,
                               (double) 0.0,
                               100.0);
  gt_option_parser_add_option(op, optionsimilar);

  /* -mintsd */
  optionmintsd = gt_option_new_uint_min_max("mintsd",
                              "specify minimum length for each TSD",
                               &arguments->minlengthTSD,
                               4U,
                               0,
                               GT_UNDEF_UINT);
  gt_option_parser_add_option(op, optionmintsd);

  /* -maxtsd */
  optionmaxtsd = gt_option_new_uint_min_max("maxtsd",
                              "specify maximum length for each TSD",
                               &arguments->maxlengthTSD,
                               20U,
                               0,
                               GT_UNDEF_UINT);
  gt_option_parser_add_option(op, optionmaxtsd);

  optionmotif = gt_option_new_string("motif",
                             "specify 2 nucleotides startmotif + "
                             "2 nucleotides endmotif: ****",
                             arguments->str_motif, NULL);
  gt_option_parser_add_option(op, optionmotif);
  arguments->optionmotif = gt_option_ref(optionmotif);

  /* -motifmis */
  optionmotifmis = gt_option_new_uint_min_max("motifmis",
                             "specify maximum number of "
                             "mismatches in motif [0,3]",
                             &arguments->allowedmismatches,
                             4U,
                             0,
                             3U);
  gt_option_parser_add_option(op, optionmotifmis);
  arguments->optionmotifmis = gt_option_ref(optionmotifmis);

  /* -vic */
  optionvic = gt_option_new_uint_min_max("vic",
                        "specify the number of nucleotides (to the left and "
                        "to the right) that will be searched "
                        "for TSDs and/or motifs around 5' and 3' boundary "
                        "of predicted LTR retrotransposons",
                        &arguments->vicinity,
                        60U,
                        1U,
                        500U);
  gt_option_parser_add_option(op, optionvic);

  /* -overlaps */
  optionoverlaps = gt_option_new_choice("overlaps",
               "specify no|best|all",
               arguments->str_overlaps,
               overlaps[0],
               overlaps);
  gt_option_parser_add_option(op, optionoverlaps);
  arguments->optionoverlaps = gt_option_ref(optionoverlaps);

  /* -xdrop */
  optionxdrop = gt_option_new_int_min("xdrop",
                        "specify xdropbelowscore for extension-alignment",
                        &arguments->xdropbelowscore,
                        5,
                        0);
  gt_option_parser_add_option(op, optionxdrop);

  /* -mat */
  optionmat = gt_option_new_int_min("mat",
                        "specify matchscore for extension-alignment",
                        &arguments->arbitscores.mat,
                        2,
                        1);
  gt_option_parser_add_option(op, optionmat);

  /* -mis */
  optionmis = gt_option_new_int_max("mis",
                        "specify mismatchscore for extension-alignment",
                        &arguments->arbitscores.mis,
                        -2,
                        -1);
  gt_option_parser_add_option(op, optionmis);

  /* -ins */
  optionins = gt_option_new_int_max("ins",
                        "specify insertionscore for extension-alignment",
                        &arguments->arbitscores.ins,
                        -3,
                        -1);
  gt_option_parser_add_option(op, optionins);

  /* -del */
  optiondel = gt_option_new_int_max("del",
                        "specify deletionscore for extension-alignment",
                        &arguments->arbitscores.del,
                        -3,
                        -1);
  gt_option_parser_add_option(op, optiondel);

  /* -v */
  optionv = gt_option_new_bool("v",
                           "verbose mode",
                           &arguments->verbosemode,
                           false);
  gt_option_parser_add_option(op, optionv);

  /* -tabout */
  optiontabout = gt_option_new_bool("tabout",
                                    "show 'old' tabular output instead "
                                    "of GFF3 on stdout",
                                    &arguments->tabout,
                                    true);
  gt_option_parser_add_option(op, optiontabout);

  /* -seqids */
  optionseqids = gt_option_new_bool("seqids",
                                    "use sequence descriptions instead of "
                                    "sequence numbers in GFF3 output",
                                    &arguments->seqids,
                                    false);
  gt_option_parser_add_option(op, optionseqids);

  /* -md5 */
  optionmd5 = gt_option_new_bool("md5",
                                 "add MD5 hashes to seqids in GFF3 output",
                                 &arguments->md5,
                                 false);
  gt_option_parser_add_option(op, optionmd5);

  /* -longoutput */
  optionlongoutput = gt_option_new_bool("longoutput",
                           "additional motif/TSD output",
                           &arguments->longoutput,
                           false);
  gt_option_parser_add_option(op, optionlongoutput);

  /* -out */
  arguments->fastaoutput = false;
  optionout = gt_option_new_string("out",
                             "specify FASTA outputfilename",
                             arguments->str_fastaoutputfilename, NULL);
  gt_option_parser_add_option(op, optionout);
  arguments->optionout = gt_option_ref(optionout);

  /* -outinner */
  arguments->fastaoutputinnerregion = false;
  optionoutinner = gt_option_new_string("outinner",
                             "specify FASTA outputfilename for inner regions",
                             arguments->str_fastaoutputfilenameinnerregion,
                              NULL);
  gt_option_parser_add_option(op, optionoutinner);
  arguments->optionoutinner = gt_option_ref(optionoutinner);

  /* -gff3 */
  arguments->gff3output = false;
  optiongff3 = gt_option_new_string("gff3",
                                    "specify GFF3 outputfilename",
                                    arguments->str_gff3filename, NULL);
  gt_option_parser_add_option(op, optiongff3);
  arguments->optiongff3 = gt_option_ref(optiongff3);

  /* -offset */
  optionoffset = gt_option_new_uword("offset",
                                     "offset added to GFF3 coordinates",
                                     &arguments->offset,
                                     0UL);
  gt_option_parser_add_option(op, optionoffset);
  gt_option_is_extended_option(optionoffset);

  /* -scan */
  optionscan = gt_option_new_bool("scan",
                                  "scan the index sequentially instead of "
                                  "mapping it into memory entirely",
                                  &arguments->scan,
                                  true);
  gt_option_parser_add_option(op, optionscan);
  gt_option_is_extended_option(optionscan);

  /* implications */
  gt_option_imply(optionmaxtsd, optionmintsd);
  gt_option_imply(optionmotifmis, optionmotif);

  gt_option_imply_either_2(optionlongoutput, optionmintsd, optionmotif);

  gt_option_parser_refer_to_manual(op);

  return op;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x38, %rsp
xorps %xmm0, %xmm0
movaps %xmm0, 0x20(%rsp)
testq %rdi, %rdi
je 0x20604b
movq %rdi, %r14
leaq 0x1b9214(%rip), %rdi    # 0x3bec3b
leaq 0x1b922d(%rip), %rsi    # 0x3bec5b
callq 0x107bfe
movq %rax, %rbx
movq 0x10(%r14), %rdx
leaq 0x1872ad(%rip), %rdi    # 0x38ccee
leaq 0x157be4(%rip), %rsi    # 0x35d62c
xorl %ecx, %ecx
callq 0x10a770
movq %rax, %r15
movq %rax, %rdi
callq 0x10a87b
movq %rbx, %rdi
movq %r15, %rsi
callq 0x107cc0
leaq 0x40(%r14), %rdx
leaq 0x1779dc(%rip), %rdi    # 0x37d44c
leaq 0x1b9202(%rip), %rsi    # 0x3bec79
leaq 0x20(%rsp), %rcx
callq 0x10a6f7
movq %rbx, %rdi
movq %rax, %rsi
callq 0x107cc0
leaq 0x50(%r14), %rdx
leaq 0x14fba9(%rip), %rdi    # 0x355640
leaq 0x157bce(%rip), %rsi    # 0x35d66c
movl $0x1e, %ecx
movl $0x1, %r8d
callq 0x10a5d1
movq %rbx, %rdi
movq %rax, %rsi
callq 0x107cc0
leaq 0x58(%r14), %rdx
leaq 0x1b91fc(%rip), %rdi    # 0x3becc0
leaq 0x1b91ff(%rip), %rsi    # 0x3becca
movl $0x64, %ecx
movl $0x1, %r8d
movq $-0x1, %r9
callq 0x10a5ff
movq %rbx, %rdi
movq %rax, %rsi
callq 0x107cc0
leaq 0x60(%r14), %rdx
leaq 0x1b91f6(%rip), %rdi    # 0x3becee
leaq 0x1b91f9(%rip), %rsi    # 0x3becf8
movl $0x3e8, %ecx            # imm = 0x3E8
movl $0x1, %r8d
movq $-0x1, %r9
callq 0x10a5ff
movq %rbx, %rdi
movq %rax, %rsi
callq 0x107cc0
leaq 0x68(%r14), %rdx
leaq 0x1b91f0(%rip), %rdi    # 0x3bed1c
leaq 0x1b91f4(%rip), %rsi    # 0x3bed27
movl $0x3e8, %ecx            # imm = 0x3E8
movl $0x1, %r8d
movq $-0x1, %r9
callq 0x10a5ff
movq %rbx, %rdi
movq %rax, %rsi
callq 0x107cc0
leaq 0x70(%r14), %rdx
leaq 0x1b91f6(%rip), %rdi    # 0x3bed56
leaq 0x1b91fa(%rip), %rsi    # 0x3bed61
movl $0x3a98, %ecx           # imm = 0x3A98
movl $0x1, %r8d
movq $-0x1, %r9
callq 0x10a5ff
movq %rbx, %rdi
movq %rax, %rsi
callq 0x107cc0
leaq 0x88(%r14), %rdx
leaq 0x1786c2(%rip), %rdi    # 0x37e259
leaq 0x1b91f2(%rip), %rsi    # 0x3bed90
movsd 0x1579d2(%rip), %xmm0   # 0x35d578
movsd 0x143c32(%rip), %xmm2   # 0x3497e0
xorps %xmm1, %xmm1
callq 0x10a3b5
movq %rbx, %rdi
movq %rax, %rsi
callq 0x107cc0
leaq 0xa4(%r14), %rdx
leaq 0x157cb8(%rip), %rdi    # 0x35d887
leaq 0x157cb8(%rip), %rsi    # 0x35d88e
movl $0x4, %ecx
xorl %r8d, %r8d
movl $0xffffffff, %r9d       # imm = 0xFFFFFFFF
callq 0x10a571
movq %rax, 0x18(%rsp)
movq %rbx, %rdi
movq %rax, %rsi
callq 0x107cc0
leaq 0xa8(%r14), %rdx
leaq 0x157cab(%rip), %rdi    # 0x35d8b2
leaq 0x157cab(%rip), %rsi    # 0x35d8b9
movl $0x14, %ecx
xorl %r8d, %r8d
movl $0xffffffff, %r9d       # imm = 0xFFFFFFFF
callq 0x10a571
movq %rax, 0x10(%rsp)
movq %rbx, %rdi
movq %rax, %rsi
callq 0x107cc0
movq 0x18(%r14), %rdx
leaq 0x1bb7fe(%rip), %rdi    # 0x3c143a
leaq 0x1b917c(%rip), %rsi    # 0x3bedbf
xorl %ecx, %ecx
callq 0x10a770
movq %rax, %r13
movq %rbx, %rdi
movq %rax, %rsi
callq 0x107cc0
movq %r13, %rdi
callq 0x107bec
movq %rax, 0xc0(%r14)
leaq 0xac(%r14), %rdx
leaq 0x1b918a(%rip), %rdi    # 0x3bedff
leaq 0x1b918c(%rip), %rsi    # 0x3bee08
movl $0x4, %ecx
xorl %r8d, %r8d
movl $0x3, %r9d
callq 0x10a571
movq %rax, %r15
movq %rax, 0x8(%rsp)
movq %rbx, %rdi
movq %rax, %rsi
callq 0x107cc0
movq %r15, %rdi
callq 0x107bec
movq %rax, 0xc8(%r14)
leaq 0xb0(%r14), %rdx
leaq 0x157c1e(%rip), %rdi    # 0x35d8dd
leaq 0x1b9176(%rip), %rsi    # 0x3bee3c
movl $0x3c, %ecx
movl $0x1, %r8d
movl $0x1f4, %r9d            # imm = 0x1F4
callq 0x10a571
movq %rbx, %rdi
movq %rax, %rsi
callq 0x107cc0
movq 0x20(%r14), %rdx
movq 0x2b4fae(%rip), %rcx    # 0x4baca0
leaq 0x2b4fa7(%rip), %r8     # 0x4baca0
leaq 0x190e6e(%rip), %rdi    # 0x396b6e
leaq 0x1b91df(%rip), %rsi    # 0x3beee6
callq 0x10a7ed
movq %rax, %r12
movq %rbx, %rdi
movq %rax, %rsi
callq 0x107cc0
movq %r12, %rdi
callq 0x107bec
movq %rax, 0xd0(%r14)
leaq 0x90(%r14), %rdx
leaq 0x174002(%rip), %rdi    # 0x379d39
leaq 0x157ac6(%rip), %rsi    # 0x35d804
movl $0x5, %ecx
xorl %r8d, %r8d
callq 0x10a46f
movq %rbx, %rdi
movq %rax, %rsi
callq 0x107cc0
leaq 0x94(%r14), %rdx
leaq 0x155e53(%rip), %rdi    # 0x35bbb7
leaq 0x1579e3(%rip), %rsi    # 0x35d74e
movl $0x2, %ecx
movl $0x1, %r8d
callq 0x10a46f
movq %rbx, %rdi
movq %rax, %rsi
callq 0x107cc0
leaq 0x98(%r14), %rdx
leaq 0x1b9070(%rip), %rdi    # 0x3bee04
leaq 0x1579de(%rip), %rsi    # 0x35d779
movl $0xfffffffe, %ecx       # imm = 0xFFFFFFFE
movl $0xffffffff, %r8d       # imm = 0xFFFFFFFF
callq 0x10a498
movq %rbx, %rdi
movq %rax, %rsi
callq 0x107cc0
leaq 0x9c(%r14), %rdx
leaq 0x198de2(%rip), %rdi    # 0x39eba6
leaq 0x1579dc(%rip), %rsi    # 0x35d7a7
movl $0xfffffffd, %ecx       # imm = 0xFFFFFFFD
movl $0xffffffff, %r8d       # imm = 0xFFFFFFFF
callq 0x10a498
movq %rbx, %rdi
movq %rax, %rsi
callq 0x107cc0
leaq 0xa0(%r14), %rdx
leaq 0x1b731f(%rip), %rdi    # 0x3bd113
leaq 0x1579db(%rip), %rsi    # 0x35d7d6
movl $0xfffffffd, %ecx       # imm = 0xFFFFFFFD
movl $0xffffffff, %r8d       # imm = 0xFFFFFFFF
callq 0x10a498
movq %rbx, %rdi
movq %rax, %rsi
callq 0x107cc0
leaq 0xbb(%r14), %rdx
leaq 0x189a0e(%rip), %rdi    # 0x38f832
leaq 0x1b90cf(%rip), %rsi    # 0x3beefa
xorl %ecx, %ecx
callq 0x10a235
movq %rbx, %rdi
movq %rax, %rsi
callq 0x107cc0
leaq 0xbc(%r14), %rdx
leaq 0x1b90bc(%rip), %rdi    # 0x3bef07
leaq 0x1b90bc(%rip), %rsi    # 0x3bef0e
movl $0x1, %ecx
callq 0x10a235
movq %rbx, %rdi
movq %rax, %rsi
callq 0x107cc0
leaq 0xbe(%r14), %rdx
leaq 0x18d085(%rip), %rdi    # 0x392efa
leaq 0x157cf2(%rip), %rsi    # 0x35db6e
xorl %ecx, %ecx
callq 0x10a235
movq %rbx, %rdi
movq %rax, %rsi
callq 0x107cc0
leaq 0xbd(%r14), %rdx
leaq 0x1665b8(%rip), %rdi    # 0x36c454
leaq 0x157d10(%rip), %rsi    # 0x35dbb3
xorl %ecx, %ecx
callq 0x10a235
movq %rbx, %rdi
movq %rax, %rsi
callq 0x107cc0
leaq 0xb9(%r14), %rdx
leaq 0x1bb683(%rip), %rdi    # 0x3c1546
leaq 0x1b9078(%rip), %rsi    # 0x3bef42
xorl %ecx, %ecx
callq 0x10a235
movq %rax, %r12
movq %rbx, %rdi
movq %rax, %rsi
callq 0x107cc0
xorl %ebp, %ebp
movb %bpl, 0xb6(%r14)
movq 0x28(%r14), %rdx
leaq 0x1bb79f(%rip), %rdi    # 0x3c1692
leaq 0x1b9064(%rip), %rsi    # 0x3bef5e
xorl %ecx, %ecx
callq 0x10a770
movq %rax, %r15
movq %rbx, %rdi
movq %rax, %rsi
callq 0x107cc0
movq %r15, %rdi
callq 0x107bec
movq %rax, 0xd8(%r14)
movb %bpl, 0xb7(%r14)
xorl %ebp, %ebp
movq 0x30(%r14), %rdx
leaq 0x1b9049(%rip), %rdi    # 0x3bef7b
leaq 0x1b904b(%rip), %rsi    # 0x3bef84
xorl %ecx, %ecx
callq 0x10a770
movq %rax, %r15
movq %rbx, %rdi
movq %rax, %rsi
callq 0x107cc0
movq %r15, %rdi
callq 0x107bec
movq %rax, 0xe0(%r14)
movb %bpl, 0xb8(%r14)
movq 0x38(%r14), %rdx
leaq 0x17a4e4(%rip), %rdi    # 0x380453
leaq 0x1b903d(%rip), %rsi    # 0x3befb3
xorl %ecx, %ecx
callq 0x10a770
movq %rax, %r15
movq %rbx, %rdi
movq %rax, %rsi
callq 0x107cc0
movq %r15, %rdi
callq 0x107bec
movq %rax, 0xe8(%r14)
leaq 0x80(%r14), %rdx
leaq 0x16223f(%rip), %rdi    # 0x3681e7
leaq 0x1b9020(%rip), %rsi    # 0x3befcf
xorl %ecx, %ecx
callq 0x10a2ab
movq %rax, %r15
movq %rbx, %rdi
movq %rax, %rsi
callq 0x107cc0
movq %r15, %rdi
callq 0x10a9c4
addq $0xba, %r14
leaq 0x1474dc(%rip), %rdi    # 0x34d4b6
leaq 0x1b900f(%rip), %rsi    # 0x3beff0
movq %r14, %rdx
movl $0x1, %ecx
callq 0x10a235
movq %rax, %r14
movq %rbx, %rdi
movq %rax, %rsi
callq 0x107cc0
movq %r14, %rdi
callq 0x10a9c4
movq 0x10(%rsp), %rdi
movq 0x18(%rsp), %r14
movq %r14, %rsi
callq 0x10a9e4
movq 0x8(%rsp), %rdi
movq %r13, %rsi
callq 0x10a9e4
movq %r12, %rdi
movq %r14, %rsi
movq %r13, %rdx
callq 0x10aa54
movq %rbx, %rdi
callq 0x107d2d
movq %rbx, %rax
addq $0x38, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
callq 0x80095