#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 /*<<< orphan*/ printf(char *, int);
unsigned char ***select_font(int);
int put_charx2(unsigned char c, int x, int y, int fg_color, int bg_color,
               int overwrite, int which_font, unsigned char *buffer) {
  int xx, yy;
  int output_pointer;
  unsigned char(*font)[256][16];
  if (x >= 640 - (8 * 2))
    printf("error! X=%d\n", x);
  if (y >= 480 - (16 * 2))
    printf("error! Y=%d\n", y);
  font = select_font(which_font);
  output_pointer = (y * 640) + x;
  for (yy = 0; yy < 16; yy++) {
    for (xx = 0; xx < 8; xx++) {
      if ((*font)[c][yy] & (1 << (8 - xx))) {
        buffer[output_pointer] = fg_color;
        buffer[output_pointer + 1] = fg_color;
        buffer[output_pointer + 640] = fg_color;
        buffer[output_pointer + 640 + 1] = fg_color;
      } else if (overwrite) {
        buffer[output_pointer] = bg_color;
        buffer[output_pointer + 1] = bg_color;
        buffer[output_pointer + 640] = bg_color;
        buffer[output_pointer + 640 + 1] = bg_color;
      }
      output_pointer += 2;
    }
    output_pointer += (2 * 640 - 8 * 2);
  }
  return 0;
}


