#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
int /*<<< orphan*/ EXIT_FAILURE;
int /*<<< orphan*/ exit(int /*<<< orphan*/);
int /*<<< orphan*/ fprintf(int /*<<< orphan*/, char *);
int /*<<< orphan*/ stderr;
void usage() {
  fprintf(stderr,
          "Pepfrag produces a list of peptide fragments providing complete "
          "coverage of the\n"
          "input sequences for spotting onto a microarray slide. \n"
          "\n"
          "pepfrag [-l n] [-L n] [-o n] [-O n] [-C n] [-p filename] [-t] "
          "[sequence file]\n"
          "\n"
          "    -l number\n"
          "        Minimum length of output fragments (default 8)\n"
          "    -L number\n"
          "        Maximum length of output fragments (default 30)\n"
          "    -o number\n"
          "        Minimum amount of overlap between adjacent fragments "
          "(default 2)\n"
          "    -O number\n"
          "        Maximum amount of overlap between adjacent fragments "
          "(default 4)\n"
          "    -C number\n"
          "        Approximate chunk size. Input sequences are split into "
          "chunks of\n"
          "        approximately this length to make computation more "
          "tractable. Actual\n"
          "        size of the chunks is heuristically determined by computing "
          "the\n"
          "        frequency of repetition of potential fragments surrounding "
          "the putative\n"
          "        split point(s) and choosing the points that breaks the "
          "least repeated \n"
          "        fragment. Larger chunk sizes produce better results, but "
          "increase\n"
          "        computation time exponentially. As a rule of thumb make "
          "chunk size a \n"
          "        multiple of max length - min overlap. The default value for "
          "chunk size\n"
          "        is 4 times this value, i.e. 4*(maxlen-minoverlap)\n"
          "    -p filename\n"
          "        Accept previous results and merge them with those from the "
          "current\n"
          "        input sequences. 'filename' can be '-' to indicate standard "
          "input for\n"
          "        piping purposes. The previous results input stream can be "
          "the same as\n"
          "        the sequence stream (i.e. they can be the same file, or "
          "both be on \n"
          "        standard input) but then previous results must come first. "
          "Previous \n"
          "        results must provided in a format identical to the output "
          "of pepfrag\n"
          "        (see Understanding the output below).\n"
          "    -t\n"
          "        Do not post-process data using naive algorithm, even if it "
          "would \n"
          "        produce better results, i.e. always use the pepfrag "
          "algorithm. Used \n"
          "        mainly for testing and algorithm comparision purposes.\n"
          "    -n\n"
          "        Only output the results of the naive algorithm. Used mainly "
          "for\n"
          "        testing and algorithm comparison purposes.\n"
          "    sequence file\n"
          "        A file containing the sequence(s) to process in FASTA "
          "format. Multiple\n"
          "        sequences are allowed, and their results will be merged. If "
          "not \n"
          "        specified, the sequences will be read from standard input\n"
          "\n"
          "Understanding the output\n"
          "\n"
          "Output is split into two sections. The first section is an indexing "
          "of input\n"
          "sequences and the second section is a list of fragments and their "
          "starting\n"
          "positions within the indexed sequences. The sequence index takes "
          "the form of an\n"
          "index number, followed by a colon and a space, followed by the "
          "fasta title of\n"
          "the sequence.\n"
          "\n"
          "The second section lists each fragment on a single line followed by "
          "a tab,\n"
          "followed by a comma separated list of sequence index,position "
          "pairs. The number\n"
          "before the comma indicates which sequence the fragment was found "
          "in, and the\n"
          "number after the comma indicates where in the sequence the fragment "
          "can be\n"
          "found (indexed from 0).\n"
          "\n"
          "As an example:\n"
          "\n"
          "--- Example Input File ---\n"
          ">example test sequence\n"
          "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ\n"
          "\n"
          "> bogus test sequence 2\n"
          "ABCDEFGHIJKLMNOPQRSTuVWXYZABCDEFGHIJKLMNOpQRSTUVWXYZ\n"
          "--- End ---\n"
          "\n"
          "--- Example output ---\n"
          "1: example test sequence\n"
          "2: bogus test sequence 2\n"
          "ABCDEFGHIJKLMNO 1:0, 1:26, 2:0, 2:26\n"
          "NOPQRSTUVWXYZAB 1:13\n"
          "NOpQRSTUVWXYZ   2:39\n"
          "NOPQRSTuVWXYZAB 2:13\n"
          "NOPQRSTUVWXYZ   1:39\n"
          "--- End ---\n");
  exit(EXIT_FAILURE);
}


