#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*/ matches_next(int const, char *, char *, int, int *);
char pow(int, int);
int /*<<< orphan*/ sscanf(char const *, char *, char *);
int /*<<< orphan*/ strcat(char *, char *);
int /*<<< orphan*/ strcpy(char *, char const *);
int strlen(char *);
int /*<<< orphan*/ *strstr(char *, char *);
int soma_string(char *string_entrada) {
  const int size = strlen(string_entrada) + 1;
  const char *ptr = string_entrada;
  char buff[size], sbuff[size], cbuff[2];
  char int_last[4] = {'i', 'i', 'i', 'i'};
  char delimitador[size][size];
  int sum = 0, int_last_cont = 0, i = 0, j = 0, int_readed = 0,
      qte_int_readed = 0;
  int ibuff;
  int potencia10 = 0;
  int last = -1;
  int qte_delimitador = 1;
  int size_of_del = 0;
  strcpy(delimitador[0], ",");
  while (1) {
    strcpy(buff, ptr);
    switch (last) {
    case 5:
      strcpy(sbuff, "");
      strcpy(cbuff, "");
      while (strstr(cbuff, "]") == NULL) {
        strcat(sbuff, cbuff);
        sscanf(ptr, "%1s", cbuff);
        if (ptr == string_entrada + size)
          return -1;
        ptr++;
      }
      ptr--;
      if (strlen(sbuff) > 0) {
        strcpy(delimitador[qte_delimitador], sbuff);
        qte_delimitador++;
      }
      last = 4;
      break;
    case 4:
      if (buff[0] == '\n') {
        last = 0;
      } else if (buff[0] == '[') {
        last = 5;
        break;
      } else {
        return -1;
      }
      break;
    case 3:
      if (buff[0] == '/') {
        last = 4;
        break;
      } else {
        return -1;
      }
      break;
    case 2:
      if (buff[0] >= '0' && buff[0] <= '9') {
        i = int_last_cont - 1;
        j = 0;
        while (i >= 0) {
          sum -= (int_last[i] - '0') * pow(10, j);
          i--;
          j++;
          qte_int_readed--;
        }
        j = int_last_cont;
        i = 0;
        ibuff = sum;
        while (i < int_last_cont) {
          sum += (int_last[i] - '0') * pow(10, j);
          i++;
          j--;
        }
        if (sum - ibuff > 1000) {
          sum = ibuff;
        }
        last = 2;
        sum += buff[0] - '0';
        int_last[int_last_cont] = buff[0];
        int_last_cont++;
        int_readed = 1;
        qte_int_readed++;
        if (qte_int_readed > 3)
          return -1;
      } else if (matches_next(size, buff, (char *)&delimitador[0],
                              qte_delimitador, &size_of_del)) {
        int_last_cont = 0;
        last = 1;
        int_readed = 0;
        ptr += size_of_del - 1;
        size_of_del = 0;
      } else if (buff[0] == '\n') {
        int_last_cont = 0;
        last = 0;
        qte_int_readed = 0;
      } else
        return -1;
      break;
    case 1:
      if (buff[0] >= '0' && buff[0] <= '9') {
        sum += buff[0] - '0';
        int_last[int_last_cont] = buff[0];
        int_last_cont++;
        last = 2;
        int_readed = 1;
        qte_int_readed++;
        if (qte_int_readed > 3)
          return -1;
      } else if (buff[0] == '\n') {
        last = 0;
        qte_int_readed = 0;
        break;
      } else
        return -1;
      break;
    case 0:
      if (buff[0] >= '0' && buff[0] <= '9') {
        sum += buff[0] - '0';
        int_last[int_last_cont] = buff[0];
        int_last_cont++;
        last = 2;
        int_readed = 1;
        qte_int_readed++;
        if (qte_int_readed > 3)
          return -1;
      } else if (matches_next(size, buff, (char *)&delimitador[0],
                              qte_delimitador, &size_of_del)) {
        int_last_cont = 0;
        last = 1;
        ptr += size_of_del - 1;
        size_of_del = 0;
        if (!int_readed)
          return -1;
      } else if (buff[0] == 0) {
        if (!int_readed)
          return -1;
        return sum;
      } else if (buff[0] == '\n') {
        qte_int_readed = 0;
        break;
      } else {
        return -1;
      }
      break;
    case -1:
      if (buff[0] >= '0' && buff[0] <= '9') {
        sum += buff[0] - '0';
        int_last[int_last_cont] = buff[0];
        int_last_cont++;
        last = 2;
        int_readed = 1;
        qte_int_readed++;
        if (qte_int_readed > 3)
          return -1;
      } else if (buff[0] == '\n') {
        return 0;
        break;
      } else if (buff[0] == '/') {
        last = 3;
        break;
      } else {
        return -1;
      }
      break;
    }
    ptr++;
  }
  return -2;
}


