#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 */
scalar_t__ detectPresence(char *);
scalar_t__ isDarwin();
int /*<<< orphan*/ strcat(char *, char *);
scalar_t__ strcpy(char *, char *);
scalar_t__ strlen(char *);
char const *terminalName() {
  static char lTerminalName[64] = "*";
  char lShellName[64] = "*";
  if (lTerminalName[0] == '*') {
    if (detectPresence("bash")) {
      strcpy(lShellName, "bash -c ");
    } else {
      return NULL;
    }
    if (isDarwin()) {
      if (strcpy(lTerminalName, "/opt/X11/bin/xterm") &&
          detectPresence(lTerminalName)) {
        strcat(lTerminalName, " -e ");
        strcat(lTerminalName, lShellName);
      } else {
        strcpy(lTerminalName, "");
      }
    } else if (strcpy(lTerminalName, "xterm") &&
               detectPresence(lTerminalName)) {
      strcat(lTerminalName, " -e ");
      strcat(lTerminalName, lShellName);
    } else if (strcpy(lTerminalName, "terminator") &&
               detectPresence(lTerminalName)) {
      strcat(lTerminalName, " -x ");
      strcat(lTerminalName, lShellName);
    } else if (strcpy(lTerminalName, "lxterminal") &&
               detectPresence(lTerminalName)) {
      strcat(lTerminalName, " -e ");
      strcat(lTerminalName, lShellName);
    } else if (strcpy(lTerminalName, "mate-terminal") &&
               detectPresence(lTerminalName)) {
      strcat(lTerminalName, " -x ");
      strcat(lTerminalName, lShellName);
    } else if (strcpy(lTerminalName, "konsole") &&
               detectPresence(lTerminalName)) {
      strcat(lTerminalName, " -e ");
      strcat(lTerminalName, lShellName);
    } else if (strcpy(lTerminalName, "rxvt") && detectPresence(lTerminalName)) {
      strcat(lTerminalName, " -e ");
      strcat(lTerminalName, lShellName);
    } else if (strcpy(lTerminalName, "urxvt") &&
               detectPresence(lTerminalName)) {
      strcat(lTerminalName, " -e ");
      strcat(lTerminalName, lShellName);
    } else if (strcpy(lTerminalName, "mrxvt") &&
               detectPresence(lTerminalName)) {
      strcat(lTerminalName, " -e ");
      strcat(lTerminalName, lShellName);
    } else if (strcpy(lTerminalName, "evilvte") &&
               detectPresence(lTerminalName)) {
      strcat(lTerminalName, " -e ");
      strcat(lTerminalName, lShellName);
    } else if (strcpy(lTerminalName, "termit") &&
               detectPresence(lTerminalName)) {
      strcat(lTerminalName, " -e ");
      strcat(lTerminalName, lShellName);
    } else if (strcpy(lTerminalName, "kterm") &&
               detectPresence(lTerminalName)) {
      strcat(lTerminalName, " -e ");
      strcat(lTerminalName, lShellName);
    } else if (strcpy(lTerminalName, "roxterm") &&
               detectPresence(lTerminalName)) {
      strcat(lTerminalName, " -e ");
      strcat(lTerminalName, lShellName);
    } else if (strcpy(lTerminalName, "lxterm") &&
               detectPresence(lTerminalName)) {
      strcat(lTerminalName, " -e ");
      strcat(lTerminalName, lShellName);
    } else if (strcpy(lTerminalName, "gnome-terminal") &&
               detectPresence(lTerminalName)) {
      strcat(lTerminalName, " --disable-factory -x ");
      strcat(lTerminalName, lShellName);
    } else if (strcpy(lTerminalName, "xfce4-terminal") &&
               detectPresence(lTerminalName)) {
      strcat(lTerminalName, " -x ");
      strcat(lTerminalName, lShellName);
    } else if (strcpy(lTerminalName, "xvt") && detectPresence(lTerminalName)) {
      strcat(lTerminalName, " -e ");
      strcat(lTerminalName, lShellName);
    } else if (strcpy(lTerminalName, "pterm") &&
               detectPresence(lTerminalName)) {
      strcat(lTerminalName, " -e ");
      strcat(lTerminalName, lShellName);
    } else if (strcpy(lTerminalName, "x-terminal-emulator") &&
               detectPresence(lTerminalName)) {
      strcat(lTerminalName, " -e ");
      strcat(lTerminalName, lShellName);
    } else if (strcpy(lTerminalName, "$TERM") &&
               detectPresence(lTerminalName)) {
      strcat(lTerminalName, " -e ");
      strcat(lTerminalName, lShellName);
    } else {
      strcpy(lTerminalName, "");
    }
  }
  if (strlen(lTerminalName)) {
    return lTerminalName;
  } else {
    return NULL;
  }
}


