// File: /workspace/github_c_makefile_star2_O2/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 0x1ba33b
movq %rdi, %r14
leaq 0x1a5337(%rip), %rdi    # 0x35f08b
leaq 0x1a5350(%rip), %rsi    # 0x35f0ab
callq 0x97df5
movq %rax, %rbx
movq 0x10(%r14), %rdx
leaq 0x173370(%rip), %rdi    # 0x32d0de
leaq 0x14383f(%rip), %rsi    # 0x2fd5b4
xorl %ecx, %ecx
callq 0x9ad12
movq %rax, %r15
movq %rax, %rdi
callq 0x9ae37
movq %rbx, %rdi
movq %r15, %rsi
callq 0x97f31
leaq 0x40(%r14), %rdx
leaq 0x163ab7(%rip), %rdi    # 0x31d854
leaq 0x1a5325(%rip), %rsi    # 0x35f0c9
leaq 0x20(%rsp), %rcx
callq 0x9aca4
movq %rbx, %rdi
movq %rax, %rsi
callq 0x97f31
leaq 0x50(%r14), %rdx
leaq 0x13b88c(%rip), %rdi    # 0x2f5650
leaq 0x143829(%rip), %rsi    # 0x2fd5f4
pushq $0x1e
popq %rcx
pushq $0x1
popq %r15
movq %r15, %r8
callq 0x9ac58
movq %rbx, %rdi
movq %rax, %rsi
callq 0x97f31
leaq 0x58(%r14), %rdx
leaq 0x1a5320(%rip), %rdi    # 0x35f110
leaq 0x1a5323(%rip), %rsi    # 0x35f11a
pushq $0x64
popq %rcx
pushq $-0x1
popq %r12
movq %r15, %r8
movq %r12, %r9
callq 0x9ac6b
movq %rbx, %rdi
movq %rax, %rsi
callq 0x97f31
leaq 0x60(%r14), %rdx
leaq 0x1a531f(%rip), %rdi    # 0x35f13e
leaq 0x1a5322(%rip), %rsi    # 0x35f148
movl $0x3e8, %ecx            # imm = 0x3E8
movq %r15, %r8
movq %r12, %r9
callq 0x9ac6b
movq %rbx, %rdi
movq %rax, %rsi
callq 0x97f31
leaq 0x68(%r14), %rdx
leaq 0x1a5320(%rip), %rdi    # 0x35f16c
leaq 0x1a5324(%rip), %rsi    # 0x35f177
movl $0x3e8, %ecx            # imm = 0x3E8
movq %r15, %r8
movq %r12, %r9
callq 0x9ac6b
movq %rbx, %rdi
movq %rax, %rsi
callq 0x97f31
leaq 0x70(%r14), %rdx
leaq 0x1a532d(%rip), %rdi    # 0x35f1a6
leaq 0x1a5331(%rip), %rsi    # 0x35f1b1
movl $0x3a98, %ecx           # imm = 0x3A98
movq %r15, %r8
movq %r12, %r9
callq 0x9ac6b
movq %rbx, %rdi
movq %rax, %rsi
callq 0x97f31
leaq 0x88(%r14), %rdx
leaq 0x1647b8(%rip), %rdi    # 0x31e661
leaq 0x1a5330(%rip), %rsi    # 0x35f1e0
movsd 0x143648(%rip), %xmm0   # 0x2fd500
movsd 0x12f920(%rip), %xmm2   # 0x2e97e0
xorps %xmm1, %xmm1
callq 0x9ab20
movq %rbx, %rdi
movq %rax, %rsi
callq 0x97f31
leaq 0xa4(%r14), %rdx
leaq 0x14392e(%rip), %rdi    # 0x2fd80f
leaq 0x14392e(%rip), %rsi    # 0x2fd816
pushq $0x4
popq %rbp
pushq $-0x1
popq %r12
movl %ebp, %ecx
xorl %r8d, %r8d
movl %r12d, %r9d
callq 0x9ac13
movq %rax, 0x18(%rsp)
movq %rbx, %rdi
movq %rax, %rsi
callq 0x97f31
leaq 0xa8(%r14), %rdx
leaq 0x143920(%rip), %rdi    # 0x2fd83a
leaq 0x143920(%rip), %rsi    # 0x2fd841
pushq $0x14
popq %rcx
xorl %r8d, %r8d
movl %r12d, %r9d
callq 0x9ac13
movq %rax, 0x10(%rsp)
movq %rbx, %rdi
movq %rax, %rsi
callq 0x97f31
movq 0x18(%r14), %rdx
leaq 0x1a7900(%rip), %rdi    # 0x36184a
leaq 0x1a52be(%rip), %rsi    # 0x35f20f
xorl %ecx, %ecx
callq 0x9ad12
movq %rax, %r13
movq %rbx, %rdi
movq %rax, %rsi
callq 0x97f31
movq %r13, %rdi
callq 0x97db0
movq %rax, 0xc0(%r14)
leaq 0xac(%r14), %rdx
leaq 0x1a52cc(%rip), %rdi    # 0x35f24f
leaq 0x1a52ce(%rip), %rsi    # 0x35f258
pushq $0x3
popq %r9
movl %ebp, %ecx
xorl %r8d, %r8d
callq 0x9ac13
movq %rax, %r15
movq %rax, 0x8(%rsp)
movq %rbx, %rdi
movq %rax, %rsi
callq 0x97f31
movq %r15, %rdi
callq 0x97db0
movq %rax, 0xc8(%r14)
leaq 0xb0(%r14), %rdx
leaq 0x14389d(%rip), %rdi    # 0x2fd865
leaq 0x1a52bd(%rip), %rsi    # 0x35f28c
pushq $0x3c
popq %rcx
pushq $0x1
popq %rbp
movl %ebp, %r8d
movl $0x1f4, %r9d            # imm = 0x1F4
callq 0x9ac13
movq %rbx, %rdi
movq %rax, %rsi
callq 0x97f31
movq 0x20(%r14), %rdx
movq 0x27fc57(%rip), %rcx    # 0x439c50
leaq 0x27fc50(%rip), %r8     # 0x439c50
leaq 0x17cec0(%rip), %rdi    # 0x336ec7
leaq 0x1a5328(%rip), %rsi    # 0x35f336
callq 0x9ad83
movq %rax, %r15
movq %rbx, %rdi
movq %rax, %rsi
callq 0x97f31
movq %r15, %rdi
callq 0x97db0
movq %rax, 0xd0(%r14)
leaq 0x90(%r14), %rdx
leaq 0x160049(%rip), %rdi    # 0x31a087
leaq 0x143747(%rip), %rsi    # 0x2fd78c
pushq $0x5
popq %rcx
xorl %r8d, %r8d
callq 0x9ab88
movq %rbx, %rdi
movq %rax, %rsi
callq 0x97f31
leaq 0x94(%r14), %rdx
leaq 0x141aa4(%rip), %rdi    # 0x2fbb0d
leaq 0x143666(%rip), %rsi    # 0x2fd6d6
pushq $0x2
popq %rcx
movl %ebp, %r8d
callq 0x9ab88
movq %rbx, %rdi
movq %rax, %rsi
callq 0x97f31
leaq 0x98(%r14), %rdx
leaq 0x1a51c0(%rip), %rdi    # 0x35f254
leaq 0x143666(%rip), %rsi    # 0x2fd701
pushq $-0x2
popq %rcx
movl %r12d, %r8d
callq 0x9ab9a
movq %rbx, %rdi
movq %rax, %rsi
callq 0x97f31
leaq 0x9c(%r14), %rdx
leaq 0x184de7(%rip), %rdi    # 0x33eea6
leaq 0x143669(%rip), %rsi    # 0x2fd72f
pushq $-0x3
popq %r15
movl %r15d, %ecx
movl %r12d, %r8d
callq 0x9ab9a
movq %rbx, %rdi
movq %rax, %rsi
callq 0x97f31
leaq 0xa0(%r14), %rdx
leaq 0x1a3479(%rip), %rdi    # 0x35d567
leaq 0x143669(%rip), %rsi    # 0x2fd75e
movl %r15d, %ecx
movl %r12d, %r8d
callq 0x9ab9a
movq %rbx, %rdi
movq %rax, %rsi
callq 0x97f31
leaq 0xbb(%r14), %rdx
leaq 0x175a57(%rip), %rdi    # 0x32fb70
leaq 0x1a522a(%rip), %rsi    # 0x35f34a
xorl %ecx, %ecx
callq 0x9a997
movq %rbx, %rdi
movq %rax, %rsi
callq 0x97f31
leaq 0xbc(%r14), %rdx
leaq 0x1a5217(%rip), %rdi    # 0x35f357
leaq 0x1a5217(%rip), %rsi    # 0x35f35e
movl %ebp, %ecx
callq 0x9a997
movq %rbx, %rdi
movq %rax, %rsi
callq 0x97f31
leaq 0xbe(%r14), %rdx
leaq 0x1790ec(%rip), %rdi    # 0x333253
leaq 0x143988(%rip), %rsi    # 0x2fdaf6
xorl %ecx, %ecx
callq 0x9a997
movq %rbx, %rdi
movq %rax, %rsi
callq 0x97f31
leaq 0xbd(%r14), %rdx
leaq 0x1525eb(%rip), %rdi    # 0x30c779
leaq 0x1439a6(%rip), %rsi    # 0x2fdb3b
xorl %ecx, %ecx
callq 0x9a997
movq %rbx, %rdi
movq %rax, %rsi
callq 0x97f31
leaq 0xb9(%r14), %rdx
leaq 0x1a77a1(%rip), %rdi    # 0x361956
leaq 0x1a51d6(%rip), %rsi    # 0x35f392
xorl %ecx, %ecx
callq 0x9a997
movq %rax, %r12
movq %rbx, %rdi
movq %rax, %rsi
callq 0x97f31
xorl %ebp, %ebp
movb %bpl, 0xb6(%r14)
movq 0x28(%r14), %rdx
leaq 0x1a78bd(%rip), %rdi    # 0x361aa2
leaq 0x1a51c2(%rip), %rsi    # 0x35f3ae
xorl %ecx, %ecx
callq 0x9ad12
movq %rax, %r15
movq %rbx, %rdi
movq %rax, %rsi
callq 0x97f31
movq %r15, %rdi
callq 0x97db0
movq %rax, 0xd8(%r14)
movb %bpl, 0xb7(%r14)
xorl %ebp, %ebp
movq 0x30(%r14), %rdx
leaq 0x1a51a7(%rip), %rdi    # 0x35f3cb
leaq 0x1a51a9(%rip), %rsi    # 0x35f3d4
xorl %ecx, %ecx
callq 0x9ad12
movq %rax, %r15
movq %rbx, %rdi
movq %rax, %rsi
callq 0x97f31
movq %r15, %rdi
callq 0x97db0
movq %rax, 0xe0(%r14)
movb %bpl, 0xb8(%r14)
movq 0x38(%r14), %rdx
leaq 0x166602(%rip), %rdi    # 0x320863
leaq 0x1a519b(%rip), %rsi    # 0x35f403
xorl %ecx, %ecx
callq 0x9ad12
movq %rax, %r15
movq %rbx, %rdi
movq %rax, %rsi
callq 0x97f31
movq %r15, %rdi
callq 0x97db0
movq %rax, 0xe8(%r14)
leaq 0x80(%r14), %rdx
leaq 0x14deac(%rip), %rdi    # 0x308146
leaq 0x1a517e(%rip), %rsi    # 0x35f41f
xorl %ecx, %ecx
callq 0x9a9e6
movq %rax, %r15
movq %rbx, %rdi
movq %rax, %rsi
callq 0x97f31
movq %r15, %rdi
callq 0x9b0c7
addq $0xba, %r14
leaq 0x1331ea(%rip), %rdi    # 0x2ed4b6
leaq 0x1a516d(%rip), %rsi    # 0x35f440
movq %r14, %rdx
pushq $0x1
popq %rcx
callq 0x9a997
movq %rax, %r14
movq %rbx, %rdi
movq %rax, %rsi
callq 0x97f31
movq %r14, %rdi
callq 0x9b0c7
movq 0x10(%rsp), %rdi
movq 0x18(%rsp), %r14
movq %r14, %rsi
callq 0x9b14d
movq 0x8(%rsp), %rdi
movq %r13, %rsi
callq 0x9b14d
movq %r12, %rdi
movq %r14, %rsi
movq %r13, %rdx
callq 0x9b1ed
movq %rbx, %rdi
callq 0x98002
movq %rbx, %rax
addq $0x38, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq 0x27dc26(%rip), %rax    # 0x437f68
movq (%rax), %rdi
leaq 0x12acc7(%rip), %rsi    # 0x2e5013
leaq 0x18e300(%rip), %rdx    # 0x348653
leaq 0x1a4d11(%rip), %rcx    # 0x35f06b
leaq 0x1a4cf2(%rip), %r8     # 0x35f053
movl $0xde, %r9d
xorl %eax, %eax
callq 0x17a50
callq 0x17390