#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 scalar_t__ u_int8_t;

/* Variables and functions */
int ETH_ALEN;
int strlen(char *);
int parseMAC(char *str, u_int8_t *buf) {
  if (strlen(str) != ETH_ALEN * 3 - 1)
    return -1;
  for (int i = 0; i < ETH_ALEN; i++) {
    buf[i] = 0;
    if (str[i * 3] >= '0' && str[i * 3] <= '9') {
      buf[i] += (str[i * 3] - '0' + 0x00) * 0x10;
    }
    if (str[i * 3 + 1] >= '0' && str[i * 3 + 1] <= '9') {
      buf[i] += (str[i * 3 + 1] - '0' + 0x00) * 0x01;
    }
    if (str[i * 3] >= 'a' && str[i * 3] <= 'z') {
      buf[i] += (str[i * 3] - 'a' + 0x0a) * 0x10;
    }
    if (str[i * 3 + 1] >= 'a' && str[i * 3 + 1] <= 'z') {
      buf[i] += (str[i * 3 + 1] - 'a' + 0x0a) * 0x01;
    }
    if (str[i * 3] >= 'A' && str[i * 3] <= 'Z') {
      buf[i] += (str[i * 3] - 'A' + 0x0A) * 0x10;
    }
    if (str[i * 3 + 1] >= 'A' && str[i * 3 + 1] <= 'Z') {
      buf[i] += (str[i * 3 + 1] - 'A' + 0x0A) * 0x01;
    }
  }
  return 0;
}


