// File: /workspace/github_cpp_makefile_star2_O1/philpoore[P]Math/main.cpp
// Function: run(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>)
void run(string input) {
    Lexer lexer(input);
    auto tokens = lexer.tokenize();

#ifdef DEBUG
    // Debug tokens
    for (auto token : tokens) cerr << to_string(token) << endl;
#endif

    Parser parser(tokens);

    AstStmts* ast = parser.parse();

#ifdef DEBUG
    // Debug AST
    cerr << to_string(ast) << endl;
    cerr << to_expr_string(ast) << endl;
#endif

    interp.exec(ast);
    // cout << setprecision(16) << value << endl;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x108, %rsp            # imm = 0x108
leaq -0x100(%rbp), %r14
movq %r14, -0x10(%r14)
movq (%rdi), %rsi
movq 0x8(%rdi), %rdx
addq %rsi, %rdx
leaq -0x110(%rbp), %rbx
movq %rbx, %rdi
callq 0xb374
leaq -0x98(%rbp), %rax
movq %rax, -0x10(%rax)
movq (%rbx), %rsi
movq 0x8(%rbx), %rdx
addq %rsi, %rdx
leaq -0xa8(%rbp), %rdi
callq 0xb374
movl $0x0, -0x88(%rbp)
movl -0x108(%rbp), %eax
movl %eax, -0x84(%rbp)
movq $0x0, -0x80(%rbp)
movq -0x110(%rbp), %rdi
cmpq %r14, %rdi
je 0xa19f
movq -0x100(%rbp), %rsi
incq %rsi
callq 0x3240
leaq -0xc0(%rbp), %rdi
leaq -0xa8(%rbp), %rsi
callq 0x7a06
movq -0xc0(%rbp), %r12
movq -0xb8(%rbp), %r13
cmpq %r13, %r12
je 0xa2d4
leaq -0x60(%rbp), %r14
leaq -0xd8(%rbp), %r15
movl (%r12), %eax
movl %eax, -0x78(%rbp)
movq %r14, -0x70(%rbp)
movq 0x8(%r12), %rsi
movq 0x10(%r12), %rdx
addq %rsi, %rdx
leaq -0x70(%rbp), %rdi
callq 0xb374
movq 0x28(%r12), %rax
movq %rax, -0x50(%rbp)
movl -0x78(%rbp), %eax
movl %eax, -0xf0(%rbp)
movq %r15, -0xe8(%rbp)
movq -0x70(%rbp), %rsi
movq -0x68(%rbp), %rdx
addq %rsi, %rdx
leaq -0xe8(%rbp), %rdi
callq 0xb374
movq -0x50(%rbp), %rax
movq %rax, -0xc8(%rbp)
leaq -0x48(%rbp), %rdi
leaq -0xf0(%rbp), %rsi
callq 0x446c
movq -0x48(%rbp), %rsi
movq -0x40(%rbp), %rdx
movq 0x7da1(%rip), %rdi      # 0x11ff0
callq 0x3270
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x3210
movsbl %al, %esi
movq %rbx, %rdi
callq 0x3030
movq %rax, %rdi
callq 0x3180
movq -0x48(%rbp), %rdi
leaq -0x38(%rbp), %rax
cmpq %rax, %rdi
je 0xa297
movq -0x38(%rbp), %rsi
incq %rsi
callq 0x3240
movq -0xe8(%rbp), %rdi
cmpq %r15, %rdi
je 0xa2b2
movq -0xd8(%rbp), %rsi
incq %rsi
callq 0x3240
movq -0x70(%rbp), %rdi
cmpq %r14, %rdi
je 0xa2c7
movq -0x60(%rbp), %rsi
incq %rsi
callq 0x3240
addq $0x30, %r12
cmpq %r13, %r12
jne 0xa1d4
leaq -0x128(%rbp), %rdi
leaq -0xc0(%rbp), %rsi
callq 0xb0b0
leaq -0x78(%rbp), %rdi
leaq -0x128(%rbp), %rsi
callq 0xb0b0
leaq -0x128(%rbp), %rdi
movq 0x8(%rdi), %rax
subq (%rdi), %rax
shrq $0x4, %rax
imull $0xaaaaaaab, %eax, %eax # imm = 0xAAAAAAAB
leaq -0x78(%rbp), %rbx
movl %eax, 0x18(%rbx)
movl $0x0, 0x1c(%rbx)
callq 0xb03c
movq %rbx, %rdi
callq 0x8b2a
movq %rax, %rbx
leaq -0x48(%rbp), %rdi
movq %rax, %rsi
callq 0x5615
movq -0x48(%rbp), %rsi
movq -0x40(%rbp), %rdx
movq 0x7ca8(%rip), %rdi      # 0x11ff0
callq 0x3270
movq %rax, %r14
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x3210
movsbl %al, %esi
movq %r14, %rdi
callq 0x3030
movq %rax, %rdi
callq 0x3180
leaq -0x38(%rbp), %r15
movq -0x10(%r15), %rdi
cmpq %r15, %rdi
je 0xa390
movq -0x38(%rbp), %rsi
incq %rsi
callq 0x3240
leaq -0x48(%rbp), %rdi
movq %rbx, %rsi
callq 0x614c
movq -0x48(%rbp), %rsi
movq -0x40(%rbp), %rdx
movq 0x7c45(%rip), %rdi      # 0x11ff0
callq 0x3270
movq %rax, %r14
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x3210
movsbl %al, %esi
movq %r14, %rdi
callq 0x3030
movq %rax, %rdi
callq 0x3180
movq -0x48(%rbp), %rdi
cmpq %r15, %rdi
je 0xa3ef
movq -0x38(%rbp), %rsi
incq %rsi
callq 0x3240
movq 0x8(%rbx), %r14
movq 0x10(%rbx), %r15
cmpq %r15, %r14
je 0xa417
leaq 0x7ebd(%rip), %rbx      # 0x122c0
movq (%r14), %rsi
movq %rbx, %rdi
callq 0x75da
addq $0x8, %r14
cmpq %r15, %r14
jne 0xa403
leaq -0x78(%rbp), %rdi
callq 0xb03c
leaq -0xc0(%rbp), %rdi
callq 0xb03c
movq -0xa8(%rbp), %rdi
leaq -0x98(%rbp), %rax
cmpq %rax, %rdi
je 0xa44e
movq -0x98(%rbp), %rsi
incq %rsi
callq 0x3240
addq $0x108, %rsp            # imm = 0x108
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
jmp 0xa4d9
jmp 0xa4d9
jmp 0xa4d9
movq %rax, %rbx
leaq -0x128(%rbp), %rdi
jmp 0xa4e0
jmp 0xa4ca
movq %rax, %rbx
leaq -0x98(%rbp), %r15
jmp 0xa546
movq %rax, %rbx
movq -0x110(%rbp), %rdi
movq %r14, %r15
cmpq %r14, %rdi
jne 0xa552
jmp 0xa55d
movq %rax, %rbx
movq -0x48(%rbp), %rdi
cmpq %r15, %rdi
jne 0xa4bc
jmp 0xa4dc
movq %rax, %rbx
leaq -0x38(%rbp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0xa4dc
movq -0x38(%rbp), %rsi
incq %rsi
callq 0x3240
jmp 0xa4dc
movq %rax, %rbx
jmp 0xa533
movq %rax, %rbx
jmp 0xa51e
movq %rax, %rbx
jmp 0xa503
movq %rax, %rbx
leaq -0x78(%rbp), %rdi
callq 0xb03c
jmp 0xa533
movq %rax, %rbx
movq -0x48(%rbp), %rdi
leaq -0x38(%rbp), %rax
cmpq %rax, %rdi
je 0xa503
movq -0x38(%rbp), %rsi
incq %rsi
callq 0x3240
movq -0xe8(%rbp), %rdi
cmpq %r15, %rdi
je 0xa51e
movq -0xd8(%rbp), %rsi
incq %rsi
callq 0x3240
movq -0x70(%rbp), %rdi
cmpq %r14, %rdi
je 0xa533
movq -0x60(%rbp), %rsi
incq %rsi
callq 0x3240
leaq -0x98(%rbp), %r15
leaq -0xc0(%rbp), %rdi
callq 0xb03c
movq -0xa8(%rbp), %rdi
cmpq %r15, %rdi
je 0xa55d
movq (%r15), %rsi
incq %rsi
callq 0x3240
movq %rbx, %rdi
callq 0x3370