#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*/ refresh();
scalar_t__ strncmp(char *, char *, int);
void printnuke() {
  extern char device[];
  extern int (*pfunc)(const char *, ...);
  pfunc("                 __/~*##$%%@@@******~\\-__        \n");
  pfunc("               /f=r/~_-~ _-_ --_.^-~--\\=b\\      \n");
  pfunc("             4fF / */  .o  ._-__.__/~-. \\*R\\    \n");
  pfunc("            /fF./  . /- /' /|/|  \\_  * *\\ *\\R\\  \n");
  pfunc("           (iC.I+ '| - *-/00  |-  \\  )  ) )|RB  \n");
  pfunc("           (I| (  [  / -|/^^\\ |   )  /_/ | *)B  \n");
  pfunc("           (I(. \\ `` \\   \\m_m_|~__/ )_ .-~ F/   \n");
  pfunc("            \\b\\\\=_.\\_b`-+-~x-_/ .. ,._/ , F/    \n");
  pfunc("             ~\\_\\= =  =-*###%%#x==-#  *=- =/     \n");
  pfunc("                ~\\**U/~  | i i | ~~~\\===~       \n");
  pfunc("                        | I I \\\\                \n");
  pfunc("                       / // i\\ \\\\               \n");
  pfunc("                  (   [ (( I@) )))  )           \n");
  pfunc("                       \\_\\_VYVU_/               \n");
  pfunc("                         || * |                 \n");
  pfunc("                        /* /I\\ *~~\\              \n");
  pfunc("                      /~-/*  / \\ \\ ~~M~\\         \n");
  pfunc("            ____----=~ // /WVW\\* \\|\\ ***===--___ \n");
  pfunc(" \n");
  if (strncmp(device, "regular", 7) != 0)
    refresh();
}


x86 assembly (clang, -O0):
<printnuke>:
push   %rbp
mov    %rsp,%rbp
lea    0xed5(%rip),%rdi
mov    0x2eae(%rip),%rcx
mov    $0x0,%al
call   *(%rcx)
lea    0xef6(%rip),%rdi
mov    0x2e9c(%rip),%rcx
mov    $0x0,%al
call   *(%rcx)
lea    0xf16(%rip),%rdi
mov    0x2e8a(%rip),%rcx
mov    $0x0,%al
call   *(%rcx)
lea    0xf36(%rip),%rdi
mov    0x2e78(%rip),%rcx
mov    $0x0,%al
call   *(%rcx)
lea    0xf56(%rip),%rdi
mov    0x2e66(%rip),%rcx
mov    $0x0,%al
call   *(%rcx)
lea    0xf76(%rip),%rdi
mov    0x2e54(%rip),%rcx
mov    $0x0,%al
call   *(%rcx)
lea    0xf96(%rip),%rdi
mov    0x2e42(%rip),%rcx
mov    $0x0,%al
call   *(%rcx)
lea    0xfb6(%rip),%rdi
mov    0x2e30(%rip),%rcx
mov    $0x0,%al
call   *(%rcx)
lea    0xfd6(%rip),%rdi
mov    0x2e1e(%rip),%rcx
mov    $0x0,%al
call   *(%rcx)
lea    0xff7(%rip),%rdi
mov    0x2e0c(%rip),%rcx
mov    $0x0,%al
call   *(%rcx)
lea    0x1017(%rip),%rdi
mov    0x2dfa(%rip),%rcx
mov    $0x0,%al
call   *(%rcx)
lea    0x1037(%rip),%rdi
mov    0x2de8(%rip),%rcx
mov    $0x0,%al
call   *(%rcx)
lea    0x1057(%rip),%rdi
mov    0x2dd6(%rip),%rcx
mov    $0x0,%al
call   *(%rcx)
lea    0x1077(%rip),%rdi
mov    0x2dc4(%rip),%rcx
mov    $0x0,%al
call   *(%rcx)
lea    0x1097(%rip),%rdi
mov    0x2db2(%rip),%rcx
mov    $0x0,%al
call   *(%rcx)
lea    0x10b7(%rip),%rdi
mov    0x2da0(%rip),%rcx
mov    $0x0,%al
call   *(%rcx)
lea    0x10d8(%rip),%rdi
mov    0x2d8e(%rip),%rcx
mov    $0x0,%al
call   *(%rcx)
lea    0x10f9(%rip),%rdi
mov    0x2d7c(%rip),%rcx
mov    $0x0,%al
call   *(%rcx)
lea    0x107e(%rip),%rdi
mov    0x2d6a(%rip),%rcx
mov    $0x0,%al
call   *(%rcx)
mov    0x2d4f(%rip),%rdi
lea    0x1101(%rip),%rsi
mov    $0x7,%edx
call   1030 <strncmp@plt>
cmp    $0x0,%rax
je     12a3 <printnuke+0x183>
mov    $0x0,%al
call   1040 <refresh@plt>
pop    %rbp
ret