x86 assembly (clang, -O0):
<terminalName>:
push   %rbp
mov    %rsp,%rbp
sub    $0x50,%rsp
lea    -0x50(%rbp),%rdi
xor    %esi,%esi
mov    $0x40,%edx
call   1050 <memset@plt>
movb   $0x2a,-0x50(%rbp)
movsbl 0x2edd(%rip),%eax
cmp    $0x2a,%eax
jne    1980 <terminalName+0x820>
lea    0xe6d(%rip),%rdi
call   1070 <detectPresence@plt>
cmp    $0x0,%rax
je     11b7 <terminalName+0x57>
lea    -0x50(%rbp),%rdi
lea    0xe58(%rip),%rsi
call   1030 <strcpy@plt>
jmp    11c4 <terminalName+0x64>
movq   $0x0,-0x8(%rbp)
jmp    19ae <terminalName+0x84e>
mov    $0x0,%al
call   1060 <isDarwin@plt>
cmp    $0x0,%rax
je     1248 <terminalName+0xe8>
lea    0x2e84(%rip),%rdi
lea    0xe2b(%rip),%rsi
call   1030 <strcpy@plt>
cmp    $0x0,%rax
je     1230 <terminalName+0xd0>
lea    0x2e67(%rip),%rdi
call   1070 <detectPresence@plt>
cmp    $0x0,%rax
je     1230 <terminalName+0xd0>
lea    0x2e51(%rip),%rdi
lea    0xe0b(%rip),%rsi
call   1080 <strcat@plt>
lea    -0x50(%rbp),%rsi
lea    0x2e3a(%rip),%rdi
call   1080 <strcat@plt>
jmp    1243 <terminalName+0xe3>
lea    0x2e29(%rip),%rdi
lea    0xdcf(%rip),%rsi
call   1030 <strcpy@plt>
jmp    197b <terminalName+0x81b>
lea    0x2e11(%rip),%rdi
lea    0xdc5(%rip),%rsi
call   1030 <strcpy@plt>
cmp    $0x0,%rax
je     12a3 <terminalName+0x143>
lea    0x2df4(%rip),%rdi
call   1070 <detectPresence@plt>
cmp    $0x0,%rax
je     12a3 <terminalName+0x143>
lea    0x2dde(%rip),%rdi
lea    0xd98(%rip),%rsi
call   1080 <strcat@plt>
lea    -0x50(%rbp),%rsi
lea    0x2dc7(%rip),%rdi
call   1080 <strcat@plt>
jmp    1976 <terminalName+0x816>
lea    0x2db6(%rip),%rdi
lea    0xd75(%rip),%rsi
call   1030 <strcpy@plt>
cmp    $0x0,%rax
je     12fe <terminalName+0x19e>
lea    0x2d99(%rip),%rdi
call   1070 <detectPresence@plt>
cmp    $0x0,%rax
je     12fe <terminalName+0x19e>
lea    0x2d83(%rip),%rdi
lea    0xdbf(%rip),%rsi
call   1080 <strcat@plt>
lea    -0x50(%rbp),%rsi
lea    0x2d6c(%rip),%rdi
call   1080 <strcat@plt>
jmp    1971 <terminalName+0x811>
lea    0x2d5b(%rip),%rdi
lea    0xd25(%rip),%rsi
call   1030 <strcpy@plt>
cmp    $0x0,%rax
je     1359 <terminalName+0x1f9>
lea    0x2d3e(%rip),%rdi
call   1070 <detectPresence@plt>
cmp    $0x0,%rax
je     1359 <terminalName+0x1f9>
lea    0x2d28(%rip),%rdi
lea    0xce2(%rip),%rsi
call   1080 <strcat@plt>
lea    -0x50(%rbp),%rsi
lea    0x2d11(%rip),%rdi
call   1080 <strcat@plt>
jmp    196c <terminalName+0x80c>
lea    0x2d00(%rip),%rdi
lea    0xcd5(%rip),%rsi
call   1030 <strcpy@plt>
cmp    $0x0,%rax
je     13b4 <terminalName+0x254>
lea    0x2ce3(%rip),%rdi
call   1070 <detectPresence@plt>
cmp    $0x0,%rax
je     13b4 <terminalName+0x254>
lea    0x2ccd(%rip),%rdi
lea    0xd09(%rip),%rsi
call   1080 <strcat@plt>
lea    -0x50(%rbp),%rsi
lea    0x2cb6(%rip),%rdi
call   1080 <strcat@plt>
jmp    1967 <terminalName+0x807>
lea    0x2ca5(%rip),%rdi
lea    0xc88(%rip),%rsi
call   1030 <strcpy@plt>
cmp    $0x0,%rax
je     140f <terminalName+0x2af>
lea    0x2c88(%rip),%rdi
call   1070 <detectPresence@plt>
cmp    $0x0,%rax
je     140f <terminalName+0x2af>
lea    0x2c72(%rip),%rdi
lea    0xc2c(%rip),%rsi
call   1080 <strcat@plt>
lea    -0x50(%rbp),%rsi
lea    0x2c5b(%rip),%rdi
call   1080 <strcat@plt>
jmp    1962 <terminalName+0x802>
lea    0x2c4a(%rip),%rdi
lea    0xc3c(%rip),%rsi
call   1030 <strcpy@plt>
cmp    $0x0,%rax
je     146a <terminalName+0x30a>
lea    0x2c2d(%rip),%rdi
call   1070 <detectPresence@plt>
cmp    $0x0,%rax
je     146a <terminalName+0x30a>
lea    0x2c17(%rip),%rdi
lea    0xbd1(%rip),%rsi
call   1080 <strcat@plt>
lea    -0x50(%rbp),%rsi
lea    0x2c00(%rip),%rdi
call   1080 <strcat@plt>
jmp    195d <terminalName+0x7fd>
lea    0x2bef(%rip),%rdi
lea    0xbda(%rip),%rsi
call   1030 <strcpy@plt>
cmp    $0x0,%rax
je     14c5 <terminalName+0x365>
lea    0x2bd2(%rip),%rdi
call   1070 <detectPresence@plt>
cmp    $0x0,%rax
je     14c5 <terminalName+0x365>
lea    0x2bbc(%rip),%rdi
lea    0xb76(%rip),%rsi
call   1080 <strcat@plt>
lea    -0x50(%rbp),%rsi
lea    0x2ba5(%rip),%rdi
call   1080 <strcat@plt>
jmp    1958 <terminalName+0x7f8>
lea    0x2b94(%rip),%rdi
lea    0xb85(%rip),%rsi
call   1030 <strcpy@plt>
cmp    $0x0,%rax
je     1520 <terminalName+0x3c0>
lea    0x2b77(%rip),%rdi
call   1070 <detectPresence@plt>
cmp    $0x0,%rax
je     1520 <terminalName+0x3c0>
lea    0x2b61(%rip),%rdi
lea    0xb1b(%rip),%rsi
call   1080 <strcat@plt>
lea    -0x50(%rbp),%rsi
lea    0x2b4a(%rip),%rdi
call   1080 <strcat@plt>
jmp    1953 <terminalName+0x7f3>
lea    0x2b39(%rip),%rdi
lea    0xb30(%rip),%rsi
call   1030 <strcpy@plt>
cmp    $0x0,%rax
je     157b <terminalName+0x41b>
lea    0x2b1c(%rip),%rdi
call   1070 <detectPresence@plt>
cmp    $0x0,%rax
je     157b <terminalName+0x41b>
lea    0x2b06(%rip),%rdi
lea    0xac0(%rip),%rsi
call   1080 <strcat@plt>
lea    -0x50(%rbp),%rsi
lea    0x2aef(%rip),%rdi
call   1080 <strcat@plt>
jmp    194e <terminalName+0x7ee>
lea    0x2ade(%rip),%rdi
lea    0xadd(%rip),%rsi
call   1030 <strcpy@plt>
cmp    $0x0,%rax
je     15d6 <terminalName+0x476>
lea    0x2ac1(%rip),%rdi
call   1070 <detectPresence@plt>
cmp    $0x0,%rax
je     15d6 <terminalName+0x476>
lea    0x2aab(%rip),%rdi
lea    0xa65(%rip),%rsi
call   1080 <strcat@plt>
lea    -0x50(%rbp),%rsi
lea    0x2a94(%rip),%rdi
call   1080 <strcat@plt>
jmp    1949 <terminalName+0x7e9>
lea    0x2a83(%rip),%rdi
lea    0xa89(%rip),%rsi
call   1030 <strcpy@plt>
cmp    $0x0,%rax
je     1631 <terminalName+0x4d1>
lea    0x2a66(%rip),%rdi
call   1070 <detectPresence@plt>
cmp    $0x0,%rax
je     1631 <terminalName+0x4d1>
lea    0x2a50(%rip),%rdi
lea    0xa0a(%rip),%rsi
call   1080 <strcat@plt>
lea    -0x50(%rbp),%rsi
lea    0x2a39(%rip),%rdi
call   1080 <strcat@plt>
jmp    1944 <terminalName+0x7e4>
lea    0x2a28(%rip),%rdi
lea    0xa34(%rip),%rsi
call   1030 <strcpy@plt>
cmp    $0x0,%rax
je     168c <terminalName+0x52c>
lea    0x2a0b(%rip),%rdi
call   1070 <detectPresence@plt>
cmp    $0x0,%rax
je     168c <terminalName+0x52c>
lea    0x29f5(%rip),%rdi
lea    0x9af(%rip),%rsi
call   1080 <strcat@plt>
lea    -0x50(%rbp),%rsi
lea    0x29de(%rip),%rdi
call   1080 <strcat@plt>
jmp    193f <terminalName+0x7df>
lea    0x29cd(%rip),%rdi
lea    0x9e1(%rip),%rsi
call   1030 <strcpy@plt>
cmp    $0x0,%rax
je     16e7 <terminalName+0x587>
lea    0x29b0(%rip),%rdi
call   1070 <detectPresence@plt>
cmp    $0x0,%rax
je     16e7 <terminalName+0x587>
lea    0x299a(%rip),%rdi
lea    0x954(%rip),%rsi
call   1080 <strcat@plt>
lea    -0x50(%rbp),%rsi
lea    0x2983(%rip),%rdi
call   1080 <strcat@plt>
jmp    193a <terminalName+0x7da>
lea    0x2972(%rip),%rdi
lea    0x98d(%rip),%rsi
call   1030 <strcpy@plt>
cmp    $0x0,%rax
je     1742 <terminalName+0x5e2>
lea    0x2955(%rip),%rdi
call   1070 <detectPresence@plt>
cmp    $0x0,%rax
je     1742 <terminalName+0x5e2>
lea    0x293f(%rip),%rdi
lea    0x969(%rip),%rsi
call   1080 <strcat@plt>
lea    -0x50(%rbp),%rsi
lea    0x2928(%rip),%rdi
call   1080 <strcat@plt>
jmp    1935 <terminalName+0x7d5>
lea    0x2917(%rip),%rdi
lea    0x958(%rip),%rsi
call   1030 <strcpy@plt>
cmp    $0x0,%rax
je     179d <terminalName+0x63d>
lea    0x28fa(%rip),%rdi
call   1070 <detectPresence@plt>
cmp    $0x0,%rax
je     179d <terminalName+0x63d>
lea    0x28e4(%rip),%rdi
lea    0x920(%rip),%rsi
call   1080 <strcat@plt>
lea    -0x50(%rbp),%rsi
lea    0x28cd(%rip),%rdi
call   1080 <strcat@plt>
jmp    1930 <terminalName+0x7d0>
lea    0x28bc(%rip),%rdi
lea    0x8af(%rip),%rsi
call   1030 <strcpy@plt>
cmp    $0x0,%rax
je     17f8 <terminalName+0x698>
lea    0x289f(%rip),%rdi
call   1070 <detectPresence@plt>
cmp    $0x0,%rax
je     17f8 <terminalName+0x698>
lea    0x2889(%rip),%rdi
lea    0x843(%rip),%rsi
call   1080 <strcat@plt>
lea    -0x50(%rbp),%rsi
lea    0x2872(%rip),%rdi
call   1080 <strcat@plt>
jmp    192b <terminalName+0x7cb>
lea    0x2861(%rip),%rdi
lea    0x8b1(%rip),%rsi
call   1030 <strcpy@plt>
cmp    $0x0,%rax
je     1853 <terminalName+0x6f3>
lea    0x2844(%rip),%rdi
call   1070 <detectPresence@plt>
cmp    $0x0,%rax
je     1853 <terminalName+0x6f3>
lea    0x282e(%rip),%rdi
lea    0x7e8(%rip),%rsi
call   1080 <strcat@plt>
lea    -0x50(%rbp),%rsi
lea    0x2817(%rip),%rdi
call   1080 <strcat@plt>
jmp    1926 <terminalName+0x7c6>
lea    0x2806(%rip),%rdi
lea    0x85c(%rip),%rsi
call   1030 <strcpy@plt>
cmp    $0x0,%rax
je     18ae <terminalName+0x74e>
lea    0x27e9(%rip),%rdi
call   1070 <detectPresence@plt>
cmp    $0x0,%rax
je     18ae <terminalName+0x74e>
lea    0x27d3(%rip),%rdi
lea    0x78d(%rip),%rsi
call   1080 <strcat@plt>
lea    -0x50(%rbp),%rsi
lea    0x27bc(%rip),%rdi
call   1080 <strcat@plt>
jmp    1921 <terminalName+0x7c1>
lea    0x27ab(%rip),%rdi
lea    0x815(%rip),%rsi
call   1030 <strcpy@plt>
cmp    $0x0,%rax
je     1909 <terminalName+0x7a9>
lea    0x278e(%rip),%rdi
call   1070 <detectPresence@plt>
cmp    $0x0,%rax
je     1909 <terminalName+0x7a9>
lea    0x2778(%rip),%rdi
lea    0x732(%rip),%rsi
call   1080 <strcat@plt>
lea    -0x50(%rbp),%rsi
lea    0x2761(%rip),%rdi
call   1080 <strcat@plt>
jmp    191c <terminalName+0x7bc>
lea    0x2750(%rip),%rdi
lea    0x6f6(%rip),%rsi
call   1030 <strcpy@plt>
jmp    1921 <terminalName+0x7c1>
jmp    1926 <terminalName+0x7c6>
jmp    192b <terminalName+0x7cb>
jmp    1930 <terminalName+0x7d0>
jmp    1935 <terminalName+0x7d5>
jmp    193a <terminalName+0x7da>
jmp    193f <terminalName+0x7df>
jmp    1944 <terminalName+0x7e4>
jmp    1949 <terminalName+0x7e9>
jmp    194e <terminalName+0x7ee>
jmp    1953 <terminalName+0x7f3>
jmp    1958 <terminalName+0x7f8>
jmp    195d <terminalName+0x7fd>
jmp    1962 <terminalName+0x802>
jmp    1967 <terminalName+0x807>
jmp    196c <terminalName+0x80c>
jmp    1971 <terminalName+0x811>
jmp    1976 <terminalName+0x816>
jmp    197b <terminalName+0x81b>
jmp    1980 <terminalName+0x820>
lea    0x26d9(%rip),%rdi
call   1040 <strlen@plt>
cmp    $0x0,%rax
je     19a6 <terminalName+0x846>
lea    0x26c3(%rip),%rax
mov    %rax,-0x8(%rbp)
jmp    19ae <terminalName+0x84e>
movq   $0x0,-0x8(%rbp)
mov    -0x8(%rbp),%rax
add    $0x50,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<terminalName>:
push   %rbx
sub    $0x40,%rsp
xorps  %xmm0,%xmm0
movaps %xmm0,(%rsp)
movaps %xmm0,0x30(%rsp)
movaps %xmm0,0x20(%rsp)
movaps %xmm0,0x10(%rsp)
movb   $0x2a,(%rsp)
cmpb   $0x2a,0x2eea(%rip)
jne    1442 <terminalName+0x302>
lea    0xe8d(%rip),%rdi
call   1050 <detectPresence@plt>
test   %rax,%rax
je     11dd <terminalName+0x9d>
lea    0xe81(%rip),%rsi
mov    %rsp,%rdi
call   1030 <strcpy@plt>
xor    %eax,%eax
call   1040 <isDarwin@plt>
lea    0x2eb6(%rip),%rdi
test   %rax,%rax
je     11e4 <terminalName+0xa4>
lea    0xe68(%rip),%rsi
call   1030 <strcpy@plt>
test   %rax,%rax
je     11c5 <terminalName+0x85>
lea    0x2e99(%rip),%rdi
call   1050 <detectPresence@plt>
test   %rax,%rax
jne    1421 <terminalName+0x2e1>
lea    0x2e84(%rip),%rdi
lea    0xe3a(%rip),%rsi
call   1030 <strcpy@plt>
jmp    1442 <terminalName+0x302>
xor    %eax,%eax
jmp    1456 <terminalName+0x316>
lea    0xe30(%rip),%rsi
call   1030 <strcpy@plt>
test   %rax,%rax
je     120a <terminalName+0xca>
lea    0x2e54(%rip),%rdi
call   1050 <detectPresence@plt>
test   %rax,%rax
jne    1421 <terminalName+0x2e1>
lea    0x2e3f(%rip),%rdi
lea    0xe0e(%rip),%rsi
call   1030 <strcpy@plt>
test   %rax,%rax
je     1233 <terminalName+0xf3>
lea    0x2e27(%rip),%rdi
call   1050 <detectPresence@plt>
test   %rax,%rax
jne    1289 <terminalName+0x149>
lea    0x2e16(%rip),%rdi
lea    0xdf0(%rip),%rsi
call   1030 <strcpy@plt>
test   %rax,%rax
je     1260 <terminalName+0x120>
lea    0x2dfe(%rip),%rdi
call   1050 <detectPresence@plt>
test   %rax,%rax
jne    1421 <terminalName+0x2e1>
lea    0x2de9(%rip),%rdi
lea    0xdce(%rip),%rsi
call   1030 <strcpy@plt>
test   %rax,%rax
je     129c <terminalName+0x15c>
lea    0x2dd1(%rip),%rdi
call   1050 <detectPresence@plt>
test   %rax,%rax
je     129c <terminalName+0x15c>
lea    0x2dc0(%rip),%rbx
lea    0xe0c(%rip),%rsi
jmp    142f <terminalName+0x2ef>
lea    0x2dad(%rip),%rdi
lea    0xda0(%rip),%rsi
call   1030 <strcpy@plt>
test   %rax,%rax
je     12c9 <terminalName+0x189>
lea    0x2d95(%rip),%rdi
call   1050 <detectPresence@plt>
test   %rax,%rax
jne    1421 <terminalName+0x2e1>
lea    0x2d80(%rip),%rdi
lea    0xd82(%rip),%rsi
call   1030 <strcpy@plt>
test   %rax,%rax
je     12f6 <terminalName+0x1b6>
lea    0x2d68(%rip),%rdi
call   1050 <detectPresence@plt>
test   %rax,%rax
jne    1421 <terminalName+0x2e1>
lea    0x2d53(%rip),%rdi
lea    0xd4e(%rip),%rsi
call   1030 <strcpy@plt>
test   %rax,%rax
je     1323 <terminalName+0x1e3>
lea    0x2d3b(%rip),%rdi
call   1050 <detectPresence@plt>
test   %rax,%rax
jne    1421 <terminalName+0x2e1>
lea    0x2d26(%rip),%rdi
lea    0xd27(%rip),%rsi
call   1030 <strcpy@plt>
test   %rax,%rax
je     1350 <terminalName+0x210>
lea    0x2d0e(%rip),%rdi
call   1050 <detectPresence@plt>
test   %rax,%rax
jne    1421 <terminalName+0x2e1>
lea    0x2cf9(%rip),%rdi
lea    0xd00(%rip),%rsi
call   1030 <strcpy@plt>
test   %rax,%rax
je     137d <terminalName+0x23d>
lea    0x2ce1(%rip),%rdi
call   1050 <detectPresence@plt>
test   %rax,%rax
jne    1421 <terminalName+0x2e1>
lea    0x2ccc(%rip),%rdi
lea    0xcdb(%rip),%rsi
call   1030 <strcpy@plt>
test   %rax,%rax
je     13a6 <terminalName+0x266>
lea    0x2cb4(%rip),%rdi
call   1050 <detectPresence@plt>
test   %rax,%rax
jne    1421 <terminalName+0x2e1>
lea    0x2ca3(%rip),%rdi
lea    0xcb9(%rip),%rsi
call   1030 <strcpy@plt>
test   %rax,%rax
je     13cf <terminalName+0x28f>
lea    0x2c8b(%rip),%rdi
call   1050 <detectPresence@plt>
test   %rax,%rax
jne    1421 <terminalName+0x2e1>
lea    0x2c7a(%rip),%rdi
lea    0xc96(%rip),%rsi
call   1030 <strcpy@plt>
test   %rax,%rax
je     13f8 <terminalName+0x2b8>
lea    0x2c62(%rip),%rdi
call   1050 <detectPresence@plt>
test   %rax,%rax
jne    1421 <terminalName+0x2e1>
lea    0x2c51(%rip),%rdi
lea    0xc75(%rip),%rsi
call   1030 <strcpy@plt>
test   %rax,%rax
je     145c <terminalName+0x31c>
lea    0x2c39(%rip),%rdi
call   1050 <detectPresence@plt>
test   %rax,%rax
je     145c <terminalName+0x31c>
lea    0x2c28(%rip),%rbx
lea    0xbf2(%rip),%rsi
mov    %rbx,%rdi
call   1060 <strcat@plt>
mov    %rsp,%rsi
mov    %rbx,%rdi
call   1060 <strcat@plt>
lea    0x2c07(%rip),%rcx
xor    %eax,%eax
cmpb   $0x0,0x2bfe(%rip)
cmovne %rcx,%rax
add    $0x40,%rsp
pop    %rbx
ret
lea    0x2bed(%rip),%rdi
lea    0xc18(%rip),%rsi
call   1030 <strcpy@plt>
test   %rax,%rax
je     1495 <terminalName+0x355>
lea    0x2bd5(%rip),%rdi
call   1050 <detectPresence@plt>
test   %rax,%rax
je     1495 <terminalName+0x355>
lea    0x2bc4(%rip),%rbx
lea    0xbfe(%rip),%rsi
jmp    142f <terminalName+0x2ef>
lea    0x2bb4(%rip),%rdi
lea    0xc05(%rip),%rsi
call   1030 <strcpy@plt>
test   %rax,%rax
je     14c2 <terminalName+0x382>
lea    0x2b9c(%rip),%rdi
call   1050 <detectPresence@plt>
test   %rax,%rax
jne    1289 <terminalName+0x149>
lea    0x2b87(%rip),%rdi
lea    0xb8a(%rip),%rsi
call   1030 <strcpy@plt>
test   %rax,%rax
je     14ef <terminalName+0x3af>
lea    0x2b6f(%rip),%rdi
call   1050 <detectPresence@plt>
test   %rax,%rax
jne    1421 <terminalName+0x2e1>
lea    0x2b5a(%rip),%rdi
lea    0xbba(%rip),%rsi
call   1030 <strcpy@plt>
test   %rax,%rax
je     151c <terminalName+0x3dc>
lea    0x2b42(%rip),%rdi
call   1050 <detectPresence@plt>
test   %rax,%rax
jne    1421 <terminalName+0x2e1>
lea    0x2b2d(%rip),%rdi
lea    0xb93(%rip),%rsi
call   1030 <strcpy@plt>
test   %rax,%rax
je     1549 <terminalName+0x409>
lea    0x2b15(%rip),%rdi
call   1050 <detectPresence@plt>
test   %rax,%rax
jne    1421 <terminalName+0x2e1>
lea    0x2b00(%rip),%rdi
lea    0xb7a(%rip),%rsi
jmp    11a6 <terminalName+0x66>

