#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*/ antimagic(int *, int *, int *, int *);
int /*<<< orphan*/ bodyswitch(int *, int *, int *, int *, int *, int *, int *,
                              int *);
int /*<<< orphan*/ curse(int *, int *, int *, int *);
int /*<<< orphan*/ doubleattack(int *, int *, int *, int *);
int /*<<< orphan*/ escape(int *, int *, int *, int *, int *, int *, int *,
                          int *, int *, int *, int *, int *);
int /*<<< orphan*/ futureperception(int *, int *, int *, int *);
int /*<<< orphan*/ genieofluck(int *, int *, int *, int *, int *, int *, int *,
                               int *, int *, int *, int *, int *, int, int *);
int /*<<< orphan*/ getint(int *);
int /*<<< orphan*/ godvision(int *, int *, int *, int *, int /*<<< orphan*/);
int /*<<< orphan*/ healing(int *, int *, int *, int *, int *);
int /*<<< orphan*/ hellbomb(int *, int *, int *, int *, int, int *, int *);
int magiccount(int *, int *);
int /*<<< orphan*/ paralysis(int *, int *, int *, int *, int *);
int /*<<< orphan*/ printf(char *);
int /*<<< orphan*/ remotevision(int *, int *, int *, int *);
int /*<<< orphan*/ revelation(int *, int *, int *, int *);
int /*<<< orphan*/ stealingspirit(int *, int *, int *, int *, int *, int *,
                                  int *, int *, int *, int *, int *, int *,
                                  int *, int *, int *, char *, int *);
int /*<<< orphan*/ stonestatue(int *, int *, int *, int, int,
                               int /*<<< orphan*/);
int /*<<< orphan*/ superstrength(int *, int *, int *, int *);
int /*<<< orphan*/ teleport(int *, int *, int *, int *, int *, int *, int *,
                            int *, int *, int *, int *, int *, int);
void magic(int *hpmax, int *hpnow, int *aces, int *inv, int *slave, int *future,
           int *map, int *loot, int *vision, int *end, int *pos, int *floor,
           int *start, int *antimag, int *checkcurse, int combat, int *control,
           int *contator, int *modenemy, int *datt, int *modatt, int *nomag,
           char *s) {
  int v = magiccount(aces, inv);
  int k;
  if ((nomag) && (*nomag == 1)) {
    printf("You are exausted and can't do magic.\n");
    return;
  }
  if (v == 0) {
    printf("You don't have magic potions.\n");
    return;
  }
  if (v >= 1)
    printf("What spell do you want to cast?\n[0]: Nothing\n[1]: "
           "RemoteVision\n[2]: FuturePerception\n");
  if (v >= 2)
    printf("[3]: Healing\n");
  if ((v >= 3) && (combat == 1))
    printf("[4]: Escape\n");
  if (v >= 4) {
    if (combat == 1)
      printf("[5]: Paralysis\n[6]: DoubleAttack\n");
  }
  if (v >= 5) {
    if (combat == 1)
      printf("[7]: SuperStrength\n");
    printf("[8]: AntiMagic\n");
  }
  if ((v >= 6) && (combat == 1))
    printf("[9]: StealingSpirit\n");
  if (v >= 7)
    printf("[10]: BodySwitch\n");
  if (v >= 8)
    printf("[11]: Teleport\n");
  if (v >= 9)
    printf("[12]: Revelation\n[13]: HellBomb\n");
  if (v >= 10)
    printf("[14]: Curse\n");
  if (v >= 11)
    printf("[15]: GenieofLuck\n");
  if (v >= 15)
    printf("[16]: StoneStatue\n[17]: GodVision\n");
  getint(&k);
  if (k == 0)
    return;
  if ((k == 1) && (v >= 1))
    remotevision(aces, inv, map, nomag);
  else if ((k == 2) && (v >= 1))
    futureperception(aces, inv, future, nomag);
  else if ((k == 3) && (v >= 2))
    healing(hpmax, hpnow, aces, inv, nomag);
  else if ((k == 4) && (v >= 3) && (combat == 1))
    escape(aces, inv, future, map, loot, vision, pos, floor, start, control,
           antimag, checkcurse);
  else if ((k == 5) && (v >= 4) && (combat == 1))
    paralysis(aces, inv, contator, modenemy, nomag);
  else if ((k == 6) && (v >= 4) && (combat == 1))
    doubleattack(aces, inv, datt, nomag);
  else if ((k == 7) && (v >= 5) && (combat == 1))
    superstrength(aces, inv, modatt, nomag);
  else if ((k == 8) && (v >= 5))
    antimagic(aces, inv, antimag, nomag);
  else if ((k == 9) && (v >= 6) && (combat == 1))
    stealingspirit(hpmax, hpnow, aces, inv, slave, future, map, loot, vision,
                   end, pos, floor, start, antimag, checkcurse, s, control);
  else if ((k == 10) && (v >= 7))
    bodyswitch(aces, inv, future, map, pos, start, control, nomag);
  else if ((k == 11) && (v >= 8))
    teleport(aces, inv, future, map, loot, vision, pos, floor, start, control,
             antimag, checkcurse, combat);
  else if ((k == 12) && (v >= 9))
    revelation(aces, inv, vision, nomag);
  else if ((k == 13) && (v >= 9))
    hellbomb(aces, inv, map, pos, combat, start, nomag);
  else if ((k == 14) && (v >= 10))
    curse(aces, inv, checkcurse, nomag);
  else if ((k == 15) && (v >= 11))
    genieofluck(hpmax, hpnow, aces, inv, slave, future, map, loot, vision, end,
                pos, antimag, combat, nomag);
  else if ((k == 16) && (v >= 15))
    stonestatue(aces, inv, map, 6, combat, 0);
  else if ((k == 17) && (v >= 15))
    godvision(aces, inv, vision, nomag, 0);
  else
    printf("You can't do that!\n");
}


