#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 */
typedef struct TYPE_3__ TYPE_1__;

/* Type definitions */
struct tm {
  int tm_sec;
  int tm_year;
  int tm_mon;
  int tm_mday;
  int tm_hour;
  int tm_min;
};
struct TYPE_3__ {
  scalar_t__ type;
  int length;
  scalar_t__ data;
};
typedef TYPE_1__ ASN1_UTCTIME;

/* Variables and functions */
int /*<<< orphan*/ OPENSSL_gmtime_adj(struct tm *, int /*<<< orphan*/, int);
scalar_t__ V_ASN1_UTCTIME;
int asn1_utctime_to_tm(struct tm *tm, const ASN1_UTCTIME *d) {
  static const int min[8] = {0, 1, 1, 0, 0, 0, 0, 0};
  static const int max[8] = {99, 12, 31, 23, 59, 59, 12, 59};
  char *a;
  int n, i, l, o;
  if (d->type != V_ASN1_UTCTIME)
    return (0);
  l = d->length;
  a = (char *)d->data;
  o = 0;
  if (l < 11)
    goto err;
  for (i = 0; i < 6; i++) {
    if ((i == 5) && ((a[o] == 'Z') || (a[o] == '+') || (a[o] == '-'))) {
      i++;
      if (tm)
        tm->tm_sec = 0;
      break;
    }
    if ((a[o] < '0') || (a[o] > '9'))
      goto err;
    n = a[o] - '0';
    if (++o > l)
      goto err;
    if ((a[o] < '0') || (a[o] > '9'))
      goto err;
    n = (n * 10) + a[o] - '0';
    if (++o > l)
      goto err;
    if ((n < min[i]) || (n > max[i]))
      goto err;
    if (tm) {
      switch (i) {
      case 0:
        tm->tm_year = n < 50 ? n + 100 : n;
        break;
      case 1:
        tm->tm_mon = n - 1;
        break;
      case 2:
        tm->tm_mday = n;
        break;
      case 3:
        tm->tm_hour = n;
        break;
      case 4:
        tm->tm_min = n;
        break;
      case 5:
        tm->tm_sec = n;
        break;
      }
    }
  }
  if (a[o] == 'Z')
    o++;
  else if ((a[o] == '+') || (a[o] == '-')) {
    int offsign = a[o] == '-' ? -1 : 1, offset = 0;
    o++;
    if (o + 4 > l)
      goto err;
    for (i = 6; i < 8; i++) {
      if ((a[o] < '0') || (a[o] > '9'))
        goto err;
      n = a[o] - '0';
      o++;
      if ((a[o] < '0') || (a[o] > '9'))
        goto err;
      n = (n * 10) + a[o] - '0';
      if ((n < min[i]) || (n > max[i]))
        goto err;
      if (tm) {
        if (i == 6)
          offset = n * 3600;
        else if (i == 7)
          offset += n * 60;
      }
      o++;
    }
    if (offset && !OPENSSL_gmtime_adj(tm, 0, offset * offsign))
      return 0;
  }
  return o == l;
err:
  return 0;
}