x86 assembly (clang, -O0):
<usage>:
push   %rbp
mov    %rsp,%rbp
mov    0x2eb5(%rip),%rax
mov    (%rax),%edi
lea    0xecc(%rip),%rsi
call   1030 <fprintf@plt>
mov    0x2e98(%rip),%rax
mov    (%rax),%edi
call   1040 <exit@plt>

x86 assembly (clang, -O2):
<usage>:
push   %rax
mov    0x2eb8(%rip),%rax
mov    (%rax),%edi
lea    0xecf(%rip),%rsi
call   1030 <fprintf@plt>
mov    0x2e9b(%rip),%rax
mov    (%rax),%edi
call   1040 <exit@plt>

LLVM IR (-O0):
@stderr = global i32 0
@.str = [3423 x i8] c"Pepfrag produces a list of peptide fragments providing complete coverage of the\0Ainput sequences for spotting onto a microarray slide. \0A\0Apepfrag [-l n] [-L n] [-o n] [-O n] [-C n] [-p filename] [-t] [sequence file]\0A\0A -l number\0A Minimum length of output fragments (default 8)\0A -L number\0A Maximum length of output fragments (default 30)\0A -o number\0A Minimum amount of overlap between adjacent fragments (default 2)\0A -O number\0A Maximum amount of overlap between adjacent fragments (default 4)\0A -C number\0A Approximate chunk size. Input sequences are split into chunks of\0A approximately this length to make computation more tractable. Actual\0A size of the chunks is heuristically determined by computing the\0A frequency of repetition of potential fragments surrounding the putative\0A split point(s) and choosing the points that breaks the least repeated \0A fragment. Larger chunk sizes produce better results, but increase\0A computation time exponentially. As a rule of thumb make chunk size a \0A multiple of max length - min overlap. The default value for chunk size\0A is 4 times this value, i.e. 4*(maxlen-minoverlap)\0A -p filename\0A Accept previous results and merge them with those from the current\0A input sequences. 'filename' can be '-' to indicate standard input for\0A piping purposes. The previous results input stream can be the same as\0A the sequence stream (i.e. they can be the same file, or both be on \0A standard input) but then previous results must come first. Previous \0A results must provided in a format identical to the output of pepfrag\0A (see Understanding the output below).\0A -t\0A Do not post-process data using naive algorithm, even if it would \0A produce better results, i.e. always use the pepfrag algorithm. Used \0A mainly for testing and algorithm comparision purposes.\0A -n\0A Only output the results of the naive algorithm. Used mainly for\0A testing and algorithm comparison purposes.\0A sequence file\0A A file containing the sequence(s) to process in FASTA format. Multiple\0A sequences are allowed, and their results will be merged. If not \0A specified, the sequences will be read from standard input\0A\0AUnderstanding the output\0A\0AOutput is split into two sections. The first section is an indexing of input\0Asequences and the second section is a list of fragments and their starting\0Apositions within the indexed sequences. The sequence index takes the form of an\0Aindex number, followed by a colon and a space, followed by the fasta title of\0Athe sequence.\0A\0AThe second section lists each fragment on a single line followed by a tab,\0Afollowed by a comma separated list of sequence index,position pairs. The number\0Abefore the comma indicates which sequence the fragment was found in, and the\0Anumber after the comma indicates where in the sequence the fragment can be\0Afound (indexed from 0).\0A\0AAs an example:\0A\0A--- Example Input File ---\0A>example test sequence\0AABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ\0A\0A> bogus test sequence 2\0AABCDEFGHIJKLMNOPQRSTuVWXYZABCDEFGHIJKLMNOpQRSTUVWXYZ\0A--- End ---\0A\0A--- Example output ---\0A1: example test sequence\0A2: bogus test sequence 2\0AABCDEFGHIJKLMNO 1:0, 1:26, 2:0, 2:26\0ANOPQRSTUVWXYZAB 1:13\0ANOpQRSTUVWXYZ 2:39\0ANOPQRSTuVWXYZAB 2:13\0ANOPQRSTUVWXYZ 1:39\0A--- End ---\0A\00"
@EXIT_FAILURE = global i32 0
define void @usage() {
%1 = load i32, i32* @stderr
%2 = call i32 @fprintf(i32 %1, i8* getelementptr inbounds ([3423 x i8], [3423 x i8]* @.str, i64 0, i64 0))
%3 = load i32, i32* @EXIT_FAILURE
%4 = call i32 @exit(i32 %3)
unreachable
}