x86 assembly (clang, -O2):
<printnuke>:
push   %rbx
mov    0x2eb8(%rip),%rbx
lea    0xed1(%rip),%rdi
xor    %eax,%eax
call   *(%rbx)
lea    0xef9(%rip),%rdi
xor    %eax,%eax
call   *(%rbx)
lea    0xf20(%rip),%rdi
xor    %eax,%eax
call   *(%rbx)
lea    0xf47(%rip),%rdi
xor    %eax,%eax
call   *(%rbx)
lea    0xf6e(%rip),%rdi
xor    %eax,%eax
call   *(%rbx)
lea    0xf95(%rip),%rdi
xor    %eax,%eax
call   *(%rbx)
lea    0xfbc(%rip),%rdi
xor    %eax,%eax
call   *(%rbx)
lea    0xfe3(%rip),%rdi
xor    %eax,%eax
call   *(%rbx)
lea    0x100a(%rip),%rdi
xor    %eax,%eax
call   *(%rbx)
lea    0x1032(%rip),%rdi
xor    %eax,%eax
call   *(%rbx)
lea    0x1059(%rip),%rdi
xor    %eax,%eax
call   *(%rbx)
lea    0x1080(%rip),%rdi
xor    %eax,%eax
call   *(%rbx)
lea    0x10a7(%rip),%rdi
xor    %eax,%eax
call   *(%rbx)
lea    0x10ce(%rip),%rdi
xor    %eax,%eax
call   *(%rbx)
lea    0x10f5(%rip),%rdi
xor    %eax,%eax
call   *(%rbx)
lea    0x111c(%rip),%rdi
xor    %eax,%eax
call   *(%rbx)
lea    0x1144(%rip),%rdi
xor    %eax,%eax
call   *(%rbx)
lea    0x116c(%rip),%rdi
xor    %eax,%eax
call   *(%rbx)
lea    0x10f8(%rip),%rdi
xor    %eax,%eax
call   *(%rbx)
mov    0x2dd0(%rip),%rdi
lea    0x1182(%rip),%rsi
mov    $0x7,%edx
call   1030 <strncmp@plt>
test   %rax,%rax
je     121e <printnuke+0xfe>
xor    %eax,%eax
pop    %rbx
jmp    1040 <refresh@plt>
pop    %rbx
ret

