int qs_decode(char *qs) {
  int i = 0, j = 0;
  while (((((qs[j]) == '=') || ((qs[j]) == '#') || ((qs[j]) == '&') ||
           ((qs[j]) == '\0'))
              ? 0
              : 1)) {
    if (qs[j] == '+') {
      qs[i] = ' ';
    } else if (qs[j] == '%') {
      if (!((((qs[j + 1]) >= '0' && (qs[j + 1]) <= '9') ||
             ((qs[j + 1]) >= 'A' && (qs[j + 1]) <= 'F') ||
             ((qs[j + 1]) >= 'a' && (qs[j + 1]) <= 'f'))
                ? 1
                : 0) ||
          !((((qs[j + 2]) >= '0' && (qs[j + 2]) <= '9') ||
             ((qs[j + 2]) >= 'A' && (qs[j + 2]) <= 'F') ||
             ((qs[j + 2]) >= 'a' && (qs[j + 2]) <= 'f'))
                ? 1
                : 0)) {
        qs[i] = '\0';
        return i;
      }
      qs[i] = ((((qs[j + 1]) >= '0' && (qs[j + 1]) <= '9')   ? (qs[j + 1]) - 48
                : ((qs[j + 1]) >= 'A' && (qs[j + 1]) <= 'F') ? (qs[j + 1]) - 55
                : ((qs[j + 1]) >= 'a' && (qs[j + 1]) <= 'f') ? (qs[j + 1]) - 87
                                                             : 0) *
               16) +
              (((qs[j + 2]) >= '0' && (qs[j + 2]) <= '9')   ? (qs[j + 2]) - 48
               : ((qs[j + 2]) >= 'A' && (qs[j + 2]) <= 'F') ? (qs[j + 2]) - 55
               : ((qs[j + 2]) >= 'a' && (qs[j + 2]) <= 'f') ? (qs[j + 2]) - 87
                                                            : 0);
      j += 2;
    } else {
      qs[i] = qs[j];
    }
    i++;
    j++;
  }
  qs[i] = '\0';
  return i;
}


