#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 */
typedef int uint8_t;
typedef int uint32_t;
typedef int uint16_t;

/* Variables and functions */
int /*<<< orphan*/ msgpackclen_msg_buf_invalid_type(char **, unsigned char);
size_t msgpackclen_msg_buf_read_elems(void *, size_t, size_t, int, char **);
size_t msgpackclen_msg_buf_read_elem(void *buf, size_t off, size_t size,
                                     char **error) {
  unsigned char type;
  uint32_t n;
  size_t r;
  if (off >= size) {
    return 0;
  }
  type = *((unsigned char *)buf + off);
  off++;
  if (type <= 0x7f) {
    return 1;
  }
  if (type >= 0x80 && type <= 0x8f) {
    n = type ^ 0x80;
    if (n == 0)
      return 1;
    r = msgpackclen_msg_buf_read_elems(buf, off, size, n * 2, error);
    return r > 0 ? r + 1 : 0;
  }
  if (type >= 0x90 && type <= 0x9f) {
    n = type ^ 0x90;
    if (n == 0)
      return 1;
    r = msgpackclen_msg_buf_read_elems(buf, off, size, n, error);
    return r > 0 ? r + 1 : 0;
  }
  if (type >= 0xa0 && type <= 0xbf) {
    n = type ^ 0xa0;
    return n + 1;
  }
  if (type == 0xc0) {
    return 1;
  }
  if (type == 0xc2) {
    return 1;
  }
  if (type == 0xc3) {
    return 1;
  }
  if (type == 0xca) {
    return 5;
  }
  if (type == 0xcb) {
    return 9;
  }
  if (type == 0xcc) {
    return 2;
  }
  if (type == 0xcd) {
    return 3;
  }
  if (type == 0xce) {
    return 5;
  }
  if (type == 0xcf) {
    return 9;
  }
  if (type == 0xd0) {
    return 2;
  }
  if (type == 0xd1) {
    return 3;
  }
  if (type == 0xd2) {
    return 5;
  }
  if (type == 0xd3) {
    return 9;
  }
  if (type == 0xd9) {
    if (off + 1 > size) {
      return 0;
    }
    n = *(uint8_t *)((char *)buf + off);
    return n + 2;
  }
  if (type == 0xda) {
    if (off + 2 > size) {
      return 0;
    }
    n = ((((*(uint16_t *)((char *)buf + off)) >> 8) & 0xff) |
         (((*(uint16_t *)((char *)buf + off)) & 0xff) << 8));
    return n + 3;
  }
  if (type == 0xdb) {
    if (off + 4 > size) {
      return 0;
    }
    n = ((((*(uint32_t *)((char *)buf + off)) & 0xff000000) >> 24) |
         (((*(uint32_t *)((char *)buf + off)) & 0x00ff0000) >> 8) |
         (((*(uint32_t *)((char *)buf + off)) & 0x0000ff00) << 8) |
         (((*(uint32_t *)((char *)buf + off)) & 0x000000ff) << 24));
    return n + 5;
  }
  if (type == 0xc4) {
    if (off + 1 > size) {
      return 0;
    }
    n = *(uint8_t *)((char *)buf + off);
    return n + 2;
  }
  if (type == 0xc5) {
    if (off + 2 > size) {
      return 0;
    }
    n = ((((*(uint16_t *)((char *)buf + off)) >> 8) & 0xff) |
         (((*(uint16_t *)((char *)buf + off)) & 0xff) << 8));
    return n + 3;
  }
  if (type == 0xc6) {
    if (off + 4 > size) {
      return 0;
    }
    n = ((((*(uint32_t *)((char *)buf + off)) & 0xff000000) >> 24) |
         (((*(uint32_t *)((char *)buf + off)) & 0x00ff0000) >> 8) |
         (((*(uint32_t *)((char *)buf + off)) & 0x0000ff00) << 8) |
         (((*(uint32_t *)((char *)buf + off)) & 0x000000ff) << 24));
    return n + 5;
  }
  if (type == 0xdc) {
    if (off + 2 > size) {
      return 0;
    }
    n = ((((*(uint16_t *)((char *)buf + off)) >> 8) & 0xff) |
         (((*(uint16_t *)((char *)buf + off)) & 0xff) << 8));
    if (n == 0)
      return 3;
    r = msgpackclen_msg_buf_read_elems(buf, off + 2, size, n, error);
    return r > 0 ? r + 3 : 0;
  }
  if (type == 0xdd) {
    if (off + 4 > size) {
      return 0;
    }
    n = ((((*(uint32_t *)((char *)buf + off)) & 0xff000000) >> 24) |
         (((*(uint32_t *)((char *)buf + off)) & 0x00ff0000) >> 8) |
         (((*(uint32_t *)((char *)buf + off)) & 0x0000ff00) << 8) |
         (((*(uint32_t *)((char *)buf + off)) & 0x000000ff) << 24));
    if (n == 0)
      return 5;
    r = msgpackclen_msg_buf_read_elems(buf, off + 2, size, n, error);
    return r > 0 ? r + 5 : 0;
  }
  if (type == 0xde) {
    if (off + 2 > size) {
      return 0;
    }
    n = ((((*(uint16_t *)((char *)buf + off)) >> 8) & 0xff) |
         (((*(uint16_t *)((char *)buf + off)) & 0xff) << 8));
    if (n == 0)
      return 3;
    r = msgpackclen_msg_buf_read_elems(buf, off + 2, size, n * 2, error);
    return r > 0 ? r + 3 : 0;
  }
  if (type == 0xdf) {
    if (off + 4 > size) {
      return 0;
    }
    n = ((((*(uint32_t *)((char *)buf + off)) & 0xff000000) >> 24) |
         (((*(uint32_t *)((char *)buf + off)) & 0x00ff0000) >> 8) |
         (((*(uint32_t *)((char *)buf + off)) & 0x0000ff00) << 8) |
         (((*(uint32_t *)((char *)buf + off)) & 0x000000ff) << 24));
    if (n == 0)
      return 5;
    r = msgpackclen_msg_buf_read_elems(buf, off + 2, size, n * 2, error);
    return r > 0 ? r + 5 : 0;
  }
  if (type >= 0xe0) {
    return 1;
  }
  msgpackclen_msg_buf_invalid_type(error, type);
  return 0;
}