x86 assembly (clang, -O0):
<asn1_utctime_to_tm>:
push   %rbp
mov    %rsp,%rbp
sub    $0x50,%rsp
mov    %rdi,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
mov    -0x18(%rbp),%rax
mov    (%rax),%rax
mov    0x2eb2(%rip),%rcx
cmp    (%rcx),%rax
je     1143 <asn1_utctime_to_tm+0x33>
movl   $0x0,-0x4(%rbp)
jmp    15a8 <asn1_utctime_to_tm+0x498>
mov    -0x18(%rbp),%rax
mov    0x8(%rax),%eax
mov    %eax,-0x2c(%rbp)
mov    -0x18(%rbp),%rax
mov    0x10(%rax),%rax
mov    %rax,-0x20(%rbp)
movl   $0x0,-0x30(%rbp)
cmpl   $0xb,-0x2c(%rbp)
jge    116f <asn1_utctime_to_tm+0x5f>
jmp    15a1 <asn1_utctime_to_tm+0x491>
movl   $0x0,-0x28(%rbp)
cmpl   $0x6,-0x28(%rbp)
jge    1392 <asn1_utctime_to_tm+0x282>
cmpl   $0x5,-0x28(%rbp)
jne    11ec <asn1_utctime_to_tm+0xdc>
mov    -0x20(%rbp),%rax
movslq -0x30(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x5a,%eax
je     11c9 <asn1_utctime_to_tm+0xb9>
mov    -0x20(%rbp),%rax
movslq -0x30(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x2b,%eax
je     11c9 <asn1_utctime_to_tm+0xb9>
mov    -0x20(%rbp),%rax
movslq -0x30(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x2d,%eax
jne    11ec <asn1_utctime_to_tm+0xdc>
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
cmpq   $0x0,-0x10(%rbp)
je     11e7 <asn1_utctime_to_tm+0xd7>
mov    -0x10(%rbp),%rax
movl   $0x0,(%rax)
jmp    1392 <asn1_utctime_to_tm+0x282>
mov    -0x20(%rbp),%rax
movslq -0x30(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x30,%eax
jl     1216 <asn1_utctime_to_tm+0x106>
mov    -0x20(%rbp),%rax
movslq -0x30(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x39,%eax
jle    121b <asn1_utctime_to_tm+0x10b>
jmp    15a1 <asn1_utctime_to_tm+0x491>
mov    -0x20(%rbp),%rax
movslq -0x30(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
sub    $0x30,%eax
mov    %eax,-0x24(%rbp)
mov    -0x30(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x30(%rbp)
cmp    -0x2c(%rbp),%eax
jle    1244 <asn1_utctime_to_tm+0x134>
jmp    15a1 <asn1_utctime_to_tm+0x491>
mov    -0x20(%rbp),%rax
movslq -0x30(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x30,%eax
jl     126e <asn1_utctime_to_tm+0x15e>
mov    -0x20(%rbp),%rax
movslq -0x30(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x39,%eax
jle    1273 <asn1_utctime_to_tm+0x163>
jmp    15a1 <asn1_utctime_to_tm+0x491>
imul   $0xa,-0x24(%rbp),%eax
mov    -0x20(%rbp),%rcx
movslq -0x30(%rbp),%rdx
movsbl (%rcx,%rdx,1),%ecx
add    %ecx,%eax
sub    $0x30,%eax
mov    %eax,-0x24(%rbp)
mov    -0x30(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x30(%rbp)
cmp    -0x2c(%rbp),%eax
jle    12a2 <asn1_utctime_to_tm+0x192>
jmp    15a1 <asn1_utctime_to_tm+0x491>
mov    -0x24(%rbp),%eax
movslq -0x28(%rbp),%rdx
lea    0xd70(%rip),%rcx
cmp    (%rcx,%rdx,4),%eax
jl     12d0 <asn1_utctime_to_tm+0x1c0>
mov    -0x24(%rbp),%eax
movslq -0x28(%rbp),%rdx
lea    0xd79(%rip),%rcx
cmp    (%rcx,%rdx,4),%eax
jle    12d5 <asn1_utctime_to_tm+0x1c5>
jmp    15a1 <asn1_utctime_to_tm+0x491>
cmpq   $0x0,-0x10(%rbp)
je     137f <asn1_utctime_to_tm+0x26f>
mov    -0x28(%rbp),%eax
mov    %rax,-0x40(%rbp)
sub    $0x5,%rax
ja     137a <asn1_utctime_to_tm+0x26a>
mov    -0x40(%rbp),%rax
lea    0xd04(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
cmpl   $0x32,-0x24(%rbp)
jge    131d <asn1_utctime_to_tm+0x20d>
mov    -0x24(%rbp),%eax
add    $0x64,%eax
mov    %eax,-0x44(%rbp)
jmp    1323 <asn1_utctime_to_tm+0x213>
mov    -0x24(%rbp),%eax
mov    %eax,-0x44(%rbp)
mov    -0x44(%rbp),%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,0x4(%rax)
jmp    137a <asn1_utctime_to_tm+0x26a>
mov    -0x24(%rbp),%ecx
sub    $0x1,%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,0x8(%rax)
jmp    137a <asn1_utctime_to_tm+0x26a>
mov    -0x24(%rbp),%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,0xc(%rax)
jmp    137a <asn1_utctime_to_tm+0x26a>
mov    -0x24(%rbp),%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,0x10(%rax)
jmp    137a <asn1_utctime_to_tm+0x26a>
mov    -0x24(%rbp),%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,0x14(%rax)
jmp    137a <asn1_utctime_to_tm+0x26a>
mov    -0x24(%rbp),%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,(%rax)
jmp    137f <asn1_utctime_to_tm+0x26f>
jmp    1384 <asn1_utctime_to_tm+0x274>
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
jmp    1176 <asn1_utctime_to_tm+0x66>
mov    -0x20(%rbp),%rax
movslq -0x30(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x5a,%eax
jne    13b5 <asn1_utctime_to_tm+0x2a5>
mov    -0x30(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x30(%rbp)
jmp    158b <asn1_utctime_to_tm+0x47b>
mov    -0x20(%rbp),%rax
movslq -0x30(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x2b,%eax
je     13df <asn1_utctime_to_tm+0x2cf>
mov    -0x20(%rbp),%rax
movslq -0x30(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x2d,%eax
jne    1586 <asn1_utctime_to_tm+0x476>
mov    -0x20(%rbp),%rax
movslq -0x30(%rbp),%rcx
movsbl (%rax,%rcx,1),%edx
mov    $0x1,%eax
mov    $0xffffffff,%ecx
cmp    $0x2d,%edx
cmove  %ecx,%eax
mov    %eax,-0x34(%rbp)
movl   $0x0,-0x38(%rbp)
mov    -0x30(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x30(%rbp)
mov    -0x30(%rbp),%eax
add    $0x4,%eax
cmp    -0x2c(%rbp),%eax
jle    1422 <asn1_utctime_to_tm+0x312>
jmp    15a1 <asn1_utctime_to_tm+0x491>
movl   $0x6,-0x28(%rbp)
cmpl   $0x8,-0x28(%rbp)
jge    1550 <asn1_utctime_to_tm+0x440>
mov    -0x20(%rbp),%rax
movslq -0x30(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x30,%eax
jl     145d <asn1_utctime_to_tm+0x34d>
mov    -0x20(%rbp),%rax
movslq -0x30(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x39,%eax
jle    1462 <asn1_utctime_to_tm+0x352>
jmp    15a1 <asn1_utctime_to_tm+0x491>
mov    -0x20(%rbp),%rax
movslq -0x30(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
sub    $0x30,%eax
mov    %eax,-0x24(%rbp)
mov    -0x30(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x30(%rbp)
mov    -0x20(%rbp),%rax
movslq -0x30(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x30,%eax
jl     14a7 <asn1_utctime_to_tm+0x397>
mov    -0x20(%rbp),%rax
movslq -0x30(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x39,%eax
jle    14ac <asn1_utctime_to_tm+0x39c>
jmp    15a1 <asn1_utctime_to_tm+0x491>
imul   $0xa,-0x24(%rbp),%eax
mov    -0x20(%rbp),%rcx
movslq -0x30(%rbp),%rdx
movsbl (%rcx,%rdx,1),%ecx
add    %ecx,%eax
sub    $0x30,%eax
mov    %eax,-0x24(%rbp)
mov    -0x24(%rbp),%eax
movslq -0x28(%rbp),%rdx
lea    0xb4e(%rip),%rcx
cmp    (%rcx,%rdx,4),%eax
jl     14f2 <asn1_utctime_to_tm+0x3e2>
mov    -0x24(%rbp),%eax
movslq -0x28(%rbp),%rdx
lea    0xb57(%rip),%rcx
cmp    (%rcx,%rdx,4),%eax
jle    14f7 <asn1_utctime_to_tm+0x3e7>
jmp    15a1 <asn1_utctime_to_tm+0x491>
cmpq   $0x0,-0x10(%rbp)
je     1539 <asn1_utctime_to_tm+0x429>
cmpl   $0x6,-0x28(%rbp)
jne    151b <asn1_utctime_to_tm+0x40b>
imul   $0xe10,-0x24(%rbp),%eax
mov    %eax,-0x38(%rbp)
jmp    1534 <asn1_utctime_to_tm+0x424>
cmpl   $0x7,-0x28(%rbp)
jne    152f <asn1_utctime_to_tm+0x41f>
imul   $0x3c,-0x24(%rbp),%eax
add    -0x38(%rbp),%eax
mov    %eax,-0x38(%rbp)
jmp    1534 <asn1_utctime_to_tm+0x424>
jmp    1539 <asn1_utctime_to_tm+0x429>
mov    -0x30(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x30(%rbp)
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
jmp    1429 <asn1_utctime_to_tm+0x319>
cmpl   $0x0,-0x38(%rbp)
je     1581 <asn1_utctime_to_tm+0x471>
mov    -0x10(%rbp),%rdi
mov    -0x38(%rbp),%edx
imul   -0x34(%rbp),%edx
xor    %esi,%esi
call   1030 <OPENSSL_gmtime_adj@plt>
cmp    $0x0,%eax
jne    1581 <asn1_utctime_to_tm+0x471>
movl   $0x0,-0x4(%rbp)
jmp    15a8 <asn1_utctime_to_tm+0x498>
jmp    1586 <asn1_utctime_to_tm+0x476>
jmp    158b <asn1_utctime_to_tm+0x47b>
mov    -0x30(%rbp),%eax
cmp    -0x2c(%rbp),%eax
sete   %al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x4(%rbp)
jmp    15a8 <asn1_utctime_to_tm+0x498>
movl   $0x0,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x50,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<asn1_utctime_to_tm>:
push   %rbp
push   %r14
push   %rbx
mov    (%rsi),%rax
mov    0x2ec2(%rip),%rcx
xor    %ebx,%ebx
cmp    (%rcx),%rax
jne    13ce <asn1_utctime_to_tm+0x2be>
mov    0x8(%rsi),%ebp
cmp    $0xb,%ebp
jl     13ce <asn1_utctime_to_tm+0x2be>
mov    0x10(%rsi),%rax
movsbl (%rax),%edx
lea    -0x30(%rdx),%ecx
cmp    $0x9,%cl
ja     13ce <asn1_utctime_to_tm+0x2be>
movzbl 0x1(%rax),%ecx
lea    -0x3a(%rcx),%esi
cmp    $0xf6,%sil
jb     13ce <asn1_utctime_to_tm+0x2be>
lea    (%rdx,%rdx,4),%edx
lea    (%rcx,%rdx,2),%esi
add    $0xfffffd8c,%esi
cmp    $0xffffff9c,%esi
jb     13ce <asn1_utctime_to_tm+0x2be>
test   %rdi,%rdi
je     118b <asn1_utctime_to_tm+0x7b>
lea    (%rcx,%rdx,2),%ecx
add    $0xfffffe20,%ecx
lea    -0x30(%rcx),%edx
lea    0x34(%rcx),%esi
cmp    $0x62,%ecx
cmovae %edx,%esi
mov    %esi,0x4(%rdi)
movsbl 0x2(%rax),%edx
lea    -0x30(%rdx),%ecx
cmp    $0x9,%cl
ja     13ce <asn1_utctime_to_tm+0x2be>
movzbl 0x3(%rax),%ecx
lea    -0x3a(%rcx),%esi
cmp    $0xf6,%sil
jb     13ce <asn1_utctime_to_tm+0x2be>
lea    (%rdx,%rdx,4),%edx
lea    (%rcx,%rdx,2),%esi
add    $0xfffffde3,%esi
cmp    $0xfffffff4,%esi
jb     13ce <asn1_utctime_to_tm+0x2be>
test   %rdi,%rdi
je     11d5 <asn1_utctime_to_tm+0xc5>
lea    (%rcx,%rdx,2),%ecx
add    $0xfffffe20,%ecx
add    $0xffffffcf,%ecx
mov    %ecx,0x8(%rdi)
movsbl 0x4(%rax),%edx
lea    -0x30(%rdx),%ecx
cmp    $0x9,%cl
ja     13ce <asn1_utctime_to_tm+0x2be>
movzbl 0x5(%rax),%ecx
lea    -0x3a(%rcx),%esi
cmp    $0xf6,%sil
jb     13ce <asn1_utctime_to_tm+0x2be>
lea    (%rdx,%rdx,4),%edx
lea    (%rcx,%rdx,2),%esi
add    $0xfffffdd0,%esi
cmp    $0xffffffe1,%esi
jb     13ce <asn1_utctime_to_tm+0x2be>
test   %rdi,%rdi
je     121c <asn1_utctime_to_tm+0x10c>
lea    (%rcx,%rdx,2),%ecx
add    $0xfffffdf0,%ecx
mov    %ecx,0xc(%rdi)
movsbl 0x6(%rax),%edx
lea    -0x30(%rdx),%ecx
cmp    $0x9,%cl
ja     13ce <asn1_utctime_to_tm+0x2be>
movzbl 0x7(%rax),%ecx
lea    -0x3a(%rcx),%esi
cmp    $0xf6,%sil
jb     13ce <asn1_utctime_to_tm+0x2be>
lea    (%rdx,%rdx,4),%edx
lea    (%rcx,%rdx,2),%esi
add    $0xfffffdd8,%esi
cmp    $0xffffffe8,%esi
jb     13ce <asn1_utctime_to_tm+0x2be>
test   %rdi,%rdi
je     1263 <asn1_utctime_to_tm+0x153>
lea    (%rcx,%rdx,2),%ecx
add    $0xfffffdf0,%ecx
mov    %ecx,0x10(%rdi)
movsbl 0x8(%rax),%edx
lea    -0x30(%rdx),%ecx
cmp    $0x9,%cl
ja     13ce <asn1_utctime_to_tm+0x2be>
movzbl 0x9(%rax),%ecx
lea    -0x3a(%rcx),%esi
cmp    $0xf6,%sil
jb     13ce <asn1_utctime_to_tm+0x2be>
lea    (%rdx,%rdx,4),%edx
lea    (%rcx,%rdx,2),%esi
add    $0xfffffdb4,%esi
cmp    $0xffffffc4,%esi
jb     13ce <asn1_utctime_to_tm+0x2be>
test   %rdi,%rdi
je     12aa <asn1_utctime_to_tm+0x19a>
lea    (%rcx,%rdx,2),%ecx
add    $0xfffffdf0,%ecx
mov    %ecx,0x14(%rdi)
movsbl 0xa(%rax),%ecx
lea    -0x2b(%rcx),%edx
cmp    $0x2f,%dl
ja     13b9 <asn1_utctime_to_tm+0x2a9>
movzbl %dl,%edx
movabs $0x800000000005,%rsi
bt     %rdx,%rsi
jae    13b9 <asn1_utctime_to_tm+0x2a9>
xor    %ecx,%ecx
mov    $0xa,%r14d
test   %rdi,%rdi
je     12e0 <asn1_utctime_to_tm+0x1d0>
mov    %ecx,(%rdi)
mov    %r14d,%edx
mov    (%rax,%rdx,1),%cl
cmp    $0x2b,%cl
je     1306 <asn1_utctime_to_tm+0x1f6>
cmp    $0x2d,%cl
je     1306 <asn1_utctime_to_tm+0x1f6>
cmp    $0x5a,%cl
jne    12f9 <asn1_utctime_to_tm+0x1e9>
or     $0x1,%r14d
xor    %ebx,%ebx
cmp    %ebp,%r14d
sete   %bl
jmp    13ce <asn1_utctime_to_tm+0x2be>
add    $0x5,%r14d
cmp    %ebp,%r14d
ja     13ce <asn1_utctime_to_tm+0x2be>
or     $0x1,%rdx
movsbl (%rax,%rdx,1),%r9d
lea    -0x3a(%r9),%esi
cmp    $0xf6,%sil
jb     13ce <asn1_utctime_to_tm+0x2be>
movzbl 0x1(%rdx,%rax,1),%r8d
lea    -0x3a(%r8),%esi
cmp    $0xf6,%sil
jb     13ce <asn1_utctime_to_tm+0x2be>
lea    (%r9,%r9,4),%esi
lea    (%r8,%rsi,2),%r9d
add    $0xfffffdf0,%r9d
cmp    $0xc,%r9d
ja     13ce <asn1_utctime_to_tm+0x2be>
movsbl 0x2(%rdx,%rax,1),%r8d
lea    -0x3a(%r8),%esi
cmp    $0xf6,%sil
jb     13ce <asn1_utctime_to_tm+0x2be>
movzbl 0x3(%rdx,%rax,1),%eax
lea    -0x3a(%rax),%edx
cmp    $0xf6,%dl
jb     13ce <asn1_utctime_to_tm+0x2be>
lea    (%r8,%r8,4),%edx
lea    (%rax,%rdx,2),%eax
add    $0xfffffdf0,%eax
cmp    $0x3b,%eax
ja     13ce <asn1_utctime_to_tm+0x2be>
test   %rdi,%rdi
je     12f9 <asn1_utctime_to_tm+0x1e9>
imul   $0xe10,%r9d,%edx
imul   $0x3c,%eax,%eax
add    %edx,%eax
je     12f9 <asn1_utctime_to_tm+0x1e9>
mov    %eax,%edx
neg    %edx
cmp    $0x2d,%cl
cmovne %eax,%edx
xor    %ebx,%ebx
xor    %esi,%esi
call   1030 <OPENSSL_gmtime_adj@plt>
test   %eax,%eax
jne    12f9 <asn1_utctime_to_tm+0x1e9>
jmp    13ce <asn1_utctime_to_tm+0x2be>
lea    -0x30(%rcx),%edx
cmp    $0x9,%dl
ja     13ce <asn1_utctime_to_tm+0x2be>
movzbl 0xb(%rax),%edx
lea    -0x3a(%rdx),%esi
cmp    $0xf6,%sil
jae    13d5 <asn1_utctime_to_tm+0x2c5>
mov    %ebx,%eax
pop    %rbx
pop    %r14
pop    %rbp
ret
cmp    $0xc,%ebp
jb     13ce <asn1_utctime_to_tm+0x2be>
lea    (%rcx,%rcx,4),%ecx
lea    (%rdx,%rcx,2),%ecx
add    $0xfffffe20,%ecx
cmp    $0x30,%ecx
jl     13ce <asn1_utctime_to_tm+0x2be>
cmp    $0x6b,%ecx
ja     13ce <asn1_utctime_to_tm+0x2be>
mov    $0xc,%r14d
test   %rdi,%rdi
je     12e0 <asn1_utctime_to_tm+0x1d0>
add    $0xffffffd0,%ecx
jmp    12de <asn1_utctime_to_tm+0x1ce>

LLVM IR (-O0):
%struct.tm = type { i32, i32, i32, i32, i32, i32 }
%struct.TYPE_3__ = type { i64, i32, i64 }
@asn1_utctime_to_tm.min = internal constant [8 x i32] [i32 0, i32 1, i32 1, i32 0, i32 0, i32 0, i32 0, i32 0]
@asn1_utctime_to_tm.max = internal constant [8 x i32] [i32 99, i32 12, i32 31, i32 23, i32 59, i32 59, i32 12, i32 59]
@V_ASN1_UTCTIME = global i64 0
define i32 @asn1_utctime_to_tm(%struct.tm* %0, %struct.TYPE_3__* %1) {
%3 = alloca i32
%4 = alloca %struct.tm*
%5 = alloca %struct.TYPE_3__*
%6 = alloca i8*
%7 = alloca i32
%8 = alloca i32
%9 = alloca i32
%10 = alloca i32
%11 = alloca i32
%12 = alloca i32
store %struct.tm* %0, %struct.tm** %4
store %struct.TYPE_3__* %1, %struct.TYPE_3__** %5
%13 = load %struct.TYPE_3__*, %struct.TYPE_3__** %5
%14 = getelementptr inbounds %struct.TYPE_3__, %struct.TYPE_3__* %13, i32 0, i32 0
%15 = load i64, i64* %14
%16 = load i64, i64* @V_ASN1_UTCTIME
%17 = icmp ne i64 %15, %16
br i1 %17, label %18, label %19
18: ; preds = %2
store i32 0, i32* %3
br label %351
19: ; preds = %2
%20 = load %struct.TYPE_3__*, %struct.TYPE_3__** %5
%21 = getelementptr inbounds %struct.TYPE_3__, %struct.TYPE_3__* %20, i32 0, i32 1
%22 = load i32, i32* %21
store i32 %22, i32* %9
%23 = load %struct.TYPE_3__*, %struct.TYPE_3__** %5
%24 = getelementptr inbounds %struct.TYPE_3__, %struct.TYPE_3__* %23, i32 0, i32 2
%25 = load i64, i64* %24
%26 = inttoptr i64 %25 to i8*
store i8* %26, i8** %6
store i32 0, i32* %10
%27 = load i32, i32* %9
%28 = icmp slt i32 %27, 11
br i1 %28, label %29, label %30
29: ; preds = %19
br label %350
30: ; preds = %19
store i32 0, i32* %8
br label %31
31: ; preds = %188, %30
%32 = load i32, i32* %8
%33 = icmp slt i32 %32, 6
br i1 %33, label %34, label %191
34: ; preds = %31
%35 = load i32, i32* %8
%36 = icmp eq i32 %35, 5
br i1 %36, label %37, label %70
37: ; preds = %34
%38 = load i8*, i8** %6
%39 = load i32, i32* %10
%40 = sext i32 %39 to i64
%41 = getelementptr inbounds i8, i8* %38, i64 %40
%42 = load i8, i8* %41
%43 = sext i8 %42 to i32
%44 = icmp eq i32 %43, 90
br i1 %44, label %61, label %45
45: ; preds = %37
%46 = load i8*, i8** %6
%47 = load i32, i32* %10
%48 = sext i32 %47 to i64
%49 = getelementptr inbounds i8, i8* %46, i64 %48
%50 = load i8, i8* %49
%51 = sext i8 %50 to i32
%52 = icmp eq i32 %51, 43
br i1 %52, label %61, label %53
53: ; preds = %45
%54 = load i8*, i8** %6
%55 = load i32, i32* %10
%56 = sext i32 %55 to i64
%57 = getelementptr inbounds i8, i8* %54, i64 %56
%58 = load i8, i8* %57
%59 = sext i8 %58 to i32
%60 = icmp eq i32 %59, 45
br i1 %60, label %61, label %70
61: ; preds = %53, %45, %37
%62 = load i32, i32* %8
%63 = add nsw i32 %62, 1
store i32 %63, i32* %8
%64 = load %struct.tm*, %struct.tm** %4
%65 = icmp ne %struct.tm* %64, null
br i1 %65, label %66, label %69
66: ; preds = %61
%67 = load %struct.tm*, %struct.tm** %4
%68 = getelementptr inbounds %struct.tm, %struct.tm* %67, i32 0, i32 0
store i32 0, i32* %68
br label %69
69: ; preds = %66, %61
br label %191
70: ; preds = %53, %34
%71 = load i8*, i8** %6
%72 = load i32, i32* %10
%73 = sext i32 %72 to i64
%74 = getelementptr inbounds i8, i8* %71, i64 %73
%75 = load i8, i8* %74
%76 = sext i8 %75 to i32
%77 = icmp slt i32 %76, 48
br i1 %77, label %86, label %78
78: ; preds = %70
%79 = load i8*, i8** %6
%80 = load i32, i32* %10
%81 = sext i32 %80 to i64
%82 = getelementptr inbounds i8, i8* %79, i64 %81
%83 = load i8, i8* %82
%84 = sext i8 %83 to i32
%85 = icmp sgt i32 %84, 57
br i1 %85, label %86, label %87
86: ; preds = %78, %70
br label %350
87: ; preds = %78
%88 = load i8*, i8** %6
%89 = load i32, i32* %10
%90 = sext i32 %89 to i64
%91 = getelementptr inbounds i8, i8* %88, i64 %90
%92 = load i8, i8* %91
%93 = sext i8 %92 to i32
%94 = sub nsw i32 %93, 48
store i32 %94, i32* %7
%95 = load i32, i32* %10
%96 = add nsw i32 %95, 1
store i32 %96, i32* %10
%97 = load i32, i32* %9
%98 = icmp sgt i32 %96, %97
br i1 %98, label %99, label %100
99: ; preds = %87
br label %350
100: ; preds = %87
%101 = load i8*, i8** %6
%102 = load i32, i32* %10
%103 = sext i32 %102 to i64
%104 = getelementptr inbounds i8, i8* %101, i64 %103
%105 = load i8, i8* %104
%106 = sext i8 %105 to i32
%107 = icmp slt i32 %106, 48
br i1 %107, label %116, label %108
108: ; preds = %100
%109 = load i8*, i8** %6
%110 = load i32, i32* %10
%111 = sext i32 %110 to i64
%112 = getelementptr inbounds i8, i8* %109, i64 %111
%113 = load i8, i8* %112
%114 = sext i8 %113 to i32
%115 = icmp sgt i32 %114, 57
br i1 %115, label %116, label %117
116: ; preds = %108, %100
br label %350
117: ; preds = %108
%118 = load i32, i32* %7
%119 = mul nsw i32 %118, 10
%120 = load i8*, i8** %6
%121 = load i32, i32* %10
%122 = sext i32 %121 to i64
%123 = getelementptr inbounds i8, i8* %120, i64 %122
%124 = load i8, i8* %123
%125 = sext i8 %124 to i32
%126 = add nsw i32 %119, %125
%127 = sub nsw i32 %126, 48
store i32 %127, i32* %7
%128 = load i32, i32* %10
%129 = add nsw i32 %128, 1
store i32 %129, i32* %10
%130 = load i32, i32* %9
%131 = icmp sgt i32 %129, %130
br i1 %131, label %132, label %133
132: ; preds = %117
br label %350
133: ; preds = %117
%134 = load i32, i32* %7
%135 = load i32, i32* %8
%136 = sext i32 %135 to i64
%137 = getelementptr inbounds [8 x i32], [8 x i32]* @asn1_utctime_to_tm.min, i64 0, i64 %136
%138 = load i32, i32* %137
%139 = icmp slt i32 %134, %138
br i1 %139, label %147, label %140
140: ; preds = %133
%141 = load i32, i32* %7
%142 = load i32, i32* %8
%143 = sext i32 %142 to i64
%144 = getelementptr inbounds [8 x i32], [8 x i32]* @asn1_utctime_to_tm.max, i64 0, i64 %143
%145 = load i32, i32* %144
%146 = icmp sgt i32 %141, %145
br i1 %146, label %147, label %148
147: ; preds = %140, %133
br label %350
148: ; preds = %140
%149 = load %struct.tm*, %struct.tm** %4
%150 = icmp ne %struct.tm* %149, null
br i1 %150, label %151, label %187
151: ; preds = %148
%152 = load i32, i32* %8
switch i32 %152, label %186 [
i32 0, label %153
i32 1, label %165
i32 2, label %170
i32 3, label %174
i32 4, label %178
i32 5, label %182
]
153: ; preds = %151
%154 = load i32, i32* %7
%155 = icmp slt i32 %154, 50
br i1 %155, label %156, label %159
156: ; preds = %153
%157 = load i32, i32* %7
%158 = add nsw i32 %157, 100
br label %161
159: ; preds = %153
%160 = load i32, i32* %7
br label %161
161: ; preds = %159, %156
%162 = phi i32 [ %158, %156 ], [ %160, %159 ]
%163 = load %struct.tm*, %struct.tm** %4
%164 = getelementptr inbounds %struct.tm, %struct.tm* %163, i32 0, i32 1
store i32 %162, i32* %164
br label %186
165: ; preds = %151
%166 = load i32, i32* %7
%167 = sub nsw i32 %166, 1
%168 = load %struct.tm*, %struct.tm** %4
%169 = getelementptr inbounds %struct.tm, %struct.tm* %168, i32 0, i32 2
store i32 %167, i32* %169
br label %186
170: ; preds = %151
%171 = load i32, i32* %7
%172 = load %struct.tm*, %struct.tm** %4
%173 = getelementptr inbounds %struct.tm, %struct.tm* %172, i32 0, i32 3
store i32 %171, i32* %173
br label %186
174: ; preds = %151
%175 = load i32, i32* %7
%176 = load %struct.tm*, %struct.tm** %4
%177 = getelementptr inbounds %struct.tm, %struct.tm* %176, i32 0, i32 4
store i32 %175, i32* %177
br label %186
178: ; preds = %151
%179 = load i32, i32* %7
%180 = load %struct.tm*, %struct.tm** %4
%181 = getelementptr inbounds %struct.tm, %struct.tm* %180, i32 0, i32 5
store i32 %179, i32* %181
br label %186
182: ; preds = %151
%183 = load i32, i32* %7
%184 = load %struct.tm*, %struct.tm** %4
%185 = getelementptr inbounds %struct.tm, %struct.tm* %184, i32 0, i32 0
store i32 %183, i32* %185
br label %186
186: ; preds = %151, %182, %178, %174, %170, %165, %161
br label %187
187: ; preds = %186, %148
br label %188
188: ; preds = %187
%189 = load i32, i32* %8
%190 = add nsw i32 %189, 1
store i32 %190, i32* %8
br label %31
191: ; preds = %69, %31
%192 = load i8*, i8** %6
%193 = load i32, i32* %10
%194 = sext i32 %193 to i64
%195 = getelementptr inbounds i8, i8* %192, i64 %194
%196 = load i8, i8* %195
%197 = sext i8 %196 to i32
%198 = icmp eq i32 %197, 90
br i1 %198, label %199, label %202
199: ; preds = %191
%200 = load i32, i32* %10
%201 = add nsw i32 %200, 1
store i32 %201, i32* %10
br label %345
202: ; preds = %191
%203 = load i8*, i8** %6
%204 = load i32, i32* %10
%205 = sext i32 %204 to i64
%206 = getelementptr inbounds i8, i8* %203, i64 %205
%207 = load i8, i8* %206
%208 = sext i8 %207 to i32
%209 = icmp eq i32 %208, 43
br i1 %209, label %218, label %210
210: ; preds = %202
%211 = load i8*, i8** %6
%212 = load i32, i32* %10
%213 = sext i32 %212 to i64
%214 = getelementptr inbounds i8, i8* %211, i64 %213
%215 = load i8, i8* %214
%216 = sext i8 %215 to i32
%217 = icmp eq i32 %216, 45
br i1 %217, label %218, label %344
218: ; preds = %210, %202
%219 = load i8*, i8** %6
%220 = load i32, i32* %10
%221 = sext i32 %220 to i64
%222 = getelementptr inbounds i8, i8* %219, i64 %221
%223 = load i8, i8* %222
%224 = sext i8 %223 to i32
%225 = icmp eq i32 %224, 45
%226 = zext i1 %225 to i64
%227 = select i1 %225, i32 -1, i32 1
store i32 %227, i32* %11
store i32 0, i32* %12
%228 = load i32, i32* %10
%229 = add nsw i32 %228, 1
store i32 %229, i32* %10
%230 = load i32, i32* %10
%231 = add nsw i32 %230, 4
%232 = load i32, i32* %9
%233 = icmp sgt i32 %231, %232
br i1 %233, label %234, label %235
234: ; preds = %218
br label %350
235: ; preds = %218
store i32 6, i32* %8
br label %236
236: ; preds = %329, %235
%237 = load i32, i32* %8
%238 = icmp slt i32 %237, 8
br i1 %238, label %239, label %332
239: ; preds = %236
%240 = load i8*, i8** %6
%241 = load i32, i32* %10
%242 = sext i32 %241 to i64
%243 = getelementptr inbounds i8, i8* %240, i64 %242
%244 = load i8, i8* %243
%245 = sext i8 %244 to i32
%246 = icmp slt i32 %245, 48
br i1 %246, label %255, label %247
247: ; preds = %239
%248 = load i8*, i8** %6
%249 = load i32, i32* %10
%250 = sext i32 %249 to i64
%251 = getelementptr inbounds i8, i8* %248, i64 %250
%252 = load i8, i8* %251
%253 = sext i8 %252 to i32
%254 = icmp sgt i32 %253, 57
br i1 %254, label %255, label %256
255: ; preds = %247, %239
br label %350
256: ; preds = %247
%257 = load i8*, i8** %6
%258 = load i32, i32* %10
%259 = sext i32 %258 to i64
%260 = getelementptr inbounds i8, i8* %257, i64 %259
%261 = load i8, i8* %260
%262 = sext i8 %261 to i32
%263 = sub nsw i32 %262, 48
store i32 %263, i32* %7
%264 = load i32, i32* %10
%265 = add nsw i32 %264, 1
store i32 %265, i32* %10
%266 = load i8*, i8** %6
%267 = load i32, i32* %10
%268 = sext i32 %267 to i64
%269 = getelementptr inbounds i8, i8* %266, i64 %268
%270 = load i8, i8* %269
%271 = sext i8 %270 to i32
%272 = icmp slt i32 %271, 48
br i1 %272, label %281, label %273
273: ; preds = %256
%274 = load i8*, i8** %6
%275 = load i32, i32* %10
%276 = sext i32 %275 to i64
%277 = getelementptr inbounds i8, i8* %274, i64 %276
%278 = load i8, i8* %277
%279 = sext i8 %278 to i32
%280 = icmp sgt i32 %279, 57
br i1 %280, label %281, label %282
281: ; preds = %273, %256
br label %350
282: ; preds = %273
%283 = load i32, i32* %7
%284 = mul nsw i32 %283, 10
%285 = load i8*, i8** %6
%286 = load i32, i32* %10
%287 = sext i32 %286 to i64
%288 = getelementptr inbounds i8, i8* %285, i64 %287
%289 = load i8, i8* %288
%290 = sext i8 %289 to i32
%291 = add nsw i32 %284, %290
%292 = sub nsw i32 %291, 48
store i32 %292, i32* %7
%293 = load i32, i32* %7
%294 = load i32, i32* %8
%295 = sext i32 %294 to i64
%296 = getelementptr inbounds [8 x i32], [8 x i32]* @asn1_utctime_to_tm.min, i64 0, i64 %295
%297 = load i32, i32* %296
%298 = icmp slt i32 %293, %297
br i1 %298, label %306, label %299
299: ; preds = %282
%300 = load i32, i32* %7
%301 = load i32, i32* %8
%302 = sext i32 %301 to i64
%303 = getelementptr inbounds [8 x i32], [8 x i32]* @asn1_utctime_to_tm.max, i64 0, i64 %302
%304 = load i32, i32* %303
%305 = icmp sgt i32 %300, %304
br i1 %305, label %306, label %307
306: ; preds = %299, %282
br label %350
307: ; preds = %299
%308 = load %struct.tm*, %struct.tm** %4
%309 = icmp ne %struct.tm* %308, null
br i1 %309, label %310, label %326
310: ; preds = %307
%311 = load i32, i32* %8
%312 = icmp eq i32 %311, 6
br i1 %312, label %313, label %316
313: ; preds = %310
%314 = load i32, i32* %7
%315 = mul nsw i32 %314, 3600
store i32 %315, i32* %12
br label %325
316: ; preds = %310
%317 = load i32, i32* %8
%318 = icmp eq i32 %317, 7
br i1 %318, label %319, label %324
319: ; preds = %316
%320 = load i32, i32* %7
%321 = mul nsw i32 %320, 60
%322 = load i32, i32* %12
%323 = add nsw i32 %322, %321
store i32 %323, i32* %12
br label %324
324: ; preds = %319, %316
br label %325
325: ; preds = %324, %313
br label %326
326: ; preds = %325, %307
%327 = load i32, i32* %10
%328 = add nsw i32 %327, 1
store i32 %328, i32* %10
br label %329
329: ; preds = %326
%330 = load i32, i32* %8
%331 = add nsw i32 %330, 1
store i32 %331, i32* %8
br label %236
332: ; preds = %236
%333 = load i32, i32* %12
%334 = icmp ne i32 %333, 0
br i1 %334, label %335, label %343
335: ; preds = %332
%336 = load %struct.tm*, %struct.tm** %4
%337 = load i32, i32* %12
%338 = load i32, i32* %11
%339 = mul nsw i32 %337, %338
%340 = call i32 @OPENSSL_gmtime_adj(%struct.tm* %336, i32 0, i32 %339)
%341 = icmp ne i32 %340, 0
br i1 %341, label %343, label %342
342: ; preds = %335
store i32 0, i32* %3
br label %351
343: ; preds = %335, %332
br label %344
344: ; preds = %343, %210
br label %345
345: ; preds = %344, %199
%346 = load i32, i32* %10
%347 = load i32, i32* %9
%348 = icmp eq i32 %346, %347
%349 = zext i1 %348 to i32
store i32 %349, i32* %3
br label %351
350: ; preds = %306, %281, %255, %234, %147, %132, %116, %99, %86, %29
store i32 0, i32* %3
br label %351
351: ; preds = %350, %345, %342, %18
%352 = load i32, i32* %3
ret i32 %352
}

LLVM IR (-O2):
%struct.tm = type { i32, i32, i32, i32, i32, i32 }
%struct.TYPE_3__ = type { i64, i32, i64 }
@V_ASN1_UTCTIME = global i64 0
define i32 @asn1_utctime_to_tm(%struct.tm* %0, %struct.TYPE_3__* nocapture %1) {
%3 = getelementptr inbounds %struct.TYPE_3__, %struct.TYPE_3__* %1, i64 0, i32 0
%4 = load i64, i64* %3
%5 = load i64, i64* @V_ASN1_UTCTIME
%6 = icmp eq i64 %4, %5
br i1 %6, label %7, label %221
7: ; preds = %2
%8 = getelementptr inbounds %struct.TYPE_3__, %struct.TYPE_3__* %1, i64 0, i32 1
%9 = load i32, i32* %8
%10 = getelementptr inbounds %struct.TYPE_3__, %struct.TYPE_3__* %1, i64 0, i32 2
%11 = load i64, i64* %10
%12 = inttoptr i64 %11 to i8*
%13 = icmp slt i32 %9, 11
br i1 %13, label %221, label %15
14: ; preds = %128, %128, %128
br i1 %16, label %155, label %152
15: ; preds = %7
%16 = icmp eq %struct.tm* %0, null
%17 = getelementptr inbounds %struct.tm, %struct.tm* %0, i64 0, i32 0
%18 = getelementptr inbounds %struct.tm, %struct.tm* %0, i64 0, i32 5
%19 = getelementptr inbounds %struct.tm, %struct.tm* %0, i64 0, i32 4
%20 = getelementptr inbounds %struct.tm, %struct.tm* %0, i64 0, i32 3
%21 = getelementptr inbounds %struct.tm, %struct.tm* %0, i64 0, i32 2
%22 = getelementptr inbounds %struct.tm, %struct.tm* %0, i64 0, i32 1
%23 = load i8, i8* %12
%24 = sext i8 %23 to i32
%25 = add i8 %23, -48
%26 = icmp ult i8 %25, 10
br i1 %26, label %27, label %221
27: ; preds = %15
%28 = getelementptr inbounds i8, i8* %12, i64 1
%29 = load i8, i8* %28
%30 = add i8 %29, -58
%31 = icmp ult i8 %30, -10
br i1 %31, label %221, label %32
32: ; preds = %27
%33 = zext i8 %29 to i32
%34 = mul nsw i32 %24, 10
%35 = add nsw i32 %34, -480
%36 = add nsw i32 %35, %33
%37 = add nsw i32 %36, -148
%38 = icmp ult i32 %37, -100
br i1 %38, label %221, label %39
39: ; preds = %32
br i1 %16, label %44, label %40
40: ; preds = %39
%41 = icmp ult i32 %36, 98
%42 = select i1 %41, i32 52, i32 -48
%43 = add nsw i32 %36, %42
store i32 %43, i32* %22
br label %44
44: ; preds = %39, %40
%45 = getelementptr inbounds i8, i8* %12, i64 2
%46 = load i8, i8* %45
%47 = sext i8 %46 to i32
%48 = add i8 %46, -48
%49 = icmp ult i8 %48, 10
br i1 %49, label %50, label %221
50: ; preds = %44
%51 = getelementptr inbounds i8, i8* %12, i64 3
%52 = load i8, i8* %51
%53 = add i8 %52, -58
%54 = icmp ult i8 %53, -10
br i1 %54, label %221, label %55
55: ; preds = %50
%56 = zext i8 %52 to i32
%57 = mul nsw i32 %47, 10
%58 = add nsw i32 %57, -480
%59 = add nsw i32 %58, %56
%60 = add nsw i32 %59, -61
%61 = icmp ult i32 %60, -12
br i1 %61, label %221, label %62
62: ; preds = %55
br i1 %16, label %65, label %63
63: ; preds = %62
%64 = add nsw i32 %59, -49
store i32 %64, i32* %21
br label %65
65: ; preds = %63, %62
%66 = getelementptr inbounds i8, i8* %12, i64 4
%67 = load i8, i8* %66
%68 = sext i8 %67 to i32
%69 = add i8 %67, -48
%70 = icmp ult i8 %69, 10
br i1 %70, label %71, label %221
71: ; preds = %65
%72 = getelementptr inbounds i8, i8* %12, i64 5
%73 = load i8, i8* %72
%74 = add i8 %73, -58
%75 = icmp ult i8 %74, -10
br i1 %75, label %221, label %76
76: ; preds = %71
%77 = zext i8 %73 to i32
%78 = mul nsw i32 %68, 10
%79 = add nsw i32 %78, -480
%80 = add nsw i32 %79, %77
%81 = add nsw i32 %80, -48
%82 = add nsw i32 %80, -80
%83 = icmp ult i32 %82, -31
br i1 %83, label %221, label %84
84: ; preds = %76
br i1 %16, label %86, label %85
85: ; preds = %84
store i32 %81, i32* %20
br label %86
86: ; preds = %85, %84
%87 = getelementptr inbounds i8, i8* %12, i64 6
%88 = load i8, i8* %87
%89 = sext i8 %88 to i32
%90 = add i8 %88, -48
%91 = icmp ult i8 %90, 10
br i1 %91, label %92, label %221
92: ; preds = %86
%93 = getelementptr inbounds i8, i8* %12, i64 7
%94 = load i8, i8* %93
%95 = add i8 %94, -58
%96 = icmp ult i8 %95, -10
br i1 %96, label %221, label %97
97: ; preds = %92
%98 = zext i8 %94 to i32
%99 = mul nsw i32 %89, 10
%100 = add nsw i32 %99, -480
%101 = add nsw i32 %100, %98
%102 = add nsw i32 %101, -48
%103 = add nsw i32 %101, -72
%104 = icmp ult i32 %103, -24
br i1 %104, label %221, label %105
105: ; preds = %97
br i1 %16, label %107, label %106
106: ; preds = %105
store i32 %102, i32* %19
br label %107
107: ; preds = %106, %105
%108 = getelementptr inbounds i8, i8* %12, i64 8
%109 = load i8, i8* %108
%110 = sext i8 %109 to i32
%111 = add i8 %109, -48
%112 = icmp ult i8 %111, 10
br i1 %112, label %113, label %221
113: ; preds = %107
%114 = getelementptr inbounds i8, i8* %12, i64 9
%115 = load i8, i8* %114
%116 = add i8 %115, -58
%117 = icmp ult i8 %116, -10
br i1 %117, label %221, label %118
118: ; preds = %113
%119 = zext i8 %115 to i32
%120 = mul nsw i32 %110, 10
%121 = add nsw i32 %120, -480
%122 = add nsw i32 %121, %119
%123 = add nsw i32 %122, -48
%124 = add nsw i32 %122, -108
%125 = icmp ult i32 %124, -60
br i1 %125, label %221, label %126
126: ; preds = %118
br i1 %16, label %128, label %127
127: ; preds = %126
store i32 %123, i32* %18
br label %128
128: ; preds = %126, %127
%129 = getelementptr inbounds i8, i8* %12, i64 10
%130 = load i8, i8* %129
switch i8 %130, label %131 [
i8 90, label %14
i8 43, label %14
i8 45, label %14
]
131: ; preds = %128
%132 = sext i8 %130 to i32
%133 = add i8 %130, -48
%134 = icmp ult i8 %133, 10
br i1 %134, label %135, label %221
135: ; preds = %131
%136 = getelementptr inbounds i8, i8* %12, i64 11
%137 = load i8, i8* %136
%138 = add i8 %137, -58
%139 = icmp ult i8 %138, -10
br i1 %139, label %221, label %140
140: ; preds = %135
%141 = zext i8 %137 to i32
%142 = mul nsw i32 %132, 10
%143 = add nsw i32 %142, -480
%144 = add nsw i32 %143, %141
%145 = icmp ult i32 %9, 12
%146 = icmp slt i32 %144, 48
%147 = select i1 %145, i1 true, i1 %146
%148 = icmp ugt i32 %144, 107
%149 = select i1 %147, i1 true, i1 %148
br i1 %149, label %221, label %150
150: ; preds = %140
%151 = add nsw i32 %144, -48
br i1 %16, label %155, label %152
152: ; preds = %150, %14
%153 = phi i32 [ 0, %14 ], [ %151, %150 ]
%154 = phi i32 [ 10, %14 ], [ 12, %150 ]
store i32 %153, i32* %17
br label %155
155: ; preds = %152, %150, %14
%156 = phi i32 [ 10, %14 ], [ 12, %150 ], [ %154, %152 ]
%157 = zext i32 %156 to i64
%158 = getelementptr inbounds i8, i8* %12, i64 %157
%159 = load i8, i8* %158
switch i8 %159, label %217 [
i8 90, label %160
i8 43, label %162
i8 45, label %162
]
160: ; preds = %155
%161 = or i32 %156, 1
br label %217
162: ; preds = %155, %155
%163 = icmp eq i8 %159, 45
%164 = add nuw nsw i32 %156, 5
%165 = icmp ugt i32 %164, %9
br i1 %165, label %221, label %166
166: ; preds = %162
%167 = or i32 %156, 1
%168 = zext i32 %167 to i64
%169 = add nuw nsw i32 %156, 5
%170 = getelementptr inbounds i8, i8* %12, i64 %168
%171 = load i8, i8* %170
%172 = sext i8 %171 to i32
%173 = add i8 %171, -58
%174 = icmp ult i8 %173, -10
br i1 %174, label %221, label %175
175: ; preds = %166
%176 = add nuw nsw i64 %168, 1
%177 = getelementptr inbounds i8, i8* %12, i64 %176
%178 = load i8, i8* %177
%179 = add i8 %178, -58
%180 = icmp ult i8 %179, -10
br i1 %180, label %221, label %181
181: ; preds = %175
%182 = zext i8 %178 to i32
%183 = mul nsw i32 %172, 10
%184 = add nsw i32 %183, -528
%185 = add nsw i32 %184, %182
%186 = icmp ugt i32 %185, 12
br i1 %186, label %221, label %187
187: ; preds = %181
%188 = mul nuw nsw i32 %185, 3600
%189 = add nuw nsw i64 %168, 2
%190 = getelementptr inbounds i8, i8* %12, i64 %189
%191 = load i8, i8* %190
%192 = sext i8 %191 to i32
%193 = add i8 %191, -58
%194 = icmp ult i8 %193, -10
br i1 %194, label %221, label %195
195: ; preds = %187
%196 = add nuw nsw i64 %168, 3
%197 = getelementptr inbounds i8, i8* %12, i64 %196
%198 = load i8, i8* %197
%199 = add i8 %198, -58
%200 = icmp ult i8 %199, -10
br i1 %200, label %221, label %201
201: ; preds = %195
%202 = zext i8 %198 to i32
%203 = mul nsw i32 %192, 10
%204 = add nsw i32 %203, -528
%205 = add nsw i32 %204, %202
%206 = icmp ugt i32 %205, 59
br i1 %206, label %221, label %207
207: ; preds = %201
%208 = mul nuw nsw i32 %205, 60
%209 = add nsw i32 %188, %208
%210 = icmp eq i32 %209, 0
%211 = select i1 %16, i1 true, i1 %210
br i1 %211, label %217, label %212
212: ; preds = %207
%213 = sub nsw i32 0, %209
%214 = select i1 %163, i32 %213, i32 %209
%215 = tail call i32 @OPENSSL_gmtime_adj(%struct.tm* %0, i32 0, i32 %214)
%216 = icmp eq i32 %215, 0
br i1 %216, label %221, label %217
217: ; preds = %212, %207, %155, %160
%218 = phi i32 [ %161, %160 ], [ %156, %155 ], [ %169, %207 ], [ %169, %212 ]
%219 = icmp eq i32 %218, %9
%220 = zext i1 %219 to i32
br label %221
221: ; preds = %15, %27, %32, %44, %50, %55, %65, %71, %76, %86, %92, %97, %107, %113, %118, %131, %135, %140, %181, %175, %166, %187, %195, %201, %212, %162, %7, %2, %217
%222 = phi i32 [ %220, %217 ], [ 0, %2 ], [ 0, %7 ], [ 0, %162 ], [ 0, %212 ], [ 0, %201 ], [ 0, %195 ], [ 0, %187 ], [ 0, %166 ], [ 0, %175 ], [ 0, %181 ], [ 0, %140 ], [ 0, %135 ], [ 0, %131 ], [ 0, %118 ], [ 0, %113 ], [ 0, %107 ], [ 0, %97 ], [ 0, %92 ], [ 0, %86 ], [ 0, %76 ], [ 0, %71 ], [ 0, %65 ], [ 0, %55 ], [ 0, %50 ], [ 0, %44 ], [ 0, %32 ], [ 0, %27 ], [ 0, %15 ]
ret i32 %222
}