#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*/ printf(char *, ...);
void ee_print_help_msg_s(void) {
  printf("Usage: ee [options] INPUT\n");
  printf("\n");
  printf("where possible options include:\n");
  printf("\t-m, --mode=[encrypt|decrypt] \tspecifies the mode; 'encrypt' for "
         "encrypting the source\n"
         "\t                             \tinput file and writing result to "
         "output file, and 'decrypt'\n"
         "\t                             \tfor decrypt the encrypted input "
         "file and writing result\n"
         "\t                             \tto output file; also allowed the "
         "reduction;\n"
         "\t                             \t'%s' by default\n",
         "encrypt");
  printf("\t-s, --sigma=[VALUE]          \tspecifies the block size is "
         "calculated as 2^VALUE;\n"
         "\t                             \tthe valid values in range [%d; %d]; "
         "'%d' by default\n",
         1, 16, 8);
  printf("\t-u, --mu=[VALUE]             \tspecifies the memory size in "
         "initial message source;\n"
         "\t                             \tif this value is 0 then initial "
         "message source considered\n"
         "\t                             \tto message source without memory; "
         "the value must be in\n"
         "\t                             \trange [%d; %d]; '%d' by default\n",
         0, 255, 0);
  printf("\t-d, --dump-sources           \tin encryption mode creates file "
         "'sources.dump' with result of\n"
         "\t                             \tsource splitting; in decryption "
         "mode has no effect\n");
  printf("\t-p, --part                   \tin encryption mode splits output "
         "into two files - FILE.pri and\n"
         "\t                             \tFILE.pub which contains private "
         "data (encrypted subnumbers) and\n"
         "\t                             \tpublic data (statistics, prefixes, "
         "etc.); in decryption mode\n"
         "\t                             \tspecifies that public and private "
         "data need to take from two\n"
         "\t                             \tdifferent files INPUT.pub and "
         "INPUT.pri files\n");
  printf("\t-o, --output=[FILE]          \tspecifies the output file to which "
         "to write the result\n"
         "\t                             \tof the encryption or decryption "
         "(depending on the --mode);\n"
         "\t                             \t'%s' by default\n",
         "a.out");
  printf("\t-k, --key=[KEY]              \tspecifies the secret key for "
         "encryption or decryption\n"
         "\t                             \tthe message\n");
  printf("\t-h, --help                   \tshow this help message\n");
  printf("\n");
}


x86 assembly (clang, -O0):
<ee_print_help_msg_s>:
push   %rbp
mov    %rsp,%rbp
lea    0xee5(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0xf11(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0xee4(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0xef7(%rip),%rdi
lea    0x1074(%rip),%rsi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x106e(%rip),%rdi
mov    $0x1,%esi
mov    $0x10,%edx
mov    $0x8,%ecx
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x10f7(%rip),%rdi
xor    %ecx,%ecx
mov    $0xff,%edx
mov    %ecx,%esi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x1223(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x12c5(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x147a(%rip),%rdi
lea    0x1553(%rip),%rsi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x154b(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x15be(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0xe5f(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
pop    %rbp
ret

x86 assembly (clang, -O2):
<ee_print_help_msg_s>:
push   %rax
lea    0x1323(%rip),%rdi
call   1040 <puts@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
lea    0x1327(%rip),%rdi
call   1040 <puts@plt>
lea    0xea6(%rip),%rdi
lea    0x1023(%rip),%rsi
xor    %eax,%eax
call   1050 <printf@plt>
lea    0x101d(%rip),%rdi
mov    $0x1,%esi
mov    $0x10,%edx
mov    $0x8,%ecx
xor    %eax,%eax
call   1050 <printf@plt>
lea    0x10a6(%rip),%rdi
xor    %esi,%esi
mov    $0xff,%edx
xor    %ecx,%ecx
xor    %eax,%eax
call   1050 <printf@plt>
lea    0x12f2(%rip),%rdi
call   1040 <puts@plt>
lea    0x1395(%rip),%rdi
call   1040 <puts@plt>
lea    0x11ba(%rip),%rdi
lea    0x1293(%rip),%rsi
xor    %eax,%eax
call   1050 <printf@plt>
lea    0x1536(%rip),%rdi
call   1040 <puts@plt>
lea    0x15aa(%rip),%rdi
call   1040 <puts@plt>
mov    $0xa,%edi
pop    %rax
jmp    1030 <putchar@plt>

LLVM IR (-O0):
@.str = [27 x i8] c"Usage: ee [options] INPUT\0A\00"
@.str.1 = [2 x i8] c"\0A\00"
@.str.2 = [33 x i8] c"where possible options include:\0A\00"
@.str.3 = [388 x i8] c"\09-m, --mode=[encrypt|decrypt] \09specifies the mode; 'encrypt' for encrypting the source\0A\09 \09input file and writing result to output file, and 'decrypt'\0A\09 \09for decrypt the encrypted input file and writing result\0A\09 \09to output file; also allowed the reduction;\0A\09 \09'%s' by default\0A\00"
@.str.4 = [8 x i8] c"encrypt\00"
@.str.5 = [166 x i8] c"\09-s, --sigma=[VALUE] \09specifies the block size is calculated as 2^VALUE;\0A\09 \09the valid values in range [%d; %d]; '%d' by default\0A\00"
@.str.6 = [323 x i8] c"\09-u, --mu=[VALUE] \09specifies the memory size in initial message source;\0A\09 \09if this value is 0 then initial message source considered\0A\09 \09to message source without memory; the value must be in\0A\09 \09range [%d; %d]; '%d' by default\0A\00"
@.str.7 = [176 x i8] c"\09-d, --dump-sources \09in encryption mode creates file 'sources.dump' with result of\0A\09 \09source splitting; in decryption mode has no effect\0A\00"
@.str.8 = [451 x i8] c"\09-p, --part \09in encryption mode splits output into two files - FILE.pri and\0A\09 \09FILE.pub which contains private data (encrypted subnumbers) and\0A\09 \09public data (statistics, prefixes, etc.); in decryption mode\0A\09 \09specifies that public and private data need to take from two\0A\09 \09different files INPUT.pub and INPUT.pri files\0A\00"
@.str.9 = [224 x i8] c"\09-o, --output=[FILE] \09specifies the output file to which to write the result\0A\09 \09of the encryption or decryption (depending on the --mode);\0A\09 \09'%s' by default\0A\00"
@.str.10 = [6 x i8] c"a.out\00"
@.str.11 = [129 x i8] c"\09-k, --key=[KEY] \09specifies the secret key for encryption or decryption\0A\09 \09the message\0A\00"
@.str.12 = [55 x i8] c"\09-h, --help \09show this help message\0A\00"
define void @ee_print_help_msg_s() {
%1 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([27 x i8], [27 x i8]* @.str, i64 0, i64 0))
%2 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0))
%3 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([33 x i8], [33 x i8]* @.str.2, i64 0, i64 0))
%4 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([388 x i8], [388 x i8]* @.str.3, i64 0, i64 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.4, i64 0, i64 0))
%5 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([166 x i8], [166 x i8]* @.str.5, i64 0, i64 0), i32 1, i32 16, i32 8)
%6 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([323 x i8], [323 x i8]* @.str.6, i64 0, i64 0), i32 0, i32 255, i32 0)
%7 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([176 x i8], [176 x i8]* @.str.7, i64 0, i64 0))
%8 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([451 x i8], [451 x i8]* @.str.8, i64 0, i64 0))
%9 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([224 x i8], [224 x i8]* @.str.9, i64 0, i64 0), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.10, i64 0, i64 0))
%10 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([129 x i8], [129 x i8]* @.str.11, i64 0, i64 0))
%11 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([55 x i8], [55 x i8]* @.str.12, i64 0, i64 0))
%12 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0))
ret void
}