x86 assembly (clang, -O0):
<magic>:
push   %rbp
mov    %rsp,%rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0xb8,%rsp
mov    0x90(%rbp),%rax
mov    0x88(%rbp),%rax
mov    0x80(%rbp),%rax
mov    0x78(%rbp),%rax
mov    0x70(%rbp),%rax
mov    0x68(%rbp),%rax
mov    0x60(%rbp),%rax
mov    0x58(%rbp),%eax
mov    0x50(%rbp),%rax
mov    0x48(%rbp),%rax
mov    0x40(%rbp),%rax
mov    0x38(%rbp),%rax
mov    0x30(%rbp),%rax
mov    0x28(%rbp),%rax
mov    0x20(%rbp),%rax
mov    0x18(%rbp),%rax
mov    0x10(%rbp),%rax
mov    %rdi,-0x30(%rbp)
mov    %rsi,-0x38(%rbp)
mov    %rdx,-0x40(%rbp)
mov    %rcx,-0x48(%rbp)
mov    %r8,-0x50(%rbp)
mov    %r9,-0x58(%rbp)
mov    -0x40(%rbp),%rdi
mov    -0x48(%rbp),%rsi
call   1080 <magiccount@plt>
mov    %eax,-0x5c(%rbp)
cmpq   $0x0,0x88(%rbp)
je     12f7 <magic+0xb7>
mov    0x88(%rbp),%rax
cmpl   $0x1,(%rax)
jne    12f7 <magic+0xb7>
lea    0xd13(%rip),%rdi
call   1050 <printf@plt>
jmp    19ca <magic+0x78a>
cmpl   $0x0,-0x5c(%rbp)
jne    1312 <magic+0xd2>
lea    0xd1e(%rip),%rdi
call   1050 <printf@plt>
jmp    19ca <magic+0x78a>
cmpl   $0x1,-0x5c(%rbp)
jl     1328 <magic+0xe8>
lea    0xd22(%rip),%rdi
call   1050 <printf@plt>
cmpl   $0x2,-0x5c(%rbp)
jl     133e <magic+0xfe>
lea    0xd62(%rip),%rdi
call   1050 <printf@plt>
cmpl   $0x3,-0x5c(%rbp)
jl     135e <magic+0x11e>
cmpl   $0x1,0x58(%rbp)
jne    135e <magic+0x11e>
lea    0xd50(%rip),%rdi
call   1050 <printf@plt>
cmpl   $0x4,-0x5c(%rbp)
jl     1383 <magic+0x143>
cmpl   $0x1,0x58(%rbp)
jne    137e <magic+0x13e>
lea    0xd3d(%rip),%rdi
call   1050 <printf@plt>
jmp    1383 <magic+0x143>
cmpl   $0x5,-0x5c(%rbp)
jl     13af <magic+0x16f>
cmpl   $0x1,0x58(%rbp)
jne    13a3 <magic+0x163>
lea    0xd3a(%rip),%rdi
call   1050 <printf@plt>
lea    0xd42(%rip),%rdi
call   1050 <printf@plt>
cmpl   $0x6,-0x5c(%rbp)
jl     13cf <magic+0x18f>
cmpl   $0x1,0x58(%rbp)
jne    13cf <magic+0x18f>
lea    0xd32(%rip),%rdi
call   1050 <printf@plt>
cmpl   $0x7,-0x5c(%rbp)
jl     13e5 <magic+0x1a5>
lea    0xd31(%rip),%rdi
call   1050 <printf@plt>
cmpl   $0x8,-0x5c(%rbp)
jl     13fb <magic+0x1bb>
lea    0xd2d(%rip),%rdi
call   1050 <printf@plt>
cmpl   $0x9,-0x5c(%rbp)
jl     1411 <magic+0x1d1>
lea    0xd27(%rip),%rdi
call   1050 <printf@plt>
cmpl   $0xa,-0x5c(%rbp)
jl     1427 <magic+0x1e7>
lea    0xd32(%rip),%rdi
call   1050 <printf@plt>
cmpl   $0xb,-0x5c(%rbp)
jl     143d <magic+0x1fd>
lea    0xd29(%rip),%rdi
call   1050 <printf@plt>
cmpl   $0xf,-0x5c(%rbp)
jl     1453 <magic+0x213>
lea    0xd26(%rip),%rdi
call   1050 <printf@plt>
lea    -0x60(%rbp),%rdi
call   1070 <getint@plt>
cmpl   $0x0,-0x60(%rbp)
jne    146b <magic+0x22b>
jmp    19ca <magic+0x78a>
cmpl   $0x1,-0x60(%rbp)
jne    149c <magic+0x25c>
cmpl   $0x1,-0x5c(%rbp)
jl     149c <magic+0x25c>
mov    -0x40(%rbp),%rdi
mov    -0x48(%rbp),%rsi
mov    0x10(%rbp),%rdx
mov    0x88(%rbp),%rcx
call   1040 <remotevision@plt>
jmp    19ca <magic+0x78a>
cmpl   $0x2,-0x60(%rbp)
jne    14cd <magic+0x28d>
cmpl   $0x1,-0x5c(%rbp)
jl     14cd <magic+0x28d>
mov    -0x40(%rbp),%rdi
mov    -0x48(%rbp),%rsi
mov    -0x58(%rbp),%rdx
mov    0x88(%rbp),%rcx
call   10d0 <futureperception@plt>
jmp    19c5 <magic+0x785>
cmpl   $0x3,-0x60(%rbp)
jne    1502 <magic+0x2c2>
cmpl   $0x2,-0x5c(%rbp)
jl     1502 <magic+0x2c2>
mov    -0x30(%rbp),%rdi
mov    -0x38(%rbp),%rsi
mov    -0x40(%rbp),%rdx
mov    -0x48(%rbp),%rcx
mov    0x88(%rbp),%r8
call   1030 <healing@plt>
jmp    19c0 <magic+0x780>
cmpl   $0x4,-0x60(%rbp)
jne    1577 <magic+0x337>
cmpl   $0x3,-0x5c(%rbp)
jl     1577 <magic+0x337>
cmpl   $0x1,0x58(%rbp)
jne    1577 <magic+0x337>
mov    -0x40(%rbp),%rdi
mov    -0x48(%rbp),%rsi
mov    -0x58(%rbp),%rdx
mov    0x10(%rbp),%rcx
mov    0x18(%rbp),%r8
mov    0x20(%rbp),%r9
mov    0x30(%rbp),%r15
mov    0x38(%rbp),%r14
mov    0x40(%rbp),%rbx
mov    0x60(%rbp),%r11
mov    0x48(%rbp),%r10
mov    0x50(%rbp),%rax
mov    %r15,(%rsp)
mov    %r14,0x8(%rsp)
mov    %rbx,0x10(%rsp)
mov    %r11,0x18(%rsp)
mov    %r10,0x20(%rsp)
mov    %rax,0x28(%rsp)
call   1150 <escape@plt>
jmp    19bb <magic+0x77b>
cmpl   $0x5,-0x60(%rbp)
jne    15b6 <magic+0x376>
cmpl   $0x4,-0x5c(%rbp)
jl     15b6 <magic+0x376>
cmpl   $0x1,0x58(%rbp)
jne    15b6 <magic+0x376>
mov    -0x40(%rbp),%rdi
mov    -0x48(%rbp),%rsi
mov    0x68(%rbp),%rdx
mov    0x70(%rbp),%rcx
mov    0x88(%rbp),%r8
call   1130 <paralysis@plt>
jmp    19b6 <magic+0x776>
cmpl   $0x6,-0x60(%rbp)
jne    15f1 <magic+0x3b1>
cmpl   $0x4,-0x5c(%rbp)
jl     15f1 <magic+0x3b1>
cmpl   $0x1,0x58(%rbp)
jne    15f1 <magic+0x3b1>
mov    -0x40(%rbp),%rdi
mov    -0x48(%rbp),%rsi
mov    0x78(%rbp),%rdx
mov    0x88(%rbp),%rcx
call   1060 <doubleattack@plt>
jmp    19b1 <magic+0x771>
cmpl   $0x7,-0x60(%rbp)
jne    162f <magic+0x3ef>
cmpl   $0x5,-0x5c(%rbp)
jl     162f <magic+0x3ef>
cmpl   $0x1,0x58(%rbp)
jne    162f <magic+0x3ef>
mov    -0x40(%rbp),%rdi
mov    -0x48(%rbp),%rsi
mov    0x80(%rbp),%rdx
mov    0x88(%rbp),%rcx
call   1110 <superstrength@plt>
jmp    19ac <magic+0x76c>
cmpl   $0x8,-0x60(%rbp)
jne    1660 <magic+0x420>
cmpl   $0x5,-0x5c(%rbp)
jl     1660 <magic+0x420>
mov    -0x40(%rbp),%rdi
mov    -0x48(%rbp),%rsi
mov    0x48(%rbp),%rdx
mov    0x88(%rbp),%rcx
call   1090 <antimagic@plt>
jmp    19a7 <magic+0x767>
cmpl   $0x9,-0x60(%rbp)
jne    1725 <magic+0x4e5>
cmpl   $0x6,-0x5c(%rbp)
jl     1725 <magic+0x4e5>
cmpl   $0x1,0x58(%rbp)
jne    1725 <magic+0x4e5>
mov    -0x30(%rbp),%rdi
mov    -0x38(%rbp),%rsi
mov    -0x40(%rbp),%rdx
mov    -0x48(%rbp),%rcx
mov    -0x50(%rbp),%r8
mov    -0x58(%rbp),%r9
mov    0x10(%rbp),%rax
mov    %rax,-0x80(%rbp)
mov    0x18(%rbp),%rax
mov    %rax,-0x78(%rbp)
mov    0x20(%rbp),%rax
mov    %rax,-0x70(%rbp)
mov    0x28(%rbp),%r13
mov    0x30(%rbp),%r12
mov    0x38(%rbp),%r15
mov    0x40(%rbp),%r14
mov    0x48(%rbp),%rbx
mov    0x50(%rbp),%r11
mov    0x90(%rbp),%r10
mov    0x60(%rbp),%rax
mov    %rax,-0x68(%rbp)
mov    -0x80(%rbp),%rax
mov    %rax,(%rsp)
mov    -0x78(%rbp),%rax
mov    %rax,0x8(%rsp)
mov    -0x70(%rbp),%rax
mov    %rax,0x10(%rsp)
mov    -0x68(%rbp),%rax
mov    %r13,0x18(%rsp)
mov    %r12,0x20(%rsp)
mov    %r15,0x28(%rsp)
mov    %r14,0x30(%rsp)
mov    %rbx,0x38(%rsp)
mov    %r11,0x40(%rsp)
mov    %r10,0x48(%rsp)
mov    %rax,0x50(%rsp)
call   1140 <stealingspirit@plt>
jmp    19a2 <magic+0x762>
cmpl   $0xa,-0x60(%rbp)
jne    176f <magic+0x52f>
cmpl   $0x7,-0x5c(%rbp)
jl     176f <magic+0x52f>
mov    -0x40(%rbp),%rdi
mov    -0x48(%rbp),%rsi
mov    -0x58(%rbp),%rdx
mov    0x10(%rbp),%rcx
mov    0x30(%rbp),%r8
mov    0x40(%rbp),%r9
mov    0x60(%rbp),%r10
mov    0x88(%rbp),%rax
mov    %r10,(%rsp)
mov    %rax,0x8(%rsp)
call   10c0 <bodyswitch@plt>
jmp    199d <magic+0x75d>
cmpl   $0xb,-0x60(%rbp)
jne    17e1 <magic+0x5a1>
cmpl   $0x8,-0x5c(%rbp)
jl     17e1 <magic+0x5a1>
mov    -0x40(%rbp),%rdi
mov    -0x48(%rbp),%rsi
mov    -0x58(%rbp),%rdx
mov    0x10(%rbp),%rcx
mov    0x18(%rbp),%r8
mov    0x20(%rbp),%r9
mov    0x30(%rbp),%r12
mov    0x38(%rbp),%r15
mov    0x40(%rbp),%r14
mov    0x60(%rbp),%rbx
mov    0x48(%rbp),%r11
mov    0x50(%rbp),%r10
mov    0x58(%rbp),%eax
mov    %r12,(%rsp)
mov    %r15,0x8(%rsp)
mov    %r14,0x10(%rsp)
mov    %rbx,0x18(%rsp)
mov    %r11,0x20(%rsp)
mov    %r10,0x28(%rsp)
mov    %eax,0x30(%rsp)
call   10f0 <teleport@plt>
jmp    1998 <magic+0x758>
cmpl   $0xc,-0x60(%rbp)
jne    1812 <magic+0x5d2>
cmpl   $0x9,-0x5c(%rbp)
jl     1812 <magic+0x5d2>
mov    -0x40(%rbp),%rdi
mov    -0x48(%rbp),%rsi
mov    0x20(%rbp),%rdx
mov    0x88(%rbp),%rcx
call   1120 <revelation@plt>
jmp    1993 <magic+0x753>
cmpl   $0xd,-0x60(%rbp)
jne    1853 <magic+0x613>
cmpl   $0x9,-0x5c(%rbp)
jl     1853 <magic+0x613>
mov    -0x40(%rbp),%rdi
mov    -0x48(%rbp),%rsi
mov    0x10(%rbp),%rdx
mov    0x30(%rbp),%rcx
mov    0x58(%rbp),%r8d
mov    0x40(%rbp),%r9
mov    0x88(%rbp),%rax
mov    %rax,(%rsp)
call   10a0 <hellbomb@plt>
jmp    198e <magic+0x74e>
cmpl   $0xe,-0x60(%rbp)
jne    1884 <magic+0x644>
cmpl   $0xa,-0x5c(%rbp)
jl     1884 <magic+0x644>
mov    -0x40(%rbp),%rdi
mov    -0x48(%rbp),%rsi
mov    0x50(%rbp),%rdx
mov    0x88(%rbp),%rcx
call   1160 <curse@plt>
jmp    1989 <magic+0x749>
cmpl   $0xf,-0x60(%rbp)
jne    1904 <magic+0x6c4>
cmpl   $0xb,-0x5c(%rbp)
jl     1904 <magic+0x6c4>
mov    -0x30(%rbp),%rdi
mov    -0x38(%rbp),%rsi
mov    -0x40(%rbp),%rdx
mov    -0x48(%rbp),%rcx
mov    -0x50(%rbp),%r8
mov    -0x58(%rbp),%r9
mov    0x10(%rbp),%r13
mov    0x18(%rbp),%r12
mov    0x20(%rbp),%r15
mov    0x28(%rbp),%r14
mov    0x30(%rbp),%rbx
mov    0x48(%rbp),%r11
mov    0x58(%rbp),%r10d
mov    0x88(%rbp),%rax
mov    %r13,(%rsp)
mov    %r12,0x8(%rsp)
mov    %r15,0x10(%rsp)
mov    %r14,0x18(%rsp)
mov    %rbx,0x20(%rsp)
mov    %r11,0x28(%rsp)
mov    %r10d,0x30(%rsp)
mov    %rax,0x38(%rsp)
call   1100 <genieofluck@plt>
jmp    1984 <magic+0x744>
cmpl   $0x10,-0x60(%rbp)
jne    193a <magic+0x6fa>
cmpl   $0xf,-0x5c(%rbp)
jl     193a <magic+0x6fa>
mov    -0x40(%rbp),%rdi
mov    -0x48(%rbp),%rsi
mov    0x10(%rbp),%rdx
mov    0x58(%rbp),%r8d
mov    $0x6,%ecx
xor    %r9d,%r9d
call   10e0 <stonestatue@plt>
jmp    197f <magic+0x73f>
cmpl   $0x11,-0x60(%rbp)
jne    196e <magic+0x72e>
cmpl   $0xf,-0x5c(%rbp)
jl     196e <magic+0x72e>
mov    -0x40(%rbp),%rdi
mov    -0x48(%rbp),%rsi
mov    0x20(%rbp),%rdx
mov    0x88(%rbp),%rcx
xor    %r8d,%r8d
call   10b0 <godvision@plt>
jmp    197a <magic+0x73a>
lea    0x822(%rip),%rdi
call   1050 <printf@plt>
jmp    197f <magic+0x73f>
jmp    1984 <magic+0x744>
jmp    1989 <magic+0x749>
jmp    198e <magic+0x74e>
jmp    1993 <magic+0x753>
jmp    1998 <magic+0x758>
jmp    199d <magic+0x75d>
jmp    19a2 <magic+0x762>
jmp    19a7 <magic+0x767>
jmp    19ac <magic+0x76c>
jmp    19b1 <magic+0x771>
jmp    19b6 <magic+0x776>
jmp    19bb <magic+0x77b>
jmp    19c0 <magic+0x780>
jmp    19c5 <magic+0x785>
jmp    19ca <magic+0x78a>
add    $0xb8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

