// File: /workspace/github_c_makefile_star2_O0/genometools[P]genometools/src/tools/gt_simreads.c
// Function: gt_simreads_runner
static int gt_simreads_runner(GT_UNUSED int argc,
                              const char **argv, int parsed_args,
                              void *tool_arguments, GtError *err)
{
  GtSimreadsArguments *arguments = tool_arguments;
  GtEncseq *target = NULL;
  GtEncseqLoader *target_loader = NULL;
  GtEncseqReader *target_reader = NULL;
  GtReadmode readmode;
  GtStr *read = NULL, *description = NULL;
  GtUword output_bases = 0, output_reads = 0,
                output_rcmode_reads = 0,
                required_output_bases = 0,
                target_total_length,
                startpos, readlen, i;
  GtUint64 progress = 0;
  bool fixed_readlen;
  int had_err = 0;
  GtUchar ch;
  GtLogger *logger = NULL;
  GtDiscDistri *lengths = NULL, *starts = NULL;
  GtSimreadsDistvalue *input_distlen = NULL;
  off_t j, nofvalues = 0;

  gt_error_check(err);
  gt_assert(arguments);

  logger = gt_logger_new(arguments->verbose, GT_LOGGER_DEFLT_PREFIX, stderr);
  fixed_readlen = (arguments->maxlen == GT_UNDEF_UWORD &&
      arguments->minlen != GT_UNDEF_UWORD);
  if (arguments->ds)
    starts = gt_disc_distri_new();
  if (arguments->dl)
    lengths = gt_disc_distri_new();
  readlen = arguments->minlen;

  /* load encseq */
  target_loader = gt_encseq_loader_new();
  target = gt_encseq_loader_load(target_loader, argv[parsed_args], err);
  if (target == NULL)
    had_err = -1;
  if (!had_err) {
    target_reader = gt_encseq_create_reader_with_readmode(target,
                                                          GT_READMODE_FORWARD,
                                                          0);
  }

  if (!had_err)
  {
    target_total_length = gt_encseq_total_length(target);
    gt_logger_log(logger, "number of templates: "GT_WU"",
                  gt_encseq_num_of_sequences(target));
    gt_logger_log(logger, "total template length: "GT_WU"",
                  target_total_length);
    if (arguments->coverage != GT_UNDEF_UWORD)
    {
      gt_logger_log(logger, "required coverage: "GT_WU"",
                            arguments->coverage);
      required_output_bases = arguments->coverage * target_total_length;
      if (arguments->show_progressbar)
        gt_progressbar_start(&progress,
            (GtUint64)required_output_bases);
    }
    else
    {
      gt_assert(arguments->num != GT_UNDEF_UWORD);
      gt_logger_log(logger, "required number of reads: "GT_WU"",
                            arguments->num);
      if (arguments->show_progressbar)
        gt_progressbar_start(&progress, (GtUint64)arguments->num);
    }
    read = gt_str_new();
    description = gt_str_new();
    if (arguments->distlen_file != NULL)
    {
      gt_logger_log(logger, "read length distribution file: %s",
          gt_str_get(arguments->distlen_filename));
      nofvalues = gt_file_size(gt_str_get(arguments->distlen_filename)) /
                       (off_t) (sizeof (GtUword) << 1);
      input_distlen = gt_malloc(sizeof (GtSimreadsDistvalue) * nofvalues);
      for (j = 0; j < nofvalues; j++)
      {
        (void)gt_xfread(&(input_distlen[j].length), sizeof (GtUword),
            (size_t)1, arguments->distlen_file);
        (void)gt_xfread(&(input_distlen[j].value), sizeof (GtUword),
            (size_t)1, arguments->distlen_file);
      }
      for (j = (off_t)1; j < nofvalues; j++)
      {
        input_distlen[j].value += input_distlen[j - 1].value;
      }
    }
    else if (fixed_readlen)
      gt_logger_log(logger, "required read length (fixed): "GT_WU"",
                    arguments->minlen);
    else
      gt_logger_log(logger, "required read length range: "GT_WU"-"GT_WU"",
                    arguments->minlen, arguments->maxlen);
  }

  while (!had_err)
  {
    gt_str_reset(read);
    if (!fixed_readlen)
    {
      if (arguments->distlen_file != NULL)
      {
        gt_assert(input_distlen != NULL);
        readlen = gt_simreads_readlen_from_dist(input_distlen,
            gt_rand_max(input_distlen[nofvalues - 1].value),
            (GtUword)nofvalues);
        gt_assert(readlen <= input_distlen[nofvalues - 1].value);
      }
      else
      {
        readlen = gt_rand_max(arguments->maxlen -
            arguments->minlen) + arguments->minlen;
      }
      if (arguments->dl)
        gt_disc_distri_add(lengths, readlen);
    }
    gt_assert(target_total_length > readlen);
    startpos = gt_rand_max(target_total_length - readlen);
    readmode = (arguments->singlestrand || gt_rand_max(1UL)
      ? GT_READMODE_FORWARD : GT_READMODE_REVCOMPL);
    gt_encseq_reader_reinit_with_readmode(target_reader, target,
                                          readmode, startpos);
    for (i = 0; i < readlen; i++)
    {
      ch = gt_encseq_reader_next_encoded_char(target_reader);
      if (ch == (GtUchar) GT_SEPARATOR)
      {
        break;
      }
      else
      {
        gt_str_append_char(read, gt_alphabet_decode(
                             gt_encseq_alphabet(target), ch));
      }
    }
    if (i < readlen)
    {
      /* a separator was found, discard read and restart */
      continue;
    }
    else
    {
      gt_str_reset(description);
      gt_str_append_cstr(description, "read_");
      gt_str_append_uword(description, output_reads);
      gt_fasta_show_entry(gt_str_get(description),
                          gt_str_get(read),
                          gt_str_length(read),
                          60UL,
                          arguments->outfp);
      output_bases += gt_str_length(read);
      output_reads++;
      if (arguments->verbose && readmode == GT_READMODE_FORWARD)
        output_rcmode_reads++;
      if (arguments->ds)
      {
        if (readmode == GT_READMODE_FORWARD)
          gt_disc_distri_add(starts, startpos);
        else
          gt_disc_distri_add(starts, target_total_length - 1 - startpos);
      }
    }

    /* test break conditions and update progressbar */
    if (arguments->coverage != GT_UNDEF_UWORD)
    {
      if (arguments->show_progressbar)
        progress = (GtUint64)output_bases;
      if (output_bases >= required_output_bases)
        break;
    }
    else
    {
      gt_assert(arguments->num != GT_UNDEF_UWORD);
      if (arguments->show_progressbar)
        progress = (GtUint64)output_reads;
      if (output_reads == arguments->num)
        break;
    }
  }

  if (!had_err)
  {
    gt_logger_log(logger, "coverage: %.3f",
                  (float) output_bases / target_total_length);
    gt_logger_log(logger, "total reads length: "GT_WU"", output_bases);
    if (!fixed_readlen)
      gt_logger_log(logger, "average reads length: %.1f",
                    (float) output_bases / output_reads);
    gt_logger_log(logger, "number of reads: "GT_WU"", output_reads);
    gt_logger_log(logger, "- forward: "GT_WU"",
                  output_reads-output_rcmode_reads);
    gt_logger_log(logger, "- revcompl: "GT_WU"", output_rcmode_reads);
  }

  if (!had_err && arguments->dl)
    had_err = gt_simreads_write_dist_file(
                   "# distribution of read lengths:\n", lengths,
                   arguments->dlfilename, err);
  if (!had_err && arguments->ds)
    had_err = gt_simreads_write_dist_file(
                   "# distribution of start positions:\n", starts,
                   arguments->dsfilename, err);

  if (arguments->show_progressbar)
    gt_progressbar_stop();
  gt_free(input_distlen);
  gt_str_delete(read);
  gt_str_delete(description);
  gt_encseq_reader_delete(target_reader);
  gt_encseq_loader_delete(target_loader);
  gt_encseq_delete(target);
  gt_logger_delete(logger);
  if (arguments->dl)
    gt_disc_distri_delete(lengths);
  if (arguments->ds)
    gt_disc_distri_delete(starts);
  return had_err;
}

