// File: /workspace/github_cpp_makefile_star2_O3/jsteemann[P]jshund/src/jshund.cpp
// Function: main
int main (int argc, char* argv[]) {
  if (argc < 2) {
    // not enough arguments
    Bark();
    std::cout << "usage: " << argv[0] << " <file>" << std::endl;
    return EXIT_FAILURE;
  }
 
  // parse options
  bool colors  = true;
  bool globals = true; 
  bool debug   = false; 

  for (int i = 1; i < argc; ++i) {
    const std::string argument(argv[i]);

    if (argument.size() > 2 && argument.substr(0, 2) == "--") { 
      if (argument == "--colors") {
        colors = true;
      }
      else if (argument == "--no-colors") {
        colors = false;
      }
      else if (argument == "--globals") {
        globals = true;
      }
      else if (argument == "--no-globals") {
        globals = false;
      }
      else if (argument == "--debug") {
        debug = true;
      }
      else if (argument == "--help" || argument == "--version" || argument == "--bark") {
        Bark();
        return EXIT_SUCCESS;
      }
    }
  }

  // add files
  std::vector<std::string> files = AddFiles(argc, argv);

  int errors = ProcessFiles(files, colors, globals, debug);

  // return status code based on whether there were any errors
  if (errors == 0) {
    return EXIT_SUCCESS;
  }

  return EXIT_FAILURE;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x188, %rsp            # imm = 0x188
movq %rsi, %rbx
cmpl $0x2, %edi
jge 0x2570
callq 0x2bda
movq 0x9a9f(%rip), %r14      # 0xbfd0
leaq 0x5b20(%rip), %rsi      # 0x8058
movl $0x7, %edx
movq %r14, %rdi
callq 0x2250
movq (%rbx), %rbx
testq %rbx, %rbx
je 0x2ac2
movq %rbx, %rdi
callq 0x20f0
movq 0x9a70(%rip), %rdi      # 0xbfd0
movq %rbx, %rsi
movq %rax, %rdx
callq 0x2250
jmp 0x2ada
movl %edi, %eax
movq %rax, 0x10(%rsp)
movb $0x1, %al
movl %eax, 0x4(%rsp)
movl $0x1, %r12d
movq $0x0, 0x18(%rsp)
leaq 0x58(%rsp), %r14
leaq 0x100(%rsp), %r15
movb $0x1, %al
movl %eax, 0x8(%rsp)
movq (%rbx,%r12,8), %rsi
movq %r14, %rdi
movq %r15, %rdx
callq 0x2d6c
movb $0x1, %r13b
cmpq $0x3, 0x60(%rsp)
jb 0x260d
movl $0x2, %ecx
movq %r15, %rdi
movq %r14, %rbp
movq %r14, %rsi
xorl %edx, %edx
callq 0x2220
movq %r15, %rdi
leaq 0x5c85(%rip), %rsi      # 0x825d
callq 0x20b0
movl %eax, %r14d
movq 0x100(%rsp), %rdi
leaq 0x110(%rsp), %rax
cmpq %rax, %rdi
je 0x2605
movq 0x110(%rsp), %rsi
incq %rsi
callq 0x2200
testl %r14d, %r14d
je 0x2645
movq %rbp, %r14
movq 0x58(%rsp), %rdi
leaq 0x68(%rsp), %rax
cmpq %rax, %rdi
je 0x2629
movq 0x68(%rsp), %rsi
incq %rsi
callq 0x2200
testb %r13b, %r13b
je 0x2746
incq %r12
cmpq %r12, 0x10(%rsp)
jne 0x259f
jmp 0x274d
movq %rbp, %r14
movq %rbp, %rdi
leaq 0x5a16(%rip), %rsi      # 0x8068
callq 0x20b0
movb $0x1, %r13b
testl %eax, %eax
je 0x270a
movq %r14, %rdi
leaq 0x5a05(%rip), %rsi      # 0x8071
callq 0x20b0
testl %eax, %eax
je 0x2715
movq %r14, %rdi
leaq 0x59fa(%rip), %rsi      # 0x807d
callq 0x20b0
movb $0x1, %r13b
testl %eax, %eax
je 0x2722
movq %r14, %rdi
leaq 0x59ea(%rip), %rsi      # 0x8087
callq 0x20b0
testl %eax, %eax
je 0x272d
movq %r14, %rdi
leaq 0x59e0(%rip), %rsi      # 0x8094
callq 0x20b0
movb $0x1, %r13b
testl %eax, %eax
je 0x273a
movq %r14, %rdi
leaq 0x59d2(%rip), %rsi      # 0x809c
callq 0x20b0
testl %eax, %eax
je 0x26fd
movq %r14, %rdi
leaq 0x59c6(%rip), %rsi      # 0x80a3
callq 0x20b0
testl %eax, %eax
je 0x26fd
movq %r14, %rdi
leaq 0x59bd(%rip), %rsi      # 0x80ad
callq 0x20b0
testl %eax, %eax
jne 0x260d
callq 0x2bda
xorl %r13d, %r13d
jmp 0x260d
movb $0x1, %al
movl %eax, 0x8(%rsp)
jmp 0x260d
movl $0x0, 0x8(%rsp)
jmp 0x260d
movb $0x1, %al
movl %eax, 0x4(%rsp)
jmp 0x260d
movl $0x0, 0x4(%rsp)
jmp 0x260d
movb $0x1, %al
movq %rax, 0x18(%rsp)
jmp 0x260d
xorl %ebx, %ebx
jmp 0x2b28
xorps %xmm0, %xmm0
leaq 0x40(%rsp), %rax
movaps %xmm0, (%rax)
movq $0x0, 0x10(%rax)
movl $0x1, %r13d
xorl %r14d, %r14d
leaq 0x58(%rsp), %r15
leaq 0x100(%rsp), %r12
movq (%rbx,%r13,8), %rsi
movq %r15, %rdi
movq %r12, %rdx
callq 0x2d6c
movl $0x2, %ecx
movq %r12, %rdi
movq %r15, %rsi
xorl %edx, %edx
callq 0x2220
movq %r12, %rdi
leaq 0x5abc(%rip), %rsi      # 0x825d
callq 0x20b0
movl %eax, %ebp
movq 0x100(%rsp), %rdi
leaq 0x110(%rsp), %rax
cmpq %rax, %rdi
je 0x27cd
movq 0x110(%rsp), %rsi
incq %rsi
callq 0x2200
testl %ebp, %ebp
setne %al
orb %r14b, %al
testb $0x1, %al
je 0x27ed
leaq 0x20(%rsp), %rdi
leaq 0x40(%rsp), %rsi
movq %r15, %rdx
callq 0x2e08
jmp 0x27f7
cmpq $0x2, 0x60(%rsp)
sete %r14b
movq 0x58(%rsp), %rdi
leaq 0x68(%rsp), %rax
cmpq %rax, %rdi
je 0x2813
movq 0x68(%rsp), %rsi
incq %rsi
callq 0x2200
incq %r13
cmpq %r13, 0x10(%rsp)
jne 0x2776
movq 0x40(%rsp), %rax
cmpq %rax, 0x48(%rsp)
je 0x2b1c
movl $0x8, %ebx
xorl %r14d, %r14d
leaq 0x20(%rsp), %r15
movzbl 0x18(%rsp), %ecx
andl $0x1, %ecx
movl %ecx, 0x10(%rsp)
movzbl 0x8(%rsp), %ecx
andl $0x1, %ecx
movl %ecx, 0x8(%rsp)
movzbl 0x4(%rsp), %ecx
andl $0x1, %ecx
movl %ecx, 0x4(%rsp)
xorl %r12d, %r12d
leaq 0x30(%rsp), %rcx
movq %rcx, 0x20(%rsp)
movq -0x8(%rax,%rbx), %rsi
movq (%rax,%rbx), %rdx
addq %rsi, %rdx
movq %r15, %rdi
callq 0x35cc
leaq 0xf(%rsp), %rdi
movq %r15, %rsi
callq 0x3662
movq %rax, %rbp
testq %rax, %rax
je 0x2a0c
testb $0x1, 0x18(%rsp)
je 0x2988
movl $0x14, %edx
movq 0x971d(%rip), %rdi      # 0xbfd0
leaq 0x5956(%rip), %rsi      # 0x8210
callq 0x2250
movq 0x20(%rsp), %rsi
movq 0x28(%rsp), %rdx
movq 0x9700(%rip), %rdi      # 0xbfd0
callq 0x2250
movq %rax, %r13
movl $0x1, %edx
movq %rax, %rdi
leaq 0x5ad4(%rip), %rsi      # 0x83bb
callq 0x2250
movq (%r13), %rax
movq -0x18(%rax), %rdi
addq %r13, %rdi
movl $0xa, %esi
callq 0x21e0
movsbl %al, %esi
movq %r13, %rdi
callq 0x2040
movq %rax, %rdi
callq 0x2160
movl $0x3a, %edx
movq 0x96b0(%rip), %rdi      # 0xbfd0
leaq 0x58fe(%rip), %rsi      # 0x8225
callq 0x2250
movq 0x969d(%rip), %rcx      # 0xbfd0
movq (%rcx), %rax
movq -0x18(%rax), %rdi
addq %rcx, %rdi
movl $0xa, %esi
callq 0x21e0
movsbl %al, %esi
movq 0x967f(%rip), %rdi      # 0xbfd0
callq 0x2040
movq %rax, %rdi
callq 0x2160
movq %rax, %r13
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r13, %rdi
movl $0xa, %esi
callq 0x21e0
movsbl %al, %esi
movq %r13, %rdi
callq 0x2040
movq %rax, %rdi
callq 0x2160
leaq 0x58(%rsp), %rdi
movl 0x10(%rsp), %esi
callq 0x3736
leaq 0x100(%rsp), %rdi
movl 0x8(%rsp), %esi
movl 0x4(%rsp), %edx
callq 0x4d16
leaq 0x58(%rsp), %rdi
movq %rbp, %rsi
callq 0x5ac4
leaq 0x100(%rsp), %r13
movq %r13, %rdi
movq %r15, %rsi
movq %rax, %rdx
callq 0x4e50
testl %eax, %eax
sete %al
orb %al, %r14b
movq %r13, %rdi
callq 0x5b72
leaq 0xb8(%rsp), %rdi
callq 0x5c74
leaq 0x88(%rsp), %rdi
callq 0x6020
leaq 0x58(%rsp), %rdi
callq 0x6020
movq %rbp, %rdi
callq 0x2290
jmp 0x2a7c
movl $0x1b, %edx
movq 0x95d8(%rip), %rdi      # 0xbff0
leaq 0x57d5(%rip), %rsi      # 0x81f4
callq 0x2250
movq 0x20(%rsp), %rsi
movq 0x28(%rsp), %rdx
movq 0x95bb(%rip), %rdi      # 0xbff0
callq 0x2250
movq %rax, %rbp
movl $0x1, %edx
movq %rax, %rdi
leaq 0x596f(%rip), %rsi      # 0x83bb
callq 0x2250
movq (%rbp), %rax
movq -0x18(%rax), %rdi
addq %rbp, %rdi
movl $0xa, %esi
callq 0x21e0
movsbl %al, %esi
movq %rbp, %rdi
callq 0x2040
movb $0x1, %r14b
movq %rax, %rdi
callq 0x2160
movq 0x20(%rsp), %rdi
leaq 0x30(%rsp), %rax
cmpq %rax, %rdi
je 0x2a98
movq 0x30(%rsp), %rsi
incq %rsi
callq 0x2200
incq %r12
movq 0x40(%rsp), %rax
movq 0x48(%rsp), %rcx
subq %rax, %rcx
sarq $0x5, %rcx
addq $0x20, %rbx
cmpq %rcx, %r12
jb 0x2865
movzbl %r14b, %ebx
andl $0x1, %ebx
jmp 0x2b1e
movq (%r14), %rax
movq -0x18(%rax), %rax
leaq (%r14,%rax), %rdi
movl 0x20(%r14,%rax), %esi
orl $0x1, %esi
callq 0x2340
leaq 0x557f(%rip), %rsi      # 0x8060
movl $0x7, %edx
movq %r14, %rdi
callq 0x2250
movq (%r14), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x21e0
movsbl %al, %esi
movq %r14, %rdi
callq 0x2040
movq %rax, %rdi
callq 0x2160
movl $0x1, %ebx
jmp 0x2b28
xorl %ebx, %ebx
leaq 0x40(%rsp), %rdi
callq 0x2daa
movl %ebx, %eax
addq $0x188, %rsp            # imm = 0x188
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
jmp 0x2b47
jmp 0x2ba9
movq %rax, %rbx
jmp 0x2b7a
jmp 0x2b8b
leaq 0x68(%rsp), %r14
movq %rax, %rbx
movq 0x58(%rsp), %rdi
cmpq %r14, %rdi
je 0x2bd2
movq 0x68(%rsp), %rsi
incq %rsi
callq 0x2200
jmp 0x2bd2
jmp 0x2b86
movq %rax, %rbx
leaq 0x100(%rsp), %rdi
callq 0x5b72
leaq 0x58(%rsp), %rdi
callq 0x5bd8
jmp 0x2bac
movq %rax, %rbx
jmp 0x2bc8
movq %rax, %rbx
movq 0x58(%rsp), %rdi
leaq 0x68(%rsp), %rax
cmpq %rax, %rdi
je 0x2bc8
movq 0x68(%rsp), %rsi
jmp 0x2bc0
movq %rax, %rbx
jmp 0x2bd2
movq %rax, %rbx
movq 0x20(%rsp), %rdi
leaq 0x30(%rsp), %rax
cmpq %rax, %rdi
je 0x2bc8
movq 0x30(%rsp), %rsi
incq %rsi
callq 0x2200
leaq 0x40(%rsp), %rdi
callq 0x2daa
movq %rbx, %rdi
callq 0x2380