// File: epfml[P]sent2vec/src/main.cc
// Function: main
int main(int argc, char** argv) {
  if (argc < 2) {
    printUsage();
    exit(EXIT_FAILURE);
  }
  std::string command(argv[1]);
  if (command == "skipgram" || command == "cbow" || command == "supervised" ||
      command == "sent2vec" || command == "cbow-c+w-ngrams") {
    train(argc, argv);
  } else if (command == "test") {
    test(argc, argv);
  } else if (command == "saveDict") {
    saveDict(argc, argv);
  } else if (command == "sent2vecFromDict") {
    trainFromDict(argc, argv);
  } else if (command == "quantize") {
    quantize(argc, argv);
  } else if (command == "print-word-vectors") {
    printWordVectors(argc, argv);
  } else if (command == "print-sentence-vectors") {
    printSentenceVectors(argc, argv);
  } else if (command == "print-vocabulary-vectors") {
    printVocabularyVectors(argc, argv);
  } else if (command == "print-vocabulary") {
    printVocabulary(argc, argv);
  } else if (command == "print-ngrams") {
    printNgrams(argc, argv);
  } else if (command == "nn") {
    nn(argc, argv);
  } else if (command == "nnSent") {
    nnSent(argc, argv);
  } else if (command == "analogies") {
    analogies(argc, argv);
  } else if (command == "analogiesSent") {
    analogiesSent(argc, argv);
  } else if (command == "predict" || command == "predict-prob" ) {
    predict(argc, argv);
  } else {
    printUsage();
    exit(EXIT_FAILURE);
  }
  return 0;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x70, %rsp
movl $0x0, -0x4(%rbp)
movl %edi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
cmpl $0x2, -0x8(%rbp)
jge 0x4127b
callq 0x3f410
movl $0x1, %edi
callq 0x54f0
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x58(%rbp)
leaq -0x31(%rbp), %rdi
movq %rdi, -0x50(%rbp)
callq 0x57b0
movq -0x58(%rbp), %rsi
movq -0x50(%rbp), %rdx
leaq -0x30(%rbp), %rdi
callq 0x7e10
jmp 0x412a7
leaq -0x31(%rbp), %rdi
callq 0x5480
leaq 0x34b0(%rip), %rsi      # 0x44767
leaq -0x30(%rbp), %rdi
callq 0x7ec0
movb %al, -0x59(%rbp)
jmp 0x412c5
movb -0x59(%rbp), %al
testb $0x1, %al
jne 0x41346
jmp 0x412ce
leaq 0xd58(%rip), %rsi       # 0x4202d
leaq -0x30(%rbp), %rdi
callq 0x7ec0
movb %al, -0x5a(%rbp)
jmp 0x412e3
movb -0x5a(%rbp), %al
testb $0x1, %al
jne 0x41346
jmp 0x412ec
leaq 0xd2f(%rip), %rsi       # 0x42022
leaq -0x30(%rbp), %rdi
callq 0x7ec0
movb %al, -0x5b(%rbp)
jmp 0x41301
movb -0x5b(%rbp), %al
testb $0x1, %al
jne 0x41346
jmp 0x4130a
leaq 0xd21(%rip), %rsi       # 0x42032
leaq -0x30(%rbp), %rdi
callq 0x7ec0
movb %al, -0x5c(%rbp)
jmp 0x4131f
movb -0x5c(%rbp), %al
testb $0x1, %al
jne 0x41346
jmp 0x41328
leaq 0xd0c(%rip), %rsi       # 0x4203b
leaq -0x30(%rbp), %rdi
callq 0x7ec0
movb %al, -0x5d(%rbp)
jmp 0x4133d
movb -0x5d(%rbp), %al
testb $0x1, %al
jne 0x41346
jmp 0x4138d
movl -0x8(%rbp), %edi
movq -0x10(%rbp), %rsi
callq 0x40f80
jmp 0x41354
jmp 0x41680
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x31(%rbp), %rdi
callq 0x5480
jmp 0x41699
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x30(%rbp), %rdi
callq 0x58d8
jmp 0x41699
leaq 0xd04(%rip), %rsi       # 0x42098
leaq -0x30(%rbp), %rdi
callq 0x7ec0
movb %al, -0x5e(%rbp)
jmp 0x413a2
movb -0x5e(%rbp), %al
testb $0x1, %al
jne 0x413ab
jmp 0x413be
movl -0x8(%rbp), %edi
movq -0x10(%rbp), %rsi
callq 0x3fa40
jmp 0x413b9
jmp 0x4167e
leaq 0x33ab(%rip), %rsi      # 0x44770
leaq -0x30(%rbp), %rdi
callq 0x7ec0
movb %al, -0x5f(%rbp)
jmp 0x413d3
movb -0x5f(%rbp), %al
testb $0x1, %al
jne 0x413dc
jmp 0x413ef
movl -0x8(%rbp), %edi
movq -0x10(%rbp), %rsi
callq 0x41070
jmp 0x413ea
jmp 0x4167c
leaq 0x3383(%rip), %rsi      # 0x44779
leaq -0x30(%rbp), %rdi
callq 0x7ec0
movb %al, -0x60(%rbp)
jmp 0x41404
movb -0x60(%rbp), %al
testb $0x1, %al
jne 0x4140d
jmp 0x41420
movl -0x8(%rbp), %edi
movq -0x10(%rbp), %rsi
callq 0x41160
jmp 0x4141b
jmp 0x4167a
leaq 0x3363(%rip), %rsi      # 0x4478a
leaq -0x30(%rbp), %rdi
callq 0x7ec0
movb %al, -0x61(%rbp)
jmp 0x41435
movb -0x61(%rbp), %al
testb $0x1, %al
jne 0x4143e
jmp 0x41451
movl -0x8(%rbp), %edi
movq -0x10(%rbp), %rsi
callq 0x3f7a0
jmp 0x4144c
jmp 0x41678
leaq 0x333b(%rip), %rsi      # 0x44793
leaq -0x30(%rbp), %rdi
callq 0x7ec0
movb %al, -0x62(%rbp)
jmp 0x41466
movb -0x62(%rbp), %al
testb $0x1, %al
jne 0x4146f
jmp 0x41482
movl -0x8(%rbp), %edi
movq -0x10(%rbp), %rsi
callq 0x40070
jmp 0x4147d
jmp 0x41676
leaq 0x331d(%rip), %rsi      # 0x447a6
leaq -0x30(%rbp), %rdi
callq 0x7ec0
movb %al, -0x63(%rbp)
jmp 0x41497
movb -0x63(%rbp), %al
testb $0x1, %al
jne 0x414a0
jmp 0x414b3
movl -0x8(%rbp), %edi
movq -0x10(%rbp), %rsi
callq 0x401a0
jmp 0x414ae
jmp 0x41674
leaq 0x3303(%rip), %rsi      # 0x447bd
leaq -0x30(%rbp), %rdi
callq 0x7ec0
movb %al, -0x64(%rbp)
jmp 0x414c8
movb -0x64(%rbp), %al
testb $0x1, %al
jne 0x414d1
jmp 0x414e4
movl -0x8(%rbp), %edi
movq -0x10(%rbp), %rsi
callq 0x402d0
jmp 0x414df
jmp 0x41672
leaq 0x32eb(%rip), %rsi      # 0x447d6
leaq -0x30(%rbp), %rdi
callq 0x7ec0
movb %al, -0x65(%rbp)
jmp 0x414f9
movb -0x65(%rbp), %al
testb $0x1, %al
jne 0x41502
jmp 0x41515
movl -0x8(%rbp), %edi
movq -0x10(%rbp), %rsi
callq 0x404e0
jmp 0x41510
jmp 0x41670
leaq 0x32cb(%rip), %rsi      # 0x447e7
leaq -0x30(%rbp), %rdi
callq 0x7ec0
movb %al, -0x66(%rbp)
jmp 0x4152a
movb -0x66(%rbp), %al
testb $0x1, %al
jne 0x41533
jmp 0x41546
movl -0x8(%rbp), %edi
movq -0x10(%rbp), %rsi
callq 0x40740
jmp 0x41541
jmp 0x4166e
leaq 0xc0b(%rip), %rsi       # 0x42158
leaq -0x30(%rbp), %rdi
callq 0x7ec0
movb %al, -0x67(%rbp)
jmp 0x4155b
movb -0x67(%rbp), %al
testb $0x1, %al
jne 0x41564
jmp 0x41577
movl -0x8(%rbp), %edi
movq -0x10(%rbp), %rsi
callq 0x40900
jmp 0x41572
jmp 0x4166c
leaq 0x3276(%rip), %rsi      # 0x447f4
leaq -0x30(%rbp), %rdi
callq 0x7ec0
movb %al, -0x68(%rbp)
jmp 0x4158c
movb -0x68(%rbp), %al
testb $0x1, %al
jne 0x41595
jmp 0x415a8
movl -0x8(%rbp), %edi
movq -0x10(%rbp), %rsi
callq 0x40a50
jmp 0x415a3
jmp 0x4166a
leaq 0x324c(%rip), %rsi      # 0x447fb
leaq -0x30(%rbp), %rdi
callq 0x7ec0
movb %al, -0x69(%rbp)
jmp 0x415bd
movb -0x69(%rbp), %al
testb $0x1, %al
jne 0x415c6
jmp 0x415d9
movl -0x8(%rbp), %edi
movq -0x10(%rbp), %rsi
callq 0x40c40
jmp 0x415d4
jmp 0x41668
leaq 0x3225(%rip), %rsi      # 0x44805
leaq -0x30(%rbp), %rdi
callq 0x7ec0
movb %al, -0x6a(%rbp)
jmp 0x415ee
movb -0x6a(%rbp), %al
testb $0x1, %al
jne 0x415f7
jmp 0x41607
movl -0x8(%rbp), %edi
movq -0x10(%rbp), %rsi
callq 0x40d90
jmp 0x41605
jmp 0x41666
leaq 0x3205(%rip), %rsi      # 0x44813
leaq -0x30(%rbp), %rdi
callq 0x7ec0
movb %al, -0x6b(%rbp)
jmp 0x4161c
movb -0x6b(%rbp), %al
testb $0x1, %al
jne 0x41643
jmp 0x41625
leaq 0x312e(%rip), %rsi      # 0x4475a
leaq -0x30(%rbp), %rdi
callq 0x7ec0
movb %al, -0x6c(%rbp)
jmp 0x4163a
movb -0x6c(%rbp), %al
testb $0x1, %al
jne 0x41643
jmp 0x41653
movl -0x8(%rbp), %edi
movq -0x10(%rbp), %rsi
callq 0x3fd10
jmp 0x41651
jmp 0x41664
callq 0x3f410
jmp 0x4165a
movl $0x1, %edi
callq 0x54f0
jmp 0x41666
jmp 0x41668
jmp 0x4166a
jmp 0x4166c
jmp 0x4166e
jmp 0x41670
jmp 0x41672
jmp 0x41674
jmp 0x41676
jmp 0x41678
jmp 0x4167a
jmp 0x4167c
jmp 0x4167e
jmp 0x41680
movl $0x0, -0x4(%rbp)
leaq -0x30(%rbp), %rdi
callq 0x58d8
movl -0x4(%rbp), %eax
addq $0x70, %rsp
popq %rbp
retq
movq -0x40(%rbp), %rdi
callq 0x57a0
nopw %cs:(%rax,%rax)
nopl (%rax)