#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 */
char *HTCanon(char **, char *);
char *strchr(char *, char);
int strlen(char *);
scalar_t__ strncmp(char *, char *, int);
char *strstr(char *, char *);
char tolower(char);
char *HTSimplify(char **url) {
  char *path;
  char *p;
  if (!url || !*url) {
    ;
    return *url;
  };
  if ((path = strstr(*url, "://")) != NULL) {
    char *newptr;
    char *access = *url;
    while (access < path && (*access = tolower(*access)))
      access++;
    path += 3;
    while ((newptr = strstr(path, "://")) != NULL)
      path = newptr + 3;
    path = HTCanon(url, path);
  } else if ((path = strstr(*url, ":/")) != NULL) {
    path += 2;
  } else
    path = *url;
  if (*path == '/' && *(path + 1) == '/') {
    path += 1;
  } else if (!strncmp(path, "news:", 5)) {
    char *ptr = strchr(path + 5, '@');
    if (!ptr)
      ptr = path + 5;
    while (*ptr) {
      *ptr = tolower(*ptr);
      ptr++;
    };
    return *url;
  }
  if ((p = path)) {
    char *end;
    if (!((end = strchr(path, ';')) || (end = strchr(path, '?')) ||
          (end = strchr(path, '#'))))
      end = path + strlen(path);
    p = path;
    while (p < end) {
      if (*p == '/') {
        if (p > *url && *(p + 1) == '.' && (*(p + 2) == '/' || !*(p + 2))) {
          char *orig = p + 1;
          char *dest = (*(p + 2) != '/') ? p + 2 : p + 3;
          while ((*orig++ = *dest++))
            ;
          end = orig - 1;
        } else if (*(p + 1) == '.' && *(p + 2) == '.' &&
                   (*(p + 3) == '/' || !*(p + 3))) {
          char *q = p;
          while (q > path && *--q != '/')
            ;
          if (strncmp(q, "/../", 4)) {
            char *orig = q + 1;
            char *dest = (*(p + 3) != '/') ? p + 3 : p + 4;
            while ((*orig++ = *dest++))
              ;
            end = orig - 1;
            p = q;
          } else
            p++;
        } else if (*(p + 1) == '/') {
          while (*(p + 1) == '/') {
            char *orig = p, *dest = p + 1;
            while ((*orig++ = *dest++))
              ;
            end = orig - 1;
          }
        } else
          p++;
      } else
        p++;
    }
  }
  while (*path == '/' && *(path + 1) == '.' && *(path + 2) == '.' &&
         (!*(path + 3) || *(path + 3) == '/')) {
    char *orig = path;
    char *dest = path + 3;
    while ((*orig++ = *dest++))
      ;
  };
  return *url;
}


