// File: /workspace/github_cpp_makefile_star2_O2/akinanop[P]mvl-solver/src/Main.cc
// Function: main
int main(int argc, char ** argv)
{
  //Start Solver Time
  cout<<endl<<"************************************************************************"<<endl;

  cout<<endl<<"Finite Domain Sat Solver"<<endl;

  cout<<endl<<"************************************************************************"<<endl;

  //Parse commandline info
  CommandLine * clineinfo = new CommandLine;
  ParseCommandLine(clineinfo, argc, argv);

  //Check what option is selected and call appropriate function
  if(argc <= 1)
    {
      PrintHelp();
    }

  else if(!strcmp(argv[1], "-genben"))
    {
      //if option is to generate finite domain
      if(clineinfo->BOOL_FINITE)
	{
	  //Call GenBenFunction
	  GenBenFin(clineinfo);
	}
      //else generate boolean domain
      else
	{
	  //Call GenBenBool
	  GenBenBool(clineinfo);
	}

    }

  else if(!strcmp(argv[1], "-b2f"))
    {
      //Call Boolean2Finite
      Boolean2Finite(clineinfo);
    }

  else if(!strcmp(argv[1], "-linenc"))
    {
      //Call LinearEncode
      LinearEncode(clineinfo);
    }

  else if(!strcmp(argv[1], "-quadenc"))
    {
      //Call QuadraticEncode
      QuadraticEncode(clineinfo);
    }

  else if(!strcmp(argv[1], "-solvech"))
    {
        SolveFinite(clineinfo, "ch");
    }
    //Call SolveFinite

  else if(!strcmp(argv[1], "-solvenc"))
    {
      //Call SolveFinite
      SolveFinite(clineinfo, "nc");

    }

  else
    {
      PrintHelp();
    }

  //return nothing

  return 0;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %rbx
subq $0x48, %rsp
movq %rsi, %r14
movl %edi, %ebp
movq 0xc97e(%rip), %rbx      # 0xefd0
movq %rbx, %rdi
callq 0x2140
leaq 0x79a3(%rip), %r15      # 0xa004
movq %rax, %rdi
movq %r15, %rsi
callq 0x2210
movq %rax, %rdi
callq 0x2140
movq %rbx, %rdi
callq 0x2140
leaq 0x79ca(%rip), %rsi      # 0xa04d
movq %rax, %rdi
callq 0x2210
movq %rax, %rdi
callq 0x2140
movq %rbx, %rdi
callq 0x2140
movq %rax, %rdi
movq %r15, %rsi
callq 0x2210
movq %rax, %rdi
callq 0x2140
pushq $0x40
popq %rdi
callq 0x2220
movq %rax, %rbx
movq %rax, %rdi
movl %ebp, %esi
movq %r14, %rdx
callq 0x2e0d
cmpl $0x1, %ebp
jg 0x26dd
callq 0x2939
xorl %eax, %eax
addq $0x48, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
movq 0x8(%r14), %r14
leaq 0x797e(%rip), %rsi      # 0xa066
movq %r14, %rdi
callq 0x22d0
testl %eax, %eax
je 0x2795
leaq 0x796f(%rip), %rsi      # 0xa06e
movq %r14, %rdi
callq 0x22d0
testl %eax, %eax
je 0x27a8
leaq 0x795d(%rip), %rsi      # 0xa073
movq %r14, %rdi
callq 0x22d0
testl %eax, %eax
je 0x27c2
leaq 0x794e(%rip), %rsi      # 0xa07b
movq %r14, %rdi
callq 0x22d0
testl %eax, %eax
je 0x27cf
leaq 0x7940(%rip), %rsi      # 0xa084
movq %r14, %rdi
callq 0x22d0
testl %eax, %eax
je 0x27dc
leaq 0x7932(%rip), %rsi      # 0xa08d
movq %r14, %rdi
callq 0x22d0
testl %eax, %eax
jne 0x26cb
leaq 0x790f(%rip), %rsi      # 0xa081
leaq 0x8(%rsp), %rdi
leaq 0x7(%rsp), %rdx
callq 0x2834
leaq 0x8(%rsp), %rsi
movq %rbx, %rdi
callq 0x953c
leaq 0x8(%rsp), %rdi
jmp 0x2804
cmpb $0x1, 0x19(%rbx)
jne 0x27b5
movq %rbx, %rdi
callq 0x34e4
jmp 0x26d0
movq %rbx, %rdi
callq 0x3cf0
jmp 0x26d0
movq %rbx, %rdi
callq 0x39dc
jmp 0x26d0
movq %rbx, %rdi
callq 0x47e8
jmp 0x26d0
movq %rbx, %rdi
callq 0x4f6c
jmp 0x26d0
leaq 0x78a7(%rip), %rsi      # 0xa08a
leaq 0x28(%rsp), %rdi
leaq 0x7(%rsp), %rdx
callq 0x2834
leaq 0x28(%rsp), %rsi
movq %rbx, %rdi
callq 0x953c
leaq 0x28(%rsp), %rdi
callq 0x2130
jmp 0x26d0
movq %rax, %rbx
leaq 0x8(%rsp), %rdi
jmp 0x2822
jmp 0x2829
movq %rax, %rbx
leaq 0x28(%rsp), %rdi
callq 0x2130
jmp 0x282c
movq %rax, %rbx
movq %rbx, %rdi
callq 0x2390