#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 */
typedef int ssize_t;
typedef int /*<<< orphan*/ msg;
typedef int /*<<< orphan*/ command;
typedef int /*<<< orphan*/ buffer;
typedef int /*<<< orphan*/ FILE;

/* Variables and functions */
int O_CLOEXEC;
int O_RDONLY;
int /*<<< orphan*/ SEEK_SET;
int /*<<< orphan*/ close(int);
int /*<<< orphan*/ fclose(int /*<<< orphan*/ *);
int /*<<< orphan*/ *fopen(char *, char *);
int /*<<< orphan*/ fprintf(int /*<<< orphan*/, char *, ...);
int fread(char *, int, int, int /*<<< orphan*/ *);
int /*<<< orphan*/ fseek(int /*<<< orphan*/ *, unsigned long long,
                         int /*<<< orphan*/);
int /*<<< orphan*/ isdigit(char);
int /*<<< orphan*/ memcpy(char *, char *, int);
int /*<<< orphan*/ memset(char *, int /*<<< orphan*/, int);
int /*<<< orphan*/ my_is_alnum_punct(char);
int open(char *, int);
int /*<<< orphan*/ pclose(int /*<<< orphan*/ *);
int /*<<< orphan*/ *popen(char *, char *);
int /*<<< orphan*/ printf(char *, char *);
int read(int, unsigned char *, int);
int /*<<< orphan*/ snprintf(char *, int, char *, char *);
int /*<<< orphan*/ stderr;
int /*<<< orphan*/ write(int, char *, int);
int main(int argc, char *argv[]) {
  FILE *fp;
  char buffer[4096 + 80];
  char command[512] = "";
  int found = 0;
  if (argc != 2) {
    char msg[] = "usage: get_kernel_version <kernel_image>\n";
    write(2, msg, sizeof(msg));
    return 1;
  }
  {
    unsigned char buf[6];
    int fd = open(argv[1], O_RDONLY | O_CLOEXEC);
    if (fd == -1) {
      fprintf(stderr, "Cannot open kernel image \"%s\"\n", argv[1]);
      return 1;
    }
    if (read(fd, buf, 6) != 6) {
      fprintf(stderr, "Short read\n");
      close(fd);
      return 1;
    }
    if ((buf[0] == 0xfd) && (buf[1] == '7') && (buf[2] == 'z') &&
        (buf[3] == 'X') && (buf[4] == 'Z') && (buf[5] == 0)) {
      snprintf(command, sizeof(command), "/usr/bin/xz -dc %s 2>/dev/null",
               argv[1]);
    }
    if (buf[0] == 037 && (buf[1] == 0213 || buf[1] == 0236)) {
      snprintf(command, sizeof(command), "/bin/gzip -dc %s 2>/dev/null",
               argv[1]);
    }
    if (*command) {
      fp = popen(command, "re");
      if (fp == NULL) {
        fprintf(stderr, "%s: faild\n", command);
        close(fd);
        return 1;
      }
    } else {
      fp = fopen(argv[1], "re");
    }
    close(fd);
  }
  memset(buffer, 0, sizeof(buffer));
  while (!found) {
    ssize_t in;
    int i;
    in = fread(&buffer[80], 1, sizeof(buffer) - 80, fp);
    if (in <= 0)
      break;
    for (i = 0; i < in; i++)
      if (buffer[i] == 'L' && buffer[i + 1] == 'i' && buffer[i + 2] == 'n' &&
          buffer[i + 3] == 'u' && buffer[i + 4] == 'x' &&
          buffer[i + 5] == ' ' && buffer[i + 6] == 'v' &&
          buffer[i + 7] == 'e' && buffer[i + 8] == 'r' &&
          buffer[i + 9] == 's' && buffer[i + 10] == 'i' &&
          buffer[i + 11] == 'o' && buffer[i + 12] == 'n' &&
          buffer[i + 13] == ' ' && buffer[i + 14] != 0 && buffer[i + 17] != 0) {
        int j = i + 14;
        int number_dots = 0;
        for (j = j + 1; buffer[j] != ' '; j++) {
          char c = buffer[j];
          if (c == '.') {
            number_dots++;
            continue;
          }
          if (((number_dots < 2) && !isdigit(c)) ||
              ((number_dots >= 2) && !my_is_alnum_punct(c))) {
            fprintf(stderr, "invalid char %c\n", c);
            break;
          }
        }
        found = 1;
        break;
      }
    if (found) {
      int j;
      for (j = i + 14; buffer[j] != ' '; j++)
        ;
      buffer[j] = '\0';
      printf("%s\n", &buffer[i + 14]);
    } else {
      if (in < (ssize_t)(sizeof(buffer) - 80))
        break;
      memcpy(&buffer[0], &buffer[sizeof(buffer) - 80], 80);
      memset(&buffer[80], 0, sizeof(buffer) - 80);
    }
  }
  if (!found) {
    if (!fseek(fp, 0x202, SEEK_SET) && fread(buffer, 1, 4, fp) == 4 &&
        buffer[0] == 0x48 && buffer[1] == 0x64 && buffer[2] == 0x72 &&
        buffer[3] == 0x53 && !fseek(fp, 0x20e, SEEK_SET) &&
        fread(buffer, 1, 2, fp) == 2) {
      unsigned ofs = 0x200 + ((unsigned char *)buffer)[0] +
                     (((unsigned char *)buffer)[1] << 8);
      if (!fseek(fp, ofs, SEEK_SET) && fread(buffer, 1, 80, fp) == 80) {
        char *s = buffer;
        for (s[80] = 0; *s; s++)
          if (*s == ' ') {
            *s = 0;
            break;
          }
        if (*buffer) {
          found = 1;
          printf("%s\n", buffer);
        }
      }
    }
  }
  if (!found) {
    if (!fseek(fp, 0x10008, SEEK_SET) && fread(buffer, 1, 6, fp) == 6 &&
        buffer[0] == 'S' && buffer[1] == '3' && buffer[2] == '9' &&
        buffer[3] == '0' && buffer[4] == 'E' && buffer[5] == 'P' &&
        !fseek(fp, 0x10428, SEEK_SET) && fread(buffer, 1, 8, fp) == 8) {
      unsigned long long version_string_offset =
          ((unsigned char *)buffer)[7] + (((unsigned char *)buffer)[6] << 8) +
          (((unsigned char *)buffer)[5] << 16) +
          (((unsigned char *)buffer)[4] << 24) +
          ((unsigned long long)((unsigned char *)buffer)[3] << 32) +
          ((unsigned long long)((unsigned char *)buffer)[2] << 40) +
          ((unsigned long long)((unsigned char *)buffer)[1] << 48) +
          ((unsigned long long)((unsigned char *)buffer)[0] << 56);
      if (!fseek(fp, version_string_offset, SEEK_SET) &&
          fread(buffer, 1, 80, fp) == 80) {
        char *s = buffer;
        for (s[80] = 0; *s; s++)
          if (*s == ' ') {
            *s = 0;
            break;
          }
        if (*buffer) {
          found = 1;
          printf("%s\n", buffer);
        }
      }
    }
  }
  if (command[0] != '\0')
    pclose(fp);
  else
    fclose(fp);
  if (found)
    return 0;
  else
    return 1;
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x12e0,%rsp
movl   $0x0,-0x4(%rbp)
mov    %edi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
lea    -0x1270(%rbp),%rdi
xor    %esi,%esi
mov    $0x200,%edx
call   10a0 <memset@plt>
movl   $0x0,-0x1274(%rbp)
cmpl   $0x2,-0x8(%rbp)
je     128a <main+0x7a>
lea    -0x12a0(%rbp),%rdi
lea    0xda2(%rip),%rsi
mov    $0x2a,%edx
call   10e0 <memcpy@plt>
lea    -0x12a0(%rbp),%rsi
mov    $0x2,%edi
mov    $0x2a,%edx
call   1050 <write@plt>
movl   $0x1,-0x4(%rbp)
jmp    1d25 <main+0xb15>
mov    -0x10(%rbp),%rax
mov    0x8(%rax),%rdi
mov    0x2d4f(%rip),%rax
mov    (%rax),%esi
mov    0x2d1e(%rip),%rax
or     (%rax),%esi
call   1110 <open@plt>
mov    %eax,-0x12ac(%rbp)
cmpl   $0xffffffff,-0x12ac(%rbp)
jne    12e7 <main+0xd7>
mov    0x2d15(%rip),%rax
mov    (%rax),%edi
mov    -0x10(%rbp),%rax
mov    0x8(%rax),%rdx
lea    0xd56(%rip),%rsi
mov    $0x0,%al
call   10d0 <fprintf@plt>
movl   $0x1,-0x4(%rbp)
jmp    1d25 <main+0xb15>
mov    -0x12ac(%rbp),%edi
lea    -0x12a6(%rbp),%rsi
mov    $0x6,%edx
call   10c0 <read@plt>
cmp    $0x6,%eax
je     1335 <main+0x125>
mov    0x2cca(%rip),%rax
mov    (%rax),%edi
lea    0xd32(%rip),%rsi
mov    $0x0,%al
call   10d0 <fprintf@plt>
mov    -0x12ac(%rbp),%edi
call   10b0 <close@plt>
movl   $0x1,-0x4(%rbp)
jmp    1d25 <main+0xb15>
movzbl -0x12a6(%rbp),%eax
cmp    $0xfd,%eax
jne    13b7 <main+0x1a7>
movzbl -0x12a5(%rbp),%eax
cmp    $0x37,%eax
jne    13b7 <main+0x1a7>
movzbl -0x12a4(%rbp),%eax
cmp    $0x7a,%eax
jne    13b7 <main+0x1a7>
movzbl -0x12a3(%rbp),%eax
cmp    $0x58,%eax
jne    13b7 <main+0x1a7>
movzbl -0x12a2(%rbp),%eax
cmp    $0x5a,%eax
jne    13b7 <main+0x1a7>
movzbl -0x12a1(%rbp),%eax
cmp    $0x0,%eax
jne    13b7 <main+0x1a7>
lea    -0x1270(%rbp),%rdi
mov    -0x10(%rbp),%rax
mov    0x8(%rax),%rcx
mov    $0x200,%esi
lea    0xca3(%rip),%rdx
call   1090 <snprintf@plt>
movzbl -0x12a6(%rbp),%eax
cmp    $0x1f,%eax
jne    140b <main+0x1fb>
movzbl -0x12a5(%rbp),%eax
cmp    $0x8b,%eax
je     13eb <main+0x1db>
movzbl -0x12a5(%rbp),%eax
cmp    $0x9e,%eax
jne    140b <main+0x1fb>
lea    -0x1270(%rbp),%rdi
mov    -0x10(%rbp),%rax
mov    0x8(%rax),%rcx
mov    $0x200,%esi
lea    0xc6e(%rip),%rdx
call   1090 <snprintf@plt>
cmpb   $0x0,-0x1270(%rbp)
je     1474 <main+0x264>
lea    -0x1270(%rbp),%rdi
lea    0xc6b(%rip),%rsi
call   1120 <popen@plt>
mov    %rax,-0x18(%rbp)
cmpq   $0x0,-0x18(%rbp)
jne    146f <main+0x25f>
mov    0x2b97(%rip),%rax
mov    (%rax),%edi
lea    -0x1270(%rbp),%rdx
lea    0xc43(%rip),%rsi
mov    $0x0,%al
call   10d0 <fprintf@plt>
mov    -0x12ac(%rbp),%edi
call   10b0 <close@plt>
movl   $0x1,-0x4(%rbp)
jmp    1d25 <main+0xb15>
jmp    148c <main+0x27c>
mov    -0x10(%rbp),%rax
mov    0x8(%rax),%rdi
lea    0xc0e(%rip),%rsi
call   1130 <fopen@plt>
mov    %rax,-0x18(%rbp)
mov    -0x12ac(%rbp),%edi
call   10b0 <close@plt>
lea    -0x1070(%rbp),%rdi
xor    %esi,%esi
mov    $0x1050,%edx
call   10a0 <memset@plt>
cmpl   $0x0,-0x1274(%rbp)
setne  %al
xor    $0xff,%al
test   $0x1,%al
jne    14c3 <main+0x2b3>
jmp    18c3 <main+0x6b3>
lea    -0x1070(%rbp),%rdi
add    $0x50,%rdi
mov    -0x18(%rbp),%rcx
mov    $0x1,%esi
mov    $0x1000,%edx
call   1040 <fread@plt>
mov    %eax,-0x12b0(%rbp)
cmpl   $0x0,-0x12b0(%rbp)
jg     14f9 <main+0x2e9>
jmp    18c3 <main+0x6b3>
movl   $0x0,-0x12b4(%rbp)
mov    -0x12b4(%rbp),%eax
cmp    -0x12b0(%rbp),%eax
jge    17f1 <main+0x5e1>
movslq -0x12b4(%rbp),%rax
movsbl -0x1070(%rbp,%rax,1),%eax
ff
cmp    $0x4c,%eax
jne    17d8 <main+0x5c8>
mov    -0x12b4(%rbp),%eax
add    $0x1,%eax
cltq
movsbl -0x1070(%rbp,%rax,1),%eax
ff
cmp    $0x69,%eax
jne    17d8 <main+0x5c8>
mov    -0x12b4(%rbp),%eax
add    $0x2,%eax
cltq
movsbl -0x1070(%rbp,%rax,1),%eax
ff
cmp    $0x6e,%eax
jne    17d8 <main+0x5c8>
mov    -0x12b4(%rbp),%eax
add    $0x3,%eax
cltq
movsbl -0x1070(%rbp,%rax,1),%eax
ff
cmp    $0x75,%eax
jne    17d8 <main+0x5c8>
mov    -0x12b4(%rbp),%eax
add    $0x4,%eax
cltq
movsbl -0x1070(%rbp,%rax,1),%eax
ff
cmp    $0x78,%eax
jne    17d8 <main+0x5c8>
mov    -0x12b4(%rbp),%eax
add    $0x5,%eax
cltq
movsbl -0x1070(%rbp,%rax,1),%eax
ff
cmp    $0x20,%eax
jne    17d8 <main+0x5c8>
mov    -0x12b4(%rbp),%eax
add    $0x6,%eax
cltq
movsbl -0x1070(%rbp,%rax,1),%eax
ff
cmp    $0x76,%eax
jne    17d8 <main+0x5c8>
mov    -0x12b4(%rbp),%eax
add    $0x7,%eax
cltq
movsbl -0x1070(%rbp,%rax,1),%eax
ff
cmp    $0x65,%eax
jne    17d8 <main+0x5c8>
mov    -0x12b4(%rbp),%eax
add    $0x8,%eax
cltq
movsbl -0x1070(%rbp,%rax,1),%eax
ff
cmp    $0x72,%eax
jne    17d8 <main+0x5c8>
mov    -0x12b4(%rbp),%eax
add    $0x9,%eax
cltq
movsbl -0x1070(%rbp,%rax,1),%eax
ff
cmp    $0x73,%eax
jne    17d8 <main+0x5c8>
mov    -0x12b4(%rbp),%eax
add    $0xa,%eax
cltq
movsbl -0x1070(%rbp,%rax,1),%eax
ff
cmp    $0x69,%eax
jne    17d8 <main+0x5c8>
mov    -0x12b4(%rbp),%eax
add    $0xb,%eax
cltq
movsbl -0x1070(%rbp,%rax,1),%eax
ff
cmp    $0x6f,%eax
jne    17d8 <main+0x5c8>
mov    -0x12b4(%rbp),%eax
add    $0xc,%eax
cltq
movsbl -0x1070(%rbp,%rax,1),%eax
ff
cmp    $0x6e,%eax
jne    17d8 <main+0x5c8>
mov    -0x12b4(%rbp),%eax
add    $0xd,%eax
cltq
movsbl -0x1070(%rbp,%rax,1),%eax
ff
cmp    $0x20,%eax
jne    17d8 <main+0x5c8>
mov    -0x12b4(%rbp),%eax
add    $0xe,%eax
cltq
movsbl -0x1070(%rbp,%rax,1),%eax
ff
cmp    $0x0,%eax
je     17d8 <main+0x5c8>
mov    -0x12b4(%rbp),%eax
add    $0x11,%eax
cltq
movsbl -0x1070(%rbp,%rax,1),%eax
ff
cmp    $0x0,%eax
je     17d8 <main+0x5c8>
mov    -0x12b4(%rbp),%eax
add    $0xe,%eax
mov    %eax,-0x12b8(%rbp)
movl   $0x0,-0x12bc(%rbp)
mov    -0x12b8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x12b8(%rbp)
movslq -0x12b8(%rbp),%rax
movsbl -0x1070(%rbp,%rax,1),%eax
ff
cmp    $0x20,%eax
je     17c9 <main+0x5b9>
movslq -0x12b8(%rbp),%rax
mov    -0x1070(%rbp,%rax,1),%al
mov    %al,-0x12bd(%rbp)
movsbl -0x12bd(%rbp),%eax
cmp    $0x2e,%eax
jne    1749 <main+0x539>
mov    -0x12bc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x12bc(%rbp)
jmp    17b5 <main+0x5a5>
cmpl   $0x2,-0x12bc(%rbp)
jge    176b <main+0x55b>
movsbl -0x12bd(%rbp),%edi
call   1030 <isdigit@plt>
cmp    $0x0,%eax
je     178d <main+0x57d>
cmpl   $0x2,-0x12bc(%rbp)
jl     17b0 <main+0x5a0>
movsbl -0x12bd(%rbp),%edi
call   10f0 <my_is_alnum_punct@plt>
cmp    $0x0,%eax
jne    17b0 <main+0x5a0>
mov    0x2844(%rip),%rax
mov    (%rax),%edi
movsbl -0x12bd(%rbp),%edx
lea    0x8fb(%rip),%rsi
mov    $0x0,%al
call   10d0 <fprintf@plt>
jmp    17c9 <main+0x5b9>
jmp    17b5 <main+0x5a5>
mov    -0x12b8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x12b8(%rbp)
jmp    16f9 <main+0x4e9>
movl   $0x1,-0x1274(%rbp)
jmp    17f1 <main+0x5e1>
jmp    17dd <main+0x5cd>
mov    -0x12b4(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x12b4(%rbp)
jmp    1503 <main+0x2f3>
cmpl   $0x0,-0x1274(%rbp)
je     1873 <main+0x663>
mov    -0x12b4(%rbp),%eax
add    $0xe,%eax
mov    %eax,-0x12c4(%rbp)
movslq -0x12c4(%rbp),%rax
movsbl -0x1070(%rbp,%rax,1),%eax
ff
cmp    $0x20,%eax
je     183e <main+0x62e>
jmp    182a <main+0x61a>
mov    -0x12c4(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x12c4(%rbp)
jmp    180d <main+0x5fd>
movslq -0x12c4(%rbp),%rax
movb   $0x0,-0x1070(%rbp,%rax,1)
mov    -0x12b4(%rbp),%eax
add    $0xe,%eax
cltq
lea    -0x1070(%rbp),%rsi
add    %rax,%rsi
lea    0x847(%rip),%rdi
call   1070 <printf@plt>
jmp    18be <main+0x6ae>
cmpl   $0x1000,-0x12b0(%rbp)
jge    1888 <main+0x678>
jmp    18c3 <main+0x6b3>
lea    -0x1070(%rbp),%rdi
lea    -0x1070(%rbp),%rsi
add    $0x1000,%rsi
mov    $0x50,%edx
call   10e0 <memcpy@plt>
lea    -0x1070(%rbp),%rdi
add    $0x50,%rdi
xor    %esi,%esi
mov    $0x1000,%edx
call   10a0 <memset@plt>
jmp    14aa <main+0x29a>
cmpl   $0x0,-0x1274(%rbp)
jne    1a9a <main+0x88a>
mov    -0x18(%rbp),%rdi
mov    0x26f5(%rip),%rax
mov    (%rax),%edx
mov    $0x202,%esi
call   1100 <fseek@plt>
cmp    $0x0,%eax
jne    1a95 <main+0x885>
lea    -0x1070(%rbp),%rdi
mov    -0x18(%rbp),%rcx
mov    $0x1,%esi
mov    $0x4,%edx
call   1040 <fread@plt>
cmp    $0x4,%eax
jne    1a95 <main+0x885>
movsbl -0x1070(%rbp),%eax
cmp    $0x48,%eax
jne    1a95 <main+0x885>
movsbl -0x106f(%rbp),%eax
cmp    $0x64,%eax
jne    1a95 <main+0x885>
movsbl -0x106e(%rbp),%eax
cmp    $0x72,%eax
jne    1a95 <main+0x885>
movsbl -0x106d(%rbp),%eax
cmp    $0x53,%eax
jne    1a95 <main+0x885>
mov    -0x18(%rbp),%rdi
mov    0x2672(%rip),%rax
mov    (%rax),%edx
mov    $0x20e,%esi
call   1100 <fseek@plt>
cmp    $0x0,%eax
jne    1a95 <main+0x885>
lea    -0x1070(%rbp),%rdi
mov    -0x18(%rbp),%rcx
mov    $0x1,%esi
mov    $0x2,%edx
call   1040 <fread@plt>
cmp    $0x2,%eax
jne    1a95 <main+0x885>
movzbl -0x1070(%rbp),%eax
add    $0x200,%eax
movzbl -0x106f(%rbp),%ecx
shl    $0x8,%ecx
add    %ecx,%eax
mov    %eax,-0x12c8(%rbp)
mov    -0x18(%rbp),%rdi
mov    -0x12c8(%rbp),%eax
mov    %eax,%esi
mov    0x2609(%rip),%rax
mov    (%rax),%edx
call   1100 <fseek@plt>
cmp    $0x0,%eax
jne    1a90 <main+0x880>
lea    -0x1070(%rbp),%rdi
mov    -0x18(%rbp),%rcx
mov    $0x1,%esi
mov    $0x50,%edx
call   1040 <fread@plt>
cmp    $0x50,%eax
jne    1a90 <main+0x880>
lea    -0x1070(%rbp),%rax
mov    %rax,-0x12d0(%rbp)
mov    -0x12d0(%rbp),%rax
movb   $0x0,0x50(%rax)
mov    -0x12d0(%rbp),%rax
cmpb   $0x0,(%rax)
je     1a61 <main+0x851>
mov    -0x12d0(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x20,%eax
jne    1a45 <main+0x835>
mov    -0x12d0(%rbp),%rax
movb   $0x0,(%rax)
jmp    1a61 <main+0x851>
jmp    1a4a <main+0x83a>
mov    -0x12d0(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x12d0(%rbp)
jmp    1a13 <main+0x803>
cmpb   $0x0,-0x1070(%rbp)
je     1a8b <main+0x87b>
movl   $0x1,-0x1274(%rbp)
lea    -0x1070(%rbp),%rsi
lea    0x62a(%rip),%rdi
call   1070 <printf@plt>
jmp    1a90 <main+0x880>
jmp    1a95 <main+0x885>
jmp    1a9a <main+0x88a>
cmpl   $0x0,-0x1274(%rbp)
jne    1cde <main+0xace>
mov    -0x18(%rbp),%rdi
mov    0x251e(%rip),%rax
mov    (%rax),%edx
mov    $0x10008,%esi
call   1100 <fseek@plt>
cmp    $0x0,%eax
jne    1cd9 <main+0xac9>
lea    -0x1070(%rbp),%rdi
mov    -0x18(%rbp),%rcx
mov    $0x1,%esi
mov    $0x6,%edx
call   1040 <fread@plt>
cmp    $0x6,%eax
jne    1cd9 <main+0xac9>
movsbl -0x1070(%rbp),%eax
cmp    $0x53,%eax
jne    1cd9 <main+0xac9>
movsbl -0x106f(%rbp),%eax
cmp    $0x33,%eax
jne    1cd9 <main+0xac9>
movsbl -0x106e(%rbp),%eax
cmp    $0x39,%eax
jne    1cd9 <main+0xac9>
movsbl -0x106d(%rbp),%eax
cmp    $0x30,%eax
jne    1cd9 <main+0xac9>
movsbl -0x106c(%rbp),%eax
cmp    $0x45,%eax
jne    1cd9 <main+0xac9>
movsbl -0x106b(%rbp),%eax
cmp    $0x50,%eax
jne    1cd9 <main+0xac9>
mov    -0x18(%rbp),%rdi
mov    0x247b(%rip),%rax
mov    (%rax),%edx
mov    $0x10428,%esi
call   1100 <fseek@plt>
cmp    $0x0,%eax
jne    1cd9 <main+0xac9>
lea    -0x1070(%rbp),%rdi
mov    -0x18(%rbp),%rcx
mov    $0x1,%esi
mov    $0x8,%edx
call   1040 <fread@plt>
cmp    $0x8,%eax
jne    1cd9 <main+0xac9>
movzbl -0x1069(%rbp),%eax
movzbl -0x106a(%rbp),%ecx
shl    $0x8,%ecx
add    %ecx,%eax
movzbl -0x106b(%rbp),%ecx
shl    $0x10,%ecx
add    %ecx,%eax
movzbl -0x106c(%rbp),%ecx
shl    $0x18,%ecx
add    %ecx,%eax
cltq
movzbl -0x106d(%rbp),%ecx
shl    $0x20,%rcx
add    %rcx,%rax
movzbl -0x106e(%rbp),%ecx
shl    $0x28,%rcx
add    %rcx,%rax
movzbl -0x106f(%rbp),%ecx
shl    $0x30,%rcx
add    %rcx,%rax
movzbl -0x1070(%rbp),%ecx
shl    $0x38,%rcx
add    %rcx,%rax
mov    %rax,-0x12d8(%rbp)
mov    -0x18(%rbp),%rdi
mov    -0x12d8(%rbp),%rsi
mov    0x23c5(%rip),%rax
mov    (%rax),%edx
call   1100 <fseek@plt>
cmp    $0x0,%eax
jne    1cd4 <main+0xac4>
lea    -0x1070(%rbp),%rdi
mov    -0x18(%rbp),%rcx
mov    $0x1,%esi
mov    $0x50,%edx
call   1040 <fread@plt>
cmp    $0x50,%eax
jne    1cd4 <main+0xac4>
lea    -0x1070(%rbp),%rax
mov    %rax,-0x12e0(%rbp)
mov    -0x12e0(%rbp),%rax
movb   $0x0,0x50(%rax)
mov    -0x12e0(%rbp),%rax
cmpb   $0x0,(%rax)
je     1ca5 <main+0xa95>
mov    -0x12e0(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x20,%eax
jne    1c89 <main+0xa79>
mov    -0x12e0(%rbp),%rax
movb   $0x0,(%rax)
jmp    1ca5 <main+0xa95>
jmp    1c8e <main+0xa7e>
mov    -0x12e0(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x12e0(%rbp)
jmp    1c57 <main+0xa47>
cmpb   $0x0,-0x1070(%rbp)
je     1ccf <main+0xabf>
movl   $0x1,-0x1274(%rbp)
lea    -0x1070(%rbp),%rsi
lea    0x3e6(%rip),%rdi
call   1070 <printf@plt>
jmp    1cd4 <main+0xac4>
jmp    1cd9 <main+0xac9>
jmp    1cde <main+0xace>
movsbl -0x1270(%rbp),%eax
cmp    $0x0,%eax
je     1cfc <main+0xaec>
mov    -0x18(%rbp),%rdi
call   1080 <pclose@plt>
jmp    1d05 <main+0xaf5>
mov    -0x18(%rbp),%rdi
call   1060 <fclose@plt>
cmpl   $0x0,-0x1274(%rbp)
je     1d1e <main+0xb0e>
movl   $0x0,-0x4(%rbp)
jmp    1d25 <main+0xb15>
movl   $0x1,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x12e0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x1258,%rsp
mov    %rsi,%rbx
mov    %edi,%ebp
mov    %rsp,%rdi
mov    $0x200,%edx
xor    %esi,%esi
call   10a0 <memset@plt>
cmp    $0x2,%ebp
jne    12d2 <main+0xc2>
mov    0x8(%rbx),%rdi
mov    0x2d9f(%rip),%rax
mov    0x2d70(%rip),%rcx
mov    (%rcx),%esi
or     (%rax),%esi
call   1110 <open@plt>
cmp    $0xffffffff,%eax
je     1322 <main+0x112>
mov    %eax,%ebp
lea    0x200(%rsp),%rsi
mov    %eax,%edi
mov    $0x6,%edx
call   10c0 <read@plt>
cmp    $0x6,%eax
jne    1347 <main+0x137>
movd   0x200(%rsp),%xmm0
movd   %xmm0,%eax
cmp    $0x587a37fd,%eax
jne    136f <main+0x15f>
cmpb   $0x5a,0x204(%rsp)
5a
jne    136f <main+0x15f>
cmpb   $0x0,0x205(%rsp)
jne    136f <main+0x15f>
lea    0xd99(%rip),%rdx
mov    0x8(%rbx),%rcx
mov    %rsp,%rdi
mov    $0x200,%esi
call   1090 <snprintf@plt>
jmp    138d <main+0x17d>
movups 0xd41(%rip),%xmm0
movups %xmm0,0x21a(%rsp)
movaps 0xd28(%rip),%xmm0
movaps %xmm0,0x210(%rsp)
movdqa 0xd08(%rip),%xmm0
movdqa %xmm0,0x200(%rsp)
lea    0x200(%rsp),%rsi
mov    $0x2,%edi
mov    $0x2a,%edx
call   1050 <write@plt>
mov    $0x1,%ebp
jmp    1558 <main+0x348>
mov    0x2caf(%rip),%rax
mov    (%rax),%edi
mov    0x8(%rbx),%rdx
lea    0xcf4(%rip),%rsi
xor    %eax,%eax
call   10d0 <fprintf@plt>
mov    $0x1,%ebp
jmp    1558 <main+0x348>
mov    0x2c8a(%rip),%rax
mov    (%rax),%edi
lea    0xcf2(%rip),%rsi
xor    %eax,%eax
call   10d0 <fprintf@plt>
mov    %ebp,%edi
call   10b0 <close@plt>
mov    $0x1,%ebp
jmp    1558 <main+0x348>
cmp    $0x1f,%al
jne    138d <main+0x17d>
shr    $0x8,%eax
lea    0xcf7(%rip),%rdx
cmp    $0x9e,%al
je     12bc <main+0xac>
cmp    $0x8b,%al
je     12bc <main+0xac>
cmpb   $0x0,(%rsp)
je     13c6 <main+0x1b6>
lea    0xcf7(%rip),%rsi
mov    %rsp,%rdi
call   1120 <popen@plt>
mov    %rax,%rbx
test   %rax,%rax
jne    13d9 <main+0x1c9>
mov    0x2c27(%rip),%rax
mov    (%rax),%edi
lea    0xcda(%rip),%rsi
mov    %rsp,%rdx
xor    %eax,%eax
call   10d0 <fprintf@plt>
jmp    135e <main+0x14e>
mov    0x8(%rbx),%rdi
lea    0xcc0(%rip),%rsi
call   1130 <fopen@plt>
mov    %rax,%rbx
mov    %ebp,%edi
call   10b0 <close@plt>
lea    0x200(%rsp),%rdi
xor    %esi,%esi
mov    $0x1050,%edx
call   10a0 <memset@plt>
lea    0x250(%rsp),%r13
mov    %r13,%rdi
mov    $0x1,%esi
mov    $0x1000,%edx
mov    %rbx,%r15
mov    %rbx,%rcx
call   1040 <fread@plt>
test   %eax,%eax
jle    1508 <main+0x2f8>
lea    0x20f(%rsp),%r14
lea    0x200(%rsp),%r12
nopl   0x0(%rax)
mov    %eax,%ecx
neg    %rcx
mov    $0xe,%ebx
mov    %r14,%rbp
jmp    1456 <main+0x246>
nop
add    $0x1,%rbp
lea    (%rcx,%rbx,1),%rdx
add    $0x1,%rdx
add    $0x1,%rbx
cmp    $0xe,%rdx
je     14c0 <main+0x2b0>
cmpb   $0x4c,-0xf(%rbp)
jne    1440 <main+0x230>
cmpb   $0x69,-0xe(%rbp)
jne    1440 <main+0x230>
cmpb   $0x6e,-0xd(%rbp)
jne    1440 <main+0x230>
cmpb   $0x75,-0xc(%rbp)
jne    1440 <main+0x230>
cmpb   $0x78,-0xb(%rbp)
jne    1440 <main+0x230>
cmpb   $0x20,-0xa(%rbp)
jne    1440 <main+0x230>
cmpb   $0x76,-0x9(%rbp)
jne    1440 <main+0x230>
cmpb   $0x65,-0x8(%rbp)
jne    1440 <main+0x230>
cmpb   $0x72,-0x7(%rbp)
jne    1440 <main+0x230>
cmpb   $0x73,-0x6(%rbp)
jne    1440 <main+0x230>
cmpb   $0x69,-0x5(%rbp)
jne    1440 <main+0x230>
cmpb   $0x6f,-0x4(%rbp)
jne    1440 <main+0x230>
cmpb   $0x6e,-0x3(%rbp)
jne    1440 <main+0x230>
cmpb   $0x20,-0x2(%rbp)
jne    1440 <main+0x230>
cmpb   $0x0,-0x1(%rbp)
je     1440 <main+0x230>
cmpb   $0x0,0x2(%rbp)
je     1440 <main+0x230>
jmp    17fa <main+0x5ea>
nopl   0x0(%rax,%rax,1)
cmp    $0x1000,%eax
jl     1508 <main+0x2f8>
mov    %r12,%rdi
lea    0x1200(%rsp),%rsi
mov    $0x50,%edx
call   10e0 <memcpy@plt>
mov    %r13,%rdi
xor    %esi,%esi
mov    $0x1000,%edx
call   10a0 <memset@plt>
mov    %r13,%rdi
mov    $0x1,%esi
mov    $0x1000,%edx
mov    %r15,%rcx
call   1040 <fread@plt>
test   %eax,%eax
jg     1430 <main+0x220>
mov    0x2ac1(%rip),%r14
mov    (%r14),%edx
mov    $0x202,%esi
mov    %r15,%rdi
call   1100 <fseek@plt>
test   %eax,%eax
je     156c <main+0x35c>
mov    (%r14),%edx
mov    $0x10008,%esi
mov    %r15,%rdi
call   1100 <fseek@plt>
mov    $0x1,%ebp
test   %eax,%eax
je     1660 <main+0x450>
cmpb   $0x0,(%rsp)
je     1550 <main+0x340>
mov    %r15,%rdi
call   1080 <pclose@plt>
jmp    1558 <main+0x348>
mov    %r15,%rdi
call   1060 <fclose@plt>
mov    %ebp,%eax
add    $0x1258,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
lea    0x200(%rsp),%rdi
mov    $0x1,%esi
mov    $0x4,%edx
mov    %r15,%rcx
call   1040 <fread@plt>
cmp    $0x4,%eax
jne    1523 <main+0x313>
cmpb   $0x48,0x200(%rsp)
48
jne    1523 <main+0x313>
cmpb   $0x64,0x201(%rsp)
64
jne    1523 <main+0x313>
cmpb   $0x72,0x202(%rsp)
72
jne    1523 <main+0x313>
cmpb   $0x53,0x203(%rsp)
53
jne    1523 <main+0x313>
mov    (%r14),%edx
mov    $0x20e,%esi
mov    %r15,%rdi
call   1100 <fseek@plt>
test   %eax,%eax
jne    1523 <main+0x313>
lea    0x200(%rsp),%rdi
mov    $0x1,%esi
mov    $0x2,%edx
mov    %r15,%rcx
call   1040 <fread@plt>
cmp    $0x2,%eax
jne    1523 <main+0x313>
movzwl 0x200(%rsp),%esi
add    $0x200,%rsi
mov    (%r14),%edx
mov    %r15,%rdi
call   1100 <fseek@plt>
test   %eax,%eax
jne    1523 <main+0x313>
lea    0x200(%rsp),%rbp
mov    %rbp,%rdi
mov    $0x1,%esi
mov    $0x50,%edx
mov    %r15,%rcx
call   1040 <fread@plt>
cmp    $0x50,%eax
jne    1523 <main+0x313>
movb   $0x0,0x250(%rsp)
movzbl 0x0(%rbp),%eax
test   %al,%al
je     17be <main+0x5ae>
cmp    $0x20,%al
je     17ba <main+0x5aa>
add    $0x1,%rbp
jmp    1646 <main+0x436>
lea    0x200(%rsp),%rdi
mov    $0x1,%ebp
mov    $0x1,%esi
mov    $0x6,%edx
mov    %r15,%rcx
call   1040 <fread@plt>
cmp    $0x6,%eax
jne    1540 <main+0x330>
cmpb   $0x53,0x200(%rsp)
53
jne    1540 <main+0x330>
cmpb   $0x33,0x201(%rsp)
33
jne    1540 <main+0x330>
cmpb   $0x39,0x202(%rsp)
39
jne    1540 <main+0x330>
cmpb   $0x30,0x203(%rsp)
30
jne    1540 <main+0x330>
cmpb   $0x45,0x204(%rsp)
45
jne    1540 <main+0x330>
cmpb   $0x50,0x205(%rsp)
50
jne    1540 <main+0x330>
mov    (%r14),%edx
mov    $0x10428,%esi
mov    %r15,%rdi
call   1100 <fseek@plt>
test   %eax,%eax
jne    1540 <main+0x330>
lea    0x200(%rsp),%rdi
mov    $0x1,%ebp
mov    $0x1,%esi
mov    $0x8,%edx
mov    %r15,%rcx
call   1040 <fread@plt>
cmp    $0x8,%eax
jne    1540 <main+0x330>
mov    0x200(%rsp),%esi
mov    0x204(%rsp),%eax
bswap  %eax
cltq
movzbl 0x203(%rsp),%ecx
shl    $0x20,%rcx
add    %rax,%rcx
movzbl 0x202(%rsp),%eax
shl    $0x28,%rax
add    %rcx,%rax
movzbl 0x201(%rsp),%ecx
shl    $0x30,%rcx
add    %rax,%rcx
shl    $0x38,%rsi
add    %rcx,%rsi
mov    (%r14),%edx
mov    %r15,%rdi
call   1100 <fseek@plt>
test   %eax,%eax
jne    1540 <main+0x330>
lea    0x200(%rsp),%r14
mov    $0x1,%ebp
mov    %r14,%rdi
mov    $0x1,%esi
mov    $0x50,%edx
mov    %r15,%rcx
call   1040 <fread@plt>
cmp    $0x50,%eax
jne    1540 <main+0x330>
movb   $0x0,0x250(%rsp)
movzbl (%r14),%eax
test   %al,%al
je     17d1 <main+0x5c1>
cmp    $0x20,%al
je     17cd <main+0x5bd>
add    $0x1,%r14
jmp    17a8 <main+0x598>
movb   $0x0,0x0(%rbp)
cmpb   $0x0,0x200(%rsp)
jne    17df <main+0x5cf>
jmp    1523 <main+0x313>
movb   $0x0,(%r14)
cmpb   $0x0,0x200(%rsp)
je     1540 <main+0x330>
lea    0x200(%rsp),%rsi
lea    0x8c2(%rip),%rdi
call   1070 <printf@plt>
xor    %ebp,%ebp
jmp    1540 <main+0x330>
xor    %r14d,%r14d
jmp    1807 <main+0x5f7>
add    $0x1,%r14d
add    $0x1,%rbp
movsbl 0x0(%rbp),%r12d
cmp    $0x2e,%r12d
je     17ff <main+0x5ef>
cmp    $0x20,%r12b
je     184b <main+0x63b>
mov    %r12d,%edi
cmp    $0x1,%r14d
jg     1828 <main+0x618>
call   1030 <isdigit@plt>
jmp    182d <main+0x61d>
call   10f0 <my_is_alnum_punct@plt>
test   %eax,%eax
jne    1803 <main+0x5f3>
mov    0x27a0(%rip),%rax
mov    (%rax),%edi
lea    0x85e(%rip),%rsi
mov    %r12d,%edx
xor    %eax,%eax
call   10d0 <fprintf@plt>
mov    %ebx,%eax
lea    -0x1(%rax),%rcx
cmpb   $0x20,0x201(%rsp,%rcx,1)
20
lea    0x1(%rcx),%rcx
jne    1851 <main+0x641>
mov    %ecx,%ecx
movb   $0x0,0x200(%rsp,%rcx,1)
lea    (%rsp,%rax,1),%rsi
add    $0x200,%rsi
jmp    17e7 <main+0x5d7>

LLVM IR (-O0):
@__const.main.msg = [42 x i8] c"usage: get_kernel_version <kernel_image>\0A\00"
@O_RDONLY = global i32 0
@O_CLOEXEC = global i32 0
@stderr = global i32 0
@.str = [31 x i8] c"Cannot open kernel image \22%s\22\0A\00"
@.str.1 = [12 x i8] c"Short read\0A\00"
@.str.2 = [31 x i8] c"/usr/bin/xz -dc %s 2>/dev/null\00"
@.str.3 = [29 x i8] c"/bin/gzip -dc %s 2>/dev/null\00"
@.str.4 = [3 x i8] c"re\00"
@.str.5 = [11 x i8] c"%s: faild\0A\00"
@.str.6 = [17 x i8] c"invalid char %c\0A\00"
@.str.7 = [4 x i8] c"%s\0A\00"
@SEEK_SET = global i32 0
define i32 @main(i32 %0, i8** %1) {
%3 = alloca i32
%4 = alloca i32
%5 = alloca i8**
%6 = alloca i32*
%7 = alloca [4176 x i8]
%8 = alloca [512 x i8]
%9 = alloca i32
%10 = alloca [42 x i8]
%11 = alloca [6 x i8]
%12 = alloca i32
%13 = alloca i32
%14 = alloca i32
%15 = alloca i32
%16 = alloca i32
%17 = alloca i8
%18 = alloca i32
%19 = alloca i32
%20 = alloca i8*
%21 = alloca i64
%22 = alloca i8*
store i32 0, i32* %3
store i32 %0, i32* %4
store i8** %1, i8*** %5
%23 = bitcast [512 x i8]* %8 to i8*
store i32 0, i32* %9
%24 = load i32, i32* %4
%25 = icmp ne i32 %24, 2
br i1 %25, label %26, label %30
26: ; preds = %2
%27 = bitcast [42 x i8]* %10 to i8*
%28 = getelementptr inbounds [42 x i8], [42 x i8]* %10, i64 0, i64 0
%29 = call i32 @write(i32 2, i8* %28, i32 42)
store i32 1, i32* %3
br label %621
30: ; preds = %2
%31 = load i8**, i8*** %5
%32 = getelementptr inbounds i8*, i8** %31, i64 1
%33 = load i8*, i8** %32
%34 = load i32, i32* @O_RDONLY
%35 = load i32, i32* @O_CLOEXEC
%36 = or i32 %34, %35
%37 = call i32 @open(i8* %33, i32 %36)
store i32 %37, i32* %12
%38 = load i32, i32* %12
%39 = icmp eq i32 %38, -1
br i1 %39, label %40, label %46
40: ; preds = %30
%41 = load i32, i32* @stderr
%42 = load i8**, i8*** %5
%43 = getelementptr inbounds i8*, i8** %42, i64 1
%44 = load i8*, i8** %43
%45 = call i32 (i32, i8*, ...) @fprintf(i32 %41, i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i8* %44)
store i32 1, i32* %3
br label %621
46: ; preds = %30
%47 = load i32, i32* %12
%48 = getelementptr inbounds [6 x i8], [6 x i8]* %11, i64 0, i64 0
%49 = call i32 @read(i32 %47, i8* %48, i32 6)
%50 = icmp ne i32 %49, 6
br i1 %50, label %51, label %56
51: ; preds = %46
%52 = load i32, i32* @stderr
%53 = call i32 (i32, i8*, ...) @fprintf(i32 %52, i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.1, i64 0, i64 0))
%54 = load i32, i32* %12
%55 = call i32 @close(i32 %54)
store i32 1, i32* %3
br label %621
56: ; preds = %46
%57 = getelementptr inbounds [6 x i8], [6 x i8]* %11, i64 0, i64 0
%58 = load i8, i8* %57
%59 = zext i8 %58 to i32
%60 = icmp eq i32 %59, 253
br i1 %60, label %61, label %92
61: ; preds = %56
%62 = getelementptr inbounds [6 x i8], [6 x i8]* %11, i64 0, i64 1
%63 = load i8, i8* %62
%64 = zext i8 %63 to i32
%65 = icmp eq i32 %64, 55
br i1 %65, label %66, label %92
66: ; preds = %61
%67 = getelementptr inbounds [6 x i8], [6 x i8]* %11, i64 0, i64 2
%68 = load i8, i8* %67
%69 = zext i8 %68 to i32
%70 = icmp eq i32 %69, 122
br i1 %70, label %71, label %92
71: ; preds = %66
%72 = getelementptr inbounds [6 x i8], [6 x i8]* %11, i64 0, i64 3
%73 = load i8, i8* %72
%74 = zext i8 %73 to i32
%75 = icmp eq i32 %74, 88
br i1 %75, label %76, label %92
76: ; preds = %71
%77 = getelementptr inbounds [6 x i8], [6 x i8]* %11, i64 0, i64 4
%78 = load i8, i8* %77
%79 = zext i8 %78 to i32
%80 = icmp eq i32 %79, 90
br i1 %80, label %81, label %92
81: ; preds = %76
%82 = getelementptr inbounds [6 x i8], [6 x i8]* %11, i64 0, i64 5
%83 = load i8, i8* %82
%84 = zext i8 %83 to i32
%85 = icmp eq i32 %84, 0
br i1 %85, label %86, label %92
86: ; preds = %81
%87 = getelementptr inbounds [512 x i8], [512 x i8]* %8, i64 0, i64 0
%88 = load i8**, i8*** %5
%89 = getelementptr inbounds i8*, i8** %88, i64 1
%90 = load i8*, i8** %89
%91 = call i32 @snprintf(i8* %87, i32 512, i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str.2, i64 0, i64 0), i8* %90)
br label %92
92: ; preds = %86, %81, %76, %71, %66, %61, %56
%93 = getelementptr inbounds [6 x i8], [6 x i8]* %11, i64 0, i64 0
%94 = load i8, i8* %93
%95 = zext i8 %94 to i32
%96 = icmp eq i32 %95, 31
br i1 %96, label %97, label %113
97: ; preds = %92
%98 = getelementptr inbounds [6 x i8], [6 x i8]* %11, i64 0, i64 1
%99 = load i8, i8* %98
%100 = zext i8 %99 to i32
%101 = icmp eq i32 %100, 139
br i1 %101, label %107, label %102
102: ; preds = %97
%103 = getelementptr inbounds [6 x i8], [6 x i8]* %11, i64 0, i64 1
%104 = load i8, i8* %103
%105 = zext i8 %104 to i32
%106 = icmp eq i32 %105, 158
br i1 %106, label %107, label %113
107: ; preds = %102, %97
%108 = getelementptr inbounds [512 x i8], [512 x i8]* %8, i64 0, i64 0
%109 = load i8**, i8*** %5
%110 = getelementptr inbounds i8*, i8** %109, i64 1
%111 = load i8*, i8** %110
%112 = call i32 @snprintf(i8* %108, i32 512, i8* getelementptr inbounds ([29 x i8], [29 x i8]* @.str.3, i64 0, i64 0), i8* %111)
br label %113
113: ; preds = %107, %102, %92
%114 = getelementptr inbounds [512 x i8], [512 x i8]* %8, i64 0, i64 0
%115 = load i8, i8* %114
%116 = icmp ne i8 %115, 0
br i1 %116, label %117, label %129
117: ; preds = %113
%118 = getelementptr inbounds [512 x i8], [512 x i8]* %8, i64 0, i64 0
%119 = call i32* @popen(i8* %118, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.4, i64 0, i64 0))
store i32* %119, i32** %6
%120 = load i32*, i32** %6
%121 = icmp eq i32* %120, null
br i1 %121, label %122, label %128
122: ; preds = %117
%123 = load i32, i32* @stderr
%124 = getelementptr inbounds [512 x i8], [512 x i8]* %8, i64 0, i64 0
%125 = call i32 (i32, i8*, ...) @fprintf(i32 %123, i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.5, i64 0, i64 0), i8* %124)
%126 = load i32, i32* %12
%127 = call i32 @close(i32 %126)
store i32 1, i32* %3
br label %621
128: ; preds = %117
br label %134
129: ; preds = %113
%130 = load i8**, i8*** %5
%131 = getelementptr inbounds i8*, i8** %130, i64 1
%132 = load i8*, i8** %131
%133 = call i32* @fopen(i8* %132, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.4, i64 0, i64 0))
store i32* %133, i32** %6
br label %134
134: ; preds = %129, %128
%135 = load i32, i32* %12
%136 = call i32 @close(i32 %135)
%137 = getelementptr inbounds [4176 x i8], [4176 x i8]* %7, i64 0, i64 0
%138 = call i32 @memset(i8* %137, i32 0, i32 4176)
br label %139
139: ; preds = %369, %134
%140 = load i32, i32* %9
%141 = icmp ne i32 %140, 0
%142 = xor i1 %141, true
br i1 %142, label %143, label %370
143: ; preds = %139
%144 = getelementptr inbounds [4176 x i8], [4176 x i8]* %7, i64 0, i64 80
%145 = load i32*, i32** %6
%146 = call i32 @fread(i8* %144, i32 1, i32 4096, i32* %145)
store i32 %146, i32* %13
%147 = load i32, i32* %13
%148 = icmp sle i32 %147, 0
br i1 %148, label %149, label %150
149: ; preds = %143
br label %370
150: ; preds = %143
store i32 0, i32* %14
br label %151
151: ; preds = %330, %150
%152 = load i32, i32* %14
%153 = load i32, i32* %13
%154 = icmp slt i32 %152, %153
br i1 %154, label %155, label %333
155: ; preds = %151
%156 = load i32, i32* %14
%157 = sext i32 %156 to i64
%158 = getelementptr inbounds [4176 x i8], [4176 x i8]* %7, i64 0, i64 %157
%159 = load i8, i8* %158
%160 = sext i8 %159 to i32
%161 = icmp eq i32 %160, 76
br i1 %161, label %162, label %329
162: ; preds = %155
%163 = load i32, i32* %14
%164 = add nsw i32 %163, 1
%165 = sext i32 %164 to i64
%166 = getelementptr inbounds [4176 x i8], [4176 x i8]* %7, i64 0, i64 %165
%167 = load i8, i8* %166
%168 = sext i8 %167 to i32
%169 = icmp eq i32 %168, 105
br i1 %169, label %170, label %329
170: ; preds = %162
%171 = load i32, i32* %14
%172 = add nsw i32 %171, 2
%173 = sext i32 %172 to i64
%174 = getelementptr inbounds [4176 x i8], [4176 x i8]* %7, i64 0, i64 %173
%175 = load i8, i8* %174
%176 = sext i8 %175 to i32
%177 = icmp eq i32 %176, 110
br i1 %177, label %178, label %329
178: ; preds = %170
%179 = load i32, i32* %14
%180 = add nsw i32 %179, 3
%181 = sext i32 %180 to i64
%182 = getelementptr inbounds [4176 x i8], [4176 x i8]* %7, i64 0, i64 %181
%183 = load i8, i8* %182
%184 = sext i8 %183 to i32
%185 = icmp eq i32 %184, 117
br i1 %185, label %186, label %329
186: ; preds = %178
%187 = load i32, i32* %14
%188 = add nsw i32 %187, 4
%189 = sext i32 %188 to i64
%190 = getelementptr inbounds [4176 x i8], [4176 x i8]* %7, i64 0, i64 %189
%191 = load i8, i8* %190
%192 = sext i8 %191 to i32
%193 = icmp eq i32 %192, 120
br i1 %193, label %194, label %329
194: ; preds = %186
%195 = load i32, i32* %14
%196 = add nsw i32 %195, 5
%197 = sext i32 %196 to i64
%198 = getelementptr inbounds [4176 x i8], [4176 x i8]* %7, i64 0, i64 %197
%199 = load i8, i8* %198
%200 = sext i8 %199 to i32
%201 = icmp eq i32 %200, 32
br i1 %201, label %202, label %329
202: ; preds = %194
%203 = load i32, i32* %14
%204 = add nsw i32 %203, 6
%205 = sext i32 %204 to i64
%206 = getelementptr inbounds [4176 x i8], [4176 x i8]* %7, i64 0, i64 %205
%207 = load i8, i8* %206
%208 = sext i8 %207 to i32
%209 = icmp eq i32 %208, 118
br i1 %209, label %210, label %329
210: ; preds = %202
%211 = load i32, i32* %14
%212 = add nsw i32 %211, 7
%213 = sext i32 %212 to i64
%214 = getelementptr inbounds [4176 x i8], [4176 x i8]* %7, i64 0, i64 %213
%215 = load i8, i8* %214
%216 = sext i8 %215 to i32
%217 = icmp eq i32 %216, 101
br i1 %217, label %218, label %329
218: ; preds = %210
%219 = load i32, i32* %14
%220 = add nsw i32 %219, 8
%221 = sext i32 %220 to i64
%222 = getelementptr inbounds [4176 x i8], [4176 x i8]* %7, i64 0, i64 %221
%223 = load i8, i8* %222
%224 = sext i8 %223 to i32
%225 = icmp eq i32 %224, 114
br i1 %225, label %226, label %329
226: ; preds = %218
%227 = load i32, i32* %14
%228 = add nsw i32 %227, 9
%229 = sext i32 %228 to i64
%230 = getelementptr inbounds [4176 x i8], [4176 x i8]* %7, i64 0, i64 %229
%231 = load i8, i8* %230
%232 = sext i8 %231 to i32
%233 = icmp eq i32 %232, 115
br i1 %233, label %234, label %329
234: ; preds = %226
%235 = load i32, i32* %14
%236 = add nsw i32 %235, 10
%237 = sext i32 %236 to i64
%238 = getelementptr inbounds [4176 x i8], [4176 x i8]* %7, i64 0, i64 %237
%239 = load i8, i8* %238
%240 = sext i8 %239 to i32
%241 = icmp eq i32 %240, 105
br i1 %241, label %242, label %329
242: ; preds = %234
%243 = load i32, i32* %14
%244 = add nsw i32 %243, 11
%245 = sext i32 %244 to i64
%246 = getelementptr inbounds [4176 x i8], [4176 x i8]* %7, i64 0, i64 %245
%247 = load i8, i8* %246
%248 = sext i8 %247 to i32
%249 = icmp eq i32 %248, 111
br i1 %249, label %250, label %329
250: ; preds = %242
%251 = load i32, i32* %14
%252 = add nsw i32 %251, 12
%253 = sext i32 %252 to i64
%254 = getelementptr inbounds [4176 x i8], [4176 x i8]* %7, i64 0, i64 %253
%255 = load i8, i8* %254
%256 = sext i8 %255 to i32
%257 = icmp eq i32 %256, 110
br i1 %257, label %258, label %329
258: ; preds = %250
%259 = load i32, i32* %14
%260 = add nsw i32 %259, 13
%261 = sext i32 %260 to i64
%262 = getelementptr inbounds [4176 x i8], [4176 x i8]* %7, i64 0, i64 %261
%263 = load i8, i8* %262
%264 = sext i8 %263 to i32
%265 = icmp eq i32 %264, 32
br i1 %265, label %266, label %329
266: ; preds = %258
%267 = load i32, i32* %14
%268 = add nsw i32 %267, 14
%269 = sext i32 %268 to i64
%270 = getelementptr inbounds [4176 x i8], [4176 x i8]* %7, i64 0, i64 %269
%271 = load i8, i8* %270
%272 = sext i8 %271 to i32
%273 = icmp ne i32 %272, 0
br i1 %273, label %274, label %329
274: ; preds = %266
%275 = load i32, i32* %14
%276 = add nsw i32 %275, 17
%277 = sext i32 %276 to i64
%278 = getelementptr inbounds [4176 x i8], [4176 x i8]* %7, i64 0, i64 %277
%279 = load i8, i8* %278
%280 = sext i8 %279 to i32
%281 = icmp ne i32 %280, 0
br i1 %281, label %282, label %329
282: ; preds = %274
%283 = load i32, i32* %14
%284 = add nsw i32 %283, 14
store i32 %284, i32* %15
store i32 0, i32* %16
%285 = load i32, i32* %15
%286 = add nsw i32 %285, 1
store i32 %286, i32* %15
br label %287
287: ; preds = %325, %282
%288 = load i32, i32* %15
%289 = sext i32 %288 to i64
%290 = getelementptr inbounds [4176 x i8], [4176 x i8]* %7, i64 0, i64 %289
%291 = load i8, i8* %290
%292 = sext i8 %291 to i32
%293 = icmp ne i32 %292, 32
br i1 %293, label %294, label %328
294: ; preds = %287
%295 = load i32, i32* %15
%296 = sext i32 %295 to i64
%297 = getelementptr inbounds [4176 x i8], [4176 x i8]* %7, i64 0, i64 %296
%298 = load i8, i8* %297
store i8 %298, i8* %17
%299 = load i8, i8* %17
%300 = sext i8 %299 to i32
%301 = icmp eq i32 %300, 46
br i1 %301, label %302, label %305
302: ; preds = %294
%303 = load i32, i32* %16
%304 = add nsw i32 %303, 1
store i32 %304, i32* %16
br label %325
305: ; preds = %294
%306 = load i32, i32* %16
%307 = icmp slt i32 %306, 2
br i1 %307, label %308, label %312
308: ; preds = %305
%309 = load i8, i8* %17
%310 = call i32 @isdigit(i8 signext %309)
%311 = icmp ne i32 %310, 0
br i1 %311, label %312, label %319
312: ; preds = %308, %305
%313 = load i32, i32* %16
%314 = icmp sge i32 %313, 2
br i1 %314, label %315, label %324
315: ; preds = %312
%316 = load i8, i8* %17
%317 = call i32 @my_is_alnum_punct(i8 signext %316)
%318 = icmp ne i32 %317, 0
br i1 %318, label %324, label %319
319: ; preds = %315, %308
%320 = load i32, i32* @stderr
%321 = load i8, i8* %17
%322 = sext i8 %321 to i32
%323 = call i32 (i32, i8*, ...) @fprintf(i32 %320, i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str.6, i64 0, i64 0), i32 %322)
br label %328
324: ; preds = %315, %312
br label %325
325: ; preds = %324, %302
%326 = load i32, i32* %15
%327 = add nsw i32 %326, 1
store i32 %327, i32* %15
br label %287
328: ; preds = %319, %287
store i32 1, i32* %9
br label %333
329: ; preds = %274, %266, %258, %250, %242, %234, %226, %218, %210, %202, %194, %186, %178, %170, %162, %155
br label %330
330: ; preds = %329
%331 = load i32, i32* %14
%332 = add nsw i32 %331, 1
store i32 %332, i32* %14
br label %151
333: ; preds = %328, %151
%334 = load i32, i32* %9
%335 = icmp ne i32 %334, 0
br i1 %335, label %336, label %359
336: ; preds = %333
%337 = load i32, i32* %14
%338 = add nsw i32 %337, 14
store i32 %338, i32* %18
br label %339
339: ; preds = %347, %336
%340 = load i32, i32* %18
%341 = sext i32 %340 to i64
%342 = getelementptr inbounds [4176 x i8], [4176 x i8]* %7, i64 0, i64 %341
%343 = load i8, i8* %342
%344 = sext i8 %343 to i32
%345 = icmp ne i32 %344, 32
br i1 %345, label %346, label %350
346: ; preds = %339
br label %347
347: ; preds = %346
%348 = load i32, i32* %18
%349 = add nsw i32 %348, 1
store i32 %349, i32* %18
br label %339
350: ; preds = %339
%351 = load i32, i32* %18
%352 = sext i32 %351 to i64
%353 = getelementptr inbounds [4176 x i8], [4176 x i8]* %7, i64 0, i64 %352
store i8 0, i8* %353
%354 = load i32, i32* %14
%355 = add nsw i32 %354, 14
%356 = sext i32 %355 to i64
%357 = getelementptr inbounds [4176 x i8], [4176 x i8]* %7, i64 0, i64 %356
%358 = call i32 @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.7, i64 0, i64 0), i8* %357)
br label %369
359: ; preds = %333
%360 = load i32, i32* %13
%361 = icmp slt i32 %360, 4096
br i1 %361, label %362, label %363
362: ; preds = %359
br label %370
363: ; preds = %359
%364 = getelementptr inbounds [4176 x i8], [4176 x i8]* %7, i64 0, i64 0
%365 = getelementptr inbounds [4176 x i8], [4176 x i8]* %7, i64 0, i64 4096
%366 = call i32 @memcpy(i8* %364, i8* %365, i32 80)
%367 = getelementptr inbounds [4176 x i8], [4176 x i8]* %7, i64 0, i64 80
%368 = call i32 @memset(i8* %367, i32 0, i32 4096)
br label %369
369: ; preds = %363, %350
br label %139
370: ; preds = %362, %149, %139
%371 = load i32, i32* %9
%372 = icmp ne i32 %371, 0
br i1 %372, label %465, label %373
373: ; preds = %370
%374 = load i32*, i32** %6
%375 = load i32, i32* @SEEK_SET
%376 = call i32 @fseek(i32* %374, i64 514, i32 %375)
%377 = icmp ne i32 %376, 0
br i1 %377, label %464, label %378
378: ; preds = %373
%379 = getelementptr inbounds [4176 x i8], [4176 x i8]* %7, i64 0, i64 0
%380 = load i32*, i32** %6
%381 = call i32 @fread(i8* %379, i32 1, i32 4, i32* %380)
%382 = icmp eq i32 %381, 4
br i1 %382, label %383, label %464
383: ; preds = %378
%384 = getelementptr inbounds [4176 x i8], [4176 x i8]* %7, i64 0, i64 0
%385 = load i8, i8* %384
%386 = sext i8 %385 to i32
%387 = icmp eq i32 %386, 72
br i1 %387, label %388, label %464
388: ; preds = %383
%389 = getelementptr inbounds [4176 x i8], [4176 x i8]* %7, i64 0, i64 1
%390 = load i8, i8* %389
%391 = sext i8 %390 to i32
%392 = icmp eq i32 %391, 100
br i1 %392, label %393, label %464
393: ; preds = %388
%394 = getelementptr inbounds [4176 x i8], [4176 x i8]* %7, i64 0, i64 2
%395 = load i8, i8* %394
%396 = sext i8 %395 to i32
%397 = icmp eq i32 %396, 114
br i1 %397, label %398, label %464
398: ; preds = %393
%399 = getelementptr inbounds [4176 x i8], [4176 x i8]* %7, i64 0, i64 3
%400 = load i8, i8* %399
%401 = sext i8 %400 to i32
%402 = icmp eq i32 %401, 83
br i1 %402, label %403, label %464
403: ; preds = %398
%404 = load i32*, i32** %6
%405 = load i32, i32* @SEEK_SET
%406 = call i32 @fseek(i32* %404, i64 526, i32 %405)
%407 = icmp ne i32 %406, 0
br i1 %407, label %464, label %408
408: ; preds = %403
%409 = getelementptr inbounds [4176 x i8], [4176 x i8]* %7, i64 0, i64 0
%410 = load i32*, i32** %6
%411 = call i32 @fread(i8* %409, i32 1, i32 2, i32* %410)
%412 = icmp eq i32 %411, 2
br i1 %412, label %413, label %464
413: ; preds = %408
%414 = getelementptr inbounds [4176 x i8], [4176 x i8]* %7, i64 0, i64 0
%415 = getelementptr inbounds i8, i8* %414, i64 0
%416 = load i8, i8* %415
%417 = zext i8 %416 to i32
%418 = add nsw i32 512, %417
%419 = getelementptr inbounds [4176 x i8], [4176 x i8]* %7, i64 0, i64 0
%420 = getelementptr inbounds i8, i8* %419, i64 1
%421 = load i8, i8* %420
%422 = zext i8 %421 to i32
%423 = shl i32 %422, 8
%424 = add nsw i32 %418, %423
store i32 %424, i32* %19
%425 = load i32*, i32** %6
%426 = load i32, i32* %19
%427 = zext i32 %426 to i64
%428 = load i32, i32* @SEEK_SET
%429 = call i32 @fseek(i32* %425, i64 %427, i32 %428)
%430 = icmp ne i32 %429, 0
br i1 %430, label %463, label %431
431: ; preds = %413
%432 = getelementptr inbounds [4176 x i8], [4176 x i8]* %7, i64 0, i64 0
%433 = load i32*, i32** %6
%434 = call i32 @fread(i8* %432, i32 1, i32 80, i32* %433)
%435 = icmp eq i32 %434, 80
br i1 %435, label %436, label %463
436: ; preds = %431
%437 = getelementptr inbounds [4176 x i8], [4176 x i8]* %7, i64 0, i64 0
store i8* %437, i8** %20
%438 = load i8*, i8** %20
%439 = getelementptr inbounds i8, i8* %438, i64 80
store i8 0, i8* %439
br label %440
440: ; preds = %452, %436
%441 = load i8*, i8** %20
%442 = load i8, i8* %441
%443 = icmp ne i8 %442, 0
br i1 %443, label %444, label %455
444: ; preds = %440
%445 = load i8*, i8** %20
%446 = load i8, i8* %445
%447 = sext i8 %446 to i32
%448 = icmp eq i32 %447, 32
br i1 %448, label %449, label %451
449: ; preds = %444
%450 = load i8*, i8** %20
store i8 0, i8* %450
br label %455
451: ; preds = %444
br label %452
452: ; preds = %451
%453 = load i8*, i8** %20
%454 = getelementptr inbounds i8, i8* %453, i32 1
store i8* %454, i8** %20
br label %440
455: ; preds = %449, %440
%456 = getelementptr inbounds [4176 x i8], [4176 x i8]* %7, i64 0, i64 0
%457 = load i8, i8* %456
%458 = icmp ne i8 %457, 0
br i1 %458, label %459, label %462
459: ; preds = %455
store i32 1, i32* %9
%460 = getelementptr inbounds [4176 x i8], [4176 x i8]* %7, i64 0, i64 0
%461 = call i32 @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.7, i64 0, i64 0), i8* %460)
br label %462
462: ; preds = %459, %455
br label %463
463: ; preds = %462, %431, %413
br label %464
464: ; preds = %463, %408, %403, %398, %393, %388, %383, %378, %373
br label %465
465: ; preds = %464, %370
%466 = load i32, i32* %9
%467 = icmp ne i32 %466, 0
br i1 %467, label %605, label %468
468: ; preds = %465
%469 = load i32*, i32** %6
%470 = load i32, i32* @SEEK_SET
%471 = call i32 @fseek(i32* %469, i64 65544, i32 %470)
%472 = icmp ne i32 %471, 0
br i1 %472, label %604, label %473
473: ; preds = %468
%474 = getelementptr inbounds [4176 x i8], [4176 x i8]* %7, i64 0, i64 0
%475 = load i32*, i32** %6
%476 = call i32 @fread(i8* %474, i32 1, i32 6, i32* %475)
%477 = icmp eq i32 %476, 6
br i1 %477, label %478, label %604
478: ; preds = %473
%479 = getelementptr inbounds [4176 x i8], [4176 x i8]* %7, i64 0, i64 0
%480 = load i8, i8* %479
%481 = sext i8 %480 to i32
%482 = icmp eq i32 %481, 83
br i1 %482, label %483, label %604
483: ; preds = %478
%484 = getelementptr inbounds [4176 x i8], [4176 x i8]* %7, i64 0, i64 1
%485 = load i8, i8* %484
%486 = sext i8 %485 to i32
%487 = icmp eq i32 %486, 51
br i1 %487, label %488, label %604
488: ; preds = %483
%489 = getelementptr inbounds [4176 x i8], [4176 x i8]* %7, i64 0, i64 2
%490 = load i8, i8* %489
%491 = sext i8 %490 to i32
%492 = icmp eq i32 %491, 57
br i1 %492, label %493, label %604
493: ; preds = %488
%494 = getelementptr inbounds [4176 x i8], [4176 x i8]* %7, i64 0, i64 3
%495 = load i8, i8* %494
%496 = sext i8 %495 to i32
%497 = icmp eq i32 %496, 48
br i1 %497, label %498, label %604
498: ; preds = %493
%499 = getelementptr inbounds [4176 x i8], [4176 x i8]* %7, i64 0, i64 4
%500 = load i8, i8* %499
%501 = sext i8 %500 to i32
%502 = icmp eq i32 %501, 69
br i1 %502, label %503, label %604
503: ; preds = %498
%504 = getelementptr inbounds [4176 x i8], [4176 x i8]* %7, i64 0, i64 5
%505 = load i8, i8* %504
%506 = sext i8 %505 to i32
%507 = icmp eq i32 %506, 80
br i1 %507, label %508, label %604
508: ; preds = %503
%509 = load i32*, i32** %6
%510 = load i32, i32* @SEEK_SET
%511 = call i32 @fseek(i32* %509, i64 66600, i32 %510)
%512 = icmp ne i32 %511, 0
br i1 %512, label %604, label %513
513: ; preds = %508
%514 = getelementptr inbounds [4176 x i8], [4176 x i8]* %7, i64 0, i64 0
%515 = load i32*, i32** %6
%516 = call i32 @fread(i8* %514, i32 1, i32 8, i32* %515)
%517 = icmp eq i32 %516, 8
br i1 %517, label %518, label %604
518: ; preds = %513
%519 = getelementptr inbounds [4176 x i8], [4176 x i8]* %7, i64 0, i64 0
%520 = getelementptr inbounds i8, i8* %519, i64 7
%521 = load i8, i8* %520
%522 = zext i8 %521 to i32
%523 = getelementptr inbounds [4176 x i8], [4176 x i8]* %7, i64 0, i64 0
%524 = getelementptr inbounds i8, i8* %523, i64 6
%525 = load i8, i8* %524
%526 = zext i8 %525 to i32
%527 = shl i32 %526, 8
%528 = add nsw i32 %522, %527
%529 = getelementptr inbounds [4176 x i8], [4176 x i8]* %7, i64 0, i64 0
%530 = getelementptr inbounds i8, i8* %529, i64 5
%531 = load i8, i8* %530
%532 = zext i8 %531 to i32
%533 = shl i32 %532, 16
%534 = add nsw i32 %528, %533
%535 = getelementptr inbounds [4176 x i8], [4176 x i8]* %7, i64 0, i64 0
%536 = getelementptr inbounds i8, i8* %535, i64 4
%537 = load i8, i8* %536
%538 = zext i8 %537 to i32
%539 = shl i32 %538, 24
%540 = add nsw i32 %534, %539
%541 = sext i32 %540 to i64
%542 = getelementptr inbounds [4176 x i8], [4176 x i8]* %7, i64 0, i64 0
%543 = getelementptr inbounds i8, i8* %542, i64 3
%544 = load i8, i8* %543
%545 = zext i8 %544 to i64
%546 = shl i64 %545, 32
%547 = add i64 %541, %546
%548 = getelementptr inbounds [4176 x i8], [4176 x i8]* %7, i64 0, i64 0
%549 = getelementptr inbounds i8, i8* %548, i64 2
%550 = load i8, i8* %549
%551 = zext i8 %550 to i64
%552 = shl i64 %551, 40
%553 = add i64 %547, %552
%554 = getelementptr inbounds [4176 x i8], [4176 x i8]* %7, i64 0, i64 0
%555 = getelementptr inbounds i8, i8* %554, i64 1
%556 = load i8, i8* %555
%557 = zext i8 %556 to i64
%558 = shl i64 %557, 48
%559 = add i64 %553, %558
%560 = getelementptr inbounds [4176 x i8], [4176 x i8]* %7, i64 0, i64 0
%561 = getelementptr inbounds i8, i8* %560, i64 0
%562 = load i8, i8* %561
%563 = zext i8 %562 to i64
%564 = shl i64 %563, 56
%565 = add i64 %559, %564
store i64 %565, i64* %21
%566 = load i32*, i32** %6
%567 = load i64, i64* %21
%568 = load i32, i32* @SEEK_SET
%569 = call i32 @fseek(i32* %566, i64 %567, i32 %568)
%570 = icmp ne i32 %569, 0
br i1 %570, label %603, label %571
571: ; preds = %518
%572 = getelementptr inbounds [4176 x i8], [4176 x i8]* %7, i64 0, i64 0
%573 = load i32*, i32** %6
%574 = call i32 @fread(i8* %572, i32 1, i32 80, i32* %573)
%575 = icmp eq i32 %574, 80
br i1 %575, label %576, label %603
576: ; preds = %571
%577 = getelementptr inbounds [4176 x i8], [4176 x i8]* %7, i64 0, i64 0
store i8* %577, i8** %22
%578 = load i8*, i8** %22
%579 = getelementptr inbounds i8, i8* %578, i64 80
store i8 0, i8* %579
br label %580
580: ; preds = %592, %576
%581 = load i8*, i8** %22
%582 = load i8, i8* %581
%583 = icmp ne i8 %582, 0
br i1 %583, label %584, label %595
584: ; preds = %580
%585 = load i8*, i8** %22
%586 = load i8, i8* %585
%587 = sext i8 %586 to i32
%588 = icmp eq i32 %587, 32
br i1 %588, label %589, label %591
589: ; preds = %584
%590 = load i8*, i8** %22
store i8 0, i8* %590
br label %595
591: ; preds = %584
br label %592
592: ; preds = %591
%593 = load i8*, i8** %22
%594 = getelementptr inbounds i8, i8* %593, i32 1
store i8* %594, i8** %22
br label %580
595: ; preds = %589, %580
%596 = getelementptr inbounds [4176 x i8], [4176 x i8]* %7, i64 0, i64 0
%597 = load i8, i8* %596
%598 = icmp ne i8 %597, 0
br i1 %598, label %599, label %602
599: ; preds = %595
store i32 1, i32* %9
%600 = getelementptr inbounds [4176 x i8], [4176 x i8]* %7, i64 0, i64 0
%601 = call i32 @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.7, i64 0, i64 0), i8* %600)
br label %602
602: ; preds = %599, %595
br label %603
603: ; preds = %602, %571, %518
br label %604
604: ; preds = %603, %513, %508, %503, %498, %493, %488, %483, %478, %473, %468
br label %605
605: ; preds = %604, %465
%606 = getelementptr inbounds [512 x i8], [512 x i8]* %8, i64 0, i64 0
%607 = load i8, i8* %606
%608 = sext i8 %607 to i32
%609 = icmp ne i32 %608, 0
br i1 %609, label %610, label %613
610: ; preds = %605
%611 = load i32*, i32** %6
%612 = call i32 @pclose(i32* %611)
br label %616
613: ; preds = %605
%614 = load i32*, i32** %6
%615 = call i32 @fclose(i32* %614)
br label %616
616: ; preds = %613, %610
%617 = load i32, i32* %9
%618 = icmp ne i32 %617, 0
br i1 %618, label %619, label %620
619: ; preds = %616
store i32 0, i32* %3
br label %621
620: ; preds = %616
store i32 1, i32* %3
br label %621
621: ; preds = %620, %619, %122, %51, %40, %26
%622 = load i32, i32* %3
ret i32 %622
}

