// File: /workspace/github_c_makefile_star2_O1/mattn[P]orelang/ore.c
// Function: ore_eval
static ore_value
ore_eval(ore_context* ore, mpc_ast_t* t) {
  int i, r;
  if (!t) return ore_value_nil();

  khiter_t k;
  k = kh_get(ast, ore->ast, (khint64_t)(uintptr_t)t);
  if (k != kh_end(ore->ast)) {
    return kh_value(ore->ast, k);
  }

  if (is_a(t, "eof") || is_a(t, "comment")) {
    return ore_value_nil();
  }
  if (is_a(t, "true")) {
    return ore_value_true();
  }
  if (is_a(t, "false")) {
    return ore_value_false();
  }
  if (is_a(t, "nil")) {
    return ore_value_nil();
  }
  if (is_a(t, "number")) {
	ore_value v = ore_parse_num(ore, t->contents);
	k = kh_put(ast, ore->ast, (khint64_t)(uintptr_t)t, &r);
	kh_value(ore->ast, k) = v;
    return v;
  }
  if (is_a(t, "string")) {
	ore_value v = ore_parse_str(ore, t->contents);
	k = kh_put(ast, ore->ast, (khint64_t)(uintptr_t)t, &r);
	kh_value(ore->ast, k) = v;
    return v;
  }
  if (is_a(t, "array")) {
    ore_array_t* a = kl_init(value);
    for (i = 1; i < t->children_num - 1; i += 2) {
      *kl_pushp(value, a) = ore_eval(ore, t->children[i]);
    }
    return ore_value_array_from_klist(ore, a);
  }
  if (is_a(t, "hash")) {
    ore_hash_t* h = kh_init(value);
    for (i = 1; i < t->children_num - 1; i += 2) {
      ore_value key = ore_eval(ore, t->children[i]->children[0]);
      ore_value val = ore_eval(ore, t->children[i]->children[2]);
      khint_t k = kh_put(value, h, key.v.s->p, &r);
      kh_value(h, k) = val;
    }
    return ore_value_hash_from_khash(ore, h);
  }
  if (is_a(t, "regexp")) {
    ore_value v = ore_parse_str(ore, t->contents);
    v.t = ORE_TYPE_REGEXP;
	k = kh_put(ast, ore->ast, (khint64_t)(uintptr_t)t, &r);
	kh_value(ore->ast, k) = v;
    return v;
  }
  if (is_a(t, "item")) {
    ore_value v = ore_eval(ore, t->children[0]);
    for (i = 2; i < t->children_num; i += 3) {
      ore_value key = ore_eval(ore, t->children[i]);
      ore_value* r = ore_index_ref(ore, v, key, 0);
      v = r == NULL ? ore_value_nil() : *r;
    }
    return v;
  }
  if (is_a(t, "prop")) {
    ore_value v = ore_eval(ore, t->children[0]);
    ore_context* this = v.t == ORE_TYPE_OBJECT ? (ore_context*) v.v.o->e : NULL;
    for (i = 2; i < t->children_num; i += 2) {
      if (v.t != ORE_TYPE_OBJECT) {
        fprintf(stderr, "invalid operation for %s\n", ore_kind(v));
        ore->err = ORE_ERROR_EXCEPTION;
        return ore_value_nil();
      }
      v = ore_prop(this, t->children[i]->contents);
      if (v.t == ORE_TYPE_OBJECT) this = (ore_context*) v.v.o->e;
    }
    return v;
  }
  if (is_a(t, "ident")) {
    return ore_get(ore, t->contents);
  }
  if (is_a(t, "factor")) {
    return ore_eval(ore, t->children[1]);
  }
  if (is_a(t, "lexp") || is_a(t, "term")) {
    return ore_expr(ore, t);
  }
  if (is_a(t, "let_v")) {
    const char* op = t->children[1]->contents;
    ore_value rhs = ore_eval(ore, t->children[2]);
    ore_value lhs = *op != '=' ?
      ore_expr0(ore, ore_eval(ore, t->children[0]), op, rhs) : rhs;
    ore_set(ore, t->children[0]->contents, lhs);
    return lhs;
  }
  if (is_a(t, "let_a")) {
    ore_value lhs = ore_eval(ore, t->children[0]->children[0]);
    const char* op = t->children[1]->contents;
    ore_value* r = NULL;
    for (i = 2; i < t->children[0]->children_num - 1; i += 3) {
      ore_value key = ore_eval(ore, t->children[0]->children[i]);
      r = ore_index_ref(ore, lhs, key, 1);
      lhs = r == NULL ? ore_value_nil() : *r;
    }
    if (r == NULL) {
      return ore_value_nil();
    }
    ore_value rhs = ore_eval(ore, t->children[2]);
    if (*op != '=') lhs = ore_expr0(ore, lhs, op, rhs);
    ore_value_ref(rhs);
    *r = rhs;
    return rhs;
  }
  if (is_a(t, "let_p")) {
    ore_value lhs = ore_eval(ore, t->children[0]->children[0]);
    const char* op = t->children[1]->contents;
    ore_value* r = NULL;
    for (i = 2; i < t->children[0]->children_num; i += 2) {
      ore_value key = ore_value_str_from_ptr(ore, t->children[0]->children[i]->contents, -1);
      r = ore_index_ref(ore, lhs, key, 0);
      lhs = r == NULL ? ore_value_nil() : *r;
    }
    if (r == NULL) {
      return ore_value_nil();
    }
    ore_value rhs = ore_eval(ore, t->children[2]);
    if (*op != '=') lhs = ore_expr0(ore, lhs, op, rhs);
    ore_value_ref(rhs);
    *r = rhs;
    return rhs;
  }
  if (is_a(t, "var")) {
    ore_value v = ore_eval(ore, t->children[3]);
    ore_define(ore, t->children[1]->contents, v);
    return v;
  }
  if (is_a(t, "cmp")) {
    ore_value lhs = ore_eval(ore, t->children[0]);
    ore_value rhs = ore_eval(ore, t->children[2]);
    return ore_cmp(ore, lhs, t->children[1]->contents, rhs);
  }
  if (is_a(t, "func")) {
    ore_value v = { ORE_TYPE_FUNC };
    v.v.f.ore = ore;
    v.v.f.num_in = -1;
    v.v.f.max_in = -1;
    v.v.f.x.o = t;
    v.v.f.u = NULL;
    ore_define(ore, t->children[1]->contents, v);
    return v;
  }
  if (is_a(t, "lambda")) {
    ore_value v = { ORE_TYPE_FUNC };
    v.v.f.ore = ore;
    v.v.f.num_in = -1;
    v.v.f.max_in = -1;
    v.v.f.x.o = t;
    v.v.f.u = NULL;
    return v;
  }
  if (is_a(t, "class_ext")) {
    return ore_define_class(ore, t->children[1], t->children[5], t->children[3]->contents);
  }
  if (is_a(t, "class")) {
    return ore_define_class(ore, t->children[1], t->children[3], NULL);
  }
  if (is_a(t, "new")) {
    return ore_object_new(ore, t);
  }
  if (is_a(t, "call")) {
    return ore_call(ore, t);
  }
  if (is_a(t, "return")) {
    ore_value v = ore_eval(ore, t->children[1]);
    ore->err = ORE_ERROR_RETURN;
    ore_value_ref(v);
    return v;
  }
  if (is_a(t, "break")) {
    ore->err = ORE_ERROR_BREAK;
    return ore_value_nil();
  }
  if (is_a(t, "continue")) {
    ore->err = ORE_ERROR_CONTINUE;
    return ore_value_nil();
  }
  if (is_a(t, "if_stmt")) {
    if (ore_is_true(ore_eval(ore, t->children[2]))) {
      return ore_eval(ore, ore_find_statements(t));
    }
    return ore_value_nil();
  }
  if (is_a(t, "if")) {
    int i;
    for (i = 0; i < t->children_num; i++) {
      int r = 0;
      mpc_ast_t* f = t->children[i];
      if (is_a(f, "if_stmt")) {
        r = ore_is_true(ore_eval(ore, f->children[2]));
      } else if (is_a(f, "else_if")) {
        r = ore_is_true(ore_eval(ore, f->children[3]));
      } else {
        r = 1;
      }
      if (r)
        return ore_eval(ore, ore_find_statements(f));
    }
    return ore_value_nil();
  }
  if (is_a(t, "while")) {
    ore_context* env = ore_new(ore);
    while (ore_is_true(ore_eval(env, t->children[2]))) {
      ore_eval(env, ore_find_statements(t));
      if (env->err != ORE_ERROR_NONE) {
        if (env->err == ORE_ERROR_CONTINUE) {
          env->err = ORE_ERROR_NONE;
          continue;
        }
        break;
      }
    }
    if (env->err == ORE_ERROR_RETURN)
      ore->err = ORE_ERROR_RETURN;
    ore_destroy(env);
    return ore_value_nil();
  }
  if (is_a(t, "for_in")) {
    ore_value l = ore_eval(ore, t->children[4]);
    if (l.t != ORE_TYPE_ARRAY) {
      fprintf(stderr, "expected array for argument\n");
      ore->err = ORE_ERROR_EXCEPTION;
    }
    ore_array_t* a = (ore_array_t*) l.v.a->p;
    ore_array_iter_t *k;
    ore_context* env = ore_new(ore);
    for (k = kl_begin(a); k != kl_end(a); k = kl_next(k)) {
      ore_define(env, t->children[2]->contents, kl_val(k));
      ore_eval(env, ore_find_statements(t));
      if (env->err != ORE_ERROR_NONE) {
        if (env->err == ORE_ERROR_CONTINUE) {
          env->err = ORE_ERROR_NONE;
          continue;
        }
        break;
      }
    }
    if (env->err == ORE_ERROR_RETURN)
      ore->err = ORE_ERROR_RETURN;
    ore_destroy(env);
    return ore_value_nil();
  }
  if (is_a(t, "stmts") || is_a(t, "template") || t->tag[0] == '>') {
    ore_value v;
    for (i = 0; i < t->children_num; i++) {
      v = ore_eval(ore, t->children[i]);
      if (ore->err != ORE_ERROR_NONE)
        return v;
    }
    return ore_value_nil();
  }
  if (is_a(t, "stmt")) {
    return ore_eval(ore, t->children[0]);
  }
  if (is_a(t, "char") && !strcmp(t->contents, ";")) {
    return ore_value_nil();
  }
  fprintf(stderr, "unknown operation '%s'\n", t->contents);
  ore->err = ORE_ERROR_EXCEPTION;
  return ore_value_nil();
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x178, %rsp            # imm = 0x178
movq %rdi, %rbx
testq %rdx, %rdx
je 0xdfb1
movq %rdx, %r15
movq %rsi, %r14
movq 0x28(%rsi), %rax
movl (%rax), %edx
testl %edx, %edx
je 0xdf80
leal -0x1(%rdx), %edi
movq %r15, %r8
shrq $0x21, %r8
movl %r15d, %ecx
shll $0xb, %ecx
xorl %ecx, %r8d
xorl %r15d, %r8d
andl %edi, %r8d
movq 0x10(%rax), %r9
movl $0x1, %r10d
movl %r8d, %esi
movl %esi, %ecx
shrl $0x4, %ecx
movl (%r9,%rcx,4), %r11d
leal (%rsi,%rsi), %ecx
andl $0x1e, %ecx
movl %r11d, %ebp
shrl %cl, %ebp
testb $0x2, %bpl
jne 0xdf74
testb $0x1, %bpl
jne 0xdf63
movq 0x18(%rax), %r12
movl %esi, %r13d
cmpq %r15, (%r12,%r13,8)
je 0xdf74
addl %r10d, %esi
andl %edi, %esi
incl %r10d
cmpl %r8d, %esi
jne 0xdf36
movl %edx, %esi
jmp 0xdf82
shrl %cl, %r11d
testb $0x3, %r11b
cmovnel %edx, %esi
jmp 0xdf82
xorl %esi, %esi
cmpl %edx, %esi
jne 0xdfc5
movq (%r15), %r12
leaq 0x7fb7(%rip), %rsi      # 0x15f47
movq %r12, %rdi
callq 0x2290
testq %rax, %rax
jne 0xdfb1
leaq 0x6c8a(%rip), %rsi      # 0x14c2e
movq %r12, %rdi
callq 0x2290
testq %rax, %rax
je 0xdffd
xorps %xmm0, %xmm0
movups %xmm0, 0x10(%rbx)
movups %xmm0, (%rbx)
movq $0x0, 0x20(%rbx)
jmp 0xdfe8
movq 0x20(%rax), %rax
movl %esi, %ecx
leaq (%rcx,%rcx,4), %rcx
movq 0x20(%rax,%rcx,8), %rdx
movq %rdx, 0x20(%rbx)
movups (%rax,%rcx,8), %xmm0
movups 0x10(%rax,%rcx,8), %xmm1
movups %xmm1, 0x10(%rbx)
movups %xmm0, (%rbx)
movq %rbx, %rax
addq $0x178, %rsp            # imm = 0x178
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0x6b61(%rip), %rsi      # 0x14b65
movq %r12, %rdi
callq 0x2290
testq %rax, %rax
je 0xe02f
xorps %xmm0, %xmm0
movups %xmm0, (%rbx)
movups %xmm0, 0x10(%rbx)
movq $0x0, 0x20(%rbx)
movl $0x1, %eax
movl %eax, (%rbx)
movl %eax, 0x8(%rbx)
jmp 0xdfe8
leaq 0x6b34(%rip), %rsi      # 0x14b6a
movq %r12, %rdi
callq 0x2290
testq %rax, %rax
je 0xe064
xorps %xmm0, %xmm0
movups %xmm0, (%rbx)
movups %xmm0, 0x10(%rbx)
movq $0x0, 0x20(%rbx)
movl $0x1, (%rbx)
movl $0x0, 0x8(%rbx)
jmp 0xdfe8
leaq 0x6b05(%rip), %rsi      # 0x14b70
movq %r12, %rdi
callq 0x2290
testq %rax, %rax
jne 0xdfb1
leaq 0x645d(%rip), %rsi      # 0x144e0
movq %r12, %rdi
callq 0x2290
testq %rax, %rax
je 0xe09e
movq 0x8(%r15), %rsi
movq %rbx, %rdi
callq 0x109f6
jmp 0xe0c1
leaq 0x7e81(%rip), %rsi      # 0x15f26
movq %r12, %rdi
callq 0x2290
testq %rax, %rax
je 0xe101
movq 0x8(%r15), %rdx
movq %rbx, %rdi
movq %r14, %rsi
callq 0x10c02
movq 0x28(%r14), %rdi
leaq 0x84(%rsp), %rdx
movq %r15, %rsi
callq 0x10a7b
movq 0x28(%r14), %rcx
movq 0x20(%rcx), %rcx
movl %eax, %eax
leaq (%rax,%rax,4), %rax
movq 0x20(%rbx), %rdx
movq %rdx, 0x20(%rcx,%rax,8)
movups (%rbx), %xmm0
movups 0x10(%rbx), %xmm1
movups %xmm1, 0x10(%rcx,%rax,8)
movups %xmm0, (%rcx,%rax,8)
jmp 0xdfe8
leaq 0x6a6c(%rip), %rsi      # 0x14b74
movq %r12, %rdi
callq 0x2290
testq %rax, %rax
je 0xe188
callq 0xddd1
movq %rax, %r12
cmpl $0x3, 0x28(%r15)
jl 0xe175
movl $0x1, %r13d
movq %r12, %rdi
callq 0xde39
movq %rax, %rbp
movq 0x30(%r15), %rax
movq (%rax,%r13,8), %rdx
leaq 0x50(%rsp), %rdi
movq %r14, %rsi
callq 0xdee3
movq 0x70(%rsp), %rax
movq %rax, 0x20(%rbp)
movups 0x50(%rsp), %xmm0
movups 0x60(%rsp), %xmm1
movups %xmm1, 0x10(%rbp)
movups %xmm0, (%rbp)
addq $0x2, %r13
movslq 0x28(%r15), %rax
decq %rax
cmpq %rax, %r13
jl 0xe12a
movq %rbx, %rdi
movq %r14, %rsi
movq %r12, %rdx
callq 0xde8c
jmp 0xdfe8
leaq 0x69f0(%rip), %rsi      # 0x14b7f
movq %r12, %rdi
callq 0x2290
testq %rax, %rax
je 0xe271
movl $0x1, %ebp
movl $0x1, %edi
movl $0x28, %esi
callq 0x2140
movq %rax, %r12
cmpl $0x3, 0x28(%r15)
jl 0xe25e
leaq 0x84(%rsp), %r13
movq 0x30(%r15), %rax
movq (%rax,%rbp,8), %rax
movq 0x30(%rax), %rax
movq (%rax), %rdx
leaq 0x50(%rsp), %rdi
movq %r14, %rsi
callq 0xdee3
movq 0x30(%r15), %rax
movq (%rax,%rbp,8), %rax
movq 0x30(%rax), %rax
movq 0x10(%rax), %rdx
leaq 0x88(%rsp), %rdi
movq %r14, %rsi
callq 0xdee3
movq 0x58(%rsp), %rax
movq (%rax), %rsi
movq %r12, %rdi
movq %r13, %rdx
callq 0xd3d4
movq 0x20(%r12), %rcx
movl %eax, %eax
leaq (%rax,%rax,4), %rax
movups 0x88(%rsp), %xmm0
movups 0x98(%rsp), %xmm1
movups %xmm0, (%rcx,%rax,8)
movups %xmm1, 0x10(%rcx,%rax,8)
movq 0xa8(%rsp), %rdx
movq %rdx, 0x20(%rcx,%rax,8)
addq $0x2, %rbp
movslq 0x28(%r15), %rax
decq %rax
cmpq %rax, %rbp
jl 0xe1ca
movq %rbx, %rdi
movq %r14, %rsi
movq %r12, %rdx
callq 0x10d30
jmp 0xdfe8
leaq 0x690c(%rip), %rsi      # 0x14b84
movq %r12, %rdi
callq 0x2290
testq %rax, %rax
je 0xe29f
movq 0x8(%r15), %rdx
movq %rbx, %rdi
movq %r14, %rsi
callq 0x10c02
movl $0x7, (%rbx)
jmp 0xe0c1
leaq 0x68ef(%rip), %rsi      # 0x14b95
movq %r12, %rdi
callq 0x2290
testq %rax, %rax
je 0xe375
movq 0x30(%r15), %rax
movq (%rax), %rdx
movq %rbx, %rdi
movq %r14, %rsi
callq 0xdee3
cmpl $0x3, 0x28(%r15)
jl 0xdfe8
movl $0x2, %r13d
leaq 0x50(%rsp), %r12
movq 0x30(%r15), %rax
movq (%rax,%r13,8), %rdx
movq %r12, %rdi
movq %r14, %rsi
callq 0xdee3
movq 0x70(%rsp), %rax
movq %rax, 0x48(%rsp)
movups 0x50(%rsp), %xmm0
movups 0x60(%rsp), %xmm1
movups %xmm1, 0x38(%rsp)
movups %xmm0, 0x28(%rsp)
movq 0x20(%rbx), %rax
movq %rax, 0x20(%rsp)
movups (%rbx), %xmm0
movups 0x10(%rbx), %xmm1
movups %xmm1, 0x10(%rsp)
movups %xmm0, (%rsp)
movq %r14, %rdi
xorl %esi, %esi
callq 0x10d87
testq %rax, %rax
je 0xe350
movq 0x20(%rax), %rcx
movq %rcx, 0x20(%rbx)
movups (%rax), %xmm0
movups 0x10(%rax), %xmm1
movups %xmm1, 0x10(%rbx)
movups %xmm0, (%rbx)
jmp 0xe362
xorps %xmm0, %xmm0
movups %xmm0, 0x10(%rbx)
movups %xmm0, (%rbx)
movq $0x0, 0x20(%rbx)
addq $0x3, %r13
cmpl %r13d, 0x28(%r15)
jg 0xe2df
jmp 0xdfe8
leaq 0x681e(%rip), %rsi      # 0x14b9a
movq %r12, %rdi
callq 0x2290
testq %rax, %rax
je 0xe3b2
movq 0x30(%r15), %rax
movq (%rax), %rdx
leaq 0x50(%rsp), %r12
movq %r12, %rdi
movq %r14, %rsi
callq 0xdee3
cmpl $0xd, (%r12)
jne 0xe3da
movq 0x58(%rsp), %rax
movq 0x10(%rax), %r12
jmp 0xe3dd
leaq 0x67a1(%rip), %rsi      # 0x14b5a
movq %r12, %rdi
callq 0x2290
testq %rax, %rax
je 0xe444
movq 0x8(%r15), %rdx
movq %rbx, %rdi
movq %r14, %rsi
callq 0xd012
jmp 0xdfe8
xorl %r12d, %r12d
cmpl $0x3, 0x28(%r15)
jl 0xe42c
movl $0x2, %ebp
leaq 0x50(%rsp), %r13
movl 0x50(%rsp), %edi
cmpl $0xd, %edi
jne 0xe4ab
movq 0x30(%r15), %rax
movq (%rax,%rbp,8), %rax
movq 0x8(%rax), %rdx
movq %r13, %rdi
movq %r12, %rsi
callq 0xcec9
cmpl $0xd, 0x50(%rsp)
jne 0xe422
movq 0x58(%rsp), %rax
movq 0x10(%rax), %r12
addq $0x2, %rbp
cmpl %ebp, 0x28(%r15)
jg 0xe3ee
movq 0x70(%rsp), %rax
movq %rax, 0x20(%rbx)
movups 0x50(%rsp), %xmm0
movups 0x60(%rsp), %xmm1
jmp 0xdfe1
leaq 0x60c5(%rip), %rsi      # 0x14510
movq %r12, %rdi
callq 0x2290
testq %rax, %rax
je 0xe470
movq 0x30(%r15), %rax
movq 0x8(%rax), %rdx
movq %rbx, %rdi
movq %r14, %rsi
callq 0xdee3
jmp 0xdfe8
leaq 0x6728(%rip), %rsi      # 0x14b9f
movq %r12, %rdi
callq 0x2290
testq %rax, %rax
jne 0xe498
leaq 0x6080(%rip), %rsi      # 0x1450b
movq %r12, %rdi
callq 0x2290
testq %rax, %rax
je 0xe4bb
movq %rbx, %rdi
movq %r14, %rsi
movq %r15, %rdx
callq 0x11395
jmp 0xdfe8
movq %r14, %rsi
movq %rbx, %rdx
callq 0x23d6
jmp 0xdfe8
leaq 0x66e8(%rip), %rsi      # 0x14baa
movq %r12, %rdi
callq 0x2290
testq %rax, %rax
je 0xe516
movq 0x30(%r15), %rax
movq 0x8(%rax), %rcx
movq 0x8(%rcx), %r12
movq 0x10(%rax), %rdx
leaq 0x50(%rsp), %rdi
movq %r14, %rsi
callq 0xdee3
cmpb $0x3d, (%r12)
jne 0xe634
movq 0x70(%rsp), %rax
movq %rax, 0x20(%rbx)
movups 0x50(%rsp), %xmm0
movups 0x60(%rsp), %xmm1
movups %xmm1, 0x10(%rbx)
movups %xmm0, (%rbx)
jmp 0xe696
leaq 0x6693(%rip), %rsi      # 0x14bb0
movq %r12, %rdi
callq 0x2290
testq %rax, %rax
je 0xe6c7
movq 0x30(%r15), %rax
movq (%rax), %rax
movq 0x30(%rax), %rax
movq (%rax), %rdx
leaq 0x50(%rsp), %rdi
movq %r14, %rsi
callq 0xdee3
movq 0x30(%r15), %rax
movq (%rax), %rcx
movq 0x8(%rax), %rdx
movq 0x8(%rdx), %rdx
movq %rdx, 0x78(%rsp)
cmpl $0x4, 0x28(%rcx)
jl 0xe7e4
movl $0x2, %r12d
leaq 0x88(%rsp), %rbp
movq 0x30(%rcx), %rax
movq (%rax,%r12,8), %rdx
movq %rbp, %rdi
movq %r14, %rsi
callq 0xdee3
movq 0xa8(%rsp), %rax
movq %rax, 0x48(%rsp)
movups 0x88(%rsp), %xmm0
movups 0x98(%rsp), %xmm1
movups %xmm1, 0x38(%rsp)
movups %xmm0, 0x28(%rsp)
movq 0x70(%rsp), %rax
movq %rax, 0x20(%rsp)
movups 0x50(%rsp), %xmm0
movups 0x60(%rsp), %xmm1
movups %xmm1, 0x10(%rsp)
movups %xmm0, (%rsp)
movq %r14, %rdi
movl $0x1, %esi
callq 0x10d87
movq %rax, %r13
testq %rax, %rax
je 0xe600
movq 0x20(%r13), %rax
movq %rax, 0x70(%rsp)
movups (%r13), %xmm0
movups 0x10(%r13), %xmm1
movaps %xmm1, 0x60(%rsp)
movaps %xmm0, 0x50(%rsp)
jmp 0xe616
xorps %xmm0, %xmm0
movaps %xmm0, 0x60(%rsp)
movaps %xmm0, 0x50(%rsp)
movq $0x0, 0x70(%rsp)
addq $0x3, %r12
movq 0x30(%r15), %rax
movq (%rax), %rcx
movl 0x28(%rcx), %edx
decl %edx
cmpl %r12d, %edx
jg 0xe575
jmp 0xe7e7
movq 0x30(%r15), %rax
movq (%rax), %rdx
leaq 0x150(%rsp), %r13
movq %r13, %rdi
movq %r14, %rsi
callq 0xdee3
movq 0x70(%rsp), %rax
movq %rax, 0x48(%rsp)
movups 0x50(%rsp), %xmm0
movups 0x60(%rsp), %xmm1
movups %xmm1, 0x38(%rsp)
movups %xmm0, 0x28(%rsp)
movq 0x20(%r13), %rax
movq %rax, 0x20(%rsp)
movups (%r13), %xmm0
movups 0x10(%r13), %xmm1
movups %xmm1, 0x10(%rsp)
movups %xmm0, (%rsp)
movq %rbx, %rdi
movq %r14, %rsi
movq %r12, %rdx
callq 0x11480
movq 0x30(%r15), %rax
movq (%rax), %rax
movq 0x8(%rax), %rsi
movq 0x20(%rbx), %rax
movq %rax, 0x20(%rsp)
movups (%rbx), %xmm0
movups 0x10(%rbx), %xmm1
movups %xmm1, 0x10(%rsp)
movups %xmm0, (%rsp)
movq %r14, %rdi
callq 0xd1cc
jmp 0xdfe8
leaq 0x64e8(%rip), %rsi      # 0x14bb6
movq %r12, %rdi
callq 0x2290
testq %rax, %rax
je 0xe8b0
movq 0x30(%r15), %rax
movq (%rax), %rax
movq 0x30(%rax), %rax
movq (%rax), %rdx
leaq 0x50(%rsp), %rdi
movq %r14, %rsi
callq 0xdee3
movq 0x30(%r15), %rax
movq (%rax), %rcx
movq 0x8(%rax), %rdx
movq 0x8(%rdx), %rdx
movq %rdx, 0x78(%rsp)
cmpl $0x3, 0x28(%rcx)
jl 0xe7e4
movl $0x2, %r12d
leaq 0x88(%rsp), %rbp
movq 0x30(%rcx), %rax
movq (%rax,%r12,8), %rax
movq 0x8(%rax), %rdx
movq %rbp, %rdi
movq %r14, %rsi
movl $0xffffffff, %ecx       # imm = 0xFFFFFFFF
callq 0x1062c
movq 0xa8(%rsp), %rax
movq %rax, 0x48(%rsp)
movups 0x88(%rsp), %xmm0
movups 0x98(%rsp), %xmm1
movups %xmm1, 0x38(%rsp)
movups %xmm0, 0x28(%rsp)
movq 0x70(%rsp), %rax
movq %rax, 0x20(%rsp)
movups 0x50(%rsp), %xmm0
movups 0x60(%rsp), %xmm1
movups %xmm1, 0x10(%rsp)
movups %xmm0, (%rsp)
movq %r14, %rdi
xorl %esi, %esi
callq 0x10d87
movq %rax, %r13
testq %rax, %rax
je 0xe7b7
movq 0x20(%r13), %rax
movq %rax, 0x70(%rsp)
movups (%r13), %xmm0
movups 0x10(%r13), %xmm1
movaps %xmm1, 0x60(%rsp)
movaps %xmm0, 0x50(%rsp)
jmp 0xe7cd
xorps %xmm0, %xmm0
movaps %xmm0, 0x60(%rsp)
movaps %xmm0, 0x50(%rsp)
movq $0x0, 0x70(%rsp)
addq $0x2, %r12
movq 0x30(%r15), %rax
movq (%rax), %rcx
cmpl %r12d, 0x28(%rcx)
jg 0xe726
jmp 0xe7e7
xorl %r13d, %r13d
testq %r13, %r13
je 0xdfb1
movq 0x10(%rax), %rdx
movq %rbx, %rdi
movq %r14, %rsi
callq 0xdee3
movq 0x78(%rsp), %rax
cmpb $0x3d, (%rax)
je 0xe874
movq 0x20(%rbx), %rax
movq %rax, 0x48(%rsp)
movups (%rbx), %xmm0
movups 0x10(%rbx), %xmm1
movups %xmm1, 0x38(%rsp)
movups %xmm0, 0x28(%rsp)
movq 0x70(%rsp), %rax
movq %rax, 0x20(%rsp)
movaps 0x50(%rsp), %xmm0
movaps 0x60(%rsp), %xmm1
movups %xmm1, 0x10(%rsp)
movups %xmm0, (%rsp)
leaq 0x88(%rsp), %r15
movq %r15, %rdi
movq %r14, %rsi
movq 0x78(%rsp), %rdx
callq 0x11480
movq 0x20(%r15), %rax
movq %rax, 0x70(%rsp)
movups (%r15), %xmm0
movups 0x10(%r15), %xmm1
movaps %xmm1, 0x60(%rsp)
movaps %xmm0, 0x50(%rsp)
movq 0x20(%rbx), %rax
movq %rax, 0x20(%rsp)
movups (%rbx), %xmm0
movups 0x10(%rbx), %xmm1
movups %xmm1, 0x10(%rsp)
movups %xmm0, (%rsp)
callq 0xc9e2
movq 0x20(%rbx), %rax
movq %rax, 0x20(%r13)
movups (%rbx), %xmm0
movups 0x10(%rbx), %xmm1
movups %xmm1, 0x10(%r13)
movups %xmm0, (%r13)
jmp 0xdfe8
leaq 0x6336(%rip), %rsi      # 0x14bed
movq %r12, %rdi
callq 0x2290
testq %rax, %rax
je 0xe909
movq 0x30(%r15), %rax
movq 0x18(%rax), %rdx
movq %rbx, %rdi
movq %r14, %rsi
callq 0xdee3
movq 0x30(%r15), %rax
movq 0x8(%rax), %rax
movq 0x8(%rax), %rsi
movq 0x20(%rbx), %rax
movq %rax, 0x20(%rsp)
movups (%rbx), %xmm0
movups 0x10(%rbx), %xmm1
movups %xmm1, 0x10(%rsp)
movups %xmm0, (%rsp)
movq %r14, %rdi
callq 0xd5d3
jmp 0xdfe8
leaq 0x627b(%rip), %rsi      # 0x14b8b
movq %r12, %rdi
callq 0x2290
testq %rax, %rax
je 0xe9aa
movq 0x30(%r15), %rax
movq (%rax), %rdx
leaq 0x50(%rsp), %r12
movq %r12, %rdi
movq %r14, %rsi
callq 0xdee3
movq 0x30(%r15), %rax
movq 0x10(%rax), %rdx
leaq 0x88(%rsp), %r13
movq %r13, %rdi
movq %r14, %rsi
callq 0xdee3
movq 0x30(%r15), %rax
movq 0x8(%rax), %rax
movq 0x8(%rax), %rdx
movq 0x20(%r13), %rax
movq %rax, 0x48(%rsp)
movups (%r13), %xmm0
movups 0x10(%r13), %xmm1
movups %xmm1, 0x38(%rsp)
movups %xmm0, 0x28(%rsp)
movq 0x20(%r12), %rax
movq %rax, 0x20(%rsp)
movups (%r12), %xmm0
movups 0x10(%r12), %xmm1
movups %xmm1, 0x10(%rsp)
movups %xmm0, (%rsp)
movq %rbx, %rdi
movq %r14, %rsi
callq 0x11788
jmp 0xdfe8
leaq 0x6247(%rip), %rsi      # 0x14bf8
movq %r12, %rdi
callq 0x2290
testq %rax, %rax
je 0xe9eb
xorps %xmm0, %xmm0
movups %xmm0, (%rbx)
movups %xmm0, 0x10(%rbx)
movq $0x0, 0x20(%rbx)
movl $0x8, (%rbx)
movq %r14, 0x8(%rbx)
movq $-0x1, 0x10(%rbx)
movq %r15, 0x18(%rbx)
jmp 0xe8d7
leaq 0x61ff(%rip), %rsi      # 0x14bf1
movq %r12, %rdi
callq 0x2290
testq %rax, %rax
je 0xea2c
xorps %xmm0, %xmm0
movups %xmm0, (%rbx)
movups %xmm0, 0x10(%rbx)
movq $0x0, 0x20(%rbx)
movl $0x8, (%rbx)
movq %r14, 0x8(%rbx)
movq $-0x1, 0x10(%rbx)
movq %r15, 0x18(%rbx)
jmp 0xdfe8
leaq 0x61d9(%rip), %rsi      # 0x14c0c
movq %r12, %rdi
callq 0x2290
testq %rax, %rax
je 0xea5c
movq 0x30(%r15), %rax
movq 0x28(%rax), %rcx
movq 0x8(%rax), %rdx
movq 0x18(%rax), %rax
movq 0x8(%rax), %r8
movq %rbx, %rdi
movq %r14, %rsi
jmp 0xea85
leaq 0x61a3(%rip), %rsi      # 0x14c06
movq %r12, %rdi
callq 0x2290
testq %rax, %rax
je 0xea8f
movq 0x30(%r15), %rax
movq 0x8(%rax), %rdx
movq 0x18(%rax), %rcx
movq %rbx, %rdi
movq %r14, %rsi
xorl %r8d, %r8d
callq 0x11c9e
jmp 0xdfe8
leaq 0x6180(%rip), %rsi      # 0x14c16
movq %r12, %rdi
callq 0x2290
testq %rax, %rax
je 0xeab6
movq %rbx, %rdi
movq %r14, %rsi
movq %r15, %rdx
callq 0x11d81
jmp 0xdfe8
leaq 0x616c(%rip), %rsi      # 0x14c29
movq %r12, %rdi
callq 0x2290
testq %rax, %rax
je 0xeadd
movq %rbx, %rdi
movq %r14, %rsi
movq %r15, %rdx
callq 0x11f45
jmp 0xdfe8
leaq 0x5b23(%rip), %rsi      # 0x14607
movq %r12, %rdi
callq 0x2290
testq %rax, %rax
je 0xeb2f
movq 0x30(%r15), %rax
movq 0x8(%rax), %rdx
movq %rbx, %rdi
movq %r14, %rsi
callq 0xdee3
movl $0x2, 0x20(%r14)
movq 0x20(%rbx), %rax
movq %rax, 0x20(%rsp)
movups (%rbx), %xmm0
movups 0x10(%rbx), %xmm1
movups %xmm1, 0x10(%rsp)
movups %xmm0, (%rsp)
callq 0xc9e2
jmp 0xdfe8
leaq 0x60a8(%rip), %rsi      # 0x14bde
movq %r12, %rdi
callq 0x2290
testq %rax, %rax
je 0xeb50
movl $0x3, 0x20(%r14)
jmp 0xdfb1
leaq 0x608d(%rip), %rsi      # 0x14be4
movq %r12, %rdi
callq 0x2290
testq %rax, %rax
je 0xeb71
movl $0x4, 0x20(%r14)
jmp 0xdfb1
leaq 0x6044(%rip), %rsi      # 0x14bbc
movq %r12, %rdi
callq 0x2290
testq %rax, %rax
je 0xebe1
movq 0x30(%r15), %rax
movq 0x10(%rax), %rdx
leaq 0x128(%rsp), %r12
movq %r12, %rdi
movq %r14, %rsi
callq 0xdee3
movq 0x20(%r12), %rax
movq %rax, 0x20(%rsp)
movups (%r12), %xmm0
movups 0x10(%r12), %xmm1
movups %xmm1, 0x10(%rsp)
movups %xmm0, (%rsp)
callq 0x12462
testl %eax, %eax
je 0xdfb1
movq %r15, %rdi
callq 0x12511
movq %rbx, %rdi
movq %r14, %rsi
movq %rax, %rdx
jmp 0xe466
leaq 0x5fe1(%rip), %rsi      # 0x14bc9
movq %r12, %rdi
callq 0x2290
testq %rax, %rax
je 0xecb2
cmpl $0x0, 0x28(%r15)
jle 0xdfb1
xorl %ebp, %ebp
movq 0x30(%r15), %rax
movq (%rax,%rbp,8), %rax
movq %rax, 0x78(%rsp)
movq (%rax), %r12
movq %r12, %rdi
leaq 0x5f9c(%rip), %rsi      # 0x14bbc
callq 0x2290
movl $0x10, %ecx
leaq 0x100(%rsp), %r13
testq %rax, %rax
jne 0xec5c
movq %r12, %rdi
leaq 0x5f83(%rip), %rsi      # 0x14bc4
callq 0x2290
movl $0x18, %ecx
leaq 0xd8(%rsp), %r13
testq %rax, %rax
je 0xedae
movq 0x78(%rsp), %rax
movq 0x30(%rax), %rax
movq (%rax,%rcx), %rdx
movq %r13, %rdi
movq %r14, %rsi
callq 0xdee3
movq 0x20(%r13), %rax
movq %rax, 0x20(%rsp)
movups (%r13), %xmm0
movups 0x10(%r13), %xmm1
movups %xmm1, 0x10(%rsp)
movups %xmm0, (%rsp)
callq 0x12462
testl %eax, %eax
jne 0xedae
incq %rbp
movslq 0x28(%r15), %rax
cmpq %rax, %rbp
jl 0xec06
jmp 0xdfb1
leaq 0x5f18(%rip), %rsi      # 0x14bd1
movq %r12, %rdi
callq 0x2290
testq %rax, %rax
je 0xedb8
movq %r14, %rdi
callq 0xd863
movq %rax, %r12
movq 0x30(%r15), %rax
movq 0x10(%rax), %rdx
leaq 0xb0(%rsp), %r13
movq %r13, %rdi
movq %r12, %rsi
callq 0xdee3
movq 0x20(%r13), %rax
movq %rax, 0x20(%rsp)
movups (%r13), %xmm0
movups 0x10(%r13), %xmm1
movups %xmm1, 0x10(%rsp)
movups %xmm0, (%rsp)
callq 0x12462
testl %eax, %eax
je 0xed91
leaq 0x50(%rsp), %r13
leaq 0xb0(%rsp), %rbp
movq %r15, %rdi
callq 0x12511
movq %r13, %rdi
movq %r12, %rsi
movq %rax, %rdx
callq 0xdee3
movl 0x20(%r12), %eax
testl %eax, %eax
je 0xed4f
cmpl $0x4, %eax
jne 0xed91
movl $0x0, 0x20(%r12)
movq 0x30(%r15), %rax
movq 0x10(%rax), %rdx
movq %rbp, %rdi
movq %r12, %rsi
callq 0xdee3
movq 0xd0(%rsp), %rax
movq %rax, 0x20(%rsp)
movups 0xb0(%rsp), %xmm0
movups 0xc0(%rsp), %xmm1
movups %xmm1, 0x10(%rsp)
movups %xmm0, (%rsp)
callq 0x12462
testl %eax, %eax
jne 0xed22
cmpl $0x2, 0x20(%r12)
jne 0xeda1
movl $0x2, 0x20(%r14)
movq %r12, %rdi
callq 0xef79
jmp 0xdfb1
movq 0x78(%rsp), %rdi
jmp 0xebce
leaq 0x5e18(%rip), %rsi      # 0x14bd7
movq %r12, %rdi
callq 0x2290
testq %rax, %rax
je 0xee7c
movq 0x30(%r15), %rax
movq 0x20(%rax), %rdx
leaq 0x50(%rsp), %r12
movq %r12, %rdi
movq %r14, %rsi
callq 0xdee3
cmpl $0x5, (%r12)
jne 0xeeed
movq 0x58(%rsp), %rax
movq (%rax), %rbp
movq %r14, %rdi
callq 0xd863
movq %rax, %r12
movq (%rbp), %r13
cmpq 0x8(%rbp), %r13
je 0xed91
movq 0x30(%r15), %rax
movq 0x10(%rax), %rax
movq 0x8(%rax), %rsi
movq 0x20(%r13), %rax
movq %rax, 0x20(%rsp)
movups (%r13), %xmm0
movups 0x10(%r13), %xmm1
movups %xmm1, 0x10(%rsp)
movups %xmm0, (%rsp)
movq %r12, %rdi
callq 0xd5d3
movq %r15, %rdi
callq 0x12511
leaq 0x88(%rsp), %rdi
movq %r12, %rsi
movq %rax, %rdx
callq 0xdee3
movl 0x20(%r12), %eax
testl %eax, %eax
je 0xee76
cmpl $0x4, %eax
jne 0xed91
movl $0x0, 0x20(%r12)
movq 0x28(%r13), %r13
jmp 0xee0a
leaq 0x5db3(%rip), %rsi      # 0x14c36
movq %r12, %rdi
callq 0x2290
testq %rax, %rax
jne 0xeeab
leaq 0x5d66(%rip), %rsi      # 0x14bfd
movq %r12, %rdi
callq 0x2290
testq %rax, %rax
jne 0xeeab
cmpb $0x3e, (%r12)
jne 0xeefa
cmpl $0x0, 0x28(%r15)
jle 0xdfb1
xorl %r13d, %r13d
leaq 0x50(%rsp), %r12
movq 0x30(%r15), %rax
movq (%rax,%r13,8), %rdx
movq %r12, %rdi
movq %r14, %rsi
callq 0xdee3
cmpl $0x0, 0x20(%r14)
jne 0xe42c
incq %r13
movslq 0x28(%r15), %rax
cmpq %rax, %r13
jl 0xeebe
jmp 0xdfb1
movq %r14, %rdi
callq 0x2437
jmp 0xedf3
leaq 0x5cbe(%rip), %rsi      # 0x14bbf
movq %r12, %rdi
callq 0x2290
testq %rax, %rax
je 0xef1a
movq 0x30(%r15), %rax
movq (%rax), %rdx
jmp 0xe460
leaq 0x55d7(%rip), %rsi      # 0x144f8
movq %r12, %rdi
callq 0x2290
testq %rax, %rax
je 0xef46
movq 0x8(%r15), %rdi
leaq 0x5875(%rip), %rsi      # 0x147ae
callq 0x2150
testl %eax, %eax
je 0xdfb1
movq 0xd0ab(%rip), %rax      # 0x1bff8
movq (%rax), %rdi
movq 0x8(%r15), %rdx
leaq 0x70a6(%rip), %rsi      # 0x16001
xorl %eax, %eax
callq 0x2160
movl $0x1, 0x20(%r14)
xorps %xmm0, %xmm0
movups %xmm0, (%rbx)
movups %xmm0, 0x10(%rbx)
jmp 0xdfbb