LLVM IR (-O2):
@stderr = global i32 0
@.str = [3423 x i8] c"Pepfrag produces a list of peptide fragments providing complete coverage of the\0Ainput sequences for spotting onto a microarray slide. \0A\0Apepfrag [-l n] [-L n] [-o n] [-O n] [-C n] [-p filename] [-t] [sequence file]\0A\0A -l number\0A Minimum length of output fragments (default 8)\0A -L number\0A Maximum length of output fragments (default 30)\0A -o number\0A Minimum amount of overlap between adjacent fragments (default 2)\0A -O number\0A Maximum amount of overlap between adjacent fragments (default 4)\0A -C number\0A Approximate chunk size. Input sequences are split into chunks of\0A approximately this length to make computation more tractable. Actual\0A size of the chunks is heuristically determined by computing the\0A frequency of repetition of potential fragments surrounding the putative\0A split point(s) and choosing the points that breaks the least repeated \0A fragment. Larger chunk sizes produce better results, but increase\0A computation time exponentially. As a rule of thumb make chunk size a \0A multiple of max length - min overlap. The default value for chunk size\0A is 4 times this value, i.e. 4*(maxlen-minoverlap)\0A -p filename\0A Accept previous results and merge them with those from the current\0A input sequences. 'filename' can be '-' to indicate standard input for\0A piping purposes. The previous results input stream can be the same as\0A the sequence stream (i.e. they can be the same file, or both be on \0A standard input) but then previous results must come first. Previous \0A results must provided in a format identical to the output of pepfrag\0A (see Understanding the output below).\0A -t\0A Do not post-process data using naive algorithm, even if it would \0A produce better results, i.e. always use the pepfrag algorithm. Used \0A mainly for testing and algorithm comparision purposes.\0A -n\0A Only output the results of the naive algorithm. Used mainly for\0A testing and algorithm comparison purposes.\0A sequence file\0A A file containing the sequence(s) to process in FASTA format. Multiple\0A sequences are allowed, and their results will be merged. If not \0A specified, the sequences will be read from standard input\0A\0AUnderstanding the output\0A\0AOutput is split into two sections. The first section is an indexing of input\0Asequences and the second section is a list of fragments and their starting\0Apositions within the indexed sequences. The sequence index takes the form of an\0Aindex number, followed by a colon and a space, followed by the fasta title of\0Athe sequence.\0A\0AThe second section lists each fragment on a single line followed by a tab,\0Afollowed by a comma separated list of sequence index,position pairs. The number\0Abefore the comma indicates which sequence the fragment was found in, and the\0Anumber after the comma indicates where in the sequence the fragment can be\0Afound (indexed from 0).\0A\0AAs an example:\0A\0A--- Example Input File ---\0A>example test sequence\0AABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ\0A\0A> bogus test sequence 2\0AABCDEFGHIJKLMNOPQRSTuVWXYZABCDEFGHIJKLMNOpQRSTUVWXYZ\0A--- End ---\0A\0A--- Example output ---\0A1: example test sequence\0A2: bogus test sequence 2\0AABCDEFGHIJKLMNO 1:0, 1:26, 2:0, 2:26\0ANOPQRSTUVWXYZAB 1:13\0ANOpQRSTUVWXYZ 2:39\0ANOPQRSTuVWXYZAB 2:13\0ANOPQRSTUVWXYZ 1:39\0A--- End ---\0A\00"
@EXIT_FAILURE = global i32 0
define void @usage() {
%1 = load i32, i32* @stderr
%2 = tail call i32 @fprintf(i32 %1, i8* getelementptr inbounds ([3423 x i8], [3423 x i8]* @.str, i64 0, i64 0))
%3 = load i32, i32* @EXIT_FAILURE
%4 = tail call i32 @exit(i32 %3)
unreachable
}