LLVM IR (-O2):
@__const.main.msg = [42 x i8] c"usage: get_kernel_version <kernel_image>\0A\00"
@O_RDONLY = global i32 0
@O_CLOEXEC = global i32 0
@stderr = global i32 0
@.str = [31 x i8] c"Cannot open kernel image \22%s\22\0A\00"
@.str.1 = [12 x i8] c"Short read\0A\00"
@.str.2 = [31 x i8] c"/usr/bin/xz -dc %s 2>/dev/null\00"
@.str.3 = [29 x i8] c"/bin/gzip -dc %s 2>/dev/null\00"
@.str.4 = [3 x i8] c"re\00"
@.str.5 = [11 x i8] c"%s: faild\0A\00"
@.str.6 = [17 x i8] c"invalid char %c\0A\00"
@.str.7 = [4 x i8] c"%s\0A\00"
@SEEK_SET = global i32 0
define i32 @main(i32 %0, i8** nocapture %1) {
%3 = alloca [4176 x i8]
%4 = alloca [512 x i8]
%5 = alloca [42 x i8]
%6 = alloca [6 x i8]
%7 = getelementptr inbounds [4176 x i8], [4176 x i8]* %3, i64 0, i64 0
%8 = getelementptr inbounds [512 x i8], [512 x i8]* %4, i64 0, i64 0
%9 = icmp eq i32 %0, 2
br i1 %9, label %13, label %10
10: ; preds = %2
%11 = getelementptr inbounds [42 x i8], [42 x i8]* %5, i64 0, i64 0
%12 = call i32 @write(i32 2, i8* %11, i32 42)
br label %358
13: ; preds = %2
%14 = getelementptr inbounds [6 x i8], [6 x i8]* %6, i64 0, i64 0
%15 = getelementptr inbounds i8*, i8** %1, i64 1
%16 = load i8*, i8** %15
%17 = load i32, i32* @O_RDONLY
%18 = load i32, i32* @O_CLOEXEC
%19 = or i32 %18, %17
%20 = tail call i32 @open(i8* %16, i32 %19)
%21 = icmp eq i32 %20, -1
br i1 %21, label %22, label %26
22: ; preds = %13
%23 = load i32, i32* @stderr
%24 = load i8*, i8** %15
%25 = tail call i32 (i32, i8*, ...) @fprintf(i32 %23, i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i8* %24)
br label %69
26: ; preds = %13
%27 = call i32 @read(i32 %20, i8* %14, i32 6)
%28 = icmp eq i32 %27, 6
br i1 %28, label %33, label %29
29: ; preds = %26
%30 = load i32, i32* @stderr
%31 = tail call i32 (i32, i8*, ...) @fprintf(i32 %30, i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.1, i64 0, i64 0))
%32 = tail call i32 @close(i32 %20)
br label %69
33: ; preds = %26
%34 = bitcast [6 x i8]* %6 to <4 x i8>*
%35 = load <4 x i8>, <4 x i8>* %34
%36 = freeze <4 x i8> %35
%37 = bitcast <4 x i8> %36 to i32
%38 = icmp eq i32 %37, 1484404733
%39 = getelementptr inbounds [6 x i8], [6 x i8]* %6, i64 0, i64 4
%40 = load i8, i8* %39
%41 = icmp eq i8 %40, 90
%42 = select i1 %38, i1 %41, i1 false
%43 = getelementptr inbounds [6 x i8], [6 x i8]* %6, i64 0, i64 5
%44 = load i8, i8* %43
%45 = icmp eq i8 %44, 0
%46 = select i1 %42, i1 %45, i1 false
br i1 %46, label %52, label %47
47: ; preds = %33
%48 = extractelement <4 x i8> %36, i64 0
%49 = icmp eq i8 %48, 31
br i1 %49, label %50, label %56
50: ; preds = %47
%51 = extractelement <4 x i8> %36, i64 1
switch i8 %51, label %56 [
i8 -98, label %52
i8 -117, label %52
]
52: ; preds = %50, %50, %33
%53 = phi i8* [ getelementptr inbounds ([31 x i8], [31 x i8]* @.str.2, i64 0, i64 0), %33 ], [ getelementptr inbounds ([29 x i8], [29 x i8]* @.str.3, i64 0, i64 0), %50 ], [ getelementptr inbounds ([29 x i8], [29 x i8]* @.str.3, i64 0, i64 0), %50 ]
%54 = load i8*, i8** %15
%55 = call i32 @snprintf(i8* %8, i32 512, i8* %53, i8* %54)
br label %56
56: ; preds = %52, %50, %47
%57 = load i8, i8* %8
%58 = icmp eq i8 %57, 0
br i1 %58, label %66, label %59
59: ; preds = %56
%60 = call i32* @popen(i8* %8, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.4, i64 0, i64 0))
%61 = icmp eq i32* %60, null
br i1 %61, label %62, label %70
62: ; preds = %59
%63 = load i32, i32* @stderr
%64 = call i32 (i32, i8*, ...) @fprintf(i32 %63, i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.5, i64 0, i64 0), i8* %8)
%65 = call i32 @close(i32 %20)
br label %69
66: ; preds = %56
%67 = load i8*, i8** %15
%68 = call i32* @fopen(i8* %67, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.4, i64 0, i64 0))
br label %70
69: ; preds = %22, %29, %62
br label %358
70: ; preds = %59, %66
%71 = phi i32* [ %60, %59 ], [ %68, %66 ]
%72 = call i32 @close(i32 %20)
%73 = call i32 @memset(i8* %7, i32 0, i32 4176)
%74 = getelementptr inbounds [4176 x i8], [4176 x i8]* %3, i64 0, i64 80
%75 = getelementptr inbounds [4176 x i8], [4176 x i8]* %3, i64 0, i64 4096
%76 = call i32 @fread(i8* %74, i32 1, i32 4096, i32* %71)
%77 = icmp slt i32 %76, 1
br i1 %77, label %203, label %78
78: ; preds = %70, %198
%79 = phi i32 [ %201, %198 ], [ %76, %70 ]
%80 = zext i32 %79 to i64
br label %81
81: ; preds = %78, %185
%82 = phi i64 [ 0, %78 ], [ %86, %185 ]
%83 = getelementptr inbounds [4176 x i8], [4176 x i8]* %3, i64 0, i64 %82
%84 = load i8, i8* %83
%85 = icmp eq i8 %84, 76
%86 = add nuw nsw i64 %82, 1
br i1 %85, label %87, label %185
87: ; preds = %81
%88 = getelementptr inbounds [4176 x i8], [4176 x i8]* %3, i64 0, i64 %86
%89 = load i8, i8* %88
%90 = icmp eq i8 %89, 105
br i1 %90, label %91, label %185
91: ; preds = %87
%92 = add nuw nsw i64 %82, 2
%93 = getelementptr inbounds [4176 x i8], [4176 x i8]* %3, i64 0, i64 %92
%94 = load i8, i8* %93
%95 = icmp eq i8 %94, 110
br i1 %95, label %96, label %185
96: ; preds = %91
%97 = add nuw nsw i64 %82, 3
%98 = getelementptr inbounds [4176 x i8], [4176 x i8]* %3, i64 0, i64 %97
%99 = load i8, i8* %98
%100 = icmp eq i8 %99, 117
br i1 %100, label %101, label %185
101: ; preds = %96
%102 = add nuw nsw i64 %82, 4
%103 = getelementptr inbounds [4176 x i8], [4176 x i8]* %3, i64 0, i64 %102
%104 = load i8, i8* %103
%105 = icmp eq i8 %104, 120
br i1 %105, label %106, label %185
106: ; preds = %101
%107 = add nuw nsw i64 %82, 5
%108 = getelementptr inbounds [4176 x i8], [4176 x i8]* %3, i64 0, i64 %107
%109 = load i8, i8* %108
%110 = icmp eq i8 %109, 32
br i1 %110, label %111, label %185
111: ; preds = %106
%112 = add nuw nsw i64 %82, 6
%113 = getelementptr inbounds [4176 x i8], [4176 x i8]* %3, i64 0, i64 %112
%114 = load i8, i8* %113
%115 = icmp eq i8 %114, 118
br i1 %115, label %116, label %185
116: ; preds = %111
%117 = add nuw nsw i64 %82, 7
%118 = getelementptr inbounds [4176 x i8], [4176 x i8]* %3, i64 0, i64 %117
%119 = load i8, i8* %118
%120 = icmp eq i8 %119, 101
br i1 %120, label %121, label %185
121: ; preds = %116
%122 = add nuw nsw i64 %82, 8
%123 = getelementptr inbounds [4176 x i8], [4176 x i8]* %3, i64 0, i64 %122
%124 = load i8, i8* %123
%125 = icmp eq i8 %124, 114
br i1 %125, label %126, label %185
126: ; preds = %121
%127 = add nuw nsw i64 %82, 9
%128 = getelementptr inbounds [4176 x i8], [4176 x i8]* %3, i64 0, i64 %127
%129 = load i8, i8* %128
%130 = icmp eq i8 %129, 115
br i1 %130, label %131, label %185
131: ; preds = %126
%132 = add nuw nsw i64 %82, 10
%133 = getelementptr inbounds [4176 x i8], [4176 x i8]* %3, i64 0, i64 %132
%134 = load i8, i8* %133
%135 = icmp eq i8 %134, 105
br i1 %135, label %136, label %185
136: ; preds = %131
%137 = add nuw nsw i64 %82, 11
%138 = getelementptr inbounds [4176 x i8], [4176 x i8]* %3, i64 0, i64 %137
%139 = load i8, i8* %138
%140 = icmp eq i8 %139, 111
br i1 %140, label %141, label %185
141: ; preds = %136
%142 = add nuw nsw i64 %82, 12
%143 = getelementptr inbounds [4176 x i8], [4176 x i8]* %3, i64 0, i64 %142
%144 = load i8, i8* %143
%145 = icmp eq i8 %144, 110
br i1 %145, label %146, label %185
146: ; preds = %141
%147 = add nuw nsw i64 %82, 13
%148 = getelementptr inbounds [4176 x i8], [4176 x i8]* %3, i64 0, i64 %147
%149 = load i8, i8* %148
%150 = icmp eq i8 %149, 32
br i1 %150, label %151, label %185
151: ; preds = %146
%152 = add nuw nsw i64 %82, 14
%153 = getelementptr inbounds [4176 x i8], [4176 x i8]* %3, i64 0, i64 %152
%154 = load i8, i8* %153
%155 = icmp eq i8 %154, 0
br i1 %155, label %185, label %156
156: ; preds = %151
%157 = add nuw nsw i64 %82, 17
%158 = getelementptr inbounds [4176 x i8], [4176 x i8]* %3, i64 0, i64 %157
%159 = load i8, i8* %158
%160 = icmp eq i8 %159, 0
br i1 %160, label %185, label %161
161: ; preds = %156
%162 = add nuw nsw i64 %82, 15
br label %163
163: ; preds = %182, %161
%164 = phi i64 [ %184, %182 ], [ %162, %161 ]
%165 = phi i32 [ %183, %182 ], [ 0, %161 ]
%166 = getelementptr inbounds [4176 x i8], [4176 x i8]* %3, i64 0, i64 %164
%167 = load i8, i8* %166
switch i8 %167, label %170 [
i8 32, label %187
i8 46, label %168
]
168: ; preds = %163
%169 = add nsw i32 %165, 1
br label %182
170: ; preds = %163
%171 = icmp slt i32 %165, 2
br i1 %171, label %172, label %175
172: ; preds = %170
%173 = call i32 @isdigit(i8 signext %167)
%174 = icmp eq i32 %173, 0
br i1 %174, label %178, label %182
175: ; preds = %170
%176 = call i32 @my_is_alnum_punct(i8 signext %167)
%177 = icmp eq i32 %176, 0
br i1 %177, label %178, label %182
178: ; preds = %172, %175
%179 = sext i8 %167 to i32
%180 = load i32, i32* @stderr
%181 = call i32 (i32, i8*, ...) @fprintf(i32 %180, i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str.6, i64 0, i64 0), i32 %179)
br label %187
182: ; preds = %168, %175, %172
%183 = phi i32 [ %165, %172 ], [ %165, %175 ], [ %169, %168 ]
%184 = add nuw i64 %164, 1
br label %163
185: ; preds = %81, %87, %91, %96, %101, %106, %111, %116, %121, %126, %131, %136, %141, %146, %151, %156
%186 = icmp eq i64 %86, %80
br i1 %186, label %196, label %81
187: ; preds = %163, %178
%188 = add nuw i64 %82, 14
%189 = and i64 %188, 4294967295
br label %190
190: ; preds = %190, %187
%191 = phi i64 [ %195, %190 ], [ %189, %187 ]
%192 = getelementptr inbounds [4176 x i8], [4176 x i8]* %3, i64 0, i64 %191
%193 = load i8, i8* %192
%194 = icmp eq i8 %193, 32
%195 = add nuw i64 %191, 1
br i1 %194, label %343, label %190
196: ; preds = %185
%197 = icmp slt i32 %79, 4096
br i1 %197, label %203, label %198
198: ; preds = %196
%199 = call i32 @memcpy(i8* %7, i8* %75, i32 80)
%200 = call i32 @memset(i8* %74, i32 0, i32 4096)
%201 = call i32 @fread(i8* %74, i32 1, i32 4096, i32* %71)
%202 = icmp slt i32 %201, 1
br i1 %202, label %203, label %78
203: ; preds = %196, %198, %70
%204 = load i32, i32* @SEEK_SET
%205 = call i32 @fseek(i32* %71, i64 514, i32 %204)
%206 = icmp eq i32 %205, 0
br i1 %206, label %207, label %256
207: ; preds = %203
%208 = call i32 @fread(i8* %7, i32 1, i32 4, i32* %71)
%209 = icmp eq i32 %208, 4
%210 = load i8, i8* %7
%211 = icmp eq i8 %210, 72
%212 = select i1 %209, i1 %211, i1 false
%213 = getelementptr inbounds [4176 x i8], [4176 x i8]* %3, i64 0, i64 1
%214 = load i8, i8* %213
%215 = icmp eq i8 %214, 100
%216 = select i1 %212, i1 %215, i1 false
%217 = getelementptr inbounds [4176 x i8], [4176 x i8]* %3, i64 0, i64 2
%218 = load i8, i8* %217
%219 = icmp eq i8 %218, 114
%220 = select i1 %216, i1 %219, i1 false
%221 = getelementptr inbounds [4176 x i8], [4176 x i8]* %3, i64 0, i64 3
%222 = load i8, i8* %221
%223 = icmp eq i8 %222, 83
%224 = select i1 %220, i1 %223, i1 false
br i1 %224, label %225, label %256
225: ; preds = %207
%226 = load i32, i32* @SEEK_SET
%227 = call i32 @fseek(i32* %71, i64 526, i32 %226)
%228 = icmp eq i32 %227, 0
br i1 %228, label %229, label %256
229: ; preds = %225
%230 = call i32 @fread(i8* %7, i32 1, i32 2, i32* %71)
%231 = icmp eq i32 %230, 2
br i1 %231, label %232, label %256
232: ; preds = %229
%233 = load i8, i8* %7
%234 = zext i8 %233 to i64
%235 = or i64 %234, 512
%236 = load i8, i8* %213
%237 = zext i8 %236 to i64
%238 = shl nuw nsw i64 %237, 8
%239 = add nuw nsw i64 %235, %238
%240 = load i32, i32* @SEEK_SET
%241 = call i32 @fseek(i32* %71, i64 %239, i32 %240)
%242 = icmp eq i32 %241, 0
br i1 %242, label %243, label %256
243: ; preds = %232
%244 = call i32 @fread(i8* %7, i32 1, i32 80, i32* %71)
%245 = icmp eq i32 %244, 80
br i1 %245, label %246, label %256
246: ; preds = %243
store i8 0, i8* %74
br label %247
247: ; preds = %251, %246
%248 = phi i8* [ %7, %246 ], [ %252, %251 ]
%249 = load i8, i8* %248
switch i8 %249, label %251 [
i8 0, label %253
i8 32, label %250
]
250: ; preds = %247
store i8 0, i8* %248
br label %253
251: ; preds = %247
%252 = getelementptr inbounds i8, i8* %248, i64 1
br label %247
253: ; preds = %247, %250
%254 = load i8, i8* %7
%255 = icmp eq i8 %254, 0
br i1 %255, label %256, label %347
256: ; preds = %203, %225, %229, %207, %232, %243, %253
%257 = load i32, i32* @SEEK_SET
%258 = call i32 @fseek(i32* %71, i64 65544, i32 %257)
%259 = icmp eq i32 %258, 0
br i1 %259, label %260, label %350
260: ; preds = %256
%261 = call i32 @fread(i8* %7, i32 1, i32 6, i32* %71)
%262 = icmp eq i32 %261, 6
%263 = load i8, i8* %7
%264 = icmp eq i8 %263, 83
%265 = select i1 %262, i1 %264, i1 false
%266 = getelementptr inbounds [4176 x i8], [4176 x i8]* %3, i64 0, i64 1
%267 = load i8, i8* %266
%268 = icmp eq i8 %267, 51
%269 = select i1 %265, i1 %268, i1 false
%270 = getelementptr inbounds [4176 x i8], [4176 x i8]* %3, i64 0, i64 2
%271 = load i8, i8* %270
%272 = icmp eq i8 %271, 57
%273 = select i1 %269, i1 %272, i1 false
%274 = getelementptr inbounds [4176 x i8], [4176 x i8]* %3, i64 0, i64 3
%275 = load i8, i8* %274
%276 = icmp eq i8 %275, 48
%277 = select i1 %273, i1 %276, i1 false
%278 = getelementptr inbounds [4176 x i8], [4176 x i8]* %3, i64 0, i64 4
%279 = load i8, i8* %278
%280 = icmp eq i8 %279, 69
%281 = select i1 %277, i1 %280, i1 false
%282 = getelementptr inbounds [4176 x i8], [4176 x i8]* %3, i64 0, i64 5
%283 = load i8, i8* %282
%284 = icmp eq i8 %283, 80
%285 = select i1 %281, i1 %284, i1 false
br i1 %285, label %286, label %350
286: ; preds = %260
%287 = load i32, i32* @SEEK_SET
%288 = call i32 @fseek(i32* %71, i64 66600, i32 %287)
%289 = icmp eq i32 %288, 0
br i1 %289, label %290, label %350
290: ; preds = %286
%291 = call i32 @fread(i8* %7, i32 1, i32 8, i32* %71)
%292 = icmp eq i32 %291, 8
br i1 %292, label %293, label %350
293: ; preds = %290
%294 = getelementptr inbounds [4176 x i8], [4176 x i8]* %3, i64 0, i64 7
%295 = load i8, i8* %294
%296 = zext i8 %295 to i32
%297 = getelementptr inbounds [4176 x i8], [4176 x i8]* %3, i64 0, i64 6
%298 = load i8, i8* %297
%299 = zext i8 %298 to i32
%300 = shl nuw nsw i32 %299, 8
%301 = or i32 %300, %296
%302 = load i8, i8* %282
%303 = zext i8 %302 to i32
%304 = shl nuw nsw i32 %303, 16
%305 = or i32 %301, %304
%306 = load i8, i8* %278
%307 = zext i8 %306 to i32
%308 = shl nuw i32 %307, 24
%309 = or i32 %305, %308
%310 = sext i32 %309 to i64
%311 = load i8, i8* %274
%312 = zext i8 %311 to i64
%313 = shl nuw nsw i64 %312, 32
%314 = add nsw i64 %313, %310
%315 = load i8, i8* %270
%316 = zext i8 %315 to i64
%317 = shl nuw nsw i64 %316, 40
%318 = add nsw i64 %314, %317
%319 = load i8, i8* %266
%320 = zext i8 %319 to i64
%321 = shl nuw nsw i64 %320, 48
%322 = add nsw i64 %318, %321
%323 = load i8, i8* %7
%324 = zext i8 %323 to i64
%325 = shl nuw i64 %324, 56
%326 = add i64 %322, %325
%327 = load i32, i32* @SEEK_SET
%328 = call i32 @fseek(i32* %71, i64 %326, i32 %327)
%329 = icmp eq i32 %328, 0
br i1 %329, label %330, label %350
330: ; preds = %293
%331 = call i32 @fread(i8* %7, i32 1, i32 80, i32* %71)
%332 = icmp eq i32 %331, 80
br i1 %332, label %333, label %350
333: ; preds = %330
store i8 0, i8* %74
br label %334
334: ; preds = %338, %333
%335 = phi i8* [ %7, %333 ], [ %339, %338 ]
%336 = load i8, i8* %335
switch i8 %336, label %338 [
i8 0, label %340
i8 32, label %337
]
337: ; preds = %334
store i8 0, i8* %335
br label %340
338: ; preds = %334
%339 = getelementptr inbounds i8, i8* %335, i64 1
br label %334
340: ; preds = %334, %337
%341 = load i8, i8* %7
%342 = icmp eq i8 %341, 0
br i1 %342, label %350, label %347
343: ; preds = %190
%344 = and i64 %191, 4294967295
%345 = getelementptr inbounds [4176 x i8], [4176 x i8]* %3, i64 0, i64 %344
store i8 0, i8* %345
%346 = getelementptr inbounds [4176 x i8], [4176 x i8]* %3, i64 0, i64 %189
br label %347
347: ; preds = %340, %253, %343
%348 = phi i8* [ %346, %343 ], [ %7, %253 ], [ %7, %340 ]
%349 = call i32 @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.7, i64 0, i64 0), i8* %348)
br label %350
350: ; preds = %347, %293, %330, %340, %256, %260, %286, %290
%351 = phi i32 [ 1, %293 ], [ 1, %330 ], [ 1, %340 ], [ 1, %256 ], [ 1, %260 ], [ 1, %286 ], [ 1, %290 ], [ 0, %347 ]
%352 = load i8, i8* %8
%353 = icmp eq i8 %352, 0
br i1 %353, label %356, label %354
354: ; preds = %350
%355 = call i32 @pclose(i32* %71)
br label %358
356: ; preds = %350
%357 = call i32 @fclose(i32* %71)
br label %358
358: ; preds = %354, %356, %69, %10
%359 = phi i32 [ 1, %10 ], [ 1, %69 ], [ %351, %356 ], [ %351, %354 ]
ret i32 %359
}