LLVM IR (-O0):
@terminalName.lTerminalName = internal global [64 x i8] c"*\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00"
@.str = [5 x i8] c"bash\00"
@.str.1 = [9 x i8] c"bash -c \00"
@.str.2 = [19 x i8] c"/opt/X11/bin/xterm\00"
@.str.3 = [5 x i8] c" -e \00"
@.str.4 = [1 x i8] zeroinitializer
@.str.5 = [6 x i8] c"xterm\00"
@.str.6 = [11 x i8] c"terminator\00"
@.str.7 = [5 x i8] c" -x \00"
@.str.8 = [11 x i8] c"lxterminal\00"
@.str.9 = [14 x i8] c"mate-terminal\00"
@.str.10 = [8 x i8] c"konsole\00"
@.str.11 = [5 x i8] c"rxvt\00"
@.str.12 = [6 x i8] c"urxvt\00"
@.str.13 = [6 x i8] c"mrxvt\00"
@.str.14 = [8 x i8] c"evilvte\00"
@.str.15 = [7 x i8] c"termit\00"
@.str.16 = [6 x i8] c"kterm\00"
@.str.17 = [8 x i8] c"roxterm\00"
@.str.18 = [7 x i8] c"lxterm\00"
@.str.19 = [15 x i8] c"gnome-terminal\00"
@.str.20 = [23 x i8] c" --disable-factory -x \00"
@.str.21 = [15 x i8] c"xfce4-terminal\00"
@.str.22 = [4 x i8] c"xvt\00"
@.str.23 = [6 x i8] c"pterm\00"
@.str.24 = [20 x i8] c"x-terminal-emulator\00"
@.str.25 = [6 x i8] c"$TERM\00"
define i8* @terminalName() {
%1 = alloca i8*
%2 = alloca [64 x i8]
%3 = bitcast [64 x i8]* %2 to i8*
%4 = bitcast i8* %3 to [64 x i8]*
%5 = getelementptr inbounds [64 x i8], [64 x i8]* %4, i32 0, i32 0
store i8 42, i8* %5
%6 = load i8, i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0)
%7 = sext i8 %6 to i32
%8 = icmp eq i32 %7, 42
br i1 %8, label %9, label %244
9: ; preds = %0
%10 = call i64 @detectPresence(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str, i64 0, i64 0))
%11 = icmp ne i64 %10, 0
br i1 %11, label %12, label %15
12: ; preds = %9
%13 = getelementptr inbounds [64 x i8], [64 x i8]* %2, i64 0, i64 0
%14 = call i64 @strcpy(i8* %13, i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.1, i64 0, i64 0))
br label %16
15: ; preds = %9
store i8* null, i8** %1
br label %249
16: ; preds = %12
%17 = call i64 (...) @isDarwin()
%18 = icmp ne i64 %17, 0
br i1 %18, label %19, label %32
19: ; preds = %16
%20 = call i64 @strcpy(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0), i8* getelementptr inbounds ([19 x i8], [19 x i8]* @.str.2, i64 0, i64 0))
%21 = icmp ne i64 %20, 0
br i1 %21, label %22, label %29
22: ; preds = %19
%23 = call i64 @detectPresence(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0))
%24 = icmp ne i64 %23, 0
br i1 %24, label %25, label %29
25: ; preds = %22
%26 = call i32 @strcat(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0), i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.3, i64 0, i64 0))
%27 = getelementptr inbounds [64 x i8], [64 x i8]* %2, i64 0, i64 0
%28 = call i32 @strcat(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0), i8* %27)
br label %31
29: ; preds = %22, %19
%30 = call i64 @strcpy(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0), i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.4, i64 0, i64 0))
br label %31
31: ; preds = %29, %25
br label %243
32: ; preds = %16
%33 = call i64 @strcpy(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.5, i64 0, i64 0))
%34 = icmp ne i64 %33, 0
br i1 %34, label %35, label %42
35: ; preds = %32
%36 = call i64 @detectPresence(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0))
%37 = icmp ne i64 %36, 0
br i1 %37, label %38, label %42
38: ; preds = %35
%39 = call i32 @strcat(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0), i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.3, i64 0, i64 0))
%40 = getelementptr inbounds [64 x i8], [64 x i8]* %2, i64 0, i64 0
%41 = call i32 @strcat(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0), i8* %40)
br label %242
42: ; preds = %35, %32
%43 = call i64 @strcpy(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.6, i64 0, i64 0))
%44 = icmp ne i64 %43, 0
br i1 %44, label %45, label %52
45: ; preds = %42
%46 = call i64 @detectPresence(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0))
%47 = icmp ne i64 %46, 0
br i1 %47, label %48, label %52
48: ; preds = %45
%49 = call i32 @strcat(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0), i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.7, i64 0, i64 0))
%50 = getelementptr inbounds [64 x i8], [64 x i8]* %2, i64 0, i64 0
%51 = call i32 @strcat(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0), i8* %50)
br label %241
52: ; preds = %45, %42
%53 = call i64 @strcpy(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.8, i64 0, i64 0))
%54 = icmp ne i64 %53, 0
br i1 %54, label %55, label %62
55: ; preds = %52
%56 = call i64 @detectPresence(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0))
%57 = icmp ne i64 %56, 0
br i1 %57, label %58, label %62
58: ; preds = %55
%59 = call i32 @strcat(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0), i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.3, i64 0, i64 0))
%60 = getelementptr inbounds [64 x i8], [64 x i8]* %2, i64 0, i64 0
%61 = call i32 @strcat(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0), i8* %60)
br label %240
62: ; preds = %55, %52
%63 = call i64 @strcpy(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0), i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.9, i64 0, i64 0))
%64 = icmp ne i64 %63, 0
br i1 %64, label %65, label %72
65: ; preds = %62
%66 = call i64 @detectPresence(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0))
%67 = icmp ne i64 %66, 0
br i1 %67, label %68, label %72
68: ; preds = %65
%69 = call i32 @strcat(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0), i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.7, i64 0, i64 0))
%70 = getelementptr inbounds [64 x i8], [64 x i8]* %2, i64 0, i64 0
%71 = call i32 @strcat(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0), i8* %70)
br label %239
72: ; preds = %65, %62
%73 = call i64 @strcpy(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.10, i64 0, i64 0))
%74 = icmp ne i64 %73, 0
br i1 %74, label %75, label %82
75: ; preds = %72
%76 = call i64 @detectPresence(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0))
%77 = icmp ne i64 %76, 0
br i1 %77, label %78, label %82
78: ; preds = %75
%79 = call i32 @strcat(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0), i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.3, i64 0, i64 0))
%80 = getelementptr inbounds [64 x i8], [64 x i8]* %2, i64 0, i64 0
%81 = call i32 @strcat(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0), i8* %80)
br label %238
82: ; preds = %75, %72
%83 = call i64 @strcpy(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0), i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.11, i64 0, i64 0))
%84 = icmp ne i64 %83, 0
br i1 %84, label %85, label %92
85: ; preds = %82
%86 = call i64 @detectPresence(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0))
%87 = icmp ne i64 %86, 0
br i1 %87, label %88, label %92
88: ; preds = %85
%89 = call i32 @strcat(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0), i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.3, i64 0, i64 0))
%90 = getelementptr inbounds [64 x i8], [64 x i8]* %2, i64 0, i64 0
%91 = call i32 @strcat(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0), i8* %90)
br label %237
92: ; preds = %85, %82
%93 = call i64 @strcpy(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.12, i64 0, i64 0))
%94 = icmp ne i64 %93, 0
br i1 %94, label %95, label %102
95: ; preds = %92
%96 = call i64 @detectPresence(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0))
%97 = icmp ne i64 %96, 0
br i1 %97, label %98, label %102
98: ; preds = %95
%99 = call i32 @strcat(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0), i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.3, i64 0, i64 0))
%100 = getelementptr inbounds [64 x i8], [64 x i8]* %2, i64 0, i64 0
%101 = call i32 @strcat(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0), i8* %100)
br label %236
102: ; preds = %95, %92
%103 = call i64 @strcpy(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.13, i64 0, i64 0))
%104 = icmp ne i64 %103, 0
br i1 %104, label %105, label %112
105: ; preds = %102
%106 = call i64 @detectPresence(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0))
%107 = icmp ne i64 %106, 0
br i1 %107, label %108, label %112
108: ; preds = %105
%109 = call i32 @strcat(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0), i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.3, i64 0, i64 0))
%110 = getelementptr inbounds [64 x i8], [64 x i8]* %2, i64 0, i64 0
%111 = call i32 @strcat(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0), i8* %110)
br label %235
112: ; preds = %105, %102
%113 = call i64 @strcpy(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.14, i64 0, i64 0))
%114 = icmp ne i64 %113, 0
br i1 %114, label %115, label %122
115: ; preds = %112
%116 = call i64 @detectPresence(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0))
%117 = icmp ne i64 %116, 0
br i1 %117, label %118, label %122
118: ; preds = %115
%119 = call i32 @strcat(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0), i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.3, i64 0, i64 0))
%120 = getelementptr inbounds [64 x i8], [64 x i8]* %2, i64 0, i64 0
%121 = call i32 @strcat(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0), i8* %120)
br label %234
122: ; preds = %115, %112
%123 = call i64 @strcpy(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.15, i64 0, i64 0))
%124 = icmp ne i64 %123, 0
br i1 %124, label %125, label %132
125: ; preds = %122
%126 = call i64 @detectPresence(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0))
%127 = icmp ne i64 %126, 0
br i1 %127, label %128, label %132
128: ; preds = %125
%129 = call i32 @strcat(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0), i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.3, i64 0, i64 0))
%130 = getelementptr inbounds [64 x i8], [64 x i8]* %2, i64 0, i64 0
%131 = call i32 @strcat(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0), i8* %130)
br label %233
132: ; preds = %125, %122
%133 = call i64 @strcpy(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.16, i64 0, i64 0))
%134 = icmp ne i64 %133, 0
br i1 %134, label %135, label %142
135: ; preds = %132
%136 = call i64 @detectPresence(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0))
%137 = icmp ne i64 %136, 0
br i1 %137, label %138, label %142
138: ; preds = %135
%139 = call i32 @strcat(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0), i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.3, i64 0, i64 0))
%140 = getelementptr inbounds [64 x i8], [64 x i8]* %2, i64 0, i64 0
%141 = call i32 @strcat(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0), i8* %140)
br label %232
142: ; preds = %135, %132
%143 = call i64 @strcpy(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.17, i64 0, i64 0))
%144 = icmp ne i64 %143, 0
br i1 %144, label %145, label %152
145: ; preds = %142
%146 = call i64 @detectPresence(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0))
%147 = icmp ne i64 %146, 0
br i1 %147, label %148, label %152
148: ; preds = %145
%149 = call i32 @strcat(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0), i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.3, i64 0, i64 0))
%150 = getelementptr inbounds [64 x i8], [64 x i8]* %2, i64 0, i64 0
%151 = call i32 @strcat(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0), i8* %150)
br label %231
152: ; preds = %145, %142
%153 = call i64 @strcpy(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.18, i64 0, i64 0))
%154 = icmp ne i64 %153, 0
br i1 %154, label %155, label %162
155: ; preds = %152
%156 = call i64 @detectPresence(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0))
%157 = icmp ne i64 %156, 0
br i1 %157, label %158, label %162
158: ; preds = %155
%159 = call i32 @strcat(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0), i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.3, i64 0, i64 0))
%160 = getelementptr inbounds [64 x i8], [64 x i8]* %2, i64 0, i64 0
%161 = call i32 @strcat(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0), i8* %160)
br label %230
162: ; preds = %155, %152
%163 = call i64 @strcpy(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0), i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.19, i64 0, i64 0))
%164 = icmp ne i64 %163, 0
br i1 %164, label %165, label %172
165: ; preds = %162
%166 = call i64 @detectPresence(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0))
%167 = icmp ne i64 %166, 0
br i1 %167, label %168, label %172
168: ; preds = %165
%169 = call i32 @strcat(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0), i8* getelementptr inbounds ([23 x i8], [23 x i8]* @.str.20, i64 0, i64 0))
%170 = getelementptr inbounds [64 x i8], [64 x i8]* %2, i64 0, i64 0
%171 = call i32 @strcat(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0), i8* %170)
br label %229
172: ; preds = %165, %162
%173 = call i64 @strcpy(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0), i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.21, i64 0, i64 0))
%174 = icmp ne i64 %173, 0
br i1 %174, label %175, label %182
175: ; preds = %172
%176 = call i64 @detectPresence(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0))
%177 = icmp ne i64 %176, 0
br i1 %177, label %178, label %182
178: ; preds = %175
%179 = call i32 @strcat(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0), i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.7, i64 0, i64 0))
%180 = getelementptr inbounds [64 x i8], [64 x i8]* %2, i64 0, i64 0
%181 = call i32 @strcat(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0), i8* %180)
br label %228
182: ; preds = %175, %172
%183 = call i64 @strcpy(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.22, i64 0, i64 0))
%184 = icmp ne i64 %183, 0
br i1 %184, label %185, label %192
185: ; preds = %182
%186 = call i64 @detectPresence(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0))
%187 = icmp ne i64 %186, 0
br i1 %187, label %188, label %192
188: ; preds = %185
%189 = call i32 @strcat(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0), i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.3, i64 0, i64 0))
%190 = getelementptr inbounds [64 x i8], [64 x i8]* %2, i64 0, i64 0
%191 = call i32 @strcat(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0), i8* %190)
br label %227
192: ; preds = %185, %182
%193 = call i64 @strcpy(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.23, i64 0, i64 0))
%194 = icmp ne i64 %193, 0
br i1 %194, label %195, label %202
195: ; preds = %192
%196 = call i64 @detectPresence(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0))
%197 = icmp ne i64 %196, 0
br i1 %197, label %198, label %202
198: ; preds = %195
%199 = call i32 @strcat(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0), i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.3, i64 0, i64 0))
%200 = getelementptr inbounds [64 x i8], [64 x i8]* %2, i64 0, i64 0
%201 = call i32 @strcat(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0), i8* %200)
br label %226
202: ; preds = %195, %192
%203 = call i64 @strcpy(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0), i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str.24, i64 0, i64 0))
%204 = icmp ne i64 %203, 0
br i1 %204, label %205, label %212
205: ; preds = %202
%206 = call i64 @detectPresence(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0))
%207 = icmp ne i64 %206, 0
br i1 %207, label %208, label %212
208: ; preds = %205
%209 = call i32 @strcat(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0), i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.3, i64 0, i64 0))
%210 = getelementptr inbounds [64 x i8], [64 x i8]* %2, i64 0, i64 0
%211 = call i32 @strcat(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0), i8* %210)
br label %225
212: ; preds = %205, %202
%213 = call i64 @strcpy(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.25, i64 0, i64 0))
%214 = icmp ne i64 %213, 0
br i1 %214, label %215, label %222
215: ; preds = %212
%216 = call i64 @detectPresence(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0))
%217 = icmp ne i64 %216, 0
br i1 %217, label %218, label %222
218: ; preds = %215
%219 = call i32 @strcat(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0), i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.3, i64 0, i64 0))
%220 = getelementptr inbounds [64 x i8], [64 x i8]* %2, i64 0, i64 0
%221 = call i32 @strcat(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0), i8* %220)
br label %224
222: ; preds = %215, %212
%223 = call i64 @strcpy(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0), i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.4, i64 0, i64 0))
br label %224
224: ; preds = %222, %218
br label %225
225: ; preds = %224, %208
br label %226
226: ; preds = %225, %198
br label %227
227: ; preds = %226, %188
br label %228
228: ; preds = %227, %178
br label %229
229: ; preds = %228, %168
br label %230
230: ; preds = %229, %158
br label %231
231: ; preds = %230, %148
br label %232
232: ; preds = %231, %138
br label %233
233: ; preds = %232, %128
br label %234
234: ; preds = %233, %118
br label %235
235: ; preds = %234, %108
br label %236
236: ; preds = %235, %98
br label %237
237: ; preds = %236, %88
br label %238
238: ; preds = %237, %78
br label %239
239: ; preds = %238, %68
br label %240
240: ; preds = %239, %58
br label %241
241: ; preds = %240, %48
br label %242
242: ; preds = %241, %38
br label %243
243: ; preds = %242, %31
br label %244
244: ; preds = %243, %0
%245 = call i64 @strlen(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0))
%246 = icmp ne i64 %245, 0
br i1 %246, label %247, label %248
247: ; preds = %244
store i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0), i8** %1
br label %249
248: ; preds = %244
store i8* null, i8** %1
br label %249
249: ; preds = %248, %247, %15
%250 = load i8*, i8** %1
ret i8* %250
}

