// File: Shadowsith[P]gtts/main.cpp
// Function: main
int main(int argc, char *argv[]) {
    typedef std::string string;
    switch(argc) {
        case 2:
            if (string("-h") == argv[1]
                || string("-H") == argv[1]
                || string("--help") == argv[1]) {
                gtts::GoogleTTS::help();
            }
            if (string("-v") == argv[1] || string("--version") == argv[1]) {
                gtts::GoogleTTS::version();
            }
            if (string("-l") == argv[1] || string("--languages") == argv[1]) {
                gtts::GoogleTTS::languages(); 
            }
            break;

        case 3: {
            string msg(argv[2]);
            string lang(argv[1]);
            std::unique_ptr<gtts::GoogleTTS>
                tts(new gtts::GoogleTTS(msg, lang));
            tts->execute();
            }
            break;

        case 4: {
            string msg(argv[2]);
            string lang(argv[1]);
            string speed(argv[3]);
            std::unique_ptr<gtts::GoogleTTS>
            tts(new gtts::GoogleTTS(msg, lang, speed));
            tts->execute();
            }
            break;

        default:
            gtts::GoogleTTS::help();
            break;
    }
    return 0;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x3d0, %rsp            # imm = 0x3D0
movl $0x0, -0x4(%rbp)
movl %edi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movl -0x8(%rbp), %eax
movl %eax, -0x2e0(%rbp)
subl $0x2, %eax
je 0x917e
jmp 0x9159
movl -0x2e0(%rbp), %eax
subl $0x3, %eax
je 0x9792
jmp 0x916a
movl -0x2e0(%rbp), %eax
subl $0x4, %eax
je 0x9a50
jmp 0x9d58
leaq -0x31(%rbp), %rdi
movq %rdi, -0x2e8(%rbp)
callq 0x2360
movq -0x2e8(%rbp), %rdx
movb $0x0, -0x6a(%rbp)
movb $0x0, -0x6b(%rbp)
movb $0x0, -0x92(%rbp)
movb $0x0, -0x93(%rbp)
leaq 0x2567(%rip), %rsi      # 0xb719
leaq -0x30(%rbp), %rdi
callq 0x5fa0
jmp 0x91bd
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rsi
leaq -0x30(%rbp), %rdi
callq 0x9080
movb %al, -0x2e9(%rbp)
jmp 0x91d6
movb -0x2e9(%rbp), %cl
movb $0x1, %al
testb $0x1, %cl
movb %al, -0x2ea(%rbp)
jne 0x92b5
jmp 0x91ef
leaq -0x69(%rbp), %rdi
movq %rdi, -0x2f8(%rbp)
callq 0x2360
movq -0x2f8(%rbp), %rdx
movb $0x1, -0x6a(%rbp)
leaq 0x225a(%rip), %rsi      # 0xb46b
leaq -0x68(%rbp), %rdi
callq 0x5fa0
jmp 0x921c
movb $0x1, -0x6b(%rbp)
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rsi
leaq -0x68(%rbp), %rdi
callq 0x9080
movb %al, -0x2f9(%rbp)
jmp 0x9239
movb -0x2f9(%rbp), %cl
movb $0x1, %al
testb $0x1, %cl
movb %al, -0x2ea(%rbp)
jne 0x92b5
jmp 0x924e
leaq -0x91(%rbp), %rdi
movq %rdi, -0x308(%rbp)
callq 0x2360
movq -0x308(%rbp), %rdx
movb $0x1, -0x92(%rbp)
leaq 0x24a6(%rip), %rsi      # 0xb71c
leaq -0x90(%rbp), %rdi
callq 0x5fa0
jmp 0x9284
movb $0x1, -0x93(%rbp)
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rsi
leaq -0x90(%rbp), %rdi
callq 0x9080
movb %al, -0x309(%rbp)
jmp 0x92a7
movb -0x309(%rbp), %al
movb %al, -0x2ea(%rbp)
jmp 0x92b5
movb -0x2ea(%rbp), %al
movb %al, -0x30a(%rbp)
testb $0x1, -0x93(%rbp)
jne 0x92cc
jmp 0x92d8
leaq -0x90(%rbp), %rdi
callq 0x2140
testb $0x1, -0x92(%rbp)
jne 0x92e3
jmp 0x92ef
leaq -0x91(%rbp), %rdi
callq 0x2250
testb $0x1, -0x6b(%rbp)
jne 0x92f7
jmp 0x9300
leaq -0x68(%rbp), %rdi
callq 0x2140
testb $0x1, -0x6a(%rbp)
jne 0x9308
jmp 0x9311
leaq -0x69(%rbp), %rdi
callq 0x2250
leaq -0x30(%rbp), %rdi
callq 0x2140
leaq -0x31(%rbp), %rdi
callq 0x2250
movb -0x30a(%rbp), %al
testb $0x1, %al
jne 0x9332
jmp 0x9403
callq 0x4f10
jmp 0x9403
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x93f5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x93ec
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x93d9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x93c6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x93ad
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
testb $0x1, -0x93(%rbp)
jne 0x939f
jmp 0x93ab
leaq -0x90(%rbp), %rdi
callq 0x2140
jmp 0x93ad
testb $0x1, -0x92(%rbp)
jne 0x93b8
jmp 0x93c4
leaq -0x91(%rbp), %rdi
callq 0x2250
jmp 0x93c6
testb $0x1, -0x6b(%rbp)
jne 0x93ce
jmp 0x93d7
leaq -0x68(%rbp), %rdi
callq 0x2140
jmp 0x93d9
testb $0x1, -0x6a(%rbp)
jne 0x93e1
jmp 0x93ea
leaq -0x69(%rbp), %rdi
callq 0x2250
jmp 0x93ec
leaq -0x30(%rbp), %rdi
callq 0x2140
leaq -0x31(%rbp), %rdi
callq 0x2250
jmp 0x9d68
leaq -0xb9(%rbp), %rdi
movq %rdi, -0x318(%rbp)
callq 0x2360
movq -0x318(%rbp), %rdx
movb $0x0, -0xe2(%rbp)
movb $0x0, -0xe3(%rbp)
leaq 0x22f1(%rip), %rsi      # 0xb723
leaq -0xb8(%rbp), %rdi
callq 0x5fa0
jmp 0x9440
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rsi
leaq -0xb8(%rbp), %rdi
callq 0x9080
movb %al, -0x319(%rbp)
jmp 0x945c
movb -0x319(%rbp), %cl
movb $0x1, %al
testb $0x1, %cl
movb %al, -0x31a(%rbp)
jne 0x94d8
jmp 0x9471
leaq -0xe1(%rbp), %rdi
movq %rdi, -0x328(%rbp)
callq 0x2360
movq -0x328(%rbp), %rdx
movb $0x1, -0xe2(%rbp)
leaq 0x228d(%rip), %rsi      # 0xb726
leaq -0xe0(%rbp), %rdi
callq 0x5fa0
jmp 0x94a7
movb $0x1, -0xe3(%rbp)
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rsi
leaq -0xe0(%rbp), %rdi
callq 0x9080
movb %al, -0x329(%rbp)
jmp 0x94ca
movb -0x329(%rbp), %al
movb %al, -0x31a(%rbp)
jmp 0x94d8
movb -0x31a(%rbp), %al
movb %al, -0x32a(%rbp)
testb $0x1, -0xe3(%rbp)
jne 0x94ef
jmp 0x94fb
leaq -0xe0(%rbp), %rdi
callq 0x2140
testb $0x1, -0xe2(%rbp)
jne 0x9506
jmp 0x9512
leaq -0xe1(%rbp), %rdi
callq 0x2250
leaq -0xb8(%rbp), %rdi
callq 0x2140
leaq -0xb9(%rbp), %rdi
callq 0x2250
movb -0x32a(%rbp), %al
testb $0x1, %al
jne 0x9539
jmp 0x95c8
callq 0x51d0
jmp 0x95c8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x95b7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x95ab
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x9592
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
testb $0x1, -0xe3(%rbp)
jne 0x9584
jmp 0x9590
leaq -0xe0(%rbp), %rdi
callq 0x2140
jmp 0x9592
testb $0x1, -0xe2(%rbp)
jne 0x959d
jmp 0x95a9
leaq -0xe1(%rbp), %rdi
callq 0x2250
jmp 0x95ab
leaq -0xb8(%rbp), %rdi
callq 0x2140
leaq -0xb9(%rbp), %rdi
callq 0x2250
jmp 0x9d68
leaq -0x109(%rbp), %rdi
movq %rdi, -0x338(%rbp)
callq 0x2360
movq -0x338(%rbp), %rdx
movb $0x0, -0x132(%rbp)
movb $0x0, -0x133(%rbp)
leaq 0x2139(%rip), %rsi      # 0xb730
leaq -0x108(%rbp), %rdi
callq 0x5fa0
jmp 0x9605
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rsi
leaq -0x108(%rbp), %rdi
callq 0x9080
movb %al, -0x339(%rbp)
jmp 0x9621
movb -0x339(%rbp), %cl
movb $0x1, %al
testb $0x1, %cl
movb %al, -0x33a(%rbp)
jne 0x969d
jmp 0x9636
leaq -0x131(%rbp), %rdi
movq %rdi, -0x348(%rbp)
callq 0x2360
movq -0x348(%rbp), %rdx
movb $0x1, -0x132(%rbp)
leaq 0x20d5(%rip), %rsi      # 0xb733
leaq -0x130(%rbp), %rdi
callq 0x5fa0
jmp 0x966c
movb $0x1, -0x133(%rbp)
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rsi
leaq -0x130(%rbp), %rdi
callq 0x9080
movb %al, -0x349(%rbp)
jmp 0x968f
movb -0x349(%rbp), %al
movb %al, -0x33a(%rbp)
jmp 0x969d
movb -0x33a(%rbp), %al
movb %al, -0x34a(%rbp)
testb $0x1, -0x133(%rbp)
jne 0x96b4
jmp 0x96c0
leaq -0x130(%rbp), %rdi
callq 0x2140
testb $0x1, -0x132(%rbp)
jne 0x96cb
jmp 0x96d7
leaq -0x131(%rbp), %rdi
callq 0x2250
leaq -0x108(%rbp), %rdi
callq 0x2140
leaq -0x109(%rbp), %rdi
callq 0x2250
movb -0x34a(%rbp), %al
testb $0x1, %al
jne 0x96fe
jmp 0x978d
callq 0x5090
jmp 0x978d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x977c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x9770
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x9757
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
testb $0x1, -0x133(%rbp)
jne 0x9749
jmp 0x9755
leaq -0x130(%rbp), %rdi
callq 0x2140
jmp 0x9757
testb $0x1, -0x132(%rbp)
jne 0x9762
jmp 0x976e
leaq -0x131(%rbp), %rdi
callq 0x2250
jmp 0x9770
leaq -0x108(%rbp), %rdi
callq 0x2140
leaq -0x109(%rbp), %rdi
callq 0x2250
jmp 0x9d68
jmp 0x9d5d
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rax
movq %rax, -0x360(%rbp)
leaq -0x159(%rbp), %rdi
movq %rdi, -0x358(%rbp)
callq 0x2360
movq -0x360(%rbp), %rsi
movq -0x358(%rbp), %rdx
leaq -0x158(%rbp), %rdi
callq 0x5fa0
jmp 0x97d0
leaq -0x159(%rbp), %rdi
callq 0x2250
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x370(%rbp)
leaq -0x181(%rbp), %rdi
movq %rdi, -0x368(%rbp)
callq 0x2360
movq -0x370(%rbp), %rsi
movq -0x368(%rbp), %rdx
leaq -0x180(%rbp), %rdi
callq 0x5fa0
jmp 0x981a
leaq -0x181(%rbp), %rdi
callq 0x2250
movl $0x1b8, %edi            # imm = 0x1B8
callq 0x2200
movq %rax, -0x378(%rbp)
jmp 0x9839
movb $0x1, -0x1f2(%rbp)
leaq -0x1b0(%rbp), %rdi
leaq -0x158(%rbp), %rsi
callq 0x20d0
jmp 0x9855
leaq -0x1d0(%rbp), %rdi
leaq -0x180(%rbp), %rsi
callq 0x20d0
jmp 0x986a
leaq -0x1f1(%rbp), %rdi
movq %rdi, -0x380(%rbp)
callq 0x2360
movq -0x380(%rbp), %rdx
leaq 0x1caa(%rip), %rsi      # 0xb535
leaq -0x1f0(%rbp), %rdi
callq 0x5fa0
jmp 0x9899
movq -0x378(%rbp), %rdi
leaq -0x1b0(%rbp), %rsi
leaq -0x1d0(%rbp), %rdx
leaq -0x1f0(%rbp), %rcx
callq 0x3b30
jmp 0x98bc
movq -0x378(%rbp), %rsi
movb $0x0, -0x1f2(%rbp)
leaq -0x190(%rbp), %rdi
movq %rdi, -0x388(%rbp)
callq 0x9d80
leaq -0x1f0(%rbp), %rdi
callq 0x2140
leaq -0x1f1(%rbp), %rdi
callq 0x2250
leaq -0x1d0(%rbp), %rdi
callq 0x2140
leaq -0x1b0(%rbp), %rdi
callq 0x2140
movq -0x388(%rbp), %rdi
callq 0x9db0
movq %rax, %rdi
callq 0x4d20
jmp 0x9923
leaq -0x190(%rbp), %rdi
callq 0x9dd0
leaq -0x180(%rbp), %rdi
callq 0x2140
leaq -0x158(%rbp), %rdi
callq 0x2140
jmp 0x9d5d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x159(%rbp), %rdi
callq 0x2250
jmp 0x9d68
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x181(%rbp), %rdi
callq 0x2250
jmp 0x9a3f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x9a33
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x99fd
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x99f1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x99d9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x1f0(%rbp), %rdi
callq 0x2140
leaq -0x1f1(%rbp), %rdi
callq 0x2250
leaq -0x1d0(%rbp), %rdi
callq 0x2140
leaq -0x1b0(%rbp), %rdi
callq 0x2140
testb $0x1, -0x1f2(%rbp)
jne 0x9a08
jmp 0x9a19
movq -0x378(%rbp), %rdi
movl $0x1b8, %esi            # imm = 0x1B8
callq 0x2210
jmp 0x9a33
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x190(%rbp), %rdi
callq 0x9dd0
leaq -0x180(%rbp), %rdi
callq 0x2140
leaq -0x158(%rbp), %rdi
callq 0x2140
jmp 0x9d68
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rax
movq %rax, -0x398(%rbp)
leaq -0x219(%rbp), %rdi
movq %rdi, -0x390(%rbp)
callq 0x2360
movq -0x398(%rbp), %rsi
movq -0x390(%rbp), %rdx
leaq -0x218(%rbp), %rdi
callq 0x5fa0
jmp 0x9a8e
leaq -0x219(%rbp), %rdi
callq 0x2250
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x3a8(%rbp)
leaq -0x241(%rbp), %rdi
movq %rdi, -0x3a0(%rbp)
callq 0x2360
movq -0x3a8(%rbp), %rsi
movq -0x3a0(%rbp), %rdx
leaq -0x240(%rbp), %rdi
callq 0x5fa0
jmp 0x9ad8
leaq -0x241(%rbp), %rdi
callq 0x2250
movq -0x10(%rbp), %rax
movq 0x18(%rax), %rax
movq %rax, -0x3b8(%rbp)
leaq -0x269(%rbp), %rdi
movq %rdi, -0x3b0(%rbp)
callq 0x2360
movq -0x3b8(%rbp), %rsi
movq -0x3b0(%rbp), %rdx
leaq -0x268(%rbp), %rdi
callq 0x5fa0
jmp 0x9b22
leaq -0x269(%rbp), %rdi
callq 0x2250
movl $0x1b8, %edi            # imm = 0x1B8
callq 0x2200
movq %rax, -0x3c0(%rbp)
jmp 0x9b41
movb $0x1, -0x2d9(%rbp)
leaq -0x298(%rbp), %rdi
leaq -0x218(%rbp), %rsi
callq 0x20d0
jmp 0x9b5d
leaq -0x2b8(%rbp), %rdi
leaq -0x240(%rbp), %rsi
callq 0x20d0
jmp 0x9b72
leaq -0x2d8(%rbp), %rdi
leaq -0x268(%rbp), %rsi
callq 0x20d0
jmp 0x9b87
movq -0x3c0(%rbp), %rdi
leaq -0x298(%rbp), %rsi
leaq -0x2b8(%rbp), %rdx
leaq -0x2d8(%rbp), %rcx
callq 0x3b30
jmp 0x9baa
movq -0x3c0(%rbp), %rsi
movb $0x0, -0x2d9(%rbp)
leaq -0x278(%rbp), %rdi
movq %rdi, -0x3c8(%rbp)
callq 0x9d80
leaq -0x2d8(%rbp), %rdi
callq 0x2140
leaq -0x2b8(%rbp), %rdi
callq 0x2140
leaq -0x298(%rbp), %rdi
callq 0x2140
movq -0x3c8(%rbp), %rdi
callq 0x9db0
movq %rax, %rdi
callq 0x4d20
jmp 0x9c05
leaq -0x278(%rbp), %rdi
callq 0x9dd0
leaq -0x268(%rbp), %rdi
callq 0x2140
leaq -0x240(%rbp), %rdi
callq 0x2140
leaq -0x218(%rbp), %rdi
callq 0x2140
jmp 0x9d5d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x219(%rbp), %rdi
callq 0x2250
jmp 0x9d68
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x241(%rbp), %rdi
callq 0x2250
jmp 0x9d4a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x269(%rbp), %rdi
callq 0x2250
jmp 0x9d3e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x9d32
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x9cfc
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x9cf0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x9ce4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x2d8(%rbp), %rdi
callq 0x2140
leaq -0x2b8(%rbp), %rdi
callq 0x2140
leaq -0x298(%rbp), %rdi
callq 0x2140
testb $0x1, -0x2d9(%rbp)
jne 0x9d07
jmp 0x9d18
movq -0x3c0(%rbp), %rdi
movl $0x1b8, %esi            # imm = 0x1B8
callq 0x2210
jmp 0x9d32
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x278(%rbp), %rdi
callq 0x9dd0
leaq -0x268(%rbp), %rdi
callq 0x2140
leaq -0x240(%rbp), %rdi
callq 0x2140
leaq -0x218(%rbp), %rdi
callq 0x2140
jmp 0x9d68
callq 0x4f10
xorl %eax, %eax
addq $0x3d0, %rsp            # imm = 0x3D0
popq %rbp
retq
movq -0x40(%rbp), %rdi
callq 0x2350
nopw %cs:(%rax,%rax)
nopl (%rax,%rax)