int httpd_decode_url(char *url) {
  int s = 0, d = 0;
  while (url[s] != '\0' && url[s] != '?') {
    if (url[s] == '%') {
      int a1 = ((url[s + 1] >= '0' && url[s + 1] <= '9') ? url[s + 1] - '0'
                : (url[s + 1] >= 'A' && url[s + 1] <= 'F')
                    ? url[s + 1] - 'A' + 10
                : (url[s + 1] >= 'a' && url[s + 1] <= 'f')
                    ? url[s + 1] - 'a' + 10
                    : -1),
          a2 = ((url[s + 2] >= '0' && url[s + 2] <= '9') ? url[s + 2] - '0'
                : (url[s + 2] >= 'A' && url[s + 2] <= 'F')
                    ? url[s + 2] - 'A' + 10
                : (url[s + 2] >= 'a' && url[s + 2] <= 'f')
                    ? url[s + 2] - 'a' + 10
                    : -1);
      if (a1 >= 2 && a2 >= 0) {
        s += 3;
        url[d++] = (a1 << 4) + a2;
      } else if (a1 >= 0 && a1 < 2) {
        return 0;
      }
      continue;
    } else if (url[s] == '+') {
      url[d++] = ' ';
      s++;
      continue;
    }
    url[d++] = url[s++];
  }
  url[d] = '\0';
  s = d = 0;
  while (url[s] != '\0' && url[s] != '?') {
    int c0 = url[s], c1 = url[s + 1], c2 = url[s + 2], c3 = url[s + 3];
    if (url[s] == '|' || url[s] == '<' || url[s] == '>' || url[s] == '?' ||
        url[s] == '*')
      return 0;
    if (c0 == '/' && (c1 == '/' || c1 == '\\')) {
      s++;
      url[s] = '/';
      continue;
    } else if ((c0 == '/' || c0 == '\\') && c1 == '.' &&
               (c2 == '/' || c2 == '\\')) {
      s += 2;
      url[s] = '/';
      continue;
    } else if ((c0 == '/' || c0 == '\\') && c1 == '.' && c2 == '.' &&
               (c3 == '/' || c3 == '\\')) {
      int r;
      if (d <= 0)
        return 0;
      for (r = d - 1; r >= 0 && url[r] != '/'; r--)
        ;
      if (r < 0)
        return 0;
      s += 3;
      d = r;
      url[s] = '/';
      continue;
    }
    url[d++] = url[s++];
  }
  url[d] = '\0';
  return 1;
}