LLVM IR (-O2):
@terminalName.lTerminalName = internal global [64 x i8] c"*\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00"
@.str = [5 x i8] c"bash\00"
@.str.1 = [9 x i8] c"bash -c \00"
@.str.2 = [19 x i8] c"/opt/X11/bin/xterm\00"
@.str.3 = [5 x i8] c" -e \00"
@.str.4 = [1 x i8] zeroinitializer
@.str.5 = [6 x i8] c"xterm\00"
@.str.6 = [11 x i8] c"terminator\00"
@.str.7 = [5 x i8] c" -x \00"
@.str.8 = [11 x i8] c"lxterminal\00"
@.str.9 = [14 x i8] c"mate-terminal\00"
@.str.10 = [8 x i8] c"konsole\00"
@.str.11 = [5 x i8] c"rxvt\00"
@.str.12 = [6 x i8] c"urxvt\00"
@.str.13 = [6 x i8] c"mrxvt\00"
@.str.14 = [8 x i8] c"evilvte\00"
@.str.15 = [7 x i8] c"termit\00"
@.str.16 = [6 x i8] c"kterm\00"
@.str.17 = [8 x i8] c"roxterm\00"
@.str.18 = [7 x i8] c"lxterm\00"
@.str.19 = [15 x i8] c"gnome-terminal\00"
@.str.20 = [23 x i8] c" --disable-factory -x \00"
@.str.21 = [15 x i8] c"xfce4-terminal\00"
@.str.22 = [4 x i8] c"xvt\00"
@.str.23 = [6 x i8] c"pterm\00"
@.str.24 = [20 x i8] c"x-terminal-emulator\00"
@.str.25 = [6 x i8] c"$TERM\00"
define i8* @terminalName() {
%1 = alloca [64 x i8]
%2 = getelementptr inbounds [64 x i8], [64 x i8]* %1, i64 0, i64 0
store i8 42, i8* %2
%3 = load i8, i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0)
%4 = icmp eq i8 %3, 42
br i1 %4, label %5, label %196
5: ; preds = %0
%6 = tail call i64 @detectPresence(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str, i64 0, i64 0))
%7 = icmp eq i64 %6, 0
br i1 %7, label %200, label %8
8: ; preds = %5
%9 = call i64 @strcpy(i8* %2, i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.1, i64 0, i64 0))
%10 = call i64 (...) @isDarwin()
%11 = icmp eq i64 %10, 0
br i1 %11, label %23, label %12
12: ; preds = %8
%13 = call i64 @strcpy(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0), i8* getelementptr inbounds ([19 x i8], [19 x i8]* @.str.2, i64 0, i64 0))
%14 = icmp eq i64 %13, 0
br i1 %14, label %21, label %15
15: ; preds = %12
%16 = call i64 @detectPresence(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0))
%17 = icmp eq i64 %16, 0
br i1 %17, label %21, label %18
18: ; preds = %15
%19 = call i32 @strcat(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0), i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.3, i64 0, i64 0))
%20 = call i32 @strcat(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0), i8* %2)
br label %196
21: ; preds = %15, %12
%22 = call i64 @strcpy(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0), i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.4, i64 0, i64 0))
br label %196
23: ; preds = %8
%24 = call i64 @strcpy(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.5, i64 0, i64 0))
%25 = icmp eq i64 %24, 0
br i1 %25, label %32, label %26
26: ; preds = %23
%27 = call i64 @detectPresence(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0))
%28 = icmp eq i64 %27, 0
br i1 %28, label %32, label %29
29: ; preds = %26
%30 = call i32 @strcat(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0), i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.3, i64 0, i64 0))
%31 = call i32 @strcat(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0), i8* %2)
br label %196
32: ; preds = %26, %23
%33 = call i64 @strcpy(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.6, i64 0, i64 0))
%34 = icmp eq i64 %33, 0
br i1 %34, label %41, label %35
35: ; preds = %32
%36 = call i64 @detectPresence(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0))
%37 = icmp eq i64 %36, 0
br i1 %37, label %41, label %38
38: ; preds = %35
%39 = call i32 @strcat(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0), i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.7, i64 0, i64 0))
%40 = call i32 @strcat(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0), i8* %2)
br label %196
41: ; preds = %35, %32
%42 = call i64 @strcpy(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.8, i64 0, i64 0))
%43 = icmp eq i64 %42, 0
br i1 %43, label %50, label %44
44: ; preds = %41
%45 = call i64 @detectPresence(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0))
%46 = icmp eq i64 %45, 0
br i1 %46, label %50, label %47
47: ; preds = %44
%48 = call i32 @strcat(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0), i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.3, i64 0, i64 0))
%49 = call i32 @strcat(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0), i8* %2)
br label %196
50: ; preds = %44, %41
%51 = call i64 @strcpy(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0), i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.9, i64 0, i64 0))
%52 = icmp eq i64 %51, 0
br i1 %52, label %59, label %53
53: ; preds = %50
%54 = call i64 @detectPresence(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0))
%55 = icmp eq i64 %54, 0
br i1 %55, label %59, label %56
56: ; preds = %53
%57 = call i32 @strcat(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0), i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.7, i64 0, i64 0))
%58 = call i32 @strcat(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0), i8* %2)
br label %196
59: ; preds = %53, %50
%60 = call i64 @strcpy(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.10, i64 0, i64 0))
%61 = icmp eq i64 %60, 0
br i1 %61, label %68, label %62
62: ; preds = %59
%63 = call i64 @detectPresence(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0))
%64 = icmp eq i64 %63, 0
br i1 %64, label %68, label %65
65: ; preds = %62
%66 = call i32 @strcat(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0), i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.3, i64 0, i64 0))
%67 = call i32 @strcat(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0), i8* %2)
br label %196
68: ; preds = %62, %59
%69 = call i64 @strcpy(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0), i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.11, i64 0, i64 0))
%70 = icmp eq i64 %69, 0
br i1 %70, label %77, label %71
71: ; preds = %68
%72 = call i64 @detectPresence(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0))
%73 = icmp eq i64 %72, 0
br i1 %73, label %77, label %74
74: ; preds = %71
%75 = call i32 @strcat(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0), i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.3, i64 0, i64 0))
%76 = call i32 @strcat(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0), i8* %2)
br label %196
77: ; preds = %71, %68
%78 = call i64 @strcpy(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.12, i64 0, i64 0))
%79 = icmp eq i64 %78, 0
br i1 %79, label %86, label %80
80: ; preds = %77
%81 = call i64 @detectPresence(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0))
%82 = icmp eq i64 %81, 0
br i1 %82, label %86, label %83
83: ; preds = %80
%84 = call i32 @strcat(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0), i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.3, i64 0, i64 0))
%85 = call i32 @strcat(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0), i8* %2)
br label %196
86: ; preds = %80, %77
%87 = call i64 @strcpy(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.13, i64 0, i64 0))
%88 = icmp eq i64 %87, 0
br i1 %88, label %95, label %89
89: ; preds = %86
%90 = call i64 @detectPresence(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0))
%91 = icmp eq i64 %90, 0
br i1 %91, label %95, label %92
92: ; preds = %89
%93 = call i32 @strcat(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0), i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.3, i64 0, i64 0))
%94 = call i32 @strcat(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0), i8* %2)
br label %196
95: ; preds = %89, %86
%96 = call i64 @strcpy(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.14, i64 0, i64 0))
%97 = icmp eq i64 %96, 0
br i1 %97, label %104, label %98
98: ; preds = %95
%99 = call i64 @detectPresence(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0))
%100 = icmp eq i64 %99, 0
br i1 %100, label %104, label %101
101: ; preds = %98
%102 = call i32 @strcat(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0), i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.3, i64 0, i64 0))
%103 = call i32 @strcat(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0), i8* %2)
br label %196
104: ; preds = %98, %95
%105 = call i64 @strcpy(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.15, i64 0, i64 0))
%106 = icmp eq i64 %105, 0
br i1 %106, label %113, label %107
107: ; preds = %104
%108 = call i64 @detectPresence(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0))
%109 = icmp eq i64 %108, 0
br i1 %109, label %113, label %110
110: ; preds = %107
%111 = call i32 @strcat(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0), i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.3, i64 0, i64 0))
%112 = call i32 @strcat(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0), i8* %2)
br label %196
113: ; preds = %107, %104
%114 = call i64 @strcpy(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.16, i64 0, i64 0))
%115 = icmp eq i64 %114, 0
br i1 %115, label %122, label %116
116: ; preds = %113
%117 = call i64 @detectPresence(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0))
%118 = icmp eq i64 %117, 0
br i1 %118, label %122, label %119
119: ; preds = %116
%120 = call i32 @strcat(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0), i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.3, i64 0, i64 0))
%121 = call i32 @strcat(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0), i8* %2)
br label %196
122: ; preds = %116, %113
%123 = call i64 @strcpy(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.17, i64 0, i64 0))
%124 = icmp eq i64 %123, 0
br i1 %124, label %131, label %125
125: ; preds = %122
%126 = call i64 @detectPresence(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0))
%127 = icmp eq i64 %126, 0
br i1 %127, label %131, label %128
128: ; preds = %125
%129 = call i32 @strcat(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0), i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.3, i64 0, i64 0))
%130 = call i32 @strcat(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0), i8* %2)
br label %196
131: ; preds = %125, %122
%132 = call i64 @strcpy(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.18, i64 0, i64 0))
%133 = icmp eq i64 %132, 0
br i1 %133, label %140, label %134
134: ; preds = %131
%135 = call i64 @detectPresence(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0))
%136 = icmp eq i64 %135, 0
br i1 %136, label %140, label %137
137: ; preds = %134
%138 = call i32 @strcat(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0), i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.3, i64 0, i64 0))
%139 = call i32 @strcat(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0), i8* %2)
br label %196
140: ; preds = %134, %131
%141 = call i64 @strcpy(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0), i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.19, i64 0, i64 0))
%142 = icmp eq i64 %141, 0
br i1 %142, label %149, label %143
143: ; preds = %140
%144 = call i64 @detectPresence(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0))
%145 = icmp eq i64 %144, 0
br i1 %145, label %149, label %146
146: ; preds = %143
%147 = call i32 @strcat(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0), i8* getelementptr inbounds ([23 x i8], [23 x i8]* @.str.20, i64 0, i64 0))
%148 = call i32 @strcat(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0), i8* %2)
br label %196
149: ; preds = %143, %140
%150 = call i64 @strcpy(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0), i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.21, i64 0, i64 0))
%151 = icmp eq i64 %150, 0
br i1 %151, label %158, label %152
152: ; preds = %149
%153 = call i64 @detectPresence(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0))
%154 = icmp eq i64 %153, 0
br i1 %154, label %158, label %155
155: ; preds = %152
%156 = call i32 @strcat(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0), i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.7, i64 0, i64 0))
%157 = call i32 @strcat(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0), i8* %2)
br label %196
158: ; preds = %152, %149
%159 = call i64 @strcpy(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.22, i64 0, i64 0))
%160 = icmp eq i64 %159, 0
br i1 %160, label %167, label %161
161: ; preds = %158
%162 = call i64 @detectPresence(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0))
%163 = icmp eq i64 %162, 0
br i1 %163, label %167, label %164
164: ; preds = %161
%165 = call i32 @strcat(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0), i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.3, i64 0, i64 0))
%166 = call i32 @strcat(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0), i8* %2)
br label %196
167: ; preds = %161, %158
%168 = call i64 @strcpy(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.23, i64 0, i64 0))
%169 = icmp eq i64 %168, 0
br i1 %169, label %176, label %170
170: ; preds = %167
%171 = call i64 @detectPresence(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0))
%172 = icmp eq i64 %171, 0
br i1 %172, label %176, label %173
173: ; preds = %170
%174 = call i32 @strcat(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0), i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.3, i64 0, i64 0))
%175 = call i32 @strcat(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0), i8* %2)
br label %196
176: ; preds = %170, %167
%177 = call i64 @strcpy(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0), i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str.24, i64 0, i64 0))
%178 = icmp eq i64 %177, 0
br i1 %178, label %185, label %179
179: ; preds = %176
%180 = call i64 @detectPresence(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0))
%181 = icmp eq i64 %180, 0
br i1 %181, label %185, label %182
182: ; preds = %179
%183 = call i32 @strcat(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0), i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.3, i64 0, i64 0))
%184 = call i32 @strcat(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0), i8* %2)
br label %196
185: ; preds = %179, %176
%186 = call i64 @strcpy(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.25, i64 0, i64 0))
%187 = icmp eq i64 %186, 0
br i1 %187, label %194, label %188
188: ; preds = %185
%189 = call i64 @detectPresence(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0))
%190 = icmp eq i64 %189, 0
br i1 %190, label %194, label %191
191: ; preds = %188
%192 = call i32 @strcat(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0), i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.3, i64 0, i64 0))
%193 = call i32 @strcat(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0), i8* %2)
br label %196
194: ; preds = %188, %185
%195 = call i64 @strcpy(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0), i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.4, i64 0, i64 0))
br label %196
196: ; preds = %21, %18, %38, %56, %74, %92, %110, %128, %146, %164, %182, %194, %191, %173, %155, %137, %119, %101, %83, %65, %47, %29, %0
%197 = load i8, i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0)
%198 = icmp eq i8 %197, 0
%199 = select i1 %198, i8* null, i8* getelementptr inbounds ([64 x i8], [64 x i8]* @terminalName.lTerminalName, i64 0, i64 0)
br label %200
200: ; preds = %196, %5
%201 = phi i8* [ null, %5 ], [ %199, %196 ]
ret i8* %201
}