x86 assembly (clang, -O0):
<put_charx2>:
push   %rbp
mov    %rsp,%rbp
sub    $0x30,%rsp
mov    %dil,%al
mov    0x18(%rbp),%rdi
mov    0x10(%rbp),%edi
mov    %al,-0x1(%rbp)
mov    %esi,-0x8(%rbp)
mov    %edx,-0xc(%rbp)
mov    %ecx,-0x10(%rbp)
mov    %r8d,-0x14(%rbp)
mov    %r9d,-0x18(%rbp)
cmpl   $0x270,-0x8(%rbp)
jl     1162 <put_charx2+0x42>
mov    -0x8(%rbp),%esi
lea    0xea3(%rip),%rdi
call   1030 <printf@plt>
cmpl   $0x1c0,-0xc(%rbp)
jl     117e <put_charx2+0x5e>
mov    -0xc(%rbp),%esi
lea    0xe94(%rip),%rdi
call   1030 <printf@plt>
mov    0x10(%rbp),%edi
call   1040 <select_font@plt>
mov    %rax,-0x30(%rbp)
imul   $0x280,-0xc(%rbp),%eax
add    -0x8(%rbp),%eax
mov    %eax,-0x24(%rbp)
movl   $0x0,-0x20(%rbp)
cmpl   $0x10,-0x20(%rbp)
jge    12e0 <put_charx2+0x1c0>
movl   $0x0,-0x1c(%rbp)
cmpl   $0x8,-0x1c(%rbp)
jge    12c7 <put_charx2+0x1a7>
mov    -0x30(%rbp),%rax
movzbl -0x1(%rbp),%ecx
shl    $0x4,%rcx
add    %rcx,%rax
movslq -0x20(%rbp),%rcx
movzbl (%rax,%rcx,1),%eax
mov    $0x8,%ecx
sub    -0x1c(%rbp),%ecx
mov    $0x1,%edx
shl    %cl,%edx
mov    %edx,%ecx
and    %ecx,%eax
cmp    $0x0,%eax
je     1249 <put_charx2+0x129>
mov    -0x10(%rbp),%eax
mov    %al,%dl
mov    0x18(%rbp),%rax
movslq -0x24(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x10(%rbp),%eax
mov    %al,%dl
mov    0x18(%rbp),%rax
mov    -0x24(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x10(%rbp),%eax
mov    %al,%dl
mov    0x18(%rbp),%rax
mov    -0x24(%rbp),%ecx
add    $0x280,%ecx
movslq %ecx,%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x10(%rbp),%eax
mov    %al,%dl
mov    0x18(%rbp),%rax
mov    -0x24(%rbp),%ecx
add    $0x280,%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
mov    %dl,(%rax,%rcx,1)
jmp    12b0 <put_charx2+0x190>
cmpl   $0x0,-0x18(%rbp)
je     12ab <put_charx2+0x18b>
mov    -0x14(%rbp),%eax
mov    %al,%dl
mov    0x18(%rbp),%rax
movslq -0x24(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x14(%rbp),%eax
mov    %al,%dl
mov    0x18(%rbp),%rax
mov    -0x24(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x14(%rbp),%eax
mov    %al,%dl
mov    0x18(%rbp),%rax
mov    -0x24(%rbp),%ecx
add    $0x280,%ecx
movslq %ecx,%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x14(%rbp),%eax
mov    %al,%dl
mov    0x18(%rbp),%rax
mov    -0x24(%rbp),%ecx
add    $0x280,%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
mov    %dl,(%rax,%rcx,1)
jmp    12b0 <put_charx2+0x190>
mov    -0x24(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x24(%rbp)
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    11af <put_charx2+0x8f>
mov    -0x24(%rbp),%eax
add    $0x4f0,%eax
mov    %eax,-0x24(%rbp)
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
jmp    119e <put_charx2+0x7e>
xor    %eax,%eax
add    $0x30,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<put_charx2>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
push   %rax
mov    %r9d,%r12d
mov    %r8d,%ebp
mov    %ecx,%r14d
mov    %edx,%r13d
mov    %esi,%ebx
mov    %edi,0x4(%rsp)
cmp    $0x270,%esi
jl     1153 <put_charx2+0x33>
lea    0xeb4(%rip),%rdi
mov    %ebx,%esi
call   1030 <printf@plt>
mov    0x40(%rsp),%edi
cmp    $0x1c0,%r13d
jl     1175 <put_charx2+0x55>
mov    %edi,%r15d
lea    0xea3(%rip),%rdi
mov    %r13d,%esi
call   1030 <printf@plt>
mov    %r15d,%edi
mov    0x48(%rsp),%r15
call   1040 <select_font@plt>
lea    0x0(%r13,%r13,4),%ecx
shl    $0x7,%ecx
add    %ebx,%ecx
movzbl 0x4(%rsp),%edx
shl    $0x4,%rdx
add    %rax,%rdx
xor    %eax,%eax
jmp    11b4 <put_charx2+0x94>
nopl   0x0(%rax)
add    $0x1,%rax
add    $0x500,%ecx
cmp    $0x10,%rax
je     1312 <put_charx2+0x1f2>
movslq %ecx,%rsi
test   %r12d,%r12d
je     11d5 <put_charx2+0xb5>
mov    %bpl,(%r15,%rsi,1)
mov    %bpl,0x1(%r15,%rsi,1)
mov    %bpl,0x280(%r15,%rsi,1)
mov    %bpl,0x281(%r15,%rsi,1)
movzbl (%rdx,%rax,1),%ebx
and    $0xffffff80,%ebx
mov    %r14d,%edi
cmove  %ebp,%edi
or     %r12d,%ebx
je     1201 <put_charx2+0xe1>
mov    %dil,0x2(%rsi,%r15,1)
mov    %dil,0x3(%rsi,%r15,1)
mov    %dil,0x282(%rsi,%r15,1)
mov    %dil,0x283(%rsi,%r15,1)
movzbl (%rdx,%rax,1),%ebx
and    $0x40,%ebx
mov    %r14d,%edi
cmove  %ebp,%edi
or     %r12d,%ebx
je     122d <put_charx2+0x10d>
mov    %dil,0x4(%rsi,%r15,1)
mov    %dil,0x5(%rsi,%r15,1)
mov    %dil,0x284(%rsi,%r15,1)
mov    %dil,0x285(%rsi,%r15,1)
movzbl (%rdx,%rax,1),%ebx
and    $0x20,%ebx
mov    %r14d,%edi
cmove  %ebp,%edi
or     %r12d,%ebx
je     1259 <put_charx2+0x139>
mov    %dil,0x6(%rsi,%r15,1)
mov    %dil,0x7(%rsi,%r15,1)
mov    %dil,0x286(%rsi,%r15,1)
mov    %dil,0x287(%rsi,%r15,1)
movzbl (%rdx,%rax,1),%ebx
and    $0x10,%ebx
mov    %r14d,%edi
cmove  %ebp,%edi
or     %r12d,%ebx
je     1285 <put_charx2+0x165>
mov    %dil,0x8(%rsi,%r15,1)
mov    %dil,0x9(%rsi,%r15,1)
mov    %dil,0x288(%rsi,%r15,1)
mov    %dil,0x289(%rsi,%r15,1)
movzbl (%rdx,%rax,1),%ebx
and    $0x8,%ebx
mov    %r14d,%edi
cmove  %ebp,%edi
or     %r12d,%ebx
je     12b1 <put_charx2+0x191>
mov    %dil,0xa(%rsi,%r15,1)
mov    %dil,0xb(%rsi,%r15,1)
mov    %dil,0x28a(%rsi,%r15,1)
mov    %dil,0x28b(%rsi,%r15,1)
movzbl (%rdx,%rax,1),%ebx
and    $0x4,%ebx
mov    %r14d,%edi
cmove  %ebp,%edi
or     %r12d,%ebx
je     12dd <put_charx2+0x1bd>
mov    %dil,0xc(%rsi,%r15,1)
mov    %dil,0xd(%rsi,%r15,1)
mov    %dil,0x28c(%rsi,%r15,1)
mov    %dil,0x28d(%rsi,%r15,1)
movzbl (%rdx,%rax,1),%ebx
and    $0x2,%ebx
mov    %r14d,%edi
cmove  %ebp,%edi
or     %r12d,%ebx
je     11a0 <put_charx2+0x80>
mov    %dil,0xe(%r15,%rsi,1)
mov    %dil,0xf(%r15,%rsi,1)
mov    %dil,0x28e(%r15,%rsi,1)
mov    %dil,0x28f(%r15,%rsi,1)
jmp    11a0 <put_charx2+0x80>
xor    %eax,%eax
add    $0x8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
@.str = [13 x i8] c"error! X=%d\0A\00"
@.str.1 = [13 x i8] c"error! Y=%d\0A\00"
define i32 @put_charx2(i8 zeroext %0, i32 %1, i32 %2, i32 %3, i32 %4, i32 %5, i32 %6, i8* %7) {
%9 = alloca i8
%10 = alloca i32
%11 = alloca i32
%12 = alloca i32
%13 = alloca i32
%14 = alloca i32
%15 = alloca i32
%16 = alloca i8*
%17 = alloca i32
%18 = alloca i32
%19 = alloca i32
%20 = alloca [256 x [16 x i8]]*
store i8 %0, i8* %9
store i32 %1, i32* %10
store i32 %2, i32* %11
store i32 %3, i32* %12
store i32 %4, i32* %13
store i32 %5, i32* %14
store i32 %6, i32* %15
store i8* %7, i8** %16
%21 = load i32, i32* %10
%22 = icmp sge i32 %21, 624
br i1 %22, label %23, label %26
23: ; preds = %8
%24 = load i32, i32* %10
%25 = call i32 @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str, i64 0, i64 0), i32 %24)
br label %26
26: ; preds = %23, %8
%27 = load i32, i32* %11
%28 = icmp sge i32 %27, 448
br i1 %28, label %29, label %32
29: ; preds = %26
%30 = load i32, i32* %11
%31 = call i32 @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.1, i64 0, i64 0), i32 %30)
br label %32
32: ; preds = %29, %26
%33 = load i32, i32* %15
%34 = call i8*** @select_font(i32 %33)
%35 = bitcast i8*** %34 to [256 x [16 x i8]]*
store [256 x [16 x i8]]* %35, [256 x [16 x i8]]** %20
%36 = load i32, i32* %11
%37 = mul nsw i32 %36, 640
%38 = load i32, i32* %10
%39 = add nsw i32 %37, %38
store i32 %39, i32* %19
store i32 0, i32* %18
br label %40
40: ; preds = %133, %32
%41 = load i32, i32* %18
%42 = icmp slt i32 %41, 16
br i1 %42, label %43, label %136
43: ; preds = %40
store i32 0, i32* %17
br label %44
44: ; preds = %127, %43
%45 = load i32, i32* %17
%46 = icmp slt i32 %45, 8
br i1 %46, label %47, label %130
47: ; preds = %44
%48 = load [256 x [16 x i8]]*, [256 x [16 x i8]]** %20
%49 = load i8, i8* %9
%50 = zext i8 %49 to i64
%51 = getelementptr inbounds [256 x [16 x i8]], [256 x [16 x i8]]* %48, i64 0, i64 %50
%52 = load i32, i32* %18
%53 = sext i32 %52 to i64
%54 = getelementptr inbounds [16 x i8], [16 x i8]* %51, i64 0, i64 %53
%55 = load i8, i8* %54
%56 = zext i8 %55 to i32
%57 = load i32, i32* %17
%58 = sub nsw i32 8, %57
%59 = shl i32 1, %58
%60 = and i32 %56, %59
%61 = icmp ne i32 %60, 0
br i1 %61, label %62, label %91
62: ; preds = %47
%63 = load i32, i32* %12
%64 = trunc i32 %63 to i8
%65 = load i8*, i8** %16
%66 = load i32, i32* %19
%67 = sext i32 %66 to i64
%68 = getelementptr inbounds i8, i8* %65, i64 %67
store i8 %64, i8* %68
%69 = load i32, i32* %12
%70 = trunc i32 %69 to i8
%71 = load i8*, i8** %16
%72 = load i32, i32* %19
%73 = add nsw i32 %72, 1
%74 = sext i32 %73 to i64
%75 = getelementptr inbounds i8, i8* %71, i64 %74
store i8 %70, i8* %75
%76 = load i32, i32* %12
%77 = trunc i32 %76 to i8
%78 = load i8*, i8** %16
%79 = load i32, i32* %19
%80 = add nsw i32 %79, 640
%81 = sext i32 %80 to i64
%82 = getelementptr inbounds i8, i8* %78, i64 %81
store i8 %77, i8* %82
%83 = load i32, i32* %12
%84 = trunc i32 %83 to i8
%85 = load i8*, i8** %16
%86 = load i32, i32* %19
%87 = add nsw i32 %86, 640
%88 = add nsw i32 %87, 1
%89 = sext i32 %88 to i64
%90 = getelementptr inbounds i8, i8* %85, i64 %89
store i8 %84, i8* %90
br label %124
91: ; preds = %47
%92 = load i32, i32* %14
%93 = icmp ne i32 %92, 0
br i1 %93, label %94, label %123
94: ; preds = %91
%95 = load i32, i32* %13
%96 = trunc i32 %95 to i8
%97 = load i8*, i8** %16
%98 = load i32, i32* %19
%99 = sext i32 %98 to i64
%100 = getelementptr inbounds i8, i8* %97, i64 %99
store i8 %96, i8* %100
%101 = load i32, i32* %13
%102 = trunc i32 %101 to i8
%103 = load i8*, i8** %16
%104 = load i32, i32* %19
%105 = add nsw i32 %104, 1
%106 = sext i32 %105 to i64
%107 = getelementptr inbounds i8, i8* %103, i64 %106
store i8 %102, i8* %107
%108 = load i32, i32* %13
%109 = trunc i32 %108 to i8
%110 = load i8*, i8** %16
%111 = load i32, i32* %19
%112 = add nsw i32 %111, 640
%113 = sext i32 %112 to i64
%114 = getelementptr inbounds i8, i8* %110, i64 %113
store i8 %109, i8* %114
%115 = load i32, i32* %13
%116 = trunc i32 %115 to i8
%117 = load i8*, i8** %16
%118 = load i32, i32* %19
%119 = add nsw i32 %118, 640
%120 = add nsw i32 %119, 1
%121 = sext i32 %120 to i64
%122 = getelementptr inbounds i8, i8* %117, i64 %121
store i8 %116, i8* %122
br label %123
123: ; preds = %94, %91
br label %124
124: ; preds = %123, %62
%125 = load i32, i32* %19
%126 = add nsw i32 %125, 2
store i32 %126, i32* %19
br label %127
127: ; preds = %124
%128 = load i32, i32* %17
%129 = add nsw i32 %128, 1
store i32 %129, i32* %17
br label %44
130: ; preds = %44
%131 = load i32, i32* %19
%132 = add nsw i32 %131, 1264
store i32 %132, i32* %19
br label %133
133: ; preds = %130
%134 = load i32, i32* %18
%135 = add nsw i32 %134, 1
store i32 %135, i32* %18
br label %40
136: ; preds = %40
ret i32 0
}

LLVM IR (-O2):
@.str = [13 x i8] c"error! X=%d\0A\00"
@.str.1 = [13 x i8] c"error! Y=%d\0A\00"
define i32 @put_charx2(i8 zeroext %0, i32 %1, i32 %2, i32 %3, i32 %4, i32 %5, i32 %6, i8* nocapture writeonly %7) {
%9 = icmp sgt i32 %1, 623
br i1 %9, label %10, label %12
10: ; preds = %8
%11 = tail call i32 @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str, i64 0, i64 0), i32 %1)
br label %12
12: ; preds = %10, %8
%13 = icmp sgt i32 %2, 447
br i1 %13, label %14, label %16
14: ; preds = %12
%15 = tail call i32 @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.1, i64 0, i64 0), i32 %2)
br label %16
16: ; preds = %14, %12
%17 = tail call i8*** @select_font(i32 %6)
%18 = bitcast i8*** %17 to [256 x [16 x i8]]*
%19 = mul nsw i32 %2, 640
%20 = add nsw i32 %19, %1
%21 = zext i8 %0 to i64
%22 = icmp eq i32 %5, 0
%23 = trunc i32 %4 to i8
br label %24
24: ; preds = %16, %163
%25 = phi i64 [ 0, %16 ], [ %166, %163 ]
%26 = phi i32 [ %20, %16 ], [ %165, %163 ]
%27 = getelementptr inbounds [256 x [16 x i8]], [256 x [16 x i8]]* %18, i64 0, i64 %21, i64 %25
%28 = sext i32 %26 to i64
br i1 %22, label %37, label %29
29: ; preds = %24
%30 = getelementptr inbounds i8, i8* %7, i64 %28
store i8 %23, i8* %30
%31 = add nsw i64 %28, 1
%32 = getelementptr inbounds i8, i8* %7, i64 %31
store i8 %23, i8* %32
%33 = add nsw i64 %28, 640
%34 = getelementptr inbounds i8, i8* %7, i64 %33
store i8 %23, i8* %34
%35 = add nsw i64 %28, 641
%36 = getelementptr inbounds i8, i8* %7, i64 %35
store i8 %23, i8* %36
br label %37
37: ; preds = %24, %29
%38 = load i8, i8* %27
%39 = and i8 %38, -128
%40 = zext i8 %39 to i32
%41 = icmp eq i8 %39, 0
%42 = or i32 %40, %5
%43 = icmp eq i32 %42, 0
%44 = select i1 %41, i32 %4, i32 %3
%45 = trunc i32 %44 to i8
br i1 %43, label %55, label %46
46: ; preds = %37
%47 = add nsw i64 %28, 2
%48 = getelementptr inbounds i8, i8* %7, i64 %47
store i8 %45, i8* %48
%49 = add nsw i64 %28, 3
%50 = getelementptr inbounds i8, i8* %7, i64 %49
store i8 %45, i8* %50
%51 = add nsw i64 %28, 642
%52 = getelementptr inbounds i8, i8* %7, i64 %51
store i8 %45, i8* %52
%53 = add nsw i64 %28, 643
%54 = getelementptr inbounds i8, i8* %7, i64 %53
store i8 %45, i8* %54
br label %55
55: ; preds = %46, %37
%56 = load i8, i8* %27
%57 = and i8 %56, 64
%58 = zext i8 %57 to i32
%59 = icmp eq i8 %57, 0
%60 = or i32 %58, %5
%61 = icmp eq i32 %60, 0
%62 = select i1 %59, i32 %4, i32 %3
%63 = trunc i32 %62 to i8
br i1 %61, label %73, label %64
64: ; preds = %55
%65 = add nsw i64 %28, 4
%66 = getelementptr inbounds i8, i8* %7, i64 %65
store i8 %63, i8* %66
%67 = add nsw i64 %28, 5
%68 = getelementptr inbounds i8, i8* %7, i64 %67
store i8 %63, i8* %68
%69 = add nsw i64 %28, 644
%70 = getelementptr inbounds i8, i8* %7, i64 %69
store i8 %63, i8* %70
%71 = add nsw i64 %28, 645
%72 = getelementptr inbounds i8, i8* %7, i64 %71
store i8 %63, i8* %72
br label %73
73: ; preds = %64, %55
%74 = load i8, i8* %27
%75 = and i8 %74, 32
%76 = zext i8 %75 to i32
%77 = icmp eq i8 %75, 0
%78 = or i32 %76, %5
%79 = icmp eq i32 %78, 0
%80 = select i1 %77, i32 %4, i32 %3
%81 = trunc i32 %80 to i8
br i1 %79, label %91, label %82
82: ; preds = %73
%83 = add nsw i64 %28, 6
%84 = getelementptr inbounds i8, i8* %7, i64 %83
store i8 %81, i8* %84
%85 = add nsw i64 %28, 7
%86 = getelementptr inbounds i8, i8* %7, i64 %85
store i8 %81, i8* %86
%87 = add nsw i64 %28, 646
%88 = getelementptr inbounds i8, i8* %7, i64 %87
store i8 %81, i8* %88
%89 = add nsw i64 %28, 647
%90 = getelementptr inbounds i8, i8* %7, i64 %89
store i8 %81, i8* %90
br label %91
91: ; preds = %82, %73
%92 = load i8, i8* %27
%93 = and i8 %92, 16
%94 = zext i8 %93 to i32
%95 = icmp eq i8 %93, 0
%96 = or i32 %94, %5
%97 = icmp eq i32 %96, 0
%98 = select i1 %95, i32 %4, i32 %3
%99 = trunc i32 %98 to i8
br i1 %97, label %109, label %100
100: ; preds = %91
%101 = add nsw i64 %28, 8
%102 = getelementptr inbounds i8, i8* %7, i64 %101
store i8 %99, i8* %102
%103 = add nsw i64 %28, 9
%104 = getelementptr inbounds i8, i8* %7, i64 %103
store i8 %99, i8* %104
%105 = add nsw i64 %28, 648
%106 = getelementptr inbounds i8, i8* %7, i64 %105
store i8 %99, i8* %106
%107 = add nsw i64 %28, 649
%108 = getelementptr inbounds i8, i8* %7, i64 %107
store i8 %99, i8* %108
br label %109
109: ; preds = %100, %91
%110 = load i8, i8* %27
%111 = and i8 %110, 8
%112 = zext i8 %111 to i32
%113 = icmp eq i8 %111, 0
%114 = or i32 %112, %5
%115 = icmp eq i32 %114, 0
%116 = select i1 %113, i32 %4, i32 %3
%117 = trunc i32 %116 to i8
br i1 %115, label %127, label %118
118: ; preds = %109
%119 = add nsw i64 %28, 10
%120 = getelementptr inbounds i8, i8* %7, i64 %119
store i8 %117, i8* %120
%121 = add nsw i64 %28, 11
%122 = getelementptr inbounds i8, i8* %7, i64 %121
store i8 %117, i8* %122
%123 = add nsw i64 %28, 650
%124 = getelementptr inbounds i8, i8* %7, i64 %123
store i8 %117, i8* %124
%125 = add nsw i64 %28, 651
%126 = getelementptr inbounds i8, i8* %7, i64 %125
store i8 %117, i8* %126
br label %127
127: ; preds = %118, %109
%128 = load i8, i8* %27
%129 = and i8 %128, 4
%130 = zext i8 %129 to i32
%131 = icmp eq i8 %129, 0
%132 = or i32 %130, %5
%133 = icmp eq i32 %132, 0
%134 = select i1 %131, i32 %4, i32 %3
%135 = trunc i32 %134 to i8
br i1 %133, label %145, label %136
136: ; preds = %127
%137 = add nsw i64 %28, 12
%138 = getelementptr inbounds i8, i8* %7, i64 %137
store i8 %135, i8* %138
%139 = add nsw i64 %28, 13
%140 = getelementptr inbounds i8, i8* %7, i64 %139
store i8 %135, i8* %140
%141 = add nsw i64 %28, 652
%142 = getelementptr inbounds i8, i8* %7, i64 %141
store i8 %135, i8* %142
%143 = add nsw i64 %28, 653
%144 = getelementptr inbounds i8, i8* %7, i64 %143
store i8 %135, i8* %144
br label %145
145: ; preds = %136, %127
%146 = add nsw i64 %28, 14
%147 = load i8, i8* %27
%148 = and i8 %147, 2
%149 = zext i8 %148 to i32
%150 = icmp eq i8 %148, 0
%151 = or i32 %149, %5
%152 = icmp eq i32 %151, 0
%153 = select i1 %150, i32 %4, i32 %3
%154 = trunc i32 %153 to i8
br i1 %152, label %163, label %155
155: ; preds = %145
%156 = getelementptr inbounds i8, i8* %7, i64 %146
store i8 %154, i8* %156
%157 = add nsw i64 %28, 15
%158 = getelementptr inbounds i8, i8* %7, i64 %157
store i8 %154, i8* %158
%159 = add nsw i64 %28, 654
%160 = getelementptr inbounds i8, i8* %7, i64 %159
store i8 %154, i8* %160
%161 = add nsw i64 %28, 655
%162 = getelementptr inbounds i8, i8* %7, i64 %161
store i8 %154, i8* %162
br label %163
163: ; preds = %155, %145
%164 = trunc i64 %146 to i32
%165 = add nsw i32 %164, 1266
%166 = add nuw nsw i64 %25, 1
%167 = icmp eq i64 %166, 16
br i1 %167, label %168, label %24
168: ; preds = %163
ret i32 0
}