#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 */
scalar_t__ isascii(char const);
scalar_t__ isdigit(char const);
char const *end_ip(char const *s, char const *e) {
  int i;
  if (s >= e)
    return NULL;
  if (!(isascii(*s) && isdigit(*s)))
    return NULL;
  s++;
  if (s < e && (isascii(*s) && isdigit(*s))) {
    s++;
    if (s < e && (isascii(*s) && isdigit(*s)))
      s++;
  }
  for (i = 0; i < 3; i++) {
    if (s >= e || *s != '.')
      return NULL;
    s++;
    if (s >= e || !(isascii(*s) && isdigit(*s)))
      return NULL;
    s++;
    if (s < e && (isascii(*s) && isdigit(*s))) {
      s++;
      if (s < e && (isascii(*s) && isdigit(*s)))
        s++;
    }
  }
  if (s < e && (isascii(*s) && isdigit(*s)))
    return NULL;
  return s;
}


x86 assembly (clang, -O0):
<end_ip>:
push   %rbp
mov    %rsp,%rbp
sub    $0x20,%rsp
mov    %rdi,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
mov    -0x10(%rbp),%rax
cmp    -0x18(%rbp),%rax
jb     114b <end_ip+0x2b>
movq   $0x0,-0x8(%rbp)
jmp    13af <end_ip+0x28f>
mov    -0x10(%rbp),%rax
movsbl (%rax),%edi
call   1040 <isascii@plt>
cmp    $0x0,%rax
je     1177 <end_ip+0x57>
mov    -0x10(%rbp),%rax
movsbl (%rax),%edi
call   1030 <isdigit@plt>
cmp    $0x0,%rax
jne    1184 <end_ip+0x64>
movq   $0x0,-0x8(%rbp)
jmp    13af <end_ip+0x28f>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
mov    -0x10(%rbp),%rax
cmp    -0x18(%rbp),%rax
jae    1221 <end_ip+0x101>
mov    -0x10(%rbp),%rax
movsbl (%rax),%edi
call   1040 <isascii@plt>
cmp    $0x0,%rax
je     1221 <end_ip+0x101>
mov    -0x10(%rbp),%rax
movsbl (%rax),%edi
call   1030 <isdigit@plt>
cmp    $0x0,%rax
je     1221 <end_ip+0x101>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
mov    -0x10(%rbp),%rax
cmp    -0x18(%rbp),%rax
jae    121c <end_ip+0xfc>
mov    -0x10(%rbp),%rax
movsbl (%rax),%edi
call   1040 <isascii@plt>
cmp    $0x0,%rax
je     121c <end_ip+0xfc>
mov    -0x10(%rbp),%rax
movsbl (%rax),%edi
call   1030 <isdigit@plt>
cmp    $0x0,%rax
je     121c <end_ip+0xfc>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    1221 <end_ip+0x101>
movl   $0x0,-0x1c(%rbp)
cmpl   $0x3,-0x1c(%rbp)
jge    1360 <end_ip+0x240>
mov    -0x10(%rbp),%rax
cmp    -0x18(%rbp),%rax
jae    1250 <end_ip+0x130>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2e,%eax
je     125d <end_ip+0x13d>
movq   $0x0,-0x8(%rbp)
jmp    13af <end_ip+0x28f>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
mov    -0x10(%rbp),%rax
cmp    -0x18(%rbp),%rax
jae    12a3 <end_ip+0x183>
mov    -0x10(%rbp),%rax
movsbl (%rax),%edi
call   1040 <isascii@plt>
cmp    $0x0,%rax
je     12a3 <end_ip+0x183>
mov    -0x10(%rbp),%rax
movsbl (%rax),%edi
call   1030 <isdigit@plt>
cmp    $0x0,%rax
jne    12b0 <end_ip+0x190>
movq   $0x0,-0x8(%rbp)
jmp    13af <end_ip+0x28f>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
mov    -0x10(%rbp),%rax
cmp    -0x18(%rbp),%rax
jae    134d <end_ip+0x22d>
mov    -0x10(%rbp),%rax
movsbl (%rax),%edi
call   1040 <isascii@plt>
cmp    $0x0,%rax
je     134d <end_ip+0x22d>
mov    -0x10(%rbp),%rax
movsbl (%rax),%edi
call   1030 <isdigit@plt>
cmp    $0x0,%rax
je     134d <end_ip+0x22d>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
mov    -0x10(%rbp),%rax
cmp    -0x18(%rbp),%rax
jae    1348 <end_ip+0x228>
mov    -0x10(%rbp),%rax
movsbl (%rax),%edi
call   1040 <isascii@plt>
cmp    $0x0,%rax
je     1348 <end_ip+0x228>
mov    -0x10(%rbp),%rax
movsbl (%rax),%edi
call   1030 <isdigit@plt>
cmp    $0x0,%rax
je     1348 <end_ip+0x228>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    134d <end_ip+0x22d>
jmp    1352 <end_ip+0x232>
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    1228 <end_ip+0x108>
mov    -0x10(%rbp),%rax
cmp    -0x18(%rbp),%rax
jae    13a7 <end_ip+0x287>
mov    -0x10(%rbp),%rax
movsbl (%rax),%edi
call   1040 <isascii@plt>
cmp    $0x0,%rax
je     13a7 <end_ip+0x287>
mov    -0x10(%rbp),%rax
movsbl (%rax),%edi
call   1030 <isdigit@plt>
cmp    $0x0,%rax
je     13a7 <end_ip+0x287>
movq   $0x0,-0x8(%rbp)
jmp    13af <end_ip+0x28f>
mov    -0x10(%rbp),%rax
mov    %rax,-0x8(%rbp)
mov    -0x8(%rbp),%rax
add    $0x20,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<end_ip>:
push   %r15
push   %r14
push   %rbx
cmp    %rsi,%rdi
jae    1370 <end_ip+0x250>
mov    %rsi,%r14
mov    %rdi,%rbx
movsbl (%rdi),%edi
call   1040 <isascii@plt>
test   %rax,%rax
je     1370 <end_ip+0x250>
movsbl (%rbx),%edi
call   1030 <isdigit@plt>
test   %rax,%rax
je     1370 <end_ip+0x250>
lea    0x1(%rbx),%r15
cmp    %r14,%r15
jae    11a6 <end_ip+0x86>
movsbl (%r15),%edi
call   1040 <isascii@plt>
test   %rax,%rax
je     11a6 <end_ip+0x86>
movsbl (%r15),%edi
call   1030 <isdigit@plt>
test   %rax,%rax
je     11a6 <end_ip+0x86>
lea    0x2(%rbx),%r15
cmp    %r14,%r15
jae    11a6 <end_ip+0x86>
movsbl (%r15),%edi
call   1040 <isascii@plt>
test   %rax,%rax
je     11a6 <end_ip+0x86>
movsbl 0x2(%rbx),%edi
call   1030 <isdigit@plt>
add    $0x3,%rbx
test   %rax,%rax
cmovne %rbx,%r15
cmp    %r14,%r15
jae    1370 <end_ip+0x250>
cmpb   $0x2e,(%r15)
jne    1370 <end_ip+0x250>
lea    0x1(%r15),%rbx
cmp    %r14,%rbx
jae    1370 <end_ip+0x250>
movsbl (%rbx),%edi
call   1040 <isascii@plt>
test   %rax,%rax
je     1370 <end_ip+0x250>
movsbl (%rbx),%edi
call   1030 <isdigit@plt>
test   %rax,%rax
je     1370 <end_ip+0x250>
lea    0x2(%r15),%rbx
cmp    %r14,%rbx
jae    1236 <end_ip+0x116>
movsbl (%rbx),%edi
call   1040 <isascii@plt>
test   %rax,%rax
je     1236 <end_ip+0x116>
movsbl (%rbx),%edi
call   1030 <isdigit@plt>
test   %rax,%rax
je     1236 <end_ip+0x116>
lea    0x3(%r15),%rbx
cmp    %r14,%rbx
jae    1236 <end_ip+0x116>
movsbl (%rbx),%edi
call   1040 <isascii@plt>
test   %rax,%rax
je     1236 <end_ip+0x116>
movsbl 0x3(%r15),%edi
call   1030 <isdigit@plt>
add    $0x4,%r15
test   %rax,%rax
cmovne %r15,%rbx
cmp    %r14,%rbx
jae    1370 <end_ip+0x250>
cmpb   $0x2e,(%rbx)
jne    1370 <end_ip+0x250>
lea    0x1(%rbx),%r15
cmp    %r14,%r15
jae    1370 <end_ip+0x250>
movsbl (%r15),%edi
call   1040 <isascii@plt>
test   %rax,%rax
je     1370 <end_ip+0x250>
movsbl (%r15),%edi
call   1030 <isdigit@plt>
test   %rax,%rax
je     1370 <end_ip+0x250>
lea    0x2(%rbx),%r15
cmp    %r14,%r15
jae    12c9 <end_ip+0x1a9>
movsbl (%r15),%edi
call   1040 <isascii@plt>
test   %rax,%rax
je     12c9 <end_ip+0x1a9>
movsbl (%r15),%edi
call   1030 <isdigit@plt>
test   %rax,%rax
je     12c9 <end_ip+0x1a9>
lea    0x3(%rbx),%r15
cmp    %r14,%r15
jae    12c9 <end_ip+0x1a9>
movsbl (%r15),%edi
call   1040 <isascii@plt>
test   %rax,%rax
je     12c9 <end_ip+0x1a9>
movsbl 0x3(%rbx),%edi
call   1030 <isdigit@plt>
add    $0x4,%rbx
test   %rax,%rax
cmovne %rbx,%r15
cmp    %r14,%r15
jae    1370 <end_ip+0x250>
cmpb   $0x2e,(%r15)
jne    1370 <end_ip+0x250>
lea    0x1(%r15),%rbx
cmp    %r14,%rbx
jae    1370 <end_ip+0x250>
movsbl (%rbx),%edi
call   1040 <isascii@plt>
test   %rax,%rax
je     1370 <end_ip+0x250>
movsbl (%rbx),%edi
call   1030 <isdigit@plt>
test   %rax,%rax
je     1370 <end_ip+0x250>
lea    0x2(%r15),%rbx
cmp    %r14,%rbx
jae    1351 <end_ip+0x231>
movsbl (%rbx),%edi
call   1040 <isascii@plt>
test   %rax,%rax
je     1351 <end_ip+0x231>
movsbl (%rbx),%edi
call   1030 <isdigit@plt>
test   %rax,%rax
je     1351 <end_ip+0x231>
lea    0x3(%r15),%rbx
cmp    %r14,%rbx
jae    1351 <end_ip+0x231>
movsbl (%rbx),%edi
call   1040 <isascii@plt>
test   %rax,%rax
je     1351 <end_ip+0x231>
movsbl 0x3(%r15),%edi
call   1030 <isdigit@plt>
add    $0x4,%r15
test   %rax,%rax
cmovne %r15,%rbx
cmp    %r14,%rbx
jae    1372 <end_ip+0x252>
movsbl (%rbx),%edi
call   1040 <isascii@plt>
test   %rax,%rax
je     1372 <end_ip+0x252>
movsbl (%rbx),%edi
call   1030 <isdigit@plt>
test   %rax,%rax
je     1372 <end_ip+0x252>
xor    %ebx,%ebx
mov    %rbx,%rax
pop    %rbx
pop    %r14
pop    %r15
ret

