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

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
int /*<<< orphan*/ addstr(char *);
int /*<<< orphan*/ move(int, int);
int /*<<< orphan*/ strcpy(char *, char *);
void draw_symbol(int x, int y, char ch) {
  char icon[2][4], (*iconrow)[4] = icon;
  switch (ch) {
  case ' ':
    strcpy(*iconrow++, "   ");
    strcpy(*iconrow, "   ");
    break;
  case '#':
    strcpy(*iconrow++, "###");
    strcpy(*iconrow, "###");
    break;
  case '<':
    strcpy(*iconrow++, "<--");
    strcpy(*iconrow, "<--");
    break;
  case '>':
    strcpy(*iconrow++, "-->");
    strcpy(*iconrow, "-->");
    break;
  case 'O':
    strcpy(*iconrow++, "/^\\");
    strcpy(*iconrow, "\\_/");
    break;
  case ':':
    strcpy(*iconrow++, ". .");
    strcpy(*iconrow, " . ");
    break;
  case '/':
    strcpy(*iconrow++, " _/");
    strcpy(*iconrow, "/  ");
    break;
  case '\\':
    strcpy(*iconrow++, "\\_ ");
    strcpy(*iconrow, "  \\");
    break;
  case '*':
    strcpy(*iconrow++, "/$\\");
    strcpy(*iconrow, "\\$/");
    break;
  case '=':
    strcpy(*iconrow++, "=-=");
    strcpy(*iconrow, "-=-");
    break;
  case '@':
    strcpy(*iconrow++, " o ");
    strcpy(*iconrow, "<|>");
    break;
  case '~':
    strcpy(*iconrow++, "\\|/");
    strcpy(*iconrow, "/|\\");
    break;
  case 't':
  case 'T':
    strcpy(*iconrow++, "(*)");
    strcpy(*iconrow, "(*)");
    break;
  case 'X':
    strcpy(*iconrow++, "Way");
    strcpy(*iconrow, "Out");
    break;
  case '!':
    strcpy(*iconrow++, " I ");
    strcpy(*iconrow, " o ");
    break;
  case 'M':
    strcpy(*iconrow++, "}o{");
    strcpy(*iconrow, "/^\\");
    break;
  case 'S':
    strcpy(*iconrow++, "-o-");
    strcpy(*iconrow, "/*\\");
    break;
  case '^':
    strcpy(*iconrow++, "/~\\");
    strcpy(*iconrow, "\\_X");
    break;
  case 'C':
    strcpy(*iconrow++, "   ");
    strcpy(*iconrow, "<O>");
    break;
  case '+':
    strcpy(*iconrow++, "TTT");
    strcpy(*iconrow, "III");
    break;
  case '_':
    strcpy(*iconrow++, "_|_");
    strcpy(*iconrow, "_|_");
    break;
  case 'B':
    strcpy(*iconrow++, "/\\*");
    strcpy(*iconrow, "\\/ ");
    break;
  case '%':
    strcpy(*iconrow++, "Ba\\");
    strcpy(*iconrow, "\\ng");
    break;
  default:
    strcpy(*iconrow++, "OoO");
    strcpy(*iconrow, "oOo");
    break;
  };
  move(y + 1, x + 1);
  iconrow--;
  addstr(*iconrow++);
  move(y + 2, x + 1);
  addstr(*iconrow);
}