x86 assembly (clang, -O0):
<soma_string>:
push   %rbp
mov    %rsp,%rbp
sub    $0xb0,%rsp
mov    %rdi,-0x10(%rbp)
mov    -0x10(%rbp),%rdi
call   1040 <strlen@plt>
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
mov    -0x10(%rbp),%rax
mov    %rax,-0x20(%rbp)
mov    -0x14(%rbp),%eax
mov    %rsp,%rcx
mov    %rcx,-0x28(%rbp)
mov    %rax,%rdx
add    $0xf,%rdx
and    $0xfffffffffffffff0,%rdx
mov    %rsp,%rcx
sub    %rdx,%rcx
mov    %rcx,-0xa0(%rbp)
mov    %rcx,%rsp
mov    %rax,-0x30(%rbp)
mov    -0x14(%rbp),%eax
mov    %rax,%rdx
add    $0xf,%rdx
and    $0xfffffffffffffff0,%rdx
mov    %rsp,%rcx
sub    %rdx,%rcx
mov    %rcx,-0x98(%rbp)
mov    %rcx,%rsp
mov    %rax,-0x38(%rbp)
movl   $0x69696969,-0x40(%rbp)
mov    -0x14(%rbp),%eax
mov    %eax,%ecx
mov    %rcx,%rax
mov    %rax,-0x90(%rbp)
mov    %rcx,%rdx
imul   %rdx,%rdx
add    $0xf,%rdx
and    $0xfffffffffffffff0,%rdx
mov    %rsp,%rdi
sub    %rdx,%rdi
mov    %rdi,-0x88(%rbp)
mov    %rdi,%rsp
mov    %rcx,-0x48(%rbp)
mov    %rax,-0x50(%rbp)
movl   $0x0,-0x54(%rbp)
movl   $0x0,-0x58(%rbp)
movl   $0x0,-0x5c(%rbp)
movl   $0x0,-0x60(%rbp)
movl   $0x0,-0x64(%rbp)
movl   $0x0,-0x68(%rbp)
movl   $0x0,-0x70(%rbp)
movl   $0xffffffff,-0x74(%rbp)
movl   $0x1,-0x78(%rbp)
movl   $0x0,-0x7c(%rbp)
imul   $0x0,%rax,%rax
add    %rax,%rdi
lea    0xdae(%rip),%rsi
call   1030 <strcpy@plt>
jmp    127c <soma_string+0x10c>
mov    -0xa0(%rbp),%rdi
mov    -0x20(%rbp),%rsi
call   1030 <strcpy@plt>
mov    -0x74(%rbp),%eax
add    $0x1,%eax
mov    %eax,%ecx
mov    %rcx,-0xa8(%rbp)
sub    $0x6,%eax
ja     198c <soma_string+0x81c>
mov    -0xa8(%rbp),%rax
lea    0xd4e(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
mov    -0x98(%rbp),%rdi
lea    0xd58(%rip),%rsi
call   1030 <strcpy@plt>
lea    -0x3a(%rbp),%rdi
lea    0xd48(%rip),%rsi
call   1030 <strcpy@plt>
lea    -0x3a(%rbp),%rdi
lea    0xd39(%rip),%rsi
call   1090 <strstr@plt>
cmp    $0x0,%rax
jne    1358 <soma_string+0x1e8>
mov    -0x98(%rbp),%rdi
lea    -0x3a(%rbp),%rsi
call   1080 <strcat@plt>
mov    -0x20(%rbp),%rdi
lea    -0x3a(%rbp),%rdx
lea    0xd0d(%rip),%rsi
call   1050 <sscanf@plt>
mov    -0x20(%rbp),%rax
mov    -0x10(%rbp),%rcx
movslq -0x14(%rbp),%rdx
add    %rdx,%rcx
cmp    %rcx,%rax
jne    1347 <soma_string+0x1d7>
movl   $0xffffffff,-0x4(%rbp)
movl   $0x1,-0x80(%rbp)
jmp    199d <soma_string+0x82d>
mov    -0x20(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20(%rbp)
jmp    12de <soma_string+0x16e>
mov    -0x98(%rbp),%rdi
mov    -0x20(%rbp),%rax
add    $0xffffffffffffffff,%rax
mov    %rax,-0x20(%rbp)
call   1040 <strlen@plt>
cmp    $0x0,%eax
jle    13a7 <soma_string+0x237>
mov    -0x98(%rbp),%rsi
mov    -0x88(%rbp),%rdi
mov    -0x90(%rbp),%rcx
movslq -0x78(%rbp),%rax
imul   %rcx,%rax
add    %rax,%rdi
call   1030 <strcpy@plt>
mov    -0x78(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x78(%rbp)
movl   $0x4,-0x74(%rbp)
jmp    198c <soma_string+0x81c>
mov    -0xa0(%rbp),%rax
movsbl (%rax),%eax
cmp    $0xa,%eax
jne    13d2 <soma_string+0x262>
movl   $0x0,-0x74(%rbp)
jmp    1404 <soma_string+0x294>
mov    -0xa0(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x5b,%eax
jne    13f1 <soma_string+0x281>
movl   $0x5,-0x74(%rbp)
jmp    198c <soma_string+0x81c>
movl   $0xffffffff,-0x4(%rbp)
movl   $0x1,-0x80(%rbp)
jmp    199d <soma_string+0x82d>
jmp    198c <soma_string+0x81c>
mov    -0xa0(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2f,%eax
jne    1428 <soma_string+0x2b8>
movl   $0x4,-0x74(%rbp)
jmp    198c <soma_string+0x81c>
movl   $0xffffffff,-0x4(%rbp)
movl   $0x1,-0x80(%rbp)
jmp    199d <soma_string+0x82d>
mov    -0xa0(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x30,%eax
jl     15ad <soma_string+0x43d>
mov    -0xa0(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x39,%eax
jg     15ad <soma_string+0x43d>
mov    -0x58(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x5c(%rbp)
movl   $0x0,-0x60(%rbp)
cmpl   $0x0,-0x5c(%rbp)
jl     14ce <soma_string+0x35e>
movslq -0x5c(%rbp),%rax
movsbl -0x40(%rbp,%rax,1),%eax
sub    $0x30,%eax
mov    %eax,-0xac(%rbp)
mov    -0x60(%rbp),%esi
mov    $0xa,%edi
call   1070 <pow@plt>
mov    -0xac(%rbp),%ecx
movsbl %al,%eax
imul   %eax,%ecx
mov    -0x54(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x54(%rbp)
mov    -0x5c(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x5c(%rbp)
mov    -0x60(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x60(%rbp)
mov    -0x68(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x68(%rbp)
jmp    1471 <soma_string+0x301>
mov    -0x58(%rbp),%eax
mov    %eax,-0x60(%rbp)
movl   $0x0,-0x5c(%rbp)
mov    -0x54(%rbp),%eax
mov    %eax,-0x6c(%rbp)
mov    -0x5c(%rbp),%eax
cmp    -0x58(%rbp),%eax
jge    1537 <soma_string+0x3c7>
movslq -0x5c(%rbp),%rax
movsbl -0x40(%rbp,%rax,1),%eax
sub    $0x30,%eax
mov    %eax,-0xb0(%rbp)
mov    -0x60(%rbp),%esi
mov    $0xa,%edi
call   1070 <pow@plt>
mov    %al,%cl
mov    -0xb0(%rbp),%eax
movsbl %cl,%ecx
imul   %ecx,%eax
add    -0x54(%rbp),%eax
mov    %eax,-0x54(%rbp)
mov    -0x5c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x5c(%rbp)
mov    -0x60(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x60(%rbp)
jmp    14e1 <soma_string+0x371>
mov    -0x54(%rbp),%eax
sub    -0x6c(%rbp),%eax
cmp    $0x3e8,%eax
jle    154e <soma_string+0x3de>
mov    -0x6c(%rbp),%eax
mov    %eax,-0x54(%rbp)
mov    -0xa0(%rbp),%rax
movl   $0x2,-0x74(%rbp)
movsbl (%rax),%ecx
sub    $0x30,%ecx
add    -0x54(%rbp),%ecx
mov    %ecx,-0x54(%rbp)
mov    (%rax),%cl
movslq -0x58(%rbp),%rax
mov    %cl,-0x40(%rbp,%rax,1)
mov    -0x58(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x58(%rbp)
movl   $0x1,-0x64(%rbp)
mov    -0x68(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x68(%rbp)
cmpl   $0x3,-0x68(%rbp)
jle    15a8 <soma_string+0x438>
movl   $0xffffffff,-0x4(%rbp)
movl   $0x1,-0x80(%rbp)
jmp    199d <soma_string+0x82d>
jmp    1660 <soma_string+0x4f0>
mov    -0xa0(%rbp),%rsi
mov    -0x88(%rbp),%rdx
mov    -0x90(%rbp),%rax
mov    -0x14(%rbp),%edi
imul   $0x0,%rax,%rax
add    %rax,%rdx
mov    -0x78(%rbp),%ecx
lea    -0x7c(%rbp),%r8
call   1060 <matches_next@plt>
cmp    $0x0,%eax
je     1616 <soma_string+0x4a6>
movl   $0x0,-0x58(%rbp)
movl   $0x1,-0x74(%rbp)
movl   $0x0,-0x64(%rbp)
mov    -0x7c(%rbp),%ecx
sub    $0x1,%ecx
mov    -0x20(%rbp),%rax
movslq %ecx,%rcx
add    %rcx,%rax
mov    %rax,-0x20(%rbp)
movl   $0x0,-0x7c(%rbp)
jmp    165b <soma_string+0x4eb>
mov    -0xa0(%rbp),%rax
movsbl (%rax),%eax
cmp    $0xa,%eax
jne    1643 <soma_string+0x4d3>
movl   $0x0,-0x58(%rbp)
movl   $0x0,-0x74(%rbp)
movl   $0x0,-0x68(%rbp)
jmp    1656 <soma_string+0x4e6>
movl   $0xffffffff,-0x4(%rbp)
movl   $0x1,-0x80(%rbp)
jmp    199d <soma_string+0x82d>
jmp    165b <soma_string+0x4eb>
jmp    1660 <soma_string+0x4f0>
jmp    198c <soma_string+0x81c>
mov    -0xa0(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x30,%eax
jl     16ea <soma_string+0x57a>
mov    -0xa0(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x39,%eax
jg     16ea <soma_string+0x57a>
mov    -0xa0(%rbp),%rax
movsbl (%rax),%ecx
sub    $0x30,%ecx
add    -0x54(%rbp),%ecx
mov    %ecx,-0x54(%rbp)
mov    (%rax),%cl
movslq -0x58(%rbp),%rax
mov    %cl,-0x40(%rbp,%rax,1)
mov    -0x58(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x58(%rbp)
movl   $0x2,-0x74(%rbp)
movl   $0x1,-0x64(%rbp)
mov    -0x68(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x68(%rbp)
cmpl   $0x3,-0x68(%rbp)
jle    16e5 <soma_string+0x575>
movl   $0xffffffff,-0x4(%rbp)
movl   $0x1,-0x80(%rbp)
jmp    199d <soma_string+0x82d>
jmp    1723 <soma_string+0x5b3>
mov    -0xa0(%rbp),%rax
movsbl (%rax),%eax
cmp    $0xa,%eax
jne    1710 <soma_string+0x5a0>
movl   $0x0,-0x74(%rbp)
movl   $0x0,-0x68(%rbp)
jmp    198c <soma_string+0x81c>
movl   $0xffffffff,-0x4(%rbp)
movl   $0x1,-0x80(%rbp)
jmp    199d <soma_string+0x82d>
jmp    198c <soma_string+0x81c>
mov    -0xa0(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x30,%eax
jl     17ad <soma_string+0x63d>
mov    -0xa0(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x39,%eax
jg     17ad <soma_string+0x63d>
mov    -0xa0(%rbp),%rax
movsbl (%rax),%ecx
sub    $0x30,%ecx
add    -0x54(%rbp),%ecx
mov    %ecx,-0x54(%rbp)
mov    (%rax),%cl
movslq -0x58(%rbp),%rax
mov    %cl,-0x40(%rbp,%rax,1)
mov    -0x58(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x58(%rbp)
movl   $0x2,-0x74(%rbp)
movl   $0x1,-0x64(%rbp)
mov    -0x68(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x68(%rbp)
cmpl   $0x3,-0x68(%rbp)
jle    17a8 <soma_string+0x638>
movl   $0xffffffff,-0x4(%rbp)
movl   $0x1,-0x80(%rbp)
jmp    199d <soma_string+0x82d>
jmp    18a5 <soma_string+0x735>
mov    -0xa0(%rbp),%rsi
mov    -0x88(%rbp),%rdx
mov    -0x90(%rbp),%rax
mov    -0x14(%rbp),%edi
imul   $0x0,%rax,%rax
add    %rax,%rdx
mov    -0x78(%rbp),%ecx
lea    -0x7c(%rbp),%r8
call   1060 <matches_next@plt>
cmp    $0x0,%eax
je     182c <soma_string+0x6bc>
movl   $0x0,-0x58(%rbp)
movl   $0x1,-0x74(%rbp)
mov    -0x7c(%rbp),%ecx
sub    $0x1,%ecx
mov    -0x20(%rbp),%rax
movslq %ecx,%rcx
add    %rcx,%rax
mov    %rax,-0x20(%rbp)
movl   $0x0,-0x7c(%rbp)
cmpl   $0x0,-0x64(%rbp)
jne    1827 <soma_string+0x6b7>
movl   $0xffffffff,-0x4(%rbp)
movl   $0x1,-0x80(%rbp)
jmp    199d <soma_string+0x82d>
jmp    18a0 <soma_string+0x730>
mov    -0xa0(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x0,%eax
jne    186e <soma_string+0x6fe>
cmpl   $0x0,-0x64(%rbp)
jne    185c <soma_string+0x6ec>
movl   $0xffffffff,-0x4(%rbp)
movl   $0x1,-0x80(%rbp)
jmp    199d <soma_string+0x82d>
mov    -0x54(%rbp),%eax
mov    %eax,-0x4(%rbp)
movl   $0x1,-0x80(%rbp)
jmp    199d <soma_string+0x82d>
mov    -0xa0(%rbp),%rax
movsbl (%rax),%eax
cmp    $0xa,%eax
jne    188d <soma_string+0x71d>
movl   $0x0,-0x68(%rbp)
jmp    198c <soma_string+0x81c>
movl   $0xffffffff,-0x4(%rbp)
movl   $0x1,-0x80(%rbp)
jmp    199d <soma_string+0x82d>
jmp    18a5 <soma_string+0x735>
jmp    198c <soma_string+0x81c>
mov    -0xa0(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x30,%eax
jl     192f <soma_string+0x7bf>
mov    -0xa0(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x39,%eax
jg     192f <soma_string+0x7bf>
mov    -0xa0(%rbp),%rax
movsbl (%rax),%ecx
sub    $0x30,%ecx
add    -0x54(%rbp),%ecx
mov    %ecx,-0x54(%rbp)
mov    (%rax),%cl
movslq -0x58(%rbp),%rax
mov    %cl,-0x40(%rbp,%rax,1)
mov    -0x58(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x58(%rbp)
movl   $0x2,-0x74(%rbp)
movl   $0x1,-0x64(%rbp)
mov    -0x68(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x68(%rbp)
cmpl   $0x3,-0x68(%rbp)
jle    192a <soma_string+0x7ba>
movl   $0xffffffff,-0x4(%rbp)
movl   $0x1,-0x80(%rbp)
jmp    199d <soma_string+0x82d>
jmp    1987 <soma_string+0x817>
mov    -0xa0(%rbp),%rax
movsbl (%rax),%eax
cmp    $0xa,%eax
jne    1955 <soma_string+0x7e5>
movl   $0x0,-0x4(%rbp)
movl   $0x1,-0x80(%rbp)
jmp    199d <soma_string+0x82d>
mov    -0xa0(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2f,%eax
jne    1974 <soma_string+0x804>
movl   $0x3,-0x74(%rbp)
jmp    198c <soma_string+0x81c>
movl   $0xffffffff,-0x4(%rbp)
movl   $0x1,-0x80(%rbp)
jmp    199d <soma_string+0x82d>
jmp    198c <soma_string+0x81c>
mov    -0x20(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20(%rbp)
jmp    1277 <soma_string+0x107>
mov    -0x28(%rbp),%rax
mov    %rax,%rsp
mov    -0x4(%rbp),%eax
mov    %rbp,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<soma_string>:
push   %rbp
mov    %rsp,%rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x68,%rsp
mov    %rdi,%r12
call   1040 <strlen@plt>
mov    %eax,%r14d
lea    0x1(%r14),%edx
mov    %rsp,%rbx
lea    0xf(%rdx),%rax
and    $0xfffffffffffffff0,%rax
sub    %rax,%rbx
mov    %rbx,%rsp
mov    %rsp,%rcx
sub    %rax,%rcx
mov    %rcx,-0x88(%rbp)
mov    %rcx,%rsp
movl   $0x69696969,-0x30(%rbp)
mov    %rdx,-0x78(%rbp)
mov    %rdx,%rax
imul   %rdx,%rax
mov    %rsp,%rdi
add    $0xf,%rax
and    $0xfffffffffffffff0,%rax
sub    %rax,%rdi
mov    %rdi,%rsp
movl   $0x0,-0x44(%rbp)
lea    0xe3a(%rip),%rsi
mov    %rdi,-0x70(%rbp)
call   1030 <strcpy@plt>
mov    %rbx,%rsi
movslq %r14d,%rax
add    %r12,%rax
add    $0x1,%rax
mov    %rax,-0x90(%rbp)
movl   $0x1,-0x54(%rbp)
mov    $0xffffffff,%ebx
xor    %r14d,%r14d
lea    -0x36(%rbp),%r15
movl   $0x0,-0x2c(%rbp)
movl   $0x0,-0x50(%rbp)
xor    %r13d,%r13d
mov    %rsi,-0x40(%rbp)
jmp    123f <soma_string+0xcf>
mov    $0x4,%ebx
mov    -0x40(%rbp),%rsi
cmpb   $0x2f,(%rsi)
jne    1714 <soma_string+0x5a4>
add    $0x1,%r12
mov    %rsi,%rdi
mov    %r12,%rsi
call   1030 <strcpy@plt>
lea    0x1(%rbx),%eax
cmp    $0x6,%eax
ja     1296 <soma_string+0x126>
lea    0xda7(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
mov    -0x40(%rbp),%rsi
mov    (%rsi),%cl
lea    -0x30(%rcx),%eax
cmp    $0x9,%al
ja     1548 <soma_string+0x3d8>
mov    -0x2c(%rbp),%edx
movslq %edx,%rax
mov    %cl,-0x30(%rbp,%rax,1)
cmp    $0x2,%r13d
jg     1714 <soma_string+0x5a4>
movzbl %cl,%eax
add    %eax,%r14d
add    $0xffffffd0,%r14d
jmp    16ee <soma_string+0x57e>
mov    -0x40(%rbp),%rsi
add    $0x1,%r12
jmp    123f <soma_string+0xcf>
mov    -0x40(%rbp),%rsi
mov    (%rsi),%al
lea    -0x30(%rax),%ecx
cmp    $0x9,%cl
jbe    131b <soma_string+0x1ab>
mov    -0x78(%rbp),%rdi
mov    %rsi,%rbx
mov    -0x70(%rbp),%rdx
mov    -0x54(%rbp),%ecx
lea    -0x44(%rbp),%r8
call   1070 <matches_next@plt>
test   %eax,%eax
je     15bc <soma_string+0x44c>
movslq -0x44(%rbp),%rax
movl   $0x0,-0x44(%rbp)
cmpl   $0x0,-0x50(%rbp)
je     1714 <soma_string+0x5a4>
add    %rax,%r12
add    $0xffffffffffffffff,%r12
movl   $0x1,-0x50(%rbp)
movl   $0x0,-0x2c(%rbp)
mov    $0x1,%ebx
mov    -0x40(%rbp),%rsi
add    $0x1,%r12
jmp    123f <soma_string+0xcf>
mov    -0x40(%rbp),%rsi
mov    (%rsi),%al
lea    -0x30(%rax),%ecx
cmp    $0x9,%cl
ja     155b <soma_string+0x3eb>
mov    -0x2c(%rbp),%edx
movslq %edx,%rcx
mov    %al,-0x30(%rbp,%rcx,1)
cmp    $0x2,%r13d
jg     1714 <soma_string+0x5a4>
movzbl %al,%eax
add    %eax,%r14d
add    $0xffffffd0,%r14d
jmp    16ee <soma_string+0x57e>
mov    -0x40(%rbp),%rsi
mov    (%rsi),%al
add    $0xd0,%al
cmp    $0x9,%al
ja     1570 <soma_string+0x400>
mov    -0x2c(%rbp),%edx
test   %edx,%edx
jle    15d8 <soma_string+0x468>
mov    %r13d,-0x34(%rbp)
mov    %r12,-0x68(%rbp)
mov    %edx,%r12d
xor    %r13d,%r13d
cmp    $0x1,%edx
mov    %r12,-0x60(%rbp)
je     13eb <soma_string+0x27b>
and    $0xfffffffe,%edx
mov    %edx,-0x50(%rbp)
xor    %r13d,%r13d
nopl   0x0(%rax)
mov    $0xffffffff,%eax
add    %r12d,%eax
mov    %r14,%rbx
movsbl -0x30(%rbp,%rax,1),%r14d
add    $0xffffffd0,%r14d
mov    $0xa,%edi
mov    %r13d,%esi
call   1080 <pow@plt>
movsbl %al,%r15d
imul   %r14d,%r15d
mov    %rbx,%r14
add    $0xfffffffffffffffe,%r12
mov    %r12d,%eax
movsbl -0x30(%rbp,%rax,1),%ebx
add    $0xffffffd0,%ebx
lea    0x1(%r13),%esi
mov    $0xa,%edi
call   1080 <pow@plt>
movsbl %al,%eax
imul   %ebx,%eax
add    %r15d,%eax
sub    %eax,%r14d
add    $0x2,%r13d
cmp    -0x50(%rbp),%r13d
jne    1380 <soma_string+0x210>
mov    -0x40(%rbp),%rsi
lea    -0x36(%rbp),%r15
mov    -0x2c(%rbp),%edx
test   $0x1,%dl
je     1420 <soma_string+0x2b0>
mov    $0xffffffff,%eax
add    %eax,%r12d
movsbl -0x30(%rbp,%r12,1),%ebx
add    $0xffffffd0,%ebx
mov    $0xa,%edi
mov    %rsi,%r12
mov    %r13d,%esi
call   1080 <pow@plt>
mov    %r12,%rsi
mov    -0x2c(%rbp),%edx
movsbl %al,%eax
imul   %ebx,%eax
sub    %eax,%r14d
mov    -0x34(%rbp),%eax
sub    %edx,%eax
test   %edx,%edx
jle    1603 <soma_string+0x493>
cmp    $0x1,%edx
mov    %r14,-0x80(%rbp)
mov    %eax,-0x34(%rbp)
jne    1612 <soma_string+0x4a2>
xor    %r15d,%r15d
mov    %edx,%r13d
mov    %r14d,%ebx
mov    -0x68(%rbp),%r12
jmp    168d <soma_string+0x51d>
mov    -0x40(%rbp),%rsi
mov    (%rsi),%al
xor    %ebx,%ebx
cmp    $0xa,%al
je     123b <soma_string+0xcb>
cmp    $0x5b,%al
jne    1714 <soma_string+0x5a4>
mov    $0x5,%ebx
add    $0x1,%r12
jmp    123f <soma_string+0xcf>
mov    %r13d,-0x34(%rbp)
mov    -0x88(%rbp),%rbx
mov    %rbx,%rdi
mov    %r15,%r13
lea    0xb90(%rip),%r15
mov    %r15,%rsi
call   1030 <strcpy@plt>
mov    %r13,%rdi
mov    %r15,%rsi
mov    %r13,%r15
call   1030 <strcpy@plt>
mov    %r13,%rdi
mov    $0x5d,%esi
call   1050 <strchr@plt>
test   %rax,%rax
jne    14fc <soma_string+0x38c>
lea    0xb62(%rip),%r13
nopl   0x0(%rax)
mov    %rbx,%rdi
mov    %r15,%rsi
call   1090 <strcat@plt>
mov    %r12,%rdi
mov    %r13,%rsi
mov    %r15,%rdx
call   1060 <sscanf@plt>
cmp    -0x90(%rbp),%r12
je     1714 <soma_string+0x5a4>
add    $0x1,%r12
mov    %r15,%rdi
mov    $0x5d,%esi
call   1050 <strchr@plt>
test   %rax,%rax
je     14c0 <soma_string+0x350>
add    $0xffffffffffffffff,%r12
mov    %rbx,%rdi
call   1040 <strlen@plt>
mov    %rbx,%rsi
mov    $0x4,%ebx
test   %eax,%eax
jle    1537 <soma_string+0x3c7>
mov    %r14,%r13
mov    -0x54(%rbp),%r14d
movslq %r14d,%rdi
imul   -0x78(%rbp),%rdi
add    -0x70(%rbp),%rdi
call   1030 <strcpy@plt>
add    $0x1,%r14d
mov    %r14d,-0x54(%rbp)
mov    %r13,%r14
mov    -0x34(%rbp),%r13d
mov    -0x40(%rbp),%rsi
add    $0x1,%r12
jmp    123f <soma_string+0xcf>
mov    $0x3,%ebx
cmp    $0x2f,%cl
je     123b <soma_string+0xcb>
jmp    170d <soma_string+0x59d>
xor    %r13d,%r13d
mov    $0x0,%ebx
cmp    $0xa,%al
je     123b <soma_string+0xcb>
jmp    1714 <soma_string+0x5a4>
mov    -0x78(%rbp),%rdi
mov    %rsi,%rbx
mov    -0x70(%rbp),%rdx
mov    -0x54(%rbp),%ecx
lea    -0x44(%rbp),%r8
call   1070 <matches_next@plt>
test   %eax,%eax
je     15e0 <soma_string+0x470>
movslq -0x44(%rbp),%rax
add    %rax,%r12
add    $0xffffffffffffffff,%r12
movl   $0x0,-0x44(%rbp)
mov    %rbx,%rsi
mov    $0x1,%ebx
movl   $0x0,-0x2c(%rbp)
movl   $0x0,-0x50(%rbp)
add    $0x1,%r12
jmp    123f <soma_string+0xcf>
mov    (%rbx),%cl
xor    %r13d,%r13d
cmp    $0xa,%cl
jne    1728 <soma_string+0x5b8>
mov    %rbx,%rsi
xor    %ebx,%ebx
add    $0x1,%r12
jmp    123f <soma_string+0xcf>
mov    %r14d,%ebx
jmp    16c8 <soma_string+0x558>
movl   $0x0,-0x2c(%rbp)
cmpb   $0xa,(%rbx)
mov    $0x0,%r13d
mov    %rbx,%rsi
mov    $0x0,%ebx
je     123b <soma_string+0xcb>
jmp    1714 <soma_string+0x5a4>
mov    %r14d,%ebx
mov    -0x68(%rbp),%r12
mov    %eax,%r13d
jmp    16c8 <soma_string+0x558>
mov    -0x60(%rbp),%rax
and    $0xfffffffe,%eax
mov    %rax,-0x50(%rbp)
xor    %r15d,%r15d
mov    %edx,%r13d
mov    %r14d,%ebx
cs nopw 0x0(%rax,%rax,1)
movsbl -0x30(%rbp,%r15,1),%r14d
add    $0xffffffd0,%r14d
mov    $0xa,%edi
mov    %r13d,%esi
call   1080 <pow@plt>
movsbl %al,%r12d
imul   %r14d,%r12d
add    %ebx,%r12d
movsbl -0x2f(%rbp,%r15,1),%r14d
add    $0xffffffd0,%r14d
lea    -0x1(%r13),%esi
mov    $0xa,%edi
call   1080 <pow@plt>
movsbl %al,%ebx
imul   %r14d,%ebx
add    %r12d,%ebx
add    $0x2,%r15
add    $0xfffffffe,%r13d
cmp    %r15,-0x50(%rbp)
jne    1630 <soma_string+0x4c0>
mov    -0x68(%rbp),%r12
mov    -0x80(%rbp),%r14
mov    -0x2c(%rbp),%edx
mov    -0x60(%rbp),%rax
test   $0x1,%al
je     16bc <soma_string+0x54c>
movsbl -0x30(%rbp,%r15,1),%r14d
add    $0xffffffd0,%r14d
mov    $0xa,%edi
mov    %r13d,%esi
call   1080 <pow@plt>
mov    -0x2c(%rbp),%edx
movsbl %al,%eax
imul   %r14d,%eax
mov    -0x80(%rbp),%r14
add    %eax,%ebx
mov    -0x40(%rbp),%rsi
lea    -0x36(%rbp),%r15
mov    -0x34(%rbp),%r13d
mov    %ebx,%eax
sub    %r14d,%eax
cmp    $0x3e9,%eax
cmovge %r14d,%ebx
movsbl (%rsi),%eax
movslq %edx,%rcx
mov    %al,-0x30(%rbp,%rcx,1)
cmp    $0x2,%r13d
jg     1714 <soma_string+0x5a4>
lea    (%rbx,%rax,1),%r14d
add    $0xffffffd0,%r14d
add    $0x1,%edx
mov    %edx,-0x2c(%rbp)
add    $0x1,%r13d
mov    $0x2,%ebx
movl   $0x1,-0x50(%rbp)
add    $0x1,%r12
jmp    123f <soma_string+0xcf>
xor    %eax,%eax
cmp    $0xa,%cl
je     1719 <soma_string+0x5a9>
mov    $0xffffffff,%eax
lea    -0x28(%rbp),%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
mov    $0xffffffff,%eax
test   %cl,%cl
jne    1719 <soma_string+0x5a9>
cmpl   $0x1,-0x50(%rbp)
sbb    %eax,%eax
or     %r14d,%eax
jmp    1719 <soma_string+0x5a9>

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

LLVM IR (-O2):
@.str = [2 x i8] c",\00"
@.str.1 = [1 x i8] zeroinitializer
@.str.3 = [4 x i8] c"%1s\00"
define i32 @soma_string(i8* %0) {
%2 = alloca [2 x i8]
%3 = alloca i32
%4 = bitcast i32* %3 to [4 x i8]*
%5 = alloca i32
%6 = tail call i32 @strlen(i8* %0)
%7 = add nsw i32 %6, 1
%8 = zext i32 %7 to i64
%9 = alloca i8, i64 %8
%10 = alloca i8, i64 %8
%11 = getelementptr inbounds [2 x i8], [2 x i8]* %2, i64 0, i64 0
%12 = bitcast i32* %3 to i8*
store i32 1768515945, i32* %3
%13 = mul nuw i64 %8, %8
%14 = alloca i8, i64 %13
%15 = bitcast i32* %5 to i8*
store i32 0, i32* %5
%16 = call i32 @strcpy(i8* %14, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str, i64 0, i64 0))
%17 = sext i32 %7 to i64
%18 = getelementptr inbounds i8, i8* %0, i64 %17
br label %19
19: ; preds = %250, %1
%20 = phi i32 [ 0, %1 ], [ %251, %250 ]
%21 = phi i32 [ 0, %1 ], [ %252, %250 ]
%22 = phi i32 [ 0, %1 ], [ %253, %250 ]
%23 = phi i32 [ 0, %1 ], [ %254, %250 ]
%24 = phi i8* [ %0, %1 ], [ %258, %250 ]
%25 = phi i32 [ -1, %1 ], [ %256, %250 ]
%26 = phi i32 [ 1, %1 ], [ %257, %250 ]
%27 = call i32 @strcpy(i8* %9, i8* %24)
switch i32 %25, label %250 [
i32 5, label %28
i32 4, label %53
i32 3, label %56
i32 2, label %59
i32 1, label %194
i32 0, label %209
i32 -1, label %236
]
28: ; preds = %19
%29 = call i32 @strcpy(i8* %10, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.1, i64 0, i64 0))
%30 = call i32 @strcpy(i8* %11, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.1, i64 0, i64 0))
%31 = call i8* @strchr(i8* %11, i32 93)
%32 = icmp eq i8* %31, null
br i1 %32, label %33, label %42
33: ; preds = %28, %38
%34 = phi i8* [ %39, %38 ], [ %24, %28 ]
%35 = call i32 @strcat(i8* %10, i8* %11)
%36 = call i32 @sscanf(i8* %34, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.3, i64 0, i64 0), i8* %11)
%37 = icmp eq i8* %34, %18
br i1 %37, label %261, label %38
38: ; preds = %33
%39 = getelementptr inbounds i8, i8* %34, i64 1
%40 = call i8* @strchr(i8* %11, i32 93)
%41 = icmp eq i8* %40, null
br i1 %41, label %33, label %42
42: ; preds = %38, %28
%43 = phi i8* [ %24, %28 ], [ %39, %38 ]
%44 = getelementptr inbounds i8, i8* %43, i64 -1
%45 = call i32 @strlen(i8* %10)
%46 = icmp sgt i32 %45, 0
br i1 %46, label %47, label %250
47: ; preds = %42
%48 = sext i32 %26 to i64
%49 = mul nsw i64 %48, %8
%50 = getelementptr inbounds i8, i8* %14, i64 %49
%51 = call i32 @strcpy(i8* %50, i8* %10)
%52 = add nsw i32 %26, 1
br label %250
53: ; preds = %19
%54 = load i8, i8* %9
switch i8 %54, label %259 [
i8 10, label %250
i8 91, label %55
]
55: ; preds = %53
br label %250
56: ; preds = %19
%57 = load i8, i8* %9
%58 = icmp eq i8 %57, 47
br i1 %58, label %250, label %259
59: ; preds = %19
%60 = load i8, i8* %9
%61 = add i8 %60, -48
%62 = icmp ult i8 %61, 10
br i1 %62, label %63, label %183
63: ; preds = %59
%64 = icmp sgt i32 %21, 0
br i1 %64, label %65, label %167
65: ; preds = %63
%66 = zext i32 %21 to i64
%67 = and i32 %21, 1
%68 = icmp eq i32 %21, 1
br i1 %68, label %71, label %69
69: ; preds = %65
%70 = and i32 %21, -2
br label %96
71: ; preds = %96, %65
%72 = phi i32 [ undef, %65 ], [ %121, %96 ]
%73 = phi i64 [ %66, %65 ], [ %111, %96 ]
%74 = phi i32 [ 0, %65 ], [ %122, %96 ]
%75 = phi i32 [ %20, %65 ], [ %121, %96 ]
%76 = icmp eq i32 %67, 0
br i1 %76, label %88, label %77
77: ; preds = %71
%78 = add i64 %73, 4294967295
%79 = and i64 %78, 4294967295
%80 = getelementptr inbounds [4 x i8], [4 x i8]* %4, i64 0, i64 %79
%81 = load i8, i8* %80
%82 = sext i8 %81 to i32
%83 = add nsw i32 %82, -48
%84 = call signext i8 @pow(i32 10, i32 %74)
%85 = sext i8 %84 to i32
%86 = mul nsw i32 %83, %85
%87 = sub nsw i32 %75, %86
br label %88
88: ; preds = %71, %77
%89 = phi i32 [ %72, %71 ], [ %87, %77 ]
%90 = sub i32 %23, %21
br i1 %64, label %91, label %167
91: ; preds = %88
%92 = and i64 %66, 1
%93 = icmp eq i32 %21, 1
br i1 %93, label %152, label %94
94: ; preds = %91
%95 = and i64 %66, 4294967294
br label %125
96: ; preds = %96, %69
%97 = phi i64 [ %66, %69 ], [ %111, %96 ]
%98 = phi i32 [ 0, %69 ], [ %122, %96 ]
%99 = phi i32 [ %20, %69 ], [ %121, %96 ]
%100 = phi i32 [ 0, %69 ], [ %123, %96 ]
%101 = add i64 %97, 4294967295
%102 = and i64 %101, 4294967295
%103 = getelementptr inbounds [4 x i8], [4 x i8]* %4, i64 0, i64 %102
%104 = load i8, i8* %103
%105 = sext i8 %104 to i32
%106 = add nsw i32 %105, -48
%107 = call signext i8 @pow(i32 10, i32 %98)
%108 = sext i8 %107 to i32
%109 = mul nsw i32 %106, %108
%110 = or i32 %98, 1
%111 = add nsw i64 %97, -2
%112 = and i64 %111, 4294967295
%113 = getelementptr inbounds [4 x i8], [4 x i8]* %4, i64 0, i64 %112
%114 = load i8, i8* %113
%115 = sext i8 %114 to i32
%116 = add nsw i32 %115, -48
%117 = call signext i8 @pow(i32 10, i32 %110)
%118 = sext i8 %117 to i32
%119 = mul nsw i32 %116, %118
%120 = add nsw i32 %109, %119
%121 = sub i32 %99, %120
%122 = add nuw nsw i32 %98, 2
%123 = add i32 %100, 2
%124 = icmp eq i32 %123, %70
br i1 %124, label %71, label %96
125: ; preds = %125, %94
%126 = phi i64 [ 0, %94 ], [ %148, %125 ]
%127 = phi i32 [ %21, %94 ], [ %149, %125 ]
%128 = phi i32 [ %89, %94 ], [ %147, %125 ]
%129 = phi i64 [ 0, %94 ], [ %150, %125 ]
%130 = getelementptr inbounds [4 x i8], [4 x i8]* %4, i64 0, i64 %126
%131 = load i8, i8* %130
%132 = sext i8 %131 to i32
%133 = add nsw i32 %132, -48
%134 = call signext i8 @pow(i32 10, i32 %127)
%135 = sext i8 %134 to i32
%136 = mul nsw i32 %133, %135
%137 = add nsw i32 %136, %128
%138 = or i64 %126, 1
%139 = add nsw i32 %127, -1
%140 = getelementptr inbounds [4 x i8], [4 x i8]* %4, i64 0, i64 %138
%141 = load i8, i8* %140
%142 = sext i8 %141 to i32
%143 = add nsw i32 %142, -48
%144 = call signext i8 @pow(i32 10, i32 %139)
%145 = sext i8 %144 to i32
%146 = mul nsw i32 %143, %145
%147 = add nsw i32 %146, %137
%148 = add nuw nsw i64 %126, 2
%149 = add nsw i32 %127, -2
%150 = add i64 %129, 2
%151 = icmp eq i64 %150, %95
br i1 %151, label %152, label %125
152: ; preds = %125, %91
%153 = phi i32 [ undef, %91 ], [ %147, %125 ]
%154 = phi i64 [ 0, %91 ], [ %148, %125 ]
%155 = phi i32 [ %21, %91 ], [ %149, %125 ]
%156 = phi i32 [ %89, %91 ], [ %147, %125 ]
%157 = icmp eq i64 %92, 0
br i1 %157, label %167, label %158
158: ; preds = %152
%159 = getelementptr inbounds [4 x i8], [4 x i8]* %4, i64 0, i64 %154
%160 = load i8, i8* %159
%161 = sext i8 %160 to i32
%162 = add nsw i32 %161, -48
%163 = call signext i8 @pow(i32 10, i32 %155)
%164 = sext i8 %163 to i32
%165 = mul nsw i32 %162, %164
%166 = add nsw i32 %165, %156
br label %167
167: ; preds = %158, %152, %63, %88
%168 = phi i32 [ %90, %88 ], [ %23, %63 ], [ %90, %152 ], [ %90, %158 ]
%169 = phi i32 [ %89, %88 ], [ %20, %63 ], [ %89, %152 ], [ %89, %158 ]
%170 = phi i32 [ %89, %88 ], [ %20, %63 ], [ %153, %152 ], [ %166, %158 ]
%171 = sub nsw i32 %170, %169
%172 = icmp sgt i32 %171, 1000
%173 = select i1 %172, i32 %169, i32 %170
%174 = load i8, i8* %9
%175 = sext i8 %174 to i32
%176 = add i32 %173, -48
%177 = add i32 %176, %175
%178 = sext i32 %21 to i64
%179 = getelementptr inbounds [4 x i8], [4 x i8]* %4, i64 0, i64 %178
store i8 %174, i8* %179
%180 = add nsw i32 %21, 1
%181 = add nsw i32 %168, 1
%182 = icmp sgt i32 %168, 2
br i1 %182, label %259, label %250
183: ; preds = %59
%184 = call i32 @matches_next(i32 %7, i8* %9, i8* %14, i32 %26, i32* %5)
%185 = icmp eq i32 %184, 0
br i1 %185, label %191, label %186
186: ; preds = %183
%187 = load i32, i32* %5
%188 = add nsw i32 %187, -1
%189 = sext i32 %188 to i64
%190 = getelementptr inbounds i8, i8* %24, i64 %189
store i32 0, i32* %5
br label %250
191: ; preds = %183
%192 = load i8, i8* %9
%193 = icmp eq i8 %192, 10
br i1 %193, label %250, label %259
194: ; preds = %19
%195 = load i8, i8* %9
%196 = add i8 %195, -48
%197 = icmp ult i8 %196, 10
br i1 %197, label %198, label %207
198: ; preds = %194
%199 = zext i8 %195 to i32
%200 = add i32 %20, -48
%201 = add i32 %200, %199
%202 = sext i32 %21 to i64
%203 = getelementptr inbounds [4 x i8], [4 x i8]* %4, i64 0, i64 %202
store i8 %195, i8* %203
%204 = add nsw i32 %21, 1
%205 = add nsw i32 %23, 1
%206 = icmp sgt i32 %23, 2
br i1 %206, label %259, label %250
207: ; preds = %194
%208 = icmp eq i8 %195, 10
br i1 %208, label %250, label %259
209: ; preds = %19
%210 = load i8, i8* %9
%211 = add i8 %210, -48
%212 = icmp ult i8 %211, 10
br i1 %212, label %213, label %222
213: ; preds = %209
%214 = zext i8 %210 to i32
%215 = add i32 %20, -48
%216 = add i32 %215, %214
%217 = sext i32 %21 to i64
%218 = getelementptr inbounds [4 x i8], [4 x i8]* %4, i64 0, i64 %217
store i8 %210, i8* %218
%219 = add nsw i32 %21, 1
%220 = add nsw i32 %23, 1
%221 = icmp sgt i32 %23, 2
br i1 %221, label %259, label %250
222: ; preds = %209
%223 = call i32 @matches_next(i32 %7, i8* %9, i8* %14, i32 %26, i32* %5)
%224 = icmp eq i32 %223, 0
br i1 %224, label %231, label %225
225: ; preds = %222
%226 = load i32, i32* %5
%227 = add nsw i32 %226, -1
%228 = sext i32 %227 to i64
%229 = getelementptr inbounds i8, i8* %24, i64 %228
store i32 0, i32* %5
%230 = icmp eq i32 %22, 0
br i1 %230, label %259, label %250
231: ; preds = %222
%232 = load i8, i8* %9
switch i8 %232, label %259 [
i8 0, label %233
i8 10, label %250
]
233: ; preds = %231
%234 = icmp eq i32 %22, 0
%235 = select i1 %234, i32 -1, i32 %20
br label %261
236: ; preds = %19
%237 = load i8, i8* %9
%238 = add i8 %237, -48
%239 = icmp ult i8 %238, 10
br i1 %239, label %240, label %249
240: ; preds = %236
%241 = zext i8 %237 to i32
%242 = add i32 %20, -48
%243 = add i32 %242, %241
%244 = sext i32 %21 to i64
%245 = getelementptr inbounds [4 x i8], [4 x i8]* %4, i64 0, i64 %244
store i8 %237, i8* %245
%246 = add nsw i32 %21, 1
%247 = add nsw i32 %23, 1
%248 = icmp sgt i32 %23, 2
br i1 %248, label %259, label %250
249: ; preds = %236
switch i8 %237, label %261 [
i8 10, label %259
i8 47, label %250
]
250: ; preds = %249, %231, %207, %191, %56, %53, %42, %47, %240, %213, %225, %198, %167, %186, %19, %55
%251 = phi i32 [ %20, %19 ], [ %243, %240 ], [ %216, %213 ], [ %20, %225 ], [ %201, %198 ], [ %177, %167 ], [ %20, %186 ], [ %20, %55 ], [ %20, %47 ], [ %20, %42 ], [ %20, %53 ], [ %20, %56 ], [ %20, %191 ], [ %20, %207 ], [ %20, %231 ], [ %20, %249 ]
%252 = phi i32 [ %21, %19 ], [ %246, %240 ], [ %219, %213 ], [ 0, %225 ], [ %204, %198 ], [ %180, %167 ], [ 0, %186 ], [ %21, %55 ], [ %21, %47 ], [ %21, %42 ], [ %21, %53 ], [ %21, %56 ], [ 0, %191 ], [ %21, %207 ], [ %21, %231 ], [ %21, %249 ]
%253 = phi i32 [ %22, %19 ], [ 1, %240 ], [ 1, %213 ], [ 1, %225 ], [ 1, %198 ], [ 1, %167 ], [ 0, %186 ], [ %22, %55 ], [ %22, %47 ], [ %22, %42 ], [ %22, %53 ], [ %22, %56 ], [ %22, %191 ], [ %22, %207 ], [ %22, %231 ], [ %22, %249 ]
%254 = phi i32 [ %23, %19 ], [ %247, %240 ], [ %220, %213 ], [ %23, %225 ], [ %205, %198 ], [ %181, %167 ], [ %23, %186 ], [ %23, %55 ], [ %23, %47 ], [ %23, %42 ], [ %23, %53 ], [ %23, %56 ], [ 0, %191 ], [ 0, %207 ], [ 0, %231 ], [ %23, %249 ]
%255 = phi i8* [ %24, %19 ], [ %24, %240 ], [ %24, %213 ], [ %229, %225 ], [ %24, %198 ], [ %24, %167 ], [ %190, %186 ], [ %24, %55 ], [ %44, %47 ], [ %44, %42 ], [ %24, %53 ], [ %24, %56 ], [ %24, %191 ], [ %24, %207 ], [ %24, %231 ], [ %24, %249 ]
%256 = phi i32 [ %25, %19 ], [ 2, %240 ], [ 2, %213 ], [ 1, %225 ], [ 2, %198 ], [ 2, %167 ], [ 1, %186 ], [ 5, %55 ], [ 4, %47 ], [ 4, %42 ], [ 0, %53 ], [ 4, %56 ], [ 0, %191 ], [ 0, %207 ], [ 0, %231 ], [ 3, %249 ]
%257 = phi i32 [ %26, %19 ], [ %26, %240 ], [ %26, %213 ], [ %26, %225 ], [ %26, %198 ], [ %26, %167 ], [ %26, %186 ], [ %26, %55 ], [ %52, %47 ], [ %26, %42 ], [ %26, %53 ], [ %26, %56 ], [ %26, %191 ], [ %26, %207 ], [ %26, %231 ], [ %26, %249 ]
%258 = getelementptr inbounds i8, i8* %255, i64 1
br label %19
259: ; preds = %53, %56, %167, %191, %198, %207, %213, %225, %231, %240, %249
%260 = phi i32 [ 0, %249 ], [ -1, %240 ], [ -1, %231 ], [ -1, %225 ], [ -1, %213 ], [ -1, %207 ], [ -1, %198 ], [ -1, %191 ], [ -1, %167 ], [ -1, %56 ], [ -1, %53 ]
br label %261
261: ; preds = %33, %249, %259, %233
%262 = phi i32 [ %235, %233 ], [ %260, %259 ], [ -1, %249 ], [ -1, %33 ]
ret i32 %262
}