LLVM IR (-O0):
define i8* @end_ip(i8* %0, i8* %1) {
%3 = alloca i8*
%4 = alloca i8*
%5 = alloca i8*
%6 = alloca i32
store i8* %0, i8** %4
store i8* %1, i8** %5
%7 = load i8*, i8** %4
%8 = load i8*, i8** %5
%9 = icmp uge i8* %7, %8
br i1 %9, label %10, label %11
10: ; preds = %2
store i8* null, i8** %3
br label %146
11: ; preds = %2
%12 = load i8*, i8** %4
%13 = load i8, i8* %12
%14 = call i64 @isascii(i8 signext %13)
%15 = icmp ne i64 %14, 0
br i1 %15, label %16, label %21
16: ; preds = %11
%17 = load i8*, i8** %4
%18 = load i8, i8* %17
%19 = call i64 @isdigit(i8 signext %18)
%20 = icmp ne i64 %19, 0
br i1 %20, label %22, label %21
21: ; preds = %16, %11
store i8* null, i8** %3
br label %146
22: ; preds = %16
%23 = load i8*, i8** %4
%24 = getelementptr inbounds i8, i8* %23, i32 1
store i8* %24, i8** %4
%25 = load i8*, i8** %4
%26 = load i8*, i8** %5
%27 = icmp ult i8* %25, %26
br i1 %27, label %28, label %58
28: ; preds = %22
%29 = load i8*, i8** %4
%30 = load i8, i8* %29
%31 = call i64 @isascii(i8 signext %30)
%32 = icmp ne i64 %31, 0
br i1 %32, label %33, label %58
33: ; preds = %28
%34 = load i8*, i8** %4
%35 = load i8, i8* %34
%36 = call i64 @isdigit(i8 signext %35)
%37 = icmp ne i64 %36, 0
br i1 %37, label %38, label %58
38: ; preds = %33
%39 = load i8*, i8** %4
%40 = getelementptr inbounds i8, i8* %39, i32 1
store i8* %40, i8** %4
%41 = load i8*, i8** %4
%42 = load i8*, i8** %5
%43 = icmp ult i8* %41, %42
br i1 %43, label %44, label %57
44: ; preds = %38
%45 = load i8*, i8** %4
%46 = load i8, i8* %45
%47 = call i64 @isascii(i8 signext %46)
%48 = icmp ne i64 %47, 0
br i1 %48, label %49, label %57
49: ; preds = %44
%50 = load i8*, i8** %4
%51 = load i8, i8* %50
%52 = call i64 @isdigit(i8 signext %51)
%53 = icmp ne i64 %52, 0
br i1 %53, label %54, label %57
54: ; preds = %49
%55 = load i8*, i8** %4
%56 = getelementptr inbounds i8, i8* %55, i32 1
store i8* %56, i8** %4
br label %57
57: ; preds = %54, %49, %44, %38
br label %58
58: ; preds = %57, %33, %28, %22
store i32 0, i32* %6
br label %59
59: ; preds = %126, %58
%60 = load i32, i32* %6
%61 = icmp slt i32 %60, 3
br i1 %61, label %62, label %129
62: ; preds = %59
%63 = load i8*, i8** %4
%64 = load i8*, i8** %5
%65 = icmp uge i8* %63, %64
br i1 %65, label %71, label %66
66: ; preds = %62
%67 = load i8*, i8** %4
%68 = load i8, i8* %67
%69 = sext i8 %68 to i32
%70 = icmp ne i32 %69, 46
br i1 %70, label %71, label %72
71: ; preds = %66, %62
store i8* null, i8** %3
br label %146
72: ; preds = %66
%73 = load i8*, i8** %4
%74 = getelementptr inbounds i8, i8* %73, i32 1
store i8* %74, i8** %4
%75 = load i8*, i8** %4
%76 = load i8*, i8** %5
%77 = icmp uge i8* %75, %76
br i1 %77, label %88, label %78
78: ; preds = %72
%79 = load i8*, i8** %4
%80 = load i8, i8* %79
%81 = call i64 @isascii(i8 signext %80)
%82 = icmp ne i64 %81, 0
br i1 %82, label %83, label %88
83: ; preds = %78
%84 = load i8*, i8** %4
%85 = load i8, i8* %84
%86 = call i64 @isdigit(i8 signext %85)
%87 = icmp ne i64 %86, 0
br i1 %87, label %89, label %88
88: ; preds = %83, %78, %72
store i8* null, i8** %3
br label %146
89: ; preds = %83
%90 = load i8*, i8** %4
%91 = getelementptr inbounds i8, i8* %90, i32 1
store i8* %91, i8** %4
%92 = load i8*, i8** %4
%93 = load i8*, i8** %5
%94 = icmp ult i8* %92, %93
br i1 %94, label %95, label %125
95: ; preds = %89
%96 = load i8*, i8** %4
%97 = load i8, i8* %96
%98 = call i64 @isascii(i8 signext %97)
%99 = icmp ne i64 %98, 0
br i1 %99, label %100, label %125
100: ; preds = %95
%101 = load i8*, i8** %4
%102 = load i8, i8* %101
%103 = call i64 @isdigit(i8 signext %102)
%104 = icmp ne i64 %103, 0
br i1 %104, label %105, label %125
105: ; preds = %100
%106 = load i8*, i8** %4
%107 = getelementptr inbounds i8, i8* %106, i32 1
store i8* %107, i8** %4
%108 = load i8*, i8** %4
%109 = load i8*, i8** %5
%110 = icmp ult i8* %108, %109
br i1 %110, label %111, label %124
111: ; preds = %105
%112 = load i8*, i8** %4
%113 = load i8, i8* %112
%114 = call i64 @isascii(i8 signext %113)
%115 = icmp ne i64 %114, 0
br i1 %115, label %116, label %124
116: ; preds = %111
%117 = load i8*, i8** %4
%118 = load i8, i8* %117
%119 = call i64 @isdigit(i8 signext %118)
%120 = icmp ne i64 %119, 0
br i1 %120, label %121, label %124
121: ; preds = %116
%122 = load i8*, i8** %4
%123 = getelementptr inbounds i8, i8* %122, i32 1
store i8* %123, i8** %4
br label %124
124: ; preds = %121, %116, %111, %105
br label %125
125: ; preds = %124, %100, %95, %89
br label %126
126: ; preds = %125
%127 = load i32, i32* %6
%128 = add nsw i32 %127, 1
store i32 %128, i32* %6
br label %59
129: ; preds = %59
%130 = load i8*, i8** %4
%131 = load i8*, i8** %5
%132 = icmp ult i8* %130, %131
br i1 %132, label %133, label %144
133: ; preds = %129
%134 = load i8*, i8** %4
%135 = load i8, i8* %134
%136 = call i64 @isascii(i8 signext %135)
%137 = icmp ne i64 %136, 0
br i1 %137, label %138, label %144
138: ; preds = %133
%139 = load i8*, i8** %4
%140 = load i8, i8* %139
%141 = call i64 @isdigit(i8 signext %140)
%142 = icmp ne i64 %141, 0
br i1 %142, label %143, label %144
143: ; preds = %138
store i8* null, i8** %3
br label %146
144: ; preds = %138, %133, %129
%145 = load i8*, i8** %4
store i8* %145, i8** %3
br label %146
146: ; preds = %144, %143, %88, %71, %21, %10
%147 = load i8*, i8** %3
ret i8* %147
}

