// File: ncbi[P]amr/fasta_check.cpp
// Function: (anonymous namespace)::ThisApplication::ThisApplication()
ThisApplication ()
    : Application ("Check the correctness of a FASTA file. Exit with an error if it is incorrect. Print the number of sequences, max. sequence length and total sequence length")
    {
      addPositional ("in", "FASTA file");
      addFlag ("aa", "Amino acid sequenes, otherwise nucleotide");
      addFlag ("hyphen", "Hyphens are allowed");
      addFlag ("ambig", "Ambiguous characters are allowed");
      addKey ("ambig_max", "Max. number of ambiguous characters in sequences", "0");
      addFlag ("stop_codon", "Stop codons ('*') in the protein sequence are allowed");
      addKey ("len", "Output file with lines: <sequence id> <length>");
      addKey ("out", "Output FASTA file with some of the issues fixed");
	    version = SVN_REV;
    }

// Assembly:
subq $0x388, %rsp            # imm = 0x388
movq %rdi, 0x380(%rsp)
movq 0x380(%rsp), %rax
movq %rax, 0x90(%rsp)
leaq 0x35f(%rsp), %rdi
movq %rdi, 0x98(%rsp)
callq 0xbc50
movq 0x98(%rsp), %rdx
leaq 0x7dead(%rip), %rsi     # 0x8a030
leaq 0x360(%rsp), %rdi
callq 0x10120
jmp 0xc192
movq 0x90(%rsp), %rdi
leaq 0x360(%rsp), %rsi
movl $0x1, %edx
xorl %r8d, %r8d
movl %r8d, %ecx
callq 0x101e0
jmp 0xc1b4
leaq 0x360(%rsp), %rdi
callq 0xbde8
leaq 0x35f(%rsp), %rdi
callq 0xb740
movq 0x90(%rsp), %rax
leaq 0xa74a3(%rip), %rcx     # 0xb3680
movq %rcx, (%rax)
leaq 0x327(%rsp), %rdi
movq %rdi, 0x88(%rsp)
callq 0xbc50
movq 0x88(%rsp), %rdx
leaq 0x7dec8(%rip), %rsi     # 0x8a0cc
leaq 0x328(%rsp), %rdi
callq 0x10120
jmp 0xc213
leaq 0x2ff(%rsp), %rdi
movq %rdi, 0x80(%rsp)
callq 0xbc50
movq 0x80(%rsp), %rdx
leaq 0x7de98(%rip), %rsi     # 0x8a0cf
leaq 0x300(%rsp), %rdi
callq 0x10120
jmp 0xc246
movq 0x90(%rsp), %rdi
leaq 0x328(%rsp), %rsi
leaq 0x300(%rsp), %rdx
callq 0x3d4f0
jmp 0xc265
leaq 0x300(%rsp), %rdi
callq 0xbde8
leaq 0x2ff(%rsp), %rdi
callq 0xb740
leaq 0x328(%rsp), %rdi
callq 0xbde8
leaq 0x327(%rsp), %rdi
callq 0xb740
leaq 0x2d7(%rsp), %rdi
movq %rdi, 0x78(%rsp)
callq 0xbc50
movq 0x78(%rsp), %rdx
leaq 0x7de23(%rip), %rsi     # 0x8a0da
leaq 0x2d8(%rsp), %rdi
callq 0x10120
jmp 0xc2c6
leaq 0x2af(%rsp), %rdi
movq %rdi, 0x70(%rsp)
callq 0xbc50
movq 0x70(%rsp), %rdx
leaq 0x7ddf9(%rip), %rsi     # 0x8a0dd
leaq 0x2b0(%rsp), %rdi
callq 0x10120
jmp 0xc2f3
movq 0x90(%rsp), %rdi
leaq 0x2d8(%rsp), %rsi
leaq 0x2b0(%rsp), %rdx
xorl %ecx, %ecx
callq 0x3ccc0
jmp 0xc314
leaq 0x2b0(%rsp), %rdi
callq 0xbde8
leaq 0x2af(%rsp), %rdi
callq 0xb740
leaq 0x2d8(%rsp), %rdi
callq 0xbde8
leaq 0x2d7(%rsp), %rdi
callq 0xb740
leaq 0x287(%rsp), %rdi
movq %rdi, 0x68(%rsp)
callq 0xbc50
movq 0x68(%rsp), %rdx
leaq 0x7dda1(%rip), %rsi     # 0x8a107
leaq 0x288(%rsp), %rdi
callq 0x10120
jmp 0xc375
leaq 0x25f(%rsp), %rdi
movq %rdi, 0x60(%rsp)
callq 0xbc50
movq 0x60(%rsp), %rdx
leaq 0x7dd7b(%rip), %rsi     # 0x8a10e
leaq 0x260(%rsp), %rdi
callq 0x10120
jmp 0xc3a2
movq 0x90(%rsp), %rdi
leaq 0x288(%rsp), %rsi
leaq 0x260(%rsp), %rdx
xorl %ecx, %ecx
callq 0x3ccc0
jmp 0xc3c3
leaq 0x260(%rsp), %rdi
callq 0xbde8
leaq 0x25f(%rsp), %rdi
callq 0xb740
leaq 0x288(%rsp), %rdi
callq 0xbde8
leaq 0x287(%rsp), %rdi
callq 0xb740
leaq 0x237(%rsp), %rdi
movq %rdi, 0x58(%rsp)
callq 0xbc50
movq 0x58(%rsp), %rdx
leaq 0x7dd0d(%rip), %rsi     # 0x8a122
leaq 0x238(%rsp), %rdi
callq 0x10120
jmp 0xc424
leaq 0x20f(%rsp), %rdi
movq %rdi, 0x50(%rsp)
callq 0xbc50
movq 0x50(%rsp), %rdx
leaq 0x7dce6(%rip), %rsi     # 0x8a128
leaq 0x210(%rsp), %rdi
callq 0x10120
jmp 0xc451
movq 0x90(%rsp), %rdi
leaq 0x238(%rsp), %rsi
leaq 0x210(%rsp), %rdx
xorl %ecx, %ecx
callq 0x3ccc0
jmp 0xc472
leaq 0x210(%rsp), %rdi
callq 0xbde8
leaq 0x20f(%rsp), %rdi
callq 0xb740
leaq 0x238(%rsp), %rdi
callq 0xbde8
leaq 0x237(%rsp), %rdi
callq 0xb740
leaq 0x1e7(%rsp), %rdi
movq %rdi, 0x48(%rsp)
callq 0xbc50
movq 0x48(%rsp), %rdx
leaq 0x7dc85(%rip), %rsi     # 0x8a149
leaq 0x1e8(%rsp), %rdi
callq 0x10120
jmp 0xc4d3
leaq 0x1bf(%rsp), %rdi
movq %rdi, 0x40(%rsp)
callq 0xbc50
movq 0x40(%rsp), %rdx
leaq 0x7dc62(%rip), %rsi     # 0x8a153
leaq 0x1c0(%rsp), %rdi
callq 0x10120
jmp 0xc500
leaq 0x197(%rsp), %rdi
movq %rdi, 0x38(%rsp)
callq 0xbc50
movq 0x38(%rsp), %rdx
leaq 0x7f7bf(%rip), %rsi     # 0x8bcdd
leaq 0x198(%rsp), %rdi
callq 0x10120
jmp 0xc52d
movq 0x90(%rsp), %rdi
leaq 0xa967c(%rip), %r9      # 0xb5bb8
leaq 0x1e8(%rsp), %rsi
leaq 0x1c0(%rsp), %rdx
leaq 0x198(%rsp), %rcx
xorl %r8d, %r8d
callq 0x3c460
jmp 0xc55e
leaq 0x198(%rsp), %rdi
callq 0xbde8
leaq 0x197(%rsp), %rdi
callq 0xb740
leaq 0x1c0(%rsp), %rdi
callq 0xbde8
leaq 0x1bf(%rsp), %rdi
callq 0xb740
leaq 0x1e8(%rsp), %rdi
callq 0xbde8
leaq 0x1e7(%rsp), %rdi
callq 0xb740
leaq 0x16f(%rsp), %rdi
movq %rdi, 0x30(%rsp)
callq 0xbc50
movq 0x30(%rsp), %rdx
leaq 0x7dbba(%rip), %rsi     # 0x8a184
leaq 0x170(%rsp), %rdi
callq 0x10120
jmp 0xc5d9
leaq 0x147(%rsp), %rdi
movq %rdi, 0x28(%rsp)
callq 0xbc50
movq 0x28(%rsp), %rdx
leaq 0x7db98(%rip), %rsi     # 0x8a18f
leaq 0x148(%rsp), %rdi
callq 0x10120
jmp 0xc606
movq 0x90(%rsp), %rdi
leaq 0x170(%rsp), %rsi
leaq 0x148(%rsp), %rdx
xorl %ecx, %ecx
callq 0x3ccc0
jmp 0xc627
leaq 0x148(%rsp), %rdi
callq 0xbde8
leaq 0x147(%rsp), %rdi
callq 0xb740
leaq 0x170(%rsp), %rdi
callq 0xbde8
leaq 0x16f(%rsp), %rdi
callq 0xb740
leaq 0x11f(%rsp), %rdi
movq %rdi, 0x20(%rsp)
callq 0xbc50
movq 0x20(%rsp), %rdx
leaq 0x7db4c(%rip), %rsi     # 0x8a1c5
leaq 0x120(%rsp), %rdi
callq 0x10120
jmp 0xc688
leaq 0xf7(%rsp), %rdi
movq %rdi, 0x18(%rsp)
callq 0xbc50
movq 0x18(%rsp), %rdx
leaq 0x7db23(%rip), %rsi     # 0x8a1c9
leaq 0xf8(%rsp), %rdi
callq 0x10120
jmp 0xc6b5
movq 0x90(%rsp), %rdi
leaq 0xa94f4(%rip), %r9      # 0xb5bb8
leaq 0x120(%rsp), %rsi
leaq 0xf8(%rsp), %rdx
xorl %r8d, %r8d
movq %r9, %rcx
callq 0x3c460
jmp 0xc6e1
leaq 0xf8(%rsp), %rdi
callq 0xbde8
leaq 0xf7(%rsp), %rdi
callq 0xb740
leaq 0x120(%rsp), %rdi
callq 0xbde8
leaq 0x11f(%rsp), %rdi
callq 0xb740
leaq 0xcf(%rsp), %rdi
movq %rdi, 0x10(%rsp)
callq 0xbc50
movq 0x10(%rsp), %rdx
leaq 0x8035c(%rip), %rsi     # 0x8ca8f
leaq 0xd0(%rsp), %rdi
callq 0x10120
jmp 0xc742
leaq 0xa7(%rsp), %rdi
movq %rdi, 0x8(%rsp)
callq 0xbc50
movq 0x8(%rsp), %rdx
leaq 0x7da98(%rip), %rsi     # 0x8a1f8
leaq 0xa8(%rsp), %rdi
callq 0x10120
jmp 0xc76f
movq 0x90(%rsp), %rdi
leaq 0xa943a(%rip), %r9      # 0xb5bb8
leaq 0xd0(%rsp), %rsi
leaq 0xa8(%rsp), %rdx
xorl %r8d, %r8d
movq %r9, %rcx
callq 0x3c460
jmp 0xc79b
leaq 0xa8(%rsp), %rdi
callq 0xbde8
leaq 0xa7(%rsp), %rdi
callq 0xb740
leaq 0xd0(%rsp), %rdi
callq 0xbde8
leaq 0xcf(%rsp), %rdi
callq 0xb740
movq 0x90(%rsp), %rdi
addq $0x28, %rdi
leaq 0x7da46(%rip), %rsi     # 0x8a228
callq 0xb980
jmp 0xc7e9
addq $0x388, %rsp            # imm = 0x388
retq
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x350(%rsp)
movl %eax, 0x34c(%rsp)
jmp 0xc828
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x350(%rsp)
movl %eax, 0x34c(%rsp)
leaq 0x360(%rsp), %rdi
callq 0xbde8
leaq 0x35f(%rsp), %rdi
callq 0xb740
jmp 0xcc53
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x350(%rsp)
movl %eax, 0x34c(%rsp)
jmp 0xc8a1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x350(%rsp)
movl %eax, 0x34c(%rsp)
jmp 0xc887
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x350(%rsp)
movl %eax, 0x34c(%rsp)
leaq 0x300(%rsp), %rdi
callq 0xbde8
leaq 0x2ff(%rsp), %rdi
callq 0xb740
leaq 0x328(%rsp), %rdi
callq 0xbde8
leaq 0x327(%rsp), %rdi
callq 0xb740
jmp 0xcc46
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x350(%rsp)
movl %eax, 0x34c(%rsp)
jmp 0xc91a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x350(%rsp)
movl %eax, 0x34c(%rsp)
jmp 0xc900
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x350(%rsp)
movl %eax, 0x34c(%rsp)
leaq 0x2b0(%rsp), %rdi
callq 0xbde8
leaq 0x2af(%rsp), %rdi
callq 0xb740
leaq 0x2d8(%rsp), %rdi
callq 0xbde8
leaq 0x2d7(%rsp), %rdi
callq 0xb740
jmp 0xcc46
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x350(%rsp)
movl %eax, 0x34c(%rsp)
jmp 0xc993
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x350(%rsp)
movl %eax, 0x34c(%rsp)
jmp 0xc979
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x350(%rsp)
movl %eax, 0x34c(%rsp)
leaq 0x260(%rsp), %rdi
callq 0xbde8
leaq 0x25f(%rsp), %rdi
callq 0xb740
leaq 0x288(%rsp), %rdi
callq 0xbde8
leaq 0x287(%rsp), %rdi
callq 0xb740
jmp 0xcc46
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x350(%rsp)
movl %eax, 0x34c(%rsp)
jmp 0xca0c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x350(%rsp)
movl %eax, 0x34c(%rsp)
jmp 0xc9f2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x350(%rsp)
movl %eax, 0x34c(%rsp)
leaq 0x210(%rsp), %rdi
callq 0xbde8
leaq 0x20f(%rsp), %rdi
callq 0xb740
leaq 0x238(%rsp), %rdi
callq 0xbde8
leaq 0x237(%rsp), %rdi
callq 0xb740
jmp 0xcc46
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x350(%rsp)
movl %eax, 0x34c(%rsp)
jmp 0xcab8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x350(%rsp)
movl %eax, 0x34c(%rsp)
jmp 0xca9e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x350(%rsp)
movl %eax, 0x34c(%rsp)
jmp 0xca84
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x350(%rsp)
movl %eax, 0x34c(%rsp)
leaq 0x198(%rsp), %rdi
callq 0xbde8
leaq 0x197(%rsp), %rdi
callq 0xb740
leaq 0x1c0(%rsp), %rdi
callq 0xbde8
leaq 0x1bf(%rsp), %rdi
callq 0xb740
leaq 0x1e8(%rsp), %rdi
callq 0xbde8
leaq 0x1e7(%rsp), %rdi
callq 0xb740
jmp 0xcc46
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x350(%rsp)
movl %eax, 0x34c(%rsp)
jmp 0xcb31
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x350(%rsp)
movl %eax, 0x34c(%rsp)
jmp 0xcb17
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x350(%rsp)
movl %eax, 0x34c(%rsp)
leaq 0x148(%rsp), %rdi
callq 0xbde8
leaq 0x147(%rsp), %rdi
callq 0xb740
leaq 0x170(%rsp), %rdi
callq 0xbde8
leaq 0x16f(%rsp), %rdi
callq 0xb740
jmp 0xcc46
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x350(%rsp)
movl %eax, 0x34c(%rsp)
jmp 0xcbaa
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x350(%rsp)
movl %eax, 0x34c(%rsp)
jmp 0xcb90
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x350(%rsp)
movl %eax, 0x34c(%rsp)
leaq 0xf8(%rsp), %rdi
callq 0xbde8
leaq 0xf7(%rsp), %rdi
callq 0xb740
leaq 0x120(%rsp), %rdi
callq 0xbde8
leaq 0x11f(%rsp), %rdi
callq 0xb740
jmp 0xcc46
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x350(%rsp)
movl %eax, 0x34c(%rsp)
jmp 0xcc23
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x350(%rsp)
movl %eax, 0x34c(%rsp)
jmp 0xcc09
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x350(%rsp)
movl %eax, 0x34c(%rsp)
leaq 0xa8(%rsp), %rdi
callq 0xbde8
leaq 0xa7(%rsp), %rdi
callq 0xb740
leaq 0xd0(%rsp), %rdi
callq 0xbde8
leaq 0xcf(%rsp), %rdi
callq 0xb740
jmp 0xcc46
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x350(%rsp)
movl %eax, 0x34c(%rsp)
movq 0x90(%rsp), %rdi
callq 0x10380
movq 0x350(%rsp), %rdi
callq 0xbc40