x86 assembly (clang, -O0):
<httpd_decode_url>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x10(%rbp)
movl   $0x0,-0x14(%rbp)
movl   $0x0,-0x18(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
movsbl (%rax,%rcx,1),%ecx
xor    %eax,%eax
cmp    $0x0,%ecx
mov    %al,-0x35(%rbp)
je     1145 <httpd_decode_url+0x45>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x3f,%eax
setne  %al
mov    %al,-0x35(%rbp)
mov    -0x35(%rbp),%al
test   $0x1,%al
jne    1155 <httpd_decode_url+0x55>
jmp    146d <httpd_decode_url+0x36d>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x25,%eax
jne    1400 <httpd_decode_url+0x300>
mov    -0x10(%rbp),%rax
mov    -0x14(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x30,%eax
jl     11ba <httpd_decode_url+0xba>
mov    -0x10(%rbp),%rax
mov    -0x14(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x39,%eax
jg     11ba <httpd_decode_url+0xba>
mov    -0x10(%rbp),%rax
mov    -0x14(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
sub    $0x30,%eax
mov    %eax,-0x3c(%rbp)
jmp    1279 <httpd_decode_url+0x179>
mov    -0x10(%rbp),%rax
mov    -0x14(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x41,%eax
jl     120d <httpd_decode_url+0x10d>
mov    -0x10(%rbp),%rax
mov    -0x14(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x46,%eax
jg     120d <httpd_decode_url+0x10d>
mov    -0x10(%rbp),%rax
mov    -0x14(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
sub    $0x41,%eax
add    $0xa,%eax
mov    %eax,-0x40(%rbp)
jmp    1273 <httpd_decode_url+0x173>
mov    -0x10(%rbp),%rax
mov    -0x14(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x61,%eax
jl     1260 <httpd_decode_url+0x160>
mov    -0x10(%rbp),%rax
mov    -0x14(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x66,%eax
jg     1260 <httpd_decode_url+0x160>
mov    -0x10(%rbp),%rax
mov    -0x14(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
sub    $0x61,%eax
add    $0xa,%eax
mov    %eax,-0x44(%rbp)
jmp    126d <httpd_decode_url+0x16d>
mov    $0xffffffff,%eax
mov    %eax,-0x44(%rbp)
jmp    126d <httpd_decode_url+0x16d>
mov    -0x44(%rbp),%eax
mov    %eax,-0x40(%rbp)
mov    -0x40(%rbp),%eax
mov    %eax,-0x3c(%rbp)
mov    -0x3c(%rbp),%eax
mov    %eax,-0x1c(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x14(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x30,%eax
jl     12cf <httpd_decode_url+0x1cf>
mov    -0x10(%rbp),%rax
mov    -0x14(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x39,%eax
jg     12cf <httpd_decode_url+0x1cf>
mov    -0x10(%rbp),%rax
mov    -0x14(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
sub    $0x30,%eax
mov    %eax,-0x48(%rbp)
jmp    138e <httpd_decode_url+0x28e>
mov    -0x10(%rbp),%rax
mov    -0x14(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x41,%eax
jl     1322 <httpd_decode_url+0x222>
mov    -0x10(%rbp),%rax
mov    -0x14(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x46,%eax
jg     1322 <httpd_decode_url+0x222>
mov    -0x10(%rbp),%rax
mov    -0x14(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
sub    $0x41,%eax
add    $0xa,%eax
mov    %eax,-0x4c(%rbp)
jmp    1388 <httpd_decode_url+0x288>
mov    -0x10(%rbp),%rax
mov    -0x14(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x61,%eax
jl     1375 <httpd_decode_url+0x275>
mov    -0x10(%rbp),%rax
mov    -0x14(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x66,%eax
jg     1375 <httpd_decode_url+0x275>
mov    -0x10(%rbp),%rax
mov    -0x14(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
sub    $0x61,%eax
add    $0xa,%eax
mov    %eax,-0x50(%rbp)
jmp    1382 <httpd_decode_url+0x282>
mov    $0xffffffff,%eax
mov    %eax,-0x50(%rbp)
jmp    1382 <httpd_decode_url+0x282>
mov    -0x50(%rbp),%eax
mov    %eax,-0x4c(%rbp)
mov    -0x4c(%rbp),%eax
mov    %eax,-0x48(%rbp)
mov    -0x48(%rbp),%eax
mov    %eax,-0x20(%rbp)
cmpl   $0x2,-0x1c(%rbp)
jl     13d6 <httpd_decode_url+0x2d6>
cmpl   $0x0,-0x20(%rbp)
jl     13d6 <httpd_decode_url+0x2d6>
mov    -0x14(%rbp),%eax
add    $0x3,%eax
mov    %eax,-0x14(%rbp)
mov    -0x1c(%rbp),%eax
shl    $0x4,%eax
add    -0x20(%rbp),%eax
mov    %al,%dl
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%ecx
mov    %ecx,%esi
add    $0x1,%esi
mov    %esi,-0x18(%rbp)
movslq %ecx,%rcx
mov    %dl,(%rax,%rcx,1)
jmp    13fb <httpd_decode_url+0x2fb>
cmpl   $0x0,-0x1c(%rbp)
jl     13f6 <httpd_decode_url+0x2f6>
cmpl   $0x2,-0x1c(%rbp)
jge    13f6 <httpd_decode_url+0x2f6>
movl   $0x0,-0x4(%rbp)
jmp    172e <httpd_decode_url+0x62e>
jmp    13fb <httpd_decode_url+0x2fb>
jmp    1116 <httpd_decode_url+0x16>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x2b,%eax
jne    1439 <httpd_decode_url+0x339>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x18(%rbp)
movslq %ecx,%rcx
movb   $0x20,(%rax,%rcx,1)
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    1116 <httpd_decode_url+0x16>
jmp    143e <httpd_decode_url+0x33e>
mov    -0x10(%rbp),%rax
mov    -0x14(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x14(%rbp)
movslq %ecx,%rcx
mov    (%rax,%rcx,1),%dl
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%ecx
mov    %ecx,%esi
add    $0x1,%esi
mov    %esi,-0x18(%rbp)
movslq %ecx,%rcx
mov    %dl,(%rax,%rcx,1)
jmp    1116 <httpd_decode_url+0x16>
mov    -0x10(%rbp),%rax
movslq -0x18(%rbp),%rcx
movb   $0x0,(%rax,%rcx,1)
movl   $0x0,-0x18(%rbp)
movl   $0x0,-0x14(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
movsbl (%rax,%rcx,1),%ecx
xor    %eax,%eax
cmp    $0x0,%ecx
mov    %al,-0x51(%rbp)
je     14b6 <httpd_decode_url+0x3b6>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x3f,%eax
setne  %al
mov    %al,-0x51(%rbp)
mov    -0x51(%rbp),%al
test   $0x1,%al
jne    14c6 <httpd_decode_url+0x3c6>
jmp    171b <httpd_decode_url+0x61b>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
mov    %eax,-0x24(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x14(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
mov    %eax,-0x28(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x14(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
mov    %eax,-0x2c(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x14(%rbp),%ecx
add    $0x3,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
mov    %eax,-0x30(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x7c,%eax
je     157a <httpd_decode_url+0x47a>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x3c,%eax
je     157a <httpd_decode_url+0x47a>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x3e,%eax
je     157a <httpd_decode_url+0x47a>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x3f,%eax
je     157a <httpd_decode_url+0x47a>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x2a,%eax
jne    1586 <httpd_decode_url+0x486>
movl   $0x0,-0x4(%rbp)
jmp    172e <httpd_decode_url+0x62e>
cmpl   $0x2f,-0x24(%rbp)
jne    15be <httpd_decode_url+0x4be>
cmpl   $0x2f,-0x28(%rbp)
je     15a4 <httpd_decode_url+0x4a4>
cmpl   $0x5c,-0x28(%rbp)
jne    15be <httpd_decode_url+0x4be>
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
movb   $0x2f,(%rax,%rcx,1)
jmp    1487 <httpd_decode_url+0x387>
cmpl   $0x2f,-0x24(%rbp)
je     15d2 <httpd_decode_url+0x4d2>
cmpl   $0x5c,-0x24(%rbp)
jne    160a <httpd_decode_url+0x50a>
cmpl   $0x2e,-0x28(%rbp)
jne    160a <httpd_decode_url+0x50a>
cmpl   $0x2f,-0x2c(%rbp)
je     15f0 <httpd_decode_url+0x4f0>
cmpl   $0x5c,-0x2c(%rbp)
jne    160a <httpd_decode_url+0x50a>
mov    -0x14(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x14(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
movb   $0x2f,(%rax,%rcx,1)
jmp    1487 <httpd_decode_url+0x387>
cmpl   $0x2f,-0x24(%rbp)
je     161e <httpd_decode_url+0x51e>
cmpl   $0x5c,-0x24(%rbp)
jne    16e2 <httpd_decode_url+0x5e2>
cmpl   $0x2e,-0x28(%rbp)
jne    16e2 <httpd_decode_url+0x5e2>
cmpl   $0x2e,-0x2c(%rbp)
jne    16e2 <httpd_decode_url+0x5e2>
cmpl   $0x2f,-0x30(%rbp)
je     1646 <httpd_decode_url+0x546>
cmpl   $0x5c,-0x30(%rbp)
jne    16e2 <httpd_decode_url+0x5e2>
cmpl   $0x0,-0x18(%rbp)
jg     165c <httpd_decode_url+0x55c>
movl   $0x0,-0x4(%rbp)
jmp    172e <httpd_decode_url+0x62e>
mov    -0x18(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x34(%rbp)
xor    %eax,%eax
cmpl   $0x0,-0x34(%rbp)
mov    %al,-0x52(%rbp)
jl     1689 <httpd_decode_url+0x589>
mov    -0x10(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x2f,%eax
setne  %al
mov    %al,-0x52(%rbp)
mov    -0x52(%rbp),%al
test   $0x1,%al
jne    1699 <httpd_decode_url+0x599>
jmp    16ac <httpd_decode_url+0x5ac>
jmp    169e <httpd_decode_url+0x59e>
mov    -0x34(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x34(%rbp)
jmp    1665 <httpd_decode_url+0x565>
cmpl   $0x0,-0x34(%rbp)
jge    16c2 <httpd_decode_url+0x5c2>
movl   $0x0,-0x4(%rbp)
jmp    172e <httpd_decode_url+0x62e>
mov    -0x14(%rbp),%eax
add    $0x3,%eax
mov    %eax,-0x14(%rbp)
mov    -0x34(%rbp),%eax
mov    %eax,-0x18(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
movb   $0x2f,(%rax,%rcx,1)
jmp    1487 <httpd_decode_url+0x387>
jmp    16e7 <httpd_decode_url+0x5e7>
jmp    16ec <httpd_decode_url+0x5ec>
mov    -0x10(%rbp),%rax
mov    -0x14(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x14(%rbp)
movslq %ecx,%rcx
mov    (%rax,%rcx,1),%dl
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%ecx
mov    %ecx,%esi
add    $0x1,%esi
mov    %esi,-0x18(%rbp)
movslq %ecx,%rcx
mov    %dl,(%rax,%rcx,1)
jmp    1487 <httpd_decode_url+0x387>
mov    -0x10(%rbp),%rax
movslq -0x18(%rbp),%rcx
movb   $0x0,(%rax,%rcx,1)
movl   $0x1,-0x4(%rbp)
mov    -0x4(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<httpd_decode_url>:
push   %r14
push   %rbx
xor    %r9d,%r9d
mov    $0xffffffff,%r8d
xor    %r10d,%r10d
movslq %r10d,%rsi
mov    (%rdi,%rsi,1),%r11b
jmp    1129 <httpd_decode_url+0x29>
nopl   0x0(%rax,%rax,1)
cmp    $0x2,%eax
jb     12f3 <httpd_decode_url+0x1f3>
cmp    $0x25,%r11b
jne    11d0 <httpd_decode_url+0xd0>
movsbl 0x1(%rdi,%rsi,1),%eax
lea    -0x30(%rax),%ecx
cmp    $0x9,%cl
ja     1150 <httpd_decode_url+0x50>
add    $0xffffffd0,%eax
jmp    116d <httpd_decode_url+0x6d>
cs nopw 0x0(%rax,%rax,1)
nop
lea    -0x41(%rax),%ecx
cmp    $0x5,%cl
ja     1160 <httpd_decode_url+0x60>
add    $0xffffffc9,%eax
jmp    116d <httpd_decode_url+0x6d>
nopl   (%rax)
lea    -0x61(%rax),%ecx
add    $0xffffffa9,%eax
cmp    $0x6,%cl
cmovae %r8d,%eax
movsbl 0x2(%rdi,%rsi,1),%edx
lea    -0x30(%rdx),%ebx
mov    $0xffffffd0,%ecx
cmp    $0xa,%bl
jb     11a0 <httpd_decode_url+0xa0>
lea    -0x41(%rdx),%ebx
mov    $0xffffffc9,%ecx
cmp    $0x6,%bl
jb     11a0 <httpd_decode_url+0xa0>
lea    -0x61(%rdx),%ebx
mov    $0xffffffa9,%ecx
cmp    $0x5,%bl
ja     1120 <httpd_decode_url+0x20>
nopl   0x0(%rax)
cmp    $0x2,%eax
jl     1120 <httpd_decode_url+0x20>
add    %edx,%ecx
js     1120 <httpd_decode_url+0x20>
lea    0x3(%rsi),%r10d
shl    $0x4,%eax
add    %eax,%ecx
mov    %r9d,%eax
mov    %cl,(%rdi,%rax,1)
add    $0x1,%r9d
jmp    110f <httpd_decode_url+0xf>
nopl   0x0(%rax)
test   %r11b,%r11b
je     1209 <httpd_decode_url+0x109>
cmp    $0x2b,%r11b
je     11f5 <httpd_decode_url+0xf5>
cmp    $0x3f,%r11b
je     1209 <httpd_decode_url+0x109>
lea    0x1(%rsi),%r10d
mov    %r9d,%eax
mov    %r11b,(%rdi,%rax,1)
add    $0x1,%r9d
jmp    110f <httpd_decode_url+0xf>
mov    %r9d,%eax
movb   $0x20,(%rdi,%rax,1)
add    $0x1,%r10d
add    $0x1,%r9d
jmp    110f <httpd_decode_url+0xf>
mov    %r9d,%eax
movb   $0x0,(%rdi,%rax,1)
xor    %r9d,%r9d
movabs $0x5000040000000000,%r8
xor    %r14d,%r14d
jmp    1235 <httpd_decode_url+0x135>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movb   $0x2f,(%rdi,%r14,1)
movslq %r14d,%rsi
mov    (%rdi,%rsi,1),%al
test   %al,%al
je     12f7 <httpd_decode_url+0x1f7>
cmp    $0x3f,%al
je     12f7 <httpd_decode_url+0x1f7>
mov    0x1(%rdi,%rsi,1),%cl
mov    0x2(%rdi,%rsi,1),%r11b
mov    0x3(%rdi,%rsi,1),%r10b
jae    1268 <httpd_decode_url+0x168>
movzbl %al,%edx
bt     %rdx,%r8
jb     12f3 <httpd_decode_url+0x1f3>
cmp    $0x7c,%al
je     12f3 <httpd_decode_url+0x1f3>
lea    0x1(%rsi),%r14
cmp    $0x2f,%al
jne    1282 <httpd_decode_url+0x182>
cmp    $0x5c,%cl
je     1230 <httpd_decode_url+0x130>
cmp    $0x2f,%cl
je     1230 <httpd_decode_url+0x130>
cmp    $0x2f,%al
setne  %bl
cmp    $0x5c,%al
setne  %dl
test   %dl,%bl
jne    12e4 <httpd_decode_url+0x1e4>
cmp    $0x2e,%cl
jne    12e4 <httpd_decode_url+0x1e4>
cmp    $0x2f,%r11b
je     12a1 <httpd_decode_url+0x1a1>
cmp    $0x5c,%r11b
jne    12ae <httpd_decode_url+0x1ae>
add    $0x2,%rsi
movb   $0x2f,(%rdi,%rsi,1)
mov    %esi,%r14d
jmp    1235 <httpd_decode_url+0x135>
cmp    $0x2e,%r11b
jne    12e4 <httpd_decode_url+0x1e4>
cmp    $0x5c,%r10b
je     12c0 <httpd_decode_url+0x1c0>
cmp    $0x2f,%r10b
jne    12e4 <httpd_decode_url+0x1e4>
xor    %eax,%eax
test   %r9d,%r9d
jle    1303 <httpd_decode_url+0x203>
add    $0x3,%rsi
mov    %r9d,%r9d
xchg   %ax,%ax
test   %r9,%r9
jle    1303 <httpd_decode_url+0x203>
add    $0xffffffffffffffff,%r9
mov    %r9d,%ecx
cmpb   $0x2f,(%rdi,%rcx,1)
jne    12d0 <httpd_decode_url+0x1d0>
jmp    12a5 <httpd_decode_url+0x1a5>
movslq %r9d,%rcx
add    $0x1,%r9d
mov    %al,(%rdi,%rcx,1)
jmp    1235 <httpd_decode_url+0x135>
xor    %eax,%eax
jmp    1303 <httpd_decode_url+0x203>
movslq %r9d,%rax
movb   $0x0,(%rdi,%rax,1)
mov    $0x1,%eax
pop    %rbx
pop    %r14
ret

LLVM IR (-O0):
define i32 @httpd_decode_url(i8* %0) {
%2 = alloca i32
%3 = alloca i8*
%4 = alloca i32
%5 = alloca i32
%6 = alloca i32
%7 = alloca i32
%8 = alloca i32
%9 = alloca i32
%10 = alloca i32
%11 = alloca i32
%12 = alloca i32
store i8* %0, i8** %3
store i32 0, i32* %4
store i32 0, i32* %5
br label %13
13: ; preds = %262, %253, %244, %1
%14 = load i8*, i8** %3
%15 = load i32, i32* %4
%16 = sext i32 %15 to i64
%17 = getelementptr inbounds i8, i8* %14, i64 %16
%18 = load i8, i8* %17
%19 = sext i8 %18 to i32
%20 = icmp ne i32 %19, 0
br i1 %20, label %21, label %29
21: ; preds = %13
%22 = load i8*, i8** %3
%23 = load i32, i32* %4
%24 = sext i32 %23 to i64
%25 = getelementptr inbounds i8, i8* %22, i64 %24
%26 = load i8, i8* %25
%27 = sext i8 %26 to i32
%28 = icmp ne i32 %27, 63
br label %29
29: ; preds = %21, %13
%30 = phi i1 [ false, %13 ], [ %28, %21 ]
br i1 %30, label %31, label %274
31: ; preds = %29
%32 = load i8*, i8** %3
%33 = load i32, i32* %4
%34 = sext i32 %33 to i64
%35 = getelementptr inbounds i8, i8* %32, i64 %34
%36 = load i8, i8* %35
%37 = sext i8 %36 to i32
%38 = icmp eq i32 %37, 37
br i1 %38, label %39, label %245
39: ; preds = %31
%40 = load i8*, i8** %3
%41 = load i32, i32* %4
%42 = add nsw i32 %41, 1
%43 = sext i32 %42 to i64
%44 = getelementptr inbounds i8, i8* %40, i64 %43
%45 = load i8, i8* %44
%46 = sext i8 %45 to i32
%47 = icmp sge i32 %46, 48
br i1 %47, label %48, label %66
48: ; preds = %39
%49 = load i8*, i8** %3
%50 = load i32, i32* %4
%51 = add nsw i32 %50, 1
%52 = sext i32 %51 to i64
%53 = getelementptr inbounds i8, i8* %49, i64 %52
%54 = load i8, i8* %53
%55 = sext i8 %54 to i32
%56 = icmp sle i32 %55, 57
br i1 %56, label %57, label %66
57: ; preds = %48
%58 = load i8*, i8** %3
%59 = load i32, i32* %4
%60 = add nsw i32 %59, 1
%61 = sext i32 %60 to i64
%62 = getelementptr inbounds i8, i8* %58, i64 %61
%63 = load i8, i8* %62
%64 = sext i8 %63 to i32
%65 = sub nsw i32 %64, 48
br label %127
66: ; preds = %48, %39
%67 = load i8*, i8** %3
%68 = load i32, i32* %4
%69 = add nsw i32 %68, 1
%70 = sext i32 %69 to i64
%71 = getelementptr inbounds i8, i8* %67, i64 %70
%72 = load i8, i8* %71
%73 = sext i8 %72 to i32
%74 = icmp sge i32 %73, 65
br i1 %74, label %75, label %94
75: ; preds = %66
%76 = load i8*, i8** %3
%77 = load i32, i32* %4
%78 = add nsw i32 %77, 1
%79 = sext i32 %78 to i64
%80 = getelementptr inbounds i8, i8* %76, i64 %79
%81 = load i8, i8* %80
%82 = sext i8 %81 to i32
%83 = icmp sle i32 %82, 70
br i1 %83, label %84, label %94
84: ; preds = %75
%85 = load i8*, i8** %3
%86 = load i32, i32* %4
%87 = add nsw i32 %86, 1
%88 = sext i32 %87 to i64
%89 = getelementptr inbounds i8, i8* %85, i64 %88
%90 = load i8, i8* %89
%91 = sext i8 %90 to i32
%92 = sub nsw i32 %91, 65
%93 = add nsw i32 %92, 10
br label %125
94: ; preds = %75, %66
%95 = load i8*, i8** %3
%96 = load i32, i32* %4
%97 = add nsw i32 %96, 1
%98 = sext i32 %97 to i64
%99 = getelementptr inbounds i8, i8* %95, i64 %98
%100 = load i8, i8* %99
%101 = sext i8 %100 to i32
%102 = icmp sge i32 %101, 97
br i1 %102, label %103, label %122
103: ; preds = %94
%104 = load i8*, i8** %3
%105 = load i32, i32* %4
%106 = add nsw i32 %105, 1
%107 = sext i32 %106 to i64
%108 = getelementptr inbounds i8, i8* %104, i64 %107
%109 = load i8, i8* %108
%110 = sext i8 %109 to i32
%111 = icmp sle i32 %110, 102
br i1 %111, label %112, label %122
112: ; preds = %103
%113 = load i8*, i8** %3
%114 = load i32, i32* %4
%115 = add nsw i32 %114, 1
%116 = sext i32 %115 to i64
%117 = getelementptr inbounds i8, i8* %113, i64 %116
%118 = load i8, i8* %117
%119 = sext i8 %118 to i32
%120 = sub nsw i32 %119, 97
%121 = add nsw i32 %120, 10
br label %123
122: ; preds = %103, %94
br label %123
123: ; preds = %122, %112
%124 = phi i32 [ %121, %112 ], [ -1, %122 ]
br label %125
125: ; preds = %123, %84
%126 = phi i32 [ %93, %84 ], [ %124, %123 ]
br label %127
127: ; preds = %125, %57
%128 = phi i32 [ %65, %57 ], [ %126, %125 ]
store i32 %128, i32* %6
%129 = load i8*, i8** %3
%130 = load i32, i32* %4
%131 = add nsw i32 %130, 2
%132 = sext i32 %131 to i64
%133 = getelementptr inbounds i8, i8* %129, i64 %132
%134 = load i8, i8* %133
%135 = sext i8 %134 to i32
%136 = icmp sge i32 %135, 48
br i1 %136, label %137, label %155
137: ; preds = %127
%138 = load i8*, i8** %3
%139 = load i32, i32* %4
%140 = add nsw i32 %139, 2
%141 = sext i32 %140 to i64
%142 = getelementptr inbounds i8, i8* %138, i64 %141
%143 = load i8, i8* %142
%144 = sext i8 %143 to i32
%145 = icmp sle i32 %144, 57
br i1 %145, label %146, label %155
146: ; preds = %137
%147 = load i8*, i8** %3
%148 = load i32, i32* %4
%149 = add nsw i32 %148, 2
%150 = sext i32 %149 to i64
%151 = getelementptr inbounds i8, i8* %147, i64 %150
%152 = load i8, i8* %151
%153 = sext i8 %152 to i32
%154 = sub nsw i32 %153, 48
br label %216
155: ; preds = %137, %127
%156 = load i8*, i8** %3
%157 = load i32, i32* %4
%158 = add nsw i32 %157, 2
%159 = sext i32 %158 to i64
%160 = getelementptr inbounds i8, i8* %156, i64 %159
%161 = load i8, i8* %160
%162 = sext i8 %161 to i32
%163 = icmp sge i32 %162, 65
br i1 %163, label %164, label %183
164: ; preds = %155
%165 = load i8*, i8** %3
%166 = load i32, i32* %4
%167 = add nsw i32 %166, 2
%168 = sext i32 %167 to i64
%169 = getelementptr inbounds i8, i8* %165, i64 %168
%170 = load i8, i8* %169
%171 = sext i8 %170 to i32
%172 = icmp sle i32 %171, 70
br i1 %172, label %173, label %183
173: ; preds = %164
%174 = load i8*, i8** %3
%175 = load i32, i32* %4
%176 = add nsw i32 %175, 2
%177 = sext i32 %176 to i64
%178 = getelementptr inbounds i8, i8* %174, i64 %177
%179 = load i8, i8* %178
%180 = sext i8 %179 to i32
%181 = sub nsw i32 %180, 65
%182 = add nsw i32 %181, 10
br label %214
183: ; preds = %164, %155
%184 = load i8*, i8** %3
%185 = load i32, i32* %4
%186 = add nsw i32 %185, 2
%187 = sext i32 %186 to i64
%188 = getelementptr inbounds i8, i8* %184, i64 %187
%189 = load i8, i8* %188
%190 = sext i8 %189 to i32
%191 = icmp sge i32 %190, 97
br i1 %191, label %192, label %211
192: ; preds = %183
%193 = load i8*, i8** %3
%194 = load i32, i32* %4
%195 = add nsw i32 %194, 2
%196 = sext i32 %195 to i64
%197 = getelementptr inbounds i8, i8* %193, i64 %196
%198 = load i8, i8* %197
%199 = sext i8 %198 to i32
%200 = icmp sle i32 %199, 102
br i1 %200, label %201, label %211
201: ; preds = %192
%202 = load i8*, i8** %3
%203 = load i32, i32* %4
%204 = add nsw i32 %203, 2
%205 = sext i32 %204 to i64
%206 = getelementptr inbounds i8, i8* %202, i64 %205
%207 = load i8, i8* %206
%208 = sext i8 %207 to i32
%209 = sub nsw i32 %208, 97
%210 = add nsw i32 %209, 10
br label %212
211: ; preds = %192, %183
br label %212
212: ; preds = %211, %201
%213 = phi i32 [ %210, %201 ], [ -1, %211 ]
br label %214
214: ; preds = %212, %173
%215 = phi i32 [ %182, %173 ], [ %213, %212 ]
br label %216
216: ; preds = %214, %146
%217 = phi i32 [ %154, %146 ], [ %215, %214 ]
store i32 %217, i32* %7
%218 = load i32, i32* %6
%219 = icmp sge i32 %218, 2
br i1 %219, label %220, label %236
220: ; preds = %216
%221 = load i32, i32* %7
%222 = icmp sge i32 %221, 0
br i1 %222, label %223, label %236
223: ; preds = %220
%224 = load i32, i32* %4
%225 = add nsw i32 %224, 3
store i32 %225, i32* %4
%226 = load i32, i32* %6
%227 = shl i32 %226, 4
%228 = load i32, i32* %7
%229 = add nsw i32 %227, %228
%230 = trunc i32 %229 to i8
%231 = load i8*, i8** %3
%232 = load i32, i32* %5
%233 = add nsw i32 %232, 1
store i32 %233, i32* %5
%234 = sext i32 %232 to i64
%235 = getelementptr inbounds i8, i8* %231, i64 %234
store i8 %230, i8* %235
br label %244
236: ; preds = %220, %216
%237 = load i32, i32* %6
%238 = icmp sge i32 %237, 0
br i1 %238, label %239, label %243
239: ; preds = %236
%240 = load i32, i32* %6
%241 = icmp slt i32 %240, 2
br i1 %241, label %242, label %243
242: ; preds = %239
store i32 0, i32* %2
br label %476
243: ; preds = %239, %236
br label %244
244: ; preds = %243, %223
br label %13
245: ; preds = %31
%246 = load i8*, i8** %3
%247 = load i32, i32* %4
%248 = sext i32 %247 to i64
%249 = getelementptr inbounds i8, i8* %246, i64 %248
%250 = load i8, i8* %249
%251 = sext i8 %250 to i32
%252 = icmp eq i32 %251, 43
br i1 %252, label %253, label %261
253: ; preds = %245
%254 = load i8*, i8** %3
%255 = load i32, i32* %5
%256 = add nsw i32 %255, 1
store i32 %256, i32* %5
%257 = sext i32 %255 to i64
%258 = getelementptr inbounds i8, i8* %254, i64 %257
store i8 32, i8* %258
%259 = load i32, i32* %4
%260 = add nsw i32 %259, 1
store i32 %260, i32* %4
br label %13
261: ; preds = %245
br label %262
262: ; preds = %261
%263 = load i8*, i8** %3
%264 = load i32, i32* %4
%265 = add nsw i32 %264, 1
store i32 %265, i32* %4
%266 = sext i32 %264 to i64
%267 = getelementptr inbounds i8, i8* %263, i64 %266
%268 = load i8, i8* %267
%269 = load i8*, i8** %3
%270 = load i32, i32* %5
%271 = add nsw i32 %270, 1
store i32 %271, i32* %5
%272 = sext i32 %270 to i64
%273 = getelementptr inbounds i8, i8* %269, i64 %272
store i8 %268, i8* %273
br label %13
274: ; preds = %29
%275 = load i8*, i8** %3
%276 = load i32, i32* %5
%277 = sext i32 %276 to i64
%278 = getelementptr inbounds i8, i8* %275, i64 %277
store i8 0, i8* %278
store i32 0, i32* %5
store i32 0, i32* %4
br label %279
279: ; preds = %459, %449, %396, %374, %274
%280 = load i8*, i8** %3
%281 = load i32, i32* %4
%282 = sext i32 %281 to i64
%283 = getelementptr inbounds i8, i8* %280, i64 %282
%284 = load i8, i8* %283
%285 = sext i8 %284 to i32
%286 = icmp ne i32 %285, 0
br i1 %286, label %287, label %295
287: ; preds = %279
%288 = load i8*, i8** %3
%289 = load i32, i32* %4
%290 = sext i32 %289 to i64
%291 = getelementptr inbounds i8, i8* %288, i64 %290
%292 = load i8, i8* %291
%293 = sext i8 %292 to i32
%294 = icmp ne i32 %293, 63
br label %295
295: ; preds = %287, %279
%296 = phi i1 [ false, %279 ], [ %294, %287 ]
br i1 %296, label %297, label %471
297: ; preds = %295
%298 = load i8*, i8** %3
%299 = load i32, i32* %4
%300 = sext i32 %299 to i64
%301 = getelementptr inbounds i8, i8* %298, i64 %300
%302 = load i8, i8* %301
%303 = sext i8 %302 to i32
store i32 %303, i32* %8
%304 = load i8*, i8** %3
%305 = load i32, i32* %4
%306 = add nsw i32 %305, 1
%307 = sext i32 %306 to i64
%308 = getelementptr inbounds i8, i8* %304, i64 %307
%309 = load i8, i8* %308
%310 = sext i8 %309 to i32
store i32 %310, i32* %9
%311 = load i8*, i8** %3
%312 = load i32, i32* %4
%313 = add nsw i32 %312, 2
%314 = sext i32 %313 to i64
%315 = getelementptr inbounds i8, i8* %311, i64 %314
%316 = load i8, i8* %315
%317 = sext i8 %316 to i32
store i32 %317, i32* %10
%318 = load i8*, i8** %3
%319 = load i32, i32* %4
%320 = add nsw i32 %319, 3
%321 = sext i32 %320 to i64
%322 = getelementptr inbounds i8, i8* %318, i64 %321
%323 = load i8, i8* %322
%324 = sext i8 %323 to i32
store i32 %324, i32* %11
%325 = load i8*, i8** %3
%326 = load i32, i32* %4
%327 = sext i32 %326 to i64
%328 = getelementptr inbounds i8, i8* %325, i64 %327
%329 = load i8, i8* %328
%330 = sext i8 %329 to i32
%331 = icmp eq i32 %330, 124
br i1 %331, label %364, label %332
332: ; preds = %297
%333 = load i8*, i8** %3
%334 = load i32, i32* %4
%335 = sext i32 %334 to i64
%336 = getelementptr inbounds i8, i8* %333, i64 %335
%337 = load i8, i8* %336
%338 = sext i8 %337 to i32
%339 = icmp eq i32 %338, 60
br i1 %339, label %364, label %340
340: ; preds = %332
%341 = load i8*, i8** %3
%342 = load i32, i32* %4
%343 = sext i32 %342 to i64
%344 = getelementptr inbounds i8, i8* %341, i64 %343
%345 = load i8, i8* %344
%346 = sext i8 %345 to i32
%347 = icmp eq i32 %346, 62
br i1 %347, label %364, label %348
348: ; preds = %340
%349 = load i8*, i8** %3
%350 = load i32, i32* %4
%351 = sext i32 %350 to i64
%352 = getelementptr inbounds i8, i8* %349, i64 %351
%353 = load i8, i8* %352
%354 = sext i8 %353 to i32
%355 = icmp eq i32 %354, 63
br i1 %355, label %364, label %356
356: ; preds = %348
%357 = load i8*, i8** %3
%358 = load i32, i32* %4
%359 = sext i32 %358 to i64
%360 = getelementptr inbounds i8, i8* %357, i64 %359
%361 = load i8, i8* %360
%362 = sext i8 %361 to i32
%363 = icmp eq i32 %362, 42
br i1 %363, label %364, label %365
364: ; preds = %356, %348, %340, %332, %297
store i32 0, i32* %2
br label %476
365: ; preds = %356
%366 = load i32, i32* %8
%367 = icmp eq i32 %366, 47
br i1 %367, label %368, label %381
368: ; preds = %365
%369 = load i32, i32* %9
%370 = icmp eq i32 %369, 47
br i1 %370, label %374, label %371
371: ; preds = %368
%372 = load i32, i32* %9
%373 = icmp eq i32 %372, 92
br i1 %373, label %374, label %381
374: ; preds = %371, %368
%375 = load i32, i32* %4
%376 = add nsw i32 %375, 1
store i32 %376, i32* %4
%377 = load i8*, i8** %3
%378 = load i32, i32* %4
%379 = sext i32 %378 to i64
%380 = getelementptr inbounds i8, i8* %377, i64 %379
store i8 47, i8* %380
br label %279
381: ; preds = %371, %365
%382 = load i32, i32* %8
%383 = icmp eq i32 %382, 47
br i1 %383, label %387, label %384
384: ; preds = %381
%385 = load i32, i32* %8
%386 = icmp eq i32 %385, 92
br i1 %386, label %387, label %403
387: ; preds = %384, %381
%388 = load i32, i32* %9
%389 = icmp eq i32 %388, 46
br i1 %389, label %390, label %403
390: ; preds = %387
%391 = load i32, i32* %10
%392 = icmp eq i32 %391, 47
br i1 %392, label %396, label %393
393: ; preds = %390
%394 = load i32, i32* %10
%395 = icmp eq i32 %394, 92
br i1 %395, label %396, label %403
396: ; preds = %393, %390
%397 = load i32, i32* %4
%398 = add nsw i32 %397, 2
store i32 %398, i32* %4
%399 = load i8*, i8** %3
%400 = load i32, i32* %4
%401 = sext i32 %400 to i64
%402 = getelementptr inbounds i8, i8* %399, i64 %401
store i8 47, i8* %402
br label %279
403: ; preds = %393, %387, %384
%404 = load i32, i32* %8
%405 = icmp eq i32 %404, 47
br i1 %405, label %409, label %406
406: ; preds = %403
%407 = load i32, i32* %8
%408 = icmp eq i32 %407, 92
br i1 %408, label %409, label %457
409: ; preds = %406, %403
%410 = load i32, i32* %9
%411 = icmp eq i32 %410, 46
br i1 %411, label %412, label %457
412: ; preds = %409
%413 = load i32, i32* %10
%414 = icmp eq i32 %413, 46
br i1 %414, label %415, label %457
415: ; preds = %412
%416 = load i32, i32* %11
%417 = icmp eq i32 %416, 47
br i1 %417, label %421, label %418
418: ; preds = %415
%419 = load i32, i32* %11
%420 = icmp eq i32 %419, 92
br i1 %420, label %421, label %457
421: ; preds = %418, %415
%422 = load i32, i32* %5
%423 = icmp sle i32 %422, 0
br i1 %423, label %424, label %425
424: ; preds = %421
store i32 0, i32* %2
br label %476
425: ; preds = %421
%426 = load i32, i32* %5
%427 = sub nsw i32 %426, 1
store i32 %427, i32* %12
br label %428
428: ; preds = %442, %425
%429 = load i32, i32* %12
%430 = icmp sge i32 %429, 0
br i1 %430, label %431, label %439
431: ; preds = %428
%432 = load i8*, i8** %3
%433 = load i32, i32* %12
%434 = sext i32 %433 to i64
%435 = getelementptr inbounds i8, i8* %432, i64 %434
%436 = load i8, i8* %435
%437 = sext i8 %436 to i32
%438 = icmp ne i32 %437, 47
br label %439
439: ; preds = %431, %428
%440 = phi i1 [ false, %428 ], [ %438, %431 ]
br i1 %440, label %441, label %445
441: ; preds = %439
br label %442
442: ; preds = %441
%443 = load i32, i32* %12
%444 = add nsw i32 %443, -1
store i32 %444, i32* %12
br label %428
445: ; preds = %439
%446 = load i32, i32* %12
%447 = icmp slt i32 %446, 0
br i1 %447, label %448, label %449
448: ; preds = %445
store i32 0, i32* %2
br label %476
449: ; preds = %445
%450 = load i32, i32* %4
%451 = add nsw i32 %450, 3
store i32 %451, i32* %4
%452 = load i32, i32* %12
store i32 %452, i32* %5
%453 = load i8*, i8** %3
%454 = load i32, i32* %4
%455 = sext i32 %454 to i64
%456 = getelementptr inbounds i8, i8* %453, i64 %455
store i8 47, i8* %456
br label %279
457: ; preds = %418, %412, %409, %406
br label %458
458: ; preds = %457
br label %459
459: ; preds = %458
%460 = load i8*, i8** %3
%461 = load i32, i32* %4
%462 = add nsw i32 %461, 1
store i32 %462, i32* %4
%463 = sext i32 %461 to i64
%464 = getelementptr inbounds i8, i8* %460, i64 %463
%465 = load i8, i8* %464
%466 = load i8*, i8** %3
%467 = load i32, i32* %5
%468 = add nsw i32 %467, 1
store i32 %468, i32* %5
%469 = sext i32 %467 to i64
%470 = getelementptr inbounds i8, i8* %466, i64 %469
store i8 %465, i8* %470
br label %279
471: ; preds = %295
%472 = load i8*, i8** %3
%473 = load i32, i32* %5
%474 = sext i32 %473 to i64
%475 = getelementptr inbounds i8, i8* %472, i64 %474
store i8 0, i8* %475
store i32 1, i32* %2
br label %476
476: ; preds = %471, %448, %424, %364, %242
%477 = load i32, i32* %2
ret i32 %477
}

LLVM IR (-O2):
define i32 @httpd_decode_url(i8* nocapture %0) {
br label %2
2: ; preds = %63, %1
%3 = phi i32 [ 0, %1 ], [ %65, %63 ]
%4 = phi i32 [ 0, %1 ], [ %64, %63 ]
%5 = sext i32 %4 to i64
%6 = getelementptr inbounds i8, i8* %0, i64 %5
%7 = load i8, i8* %6
%8 = add nsw i32 %4, 1
%9 = sext i32 %8 to i64
%10 = getelementptr inbounds i8, i8* %0, i64 %9
%11 = add nsw i32 %4, 2
%12 = sext i32 %11 to i64
%13 = getelementptr inbounds i8, i8* %0, i64 %12
br label %14
14: ; preds = %2, %57
switch i8 %7, label %66 [
i8 0, label %70
i8 63, label %70
i8 37, label %15
i8 43, label %59
]
15: ; preds = %14
%16 = load i8, i8* %10
%17 = sext i8 %16 to i32
%18 = add i8 %16, -48
%19 = icmp ult i8 %18, 10
br i1 %19, label %20, label %22
20: ; preds = %15
%21 = add nsw i32 %17, -48
br label %32
22: ; preds = %15
%23 = add i8 %16, -65
%24 = icmp ult i8 %23, 6
br i1 %24, label %25, label %27
25: ; preds = %22
%26 = add nsw i32 %17, -55
br label %32
27: ; preds = %22
%28 = add i8 %16, -97
%29 = icmp ult i8 %28, 6
%30 = add nsw i32 %17, -87
%31 = select i1 %29, i32 %30, i32 -1
br label %32
32: ; preds = %27, %25, %20
%33 = phi i32 [ %21, %20 ], [ %26, %25 ], [ %31, %27 ]
%34 = load i8, i8* %13
%35 = sext i8 %34 to i32
%36 = add i8 %34, -48
%37 = icmp ult i8 %36, 10
br i1 %37, label %44, label %38
38: ; preds = %32
%39 = add i8 %34, -65
%40 = icmp ult i8 %39, 6
br i1 %40, label %44, label %41
41: ; preds = %38
%42 = add i8 %34, -97
%43 = icmp ult i8 %42, 6
br i1 %43, label %44, label %57
44: ; preds = %41, %38, %32
%45 = phi i32 [ -48, %32 ], [ -55, %38 ], [ -87, %41 ]
%46 = add nsw i32 %45, %35
%47 = icmp sgt i32 %33, 1
%48 = icmp sgt i32 %46, -1
%49 = select i1 %47, i1 %48, i1 false
br i1 %49, label %50, label %57
50: ; preds = %44
%51 = add nsw i32 %4, 3
%52 = shl nuw nsw i32 %33, 4
%53 = add nuw nsw i32 %46, %52
%54 = trunc i32 %53 to i8
%55 = zext i32 %3 to i64
%56 = getelementptr inbounds i8, i8* %0, i64 %55
store i8 %54, i8* %56
br label %63
57: ; preds = %41, %44
%58 = icmp ult i32 %33, 2
br i1 %58, label %134, label %14
59: ; preds = %14
%60 = zext i32 %3 to i64
%61 = getelementptr inbounds i8, i8* %0, i64 %60
store i8 32, i8* %61
%62 = add nsw i32 %4, 1
br label %63
63: ; preds = %59, %66, %50
%64 = phi i32 [ %51, %50 ], [ %67, %66 ], [ %62, %59 ]
%65 = add nuw nsw i32 %3, 1
br label %2
66: ; preds = %14
%67 = add nsw i32 %4, 1
%68 = zext i32 %3 to i64
%69 = getelementptr inbounds i8, i8* %0, i64 %68
store i8 %7, i8* %69
br label %63
70: ; preds = %14, %14
%71 = zext i32 %3 to i64
%72 = getelementptr inbounds i8, i8* %0, i64 %71
store i8 0, i8* %72
br label %73
73: ; preds = %128, %70
%74 = phi i32 [ 0, %70 ], [ %129, %128 ]
%75 = phi i32 [ 0, %70 ], [ %130, %128 ]
br label %76
76: ; preds = %105, %73
%77 = phi i32 [ %75, %73 ], [ %106, %105 ]
%78 = sext i32 %77 to i64
%79 = getelementptr inbounds i8, i8* %0, i64 %78
%80 = load i8, i8* %79
switch i8 %80, label %81 [
i8 0, label %131
i8 63, label %131
]
81: ; preds = %76
%82 = add nsw i32 %77, 1
%83 = sext i32 %82 to i64
%84 = getelementptr inbounds i8, i8* %0, i64 %83
%85 = load i8, i8* %84
%86 = add nsw i32 %77, 2
%87 = sext i32 %86 to i64
%88 = getelementptr inbounds i8, i8* %0, i64 %87
%89 = load i8, i8* %88
%90 = add nsw i32 %77, 3
%91 = sext i32 %90 to i64
%92 = getelementptr inbounds i8, i8* %0, i64 %91
%93 = load i8, i8* %92
switch i8 %80, label %94 [
i8 124, label %134
i8 60, label %134
i8 62, label %134
i8 42, label %134
]
94: ; preds = %81
%95 = icmp eq i8 %80, 47
br i1 %95, label %96, label %98
96: ; preds = %94
switch i8 %85, label %98 [
i8 92, label %97
i8 47, label %97
]
97: ; preds = %96, %96
store i8 47, i8* %84
br label %105
98: ; preds = %96, %94
%99 = icmp eq i8 %80, 92
%100 = or i1 %95, %99
%101 = icmp eq i8 %85, 46
%102 = select i1 %100, i1 %101, i1 false
br i1 %102, label %103, label %124
103: ; preds = %98
switch i8 %89, label %124 [
i8 92, label %104
i8 47, label %104
i8 46, label %107
]
104: ; preds = %103, %103
store i8 47, i8* %88
br label %105
105: ; preds = %104, %97
%106 = phi i32 [ %82, %97 ], [ %86, %104 ]
br label %76
107: ; preds = %103
%108 = getelementptr inbounds i8, i8* %0, i64 %91
switch i8 %93, label %124 [
i8 92, label %109
i8 47, label %109
]
109: ; preds = %107, %107
%110 = icmp slt i32 %74, 1
br i1 %110, label %134, label %111
111: ; preds = %109
%112 = zext i32 %74 to i64
br label %113
113: ; preds = %111, %117
%114 = phi i64 [ %112, %111 ], [ %115, %117 ]
%115 = add nsw i64 %114, -1
%116 = icmp sgt i64 %114, 0
br i1 %116, label %117, label %134
117: ; preds = %113
%118 = and i64 %115, 4294967295
%119 = getelementptr inbounds i8, i8* %0, i64 %118
%120 = load i8, i8* %119
%121 = icmp eq i8 %120, 47
br i1 %121, label %122, label %113
122: ; preds = %117
%123 = trunc i64 %115 to i32
store i8 47, i8* %108
br label %128
124: ; preds = %103, %98, %107
%125 = add nsw i32 %74, 1
%126 = sext i32 %74 to i64
%127 = getelementptr inbounds i8, i8* %0, i64 %126
store i8 %80, i8* %127
br label %128
128: ; preds = %124, %122
%129 = phi i32 [ %123, %122 ], [ %125, %124 ]
%130 = phi i32 [ %90, %122 ], [ %82, %124 ]
br label %73
131: ; preds = %76, %76
%132 = sext i32 %74 to i64
%133 = getelementptr inbounds i8, i8* %0, i64 %132
store i8 0, i8* %133
br label %134
134: ; preds = %57, %81, %81, %81, %81, %109, %113, %131
%135 = phi i32 [ 1, %131 ], [ 0, %113 ], [ 0, %109 ], [ 0, %81 ], [ 0, %81 ], [ 0, %81 ], [ 0, %81 ], [ 0, %57 ]
ret i32 %135
}