LLVM IR (-O2):
define i8* @end_ip(i8* %0, i8* readnone %1) {
%3 = icmp ult i8* %0, %1
br i1 %3, label %4, label %171
4: ; preds = %2
%5 = load i8, i8* %0
%6 = tail call i64 @isascii(i8 signext %5)
%7 = icmp eq i64 %6, 0
br i1 %7, label %171, label %8
8: ; preds = %4
%9 = load i8, i8* %0
%10 = tail call i64 @isdigit(i8 signext %9)
%11 = icmp eq i64 %10, 0
br i1 %11, label %171, label %12
12: ; preds = %8
%13 = getelementptr inbounds i8, i8* %0, i64 1
%14 = icmp ult i8* %13, %1
br i1 %14, label %15, label %36
15: ; preds = %12
%16 = load i8, i8* %13
%17 = tail call i64 @isascii(i8 signext %16)
%18 = icmp eq i64 %17, 0
br i1 %18, label %36, label %19
19: ; preds = %15
%20 = load i8, i8* %13
%21 = tail call i64 @isdigit(i8 signext %20)
%22 = icmp eq i64 %21, 0
br i1 %22, label %36, label %23
23: ; preds = %19
%24 = getelementptr inbounds i8, i8* %0, i64 2
%25 = icmp ult i8* %24, %1
br i1 %25, label %26, label %36
26: ; preds = %23
%27 = load i8, i8* %24
%28 = tail call i64 @isascii(i8 signext %27)
%29 = icmp eq i64 %28, 0
br i1 %29, label %36, label %30
30: ; preds = %26
%31 = load i8, i8* %24
%32 = tail call i64 @isdigit(i8 signext %31)
%33 = icmp eq i64 %32, 0
%34 = getelementptr inbounds i8, i8* %0, i64 3
%35 = select i1 %33, i8* %24, i8* %34
br label %36
36: ; preds = %30, %23, %26, %19, %15, %12
%37 = phi i8* [ %24, %26 ], [ %24, %23 ], [ %13, %19 ], [ %13, %15 ], [ %13, %12 ], [ %35, %30 ]
%38 = icmp ult i8* %37, %1
br i1 %38, label %39, label %171
39: ; preds = %36
%40 = load i8, i8* %37
%41 = icmp eq i8 %40, 46
br i1 %41, label %42, label %171
42: ; preds = %39
%43 = getelementptr inbounds i8, i8* %37, i64 1
%44 = icmp ult i8* %43, %1
br i1 %44, label %45, label %171
45: ; preds = %42
%46 = load i8, i8* %43
%47 = tail call i64 @isascii(i8 signext %46)
%48 = icmp eq i64 %47, 0
br i1 %48, label %171, label %49
49: ; preds = %45
%50 = load i8, i8* %43
%51 = tail call i64 @isdigit(i8 signext %50)
%52 = icmp eq i64 %51, 0
br i1 %52, label %171, label %53
53: ; preds = %49
%54 = getelementptr inbounds i8, i8* %37, i64 2
%55 = icmp ult i8* %54, %1
br i1 %55, label %56, label %77
56: ; preds = %53
%57 = load i8, i8* %54
%58 = tail call i64 @isascii(i8 signext %57)
%59 = icmp eq i64 %58, 0
br i1 %59, label %77, label %60
60: ; preds = %56
%61 = load i8, i8* %54
%62 = tail call i64 @isdigit(i8 signext %61)
%63 = icmp eq i64 %62, 0
br i1 %63, label %77, label %64
64: ; preds = %60
%65 = getelementptr inbounds i8, i8* %37, i64 3
%66 = icmp ult i8* %65, %1
br i1 %66, label %67, label %77
67: ; preds = %64
%68 = load i8, i8* %65
%69 = tail call i64 @isascii(i8 signext %68)
%70 = icmp eq i64 %69, 0
br i1 %70, label %77, label %71
71: ; preds = %67
%72 = load i8, i8* %65
%73 = tail call i64 @isdigit(i8 signext %72)
%74 = icmp eq i64 %73, 0
%75 = getelementptr inbounds i8, i8* %37, i64 4
%76 = select i1 %74, i8* %65, i8* %75
br label %77
77: ; preds = %71, %53, %56, %60, %67, %64
%78 = phi i8* [ %65, %67 ], [ %65, %64 ], [ %54, %60 ], [ %54, %56 ], [ %54, %53 ], [ %76, %71 ]
%79 = icmp ult i8* %78, %1
br i1 %79, label %80, label %171
80: ; preds = %77
%81 = load i8, i8* %78
%82 = icmp eq i8 %81, 46
br i1 %82, label %83, label %171
83: ; preds = %80
%84 = getelementptr inbounds i8, i8* %78, i64 1
%85 = icmp ult i8* %84, %1
br i1 %85, label %86, label %171
86: ; preds = %83
%87 = load i8, i8* %84
%88 = tail call i64 @isascii(i8 signext %87)
%89 = icmp eq i64 %88, 0
br i1 %89, label %171, label %90
90: ; preds = %86
%91 = load i8, i8* %84
%92 = tail call i64 @isdigit(i8 signext %91)
%93 = icmp eq i64 %92, 0
br i1 %93, label %171, label %94
94: ; preds = %90
%95 = getelementptr inbounds i8, i8* %78, i64 2
%96 = icmp ult i8* %95, %1
br i1 %96, label %97, label %118
97: ; preds = %94
%98 = load i8, i8* %95
%99 = tail call i64 @isascii(i8 signext %98)
%100 = icmp eq i64 %99, 0
br i1 %100, label %118, label %101
101: ; preds = %97
%102 = load i8, i8* %95
%103 = tail call i64 @isdigit(i8 signext %102)
%104 = icmp eq i64 %103, 0
br i1 %104, label %118, label %105
105: ; preds = %101
%106 = getelementptr inbounds i8, i8* %78, i64 3
%107 = icmp ult i8* %106, %1
br i1 %107, label %108, label %118
108: ; preds = %105
%109 = load i8, i8* %106
%110 = tail call i64 @isascii(i8 signext %109)
%111 = icmp eq i64 %110, 0
br i1 %111, label %118, label %112
112: ; preds = %108
%113 = load i8, i8* %106
%114 = tail call i64 @isdigit(i8 signext %113)
%115 = icmp eq i64 %114, 0
%116 = getelementptr inbounds i8, i8* %78, i64 4
%117 = select i1 %115, i8* %106, i8* %116
br label %118
118: ; preds = %112, %108, %105, %101, %97, %94
%119 = phi i8* [ %106, %108 ], [ %106, %105 ], [ %95, %101 ], [ %95, %97 ], [ %95, %94 ], [ %117, %112 ]
%120 = icmp ult i8* %119, %1
br i1 %120, label %121, label %171
121: ; preds = %118
%122 = load i8, i8* %119
%123 = icmp eq i8 %122, 46
br i1 %123, label %124, label %171
124: ; preds = %121
%125 = getelementptr inbounds i8, i8* %119, i64 1
%126 = icmp ult i8* %125, %1
br i1 %126, label %127, label %171
127: ; preds = %124
%128 = load i8, i8* %125
%129 = tail call i64 @isascii(i8 signext %128)
%130 = icmp eq i64 %129, 0
br i1 %130, label %171, label %131
131: ; preds = %127
%132 = load i8, i8* %125
%133 = tail call i64 @isdigit(i8 signext %132)
%134 = icmp eq i64 %133, 0
br i1 %134, label %171, label %135
135: ; preds = %131
%136 = getelementptr inbounds i8, i8* %119, i64 2
%137 = icmp ult i8* %136, %1
br i1 %137, label %138, label %159
138: ; preds = %135
%139 = load i8, i8* %136
%140 = tail call i64 @isascii(i8 signext %139)
%141 = icmp eq i64 %140, 0
br i1 %141, label %159, label %142
142: ; preds = %138
%143 = load i8, i8* %136
%144 = tail call i64 @isdigit(i8 signext %143)
%145 = icmp eq i64 %144, 0
br i1 %145, label %159, label %146
146: ; preds = %142
%147 = getelementptr inbounds i8, i8* %119, i64 3
%148 = icmp ult i8* %147, %1
br i1 %148, label %149, label %159
149: ; preds = %146
%150 = load i8, i8* %147
%151 = tail call i64 @isascii(i8 signext %150)
%152 = icmp eq i64 %151, 0
br i1 %152, label %159, label %153
153: ; preds = %149
%154 = load i8, i8* %147
%155 = tail call i64 @isdigit(i8 signext %154)
%156 = icmp eq i64 %155, 0
%157 = getelementptr inbounds i8, i8* %119, i64 4
%158 = select i1 %156, i8* %147, i8* %157
br label %159
159: ; preds = %153, %149, %146, %142, %138, %135
%160 = phi i8* [ %147, %149 ], [ %147, %146 ], [ %136, %142 ], [ %136, %138 ], [ %136, %135 ], [ %158, %153 ]
%161 = icmp ult i8* %160, %1
br i1 %161, label %162, label %170
162: ; preds = %159
%163 = load i8, i8* %160
%164 = tail call i64 @isascii(i8 signext %163)
%165 = icmp eq i64 %164, 0
br i1 %165, label %170, label %166
166: ; preds = %162
%167 = load i8, i8* %160
%168 = tail call i64 @isdigit(i8 signext %167)
%169 = icmp eq i64 %168, 0
br i1 %169, label %170, label %171
170: ; preds = %166, %162, %159
br label %171
171: ; preds = %42, %45, %49, %36, %39, %77, %80, %83, %86, %90, %118, %121, %124, %127, %131, %166, %4, %8, %2, %170
%172 = phi i8* [ %160, %170 ], [ null, %2 ], [ null, %8 ], [ null, %4 ], [ null, %166 ], [ null, %131 ], [ null, %127 ], [ null, %124 ], [ null, %121 ], [ null, %118 ], [ null, %90 ], [ null, %86 ], [ null, %83 ], [ null, %80 ], [ null, %77 ], [ null, %39 ], [ null, %36 ], [ null, %49 ], [ null, %45 ], [ null, %42 ]
ret i8* %172
}