x86 assembly (clang, -O2):
<magic>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0xe8,%rsp
mov    %r9,0x40(%rsp)
mov    %r8,0xb0(%rsp)
mov    %rcx,%rbx
mov    %rdx,%r13
mov    %rsi,0x98(%rsp)
mov    %rdi,0x90(%rsp)
mov    0x1a0(%rsp),%rax
mov    %rax,0xc0(%rsp)
mov    0x198(%rsp),%r14
mov    0x190(%rsp),%rax
mov    %rax,0xc8(%rsp)
mov    0x188(%rsp),%rax
mov    %rax,0xd0(%rsp)
mov    0x180(%rsp),%rax
mov    %rax,0xe0(%rsp)
mov    0x178(%rsp),%rax
mov    %rax,0xd8(%rsp)
mov    0x170(%rsp),%rax
mov    %rax,0x78(%rsp)
mov    0x168(%rsp),%eax
mov    %rax,0x30(%rsp)
mov    0x160(%rsp),%rax
mov    %rax,0x70(%rsp)
mov    0x158(%rsp),%rax
mov    %rax,0x50(%rsp)
mov    0x150(%rsp),%rax
mov    %rax,0x48(%rsp)
mov    0x148(%rsp),%rax
mov    %rax,0x88(%rsp)
mov    0x140(%rsp),%r15
mov    0x138(%rsp),%rax
mov    %rax,0xb8(%rsp)
mov    0x130(%rsp),%rax
mov    %rax,0x38(%rsp)
mov    0x128(%rsp),%rax
mov    %rax,0x68(%rsp)
mov    0x120(%rsp),%rbp
mov    %rdx,%rdi
mov    %rcx,%rsi
call   1080 <magiccount@plt>
mov    %eax,%r12d
test   %r14,%r14
je     137b <magic+0x13b>
cmpl   $0x1,(%r14)
jne    137b <magic+0x13b>
lea    0xe00(%rip),%rdi
jmp    140e <magic+0x1ce>
test   %r12d,%r12d
je     1407 <magic+0x1c7>
mov    %rbp,0x80(%rsp)
mov    %r15,0xa8(%rsp)
mov    %rbx,0x60(%rsp)
jle    13ad <magic+0x16d>
lea    0xd61(%rip),%rdi
call   1030 <puts@plt>
cmp    $0x1,%r12d
jne    1424 <magic+0x1e4>
cmpl   $0x1,0x30(%rsp)
sete   %bl
movl   $0x0,0xc(%rsp)
movl   $0x0,0x14(%rsp)
movl   $0x0,0x1c(%rsp)
movl   $0x0,0x2c(%rsp)
xor    %ebp,%ebp
xor    %r15d,%r15d
movl   $0x0,0x5c(%rsp)
movl   $0x0,0x24(%rsp)
movl   $0x0,0x20(%rsp)
movl   $0x0,0x18(%rsp)
movl   $0x0,0x10(%rsp)
jmp    157d <magic+0x33d>
lea    0xd4a(%rip),%rdi
add    $0xe8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
jmp    1030 <puts@plt>
lea    0xccb(%rip),%rdi
call   1030 <puts@plt>
cmp    $0x3,%r12d
setae  %al
mov    %eax,0x5c(%rsp)
cmpl   $0x1,0x30(%rsp)
sete   0xb(%rsp)
jne    1459 <magic+0x219>
cmp    $0x3,%r12d
jb     1459 <magic+0x219>
lea    0xc96(%rip),%rdi
call   1030 <puts@plt>
cmp    $0x4,%r12d
setae  %al
mov    %eax,0x28(%rsp)
cmpl   $0x1,0x30(%rsp)
jne    147d <magic+0x23d>
cmp    $0x4,%r12d
jb     147d <magic+0x23d>
lea    0xc51(%rip),%rdi
call   1030 <puts@plt>
cmp    $0x5,%r12d
jb     14bc <magic+0x27c>
cmpl   $0x1,0x30(%rsp)
jne    14e9 <magic+0x2a9>
lea    0xc25(%rip),%rdi
call   1030 <puts@plt>
lea    0xc0a(%rip),%rdi
call   1030 <puts@plt>
cmp    $0x6,%r12d
jb     1680 <magic+0x440>
lea    0xbe0(%rip),%rdi
call   1030 <puts@plt>
mov    $0x1,%al
jmp    14fc <magic+0x2bc>
mov    $0x1,%r15b
movl   $0x0,0xc(%rsp)
movl   $0x0,0x14(%rsp)
movl   $0x0,0x1c(%rsp)
movl   $0x0,0x2c(%rsp)
movl   $0x0,0x24(%rsp)
jmp    155d <magic+0x31d>
lea    0xbb7(%rip),%rdi
call   1030 <puts@plt>
cmp    $0x6,%r12d
setae  %al
mov    %eax,0x2c(%rsp)
cmp    $0x7,%r12d
jb     153c <magic+0x2fc>
lea    0xb75(%rip),%rdi
call   1030 <puts@plt>
cmp    $0x7,%r12d
jne    170a <magic+0x4ca>
mov    $0x1,%r15b
movl   $0x0,0xc(%rsp)
movl   $0x0,0x14(%rsp)
movl   $0x0,0x1c(%rsp)
jmp    1790 <magic+0x550>
mov    $0x1,%r15b
movl   $0x0,0xc(%rsp)
movl   $0x0,0x14(%rsp)
movl   $0x0,0x1c(%rsp)
mov    $0x1,%al
mov    %eax,0x24(%rsp)
movl   $0x0,0x20(%rsp)
movl   $0x0,0x18(%rsp)
movl   $0x0,0x10(%rsp)
mov    0xb(%rsp),%bl
mov    0x28(%rsp),%ebp
lea    0xa4(%rsp),%rdi
call   1070 <getint@plt>
mov    0xa4(%rsp),%eax
test   %eax,%eax
je     1b08 <magic+0x8c8>
cmp    $0x1,%eax
jne    15c0 <magic+0x380>
test   %r12d,%r12d
jle    15c0 <magic+0x380>
mov    %r13,%rdi
mov    0x60(%rsp),%rsi
mov    0x80(%rsp),%rdx
mov    %r14,%rcx
call   1050 <remotevision@plt>
jmp    1b08 <magic+0x8c8>
cmp    $0x2,%eax
jne    15e4 <magic+0x3a4>
test   %r12d,%r12d
jle    15e4 <magic+0x3a4>
mov    %r13,%rdi
mov    0x60(%rsp),%rsi
mov    0x40(%rsp),%rdx
mov    %r14,%rcx
call   10d0 <futureperception@plt>
jmp    1b08 <magic+0x8c8>
cmp    $0x3,%eax
setne  %cl
xor    $0x1,%r15b
or     %cl,%r15b
jne    1618 <magic+0x3d8>
mov    0x90(%rsp),%rdi
mov    0x98(%rsp),%rsi
mov    %r13,%rdx
mov    0x60(%rsp),%rcx
mov    %r14,%r8
call   1040 <healing@plt>
jmp    1b08 <magic+0x8c8>
mov    %ebp,%edx
cmp    $0x4,%eax
sete   %cl
and    0x5c(%rsp),%cl
and    %bl,%cl
cmp    $0x1,%cl
mov    0x60(%rsp),%rbp
jne    16c8 <magic+0x488>
mov    %r13,%rdi
mov    %rbp,%rsi
mov    0x40(%rsp),%rdx
mov    0x80(%rsp),%rcx
mov    0x68(%rsp),%r8
mov    0x38(%rsp),%r9
push   0x70(%rsp)
push   0x58(%rsp)
push   0x88(%rsp)
push   0x60(%rsp)
push   0xa8(%rsp)
push   0xd0(%rsp)
call   1150 <escape@plt>
add    $0x30,%rsp
jmp    1b08 <magic+0x8c8>
mov    $0x1,%bl
movl   $0x0,0xc(%rsp)
movl   $0x0,0x14(%rsp)
movl   $0x0,0x1c(%rsp)
movl   $0x0,0x2c(%rsp)
mov    $0x1,%r15b
mov    $0x1,%al
mov    %eax,0x24(%rsp)
movl   $0x0,0x20(%rsp)
movl   $0x0,0x18(%rsp)
movl   $0x0,0x10(%rsp)
jmp    1579 <magic+0x339>
cmp    $0x5,%eax
sete   %cl
and    %dl,%cl
and    %bl,%cl
cmp    $0x1,%cl
mov    0x80(%rsp),%r10
mov    0xa8(%rsp),%r11
jne    174d <magic+0x50d>
mov    %r13,%rdi
mov    %rbp,%rsi
mov    0xd8(%rsp),%rdx
mov    0xe0(%rsp),%rcx
mov    %r14,%r8
call   1130 <paralysis@plt>
jmp    1b08 <magic+0x8c8>
lea    0x962(%rip),%rdi
call   1030 <puts@plt>
cmp    $0x9,%r12d
jb     1777 <magic+0x537>
lea    0x930(%rip),%rdi
call   1030 <puts@plt>
cmp    $0x9,%r12d
jne    17d0 <magic+0x590>
mov    $0x1,%al
mov    %eax,0x1c(%rsp)
movl   $0x0,0xc(%rsp)
movl   $0x0,0x14(%rsp)
jmp    1850 <magic+0x610>
cmp    $0x6,%eax
sete   %cl
and    %dl,%cl
and    %bl,%cl
cmp    $0x1,%cl
jne    17a1 <magic+0x561>
mov    %r13,%rdi
mov    %rbp,%rsi
mov    0xd0(%rsp),%rdx
mov    %r14,%rcx
call   1060 <doubleattack@plt>
jmp    1b08 <magic+0x8c8>
mov    $0x1,%al
mov    %eax,0x1c(%rsp)
movl   $0x0,0xc(%rsp)
movl   $0x0,0x14(%rsp)
mov    $0x1,%r15b
mov    $0x1,%al
mov    %eax,0x24(%rsp)
mov    $0x1,%al
mov    %eax,0x20(%rsp)
jmp    1565 <magic+0x325>
cmp    $0x7,%eax
sete   %cl
mov    0x24(%rsp),%esi
and    %sil,%cl
and    %bl,%cl
cmp    $0x1,%cl
jne    1815 <magic+0x5d5>
mov    %r13,%rdi
mov    %rbp,%rsi
mov    0xc8(%rsp),%rdx
mov    %r14,%rcx
call   1110 <superstrength@plt>
jmp    1b08 <magic+0x8c8>
lea    0x870(%rip),%rdi
call   1030 <puts@plt>
cmp    $0xb,%r12d
jb     183c <magic+0x5fc>
lea    0x84c(%rip),%rdi
call   1030 <puts@plt>
cmp    $0xf,%r12d
jb     18f3 <magic+0x6b3>
lea    0x814(%rip),%rdi
call   1030 <puts@plt>
mov    $0x1,%al
mov    %eax,0xc(%rsp)
mov    $0x1,%al
mov    %eax,0x14(%rsp)
jmp    1901 <magic+0x6c1>
cmp    $0x8,%eax
setne  %cl
xor    $0x1,%sil
or     %cl,%sil
jne    186a <magic+0x62a>
mov    %r13,%rdi
mov    %rbp,%rsi
mov    0x50(%rsp),%rdx
mov    %r14,%rcx
call   1090 <antimagic@plt>
jmp    1b08 <magic+0x8c8>
mov    $0x1,%al
mov    %eax,0x14(%rsp)
movl   $0x0,0xc(%rsp)
mov    $0x1,%al
mov    %eax,0x1c(%rsp)
mov    $0x1,%r15b
mov    $0x1,%al
mov    %eax,0x24(%rsp)
mov    $0x1,%al
mov    %eax,0x20(%rsp)
mov    $0x1,%al
mov    %eax,0x18(%rsp)
jmp    156d <magic+0x32d>
mov    %ebx,%edx
cmp    $0x9,%eax
sete   %cl
and    0x2c(%rsp),%cl
and    %cl,%dl
cmp    $0x1,%dl
jne    1927 <magic+0x6e7>
sub    $0x8,%rsp
mov    0x98(%rsp),%rdi
mov    0xa0(%rsp),%rsi
mov    %r13,%rdx
mov    %rbp,%rcx
mov    0xb8(%rsp),%r8
mov    0x48(%rsp),%r9
push   0x80(%rsp)
push   0xd0(%rsp)
push   0x88(%rsp)
push   0x70(%rsp)
push   0x70(%rsp)
push   0xb8(%rsp)
push   %r11
push   0xf8(%rsp)
push   0x80(%rsp)
push   0xb8(%rsp)
push   %r10
call   1140 <stealingspirit@plt>
add    $0x60,%rsp
jmp    1b08 <magic+0x8c8>
mov    $0x1,%al
mov    %eax,0x14(%rsp)
movl   $0x0,0xc(%rsp)
mov    $0x1,%al
mov    %eax,0x1c(%rsp)
mov    $0x1,%r15b
mov    $0x1,%al
mov    %eax,0x24(%rsp)
mov    $0x1,%al
mov    %eax,0x20(%rsp)
mov    $0x1,%al
mov    %eax,0x18(%rsp)
mov    $0x1,%al
mov    %eax,0x10(%rsp)
jmp    1575 <magic+0x335>
cmp    $0xa,%eax
setne  %cl
mov    0x20(%rsp),%edx
xor    $0x1,%dl
or     %cl,%dl
jne    1965 <magic+0x725>
mov    %r13,%rdi
mov    %rbp,%rsi
mov    0x40(%rsp),%rdx
mov    %r10,%rcx
mov    %r11,%r8
mov    0x48(%rsp),%r9
push   %r14
push   0x80(%rsp)
call   10c0 <bodyswitch@plt>
add    $0x10,%rsp
jmp    1b08 <magic+0x8c8>
cmp    $0xb,%eax
setne  %cl
mov    0x1c(%rsp),%edx
xor    $0x1,%dl
or     %cl,%dl
jne    19c3 <magic+0x783>
sub    $0x8,%rsp
mov    %r13,%rdi
mov    %rbp,%rsi
mov    0x48(%rsp),%rdx
mov    %r10,%rcx
mov    0x70(%rsp),%r8
mov    0x40(%rsp),%r9
push   0x38(%rsp)
push   0x80(%rsp)
push   0x68(%rsp)
push   0x98(%rsp)
push   0x70(%rsp)
push   0xb8(%rsp)
push   %r11
call   10f0 <teleport@plt>
add    $0x40,%rsp
jmp    1b08 <magic+0x8c8>
cmp    $0xc,%eax
setne  %cl
mov    0x18(%rsp),%edx
xor    $0x1,%dl
or     %dl,%cl
jne    19ec <magic+0x7ac>
mov    %r13,%rdi
mov    %rbp,%rsi
mov    0x38(%rsp),%rdx
mov    %r14,%rcx
call   1120 <revelation@plt>
jmp    1b08 <magic+0x8c8>
cmp    $0xd,%eax
setne  %cl
or     %cl,%dl
jne    1a20 <magic+0x7e0>
sub    $0x8,%rsp
mov    %r13,%rdi
mov    %rbp,%rsi
mov    %r10,%rdx
mov    %r11,%rcx
mov    0x38(%rsp),%r8
mov    0x50(%rsp),%r9
push   %r14
call   10a0 <hellbomb@plt>
add    $0x10,%rsp
jmp    1b08 <magic+0x8c8>
cmp    $0xe,%eax
setne  %cl
mov    0x14(%rsp),%edx
xor    $0x1,%dl
or     %cl,%dl
jne    1a49 <magic+0x809>
mov    %r13,%rdi
mov    %rbp,%rsi
mov    0x70(%rsp),%rdx
mov    %r14,%rcx
call   1160 <curse@plt>
jmp    1b08 <magic+0x8c8>
cmp    $0xf,%eax
setne  %cl
mov    0x10(%rsp),%edx
xor    $0x1,%dl
or     %cl,%dl
jne    1aa8 <magic+0x868>
mov    0x90(%rsp),%rdi
mov    0x98(%rsp),%rsi
mov    %r13,%rdx
mov    %rbp,%rcx
mov    0xb0(%rsp),%r8
mov    0x40(%rsp),%r9
push   %r14
push   0x38(%rsp)
push   0x60(%rsp)
push   %r11
push   0xd8(%rsp)
push   0x60(%rsp)
push   0x98(%rsp)
push   %r10
call   1100 <genieofluck@plt>
add    $0x40,%rsp
jmp    1b08 <magic+0x8c8>
cmp    $0x10,%eax
setne  %cl
mov    0xc(%rsp),%esi
xor    $0x1,%sil
or     %sil,%cl
jne    1ad8 <magic+0x898>
mov    %r13,%rdi
mov    %rbp,%rsi
mov    %r10,%rdx
mov    $0x6,%ecx
mov    0x30(%rsp),%r8
xor    %r9d,%r9d
call   10e0 <stonestatue@plt>
jmp    1b08 <magic+0x8c8>
mov    %esi,%edx
cmp    $0x11,%eax
setne  %al
or     %al,%dl
jne    1afc <magic+0x8bc>
mov    %r13,%rdi
mov    %rbp,%rsi
mov    0x38(%rsp),%rdx
mov    %r14,%rcx
xor    %r8d,%r8d
call   10b0 <godvision@plt>
jmp    1b08 <magic+0x8c8>
lea    0x4fd(%rip),%rdi
call   1030 <puts@plt>
add    $0xe8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
@.str = [38 x i8] c"You are exausted and can't do magic.\0A\00"
@.str.1 = [31 x i8] c"You don't have magic potions.\0A\00"
@.str.2 = [86 x i8] c"What spell do you want to cast?\0A[0]: Nothing\0A[1]: RemoteVision\0A[2]: FuturePerception\0A\00"
@.str.3 = [14 x i8] c"[3]: Healing\0A\00"
@.str.4 = [13 x i8] c"[4]: Escape\0A\00"
@.str.5 = [34 x i8] c"[5]: Paralysis\0A[6]: DoubleAttack\0A\00"
@.str.6 = [20 x i8] c"[7]: SuperStrength\0A\00"
@.str.7 = [16 x i8] c"[8]: AntiMagic\0A\00"
@.str.8 = [21 x i8] c"[9]: StealingSpirit\0A\00"
@.str.9 = [18 x i8] c"[10]: BodySwitch\0A\00"
@.str.10 = [16 x i8] c"[11]: Teleport\0A\00"
@.str.11 = [33 x i8] c"[12]: Revelation\0A[13]: HellBomb\0A\00"
@.str.12 = [13 x i8] c"[14]: Curse\0A\00"
@.str.13 = [19 x i8] c"[15]: GenieofLuck\0A\00"
@.str.14 = [35 x i8] c"[16]: StoneStatue\0A[17]: GodVision\0A\00"
@.str.15 = [20 x i8] c"You can't do that!\0A\00"
define void @magic(i32* %0, i32* %1, i32* %2, i32* %3, i32* %4, i32* %5, i32* %6, i32* %7, i32* %8, i32* %9, i32* %10, i32* %11, i32* %12, i32* %13, i32* %14, i32 %15, i32* %16, i32* %17, i32* %18, i32* %19, i32* %20, i32* %21, i8* %22) {
%24 = alloca i32*
%25 = alloca i32*
%26 = alloca i32*
%27 = alloca i32*
%28 = alloca i32*
%29 = alloca i32*
%30 = alloca i32*
%31 = alloca i32*
%32 = alloca i32*
%33 = alloca i32*
%34 = alloca i32*
%35 = alloca i32*
%36 = alloca i32*
%37 = alloca i32*
%38 = alloca i32*
%39 = alloca i32
%40 = alloca i32*
%41 = alloca i32*
%42 = alloca i32*
%43 = alloca i32*
%44 = alloca i32*
%45 = alloca i32*
%46 = alloca i8*
%47 = alloca i32
%48 = alloca i32
store i32* %0, i32** %24
store i32* %1, i32** %25
store i32* %2, i32** %26
store i32* %3, i32** %27
store i32* %4, i32** %28
store i32* %5, i32** %29
store i32* %6, i32** %30
store i32* %7, i32** %31
store i32* %8, i32** %32
store i32* %9, i32** %33
store i32* %10, i32** %34
store i32* %11, i32** %35
store i32* %12, i32** %36
store i32* %13, i32** %37
store i32* %14, i32** %38
store i32 %15, i32* %39
store i32* %16, i32** %40
store i32* %17, i32** %41
store i32* %18, i32** %42
store i32* %19, i32** %43
store i32* %20, i32** %44
store i32* %21, i32** %45
store i8* %22, i8** %46
%49 = load i32*, i32** %26
%50 = load i32*, i32** %27
%51 = call i32 @magiccount(i32* %49, i32* %50)
store i32 %51, i32* %47
%52 = load i32*, i32** %45
%53 = icmp ne i32* %52, null
br i1 %53, label %54, label %60
54: ; preds = %23
%55 = load i32*, i32** %45
%56 = load i32, i32* %55
%57 = icmp eq i32 %56, 1
br i1 %57, label %58, label %60
58: ; preds = %54
%59 = call i32 @printf(i8* getelementptr inbounds ([38 x i8], [38 x i8]* @.str, i64 0, i64 0))
br label %431
60: ; preds = %54, %23
%61 = load i32, i32* %47
%62 = icmp eq i32 %61, 0
br i1 %62, label %63, label %65
63: ; preds = %60
%64 = call i32 @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str.1, i64 0, i64 0))
br label %431
65: ; preds = %60
%66 = load i32, i32* %47
%67 = icmp sge i32 %66, 1
br i1 %67, label %68, label %70
68: ; preds = %65
%69 = call i32 @printf(i8* getelementptr inbounds ([86 x i8], [86 x i8]* @.str.2, i64 0, i64 0))
br label %70
70: ; preds = %68, %65
%71 = load i32, i32* %47
%72 = icmp sge i32 %71, 2
br i1 %72, label %73, label %75
73: ; preds = %70
%74 = call i32 @printf(i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.3, i64 0, i64 0))
br label %75
75: ; preds = %73, %70
%76 = load i32, i32* %47
%77 = icmp sge i32 %76, 3
br i1 %77, label %78, label %83
78: ; preds = %75
%79 = load i32, i32* %39
%80 = icmp eq i32 %79, 1
br i1 %80, label %81, label %83
81: ; preds = %78
%82 = call i32 @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.4, i64 0, i64 0))
br label %83
83: ; preds = %81, %78, %75
%84 = load i32, i32* %47
%85 = icmp sge i32 %84, 4
br i1 %85, label %86, label %92
86: ; preds = %83
%87 = load i32, i32* %39
%88 = icmp eq i32 %87, 1
br i1 %88, label %89, label %91
89: ; preds = %86
%90 = call i32 @printf(i8* getelementptr inbounds ([34 x i8], [34 x i8]* @.str.5, i64 0, i64 0))
br label %91
91: ; preds = %89, %86
br label %92
92: ; preds = %91, %83
%93 = load i32, i32* %47
%94 = icmp sge i32 %93, 5
br i1 %94, label %95, label %102
95: ; preds = %92
%96 = load i32, i32* %39
%97 = icmp eq i32 %96, 1
br i1 %97, label %98, label %100
98: ; preds = %95
%99 = call i32 @printf(i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str.6, i64 0, i64 0))
br label %100
100: ; preds = %98, %95
%101 = call i32 @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.7, i64 0, i64 0))
br label %102
102: ; preds = %100, %92
%103 = load i32, i32* %47
%104 = icmp sge i32 %103, 6
br i1 %104, label %105, label %110
105: ; preds = %102
%106 = load i32, i32* %39
%107 = icmp eq i32 %106, 1
br i1 %107, label %108, label %110
108: ; preds = %105
%109 = call i32 @printf(i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.8, i64 0, i64 0))
br label %110
110: ; preds = %108, %105, %102
%111 = load i32, i32* %47
%112 = icmp sge i32 %111, 7
br i1 %112, label %113, label %115
113: ; preds = %110
%114 = call i32 @printf(i8* getelementptr inbounds ([18 x i8], [18 x i8]* @.str.9, i64 0, i64 0))
br label %115
115: ; preds = %113, %110
%116 = load i32, i32* %47
%117 = icmp sge i32 %116, 8
br i1 %117, label %118, label %120
118: ; preds = %115
%119 = call i32 @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.10, i64 0, i64 0))
br label %120
120: ; preds = %118, %115
%121 = load i32, i32* %47
%122 = icmp sge i32 %121, 9
br i1 %122, label %123, label %125
123: ; preds = %120
%124 = call i32 @printf(i8* getelementptr inbounds ([33 x i8], [33 x i8]* @.str.11, i64 0, i64 0))
br label %125
125: ; preds = %123, %120
%126 = load i32, i32* %47
%127 = icmp sge i32 %126, 10
br i1 %127, label %128, label %130
128: ; preds = %125
%129 = call i32 @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.12, i64 0, i64 0))
br label %130
130: ; preds = %128, %125
%131 = load i32, i32* %47
%132 = icmp sge i32 %131, 11
br i1 %132, label %133, label %135
133: ; preds = %130
%134 = call i32 @printf(i8* getelementptr inbounds ([19 x i8], [19 x i8]* @.str.13, i64 0, i64 0))
br label %135
135: ; preds = %133, %130
%136 = load i32, i32* %47
%137 = icmp sge i32 %136, 15
br i1 %137, label %138, label %140
138: ; preds = %135
%139 = call i32 @printf(i8* getelementptr inbounds ([35 x i8], [35 x i8]* @.str.14, i64 0, i64 0))
br label %140
140: ; preds = %138, %135
%141 = call i32 @getint(i32* %48)
%142 = load i32, i32* %48
%143 = icmp eq i32 %142, 0
br i1 %143, label %144, label %145
144: ; preds = %140
br label %431
145: ; preds = %140
%146 = load i32, i32* %48
%147 = icmp eq i32 %146, 1
br i1 %147, label %148, label %157
148: ; preds = %145
%149 = load i32, i32* %47
%150 = icmp sge i32 %149, 1
br i1 %150, label %151, label %157
151: ; preds = %148
%152 = load i32*, i32** %26
%153 = load i32*, i32** %27
%154 = load i32*, i32** %30
%155 = load i32*, i32** %45
%156 = call i32 @remotevision(i32* %152, i32* %153, i32* %154, i32* %155)
br label %431
157: ; preds = %148, %145
%158 = load i32, i32* %48
%159 = icmp eq i32 %158, 2
br i1 %159, label %160, label %169
160: ; preds = %157
%161 = load i32, i32* %47
%162 = icmp sge i32 %161, 1
br i1 %162, label %163, label %169
163: ; preds = %160
%164 = load i32*, i32** %26
%165 = load i32*, i32** %27
%166 = load i32*, i32** %29
%167 = load i32*, i32** %45
%168 = call i32 @futureperception(i32* %164, i32* %165, i32* %166, i32* %167)
br label %430
169: ; preds = %160, %157
%170 = load i32, i32* %48
%171 = icmp eq i32 %170, 3
br i1 %171, label %172, label %182
172: ; preds = %169
%173 = load i32, i32* %47
%174 = icmp sge i32 %173, 2
br i1 %174, label %175, label %182
175: ; preds = %172
%176 = load i32*, i32** %24
%177 = load i32*, i32** %25
%178 = load i32*, i32** %26
%179 = load i32*, i32** %27
%180 = load i32*, i32** %45
%181 = call i32 @healing(i32* %176, i32* %177, i32* %178, i32* %179, i32* %180)
br label %429
182: ; preds = %172, %169
%183 = load i32, i32* %48
%184 = icmp eq i32 %183, 4
br i1 %184, label %185, label %205
185: ; preds = %182
%186 = load i32, i32* %47
%187 = icmp sge i32 %186, 3
br i1 %187, label %188, label %205
188: ; preds = %185
%189 = load i32, i32* %39
%190 = icmp eq i32 %189, 1
br i1 %190, label %191, label %205
191: ; preds = %188
%192 = load i32*, i32** %26
%193 = load i32*, i32** %27
%194 = load i32*, i32** %29
%195 = load i32*, i32** %30
%196 = load i32*, i32** %31
%197 = load i32*, i32** %32
%198 = load i32*, i32** %34
%199 = load i32*, i32** %35
%200 = load i32*, i32** %36
%201 = load i32*, i32** %40
%202 = load i32*, i32** %37
%203 = load i32*, i32** %38
%204 = call i32 @escape(i32* %192, i32* %193, i32* %194, i32* %195, i32* %196, i32* %197, i32* %198, i32* %199, i32* %200, i32* %201, i32* %202, i32* %203)
br label %428
205: ; preds = %188, %185, %182
%206 = load i32, i32* %48
%207 = icmp eq i32 %206, 5
br i1 %207, label %208, label %221
208: ; preds = %205
%209 = load i32, i32* %47
%210 = icmp sge i32 %209, 4
br i1 %210, label %211, label %221
211: ; preds = %208
%212 = load i32, i32* %39
%213 = icmp eq i32 %212, 1
br i1 %213, label %214, label %221
214: ; preds = %211
%215 = load i32*, i32** %26
%216 = load i32*, i32** %27
%217 = load i32*, i32** %41
%218 = load i32*, i32** %42
%219 = load i32*, i32** %45
%220 = call i32 @paralysis(i32* %215, i32* %216, i32* %217, i32* %218, i32* %219)
br label %427
221: ; preds = %211, %208, %205
%222 = load i32, i32* %48
%223 = icmp eq i32 %222, 6
br i1 %223, label %224, label %236
224: ; preds = %221
%225 = load i32, i32* %47
%226 = icmp sge i32 %225, 4
br i1 %226, label %227, label %236
227: ; preds = %224
%228 = load i32, i32* %39
%229 = icmp eq i32 %228, 1
br i1 %229, label %230, label %236
230: ; preds = %227
%231 = load i32*, i32** %26
%232 = load i32*, i32** %27
%233 = load i32*, i32** %43
%234 = load i32*, i32** %45
%235 = call i32 @doubleattack(i32* %231, i32* %232, i32* %233, i32* %234)
br label %426
236: ; preds = %227, %224, %221
%237 = load i32, i32* %48
%238 = icmp eq i32 %237, 7
br i1 %238, label %239, label %251
239: ; preds = %236
%240 = load i32, i32* %47
%241 = icmp sge i32 %240, 5
br i1 %241, label %242, label %251
242: ; preds = %239
%243 = load i32, i32* %39
%244 = icmp eq i32 %243, 1
br i1 %244, label %245, label %251
245: ; preds = %242
%246 = load i32*, i32** %26
%247 = load i32*, i32** %27
%248 = load i32*, i32** %44
%249 = load i32*, i32** %45
%250 = call i32 @superstrength(i32* %246, i32* %247, i32* %248, i32* %249)
br label %425
251: ; preds = %242, %239, %236
%252 = load i32, i32* %48
%253 = icmp eq i32 %252, 8
br i1 %253, label %254, label %263
254: ; preds = %251
%255 = load i32, i32* %47
%256 = icmp sge i32 %255, 5
br i1 %256, label %257, label %263
257: ; preds = %254
%258 = load i32*, i32** %26
%259 = load i32*, i32** %27
%260 = load i32*, i32** %37
%261 = load i32*, i32** %45
%262 = call i32 @antimagic(i32* %258, i32* %259, i32* %260, i32* %261)
br label %424
263: ; preds = %254, %251
%264 = load i32, i32* %48
%265 = icmp eq i32 %264, 9
br i1 %265, label %266, label %291
266: ; preds = %263
%267 = load i32, i32* %47
%268 = icmp sge i32 %267, 6
br i1 %268, label %269, label %291
269: ; preds = %266
%270 = load i32, i32* %39
%271 = icmp eq i32 %270, 1
br i1 %271, label %272, label %291
272: ; preds = %269
%273 = load i32*, i32** %24
%274 = load i32*, i32** %25
%275 = load i32*, i32** %26
%276 = load i32*, i32** %27
%277 = load i32*, i32** %28
%278 = load i32*, i32** %29
%279 = load i32*, i32** %30
%280 = load i32*, i32** %31
%281 = load i32*, i32** %32
%282 = load i32*, i32** %33
%283 = load i32*, i32** %34
%284 = load i32*, i32** %35
%285 = load i32*, i32** %36
%286 = load i32*, i32** %37
%287 = load i32*, i32** %38
%288 = load i8*, i8** %46
%289 = load i32*, i32** %40
%290 = call i32 @stealingspirit(i32* %273, i32* %274, i32* %275, i32* %276, i32* %277, i32* %278, i32* %279, i32* %280, i32* %281, i32* %282, i32* %283, i32* %284, i32* %285, i32* %286, i32* %287, i8* %288, i32* %289)
br label %423
291: ; preds = %269, %266, %263
%292 = load i32, i32* %48
%293 = icmp eq i32 %292, 10
br i1 %293, label %294, label %307
294: ; preds = %291
%295 = load i32, i32* %47
%296 = icmp sge i32 %295, 7
br i1 %296, label %297, label %307
297: ; preds = %294
%298 = load i32*, i32** %26
%299 = load i32*, i32** %27
%300 = load i32*, i32** %29
%301 = load i32*, i32** %30
%302 = load i32*, i32** %34
%303 = load i32*, i32** %36
%304 = load i32*, i32** %40
%305 = load i32*, i32** %45
%306 = call i32 @bodyswitch(i32* %298, i32* %299, i32* %300, i32* %301, i32* %302, i32* %303, i32* %304, i32* %305)
br label %422
307: ; preds = %294, %291
%308 = load i32, i32* %48
%309 = icmp eq i32 %308, 11
br i1 %309, label %310, label %328
310: ; preds = %307
%311 = load i32, i32* %47
%312 = icmp sge i32 %311, 8
br i1 %312, label %313, label %328
313: ; preds = %310
%314 = load i32*, i32** %26
%315 = load i32*, i32** %27
%316 = load i32*, i32** %29
%317 = load i32*, i32** %30
%318 = load i32*, i32** %31
%319 = load i32*, i32** %32
%320 = load i32*, i32** %34
%321 = load i32*, i32** %35
%322 = load i32*, i32** %36
%323 = load i32*, i32** %40
%324 = load i32*, i32** %37
%325 = load i32*, i32** %38
%326 = load i32, i32* %39
%327 = call i32 @teleport(i32* %314, i32* %315, i32* %316, i32* %317, i32* %318, i32* %319, i32* %320, i32* %321, i32* %322, i32* %323, i32* %324, i32* %325, i32 %326)
br label %421
328: ; preds = %310, %307
%329 = load i32, i32* %48
%330 = icmp eq i32 %329, 12
br i1 %330, label %331, label %340
331: ; preds = %328
%332 = load i32, i32* %47
%333 = icmp sge i32 %332, 9
br i1 %333, label %334, label %340
334: ; preds = %331
%335 = load i32*, i32** %26
%336 = load i32*, i32** %27
%337 = load i32*, i32** %32
%338 = load i32*, i32** %45
%339 = call i32 @revelation(i32* %335, i32* %336, i32* %337, i32* %338)
br label %420
340: ; preds = %331, %328
%341 = load i32, i32* %48
%342 = icmp eq i32 %341, 13
br i1 %342, label %343, label %355
343: ; preds = %340
%344 = load i32, i32* %47
%345 = icmp sge i32 %344, 9
br i1 %345, label %346, label %355
346: ; preds = %343
%347 = load i32*, i32** %26
%348 = load i32*, i32** %27
%349 = load i32*, i32** %30
%350 = load i32*, i32** %34
%351 = load i32, i32* %39
%352 = load i32*, i32** %36
%353 = load i32*, i32** %45
%354 = call i32 @hellbomb(i32* %347, i32* %348, i32* %349, i32* %350, i32 %351, i32* %352, i32* %353)
br label %419
355: ; preds = %343, %340
%356 = load i32, i32* %48
%357 = icmp eq i32 %356, 14
br i1 %357, label %358, label %367
358: ; preds = %355
%359 = load i32, i32* %47
%360 = icmp sge i32 %359, 10
br i1 %360, label %361, label %367
361: ; preds = %358
%362 = load i32*, i32** %26
%363 = load i32*, i32** %27
%364 = load i32*, i32** %38
%365 = load i32*, i32** %45
%366 = call i32 @curse(i32* %362, i32* %363, i32* %364, i32* %365)
br label %418
367: ; preds = %358, %355
%368 = load i32, i32* %48
%369 = icmp eq i32 %368, 15
br i1 %369, label %370, label %389
370: ; preds = %367
%371 = load i32, i32* %47
%372 = icmp sge i32 %371, 11
br i1 %372, label %373, label %389
373: ; preds = %370
%374 = load i32*, i32** %24
%375 = load i32*, i32** %25
%376 = load i32*, i32** %26
%377 = load i32*, i32** %27
%378 = load i32*, i32** %28
%379 = load i32*, i32** %29
%380 = load i32*, i32** %30
%381 = load i32*, i32** %31
%382 = load i32*, i32** %32
%383 = load i32*, i32** %33
%384 = load i32*, i32** %34
%385 = load i32*, i32** %37
%386 = load i32, i32* %39
%387 = load i32*, i32** %45
%388 = call i32 @genieofluck(i32* %374, i32* %375, i32* %376, i32* %377, i32* %378, i32* %379, i32* %380, i32* %381, i32* %382, i32* %383, i32* %384, i32* %385, i32 %386, i32* %387)
br label %417
389: ; preds = %370, %367
%390 = load i32, i32* %48
%391 = icmp eq i32 %390, 16
br i1 %391, label %392, label %401
392: ; preds = %389
%393 = load i32, i32* %47
%394 = icmp sge i32 %393, 15
br i1 %394, label %395, label %401
395: ; preds = %392
%396 = load i32*, i32** %26
%397 = load i32*, i32** %27
%398 = load i32*, i32** %30
%399 = load i32, i32* %39
%400 = call i32 @stonestatue(i32* %396, i32* %397, i32* %398, i32 6, i32 %399, i32 0)
br label %416
401: ; preds = %392, %389
%402 = load i32, i32* %48
%403 = icmp eq i32 %402, 17
br i1 %403, label %404, label %413
404: ; preds = %401
%405 = load i32, i32* %47
%406 = icmp sge i32 %405, 15
br i1 %406, label %407, label %413
407: ; preds = %404
%408 = load i32*, i32** %26
%409 = load i32*, i32** %27
%410 = load i32*, i32** %32
%411 = load i32*, i32** %45
%412 = call i32 @godvision(i32* %408, i32* %409, i32* %410, i32* %411, i32 0)
br label %415
413: ; preds = %404, %401
%414 = call i32 @printf(i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str.15, i64 0, i64 0))
br label %415
415: ; preds = %413, %407
br label %416
416: ; preds = %415, %395
br label %417
417: ; preds = %416, %373
br label %418
418: ; preds = %417, %361
br label %419
419: ; preds = %418, %346
br label %420
420: ; preds = %419, %334
br label %421
421: ; preds = %420, %313
br label %422
422: ; preds = %421, %297
br label %423
423: ; preds = %422, %272
br label %424
424: ; preds = %423, %257
br label %425
425: ; preds = %424, %245
br label %426
426: ; preds = %425, %230
br label %427
427: ; preds = %426, %214
br label %428
428: ; preds = %427, %191
br label %429
429: ; preds = %428, %175
br label %430
430: ; preds = %429, %163
br label %431
431: ; preds = %58, %63, %144, %430, %151
ret void
}

