// File: /workspace/github_cpp_makefile_star2_O2/silverneko[P]Lambda-calculus-interpreter/src/main.cpp
// Function: main
int main(int argc, char *argv[])
{
  Context prelude;
  prelude.add("true", "\\a \\b a");
  prelude.add("false", "\\a \\b b");
  prelude.add("if", "\\pred \\then \\else pred then else");
  prelude.add("not", "\\x x false true");
  prelude.add("and", "\\x \\y x y false");
  prelude.add("or", "\\x \\y x true y");
  // Y f = f (Y f)
  prelude.add("Y", "\\f (\\x f (x x)) (\\x f (x x))");
  prelude.add("+", Object([](const Expression& expr, const Context& env){
          int a = normalForm(expr, env).expr().val;
          return Object([a](const Expression& expr, const Context& env){
              int b = normalForm(expr, env).expr().val;
              return Expression( a + b );
            });
        }));
  prelude.add("-", Object([](const Expression& expr, const Context& env){
          int a = normalForm(expr, env).expr().val;
          return Object([a](const Expression& expr, const Context& env){
              int b = normalForm(expr, env).expr().val;
              return Expression( a - b );
            });
        }));
  prelude.add("*", Object([](const Expression& expr, const Context& env){
          int a = normalForm(expr, env).expr().val;
          return Object([a](const Expression& expr, const Context& env){
              if(a == 0)
                return Expression( 0 );
              int b = normalForm(expr, env).expr().val;
              return Expression( a * b );
            });
        }));
  prelude.add("/", Object([](const Expression& expr, const Context& env){
          int a = normalForm(expr, env).expr().val;
          return Object([a](const Expression& expr, const Context& env){
              int b = normalForm(expr, env).expr().val;
              return Expression( a / b );
            });
        }));
  prelude.add("mod", Object([](const Expression& expr, const Context& env){
          int a = normalForm(expr, env).expr().val;
          return Object([a](const Expression& expr, const Context& env){
              int b = normalForm(expr, env).expr().val;
              return Expression( a % b );
            });
        }));
  prelude.add("==", Object([](const Expression& expr, const Context& env){
          int a = normalForm(expr, env).expr().val;
          return Object([a](const Expression& expr, const Context& env){
              int b = normalForm(expr, env).expr().val;
              if(a == b){
                return Object(Expression("true"), env);
              }else{
                return Object(Expression("false"), env);
              }
            });
        }));
  prelude.add("<", Object([](const Expression& expr, const Context& env){
          int a = normalForm(expr, env).expr().val;
          return Object([a](const Expression& expr, const Context& env){
              int b = normalForm(expr, env).expr().val;
              if(a < b){
                return Object(Expression("true"), env);
              }else{
                return Object(Expression("false"), env);
              }
            });
        }));
  prelude.add("<=", Object([](const Expression& expr, const Context& env){
          int a = normalForm(expr, env).expr().val;
          return Object([a](const Expression& expr, const Context& env){
              int b = normalForm(expr, env).expr().val;
              if(a <= b){
                return Object(Expression("true"), env);
              }else{
                return Object(Expression("false"), env);
              }
            });
        }));
  prelude.add("flip", "\\f \\x \\y f y x");
  prelude.add("!=", "\\a \\b not (== a b)");
  prelude.add(">", "flip <");
  prelude.add(">=", "flip >=");

  prelude.add(">>=", "\\m \\f \\s (m s) \\a \\s' f a s'");
  prelude.add(">>", "\\ma \\mb >>= ma (\\_ mb)");

  prelude.add("runIO", "\\m m s");
  prelude.add("pair", "\\a \\b \\p p a b");
  prelude.add("pureIO", "pair");
  prelude.add("putChar", Object([](const Expression& expr, const Context& env){
        auto promiseChar = [expr, env](){ return normalForm(expr, env).expr().val;};
        return Object([promiseChar](const Expression& s, const Context& env){
          fputc(promiseChar(), stdout);
          /* pair nil s */
          return Object([s, env](const Expression& p, const Context& _env){
            Object res = weakNormalForm(p, _env).call(Expression("nil"), {});
            return weakNormalForm(res.expr(), res.env()).call(s, env);
          });
        });
      }));
  prelude.add("getChar", Object([](const Expression& s, const Context& env){
        int c = fgetc(stdin);
        return Object([c, s, env](const Expression& p, const Context& _env){
          Object res = weakNormalForm(p, _env).call(Expression(c), {});
          return weakNormalForm(res.expr(), res.env()).call(s, env);
        });
      }));

  string rawInput, input;
  ifstream file("samplecode/prelude");
  while(getline(file, input)){
    rawInput += input;
    rawInput += "\n";
  }
  file.close();
  if(argc > 1){
    file.open(argv[1]);
    while(getline(file, input)){
      rawInput += input;
      rawInput += "\n";
    }
    file.close();
  }else{
    while(getline(cin, input)){
      rawInput += input;
      rawInput += "\n";
    }
  }
  Scanner scanner(rawInput);
  Expression * expr = parseExpression(scanner);
  Object res = normalForm(*expr, prelude);

  //res.expr().prettyPrint();
  //cout << endl;

  return 0;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x318, %rsp            # imm = 0x318
movq %rsi, %rbx
movl %edi, %ebp
movq %rsp, %rdi
callq 0x718a
leaq 0x6ed3(%rip), %rsi      # 0xb493
leaq 0xf0(%rsp), %rdi
leaq 0xa0(%rsp), %rdx
callq 0x71cc
leaq 0x6e74(%rip), %rsi      # 0xb450
leaq 0x30(%rsp), %rdi
leaq 0x10(%rsp), %rdx
callq 0x71cc
movq %rsp, %rdi
leaq 0xf0(%rsp), %rsi
leaq 0x30(%rsp), %rdx
callq 0x3b8c
leaq 0x30(%rsp), %rdi
callq 0x30c0
leaq 0xf0(%rsp), %rdi
callq 0x30c0
leaq 0x6e88(%rip), %rsi      # 0xb4a6
leaq 0xf0(%rsp), %rdi
leaq 0xa0(%rsp), %rdx
callq 0x71cc
leaq 0x6e1e(%rip), %rsi      # 0xb458
leaq 0x30(%rsp), %rdi
leaq 0x10(%rsp), %rdx
callq 0x71cc
movq %rsp, %rdi
leaq 0xf0(%rsp), %rsi
leaq 0x30(%rsp), %rdx
callq 0x3b8c
leaq 0x30(%rsp), %rdi
callq 0x30c0
leaq 0xf0(%rsp), %rdi
callq 0x30c0
leaq 0x6de4(%rip), %rsi      # 0xb460
leaq 0xf0(%rsp), %rdi
leaq 0xa0(%rsp), %rdx
callq 0x71cc
leaq 0x6dcb(%rip), %rsi      # 0xb463
leaq 0x30(%rsp), %rdi
leaq 0x10(%rsp), %rdx
callq 0x71cc
movq %rsp, %rdi
leaq 0xf0(%rsp), %rsi
leaq 0x30(%rsp), %rdx
callq 0x3b8c
leaq 0x30(%rsp), %rdi
callq 0x30c0
leaq 0xf0(%rsp), %rdi
callq 0x30c0
leaq 0x6daa(%rip), %rsi      # 0xb484
leaq 0xf0(%rsp), %rdi
leaq 0xa0(%rsp), %rdx
callq 0x71cc
leaq 0x6d92(%rip), %rsi      # 0xb488
leaq 0x30(%rsp), %rdi
leaq 0x10(%rsp), %rdx
callq 0x71cc
movq %rsp, %rdi
leaq 0xf0(%rsp), %rsi
leaq 0x30(%rsp), %rdx
callq 0x3b8c
leaq 0x30(%rsp), %rdi
callq 0x30c0
leaq 0xf0(%rsp), %rdi
callq 0x30c0
leaq 0x6d60(%rip), %rsi      # 0xb498
leaq 0xf0(%rsp), %rdi
leaq 0xa0(%rsp), %rdx
callq 0x71cc
leaq 0x6d48(%rip), %rsi      # 0xb49c
leaq 0x30(%rsp), %rdi
leaq 0x10(%rsp), %rdx
callq 0x71cc
movq %rsp, %rdi
leaq 0xf0(%rsp), %rsi
leaq 0x30(%rsp), %rdx
callq 0x3b8c
leaq 0x30(%rsp), %rdi
callq 0x30c0
leaq 0xf0(%rsp), %rdi
callq 0x30c0
leaq 0x6d16(%rip), %rsi      # 0xb4ac
leaq 0xf0(%rsp), %rdi
leaq 0xa0(%rsp), %rdx
callq 0x71cc
leaq 0x6cfd(%rip), %rsi      # 0xb4af
leaq 0x30(%rsp), %rdi
leaq 0x10(%rsp), %rdx
callq 0x71cc
movq %rsp, %rdi
leaq 0xf0(%rsp), %rsi
leaq 0x30(%rsp), %rdx
callq 0x3b8c
leaq 0x30(%rsp), %rdi
callq 0x30c0
leaq 0xf0(%rsp), %rdi
callq 0x30c0
leaq 0x6cca(%rip), %rsi      # 0xb4be
leaq 0xf0(%rsp), %rdi
leaq 0xa0(%rsp), %rdx
callq 0x71cc
leaq 0x6cb0(%rip), %rsi      # 0xb4c0
leaq 0x30(%rsp), %rdi
leaq 0x10(%rsp), %rdx
callq 0x71cc
movq %rsp, %rdi
leaq 0xf0(%rsp), %rsi
leaq 0x30(%rsp), %rdx
callq 0x3b8c
leaq 0x30(%rsp), %rdi
callq 0x30c0
leaq 0xf0(%rsp), %rdi
callq 0x30c0
leaq 0x6c8b(%rip), %rsi      # 0xb4dd
leaq 0x30(%rsp), %rdi
leaq 0x10(%rsp), %rdx
callq 0x71cc
xorps %xmm0, %xmm0
leaq 0xa0(%rsp), %rsi
movaps %xmm0, (%rsi)
leaq 0x139e(%rip), %rax      # 0x5c14
movq %rax, 0x18(%rsi)
leaq 0x140d(%rip), %rax      # 0x5c8e
movq %rax, 0x10(%rsi)
leaq 0xf0(%rsp), %rdi
callq 0x7208
movq %rsp, %rdi
leaq 0x30(%rsp), %rsi
leaq 0xf0(%rsp), %rdx
callq 0x3c1a
leaq 0xf0(%rsp), %rdi
callq 0x6fd6
leaq 0xa0(%rsp), %rdi
callq 0x7274
leaq 0x30(%rsp), %rdi
callq 0x30c0
leaq 0x71c6(%rip), %rsi      # 0xba98
leaq 0x30(%rsp), %rdi
leaq 0x10(%rsp), %rdx
callq 0x71cc
xorps %xmm0, %xmm0
leaq 0xa0(%rsp), %rsi
movaps %xmm0, (%rsi)
leaq 0x1464(%rip), %rax      # 0x5d5a
movq %rax, 0x18(%rsi)
leaq 0x14d3(%rip), %rax      # 0x5dd4
movq %rax, 0x10(%rsi)
leaq 0xf0(%rsp), %rdi
callq 0x7208
movq %rsp, %rdi
leaq 0x30(%rsp), %rsi
leaq 0xf0(%rsp), %rdx
callq 0x3c1a
leaq 0xf0(%rsp), %rdi
callq 0x6fd6
leaq 0xa0(%rsp), %rdi
callq 0x7274
leaq 0x30(%rsp), %rdi
callq 0x30c0
leaq 0x6b8d(%rip), %rsi      # 0xb4df
leaq 0x30(%rsp), %rdi
leaq 0x10(%rsp), %rdx
callq 0x71cc
xorps %xmm0, %xmm0
leaq 0xa0(%rsp), %rsi
movaps %xmm0, (%rsi)
leaq 0x152c(%rip), %rax      # 0x5ea2
movq %rax, 0x18(%rsi)
leaq 0x159b(%rip), %rax      # 0x5f1c
movq %rax, 0x10(%rsi)
leaq 0xf0(%rsp), %rdi
callq 0x7208
movq %rsp, %rdi
leaq 0x30(%rsp), %rsi
leaq 0xf0(%rsp), %rdx
callq 0x3c1a
leaq 0xf0(%rsp), %rdi
callq 0x6fd6
leaq 0xa0(%rsp), %rdi
callq 0x7274
leaq 0x30(%rsp), %rdi
callq 0x30c0
leaq 0x6b0f(%rip), %rsi      # 0xb4e1
leaq 0x30(%rsp), %rdi
leaq 0x10(%rsp), %rdx
callq 0x71cc
xorps %xmm0, %xmm0
leaq 0xa0(%rsp), %rsi
movaps %xmm0, (%rsi)
leaq 0x15fc(%rip), %rax      # 0x5ff2
movq %rax, 0x18(%rsi)
leaq 0x166b(%rip), %rax      # 0x606c
movq %rax, 0x10(%rsi)
leaq 0xf0(%rsp), %rdi
callq 0x7208
movq %rsp, %rdi
leaq 0x30(%rsp), %rsi
leaq 0xf0(%rsp), %rdx
callq 0x3c1a
leaq 0xf0(%rsp), %rdi
callq 0x6fd6
leaq 0xa0(%rsp), %rdi
callq 0x7274
leaq 0x30(%rsp), %rdi
callq 0x30c0
leaq 0x6a91(%rip), %rsi      # 0xb4e3
leaq 0x30(%rsp), %rdi
leaq 0x10(%rsp), %rdx
callq 0x71cc
xorps %xmm0, %xmm0
leaq 0xa0(%rsp), %rsi
movaps %xmm0, (%rsi)
leaq 0x16c6(%rip), %rax      # 0x613c
movq %rax, 0x18(%rsi)
leaq 0x1735(%rip), %rax      # 0x61b6
movq %rax, 0x10(%rsi)
leaq 0xf0(%rsp), %rdi
callq 0x7208
movq %rsp, %rdi
leaq 0x30(%rsp), %rsi
leaq 0xf0(%rsp), %rdx
callq 0x3c1a
leaq 0xf0(%rsp), %rdi
callq 0x6fd6
leaq 0xa0(%rsp), %rdi
callq 0x7274
leaq 0x30(%rsp), %rdi
callq 0x30c0
leaq 0x6a15(%rip), %rsi      # 0xb4e7
leaq 0x30(%rsp), %rdi
leaq 0x10(%rsp), %rdx
callq 0x71cc
xorps %xmm0, %xmm0
leaq 0xa0(%rsp), %rsi
movaps %xmm0, (%rsi)
leaq 0x1790(%rip), %rax      # 0x6286
movq %rax, 0x18(%rsi)
leaq 0x17ff(%rip), %rax      # 0x6300
movq %rax, 0x10(%rsi)
leaq 0xf0(%rsp), %rdi
callq 0x7208
movq %rsp, %rdi
leaq 0x30(%rsp), %rsi
leaq 0xf0(%rsp), %rdx
callq 0x3c1a
leaq 0xf0(%rsp), %rdi
callq 0x6fd6
leaq 0xa0(%rsp), %rdi
callq 0x7274
leaq 0x30(%rsp), %rdi
callq 0x30c0
leaq 0x69ca(%rip), %rsi      # 0xb51c
leaq 0x30(%rsp), %rdi
leaq 0x10(%rsp), %rdx
callq 0x71cc
xorps %xmm0, %xmm0
leaq 0xa0(%rsp), %rsi
movaps %xmm0, (%rsi)
leaq 0x18c8(%rip), %rax      # 0x643e
movq %rax, 0x18(%rsi)
leaq 0x1937(%rip), %rax      # 0x64b8
movq %rax, 0x10(%rsi)
leaq 0xf0(%rsp), %rdi
callq 0x7208
movq %rsp, %rdi
leaq 0x30(%rsp), %rsi
leaq 0xf0(%rsp), %rdx
callq 0x3c1a
leaq 0xf0(%rsp), %rdi
callq 0x6fd6
leaq 0xa0(%rsp), %rdi
callq 0x7274
leaq 0x30(%rsp), %rdi
callq 0x30c0
leaq 0x6918(%rip), %rsi      # 0xb4ea
leaq 0x30(%rsp), %rdi
leaq 0x10(%rsp), %rdx
callq 0x71cc
xorps %xmm0, %xmm0
leaq 0xa0(%rsp), %rsi
movaps %xmm0, (%rsi)
leaq 0x1a00(%rip), %rax      # 0x65f6
movq %rax, 0x18(%rsi)
leaq 0x1a6f(%rip), %rax      # 0x6670
movq %rax, 0x10(%rsi)
leaq 0xf0(%rsp), %rdi
callq 0x7208
movq %rsp, %rdi
leaq 0x30(%rsp), %rsi
leaq 0xf0(%rsp), %rdx
callq 0x3c1a
leaq 0xf0(%rsp), %rdi
callq 0x6fd6
leaq 0xa0(%rsp), %rdi
callq 0x7274
leaq 0x30(%rsp), %rdi
callq 0x30c0
leaq 0x689b(%rip), %rsi      # 0xb4ed
leaq 0xf0(%rsp), %rdi
leaq 0xa0(%rsp), %rdx
callq 0x71cc
leaq 0x6884(%rip), %rsi      # 0xb4f2
leaq 0x30(%rsp), %rdi
leaq 0x10(%rsp), %rdx
callq 0x71cc
movq %rsp, %rdi
leaq 0xf0(%rsp), %rsi
leaq 0x30(%rsp), %rdx
callq 0x3b8c
leaq 0x30(%rsp), %rdi
callq 0x30c0
leaq 0xf0(%rsp), %rdi
callq 0x30c0
leaq 0x6851(%rip), %rsi      # 0xb501
leaq 0xf0(%rsp), %rdi
leaq 0xa0(%rsp), %rdx
callq 0x71cc
leaq 0x6838(%rip), %rsi      # 0xb504
leaq 0x30(%rsp), %rdi
leaq 0x10(%rsp), %rdx
callq 0x71cc
movq %rsp, %rdi
leaq 0xf0(%rsp), %rsi
leaq 0x30(%rsp), %rdx
callq 0x3b8c
leaq 0x30(%rsp), %rdi
callq 0x30c0
leaq 0xf0(%rsp), %rdi
callq 0x30c0
leaq 0x683a(%rip), %rsi      # 0xb548
leaq 0xf0(%rsp), %rdi
leaq 0xa0(%rsp), %rdx
callq 0x71cc
leaq 0x67ed(%rip), %rsi      # 0xb517
leaq 0x30(%rsp), %rdi
leaq 0x10(%rsp), %rdx
callq 0x71cc
movq %rsp, %rdi
leaq 0xf0(%rsp), %rsi
leaq 0x30(%rsp), %rdx
callq 0x3b8c
leaq 0x30(%rsp), %rdi
callq 0x30c0
leaq 0xf0(%rsp), %rdi
callq 0x30c0
leaq 0x67b7(%rip), %rsi      # 0xb523
leaq 0xf0(%rsp), %rdi
leaq 0xa0(%rsp), %rdx
callq 0x71cc
leaq 0x6796(%rip), %rsi      # 0xb51e
leaq 0x30(%rsp), %rdi
leaq 0x10(%rsp), %rdx
callq 0x71cc
movq %rsp, %rdi
leaq 0xf0(%rsp), %rsi
leaq 0x30(%rsp), %rdx
callq 0x3b8c
leaq 0x30(%rsp), %rdi
callq 0x30c0
leaq 0xf0(%rsp), %rdi
callq 0x30c0
leaq 0x675c(%rip), %rsi      # 0xb526
leaq 0xf0(%rsp), %rdi
leaq 0xa0(%rsp), %rdx
callq 0x71cc
leaq 0x6744(%rip), %rsi      # 0xb52a
leaq 0x30(%rsp), %rdi
leaq 0x10(%rsp), %rdx
callq 0x71cc
movq %rsp, %rdi
leaq 0xf0(%rsp), %rsi
leaq 0x30(%rsp), %rdx
callq 0x3b8c
leaq 0x30(%rsp), %rdi
callq 0x30c0
leaq 0xf0(%rsp), %rdi
callq 0x30c0
leaq 0x671f(%rip), %rsi      # 0xb547
leaq 0xf0(%rsp), %rdi
leaq 0xa0(%rsp), %rdx
callq 0x71cc
leaq 0x6706(%rip), %rsi      # 0xb54a
leaq 0x30(%rsp), %rdi
leaq 0x10(%rsp), %rdx
callq 0x71cc
movq %rsp, %rdi
leaq 0xf0(%rsp), %rsi
leaq 0x30(%rsp), %rdx
callq 0x3b8c
leaq 0x30(%rsp), %rdi
callq 0x30c0
leaq 0xf0(%rsp), %rdi
callq 0x30c0
leaq 0x66db(%rip), %rsi      # 0xb561
leaq 0xf0(%rsp), %rdi
leaq 0xa0(%rsp), %rdx
callq 0x71cc
leaq 0x66c5(%rip), %rsi      # 0xb567
leaq 0x30(%rsp), %rdi
leaq 0x10(%rsp), %rdx
callq 0x71cc
movq %rsp, %rdi
leaq 0xf0(%rsp), %rsi
leaq 0x30(%rsp), %rdx
callq 0x3b8c
leaq 0x30(%rsp), %rdi
callq 0x30c0
leaq 0xf0(%rsp), %rdi
callq 0x30c0
leaq 0x668a(%rip), %rsi      # 0xb56e
leaq 0xf0(%rsp), %rdi
leaq 0xa0(%rsp), %rdx
callq 0x71cc
leaq 0x6673(%rip), %rsi      # 0xb573
leaq 0x30(%rsp), %rdi
leaq 0x10(%rsp), %rdx
callq 0x71cc
movq %rsp, %rdi
leaq 0xf0(%rsp), %rsi
leaq 0x30(%rsp), %rdx
callq 0x3b8c
leaq 0x30(%rsp), %rdi
callq 0x30c0
leaq 0xf0(%rsp), %rdi
callq 0x30c0
leaq 0x6640(%rip), %rsi      # 0xb582
leaq 0xf0(%rsp), %rdi
leaq 0xa0(%rsp), %rdx
callq 0x71cc
leaq 0x6610(%rip), %rsi      # 0xb56e
leaq 0x30(%rsp), %rdi
leaq 0x10(%rsp), %rdx
callq 0x71cc
movq %rsp, %rdi
leaq 0xf0(%rsp), %rsi
leaq 0x30(%rsp), %rdx
callq 0x3b8c
leaq 0x30(%rsp), %rdi
callq 0x30c0
leaq 0xf0(%rsp), %rdi
callq 0x30c0
leaq 0x65e9(%rip), %rsi      # 0xb589
leaq 0x30(%rsp), %rdi
leaq 0x10(%rsp), %rdx
callq 0x71cc
xorps %xmm0, %xmm0
leaq 0xa0(%rsp), %rsi
movaps %xmm0, (%rsi)
leaq 0x17ea(%rip), %rax      # 0x67ae
movq %rax, 0x18(%rsi)
leaq 0x18e1(%rip), %rax      # 0x68b0
movq %rax, 0x10(%rsi)
leaq 0xf0(%rsp), %rdi
callq 0x7208
movq %rsp, %rdi
leaq 0x30(%rsp), %rsi
leaq 0xf0(%rsp), %rdx
callq 0x3c1a
leaq 0xf0(%rsp), %rdi
callq 0x6fd6
leaq 0xa0(%rsp), %rdi
callq 0x7274
leaq 0x30(%rsp), %rdi
callq 0x30c0
leaq 0x6571(%rip), %rsi      # 0xb591
leaq 0x30(%rsp), %rdi
leaq 0x10(%rsp), %rdx
callq 0x71cc
xorps %xmm0, %xmm0
leaq 0xa0(%rsp), %rsi
movaps %xmm0, (%rsi)
leaq 0x1c5a(%rip), %rax      # 0x6c9e
movq %rax, 0x18(%rsi)
leaq 0x1d45(%rip), %rax      # 0x6d94
movq %rax, 0x10(%rsi)
leaq 0xf0(%rsp), %rdi
callq 0x7208
movq %rsp, %rdi
leaq 0x30(%rsp), %rsi
leaq 0xf0(%rsp), %rdx
callq 0x3c1a
leaq 0xf0(%rsp), %rdi
callq 0x6fd6
leaq 0xa0(%rsp), %rdi
callq 0x7274
leaq 0x30(%rsp), %rdi
callq 0x30c0
leaq 0x20(%rsp), %rax
movq %rax, -0x10(%rax)
andq $0x0, -0x8(%rax)
xorl %ecx, %ecx
movb %cl, (%rax)
leaq 0x308(%rsp), %rax
movq %rax, -0x10(%rax)
andq $0x0, -0x8(%rax)
movb %cl, (%rax)
leaq 0x64d4(%rip), %rsi      # 0xb599
leaq 0xf0(%rsp), %rdi
pushq $0x8
popq %rdx
callq 0x32e0
leaq 0xf0(%rsp), %r14
leaq 0x2f8(%rsp), %r15
leaq 0x10(%rsp), %r12
leaq 0x69a4(%rip), %r13      # 0xba95
movq %r14, %rdi
movq %r15, %rsi
callq 0x3030
movq (%rax), %rcx
movq -0x18(%rcx), %rcx
testb $0x5, 0x20(%rax,%rcx)
jne 0x5122
movq %r12, %rdi
movq %r15, %rsi
callq 0x3300
movq %r12, %rdi
movq %r13, %rsi
callq 0x32f0
jmp 0x50f1
leaq 0xf0(%rsp), %rdi
callq 0x3040
cmpl $0x1, %ebp
jle 0x5195
movq 0x8(%rbx), %rsi
leaq 0xf0(%rsp), %rdi
pushq $0x8
popq %rdx
callq 0x3130
leaq 0xf0(%rsp), %rbx
leaq 0x2f8(%rsp), %r14
leaq 0x10(%rsp), %r15
leaq 0x6931(%rip), %r12      # 0xba95
movq %rbx, %rdi
movq %r14, %rsi
callq 0x3030
movq (%rax), %rcx
movq -0x18(%rcx), %rcx
testb $0x5, 0x20(%rax,%rcx)
jne 0x51e1
movq %r15, %rdi
movq %r14, %rsi
callq 0x3300
movq %r15, %rdi
movq %r12, %rsi
callq 0x32f0
jmp 0x5164
movq 0xbe3c(%rip), %rbx      # 0x10fd8
leaq 0x2f8(%rsp), %r14
leaq 0x10(%rsp), %r15
leaq 0x68e5(%rip), %r12      # 0xba95
movq %rbx, %rdi
movq %r14, %rsi
callq 0x3030
movq (%rax), %rcx
movq -0x18(%rcx), %rcx
testb $0x5, 0x20(%rax,%rcx)
jne 0x51ee
movq %r15, %rdi
movq %r14, %rsi
callq 0x3300
movq %r15, %rdi
movq %r12, %rsi
callq 0x32f0
jmp 0x51b0
leaq 0xf0(%rsp), %rdi
callq 0x3040
leaq 0xa0(%rsp), %rdi
leaq 0x10(%rsp), %rsi
callq 0x878e
leaq 0xa0(%rsp), %rdi
callq 0x8c40
leaq 0x30(%rsp), %rdi
movq %rsp, %rdx
movq %rax, %rsi
callq 0x4258
leaq 0x30(%rsp), %rdi
callq 0x6fd6
leaq 0xa0(%rsp), %rdi
callq 0x72bc
leaq 0xf0(%rsp), %rdi
callq 0x3050
leaq 0x2f8(%rsp), %rdi
callq 0x30c0
leaq 0x10(%rsp), %rdi
callq 0x30c0
leaq 0x8(%rsp), %rdi
callq 0x750c
xorl %eax, %eax
addq $0x318, %rsp            # imm = 0x318
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
jmp 0x5278
movq %rax, %rbx
leaq 0xa0(%rsp), %rdi
callq 0x72bc
jmp 0x53eb
jmp 0x53e8
movq %rax, %rbx
jmp 0x53f8
jmp 0x5372
jmp 0x5384
jmp 0x53dd
jmp 0x5372
jmp 0x5384
jmp 0x53dd
jmp 0x53c1
jmp 0x53d0
jmp 0x53dd
jmp 0x53c1
jmp 0x53d0
jmp 0x53dd
jmp 0x53c1
jmp 0x53d0
jmp 0x53dd
jmp 0x53c1
jmp 0x53d0
jmp 0x53dd
jmp 0x53c1
jmp 0x53d0
jmp 0x53dd
jmp 0x53c1
jmp 0x53d0
jmp 0x53dd
jmp 0x53c1
jmp 0x53d0
jmp 0x53dd
jmp 0x53c1
jmp 0x53d0
jmp 0x53dd
jmp 0x53c1
jmp 0x53d0
jmp 0x53dd
jmp 0x5372
jmp 0x5384
jmp 0x53dd
jmp 0x5372
jmp 0x5384
jmp 0x53dd
jmp 0x5372
jmp 0x5384
jmp 0x53dd
jmp 0x5372
jmp 0x5384
jmp 0x53dd
jmp 0x5372
jmp 0x5384
jmp 0x53dd
jmp 0x5372
jmp 0x5384
jmp 0x53dd
jmp 0x5372
jmp 0x5384
jmp 0x53dd
movq %rax, %rbx
leaq 0xf0(%rsp), %rdi
callq 0x6fd6
jmp 0x5387
movq %rax, %rbx
leaq 0xa0(%rsp), %rdi
callq 0x7274
leaq 0x30(%rsp), %rdi
jmp 0x540a
jmp 0x53dd
jmp 0x53c1
jmp 0x53d0
jmp 0x53dd
jmp 0x53c1
jmp 0x53d0
jmp 0x53dd
jmp 0x53c1
jmp 0x53d0
jmp 0x53dd
jmp 0x53c1
jmp 0x53d0
jmp 0x53dd
jmp 0x53c1
jmp 0x53d0
jmp 0x53dd
jmp 0x53c1
jmp 0x53d0
jmp 0x53dd
movq %rax, %rbx
leaq 0x30(%rsp), %rdi
callq 0x30c0
jmp 0x53d3
movq %rax, %rbx
leaq 0xf0(%rsp), %rdi
jmp 0x540a
movq %rax, %rbx
jmp 0x540f
jmp 0x53e8
jmp 0x53e8
jmp 0x53e8
movq %rax, %rbx
leaq 0xf0(%rsp), %rdi
callq 0x3050
leaq 0x2f8(%rsp), %rdi
callq 0x30c0
leaq 0x10(%rsp), %rdi
callq 0x30c0
leaq 0x8(%rsp), %rdi
callq 0x750c
movq %rbx, %rdi
callq 0x32b0
nop