#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 */
unsigned int decode_one(unsigned char const *, long *, char const *, int,
                        unsigned int const *, int);
unsigned char pushin(unsigned int);
int /*<<< orphan*/ pushout(unsigned char);
int /*<<< orphan*/ read_bits(unsigned char const *, long *, int);
int get_data(const unsigned char *data, long *p,
             const char hlit_size_table[288],
             const unsigned int hlit_code_table[288],
             const char hdist_size_table[30],
             const unsigned int hdist_code_table[30],
             void (*callback)(unsigned char d)) {
  unsigned int b;
  while (1) {
    b = decode_one(data, p, hlit_size_table, 288, hlit_code_table, 15);
    if (b < 0)
      return -1;
    if (b < 256) {
      pushout((unsigned char)b);
      callback((unsigned char)b);
    } else if (b == 256)
      return 0;
    else if (b >= 257) {
      unsigned int bb;
      unsigned int length, dist;
      unsigned int l;
      switch (b) {
      case 257:
        length = 3;
        break;
      case 258:
        length = 4;
        break;
      case 259:
        length = 5;
        break;
      case 260:
        length = 6;
        break;
      case 261:
        length = 7;
        break;
      case 262:
        length = 8;
        break;
      case 263:
        length = 9;
        break;
      case 264:
        length = 10;
        break;
      case 265:
        length = 11 + read_bits(data, p, 1);
        break;
      case 266:
        length = 13 + read_bits(data, p, 1);
        break;
      case 267:
        length = 15 + read_bits(data, p, 1);
        break;
      case 268:
        length = 17 + read_bits(data, p, 1);
        break;
      case 269:
        length = 19 + read_bits(data, p, 2);
        break;
      case 270:
        length = 23 + read_bits(data, p, 2);
        break;
      case 271:
        length = 27 + read_bits(data, p, 2);
        break;
      case 272:
        length = 31 + read_bits(data, p, 2);
        break;
      case 273:
        length = 35 + read_bits(data, p, 3);
        break;
      case 274:
        length = 43 + read_bits(data, p, 3);
        break;
      case 275:
        length = 51 + read_bits(data, p, 3);
        break;
      case 276:
        length = 59 + read_bits(data, p, 3);
        break;
      case 277:
        length = 67 + read_bits(data, p, 4);
        break;
      case 278:
        length = 83 + read_bits(data, p, 4);
        break;
      case 279:
        length = 99 + read_bits(data, p, 4);
        break;
      case 280:
        length = 115 + read_bits(data, p, 4);
        break;
      case 281:
        length = 131 + read_bits(data, p, 5);
        break;
      case 282:
        length = 163 + read_bits(data, p, 5);
        break;
      case 283:
        length = 195 + read_bits(data, p, 5);
        break;
      case 284:
        length = 227 + read_bits(data, p, 5);
        break;
      case 285:
        length = 258;
        break;
      default:
        return -1;
      }
      bb = decode_one(data, p, hdist_size_table, 30, hdist_code_table, 15);
      switch (bb) {
      case 0:
        dist = 1;
        break;
      case 1:
        dist = 2;
        break;
      case 2:
        dist = 3;
        break;
      case 3:
        dist = 4;
        break;
      case 4:
        dist = 5 + read_bits(data, p, 1);
        break;
      case 5:
        dist = 7 + read_bits(data, p, 1);
        break;
      case 6:
        dist = 9 + read_bits(data, p, 2);
        break;
      case 7:
        dist = 13 + read_bits(data, p, 2);
        break;
      case 8:
        dist = 17 + read_bits(data, p, 3);
        break;
      case 9:
        dist = 25 + read_bits(data, p, 3);
        break;
      case 10:
        dist = 33 + read_bits(data, p, 4);
        break;
      case 11:
        dist = 49 + read_bits(data, p, 4);
        break;
      case 12:
        dist = 65 + read_bits(data, p, 5);
        break;
      case 13:
        dist = 97 + read_bits(data, p, 5);
        break;
      case 14:
        dist = 129 + read_bits(data, p, 6);
        break;
      case 15:
        dist = 193 + read_bits(data, p, 6);
        break;
      case 16:
        dist = 257 + read_bits(data, p, 7);
        break;
      case 17:
        dist = 385 + read_bits(data, p, 7);
        break;
      case 18:
        dist = 513 + read_bits(data, p, 8);
        break;
      case 19:
        dist = 769 + read_bits(data, p, 8);
        break;
      case 20:
        dist = 1025 + read_bits(data, p, 9);
        break;
      case 21:
        dist = 1537 + read_bits(data, p, 9);
        break;
      case 22:
        dist = 2049 + read_bits(data, p, 10);
        break;
      case 23:
        dist = 3073 + read_bits(data, p, 10);
        break;
      case 24:
        dist = 4097 + read_bits(data, p, 11);
        break;
      case 25:
        dist = 6145 + read_bits(data, p, 11);
        break;
      case 26:
        dist = 8193 + read_bits(data, p, 12);
        break;
      case 27:
        dist = 12289 + read_bits(data, p, 12);
        break;
      case 28:
        dist = 16385 + read_bits(data, p, 13);
        break;
      case 29:
        dist = 24577 + read_bits(data, p, 13);
        break;
      default:
        return -1;
      }
      for (l = 0; l < length; l++) {
        unsigned char ch;
        ch = pushin(dist);
        pushout(ch);
        callback(ch);
      }
    }
  }
  return 0;
}