LLVM IR (-O0):
@pfunc = external global i32 (i8*, ...)*
@.str = [51 x i8] c" __/~*##$%%@@@******~\\-__ \0A\00"
@.str.1 = [50 x i8] c" /f=r/~_-~ _-_ --_.^-~--\\=b\\ \0A\00"
@.str.2 = [50 x i8] c" 4fF / */ .o ._-__.__/~-. \\*R\\ \0A\00"
@.str.3 = [50 x i8] c" /fF./ . /- /' /|/| \\_ * *\\ *\\R\\ \0A\00"
@.str.4 = [50 x i8] c" (iC.I+ '| - *-/00 |- \\ ) ) )|RB \0A\00"
@.str.5 = [50 x i8] c" (I| ( [ / -|/^^\\ | ) /_/ | *)B \0A\00"
@.str.6 = [50 x i8] c" (I(. \\ `` \\ \\m_m_|~__/ )_ .-~ F/ \0A\00"
@.str.7 = [50 x i8] c" \\b\\\\=_.\\_b`-+-~x-_/ .. ,._/ , F/ \0A\00"
@.str.8 = [51 x i8] c" ~\\_\\= = =-*###%%#x==-# *=- =/ \0A\00"
@.str.9 = [50 x i8] c" ~\\**U/~ | i i | ~~~\\===~ \0A\00"
@.str.10 = [50 x i8] c" | I I \\\\ \0A\00"
@.str.11 = [50 x i8] c" / // i\\ \\\\ \0A\00"
@.str.12 = [50 x i8] c" ( [ (( I@) ))) ) \0A\00"
@.str.13 = [50 x i8] c" \\_\\_VYVU_/ \0A\00"
@.str.14 = [50 x i8] c" || * | \0A\00"
@.str.15 = [51 x i8] c" /* /I\\ *~~\\ \0A\00"
@.str.16 = [51 x i8] c" /~-/* / \\ \\ ~~M~\\ \0A\00"
@.str.17 = [51 x i8] c" ____----=~ // /WVW\\* \\|\\ ***===--___ \0A\00"
@.str.18 = [3 x i8] c" \0A\00"
@device = external global [0 x i8]
@.str.19 = [8 x i8] c"regular\00"
define void @printnuke() {
%1 = load i32 (i8*, ...)*, i32 (i8*, ...)** @pfunc
%2 = call i32 (i8*, ...) %1(i8* getelementptr inbounds ([51 x i8], [51 x i8]* @.str, i64 0, i64 0))
%3 = load i32 (i8*, ...)*, i32 (i8*, ...)** @pfunc
%4 = call i32 (i8*, ...) %3(i8* getelementptr inbounds ([50 x i8], [50 x i8]* @.str.1, i64 0, i64 0))
%5 = load i32 (i8*, ...)*, i32 (i8*, ...)** @pfunc
%6 = call i32 (i8*, ...) %5(i8* getelementptr inbounds ([50 x i8], [50 x i8]* @.str.2, i64 0, i64 0))
%7 = load i32 (i8*, ...)*, i32 (i8*, ...)** @pfunc
%8 = call i32 (i8*, ...) %7(i8* getelementptr inbounds ([50 x i8], [50 x i8]* @.str.3, i64 0, i64 0))
%9 = load i32 (i8*, ...)*, i32 (i8*, ...)** @pfunc
%10 = call i32 (i8*, ...) %9(i8* getelementptr inbounds ([50 x i8], [50 x i8]* @.str.4, i64 0, i64 0))
%11 = load i32 (i8*, ...)*, i32 (i8*, ...)** @pfunc
%12 = call i32 (i8*, ...) %11(i8* getelementptr inbounds ([50 x i8], [50 x i8]* @.str.5, i64 0, i64 0))
%13 = load i32 (i8*, ...)*, i32 (i8*, ...)** @pfunc
%14 = call i32 (i8*, ...) %13(i8* getelementptr inbounds ([50 x i8], [50 x i8]* @.str.6, i64 0, i64 0))
%15 = load i32 (i8*, ...)*, i32 (i8*, ...)** @pfunc
%16 = call i32 (i8*, ...) %15(i8* getelementptr inbounds ([50 x i8], [50 x i8]* @.str.7, i64 0, i64 0))
%17 = load i32 (i8*, ...)*, i32 (i8*, ...)** @pfunc
%18 = call i32 (i8*, ...) %17(i8* getelementptr inbounds ([51 x i8], [51 x i8]* @.str.8, i64 0, i64 0))
%19 = load i32 (i8*, ...)*, i32 (i8*, ...)** @pfunc
%20 = call i32 (i8*, ...) %19(i8* getelementptr inbounds ([50 x i8], [50 x i8]* @.str.9, i64 0, i64 0))
%21 = load i32 (i8*, ...)*, i32 (i8*, ...)** @pfunc
%22 = call i32 (i8*, ...) %21(i8* getelementptr inbounds ([50 x i8], [50 x i8]* @.str.10, i64 0, i64 0))
%23 = load i32 (i8*, ...)*, i32 (i8*, ...)** @pfunc
%24 = call i32 (i8*, ...) %23(i8* getelementptr inbounds ([50 x i8], [50 x i8]* @.str.11, i64 0, i64 0))
%25 = load i32 (i8*, ...)*, i32 (i8*, ...)** @pfunc
%26 = call i32 (i8*, ...) %25(i8* getelementptr inbounds ([50 x i8], [50 x i8]* @.str.12, i64 0, i64 0))
%27 = load i32 (i8*, ...)*, i32 (i8*, ...)** @pfunc
%28 = call i32 (i8*, ...) %27(i8* getelementptr inbounds ([50 x i8], [50 x i8]* @.str.13, i64 0, i64 0))
%29 = load i32 (i8*, ...)*, i32 (i8*, ...)** @pfunc
%30 = call i32 (i8*, ...) %29(i8* getelementptr inbounds ([50 x i8], [50 x i8]* @.str.14, i64 0, i64 0))
%31 = load i32 (i8*, ...)*, i32 (i8*, ...)** @pfunc
%32 = call i32 (i8*, ...) %31(i8* getelementptr inbounds ([51 x i8], [51 x i8]* @.str.15, i64 0, i64 0))
%33 = load i32 (i8*, ...)*, i32 (i8*, ...)** @pfunc
%34 = call i32 (i8*, ...) %33(i8* getelementptr inbounds ([51 x i8], [51 x i8]* @.str.16, i64 0, i64 0))
%35 = load i32 (i8*, ...)*, i32 (i8*, ...)** @pfunc
%36 = call i32 (i8*, ...) %35(i8* getelementptr inbounds ([51 x i8], [51 x i8]* @.str.17, i64 0, i64 0))
%37 = load i32 (i8*, ...)*, i32 (i8*, ...)** @pfunc
%38 = call i32 (i8*, ...) %37(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.18, i64 0, i64 0))
%39 = call i64 @strncmp(i8* getelementptr inbounds ([0 x i8], [0 x i8]* @device, i64 0, i64 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.19, i64 0, i64 0), i32 7)
%40 = icmp ne i64 %39, 0
br i1 %40, label %41, label %43
41: ; preds = %0
%42 = call i32 (...) @refresh()
br label %43
43: ; preds = %41, %0
ret void
}