x86 assembly (clang, -O0):
<draw_symbol>:
push   %rbp
mov    %rsp,%rbp
sub    $0x30,%rsp
mov    %dl,%al
mov    %edi,-0x4(%rbp)
mov    %esi,-0x8(%rbp)
mov    %al,-0x9(%rbp)
lea    -0x11(%rbp),%rax
mov    %rax,-0x20(%rbp)
movsbl -0x9(%rbp),%eax
add    $0xffffffe0,%eax
mov    %eax,%ecx
mov    %rcx,-0x28(%rbp)
sub    $0x5e,%eax
ja     15c5 <draw_symbol+0x495>
mov    -0x28(%rbp),%rax
lea    0xe94(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
mov    -0x20(%rbp),%rdi
mov    %rdi,%rax
add    $0x4,%rax
mov    %rax,-0x20(%rbp)
lea    0xff1(%rip),%rsi
call   1030 <strcpy@plt>
mov    -0x20(%rbp),%rdi
lea    0xfe1(%rip),%rsi
call   1030 <strcpy@plt>
jmp    15f0 <draw_symbol+0x4c0>
mov    -0x20(%rbp),%rdi
mov    %rdi,%rax
add    $0x4,%rax
mov    %rax,-0x20(%rbp)
lea    0xfc5(%rip),%rsi
call   1030 <strcpy@plt>
mov    -0x20(%rbp),%rdi
lea    0xfb5(%rip),%rsi
call   1030 <strcpy@plt>
jmp    15f0 <draw_symbol+0x4c0>
mov    -0x20(%rbp),%rdi
mov    %rdi,%rax
add    $0x4,%rax
mov    %rax,-0x20(%rbp)
lea    0xf99(%rip),%rsi
call   1030 <strcpy@plt>
mov    -0x20(%rbp),%rdi
lea    0xf89(%rip),%rsi
call   1030 <strcpy@plt>
jmp    15f0 <draw_symbol+0x4c0>
mov    -0x20(%rbp),%rdi
mov    %rdi,%rax
add    $0x4,%rax
mov    %rax,-0x20(%rbp)
lea    0xf6d(%rip),%rsi
call   1030 <strcpy@plt>
mov    -0x20(%rbp),%rdi
lea    0xf5d(%rip),%rsi
call   1030 <strcpy@plt>
jmp    15f0 <draw_symbol+0x4c0>
mov    -0x20(%rbp),%rdi
mov    %rdi,%rax
add    $0x4,%rax
mov    %rax,-0x20(%rbp)
lea    0xf41(%rip),%rsi
call   1030 <strcpy@plt>
mov    -0x20(%rbp),%rdi
lea    0xf35(%rip),%rsi
call   1030 <strcpy@plt>
jmp    15f0 <draw_symbol+0x4c0>
mov    -0x20(%rbp),%rdi
mov    %rdi,%rax
add    $0x4,%rax
mov    %rax,-0x20(%rbp)
lea    0xf19(%rip),%rsi
call   1030 <strcpy@plt>
mov    -0x20(%rbp),%rdi
lea    0xf0d(%rip),%rsi
call   1030 <strcpy@plt>
jmp    15f0 <draw_symbol+0x4c0>
mov    -0x20(%rbp),%rdi
mov    %rdi,%rax
add    $0x4,%rax
mov    %rax,-0x20(%rbp)
lea    0xef1(%rip),%rsi
call   1030 <strcpy@plt>
mov    -0x20(%rbp),%rdi
lea    0xee5(%rip),%rsi
call   1030 <strcpy@plt>
jmp    15f0 <draw_symbol+0x4c0>
mov    -0x20(%rbp),%rdi
mov    %rdi,%rax
add    $0x4,%rax
mov    %rax,-0x20(%rbp)
lea    0xec9(%rip),%rsi
call   1030 <strcpy@plt>
mov    -0x20(%rbp),%rdi
lea    0xebd(%rip),%rsi
call   1030 <strcpy@plt>
jmp    15f0 <draw_symbol+0x4c0>
mov    -0x20(%rbp),%rdi
mov    %rdi,%rax
add    $0x4,%rax
mov    %rax,-0x20(%rbp)
lea    0xea1(%rip),%rsi
call   1030 <strcpy@plt>
mov    -0x20(%rbp),%rdi
lea    0xe95(%rip),%rsi
call   1030 <strcpy@plt>
jmp    15f0 <draw_symbol+0x4c0>
mov    -0x20(%rbp),%rdi
mov    %rdi,%rax
add    $0x4,%rax
mov    %rax,-0x20(%rbp)
lea    0xe79(%rip),%rsi
call   1030 <strcpy@plt>
mov    -0x20(%rbp),%rdi
lea    0xe6d(%rip),%rsi
call   1030 <strcpy@plt>
jmp    15f0 <draw_symbol+0x4c0>
mov    -0x20(%rbp),%rdi
mov    %rdi,%rax
add    $0x4,%rax
mov    %rax,-0x20(%rbp)
lea    0xe51(%rip),%rsi
call   1030 <strcpy@plt>
mov    -0x20(%rbp),%rdi
lea    0xe45(%rip),%rsi
call   1030 <strcpy@plt>
jmp    15f0 <draw_symbol+0x4c0>
mov    -0x20(%rbp),%rdi
mov    %rdi,%rax
add    $0x4,%rax
mov    %rax,-0x20(%rbp)
lea    0xe29(%rip),%rsi
call   1030 <strcpy@plt>
mov    -0x20(%rbp),%rdi
lea    0xe1d(%rip),%rsi
call   1030 <strcpy@plt>
jmp    15f0 <draw_symbol+0x4c0>
mov    -0x20(%rbp),%rdi
mov    %rdi,%rax
add    $0x4,%rax
mov    %rax,-0x20(%rbp)
lea    0xe01(%rip),%rsi
call   1030 <strcpy@plt>
mov    -0x20(%rbp),%rdi
lea    0xdf1(%rip),%rsi
call   1030 <strcpy@plt>
jmp    15f0 <draw_symbol+0x4c0>
mov    -0x20(%rbp),%rdi
mov    %rdi,%rax
add    $0x4,%rax
mov    %rax,-0x20(%rbp)
lea    0xdd5(%rip),%rsi
call   1030 <strcpy@plt>
mov    -0x20(%rbp),%rdi
lea    0xdc9(%rip),%rsi
call   1030 <strcpy@plt>
jmp    15f0 <draw_symbol+0x4c0>
mov    -0x20(%rbp),%rdi
mov    %rdi,%rax
add    $0x4,%rax
mov    %rax,-0x20(%rbp)
lea    0xdad(%rip),%rsi
call   1030 <strcpy@plt>
mov    -0x20(%rbp),%rdi
lea    0xd81(%rip),%rsi
call   1030 <strcpy@plt>
jmp    15f0 <draw_symbol+0x4c0>
mov    -0x20(%rbp),%rdi
mov    %rdi,%rax
add    $0x4,%rax
mov    %rax,-0x20(%rbp)
lea    0xd81(%rip),%rsi
call   1030 <strcpy@plt>
mov    -0x20(%rbp),%rdi
lea    0xd21(%rip),%rsi
call   1030 <strcpy@plt>
jmp    15f0 <draw_symbol+0x4c0>
mov    -0x20(%rbp),%rdi
mov    %rdi,%rax
add    $0x4,%rax
mov    %rax,-0x20(%rbp)
lea    0xd55(%rip),%rsi
call   1030 <strcpy@plt>
mov    -0x20(%rbp),%rdi
lea    0xd49(%rip),%rsi
call   1030 <strcpy@plt>
jmp    15f0 <draw_symbol+0x4c0>
mov    -0x20(%rbp),%rdi
mov    %rdi,%rax
add    $0x4,%rax
mov    %rax,-0x20(%rbp)
lea    0xd2d(%rip),%rsi
call   1030 <strcpy@plt>
mov    -0x20(%rbp),%rdi
lea    0xd21(%rip),%rsi
call   1030 <strcpy@plt>
jmp    15f0 <draw_symbol+0x4c0>
mov    -0x20(%rbp),%rdi
mov    %rdi,%rax
add    $0x4,%rax
mov    %rax,-0x20(%rbp)
lea    0xc91(%rip),%rsi
call   1030 <strcpy@plt>
mov    -0x20(%rbp),%rdi
lea    0xcf5(%rip),%rsi
call   1030 <strcpy@plt>
jmp    15f0 <draw_symbol+0x4c0>
mov    -0x20(%rbp),%rdi
mov    %rdi,%rax
add    $0x4,%rax
mov    %rax,-0x20(%rbp)
lea    0xcd9(%rip),%rsi
call   1030 <strcpy@plt>
mov    -0x20(%rbp),%rdi
lea    0xccd(%rip),%rsi
call   1030 <strcpy@plt>
jmp    15f0 <draw_symbol+0x4c0>
mov    -0x20(%rbp),%rdi
mov    %rdi,%rax
add    $0x4,%rax
mov    %rax,-0x20(%rbp)
lea    0xcb1(%rip),%rsi
call   1030 <strcpy@plt>
mov    -0x20(%rbp),%rdi
lea    0xca1(%rip),%rsi
call   1030 <strcpy@plt>
jmp    15f0 <draw_symbol+0x4c0>
mov    -0x20(%rbp),%rdi
mov    %rdi,%rax
add    $0x4,%rax
mov    %rax,-0x20(%rbp)
lea    0xc85(%rip),%rsi
call   1030 <strcpy@plt>
mov    -0x20(%rbp),%rdi
lea    0xc79(%rip),%rsi
call   1030 <strcpy@plt>
jmp    15f0 <draw_symbol+0x4c0>
mov    -0x20(%rbp),%rdi
mov    %rdi,%rax
add    $0x4,%rax
mov    %rax,-0x20(%rbp)
lea    0xc5d(%rip),%rsi
call   1030 <strcpy@plt>
mov    -0x20(%rbp),%rdi
lea    0xc51(%rip),%rsi
call   1030 <strcpy@plt>
jmp    15f0 <draw_symbol+0x4c0>
mov    -0x20(%rbp),%rdi
mov    %rdi,%rax
add    $0x4,%rax
mov    %rax,-0x20(%rbp)
lea    0xc35(%rip),%rsi
call   1030 <strcpy@plt>
mov    -0x20(%rbp),%rdi
lea    0xc29(%rip),%rsi
call   1030 <strcpy@plt>
mov    -0x8(%rbp),%edi
add    $0x1,%edi
mov    -0x4(%rbp),%esi
add    $0x1,%esi
call   1050 <move@plt>
mov    -0x20(%rbp),%rax
add    $0xfffffffffffffffc,%rax
mov    %rax,-0x20(%rbp)
mov    -0x20(%rbp),%rdi
mov    %rdi,%rax
add    $0x4,%rax
mov    %rax,-0x20(%rbp)
call   1040 <addstr@plt>
mov    -0x8(%rbp),%edi
add    $0x2,%edi
mov    -0x4(%rbp),%esi
add    $0x1,%esi
call   1050 <move@plt>
mov    -0x20(%rbp),%rdi
call   1040 <addstr@plt>
add    $0x30,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<draw_symbol>:
push   %rbp
push   %r15
push   %r14
push   %r12
push   %rbx
sub    $0x10,%rsp
mov    %esi,%r14d
mov    %edi,%r12d
add    $0xffffffe0,%edx
cmp    $0x5e,%edx
ja     1186 <draw_symbol+0x56>
lea    0x102b(%rip),%rsi
lea    0xea8(%rip),%rax
movslq (%rax,%rdx,4),%rcx
add    %rax,%rcx
mov    %rsi,%r15
jmp    *%rcx
lea    0x1061(%rip),%rsi
mov    %rsi,%r15
jmp    12e1 <draw_symbol+0x1b1>
lea    0x1042(%rip),%r15
lea    0x1057(%rip),%rsi
jmp    12e1 <draw_symbol+0x1b1>
lea    0x1087(%rip),%r15
lea    0x107c(%rip),%rsi
jmp    12e1 <draw_symbol+0x1b1>
lea    0xfe0(%rip),%rsi
mov    %rsi,%r15
jmp    12e1 <draw_symbol+0x1b1>
lea    0x105d(%rip),%r15
lea    0x1052(%rip),%rsi
jmp    12e1 <draw_symbol+0x1b1>
lea    0xfee(%rip),%r15
lea    0xfe3(%rip),%rsi
jmp    12e1 <draw_symbol+0x1b1>
lea    0x1023(%rip),%r15
lea    0x1018(%rip),%rsi
jmp    12e1 <draw_symbol+0x1b1>
lea    0xfb8(%rip),%r15
lea    0xfad(%rip),%rsi
jmp    12e1 <draw_symbol+0x1b1>
lea    0xf9d(%rip),%r15
lea    0xf92(%rip),%rsi
jmp    12e1 <draw_symbol+0x1b1>
lea    0xf76(%rip),%rsi
mov    %rsi,%r15
jmp    12e1 <draw_symbol+0x1b1>
lea    0xf9b(%rip),%r15
lea    0xf90(%rip),%rsi
jmp    12e1 <draw_symbol+0x1b1>
lea    0xf58(%rip),%rsi
mov    %rsi,%r15
jmp    12e1 <draw_symbol+0x1b1>
lea    0xf81(%rip),%r15
lea    0xf76(%rip),%rsi
jmp    12e1 <draw_symbol+0x1b1>
lea    0xfb2(%rip),%r15
lea    0xfa7(%rip),%rsi
jmp    12e1 <draw_symbol+0x1b1>
lea    0xf8b(%rip),%r15
jmp    12e1 <draw_symbol+0x1b1>
lea    0xf1e(%rip),%r15
lea    0xf67(%rip),%rsi
jmp    12e1 <draw_symbol+0x1b1>
lea    0xf12(%rip),%r15
lea    0xf07(%rip),%rsi
jmp    12e1 <draw_symbol+0x1b1>
lea    0xf56(%rip),%r15
lea    0xf4b(%rip),%rsi
jmp    12e1 <draw_symbol+0x1b1>
lea    0xf36(%rip),%r15
lea    0xf2b(%rip),%rsi
jmp    12e1 <draw_symbol+0x1b1>
lea    0xefa(%rip),%r15
lea    0xeef(%rip),%rsi
jmp    12e1 <draw_symbol+0x1b1>
lea    0xf2e(%rip),%r15
lea    0xf23(%rip),%rsi
jmp    12e1 <draw_symbol+0x1b1>
lea    0xf2e(%rip),%rsi
mov    %rsi,%r15
jmp    12e1 <draw_symbol+0x1b1>
lea    0xeee(%rip),%r15
lea    0xee3(%rip),%rsi
lea    0x8(%rsp),%rbx
mov    %rbx,%rdi
call   1030 <strcpy@plt>
lea    0xc(%rsp),%rbp
mov    %rbp,%rdi
mov    %r15,%rsi
call   1030 <strcpy@plt>
lea    0x1(%r14),%edi
add    $0x1,%r12d
mov    %r12d,%esi
call   1050 <move@plt>
mov    %rbx,%rdi
call   1040 <addstr@plt>
add    $0x2,%r14d
mov    %r14d,%edi
mov    %r12d,%esi
call   1050 <move@plt>
mov    %rbp,%rdi
call   1040 <addstr@plt>
add    $0x10,%rsp
pop    %rbx
pop    %r12
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
@.str = [4 x i8] c" \00"
@.str.1 = [4 x i8] c"###\00"
@.str.2 = [4 x i8] c"<--\00"
@.str.3 = [4 x i8] c"-->\00"
@.str.4 = [4 x i8] c"/^\\\00"
@.str.5 = [4 x i8] c"\\_/\00"
@.str.6 = [4 x i8] c". .\00"
@.str.7 = [4 x i8] c" . \00"
@.str.8 = [4 x i8] c" _/\00"
@.str.9 = [4 x i8] c"/ \00"
@.str.10 = [4 x i8] c"\\_ \00"
@.str.11 = [4 x i8] c" \\\00"
@.str.12 = [4 x i8] c"/$\\\00"
@.str.13 = [4 x i8] c"\\$/\00"
@.str.14 = [4 x i8] c"=-=\00"
@.str.15 = [4 x i8] c"-=-\00"
@.str.16 = [4 x i8] c" o \00"
@.str.17 = [4 x i8] c"<|>\00"
@.str.18 = [4 x i8] c"\\|/\00"
@.str.19 = [4 x i8] c"/|\\\00"
@.str.20 = [4 x i8] c"(*)\00"
@.str.21 = [4 x i8] c"Way\00"
@.str.22 = [4 x i8] c"Out\00"
@.str.23 = [4 x i8] c" I \00"
@.str.24 = [4 x i8] c"}o{\00"
@.str.25 = [4 x i8] c"-o-\00"
@.str.26 = [4 x i8] c"/*\\\00"
@.str.27 = [4 x i8] c"/~\\\00"
@.str.28 = [4 x i8] c"\\_X\00"
@.str.29 = [4 x i8] c"<O>\00"
@.str.30 = [4 x i8] c"TTT\00"
@.str.31 = [4 x i8] c"III\00"
@.str.32 = [4 x i8] c"_|_\00"
@.str.33 = [4 x i8] c"/\\*\00"
@.str.34 = [4 x i8] c"\\/ \00"
@.str.35 = [4 x i8] c"Ba\\\00"
@.str.36 = [4 x i8] c"\\ng\00"
@.str.37 = [4 x i8] c"OoO\00"
@.str.38 = [4 x i8] c"oOo\00"
define void @draw_symbol(i32 %0, i32 %1, i8 signext %2) {
%4 = alloca i32
%5 = alloca i32
%6 = alloca i8
%7 = alloca [2 x [4 x i8]]
%8 = alloca [4 x i8]*
store i32 %0, i32* %4
store i32 %1, i32* %5
store i8 %2, i8* %6
%9 = getelementptr inbounds [2 x [4 x i8]], [2 x [4 x i8]]* %7, i64 0, i64 0
store [4 x i8]* %9, [4 x i8]** %8
%10 = load i8, i8* %6
%11 = sext i8 %10 to i32
switch i32 %11, label %196 [
i32 32, label %12
i32 35, label %20
i32 60, label %28
i32 62, label %36
i32 79, label %44
i32 58, label %52
i32 47, label %60
i32 92, label %68
i32 42, label %76
i32 61, label %84
i32 64, label %92
i32 126, label %100
i32 116, label %108
i32 84, label %108
i32 88, label %116
i32 33, label %124
i32 77, label %132
i32 83, label %140
i32 94, label %148
i32 67, label %156
i32 43, label %164
i32 95, label %172
i32 66, label %180
i32 37, label %188
]
12: ; preds = %3
%13 = load [4 x i8]*, [4 x i8]** %8
%14 = getelementptr inbounds [4 x i8], [4 x i8]* %13, i32 1
store [4 x i8]* %14, [4 x i8]** %8
%15 = getelementptr inbounds [4 x i8], [4 x i8]* %13, i64 0, i64 0
%16 = call i32 @strcpy(i8* %15, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i64 0, i64 0))
%17 = load [4 x i8]*, [4 x i8]** %8
%18 = getelementptr inbounds [4 x i8], [4 x i8]* %17, i64 0, i64 0
%19 = call i32 @strcpy(i8* %18, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i64 0, i64 0))
br label %204
20: ; preds = %3
%21 = load [4 x i8]*, [4 x i8]** %8
%22 = getelementptr inbounds [4 x i8], [4 x i8]* %21, i32 1
store [4 x i8]* %22, [4 x i8]** %8
%23 = getelementptr inbounds [4 x i8], [4 x i8]* %21, i64 0, i64 0
%24 = call i32 @strcpy(i8* %23, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.1, i64 0, i64 0))
%25 = load [4 x i8]*, [4 x i8]** %8
%26 = getelementptr inbounds [4 x i8], [4 x i8]* %25, i64 0, i64 0
%27 = call i32 @strcpy(i8* %26, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.1, i64 0, i64 0))
br label %204
28: ; preds = %3
%29 = load [4 x i8]*, [4 x i8]** %8
%30 = getelementptr inbounds [4 x i8], [4 x i8]* %29, i32 1
store [4 x i8]* %30, [4 x i8]** %8
%31 = getelementptr inbounds [4 x i8], [4 x i8]* %29, i64 0, i64 0
%32 = call i32 @strcpy(i8* %31, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.2, i64 0, i64 0))
%33 = load [4 x i8]*, [4 x i8]** %8
%34 = getelementptr inbounds [4 x i8], [4 x i8]* %33, i64 0, i64 0
%35 = call i32 @strcpy(i8* %34, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.2, i64 0, i64 0))
br label %204
36: ; preds = %3
%37 = load [4 x i8]*, [4 x i8]** %8
%38 = getelementptr inbounds [4 x i8], [4 x i8]* %37, i32 1
store [4 x i8]* %38, [4 x i8]** %8
%39 = getelementptr inbounds [4 x i8], [4 x i8]* %37, i64 0, i64 0
%40 = call i32 @strcpy(i8* %39, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.3, i64 0, i64 0))
%41 = load [4 x i8]*, [4 x i8]** %8
%42 = getelementptr inbounds [4 x i8], [4 x i8]* %41, i64 0, i64 0
%43 = call i32 @strcpy(i8* %42, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.3, i64 0, i64 0))
br label %204
44: ; preds = %3
%45 = load [4 x i8]*, [4 x i8]** %8
%46 = getelementptr inbounds [4 x i8], [4 x i8]* %45, i32 1
store [4 x i8]* %46, [4 x i8]** %8
%47 = getelementptr inbounds [4 x i8], [4 x i8]* %45, i64 0, i64 0
%48 = call i32 @strcpy(i8* %47, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.4, i64 0, i64 0))
%49 = load [4 x i8]*, [4 x i8]** %8
%50 = getelementptr inbounds [4 x i8], [4 x i8]* %49, i64 0, i64 0
%51 = call i32 @strcpy(i8* %50, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.5, i64 0, i64 0))
br label %204
52: ; preds = %3
%53 = load [4 x i8]*, [4 x i8]** %8
%54 = getelementptr inbounds [4 x i8], [4 x i8]* %53, i32 1
store [4 x i8]* %54, [4 x i8]** %8
%55 = getelementptr inbounds [4 x i8], [4 x i8]* %53, i64 0, i64 0
%56 = call i32 @strcpy(i8* %55, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.6, i64 0, i64 0))
%57 = load [4 x i8]*, [4 x i8]** %8
%58 = getelementptr inbounds [4 x i8], [4 x i8]* %57, i64 0, i64 0
%59 = call i32 @strcpy(i8* %58, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.7, i64 0, i64 0))
br label %204
60: ; preds = %3
%61 = load [4 x i8]*, [4 x i8]** %8
%62 = getelementptr inbounds [4 x i8], [4 x i8]* %61, i32 1
store [4 x i8]* %62, [4 x i8]** %8
%63 = getelementptr inbounds [4 x i8], [4 x i8]* %61, i64 0, i64 0
%64 = call i32 @strcpy(i8* %63, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.8, i64 0, i64 0))
%65 = load [4 x i8]*, [4 x i8]** %8
%66 = getelementptr inbounds [4 x i8], [4 x i8]* %65, i64 0, i64 0
%67 = call i32 @strcpy(i8* %66, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.9, i64 0, i64 0))
br label %204
68: ; preds = %3
%69 = load [4 x i8]*, [4 x i8]** %8
%70 = getelementptr inbounds [4 x i8], [4 x i8]* %69, i32 1
store [4 x i8]* %70, [4 x i8]** %8
%71 = getelementptr inbounds [4 x i8], [4 x i8]* %69, i64 0, i64 0
%72 = call i32 @strcpy(i8* %71, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.10, i64 0, i64 0))
%73 = load [4 x i8]*, [4 x i8]** %8
%74 = getelementptr inbounds [4 x i8], [4 x i8]* %73, i64 0, i64 0
%75 = call i32 @strcpy(i8* %74, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.11, i64 0, i64 0))
br label %204
76: ; preds = %3
%77 = load [4 x i8]*, [4 x i8]** %8
%78 = getelementptr inbounds [4 x i8], [4 x i8]* %77, i32 1
store [4 x i8]* %78, [4 x i8]** %8
%79 = getelementptr inbounds [4 x i8], [4 x i8]* %77, i64 0, i64 0
%80 = call i32 @strcpy(i8* %79, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.12, i64 0, i64 0))
%81 = load [4 x i8]*, [4 x i8]** %8
%82 = getelementptr inbounds [4 x i8], [4 x i8]* %81, i64 0, i64 0
%83 = call i32 @strcpy(i8* %82, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.13, i64 0, i64 0))
br label %204
84: ; preds = %3
%85 = load [4 x i8]*, [4 x i8]** %8
%86 = getelementptr inbounds [4 x i8], [4 x i8]* %85, i32 1
store [4 x i8]* %86, [4 x i8]** %8
%87 = getelementptr inbounds [4 x i8], [4 x i8]* %85, i64 0, i64 0
%88 = call i32 @strcpy(i8* %87, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.14, i64 0, i64 0))
%89 = load [4 x i8]*, [4 x i8]** %8
%90 = getelementptr inbounds [4 x i8], [4 x i8]* %89, i64 0, i64 0
%91 = call i32 @strcpy(i8* %90, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.15, i64 0, i64 0))
br label %204
92: ; preds = %3
%93 = load [4 x i8]*, [4 x i8]** %8
%94 = getelementptr inbounds [4 x i8], [4 x i8]* %93, i32 1
store [4 x i8]* %94, [4 x i8]** %8
%95 = getelementptr inbounds [4 x i8], [4 x i8]* %93, i64 0, i64 0
%96 = call i32 @strcpy(i8* %95, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.16, i64 0, i64 0))
%97 = load [4 x i8]*, [4 x i8]** %8
%98 = getelementptr inbounds [4 x i8], [4 x i8]* %97, i64 0, i64 0
%99 = call i32 @strcpy(i8* %98, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.17, i64 0, i64 0))
br label %204
100: ; preds = %3
%101 = load [4 x i8]*, [4 x i8]** %8
%102 = getelementptr inbounds [4 x i8], [4 x i8]* %101, i32 1
store [4 x i8]* %102, [4 x i8]** %8
%103 = getelementptr inbounds [4 x i8], [4 x i8]* %101, i64 0, i64 0
%104 = call i32 @strcpy(i8* %103, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.18, i64 0, i64 0))
%105 = load [4 x i8]*, [4 x i8]** %8
%106 = getelementptr inbounds [4 x i8], [4 x i8]* %105, i64 0, i64 0
%107 = call i32 @strcpy(i8* %106, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.19, i64 0, i64 0))
br label %204
108: ; preds = %3, %3
%109 = load [4 x i8]*, [4 x i8]** %8
%110 = getelementptr inbounds [4 x i8], [4 x i8]* %109, i32 1
store [4 x i8]* %110, [4 x i8]** %8
%111 = getelementptr inbounds [4 x i8], [4 x i8]* %109, i64 0, i64 0
%112 = call i32 @strcpy(i8* %111, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.20, i64 0, i64 0))
%113 = load [4 x i8]*, [4 x i8]** %8
%114 = getelementptr inbounds [4 x i8], [4 x i8]* %113, i64 0, i64 0
%115 = call i32 @strcpy(i8* %114, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.20, i64 0, i64 0))
br label %204
116: ; preds = %3
%117 = load [4 x i8]*, [4 x i8]** %8
%118 = getelementptr inbounds [4 x i8], [4 x i8]* %117, i32 1
store [4 x i8]* %118, [4 x i8]** %8
%119 = getelementptr inbounds [4 x i8], [4 x i8]* %117, i64 0, i64 0
%120 = call i32 @strcpy(i8* %119, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.21, i64 0, i64 0))
%121 = load [4 x i8]*, [4 x i8]** %8
%122 = getelementptr inbounds [4 x i8], [4 x i8]* %121, i64 0, i64 0
%123 = call i32 @strcpy(i8* %122, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.22, i64 0, i64 0))
br label %204
124: ; preds = %3
%125 = load [4 x i8]*, [4 x i8]** %8
%126 = getelementptr inbounds [4 x i8], [4 x i8]* %125, i32 1
store [4 x i8]* %126, [4 x i8]** %8
%127 = getelementptr inbounds [4 x i8], [4 x i8]* %125, i64 0, i64 0
%128 = call i32 @strcpy(i8* %127, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.23, i64 0, i64 0))
%129 = load [4 x i8]*, [4 x i8]** %8
%130 = getelementptr inbounds [4 x i8], [4 x i8]* %129, i64 0, i64 0
%131 = call i32 @strcpy(i8* %130, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.16, i64 0, i64 0))
br label %204
132: ; preds = %3
%133 = load [4 x i8]*, [4 x i8]** %8
%134 = getelementptr inbounds [4 x i8], [4 x i8]* %133, i32 1
store [4 x i8]* %134, [4 x i8]** %8
%135 = getelementptr inbounds [4 x i8], [4 x i8]* %133, i64 0, i64 0
%136 = call i32 @strcpy(i8* %135, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.24, i64 0, i64 0))
%137 = load [4 x i8]*, [4 x i8]** %8
%138 = getelementptr inbounds [4 x i8], [4 x i8]* %137, i64 0, i64 0
%139 = call i32 @strcpy(i8* %138, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.4, i64 0, i64 0))
br label %204
140: ; preds = %3
%141 = load [4 x i8]*, [4 x i8]** %8
%142 = getelementptr inbounds [4 x i8], [4 x i8]* %141, i32 1
store [4 x i8]* %142, [4 x i8]** %8
%143 = getelementptr inbounds [4 x i8], [4 x i8]* %141, i64 0, i64 0
%144 = call i32 @strcpy(i8* %143, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.25, i64 0, i64 0))
%145 = load [4 x i8]*, [4 x i8]** %8
%146 = getelementptr inbounds [4 x i8], [4 x i8]* %145, i64 0, i64 0
%147 = call i32 @strcpy(i8* %146, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.26, i64 0, i64 0))
br label %204
148: ; preds = %3
%149 = load [4 x i8]*, [4 x i8]** %8
%150 = getelementptr inbounds [4 x i8], [4 x i8]* %149, i32 1
store [4 x i8]* %150, [4 x i8]** %8
%151 = getelementptr inbounds [4 x i8], [4 x i8]* %149, i64 0, i64 0
%152 = call i32 @strcpy(i8* %151, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.27, i64 0, i64 0))
%153 = load [4 x i8]*, [4 x i8]** %8
%154 = getelementptr inbounds [4 x i8], [4 x i8]* %153, i64 0, i64 0
%155 = call i32 @strcpy(i8* %154, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.28, i64 0, i64 0))
br label %204
156: ; preds = %3
%157 = load [4 x i8]*, [4 x i8]** %8
%158 = getelementptr inbounds [4 x i8], [4 x i8]* %157, i32 1
store [4 x i8]* %158, [4 x i8]** %8
%159 = getelementptr inbounds [4 x i8], [4 x i8]* %157, i64 0, i64 0
%160 = call i32 @strcpy(i8* %159, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i64 0, i64 0))
%161 = load [4 x i8]*, [4 x i8]** %8
%162 = getelementptr inbounds [4 x i8], [4 x i8]* %161, i64 0, i64 0
%163 = call i32 @strcpy(i8* %162, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.29, i64 0, i64 0))
br label %204
164: ; preds = %3
%165 = load [4 x i8]*, [4 x i8]** %8
%166 = getelementptr inbounds [4 x i8], [4 x i8]* %165, i32 1
store [4 x i8]* %166, [4 x i8]** %8
%167 = getelementptr inbounds [4 x i8], [4 x i8]* %165, i64 0, i64 0
%168 = call i32 @strcpy(i8* %167, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.30, i64 0, i64 0))
%169 = load [4 x i8]*, [4 x i8]** %8
%170 = getelementptr inbounds [4 x i8], [4 x i8]* %169, i64 0, i64 0
%171 = call i32 @strcpy(i8* %170, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.31, i64 0, i64 0))
br label %204
172: ; preds = %3
%173 = load [4 x i8]*, [4 x i8]** %8
%174 = getelementptr inbounds [4 x i8], [4 x i8]* %173, i32 1
store [4 x i8]* %174, [4 x i8]** %8
%175 = getelementptr inbounds [4 x i8], [4 x i8]* %173, i64 0, i64 0
%176 = call i32 @strcpy(i8* %175, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.32, i64 0, i64 0))
%177 = load [4 x i8]*, [4 x i8]** %8
%178 = getelementptr inbounds [4 x i8], [4 x i8]* %177, i64 0, i64 0
%179 = call i32 @strcpy(i8* %178, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.32, i64 0, i64 0))
br label %204
180: ; preds = %3
%181 = load [4 x i8]*, [4 x i8]** %8
%182 = getelementptr inbounds [4 x i8], [4 x i8]* %181, i32 1
store [4 x i8]* %182, [4 x i8]** %8
%183 = getelementptr inbounds [4 x i8], [4 x i8]* %181, i64 0, i64 0
%184 = call i32 @strcpy(i8* %183, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.33, i64 0, i64 0))
%185 = load [4 x i8]*, [4 x i8]** %8
%186 = getelementptr inbounds [4 x i8], [4 x i8]* %185, i64 0, i64 0
%187 = call i32 @strcpy(i8* %186, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.34, i64 0, i64 0))
br label %204
188: ; preds = %3
%189 = load [4 x i8]*, [4 x i8]** %8
%190 = getelementptr inbounds [4 x i8], [4 x i8]* %189, i32 1
store [4 x i8]* %190, [4 x i8]** %8
%191 = getelementptr inbounds [4 x i8], [4 x i8]* %189, i64 0, i64 0
%192 = call i32 @strcpy(i8* %191, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.35, i64 0, i64 0))
%193 = load [4 x i8]*, [4 x i8]** %8
%194 = getelementptr inbounds [4 x i8], [4 x i8]* %193, i64 0, i64 0
%195 = call i32 @strcpy(i8* %194, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.36, i64 0, i64 0))
br label %204
196: ; preds = %3
%197 = load [4 x i8]*, [4 x i8]** %8
%198 = getelementptr inbounds [4 x i8], [4 x i8]* %197, i32 1
store [4 x i8]* %198, [4 x i8]** %8
%199 = getelementptr inbounds [4 x i8], [4 x i8]* %197, i64 0, i64 0
%200 = call i32 @strcpy(i8* %199, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.37, i64 0, i64 0))
%201 = load [4 x i8]*, [4 x i8]** %8
%202 = getelementptr inbounds [4 x i8], [4 x i8]* %201, i64 0, i64 0
%203 = call i32 @strcpy(i8* %202, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.38, i64 0, i64 0))
br label %204
204: ; preds = %196, %188, %180, %172, %164, %156, %148, %140, %132, %124, %116, %108, %100, %92, %84, %76, %68, %60, %52, %44, %36, %28, %20, %12
%205 = load i32, i32* %5
%206 = add nsw i32 %205, 1
%207 = load i32, i32* %4
%208 = add nsw i32 %207, 1
%209 = call i32 @move(i32 %206, i32 %208)
%210 = load [4 x i8]*, [4 x i8]** %8
%211 = getelementptr inbounds [4 x i8], [4 x i8]* %210, i32 -1
store [4 x i8]* %211, [4 x i8]** %8
%212 = load [4 x i8]*, [4 x i8]** %8
%213 = getelementptr inbounds [4 x i8], [4 x i8]* %212, i32 1
store [4 x i8]* %213, [4 x i8]** %8
%214 = getelementptr inbounds [4 x i8], [4 x i8]* %212, i64 0, i64 0
%215 = call i32 @addstr(i8* %214)
%216 = load i32, i32* %5
%217 = add nsw i32 %216, 2
%218 = load i32, i32* %4
%219 = add nsw i32 %218, 1
%220 = call i32 @move(i32 %217, i32 %219)
%221 = load [4 x i8]*, [4 x i8]** %8
%222 = getelementptr inbounds [4 x i8], [4 x i8]* %221, i64 0, i64 0
%223 = call i32 @addstr(i8* %222)
ret void
}