x86 assembly (clang, -O0):
<get_data>:
push   %rbp
mov    %rsp,%rbp
sub    $0x60,%rsp
mov    0x10(%rbp),%rax
mov    %rdi,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
mov    %rdx,-0x20(%rbp)
mov    %rcx,-0x28(%rbp)
mov    %r8,-0x30(%rbp)
mov    %r9,-0x38(%rbp)
mov    -0x10(%rbp),%rdi
mov    -0x18(%rbp),%rsi
mov    -0x20(%rbp),%rdx
mov    -0x28(%rbp),%r8
mov    $0x120,%ecx
mov    $0xf,%r9d
call   1050 <decode_one@plt>
mov    %eax,-0x3c(%rbp)
cmpl   $0x0,-0x3c(%rbp)
jae    119d <get_data+0x5d>
movl   $0xffffffff,-0x4(%rbp)
jmp    18c4 <get_data+0x784>
cmpl   $0x100,-0x3c(%rbp)
jae    11c6 <get_data+0x86>
mov    -0x3c(%rbp),%eax
movzbl %al,%edi
call   1030 <pushout@plt>
mov    0x10(%rbp),%rax
mov    -0x3c(%rbp),%ecx
movzbl %cl,%edi
call   *%rax
jmp    18bf <get_data+0x77f>
cmpl   $0x100,-0x3c(%rbp)
jne    11df <get_data+0x9f>
movl   $0x0,-0x4(%rbp)
jmp    18c4 <get_data+0x784>
cmpl   $0x101,-0x3c(%rbp)
jb     18b5 <get_data+0x775>
mov    -0x3c(%rbp),%eax
add    $0xfffffeff,%eax
mov    %eax,%ecx
mov    %rcx,-0x58(%rbp)
sub    $0x1c,%eax
ja     14cf <get_data+0x38f>
mov    -0x58(%rbp),%rax
lea    0xdf2(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
movl   $0x3,-0x44(%rbp)
jmp    14db <get_data+0x39b>
movl   $0x4,-0x44(%rbp)
jmp    14db <get_data+0x39b>
movl   $0x5,-0x44(%rbp)
jmp    14db <get_data+0x39b>
movl   $0x6,-0x44(%rbp)
jmp    14db <get_data+0x39b>
movl   $0x7,-0x44(%rbp)
jmp    14db <get_data+0x39b>
movl   $0x8,-0x44(%rbp)
jmp    14db <get_data+0x39b>
movl   $0x9,-0x44(%rbp)
jmp    14db <get_data+0x39b>
movl   $0xa,-0x44(%rbp)
jmp    14db <get_data+0x39b>
mov    -0x10(%rbp),%rdi
mov    -0x18(%rbp),%rsi
mov    $0x1,%edx
call   1060 <read_bits@plt>
add    $0xb,%eax
mov    %eax,-0x44(%rbp)
jmp    14db <get_data+0x39b>
mov    -0x10(%rbp),%rdi
mov    -0x18(%rbp),%rsi
mov    $0x1,%edx
call   1060 <read_bits@plt>
add    $0xd,%eax
mov    %eax,-0x44(%rbp)
jmp    14db <get_data+0x39b>
mov    -0x10(%rbp),%rdi
mov    -0x18(%rbp),%rsi
mov    $0x1,%edx
call   1060 <read_bits@plt>
add    $0xf,%eax
mov    %eax,-0x44(%rbp)
jmp    14db <get_data+0x39b>
mov    -0x10(%rbp),%rdi
mov    -0x18(%rbp),%rsi
mov    $0x1,%edx
call   1060 <read_bits@plt>
add    $0x11,%eax
mov    %eax,-0x44(%rbp)
jmp    14db <get_data+0x39b>
mov    -0x10(%rbp),%rdi
mov    -0x18(%rbp),%rsi
mov    $0x2,%edx
call   1060 <read_bits@plt>
add    $0x13,%eax
mov    %eax,-0x44(%rbp)
jmp    14db <get_data+0x39b>
mov    -0x10(%rbp),%rdi
mov    -0x18(%rbp),%rsi
mov    $0x2,%edx
call   1060 <read_bits@plt>
add    $0x17,%eax
mov    %eax,-0x44(%rbp)
jmp    14db <get_data+0x39b>
mov    -0x10(%rbp),%rdi
mov    -0x18(%rbp),%rsi
mov    $0x2,%edx
call   1060 <read_bits@plt>
add    $0x1b,%eax
mov    %eax,-0x44(%rbp)
jmp    14db <get_data+0x39b>
mov    -0x10(%rbp),%rdi
mov    -0x18(%rbp),%rsi
mov    $0x2,%edx
call   1060 <read_bits@plt>
add    $0x1f,%eax
mov    %eax,-0x44(%rbp)
jmp    14db <get_data+0x39b>
mov    -0x10(%rbp),%rdi
mov    -0x18(%rbp),%rsi
mov    $0x3,%edx
call   1060 <read_bits@plt>
add    $0x23,%eax
mov    %eax,-0x44(%rbp)
jmp    14db <get_data+0x39b>
mov    -0x10(%rbp),%rdi
mov    -0x18(%rbp),%rsi
mov    $0x3,%edx
call   1060 <read_bits@plt>
add    $0x2b,%eax
mov    %eax,-0x44(%rbp)
jmp    14db <get_data+0x39b>
mov    -0x10(%rbp),%rdi
mov    -0x18(%rbp),%rsi
mov    $0x3,%edx
call   1060 <read_bits@plt>
add    $0x33,%eax
mov    %eax,-0x44(%rbp)
jmp    14db <get_data+0x39b>
mov    -0x10(%rbp),%rdi
mov    -0x18(%rbp),%rsi
mov    $0x3,%edx
call   1060 <read_bits@plt>
add    $0x3b,%eax
mov    %eax,-0x44(%rbp)
jmp    14db <get_data+0x39b>
mov    -0x10(%rbp),%rdi
mov    -0x18(%rbp),%rsi
mov    $0x4,%edx
call   1060 <read_bits@plt>
add    $0x43,%eax
mov    %eax,-0x44(%rbp)
jmp    14db <get_data+0x39b>
mov    -0x10(%rbp),%rdi
mov    -0x18(%rbp),%rsi
mov    $0x4,%edx
call   1060 <read_bits@plt>
add    $0x53,%eax
mov    %eax,-0x44(%rbp)
jmp    14db <get_data+0x39b>
mov    -0x10(%rbp),%rdi
mov    -0x18(%rbp),%rsi
mov    $0x4,%edx
call   1060 <read_bits@plt>
add    $0x63,%eax
mov    %eax,-0x44(%rbp)
jmp    14db <get_data+0x39b>
mov    -0x10(%rbp),%rdi
mov    -0x18(%rbp),%rsi
mov    $0x4,%edx
call   1060 <read_bits@plt>
add    $0x73,%eax
mov    %eax,-0x44(%rbp)
jmp    14db <get_data+0x39b>
mov    -0x10(%rbp),%rdi
mov    -0x18(%rbp),%rsi
mov    $0x5,%edx
call   1060 <read_bits@plt>
add    $0x83,%eax
mov    %eax,-0x44(%rbp)
jmp    14db <get_data+0x39b>
mov    -0x10(%rbp),%rdi
mov    -0x18(%rbp),%rsi
mov    $0x5,%edx
call   1060 <read_bits@plt>
add    $0xa3,%eax
mov    %eax,-0x44(%rbp)
jmp    14db <get_data+0x39b>
mov    -0x10(%rbp),%rdi
mov    -0x18(%rbp),%rsi
mov    $0x5,%edx
call   1060 <read_bits@plt>
add    $0xc3,%eax
mov    %eax,-0x44(%rbp)
jmp    14db <get_data+0x39b>
mov    -0x10(%rbp),%rdi
mov    -0x18(%rbp),%rsi
mov    $0x5,%edx
call   1060 <read_bits@plt>
add    $0xe3,%eax
mov    %eax,-0x44(%rbp)
jmp    14db <get_data+0x39b>
movl   $0x102,-0x44(%rbp)
jmp    14db <get_data+0x39b>
movl   $0xffffffff,-0x4(%rbp)
jmp    18c4 <get_data+0x784>
mov    -0x10(%rbp),%rdi
mov    -0x18(%rbp),%rsi
mov    -0x30(%rbp),%rdx
mov    -0x38(%rbp),%r8
mov    $0x1e,%ecx
mov    $0xf,%r9d
call   1050 <decode_one@plt>
mov    %eax,-0x40(%rbp)
mov    -0x40(%rbp),%eax
mov    %rax,-0x60(%rbp)
sub    $0x1d,%rax
ja     1865 <get_data+0x725>
mov    -0x60(%rbp),%rax
lea    0xb5a(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
movl   $0x1,-0x48(%rbp)
jmp    1871 <get_data+0x731>
movl   $0x2,-0x48(%rbp)
jmp    1871 <get_data+0x731>
movl   $0x3,-0x48(%rbp)
jmp    1871 <get_data+0x731>
movl   $0x4,-0x48(%rbp)
jmp    1871 <get_data+0x731>
mov    -0x10(%rbp),%rdi
mov    -0x18(%rbp),%rsi
mov    $0x1,%edx
call   1060 <read_bits@plt>
add    $0x5,%eax
mov    %eax,-0x48(%rbp)
jmp    1871 <get_data+0x731>
mov    -0x10(%rbp),%rdi
mov    -0x18(%rbp),%rsi
mov    $0x1,%edx
call   1060 <read_bits@plt>
add    $0x7,%eax
mov    %eax,-0x48(%rbp)
jmp    1871 <get_data+0x731>
mov    -0x10(%rbp),%rdi
mov    -0x18(%rbp),%rsi
mov    $0x2,%edx
call   1060 <read_bits@plt>
add    $0x9,%eax
mov    %eax,-0x48(%rbp)
jmp    1871 <get_data+0x731>
mov    -0x10(%rbp),%rdi
mov    -0x18(%rbp),%rsi
mov    $0x2,%edx
call   1060 <read_bits@plt>
add    $0xd,%eax
mov    %eax,-0x48(%rbp)
jmp    1871 <get_data+0x731>
mov    -0x10(%rbp),%rdi
mov    -0x18(%rbp),%rsi
mov    $0x3,%edx
call   1060 <read_bits@plt>
add    $0x11,%eax
mov    %eax,-0x48(%rbp)
jmp    1871 <get_data+0x731>
mov    -0x10(%rbp),%rdi
mov    -0x18(%rbp),%rsi
mov    $0x3,%edx
call   1060 <read_bits@plt>
add    $0x19,%eax
mov    %eax,-0x48(%rbp)
jmp    1871 <get_data+0x731>
mov    -0x10(%rbp),%rdi
mov    -0x18(%rbp),%rsi
mov    $0x4,%edx
call   1060 <read_bits@plt>
add    $0x21,%eax
mov    %eax,-0x48(%rbp)
jmp    1871 <get_data+0x731>
mov    -0x10(%rbp),%rdi
mov    -0x18(%rbp),%rsi
mov    $0x4,%edx
call   1060 <read_bits@plt>
add    $0x31,%eax
mov    %eax,-0x48(%rbp)
jmp    1871 <get_data+0x731>
mov    -0x10(%rbp),%rdi
mov    -0x18(%rbp),%rsi
mov    $0x5,%edx
call   1060 <read_bits@plt>
add    $0x41,%eax
mov    %eax,-0x48(%rbp)
jmp    1871 <get_data+0x731>
mov    -0x10(%rbp),%rdi
mov    -0x18(%rbp),%rsi
mov    $0x5,%edx
call   1060 <read_bits@plt>
add    $0x61,%eax
mov    %eax,-0x48(%rbp)
jmp    1871 <get_data+0x731>
mov    -0x10(%rbp),%rdi
mov    -0x18(%rbp),%rsi
mov    $0x6,%edx
call   1060 <read_bits@plt>
add    $0x81,%eax
mov    %eax,-0x48(%rbp)
jmp    1871 <get_data+0x731>
mov    -0x10(%rbp),%rdi
mov    -0x18(%rbp),%rsi
mov    $0x6,%edx
call   1060 <read_bits@plt>
add    $0xc1,%eax
mov    %eax,-0x48(%rbp)
jmp    1871 <get_data+0x731>
mov    -0x10(%rbp),%rdi
mov    -0x18(%rbp),%rsi
mov    $0x7,%edx
call   1060 <read_bits@plt>
add    $0x101,%eax
mov    %eax,-0x48(%rbp)
jmp    1871 <get_data+0x731>
mov    -0x10(%rbp),%rdi
mov    -0x18(%rbp),%rsi
mov    $0x7,%edx
call   1060 <read_bits@plt>
add    $0x181,%eax
mov    %eax,-0x48(%rbp)
jmp    1871 <get_data+0x731>
mov    -0x10(%rbp),%rdi
mov    -0x18(%rbp),%rsi
mov    $0x8,%edx
call   1060 <read_bits@plt>
add    $0x201,%eax
mov    %eax,-0x48(%rbp)
jmp    1871 <get_data+0x731>
mov    -0x10(%rbp),%rdi
mov    -0x18(%rbp),%rsi
mov    $0x8,%edx
call   1060 <read_bits@plt>
add    $0x301,%eax
mov    %eax,-0x48(%rbp)
jmp    1871 <get_data+0x731>
mov    -0x10(%rbp),%rdi
mov    -0x18(%rbp),%rsi
mov    $0x9,%edx
call   1060 <read_bits@plt>
add    $0x401,%eax
mov    %eax,-0x48(%rbp)
jmp    1871 <get_data+0x731>
mov    -0x10(%rbp),%rdi
mov    -0x18(%rbp),%rsi
mov    $0x9,%edx
call   1060 <read_bits@plt>
add    $0x601,%eax
mov    %eax,-0x48(%rbp)
jmp    1871 <get_data+0x731>
mov    -0x10(%rbp),%rdi
mov    -0x18(%rbp),%rsi
mov    $0xa,%edx
call   1060 <read_bits@plt>
add    $0x801,%eax
mov    %eax,-0x48(%rbp)
jmp    1871 <get_data+0x731>
mov    -0x10(%rbp),%rdi
mov    -0x18(%rbp),%rsi
mov    $0xa,%edx
call   1060 <read_bits@plt>
add    $0xc01,%eax
mov    %eax,-0x48(%rbp)
jmp    1871 <get_data+0x731>
mov    -0x10(%rbp),%rdi
mov    -0x18(%rbp),%rsi
mov    $0xb,%edx
call   1060 <read_bits@plt>
add    $0x1001,%eax
mov    %eax,-0x48(%rbp)
jmp    1871 <get_data+0x731>
mov    -0x10(%rbp),%rdi
mov    -0x18(%rbp),%rsi
mov    $0xb,%edx
call   1060 <read_bits@plt>
add    $0x1801,%eax
mov    %eax,-0x48(%rbp)
jmp    1871 <get_data+0x731>
mov    -0x10(%rbp),%rdi
mov    -0x18(%rbp),%rsi
mov    $0xc,%edx
call   1060 <read_bits@plt>
add    $0x2001,%eax
mov    %eax,-0x48(%rbp)
jmp    1871 <get_data+0x731>
mov    -0x10(%rbp),%rdi
mov    -0x18(%rbp),%rsi
mov    $0xc,%edx
call   1060 <read_bits@plt>
add    $0x3001,%eax
mov    %eax,-0x48(%rbp)
jmp    1871 <get_data+0x731>
mov    -0x10(%rbp),%rdi
mov    -0x18(%rbp),%rsi
mov    $0xd,%edx
call   1060 <read_bits@plt>
add    $0x4001,%eax
mov    %eax,-0x48(%rbp)
jmp    1871 <get_data+0x731>
mov    -0x10(%rbp),%rdi
mov    -0x18(%rbp),%rsi
mov    $0xd,%edx
call   1060 <read_bits@plt>
add    $0x6001,%eax
mov    %eax,-0x48(%rbp)
jmp    1871 <get_data+0x731>
movl   $0xffffffff,-0x4(%rbp)
jmp    18c4 <get_data+0x784>
movl   $0x0,-0x4c(%rbp)
mov    -0x4c(%rbp),%eax
cmp    -0x44(%rbp),%eax
jae    18b0 <get_data+0x770>
mov    -0x48(%rbp),%edi
call   1040 <pushin@plt>
mov    %al,-0x4d(%rbp)
movzbl -0x4d(%rbp),%edi
call   1030 <pushout@plt>
mov    0x10(%rbp),%rax
movzbl -0x4d(%rbp),%edi
call   *%rax
mov    -0x4c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x4c(%rbp)
jmp    1878 <get_data+0x738>
jmp    18b5 <get_data+0x775>
jmp    18ba <get_data+0x77a>
jmp    18bf <get_data+0x77f>
jmp    1164 <get_data+0x24>
mov    -0x4(%rbp),%eax
add    $0x60,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<get_data>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x28,%rsp
mov    %r9,0x10(%rsp)
mov    %r8,0x8(%rsp)
mov    %rcx,0x20(%rsp)
mov    %rdx,0x18(%rsp)
mov    %rsi,%r12
mov    %rdi,%rbp
mov    0x60(%rsp),%r13
jmp    117f <get_data+0x3f>
nop
movzbl %al,%ebx
mov    %ebx,%edi
call   1030 <pushout@plt>
mov    %ebx,%edi
call   *%r13
mov    %rbp,%rdi
mov    %r12,%rsi
mov    0x18(%rsp),%rdx
mov    $0x120,%ecx
mov    0x20(%rsp),%r8
mov    $0xf,%r9d
call   1050 <decode_one@plt>
cmp    $0xff,%eax
jbe    1170 <get_data+0x30>
add    $0xffffff00,%eax
cmp    $0x1d,%eax
ja     18d6 <get_data+0x796>
mov    $0x3,%r14d
xor    %ecx,%ecx
lea    0xe3d(%rip),%rdx
movslq (%rdx,%rax,4),%rax
add    %rdx,%rax
jmp    *%rax
mov    $0x4,%r14d
jmp    1450 <get_data+0x310>
mov    $0x5,%r14d
jmp    1450 <get_data+0x310>
mov    $0x6,%r14d
jmp    1450 <get_data+0x310>
mov    $0x7,%r14d
jmp    1450 <get_data+0x310>
mov    $0x8,%r14d
jmp    1450 <get_data+0x310>
mov    $0x9,%r14d
jmp    1450 <get_data+0x310>
mov    $0xa,%r14d
jmp    1450 <get_data+0x310>
mov    %rbp,%rdi
mov    %r12,%rsi
mov    $0x1,%edx
call   1060 <read_bits@plt>
mov    %eax,%r14d
add    $0xb,%r14d
jmp    1450 <get_data+0x310>
mov    %rbp,%rdi
mov    %r12,%rsi
mov    $0x1,%edx
call   1060 <read_bits@plt>
mov    %eax,%r14d
add    $0xd,%r14d
jmp    1450 <get_data+0x310>
mov    %rbp,%rdi
mov    %r12,%rsi
mov    $0x1,%edx
call   1060 <read_bits@plt>
mov    %eax,%r14d
add    $0xf,%r14d
jmp    1450 <get_data+0x310>
mov    %rbp,%rdi
mov    %r12,%rsi
mov    $0x1,%edx
call   1060 <read_bits@plt>
mov    %eax,%r14d
add    $0x11,%r14d
jmp    1450 <get_data+0x310>
mov    %rbp,%rdi
mov    %r12,%rsi
mov    $0x2,%edx
call   1060 <read_bits@plt>
mov    %eax,%r14d
add    $0x13,%r14d
jmp    1450 <get_data+0x310>
mov    %rbp,%rdi
mov    %r12,%rsi
mov    $0x2,%edx
call   1060 <read_bits@plt>
mov    %eax,%r14d
add    $0x17,%r14d
jmp    1450 <get_data+0x310>
mov    %rbp,%rdi
mov    %r12,%rsi
mov    $0x2,%edx
call   1060 <read_bits@plt>
mov    %eax,%r14d
add    $0x1b,%r14d
jmp    1450 <get_data+0x310>
mov    %rbp,%rdi
mov    %r12,%rsi
mov    $0x2,%edx
call   1060 <read_bits@plt>
mov    %eax,%r14d
add    $0x1f,%r14d
jmp    1450 <get_data+0x310>
mov    %rbp,%rdi
mov    %r12,%rsi
mov    $0x3,%edx
call   1060 <read_bits@plt>
mov    %eax,%r14d
add    $0x23,%r14d
jmp    1450 <get_data+0x310>
mov    %rbp,%rdi
mov    %r12,%rsi
mov    $0x3,%edx
call   1060 <read_bits@plt>
mov    %eax,%r14d
add    $0x2b,%r14d
jmp    1450 <get_data+0x310>
mov    %rbp,%rdi
mov    %r12,%rsi
mov    $0x3,%edx
call   1060 <read_bits@plt>
mov    %eax,%r14d
add    $0x33,%r14d
jmp    1450 <get_data+0x310>
mov    %rbp,%rdi
mov    %r12,%rsi
mov    $0x3,%edx
call   1060 <read_bits@plt>
mov    %eax,%r14d
add    $0x3b,%r14d
jmp    1450 <get_data+0x310>
mov    %rbp,%rdi
mov    %r12,%rsi
mov    $0x4,%edx
call   1060 <read_bits@plt>
mov    %eax,%r14d
add    $0x43,%r14d
jmp    1450 <get_data+0x310>
mov    %rbp,%rdi
mov    %r12,%rsi
mov    $0x4,%edx
call   1060 <read_bits@plt>
mov    %eax,%r14d
add    $0x53,%r14d
jmp    1450 <get_data+0x310>
mov    %rbp,%rdi
mov    %r12,%rsi
mov    $0x4,%edx
call   1060 <read_bits@plt>
mov    %eax,%r14d
add    $0x63,%r14d
jmp    1450 <get_data+0x310>
mov    %rbp,%rdi
mov    %r12,%rsi
mov    $0x4,%edx
call   1060 <read_bits@plt>
mov    %eax,%r14d
add    $0x73,%r14d
jmp    1450 <get_data+0x310>
mov    %rbp,%rdi
mov    %r12,%rsi
mov    $0x5,%edx
call   1060 <read_bits@plt>
mov    %eax,%r14d
add    $0x83,%r14d
jmp    1450 <get_data+0x310>
mov    %rbp,%rdi
mov    %r12,%rsi
mov    $0x5,%edx
call   1060 <read_bits@plt>
mov    %eax,%r14d
add    $0xa3,%r14d
jmp    1450 <get_data+0x310>
mov    %rbp,%rdi
mov    %r12,%rsi
mov    $0x5,%edx
call   1060 <read_bits@plt>
mov    %eax,%r14d
add    $0xc3,%r14d
jmp    1450 <get_data+0x310>
mov    %rbp,%rdi
mov    %r12,%rsi
mov    $0x5,%edx
call   1060 <read_bits@plt>
mov    %eax,%r14d
add    $0xe3,%r14d
jmp    1450 <get_data+0x310>
mov    $0x102,%r14d
nop
mov    %rbp,%rdi
mov    %r12,%rsi
mov    0x8(%rsp),%rdx
mov    $0x1e,%ecx
mov    0x10(%rsp),%r8
mov    $0xf,%r9d
call   1050 <decode_one@plt>
cmp    $0x1d,%eax
ja     18d6 <get_data+0x796>
mov    $0x1,%r15d
mov    %eax,%eax
lea    0xbf0(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
mov    $0x2,%r15d
test   %r14d,%r14d
jne    1890 <get_data+0x750>
jmp    117f <get_data+0x3f>
mov    $0x3,%r15d
test   %r14d,%r14d
jne    1890 <get_data+0x750>
jmp    117f <get_data+0x3f>
mov    $0x4,%r15d
test   %r14d,%r14d
jne    1890 <get_data+0x750>
jmp    117f <get_data+0x3f>
mov    %rbp,%rdi
mov    %r12,%rsi
mov    $0x1,%edx
call   1060 <read_bits@plt>
mov    %eax,%r15d
add    $0x5,%r15d
test   %r14d,%r14d
jne    1890 <get_data+0x750>
jmp    117f <get_data+0x3f>
mov    %rbp,%rdi
mov    %r12,%rsi
mov    $0x1,%edx
call   1060 <read_bits@plt>
mov    %eax,%r15d
add    $0x7,%r15d
test   %r14d,%r14d
jne    1890 <get_data+0x750>
jmp    117f <get_data+0x3f>
mov    %rbp,%rdi
mov    %r12,%rsi
mov    $0x2,%edx
call   1060 <read_bits@plt>
mov    %eax,%r15d
add    $0x9,%r15d
test   %r14d,%r14d
jne    1890 <get_data+0x750>
jmp    117f <get_data+0x3f>
mov    %rbp,%rdi
mov    %r12,%rsi
mov    $0x2,%edx
call   1060 <read_bits@plt>
mov    %eax,%r15d
add    $0xd,%r15d
test   %r14d,%r14d
jne    1890 <get_data+0x750>
jmp    117f <get_data+0x3f>
mov    %rbp,%rdi
mov    %r12,%rsi
mov    $0x3,%edx
call   1060 <read_bits@plt>
mov    %eax,%r15d
add    $0x11,%r15d
test   %r14d,%r14d
jne    1890 <get_data+0x750>
jmp    117f <get_data+0x3f>
mov    %rbp,%rdi
mov    %r12,%rsi
mov    $0x3,%edx
call   1060 <read_bits@plt>
mov    %eax,%r15d
add    $0x19,%r15d
test   %r14d,%r14d
jne    1890 <get_data+0x750>
jmp    117f <get_data+0x3f>
mov    %rbp,%rdi
mov    %r12,%rsi
mov    $0x4,%edx
call   1060 <read_bits@plt>
mov    %eax,%r15d
add    $0x21,%r15d
test   %r14d,%r14d
jne    1890 <get_data+0x750>
jmp    117f <get_data+0x3f>
mov    %rbp,%rdi
mov    %r12,%rsi
mov    $0x4,%edx
call   1060 <read_bits@plt>
mov    %eax,%r15d
add    $0x31,%r15d
test   %r14d,%r14d
jne    1890 <get_data+0x750>
jmp    117f <get_data+0x3f>
mov    %rbp,%rdi
mov    %r12,%rsi
mov    $0x5,%edx
call   1060 <read_bits@plt>
mov    %eax,%r15d
add    $0x41,%r15d
test   %r14d,%r14d
jne    1890 <get_data+0x750>
jmp    117f <get_data+0x3f>
mov    %rbp,%rdi
mov    %r12,%rsi
mov    $0x5,%edx
call   1060 <read_bits@plt>
mov    %eax,%r15d
add    $0x61,%r15d
test   %r14d,%r14d
jne    1890 <get_data+0x750>
jmp    117f <get_data+0x3f>
mov    %rbp,%rdi
mov    %r12,%rsi
mov    $0x6,%edx
call   1060 <read_bits@plt>
mov    %eax,%r15d
add    $0x81,%r15d
test   %r14d,%r14d
jne    1890 <get_data+0x750>
jmp    117f <get_data+0x3f>
mov    %rbp,%rdi
mov    %r12,%rsi
mov    $0x6,%edx
call   1060 <read_bits@plt>
mov    %eax,%r15d
add    $0xc1,%r15d
test   %r14d,%r14d
jne    1890 <get_data+0x750>
jmp    117f <get_data+0x3f>
mov    %rbp,%rdi
mov    %r12,%rsi
mov    $0x7,%edx
call   1060 <read_bits@plt>
mov    %eax,%r15d
add    $0x101,%r15d
test   %r14d,%r14d
jne    1890 <get_data+0x750>
jmp    117f <get_data+0x3f>
mov    %rbp,%rdi
mov    %r12,%rsi
mov    $0x7,%edx
call   1060 <read_bits@plt>
mov    %eax,%r15d
add    $0x181,%r15d
test   %r14d,%r14d
jne    1890 <get_data+0x750>
jmp    117f <get_data+0x3f>
mov    %rbp,%rdi
mov    %r12,%rsi
mov    $0x8,%edx
call   1060 <read_bits@plt>
mov    %eax,%r15d
add    $0x201,%r15d
test   %r14d,%r14d
jne    1890 <get_data+0x750>
jmp    117f <get_data+0x3f>
mov    %rbp,%rdi
mov    %r12,%rsi
mov    $0x8,%edx
call   1060 <read_bits@plt>
mov    %eax,%r15d
add    $0x301,%r15d
test   %r14d,%r14d
jne    1890 <get_data+0x750>
jmp    117f <get_data+0x3f>
mov    %rbp,%rdi
mov    %r12,%rsi
mov    $0x9,%edx
call   1060 <read_bits@plt>
mov    %eax,%r15d
add    $0x401,%r15d
test   %r14d,%r14d
jne    1890 <get_data+0x750>
jmp    117f <get_data+0x3f>
mov    %rbp,%rdi
mov    %r12,%rsi
mov    $0x9,%edx
call   1060 <read_bits@plt>
mov    %eax,%r15d
add    $0x601,%r15d
test   %r14d,%r14d
jne    1890 <get_data+0x750>
jmp    117f <get_data+0x3f>
mov    %rbp,%rdi
mov    %r12,%rsi
mov    $0xa,%edx
call   1060 <read_bits@plt>
mov    %eax,%r15d
add    $0x801,%r15d
test   %r14d,%r14d
jne    1890 <get_data+0x750>
jmp    117f <get_data+0x3f>
mov    %rbp,%rdi
mov    %r12,%rsi
mov    $0xa,%edx
call   1060 <read_bits@plt>
mov    %eax,%r15d
add    $0xc01,%r15d
test   %r14d,%r14d
jne    1890 <get_data+0x750>
jmp    117f <get_data+0x3f>
mov    %rbp,%rdi
mov    %r12,%rsi
mov    $0xb,%edx
call   1060 <read_bits@plt>
mov    %eax,%r15d
add    $0x1001,%r15d
test   %r14d,%r14d
jne    1890 <get_data+0x750>
jmp    117f <get_data+0x3f>
mov    %rbp,%rdi
mov    %r12,%rsi
mov    $0xb,%edx
call   1060 <read_bits@plt>
mov    %eax,%r15d
add    $0x1801,%r15d
test   %r14d,%r14d
jne    1890 <get_data+0x750>
jmp    117f <get_data+0x3f>
mov    %rbp,%rdi
mov    %r12,%rsi
mov    $0xc,%edx
call   1060 <read_bits@plt>
mov    %eax,%r15d
add    $0x2001,%r15d
test   %r14d,%r14d
jne    1890 <get_data+0x750>
jmp    117f <get_data+0x3f>
mov    %rbp,%rdi
mov    %r12,%rsi
mov    $0xc,%edx
call   1060 <read_bits@plt>
mov    %eax,%r15d
add    $0x3001,%r15d
test   %r14d,%r14d
jne    1890 <get_data+0x750>
jmp    117f <get_data+0x3f>
mov    %rbp,%rdi
mov    %r12,%rsi
mov    $0xd,%edx
call   1060 <read_bits@plt>
mov    %eax,%r15d
add    $0x4001,%r15d
nopl   (%rax)
test   %r14d,%r14d
je     117f <get_data+0x3f>
nopl   0x0(%rax)
mov    %r15d,%edi
call   1040 <pushin@plt>
movzbl %al,%ebx
mov    %ebx,%edi
call   1030 <pushout@plt>
mov    %ebx,%edi
call   *%r13
add    $0xffffffff,%r14d
jne    1890 <get_data+0x750>
jmp    117f <get_data+0x3f>
mov    %rbp,%rdi
mov    %r12,%rsi
mov    $0xd,%edx
call   1060 <read_bits@plt>
mov    %eax,%r15d
add    $0x6001,%r15d
test   %r14d,%r14d
jne    1890 <get_data+0x750>
jmp    117f <get_data+0x3f>
mov    $0xffffffff,%ecx
mov    %ecx,%eax
add    $0x28,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
define i32 @get_data(i8* %0, i64* %1, i8* %2, i32* %3, i8* %4, i32* %5, void (i8)* %6) {
%8 = alloca i32
%9 = alloca i8*
%10 = alloca i64*
%11 = alloca i8*
%12 = alloca i32*
%13 = alloca i8*
%14 = alloca i32*
%15 = alloca void (i8)*
%16 = alloca i32
%17 = alloca i32
%18 = alloca i32
%19 = alloca i32
%20 = alloca i32
%21 = alloca i8
store i8* %0, i8** %9
store i64* %1, i64** %10
store i8* %2, i8** %11
store i32* %3, i32** %12
store i8* %4, i8** %13
store i32* %5, i32** %14
store void (i8)* %6, void (i8)** %15
br label %22
22: ; preds = %7, %320
%23 = load i8*, i8** %9
%24 = load i64*, i64** %10
%25 = load i8*, i8** %11
%26 = load i32*, i32** %12
%27 = call i32 @decode_one(i8* %23, i64* %24, i8* %25, i32 288, i32* %26, i32 15)
store i32 %27, i32* %16
%28 = load i32, i32* %16
%29 = icmp ult i32 %28, 0
br i1 %29, label %30, label %31
30: ; preds = %22
store i32 -1, i32* %8
br label %321
31: ; preds = %22
%32 = load i32, i32* %16
%33 = icmp ult i32 %32, 256
br i1 %33, label %34, label %41
34: ; preds = %31
%35 = load i32, i32* %16
%36 = trunc i32 %35 to i8
%37 = call i32 @pushout(i8 zeroext %36)
%38 = load void (i8)*, void (i8)** %15
%39 = load i32, i32* %16
%40 = trunc i32 %39 to i8
br label %320
41: ; preds = %31
%42 = load i32, i32* %16
%43 = icmp eq i32 %42, 256
br i1 %43, label %44, label %45
44: ; preds = %41
store i32 0, i32* %8
br label %321
45: ; preds = %41
%46 = load i32, i32* %16
%47 = icmp uge i32 %46, 257
br i1 %47, label %48, label %318
48: ; preds = %45
%49 = load i32, i32* %16
switch i32 %49, label %159 [
i32 257, label %50
i32 258, label %51
i32 259, label %52
i32 260, label %53
i32 261, label %54
i32 262, label %55
i32 263, label %56
i32 264, label %57
i32 265, label %58
i32 266, label %63
i32 267, label %68
i32 268, label %73
i32 269, label %78
i32 270, label %83
i32 271, label %88
i32 272, label %93
i32 273, label %98
i32 274, label %103
i32 275, label %108
i32 276, label %113
i32 277, label %118
i32 278, label %123
i32 279, label %128
i32 280, label %133
i32 281, label %138
i32 282, label %143
i32 283, label %148
i32 284, label %153
i32 285, label %158
]
50: ; preds = %48
store i32 3, i32* %18
br label %160
51: ; preds = %48
store i32 4, i32* %18
br label %160
52: ; preds = %48
store i32 5, i32* %18
br label %160
53: ; preds = %48
store i32 6, i32* %18
br label %160
54: ; preds = %48
store i32 7, i32* %18
br label %160
55: ; preds = %48
store i32 8, i32* %18
br label %160
56: ; preds = %48
store i32 9, i32* %18
br label %160
57: ; preds = %48
store i32 10, i32* %18
br label %160
58: ; preds = %48
%59 = load i8*, i8** %9
%60 = load i64*, i64** %10
%61 = call i32 @read_bits(i8* %59, i64* %60, i32 1)
%62 = add nsw i32 11, %61
store i32 %62, i32* %18
br label %160
63: ; preds = %48
%64 = load i8*, i8** %9
%65 = load i64*, i64** %10
%66 = call i32 @read_bits(i8* %64, i64* %65, i32 1)
%67 = add nsw i32 13, %66
store i32 %67, i32* %18
br label %160
68: ; preds = %48
%69 = load i8*, i8** %9
%70 = load i64*, i64** %10
%71 = call i32 @read_bits(i8* %69, i64* %70, i32 1)
%72 = add nsw i32 15, %71
store i32 %72, i32* %18
br label %160
73: ; preds = %48
%74 = load i8*, i8** %9
%75 = load i64*, i64** %10
%76 = call i32 @read_bits(i8* %74, i64* %75, i32 1)
%77 = add nsw i32 17, %76
store i32 %77, i32* %18
br label %160
78: ; preds = %48
%79 = load i8*, i8** %9
%80 = load i64*, i64** %10
%81 = call i32 @read_bits(i8* %79, i64* %80, i32 2)
%82 = add nsw i32 19, %81
store i32 %82, i32* %18
br label %160
83: ; preds = %48
%84 = load i8*, i8** %9
%85 = load i64*, i64** %10
%86 = call i32 @read_bits(i8* %84, i64* %85, i32 2)
%87 = add nsw i32 23, %86
store i32 %87, i32* %18
br label %160
88: ; preds = %48
%89 = load i8*, i8** %9
%90 = load i64*, i64** %10
%91 = call i32 @read_bits(i8* %89, i64* %90, i32 2)
%92 = add nsw i32 27, %91
store i32 %92, i32* %18
br label %160
93: ; preds = %48
%94 = load i8*, i8** %9
%95 = load i64*, i64** %10
%96 = call i32 @read_bits(i8* %94, i64* %95, i32 2)
%97 = add nsw i32 31, %96
store i32 %97, i32* %18
br label %160
98: ; preds = %48
%99 = load i8*, i8** %9
%100 = load i64*, i64** %10
%101 = call i32 @read_bits(i8* %99, i64* %100, i32 3)
%102 = add nsw i32 35, %101
store i32 %102, i32* %18
br label %160
103: ; preds = %48
%104 = load i8*, i8** %9
%105 = load i64*, i64** %10
%106 = call i32 @read_bits(i8* %104, i64* %105, i32 3)
%107 = add nsw i32 43, %106
store i32 %107, i32* %18
br label %160
108: ; preds = %48
%109 = load i8*, i8** %9
%110 = load i64*, i64** %10
%111 = call i32 @read_bits(i8* %109, i64* %110, i32 3)
%112 = add nsw i32 51, %111
store i32 %112, i32* %18
br label %160
113: ; preds = %48
%114 = load i8*, i8** %9
%115 = load i64*, i64** %10
%116 = call i32 @read_bits(i8* %114, i64* %115, i32 3)
%117 = add nsw i32 59, %116
store i32 %117, i32* %18
br label %160
118: ; preds = %48
%119 = load i8*, i8** %9
%120 = load i64*, i64** %10
%121 = call i32 @read_bits(i8* %119, i64* %120, i32 4)
%122 = add nsw i32 67, %121
store i32 %122, i32* %18
br label %160
123: ; preds = %48
%124 = load i8*, i8** %9
%125 = load i64*, i64** %10
%126 = call i32 @read_bits(i8* %124, i64* %125, i32 4)
%127 = add nsw i32 83, %126
store i32 %127, i32* %18
br label %160
128: ; preds = %48
%129 = load i8*, i8** %9
%130 = load i64*, i64** %10
%131 = call i32 @read_bits(i8* %129, i64* %130, i32 4)
%132 = add nsw i32 99, %131
store i32 %132, i32* %18
br label %160
133: ; preds = %48
%134 = load i8*, i8** %9
%135 = load i64*, i64** %10
%136 = call i32 @read_bits(i8* %134, i64* %135, i32 4)
%137 = add nsw i32 115, %136
store i32 %137, i32* %18
br label %160
138: ; preds = %48
%139 = load i8*, i8** %9
%140 = load i64*, i64** %10
%141 = call i32 @read_bits(i8* %139, i64* %140, i32 5)
%142 = add nsw i32 131, %141
store i32 %142, i32* %18
br label %160
143: ; preds = %48
%144 = load i8*, i8** %9
%145 = load i64*, i64** %10
%146 = call i32 @read_bits(i8* %144, i64* %145, i32 5)
%147 = add nsw i32 163, %146
store i32 %147, i32* %18
br label %160
148: ; preds = %48
%149 = load i8*, i8** %9
%150 = load i64*, i64** %10
%151 = call i32 @read_bits(i8* %149, i64* %150, i32 5)
%152 = add nsw i32 195, %151
store i32 %152, i32* %18
br label %160
153: ; preds = %48
%154 = load i8*, i8** %9
%155 = load i64*, i64** %10
%156 = call i32 @read_bits(i8* %154, i64* %155, i32 5)
%157 = add nsw i32 227, %156
store i32 %157, i32* %18
br label %160
158: ; preds = %48
store i32 258, i32* %18
br label %160
159: ; preds = %48
store i32 -1, i32* %8
br label %321
160: ; preds = %158, %153, %148, %143, %138, %133, %128, %123, %118, %113, %108, %103, %98, %93, %88, %83, %78, %73, %68, %63, %58, %57, %56, %55, %54, %53, %52, %51, %50
%161 = load i8*, i8** %9
%162 = load i64*, i64** %10
%163 = load i8*, i8** %13
%164 = load i32*, i32** %14
%165 = call i32 @decode_one(i8* %161, i64* %162, i8* %163, i32 30, i32* %164, i32 15)
store i32 %165, i32* %17
%166 = load i32, i32* %17
switch i32 %166, label %301 [
i32 0, label %167
i32 1, label %168
i32 2, label %169
i32 3, label %170
i32 4, label %171
i32 5, label %176
i32 6, label %181
i32 7, label %186
i32 8, label %191
i32 9, label %196
i32 10, label %201
i32 11, label %206
i32 12, label %211
i32 13, label %216
i32 14, label %221
i32 15, label %226
i32 16, label %231
i32 17, label %236
i32 18, label %241
i32 19, label %246
i32 20, label %251
i32 21, label %256
i32 22, label %261
i32 23, label %266
i32 24, label %271
i32 25, label %276
i32 26, label %281
i32 27, label %286
i32 28, label %291
i32 29, label %296
]
167: ; preds = %160
store i32 1, i32* %19
br label %302
168: ; preds = %160
store i32 2, i32* %19
br label %302
169: ; preds = %160
store i32 3, i32* %19
br label %302
170: ; preds = %160
store i32 4, i32* %19
br label %302
171: ; preds = %160
%172 = load i8*, i8** %9
%173 = load i64*, i64** %10
%174 = call i32 @read_bits(i8* %172, i64* %173, i32 1)
%175 = add nsw i32 5, %174
store i32 %175, i32* %19
br label %302
176: ; preds = %160
%177 = load i8*, i8** %9
%178 = load i64*, i64** %10
%179 = call i32 @read_bits(i8* %177, i64* %178, i32 1)
%180 = add nsw i32 7, %179
store i32 %180, i32* %19
br label %302
181: ; preds = %160
%182 = load i8*, i8** %9
%183 = load i64*, i64** %10
%184 = call i32 @read_bits(i8* %182, i64* %183, i32 2)
%185 = add nsw i32 9, %184
store i32 %185, i32* %19
br label %302
186: ; preds = %160
%187 = load i8*, i8** %9
%188 = load i64*, i64** %10
%189 = call i32 @read_bits(i8* %187, i64* %188, i32 2)
%190 = add nsw i32 13, %189
store i32 %190, i32* %19
br label %302
191: ; preds = %160
%192 = load i8*, i8** %9
%193 = load i64*, i64** %10
%194 = call i32 @read_bits(i8* %192, i64* %193, i32 3)
%195 = add nsw i32 17, %194
store i32 %195, i32* %19
br label %302
196: ; preds = %160
%197 = load i8*, i8** %9
%198 = load i64*, i64** %10
%199 = call i32 @read_bits(i8* %197, i64* %198, i32 3)
%200 = add nsw i32 25, %199
store i32 %200, i32* %19
br label %302
201: ; preds = %160
%202 = load i8*, i8** %9
%203 = load i64*, i64** %10
%204 = call i32 @read_bits(i8* %202, i64* %203, i32 4)
%205 = add nsw i32 33, %204
store i32 %205, i32* %19
br label %302
206: ; preds = %160
%207 = load i8*, i8** %9
%208 = load i64*, i64** %10
%209 = call i32 @read_bits(i8* %207, i64* %208, i32 4)
%210 = add nsw i32 49, %209
store i32 %210, i32* %19
br label %302
211: ; preds = %160
%212 = load i8*, i8** %9
%213 = load i64*, i64** %10
%214 = call i32 @read_bits(i8* %212, i64* %213, i32 5)
%215 = add nsw i32 65, %214
store i32 %215, i32* %19
br label %302
216: ; preds = %160
%217 = load i8*, i8** %9
%218 = load i64*, i64** %10
%219 = call i32 @read_bits(i8* %217, i64* %218, i32 5)
%220 = add nsw i32 97, %219
store i32 %220, i32* %19
br label %302
221: ; preds = %160
%222 = load i8*, i8** %9
%223 = load i64*, i64** %10
%224 = call i32 @read_bits(i8* %222, i64* %223, i32 6)
%225 = add nsw i32 129, %224
store i32 %225, i32* %19
br label %302
226: ; preds = %160
%227 = load i8*, i8** %9
%228 = load i64*, i64** %10
%229 = call i32 @read_bits(i8* %227, i64* %228, i32 6)
%230 = add nsw i32 193, %229
store i32 %230, i32* %19
br label %302
231: ; preds = %160
%232 = load i8*, i8** %9
%233 = load i64*, i64** %10
%234 = call i32 @read_bits(i8* %232, i64* %233, i32 7)
%235 = add nsw i32 257, %234
store i32 %235, i32* %19
br label %302
236: ; preds = %160
%237 = load i8*, i8** %9
%238 = load i64*, i64** %10
%239 = call i32 @read_bits(i8* %237, i64* %238, i32 7)
%240 = add nsw i32 385, %239
store i32 %240, i32* %19
br label %302
241: ; preds = %160
%242 = load i8*, i8** %9
%243 = load i64*, i64** %10
%244 = call i32 @read_bits(i8* %242, i64* %243, i32 8)
%245 = add nsw i32 513, %244
store i32 %245, i32* %19
br label %302
246: ; preds = %160
%247 = load i8*, i8** %9
%248 = load i64*, i64** %10
%249 = call i32 @read_bits(i8* %247, i64* %248, i32 8)
%250 = add nsw i32 769, %249
store i32 %250, i32* %19
br label %302
251: ; preds = %160
%252 = load i8*, i8** %9
%253 = load i64*, i64** %10
%254 = call i32 @read_bits(i8* %252, i64* %253, i32 9)
%255 = add nsw i32 1025, %254
store i32 %255, i32* %19
br label %302
256: ; preds = %160
%257 = load i8*, i8** %9
%258 = load i64*, i64** %10
%259 = call i32 @read_bits(i8* %257, i64* %258, i32 9)
%260 = add nsw i32 1537, %259
store i32 %260, i32* %19
br label %302
261: ; preds = %160
%262 = load i8*, i8** %9
%263 = load i64*, i64** %10
%264 = call i32 @read_bits(i8* %262, i64* %263, i32 10)
%265 = add nsw i32 2049, %264
store i32 %265, i32* %19
br label %302
266: ; preds = %160
%267 = load i8*, i8** %9
%268 = load i64*, i64** %10
%269 = call i32 @read_bits(i8* %267, i64* %268, i32 10)
%270 = add nsw i32 3073, %269
store i32 %270, i32* %19
br label %302
271: ; preds = %160
%272 = load i8*, i8** %9
%273 = load i64*, i64** %10
%274 = call i32 @read_bits(i8* %272, i64* %273, i32 11)
%275 = add nsw i32 4097, %274
store i32 %275, i32* %19
br label %302
276: ; preds = %160
%277 = load i8*, i8** %9
%278 = load i64*, i64** %10
%279 = call i32 @read_bits(i8* %277, i64* %278, i32 11)
%280 = add nsw i32 6145, %279
store i32 %280, i32* %19
br label %302
281: ; preds = %160
%282 = load i8*, i8** %9
%283 = load i64*, i64** %10
%284 = call i32 @read_bits(i8* %282, i64* %283, i32 12)
%285 = add nsw i32 8193, %284
store i32 %285, i32* %19
br label %302
286: ; preds = %160
%287 = load i8*, i8** %9
%288 = load i64*, i64** %10
%289 = call i32 @read_bits(i8* %287, i64* %288, i32 12)
%290 = add nsw i32 12289, %289
store i32 %290, i32* %19
br label %302
291: ; preds = %160
%292 = load i8*, i8** %9
%293 = load i64*, i64** %10
%294 = call i32 @read_bits(i8* %292, i64* %293, i32 13)
%295 = add nsw i32 16385, %294
store i32 %295, i32* %19
br label %302
296: ; preds = %160
%297 = load i8*, i8** %9
%298 = load i64*, i64** %10
%299 = call i32 @read_bits(i8* %297, i64* %298, i32 13)
%300 = add nsw i32 24577, %299
store i32 %300, i32* %19
br label %302
301: ; preds = %160
store i32 -1, i32* %8
br label %321
302: ; preds = %296, %291, %286, %281, %276, %271, %266, %261, %256, %251, %246, %241, %236, %231, %226, %221, %216, %211, %206, %201, %196, %191, %186, %181, %176, %171, %170, %169, %168, %167
store i32 0, i32* %20
br label %303
303: ; preds = %314, %302
%304 = load i32, i32* %20
%305 = load i32, i32* %18
%306 = icmp ult i32 %304, %305
br i1 %306, label %307, label %317
307: ; preds = %303
%308 = load i32, i32* %19
%309 = call zeroext i8 @pushin(i32 %308)
store i8 %309, i8* %21
%310 = load i8, i8* %21
%311 = call i32 @pushout(i8 zeroext %310)
%312 = load void (i8)*, void (i8)** %15
%313 = load i8, i8* %21
br label %314
314: ; preds = %307
%315 = load i32, i32* %20
%316 = add i32 %315, 1
store i32 %316, i32* %20
br label %303
317: ; preds = %303
br label %318
318: ; preds = %317, %45
br label %319
319: ; preds = %318
br label %320
320: ; preds = %319, %34
br label %22
321: ; preds = %301, %159, %44, %30
%322 = load i32, i32* %8
ret i32 %322
}

LLVM IR (-O2):
define i32 @get_data(i8* %0, i64* %1, i8* %2, i32* %3, i8* %4, i32* %5, void (i8)* nocapture %6) {
br label %8
8: ; preds = %170, %7
%9 = tail call i32 @decode_one(i8* %0, i64* %1, i8* %2, i32 288, i32* %3, i32 15)
%10 = icmp ult i32 %9, 256
br i1 %10, label %11, label %14
11: ; preds = %8
%12 = trunc i32 %9 to i8
%13 = tail call i32 @pushout(i8 zeroext %12)
tail call void %6(i8 zeroext %12)
br label %170
14: ; preds = %8
switch i32 %9, label %179 [
i32 256, label %177
i32 257, label %83
i32 258, label %15
i32 259, label %16
i32 260, label %17
i32 261, label %18
i32 262, label %19
i32 263, label %20
i32 264, label %21
i32 265, label %22
i32 266, label %25
i32 267, label %28
i32 268, label %31
i32 269, label %34
i32 270, label %37
i32 271, label %40
i32 272, label %43
i32 273, label %46
i32 274, label %49
i32 275, label %52
i32 276, label %55
i32 277, label %58
i32 278, label %61
i32 279, label %64
i32 280, label %67
i32 281, label %70
i32 282, label %73
i32 283, label %76
i32 284, label %79
i32 285, label %82
]
15: ; preds = %14
br label %83
16: ; preds = %14
br label %83
17: ; preds = %14
br label %83
18: ; preds = %14
br label %83
19: ; preds = %14
br label %83
20: ; preds = %14
br label %83
21: ; preds = %14
br label %83
22: ; preds = %14
%23 = tail call i32 @read_bits(i8* %0, i64* %1, i32 1)
%24 = add nsw i32 %23, 11
br label %83
25: ; preds = %14
%26 = tail call i32 @read_bits(i8* %0, i64* %1, i32 1)
%27 = add nsw i32 %26, 13
br label %83
28: ; preds = %14
%29 = tail call i32 @read_bits(i8* %0, i64* %1, i32 1)
%30 = add nsw i32 %29, 15
br label %83
31: ; preds = %14
%32 = tail call i32 @read_bits(i8* %0, i64* %1, i32 1)
%33 = add nsw i32 %32, 17
br label %83
34: ; preds = %14
%35 = tail call i32 @read_bits(i8* %0, i64* %1, i32 2)
%36 = add nsw i32 %35, 19
br label %83
37: ; preds = %14
%38 = tail call i32 @read_bits(i8* %0, i64* %1, i32 2)
%39 = add nsw i32 %38, 23
br label %83
40: ; preds = %14
%41 = tail call i32 @read_bits(i8* %0, i64* %1, i32 2)
%42 = add nsw i32 %41, 27
br label %83
43: ; preds = %14
%44 = tail call i32 @read_bits(i8* %0, i64* %1, i32 2)
%45 = add nsw i32 %44, 31
br label %83
46: ; preds = %14
%47 = tail call i32 @read_bits(i8* %0, i64* %1, i32 3)
%48 = add nsw i32 %47, 35
br label %83
49: ; preds = %14
%50 = tail call i32 @read_bits(i8* %0, i64* %1, i32 3)
%51 = add nsw i32 %50, 43
br label %83
52: ; preds = %14
%53 = tail call i32 @read_bits(i8* %0, i64* %1, i32 3)
%54 = add nsw i32 %53, 51
br label %83
55: ; preds = %14
%56 = tail call i32 @read_bits(i8* %0, i64* %1, i32 3)
%57 = add nsw i32 %56, 59
br label %83
58: ; preds = %14
%59 = tail call i32 @read_bits(i8* %0, i64* %1, i32 4)
%60 = add nsw i32 %59, 67
br label %83
61: ; preds = %14
%62 = tail call i32 @read_bits(i8* %0, i64* %1, i32 4)
%63 = add nsw i32 %62, 83
br label %83
64: ; preds = %14
%65 = tail call i32 @read_bits(i8* %0, i64* %1, i32 4)
%66 = add nsw i32 %65, 99
br label %83
67: ; preds = %14
%68 = tail call i32 @read_bits(i8* %0, i64* %1, i32 4)
%69 = add nsw i32 %68, 115
br label %83
70: ; preds = %14
%71 = tail call i32 @read_bits(i8* %0, i64* %1, i32 5)
%72 = add nsw i32 %71, 131
br label %83
73: ; preds = %14
%74 = tail call i32 @read_bits(i8* %0, i64* %1, i32 5)
%75 = add nsw i32 %74, 163
br label %83
76: ; preds = %14
%77 = tail call i32 @read_bits(i8* %0, i64* %1, i32 5)
%78 = add nsw i32 %77, 195
br label %83
79: ; preds = %14
%80 = tail call i32 @read_bits(i8* %0, i64* %1, i32 5)
%81 = add nsw i32 %80, 227
br label %83
82: ; preds = %14
br label %83
83: ; preds = %14, %82, %79, %76, %73, %70, %67, %64, %61, %58, %55, %52, %49, %46, %43, %40, %37, %34, %31, %28, %25, %22, %21, %20, %19, %18, %17, %16, %15
%84 = phi i32 [ 258, %82 ], [ %81, %79 ], [ %78, %76 ], [ %75, %73 ], [ %72, %70 ], [ %69, %67 ], [ %66, %64 ], [ %63, %61 ], [ %60, %58 ], [ %57, %55 ], [ %54, %52 ], [ %51, %49 ], [ %48, %46 ], [ %45, %43 ], [ %42, %40 ], [ %39, %37 ], [ %36, %34 ], [ %33, %31 ], [ %30, %28 ], [ %27, %25 ], [ %24, %22 ], [ 10, %21 ], [ 9, %20 ], [ 8, %19 ], [ 7, %18 ], [ 6, %17 ], [ 5, %16 ], [ 4, %15 ], [ 3, %14 ]
%85 = tail call i32 @decode_one(i8* %0, i64* %1, i8* %4, i32 30, i32* %5, i32 15)
switch i32 %85, label %177 [
i32 0, label %167
i32 1, label %86
i32 2, label %87
i32 3, label %88
i32 4, label %89
i32 5, label %92
i32 6, label %95
i32 7, label %98
i32 8, label %101
i32 9, label %104
i32 10, label %107
i32 11, label %110
i32 12, label %113
i32 13, label %116
i32 14, label %119
i32 15, label %122
i32 16, label %125
i32 17, label %128
i32 18, label %131
i32 19, label %134
i32 20, label %137
i32 21, label %140
i32 22, label %143
i32 23, label %146
i32 24, label %149
i32 25, label %152
i32 26, label %155
i32 27, label %158
i32 28, label %161
i32 29, label %164
]
86: ; preds = %83
br label %167
87: ; preds = %83
br label %167
88: ; preds = %83
br label %167
89: ; preds = %83
%90 = tail call i32 @read_bits(i8* %0, i64* %1, i32 1)
%91 = add nsw i32 %90, 5
br label %167
92: ; preds = %83
%93 = tail call i32 @read_bits(i8* %0, i64* %1, i32 1)
%94 = add nsw i32 %93, 7
br label %167
95: ; preds = %83
%96 = tail call i32 @read_bits(i8* %0, i64* %1, i32 2)
%97 = add nsw i32 %96, 9
br label %167
98: ; preds = %83
%99 = tail call i32 @read_bits(i8* %0, i64* %1, i32 2)
%100 = add nsw i32 %99, 13
br label %167
101: ; preds = %83
%102 = tail call i32 @read_bits(i8* %0, i64* %1, i32 3)
%103 = add nsw i32 %102, 17
br label %167
104: ; preds = %83
%105 = tail call i32 @read_bits(i8* %0, i64* %1, i32 3)
%106 = add nsw i32 %105, 25
br label %167
107: ; preds = %83
%108 = tail call i32 @read_bits(i8* %0, i64* %1, i32 4)
%109 = add nsw i32 %108, 33
br label %167
110: ; preds = %83
%111 = tail call i32 @read_bits(i8* %0, i64* %1, i32 4)
%112 = add nsw i32 %111, 49
br label %167
113: ; preds = %83
%114 = tail call i32 @read_bits(i8* %0, i64* %1, i32 5)
%115 = add nsw i32 %114, 65
br label %167
116: ; preds = %83
%117 = tail call i32 @read_bits(i8* %0, i64* %1, i32 5)
%118 = add nsw i32 %117, 97
br label %167
119: ; preds = %83
%120 = tail call i32 @read_bits(i8* %0, i64* %1, i32 6)
%121 = add nsw i32 %120, 129
br label %167
122: ; preds = %83
%123 = tail call i32 @read_bits(i8* %0, i64* %1, i32 6)
%124 = add nsw i32 %123, 193
br label %167
125: ; preds = %83
%126 = tail call i32 @read_bits(i8* %0, i64* %1, i32 7)
%127 = add nsw i32 %126, 257
br label %167
128: ; preds = %83
%129 = tail call i32 @read_bits(i8* %0, i64* %1, i32 7)
%130 = add nsw i32 %129, 385
br label %167
131: ; preds = %83
%132 = tail call i32 @read_bits(i8* %0, i64* %1, i32 8)
%133 = add nsw i32 %132, 513
br label %167
134: ; preds = %83
%135 = tail call i32 @read_bits(i8* %0, i64* %1, i32 8)
%136 = add nsw i32 %135, 769
br label %167
137: ; preds = %83
%138 = tail call i32 @read_bits(i8* %0, i64* %1, i32 9)
%139 = add nsw i32 %138, 1025
br label %167
140: ; preds = %83
%141 = tail call i32 @read_bits(i8* %0, i64* %1, i32 9)
%142 = add nsw i32 %141, 1537
br label %167
143: ; preds = %83
%144 = tail call i32 @read_bits(i8* %0, i64* %1, i32 10)
%145 = add nsw i32 %144, 2049
br label %167
146: ; preds = %83
%147 = tail call i32 @read_bits(i8* %0, i64* %1, i32 10)
%148 = add nsw i32 %147, 3073
br label %167
149: ; preds = %83
%150 = tail call i32 @read_bits(i8* %0, i64* %1, i32 11)
%151 = add nsw i32 %150, 4097
br label %167
152: ; preds = %83
%153 = tail call i32 @read_bits(i8* %0, i64* %1, i32 11)
%154 = add nsw i32 %153, 6145
br label %167
155: ; preds = %83
%156 = tail call i32 @read_bits(i8* %0, i64* %1, i32 12)
%157 = add nsw i32 %156, 8193
br label %167
158: ; preds = %83
%159 = tail call i32 @read_bits(i8* %0, i64* %1, i32 12)
%160 = add nsw i32 %159, 12289
br label %167
161: ; preds = %83
%162 = tail call i32 @read_bits(i8* %0, i64* %1, i32 13)
%163 = add nsw i32 %162, 16385
br label %167
164: ; preds = %83
%165 = tail call i32 @read_bits(i8* %0, i64* %1, i32 13)
%166 = add nsw i32 %165, 24577
br label %167
167: ; preds = %83, %164, %161, %158, %155, %152, %149, %146, %143, %140, %137, %134, %131, %128, %125, %122, %119, %116, %113, %110, %107, %104, %101, %98, %95, %92, %89, %88, %87, %86
%168 = phi i32 [ %166, %164 ], [ %163, %161 ], [ %160, %158 ], [ %157, %155 ], [ %154, %152 ], [ %151, %149 ], [ %148, %146 ], [ %145, %143 ], [ %142, %140 ], [ %139, %137 ], [ %136, %134 ], [ %133, %131 ], [ %130, %128 ], [ %127, %125 ], [ %124, %122 ], [ %121, %119 ], [ %118, %116 ], [ %115, %113 ], [ %112, %110 ], [ %109, %107 ], [ %106, %104 ], [ %103, %101 ], [ %100, %98 ], [ %97, %95 ], [ %94, %92 ], [ %91, %89 ], [ 4, %88 ], [ 3, %87 ], [ 2, %86 ], [ 1, %83 ]
%169 = icmp eq i32 %84, 0
br i1 %169, label %170, label %171
170: ; preds = %171, %167, %11
br label %8
171: ; preds = %167, %171
%172 = phi i32 [ %175, %171 ], [ 0, %167 ]
%173 = tail call zeroext i8 @pushin(i32 %168)
%174 = tail call i32 @pushout(i8 zeroext %173)
tail call void %6(i8 zeroext %173)
%175 = add nuw i32 %172, 1
%176 = icmp eq i32 %175, %84
br i1 %176, label %170, label %171
177: ; preds = %14, %83
%178 = phi i32 [ -1, %83 ], [ 0, %14 ]
br label %179
179: ; preds = %14, %177
%180 = phi i32 [ %178, %177 ], [ -1, %14 ]
ret i32 %180
}