x86 assembly (clang, -O0):
<HTSimplify>:
push   %rbp
mov    %rsp,%rbp
sub    $0xc0,%rsp
mov    %rdi,-0x10(%rbp)
cmpq   $0x0,-0x10(%rbp)
je     1188 <HTSimplify+0x28>
mov    -0x10(%rbp),%rax
cmpq   $0x0,(%rax)
jne    1198 <HTSimplify+0x38>
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
mov    %rax,-0x8(%rbp)
jmp    17f9 <HTSimplify+0x699>
mov    -0x10(%rbp),%rax
mov    (%rax),%rdi
lea    0xe5a(%rip),%rsi
call   1080 <strstr@plt>
mov    %rax,-0x18(%rbp)
cmp    $0x0,%rax
je     1270 <HTSimplify+0x110>
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
mov    %rax,-0x30(%rbp)
mov    -0x30(%rbp),%rcx
xor    %eax,%eax
cmp    -0x18(%rbp),%rcx
mov    %al,-0x89(%rbp)
jae    11fb <HTSimplify+0x9b>
mov    -0x30(%rbp),%rax
movsbl (%rax),%edi
call   1070 <tolower@plt>
mov    -0x30(%rbp),%rcx
mov    %al,(%rcx)
movsbl %al,%eax
cmp    $0x0,%eax
setne  %al
mov    %al,-0x89(%rbp)
mov    -0x89(%rbp),%al
test   $0x1,%al
jne    120e <HTSimplify+0xae>
jmp    121f <HTSimplify+0xbf>
mov    -0x30(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x30(%rbp)
jmp    11c4 <HTSimplify+0x64>
mov    -0x18(%rbp),%rax
add    $0x3,%rax
mov    %rax,-0x18(%rbp)
mov    -0x18(%rbp),%rdi
lea    0xdca(%rip),%rsi
call   1080 <strstr@plt>
mov    %rax,-0x28(%rbp)
cmp    $0x0,%rax
je     125a <HTSimplify+0xfa>
mov    -0x28(%rbp),%rax
add    $0x3,%rax
mov    %rax,-0x18(%rbp)
jmp    122b <HTSimplify+0xcb>
mov    -0x10(%rbp),%rdi
mov    -0x18(%rbp),%rsi
call   1040 <HTCanon@plt>
mov    %rax,-0x18(%rbp)
jmp    12b2 <HTSimplify+0x152>
mov    -0x10(%rbp),%rax
mov    (%rax),%rdi
lea    0xd86(%rip),%rsi
call   1080 <strstr@plt>
mov    %rax,-0x18(%rbp)
cmp    $0x0,%rax
je     12a2 <HTSimplify+0x142>
mov    -0x18(%rbp),%rax
add    $0x2,%rax
mov    %rax,-0x18(%rbp)
jmp    12ad <HTSimplify+0x14d>
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
mov    %rax,-0x18(%rbp)
jmp    12b2 <HTSimplify+0x152>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2f,%eax
jne    12e4 <HTSimplify+0x184>
mov    -0x18(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x2f,%eax
jne    12e4 <HTSimplify+0x184>
mov    -0x18(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x18(%rbp)
jmp    137c <HTSimplify+0x21c>
mov    -0x18(%rbp),%rdi
lea    0xd18(%rip),%rsi
mov    $0x5,%edx
call   1030 <strncmp@plt>
cmp    $0x0,%rax
jne    1377 <HTSimplify+0x217>
mov    -0x18(%rbp),%rdi
add    $0x5,%rdi
mov    $0x40,%esi
call   1060 <strchr@plt>
mov    %rax,-0x38(%rbp)
cmpq   $0x0,-0x38(%rbp)
jne    1330 <HTSimplify+0x1d0>
mov    -0x18(%rbp),%rax
add    $0x5,%rax
mov    %rax,-0x38(%rbp)
jmp    1335 <HTSimplify+0x1d5>
mov    -0x38(%rbp),%rax
cmpb   $0x0,(%rax)
je     1367 <HTSimplify+0x207>
mov    -0x38(%rbp),%rax
movsbl (%rax),%edi
call   1070 <tolower@plt>
mov    %al,%cl
mov    -0x38(%rbp),%rax
mov    %cl,(%rax)
mov    -0x38(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x38(%rbp)
jmp    1335 <HTSimplify+0x1d5>
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
mov    %rax,-0x8(%rbp)
jmp    17f9 <HTSimplify+0x699>
jmp    137c <HTSimplify+0x21c>
mov    -0x18(%rbp),%rax
mov    %rax,-0x20(%rbp)
cmp    $0x0,%rax
je     1705 <HTSimplify+0x5a5>
mov    -0x18(%rbp),%rdi
mov    $0x3b,%esi
call   1060 <strchr@plt>
mov    %rax,-0x40(%rbp)
cmp    $0x0,%rax
jne    1409 <HTSimplify+0x2a9>
mov    -0x18(%rbp),%rdi
mov    $0x3f,%esi
call   1060 <strchr@plt>
mov    %rax,-0x40(%rbp)
cmp    $0x0,%rax
jne    1409 <HTSimplify+0x2a9>
mov    -0x18(%rbp),%rdi
mov    $0x23,%esi
call   1060 <strchr@plt>
mov    %rax,-0x40(%rbp)
cmp    $0x0,%rax
jne    1409 <HTSimplify+0x2a9>
mov    -0x18(%rbp),%rax
mov    %rax,-0x98(%rbp)
mov    -0x18(%rbp),%rdi
call   1050 <strlen@plt>
mov    %eax,%ecx
mov    -0x98(%rbp),%rax
movslq %ecx,%rcx
add    %rcx,%rax
mov    %rax,-0x40(%rbp)
mov    -0x18(%rbp),%rax
mov    %rax,-0x20(%rbp)
mov    -0x20(%rbp),%rax
cmp    -0x40(%rbp),%rax
jae    1700 <HTSimplify+0x5a0>
mov    -0x20(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2f,%eax
jne    16ef <HTSimplify+0x58f>
mov    -0x20(%rbp),%rax
mov    -0x10(%rbp),%rcx
cmp    (%rcx),%rax
jbe    14fb <HTSimplify+0x39b>
mov    -0x20(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x2e,%eax
jne    14fb <HTSimplify+0x39b>
mov    -0x20(%rbp),%rax
movsbl 0x2(%rax),%eax
cmp    $0x2f,%eax
je     1470 <HTSimplify+0x310>
mov    -0x20(%rbp),%rax
cmpb   $0x0,0x2(%rax)
jne    14fb <HTSimplify+0x39b>
mov    -0x20(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x48(%rbp)
mov    -0x20(%rbp),%rax
movsbl 0x2(%rax),%eax
cmp    $0x2f,%eax
je     14a1 <HTSimplify+0x341>
mov    -0x20(%rbp),%rax
add    $0x2,%rax
mov    %rax,-0xa0(%rbp)
jmp    14b0 <HTSimplify+0x350>
mov    -0x20(%rbp),%rax
add    $0x3,%rax
mov    %rax,-0xa0(%rbp)
mov    -0xa0(%rbp),%rax
mov    %rax,-0x50(%rbp)
mov    -0x50(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x50(%rbp)
mov    (%rax),%al
mov    -0x48(%rbp),%rcx
mov    %rcx,%rdx
add    $0x1,%rdx
mov    %rdx,-0x48(%rbp)
mov    %al,(%rcx)
cmp    $0x0,%al
je     14ea <HTSimplify+0x38a>
jmp    14bb <HTSimplify+0x35b>
mov    -0x48(%rbp),%rax
add    $0xffffffffffffffff,%rax
mov    %rax,-0x40(%rbp)
jmp    16ea <HTSimplify+0x58a>
mov    -0x20(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x2e,%eax
jne    1654 <HTSimplify+0x4f4>
mov    -0x20(%rbp),%rax
movsbl 0x2(%rax),%eax
cmp    $0x2e,%eax
jne    1654 <HTSimplify+0x4f4>
mov    -0x20(%rbp),%rax
movsbl 0x3(%rax),%eax
cmp    $0x2f,%eax
je     153c <HTSimplify+0x3dc>
mov    -0x20(%rbp),%rax
cmpb   $0x0,0x3(%rax)
jne    1654 <HTSimplify+0x4f4>
mov    -0x20(%rbp),%rax
mov    %rax,-0x58(%rbp)
mov    -0x58(%rbp),%rcx
xor    %eax,%eax
cmp    -0x18(%rbp),%rcx
mov    %al,-0xa1(%rbp)
jbe    1579 <HTSimplify+0x419>
mov    -0x58(%rbp),%rax
mov    %rax,%rcx
add    $0xffffffffffffffff,%rcx
mov    %rcx,-0x58(%rbp)
movsbl -0x1(%rax),%eax
cmp    $0x2f,%eax
setne  %al
mov    %al,-0xa1(%rbp)
mov    -0xa1(%rbp),%al
test   $0x1,%al
jne    158c <HTSimplify+0x42c>
jmp    1591 <HTSimplify+0x431>
jmp    1544 <HTSimplify+0x3e4>
mov    -0x58(%rbp),%rdi
lea    0xa71(%rip),%rsi
mov    $0x4,%edx
call   1030 <strncmp@plt>
cmp    $0x0,%rax
je     1643 <HTSimplify+0x4e3>
mov    -0x58(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x60(%rbp)
mov    -0x20(%rbp),%rax
movsbl 0x3(%rax),%eax
cmp    $0x2f,%eax
je     15e1 <HTSimplify+0x481>
mov    -0x20(%rbp),%rax
add    $0x3,%rax
mov    %rax,-0xb0(%rbp)
jmp    15f0 <HTSimplify+0x490>
mov    -0x20(%rbp),%rax
add    $0x4,%rax
mov    %rax,-0xb0(%rbp)
mov    -0xb0(%rbp),%rax
mov    %rax,-0x68(%rbp)
mov    -0x68(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x68(%rbp)
mov    (%rax),%al
mov    -0x60(%rbp),%rcx
mov    %rcx,%rdx
add    $0x1,%rdx
mov    %rdx,-0x60(%rbp)
mov    %al,(%rcx)
cmp    $0x0,%al
je     162a <HTSimplify+0x4ca>
jmp    15fb <HTSimplify+0x49b>
mov    -0x60(%rbp),%rax
add    $0xffffffffffffffff,%rax
mov    %rax,-0x40(%rbp)
mov    -0x58(%rbp),%rax
mov    %rax,-0x20(%rbp)
jmp    164f <HTSimplify+0x4ef>
mov    -0x20(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20(%rbp)
jmp    16e5 <HTSimplify+0x585>
mov    -0x20(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x2f,%eax
jne    16d4 <HTSimplify+0x574>
jmp    166a <HTSimplify+0x50a>
mov    -0x20(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x2f,%eax
jne    16cf <HTSimplify+0x56f>
mov    -0x20(%rbp),%rax
mov    %rax,-0x70(%rbp)
mov    -0x20(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x78(%rbp)
mov    -0x78(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x78(%rbp)
mov    (%rax),%al
mov    -0x70(%rbp),%rcx
mov    %rcx,%rdx
add    $0x1,%rdx
mov    %rdx,-0x70(%rbp)
mov    %al,(%rcx)
cmp    $0x0,%al
je     16be <HTSimplify+0x55e>
jmp    168f <HTSimplify+0x52f>
mov    -0x70(%rbp),%rax
add    $0xffffffffffffffff,%rax
mov    %rax,-0x40(%rbp)
jmp    166a <HTSimplify+0x50a>
jmp    16e0 <HTSimplify+0x580>
mov    -0x20(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20(%rbp)
jmp    16e5 <HTSimplify+0x585>
jmp    16ea <HTSimplify+0x58a>
jmp    16fb <HTSimplify+0x59b>
mov    -0x20(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20(%rbp)
jmp    1411 <HTSimplify+0x2b1>
jmp    1705 <HTSimplify+0x5a5>
jmp    170a <HTSimplify+0x5aa>
mov    -0x18(%rbp),%rax
movsbl (%rax),%ecx
xor    %eax,%eax
cmp    $0x2f,%ecx
mov    %al,-0xb1(%rbp)
jne    178a <HTSimplify+0x62a>
mov    -0x18(%rbp),%rax
movsbl 0x1(%rax),%ecx
xor    %eax,%eax
cmp    $0x2e,%ecx
mov    %al,-0xb1(%rbp)
jne    178a <HTSimplify+0x62a>
mov    -0x18(%rbp),%rax
movsbl 0x2(%rax),%ecx
xor    %eax,%eax
cmp    $0x2e,%ecx
mov    %al,-0xb1(%rbp)
jne    178a <HTSimplify+0x62a>
mov    -0x18(%rbp),%rcx
mov    $0x1,%al
cmpb   $0x0,0x3(%rcx)
mov    %al,-0xb2(%rbp)
je     177e <HTSimplify+0x61e>
mov    -0x18(%rbp),%rax
movsbl 0x3(%rax),%eax
cmp    $0x2f,%eax
sete   %al
mov    %al,-0xb2(%rbp)
mov    -0xb2(%rbp),%al
mov    %al,-0xb1(%rbp)
mov    -0xb1(%rbp),%al
test   $0x1,%al
jne    179d <HTSimplify+0x63d>
jmp    17ee <HTSimplify+0x68e>
mov    -0x18(%rbp),%rax
mov    %rax,-0x80(%rbp)
mov    -0x18(%rbp),%rax
add    $0x3,%rax
mov    %rax,-0x88(%rbp)
mov    -0x88(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x88(%rbp)
mov    (%rax),%al
mov    -0x80(%rbp),%rcx
mov    %rcx,%rdx
add    $0x1,%rdx
mov    %rdx,-0x80(%rbp)
mov    %al,(%rcx)
cmp    $0x0,%al
je     17e9 <HTSimplify+0x689>
jmp    17b4 <HTSimplify+0x654>
jmp    170a <HTSimplify+0x5aa>
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
mov    %rax,-0x8(%rbp)
mov    -0x8(%rbp),%rax
add    $0xc0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<HTSimplify>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
push   %rax
mov    %rdi,%rbp
test   %rdi,%rdi
je     14a8 <HTSimplify+0x348>
mov    0x0(%rbp),%r12
test   %r12,%r12
je     14a8 <HTSimplify+0x348>
lea    0xe75(%rip),%rsi
mov    %r12,%rdi
call   1080 <strstr@plt>
test   %rax,%rax
je     1210 <HTSimplify+0xb0>
mov    %rax,%r13
cmp    %rax,%r12
jae    11d1 <HTSimplify+0x71>
add    $0x1,%r12
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
movsbl -0x1(%r12),%edi
call   1070 <tolower@plt>
mov    %al,-0x1(%r12)
test   %al,%al
je     11d1 <HTSimplify+0x71>
lea    0x1(%r12),%rax
cmp    %r13,%r12
mov    %rax,%r12
jb     11b0 <HTSimplify+0x50>
lea    0xe28(%rip),%r15
nopl   0x0(%rax,%rax,1)
mov    %r13,%rbx
add    $0x3,%rbx
mov    %rbx,%rdi
mov    %r15,%rsi
call   1080 <strstr@plt>
mov    %rax,%r13
test   %rax,%rax
jne    11e0 <HTSimplify+0x80>
mov    %rbp,%rdi
mov    %rbx,%rsi
call   1040 <HTCanon@plt>
mov    %rax,%r15
cmpb   $0x2f,(%r15)
je     1230 <HTSimplify+0xd0>
jmp    123d <HTSimplify+0xdd>
lea    0xded(%rip),%rsi
mov    %r12,%rdi
call   1080 <strstr@plt>
lea    0x2(%rax),%r15
test   %rax,%rax
cmove  %r12,%r15
cmpb   $0x2f,(%r15)
jne    123d <HTSimplify+0xdd>
cmpb   $0x2f,0x1(%r15)
jne    123d <HTSimplify+0xdd>
add    $0x1,%r15
jmp    125a <HTSimplify+0xfa>
lea    0xdc3(%rip),%rsi
mov    %r15,%rdi
mov    $0x5,%edx
call   1030 <strncmp@plt>
test   %rax,%rax
je     1460 <HTSimplify+0x300>
mov    %rbp,(%rsp)
mov    %r15,%rdi
mov    $0x3b,%esi
call   1060 <strchr@plt>
mov    %rax,%rbx
test   %rax,%rax
jne    12ab <HTSimplify+0x14b>
mov    %r15,%rdi
mov    $0x3f,%esi
call   1060 <strchr@plt>
mov    %rax,%rbx
test   %rax,%rax
jne    12ab <HTSimplify+0x14b>
mov    %r15,%rdi
mov    $0x23,%esi
call   1060 <strchr@plt>
mov    %rax,%rbx
test   %rax,%rax
jne    12ab <HTSimplify+0x14b>
mov    %r15,%rdi
call   1050 <strlen@plt>
movslq %eax,%rbx
add    %r15,%rbx
cmp    %rbx,%r15
jae    13fd <HTSimplify+0x29d>
mov    %r15,%rbp
jmp    12d3 <HTSimplify+0x173>
nopl   0x0(%rax)
add    $0x1,%rbp
mov    %rbp,%r12
mov    %r12,%rbp
cmp    %rbx,%r12
jae    13fd <HTSimplify+0x29d>
cmpb   $0x2f,0x0(%rbp)
jne    12c0 <HTSimplify+0x160>
mov    0x1(%rbp),%al
mov    (%rsp),%rcx
cmp    (%rcx),%rbp
jbe    1330 <HTSimplify+0x1d0>
cmp    $0x2e,%al
jne    1330 <HTSimplify+0x1d0>
mov    0x2(%rbp),%cl
test   %cl,%cl
je     12f5 <HTSimplify+0x195>
cmp    $0x2f,%cl
jne    136b <HTSimplify+0x20b>
lea    0x2(%rbp),%rax
lea    0x3(%rbp),%rdx
cmp    $0x2f,%cl
cmove  %rdx,%rax
xor    %ebx,%ebx
cs nopw 0x0(%rax,%rax,1)
movzbl (%rax,%rbx,1),%ecx
mov    %cl,0x1(%rbp,%rbx,1)
add    $0x1,%rbx
test   %cl,%cl
jne    1310 <HTSimplify+0x1b0>
add    %rbp,%rbx
jmp    12c4 <HTSimplify+0x164>
cs nopw 0x0(%rax,%rax,1)
nop
lea    0x1(%rbp),%r12
cmp    $0x2e,%al
je     136f <HTSimplify+0x20f>
cmp    $0x2f,%al
jne    12c7 <HTSimplify+0x167>
nopl   0x0(%rax)
movb   $0x2f,0x0(%rbp)
mov    %rbp,%rbx
nopw   0x0(%rax,%rax,1)
movzbl 0x2(%rbx),%eax
mov    %al,0x1(%rbx)
add    $0x1,%rbx
test   %al,%al
jne    1350 <HTSimplify+0x1f0>
cmpb   $0x2f,(%r12)
je     1340 <HTSimplify+0x1e0>
jmp    12c4 <HTSimplify+0x164>
lea    0x1(%rbp),%r12
cmpb   $0x2e,0x2(%rbp)
jne    12c7 <HTSimplify+0x167>
mov    0x3(%rbp),%al
cmp    $0x2f,%al
je     1388 <HTSimplify+0x228>
test   %al,%al
jne    12c7 <HTSimplify+0x167>
lea    0x3(%rbp),%r14
mov    %rbp,%rax
nop
cmp    %r15,%rax
jbe    13a4 <HTSimplify+0x244>
lea    -0x1(%rax),%r13
cmpb   $0x2f,-0x1(%rax)
mov    %r13,%rax
jne    1390 <HTSimplify+0x230>
jmp    13a7 <HTSimplify+0x247>
mov    %rax,%r13
mov    %r13,%rdi
lea    0xc5c(%rip),%rsi
mov    $0x4,%edx
call   1030 <strncmp@plt>
test   %rax,%rax
je     12c7 <HTSimplify+0x167>
cmpb   $0x2f,0x3(%rbp)
lea    0x4(%rbp),%rax
cmove  %rax,%r14
xor    %ebx,%ebx
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movzbl (%r14,%rbx,1),%eax
mov    %al,0x1(%r13,%rbx,1)
add    $0x1,%rbx
test   %al,%al
jne    13e0 <HTSimplify+0x280>
add    %r13,%rbx
mov    %r13,%r12
jmp    12c7 <HTSimplify+0x167>
cmpb   $0x2f,(%r15)
mov    (%rsp),%rbp
jne    14a8 <HTSimplify+0x348>
lea    0x4(%r15),%rax
jmp    142a <HTSimplify+0x2ca>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
cmpb   $0x2f,(%r15)
jne    14a8 <HTSimplify+0x348>
cmpb   $0x2e,0x1(%r15)
jne    14a8 <HTSimplify+0x348>
cmpb   $0x2e,0x2(%r15)
jne    14a8 <HTSimplify+0x348>
mov    0x3(%r15),%cl
cmp    $0x2f,%cl
je     1445 <HTSimplify+0x2e5>
test   %cl,%cl
jne    14a8 <HTSimplify+0x348>
mov    %cl,(%r15)
test   %cl,%cl
je     1420 <HTSimplify+0x2c0>
mov    %rax,%rcx
nop
movzbl (%rcx),%edx
mov    %dl,-0x3(%rcx)
add    $0x1,%rcx
test   %dl,%dl
jne    1450 <HTSimplify+0x2f0>
jmp    1420 <HTSimplify+0x2c0>
add    $0x5,%r15
mov    %r15,%rdi
mov    $0x40,%esi
call   1060 <strchr@plt>
test   %rax,%rax
cmovne %rax,%r15
mov    (%r15),%al
test   %al,%al
je     14a8 <HTSimplify+0x348>
add    $0x1,%r15
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
movsbl %al,%edi
call   1070 <tolower@plt>
mov    %al,-0x1(%r15)
movzbl (%r15),%eax
add    $0x1,%r15
test   %al,%al
jne    1490 <HTSimplify+0x330>
mov    0x0(%rbp),%rax
add    $0x8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

LLVM IR (-O2):
@.str = [4 x i8] c"://\00"
@.str.1 = [3 x i8] c":/\00"
@.str.2 = [6 x i8] c"news:\00"
@.str.3 = [5 x i8] c"/../\00"
define i8* @HTSimplify(i8** %0) {
%2 = icmp eq i8** %0, null
br i1 %2, label %183, label %3
3: ; preds = %1
%4 = load i8*, i8** %0
%5 = icmp eq i8* %4, null
br i1 %5, label %183, label %6
6: ; preds = %3
%7 = tail call i8* @strstr(i8* %4, i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i64 0, i64 0))
%8 = icmp eq i8* %7, null
br i1 %8, label %27, label %9
9: ; preds = %6
%10 = icmp ult i8* %4, %7
br i1 %10, label %11, label %19
11: ; preds = %9, %11
%12 = phi i8* [ %16, %11 ], [ %4, %9 ]
%13 = load i8, i8* %12
%14 = tail call signext i8 @tolower(i8 signext %13)
store i8 %14, i8* %12
%15 = icmp ne i8 %14, 0
%16 = getelementptr inbounds i8, i8* %12, i64 1
%17 = icmp ult i8* %16, %7
%18 = select i1 %15, i1 %17, i1 false
br i1 %18, label %11, label %19
19: ; preds = %11, %9
br label %20
20: ; preds = %19, %20
%21 = phi i8* [ %23, %20 ], [ %7, %19 ]
%22 = getelementptr inbounds i8, i8* %21, i64 3
%23 = tail call i8* @strstr(i8* %22, i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i64 0, i64 0))
%24 = icmp eq i8* %23, null
br i1 %24, label %25, label %20
25: ; preds = %20
%26 = tail call i8* @HTCanon(i8** %0, i8* %22)
br label %32
27: ; preds = %6
%28 = tail call i8* @strstr(i8* %4, i8* dereferenceable(1) getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0))
%29 = icmp eq i8* %28, null
%30 = getelementptr inbounds i8, i8* %28, i64 2
%31 = select i1 %29, i8* %4, i8* %30
br label %32
32: ; preds = %27, %25
%33 = phi i8* [ %26, %25 ], [ %31, %27 ]
%34 = load i8, i8* %33
%35 = icmp eq i8 %34, 47
br i1 %35, label %36, label %40
36: ; preds = %32
%37 = getelementptr inbounds i8, i8* %33, i64 1
%38 = load i8, i8* %37
%39 = icmp eq i8 %38, 47
br i1 %39, label %57, label %40
40: ; preds = %36, %32
%41 = tail call i64 @strncmp(i8* %33, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.2, i64 0, i64 0), i32 5)
%42 = icmp eq i64 %41, 0
br i1 %42, label %43, label %57
43: ; preds = %40
%44 = getelementptr inbounds i8, i8* %33, i64 5
%45 = tail call i8* @strchr(i8* %44, i8 signext 64)
%46 = icmp eq i8* %45, null
%47 = select i1 %46, i8* %44, i8* %45
%48 = load i8, i8* %47
%49 = icmp eq i8 %48, 0
br i1 %49, label %183, label %50
50: ; preds = %43, %50
%51 = phi i8 [ %55, %50 ], [ %48, %43 ]
%52 = phi i8* [ %54, %50 ], [ %47, %43 ]
%53 = tail call signext i8 @tolower(i8 signext %51)
store i8 %53, i8* %52
%54 = getelementptr inbounds i8, i8* %52, i64 1
%55 = load i8, i8* %54
%56 = icmp eq i8 %55, 0
br i1 %56, label %183, label %50
57: ; preds = %40, %36
%58 = phi i8* [ %33, %40 ], [ %37, %36 ]
%59 = tail call i8* @strchr(i8* %58, i8 signext 59)
%60 = icmp eq i8* %59, null
br i1 %60, label %61, label %71
61: ; preds = %57
%62 = tail call i8* @strchr(i8* %58, i8 signext 63)
%63 = icmp eq i8* %62, null
br i1 %63, label %64, label %71
64: ; preds = %61
%65 = tail call i8* @strchr(i8* %58, i8 signext 35)
%66 = icmp eq i8* %65, null
br i1 %66, label %67, label %71
67: ; preds = %64
%68 = tail call i32 @strlen(i8* %58)
%69 = sext i32 %68 to i64
%70 = getelementptr inbounds i8, i8* %58, i64 %69
br label %71
71: ; preds = %67, %64, %61, %57
%72 = phi i8* [ %59, %57 ], [ %62, %61 ], [ %65, %64 ], [ %70, %67 ]
%73 = icmp ult i8* %58, %72
br i1 %73, label %82, label %74
74: ; preds = %159, %71
%75 = getelementptr inbounds i8, i8* %58, i64 1
%76 = getelementptr inbounds i8, i8* %58, i64 2
%77 = load i8, i8* %58
%78 = icmp eq i8 %77, 47
br i1 %78, label %79, label %183
79: ; preds = %74
%80 = getelementptr inbounds i8, i8* %58, i64 3
%81 = getelementptr inbounds i8, i8* %58, i64 4
br label %166
82: ; preds = %71, %159
%83 = phi i8* [ %161, %159 ], [ %72, %71 ]
%84 = phi i8* [ %160, %159 ], [ %58, %71 ]
%85 = load i8, i8* %84
%86 = icmp eq i8 %85, 47
br i1 %86, label %87, label %157
87: ; preds = %82
%88 = load i8*, i8** %0
%89 = icmp ugt i8* %84, %88
%90 = getelementptr inbounds i8, i8* %84, i64 1
%91 = load i8, i8* %90
%92 = icmp eq i8 %91, 46
%93 = select i1 %89, i1 %92, i1 false
br i1 %93, label %94, label %110
94: ; preds = %87
%95 = getelementptr inbounds i8, i8* %84, i64 2
%96 = load i8, i8* %95
switch i8 %96, label %97 [
i8 47, label %99
i8 0, label %99
]
97: ; preds = %94
%98 = getelementptr inbounds i8, i8* %84, i64 1
br label %114
99: ; preds = %94, %94
%100 = icmp eq i8 %96, 47
%101 = getelementptr inbounds i8, i8* %84, i64 3
%102 = select i1 %100, i8* %101, i8* %95
br label %103
103: ; preds = %103, %99
%104 = phi i8* [ %90, %99 ], [ %108, %103 ]
%105 = phi i8* [ %102, %99 ], [ %106, %103 ]
%106 = getelementptr inbounds i8, i8* %105, i64 1
%107 = load i8, i8* %105
%108 = getelementptr inbounds i8, i8* %104, i64 1
store i8 %107, i8* %104
%109 = icmp eq i8 %107, 0
br i1 %109, label %159, label %103
110: ; preds = %87
%111 = getelementptr inbounds i8, i8* %84, i64 1
switch i8 %91, label %159 [
i8 46, label %114
i8 47, label %112
]
112: ; preds = %110
%113 = getelementptr inbounds i8, i8* %84, i64 2
br label %149
114: ; preds = %97, %110
%115 = phi i8* [ %98, %97 ], [ %111, %110 ]
%116 = getelementptr inbounds i8, i8* %84, i64 2
%117 = load i8, i8* %116
%118 = icmp eq i8 %117, 46
br i1 %118, label %119, label %159
119: ; preds = %114
%120 = getelementptr inbounds i8, i8* %84, i64 3
%121 = load i8, i8* %120
switch i8 %121, label %159 [
i8 47, label %122
i8 0, label %122
]
122: ; preds = %119, %119
br label %123
123: ; preds = %122, %126
%124 = phi i8* [ %127, %126 ], [ %84, %122 ]
%125 = icmp ugt i8* %124, %58
br i1 %125, label %126, label %130
126: ; preds = %123
%127 = getelementptr inbounds i8, i8* %124, i64 -1
%128 = load i8, i8* %127
%129 = icmp eq i8 %128, 47
br i1 %129, label %130, label %123
130: ; preds = %123, %126
%131 = phi i8* [ %127, %126 ], [ %124, %123 ]
%132 = tail call i64 @strncmp(i8* %131, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.3, i64 0, i64 0), i32 4)
%133 = icmp eq i64 %132, 0
br i1 %133, label %159, label %134
134: ; preds = %130
%135 = load i8, i8* %120
%136 = icmp eq i8 %135, 47
%137 = getelementptr inbounds i8, i8* %84, i64 4
%138 = select i1 %136, i8* %137, i8* %120
br label %139
139: ; preds = %139, %134
%140 = phi i8* [ %131, %134 ], [ %142, %139 ]
%141 = phi i8* [ %138, %134 ], [ %143, %139 ]
%142 = getelementptr inbounds i8, i8* %140, i64 1
%143 = getelementptr inbounds i8, i8* %141, i64 1
%144 = load i8, i8* %141
store i8 %144, i8* %142
%145 = icmp eq i8 %144, 0
br i1 %145, label %159, label %139
146: ; preds = %150
%147 = load i8, i8* %111
%148 = icmp eq i8 %147, 47
br i1 %148, label %149, label %159
149: ; preds = %112, %146
store i8 47, i8* %84
br label %150
150: ; preds = %149, %150
%151 = phi i8* [ %113, %149 ], [ %155, %150 ]
%152 = phi i8* [ %84, %149 ], [ %153, %150 ]
%153 = getelementptr inbounds i8, i8* %152, i64 1
%154 = load i8, i8* %151
%155 = getelementptr inbounds i8, i8* %151, i64 1
store i8 %154, i8* %153
%156 = icmp eq i8 %154, 0
br i1 %156, label %146, label %150
157: ; preds = %82
%158 = getelementptr inbounds i8, i8* %84, i64 1
br label %159
159: ; preds = %146, %103, %139, %110, %114, %119, %130, %157
%160 = phi i8* [ %158, %157 ], [ %115, %130 ], [ %115, %119 ], [ %115, %114 ], [ %111, %110 ], [ %131, %139 ], [ %84, %103 ], [ %84, %146 ]
%161 = phi i8* [ %83, %157 ], [ %83, %130 ], [ %83, %119 ], [ %83, %114 ], [ %83, %110 ], [ %142, %139 ], [ %104, %103 ], [ %153, %146 ]
%162 = icmp ult i8* %160, %161
br i1 %162, label %82, label %74
163: ; preds = %176, %174
%164 = load i8, i8* %58
%165 = icmp eq i8 %164, 47
br i1 %165, label %166, label %183
166: ; preds = %79, %163
%167 = load i8, i8* %75
%168 = icmp eq i8 %167, 46
br i1 %168, label %169, label %183
169: ; preds = %166
%170 = load i8, i8* %76
%171 = icmp eq i8 %170, 46
br i1 %171, label %172, label %183
172: ; preds = %169
%173 = load i8, i8* %80
switch i8 %173, label %183 [
i8 0, label %174
i8 47, label %174
]
174: ; preds = %172, %172
store i8 %173, i8* %58
%175 = icmp eq i8 %173, 0
br i1 %175, label %163, label %176
176: ; preds = %174, %176
%177 = phi i8* [ %181, %176 ], [ %81, %174 ]
%178 = phi i8* [ %179, %176 ], [ %58, %174 ]
%179 = getelementptr inbounds i8, i8* %178, i64 1
%180 = load i8, i8* %177
%181 = getelementptr inbounds i8, i8* %177, i64 1
store i8 %180, i8* %179
%182 = icmp eq i8 %180, 0
br i1 %182, label %163, label %176
183: ; preds = %50, %172, %163, %166, %169, %43, %74, %1, %3
%184 = load i8*, i8** %0
ret i8* %184
}