LLVM IR (-O2):
@.str.3 = [388 x i8] c"\09-m, --mode=[encrypt|decrypt] \09specifies the mode; 'encrypt' for encrypting the source\0A\09 \09input file and writing result to output file, and 'decrypt'\0A\09 \09for decrypt the encrypted input file and writing result\0A\09 \09to output file; also allowed the reduction;\0A\09 \09'%s' by default\0A\00"
@.str.4 = [8 x i8] c"encrypt\00"
@.str.5 = [166 x i8] c"\09-s, --sigma=[VALUE] \09specifies the block size is calculated as 2^VALUE;\0A\09 \09the valid values in range [%d; %d]; '%d' by default\0A\00"
@.str.6 = [323 x i8] c"\09-u, --mu=[VALUE] \09specifies the memory size in initial message source;\0A\09 \09if this value is 0 then initial message source considered\0A\09 \09to message source without memory; the value must be in\0A\09 \09range [%d; %d]; '%d' by default\0A\00"
@.str.9 = [224 x i8] c"\09-o, --output=[FILE] \09specifies the output file to which to write the result\0A\09 \09of the encryption or decryption (depending on the --mode);\0A\09 \09'%s' by default\0A\00"
@.str.10 = [6 x i8] c"a.out\00"
@str = [26 x i8] c"Usage: ee [options] INPUT\00"
@str.13 = [32 x i8] c"where possible options include:\00"
@str.14 = [175 x i8] c"\09-d, --dump-sources \09in encryption mode creates file 'sources.dump' with result of\0A\09 \09source splitting; in decryption mode has no effect\00"
@str.15 = [450 x i8] c"\09-p, --part \09in encryption mode splits output into two files - FILE.pri and\0A\09 \09FILE.pub which contains private data (encrypted subnumbers) and\0A\09 \09public data (statistics, prefixes, etc.); in decryption mode\0A\09 \09specifies that public and private data need to take from two\0A\09 \09different files INPUT.pub and INPUT.pri files\00"
@str.16 = [128 x i8] c"\09-k, --key=[KEY] \09specifies the secret key for encryption or decryption\0A\09 \09the message\00"
@str.17 = [54 x i8] c"\09-h, --help \09show this help message\00"
define void @ee_print_help_msg_s() {
%1 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([26 x i8], [26 x i8]* @str, i64 0, i64 0))
%2 = tail call i32 @putchar(i32 10)
%3 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([32 x i8], [32 x i8]* @str.13, i64 0, i64 0))
%4 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([388 x i8], [388 x i8]* @.str.3, i64 0, i64 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.4, i64 0, i64 0))
%5 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([166 x i8], [166 x i8]* @.str.5, i64 0, i64 0), i32 1, i32 16, i32 8)
%6 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([323 x i8], [323 x i8]* @.str.6, i64 0, i64 0), i32 0, i32 255, i32 0)
%7 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([175 x i8], [175 x i8]* @str.14, i64 0, i64 0))
%8 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([450 x i8], [450 x i8]* @str.15, i64 0, i64 0))
%9 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([224 x i8], [224 x i8]* @.str.9, i64 0, i64 0), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.10, i64 0, i64 0))
%10 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([128 x i8], [128 x i8]* @str.16, i64 0, i64 0))
%11 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([54 x i8], [54 x i8]* @str.17, i64 0, i64 0))
%12 = tail call i32 @putchar(i32 10)
ret void
}