x86 assembly (clang, -O0):
<msgpackclen_msg_buf_read_elem>:
push   %rbp
mov    %rsp,%rbp
sub    $0x70,%rsp
mov    %rdi,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
mov    %rdx,-0x20(%rbp)
mov    %rcx,-0x28(%rbp)
mov    -0x18(%rbp),%rax
cmp    -0x20(%rbp),%rax
jb     1153 <msgpackclen_msg_buf_read_elem+0x33>
movq   $0x0,-0x8(%rbp)
jmp    1a94 <msgpackclen_msg_buf_read_elem+0x974>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%rcx
mov    (%rax,%rcx,1),%al
mov    %al,-0x29(%rbp)
mov    -0x18(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x18(%rbp)
movzbl -0x29(%rbp),%eax
cmp    $0x7f,%eax
jg     1187 <msgpackclen_msg_buf_read_elem+0x67>
movq   $0x1,-0x8(%rbp)
jmp    1a94 <msgpackclen_msg_buf_read_elem+0x974>
movzbl -0x29(%rbp),%eax
cmp    $0x80,%eax
jl     121b <msgpackclen_msg_buf_read_elem+0xfb>
movzbl -0x29(%rbp),%eax
cmp    $0x8f,%eax
jg     121b <msgpackclen_msg_buf_read_elem+0xfb>
movzbl -0x29(%rbp),%eax
xor    $0x80,%eax
mov    %eax,-0x30(%rbp)
cmpl   $0x0,-0x30(%rbp)
jne    11c8 <msgpackclen_msg_buf_read_elem+0xa8>
movq   $0x1,-0x8(%rbp)
jmp    1a94 <msgpackclen_msg_buf_read_elem+0x974>
mov    -0x10(%rbp),%rdi
mov    -0x18(%rbp),%rsi
mov    -0x20(%rbp),%rdx
mov    -0x30(%rbp),%ecx
shl    $0x1,%ecx
mov    -0x28(%rbp),%r8
call   1040 <msgpackclen_msg_buf_read_elems@plt>
mov    %rax,-0x38(%rbp)
cmpq   $0x0,-0x38(%rbp)
jbe    1203 <msgpackclen_msg_buf_read_elem+0xe3>
mov    -0x38(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x40(%rbp)
jmp    120e <msgpackclen_msg_buf_read_elem+0xee>
xor    %eax,%eax
mov    %rax,-0x40(%rbp)
jmp    120e <msgpackclen_msg_buf_read_elem+0xee>
mov    -0x40(%rbp),%rax
mov    %rax,-0x8(%rbp)
jmp    1a94 <msgpackclen_msg_buf_read_elem+0x974>
movzbl -0x29(%rbp),%eax
cmp    $0x90,%eax
jl     12ac <msgpackclen_msg_buf_read_elem+0x18c>
movzbl -0x29(%rbp),%eax
cmp    $0x9f,%eax
jg     12ac <msgpackclen_msg_buf_read_elem+0x18c>
movzbl -0x29(%rbp),%eax
xor    $0x90,%eax
mov    %eax,-0x30(%rbp)
cmpl   $0x0,-0x30(%rbp)
jne    125c <msgpackclen_msg_buf_read_elem+0x13c>
movq   $0x1,-0x8(%rbp)
jmp    1a94 <msgpackclen_msg_buf_read_elem+0x974>
mov    -0x10(%rbp),%rdi
mov    -0x18(%rbp),%rsi
mov    -0x20(%rbp),%rdx
mov    -0x30(%rbp),%ecx
mov    -0x28(%rbp),%r8
call   1040 <msgpackclen_msg_buf_read_elems@plt>
mov    %rax,-0x38(%rbp)
cmpq   $0x0,-0x38(%rbp)
jbe    1294 <msgpackclen_msg_buf_read_elem+0x174>
mov    -0x38(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x48(%rbp)
jmp    129f <msgpackclen_msg_buf_read_elem+0x17f>
xor    %eax,%eax
mov    %rax,-0x48(%rbp)
jmp    129f <msgpackclen_msg_buf_read_elem+0x17f>
mov    -0x48(%rbp),%rax
mov    %rax,-0x8(%rbp)
jmp    1a94 <msgpackclen_msg_buf_read_elem+0x974>
movzbl -0x29(%rbp),%eax
cmp    $0xa0,%eax
jl     12e7 <msgpackclen_msg_buf_read_elem+0x1c7>
movzbl -0x29(%rbp),%eax
cmp    $0xbf,%eax
jg     12e7 <msgpackclen_msg_buf_read_elem+0x1c7>
movzbl -0x29(%rbp),%eax
xor    $0xa0,%eax
mov    %eax,-0x30(%rbp)
mov    -0x30(%rbp),%eax
add    $0x1,%eax
cltq
mov    %rax,-0x8(%rbp)
jmp    1a94 <msgpackclen_msg_buf_read_elem+0x974>
movzbl -0x29(%rbp),%eax
cmp    $0xc0,%eax
jne    1303 <msgpackclen_msg_buf_read_elem+0x1e3>
movq   $0x1,-0x8(%rbp)
jmp    1a94 <msgpackclen_msg_buf_read_elem+0x974>
movzbl -0x29(%rbp),%eax
cmp    $0xc2,%eax
jne    131f <msgpackclen_msg_buf_read_elem+0x1ff>
movq   $0x1,-0x8(%rbp)
jmp    1a94 <msgpackclen_msg_buf_read_elem+0x974>
movzbl -0x29(%rbp),%eax
cmp    $0xc3,%eax
jne    133b <msgpackclen_msg_buf_read_elem+0x21b>
movq   $0x1,-0x8(%rbp)
jmp    1a94 <msgpackclen_msg_buf_read_elem+0x974>
movzbl -0x29(%rbp),%eax
cmp    $0xca,%eax
jne    1357 <msgpackclen_msg_buf_read_elem+0x237>
movq   $0x5,-0x8(%rbp)
jmp    1a94 <msgpackclen_msg_buf_read_elem+0x974>
movzbl -0x29(%rbp),%eax
cmp    $0xcb,%eax
jne    1373 <msgpackclen_msg_buf_read_elem+0x253>
movq   $0x9,-0x8(%rbp)
jmp    1a94 <msgpackclen_msg_buf_read_elem+0x974>
movzbl -0x29(%rbp),%eax
cmp    $0xcc,%eax
jne    138f <msgpackclen_msg_buf_read_elem+0x26f>
movq   $0x2,-0x8(%rbp)
jmp    1a94 <msgpackclen_msg_buf_read_elem+0x974>
movzbl -0x29(%rbp),%eax
cmp    $0xcd,%eax
jne    13ab <msgpackclen_msg_buf_read_elem+0x28b>
movq   $0x3,-0x8(%rbp)
jmp    1a94 <msgpackclen_msg_buf_read_elem+0x974>
movzbl -0x29(%rbp),%eax
cmp    $0xce,%eax
jne    13c7 <msgpackclen_msg_buf_read_elem+0x2a7>
movq   $0x5,-0x8(%rbp)
jmp    1a94 <msgpackclen_msg_buf_read_elem+0x974>
movzbl -0x29(%rbp),%eax
cmp    $0xcf,%eax
jne    13e3 <msgpackclen_msg_buf_read_elem+0x2c3>
movq   $0x9,-0x8(%rbp)
jmp    1a94 <msgpackclen_msg_buf_read_elem+0x974>
movzbl -0x29(%rbp),%eax
cmp    $0xd0,%eax
jne    13ff <msgpackclen_msg_buf_read_elem+0x2df>
movq   $0x2,-0x8(%rbp)
jmp    1a94 <msgpackclen_msg_buf_read_elem+0x974>
movzbl -0x29(%rbp),%eax
cmp    $0xd1,%eax
jne    141b <msgpackclen_msg_buf_read_elem+0x2fb>
movq   $0x3,-0x8(%rbp)
jmp    1a94 <msgpackclen_msg_buf_read_elem+0x974>
movzbl -0x29(%rbp),%eax
cmp    $0xd2,%eax
jne    1437 <msgpackclen_msg_buf_read_elem+0x317>
movq   $0x5,-0x8(%rbp)
jmp    1a94 <msgpackclen_msg_buf_read_elem+0x974>
movzbl -0x29(%rbp),%eax
cmp    $0xd3,%eax
jne    1453 <msgpackclen_msg_buf_read_elem+0x333>
movq   $0x9,-0x8(%rbp)
jmp    1a94 <msgpackclen_msg_buf_read_elem+0x974>
movzbl -0x29(%rbp),%eax
cmp    $0xd9,%eax
jne    14a0 <msgpackclen_msg_buf_read_elem+0x380>
mov    -0x18(%rbp),%rax
add    $0x1,%rax
cmp    -0x20(%rbp),%rax
jbe    1481 <msgpackclen_msg_buf_read_elem+0x361>
movq   $0x0,-0x8(%rbp)
jmp    1a94 <msgpackclen_msg_buf_read_elem+0x974>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%rcx
mov    (%rax,%rcx,1),%eax
mov    %eax,-0x30(%rbp)
mov    -0x30(%rbp),%eax
add    $0x2,%eax
cltq
mov    %rax,-0x8(%rbp)
jmp    1a94 <msgpackclen_msg_buf_read_elem+0x974>
movzbl -0x29(%rbp),%eax
cmp    $0xda,%eax
jne    150b <msgpackclen_msg_buf_read_elem+0x3eb>
mov    -0x18(%rbp),%rax
add    $0x2,%rax
cmp    -0x20(%rbp),%rax
jbe    14ce <msgpackclen_msg_buf_read_elem+0x3ae>
movq   $0x0,-0x8(%rbp)
jmp    1a94 <msgpackclen_msg_buf_read_elem+0x974>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%rcx
mov    (%rax,%rcx,1),%eax
sar    $0x8,%eax
and    $0xff,%eax
mov    -0x10(%rbp),%rcx
mov    -0x18(%rbp),%rdx
mov    (%rcx,%rdx,1),%ecx
and    $0xff,%ecx
shl    $0x8,%ecx
or     %ecx,%eax
mov    %eax,-0x30(%rbp)
mov    -0x30(%rbp),%eax
add    $0x3,%eax
cltq
mov    %rax,-0x8(%rbp)
jmp    1a94 <msgpackclen_msg_buf_read_elem+0x974>
movzbl -0x29(%rbp),%eax
cmp    $0xdb,%eax
jne    15a2 <msgpackclen_msg_buf_read_elem+0x482>
mov    -0x18(%rbp),%rax
add    $0x4,%rax
cmp    -0x20(%rbp),%rax
jbe    1539 <msgpackclen_msg_buf_read_elem+0x419>
movq   $0x0,-0x8(%rbp)
jmp    1a94 <msgpackclen_msg_buf_read_elem+0x974>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%rcx
mov    (%rax,%rcx,1),%eax
and    $0xff000000,%eax
shr    $0x18,%eax
mov    -0x10(%rbp),%rcx
mov    -0x18(%rbp),%rdx
mov    (%rcx,%rdx,1),%ecx
and    $0xff0000,%ecx
sar    $0x8,%ecx
or     %ecx,%eax
mov    -0x10(%rbp),%rcx
mov    -0x18(%rbp),%rdx
mov    (%rcx,%rdx,1),%ecx
and    $0xff00,%ecx
shl    $0x8,%ecx
or     %ecx,%eax
mov    -0x10(%rbp),%rcx
mov    -0x18(%rbp),%rdx
mov    (%rcx,%rdx,1),%ecx
and    $0xff,%ecx
shl    $0x18,%ecx
or     %ecx,%eax
mov    %eax,-0x30(%rbp)
mov    -0x30(%rbp),%eax
add    $0x5,%eax
cltq
mov    %rax,-0x8(%rbp)
jmp    1a94 <msgpackclen_msg_buf_read_elem+0x974>
movzbl -0x29(%rbp),%eax
cmp    $0xc4,%eax
jne    15ef <msgpackclen_msg_buf_read_elem+0x4cf>
mov    -0x18(%rbp),%rax
add    $0x1,%rax
cmp    -0x20(%rbp),%rax
jbe    15d0 <msgpackclen_msg_buf_read_elem+0x4b0>
movq   $0x0,-0x8(%rbp)
jmp    1a94 <msgpackclen_msg_buf_read_elem+0x974>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%rcx
mov    (%rax,%rcx,1),%eax
mov    %eax,-0x30(%rbp)
mov    -0x30(%rbp),%eax
add    $0x2,%eax
cltq
mov    %rax,-0x8(%rbp)
jmp    1a94 <msgpackclen_msg_buf_read_elem+0x974>
movzbl -0x29(%rbp),%eax
cmp    $0xc5,%eax
jne    165a <msgpackclen_msg_buf_read_elem+0x53a>
mov    -0x18(%rbp),%rax
add    $0x2,%rax
cmp    -0x20(%rbp),%rax
jbe    161d <msgpackclen_msg_buf_read_elem+0x4fd>
movq   $0x0,-0x8(%rbp)
jmp    1a94 <msgpackclen_msg_buf_read_elem+0x974>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%rcx
mov    (%rax,%rcx,1),%eax
sar    $0x8,%eax
and    $0xff,%eax
mov    -0x10(%rbp),%rcx
mov    -0x18(%rbp),%rdx
mov    (%rcx,%rdx,1),%ecx
and    $0xff,%ecx
shl    $0x8,%ecx
or     %ecx,%eax
mov    %eax,-0x30(%rbp)
mov    -0x30(%rbp),%eax
add    $0x3,%eax
cltq
mov    %rax,-0x8(%rbp)
jmp    1a94 <msgpackclen_msg_buf_read_elem+0x974>
movzbl -0x29(%rbp),%eax
cmp    $0xc6,%eax
jne    16f1 <msgpackclen_msg_buf_read_elem+0x5d1>
mov    -0x18(%rbp),%rax
add    $0x4,%rax
cmp    -0x20(%rbp),%rax
jbe    1688 <msgpackclen_msg_buf_read_elem+0x568>
movq   $0x0,-0x8(%rbp)
jmp    1a94 <msgpackclen_msg_buf_read_elem+0x974>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%rcx
mov    (%rax,%rcx,1),%eax
and    $0xff000000,%eax
shr    $0x18,%eax
mov    -0x10(%rbp),%rcx
mov    -0x18(%rbp),%rdx
mov    (%rcx,%rdx,1),%ecx
and    $0xff0000,%ecx
sar    $0x8,%ecx
or     %ecx,%eax
mov    -0x10(%rbp),%rcx
mov    -0x18(%rbp),%rdx
mov    (%rcx,%rdx,1),%ecx
and    $0xff00,%ecx
shl    $0x8,%ecx
or     %ecx,%eax
mov    -0x10(%rbp),%rcx
mov    -0x18(%rbp),%rdx
mov    (%rcx,%rdx,1),%ecx
and    $0xff,%ecx
shl    $0x18,%ecx
or     %ecx,%eax
mov    %eax,-0x30(%rbp)
mov    -0x30(%rbp),%eax
add    $0x5,%eax
cltq
mov    %rax,-0x8(%rbp)
jmp    1a94 <msgpackclen_msg_buf_read_elem+0x974>
movzbl -0x29(%rbp),%eax
cmp    $0xdc,%eax
jne    17b6 <msgpackclen_msg_buf_read_elem+0x696>
mov    -0x18(%rbp),%rax
add    $0x2,%rax
cmp    -0x20(%rbp),%rax
jbe    171f <msgpackclen_msg_buf_read_elem+0x5ff>
movq   $0x0,-0x8(%rbp)
jmp    1a94 <msgpackclen_msg_buf_read_elem+0x974>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%rcx
mov    (%rax,%rcx,1),%eax
sar    $0x8,%eax
and    $0xff,%eax
mov    -0x10(%rbp),%rcx
mov    -0x18(%rbp),%rdx
mov    (%rcx,%rdx,1),%ecx
and    $0xff,%ecx
shl    $0x8,%ecx
or     %ecx,%eax
mov    %eax,-0x30(%rbp)
cmpl   $0x0,-0x30(%rbp)
jne    1762 <msgpackclen_msg_buf_read_elem+0x642>
movq   $0x3,-0x8(%rbp)
jmp    1a94 <msgpackclen_msg_buf_read_elem+0x974>
mov    -0x10(%rbp),%rdi
mov    -0x18(%rbp),%rsi
add    $0x2,%rsi
mov    -0x20(%rbp),%rdx
mov    -0x30(%rbp),%ecx
mov    -0x28(%rbp),%r8
call   1040 <msgpackclen_msg_buf_read_elems@plt>
mov    %rax,-0x38(%rbp)
cmpq   $0x0,-0x38(%rbp)
jbe    179e <msgpackclen_msg_buf_read_elem+0x67e>
mov    -0x38(%rbp),%rax
add    $0x3,%rax
mov    %rax,-0x50(%rbp)
jmp    17a9 <msgpackclen_msg_buf_read_elem+0x689>
xor    %eax,%eax
mov    %rax,-0x50(%rbp)
jmp    17a9 <msgpackclen_msg_buf_read_elem+0x689>
mov    -0x50(%rbp),%rax
mov    %rax,-0x8(%rbp)
jmp    1a94 <msgpackclen_msg_buf_read_elem+0x974>
movzbl -0x29(%rbp),%eax
cmp    $0xdd,%eax
jne    18a7 <msgpackclen_msg_buf_read_elem+0x787>
mov    -0x18(%rbp),%rax
add    $0x4,%rax
cmp    -0x20(%rbp),%rax
jbe    17e4 <msgpackclen_msg_buf_read_elem+0x6c4>
movq   $0x0,-0x8(%rbp)
jmp    1a94 <msgpackclen_msg_buf_read_elem+0x974>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%rcx
mov    (%rax,%rcx,1),%eax
and    $0xff000000,%eax
shr    $0x18,%eax
mov    -0x10(%rbp),%rcx
mov    -0x18(%rbp),%rdx
mov    (%rcx,%rdx,1),%ecx
and    $0xff0000,%ecx
sar    $0x8,%ecx
or     %ecx,%eax
mov    -0x10(%rbp),%rcx
mov    -0x18(%rbp),%rdx
mov    (%rcx,%rdx,1),%ecx
and    $0xff00,%ecx
shl    $0x8,%ecx
or     %ecx,%eax
mov    -0x10(%rbp),%rcx
mov    -0x18(%rbp),%rdx
mov    (%rcx,%rdx,1),%ecx
and    $0xff,%ecx
shl    $0x18,%ecx
or     %ecx,%eax
mov    %eax,-0x30(%rbp)
cmpl   $0x0,-0x30(%rbp)
jne    1853 <msgpackclen_msg_buf_read_elem+0x733>
movq   $0x5,-0x8(%rbp)
jmp    1a94 <msgpackclen_msg_buf_read_elem+0x974>
mov    -0x10(%rbp),%rdi
mov    -0x18(%rbp),%rsi
add    $0x2,%rsi
mov    -0x20(%rbp),%rdx
mov    -0x30(%rbp),%ecx
mov    -0x28(%rbp),%r8
call   1040 <msgpackclen_msg_buf_read_elems@plt>
mov    %rax,-0x38(%rbp)
cmpq   $0x0,-0x38(%rbp)
jbe    188f <msgpackclen_msg_buf_read_elem+0x76f>
mov    -0x38(%rbp),%rax
add    $0x5,%rax
mov    %rax,-0x58(%rbp)
jmp    189a <msgpackclen_msg_buf_read_elem+0x77a>
xor    %eax,%eax
mov    %rax,-0x58(%rbp)
jmp    189a <msgpackclen_msg_buf_read_elem+0x77a>
mov    -0x58(%rbp),%rax
mov    %rax,-0x8(%rbp)
jmp    1a94 <msgpackclen_msg_buf_read_elem+0x974>
movzbl -0x29(%rbp),%eax
cmp    $0xde,%eax
jne    196f <msgpackclen_msg_buf_read_elem+0x84f>
mov    -0x18(%rbp),%rax
add    $0x2,%rax
cmp    -0x20(%rbp),%rax
jbe    18d5 <msgpackclen_msg_buf_read_elem+0x7b5>
movq   $0x0,-0x8(%rbp)
jmp    1a94 <msgpackclen_msg_buf_read_elem+0x974>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%rcx
mov    (%rax,%rcx,1),%eax
sar    $0x8,%eax
and    $0xff,%eax
mov    -0x10(%rbp),%rcx
mov    -0x18(%rbp),%rdx
mov    (%rcx,%rdx,1),%ecx
and    $0xff,%ecx
shl    $0x8,%ecx
or     %ecx,%eax
mov    %eax,-0x30(%rbp)
cmpl   $0x0,-0x30(%rbp)
jne    1918 <msgpackclen_msg_buf_read_elem+0x7f8>
movq   $0x3,-0x8(%rbp)
jmp    1a94 <msgpackclen_msg_buf_read_elem+0x974>
mov    -0x10(%rbp),%rdi
mov    -0x18(%rbp),%rsi
add    $0x2,%rsi
mov    -0x20(%rbp),%rdx
mov    -0x30(%rbp),%ecx
shl    $0x1,%ecx
mov    -0x28(%rbp),%r8
call   1040 <msgpackclen_msg_buf_read_elems@plt>
mov    %rax,-0x38(%rbp)
cmpq   $0x0,-0x38(%rbp)
jbe    1957 <msgpackclen_msg_buf_read_elem+0x837>
mov    -0x38(%rbp),%rax
add    $0x3,%rax
mov    %rax,-0x60(%rbp)
jmp    1962 <msgpackclen_msg_buf_read_elem+0x842>
xor    %eax,%eax
mov    %rax,-0x60(%rbp)
jmp    1962 <msgpackclen_msg_buf_read_elem+0x842>
mov    -0x60(%rbp),%rax
mov    %rax,-0x8(%rbp)
jmp    1a94 <msgpackclen_msg_buf_read_elem+0x974>
movzbl -0x29(%rbp),%eax
cmp    $0xdf,%eax
jne    1a63 <msgpackclen_msg_buf_read_elem+0x943>
mov    -0x18(%rbp),%rax
add    $0x4,%rax
cmp    -0x20(%rbp),%rax
jbe    199d <msgpackclen_msg_buf_read_elem+0x87d>
movq   $0x0,-0x8(%rbp)
jmp    1a94 <msgpackclen_msg_buf_read_elem+0x974>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%rcx
mov    (%rax,%rcx,1),%eax
and    $0xff000000,%eax
shr    $0x18,%eax
mov    -0x10(%rbp),%rcx
mov    -0x18(%rbp),%rdx
mov    (%rcx,%rdx,1),%ecx
and    $0xff0000,%ecx
sar    $0x8,%ecx
or     %ecx,%eax
mov    -0x10(%rbp),%rcx
mov    -0x18(%rbp),%rdx
mov    (%rcx,%rdx,1),%ecx
and    $0xff00,%ecx
shl    $0x8,%ecx
or     %ecx,%eax
mov    -0x10(%rbp),%rcx
mov    -0x18(%rbp),%rdx
mov    (%rcx,%rdx,1),%ecx
and    $0xff,%ecx
shl    $0x18,%ecx
or     %ecx,%eax
mov    %eax,-0x30(%rbp)
cmpl   $0x0,-0x30(%rbp)
jne    1a0c <msgpackclen_msg_buf_read_elem+0x8ec>
movq   $0x5,-0x8(%rbp)
jmp    1a94 <msgpackclen_msg_buf_read_elem+0x974>
mov    -0x10(%rbp),%rdi
mov    -0x18(%rbp),%rsi
add    $0x2,%rsi
mov    -0x20(%rbp),%rdx
mov    -0x30(%rbp),%ecx
shl    $0x1,%ecx
mov    -0x28(%rbp),%r8
call   1040 <msgpackclen_msg_buf_read_elems@plt>
mov    %rax,-0x38(%rbp)
cmpq   $0x0,-0x38(%rbp)
jbe    1a4b <msgpackclen_msg_buf_read_elem+0x92b>
mov    -0x38(%rbp),%rax
add    $0x5,%rax
mov    %rax,-0x68(%rbp)
jmp    1a56 <msgpackclen_msg_buf_read_elem+0x936>
xor    %eax,%eax
mov    %rax,-0x68(%rbp)
jmp    1a56 <msgpackclen_msg_buf_read_elem+0x936>
mov    -0x68(%rbp),%rax
mov    %rax,-0x8(%rbp)
jmp    1a94 <msgpackclen_msg_buf_read_elem+0x974>
movzbl -0x29(%rbp),%eax
cmp    $0xe0,%eax
jl     1a7f <msgpackclen_msg_buf_read_elem+0x95f>
movq   $0x1,-0x8(%rbp)
jmp    1a94 <msgpackclen_msg_buf_read_elem+0x974>
mov    -0x28(%rbp),%rdi
movzbl -0x29(%rbp),%esi
call   1030 <msgpackclen_msg_buf_invalid_type@plt>
movq   $0x0,-0x8(%rbp)
mov    -0x8(%rbp),%rax
add    $0x70,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<msgpackclen_msg_buf_read_elem>:
push   %rax
cmp    %rdx,%rsi
jae    129a <msgpackclen_msg_buf_read_elem+0x17a>
mov    %rcx,%r8
movzbl (%rdi,%rsi,1),%ecx
mov    $0x1,%eax
test   %cl,%cl
js     113c <msgpackclen_msg_buf_read_elem+0x1c>
pop    %rcx
ret
lea    0x1(%rsi),%r9
cmp    $0x8f,%cl
ja     1151 <msgpackclen_msg_buf_read_elem+0x31>
xor    $0x80,%ecx
je     113a <msgpackclen_msg_buf_read_elem+0x1a>
add    %ecx,%ecx
jmp    115e <msgpackclen_msg_buf_read_elem+0x3e>
cmp    $0x9f,%cl
ja     1176 <msgpackclen_msg_buf_read_elem+0x56>
xor    $0x90,%ecx
je     113a <msgpackclen_msg_buf_read_elem+0x1a>
mov    %r9,%rsi
call   1040 <msgpackclen_msg_buf_read_elems@plt>
mov    %rax,%rcx
add    $0x1,%rax
test   %rcx,%rcx
cmove  %rcx,%rax
pop    %rcx
ret
cmp    $0xbf,%cl
ja     118b <msgpackclen_msg_buf_read_elem+0x6b>
xor    $0xa0,%rcx
add    $0x1,%rcx
mov    %rcx,%rax
pop    %rcx
ret
lea    0x40(%rcx),%r10d
cmp    $0x1f,%r10b
ja     120f <msgpackclen_msg_buf_read_elem+0xef>
movzbl %r10b,%r10d
lea    0xe60(%rip),%r11
movslq (%r11,%r10,4),%r10
add    %r11,%r10
jmp    *%r10
mov    $0x5,%eax
pop    %rcx
ret
mov    $0x9,%eax
pop    %rcx
ret
add    $0x2,%rsi
cmp    %rdx,%rsi
ja     129a <msgpackclen_msg_buf_read_elem+0x17a>
movslq (%rdi,%r9,1),%rax
add    $0x2,%rax
pop    %rcx
ret
add    $0x3,%rsi
cmp    %rdx,%rsi
ja     129a <msgpackclen_msg_buf_read_elem+0x17a>
movzwl (%rdi,%r9,1),%eax
rol    $0x8,%ax
movzwl %ax,%eax
add    $0x3,%rax
pop    %rcx
ret
add    $0x5,%rsi
cmp    %rdx,%rsi
ja     129a <msgpackclen_msg_buf_read_elem+0x17a>
mov    (%rdi,%r9,1),%eax
bswap  %eax
add    $0x5,%eax
cltq
pop    %rcx
ret
mov    $0x2,%eax
pop    %rcx
ret
cmp    $0xdf,%cl
ja     113a <msgpackclen_msg_buf_read_elem+0x1a>
mov    %r8,%rdi
mov    %ecx,%esi
call   1030 <msgpackclen_msg_buf_invalid_type@plt>
jmp    129a <msgpackclen_msg_buf_read_elem+0x17a>
add    $0x3,%rsi
cmp    %rdx,%rsi
ja     129a <msgpackclen_msg_buf_read_elem+0x17a>
movzwl (%rdi,%r9,1),%eax
test   %ax,%ax
je     128a <msgpackclen_msg_buf_read_elem+0x16a>
rol    $0x8,%ax
movzwl %ax,%ecx
jmp    1279 <msgpackclen_msg_buf_read_elem+0x159>
lea    0x5(%rsi),%rax
cmp    %rdx,%rax
ja     129a <msgpackclen_msg_buf_read_elem+0x17a>
mov    (%rdi,%r9,1),%ecx
test   %ecx,%ecx
je     11aa <msgpackclen_msg_buf_read_elem+0x8a>
bswap  %ecx
add    $0x3,%rsi
jmp    12b2 <msgpackclen_msg_buf_read_elem+0x192>
add    $0x3,%rsi
cmp    %rdx,%rsi
ja     129a <msgpackclen_msg_buf_read_elem+0x17a>
movzwl (%rdi,%r9,1),%eax
test   %ax,%ax
je     128a <msgpackclen_msg_buf_read_elem+0x16a>
rol    $0x8,%ax
movzwl %ax,%ecx
add    %ecx,%ecx
call   1040 <msgpackclen_msg_buf_read_elems@plt>
mov    %rax,%rcx
add    $0x3,%rax
jmp    116d <msgpackclen_msg_buf_read_elem+0x4d>
mov    $0x3,%eax
pop    %rcx
ret
lea    0x5(%rsi),%rax
cmp    %rdx,%rax
jbe    129e <msgpackclen_msg_buf_read_elem+0x17e>
xor    %eax,%eax
pop    %rcx
ret
mov    (%rdi,%r9,1),%ecx
test   %ecx,%ecx
je     11aa <msgpackclen_msg_buf_read_elem+0x8a>
bswap  %ecx
add    $0x3,%rsi
add    %ecx,%ecx
call   1040 <msgpackclen_msg_buf_read_elems@plt>
mov    %rax,%rcx
add    $0x5,%rax
jmp    116d <msgpackclen_msg_buf_read_elem+0x4d>

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

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