// File: Falldog[P]dcinja/src/dcinja.cpp
// Function: read_source(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&)
bool read_source(std::string srcPath, std::string& content) {
    if (srcPath == "") {
        std::istream_iterator<char> it(std::cin >> std::noskipws);
        std::istream_iterator<char> end;
        content.assign(it, end);
    } else {
        std::ifstream fs(srcPath);
        if (!fs.good()) {
            std::cout << "can't find the file: " << srcPath << std::endl;
            exit(1);
        }
        fs.seekg(0, std::ios::end);
        size_t size = fs.tellg();
        std::string buffer(size, ' ');
        fs.seekg(0);
        fs.read(&buffer[0], size); 
        content = buffer;
    }
    return true;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x310, %rsp            # imm = 0x310
movq %rdi, -0x2c0(%rbp)
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
leaq 0xb669e(%rip), %rsi     # 0xc25ff
callq 0x10d10
testb $0x1, %al
jne 0xbf6c
jmp 0xbfd2
movq 0x111055(%rip), %rdi    # 0x11cfc8
leaq 0x4dc6(%rip), %rsi      # 0x10d40
callq 0xb9b0
movq %rax, %rsi
leaq -0x20(%rbp), %rdi
callq 0x10d70
leaq -0x30(%rbp), %rdi
callq 0x10da0
movq -0x10(%rbp), %rax
movq %rax, -0x2c8(%rbp)
leaq -0x40(%rbp), %rdi
leaq -0x20(%rbp), %rsi
callq 0x10e50
leaq -0x50(%rbp), %rdi
leaq -0x30(%rbp), %rsi
callq 0x10e50
movq -0x2c8(%rbp), %rdi
leaq -0x40(%rbp), %rsi
leaq -0x50(%rbp), %rdx
callq 0x10dc0
jmp 0xc21f
movq -0x2c0(%rbp), %rsi
leaq -0x258(%rbp), %rdi
movl $0x8, %edx
callq 0xb960
movq -0x258(%rbp), %rax
movq -0x18(%rax), %rax
leaq -0x258(%rbp,%rax), %rdi
callq 0xb9d0
movb %al, -0x2c9(%rbp)
jmp 0xc00a
movb -0x2c9(%rbp), %al
testb $0x1, %al
jne 0xc084
jmp 0xc016
movq 0x110f5b(%rip), %rdi    # 0x11cf78
leaq 0xb6172(%rip), %rsi     # 0xc2196
callq 0xb550
movq %rax, -0x2d8(%rbp)
jmp 0xc032
movq -0x2c0(%rbp), %rsi
movq -0x2d8(%rbp), %rdi
callq 0xb500
movq %rax, -0x2e0(%rbp)
jmp 0xc04e
movq -0x2e0(%rbp), %rdi
movq 0x110ecc(%rip), %rsi    # 0x11cf28
callq 0xb5d0
jmp 0xc063
movl $0x1, %edi
callq 0xb6d0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x260(%rbp)
movl %eax, -0x264(%rbp)
jmp 0xc211
xorl %eax, %eax
movl %eax, %esi
leaq -0x258(%rbp), %rdi
movl $0x2, %edx
callq 0xb7f0
jmp 0xc09b
leaq -0x258(%rbp), %rdi
callq 0xba20
movq %rdx, -0x2f0(%rbp)
movq %rax, -0x2e8(%rbp)
jmp 0xc0b7
movq -0x2f0(%rbp), %rax
movq -0x2e8(%rbp), %rcx
movq %rcx, -0x280(%rbp)
movq %rax, -0x278(%rbp)
leaq -0x280(%rbp), %rdi
callq 0x10e90
movq %rax, -0x2f8(%rbp)
jmp 0xc0e8
movq -0x2f8(%rbp), %rax
movq %rax, -0x270(%rbp)
movq -0x270(%rbp), %rax
movq %rax, -0x308(%rbp)
leaq -0x2a1(%rbp), %rdi
movq %rdi, -0x300(%rbp)
callq 0xba70
movq -0x308(%rbp), %rsi
movq -0x300(%rbp), %rcx
leaq -0x2a0(%rbp), %rdi
movl $0x20, %edx
callq 0x10eb0
jmp 0xc138
leaq -0x2a1(%rbp), %rdi
callq 0xb600
xorl %eax, %eax
movl %eax, %esi
leaq -0x2b8(%rbp), %rdi
callq 0x10f20
jmp 0xc156
movq -0x2b8(%rbp), %rsi
movq -0x2b0(%rbp), %rdx
leaq -0x258(%rbp), %rdi
callq 0xb750
jmp 0xc172
xorl %eax, %eax
movl %eax, %esi
leaq -0x2a0(%rbp), %rdi
callq 0xbb60
movq %rax, -0x310(%rbp)
jmp 0xc18b
movq -0x310(%rbp), %rsi
movq -0x270(%rbp), %rdx
leaq -0x258(%rbp), %rdi
callq 0xb730
jmp 0xc1a7
movq -0x10(%rbp), %rdi
leaq -0x2a0(%rbp), %rsi
callq 0xb070
jmp 0xc1b9
leaq -0x2a0(%rbp), %rdi
callq 0xbb98
leaq -0x258(%rbp), %rdi
callq 0xb100
jmp 0xc21f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x260(%rbp)
movl %eax, -0x264(%rbp)
leaq -0x2a1(%rbp), %rdi
callq 0xb600
jmp 0xc211
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x260(%rbp)
movl %eax, -0x264(%rbp)
leaq -0x2a0(%rbp), %rdi
callq 0xbb98
leaq -0x258(%rbp), %rdi
callq 0xb100
jmp 0xc22c
movb $0x1, %al
andb $0x1, %al
addq $0x310, %rsp            # imm = 0x310
popq %rbp
retq
movq -0x260(%rbp), %rdi
callq 0xba60
nopl (%rax,%rax)