// Assembly:
subq $0x168, %rsp            # imm = 0x168
movl %edi, 0x164(%rsp)
movq %rsi, 0x158(%rsp)
movl %edx, 0x154(%rsp)
movq %rcx, 0x148(%rsp)
movq %r8, 0x140(%rsp)
movq 0x148(%rsp), %rax
movq %rax, 0x138(%rsp)
movq $0x0, 0x130(%rsp)
movq $0x0, 0x128(%rsp)
movq $0x0, 0x120(%rsp)
movq $0x0, 0x110(%rsp)
movq $0x0, 0x108(%rsp)
movq $0x0, 0x100(%rsp)
movq $0x0, 0xf8(%rsp)
movq $0x0, 0xf0(%rsp)
movq $0x0, 0xe8(%rsp)
movq $0x0, 0xc0(%rsp)
movl $0x0, 0xb8(%rsp)
movq $0x0, 0xa8(%rsp)
movq $0x0, 0xa0(%rsp)
movq $0x0, 0x98(%rsp)
movq $0x0, 0x90(%rsp)
movq $0x0, 0x80(%rsp)
cmpq $0x0, 0x140(%rsp)
je 0x6f7d2
movq 0x140(%rsp), %rdi
callq 0xd8a60
testb $0x1, %al
jne 0x6f79a
jmp 0x6f7d2
movq 0x5cc7ff(%rip), %rax    # 0x63bfa0
movq (%rax), %rdi
leaq 0x4a6868(%rip), %rsi    # 0x516013
leaq 0x4a6a0d(%rip), %rdx    # 0x5161bf
leaq 0x4bc609(%rip), %rcx    # 0x52bdc2
leaq 0x4bc34b(%rip), %r8     # 0x52bb0b
movl $0x135, %r9d            # imm = 0x135
movb $0x0, %al
callq 0x199f0
callq 0x19370
jmp 0x6f7d4
jmp 0x6f7d6
cmpq $0x0, 0x138(%rsp)
jne 0x6f819
movq 0x5cc7b8(%rip), %rax    # 0x63bfa0
movq (%rax), %rdi
leaq 0x4a6821(%rip), %rsi    # 0x516013
leaq 0x50b366(%rip), %rdx    # 0x57ab5f
leaq 0x4bc5c2(%rip), %rcx    # 0x52bdc2
leaq 0x4bc304(%rip), %r8     # 0x52bb0b
movl $0x136, %r9d            # imm = 0x136
movb $0x0, %al
callq 0x199f0
callq 0x19370
jmp 0x6f81b
movq 0x138(%rsp), %rax
movb 0x21(%rax), %al
movq 0x5cc773(%rip), %rcx    # 0x63bfa0
movq (%rcx), %rdx
leaq 0x4a80b5(%rip), %rsi    # 0x5178ec
andb $0x1, %al
movzbl %al, %edi
callq 0xe7870
movq %rax, 0xa8(%rsp)
movq 0x138(%rsp), %rcx
xorl %eax, %eax
cmpq $-0x1, 0x10(%rcx)
movb %al, 0x7f(%rsp)
jne 0x6f872
movq 0x138(%rsp), %rax
cmpq $-0x1, 0x8(%rax)
setne %al
movb %al, 0x7f(%rsp)
movb 0x7f(%rsp), %al
andb $0x1, %al
movb %al, 0xbf(%rsp)
movq 0x138(%rsp), %rax
testb $0x1, 0x22(%rax)
je 0x6f89a
callq 0xa5080
movq %rax, 0x98(%rsp)
movq 0x138(%rsp), %rax
testb $0x1, 0x23(%rax)
je 0x6f8b5
callq 0xa5080
movq %rax, 0xa0(%rsp)
movq 0x138(%rsp), %rax
movq 0x8(%rax), %rax
movq %rax, 0xd0(%rsp)
callq 0xb7a40
movq %rax, 0x128(%rsp)
movq 0x128(%rsp), %rdi
movq 0x158(%rsp), %rax
movslq 0x154(%rsp), %rcx
movq (%rax,%rcx,8), %rsi
movq 0x140(%rsp), %rdx
callq 0xb7aa0
movq %rax, 0x130(%rsp)
cmpq $0x0, 0x130(%rsp)
jne 0x6f91d
movl $0xffffffff, 0xb8(%rsp) # imm = 0xFFFFFFFF
cmpl $0x0, 0xb8(%rsp)
jne 0x6f942
movq 0x130(%rsp), %rdi
xorl %esi, %esi
xorl %eax, %eax
movl %eax, %edx
callq 0xac380
movq %rax, 0x120(%rsp)
cmpl $0x0, 0xb8(%rsp)
jne 0x6fce1
movq 0x130(%rsp), %rdi
callq 0xa9d00
movq %rax, 0xe0(%rsp)
movq 0xa8(%rsp), %rax
movq %rax, 0x70(%rsp)
movq 0x130(%rsp), %rdi
callq 0xa9d50
movq 0x70(%rsp), %rdi
movq %rax, %rdx
leaq 0x4bc447(%rip), %rsi    # 0x52bdd5
movb $0x0, %al
callq 0xe7cd0
movq 0xa8(%rsp), %rdi
movq 0xe0(%rsp), %rdx
leaq 0x4bc442(%rip), %rsi    # 0x52bdee
movb $0x0, %al
callq 0xe7cd0
movq 0x138(%rsp), %rax
cmpq $-0x1, 0x18(%rax)
je 0x6fa29
movq 0xa8(%rsp), %rdi
movq 0x138(%rsp), %rax
movq 0x18(%rax), %rdx
leaq 0x4bc42c(%rip), %rsi    # 0x52be09
movb $0x0, %al
callq 0xe7cd0
movq 0x138(%rsp), %rax
movq 0x18(%rax), %rax
imulq 0xe0(%rsp), %rax
movq %rax, 0xe8(%rsp)
movq 0x138(%rsp), %rax
testb $0x1, 0x20(%rax)
je 0x6fa24
movq 0xe8(%rsp), %rsi
leaq 0xc0(%rsp), %rdi
callq 0xf9830
jmp 0x6fabc
jmp 0x6fa2b
movq 0x138(%rsp), %rax
cmpq $-0x1, (%rax)
jne 0x6fa71
movq 0x5cc560(%rip), %rax    # 0x63bfa0
movq (%rax), %rdi
leaq 0x4a65c9(%rip), %rsi    # 0x516013
leaq 0x4bc3cf(%rip), %rdx    # 0x52be20
leaq 0x4bc36a(%rip), %rcx    # 0x52bdc2
leaq 0x4bc0ac(%rip), %r8     # 0x52bb0b
movl $0x15e, %r9d            # imm = 0x15E
movb $0x0, %al
callq 0x199f0
callq 0x19370
jmp 0x6fa73
movq 0xa8(%rsp), %rdi
movq 0x138(%rsp), %rax
movq (%rax), %rdx
leaq 0x4bc3b4(%rip), %rsi    # 0x52be41
movb $0x0, %al
callq 0xe7cd0
movq 0x138(%rsp), %rax
testb $0x1, 0x20(%rax)
je 0x6faba
movq 0x138(%rsp), %rax
movq (%rax), %rsi
leaq 0xc0(%rsp), %rdi
callq 0xf9830
jmp 0x6fabc
callq 0x11d4a0
movq %rax, 0x110(%rsp)
callq 0x11d4a0
movq %rax, 0x108(%rsp)
movq 0x138(%rsp), %rax
cmpq $0x0, 0x50(%rax)
je 0x6fc81
movq 0xa8(%rsp), %rax
movq %rax, 0x68(%rsp)
movq 0x138(%rsp), %rax
movq 0x48(%rax), %rdi
callq 0x11dee0
movq 0x68(%rsp), %rdi
movq %rax, %rdx
leaq 0x4bc349(%rip), %rsi    # 0x52be5f
movb $0x0, %al
callq 0xe7cd0
movq 0x138(%rsp), %rax
movq 0x48(%rax), %rdi
callq 0x11dee0
movq %rax, %rdi
callq 0xdf2a0
movl $0x10, %ecx
cqto
idivq %rcx
movq %rax, 0x80(%rsp)
movq 0x80(%rsp), %rdi
shlq $0x4, %rdi
leaq 0x4bbfb0(%rip), %rsi    # 0x52bb0b
movl $0x16c, %edx            # imm = 0x16C
callq 0xe80f0
movq %rax, 0x90(%rsp)
movq $0x0, 0x88(%rsp)
movq 0x88(%rsp), %rax
cmpq 0x80(%rsp), %rax
jge 0x6fc10
movq 0x90(%rsp), %rdi
movq 0x88(%rsp), %rax
shlq $0x4, %rax
addq %rax, %rdi
addq $0x8, %rdi
movq 0x138(%rsp), %rax
movq 0x50(%rax), %rcx
movl $0x8, %esi
movl $0x1, %edx
callq 0x126c30
movq 0x90(%rsp), %rdi
movq 0x88(%rsp), %rax
shlq $0x4, %rax
addq %rax, %rdi
movq 0x138(%rsp), %rax
movq 0x50(%rax), %rcx
movl $0x8, %esi
movl $0x1, %edx
callq 0x126c30
movq 0x88(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x88(%rsp)
jmp 0x6fb79
movq $0x1, 0x88(%rsp)
movq 0x88(%rsp), %rax
cmpq 0x80(%rsp), %rax
jge 0x6fc7f
movq 0x90(%rsp), %rax
movq 0x88(%rsp), %rcx
subq $0x1, %rcx
shlq $0x4, %rcx
addq %rcx, %rax
movq (%rax), %rcx
movq 0x90(%rsp), %rax
movq 0x88(%rsp), %rdx
shlq $0x4, %rdx
addq %rdx, %rax
addq (%rax), %rcx
movq %rcx, (%rax)
movq 0x88(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x88(%rsp)
jmp 0x6fc1c
jmp 0x6fcdf
testb $0x1, 0xbf(%rsp)
je 0x6fcaf
movq 0xa8(%rsp), %rdi
movq 0x138(%rsp), %rax
movq 0x8(%rax), %rdx
leaq 0x4bc1db(%rip), %rsi    # 0x52be81
movb $0x0, %al
callq 0xe7cd0
jmp 0x6fcdd
movq 0xa8(%rsp), %rdi
movq 0x138(%rsp), %rax
movq 0x8(%rax), %rdx
movq 0x138(%rsp), %rax
movq 0x10(%rax), %rcx
leaq 0x4bc1cd(%rip), %rsi    # 0x52bea3
movb $0x0, %al
callq 0xe7cd0
jmp 0x6fcdf
jmp 0x6fce1
jmp 0x6fce3
cmpl $0x0, 0xb8(%rsp)
setne %al
xorb $-0x1, %al
testb $0x1, %al
jne 0x6fcf9
jmp 0x701fb
movq 0x110(%rsp), %rdi
callq 0x11e110
testb $0x1, 0xbf(%rsp)
jne 0x6fe75
movq 0x138(%rsp), %rax
cmpq $0x0, 0x50(%rax)
je 0x6fe1f
jmp 0x6fd29
cmpq $0x0, 0x90(%rsp)
jne 0x6fd6c
movq 0x5cc265(%rip), %rax    # 0x63bfa0
movq (%rax), %rdi
leaq 0x4a62ce(%rip), %rsi    # 0x516013
leaq 0x4bc17b(%rip), %rdx    # 0x52bec7
leaq 0x4bc06f(%rip), %rcx    # 0x52bdc2
leaq 0x4bbdb1(%rip), %r8     # 0x52bb0b
movl $0x188, %r9d            # imm = 0x188
movb $0x0, %al
callq 0x199f0
callq 0x19370
jmp 0x6fd6e
movq 0x90(%rsp), %rax
movq %rax, 0x60(%rsp)
movq 0x90(%rsp), %rax
movq 0x80(%rsp), %rcx
subq $0x1, %rcx
shlq $0x4, %rcx
addq %rcx, %rax
movq (%rax), %rdi
callq 0xec350
movq 0x60(%rsp), %rdi
movq %rax, %rsi
movq 0x80(%rsp), %rdx
callq 0x70570
movq %rax, 0xd0(%rsp)
movq 0xd0(%rsp), %rax
movq 0x90(%rsp), %rcx
movq 0x80(%rsp), %rdx
subq $0x1, %rdx
shlq $0x4, %rdx
addq %rdx, %rcx
cmpq (%rcx), %rax
jbe 0x6fe1b
movq 0x5cc1b6(%rip), %rax    # 0x63bfa0
movq (%rax), %rdi
leaq 0x4a621f(%rip), %rsi    # 0x516013
leaq 0x4bc0e2(%rip), %rdx    # 0x52bedd
leaq 0x4bbfc0(%rip), %rcx    # 0x52bdc2
leaq 0x4bbd02(%rip), %r8     # 0x52bb0b
movl $0x18c, %r9d            # imm = 0x18C
movb $0x0, %al
callq 0x199f0
callq 0x19370
jmp 0x6fe1d
jmp 0x6fe50
movq 0x138(%rsp), %rax
movq 0x10(%rax), %rdi
movq 0x138(%rsp), %rax
subq 0x8(%rax), %rdi
callq 0xec350
movq 0x138(%rsp), %rcx
addq 0x8(%rcx), %rax
movq %rax, 0xd0(%rsp)
movq 0x138(%rsp), %rax
testb $0x1, 0x23(%rax)
je 0x6fe73
movq 0xa0(%rsp), %rdi
movq 0xd0(%rsp), %rsi
callq 0xa50a0
jmp 0x6fe75
jmp 0x6fe77
movq 0xe0(%rsp), %rax
cmpq 0xd0(%rsp), %rax
ja 0x6fec1
movq 0x5cc110(%rip), %rax    # 0x63bfa0
movq (%rax), %rdi
leaq 0x4a6179(%rip), %rsi    # 0x516013
leaq 0x4bc06a(%rip), %rdx    # 0x52bf0b
leaq 0x4bbf1a(%rip), %rcx    # 0x52bdc2
leaq 0x4bbc5c(%rip), %r8     # 0x52bb0b
movl $0x196, %r9d            # imm = 0x196
movb $0x0, %al
callq 0x199f0
callq 0x19370
jmp 0x6fec3
movq 0xe0(%rsp), %rdi
subq 0xd0(%rsp), %rdi
callq 0xec350
movq %rax, 0xd8(%rsp)
movq 0x138(%rsp), %rcx
movb $0x1, %al
testb $0x1, 0x24(%rcx)
movb %al, 0x5f(%rsp)
jne 0x6ff09
movl $0x1, %edi
callq 0xec350
cmpq $0x0, %rax
setne %al
movb %al, 0x5f(%rsp)
movb 0x5f(%rsp), %dl
movl $0x3, %eax
xorl %ecx, %ecx
testb $0x1, %dl
cmovnel %ecx, %eax
movl %eax, 0x11c(%rsp)
movq 0x120(%rsp), %rdi
movq 0x130(%rsp), %rsi
movl 0x11c(%rsp), %edx
movq 0xd8(%rsp), %rcx
callq 0xabdb0
movq $0x0, 0xc8(%rsp)
movq 0xc8(%rsp), %rax
cmpq 0xd0(%rsp), %rax
jae 0x6ffda
movq 0x120(%rsp), %rdi
callq 0xaae30
movb %al, 0xb7(%rsp)
movzbl 0xb7(%rsp), %eax
cmpl $0xff, %eax
jne 0x6ff88
jmp 0x6ffda
movq 0x110(%rsp), %rax
movq %rax, 0x50(%rsp)
movq 0x130(%rsp), %rdi
callq 0xb0f00
movq %rax, %rdi
movzbl 0xb7(%rsp), %esi
callq 0x7f7b0
movq 0x50(%rsp), %rdi
movsbl %al, %esi
callq 0x11da70
jmp 0x6ffc1
movq 0xc8(%rsp), %rax
addq $0x1, %rax
movq %rax, 0xc8(%rsp)
jmp 0x6ff51
movq 0xc8(%rsp), %rax
cmpq 0xd0(%rsp), %rax
jae 0x6fff1
jmp 0x6fce3
movq 0x108(%rsp), %rdi
callq 0x11e110
movq 0x108(%rsp), %rdi
leaq 0x4bbf1c(%rip), %rsi    # 0x52bf29
callq 0x11d550
movq 0x108(%rsp), %rdi
movq 0xf8(%rsp), %rsi
callq 0x11d930
movq 0x108(%rsp), %rdi
callq 0x11dee0
movq %rax, 0x40(%rsp)
movq 0x110(%rsp), %rdi
callq 0x11dee0
movq %rax, 0x48(%rsp)
movq 0x110(%rsp), %rdi
callq 0x11dfa0
movq 0x40(%rsp), %rdi
movq 0x48(%rsp), %rsi
movq %rax, %rdx
movq 0x138(%rsp), %rax
movq 0x30(%rax), %r8
movl $0x3c, %ecx
callq 0xdbd10
movq 0x110(%rsp), %rdi
callq 0x11dfa0
addq 0x100(%rsp), %rax
movq %rax, 0x100(%rsp)
movq 0xf8(%rsp), %rax
addq $0x1, %rax
movq %rax, 0xf8(%rsp)
movq 0x138(%rsp), %rax
testb $0x1, 0x21(%rax)
je 0x700d8
cmpl $0x0, 0x11c(%rsp)
jne 0x700d8
movq 0xf0(%rsp), %rax
addq $0x1, %rax
movq %rax, 0xf0(%rsp)
movq 0x138(%rsp), %rax
testb $0x1, 0x22(%rax)
je 0x7012a
cmpl $0x0, 0x11c(%rsp)
jne 0x70107
movq 0x98(%rsp), %rdi
movq 0xd8(%rsp), %rsi
callq 0xa50a0
jmp 0x70128
movq 0x98(%rsp), %rdi
movq 0xe0(%rsp), %rsi
subq $0x1, %rsi
subq 0xd8(%rsp), %rsi
callq 0xa50a0
jmp 0x7012a
jmp 0x7012c
movq 0x138(%rsp), %rax
cmpq $-0x1, 0x18(%rax)
je 0x70175
movq 0x138(%rsp), %rax
testb $0x1, 0x20(%rax)
je 0x70159
movq 0x100(%rsp), %rax
movq %rax, 0xc0(%rsp)
movq 0x100(%rsp), %rax
cmpq 0xe8(%rsp), %rax
jb 0x70170
jmp 0x701fb
jmp 0x701f6
jmp 0x70177
movq 0x138(%rsp), %rax
cmpq $-0x1, (%rax)
jne 0x701bd
movq 0x5cbe14(%rip), %rax    # 0x63bfa0
movq (%rax), %rdi
leaq 0x4a5e7d(%rip), %rsi    # 0x516013
leaq 0x4bbc83(%rip), %rdx    # 0x52be20
leaq 0x4bbc1e(%rip), %rcx    # 0x52bdc2
leaq 0x4bb960(%rip), %r8     # 0x52bb0b
movl $0x1cf, %r9d            # imm = 0x1CF
movb $0x0, %al
callq 0x199f0
callq 0x19370
jmp 0x701bf
movq 0x138(%rsp), %rax
testb $0x1, 0x20(%rax)
je 0x701dd
movq 0xf8(%rsp), %rax
movq %rax, 0xc0(%rsp)
movq 0xf8(%rsp), %rax
movq 0x138(%rsp), %rcx
cmpq (%rcx), %rax
jne 0x701f4
jmp 0x701fb
jmp 0x701f6
jmp 0x6fce3
cmpl $0x0, 0xb8(%rsp)
jne 0x7041b
movq 0xa8(%rsp), %rax
movq %rax, 0x30(%rsp)
movq 0x100(%rsp), %rax
movq %rax, %rdx
shrq %rdx
movl %eax, %ecx
andl $0x1, %ecx
orq %rdx, %rcx
cvtsi2ss %rcx, %xmm0
addss %xmm0, %xmm0
cvtsi2ss %rax, %xmm1
movss %xmm1, 0x38(%rsp)
testq %rax, %rax
movss %xmm0, 0x3c(%rsp)
js 0x70257
movss 0x38(%rsp), %xmm0
movss %xmm0, 0x3c(%rsp)
movss 0x3c(%rsp), %xmm0
movss %xmm0, 0x24(%rsp)
movq 0xe0(%rsp), %rax
movq %rax, %rdx
shrq %rdx
movl %eax, %ecx
andl $0x1, %ecx
orq %rdx, %rcx
cvtsi2ss %rcx, %xmm0
addss %xmm0, %xmm0
cvtsi2ss %rax, %xmm1
movss %xmm1, 0x28(%rsp)
testq %rax, %rax
movss %xmm0, 0x2c(%rsp)
js 0x702a4
movss 0x28(%rsp), %xmm0
movss %xmm0, 0x2c(%rsp)
movq 0x30(%rsp), %rdi
movss 0x24(%rsp), %xmm0
movss 0x2c(%rsp), %xmm1
divss %xmm1, %xmm0
cvtss2sd %xmm0, %xmm0
leaq 0x4bbc6b(%rip), %rsi    # 0x52bf2f
movb $0x1, %al
callq 0xe7cd0
movq 0xa8(%rsp), %rdi
movq 0x100(%rsp), %rdx
leaq 0x4bbc5c(%rip), %rsi    # 0x52bf3e
movb $0x0, %al
callq 0xe7cd0
testb $0x1, 0xbf(%rsp)
jne 0x703b9
movq 0xa8(%rsp), %rax
movq %rax, 0x10(%rsp)
movq 0x100(%rsp), %rax
movq %rax, %rdx
shrq %rdx
movl %eax, %ecx
andl $0x1, %ecx
orq %rdx, %rcx
cvtsi2ss %rcx, %xmm0
addss %xmm0, %xmm0
cvtsi2ss %rax, %xmm1
movss %xmm1, 0x1c(%rsp)
testq %rax, %rax
movss %xmm0, 0x20(%rsp)
js 0x70345
movss 0x1c(%rsp), %xmm0
movss %xmm0, 0x20(%rsp)
movss 0x20(%rsp), %xmm0
movss %xmm0, 0x4(%rsp)
movq 0xf8(%rsp), %rax
movq %rax, %rdx
shrq %rdx
movl %eax, %ecx
andl $0x1, %ecx
orq %rdx, %rcx
cvtsi2ss %rcx, %xmm0
addss %xmm0, %xmm0
cvtsi2ss %rax, %xmm1
movss %xmm1, 0x8(%rsp)
testq %rax, %rax
movss %xmm0, 0xc(%rsp)
js 0x70392
movss 0x8(%rsp), %xmm0
movss %xmm0, 0xc(%rsp)
movq 0x10(%rsp), %rdi
movss 0x4(%rsp), %xmm0
movss 0xc(%rsp), %xmm1
divss %xmm1, %xmm0
cvtss2sd %xmm0, %xmm0
leaq 0x4bbba4(%rip), %rsi    # 0x52bf56
movb $0x1, %al
callq 0xe7cd0
movq 0xa8(%rsp), %rdi
movq 0xf8(%rsp), %rdx
leaq 0x4bba7a(%rip), %rsi    # 0x52be4a
movb $0x0, %al
callq 0xe7cd0
movq 0xa8(%rsp), %rdi
movq 0xf8(%rsp), %rdx
subq 0xf0(%rsp), %rdx
leaq 0x4bbb7b(%rip), %rsi    # 0x52bf71
movb $0x0, %al
callq 0xe7cd0
movq 0xa8(%rsp), %rdi
movq 0xf0(%rsp), %rdx
leaq 0x4bbb6c(%rip), %rsi    # 0x52bf80
movb $0x0, %al
callq 0xe7cd0
cmpl $0x0, 0xb8(%rsp)
jne 0x70462
movq 0x138(%rsp), %rax
testb $0x1, 0x23(%rax)
je 0x70462
movq 0xa0(%rsp), %rsi
movq 0x138(%rsp), %rax
movq 0x40(%rax), %rdx
movq 0x140(%rsp), %rcx
leaq 0x4bbb3a(%rip), %rdi    # 0x52bf90
callq 0x70720
movl %eax, 0xb8(%rsp)
cmpl $0x0, 0xb8(%rsp)
jne 0x704a9
movq 0x138(%rsp), %rax
testb $0x1, 0x22(%rax)
je 0x704a9
movq 0x98(%rsp), %rsi
movq 0x138(%rsp), %rax
movq 0x38(%rax), %rdx
movq 0x140(%rsp), %rcx
leaq 0x4bbb14(%rip), %rdi    # 0x52bfb1
callq 0x70720
movl %eax, 0xb8(%rsp)
movq 0x138(%rsp), %rax
testb $0x1, 0x20(%rax)
je 0x704bc
callq 0xfa220
movq 0x90(%rsp), %rdi
leaq 0x4bb640(%rip), %rsi    # 0x52bb0b
movl $0x1f0, %edx            # imm = 0x1F0
callq 0xe88c0
movq 0x110(%rsp), %rdi
callq 0x11f560
movq 0x108(%rsp), %rdi
callq 0x11f560
movq 0x120(%rsp), %rdi
callq 0xac3f0
movq 0x128(%rsp), %rdi
callq 0xb7e50
movq 0x130(%rsp), %rdi
callq 0xae070
movq 0xa8(%rsp), %rdi
callq 0xe7ed0
movq 0x138(%rsp), %rax
testb $0x1, 0x23(%rax)
je 0x7053e
movq 0xa0(%rsp), %rdi
callq 0xa5bf0
movq 0x138(%rsp), %rax
testb $0x1, 0x22(%rax)
je 0x70559
movq 0x98(%rsp), %rdi
callq 0xa5bf0
movl 0xb8(%rsp), %eax
addq $0x168, %rsp            # imm = 0x168
retq
nopl (%rax,%rax)