LLVM IR (-O2):
@str = [19 x i8] c"You can't do that!\00"
@str.16 = [34 x i8] c"[16]: StoneStatue\0A[17]: GodVision\00"
@str.17 = [18 x i8] c"[15]: GenieofLuck\00"
@str.18 = [12 x i8] c"[14]: Curse\00"
@str.19 = [32 x i8] c"[12]: Revelation\0A[13]: HellBomb\00"
@str.20 = [15 x i8] c"[11]: Teleport\00"
@str.21 = [17 x i8] c"[10]: BodySwitch\00"
@str.22 = [20 x i8] c"[9]: StealingSpirit\00"
@str.23 = [15 x i8] c"[8]: AntiMagic\00"
@str.24 = [19 x i8] c"[7]: SuperStrength\00"
@str.25 = [33 x i8] c"[5]: Paralysis\0A[6]: DoubleAttack\00"
@str.26 = [12 x i8] c"[4]: Escape\00"
@str.27 = [13 x i8] c"[3]: Healing\00"
@str.28 = [85 x i8] c"What spell do you want to cast?\0A[0]: Nothing\0A[1]: RemoteVision\0A[2]: FuturePerception\00"
@str.29 = [30 x i8] c"You don't have magic potions.\00"
@str.30 = [37 x i8] c"You are exausted and can't do magic.\00"
define void @magic(i32* %0, i32* %1, i32* %2, i32* %3, i32* %4, i32* %5, i32* %6, i32* %7, i32* %8, i32* %9, i32* %10, i32* %11, i32* %12, i32* %13, i32* %14, i32 %15, i32* %16, i32* %17, i32* %18, i32* %19, i32* %20, i32* %21, i8* %22) {
%24 = alloca i32
%25 = tail call i32 @magiccount(i32* %2, i32* %3)
%26 = bitcast i32* %24 to i8*
%27 = icmp eq i32* %21, null
br i1 %27, label %33, label %28
28: ; preds = %23
%29 = load i32, i32* %21
%30 = icmp eq i32 %29, 1
br i1 %30, label %31, label %33
31: ; preds = %28
%32 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([37 x i8], [37 x i8]* @str.30, i64 0, i64 0))
br label %196
33: ; preds = %28, %23
%34 = icmp eq i32 %25, 0
br i1 %34, label %35, label %37
35: ; preds = %33
%36 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([30 x i8], [30 x i8]* @str.29, i64 0, i64 0))
br label %196
37: ; preds = %33
%38 = icmp sgt i32 %25, 0
br i1 %38, label %39, label %42
39: ; preds = %37
%40 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([85 x i8], [85 x i8]* @str.28, i64 0, i64 0))
%41 = icmp eq i32 %25, 1
br i1 %41, label %42, label %44
42: ; preds = %37, %39
%43 = icmp eq i32 %15, 1
br label %88
44: ; preds = %39
%45 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([13 x i8], [13 x i8]* @str.27, i64 0, i64 0))
%46 = icmp ugt i32 %25, 2
%47 = icmp eq i32 %15, 1
%48 = and i1 %47, %46
br i1 %48, label %49, label %51
49: ; preds = %44
%50 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([12 x i8], [12 x i8]* @str.26, i64 0, i64 0))
br label %51
51: ; preds = %49, %44
%52 = icmp ugt i32 %25, 3
%53 = and i1 %47, %52
br i1 %53, label %54, label %56
54: ; preds = %51
%55 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([33 x i8], [33 x i8]* @str.25, i64 0, i64 0))
br label %56
56: ; preds = %54, %51
%57 = icmp ugt i32 %25, 4
br i1 %57, label %58, label %88
58: ; preds = %56
br i1 %47, label %62, label %59
59: ; preds = %58
%60 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([15 x i8], [15 x i8]* @str.23, i64 0, i64 0))
%61 = icmp ugt i32 %25, 5
br label %68
62: ; preds = %58
%63 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([19 x i8], [19 x i8]* @str.24, i64 0, i64 0))
%64 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([15 x i8], [15 x i8]* @str.23, i64 0, i64 0))
%65 = icmp ugt i32 %25, 5
br i1 %65, label %66, label %88
66: ; preds = %62
%67 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([20 x i8], [20 x i8]* @str.22, i64 0, i64 0))
br label %68
68: ; preds = %59, %66
%69 = phi i1 [ true, %66 ], [ %61, %59 ]
%70 = icmp ugt i32 %25, 6
br i1 %70, label %71, label %88
71: ; preds = %68
%72 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([17 x i8], [17 x i8]* @str.21, i64 0, i64 0))
%73 = icmp eq i32 %25, 7
br i1 %73, label %88, label %74
74: ; preds = %71
%75 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([15 x i8], [15 x i8]* @str.20, i64 0, i64 0))
%76 = icmp ugt i32 %25, 8
br i1 %76, label %77, label %88
77: ; preds = %74
%78 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([32 x i8], [32 x i8]* @str.19, i64 0, i64 0))
%79 = icmp eq i32 %25, 9
br i1 %79, label %88, label %80
80: ; preds = %77
%81 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([12 x i8], [12 x i8]* @str.18, i64 0, i64 0))
%82 = icmp ugt i32 %25, 10
br i1 %82, label %83, label %88
83: ; preds = %80
%84 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([18 x i8], [18 x i8]* @str.17, i64 0, i64 0))
%85 = icmp ugt i32 %25, 14
br i1 %85, label %86, label %88
86: ; preds = %83
%87 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([34 x i8], [34 x i8]* @str.16, i64 0, i64 0))
br label %88
88: ; preds = %62, %80, %74, %68, %56, %42, %71, %77, %86, %83
%89 = phi i1 [ true, %86 ], [ false, %83 ], [ false, %77 ], [ false, %71 ], [ false, %42 ], [ false, %56 ], [ false, %68 ], [ false, %74 ], [ false, %80 ], [ false, %62 ]
%90 = phi i1 [ true, %86 ], [ true, %83 ], [ false, %77 ], [ false, %71 ], [ false, %42 ], [ false, %56 ], [ false, %68 ], [ false, %74 ], [ true, %80 ], [ false, %62 ]
%91 = phi i1 [ true, %86 ], [ true, %83 ], [ true, %77 ], [ false, %71 ], [ false, %42 ], [ false, %56 ], [ false, %68 ], [ true, %74 ], [ true, %80 ], [ false, %62 ]
%92 = phi i1 [ %69, %86 ], [ %69, %83 ], [ %69, %77 ], [ %69, %71 ], [ false, %42 ], [ false, %56 ], [ %69, %68 ], [ %69, %74 ], [ %69, %80 ], [ false, %62 ]
%93 = phi i1 [ %47, %86 ], [ %47, %83 ], [ %47, %77 ], [ %47, %71 ], [ %43, %42 ], [ %47, %56 ], [ %47, %68 ], [ %47, %74 ], [ %47, %80 ], [ true, %62 ]
%94 = phi i1 [ %52, %86 ], [ %52, %83 ], [ %52, %77 ], [ %52, %71 ], [ false, %42 ], [ %52, %56 ], [ %52, %68 ], [ %52, %74 ], [ %52, %80 ], [ %52, %62 ]
%95 = phi i1 [ true, %86 ], [ true, %83 ], [ true, %77 ], [ true, %71 ], [ false, %42 ], [ true, %56 ], [ true, %68 ], [ true, %74 ], [ true, %80 ], [ true, %62 ]
%96 = phi i1 [ %46, %86 ], [ %46, %83 ], [ %46, %77 ], [ %46, %71 ], [ false, %42 ], [ %46, %56 ], [ %46, %68 ], [ %46, %74 ], [ %46, %80 ], [ %46, %62 ]
%97 = phi i1 [ true, %86 ], [ true, %83 ], [ true, %77 ], [ true, %71 ], [ false, %42 ], [ false, %56 ], [ true, %68 ], [ true, %74 ], [ true, %80 ], [ true, %62 ]
%98 = phi i1 [ true, %86 ], [ true, %83 ], [ true, %77 ], [ true, %71 ], [ false, %42 ], [ false, %56 ], [ false, %68 ], [ true, %74 ], [ true, %80 ], [ false, %62 ]
%99 = phi i1 [ true, %86 ], [ true, %83 ], [ true, %77 ], [ false, %71 ], [ false, %42 ], [ false, %56 ], [ false, %68 ], [ false, %74 ], [ true, %80 ], [ false, %62 ]
%100 = phi i1 [ true, %86 ], [ true, %83 ], [ false, %77 ], [ false, %71 ], [ false, %42 ], [ false, %56 ], [ false, %68 ], [ false, %74 ], [ false, %80 ], [ false, %62 ]
%101 = call i32 @getint(i32* %24)
%102 = load i32, i32* %24
%103 = icmp eq i32 %102, 0
br i1 %103, label %196, label %104
104: ; preds = %88
%105 = icmp eq i32 %102, 1
%106 = select i1 %105, i1 %38, i1 false
br i1 %106, label %107, label %109
107: ; preds = %104
%108 = call i32 @remotevision(i32* %2, i32* %3, i32* %6, i32* %21)
br label %196
109: ; preds = %104
%110 = icmp eq i32 %102, 2
%111 = select i1 %110, i1 %38, i1 false
br i1 %111, label %112, label %114
112: ; preds = %109
%113 = call i32 @futureperception(i32* %2, i32* %3, i32* %5, i32* %21)
br label %196
114: ; preds = %109
%115 = icmp eq i32 %102, 3
%116 = and i1 %95, %115
br i1 %116, label %117, label %119
117: ; preds = %114
%118 = call i32 @healing(i32* %0, i32* %1, i32* %2, i32* %3, i32* %21)
br label %196
119: ; preds = %114
%120 = icmp eq i32 %102, 4
%121 = select i1 %120, i1 %96, i1 false
%122 = and i1 %93, %121
br i1 %122, label %123, label %125
123: ; preds = %119
%124 = call i32 @escape(i32* %2, i32* %3, i32* %5, i32* %6, i32* %7, i32* %8, i32* %10, i32* %11, i32* %12, i32* %16, i32* %13, i32* %14)
br label %196
125: ; preds = %119
%126 = icmp eq i32 %102, 5
%127 = select i1 %126, i1 %94, i1 false
%128 = and i1 %93, %127
br i1 %128, label %129, label %131
129: ; preds = %125
%130 = call i32 @paralysis(i32* %2, i32* %3, i32* %17, i32* %18, i32* %21)
br label %196
131: ; preds = %125
%132 = icmp eq i32 %102, 6
%133 = select i1 %132, i1 %94, i1 false
%134 = and i1 %93, %133
br i1 %134, label %135, label %137
135: ; preds = %131
%136 = call i32 @doubleattack(i32* %2, i32* %3, i32* %19, i32* %21)
br label %196
137: ; preds = %131
%138 = icmp eq i32 %102, 7
%139 = and i1 %97, %138
%140 = and i1 %93, %139
br i1 %140, label %141, label %143
141: ; preds = %137
%142 = call i32 @superstrength(i32* %2, i32* %3, i32* %20, i32* %21)
br label %196
143: ; preds = %137
%144 = icmp eq i32 %102, 8
%145 = and i1 %97, %144
br i1 %145, label %146, label %148
146: ; preds = %143
%147 = call i32 @antimagic(i32* %2, i32* %3, i32* %13, i32* %21)
br label %196
148: ; preds = %143
%149 = icmp eq i32 %102, 9
%150 = select i1 %149, i1 %92, i1 false
%151 = and i1 %93, %150
br i1 %151, label %152, label %154
152: ; preds = %148
%153 = call i32 @stealingspirit(i32* %0, i32* %1, i32* %2, i32* %3, i32* %4, i32* %5, i32* %6, i32* %7, i32* %8, i32* %9, i32* %10, i32* %11, i32* %12, i32* %13, i32* %14, i8* %22, i32* %16)
br label %196
154: ; preds = %148
%155 = icmp eq i32 %102, 10
%156 = and i1 %98, %155
br i1 %156, label %157, label %159
157: ; preds = %154
%158 = call i32 @bodyswitch(i32* %2, i32* %3, i32* %5, i32* %6, i32* %10, i32* %12, i32* %16, i32* %21)
br label %196
159: ; preds = %154
%160 = icmp eq i32 %102, 11
%161 = and i1 %91, %160
br i1 %161, label %162, label %164
162: ; preds = %159
%163 = call i32 @teleport(i32* %2, i32* %3, i32* %5, i32* %6, i32* %7, i32* %8, i32* %10, i32* %11, i32* %12, i32* %16, i32* %13, i32* %14, i32 %15)
br label %196
164: ; preds = %159
%165 = icmp eq i32 %102, 12
%166 = and i1 %99, %165
br i1 %166, label %167, label %169
167: ; preds = %164
%168 = call i32 @revelation(i32* %2, i32* %3, i32* %8, i32* %21)
br label %196
169: ; preds = %164
%170 = icmp eq i32 %102, 13
%171 = and i1 %99, %170
br i1 %171, label %172, label %174
172: ; preds = %169
%173 = call i32 @hellbomb(i32* %2, i32* %3, i32* %6, i32* %10, i32 %15, i32* %12, i32* %21)
br label %196
174: ; preds = %169
%175 = icmp eq i32 %102, 14
%176 = and i1 %90, %175
br i1 %176, label %177, label %179
177: ; preds = %174
%178 = call i32 @curse(i32* %2, i32* %3, i32* %14, i32* %21)
br label %196
179: ; preds = %174
%180 = icmp eq i32 %102, 15
%181 = and i1 %100, %180
br i1 %181, label %182, label %184
182: ; preds = %179
%183 = call i32 @genieofluck(i32* %0, i32* %1, i32* %2, i32* %3, i32* %4, i32* %5, i32* %6, i32* %7, i32* %8, i32* %9, i32* %10, i32* %13, i32 %15, i32* %21)
br label %196
184: ; preds = %179
%185 = icmp eq i32 %102, 16
%186 = and i1 %89, %185
br i1 %186, label %187, label %189
187: ; preds = %184
%188 = call i32 @stonestatue(i32* %2, i32* %3, i32* %6, i32 6, i32 %15, i32 0)
br label %196
189: ; preds = %184
%190 = icmp eq i32 %102, 17
%191 = and i1 %89, %190
br i1 %191, label %192, label %194
192: ; preds = %189
%193 = call i32 @godvision(i32* %2, i32* %3, i32* %8, i32* %21, i32 0)
br label %196
194: ; preds = %189
%195 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([19 x i8], [19 x i8]* @str, i64 0, i64 0))
br label %196
196: ; preds = %107, %117, %129, %141, %152, %162, %172, %182, %192, %194, %187, %177, %167, %157, %146, %135, %123, %112, %88, %35, %31
ret void
}