x86 assembly (clang, -O0):
<parseMAC>:
push   %rbp
mov    %rsp,%rbp
sub    $0x20,%rsp
mov    %rdi,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
mov    -0x10(%rbp),%rdi
call   1030 <strlen@plt>
mov    0x2eb8(%rip),%rcx
imul   $0x3,(%rcx),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
je     114a <parseMAC+0x3a>
movl   $0xffffffff,-0x4(%rbp)
jmp    13ca <parseMAC+0x2ba>
movl   $0x0,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
mov    0x2e8d(%rip),%rcx
cmp    (%rcx),%eax
jge    13c3 <parseMAC+0x2b3>
mov    -0x18(%rbp),%rax
movslq -0x1c(%rbp),%rcx
movq   $0x0,(%rax,%rcx,8)
mov    -0x10(%rbp),%rax
imul   $0x3,-0x1c(%rbp),%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x30,%eax
jl     11ce <parseMAC+0xbe>
mov    -0x10(%rbp),%rax
imul   $0x3,-0x1c(%rbp),%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x39,%eax
jg     11ce <parseMAC+0xbe>
mov    -0x10(%rbp),%rax
imul   $0x3,-0x1c(%rbp),%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
sub    $0x30,%eax
add    $0x0,%eax
shl    $0x4,%eax
movslq %eax,%rdx
mov    -0x18(%rbp),%rax
movslq -0x1c(%rbp),%rcx
add    (%rax,%rcx,8),%rdx
mov    %rdx,(%rax,%rcx,8)
mov    -0x10(%rbp),%rax
imul   $0x3,-0x1c(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x30,%eax
jl     1232 <parseMAC+0x122>
mov    -0x10(%rbp),%rax
imul   $0x3,-0x1c(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x39,%eax
jg     1232 <parseMAC+0x122>
mov    -0x10(%rbp),%rax
imul   $0x3,-0x1c(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
sub    $0x30,%eax
add    $0x0,%eax
shl    $0x0,%eax
movslq %eax,%rdx
mov    -0x18(%rbp),%rax
movslq -0x1c(%rbp),%rcx
add    (%rax,%rcx,8),%rdx
mov    %rdx,(%rax,%rcx,8)
mov    -0x10(%rbp),%rax
imul   $0x3,-0x1c(%rbp),%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x61,%eax
jl     128d <parseMAC+0x17d>
mov    -0x10(%rbp),%rax
imul   $0x3,-0x1c(%rbp),%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x7a,%eax
jg     128d <parseMAC+0x17d>
mov    -0x10(%rbp),%rax
imul   $0x3,-0x1c(%rbp),%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
sub    $0x61,%eax
add    $0xa,%eax
shl    $0x4,%eax
movslq %eax,%rdx
mov    -0x18(%rbp),%rax
movslq -0x1c(%rbp),%rcx
add    (%rax,%rcx,8),%rdx
mov    %rdx,(%rax,%rcx,8)
mov    -0x10(%rbp),%rax
imul   $0x3,-0x1c(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x61,%eax
jl     12f1 <parseMAC+0x1e1>
mov    -0x10(%rbp),%rax
imul   $0x3,-0x1c(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x7a,%eax
jg     12f1 <parseMAC+0x1e1>
mov    -0x10(%rbp),%rax
imul   $0x3,-0x1c(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
sub    $0x61,%eax
add    $0xa,%eax
shl    $0x0,%eax
movslq %eax,%rdx
mov    -0x18(%rbp),%rax
movslq -0x1c(%rbp),%rcx
add    (%rax,%rcx,8),%rdx
mov    %rdx,(%rax,%rcx,8)
mov    -0x10(%rbp),%rax
imul   $0x3,-0x1c(%rbp),%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x41,%eax
jl     134c <parseMAC+0x23c>
mov    -0x10(%rbp),%rax
imul   $0x3,-0x1c(%rbp),%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x5a,%eax
jg     134c <parseMAC+0x23c>
mov    -0x10(%rbp),%rax
imul   $0x3,-0x1c(%rbp),%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
sub    $0x41,%eax
add    $0xa,%eax
shl    $0x4,%eax
movslq %eax,%rdx
mov    -0x18(%rbp),%rax
movslq -0x1c(%rbp),%rcx
add    (%rax,%rcx,8),%rdx
mov    %rdx,(%rax,%rcx,8)
mov    -0x10(%rbp),%rax
imul   $0x3,-0x1c(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x41,%eax
jl     13b0 <parseMAC+0x2a0>
mov    -0x10(%rbp),%rax
imul   $0x3,-0x1c(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x5a,%eax
jg     13b0 <parseMAC+0x2a0>
mov    -0x10(%rbp),%rax
imul   $0x3,-0x1c(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
sub    $0x41,%eax
add    $0xa,%eax
shl    $0x0,%eax
movslq %eax,%rdx
mov    -0x18(%rbp),%rax
movslq -0x1c(%rbp),%rcx
add    (%rax,%rcx,8),%rdx
mov    %rdx,(%rax,%rcx,8)
jmp    13b5 <parseMAC+0x2a5>
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    1151 <parseMAC+0x41>
movl   $0x0,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x20,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<parseMAC>:
push   %r14
push   %rbx
push   %rax
mov    %rsi,%r14
mov    %rdi,%rbx
call   1030 <strlen@plt>
mov    %eax,%ecx
mov    0x2ec0(%rip),%rax
mov    (%rax),%r8d
lea    (%r8,%r8,2),%esi
add    $0xffffffff,%esi
mov    $0xffffffff,%eax
cmp    %esi,%ecx
jne    123c <parseMAC+0x12c>
test   %r8d,%r8d
jle    123a <parseMAC+0x12a>
mov    $0xfffffa90,%eax
add    $0x1,%rbx
xor    %ecx,%ecx
jmp    1171 <parseMAC+0x61>
cs nopw 0x0(%rax,%rax,1)
nop
add    $0x1,%rcx
add    $0x3,%rbx
cmp    %rcx,%r8
je     123a <parseMAC+0x12a>
movq   $0x0,(%r14,%rcx,8)
movzbl -0x1(%rbx),%esi
lea    -0x30(%rsi),%edi
cmp    $0x9,%dil
ja     11a0 <parseMAC+0x90>
shl    $0x4,%esi
add    %eax,%esi
add    $0x270,%esi
and    $0xfffffff0,%esi
mov    %rsi,(%r14,%rcx,8)
jmp    11a2 <parseMAC+0x92>
nopw   0x0(%rax,%rax,1)
xor    %esi,%esi
movzbl (%rbx),%edi
lea    -0x30(%rdi),%edx
cmp    $0x9,%dl
ja     11bd <parseMAC+0xad>
lea    (%rax,%rdi,1),%edx
add    $0x540,%edx
add    %rdx,%rsi
mov    %rsi,(%r14,%rcx,8)
movzbl -0x1(%rbx),%edi
lea    -0x61(%rdi),%edx
cmp    $0x19,%dl
ja     11d9 <parseMAC+0xc9>
shl    $0x4,%edi
lea    (%rax,%rdi,1),%edx
and    $0xfffffff0,%edx
add    %rdx,%rsi
mov    %rsi,(%r14,%rcx,8)
movzbl (%rbx),%edi
lea    -0x61(%rdi),%edx
cmp    $0x19,%dl
ja     11f4 <parseMAC+0xe4>
lea    (%rax,%rdi,1),%edx
add    $0x519,%edx
add    %rdx,%rsi
mov    %rsi,(%r14,%rcx,8)
movzbl -0x1(%rbx),%edi
lea    -0x41(%rdi),%edx
cmp    $0x19,%dl
ja     1216 <parseMAC+0x106>
shl    $0x4,%edi
lea    (%rax,%rdi,1),%edx
add    $0x200,%edx
and    $0xfffffff0,%edx
add    %rdx,%rsi
mov    %rsi,(%r14,%rcx,8)
movzbl (%rbx),%edi
lea    -0x41(%rdi),%edx
cmp    $0x19,%dl
ja     1160 <parseMAC+0x50>
lea    (%rax,%rdi,1),%edx
add    $0x539,%edx
add    %rdx,%rsi
mov    %rsi,(%r14,%rcx,8)
jmp    1160 <parseMAC+0x50>
xor    %eax,%eax
add    $0x8,%rsp
pop    %rbx
pop    %r14
ret

LLVM IR (-O0):
@ETH_ALEN = global i32 0
define i32 @parseMAC(i8* %0, i64* %1) {
%3 = alloca i32
%4 = alloca i8*
%5 = alloca i64*
%6 = alloca i32
store i8* %0, i8** %4
store i64* %1, i64** %5
%7 = load i8*, i8** %4
%8 = call i32 @strlen(i8* %7)
%9 = load i32, i32* @ETH_ALEN
%10 = mul nsw i32 %9, 3
%11 = sub nsw i32 %10, 1
%12 = icmp ne i32 %8, %11
br i1 %12, label %13, label %14
13: ; preds = %2
store i32 -1, i32* %3
br label %253
14: ; preds = %2
store i32 0, i32* %6
br label %15
15: ; preds = %249, %14
%16 = load i32, i32* %6
%17 = load i32, i32* @ETH_ALEN
%18 = icmp slt i32 %16, %17
br i1 %18, label %19, label %252
19: ; preds = %15
%20 = load i64*, i64** %5
%21 = load i32, i32* %6
%22 = sext i32 %21 to i64
%23 = getelementptr inbounds i64, i64* %20, i64 %22
store i64 0, i64* %23
%24 = load i8*, i8** %4
%25 = load i32, i32* %6
%26 = mul nsw i32 %25, 3
%27 = sext i32 %26 to i64
%28 = getelementptr inbounds i8, i8* %24, i64 %27
%29 = load i8, i8* %28
%30 = sext i8 %29 to i32
%31 = icmp sge i32 %30, 48
br i1 %31, label %32, label %59
32: ; preds = %19
%33 = load i8*, i8** %4
%34 = load i32, i32* %6
%35 = mul nsw i32 %34, 3
%36 = sext i32 %35 to i64
%37 = getelementptr inbounds i8, i8* %33, i64 %36
%38 = load i8, i8* %37
%39 = sext i8 %38 to i32
%40 = icmp sle i32 %39, 57
br i1 %40, label %41, label %59
41: ; preds = %32
%42 = load i8*, i8** %4
%43 = load i32, i32* %6
%44 = mul nsw i32 %43, 3
%45 = sext i32 %44 to i64
%46 = getelementptr inbounds i8, i8* %42, i64 %45
%47 = load i8, i8* %46
%48 = sext i8 %47 to i32
%49 = sub nsw i32 %48, 48
%50 = add nsw i32 %49, 0
%51 = mul nsw i32 %50, 16
%52 = sext i32 %51 to i64
%53 = load i64*, i64** %5
%54 = load i32, i32* %6
%55 = sext i32 %54 to i64
%56 = getelementptr inbounds i64, i64* %53, i64 %55
%57 = load i64, i64* %56
%58 = add nsw i64 %57, %52
store i64 %58, i64* %56
br label %59
59: ; preds = %41, %32, %19
%60 = load i8*, i8** %4
%61 = load i32, i32* %6
%62 = mul nsw i32 %61, 3
%63 = add nsw i32 %62, 1
%64 = sext i32 %63 to i64
%65 = getelementptr inbounds i8, i8* %60, i64 %64
%66 = load i8, i8* %65
%67 = sext i8 %66 to i32
%68 = icmp sge i32 %67, 48
br i1 %68, label %69, label %98
69: ; preds = %59
%70 = load i8*, i8** %4
%71 = load i32, i32* %6
%72 = mul nsw i32 %71, 3
%73 = add nsw i32 %72, 1
%74 = sext i32 %73 to i64
%75 = getelementptr inbounds i8, i8* %70, i64 %74
%76 = load i8, i8* %75
%77 = sext i8 %76 to i32
%78 = icmp sle i32 %77, 57
br i1 %78, label %79, label %98
79: ; preds = %69
%80 = load i8*, i8** %4
%81 = load i32, i32* %6
%82 = mul nsw i32 %81, 3
%83 = add nsw i32 %82, 1
%84 = sext i32 %83 to i64
%85 = getelementptr inbounds i8, i8* %80, i64 %84
%86 = load i8, i8* %85
%87 = sext i8 %86 to i32
%88 = sub nsw i32 %87, 48
%89 = add nsw i32 %88, 0
%90 = mul nsw i32 %89, 1
%91 = sext i32 %90 to i64
%92 = load i64*, i64** %5
%93 = load i32, i32* %6
%94 = sext i32 %93 to i64
%95 = getelementptr inbounds i64, i64* %92, i64 %94
%96 = load i64, i64* %95
%97 = add nsw i64 %96, %91
store i64 %97, i64* %95
br label %98
98: ; preds = %79, %69, %59
%99 = load i8*, i8** %4
%100 = load i32, i32* %6
%101 = mul nsw i32 %100, 3
%102 = sext i32 %101 to i64
%103 = getelementptr inbounds i8, i8* %99, i64 %102
%104 = load i8, i8* %103
%105 = sext i8 %104 to i32
%106 = icmp sge i32 %105, 97
br i1 %106, label %107, label %134
107: ; preds = %98
%108 = load i8*, i8** %4
%109 = load i32, i32* %6
%110 = mul nsw i32 %109, 3
%111 = sext i32 %110 to i64
%112 = getelementptr inbounds i8, i8* %108, i64 %111
%113 = load i8, i8* %112
%114 = sext i8 %113 to i32
%115 = icmp sle i32 %114, 122
br i1 %115, label %116, label %134
116: ; preds = %107
%117 = load i8*, i8** %4
%118 = load i32, i32* %6
%119 = mul nsw i32 %118, 3
%120 = sext i32 %119 to i64
%121 = getelementptr inbounds i8, i8* %117, i64 %120
%122 = load i8, i8* %121
%123 = sext i8 %122 to i32
%124 = sub nsw i32 %123, 97
%125 = add nsw i32 %124, 10
%126 = mul nsw i32 %125, 16
%127 = sext i32 %126 to i64
%128 = load i64*, i64** %5
%129 = load i32, i32* %6
%130 = sext i32 %129 to i64
%131 = getelementptr inbounds i64, i64* %128, i64 %130
%132 = load i64, i64* %131
%133 = add nsw i64 %132, %127
store i64 %133, i64* %131
br label %134
134: ; preds = %116, %107, %98
%135 = load i8*, i8** %4
%136 = load i32, i32* %6
%137 = mul nsw i32 %136, 3
%138 = add nsw i32 %137, 1
%139 = sext i32 %138 to i64
%140 = getelementptr inbounds i8, i8* %135, i64 %139
%141 = load i8, i8* %140
%142 = sext i8 %141 to i32
%143 = icmp sge i32 %142, 97
br i1 %143, label %144, label %173
144: ; preds = %134
%145 = load i8*, i8** %4
%146 = load i32, i32* %6
%147 = mul nsw i32 %146, 3
%148 = add nsw i32 %147, 1
%149 = sext i32 %148 to i64
%150 = getelementptr inbounds i8, i8* %145, i64 %149
%151 = load i8, i8* %150
%152 = sext i8 %151 to i32
%153 = icmp sle i32 %152, 122
br i1 %153, label %154, label %173
154: ; preds = %144
%155 = load i8*, i8** %4
%156 = load i32, i32* %6
%157 = mul nsw i32 %156, 3
%158 = add nsw i32 %157, 1
%159 = sext i32 %158 to i64
%160 = getelementptr inbounds i8, i8* %155, i64 %159
%161 = load i8, i8* %160
%162 = sext i8 %161 to i32
%163 = sub nsw i32 %162, 97
%164 = add nsw i32 %163, 10
%165 = mul nsw i32 %164, 1
%166 = sext i32 %165 to i64
%167 = load i64*, i64** %5
%168 = load i32, i32* %6
%169 = sext i32 %168 to i64
%170 = getelementptr inbounds i64, i64* %167, i64 %169
%171 = load i64, i64* %170
%172 = add nsw i64 %171, %166
store i64 %172, i64* %170
br label %173
173: ; preds = %154, %144, %134
%174 = load i8*, i8** %4
%175 = load i32, i32* %6
%176 = mul nsw i32 %175, 3
%177 = sext i32 %176 to i64
%178 = getelementptr inbounds i8, i8* %174, i64 %177
%179 = load i8, i8* %178
%180 = sext i8 %179 to i32
%181 = icmp sge i32 %180, 65
br i1 %181, label %182, label %209
182: ; preds = %173
%183 = load i8*, i8** %4
%184 = load i32, i32* %6
%185 = mul nsw i32 %184, 3
%186 = sext i32 %185 to i64
%187 = getelementptr inbounds i8, i8* %183, i64 %186
%188 = load i8, i8* %187
%189 = sext i8 %188 to i32
%190 = icmp sle i32 %189, 90
br i1 %190, label %191, label %209
191: ; preds = %182
%192 = load i8*, i8** %4
%193 = load i32, i32* %6
%194 = mul nsw i32 %193, 3
%195 = sext i32 %194 to i64
%196 = getelementptr inbounds i8, i8* %192, i64 %195
%197 = load i8, i8* %196
%198 = sext i8 %197 to i32
%199 = sub nsw i32 %198, 65
%200 = add nsw i32 %199, 10
%201 = mul nsw i32 %200, 16
%202 = sext i32 %201 to i64
%203 = load i64*, i64** %5
%204 = load i32, i32* %6
%205 = sext i32 %204 to i64
%206 = getelementptr inbounds i64, i64* %203, i64 %205
%207 = load i64, i64* %206
%208 = add nsw i64 %207, %202
store i64 %208, i64* %206
br label %209
209: ; preds = %191, %182, %173
%210 = load i8*, i8** %4
%211 = load i32, i32* %6
%212 = mul nsw i32 %211, 3
%213 = add nsw i32 %212, 1
%214 = sext i32 %213 to i64
%215 = getelementptr inbounds i8, i8* %210, i64 %214
%216 = load i8, i8* %215
%217 = sext i8 %216 to i32
%218 = icmp sge i32 %217, 65
br i1 %218, label %219, label %248
219: ; preds = %209
%220 = load i8*, i8** %4
%221 = load i32, i32* %6
%222 = mul nsw i32 %221, 3
%223 = add nsw i32 %222, 1
%224 = sext i32 %223 to i64
%225 = getelementptr inbounds i8, i8* %220, i64 %224
%226 = load i8, i8* %225
%227 = sext i8 %226 to i32
%228 = icmp sle i32 %227, 90
br i1 %228, label %229, label %248
229: ; preds = %219
%230 = load i8*, i8** %4
%231 = load i32, i32* %6
%232 = mul nsw i32 %231, 3
%233 = add nsw i32 %232, 1
%234 = sext i32 %233 to i64
%235 = getelementptr inbounds i8, i8* %230, i64 %234
%236 = load i8, i8* %235
%237 = sext i8 %236 to i32
%238 = sub nsw i32 %237, 65
%239 = add nsw i32 %238, 10
%240 = mul nsw i32 %239, 1
%241 = sext i32 %240 to i64
%242 = load i64*, i64** %5
%243 = load i32, i32* %6
%244 = sext i32 %243 to i64
%245 = getelementptr inbounds i64, i64* %242, i64 %244
%246 = load i64, i64* %245
%247 = add nsw i64 %246, %241
store i64 %247, i64* %245
br label %248
248: ; preds = %229, %219, %209
br label %249
249: ; preds = %248
%250 = load i32, i32* %6
%251 = add nsw i32 %250, 1
store i32 %251, i32* %6
br label %15
252: ; preds = %15
store i32 0, i32* %3
br label %253
253: ; preds = %252, %13
%254 = load i32, i32* %3
ret i32 %254
}

LLVM IR (-O2):
@ETH_ALEN = global i32 0
define i32 @parseMAC(i8* %0, i64* nocapture %1) {
%3 = tail call i32 @strlen(i8* %0)
%4 = load i32, i32* @ETH_ALEN
%5 = mul nsw i32 %4, 3
%6 = add nsw i32 %5, -1
%7 = icmp eq i32 %3, %6
br i1 %7, label %8, label %82
8: ; preds = %2
%9 = icmp sgt i32 %4, 0
br i1 %9, label %10, label %82
10: ; preds = %8
%11 = zext i32 %4 to i64
br label %12
12: ; preds = %10, %79
%13 = phi i64 [ 0, %10 ], [ %80, %79 ]
%14 = getelementptr inbounds i64, i64* %1, i64 %13
store i64 0, i64* %14
%15 = mul nuw nsw i64 %13, 3
%16 = getelementptr inbounds i8, i8* %0, i64 %15
%17 = load i8, i8* %16
%18 = add i8 %17, -48
%19 = icmp ult i8 %18, 10
br i1 %19, label %20, label %25
20: ; preds = %12
%21 = zext i8 %17 to i64
%22 = shl nuw nsw i64 %21, 4
%23 = add nuw nsw i64 %22, 4294966528
%24 = and i64 %23, 4294967280
store i64 %24, i64* %14
br label %25
25: ; preds = %20, %12
%26 = phi i64 [ %24, %20 ], [ 0, %12 ]
%27 = add nuw nsw i64 %15, 1
%28 = getelementptr inbounds i8, i8* %0, i64 %27
%29 = load i8, i8* %28
%30 = add i8 %29, -48
%31 = icmp ult i8 %30, 10
br i1 %31, label %32, label %37
32: ; preds = %25
%33 = zext i8 %29 to i64
%34 = add nuw nsw i64 %33, 4294967248
%35 = and i64 %34, 4294967295
%36 = add nuw nsw i64 %26, %35
store i64 %36, i64* %14
br label %37
37: ; preds = %32, %25
%38 = phi i64 [ %36, %32 ], [ %26, %25 ]
%39 = load i8, i8* %16
%40 = add i8 %39, -97
%41 = icmp ult i8 %40, 26
br i1 %41, label %42, label %48
42: ; preds = %37
%43 = zext i8 %39 to i64
%44 = shl nuw nsw i64 %43, 4
%45 = add nuw nsw i64 %44, 4294965904
%46 = and i64 %45, 4294967280
%47 = add nuw nsw i64 %38, %46
store i64 %47, i64* %14
br label %48
48: ; preds = %42, %37
%49 = phi i64 [ %47, %42 ], [ %38, %37 ]
%50 = load i8, i8* %28
%51 = add i8 %50, -97
%52 = icmp ult i8 %51, 26
br i1 %52, label %53, label %58
53: ; preds = %48
%54 = zext i8 %50 to i64
%55 = add nuw nsw i64 %54, 4294967209
%56 = and i64 %55, 4294967295
%57 = add nuw nsw i64 %49, %56
store i64 %57, i64* %14
br label %58
58: ; preds = %53, %48
%59 = phi i64 [ %57, %53 ], [ %49, %48 ]
%60 = load i8, i8* %16
%61 = add i8 %60, -65
%62 = icmp ult i8 %61, 26
br i1 %62, label %63, label %69
63: ; preds = %58
%64 = zext i8 %60 to i64
%65 = shl nuw nsw i64 %64, 4
%66 = add nuw nsw i64 %65, 4294966416
%67 = and i64 %66, 4294967280
%68 = add nuw nsw i64 %59, %67
store i64 %68, i64* %14
br label %69
69: ; preds = %63, %58
%70 = phi i64 [ %68, %63 ], [ %59, %58 ]
%71 = load i8, i8* %28
%72 = add i8 %71, -65
%73 = icmp ult i8 %72, 26
br i1 %73, label %74, label %79
74: ; preds = %69
%75 = zext i8 %71 to i64
%76 = add nuw nsw i64 %75, 4294967241
%77 = and i64 %76, 4294967295
%78 = add nuw nsw i64 %70, %77
store i64 %78, i64* %14
br label %79
79: ; preds = %69, %74
%80 = add nuw nsw i64 %13, 1
%81 = icmp eq i64 %80, %11
br i1 %81, label %82, label %12
82: ; preds = %79, %8, %2
%83 = phi i32 [ -1, %2 ], [ 0, %8 ], [ 0, %79 ]
ret i32 %83
}