#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
unsigned long grabDay(unsigned long);
unsigned long grabHour(unsigned long);
int grabLSB(unsigned long);
unsigned long grabMinute(unsigned long);
unsigned long grabMonth(unsigned long);
unsigned long grabYear(unsigned long);
int /*<<< orphan*/ printf(char *);
int /*<<< orphan*/ sprintf(char *, char *, unsigned long, unsigned long,
                           unsigned long, unsigned long, unsigned long, int);
int /*<<< orphan*/ sscanf(char *, char *, unsigned long *);
unsigned long addDay(unsigned long encoding, int days) {
  if (days > 34) {
    printf("Warning: This function only supports a max of 30 days\n");
    printf("You may improve this feature later. :)\n");
  }
  char buf[8192];
  unsigned long encoding2;
  unsigned long y, m, d, h, min;
  int b;
  y = grabYear(encoding);
  m = grabMonth(encoding);
  d = grabDay(encoding);
  h = grabHour(encoding);
  min = grabMinute(encoding);
  b = grabLSB(encoding);
  if (m == 1 || m == 3 || m == 5 || m == 7 || m == 8 || m == 10 || m == 12) {
    if (d + days > 31) {
      if (m == 12)
        y++;
      m = (m + 1) % 12;
      if (m == 0)
        m = 1;
    }
    d = (d + days) % 31;
    if (d == 0)
      d = 31;
  } else if (m == 4 || m == 6 || m == 9 || m == 11) {
    if (d + days > 30)
      m++;
    d = (d + days) % 30;
    if (d == 0)
      d = 30;
  } else {
    if (y % 4 == 0) {
      if (d + days > 29)
        m++;
      d = (d + days) % 29;
      if (d == 0)
        d = 29;
    } else {
      if (d + days > 28)
        m++;
      d = (d + days) % 28;
      if (d == 0)
        d = 28;
    }
  }
  sprintf(buf, "%lu%02lu%02lu%02lu%02lu%d", y, m, d, h, min, b);
  sscanf(buf, "%lu", &encoding2);
  return encoding2;
}


