#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 */
int FACOM_getDiscreteAddress(unsigned char, int, char *);
int /*<<< orphan*/ FACOM_intToHexString(unsigned char, char *);
int /*<<< orphan*/ FACOM_read(char *, int);
int FACOM_write(char *);
int FACOM_getDiscretes(unsigned char discreteType, int discreteNumber,
                       unsigned char discreteCount, unsigned char *data) {
  int error;
  int count = discreteCount == 0 ? 256 : discreteCount;
  char command[10];
  command[0] = '4';
  command[1] = '4';
  FACOM_intToHexString(discreteCount, &command[2]);
  error = FACOM_getDiscreteAddress(discreteType, discreteNumber, &command[4]);
  command[9] = '\0';
  if (error < 0)
    return error;
  error = FACOM_write(command);
  if (error < 0)
    return error;
  char recived[count + 10];
  FACOM_read(recived, count + 9);
  if (recived[5] > '0')
    return recived[5] == 'A' ? -0x5A : -0x50 - recived[5] + '0';
  size_t i;
  for (i = 0; i < count; i++)
    data[i] = recived[i + 6] - '0';
  return 0;
}


x86 assembly (clang, -O0):
<FACOM_getDiscretes>:
push   %rbp
mov    %rsp,%rbp
sub    $0x70,%rsp
mov    %dl,%al
mov    %dil,%dl
mov    %dl,-0x5(%rbp)
mov    %esi,-0xc(%rbp)
mov    %al,-0xd(%rbp)
mov    %rcx,-0x18(%rbp)
movzbl -0xd(%rbp),%eax
cmp    $0x0,%eax
jne    1174 <FACOM_getDiscretes+0x34>
mov    $0x100,%eax
mov    %eax,-0x54(%rbp)
jmp    117b <FACOM_getDiscretes+0x3b>
movzbl -0xd(%rbp),%eax
mov    %eax,-0x54(%rbp)
mov    -0x54(%rbp),%eax
mov    %eax,-0x20(%rbp)
movb   $0x34,-0x2a(%rbp)
movb   $0x34,-0x29(%rbp)
mov    -0xd(%rbp),%al
lea    -0x2a(%rbp),%rsi
add    $0x2,%rsi
movzbl %al,%edi
call   1050 <FACOM_intToHexString@plt>
mov    -0x5(%rbp),%al
mov    -0xc(%rbp),%esi
lea    -0x2a(%rbp),%rdx
add    $0x4,%rdx
movzbl %al,%edi
call   1030 <FACOM_getDiscreteAddress@plt>
mov    %eax,-0x1c(%rbp)
movb   $0x0,-0x21(%rbp)
cmpl   $0x0,-0x1c(%rbp)
jge    11ce <FACOM_getDiscretes+0x8e>
mov    -0x1c(%rbp),%eax
mov    %eax,-0x4(%rbp)
jmp    12d5 <FACOM_getDiscretes+0x195>
lea    -0x2a(%rbp),%rdi
call   1040 <FACOM_write@plt>
mov    %eax,-0x1c(%rbp)
cmpl   $0x0,-0x1c(%rbp)
jge    11ef <FACOM_getDiscretes+0xaf>
mov    -0x1c(%rbp),%eax
mov    %eax,-0x4(%rbp)
jmp    12d5 <FACOM_getDiscretes+0x195>
mov    -0x20(%rbp),%eax
add    $0xa,%eax
mov    %rsp,%rcx
mov    %rcx,-0x38(%rbp)
mov    %rax,%rcx
add    $0xf,%rcx
and    $0xfffffffffffffff0,%rcx
mov    %rsp,%rdi
sub    %rcx,%rdi
mov    %rdi,-0x60(%rbp)
mov    %rdi,%rsp
mov    %rax,-0x40(%rbp)
mov    -0x20(%rbp),%esi
add    $0x9,%esi
call   1060 <FACOM_read@plt>
mov    -0x60(%rbp),%rax
movsbl 0x5(%rax),%eax
cmp    $0x30,%eax
jle    1279 <FACOM_getDiscretes+0x139>
mov    -0x60(%rbp),%rax
movsbl 0x5(%rax),%eax
cmp    $0x41,%eax
jne    1252 <FACOM_getDiscretes+0x112>
mov    $0xffffffa6,%eax
mov    %eax,-0x64(%rbp)
jmp    1267 <FACOM_getDiscretes+0x127>
mov    -0x60(%rbp),%rax
movsbl 0x5(%rax),%ecx
mov    $0xffffffb0,%eax
sub    %ecx,%eax
add    $0x30,%eax
mov    %eax,-0x64(%rbp)
mov    -0x64(%rbp),%eax
mov    %eax,-0x4(%rbp)
movl   $0x1,-0x44(%rbp)
jmp    12ce <FACOM_getDiscretes+0x18e>
movq   $0x0,-0x50(%rbp)
mov    -0x50(%rbp),%rax
movslq -0x20(%rbp),%rcx
cmp    %rcx,%rax
jae    12c0 <FACOM_getDiscretes+0x180>
mov    -0x60(%rbp),%rax
mov    -0x50(%rbp),%rcx
movsbl 0x6(%rax,%rcx,1),%eax
sub    $0x30,%eax
mov    %al,%dl
mov    -0x18(%rbp),%rax
mov    -0x50(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x50(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x50(%rbp)
jmp    1281 <FACOM_getDiscretes+0x141>
movl   $0x0,-0x4(%rbp)
movl   $0x1,-0x44(%rbp)
mov    -0x38(%rbp),%rax
mov    %rax,%rsp
mov    -0x4(%rbp),%eax
mov    %rbp,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<FACOM_getDiscretes>:
push   %rbp
mov    %rsp,%rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x18,%rsp
mov    %rcx,%r14
mov    %esi,%r15d
mov    %edi,%ebx
test   %edx,%edx
mov    $0x100,%r12d
cmovne %edx,%r12d
movw   $0x3434,-0x3a(%rbp)
lea    -0x38(%rbp),%rsi
mov    %edx,%edi
call   1050 <FACOM_intToHexString@plt>
lea    -0x36(%rbp),%rdx
mov    %ebx,%edi
mov    %r15d,%esi
call   1030 <FACOM_getDiscreteAddress@plt>
movb   $0x0,-0x31(%rbp)
test   %eax,%eax
js     134a <FACOM_getDiscretes+0x20a>
lea    -0x3a(%rbp),%rdi
call   1040 <FACOM_write@plt>
test   %eax,%eax
js     134a <FACOM_getDiscretes+0x20a>
mov    %rsp,-0x30(%rbp)
lea    0x19(%r12),%ebx
and    $0xfffffff0,%ebx
mov    %rsp,%r15
mov    %r15,%r13
sub    %rbx,%r13
mov    %r13,%rsp
lea    0x9(%r12),%esi
mov    %r13,%rdi
call   1060 <FACOM_read@plt>
neg    %rbx
movzbl 0x5(%r15,%rbx,1),%eax
cmp    $0x30,%al
jle    11ed <FACOM_getDiscretes+0xad>
mov    $0xffffffe0,%ecx
sub    %eax,%ecx
cmp    $0x41,%al
mov    $0xffffffa6,%eax
cmovne %ecx,%eax
mov    -0x30(%rbp),%rbx
jmp    1347 <FACOM_getDiscretes+0x207>
test   %r12d,%r12d
je     1206 <FACOM_getDiscretes+0xc6>
mov    %r12d,%ecx
cmp    $0x8,%r12d
jae    1211 <FACOM_getDiscretes+0xd1>
xor    %edx,%edx
mov    -0x30(%rbp),%rbx
jmp    1330 <FACOM_getDiscretes+0x1f0>
xor    %eax,%eax
mov    -0x30(%rbp),%rbx
jmp    1347 <FACOM_getDiscretes+0x207>
cmp    $0x20,%r12d
jae    1222 <FACOM_getDiscretes+0xe2>
xor    %edx,%edx
mov    -0x30(%rbp),%rbx
jmp    12e9 <FACOM_getDiscretes+0x1a9>
mov    %ecx,%edx
and    $0xffffffe0,%edx
lea    -0x20(%rdx),%rax
mov    %rax,%rsi
shr    $0x5,%rsi
add    $0x1,%rsi
test   %rax,%rax
mov    -0x30(%rbp),%rbx
je     12a3 <FACOM_getDiscretes+0x163>
mov    %rsi,%rdi
and    $0xfffffffffffffffe,%rdi
xor    %eax,%eax
movdqa 0xdb0(%rip),%xmm0
movdqu 0x6(%r13,%rax,1),%xmm1
movdqu 0x16(%r13,%rax,1),%xmm2
paddb  %xmm0,%xmm1
paddb  %xmm0,%xmm2
movdqu %xmm1,(%r14,%rax,1)
movdqu %xmm2,0x10(%r14,%rax,1)
movdqu 0x26(%r13,%rax,1),%xmm1
movdqu 0x36(%r13,%rax,1),%xmm2
paddb  %xmm0,%xmm1
paddb  %xmm0,%xmm2
movdqu %xmm1,0x20(%r14,%rax,1)
movdqu %xmm2,0x30(%r14,%rax,1)
add    $0x40,%rax
add    $0xfffffffffffffffe,%rdi
jne    1250 <FACOM_getDiscretes+0x110>
jmp    12a5 <FACOM_getDiscretes+0x165>
xor    %eax,%eax
test   $0x1,%sil
je     12dd <FACOM_getDiscretes+0x19d>
mov    %rax,%rsi
or     $0x6,%rsi
movdqu 0x0(%r13,%rsi,1),%xmm0
movdqu 0x10(%r13,%rsi,1),%xmm1
movdqa 0xd38(%rip),%xmm2
paddb  %xmm2,%xmm0
paddb  %xmm2,%xmm1
movdqu %xmm0,(%r14,%rax,1)
movdqu %xmm1,0x10(%r14,%rax,1)
xor    %eax,%eax
cmp    %rcx,%rdx
je     1347 <FACOM_getDiscretes+0x207>
test   $0x18,%cl
je     1330 <FACOM_getDiscretes+0x1f0>
mov    %rdx,%rax
mov    %ecx,%edx
and    $0xfffffff8,%edx
movdqa 0xd17(%rip),%xmm0
nopl   0x0(%rax)
movq   0x6(%r13,%rax,1),%xmm1
paddb  %xmm0,%xmm1
movq   %xmm1,(%r14,%rax,1)
add    $0x8,%rax
cmp    %rax,%rdx
jne    1300 <FACOM_getDiscretes+0x1c0>
xor    %eax,%eax
cmp    %rcx,%rdx
je     1347 <FACOM_getDiscretes+0x207>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
movzbl 0x6(%r13,%rdx,1),%eax
add    $0xd0,%al
mov    %al,(%r14,%rdx,1)
add    $0x1,%rdx
cmp    %rdx,%rcx
jne    1330 <FACOM_getDiscretes+0x1f0>
xor    %eax,%eax
mov    %rbx,%rsp
lea    -0x28(%rbp),%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
define i32 @FACOM_getDiscretes(i8 zeroext %0, i32 %1, i8 zeroext %2, i8* %3) {
%5 = alloca i32
%6 = alloca i8
%7 = alloca i32
%8 = alloca i8
%9 = alloca i8*
%10 = alloca i32
%11 = alloca i32
%12 = alloca [10 x i8]
%13 = alloca i8*
%14 = alloca i64
%15 = alloca i32
%16 = alloca i64
store i8 %0, i8* %6
store i32 %1, i32* %7
store i8 %2, i8* %8
store i8* %3, i8** %9
%17 = load i8, i8* %8
%18 = zext i8 %17 to i32
%19 = icmp eq i32 %18, 0
br i1 %19, label %20, label %21
20: ; preds = %4
br label %24
21: ; preds = %4
%22 = load i8, i8* %8
%23 = zext i8 %22 to i32
br label %24
24: ; preds = %21, %20
%25 = phi i32 [ 256, %20 ], [ %23, %21 ]
store i32 %25, i32* %11
%26 = getelementptr inbounds [10 x i8], [10 x i8]* %12, i64 0, i64 0
store i8 52, i8* %26
%27 = getelementptr inbounds [10 x i8], [10 x i8]* %12, i64 0, i64 1
store i8 52, i8* %27
%28 = load i8, i8* %8
%29 = getelementptr inbounds [10 x i8], [10 x i8]* %12, i64 0, i64 2
%30 = call i32 @FACOM_intToHexString(i8 zeroext %28, i8* %29)
%31 = load i8, i8* %6
%32 = load i32, i32* %7
%33 = getelementptr inbounds [10 x i8], [10 x i8]* %12, i64 0, i64 4
%34 = call i32 @FACOM_getDiscreteAddress(i8 zeroext %31, i32 %32, i8* %33)
store i32 %34, i32* %10
%35 = getelementptr inbounds [10 x i8], [10 x i8]* %12, i64 0, i64 9
store i8 0, i8* %35
%36 = load i32, i32* %10
%37 = icmp slt i32 %36, 0
br i1 %37, label %38, label %40
38: ; preds = %24
%39 = load i32, i32* %10
store i32 %39, i32* %5
br label %97
40: ; preds = %24
%41 = getelementptr inbounds [10 x i8], [10 x i8]* %12, i64 0, i64 0
%42 = call i32 @FACOM_write(i8* %41)
store i32 %42, i32* %10
%43 = load i32, i32* %10
%44 = icmp slt i32 %43, 0
br i1 %44, label %45, label %47
45: ; preds = %40
%46 = load i32, i32* %10
store i32 %46, i32* %5
br label %97
47: ; preds = %40
%48 = load i32, i32* %11
%49 = add nsw i32 %48, 10
%50 = zext i32 %49 to i64
%51 = call i8* @llvm.stacksave()
store i8* %51, i8** %13
%52 = alloca i8, i64 %50
store i64 %50, i64* %14
%53 = load i32, i32* %11
%54 = add nsw i32 %53, 9
%55 = call i32 @FACOM_read(i8* %52, i32 %54)
%56 = getelementptr inbounds i8, i8* %52, i64 5
%57 = load i8, i8* %56
%58 = sext i8 %57 to i32
%59 = icmp sgt i32 %58, 48
br i1 %59, label %60, label %74
60: ; preds = %47
%61 = getelementptr inbounds i8, i8* %52, i64 5
%62 = load i8, i8* %61
%63 = sext i8 %62 to i32
%64 = icmp eq i32 %63, 65
br i1 %64, label %65, label %66
65: ; preds = %60
br label %72
66: ; preds = %60
%67 = getelementptr inbounds i8, i8* %52, i64 5
%68 = load i8, i8* %67
%69 = sext i8 %68 to i32
%70 = sub nsw i32 -80, %69
%71 = add nsw i32 %70, 48
br label %72
72: ; preds = %66, %65
%73 = phi i32 [ -90, %65 ], [ %71, %66 ]
store i32 %73, i32* %5
store i32 1, i32* %15
br label %95
74: ; preds = %47
store i64 0, i64* %16
br label %75
75: ; preds = %91, %74
%76 = load i64, i64* %16
%77 = load i32, i32* %11
%78 = sext i32 %77 to i64
%79 = icmp ult i64 %76, %78
br i1 %79, label %80, label %94
80: ; preds = %75
%81 = load i64, i64* %16
%82 = add i64 %81, 6
%83 = getelementptr inbounds i8, i8* %52, i64 %82
%84 = load i8, i8* %83
%85 = sext i8 %84 to i32
%86 = sub nsw i32 %85, 48
%87 = trunc i32 %86 to i8
%88 = load i8*, i8** %9
%89 = load i64, i64* %16
%90 = getelementptr inbounds i8, i8* %88, i64 %89
store i8 %87, i8* %90
br label %91
91: ; preds = %80
%92 = load i64, i64* %16
%93 = add i64 %92, 1
store i64 %93, i64* %16
br label %75
94: ; preds = %75
store i32 0, i32* %5
store i32 1, i32* %15
br label %95
95: ; preds = %94, %72
%96 = load i8*, i8** %13
br label %97
97: ; preds = %95, %45, %38
%98 = load i32, i32* %5
ret i32 %98
}

LLVM IR (-O2):
define i32 @FACOM_getDiscretes(i8 zeroext %0, i32 %1, i8 zeroext %2, i8* nocapture writeonly %3) {
%5 = alloca [10 x i8]
%6 = zext i8 %2 to i32
%7 = icmp eq i8 %2, 0
%8 = select i1 %7, i32 256, i32 %6
%9 = getelementptr inbounds [10 x i8], [10 x i8]* %5, i64 0, i64 0
store i8 52, i8* %9
%10 = getelementptr inbounds [10 x i8], [10 x i8]* %5, i64 0, i64 1
store i8 52, i8* %10
%11 = getelementptr inbounds [10 x i8], [10 x i8]* %5, i64 0, i64 2
%12 = call i32 @FACOM_intToHexString(i8 zeroext %2, i8* %11)
%13 = getelementptr inbounds [10 x i8], [10 x i8]* %5, i64 0, i64 4
%14 = call i32 @FACOM_getDiscreteAddress(i8 zeroext %0, i32 %1, i8* %13)
%15 = getelementptr inbounds [10 x i8], [10 x i8]* %5, i64 0, i64 9
store i8 0, i8* %15
%16 = icmp slt i32 %14, 0
br i1 %16, label %135, label %17
17: ; preds = %4
%18 = call i32 @FACOM_write(i8* %9)
%19 = icmp slt i32 %18, 0
br i1 %19, label %135, label %20
20: ; preds = %17
%21 = add nuw nsw i32 %8, 10
%22 = zext i32 %21 to i64
%23 = call i8* @llvm.stacksave()
%24 = alloca i8, i64 %22
%25 = add nuw nsw i32 %8, 9
%26 = call i32 @FACOM_read(i8* %24, i32 %25)
%27 = getelementptr inbounds i8, i8* %24, i64 5
%28 = load i8, i8* %27
%29 = icmp sgt i8 %28, 48
br i1 %29, label %119, label %30
30: ; preds = %20
%31 = zext i32 %8 to i64
%32 = icmp eq i32 %8, 0
br i1 %32, label %133, label %33
33: ; preds = %30
%34 = icmp ult i32 %8, 8
br i1 %34, label %117, label %35
35: ; preds = %33
%36 = icmp ult i32 %8, 32
br i1 %36, label %101, label %37
37: ; preds = %35
%38 = and i64 %31, 480
%39 = add nsw i64 %38, -32
%40 = lshr exact i64 %39, 5
%41 = add nuw nsw i64 %40, 1
%42 = and i64 %41, 1
%43 = icmp eq i64 %39, 0
br i1 %43, label %79, label %44
44: ; preds = %37
%45 = and i64 %41, 1152921504606846974
br label %46
46: ; preds = %46, %44
%47 = phi i64 [ 0, %44 ], [ %76, %46 ]
%48 = phi i64 [ 0, %44 ], [ %77, %46 ]
%49 = or i64 %47, 6
%50 = getelementptr inbounds i8, i8* %24, i64 %49
%51 = bitcast i8* %50 to <16 x i8>*
%52 = load <16 x i8>, <16 x i8>* %51
%53 = getelementptr inbounds i8, i8* %50, i64 16
%54 = bitcast i8* %53 to <16 x i8>*
%55 = load <16 x i8>, <16 x i8>* %54
%56 = add <16 x i8> %52, <i8 -48, i8 -48, i8 -48, i8 -48, i8 -48, i8 -48, i8 -48, i8 -48, i8 -48, i8 -48, i8 -48, i8 -48, i8 -48, i8 -48, i8 -48, i8 -48>
%57 = add <16 x i8> %55, <i8 -48, i8 -48, i8 -48, i8 -48, i8 -48, i8 -48, i8 -48, i8 -48, i8 -48, i8 -48, i8 -48, i8 -48, i8 -48, i8 -48, i8 -48, i8 -48>
%58 = getelementptr inbounds i8, i8* %3, i64 %47
%59 = bitcast i8* %58 to <16 x i8>*
store <16 x i8> %56, <16 x i8>* %59
%60 = getelementptr inbounds i8, i8* %58, i64 16
%61 = bitcast i8* %60 to <16 x i8>*
store <16 x i8> %57, <16 x i8>* %61
%62 = or i64 %47, 32
%63 = or i64 %47, 38
%64 = getelementptr inbounds i8, i8* %24, i64 %63
%65 = bitcast i8* %64 to <16 x i8>*
%66 = load <16 x i8>, <16 x i8>* %65
%67 = getelementptr inbounds i8, i8* %64, i64 16
%68 = bitcast i8* %67 to <16 x i8>*
%69 = load <16 x i8>, <16 x i8>* %68
%70 = add <16 x i8> %66, <i8 -48, i8 -48, i8 -48, i8 -48, i8 -48, i8 -48, i8 -48, i8 -48, i8 -48, i8 -48, i8 -48, i8 -48, i8 -48, i8 -48, i8 -48, i8 -48>
%71 = add <16 x i8> %69, <i8 -48, i8 -48, i8 -48, i8 -48, i8 -48, i8 -48, i8 -48, i8 -48, i8 -48, i8 -48, i8 -48, i8 -48, i8 -48, i8 -48, i8 -48, i8 -48>
%72 = getelementptr inbounds i8, i8* %3, i64 %62
%73 = bitcast i8* %72 to <16 x i8>*
store <16 x i8> %70, <16 x i8>* %73
%74 = getelementptr inbounds i8, i8* %72, i64 16
%75 = bitcast i8* %74 to <16 x i8>*
store <16 x i8> %71, <16 x i8>* %75
%76 = add nuw i64 %47, 64
%77 = add i64 %48, 2
%78 = icmp eq i64 %77, %45
br i1 %78, label %79, label %46
79: ; preds = %46, %37
%80 = phi i64 [ 0, %37 ], [ %76, %46 ]
%81 = icmp eq i64 %42, 0
br i1 %81, label %96, label %82
82: ; preds = %79
%83 = or i64 %80, 6
%84 = getelementptr inbounds i8, i8* %24, i64 %83
%85 = bitcast i8* %84 to <16 x i8>*
%86 = load <16 x i8>, <16 x i8>* %85
%87 = getelementptr inbounds i8, i8* %84, i64 16
%88 = bitcast i8* %87 to <16 x i8>*
%89 = load <16 x i8>, <16 x i8>* %88
%90 = add <16 x i8> %86, <i8 -48, i8 -48, i8 -48, i8 -48, i8 -48, i8 -48, i8 -48, i8 -48, i8 -48, i8 -48, i8 -48, i8 -48, i8 -48, i8 -48, i8 -48, i8 -48>
%91 = add <16 x i8> %89, <i8 -48, i8 -48, i8 -48, i8 -48, i8 -48, i8 -48, i8 -48, i8 -48, i8 -48, i8 -48, i8 -48, i8 -48, i8 -48, i8 -48, i8 -48, i8 -48>
%92 = getelementptr inbounds i8, i8* %3, i64 %80
%93 = bitcast i8* %92 to <16 x i8>*
store <16 x i8> %90, <16 x i8>* %93
%94 = getelementptr inbounds i8, i8* %92, i64 16
%95 = bitcast i8* %94 to <16 x i8>*
store <16 x i8> %91, <16 x i8>* %95
br label %96
96: ; preds = %79, %82
%97 = icmp eq i64 %38, %31
br i1 %97, label %133, label %98
98: ; preds = %96
%99 = and i64 %31, 24
%100 = icmp eq i64 %99, 0
br i1 %100, label %117, label %101
101: ; preds = %35, %98
%102 = phi i64 [ %38, %98 ], [ 0, %35 ]
%103 = and i64 %31, 504
br label %104
104: ; preds = %104, %101
%105 = phi i64 [ %102, %101 ], [ %113, %104 ]
%106 = or i64 %105, 6
%107 = getelementptr inbounds i8, i8* %24, i64 %106
%108 = bitcast i8* %107 to <8 x i8>*
%109 = load <8 x i8>, <8 x i8>* %108
%110 = add <8 x i8> %109, <i8 -48, i8 -48, i8 -48, i8 -48, i8 -48, i8 -48, i8 -48, i8 -48>
%111 = getelementptr inbounds i8, i8* %3, i64 %105
%112 = bitcast i8* %111 to <8 x i8>*
store <8 x i8> %110, <8 x i8>* %112
%113 = add nuw i64 %105, 8
%114 = icmp eq i64 %113, %103
br i1 %114, label %115, label %104
115: ; preds = %104
%116 = icmp eq i64 %103, %31
br i1 %116, label %133, label %117
117: ; preds = %33, %98, %115
%118 = phi i64 [ 0, %33 ], [ %38, %98 ], [ %103, %115 ]
br label %124
119: ; preds = %20
%120 = zext i8 %28 to i32
%121 = icmp eq i8 %28, 65
%122 = sub nuw nsw i32 -32, %120
%123 = select i1 %121, i32 -90, i32 %122
br label %133
124: ; preds = %117, %124
%125 = phi i64 [ %131, %124 ], [ %118, %117 ]
%126 = add nuw nsw i64 %125, 6
%127 = getelementptr inbounds i8, i8* %24, i64 %126
%128 = load i8, i8* %127
%129 = add i8 %128, -48
%130 = getelementptr inbounds i8, i8* %3, i64 %125
store i8 %129, i8* %130
%131 = add nuw nsw i64 %125, 1
%132 = icmp eq i64 %131, %31
br i1 %132, label %133, label %124
133: ; preds = %124, %96, %115, %30, %119
%134 = phi i32 [ %123, %119 ], [ 0, %30 ], [ 0, %115 ], [ 0, %96 ], [ 0, %124 ]
br label %135
135: ; preds = %17, %4, %133
%136 = phi i32 [ %134, %133 ], [ %14, %4 ], [ %18, %17 ]
ret i32 %136
}