LLVM IR (-O2):
@.str = [4 x i8] c" \00"
@.str.1 = [4 x i8] c"###\00"
@.str.2 = [4 x i8] c"<--\00"
@.str.3 = [4 x i8] c"-->\00"
@.str.4 = [4 x i8] c"/^\\\00"
@.str.5 = [4 x i8] c"\\_/\00"
@.str.6 = [4 x i8] c". .\00"
@.str.7 = [4 x i8] c" . \00"
@.str.8 = [4 x i8] c" _/\00"
@.str.9 = [4 x i8] c"/ \00"
@.str.10 = [4 x i8] c"\\_ \00"
@.str.11 = [4 x i8] c" \\\00"
@.str.12 = [4 x i8] c"/$\\\00"
@.str.13 = [4 x i8] c"\\$/\00"
@.str.14 = [4 x i8] c"=-=\00"
@.str.15 = [4 x i8] c"-=-\00"
@.str.16 = [4 x i8] c" o \00"
@.str.17 = [4 x i8] c"<|>\00"
@.str.18 = [4 x i8] c"\\|/\00"
@.str.19 = [4 x i8] c"/|\\\00"
@.str.20 = [4 x i8] c"(*)\00"
@.str.21 = [4 x i8] c"Way\00"
@.str.22 = [4 x i8] c"Out\00"
@.str.23 = [4 x i8] c" I \00"
@.str.24 = [4 x i8] c"}o{\00"
@.str.25 = [4 x i8] c"-o-\00"
@.str.26 = [4 x i8] c"/*\\\00"
@.str.27 = [4 x i8] c"/~\\\00"
@.str.28 = [4 x i8] c"\\_X\00"
@.str.29 = [4 x i8] c"<O>\00"
@.str.30 = [4 x i8] c"TTT\00"
@.str.31 = [4 x i8] c"III\00"
@.str.32 = [4 x i8] c"_|_\00"
@.str.33 = [4 x i8] c"/\\*\00"
@.str.34 = [4 x i8] c"\\/ \00"
@.str.35 = [4 x i8] c"Ba\\\00"
@.str.36 = [4 x i8] c"\\ng\00"
@.str.37 = [4 x i8] c"OoO\00"
@.str.38 = [4 x i8] c"oOo\00"
define void @draw_symbol(i32 %0, i32 %1, i8 signext %2) {
%4 = alloca [2 x [4 x i8]]
%5 = getelementptr inbounds [2 x [4 x i8]], [2 x [4 x i8]]* %4, i64 0, i64 0, i64 0
%6 = sext i8 %2 to i32
switch i32 %6, label %29 [
i32 32, label %30
i32 35, label %7
i32 60, label %8
i32 62, label %9
i32 79, label %10
i32 58, label %11
i32 47, label %12
i32 92, label %13
i32 42, label %14
i32 61, label %15
i32 64, label %16
i32 126, label %17
i32 116, label %18
i32 84, label %18
i32 88, label %19
i32 33, label %20
i32 77, label %21
i32 83, label %22
i32 94, label %23
i32 67, label %24
i32 43, label %25
i32 95, label %26
i32 66, label %27
i32 37, label %28
]
7: ; preds = %3
br label %30
8: ; preds = %3
br label %30
9: ; preds = %3
br label %30
10: ; preds = %3
br label %30
11: ; preds = %3
br label %30
12: ; preds = %3
br label %30
13: ; preds = %3
br label %30
14: ; preds = %3
br label %30
15: ; preds = %3
br label %30
16: ; preds = %3
br label %30
17: ; preds = %3
br label %30
18: ; preds = %3, %3
br label %30
19: ; preds = %3
br label %30
20: ; preds = %3
br label %30
21: ; preds = %3
br label %30
22: ; preds = %3
br label %30
23: ; preds = %3
br label %30
24: ; preds = %3
br label %30
25: ; preds = %3
br label %30
26: ; preds = %3
br label %30
27: ; preds = %3
br label %30
28: ; preds = %3
br label %30
29: ; preds = %3
br label %30
30: ; preds = %3, %29, %28, %27, %26, %25, %24, %23, %22, %21, %20, %19, %18, %17, %16, %15, %14, %13, %12, %11, %10, %9, %8, %7
%31 = phi i8* [ getelementptr inbounds ([4 x i8], [4 x i8]* @.str.37, i64 0, i64 0), %29 ], [ getelementptr inbounds ([4 x i8], [4 x i8]* @.str.35, i64 0, i64 0), %28 ], [ getelementptr inbounds ([4 x i8], [4 x i8]* @.str.33, i64 0, i64 0), %27 ], [ getelementptr inbounds ([4 x i8], [4 x i8]* @.str.32, i64 0, i64 0), %26 ], [ getelementptr inbounds ([4 x i8], [4 x i8]* @.str.30, i64 0, i64 0), %25 ], [ getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i64 0, i64 0), %24 ], [ getelementptr inbounds ([4 x i8], [4 x i8]* @.str.27, i64 0, i64 0), %23 ], [ getelementptr inbounds ([4 x i8], [4 x i8]* @.str.25, i64 0, i64 0), %22 ], [ getelementptr inbounds ([4 x i8], [4 x i8]* @.str.24, i64 0, i64 0), %21 ], [ getelementptr inbounds ([4 x i8], [4 x i8]* @.str.23, i64 0, i64 0), %20 ], [ getelementptr inbounds ([4 x i8], [4 x i8]* @.str.21, i64 0, i64 0), %19 ], [ getelementptr inbounds ([4 x i8], [4 x i8]* @.str.20, i64 0, i64 0), %18 ], [ getelementptr inbounds ([4 x i8], [4 x i8]* @.str.18, i64 0, i64 0), %17 ], [ getelementptr inbounds ([4 x i8], [4 x i8]* @.str.16, i64 0, i64 0), %16 ], [ getelementptr inbounds ([4 x i8], [4 x i8]* @.str.14, i64 0, i64 0), %15 ], [ getelementptr inbounds ([4 x i8], [4 x i8]* @.str.12, i64 0, i64 0), %14 ], [ getelementptr inbounds ([4 x i8], [4 x i8]* @.str.10, i64 0, i64 0), %13 ], [ getelementptr inbounds ([4 x i8], [4 x i8]* @.str.8, i64 0, i64 0), %12 ], [ getelementptr inbounds ([4 x i8], [4 x i8]* @.str.6, i64 0, i64 0), %11 ], [ getelementptr inbounds ([4 x i8], [4 x i8]* @.str.4, i64 0, i64 0), %10 ], [ getelementptr inbounds ([4 x i8], [4 x i8]* @.str.3, i64 0, i64 0), %9 ], [ getelementptr inbounds ([4 x i8], [4 x i8]* @.str.2, i64 0, i64 0), %8 ], [ getelementptr inbounds ([4 x i8], [4 x i8]* @.str.1, i64 0, i64 0), %7 ], [ getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i64 0, i64 0), %3 ]
%32 = phi i8* [ getelementptr inbounds ([4 x i8], [4 x i8]* @.str.38, i64 0, i64 0), %29 ], [ getelementptr inbounds ([4 x i8], [4 x i8]* @.str.36, i64 0, i64 0), %28 ], [ getelementptr inbounds ([4 x i8], [4 x i8]* @.str.34, i64 0, i64 0), %27 ], [ getelementptr inbounds ([4 x i8], [4 x i8]* @.str.32, i64 0, i64 0), %26 ], [ getelementptr inbounds ([4 x i8], [4 x i8]* @.str.31, i64 0, i64 0), %25 ], [ getelementptr inbounds ([4 x i8], [4 x i8]* @.str.29, i64 0, i64 0), %24 ], [ getelementptr inbounds ([4 x i8], [4 x i8]* @.str.28, i64 0, i64 0), %23 ], [ getelementptr inbounds ([4 x i8], [4 x i8]* @.str.26, i64 0, i64 0), %22 ], [ getelementptr inbounds ([4 x i8], [4 x i8]* @.str.4, i64 0, i64 0), %21 ], [ getelementptr inbounds ([4 x i8], [4 x i8]* @.str.16, i64 0, i64 0), %20 ], [ getelementptr inbounds ([4 x i8], [4 x i8]* @.str.22, i64 0, i64 0), %19 ], [ getelementptr inbounds ([4 x i8], [4 x i8]* @.str.20, i64 0, i64 0), %18 ], [ getelementptr inbounds ([4 x i8], [4 x i8]* @.str.19, i64 0, i64 0), %17 ], [ getelementptr inbounds ([4 x i8], [4 x i8]* @.str.17, i64 0, i64 0), %16 ], [ getelementptr inbounds ([4 x i8], [4 x i8]* @.str.15, i64 0, i64 0), %15 ], [ getelementptr inbounds ([4 x i8], [4 x i8]* @.str.13, i64 0, i64 0), %14 ], [ getelementptr inbounds ([4 x i8], [4 x i8]* @.str.11, i64 0, i64 0), %13 ], [ getelementptr inbounds ([4 x i8], [4 x i8]* @.str.9, i64 0, i64 0), %12 ], [ getelementptr inbounds ([4 x i8], [4 x i8]* @.str.7, i64 0, i64 0), %11 ], [ getelementptr inbounds ([4 x i8], [4 x i8]* @.str.5, i64 0, i64 0), %10 ], [ getelementptr inbounds ([4 x i8], [4 x i8]* @.str.3, i64 0, i64 0), %9 ], [ getelementptr inbounds ([4 x i8], [4 x i8]* @.str.2, i64 0, i64 0), %8 ], [ getelementptr inbounds ([4 x i8], [4 x i8]* @.str.1, i64 0, i64 0), %7 ], [ getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i64 0, i64 0), %3 ]
%33 = call i32 @strcpy(i8* %5, i8* %31)
%34 = getelementptr inbounds [2 x [4 x i8]], [2 x [4 x i8]]* %4, i64 0, i64 1, i64 0
%35 = call i32 @strcpy(i8* %34, i8* %32)
%36 = add nsw i32 %1, 1
%37 = add nsw i32 %0, 1
%38 = call i32 @move(i32 %36, i32 %37)
%39 = call i32 @addstr(i8* %5)
%40 = add nsw i32 %1, 2
%41 = call i32 @move(i32 %40, i32 %37)
%42 = getelementptr inbounds [2 x [4 x i8]], [2 x [4 x i8]]* %4, i64 0, i64 1, i64 0
%43 = call i32 @addstr(i8* %42)
ret void
}