x86 assembly (clang, -O0):
<addDay>:
push   %rbp
mov    %rsp,%rbp
sub    $0x2060,%rsp
mov    %rdi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
cmpl   $0x22,-0xc(%rbp)
jle    11c4 <addDay+0x34>
lea    0xe4d(%rip),%rdi
call   1060 <printf@plt>
lea    0xe78(%rip),%rdi
call   1060 <printf@plt>
mov    -0x8(%rbp),%rdi
call   1040 <grabYear@plt>
mov    %rax,-0x2020(%rbp)
mov    -0x8(%rbp),%rdi
call   1070 <grabMonth@plt>
mov    %rax,-0x2028(%rbp)
mov    -0x8(%rbp),%rdi
call   10a0 <grabDay@plt>
mov    %rax,-0x2030(%rbp)
mov    -0x8(%rbp),%rdi
call   1030 <grabHour@plt>
mov    %rax,-0x2038(%rbp)
mov    -0x8(%rbp),%rdi
call   1050 <grabMinute@plt>
mov    %rax,-0x2040(%rbp)
mov    -0x8(%rbp),%rdi
call   1080 <grabLSB@plt>
mov    %eax,-0x2044(%rbp)
cmpq   $0x1,-0x2028(%rbp)
01
je     1285 <addDay+0xf5>
cmpq   $0x3,-0x2028(%rbp)
03
je     1285 <addDay+0xf5>
cmpq   $0x5,-0x2028(%rbp)
05
je     1285 <addDay+0xf5>
cmpq   $0x7,-0x2028(%rbp)
07
je     1285 <addDay+0xf5>
cmpq   $0x8,-0x2028(%rbp)
08
je     1285 <addDay+0xf5>
cmpq   $0xa,-0x2028(%rbp)
0a
je     1285 <addDay+0xf5>
cmpq   $0xc,-0x2028(%rbp)
0c
jne    1334 <addDay+0x1a4>
mov    -0x2030(%rbp),%rax
movslq -0xc(%rbp),%rcx
add    %rcx,%rax
cmp    $0x1f,%rax
jbe    12f7 <addDay+0x167>
cmpq   $0xc,-0x2028(%rbp)
0c
jne    12bd <addDay+0x12d>
mov    -0x2020(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x2020(%rbp)
mov    -0x2028(%rbp),%rax
add    $0x1,%rax
mov    $0xc,%ecx
xor    %edx,%edx
div    %rcx
mov    %rdx,-0x2028(%rbp)
cmpq   $0x0,-0x2028(%rbp)
jne    12f2 <addDay+0x162>
movq   $0x1,-0x2028(%rbp)
jmp    12f7 <addDay+0x167>
mov    -0x2030(%rbp),%rax
movslq -0xc(%rbp),%rcx
add    %rcx,%rax
mov    $0x1f,%ecx
xor    %edx,%edx
div    %rcx
mov    %rdx,-0x2030(%rbp)
cmpq   $0x0,-0x2030(%rbp)
jne    132f <addDay+0x19f>
movq   $0x1f,-0x2030(%rbp)
jmp    14c0 <addDay+0x330>
cmpq   $0x4,-0x2028(%rbp)
04
je     136c <addDay+0x1dc>
cmpq   $0x6,-0x2028(%rbp)
06
je     136c <addDay+0x1dc>
cmpq   $0x9,-0x2028(%rbp)
09
je     136c <addDay+0x1dc>
cmpq   $0xb,-0x2028(%rbp)
0b
jne    13d3 <addDay+0x243>
mov    -0x2030(%rbp),%rax
movslq -0xc(%rbp),%rcx
add    %rcx,%rax
cmp    $0x1e,%rax
jbe    1396 <addDay+0x206>
mov    -0x2028(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x2028(%rbp)
mov    -0x2030(%rbp),%rax
movslq -0xc(%rbp),%rcx
add    %rcx,%rax
mov    $0x1e,%ecx
xor    %edx,%edx
div    %rcx
mov    %rdx,-0x2030(%rbp)
cmpq   $0x0,-0x2030(%rbp)
jne    13ce <addDay+0x23e>
movq   $0x1e,-0x2030(%rbp)
jmp    14bb <addDay+0x32b>
mov    -0x2020(%rbp),%rax
and    $0x3,%rax
cmp    $0x0,%rax
jne    144f <addDay+0x2bf>
mov    -0x2030(%rbp),%rax
movslq -0xc(%rbp),%rcx
add    %rcx,%rax
cmp    $0x1d,%rax
jbe    1412 <addDay+0x282>
mov    -0x2028(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x2028(%rbp)
mov    -0x2030(%rbp),%rax
movslq -0xc(%rbp),%rcx
add    %rcx,%rax
mov    $0x1d,%ecx
xor    %edx,%edx
div    %rcx
mov    %rdx,-0x2030(%rbp)
cmpq   $0x0,-0x2030(%rbp)
jne    144a <addDay+0x2ba>
movq   $0x1d,-0x2030(%rbp)
jmp    14b6 <addDay+0x326>
mov    -0x2030(%rbp),%rax
movslq -0xc(%rbp),%rcx
add    %rcx,%rax
cmp    $0x1c,%rax
jbe    1479 <addDay+0x2e9>
mov    -0x2028(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x2028(%rbp)
mov    -0x2030(%rbp),%rax
movslq -0xc(%rbp),%rcx
add    %rcx,%rax
mov    $0x1c,%ecx
xor    %edx,%edx
div    %rcx
mov    %rdx,-0x2030(%rbp)
cmpq   $0x0,-0x2030(%rbp)
jne    14b1 <addDay+0x321>
movq   $0x1c,-0x2030(%rbp)
jmp    14b6 <addDay+0x326>
jmp    14bb <addDay+0x32b>
jmp    14c0 <addDay+0x330>
lea    -0x2010(%rbp),%rdi
mov    -0x2020(%rbp),%rdx
mov    -0x2028(%rbp),%rcx
mov    -0x2030(%rbp),%r8
mov    -0x2038(%rbp),%r9
mov    -0x2040(%rbp),%r10
mov    -0x2044(%rbp),%eax
lea    0xb68(%rip),%rsi
mov    %r10,(%rsp)
mov    %eax,0x8(%rsp)
call   10b0 <sprintf@plt>
lea    -0x2010(%rbp),%rdi
lea    0xb67(%rip),%rsi
lea    -0x2018(%rbp),%rdx
call   1090 <sscanf@plt>
mov    -0x2018(%rbp),%rax
add    $0x2060,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<addDay>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x2018,%rsp
mov    %esi,%ebp
mov    %rdi,%r14
cmp    $0x23,%esi
jl     11c3 <addDay+0x33>
lea    0xe6c(%rip),%rdi
call   1030 <puts@plt>
lea    0xe96(%rip),%rdi
call   1030 <puts@plt>
mov    %r14,%rdi
call   1050 <grabYear@plt>
mov    %rax,%r12
mov    %r14,%rdi
call   1070 <grabMonth@plt>
mov    %rax,%r13
mov    %r14,%rdi
call   10a0 <grabDay@plt>
mov    %rax,%rbx
mov    %r14,%rdi
call   1040 <grabHour@plt>
mov    %rax,(%rsp)
mov    %r14,%rdi
call   1060 <grabMinute@plt>
mov    %rax,%r15
mov    %r14,%rdi
call   1080 <grabLSB@plt>
mov    %eax,%r10d
cmp    $0xc,%r13
ja     1336 <addDay+0x1a6>
mov    $0x15aa,%eax
bt     %r13,%rax
jae    1297 <addDay+0x107>
movslq %ebp,%rax
add    %rax,%rbx
cmp    $0x20,%rbx
jb     125a <addDay+0xca>
xor    %eax,%eax
cmp    $0xc,%r13
sete   %al
add    %rax,%r12
lea    0x1(%r13),%eax
movzbl %al,%eax
imul   $0xab,%eax,%ecx
shr    $0x9,%ecx
and    $0xfffffffc,%ecx
lea    (%rcx,%rcx,2),%ecx
sub    %cl,%al
movzbl %al,%eax
mov    $0x1,%ecx
cmovne %eax,%ecx
movzbl %cl,%r13d
mov    (%rsp),%r9
movabs $0x842108421084211,%rcx
10 42 08
mov    %rbx,%rax
mul    %rcx
mov    %rbx,%rax
sub    %rdx,%rax
shr    %rax
add    %rdx,%rax
shr    $0x4,%rax
mov    %rax,%rcx
shl    $0x5,%rcx
sub    %rcx,%rax
add    %rbx,%rax
mov    $0x1f,%r8d
cmovne %rax,%r8
jmp    12e9 <addDay+0x159>
mov    $0xa50,%eax
bt     %r13,%rax
jae    1336 <addDay+0x1a6>
movslq %ebp,%rax
add    %rax,%rbx
cmp    $0x1f,%rbx
sbb    $0xffffffffffffffff,%r13
movabs $0x8888888888888889,%rcx
88 88 88
mov    %rbx,%rax
mul    %rcx
shr    $0x4,%rdx
mov    %rdx,%rax
shl    $0x5,%rax
mov    %rdx,%rcx
sub    %rax,%rcx
add    %rdx,%rcx
add    %rbx,%rcx
mov    $0x1e,%r8d
cmovne %rcx,%r8
mov    (%rsp),%r9
lea    0xd10(%rip),%rsi
lea    0x10(%rsp),%rbx
mov    %rbx,%rdi
mov    %r12,%rdx
mov    %r13,%rcx
push   %r10
push   %r15
call   10b0 <sprintf@plt>
add    $0x10,%rsp
lea    0xd08(%rip),%rsi
lea    0x8(%rsp),%rdx
mov    %rbx,%rdi
call   1090 <sscanf@plt>
mov    0x8(%rsp),%rax
add    $0x2018,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
movslq %ebp,%rax
add    %rax,%rbx
test   $0x3,%r12b
je     1377 <addDay+0x1e7>
cmp    $0x1d,%rbx
sbb    $0xffffffffffffffff,%r13
mov    %rbx,%rax
shr    $0x2,%rax
movabs $0x4924924924924925,%rcx
92 24 49
mul    %rcx
shr    %rdx
lea    (%rdx,%rdx,8),%rax
lea    (%rax,%rax,2),%rax
add    %rdx,%rax
sub    %rax,%rbx
mov    $0x1c,%r8d
jmp    13b6 <addDay+0x226>
cmp    $0x1e,%rbx
sbb    $0xffffffffffffffff,%r13
movabs $0x1a7b9611a7b9611b,%rcx
96 7b 1a
mov    %rbx,%rax
mul    %rcx
mov    %rbx,%rax
sub    %rdx,%rax
shr    %rax
add    %rdx,%rax
shr    $0x4,%rax
lea    (%rax,%rax,8),%rcx
lea    (%rcx,%rcx,2),%rcx
add    %rax,%rcx
add    %rax,%rcx
sub    %rcx,%rbx
mov    $0x1d,%r8d
cmovne %rbx,%r8
jmp    12e5 <addDay+0x155>

LLVM IR (-O0):
@.str = [55 x i8] c"Warning: This function only supports a max of 30 days\0A\00"
@.str.1 = [40 x i8] c"You may improve this feature later. :)\0A\00"
@.str.2 = [26 x i8] c"%lu%02lu%02lu%02lu%02lu%d\00"
@.str.3 = [4 x i8] c"%lu\00"
define i64 @addDay(i64 %0, i32 %1) {
%3 = alloca i64
%4 = alloca i32
%5 = alloca [8192 x i8]
%6 = alloca i64
%7 = alloca i64
%8 = alloca i64
%9 = alloca i64
%10 = alloca i64
%11 = alloca i64
%12 = alloca i32
store i64 %0, i64* %3
store i32 %1, i32* %4
%13 = load i32, i32* %4
%14 = icmp sgt i32 %13, 34
br i1 %14, label %15, label %18
15: ; preds = %2
%16 = call i32 @printf(i8* getelementptr inbounds ([55 x i8], [55 x i8]* @.str, i64 0, i64 0))
%17 = call i32 @printf(i8* getelementptr inbounds ([40 x i8], [40 x i8]* @.str.1, i64 0, i64 0))
br label %18
18: ; preds = %15, %2
%19 = load i64, i64* %3
%20 = call i64 @grabYear(i64 %19)
store i64 %20, i64* %7
%21 = load i64, i64* %3
%22 = call i64 @grabMonth(i64 %21)
store i64 %22, i64* %8
%23 = load i64, i64* %3
%24 = call i64 @grabDay(i64 %23)
store i64 %24, i64* %9
%25 = load i64, i64* %3
%26 = call i64 @grabHour(i64 %25)
store i64 %26, i64* %10
%27 = load i64, i64* %3
%28 = call i64 @grabMinute(i64 %27)
store i64 %28, i64* %11
%29 = load i64, i64* %3
%30 = call i32 @grabLSB(i64 %29)
store i32 %30, i32* %12
%31 = load i64, i64* %8
%32 = icmp eq i64 %31, 1
br i1 %32, label %51, label %33
33: ; preds = %18
%34 = load i64, i64* %8
%35 = icmp eq i64 %34, 3
br i1 %35, label %51, label %36
36: ; preds = %33
%37 = load i64, i64* %8
%38 = icmp eq i64 %37, 5
br i1 %38, label %51, label %39
39: ; preds = %36
%40 = load i64, i64* %8
%41 = icmp eq i64 %40, 7
br i1 %41, label %51, label %42
42: ; preds = %39
%43 = load i64, i64* %8
%44 = icmp eq i64 %43, 8
br i1 %44, label %51, label %45
45: ; preds = %42
%46 = load i64, i64* %8
%47 = icmp eq i64 %46, 10
br i1 %47, label %51, label %48
48: ; preds = %45
%49 = load i64, i64* %8
%50 = icmp eq i64 %49, 12
br i1 %50, label %51, label %81
51: ; preds = %48, %45, %42, %39, %36, %33, %18
%52 = load i64, i64* %9
%53 = load i32, i32* %4
%54 = sext i32 %53 to i64
%55 = add i64 %52, %54
%56 = icmp ugt i64 %55, 31
br i1 %56, label %57, label %71
57: ; preds = %51
%58 = load i64, i64* %8
%59 = icmp eq i64 %58, 12
br i1 %59, label %60, label %63
60: ; preds = %57
%61 = load i64, i64* %7
%62 = add i64 %61, 1
store i64 %62, i64* %7
br label %63
63: ; preds = %60, %57
%64 = load i64, i64* %8
%65 = add i64 %64, 1
%66 = urem i64 %65, 12
store i64 %66, i64* %8
%67 = load i64, i64* %8
%68 = icmp eq i64 %67, 0
br i1 %68, label %69, label %70
69: ; preds = %63
store i64 1, i64* %8
br label %70
70: ; preds = %69, %63
br label %71
71: ; preds = %70, %51
%72 = load i64, i64* %9
%73 = load i32, i32* %4
%74 = sext i32 %73 to i64
%75 = add i64 %72, %74
%76 = urem i64 %75, 31
store i64 %76, i64* %9
%77 = load i64, i64* %9
%78 = icmp eq i64 %77, 0
br i1 %78, label %79, label %80
79: ; preds = %71
store i64 31, i64* %9
br label %80
80: ; preds = %79, %71
br label %156
81: ; preds = %48
%82 = load i64, i64* %8
%83 = icmp eq i64 %82, 4
br i1 %83, label %93, label %84
84: ; preds = %81
%85 = load i64, i64* %8
%86 = icmp eq i64 %85, 6
br i1 %86, label %93, label %87
87: ; preds = %84
%88 = load i64, i64* %8
%89 = icmp eq i64 %88, 9
br i1 %89, label %93, label %90
90: ; preds = %87
%91 = load i64, i64* %8
%92 = icmp eq i64 %91, 11
br i1 %92, label %93, label %112
93: ; preds = %90, %87, %84, %81
%94 = load i64, i64* %9
%95 = load i32, i32* %4
%96 = sext i32 %95 to i64
%97 = add i64 %94, %96
%98 = icmp ugt i64 %97, 30
br i1 %98, label %99, label %102
99: ; preds = %93
%100 = load i64, i64* %8
%101 = add i64 %100, 1
store i64 %101, i64* %8
br label %102
102: ; preds = %99, %93
%103 = load i64, i64* %9
%104 = load i32, i32* %4
%105 = sext i32 %104 to i64
%106 = add i64 %103, %105
%107 = urem i64 %106, 30
store i64 %107, i64* %9
%108 = load i64, i64* %9
%109 = icmp eq i64 %108, 0
br i1 %109, label %110, label %111
110: ; preds = %102
store i64 30, i64* %9
br label %111
111: ; preds = %110, %102
br label %155
112: ; preds = %90
%113 = load i64, i64* %7
%114 = urem i64 %113, 4
%115 = icmp eq i64 %114, 0
br i1 %115, label %116, label %135
116: ; preds = %112
%117 = load i64, i64* %9
%118 = load i32, i32* %4
%119 = sext i32 %118 to i64
%120 = add i64 %117, %119
%121 = icmp ugt i64 %120, 29
br i1 %121, label %122, label %125
122: ; preds = %116
%123 = load i64, i64* %8
%124 = add i64 %123, 1
store i64 %124, i64* %8
br label %125
125: ; preds = %122, %116
%126 = load i64, i64* %9
%127 = load i32, i32* %4
%128 = sext i32 %127 to i64
%129 = add i64 %126, %128
%130 = urem i64 %129, 29
store i64 %130, i64* %9
%131 = load i64, i64* %9
%132 = icmp eq i64 %131, 0
br i1 %132, label %133, label %134
133: ; preds = %125
store i64 29, i64* %9
br label %134
134: ; preds = %133, %125
br label %154
135: ; preds = %112
%136 = load i64, i64* %9
%137 = load i32, i32* %4
%138 = sext i32 %137 to i64
%139 = add i64 %136, %138
%140 = icmp ugt i64 %139, 28
br i1 %140, label %141, label %144
141: ; preds = %135
%142 = load i64, i64* %8
%143 = add i64 %142, 1
store i64 %143, i64* %8
br label %144
144: ; preds = %141, %135
%145 = load i64, i64* %9
%146 = load i32, i32* %4
%147 = sext i32 %146 to i64
%148 = add i64 %145, %147
%149 = urem i64 %148, 28
store i64 %149, i64* %9
%150 = load i64, i64* %9
%151 = icmp eq i64 %150, 0
br i1 %151, label %152, label %153
152: ; preds = %144
store i64 28, i64* %9
br label %153
153: ; preds = %152, %144
br label %154
154: ; preds = %153, %134
br label %155
155: ; preds = %154, %111
br label %156
156: ; preds = %155, %80
%157 = getelementptr inbounds [8192 x i8], [8192 x i8]* %5, i64 0, i64 0
%158 = load i64, i64* %7
%159 = load i64, i64* %8
%160 = load i64, i64* %9
%161 = load i64, i64* %10
%162 = load i64, i64* %11
%163 = load i32, i32* %12
%164 = call i32 @sprintf(i8* %157, i8* getelementptr inbounds ([26 x i8], [26 x i8]* @.str.2, i64 0, i64 0), i64 %158, i64 %159, i64 %160, i64 %161, i64 %162, i32 %163)
%165 = getelementptr inbounds [8192 x i8], [8192 x i8]* %5, i64 0, i64 0
%166 = call i32 @sscanf(i8* %165, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.3, i64 0, i64 0), i64* %6)
%167 = load i64, i64* %6
ret i64 %167
}

LLVM IR (-O2):
@.str.2 = [26 x i8] c"%lu%02lu%02lu%02lu%02lu%d\00"
@.str.3 = [4 x i8] c"%lu\00"
@str = [54 x i8] c"Warning: This function only supports a max of 30 days\00"
@str.4 = [39 x i8] c"You may improve this feature later. :)\00"
define i64 @addDay(i64 %0, i32 %1) {
%3 = alloca [8192 x i8]
%4 = alloca i64
%5 = icmp sgt i32 %1, 34
br i1 %5, label %6, label %9
6: ; preds = %2
%7 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([54 x i8], [54 x i8]* @str, i64 0, i64 0))
%8 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([39 x i8], [39 x i8]* @str.4, i64 0, i64 0))
br label %9
9: ; preds = %6, %2
%10 = getelementptr inbounds [8192 x i8], [8192 x i8]* %3, i64 0, i64 0
%11 = bitcast i64* %4 to i8*
%12 = tail call i64 @grabYear(i64 %0)
%13 = tail call i64 @grabMonth(i64 %0)
%14 = tail call i64 @grabDay(i64 %0)
%15 = tail call i64 @grabHour(i64 %0)
%16 = tail call i64 @grabMinute(i64 %0)
%17 = tail call i32 @grabLSB(i64 %0)
%18 = icmp eq i64 %13, 12
switch i64 %13, label %47 [
i64 12, label %19
i64 10, label %19
i64 8, label %19
i64 7, label %19
i64 5, label %19
i64 3, label %19
i64 1, label %19
i64 11, label %38
i64 9, label %38
i64 6, label %38
i64 4, label %38
]
19: ; preds = %9, %9, %9, %9, %9, %9, %9
%20 = sext i32 %1 to i64
%21 = add i64 %14, %20
%22 = icmp ugt i64 %21, 31
br i1 %22, label %23, label %32
23: ; preds = %19
%24 = zext i1 %18 to i64
%25 = add i64 %12, %24
%26 = trunc i64 %13 to i8
%27 = add nuw nsw i8 %26, 1
%28 = urem i8 %27, 12
%29 = icmp eq i8 %28, 0
%30 = select i1 %29, i8 1, i8 %28
%31 = zext i8 %30 to i64
br label %32
32: ; preds = %23, %19
%33 = phi i64 [ %31, %23 ], [ %13, %19 ]
%34 = phi i64 [ %25, %23 ], [ %12, %19 ]
%35 = urem i64 %21, 31
%36 = icmp eq i64 %35, 0
%37 = select i1 %36, i64 31, i64 %35
br label %66
38: ; preds = %9, %9, %9, %9
%39 = sext i32 %1 to i64
%40 = add i64 %14, %39
%41 = icmp ugt i64 %40, 30
%42 = zext i1 %41 to i64
%43 = add nuw nsw i64 %13, %42
%44 = urem i64 %40, 30
%45 = icmp eq i64 %44, 0
%46 = select i1 %45, i64 30, i64 %44
br label %66
47: ; preds = %9
%48 = and i64 %12, 3
%49 = icmp eq i64 %48, 0
%50 = sext i32 %1 to i64
%51 = add i64 %14, %50
br i1 %49, label %52, label %59
52: ; preds = %47
%53 = icmp ugt i64 %51, 29
%54 = zext i1 %53 to i64
%55 = add i64 %13, %54
%56 = urem i64 %51, 29
%57 = icmp eq i64 %56, 0
%58 = select i1 %57, i64 29, i64 %56
br label %66
59: ; preds = %47
%60 = icmp ugt i64 %51, 28
%61 = zext i1 %60 to i64
%62 = add i64 %13, %61
%63 = urem i64 %51, 28
%64 = icmp eq i64 %63, 0
%65 = select i1 %64, i64 28, i64 %63
br label %66
66: ; preds = %38, %59, %52, %32
%67 = phi i64 [ %37, %32 ], [ %46, %38 ], [ %58, %52 ], [ %65, %59 ]
%68 = phi i64 [ %33, %32 ], [ %43, %38 ], [ %55, %52 ], [ %62, %59 ]
%69 = phi i64 [ %34, %32 ], [ %12, %38 ], [ %12, %52 ], [ %12, %59 ]
%70 = call i32 @sprintf(i8* %10, i8* dereferenceable(1) getelementptr inbounds ([26 x i8], [26 x i8]* @.str.2, i64 0, i64 0), i64 %69, i64 %68, i64 %67, i64 %15, i64 %16, i32 %17)
%71 = call i32 @sscanf(i8* %10, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.3, i64 0, i64 0), i64* %4)
%72 = load i64, i64* %4
ret i64 %72
}