LLVM IR (-O2):
@pfunc = external global i32 (i8*, ...)*
@.str = [51 x i8] c" __/~*##$%%@@@******~\\-__ \0A\00"
@.str.1 = [50 x i8] c" /f=r/~_-~ _-_ --_.^-~--\\=b\\ \0A\00"
@.str.2 = [50 x i8] c" 4fF / */ .o ._-__.__/~-. \\*R\\ \0A\00"
@.str.3 = [50 x i8] c" /fF./ . /- /' /|/| \\_ * *\\ *\\R\\ \0A\00"
@.str.4 = [50 x i8] c" (iC.I+ '| - *-/00 |- \\ ) ) )|RB \0A\00"
@.str.5 = [50 x i8] c" (I| ( [ / -|/^^\\ | ) /_/ | *)B \0A\00"
@.str.6 = [50 x i8] c" (I(. \\ `` \\ \\m_m_|~__/ )_ .-~ F/ \0A\00"
@.str.7 = [50 x i8] c" \\b\\\\=_.\\_b`-+-~x-_/ .. ,._/ , F/ \0A\00"
@.str.8 = [51 x i8] c" ~\\_\\= = =-*###%%#x==-# *=- =/ \0A\00"
@.str.9 = [50 x i8] c" ~\\**U/~ | i i | ~~~\\===~ \0A\00"
@.str.10 = [50 x i8] c" | I I \\\\ \0A\00"
@.str.11 = [50 x i8] c" / // i\\ \\\\ \0A\00"
@.str.12 = [50 x i8] c" ( [ (( I@) ))) ) \0A\00"
@.str.13 = [50 x i8] c" \\_\\_VYVU_/ \0A\00"
@.str.14 = [50 x i8] c" || * | \0A\00"
@.str.15 = [51 x i8] c" /* /I\\ *~~\\ \0A\00"
@.str.16 = [51 x i8] c" /~-/* / \\ \\ ~~M~\\ \0A\00"
@.str.17 = [51 x i8] c" ____----=~ // /WVW\\* \\|\\ ***===--___ \0A\00"
@.str.18 = [3 x i8] c" \0A\00"
@device = external global [0 x i8]
@.str.19 = [8 x i8] c"regular\00"
define void @printnuke() {
%1 = load i32 (i8*, ...)*, i32 (i8*, ...)** @pfunc
%2 = tail call i32 (i8*, ...) %1(i8* getelementptr inbounds ([51 x i8], [51 x i8]* @.str, i64 0, i64 0))
%3 = load i32 (i8*, ...)*, i32 (i8*, ...)** @pfunc
%4 = tail call i32 (i8*, ...) %3(i8* getelementptr inbounds ([50 x i8], [50 x i8]* @.str.1, i64 0, i64 0))
%5 = load i32 (i8*, ...)*, i32 (i8*, ...)** @pfunc
%6 = tail call i32 (i8*, ...) %5(i8* getelementptr inbounds ([50 x i8], [50 x i8]* @.str.2, i64 0, i64 0))
%7 = load i32 (i8*, ...)*, i32 (i8*, ...)** @pfunc
%8 = tail call i32 (i8*, ...) %7(i8* getelementptr inbounds ([50 x i8], [50 x i8]* @.str.3, i64 0, i64 0))
%9 = load i32 (i8*, ...)*, i32 (i8*, ...)** @pfunc
%10 = tail call i32 (i8*, ...) %9(i8* getelementptr inbounds ([50 x i8], [50 x i8]* @.str.4, i64 0, i64 0))
%11 = load i32 (i8*, ...)*, i32 (i8*, ...)** @pfunc
%12 = tail call i32 (i8*, ...) %11(i8* getelementptr inbounds ([50 x i8], [50 x i8]* @.str.5, i64 0, i64 0))
%13 = load i32 (i8*, ...)*, i32 (i8*, ...)** @pfunc
%14 = tail call i32 (i8*, ...) %13(i8* getelementptr inbounds ([50 x i8], [50 x i8]* @.str.6, i64 0, i64 0))
%15 = load i32 (i8*, ...)*, i32 (i8*, ...)** @pfunc
%16 = tail call i32 (i8*, ...) %15(i8* getelementptr inbounds ([50 x i8], [50 x i8]* @.str.7, i64 0, i64 0))
%17 = load i32 (i8*, ...)*, i32 (i8*, ...)** @pfunc
%18 = tail call i32 (i8*, ...) %17(i8* getelementptr inbounds ([51 x i8], [51 x i8]* @.str.8, i64 0, i64 0))
%19 = load i32 (i8*, ...)*, i32 (i8*, ...)** @pfunc
%20 = tail call i32 (i8*, ...) %19(i8* getelementptr inbounds ([50 x i8], [50 x i8]* @.str.9, i64 0, i64 0))
%21 = load i32 (i8*, ...)*, i32 (i8*, ...)** @pfunc
%22 = tail call i32 (i8*, ...) %21(i8* getelementptr inbounds ([50 x i8], [50 x i8]* @.str.10, i64 0, i64 0))
%23 = load i32 (i8*, ...)*, i32 (i8*, ...)** @pfunc
%24 = tail call i32 (i8*, ...) %23(i8* getelementptr inbounds ([50 x i8], [50 x i8]* @.str.11, i64 0, i64 0))
%25 = load i32 (i8*, ...)*, i32 (i8*, ...)** @pfunc
%26 = tail call i32 (i8*, ...) %25(i8* getelementptr inbounds ([50 x i8], [50 x i8]* @.str.12, i64 0, i64 0))
%27 = load i32 (i8*, ...)*, i32 (i8*, ...)** @pfunc
%28 = tail call i32 (i8*, ...) %27(i8* getelementptr inbounds ([50 x i8], [50 x i8]* @.str.13, i64 0, i64 0))
%29 = load i32 (i8*, ...)*, i32 (i8*, ...)** @pfunc
%30 = tail call i32 (i8*, ...) %29(i8* getelementptr inbounds ([50 x i8], [50 x i8]* @.str.14, i64 0, i64 0))
%31 = load i32 (i8*, ...)*, i32 (i8*, ...)** @pfunc
%32 = tail call i32 (i8*, ...) %31(i8* getelementptr inbounds ([51 x i8], [51 x i8]* @.str.15, i64 0, i64 0))
%33 = load i32 (i8*, ...)*, i32 (i8*, ...)** @pfunc
%34 = tail call i32 (i8*, ...) %33(i8* getelementptr inbounds ([51 x i8], [51 x i8]* @.str.16, i64 0, i64 0))
%35 = load i32 (i8*, ...)*, i32 (i8*, ...)** @pfunc
%36 = tail call i32 (i8*, ...) %35(i8* getelementptr inbounds ([51 x i8], [51 x i8]* @.str.17, i64 0, i64 0))
%37 = load i32 (i8*, ...)*, i32 (i8*, ...)** @pfunc
%38 = tail call i32 (i8*, ...) %37(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.18, i64 0, i64 0))
%39 = tail call i64 @strncmp(i8* getelementptr inbounds ([0 x i8], [0 x i8]* @device, i64 0, i64 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.19, i64 0, i64 0), i32 7)
%40 = icmp eq i64 %39, 0
br i1 %40, label %43, label %41
41: ; preds = %0
%42 = tail call i32 (...) @refresh()
br label %43
43: ; preds = %41, %0
ret void
}