x86 assembly (clang, -O0):
<qs_decode>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x10(%rbp)
movl   $0x0,-0x14(%rbp)
movl   $0x0,-0x18(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x18(%rbp),%rcx
movsbl (%rax,%rcx,1),%ecx
mov    $0x1,%al
cmp    $0x3d,%ecx
mov    %al,-0x19(%rbp)
je     1179 <qs_decode+0x79>
mov    -0x10(%rbp),%rax
movslq -0x18(%rbp),%rcx
movsbl (%rax,%rcx,1),%ecx
mov    $0x1,%al
cmp    $0x23,%ecx
mov    %al,-0x19(%rbp)
je     1179 <qs_decode+0x79>
mov    -0x10(%rbp),%rax
movslq -0x18(%rbp),%rcx
movsbl (%rax,%rcx,1),%ecx
mov    $0x1,%al
cmp    $0x26,%ecx
mov    %al,-0x19(%rbp)
je     1179 <qs_decode+0x79>
mov    -0x10(%rbp),%rax
movslq -0x18(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x0,%eax
sete   %al
mov    %al,-0x19(%rbp)
mov    -0x19(%rbp),%dl
mov    $0x1,%eax
xor    %ecx,%ecx
test   $0x1,%dl
cmovne %ecx,%eax
cmp    $0x0,%eax
je     15c2 <qs_decode+0x4c2>
mov    -0x10(%rbp),%rax
movslq -0x18(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x2b,%eax
jne    11b8 <qs_decode+0xb8>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
movb   $0x20,(%rax,%rcx,1)
jmp    15ab <qs_decode+0x4ab>
mov    -0x10(%rbp),%rax
movslq -0x18(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x25,%eax
jne    1590 <qs_decode+0x490>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x30,%eax
jl     1201 <qs_decode+0x101>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x39,%eax
jle    1269 <qs_decode+0x169>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x41,%eax
jl     1235 <qs_decode+0x135>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x46,%eax
jle    1269 <qs_decode+0x169>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x61,%eax
jl     1278 <qs_decode+0x178>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x66,%eax
jg     1278 <qs_decode+0x178>
mov    $0x1,%al
test   $0x1,%al
jne    1287 <qs_decode+0x187>
jmp    1341 <qs_decode+0x241>
xor    %eax,%eax
test   $0x1,%al
jne    1287 <qs_decode+0x187>
jmp    1341 <qs_decode+0x241>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x30,%eax
jl     12bb <qs_decode+0x1bb>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x39,%eax
jle    1323 <qs_decode+0x223>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x41,%eax
jl     12ef <qs_decode+0x1ef>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x46,%eax
jle    1323 <qs_decode+0x223>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x61,%eax
jl     1332 <qs_decode+0x232>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x66,%eax
jg     1332 <qs_decode+0x232>
mov    $0x1,%al
test   $0x1,%al
jne    1358 <qs_decode+0x258>
jmp    1341 <qs_decode+0x241>
xor    %eax,%eax
test   $0x1,%al
jne    1358 <qs_decode+0x258>
jmp    1341 <qs_decode+0x241>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
movb   $0x0,(%rax,%rcx,1)
mov    -0x14(%rbp),%eax
mov    %eax,-0x4(%rbp)
jmp    15d4 <qs_decode+0x4d4>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x30,%eax
jl     13a8 <qs_decode+0x2a8>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x39,%eax
jg     13a8 <qs_decode+0x2a8>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
sub    $0x30,%eax
mov    %eax,-0x20(%rbp)
jmp    145e <qs_decode+0x35e>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x41,%eax
jl     13f8 <qs_decode+0x2f8>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x46,%eax
jg     13f8 <qs_decode+0x2f8>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
sub    $0x37,%eax
mov    %eax,-0x24(%rbp)
jmp    1458 <qs_decode+0x358>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x61,%eax
jl     1448 <qs_decode+0x348>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x66,%eax
jg     1448 <qs_decode+0x348>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
sub    $0x57,%eax
mov    %eax,-0x28(%rbp)
jmp    1452 <qs_decode+0x352>
xor    %eax,%eax
mov    %eax,-0x28(%rbp)
jmp    1452 <qs_decode+0x352>
mov    -0x28(%rbp),%eax
mov    %eax,-0x24(%rbp)
mov    -0x24(%rbp),%eax
mov    %eax,-0x20(%rbp)
mov    -0x20(%rbp),%eax
shl    $0x4,%eax
mov    %eax,-0x2c(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x30,%eax
jl     14b7 <qs_decode+0x3b7>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x39,%eax
jg     14b7 <qs_decode+0x3b7>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
sub    $0x30,%eax
mov    %eax,-0x30(%rbp)
jmp    156d <qs_decode+0x46d>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x41,%eax
jl     1507 <qs_decode+0x407>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x46,%eax
jg     1507 <qs_decode+0x407>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
sub    $0x37,%eax
mov    %eax,-0x34(%rbp)
jmp    1567 <qs_decode+0x467>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x61,%eax
jl     1557 <qs_decode+0x457>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x66,%eax
jg     1557 <qs_decode+0x457>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
sub    $0x57,%eax
mov    %eax,-0x38(%rbp)
jmp    1561 <qs_decode+0x461>
xor    %eax,%eax
mov    %eax,-0x38(%rbp)
jmp    1561 <qs_decode+0x461>
mov    -0x38(%rbp),%eax
mov    %eax,-0x34(%rbp)
mov    -0x34(%rbp),%eax
mov    %eax,-0x30(%rbp)
mov    -0x2c(%rbp),%eax
mov    -0x30(%rbp),%ecx
add    %ecx,%eax
mov    %al,%dl
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x18(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x18(%rbp)
jmp    15a6 <qs_decode+0x4a6>
mov    -0x10(%rbp),%rax
movslq -0x18(%rbp),%rcx
mov    (%rax,%rcx,1),%dl
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
jmp    15ab <qs_decode+0x4ab>
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
jmp    1116 <qs_decode+0x16>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
movb   $0x0,(%rax,%rcx,1)
mov    -0x14(%rbp),%eax
mov    %eax,-0x4(%rbp)
mov    -0x4(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<qs_decode>:
push   %r14
push   %rbx
xor    %r8d,%r8d
lea    0xef3(%rip),%r10
movabs $0x3f0000003f,%r9
xor    %eax,%eax
xor    %esi,%esi
jmp    113c <qs_decode+0x3c>
lea    -0x57(%r11),%ecx
cmp    $0x61,%r11b
movzbl %cl,%edx
cmovb  %r8d,%edx
add    %sil,%dl
mov    %r14d,%esi
mov    %dl,(%rdi,%rax,1)
add    $0x1,%rax
add    $0x1,%esi
movslq %esi,%r14
movzbl (%rdi,%r14,1),%ebx
lea    -0x23(%rbx),%ecx
cmp    $0x1a,%cl
ja     11b4 <qs_decode+0xb4>
mov    $0x20,%dl
movzbl %cl,%ecx
movslq (%r10,%rcx,4),%rcx
add    %r10,%rcx
jmp    *%rcx
movzbl 0x1(%r14,%rdi,1),%ebx
lea    -0x30(%rbx),%esi
cmp    $0xa,%sil
jb     117e <qs_decode+0x7e>
lea    -0x41(%rbx),%ecx
cmp    $0x25,%cl
ja     11f6 <qs_decode+0xf6>
movzbl %cl,%ecx
bt     %rcx,%r9
jae    11f6 <qs_decode+0xf6>
movzbl 0x2(%rdi,%r14,1),%r11d
lea    -0x30(%r11),%edx
cmp    $0xa,%dl
jb     119f <qs_decode+0x9f>
lea    -0x41(%r11),%ecx
cmp    $0x25,%cl
ja     11f6 <qs_decode+0xf6>
movzbl %cl,%ecx
bt     %rcx,%r9
jae    11f6 <qs_decode+0xf6>
cmp    $0xa,%sil
jb     11cc <qs_decode+0xcc>
lea    -0x41(%rbx),%ecx
cmp    $0x5,%cl
ja     11bf <qs_decode+0xbf>
add    $0xc9,%bl
mov    %ebx,%esi
jmp    11cc <qs_decode+0xcc>
test   %bl,%bl
je     11f6 <qs_decode+0xf6>
mov    %ebx,%edx
jmp    1132 <qs_decode+0x32>
lea    -0x57(%rbx),%ecx
cmp    $0x61,%bl
movzbl %cl,%esi
cmovb  %r8d,%esi
add    $0x2,%r14
shl    $0x4,%sil
cmp    $0xa,%dl
jb     112c <qs_decode+0x2c>
lea    -0x41(%r11),%ecx
cmp    $0x5,%cl
ja     111d <qs_decode+0x1d>
add    $0xc9,%r11b
mov    %r11d,%edx
jmp    112c <qs_decode+0x2c>
mov    %eax,%ecx
movb   $0x0,(%rdi,%rcx,1)
pop    %rbx
pop    %r14
ret

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

LLVM IR (-O2):
define i32 @qs_decode(i8* nocapture %0) {
br label %2
2: ; preds = %52, %1
%3 = phi i64 [ %56, %52 ], [ 0, %1 ]
%4 = phi i32 [ %57, %52 ], [ 0, %1 ]
%5 = sext i32 %4 to i64
%6 = getelementptr inbounds i8, i8* %0, i64 %5
%7 = load i8, i8* %6
switch i8 %7, label %51 [
i8 61, label %58
i8 35, label %58
i8 38, label %58
i8 0, label %58
i8 43, label %52
i8 37, label %8
]
8: ; preds = %2
%9 = add nsw i32 %4, 1
%10 = sext i32 %9 to i64
%11 = getelementptr inbounds i8, i8* %0, i64 %10
%12 = load i8, i8* %11
%13 = freeze i8 %12
%14 = add i8 %13, -48
%15 = icmp ult i8 %14, 10
br i1 %15, label %17, label %16
16: ; preds = %8
switch i8 %13, label %58 [
i8 102, label %17
i8 101, label %17
i8 100, label %17
i8 99, label %17
i8 98, label %17
i8 97, label %17
i8 70, label %17
i8 69, label %17
i8 68, label %17
i8 67, label %17
i8 66, label %17
i8 65, label %17
]
17: ; preds = %16, %16, %16, %16, %16, %16, %16, %16, %16, %16, %16, %16, %8
%18 = add nsw i32 %4, 2
%19 = sext i32 %18 to i64
%20 = getelementptr inbounds i8, i8* %0, i64 %19
%21 = load i8, i8* %20
%22 = freeze i8 %21
%23 = add i8 %22, -48
%24 = icmp ult i8 %23, 10
br i1 %24, label %26, label %25
25: ; preds = %17
switch i8 %22, label %58 [
i8 102, label %26
i8 101, label %26
i8 100, label %26
i8 99, label %26
i8 98, label %26
i8 97, label %26
i8 70, label %26
i8 69, label %26
i8 68, label %26
i8 67, label %26
i8 66, label %26
i8 65, label %26
]
26: ; preds = %25, %25, %25, %25, %25, %25, %25, %25, %25, %25, %25, %25, %17
br i1 %15, label %36, label %27
27: ; preds = %26
%28 = add nsw i8 %13, -65
%29 = icmp ult i8 %28, 6
br i1 %29, label %30, label %32
30: ; preds = %27
%31 = add nsw i8 %13, -55
br label %36
32: ; preds = %27
%33 = icmp ugt i8 %13, 96
%34 = add nsw i8 %13, -87
%35 = select i1 %33, i8 %34, i8 0
br label %36
36: ; preds = %26, %32, %30
%37 = phi i8 [ %31, %30 ], [ %35, %32 ], [ %14, %26 ]
%38 = shl nuw i8 %37, 4
br i1 %24, label %48, label %39
39: ; preds = %36
%40 = add nsw i8 %22, -65
%41 = icmp ult i8 %40, 6
br i1 %41, label %42, label %44
42: ; preds = %39
%43 = add nsw i8 %22, -55
br label %48
44: ; preds = %39
%45 = icmp ugt i8 %22, 96
%46 = add nsw i8 %22, -87
%47 = select i1 %45, i8 %46, i8 0
br label %48
48: ; preds = %36, %44, %42
%49 = phi i8 [ %43, %42 ], [ %47, %44 ], [ %23, %36 ]
%50 = add nuw i8 %49, %38
br label %52
51: ; preds = %2
br label %52
52: ; preds = %2, %48, %51
%53 = phi i8 [ %50, %48 ], [ %7, %51 ], [ 32, %2 ]
%54 = phi i32 [ %18, %48 ], [ %4, %51 ], [ %4, %2 ]
%55 = getelementptr inbounds i8, i8* %0, i64 %3
store i8 %53, i8* %55
%56 = add nuw i64 %3, 1
%57 = add nsw i32 %54, 1
br label %2
58: ; preds = %2, %2, %2, %2, %16, %25
%59 = and i64 %3, 4294967295
%60 = getelementptr inbounds i8, i8* %0, i64 %59
store i8 0, i8* %60
%61 = trunc i64 %3 to i32
ret i32 %61
}