// File: /workspace/github_c_makefile_star2_O3/genometools[P]genometools/src/extended/condenseq_creator.c
// Function: gt_condenseq_creator_create
int gt_condenseq_creator_create(GtCondenseqCreator *condenseq_creator,
                                GtStr *basename,
                                GtEncseq *encseq,
                                GtLogger *logger,
                                GtLogger *kdb_logger,
                                GtError *err)
{
  int had_err = 0;
  GtCondenseq *ces;
  FILE *fp = NULL;
  GtUword buffersize;
  GtTimer *timer = NULL;
  gt_assert(condenseq_creator != NULL);
  gt_assert(encseq != NULL);

  gt_logger_log(logger, "number of kmer-pos cutoff setting:");
  if (condenseq_creator->cutoff_value == GT_UNDEF_UWORD)
    gt_logger_log(logger, "mean/" GT_WU, condenseq_creator->mean_fraction);
  else if (condenseq_creator->cutoff_value == 0)
    gt_logger_log(logger, "disabled");
  else
    gt_logger_log(logger, GT_WU, condenseq_creator->cutoff_value);

  gt_logger_log(logger, "xdrop extension settings:");
  if (condenseq_creator->use_diagonals) {
    if (condenseq_creator->use_full_diags)
      gt_logger_log(logger, "use full diagonals");
    else
      gt_logger_log(logger, "use sparse diagonals");
  }
  else if (condenseq_creator->extend_all_kmers)
    gt_logger_log(logger, "brute force xdrop extension");
  else
    gt_logger_log(logger, "filtered xdrop extension");

  if (gt_showtime_enabled()) {
    timer = gt_timer_new_with_progress_description("create condenseq");
    gt_timer_start(timer);
  }
  condenseq_creator->input_es = encseq;
  ces = gt_condenseq_new(encseq, logger);
  /* TODO DW: check if these values make sense. and if after init the buffer is
     always flushed! -> should be -> init_kmer_db*/
  buffersize = condenseq_creator->initsize * 100;
  if (buffersize > (GtUword) 100000)
    buffersize = (GtUword) 100000;
  gt_log_log("buffersize for kmer-db: " GT_WU, buffersize);
  if (gt_showtime_enabled())
    gt_timer_show_progress(timer, "create kmer db", stderr);
  condenseq_creator->kmer_db =
    gt_kmer_database_new(gt_alphabet_num_of_chars(ces->alphabet),
                         condenseq_creator->kmersize,
                         buffersize,
                         encseq);
  if (condenseq_creator->use_cutoff) {
    if (condenseq_creator->mean_cutoff)
      gt_kmer_database_use_mean_cutoff(condenseq_creator->kmer_db,
                                       condenseq_creator->mean_fraction,
                                       GT_CES_C_MIN_POS_NUM_CUTOFF);
    else
      gt_kmer_database_set_cutoff(condenseq_creator->kmer_db,
                                  condenseq_creator->cutoff_value);
    if (condenseq_creator->prune_kmer_db)
      gt_kmer_database_set_prune(condenseq_creator->kmer_db);
  }
  condenseq_creator->ces = ces;
  if (condenseq_creator->use_diagonals || condenseq_creator->use_full_diags) {
    if (gt_showtime_enabled())
      gt_timer_show_progress(timer, "create diagonals", stderr);
    condenseq_creator->diagonals =
      gt_malloc(sizeof (*condenseq_creator->diagonals));
    if (condenseq_creator->use_full_diags) {
      condenseq_creator->diagonals->full =
        ces_c_diagonals_full_new((size_t) gt_encseq_total_length(encseq));
    }
    else
      condenseq_creator->diagonals->full = NULL;
    if (condenseq_creator->use_diagonals) {
      condenseq_creator->diagonals->sparse =
        ces_c_sparse_diags_new((size_t) condenseq_creator->initsize);
    }
    else
      condenseq_creator->diagonals->sparse = NULL;
  }
  else
    condenseq_creator->diagonals = NULL;

  ces_c_xdrops = 0;
  had_err = ces_c_analyse(condenseq_creator, timer, err);

  if (!had_err) {
    if (gt_showtime_enabled())
      gt_timer_show_progress(timer, "write data, alphabet", stderr);
    gt_log_log(GT_WU " kmer positions in final kmer_db",
               gt_kmer_database_get_kmer_count(condenseq_creator->kmer_db));
    gt_log_log(GT_WU " xdrop calls.", ces_c_xdrops);
    gt_log_log(GT_WU " uniques", condenseq_creator->ces->uds_nelems);
    gt_log_log(GT_WU " links", condenseq_creator->ces->lds_nelems);
    gt_log_log(GT_WU " bytes in final kmer_db",
               gt_kmer_database_get_used_size(condenseq_creator->kmer_db));
    gt_log_log(GT_WU " bytes allocated for kmer_db",
               gt_kmer_database_get_byte_size(condenseq_creator->kmer_db));

    if (gt_log_enabled() &&
        (condenseq_creator->use_diagonals ||
         condenseq_creator->use_full_diags)) {
#ifdef GT_CONDENSEQ_CREATOR_DIST_DEBUG
      GtFile *out = gt_file_new_from_fileptr(gt_log_fp());
      gt_log_log("dist of number added:");
      gt_disc_distri_show(condenseq_creator->add, out);
      gt_log_log("dist of number replaced:");
      gt_disc_distri_show(condenseq_creator->replace, out);
      gt_log_log("dist of number deleted:");
      gt_disc_distri_show(condenseq_creator->delete, out);
      gt_file_delete_without_handle(out);
#endif
      gt_log_log("min_d: " GT_WU ", max_d: " GT_WU " (# diagonals: " GT_WU ") ",
                 condenseq_creator->min_d,
                 condenseq_creator->max_d,
                 condenseq_creator->max_d - condenseq_creator->min_d + 1);
      if (condenseq_creator->diagonals != NULL) {
        if (condenseq_creator->diagonals->sparse != NULL)
          gt_log_log("Sparse diagonals allocated: " GT_WU ", max used: " GT_WU,
                     condenseq_creator->diagonals->sparse->allocated,
                     condenseq_creator->diagonals->sparse->max);
        if (condenseq_creator->diagonals->full != NULL)
          gt_log_log("Full diagonals allocated: " GT_WU,
                     condenseq_creator->diagonals->full->allocated);
      }
    }
    had_err = gt_alphabet_to_file(ces->alphabet,
                                  gt_str_get(basename), err);
  }
  if (!had_err) {
    fp = gt_fa_fopen_with_suffix(gt_str_get(basename),
                                 GT_CONDENSEQ_FILE_SUFFIX,
                                 "w", err);
    if (fp == NULL)
      had_err = -1;
  }
  if (!had_err) {
    if (gt_showtime_enabled())
      gt_timer_show_progress(timer, "write data, condenseq", stderr);
    had_err = gt_condenseq_write(condenseq_creator->ces, fp, err);
    gt_fa_xfclose(fp);
    fp = NULL;
  }
  if (!had_err) {
    fp = gt_fa_fopen_with_suffix(gt_str_get(basename), ".fas", "w", err);
    if (fp == NULL)
      had_err = -1;
  }
  if (!had_err) {
    GtEncseqEncoder *es_enc;
    GtStrArray *toencode;
    if (gt_showtime_enabled())
      gt_timer_show_progress(timer, "write data, unique fasta", stderr);
    ces_c_write_unique_fasta(condenseq_creator, fp);
    gt_fa_xfclose(fp);
    /*encoding of unique_es*/
    if (gt_showtime_enabled())
      gt_timer_show_progress(timer, "write data, unique encseq", stderr);
    es_enc = gt_encseq_encoder_new();
    gt_encseq_encoder_disable_description_support(es_enc);
    gt_encseq_encoder_do_not_create_md5_tab(es_enc);
    toencode = gt_str_array_new();
    gt_str_array_add(toencode, basename);
    gt_str_append_cstr(gt_str_array_get_str(toencode, 0), ".fas");
    had_err = gt_encseq_encoder_encode(es_enc,
                                       toencode,
                                       gt_str_get(basename),
                                       err);
    gt_encseq_encoder_delete(es_enc);
    gt_str_array_delete(toencode);
  }
  condenseq_creator->input_es = NULL;
  gt_condenseq_delete(ces);
  condenseq_creator->ces = NULL;
  ces_c_diags_delete(condenseq_creator->diagonals);
  condenseq_creator->diagonals = NULL;
  gt_kmer_database_print(condenseq_creator->kmer_db,
                         kdb_logger,
                         gt_logger_enabled(logger));
  gt_kmer_database_delete(condenseq_creator->kmer_db);
  condenseq_creator->kmer_db = NULL;
  if (gt_showtime_enabled())
    gt_timer_show_progress_final(timer, stderr);
  gt_timer_delete(timer);
  return had_err;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x48, %rsp
testq %rdi, %rdi
je 0x13040c
movq %rdx, %r14
movq %rsi, 0x30(%rsp)
testq %rdx, %rdx
je 0x130411
movq %r9, %r13
movq %r8, %r15
movq %rcx, %r12
movq %rdi, %rbx
leaq 0x24a2f0(%rip), %rsi    # 0x3798e4
movq %rcx, %rdi
xorl %eax, %eax
callq 0x103fe1
movq 0x108(%rbx), %rdx
testq %rdx, %rdx
je 0x12f620
cmpq $-0x1, %rdx
jne 0x12f633
movq 0x118(%rbx), %rdx
leaq 0x24a2e9(%rip), %rsi    # 0x379907
jmp 0x12f63a
leaq 0x228b89(%rip), %rsi    # 0x3581b0
movq %r12, %rdi
xorl %eax, %eax
callq 0x103fe1
jmp 0x12f644
leaq 0x28c982(%rip), %rsi    # 0x3bbfbc
movq %r12, %rdi
xorl %eax, %eax
callq 0x103fe1
leaq 0x24a2c5(%rip), %rsi    # 0x379910
movq %r12, %rdi
xorl %eax, %eax
callq 0x103fe1
cmpb $0x1, 0x144(%rbx)
jne 0x12f675
leaq 0x24a2c5(%rip), %rax    # 0x37992a
leaq 0x24a2d1(%rip), %rsi    # 0x37993d
cmpb $0x0, 0x145(%rbx)
jmp 0x12f68a
leaq 0x24a2d6(%rip), %rax    # 0x379952
leaq 0x24a2eb(%rip), %rsi    # 0x37996e
cmpb $0x0, 0x146(%rbx)
cmovneq %rax, %rsi
movq $0x0, 0x8(%rsp)
movq %r12, %rdi
xorl %eax, %eax
callq 0x103fe1
callq 0x119160
testb %al, %al
movq %r15, 0x40(%rsp)
je 0x12f6c8
leaq 0x24a2d1(%rip), %rdi    # 0x379987
callq 0x11c986
movq %rax, 0x8(%rsp)
movq %rax, %rdi
callq 0x11c9e3
movq %r14, (%rbx)
movq %r14, %rdi
movq %r12, %rsi
callq 0x12bc56
movq %rax, 0x28(%rsp)
imulq $0x64, 0xe8(%rbx), %rax
movl $0x186a0, %r15d         # imm = 0x186A0
cmpq %r15, %rax
cmovbq %rax, %r15
leaq 0x24a2a1(%rip), %rdi    # 0x379998
movq %r15, %rsi
xorl %eax, %eax
callq 0x103d72
callq 0x119160
testb %al, %al
je 0x12f725
movq 0x38986f(%rip), %rax    # 0x4b8f80
movq (%rax), %rdx
leaq 0x24a299(%rip), %rsi    # 0x3799b4
movq 0x8(%rsp), %rdi
callq 0x11cc90
movq 0x28(%rsp), %rax
movq (%rax), %rdi
callq 0xd11be
movl 0x138(%rbx), %esi
movl %eax, %edi
movq %r15, %rdx
movq %r14, %rcx
callq 0x156d64
movq %rax, 0x8(%rbx)
cmpb $0x1, 0x147(%rbx)
jne 0x12f792
cmpb $0x1, 0x148(%rbx)
jne 0x12f771
movq 0x118(%rbx), %rsi
movl $0x1e, %edx
movq %rax, %rdi
callq 0x157c1e
jmp 0x12f780
movq 0x108(%rbx), %rsi
movq %rax, %rdi
callq 0x157bef
cmpb $0x1, 0x149(%rbx)
jne 0x12f792
movq 0x8(%rbx), %rdi
callq 0x157c4d
movq 0x28(%rsp), %rax
movq %rax, 0x28(%rbx)
cmpb $0x0, 0x144(%rbx)
movq %r12, 0x20(%rsp)
jne 0x12f7b6
cmpb $0x1, 0x145(%rbx)
jne 0x12f90f
callq 0x119160
testb %al, %al
je 0x12f7da
movq 0x3897ba(%rip), %rax    # 0x4b8f80
movq (%rax), %rdx
leaq 0x24a1f3(%rip), %rsi    # 0x3799c3
movq 0x8(%rsp), %rdi
callq 0x11cc90
leaq 0x249ea5(%rip), %rsi    # 0x379686
movl $0x10, %edi
movl $0x6af, %edx            # imm = 0x6AF
callq 0x104226
movq %rax, 0x30(%rbx)
cmpb $0x1, 0x145(%rbx)
jne 0x12f865
movq %r14, %rdi
callq 0xe7b9c
movq %rax, %r14
leaq 0x249e77(%rip), %rbp    # 0x379686
movl $0x18, %edi
movq %rbp, %rsi
movl $0x5d, %edx
callq 0x104226
movq %rax, %r15
leaq (,%r14,8), %r12
movq %r12, %rdi
movq %rbp, %rsi
movl $0x5e, %edx
callq 0x104226
movq %rax, (%r15)
testq %r14, %r14
je 0x12f854
movq %rax, %rdi
movl $0xff, %esi
movq %r12, %rdx
callq 0x173a0
movq %r14, 0x8(%r15)
movq %r14, 0x10(%r15)
movq 0x30(%rbx), %rax
movq %r15, (%rax)
jmp 0x12f86c
movq $0x0, (%rax)
cmpb $0x1, 0x144(%rbx)
jne 0x12f905
movq 0xe8(%rbx), %rbp
leaq 0x249dff(%rip), %r15    # 0x379686
movl $0x50, %edi
movq %r15, %rsi
movl $0x75, %edx
callq 0x104226
movq %rax, %r14
movq %rbp, %r12
shlq $0x4, %r12
movq %r12, %rdi
movq %r15, %rsi
movl $0x76, %edx
callq 0x104226
movq %rax, 0x8(%r14)
movq %rbp, 0x30(%r14)
movq $0x0, 0x48(%r14)
movq %r12, %rdi
movq %r15, %rsi
movl $0x79, %edx
callq 0x104226
movq %rax, (%r14)
movq %rbp, 0x28(%r14)
xorps %xmm0, %xmm0
movups %xmm0, 0x18(%r14)
movups %xmm0, 0x38(%r14)
leaq 0xdeb(%rip), %rdi       # 0x1306d9
xorl %esi, %esi
xorl %edx, %edx
callq 0x165f7c
movq %rax, 0x10(%r14)
movq 0x30(%rbx), %rax
movq %r14, 0x8(%rax)
jmp 0x12f917
movq $0x0, 0x8(%rax)
jmp 0x12f917
movq $0x0, 0x30(%rbx)
movq $0x0, 0x38edc6(%rip) # 0x4be6e8
movl 0x138(%rbx), %edx
movq (%rbx), %rdi
movq 0xf0(%rbx), %rcx
xorl %esi, %esi
callq 0x1ee606
movq %rax, 0x18(%rbx)
callq 0x119160
testb %al, %al
je 0x12f961
movq 0x389633(%rip), %rax    # 0x4b8f80
movq (%rax), %rdx
leaq 0x24a6d7(%rip), %rsi    # 0x37a02e
movq 0x8(%rsp), %rdi
callq 0x11cc90
movl 0x138(%rbx), %eax
movq %rax, 0x10(%rsp)
cmpb $0x1, 0x147(%rbx)
jne 0x12f987
cmpb $0x1, 0x149(%rbx)
jne 0x12f987
movq 0x8(%rbx), %rdi
callq 0x157c69
movq %rbx, %rdi
callq 0x130a4c
testl %eax, %eax
jne 0x12fba9
movq %rbx, %rdi
callq 0x130ac6
cmpl $0x1, %eax
je 0x12fba9
movq 0x10(%rsp), %rax
decq %rax
movq %rax, 0x18(%rsp)
movq 0x8(%rbx), %rdi
movq 0xe8(%rbx), %r14
callq 0x157c79
movq %rax, %r12
movq 0x8(%rbx), %rdi
movq 0xe8(%rbx), %r15
callq 0x157c79
cmpq %r12, %r14
jbe 0x12fb76
subq %rax, %r15
movq 0x8(%rbx), %rdi
movq 0xd0(%rbx), %rax
movq 0xd8(%rbx), %rcx
addq 0x10(%rsp), %rcx
negq %rcx
leaq (%rax,%rcx), %r12
incq %r12
movq 0xf0(%rbx), %rbp
movq 0xf8(%rbx), %r14
callq 0x157c79
leaq 0x24a75a(%rip), %rdi    # 0x37a179
movq %rbp, %rsi
movq %r14, %rdx
movq %r15, %rcx
movq %rax, %r8
xorl %eax, %eax
callq 0x103d72
movq 0x100(%rbx), %rax
cmpq %rax, %r15
cmovbeq %rax, %r15
movq %r12, %rcx
subq %r15, %rcx
jae 0x12fa7b
leaq 0x24a7a5(%rip), %rdi    # 0x37a1f4
movq %r12, %rsi
xorl %eax, %eax
callq 0x103d72
movq %r12, %rax
shrq $0x20, %rax
jne 0x1301b8
movq 0x28(%rbx), %rdi
movq 0xf0(%rbx), %rsi
addq 0x18(%rsp), %r12
movl %r12d, %edx
jmp 0x12fab9
cmpq %rax, %rcx
jae 0x12faf4
movq 0xd0(%rbx), %rdx
movq %rdx, %rax
shrq $0x20, %rax
jne 0x1301d1
leaq 0x24a71a(%rip), %rdi    # 0x37a1b5
movq %r12, %rsi
xorl %eax, %eax
callq 0x103d72
movq 0x28(%rbx), %rdi
movq 0xf0(%rbx), %rsi
movq 0x18(%rsp), %rax
leal (%r12,%rax), %edx
callq 0x12c16d
movq 0xf0(%rbx), %rsi
addq %rsi, %r12
movq %rbx, %rdi
movq %r12, %rdx
callq 0x130afa
incq 0xf8(%rbx)
movq %rbx, %rdi
callq 0x130a4c
testl %eax, %eax
jne 0x12fba0
movq %rbx, %rdi
callq 0x130ac6
jmp 0x12fb60
addq 0x18(%rsp), %r15
leaq 0x24a6d9(%rip), %rdi    # 0x37a1d9
movq %r12, %rsi
movq %r15, %rdx
xorl %eax, %eax
callq 0x103d72
movq %r15, %rax
shrq $0x20, %rax
jne 0x1301ff
movq 0x28(%rbx), %rdi
movq 0xf0(%rbx), %rsi
movl %r15d, %edx
callq 0x12c16d
movq 0xf0(%rbx), %rsi
leaq (%rsi,%r15), %rdx
movq %rbx, %rdi
callq 0x130afa
movq 0xf0(%rbx), %rsi
addq %r15, %rsi
movq %rsi, 0xf0(%rbx)
addq %r15, 0xd8(%rbx)
movq %rbx, %rdi
callq 0x130b32
movl %eax, %ebp
movq 0x8(%rbx), %rdi
callq 0x157066
cmpl $0x1, %ebp
jne 0x12f9b5
jmp 0x12fba9
cmpq %rax, %r15
jbe 0x13019b
movq 0x8(%rbx), %rdi
callq 0x157c79
leaq 0x24a6d8(%rip), %rsi    # 0x37a267
xorl %ebp, %ebp
movq %r13, %rdi
movq %rax, %rdx
xorl %eax, %eax
callq 0xfcb67
jmp 0x12fbcf
movq 0x8(%rbx), %rdi
callq 0x157066
movq 0x8(%rbx), %rdi
callq 0x157c79
movq 0xf0(%rbx), %rcx
leaq 0x24a64a(%rip), %rsi    # 0x37a20a
xorl %ebp, %ebp
movq %r13, %rdi
movq %rax, %rdx
xorl %eax, %eax
callq 0xfcb67
cmpb $0x1, 0x147(%rbx)
jne 0x12fbea
cmpb $0x1, 0x149(%rbx)
jne 0x12fbea
movq 0x8(%rbx), %rdi
callq 0x157c4d
movl $0xffffffff, %r14d      # imm = 0xFFFFFFFF
testb %bpl, %bpl
je 0x12fe20
movq 0x18(%rbx), %rdi
callq 0x1eebc2
xorl %r14d, %r14d
testb %al, %al
jne 0x12fe20
movq 0x8(%rbx), %rdi
movq 0x28(%rbx), %rax
movq 0x78(%rax), %rax
shrq $0x2, %rax
movabsq $0x28f5c28f5c28f5c3, %rcx # imm = 0x28F5C28F5C28F5C3
mulq %rcx
movq %rdx, %r14
shrq $0x2, %r14
callq 0x157c79
leaq 0x24a40c(%rip), %rdi    # 0x37a049
movq %rax, %rsi
xorl %eax, %eax
callq 0x103d72
movq 0x8(%rbx), %rdi
callq 0x157f41
leaq 0x24a418(%rip), %rdi    # 0x37a06f
movq %rax, %rsi
xorl %eax, %eax
callq 0x103d72
movq 0x8(%rbx), %rdi
callq 0x157f1e
leaq 0x24a41c(%rip), %rdi    # 0x37a08d
movq %rax, %rsi
xorl %eax, %eax
callq 0x103d72
movq 0xf0(%rbx), %rax
xorl %edx, %edx
movq %r14, 0x10(%rsp)
divq %r14
movq %rax, %r14
callq 0x119160
testb %al, %al
je 0x12fcb9
movq 0x3892e1(%rip), %rax    # 0x4b8f80
movq (%rax), %rsi
leaq 0x1(%r14), %rcx
leaq 0x24a40c(%rip), %rdx    # 0x37a0b9
movq 0x8(%rsp), %rdi
xorl %eax, %eax
callq 0x11cca7
xorl %r12d, %r12d
movq 0x18(%rbx), %rdi
callq 0x1ee7e3
testq %rax, %rax
je 0x12fdeb
movq %rbx, %rdi
movq %rax, %rsi
movq %r13, %rdx
callq 0x1306fd
cmpl $0x2, %eax
jne 0x12fcf6
movq 0x18(%rbx), %rdi
callq 0x1ee7e3
testq %rax, %rax
jne 0x12fcce
movl $0x2, %ebp
jmp 0x12fcf8
movl %eax, %ebp
movl %ebp, %eax
xorl $0x3, %eax
orl %r12d, %eax
movl $0xffffffff, %eax       # imm = 0xFFFFFFFF
cmovel %eax, %r12d
testl %r12d, %r12d
jne 0x12fde1
movq 0xf0(%rbx), %rax
incq %rax
movq %rax, 0xf0(%rbx)
incq 0xd8(%rbx)
xorl %edx, %edx
divq 0x10(%rsp)
cmpq %rax, %r14
jae 0x12fde1
movq %rax, %r15
leaq 0x24a3a9(%rip), %rdi    # 0x37a0ed
movq %rax, %rsi
xorl %eax, %eax
callq 0x103d72
movq 0x8(%rbx), %rdi
callq 0x157c79
leaq 0x24a3a0(%rip), %rdi    # 0x37a0fe
movq %rax, %rsi
xorl %eax, %eax
callq 0x103d72
movq 0x38e979(%rip), %rsi    # 0x4be6e8
leaq 0x24a3af(%rip), %rdi    # 0x37a125
xorl %eax, %eax
callq 0x103d72
movq 0x28(%rbx), %rax
movq 0x98(%rax), %rsi
leaq 0x249c8f(%rip), %rdi    # 0x379a1e
xorl %eax, %eax
callq 0x103d72
movq 0x28(%rbx), %rax
movq 0x70(%rax), %rsi
leaq 0x249c85(%rip), %rdi    # 0x379a2a
xorl %eax, %eax
callq 0x103d72
callq 0x119160
testb %al, %al
je 0x12fdde
movq %r15, %rcx
incq %rcx
cmpq $0x64, %rcx
ja 0x12fdde
movq 0x3891b8(%rip), %rax    # 0x4b8f80
movq (%rax), %rsi
movq 0x8(%rsp), %rdi
leaq 0x24a2e2(%rip), %rdx    # 0x37a0b9
xorl %eax, %eax
callq 0x11cca7
movq %r15, %r14
testl %ebp, %ebp
je 0x12fcbc
jmp 0x12fded
xorl %ebp, %ebp
movl %ebp, %eax
xorl $0x3, %eax
orl %r12d, %eax
movl $0xffffffff, %r14d      # imm = 0xFFFFFFFF
cmovnel %r12d, %r14d
cmpl $0x1, %ebp
je 0x12fe20
testl %r14d, %r14d
jne 0x12fe20
leaq 0x24a330(%rip), %rsi    # 0x37a140
movq %r13, %rdi
xorl %eax, %eax
callq 0xfcb67
movl $0xffffffff, %r14d      # imm = 0xFFFFFFFF
movq 0x18(%rbx), %rdi
callq 0x1eeaa9
movq 0x10(%rbx), %rdi
callq 0x1eeaa9
xorps %xmm0, %xmm0
movups %xmm0, 0x10(%rbx)
testl %r14d, %r14d
movq 0x20(%rsp), %rbp
jne 0x1302df
callq 0x119160
testb %al, %al
je 0x12fe6b
movq 0x389129(%rip), %rax    # 0x4b8f80
movq (%rax), %rdx
leaq 0x249b73(%rip), %rsi    # 0x3799d4
movq 0x8(%rsp), %rdi
callq 0x11cc90
movq 0x8(%rbx), %rdi
callq 0x157c79
leaq 0x249b6e(%rip), %rdi    # 0x3799e9
movq %rax, %rsi
xorl %eax, %eax
callq 0x103d72
movq 0x38e85c(%rip), %rsi    # 0x4be6e8
leaq 0x249b7a(%rip), %rdi    # 0x379a0d
xorl %eax, %eax
callq 0x103d72
movq 0x28(%rbx), %rax
movq 0x98(%rax), %rsi
leaq 0x249b72(%rip), %rdi    # 0x379a1e
xorl %eax, %eax
callq 0x103d72
movq 0x28(%rbx), %rax
movq 0x70(%rax), %rsi
leaq 0x249b68(%rip), %rdi    # 0x379a2a
xorl %eax, %eax
callq 0x103d72
movq 0x8(%rbx), %rdi
callq 0x157f41
leaq 0x249b5b(%rip), %rdi    # 0x379a34
movq %rax, %rsi
xorl %eax, %eax
callq 0x103d72
movq 0x8(%rbx), %rdi
callq 0x157f1e
leaq 0x249b5c(%rip), %rdi    # 0x379a4f
movq %rax, %rsi
xorl %eax, %eax
callq 0x103d72
callq 0x103d66
testb %al, %al
je 0x12ff83
cmpb $0x0, 0x144(%rbx)
jne 0x12ff18
cmpb $0x1, 0x145(%rbx)
jne 0x12ff83
movq 0x120(%rbx), %rsi
movq 0x128(%rbx), %rdx
movq %rdx, %rcx
subq %rsi, %rcx
incq %rcx
leaq 0x249b39(%rip), %rdi    # 0x379a6f
xorl %eax, %eax
callq 0x103d72
movq 0x30(%rbx), %rax
testq %rax, %rax
je 0x12ff83
movq 0x8(%rax), %rcx
testq %rcx, %rcx
je 0x12ff69
movq 0x30(%rcx), %rsi
movq 0x40(%rcx), %rdx
leaq 0x249b3c(%rip), %rdi    # 0x379a9a
xorl %eax, %eax
callq 0x103d72
movq 0x30(%rbx), %rax
movq (%rax), %rax
testq %rax, %rax
je 0x12ff83
movq 0x8(%rax), %rsi
leaq 0x249b4d(%rip), %rdi    # 0x379ac9
xorl %eax, %eax
callq 0x103d72
movq 0x28(%rsp), %rax
movq (%rax), %r14
movq 0x30(%rsp), %r15
movq %r15, %rdi
callq 0x11b0a1
movq %r14, %rdi
movq %rax, %rsi
movq %r13, %rdx
callq 0xd1f1a
testl %eax, %eax
je 0x12ffb2
movl %eax, %r14d
jmp 0x1302df
movq %r15, %rdi
callq 0x11b0a1
leaq 0x248fbf(%rip), %rsi    # 0x378f80
leaq 0x2635ed(%rip), %rdx    # 0x3935b5
leaq 0x2496b7(%rip), %rcx    # 0x379686
movq %rax, %rdi
movl $0x6f1, %r8d            # imm = 0x6F1
movq %r13, %r9
callq 0xfcf97
movl $0xffffffff, %r14d      # imm = 0xFFFFFFFF
testq %rax, %rax
je 0x1302df
movq %rax, %r15
callq 0x119160
testb %al, %al
je 0x130016
movq 0x388f7e(%rip), %rax    # 0x4b8f80
movq (%rax), %rdx
leaq 0x249adb(%rip), %rsi    # 0x379ae7
movq 0x8(%rsp), %rdi
callq 0x11cc90
movq 0x28(%rbx), %rdi
movq %r15, %rsi
movq %r13, %rdx
callq 0x12c4e9
movl %eax, %ebp
movq %r15, %rdi
callq 0xfd09a
testl %ebp, %ebp
je 0x13003b
movl %ebp, %r14d
jmp 0x1302da
movq 0x30(%rsp), %rdi
callq 0x11b0a1
leaq 0x28ff76(%rip), %rsi    # 0x3bffc2
leaq 0x263562(%rip), %rdx    # 0x3935b5
leaq 0x24962c(%rip), %rcx    # 0x379686
movq %rax, %rdi
movl $0x6fd, %r8d            # imm = 0x6FD
movq %r13, %r9
callq 0xfcf97
movq %rax, 0x10(%rsp)
testq %rax, %rax
movq 0x20(%rsp), %rbp
je 0x1302df
callq 0x119160
testb %al, %al
je 0x1300a2
movq 0x388ef2(%rip), %rax    # 0x4b8f80
movq (%rax), %rdx
leaq 0x249a65(%rip), %rsi    # 0x379afd
movq 0x8(%rsp), %rdi
callq 0x11cc90
movq 0x28(%rbx), %rax
cmpq $0x0, 0x98(%rax)
je 0x130218
movl $0x20, %r14d
xorl %r12d, %r12d
movq $0x0, 0x18(%rsp)
movq $0x0, 0x38(%rsp)
movq 0x10(%rax), %rax
movl (%rax,%r14), %ebp
testq %rbp, %rbp
je 0x130416
movq -0x8(%rax,%r14), %r15
callq 0x103d66
testb %al, %al
je 0x13010c
movq 0x10(%rsp), %rdi
leaq 0x24a281(%rip), %rsi    # 0x37a37b
movq %r12, %rdx
movq %r15, %rcx
movq %rbp, %r8
xorl %eax, %eax
callq 0x17ab0
jmp 0x130122
movq 0x10(%rsp), %rdi
leaq 0x24a284(%rip), %rsi    # 0x37a39c
movq %r12, %rdx
xorl %eax, %eax
callq 0x17ab0
cmpl %ebp, 0x38(%rsp)
movq 0x18(%rsp), %rax
jae 0x130149
leal 0x1(%rbp), %esi
movq %rax, %rdi
movq %rsi, 0x38(%rsp)
leaq 0x249547(%rip), %rdx    # 0x379686
movl $0x65e, %ecx            # imm = 0x65E
callq 0x104461
movq (%rbx), %rdi
leaq (%r15,%rbp), %rcx
decq %rcx
movq %r15, %rdx
movq %rax, %r15
movq %rax, %rsi
callq 0xe92be
movq 0x10(%rsp), %rdi
leaq 0x24a236(%rip), %rsi    # 0x37a3a3
movl %ebp, %edx
movq %r15, 0x18(%rsp)
movq %r15, %rcx
xorl %eax, %eax
callq 0x17ab0
incq %r12
movq 0x28(%rbx), %rax
addq $0x28, %r14
cmpq 0x98(%rax), %r12
jb 0x1300cf
jmp 0x130221
movq 0xf0(%rbx), %rsi
leaq 0x24a116(%rip), %rdi    # 0x37a2bf
xorl %eax, %eax
callq 0x103d72
movb $0x1, %bpl
jmp 0x12fbcf
leaq 0x249bad(%rip), %rsi    # 0x379d6c
xorl %ebp, %ebp
movl $0xffffffff, %ecx       # imm = 0xFFFFFFFF
movq %r13, %rdi
movq %r12, %rdx
jmp 0x12fbc8
leaq 0x249b94(%rip), %rsi    # 0x379d6c
xorl %ebp, %ebp
movl $0xffffffff, %ecx       # imm = 0xFFFFFFFF
movq %r13, %rdi
xorl %eax, %eax
callq 0xfcb67
leaq 0x249fc5(%rip), %rdi    # 0x37a1b5
movq %r12, %rsi
xorl %eax, %eax
callq 0x103d72
jmp 0x12fbcf
leaq 0x249b66(%rip), %rsi    # 0x379d6c
xorl %ebp, %ebp
movl $0xffffffff, %ecx       # imm = 0xFFFFFFFF
movq %r13, %rdi
movq %r15, %rdx
jmp 0x12fbc8
movq $0x0, 0x18(%rsp)
leaq 0x24945e(%rip), %rsi    # 0x379686
movq 0x18(%rsp), %rdi
movl $0x666, %edx            # imm = 0x666
callq 0x1045eb
movq 0x10(%rsp), %rdi
callq 0xfd09a
callq 0x119160
testb %al, %al
je 0x130265
movq 0x388d2f(%rip), %rax    # 0x4b8f80
movq (%rax), %rdx
leaq 0x2498bb(%rip), %rsi    # 0x379b16
movq 0x8(%rsp), %rdi
callq 0x11cc90
callq 0xefd9d
movq %rax, %r15
movq %rax, %rdi
callq 0xf0001
movq %r15, %rdi
callq 0xf026d
callq 0x11be10
movq %rax, %r12
movq %rax, %rdi
movq 0x30(%rsp), %r14
movq %r14, %rsi
callq 0x11bf79
movq %r12, %rdi
xorl %esi, %esi
callq 0x11bfee
leaq 0x28fd1c(%rip), %rsi    # 0x3bffc2
movq %rax, %rdi
callq 0x11acf3
movq %r14, %rdi
callq 0x11b0a1
movq %r15, %rdi
movq %r12, %rsi
movq %rax, %rdx
movq %r13, %rcx
callq 0xf030c
movl %eax, %r14d
movq %r15, %rdi
callq 0xf018f
movq %r12, %rdi
callq 0x11c144
movq 0x20(%rsp), %rbp
xorl %r15d, %r15d
movq %r15, (%rbx)
movq 0x28(%rsp), %rdi
callq 0x12c3a7
movq %r15, 0x28(%rbx)
movq 0x30(%rbx), %r15
testq %r15, %r15
je 0x1303a3
movq (%r15), %rax
testq %rax, %rax
je 0x13032f
movq (%rax), %rdi
leaq 0x249374(%rip), %r12    # 0x379686
movq %r12, %rsi
movl $0x87, %edx
callq 0x1045eb
movq (%r15), %rdi
movq %r12, %rsi
movl $0x88, %edx
callq 0x1045eb
movq 0x8(%r15), %rax
testq %rax, %rax
je 0x13038f
movq 0x8(%rax), %rdi
leaq 0x249343(%rip), %r12    # 0x379686
movq %r12, %rsi
movl $0x8b, %edx
callq 0x1045eb
movq 0x8(%r15), %rax
movq 0x10(%rax), %rdi
callq 0x165fc5
movq 0x8(%r15), %rax
movq 0x18(%rax), %rdi
callq 0x16700c
movq 0x8(%r15), %rax
movq (%rax), %rdi
movq %r12, %rsi
movl $0x8e, %edx
callq 0x1045eb
movq 0x8(%r15), %rdi
movq %r12, %rsi
movl $0x8f, %edx
callq 0x1045eb
leaq 0x2492f0(%rip), %rsi    # 0x379686
movq %r15, %rdi
movl $0x91, %edx
callq 0x1045eb
xorl %r12d, %r12d
movq %r12, 0x30(%rbx)
movq 0x8(%rbx), %r15
movq %rbp, %rdi
callq 0x103eac
movzbl %al, %edx
movq %r15, %rdi
movq 0x40(%rsp), %rsi
callq 0x157f64
movq 0x8(%rbx), %rdi
callq 0x156f2a
movq %r12, 0x8(%rbx)
callq 0x119160
testb %al, %al
je 0x1303f0
movq 0x388b9d(%rip), %rax    # 0x4b8f80
movq (%rax), %rsi
movq 0x8(%rsp), %rdi
callq 0x11cf39
movq 0x8(%rsp), %rdi
callq 0x11d054
movl %r14d, %eax
addq $0x48, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
callq 0x3e27e
callq 0x3e245
callq 0x3e20c