; LLVM IR from sylefeb/Silixel :: src/fstapi (fstapi)

; Unoptimized IR (clang -disable-llvm-passes):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%struct.fstReaderContext = type { ptr, ptr, i64, i64, i64, i64, i64, i32, i64, i64, ptr, ptr, ptr, i32, ptr, i8, i8, i8, [129 x i8], [120 x i8], i64, ptr, ptr, i64, i32, ptr, ptr, i64, i64, i8, ptr, i64, i64, ptr, i64, ptr, ptr, i64, i64, ptr, i32, i32, ptr, i32, i32, i32, i64, i8, %struct.fstHier, ptr, i32, ptr, i32, i8, [513 x i8], [513 x i8], ptr, i8, i32, i32, [65536 x i8], ptr, ptr }
%struct.fstHier = type { i8, %union.anon }
%union.anon = type { %struct.fstHierAttr }
%struct.fstHierAttr = type { i8, i8, ptr, i64, i64, i32 }

@stderr = external global ptr, align 8
@.str.37 = external hidden unnamed_addr constant [69 x i8], align 1
@.str.38 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.39 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.40 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.41 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.42 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.43 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.44 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.45 = external hidden unnamed_addr constant [69 x i8], align 1
@.str.46 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.47 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.48 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.49 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.50 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.51 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.52 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.53 = external hidden unnamed_addr constant [70 x i8], align 1
@.str.54 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.55 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.56 = external hidden unnamed_addr constant [7 x i8], align 1

; Function Attrs: nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.start.p0(i64 immarg, ptr nocapture) #0

; Function Attrs: nounwind allocsize(0,1)
declare noalias ptr @calloc(i64 noundef, i64 noundef) #1

; Function Attrs: nounwind
declare void @free(ptr noundef) #2

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #3

; Function Attrs: nounwind allocsize(0)
declare noalias ptr @malloc(i64 noundef) #4

; Function Attrs: nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture) #0

; Function Attrs: nounwind
declare i32 @fileno(ptr noundef) #2

declare i32 @fflush(ptr noundef) #5

declare i64 @ftello(ptr noundef) #5

; Function Attrs: nounwind uwtable
declare hidden i64 @fstFread(ptr noundef, i64 noundef, i64 noundef, ptr noundef) #6

; Function Attrs: nounwind
declare i32 @snprintf(ptr noundef, i64 noundef, ptr noundef, ...) #2

; Function Attrs: nounwind
declare i32 @fprintf(ptr noundef, ptr noundef, ...) #2

; Function Attrs: noreturn nounwind
declare void @exit(i32 noundef) #7

; Function Attrs: nounwind uwtable
declare dso_local i32 @fstUtilityBinToEsc(ptr noundef, ptr noundef, i32 noundef) #6

; Function Attrs: nounwind uwtable
declare dso_local i32 @fstReaderFseeko(ptr noundef, ptr noundef, i64 noundef, i32 noundef) #6

declare i32 @fgetc(ptr noundef) #5

; Function Attrs: nounwind uwtable
declare hidden i64 @fstReaderVarint64(ptr noundef) #6

; Function Attrs: nounwind uwtable
declare hidden i64 @fstGetVarint64(ptr noundef, ptr noundef) #6

; Function Attrs: nounwind uwtable
declare hidden void @fstVcdID(ptr noundef, i32 noundef) #6

; Function Attrs: nounwind uwtable
declare hidden i64 @fstReaderUint64(ptr noundef) #6

declare i32 @uncompress(ptr noundef, ptr noundef, ptr noundef, i64 noundef) #5

; Function Attrs: nounwind uwtable
declare hidden i32 @fstGetVarint32(ptr noundef, ptr noundef) #6

; Function Attrs: nounwind uwtable
define dso_local i32 @fstReaderIterBlocks2(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4) #6 {
  %6 = alloca i32, align 4
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  %11 = alloca ptr, align 8
  %12 = alloca ptr, align 8
  %13 = alloca i64, align 8
  %14 = alloca ptr, align 8
  %15 = alloca i64, align 8
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca i64, align 8
  %19 = alloca i64, align 8
  %20 = alloca i64, align 8
  %21 = alloca i64, align 8
  %22 = alloca i64, align 8
  %23 = alloca i64, align 8
  %24 = alloca i64, align 8
  %25 = alloca i64, align 8
  %26 = alloca i64, align 8
  %27 = alloca i64, align 8
  %28 = alloca i64, align 8
  %29 = alloca ptr, align 8
  %30 = alloca ptr, align 8
  %31 = alloca ptr, align 8
  %32 = alloca ptr, align 8
  %33 = alloca i64, align 8
  %34 = alloca i32, align 4
  %35 = alloca i32, align 4
  %36 = alloca i32, align 4
  %37 = alloca i64, align 8
  %38 = alloca i64, align 8
  %39 = alloca i64, align 8
  %40 = alloca i64, align 8
  %41 = alloca i32, align 4
  %42 = alloca i64, align 8
  %43 = alloca ptr, align 8
  %44 = alloca i32, align 4
  %45 = alloca ptr, align 8
  %46 = alloca ptr, align 8
  %47 = alloca ptr, align 8
  %48 = alloca i32, align 4
  %49 = alloca i32, align 4
  %50 = alloca ptr, align 8
  %51 = alloca i32, align 4
  %52 = alloca i32, align 4
  %53 = alloca i32, align 4
  %54 = alloca ptr, align 8
  %55 = alloca i32, align 4
  %56 = alloca ptr, align 8
  %57 = alloca ptr, align 8
  %58 = alloca i64, align 8
  %59 = alloca i64, align 8
  %60 = alloca i32, align 4
  %61 = alloca ptr, align 8
  %62 = alloca i64, align 8
  %63 = alloca i32, align 4
  %64 = alloca i64, align 8
  %65 = alloca i32, align 4
  %66 = alloca i64, align 8
  %67 = alloca i64, align 8
  %68 = alloca ptr, align 8
  %69 = alloca i32, align 4
  %70 = alloca [32 x i8], align 16
  %71 = alloca i32, align 4
  %72 = alloca ptr, align 8
  %73 = alloca i32, align 4
  %74 = alloca i64, align 8
  %75 = alloca i64, align 8
  %76 = alloca i32, align 4
  %77 = alloca i32, align 4
  %78 = alloca i8, align 1
  %79 = alloca [16 x i8], align 16
  %80 = alloca i32, align 4
  %81 = alloca [16 x i8], align 16
  %82 = alloca i32, align 4
  %83 = alloca double, align 8
  %84 = alloca ptr, align 8
  %85 = alloca ptr, align 8
  %86 = alloca i32, align 4
  %87 = alloca i32, align 4
  %88 = alloca [16 x i8], align 16
  %89 = alloca [64 x i8], align 16
  %90 = alloca i32, align 4
  %91 = alloca i32, align 4
  %92 = alloca i64, align 8
  %93 = alloca i64, align 8
  %94 = alloca i32, align 4
  %95 = alloca i32, align 4
  %96 = alloca i64, align 8
  %97 = alloca i64, align 8
  %98 = alloca i32, align 4
  %99 = alloca i32, align 4
  %100 = alloca i64, align 8
  %101 = alloca i32, align 4
  %102 = alloca i32, align 4
  %103 = alloca i32, align 4
  %104 = alloca i32, align 4
  %105 = alloca i32, align 4
  %106 = alloca i32, align 4
  %107 = alloca i32, align 4
  %108 = alloca i32, align 4
  %109 = alloca ptr, align 8
  %110 = alloca ptr, align 8
  %111 = alloca i64, align 8
  %112 = alloca i64, align 8
  %113 = alloca i32, align 4
  %114 = alloca ptr, align 8
  %115 = alloca i32, align 4
  %116 = alloca i32, align 4
  %117 = alloca i32, align 4
  %118 = alloca i32, align 4
  %119 = alloca i32, align 4
  %120 = alloca i32, align 4
  %121 = alloca i32, align 4
  %122 = alloca [32 x i8], align 16
  %123 = alloca i32, align 4
  %124 = alloca i8, align 1
  %125 = alloca [16 x i8], align 16
  %126 = alloca i32, align 4
  %127 = alloca i32, align 4
  %128 = alloca ptr, align 8
  %129 = alloca i32, align 4
  %130 = alloca [16 x i8], align 16
  %131 = alloca i32, align 4
  %132 = alloca ptr, align 8
  %133 = alloca i32, align 4
  %134 = alloca i32, align 4
  %135 = alloca ptr, align 8
  %136 = alloca i32, align 4
  %137 = alloca i32, align 4
  %138 = alloca i32, align 4
  %139 = alloca i8, align 1
  %140 = alloca i8, align 1
  %141 = alloca i8, align 1
  %142 = alloca i64, align 8
  %143 = alloca double, align 8
  %144 = alloca ptr, align 8
  %145 = alloca [8 x i8], align 1
  %146 = alloca ptr, align 8
  %147 = alloca i32, align 4
  %148 = alloca i32, align 4
  %149 = alloca i8, align 1
  %150 = alloca i32, align 4
  %151 = alloca i32, align 4
  %152 = alloca [32 x i8], align 16
  %153 = alloca i32, align 4
  %154 = alloca i32, align 4
  %155 = alloca [16 x i8], align 16
  %156 = alloca i32, align 4
  store ptr %0, ptr %7, align 8, !tbaa !5
  store ptr %1, ptr %8, align 8, !tbaa !5
  store ptr %2, ptr %9, align 8, !tbaa !5
  store ptr %3, ptr %10, align 8, !tbaa !5
  store ptr %4, ptr %11, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #8
  %157 = load ptr, ptr %7, align 8, !tbaa !5
  store ptr %157, ptr %12, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #8
  store i64 -1, ptr %13, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #8
  store ptr null, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #8
  store i32 0, ptr %16, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #8
  store i32 0, ptr %17, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #8
  store i64 0, ptr %18, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #8
  store ptr null, ptr %29, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #8
  store ptr null, ptr %30, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #8
  store i32 0, ptr %35, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #8
  store i64 0, ptr %38, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #8
  store i64 0, ptr %39, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #8
  store i64 0, ptr %40, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %41) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %43) #8
  store ptr null, ptr %43, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %44) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %45) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %46) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %47) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %48) #8
  store i32 0, ptr %48, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %49) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %50) #8
  store ptr null, ptr %50, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %51) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %52) #8
  store i32 0, ptr %52, align 4, !tbaa !11
  %158 = load ptr, ptr %12, align 8, !tbaa !5
  %159 = icmp ne ptr %158, null
  br i1 %159, label %161, label %160

160:                                              ; preds = %5
  store i32 0, ptr %6, align 4
  store i32 1, ptr %53, align 4
  br label %2569

161:                                              ; preds = %5
  %162 = load ptr, ptr %12, align 8, !tbaa !5
  %163 = getelementptr inbounds %struct.fstReaderContext, ptr %162, i32 0, i32 7
  %164 = load i32, ptr %163, align 8, !tbaa !13
  %165 = zext i32 %164 to i64
  %166 = call noalias ptr @calloc(i64 noundef %165, i64 noundef 4) #9
  store ptr %166, ptr %45, align 8, !tbaa !5
  %167 = load ptr, ptr %12, align 8, !tbaa !5
  %168 = getelementptr inbounds %struct.fstReaderContext, ptr %167, i32 0, i32 7
  %169 = load i32, ptr %168, align 8, !tbaa !13
  %170 = zext i32 %169 to i64
  %171 = call noalias ptr @calloc(i64 noundef %170, i64 noundef 4) #9
  store ptr %171, ptr %46, align 8, !tbaa !5
  %172 = load ptr, ptr %12, align 8, !tbaa !5
  %173 = getelementptr inbounds %struct.fstReaderContext, ptr %172, i32 0, i32 7
  %174 = load i32, ptr %173, align 8, !tbaa !13
  %175 = zext i32 %174 to i64
  %176 = call noalias ptr @calloc(i64 noundef %175, i64 noundef 4) #9
  store ptr %176, ptr %47, align 8, !tbaa !5
  %177 = load ptr, ptr %11, align 8, !tbaa !5
  %178 = icmp ne ptr %177, null
  br i1 %178, label %179, label %188

179:                                              ; preds = %161
  %180 = load ptr, ptr %11, align 8, !tbaa !5
  %181 = call i32 @fflush(ptr noundef %180)
  %182 = load ptr, ptr %11, align 8, !tbaa !5
  %183 = call i32 @setvbuf(ptr noundef %182, ptr noundef null, i32 noundef 2, i64 noundef 0) #8
  %184 = load ptr, ptr %11, align 8, !tbaa !5
  %185 = call i32 @fileno(ptr noundef %184) #8
  %186 = load ptr, ptr %12, align 8, !tbaa !5
  %187 = getelementptr inbounds %struct.fstReaderContext, ptr %186, i32 0, i32 59
  store i32 %185, ptr %187, align 8, !tbaa !16
  br label %188

188:                                              ; preds = %179, %161
  br label %189

189:                                              ; preds = %2543, %2541, %188
  call void @llvm.lifetime.start.p0(i64 8, ptr %54) #8
  store ptr null, ptr %54, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %55) #8
  store i32 0, ptr %55, align 4, !tbaa !11
  store i32 0, ptr %44, align 4, !tbaa !11
  %190 = load ptr, ptr %12, align 8, !tbaa !5
  %191 = load ptr, ptr %12, align 8, !tbaa !5
  %192 = getelementptr inbounds %struct.fstReaderContext, ptr %191, i32 0, i32 0
  %193 = load ptr, ptr %192, align 8, !tbaa !17
  %194 = load i64, ptr %18, align 8, !tbaa !9
  %195 = call i32 @fstReaderFseeko(ptr noundef %190, ptr noundef %193, i64 noundef %194, i32 noundef 0)
  %196 = load ptr, ptr %12, align 8, !tbaa !5
  %197 = getelementptr inbounds %struct.fstReaderContext, ptr %196, i32 0, i32 0
  %198 = load ptr, ptr %197, align 8, !tbaa !17
  %199 = call i32 @fgetc(ptr noundef %198)
  store i32 %199, ptr %41, align 4, !tbaa !11
  %200 = load ptr, ptr %12, align 8, !tbaa !5
  %201 = getelementptr inbounds %struct.fstReaderContext, ptr %200, i32 0, i32 0
  %202 = load ptr, ptr %201, align 8, !tbaa !17
  %203 = call i64 @fstReaderUint64(ptr noundef %202)
  store i64 %203, ptr %19, align 8, !tbaa !9
  %204 = load i32, ptr %41, align 4, !tbaa !11
  %205 = icmp eq i32 %204, -1
  br i1 %205, label %209, label %206

206:                                              ; preds = %189
  %207 = load i32, ptr %41, align 4, !tbaa !11
  %208 = icmp eq i32 %207, 255
  br i1 %208, label %209, label %210

209:                                              ; preds = %206, %189
  store i32 2, ptr %53, align 4
  br label %2541

210:                                              ; preds = %206
  %211 = load i64, ptr %18, align 8, !tbaa !9
  %212 = add nsw i64 %211, 1
  store i64 %212, ptr %18, align 8, !tbaa !9
  %213 = load i32, ptr %41, align 4, !tbaa !11
  %214 = icmp ne i32 %213, 1
  br i1 %214, label %215, label %225

215:                                              ; preds = %210
  %216 = load i32, ptr %41, align 4, !tbaa !11
  %217 = icmp ne i32 %216, 5
  br i1 %217, label %218, label %225

218:                                              ; preds = %215
  %219 = load i32, ptr %41, align 4, !tbaa !11
  %220 = icmp ne i32 %219, 8
  br i1 %220, label %221, label %225

221:                                              ; preds = %218
  %222 = load i64, ptr %19, align 8, !tbaa !9
  %223 = load i64, ptr %18, align 8, !tbaa !9
  %224 = add i64 %223, %222
  store i64 %224, ptr %18, align 8, !tbaa !9
  store i32 3, ptr %53, align 4
  br label %2541

225:                                              ; preds = %218, %215, %210
  %226 = load i64, ptr %19, align 8, !tbaa !9
  %227 = icmp ne i64 %226, 0
  br i1 %227, label %229, label %228

228:                                              ; preds = %225
  store i32 2, ptr %53, align 4
  br label %2541

229:                                              ; preds = %225
  %230 = load ptr, ptr %12, align 8, !tbaa !5
  %231 = getelementptr inbounds %struct.fstReaderContext, ptr %230, i32 0, i32 0
  %232 = load ptr, ptr %231, align 8, !tbaa !17
  %233 = call i64 @fstReaderUint64(ptr noundef %232)
  store i64 %233, ptr %20, align 8, !tbaa !9
  %234 = load ptr, ptr %12, align 8, !tbaa !5
  %235 = getelementptr inbounds %struct.fstReaderContext, ptr %234, i32 0, i32 0
  %236 = load ptr, ptr %235, align 8, !tbaa !17
  %237 = call i64 @fstReaderUint64(ptr noundef %236)
  store i64 %237, ptr %21, align 8, !tbaa !9
  %238 = load ptr, ptr %12, align 8, !tbaa !5
  %239 = getelementptr inbounds %struct.fstReaderContext, ptr %238, i32 0, i32 17
  %240 = load i8, ptr %239, align 2
  %241 = lshr i8 %240, 7
  %242 = zext i8 %241 to i32
  %243 = icmp ne i32 %242, 0
  br i1 %243, label %244, label %264

244:                                              ; preds = %229
  %245 = load i64, ptr %21, align 8, !tbaa !9
  %246 = load ptr, ptr %12, align 8, !tbaa !5
  %247 = getelementptr inbounds %struct.fstReaderContext, ptr %246, i32 0, i32 27
  %248 = load i64, ptr %247, align 8, !tbaa !18
  %249 = icmp ult i64 %245, %248
  br i1 %249, label %250, label %256

250:                                              ; preds = %244
  %251 = load i32, ptr %17, align 4, !tbaa !11
  %252 = add nsw i32 %251, 1
  store i32 %252, ptr %17, align 4, !tbaa !11
  %253 = load i64, ptr %19, align 8, !tbaa !9
  %254 = load i64, ptr %18, align 8, !tbaa !9
  %255 = add i64 %254, %253
  store i64 %255, ptr %18, align 8, !tbaa !9
  store i32 3, ptr %53, align 4
  br label %2541

256:                                              ; preds = %244
  %257 = load i64, ptr %20, align 8, !tbaa !9
  %258 = load ptr, ptr %12, align 8, !tbaa !5
  %259 = getelementptr inbounds %struct.fstReaderContext, ptr %258, i32 0, i32 28
  %260 = load i64, ptr %259, align 8, !tbaa !19
  %261 = icmp ugt i64 %257, %260
  br i1 %261, label %262, label %263

262:                                              ; preds = %256
  store i32 2, ptr %53, align 4
  br label %2541

263:                                              ; preds = %256
  br label %264

264:                                              ; preds = %263, %229
  %265 = load ptr, ptr %12, align 8, !tbaa !5
  %266 = getelementptr inbounds %struct.fstReaderContext, ptr %265, i32 0, i32 0
  %267 = load ptr, ptr %266, align 8, !tbaa !17
  %268 = call i64 @fstReaderUint64(ptr noundef %267)
  %269 = add i64 %268, 66
  store i64 %269, ptr %42, align 8, !tbaa !9
  %270 = load i64, ptr %42, align 8, !tbaa !9
  %271 = call noalias ptr @malloc(i64 noundef %270) #10
  store ptr %271, ptr %43, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %56) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %57) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %58) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %59) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %60) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %61) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %62) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %63) #8
  %272 = load ptr, ptr %12, align 8, !tbaa !5
  %273 = load ptr, ptr %12, align 8, !tbaa !5
  %274 = getelementptr inbounds %struct.fstReaderContext, ptr %273, i32 0, i32 0
  %275 = load ptr, ptr %274, align 8, !tbaa !17
  %276 = load i64, ptr %18, align 8, !tbaa !9
  %277 = load i64, ptr %19, align 8, !tbaa !9
  %278 = add i64 %276, %277
  %279 = sub i64 %278, 24
  %280 = call i32 @fstReaderFseeko(ptr noundef %272, ptr noundef %275, i64 noundef %279, i32 noundef 0)
  %281 = icmp ne i32 %280, 0
  br i1 %281, label %282, label %283

282:                                              ; preds = %264
  store i32 2, ptr %53, align 4
  br label %405

283:                                              ; preds = %264
  %284 = load ptr, ptr %12, align 8, !tbaa !5
  %285 = getelementptr inbounds %struct.fstReaderContext, ptr %284, i32 0, i32 0
  %286 = load ptr, ptr %285, align 8, !tbaa !17
  %287 = call i64 @fstReaderUint64(ptr noundef %286)
  store i64 %287, ptr %39, align 8, !tbaa !9
  %288 = load ptr, ptr %12, align 8, !tbaa !5
  %289 = getelementptr inbounds %struct.fstReaderContext, ptr %288, i32 0, i32 0
  %290 = load ptr, ptr %289, align 8, !tbaa !17
  %291 = call i64 @fstReaderUint64(ptr noundef %290)
  store i64 %291, ptr %40, align 8, !tbaa !9
  %292 = load ptr, ptr %12, align 8, !tbaa !5
  %293 = getelementptr inbounds %struct.fstReaderContext, ptr %292, i32 0, i32 0
  %294 = load ptr, ptr %293, align 8, !tbaa !17
  %295 = call i64 @fstReaderUint64(ptr noundef %294)
  store i64 %295, ptr %15, align 8, !tbaa !9
  %296 = load i64, ptr %40, align 8, !tbaa !9
  %297 = load i64, ptr %19, align 8, !tbaa !9
  %298 = icmp ugt i64 %296, %297
  br i1 %298, label %299, label %300

299:                                              ; preds = %283
  store i32 2, ptr %53, align 4
  br label %405

300:                                              ; preds = %283
  %301 = load i64, ptr %39, align 8, !tbaa !9
  %302 = call noalias ptr @malloc(i64 noundef %301) #10
  store ptr %302, ptr %56, align 8, !tbaa !5
  %303 = load ptr, ptr %56, align 8, !tbaa !5
  %304 = icmp ne ptr %303, null
  br i1 %304, label %306, label %305

305:                                              ; preds = %300
  store i32 2, ptr %53, align 4
  br label %405

306:                                              ; preds = %300
  %307 = load i64, ptr %39, align 8, !tbaa !9
  store i64 %307, ptr %58, align 8, !tbaa !9
  %308 = load i64, ptr %40, align 8, !tbaa !9
  store i64 %308, ptr %59, align 8, !tbaa !9
  %309 = load ptr, ptr %12, align 8, !tbaa !5
  %310 = load ptr, ptr %12, align 8, !tbaa !5
  %311 = getelementptr inbounds %struct.fstReaderContext, ptr %310, i32 0, i32 0
  %312 = load ptr, ptr %311, align 8, !tbaa !17
  %313 = load i64, ptr %40, align 8, !tbaa !9
  %314 = sub nsw i64 -24, %313
  %315 = call i32 @fstReaderFseeko(ptr noundef %309, ptr noundef %312, i64 noundef %314, i32 noundef 1)
  %316 = load i64, ptr %39, align 8, !tbaa !9
  %317 = load i64, ptr %40, align 8, !tbaa !9
  %318 = icmp ne i64 %316, %317
  br i1 %318, label %319, label %340

319:                                              ; preds = %306
  %320 = load i64, ptr %40, align 8, !tbaa !9
  %321 = call noalias ptr @malloc(i64 noundef %320) #10
  store ptr %321, ptr %57, align 8, !tbaa !5
  %322 = load ptr, ptr %57, align 8, !tbaa !5
  %323 = load i64, ptr %40, align 8, !tbaa !9
  %324 = load ptr, ptr %12, align 8, !tbaa !5
  %325 = getelementptr inbounds %struct.fstReaderContext, ptr %324, i32 0, i32 0
  %326 = load ptr, ptr %325, align 8, !tbaa !17
  %327 = call i64 @fstFread(ptr noundef %322, i64 noundef %323, i64 noundef 1, ptr noundef %326)
  %328 = load ptr, ptr %56, align 8, !tbaa !5
  %329 = load ptr, ptr %57, align 8, !tbaa !5
  %330 = load i64, ptr %59, align 8, !tbaa !9
  %331 = call i32 @uncompress(ptr noundef %328, ptr noundef %58, ptr noundef %329, i64 noundef %330)
  store i32 %331, ptr %60, align 4, !tbaa !11
  %332 = load i32, ptr %60, align 4, !tbaa !11
  %333 = icmp ne i32 %332, 0
  br i1 %333, label %334, label %338

334:                                              ; preds = %319
  %335 = load ptr, ptr @stderr, align 8, !tbaa !5
  %336 = load i32, ptr %60, align 4, !tbaa !11
  %337 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %335, ptr noundef @.str.37, i32 noundef %336) #8
  call void @exit(i32 noundef 255) #11
  unreachable

338:                                              ; preds = %319
  %339 = load ptr, ptr %57, align 8, !tbaa !5
  call void @free(ptr noundef %339) #8
  br label %347

340:                                              ; preds = %306
  %341 = load ptr, ptr %56, align 8, !tbaa !5
  %342 = load i64, ptr %39, align 8, !tbaa !9
  %343 = load ptr, ptr %12, align 8, !tbaa !5
  %344 = getelementptr inbounds %struct.fstReaderContext, ptr %343, i32 0, i32 0
  %345 = load ptr, ptr %344, align 8, !tbaa !17
  %346 = call i64 @fstFread(ptr noundef %341, i64 noundef %342, i64 noundef 1, ptr noundef %345)
  br label %347

347:                                              ; preds = %340, %338
  %348 = load ptr, ptr %14, align 8, !tbaa !5
  call void @free(ptr noundef %348) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %64) #8
  %349 = load i64, ptr %15, align 8, !tbaa !9
  %350 = mul i64 %349, 8
  store i64 %350, ptr %64, align 8, !tbaa !9
  %351 = load i64, ptr %64, align 8, !tbaa !9
  %352 = udiv i64 %351, 8
  %353 = load i64, ptr %15, align 8, !tbaa !9
  %354 = icmp ne i64 %352, %353
  br i1 %354, label %355, label %356

355:                                              ; preds = %347
  call void @chk_report_abort(ptr noundef @.str.38)
  br label %356

356:                                              ; preds = %355, %347
  call void @llvm.lifetime.end.p0(i64 8, ptr %64) #8
  %357 = load i64, ptr %15, align 8, !tbaa !9
  %358 = call noalias ptr @calloc(i64 noundef %357, i64 noundef 8) #9
  store ptr %358, ptr %14, align 8, !tbaa !5
  %359 = load ptr, ptr %56, align 8, !tbaa !5
  store ptr %359, ptr %61, align 8, !tbaa !5
  store i64 0, ptr %62, align 8, !tbaa !9
  store i32 0, ptr %63, align 4, !tbaa !11
  br label %360

360:                                              ; preds = %379, %356
  %361 = load i32, ptr %63, align 4, !tbaa !11
  %362 = zext i32 %361 to i64
  %363 = load i64, ptr %15, align 8, !tbaa !9
  %364 = icmp ult i64 %362, %363
  br i1 %364, label %365, label %382

365:                                              ; preds = %360
  call void @llvm.lifetime.start.p0(i64 4, ptr %65) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %66) #8
  %366 = load ptr, ptr %61, align 8, !tbaa !5
  %367 = call i64 @fstGetVarint64(ptr noundef %366, ptr noundef %65)
  store i64 %367, ptr %66, align 8, !tbaa !9
  %368 = load i64, ptr %62, align 8, !tbaa !9
  %369 = load i64, ptr %66, align 8, !tbaa !9
  %370 = add i64 %368, %369
  %371 = load ptr, ptr %14, align 8, !tbaa !5
  %372 = load i32, ptr %63, align 4, !tbaa !11
  %373 = zext i32 %372 to i64
  %374 = getelementptr inbounds i64, ptr %371, i64 %373
  store i64 %370, ptr %374, align 8, !tbaa !9
  store i64 %370, ptr %62, align 8, !tbaa !9
  %375 = load i32, ptr %65, align 4, !tbaa !11
  %376 = load ptr, ptr %61, align 8, !tbaa !5
  %377 = sext i32 %375 to i64
  %378 = getelementptr inbounds i8, ptr %376, i64 %377
  store ptr %378, ptr %61, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr %66) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %65) #8
  br label %379

379:                                              ; preds = %365
  %380 = load i32, ptr %63, align 4, !tbaa !11
  %381 = add i32 %380, 1
  store i32 %381, ptr %63, align 4, !tbaa !11
  br label %360, !llvm.loop !20

382:                                              ; preds = %360
  %383 = load i64, ptr %15, align 8, !tbaa !9
  %384 = icmp ne i64 %383, 0
  br i1 %384, label %385, label %387

385:                                              ; preds = %382
  %386 = load i64, ptr %15, align 8, !tbaa !9
  br label %388

387:                                              ; preds = %382
  br label %388

388:                                              ; preds = %387, %385
  %389 = phi i64 [ %386, %385 ], [ 1, %387 ]
  %390 = trunc i64 %389 to i32
  store i32 %390, ptr %55, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %67) #8
  %391 = load i32, ptr %55, align 4, !tbaa !11
  %392 = zext i32 %391 to i64
  %393 = mul i64 %392, 4
  store i64 %393, ptr %67, align 8, !tbaa !9
  %394 = load i64, ptr %67, align 8, !tbaa !9
  %395 = udiv i64 %394, 4
  %396 = load i32, ptr %55, align 4, !tbaa !11
  %397 = zext i32 %396 to i64
  %398 = icmp ne i64 %395, %397
  br i1 %398, label %399, label %400

399:                                              ; preds = %388
  call void @chk_report_abort(ptr noundef @.str.38)
  br label %400

400:                                              ; preds = %399, %388
  call void @llvm.lifetime.end.p0(i64 8, ptr %67) #8
  %401 = load i32, ptr %55, align 4, !tbaa !11
  %402 = zext i32 %401 to i64
  %403 = call noalias ptr @calloc(i64 noundef %402, i64 noundef 4) #9
  store ptr %403, ptr %54, align 8, !tbaa !5
  %404 = load ptr, ptr %56, align 8, !tbaa !5
  call void @free(ptr noundef %404) #8
  store i32 0, ptr %53, align 4
  br label %405

405:                                              ; preds = %400, %305, %299, %282
  call void @llvm.lifetime.end.p0(i64 4, ptr %63) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %62) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %61) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %60) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %59) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %58) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %57) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %56) #8
  %406 = load i32, ptr %53, align 4
  switch i32 %406, label %2541 [
    i32 0, label %407
  ]

407:                                              ; preds = %405
  %408 = load ptr, ptr %12, align 8, !tbaa !5
  %409 = load ptr, ptr %12, align 8, !tbaa !5
  %410 = getelementptr inbounds %struct.fstReaderContext, ptr %409, i32 0, i32 0
  %411 = load ptr, ptr %410, align 8, !tbaa !17
  %412 = load i64, ptr %18, align 8, !tbaa !9
  %413 = add nsw i64 %412, 32
  %414 = call i32 @fstReaderFseeko(ptr noundef %408, ptr noundef %411, i64 noundef %413, i32 noundef 0)
  %415 = load ptr, ptr %12, align 8, !tbaa !5
  %416 = getelementptr inbounds %struct.fstReaderContext, ptr %415, i32 0, i32 0
  %417 = load ptr, ptr %416, align 8, !tbaa !17
  %418 = call i64 @fstReaderVarint64(ptr noundef %417)
  store i64 %418, ptr %22, align 8, !tbaa !9
  %419 = load ptr, ptr %12, align 8, !tbaa !5
  %420 = getelementptr inbounds %struct.fstReaderContext, ptr %419, i32 0, i32 0
  %421 = load ptr, ptr %420, align 8, !tbaa !17
  %422 = call i64 @fstReaderVarint64(ptr noundef %421)
  store i64 %422, ptr %23, align 8, !tbaa !9
  %423 = load ptr, ptr %12, align 8, !tbaa !5
  %424 = getelementptr inbounds %struct.fstReaderContext, ptr %423, i32 0, i32 0
  %425 = load ptr, ptr %424, align 8, !tbaa !17
  %426 = call i64 @fstReaderVarint64(ptr noundef %425)
  store i64 %426, ptr %24, align 8, !tbaa !9
  %427 = load i32, ptr %16, align 4, !tbaa !11
  %428 = icmp eq i32 %427, 0
  br i1 %428, label %429, label %931

429:                                              ; preds = %407
  %430 = load i64, ptr %20, align 8, !tbaa !9
  %431 = load ptr, ptr %14, align 8, !tbaa !5
  %432 = getelementptr inbounds i64, ptr %431, i64 0
  %433 = load i64, ptr %432, align 8, !tbaa !9
  %434 = icmp ne i64 %430, %433
  br i1 %434, label %438, label %435

435:                                              ; preds = %429
  %436 = load i32, ptr %17, align 4, !tbaa !11
  %437 = icmp ne i32 %436, 0
  br i1 %437, label %438, label %930

438:                                              ; preds = %435, %429
  call void @llvm.lifetime.start.p0(i64 8, ptr %68) #8
  %439 = load i64, ptr %22, align 8, !tbaa !9
  %440 = call noalias ptr @malloc(i64 noundef %439) #10
  store ptr %440, ptr %68, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %69) #8
  store i32 0, ptr %69, align 4, !tbaa !11
  %441 = load ptr, ptr %11, align 8, !tbaa !5
  %442 = icmp ne ptr %441, null
  br i1 %442, label %443, label %512

443:                                              ; preds = %438
  call void @llvm.lifetime.start.p0(i64 32, ptr %70) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %71) #8
  %444 = load i64, ptr %20, align 8, !tbaa !9
  %445 = icmp ne i64 %444, 0
  br i1 %445, label %446, label %471

446:                                              ; preds = %443
  %447 = load i32, ptr %52, align 4, !tbaa !11
  %448 = icmp eq i32 %447, 1
  br i1 %448, label %449, label %455

449:                                              ; preds = %446
  %450 = getelementptr inbounds [32 x i8], ptr %70, i64 0, i64 0
  %451 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %450, i64 noundef 32, ptr noundef @.str.39) #8
  store i32 %451, ptr %71, align 4, !tbaa !11
  %452 = load ptr, ptr %12, align 8, !tbaa !5
  %453 = getelementptr inbounds [32 x i8], ptr %70, i64 0, i64 0
  %454 = load i32, ptr %71, align 4, !tbaa !11
  call void @fstWritex(ptr noundef %452, ptr noundef %453, i32 noundef %454)
  store i32 2, ptr %52, align 4, !tbaa !11
  br label %455

455:                                              ; preds = %449, %446
  %456 = getelementptr inbounds [32 x i8], ptr %70, i64 0, i64 0
  %457 = load i64, ptr %20, align 8, !tbaa !9
  %458 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %456, i64 noundef 32, ptr noundef @.str.40, i64 noundef %457) #8
  store i32 %458, ptr %71, align 4, !tbaa !11
  %459 = load ptr, ptr %12, align 8, !tbaa !5
  %460 = getelementptr inbounds [32 x i8], ptr %70, i64 0, i64 0
  %461 = load i32, ptr %71, align 4, !tbaa !11
  call void @fstWritex(ptr noundef %459, ptr noundef %460, i32 noundef %461)
  %462 = load i32, ptr %52, align 4, !tbaa !11
  %463 = icmp ne i32 %462, 0
  br i1 %463, label %470, label %464

464:                                              ; preds = %455
  %465 = getelementptr inbounds [32 x i8], ptr %70, i64 0, i64 0
  %466 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %465, i64 noundef 32, ptr noundef @.str.41) #8
  store i32 %466, ptr %71, align 4, !tbaa !11
  %467 = load ptr, ptr %12, align 8, !tbaa !5
  %468 = getelementptr inbounds [32 x i8], ptr %70, i64 0, i64 0
  %469 = load i32, ptr %71, align 4, !tbaa !11
  call void @fstWritex(ptr noundef %467, ptr noundef %468, i32 noundef %469)
  store i32 1, ptr %52, align 4, !tbaa !11
  br label %470

470:                                              ; preds = %464, %455
  br label %471

471:                                              ; preds = %470, %443
  %472 = load ptr, ptr %12, align 8, !tbaa !5
  %473 = getelementptr inbounds %struct.fstReaderContext, ptr %472, i32 0, i32 24
  %474 = load i32, ptr %473, align 8, !tbaa !22
  %475 = icmp ne i32 %474, 0
  br i1 %475, label %476, label %511

476:                                              ; preds = %471
  %477 = load i32, ptr %48, align 4, !tbaa !11
  %478 = load ptr, ptr %12, align 8, !tbaa !5
  %479 = getelementptr inbounds %struct.fstReaderContext, ptr %478, i32 0, i32 24
  %480 = load i32, ptr %479, align 8, !tbaa !22
  %481 = icmp ne i32 %477, %480
  br i1 %481, label %482, label %511

482:                                              ; preds = %476
  %483 = load i64, ptr %20, align 8, !tbaa !9
  %484 = load ptr, ptr %12, align 8, !tbaa !5
  %485 = getelementptr inbounds %struct.fstReaderContext, ptr %484, i32 0, i32 25
  %486 = load ptr, ptr %485, align 8, !tbaa !23
  %487 = load i32, ptr %48, align 4, !tbaa !11
  %488 = zext i32 %487 to i64
  %489 = getelementptr inbounds i64, ptr %486, i64 %488
  %490 = load i64, ptr %489, align 8, !tbaa !9
  %491 = icmp eq i64 %483, %490
  br i1 %491, label %492, label %510

492:                                              ; preds = %482
  %493 = getelementptr inbounds [32 x i8], ptr %70, i64 0, i64 0
  %494 = load ptr, ptr %12, align 8, !tbaa !5
  %495 = getelementptr inbounds %struct.fstReaderContext, ptr %494, i32 0, i32 26
  %496 = load ptr, ptr %495, align 8, !tbaa !24
  %497 = load i32, ptr %48, align 4, !tbaa !11
  %498 = add i32 %497, 1
  store i32 %498, ptr %48, align 4, !tbaa !11
  %499 = zext i32 %497 to i64
  %500 = getelementptr inbounds i8, ptr %496, i64 %499
  %501 = load i8, ptr %500, align 1, !tbaa !25
  %502 = zext i8 %501 to i32
  %503 = icmp ne i32 %502, 0
  %504 = zext i1 %503 to i64
  %505 = select i1 %503, ptr @.str.43, ptr @.str.44
  %506 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %493, i64 noundef 32, ptr noundef @.str.42, ptr noundef %505) #8
  store i32 %506, ptr %71, align 4, !tbaa !11
  %507 = load ptr, ptr %12, align 8, !tbaa !5
  %508 = getelementptr inbounds [32 x i8], ptr %70, i64 0, i64 0
  %509 = load i32, ptr %71, align 4, !tbaa !11
  call void @fstWritex(ptr noundef %507, ptr noundef %508, i32 noundef %509)
  br label %510

510:                                              ; preds = %492, %482
  br label %511

511:                                              ; preds = %510, %476, %471
  call void @llvm.lifetime.end.p0(i64 4, ptr %71) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %70) #8
  br label %512

512:                                              ; preds = %511, %438
  %513 = load i64, ptr %22, align 8, !tbaa !9
  %514 = load i64, ptr %23, align 8, !tbaa !9
  %515 = icmp eq i64 %513, %514
  br i1 %515, label %516, label %523

516:                                              ; preds = %512
  %517 = load ptr, ptr %68, align 8, !tbaa !5
  %518 = load i64, ptr %22, align 8, !tbaa !9
  %519 = load ptr, ptr %12, align 8, !tbaa !5
  %520 = getelementptr inbounds %struct.fstReaderContext, ptr %519, i32 0, i32 0
  %521 = load ptr, ptr %520, align 8, !tbaa !17
  %522 = call i64 @fstFread(ptr noundef %517, i64 noundef %518, i64 noundef 1, ptr noundef %521)
  br label %546

523:                                              ; preds = %512
  call void @llvm.lifetime.start.p0(i64 8, ptr %72) #8
  %524 = load i64, ptr %23, align 8, !tbaa !9
  %525 = call noalias ptr @malloc(i64 noundef %524) #10
  store ptr %525, ptr %72, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %73) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %74) #8
  %526 = load i64, ptr %22, align 8, !tbaa !9
  store i64 %526, ptr %74, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %75) #8
  %527 = load i64, ptr %23, align 8, !tbaa !9
  store i64 %527, ptr %75, align 8, !tbaa !9
  %528 = load ptr, ptr %72, align 8, !tbaa !5
  %529 = load i64, ptr %75, align 8, !tbaa !9
  %530 = load ptr, ptr %12, align 8, !tbaa !5
  %531 = getelementptr inbounds %struct.fstReaderContext, ptr %530, i32 0, i32 0
  %532 = load ptr, ptr %531, align 8, !tbaa !17
  %533 = call i64 @fstFread(ptr noundef %528, i64 noundef %529, i64 noundef 1, ptr noundef %532)
  %534 = load ptr, ptr %68, align 8, !tbaa !5
  %535 = load ptr, ptr %72, align 8, !tbaa !5
  %536 = load i64, ptr %75, align 8, !tbaa !9
  %537 = call i32 @uncompress(ptr noundef %534, ptr noundef %74, ptr noundef %535, i64 noundef %536)
  store i32 %537, ptr %73, align 4, !tbaa !11
  %538 = load i32, ptr %73, align 4, !tbaa !11
  %539 = icmp ne i32 %538, 0
  br i1 %539, label %540, label %544

540:                                              ; preds = %523
  %541 = load ptr, ptr @stderr, align 8, !tbaa !5
  %542 = load i32, ptr %73, align 4, !tbaa !11
  %543 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %541, ptr noundef @.str.45, i32 noundef %542) #8
  call void @exit(i32 noundef 255) #11
  unreachable

544:                                              ; preds = %523
  %545 = load ptr, ptr %72, align 8, !tbaa !5
  call void @free(ptr noundef %545) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %75) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %74) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %73) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %72) #8
  br label %546

546:                                              ; preds = %544, %516
  store i32 0, ptr %34, align 4, !tbaa !11
  br label %547

547:                                              ; preds = %918, %546
  %548 = load i32, ptr %34, align 4, !tbaa !11
  %549 = zext i32 %548 to i64
  %550 = load i64, ptr %24, align 8, !tbaa !9
  %551 = icmp ult i64 %549, %550
  br i1 %551, label %552, label %921

552:                                              ; preds = %547
  call void @llvm.lifetime.start.p0(i64 4, ptr %76) #8
  %553 = load i32, ptr %34, align 4, !tbaa !11
  %554 = udiv i32 %553, 8
  store i32 %554, ptr %76, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %77) #8
  %555 = load i32, ptr %34, align 4, !tbaa !11
  %556 = and i32 %555, 7
  store i32 %556, ptr %77, align 4, !tbaa !11
  %557 = load ptr, ptr %12, align 8, !tbaa !5
  %558 = getelementptr inbounds %struct.fstReaderContext, ptr %557, i32 0, i32 12
  %559 = load ptr, ptr %558, align 8, !tbaa !26
  %560 = load i32, ptr %76, align 4, !tbaa !11
  %561 = sext i32 %560 to i64
  %562 = getelementptr inbounds i8, ptr %559, i64 %561
  %563 = load i8, ptr %562, align 1, !tbaa !25
  %564 = zext i8 %563 to i32
  %565 = load i32, ptr %77, align 4, !tbaa !11
  %566 = shl i32 1, %565
  %567 = and i32 %564, %566
  %568 = icmp ne i32 %567, 0
  br i1 %568, label %569, label %908

569:                                              ; preds = %552
  %570 = load ptr, ptr %12, align 8, !tbaa !5
  %571 = getelementptr inbounds %struct.fstReaderContext, ptr %570, i32 0, i32 10
  %572 = load ptr, ptr %571, align 8, !tbaa !27
  %573 = load i32, ptr %34, align 4, !tbaa !11
  %574 = zext i32 %573 to i64
  %575 = getelementptr inbounds i32, ptr %572, i64 %574
  %576 = load i32, ptr %575, align 4, !tbaa !11
  %577 = icmp ule i32 %576, 1
  br i1 %577, label %578, label %636

578:                                              ; preds = %569
  %579 = load ptr, ptr %12, align 8, !tbaa !5
  %580 = getelementptr inbounds %struct.fstReaderContext, ptr %579, i32 0, i32 10
  %581 = load ptr, ptr %580, align 8, !tbaa !27
  %582 = load i32, ptr %34, align 4, !tbaa !11
  %583 = zext i32 %582 to i64
  %584 = getelementptr inbounds i32, ptr %581, i64 %583
  %585 = load i32, ptr %584, align 4, !tbaa !11
  %586 = icmp eq i32 %585, 1
  br i1 %586, label %587, label %634

587:                                              ; preds = %578
  call void @llvm.lifetime.start.p0(i64 1, ptr %78) #8
  %588 = load ptr, ptr %68, align 8, !tbaa !5
  %589 = load i32, ptr %69, align 4, !tbaa !11
  %590 = zext i32 %589 to i64
  %591 = getelementptr inbounds i8, ptr %588, i64 %590
  %592 = load i8, ptr %591, align 1, !tbaa !25
  store i8 %592, ptr %78, align 1, !tbaa !25
  %593 = load ptr, ptr %8, align 8, !tbaa !5
  %594 = icmp ne ptr %593, null
  br i1 %594, label %595, label %613

595:                                              ; preds = %587
  %596 = load i8, ptr %78, align 1, !tbaa !25
  %597 = load ptr, ptr %12, align 8, !tbaa !5
  %598 = getelementptr inbounds %struct.fstReaderContext, ptr %597, i32 0, i32 14
  %599 = load ptr, ptr %598, align 8, !tbaa !28
  %600 = getelementptr inbounds i8, ptr %599, i64 0
  store i8 %596, ptr %600, align 1, !tbaa !25
  %601 = load ptr, ptr %12, align 8, !tbaa !5
  %602 = getelementptr inbounds %struct.fstReaderContext, ptr %601, i32 0, i32 14
  %603 = load ptr, ptr %602, align 8, !tbaa !28
  %604 = getelementptr inbounds i8, ptr %603, i64 1
  store i8 0, ptr %604, align 1, !tbaa !25
  %605 = load ptr, ptr %8, align 8, !tbaa !5
  %606 = load ptr, ptr %10, align 8, !tbaa !5
  %607 = load i64, ptr %20, align 8, !tbaa !9
  %608 = load i32, ptr %34, align 4, !tbaa !11
  %609 = add i32 %608, 1
  %610 = load ptr, ptr %12, align 8, !tbaa !5
  %611 = getelementptr inbounds %struct.fstReaderContext, ptr %610, i32 0, i32 14
  %612 = load ptr, ptr %611, align 8, !tbaa !28
  call void %605(ptr noundef %606, i64 noundef %607, i32 noundef %609, ptr noundef %612)
  br label %633

613:                                              ; preds = %587
  %614 = load ptr, ptr %11, align 8, !tbaa !5
  %615 = icmp ne ptr %614, null
  br i1 %615, label %616, label %632

616:                                              ; preds = %613
  call void @llvm.lifetime.start.p0(i64 16, ptr %79) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %80) #8
  %617 = getelementptr inbounds [16 x i8], ptr %79, i64 0, i64 0
  %618 = getelementptr inbounds i8, ptr %617, i64 1
  %619 = load i32, ptr %34, align 4, !tbaa !11
  %620 = add i32 %619, 1
  %621 = call i32 @fstVcdIDForFwrite(ptr noundef %618, i32 noundef %620)
  store i32 %621, ptr %80, align 4, !tbaa !11
  %622 = load i8, ptr %78, align 1, !tbaa !25
  %623 = getelementptr inbounds [16 x i8], ptr %79, i64 0, i64 0
  store i8 %622, ptr %623, align 16, !tbaa !25
  %624 = load i32, ptr %80, align 4, !tbaa !11
  %625 = add nsw i32 %624, 1
  %626 = sext i32 %625 to i64
  %627 = getelementptr inbounds [16 x i8], ptr %79, i64 0, i64 %626
  store i8 10, ptr %627, align 1, !tbaa !25
  %628 = load ptr, ptr %12, align 8, !tbaa !5
  %629 = getelementptr inbounds [16 x i8], ptr %79, i64 0, i64 0
  %630 = load i32, ptr %80, align 4, !tbaa !11
  %631 = add nsw i32 %630, 2
  call void @fstWritex(ptr noundef %628, ptr noundef %629, i32 noundef %631)
  call void @llvm.lifetime.end.p0(i64 4, ptr %80) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %79) #8
  br label %632

632:                                              ; preds = %616, %613
  br label %633

633:                                              ; preds = %632, %595
  call void @llvm.lifetime.end.p0(i64 1, ptr %78) #8
  br label %635

634:                                              ; preds = %578
  br label %635

635:                                              ; preds = %634, %633
  br label %907

636:                                              ; preds = %569
  %637 = load ptr, ptr %12, align 8, !tbaa !5
  %638 = getelementptr inbounds %struct.fstReaderContext, ptr %637, i32 0, i32 11
  %639 = load ptr, ptr %638, align 8, !tbaa !29
  %640 = load i32, ptr %34, align 4, !tbaa !11
  %641 = zext i32 %640 to i64
  %642 = getelementptr inbounds i8, ptr %639, i64 %641
  %643 = load i8, ptr %642, align 1, !tbaa !25
  %644 = zext i8 %643 to i32
  %645 = icmp ne i32 %644, 3
  br i1 %645, label %646, label %759

646:                                              ; preds = %636
  %647 = load ptr, ptr %8, align 8, !tbaa !5
  %648 = icmp ne ptr %647, null
  br i1 %648, label %649, label %698

649:                                              ; preds = %646
  %650 = load ptr, ptr %12, align 8, !tbaa !5
  %651 = getelementptr inbounds %struct.fstReaderContext, ptr %650, i32 0, i32 10
  %652 = load ptr, ptr %651, align 8, !tbaa !27
  %653 = load i32, ptr %34, align 4, !tbaa !11
  %654 = zext i32 %653 to i64
  %655 = getelementptr inbounds i32, ptr %652, i64 %654
  %656 = load i32, ptr %655, align 4, !tbaa !11
  %657 = load ptr, ptr %12, align 8, !tbaa !5
  %658 = getelementptr inbounds %struct.fstReaderContext, ptr %657, i32 0, i32 13
  %659 = load i32, ptr %658, align 8, !tbaa !30
  %660 = icmp ugt i32 %656, %659
  br i1 %660, label %661, label %662

661:                                              ; preds = %649
  call void @chk_report_abort(ptr noundef @.str.46)
  br label %662

662:                                              ; preds = %661, %649
  %663 = load ptr, ptr %12, align 8, !tbaa !5
  %664 = getelementptr inbounds %struct.fstReaderContext, ptr %663, i32 0, i32 14
  %665 = load ptr, ptr %664, align 8, !tbaa !28
  %666 = load ptr, ptr %68, align 8, !tbaa !5
  %667 = load i32, ptr %69, align 4, !tbaa !11
  %668 = zext i32 %667 to i64
  %669 = getelementptr inbounds i8, ptr %666, i64 %668
  %670 = load ptr, ptr %12, align 8, !tbaa !5
  %671 = getelementptr inbounds %struct.fstReaderContext, ptr %670, i32 0, i32 10
  %672 = load ptr, ptr %671, align 8, !tbaa !27
  %673 = load i32, ptr %34, align 4, !tbaa !11
  %674 = zext i32 %673 to i64
  %675 = getelementptr inbounds i32, ptr %672, i64 %674
  %676 = load i32, ptr %675, align 4, !tbaa !11
  %677 = zext i32 %676 to i64
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %665, ptr align 1 %669, i64 %677, i1 false)
  %678 = load ptr, ptr %12, align 8, !tbaa !5
  %679 = getelementptr inbounds %struct.fstReaderContext, ptr %678, i32 0, i32 14
  %680 = load ptr, ptr %679, align 8, !tbaa !28
  %681 = load ptr, ptr %12, align 8, !tbaa !5
  %682 = getelementptr inbounds %struct.fstReaderContext, ptr %681, i32 0, i32 10
  %683 = load ptr, ptr %682, align 8, !tbaa !27
  %684 = load i32, ptr %34, align 4, !tbaa !11
  %685 = zext i32 %684 to i64
  %686 = getelementptr inbounds i32, ptr %683, i64 %685
  %687 = load i32, ptr %686, align 4, !tbaa !11
  %688 = zext i32 %687 to i64
  %689 = getelementptr inbounds i8, ptr %680, i64 %688
  store i8 0, ptr %689, align 1, !tbaa !25
  %690 = load ptr, ptr %8, align 8, !tbaa !5
  %691 = load ptr, ptr %10, align 8, !tbaa !5
  %692 = load i64, ptr %20, align 8, !tbaa !9
  %693 = load i32, ptr %34, align 4, !tbaa !11
  %694 = add i32 %693, 1
  %695 = load ptr, ptr %12, align 8, !tbaa !5
  %696 = getelementptr inbounds %struct.fstReaderContext, ptr %695, i32 0, i32 14
  %697 = load ptr, ptr %696, align 8, !tbaa !28
  call void %690(ptr noundef %691, i64 noundef %692, i32 noundef %694, ptr noundef %697)
  br label %758

698:                                              ; preds = %646
  %699 = load ptr, ptr %11, align 8, !tbaa !5
  %700 = icmp ne ptr %699, null
  br i1 %700, label %701, label %757

701:                                              ; preds = %698
  call void @llvm.lifetime.start.p0(i64 16, ptr %81) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %82) #8
  %702 = getelementptr inbounds [16 x i8], ptr %81, i64 0, i64 0
  %703 = getelementptr inbounds i8, ptr %702, i64 1
  %704 = load i32, ptr %34, align 4, !tbaa !11
  %705 = add i32 %704, 1
  %706 = call i32 @fstVcdIDForFwrite(ptr noundef %703, i32 noundef %705)
  store i32 %706, ptr %82, align 4, !tbaa !11
  %707 = load ptr, ptr %12, align 8, !tbaa !5
  %708 = getelementptr inbounds %struct.fstReaderContext, ptr %707, i32 0, i32 11
  %709 = load ptr, ptr %708, align 8, !tbaa !29
  %710 = load i32, ptr %34, align 4, !tbaa !11
  %711 = zext i32 %710 to i64
  %712 = getelementptr inbounds i8, ptr %709, i64 %711
  %713 = load i8, ptr %712, align 1, !tbaa !25
  %714 = zext i8 %713 to i32
  %715 = icmp ne i32 %714, 18
  %716 = zext i1 %715 to i64
  %717 = select i1 %715, i32 98, i32 112
  %718 = trunc i32 %717 to i8
  %719 = getelementptr inbounds [16 x i8], ptr %81, i64 0, i64 0
  store i8 %718, ptr %719, align 16, !tbaa !25
  %720 = load ptr, ptr %12, align 8, !tbaa !5
  %721 = getelementptr inbounds [16 x i8], ptr %81, i64 0, i64 0
  call void @fstWritex(ptr noundef %720, ptr noundef %721, i32 noundef 1)
  %722 = load i32, ptr %69, align 4, !tbaa !11
  %723 = load ptr, ptr %12, align 8, !tbaa !5
  %724 = getelementptr inbounds %struct.fstReaderContext, ptr %723, i32 0, i32 10
  %725 = load ptr, ptr %724, align 8, !tbaa !27
  %726 = load i32, ptr %34, align 4, !tbaa !11
  %727 = zext i32 %726 to i64
  %728 = getelementptr inbounds i32, ptr %725, i64 %727
  %729 = load i32, ptr %728, align 4, !tbaa !11
  %730 = add i32 %722, %729
  %731 = zext i32 %730 to i64
  %732 = load i64, ptr %22, align 8, !tbaa !9
  %733 = icmp ugt i64 %731, %732
  br i1 %733, label %734, label %735

734:                                              ; preds = %701
  call void @chk_report_abort(ptr noundef @.str.47)
  br label %735

735:                                              ; preds = %734, %701
  %736 = load ptr, ptr %12, align 8, !tbaa !5
  %737 = load ptr, ptr %68, align 8, !tbaa !5
  %738 = load i32, ptr %69, align 4, !tbaa !11
  %739 = zext i32 %738 to i64
  %740 = getelementptr inbounds i8, ptr %737, i64 %739
  %741 = load ptr, ptr %12, align 8, !tbaa !5
  %742 = getelementptr inbounds %struct.fstReaderContext, ptr %741, i32 0, i32 10
  %743 = load ptr, ptr %742, align 8, !tbaa !27
  %744 = load i32, ptr %34, align 4, !tbaa !11
  %745 = zext i32 %744 to i64
  %746 = getelementptr inbounds i32, ptr %743, i64 %745
  %747 = load i32, ptr %746, align 4, !tbaa !11
  call void @fstWritex(ptr noundef %736, ptr noundef %740, i32 noundef %747)
  %748 = getelementptr inbounds [16 x i8], ptr %81, i64 0, i64 0
  store i8 32, ptr %748, align 16, !tbaa !25
  %749 = load i32, ptr %82, align 4, !tbaa !11
  %750 = add nsw i32 %749, 1
  %751 = sext i32 %750 to i64
  %752 = getelementptr inbounds [16 x i8], ptr %81, i64 0, i64 %751
  store i8 10, ptr %752, align 1, !tbaa !25
  %753 = load ptr, ptr %12, align 8, !tbaa !5
  %754 = getelementptr inbounds [16 x i8], ptr %81, i64 0, i64 0
  %755 = load i32, ptr %82, align 4, !tbaa !11
  %756 = add nsw i32 %755, 2
  call void @fstWritex(ptr noundef %753, ptr noundef %754, i32 noundef %756)
  call void @llvm.lifetime.end.p0(i64 4, ptr %82) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %81) #8
  br label %757

757:                                              ; preds = %735, %698
  br label %758

758:                                              ; preds = %757, %662
  br label %906

759:                                              ; preds = %636
  call void @llvm.lifetime.start.p0(i64 8, ptr %83) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %84) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %85) #8
  %760 = load ptr, ptr %68, align 8, !tbaa !5
  %761 = load i32, ptr %69, align 4, !tbaa !11
  %762 = zext i32 %761 to i64
  %763 = getelementptr inbounds i8, ptr %760, i64 %762
  store ptr %763, ptr %85, align 8, !tbaa !5
  %764 = load ptr, ptr %8, align 8, !tbaa !5
  %765 = icmp ne ptr %764, null
  br i1 %765, label %766, label %860

766:                                              ; preds = %759
  %767 = load ptr, ptr %12, align 8, !tbaa !5
  %768 = getelementptr inbounds %struct.fstReaderContext, ptr %767, i32 0, i32 17
  %769 = load i8, ptr %768, align 2
  %770 = lshr i8 %769, 2
  %771 = and i8 %770, 1
  %772 = zext i8 %771 to i32
  %773 = icmp ne i32 %772, 0
  br i1 %773, label %774, label %810

774:                                              ; preds = %766
  %775 = load ptr, ptr %12, align 8, !tbaa !5
  %776 = getelementptr inbounds %struct.fstReaderContext, ptr %775, i32 0, i32 17
  %777 = load i8, ptr %776, align 2
  %778 = lshr i8 %777, 1
  %779 = and i8 %778, 1
  %780 = zext i8 %779 to i32
  %781 = icmp ne i32 %780, 0
  br i1 %781, label %782, label %784

782:                                              ; preds = %774
  %783 = load ptr, ptr %85, align 8, !tbaa !5
  store ptr %783, ptr %84, align 8, !tbaa !5
  br label %803

784:                                              ; preds = %774
  call void @llvm.lifetime.start.p0(i64 4, ptr %86) #8
  store ptr %83, ptr %84, align 8, !tbaa !5
  store i32 0, ptr %86, align 4, !tbaa !11
  br label %785

785:                                              ; preds = %799, %784
  %786 = load i32, ptr %86, align 4, !tbaa !11
  %787 = icmp slt i32 %786, 8
  br i1 %787, label %788, label %802

788:                                              ; preds = %785
  %789 = load ptr, ptr %85, align 8, !tbaa !5
  %790 = load i32, ptr %86, align 4, !tbaa !11
  %791 = sub nsw i32 7, %790
  %792 = sext i32 %791 to i64
  %793 = getelementptr inbounds i8, ptr %789, i64 %792
  %794 = load i8, ptr %793, align 1, !tbaa !25
  %795 = load ptr, ptr %84, align 8, !tbaa !5
  %796 = load i32, ptr %86, align 4, !tbaa !11
  %797 = sext i32 %796 to i64
  %798 = getelementptr inbounds i8, ptr %795, i64 %797
  store i8 %794, ptr %798, align 1, !tbaa !25
  br label %799

799:                                              ; preds = %788
  %800 = load i32, ptr %86, align 4, !tbaa !11
  %801 = add nsw i32 %800, 1
  store i32 %801, ptr %86, align 4, !tbaa !11
  br label %785, !llvm.loop !31

802:                                              ; preds = %785
  call void @llvm.lifetime.end.p0(i64 4, ptr %86) #8
  br label %803

803:                                              ; preds = %802, %782
  %804 = load ptr, ptr %8, align 8, !tbaa !5
  %805 = load ptr, ptr %10, align 8, !tbaa !5
  %806 = load i64, ptr %20, align 8, !tbaa !9
  %807 = load i32, ptr %34, align 4, !tbaa !11
  %808 = add i32 %807, 1
  %809 = load ptr, ptr %84, align 8, !tbaa !5
  call void %804(ptr noundef %805, i64 noundef %806, i32 noundef %808, ptr noundef %809)
  br label %859

810:                                              ; preds = %766
  store ptr %83, ptr %84, align 8, !tbaa !5
  %811 = load ptr, ptr %12, align 8, !tbaa !5
  %812 = getelementptr inbounds %struct.fstReaderContext, ptr %811, i32 0, i32 17
  %813 = load i8, ptr %812, align 2
  %814 = lshr i8 %813, 1
  %815 = and i8 %814, 1
  %816 = zext i8 %815 to i32
  %817 = icmp ne i32 %816, 0
  br i1 %817, label %818, label %821

818:                                              ; preds = %810
  %819 = load ptr, ptr %84, align 8, !tbaa !5
  %820 = load ptr, ptr %85, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %819, ptr align 1 %820, i64 8, i1 false)
  br label %840

821:                                              ; preds = %810
  call void @llvm.lifetime.start.p0(i64 4, ptr %87) #8
  store i32 0, ptr %87, align 4, !tbaa !11
  br label %822

822:                                              ; preds = %836, %821
  %823 = load i32, ptr %87, align 4, !tbaa !11
  %824 = icmp slt i32 %823, 8
  br i1 %824, label %825, label %839

825:                                              ; preds = %822
  %826 = load ptr, ptr %85, align 8, !tbaa !5
  %827 = load i32, ptr %87, align 4, !tbaa !11
  %828 = sub nsw i32 7, %827
  %829 = sext i32 %828 to i64
  %830 = getelementptr inbounds i8, ptr %826, i64 %829
  %831 = load i8, ptr %830, align 1, !tbaa !25
  %832 = load ptr, ptr %84, align 8, !tbaa !5
  %833 = load i32, ptr %87, align 4, !tbaa !11
  %834 = sext i32 %833 to i64
  %835 = getelementptr inbounds i8, ptr %832, i64 %834
  store i8 %831, ptr %835, align 1, !tbaa !25
  br label %836

836:                                              ; preds = %825
  %837 = load i32, ptr %87, align 4, !tbaa !11
  %838 = add nsw i32 %837, 1
  store i32 %838, ptr %87, align 4, !tbaa !11
  br label %822, !llvm.loop !32

839:                                              ; preds = %822
  call void @llvm.lifetime.end.p0(i64 4, ptr %87) #8
  br label %840

840:                                              ; preds = %839, %818
  %841 = load ptr, ptr %12, align 8, !tbaa !5
  %842 = getelementptr inbounds %struct.fstReaderContext, ptr %841, i32 0, i32 14
  %843 = load ptr, ptr %842, align 8, !tbaa !28
  %844 = load ptr, ptr %12, align 8, !tbaa !5
  %845 = getelementptr inbounds %struct.fstReaderContext, ptr %844, i32 0, i32 13
  %846 = load i32, ptr %845, align 8, !tbaa !30
  %847 = add i32 %846, 1
  %848 = zext i32 %847 to i64
  %849 = load double, ptr %83, align 8, !tbaa !33
  %850 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %843, i64 noundef %848, ptr noundef @.str.48, double noundef %849) #8
  %851 = load ptr, ptr %8, align 8, !tbaa !5
  %852 = load ptr, ptr %10, align 8, !tbaa !5
  %853 = load i64, ptr %20, align 8, !tbaa !9
  %854 = load i32, ptr %34, align 4, !tbaa !11
  %855 = add i32 %854, 1
  %856 = load ptr, ptr %12, align 8, !tbaa !5
  %857 = getelementptr inbounds %struct.fstReaderContext, ptr %856, i32 0, i32 14
  %858 = load ptr, ptr %857, align 8, !tbaa !28
  call void %851(ptr noundef %852, i64 noundef %853, i32 noundef %855, ptr noundef %858)
  br label %859

859:                                              ; preds = %840, %803
  br label %905

860:                                              ; preds = %759
  %861 = load ptr, ptr %11, align 8, !tbaa !5
  %862 = icmp ne ptr %861, null
  br i1 %862, label %863, label %904

863:                                              ; preds = %860
  call void @llvm.lifetime.start.p0(i64 16, ptr %88) #8
  call void @llvm.lifetime.start.p0(i64 64, ptr %89) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %90) #8
  store ptr %83, ptr %84, align 8, !tbaa !5
  %864 = load ptr, ptr %12, align 8, !tbaa !5
  %865 = getelementptr inbounds %struct.fstReaderContext, ptr %864, i32 0, i32 17
  %866 = load i8, ptr %865, align 2
  %867 = lshr i8 %866, 1
  %868 = and i8 %867, 1
  %869 = zext i8 %868 to i32
  %870 = icmp ne i32 %869, 0
  br i1 %870, label %871, label %874

871:                                              ; preds = %863
  %872 = load ptr, ptr %84, align 8, !tbaa !5
  %873 = load ptr, ptr %85, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %872, ptr align 1 %873, i64 8, i1 false)
  br label %893

874:                                              ; preds = %863
  call void @llvm.lifetime.start.p0(i64 4, ptr %91) #8
  store i32 0, ptr %91, align 4, !tbaa !11
  br label %875

875:                                              ; preds = %889, %874
  %876 = load i32, ptr %91, align 4, !tbaa !11
  %877 = icmp slt i32 %876, 8
  br i1 %877, label %878, label %892

878:                                              ; preds = %875
  %879 = load ptr, ptr %85, align 8, !tbaa !5
  %880 = load i32, ptr %91, align 4, !tbaa !11
  %881 = sub nsw i32 7, %880
  %882 = sext i32 %881 to i64
  %883 = getelementptr inbounds i8, ptr %879, i64 %882
  %884 = load i8, ptr %883, align 1, !tbaa !25
  %885 = load ptr, ptr %84, align 8, !tbaa !5
  %886 = load i32, ptr %91, align 4, !tbaa !11
  %887 = sext i32 %886 to i64
  %888 = getelementptr inbounds i8, ptr %885, i64 %887
  store i8 %884, ptr %888, align 1, !tbaa !25
  br label %889

889:                                              ; preds = %878
  %890 = load i32, ptr %91, align 4, !tbaa !11
  %891 = add nsw i32 %890, 1
  store i32 %891, ptr %91, align 4, !tbaa !11
  br label %875, !llvm.loop !35

892:                                              ; preds = %875
  call void @llvm.lifetime.end.p0(i64 4, ptr %91) #8
  br label %893

893:                                              ; preds = %892, %871
  %894 = getelementptr inbounds [16 x i8], ptr %88, i64 0, i64 0
  %895 = load i32, ptr %34, align 4, !tbaa !11
  %896 = add i32 %895, 1
  call void @fstVcdID(ptr noundef %894, i32 noundef %896)
  %897 = getelementptr inbounds [64 x i8], ptr %89, i64 0, i64 0
  %898 = load double, ptr %83, align 8, !tbaa !33
  %899 = getelementptr inbounds [16 x i8], ptr %88, i64 0, i64 0
  %900 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %897, i64 noundef 64, ptr noundef @.str.49, double noundef %898, ptr noundef %899) #8
  store i32 %900, ptr %90, align 4, !tbaa !11
  %901 = load ptr, ptr %12, align 8, !tbaa !5
  %902 = getelementptr inbounds [64 x i8], ptr %89, i64 0, i64 0
  %903 = load i32, ptr %90, align 4, !tbaa !11
  call void @fstWritex(ptr noundef %901, ptr noundef %902, i32 noundef %903)
  call void @llvm.lifetime.end.p0(i64 4, ptr %90) #8
  call void @llvm.lifetime.end.p0(i64 64, ptr %89) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %88) #8
  br label %904

904:                                              ; preds = %893, %860
  br label %905

905:                                              ; preds = %904, %859
  call void @llvm.lifetime.end.p0(i64 8, ptr %85) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %84) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %83) #8
  br label %906

906:                                              ; preds = %905, %758
  br label %907

907:                                              ; preds = %906, %635
  br label %908

908:                                              ; preds = %907, %552
  %909 = load ptr, ptr %12, align 8, !tbaa !5
  %910 = getelementptr inbounds %struct.fstReaderContext, ptr %909, i32 0, i32 10
  %911 = load ptr, ptr %910, align 8, !tbaa !27
  %912 = load i32, ptr %34, align 4, !tbaa !11
  %913 = zext i32 %912 to i64
  %914 = getelementptr inbounds i32, ptr %911, i64 %913
  %915 = load i32, ptr %914, align 4, !tbaa !11
  %916 = load i32, ptr %69, align 4, !tbaa !11
  %917 = add i32 %916, %915
  store i32 %917, ptr %69, align 4, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 4, ptr %77) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %76) #8
  br label %918

918:                                              ; preds = %908
  %919 = load i32, ptr %34, align 4, !tbaa !11
  %920 = add i32 %919, 1
  store i32 %920, ptr %34, align 4, !tbaa !11
  br label %547, !llvm.loop !36

921:                                              ; preds = %547
  %922 = load ptr, ptr %68, align 8, !tbaa !5
  call void @free(ptr noundef %922) #8
  %923 = load ptr, ptr %12, align 8, !tbaa !5
  %924 = load ptr, ptr %12, align 8, !tbaa !5
  %925 = getelementptr inbounds %struct.fstReaderContext, ptr %924, i32 0, i32 0
  %926 = load ptr, ptr %925, align 8, !tbaa !17
  %927 = load i64, ptr %23, align 8, !tbaa !9
  %928 = sub nsw i64 0, %927
  %929 = call i32 @fstReaderFseeko(ptr noundef %923, ptr noundef %926, i64 noundef %928, i32 noundef 1)
  call void @llvm.lifetime.end.p0(i64 4, ptr %69) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %68) #8
  br label %930

930:                                              ; preds = %921, %435
  br label %931

931:                                              ; preds = %930, %407
  %932 = load ptr, ptr %12, align 8, !tbaa !5
  %933 = load ptr, ptr %12, align 8, !tbaa !5
  %934 = getelementptr inbounds %struct.fstReaderContext, ptr %933, i32 0, i32 0
  %935 = load ptr, ptr %934, align 8, !tbaa !17
  %936 = load i64, ptr %23, align 8, !tbaa !9
  %937 = call i32 @fstReaderFseeko(ptr noundef %932, ptr noundef %935, i64 noundef %936, i32 noundef 1)
  %938 = load ptr, ptr %12, align 8, !tbaa !5
  %939 = getelementptr inbounds %struct.fstReaderContext, ptr %938, i32 0, i32 0
  %940 = load ptr, ptr %939, align 8, !tbaa !17
  %941 = call i64 @fstReaderVarint64(ptr noundef %940)
  store i64 %941, ptr %25, align 8, !tbaa !9
  %942 = load ptr, ptr %12, align 8, !tbaa !5
  %943 = getelementptr inbounds %struct.fstReaderContext, ptr %942, i32 0, i32 0
  %944 = load ptr, ptr %943, align 8, !tbaa !17
  %945 = call i64 @ftello(ptr noundef %944)
  store i64 %945, ptr %26, align 8, !tbaa !9
  %946 = load ptr, ptr %12, align 8, !tbaa !5
  %947 = getelementptr inbounds %struct.fstReaderContext, ptr %946, i32 0, i32 0
  %948 = load ptr, ptr %947, align 8, !tbaa !17
  %949 = call i32 @fgetc(ptr noundef %948)
  store i32 %949, ptr %49, align 4, !tbaa !11
  %950 = load i64, ptr %18, align 8, !tbaa !9
  %951 = load i64, ptr %19, align 8, !tbaa !9
  %952 = add i64 %950, %951
  %953 = sub i64 %952, 24
  %954 = load i64, ptr %40, align 8, !tbaa !9
  %955 = sub i64 %953, %954
  %956 = sub i64 %955, 8
  store i64 %956, ptr %27, align 8, !tbaa !9
  %957 = load ptr, ptr %12, align 8, !tbaa !5
  %958 = load ptr, ptr %12, align 8, !tbaa !5
  %959 = getelementptr inbounds %struct.fstReaderContext, ptr %958, i32 0, i32 0
  %960 = load ptr, ptr %959, align 8, !tbaa !17
  %961 = load i64, ptr %27, align 8, !tbaa !9
  %962 = call i32 @fstReaderFseeko(ptr noundef %957, ptr noundef %960, i64 noundef %961, i32 noundef 0)
  %963 = load ptr, ptr %12, align 8, !tbaa !5
  %964 = getelementptr inbounds %struct.fstReaderContext, ptr %963, i32 0, i32 0
  %965 = load ptr, ptr %964, align 8, !tbaa !17
  %966 = call i64 @fstReaderUint64(ptr noundef %965)
  store i64 %966, ptr %33, align 8, !tbaa !9
  %967 = load i64, ptr %27, align 8, !tbaa !9
  %968 = load i64, ptr %33, align 8, !tbaa !9
  %969 = sub nsw i64 %967, %968
  store i64 %969, ptr %28, align 8, !tbaa !9
  %970 = load i64, ptr %33, align 8, !tbaa !9
  %971 = call noalias ptr @malloc(i64 noundef %970) #10
  store ptr %971, ptr %31, align 8, !tbaa !5
  %972 = load ptr, ptr %31, align 8, !tbaa !5
  %973 = icmp ne ptr %972, null
  br i1 %973, label %975, label %974

974:                                              ; preds = %931
  br label %2524

975:                                              ; preds = %931
  %976 = load ptr, ptr %12, align 8, !tbaa !5
  %977 = load ptr, ptr %12, align 8, !tbaa !5
  %978 = getelementptr inbounds %struct.fstReaderContext, ptr %977, i32 0, i32 0
  %979 = load ptr, ptr %978, align 8, !tbaa !17
  %980 = load i64, ptr %28, align 8, !tbaa !9
  %981 = call i32 @fstReaderFseeko(ptr noundef %976, ptr noundef %979, i64 noundef %980, i32 noundef 0)
  %982 = load ptr, ptr %31, align 8, !tbaa !5
  %983 = load i64, ptr %33, align 8, !tbaa !9
  %984 = load ptr, ptr %12, align 8, !tbaa !5
  %985 = getelementptr inbounds %struct.fstReaderContext, ptr %984, i32 0, i32 0
  %986 = load ptr, ptr %985, align 8, !tbaa !17
  %987 = call i64 @fstFread(ptr noundef %982, i64 noundef %983, i64 noundef 1, ptr noundef %986)
  %988 = load i64, ptr %25, align 8, !tbaa !9
  %989 = load i64, ptr %38, align 8, !tbaa !9
  %990 = icmp ugt i64 %988, %989
  br i1 %990, label %991, label %1026

991:                                              ; preds = %975
  %992 = load ptr, ptr %29, align 8, !tbaa !5
  call void @free(ptr noundef %992) #8
  %993 = load ptr, ptr %30, align 8, !tbaa !5
  call void @free(ptr noundef %993) #8
  %994 = load i64, ptr %25, align 8, !tbaa !9
  store i64 %994, ptr %38, align 8, !tbaa !9
  %995 = load i64, ptr %25, align 8, !tbaa !9
  %996 = add i64 %995, 1
  %997 = icmp ne i64 %996, 0
  br i1 %997, label %999, label %998

998:                                              ; preds = %991
  call void @chk_report_abort(ptr noundef @.str.50)
  br label %999

999:                                              ; preds = %998, %991
  call void @llvm.lifetime.start.p0(i64 8, ptr %92) #8
  %1000 = load i64, ptr %25, align 8, !tbaa !9
  %1001 = add i64 %1000, 1
  %1002 = mul i64 %1001, 8
  store i64 %1002, ptr %92, align 8, !tbaa !9
  %1003 = load i64, ptr %92, align 8, !tbaa !9
  %1004 = udiv i64 %1003, 8
  %1005 = load i64, ptr %25, align 8, !tbaa !9
  %1006 = add i64 %1005, 1
  %1007 = icmp ne i64 %1004, %1006
  br i1 %1007, label %1008, label %1009

1008:                                             ; preds = %999
  call void @chk_report_abort(ptr noundef @.str.50)
  br label %1009

1009:                                             ; preds = %1008, %999
  call void @llvm.lifetime.end.p0(i64 8, ptr %92) #8
  %1010 = load i64, ptr %25, align 8, !tbaa !9
  %1011 = add i64 %1010, 1
  %1012 = call noalias ptr @calloc(i64 noundef %1011, i64 noundef 8) #9
  store ptr %1012, ptr %29, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %93) #8
  %1013 = load i64, ptr %25, align 8, !tbaa !9
  %1014 = add i64 %1013, 1
  %1015 = mul i64 %1014, 4
  store i64 %1015, ptr %93, align 8, !tbaa !9
  %1016 = load i64, ptr %93, align 8, !tbaa !9
  %1017 = udiv i64 %1016, 4
  %1018 = load i64, ptr %25, align 8, !tbaa !9
  %1019 = add i64 %1018, 1
  %1020 = icmp ne i64 %1017, %1019
  br i1 %1020, label %1021, label %1022

1021:                                             ; preds = %1009
  call void @chk_report_abort(ptr noundef @.str.50)
  br label %1022

1022:                                             ; preds = %1021, %1009
  call void @llvm.lifetime.end.p0(i64 8, ptr %93) #8
  %1023 = load i64, ptr %25, align 8, !tbaa !9
  %1024 = add i64 %1023, 1
  %1025 = call noalias ptr @calloc(i64 noundef %1024, i64 noundef 4) #9
  store ptr %1025, ptr %30, align 8, !tbaa !5
  br label %1026

1026:                                             ; preds = %1022, %975
  %1027 = load ptr, ptr %29, align 8, !tbaa !5
  %1028 = icmp ne ptr %1027, null
  br i1 %1028, label %1029, label %1032

1029:                                             ; preds = %1026
  %1030 = load ptr, ptr %30, align 8, !tbaa !5
  %1031 = icmp ne ptr %1030, null
  br i1 %1031, label %1033, label %1032

1032:                                             ; preds = %1029, %1026
  br label %2524

1033:                                             ; preds = %1029
  %1034 = load ptr, ptr %31, align 8, !tbaa !5
  store ptr %1034, ptr %32, align 8, !tbaa !5
  store i32 0, ptr %34, align 4, !tbaa !11
  store i64 0, ptr %37, align 8, !tbaa !9
  %1035 = load i32, ptr %41, align 4, !tbaa !11
  %1036 = icmp eq i32 %1035, 8
  br i1 %1036, label %1037, label %1148

1037:                                             ; preds = %1033
  call void @llvm.lifetime.start.p0(i64 4, ptr %94) #8
  store i32 0, ptr %94, align 4, !tbaa !11
  br label %1038

1038:                                             ; preds = %1141, %1037
  call void @llvm.lifetime.start.p0(i64 4, ptr %95) #8
  %1039 = load ptr, ptr %32, align 8, !tbaa !5
  %1040 = load i8, ptr %1039, align 1, !tbaa !25
  %1041 = zext i8 %1040 to i32
  %1042 = and i32 %1041, 1
  %1043 = icmp ne i32 %1042, 0
  br i1 %1043, label %1044, label %1106

1044:                                             ; preds = %1038
  call void @llvm.lifetime.start.p0(i64 8, ptr %96) #8
  %1045 = load ptr, ptr %32, align 8, !tbaa !5
  %1046 = call i64 @fstGetSVarint64(ptr noundef %1045, ptr noundef %95)
  %1047 = ashr i64 %1046, 1
  store i64 %1047, ptr %96, align 8, !tbaa !9
  %1048 = load i64, ptr %96, align 8, !tbaa !9
  %1049 = icmp sgt i64 %1048, 0
  br i1 %1049, label %1050, label %1076

1050:                                             ; preds = %1044
  %1051 = load i64, ptr %37, align 8, !tbaa !9
  %1052 = load i64, ptr %96, align 8, !tbaa !9
  %1053 = add i64 %1051, %1052
  %1054 = load ptr, ptr %29, align 8, !tbaa !5
  %1055 = load i32, ptr %34, align 4, !tbaa !11
  %1056 = zext i32 %1055 to i64
  %1057 = getelementptr inbounds i64, ptr %1054, i64 %1056
  store i64 %1053, ptr %1057, align 8, !tbaa !9
  store i64 %1053, ptr %37, align 8, !tbaa !9
  %1058 = load i32, ptr %34, align 4, !tbaa !11
  %1059 = icmp ne i32 %1058, 0
  br i1 %1059, label %1060, label %1073

1060:                                             ; preds = %1050
  %1061 = load i64, ptr %37, align 8, !tbaa !9
  %1062 = load ptr, ptr %29, align 8, !tbaa !5
  %1063 = load i32, ptr %35, align 4, !tbaa !11
  %1064 = zext i32 %1063 to i64
  %1065 = getelementptr inbounds i64, ptr %1062, i64 %1064
  %1066 = load i64, ptr %1065, align 8, !tbaa !9
  %1067 = sub i64 %1061, %1066
  %1068 = trunc i64 %1067 to i32
  %1069 = load ptr, ptr %30, align 8, !tbaa !5
  %1070 = load i32, ptr %35, align 4, !tbaa !11
  %1071 = zext i32 %1070 to i64
  %1072 = getelementptr inbounds i32, ptr %1069, i64 %1071
  store i32 %1068, ptr %1072, align 4, !tbaa !11
  br label %1073

1073:                                             ; preds = %1060, %1050
  %1074 = load i32, ptr %34, align 4, !tbaa !11
  %1075 = add i32 %1074, 1
  store i32 %1075, ptr %34, align 4, !tbaa !11
  store i32 %1074, ptr %35, align 4, !tbaa !11
  br label %1105

1076:                                             ; preds = %1044
  %1077 = load i64, ptr %96, align 8, !tbaa !9
  %1078 = icmp slt i64 %1077, 0
  br i1 %1078, label %1079, label %1092

1079:                                             ; preds = %1076
  %1080 = load ptr, ptr %29, align 8, !tbaa !5
  %1081 = load i32, ptr %34, align 4, !tbaa !11
  %1082 = zext i32 %1081 to i64
  %1083 = getelementptr inbounds i64, ptr %1080, i64 %1082
  store i64 0, ptr %1083, align 8, !tbaa !9
  %1084 = load i64, ptr %96, align 8, !tbaa !9
  %1085 = trunc i64 %1084 to i32
  store i32 %1085, ptr %94, align 4, !tbaa !11
  %1086 = load ptr, ptr %30, align 8, !tbaa !5
  %1087 = load i32, ptr %34, align 4, !tbaa !11
  %1088 = zext i32 %1087 to i64
  %1089 = getelementptr inbounds i32, ptr %1086, i64 %1088
  store i32 %1085, ptr %1089, align 4, !tbaa !11
  %1090 = load i32, ptr %34, align 4, !tbaa !11
  %1091 = add i32 %1090, 1
  store i32 %1091, ptr %34, align 4, !tbaa !11
  br label %1104

1092:                                             ; preds = %1076
  %1093 = load ptr, ptr %29, align 8, !tbaa !5
  %1094 = load i32, ptr %34, align 4, !tbaa !11
  %1095 = zext i32 %1094 to i64
  %1096 = getelementptr inbounds i64, ptr %1093, i64 %1095
  store i64 0, ptr %1096, align 8, !tbaa !9
  %1097 = load i32, ptr %94, align 4, !tbaa !11
  %1098 = load ptr, ptr %30, align 8, !tbaa !5
  %1099 = load i32, ptr %34, align 4, !tbaa !11
  %1100 = zext i32 %1099 to i64
  %1101 = getelementptr inbounds i32, ptr %1098, i64 %1100
  store i32 %1097, ptr %1101, align 4, !tbaa !11
  %1102 = load i32, ptr %34, align 4, !tbaa !11
  %1103 = add i32 %1102, 1
  store i32 %1103, ptr %34, align 4, !tbaa !11
  br label %1104

1104:                                             ; preds = %1092, %1079
  br label %1105

1105:                                             ; preds = %1104, %1073
  call void @llvm.lifetime.end.p0(i64 8, ptr %96) #8
  br label %1136

1106:                                             ; preds = %1038
  call void @llvm.lifetime.start.p0(i64 8, ptr %97) #8
  %1107 = load ptr, ptr %32, align 8, !tbaa !5
  %1108 = call i32 @fstGetVarint32(ptr noundef %1107, ptr noundef %95)
  %1109 = zext i32 %1108 to i64
  store i64 %1109, ptr %97, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %98) #8
  %1110 = load i64, ptr %97, align 8, !tbaa !9
  %1111 = lshr i64 %1110, 1
  %1112 = trunc i64 %1111 to i32
  store i32 %1112, ptr %98, align 4, !tbaa !11
  %1113 = load i32, ptr %34, align 4, !tbaa !11
  %1114 = load i32, ptr %98, align 4, !tbaa !11
  %1115 = add i32 %1113, %1114
  %1116 = sub i32 %1115, 1
  %1117 = zext i32 %1116 to i64
  %1118 = load i64, ptr %25, align 8, !tbaa !9
  %1119 = icmp ugt i64 %1117, %1118
  br i1 %1119, label %1120, label %1121

1120:                                             ; preds = %1106
  call void @chk_report_abort(ptr noundef @.str.51)
  br label %1121

1121:                                             ; preds = %1120, %1106
  store i32 0, ptr %36, align 4, !tbaa !11
  br label %1122

1122:                                             ; preds = %1132, %1121
  %1123 = load i32, ptr %36, align 4, !tbaa !11
  %1124 = load i32, ptr %98, align 4, !tbaa !11
  %1125 = icmp ult i32 %1123, %1124
  br i1 %1125, label %1126, label %1135

1126:                                             ; preds = %1122
  %1127 = load ptr, ptr %29, align 8, !tbaa !5
  %1128 = load i32, ptr %34, align 4, !tbaa !11
  %1129 = add i32 %1128, 1
  store i32 %1129, ptr %34, align 4, !tbaa !11
  %1130 = zext i32 %1128 to i64
  %1131 = getelementptr inbounds i64, ptr %1127, i64 %1130
  store i64 0, ptr %1131, align 8, !tbaa !9
  br label %1132

1132:                                             ; preds = %1126
  %1133 = load i32, ptr %36, align 4, !tbaa !11
  %1134 = add i32 %1133, 1
  store i32 %1134, ptr %36, align 4, !tbaa !11
  br label %1122, !llvm.loop !37

1135:                                             ; preds = %1122
  call void @llvm.lifetime.end.p0(i64 4, ptr %98) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %97) #8
  br label %1136

1136:                                             ; preds = %1135, %1105
  %1137 = load i32, ptr %95, align 4, !tbaa !11
  %1138 = load ptr, ptr %32, align 8, !tbaa !5
  %1139 = sext i32 %1137 to i64
  %1140 = getelementptr inbounds i8, ptr %1138, i64 %1139
  store ptr %1140, ptr %32, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 4, ptr %95) #8
  br label %1141

1141:                                             ; preds = %1136
  %1142 = load ptr, ptr %32, align 8, !tbaa !5
  %1143 = load ptr, ptr %31, align 8, !tbaa !5
  %1144 = load i64, ptr %33, align 8, !tbaa !9
  %1145 = getelementptr inbounds i8, ptr %1143, i64 %1144
  %1146 = icmp ne ptr %1142, %1145
  br i1 %1146, label %1038, label %1147, !llvm.loop !38

1147:                                             ; preds = %1141
  call void @llvm.lifetime.end.p0(i64 4, ptr %94) #8
  br label %1247

1148:                                             ; preds = %1033
  br label %1149

1149:                                             ; preds = %1240, %1148
  call void @llvm.lifetime.start.p0(i64 4, ptr %99) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %100) #8
  %1150 = load ptr, ptr %32, align 8, !tbaa !5
  %1151 = call i32 @fstGetVarint32(ptr noundef %1150, ptr noundef %99)
  %1152 = zext i32 %1151 to i64
  store i64 %1152, ptr %100, align 8, !tbaa !9
  %1153 = load i64, ptr %100, align 8, !tbaa !9
  %1154 = icmp ne i64 %1153, 0
  br i1 %1154, label %1176, label %1155

1155:                                             ; preds = %1149
  %1156 = load i32, ptr %99, align 4, !tbaa !11
  %1157 = load ptr, ptr %32, align 8, !tbaa !5
  %1158 = sext i32 %1156 to i64
  %1159 = getelementptr inbounds i8, ptr %1157, i64 %1158
  store ptr %1159, ptr %32, align 8, !tbaa !5
  %1160 = load ptr, ptr %32, align 8, !tbaa !5
  %1161 = call i32 @fstGetVarint32(ptr noundef %1160, ptr noundef %99)
  %1162 = zext i32 %1161 to i64
  store i64 %1162, ptr %100, align 8, !tbaa !9
  %1163 = load ptr, ptr %29, align 8, !tbaa !5
  %1164 = load i32, ptr %34, align 4, !tbaa !11
  %1165 = zext i32 %1164 to i64
  %1166 = getelementptr inbounds i64, ptr %1163, i64 %1165
  store i64 0, ptr %1166, align 8, !tbaa !9
  %1167 = load i64, ptr %100, align 8, !tbaa !9
  %1168 = sub i64 0, %1167
  %1169 = trunc i64 %1168 to i32
  %1170 = load ptr, ptr %30, align 8, !tbaa !5
  %1171 = load i32, ptr %34, align 4, !tbaa !11
  %1172 = zext i32 %1171 to i64
  %1173 = getelementptr inbounds i32, ptr %1170, i64 %1172
  store i32 %1169, ptr %1173, align 4, !tbaa !11
  %1174 = load i32, ptr %34, align 4, !tbaa !11
  %1175 = add i32 %1174, 1
  store i32 %1175, ptr %34, align 4, !tbaa !11
  br label %1235

1176:                                             ; preds = %1149
  %1177 = load i64, ptr %100, align 8, !tbaa !9
  %1178 = and i64 %1177, 1
  %1179 = icmp ne i64 %1178, 0
  br i1 %1179, label %1180, label %1207

1180:                                             ; preds = %1176
  %1181 = load i64, ptr %37, align 8, !tbaa !9
  %1182 = load i64, ptr %100, align 8, !tbaa !9
  %1183 = lshr i64 %1182, 1
  %1184 = add i64 %1181, %1183
  %1185 = load ptr, ptr %29, align 8, !tbaa !5
  %1186 = load i32, ptr %34, align 4, !tbaa !11
  %1187 = zext i32 %1186 to i64
  %1188 = getelementptr inbounds i64, ptr %1185, i64 %1187
  store i64 %1184, ptr %1188, align 8, !tbaa !9
  store i64 %1184, ptr %37, align 8, !tbaa !9
  %1189 = load i32, ptr %34, align 4, !tbaa !11
  %1190 = icmp ne i32 %1189, 0
  br i1 %1190, label %1191, label %1204

1191:                                             ; preds = %1180
  %1192 = load i64, ptr %37, align 8, !tbaa !9
  %1193 = load ptr, ptr %29, align 8, !tbaa !5
  %1194 = load i32, ptr %35, align 4, !tbaa !11
  %1195 = zext i32 %1194 to i64
  %1196 = getelementptr inbounds i64, ptr %1193, i64 %1195
  %1197 = load i64, ptr %1196, align 8, !tbaa !9
  %1198 = sub i64 %1192, %1197
  %1199 = trunc i64 %1198 to i32
  %1200 = load ptr, ptr %30, align 8, !tbaa !5
  %1201 = load i32, ptr %35, align 4, !tbaa !11
  %1202 = zext i32 %1201 to i64
  %1203 = getelementptr inbounds i32, ptr %1200, i64 %1202
  store i32 %1199, ptr %1203, align 4, !tbaa !11
  br label %1204

1204:                                             ; preds = %1191, %1180
  %1205 = load i32, ptr %34, align 4, !tbaa !11
  %1206 = add i32 %1205, 1
  store i32 %1206, ptr %34, align 4, !tbaa !11
  store i32 %1205, ptr %35, align 4, !tbaa !11
  br label %1234

1207:                                             ; preds = %1176
  call void @llvm.lifetime.start.p0(i64 4, ptr %101) #8
  %1208 = load i64, ptr %100, align 8, !tbaa !9
  %1209 = lshr i64 %1208, 1
  %1210 = trunc i64 %1209 to i32
  store i32 %1210, ptr %101, align 4, !tbaa !11
  %1211 = load i32, ptr %34, align 4, !tbaa !11
  %1212 = load i32, ptr %101, align 4, !tbaa !11
  %1213 = add i32 %1211, %1212
  %1214 = sub i32 %1213, 1
  %1215 = zext i32 %1214 to i64
  %1216 = load i64, ptr %25, align 8, !tbaa !9
  %1217 = icmp ugt i64 %1215, %1216
  br i1 %1217, label %1218, label %1219

1218:                                             ; preds = %1207
  call void @chk_report_abort(ptr noundef @.str.51)
  br label %1219

1219:                                             ; preds = %1218, %1207
  store i32 0, ptr %36, align 4, !tbaa !11
  br label %1220

1220:                                             ; preds = %1230, %1219
  %1221 = load i32, ptr %36, align 4, !tbaa !11
  %1222 = load i32, ptr %101, align 4, !tbaa !11
  %1223 = icmp ult i32 %1221, %1222
  br i1 %1223, label %1224, label %1233

1224:                                             ; preds = %1220
  %1225 = load ptr, ptr %29, align 8, !tbaa !5
  %1226 = load i32, ptr %34, align 4, !tbaa !11
  %1227 = add i32 %1226, 1
  store i32 %1227, ptr %34, align 4, !tbaa !11
  %1228 = zext i32 %1226 to i64
  %1229 = getelementptr inbounds i64, ptr %1225, i64 %1228
  store i64 0, ptr %1229, align 8, !tbaa !9
  br label %1230

1230:                                             ; preds = %1224
  %1231 = load i32, ptr %36, align 4, !tbaa !11
  %1232 = add i32 %1231, 1
  store i32 %1232, ptr %36, align 4, !tbaa !11
  br label %1220, !llvm.loop !39

1233:                                             ; preds = %1220
  call void @llvm.lifetime.end.p0(i64 4, ptr %101) #8
  br label %1234

1234:                                             ; preds = %1233, %1204
  br label %1235

1235:                                             ; preds = %1234, %1155
  %1236 = load i32, ptr %99, align 4, !tbaa !11
  %1237 = load ptr, ptr %32, align 8, !tbaa !5
  %1238 = sext i32 %1236 to i64
  %1239 = getelementptr inbounds i8, ptr %1237, i64 %1238
  store ptr %1239, ptr %32, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr %100) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %99) #8
  br label %1240

1240:                                             ; preds = %1235
  %1241 = load ptr, ptr %32, align 8, !tbaa !5
  %1242 = load ptr, ptr %31, align 8, !tbaa !5
  %1243 = load i64, ptr %33, align 8, !tbaa !9
  %1244 = getelementptr inbounds i8, ptr %1242, i64 %1243
  %1245 = icmp ne ptr %1241, %1244
  br i1 %1245, label %1149, label %1246, !llvm.loop !40

1246:                                             ; preds = %1240
  br label %1247

1247:                                             ; preds = %1246, %1147
  %1248 = load i64, ptr %28, align 8, !tbaa !9
  %1249 = load i64, ptr %26, align 8, !tbaa !9
  %1250 = sub nsw i64 %1248, %1249
  %1251 = load ptr, ptr %29, align 8, !tbaa !5
  %1252 = load i32, ptr %34, align 4, !tbaa !11
  %1253 = zext i32 %1252 to i64
  %1254 = getelementptr inbounds i64, ptr %1251, i64 %1253
  store i64 %1250, ptr %1254, align 8, !tbaa !9
  %1255 = load ptr, ptr %29, align 8, !tbaa !5
  %1256 = load i32, ptr %34, align 4, !tbaa !11
  %1257 = zext i32 %1256 to i64
  %1258 = getelementptr inbounds i64, ptr %1255, i64 %1257
  %1259 = load i64, ptr %1258, align 8, !tbaa !9
  %1260 = load ptr, ptr %29, align 8, !tbaa !5
  %1261 = load i32, ptr %35, align 4, !tbaa !11
  %1262 = zext i32 %1261 to i64
  %1263 = getelementptr inbounds i64, ptr %1260, i64 %1262
  %1264 = load i64, ptr %1263, align 8, !tbaa !9
  %1265 = sub nsw i64 %1259, %1264
  %1266 = trunc i64 %1265 to i32
  %1267 = load ptr, ptr %30, align 8, !tbaa !5
  %1268 = load i32, ptr %35, align 4, !tbaa !11
  %1269 = zext i32 %1268 to i64
  %1270 = getelementptr inbounds i32, ptr %1267, i64 %1269
  store i32 %1266, ptr %1270, align 4, !tbaa !11
  store i32 0, ptr %36, align 4, !tbaa !11
  br label %1271

1271:                                             ; preds = %1319, %1247
  %1272 = load i32, ptr %36, align 4, !tbaa !11
  %1273 = load i32, ptr %34, align 4, !tbaa !11
  %1274 = icmp ult i32 %1272, %1273
  br i1 %1274, label %1275, label %1322

1275:                                             ; preds = %1271
  call void @llvm.lifetime.start.p0(i64 4, ptr %102) #8
  %1276 = load ptr, ptr %30, align 8, !tbaa !5
  %1277 = load i32, ptr %36, align 4, !tbaa !11
  %1278 = zext i32 %1277 to i64
  %1279 = getelementptr inbounds i32, ptr %1276, i64 %1278
  %1280 = load i32, ptr %1279, align 4, !tbaa !11
  store i32 %1280, ptr %102, align 4, !tbaa !11
  %1281 = load i32, ptr %102, align 4, !tbaa !11
  %1282 = icmp slt i32 %1281, 0
  br i1 %1282, label %1283, label %1318

1283:                                             ; preds = %1275
  %1284 = load ptr, ptr %29, align 8, !tbaa !5
  %1285 = load i32, ptr %36, align 4, !tbaa !11
  %1286 = zext i32 %1285 to i64
  %1287 = getelementptr inbounds i64, ptr %1284, i64 %1286
  %1288 = load i64, ptr %1287, align 8, !tbaa !9
  %1289 = icmp ne i64 %1288, 0
  br i1 %1289, label %1318, label %1290

1290:                                             ; preds = %1283
  %1291 = load i32, ptr %102, align 4, !tbaa !11
  %1292 = sub nsw i32 0, %1291
  store i32 %1292, ptr %102, align 4, !tbaa !11
  %1293 = load i32, ptr %102, align 4, !tbaa !11
  %1294 = add nsw i32 %1293, -1
  store i32 %1294, ptr %102, align 4, !tbaa !11
  %1295 = load i32, ptr %102, align 4, !tbaa !11
  %1296 = load i32, ptr %36, align 4, !tbaa !11
  %1297 = icmp ult i32 %1295, %1296
  br i1 %1297, label %1298, label %1317

1298:                                             ; preds = %1290
  %1299 = load ptr, ptr %29, align 8, !tbaa !5
  %1300 = load i32, ptr %102, align 4, !tbaa !11
  %1301 = sext i32 %1300 to i64
  %1302 = getelementptr inbounds i64, ptr %1299, i64 %1301
  %1303 = load i64, ptr %1302, align 8, !tbaa !9
  %1304 = load ptr, ptr %29, align 8, !tbaa !5
  %1305 = load i32, ptr %36, align 4, !tbaa !11
  %1306 = zext i32 %1305 to i64
  %1307 = getelementptr inbounds i64, ptr %1304, i64 %1306
  store i64 %1303, ptr %1307, align 8, !tbaa !9
  %1308 = load ptr, ptr %30, align 8, !tbaa !5
  %1309 = load i32, ptr %102, align 4, !tbaa !11
  %1310 = sext i32 %1309 to i64
  %1311 = getelementptr inbounds i32, ptr %1308, i64 %1310
  %1312 = load i32, ptr %1311, align 4, !tbaa !11
  %1313 = load ptr, ptr %30, align 8, !tbaa !5
  %1314 = load i32, ptr %36, align 4, !tbaa !11
  %1315 = zext i32 %1314 to i64
  %1316 = getelementptr inbounds i32, ptr %1313, i64 %1315
  store i32 %1312, ptr %1316, align 4, !tbaa !11
  br label %1317

1317:                                             ; preds = %1298, %1290
  br label %1318

1318:                                             ; preds = %1317, %1283, %1275
  call void @llvm.lifetime.end.p0(i64 4, ptr %102) #8
  br label %1319

1319:                                             ; preds = %1318
  %1320 = load i32, ptr %36, align 4, !tbaa !11
  %1321 = add i32 %1320, 1
  store i32 %1321, ptr %36, align 4, !tbaa !11
  br label %1271, !llvm.loop !41

1322:                                             ; preds = %1271
  store i32 16384, ptr %51, align 4, !tbaa !11
  %1323 = load i32, ptr %51, align 4, !tbaa !11
  %1324 = zext i32 %1323 to i64
  %1325 = call noalias ptr @malloc(i64 noundef %1324) #10
  store ptr %1325, ptr %50, align 8, !tbaa !5
  %1326 = load i32, ptr %34, align 4, !tbaa !11
  %1327 = load ptr, ptr %12, align 8, !tbaa !5
  %1328 = getelementptr inbounds %struct.fstReaderContext, ptr %1327, i32 0, i32 7
  %1329 = load i32, ptr %1328, align 8, !tbaa !13
  %1330 = icmp ugt i32 %1326, %1329
  br i1 %1330, label %1331, label %1335

1331:                                             ; preds = %1322
  %1332 = load ptr, ptr %12, align 8, !tbaa !5
  %1333 = getelementptr inbounds %struct.fstReaderContext, ptr %1332, i32 0, i32 7
  %1334 = load i32, ptr %1333, align 8, !tbaa !13
  store i32 %1334, ptr %34, align 4, !tbaa !11
  br label %1335

1335:                                             ; preds = %1331, %1322
  store i32 0, ptr %36, align 4, !tbaa !11
  br label %1336

1336:                                             ; preds = %1581, %1335
  %1337 = load i32, ptr %36, align 4, !tbaa !11
  %1338 = load i32, ptr %34, align 4, !tbaa !11
  %1339 = icmp ult i32 %1337, %1338
  br i1 %1339, label %1340, label %1584

1340:                                             ; preds = %1336
  %1341 = load ptr, ptr %29, align 8, !tbaa !5
  %1342 = load i32, ptr %36, align 4, !tbaa !11
  %1343 = zext i32 %1342 to i64
  %1344 = getelementptr inbounds i64, ptr %1341, i64 %1343
  %1345 = load i64, ptr %1344, align 8, !tbaa !9
  %1346 = icmp ne i64 %1345, 0
  br i1 %1346, label %1347, label %1580

1347:                                             ; preds = %1340
  call void @llvm.lifetime.start.p0(i64 4, ptr %103) #8
  %1348 = load i32, ptr %36, align 4, !tbaa !11
  %1349 = udiv i32 %1348, 8
  store i32 %1349, ptr %103, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %104) #8
  %1350 = load i32, ptr %36, align 4, !tbaa !11
  %1351 = and i32 %1350, 7
  store i32 %1351, ptr %104, align 4, !tbaa !11
  %1352 = load ptr, ptr %12, align 8, !tbaa !5
  %1353 = getelementptr inbounds %struct.fstReaderContext, ptr %1352, i32 0, i32 12
  %1354 = load ptr, ptr %1353, align 8, !tbaa !26
  %1355 = load i32, ptr %103, align 4, !tbaa !11
  %1356 = sext i32 %1355 to i64
  %1357 = getelementptr inbounds i8, ptr %1354, i64 %1356
  %1358 = load i8, ptr %1357, align 1, !tbaa !25
  %1359 = zext i8 %1358 to i32
  %1360 = load i32, ptr %104, align 4, !tbaa !11
  %1361 = shl i32 1, %1360
  %1362 = and i32 %1359, %1361
  %1363 = icmp ne i32 %1362, 0
  br i1 %1363, label %1364, label %1579

1364:                                             ; preds = %1347
  call void @llvm.lifetime.start.p0(i64 4, ptr %105) #8
  store i32 0, ptr %105, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %106) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %107) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %108) #8
  %1365 = load ptr, ptr %12, align 8, !tbaa !5
  %1366 = load ptr, ptr %12, align 8, !tbaa !5
  %1367 = getelementptr inbounds %struct.fstReaderContext, ptr %1366, i32 0, i32 0
  %1368 = load ptr, ptr %1367, align 8, !tbaa !17
  %1369 = load i64, ptr %26, align 8, !tbaa !9
  %1370 = load ptr, ptr %29, align 8, !tbaa !5
  %1371 = load i32, ptr %36, align 4, !tbaa !11
  %1372 = zext i32 %1371 to i64
  %1373 = getelementptr inbounds i64, ptr %1370, i64 %1372
  %1374 = load i64, ptr %1373, align 8, !tbaa !9
  %1375 = add nsw i64 %1369, %1374
  %1376 = call i32 @fstReaderFseeko(ptr noundef %1365, ptr noundef %1368, i64 noundef %1375, i32 noundef 0)
  %1377 = load ptr, ptr %12, align 8, !tbaa !5
  %1378 = getelementptr inbounds %struct.fstReaderContext, ptr %1377, i32 0, i32 0
  %1379 = load ptr, ptr %1378, align 8, !tbaa !17
  %1380 = call i32 @fstReaderVarint32WithSkip(ptr noundef %1379, ptr noundef %107)
  store i32 %1380, ptr %106, align 4, !tbaa !11
  %1381 = load i32, ptr %106, align 4, !tbaa !11
  %1382 = icmp ne i32 %1381, 0
  br i1 %1382, label %1383, label %1474

1383:                                             ; preds = %1364
  call void @llvm.lifetime.start.p0(i64 8, ptr %109) #8
  %1384 = load ptr, ptr %43, align 8, !tbaa !5
  %1385 = load i32, ptr %44, align 4, !tbaa !11
  %1386 = zext i32 %1385 to i64
  %1387 = getelementptr inbounds i8, ptr %1384, i64 %1386
  store ptr %1387, ptr %109, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %110) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %111) #8
  %1388 = load i32, ptr %106, align 4, !tbaa !11
  %1389 = zext i32 %1388 to i64
  store i64 %1389, ptr %111, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %112) #8
  %1390 = load ptr, ptr %30, align 8, !tbaa !5
  %1391 = load i32, ptr %36, align 4, !tbaa !11
  %1392 = zext i32 %1391 to i64
  %1393 = getelementptr inbounds i32, ptr %1390, i64 %1392
  %1394 = load i32, ptr %1393, align 4, !tbaa !11
  %1395 = zext i32 %1394 to i64
  store i64 %1395, ptr %112, align 8, !tbaa !9
  %1396 = load i32, ptr %44, align 4, !tbaa !11
  %1397 = zext i32 %1396 to i64
  %1398 = load i64, ptr %42, align 8, !tbaa !9
  %1399 = icmp uge i64 %1397, %1398
  br i1 %1399, label %1400, label %1401

1400:                                             ; preds = %1383
  call void @chk_report_abort(ptr noundef @.str.52)
  br label %1401

1401:                                             ; preds = %1400, %1383
  %1402 = load i32, ptr %51, align 4, !tbaa !11
  %1403 = load ptr, ptr %30, align 8, !tbaa !5
  %1404 = load i32, ptr %36, align 4, !tbaa !11
  %1405 = zext i32 %1404 to i64
  %1406 = getelementptr inbounds i32, ptr %1403, i64 %1405
  %1407 = load i32, ptr %1406, align 4, !tbaa !11
  %1408 = icmp ult i32 %1402, %1407
  br i1 %1408, label %1409, label %1418

1409:                                             ; preds = %1401
  %1410 = load ptr, ptr %50, align 8, !tbaa !5
  call void @free(ptr noundef %1410) #8
  %1411 = load ptr, ptr %30, align 8, !tbaa !5
  %1412 = load i32, ptr %36, align 4, !tbaa !11
  %1413 = zext i32 %1412 to i64
  %1414 = getelementptr inbounds i32, ptr %1411, i64 %1413
  %1415 = load i32, ptr %1414, align 4, !tbaa !11
  store i32 %1415, ptr %51, align 4, !tbaa !11
  %1416 = zext i32 %1415 to i64
  %1417 = call noalias ptr @malloc(i64 noundef %1416) #10
  store ptr %1417, ptr %50, align 8, !tbaa !5
  br label %1418

1418:                                             ; preds = %1409, %1401
  %1419 = load ptr, ptr %50, align 8, !tbaa !5
  store ptr %1419, ptr %110, align 8, !tbaa !5
  %1420 = load ptr, ptr %110, align 8, !tbaa !5
  %1421 = load ptr, ptr %30, align 8, !tbaa !5
  %1422 = load i32, ptr %36, align 4, !tbaa !11
  %1423 = zext i32 %1422 to i64
  %1424 = getelementptr inbounds i32, ptr %1421, i64 %1423
  %1425 = load i32, ptr %1424, align 4, !tbaa !11
  %1426 = zext i32 %1425 to i64
  %1427 = load ptr, ptr %12, align 8, !tbaa !5
  %1428 = getelementptr inbounds %struct.fstReaderContext, ptr %1427, i32 0, i32 0
  %1429 = load ptr, ptr %1428, align 8, !tbaa !17
  %1430 = call i64 @fstFread(ptr noundef %1420, i64 noundef %1426, i64 noundef 1, ptr noundef %1429)
  %1431 = load i32, ptr %49, align 4, !tbaa !11
  switch i32 %1431, label %1455 [
    i32 52, label %1432
    i32 70, label %1447
  ]

1432:                                             ; preds = %1418
  %1433 = load i64, ptr %111, align 8, !tbaa !9
  %1434 = load ptr, ptr %110, align 8, !tbaa !5
  %1435 = load ptr, ptr %109, align 8, !tbaa !5
  %1436 = load i64, ptr %112, align 8, !tbaa !9
  %1437 = trunc i64 %1436 to i32
  %1438 = load i64, ptr %111, align 8, !tbaa !9
  %1439 = trunc i64 %1438 to i32
  %1440 = load i64, ptr %111, align 8, !tbaa !9
  %1441 = trunc i64 %1440 to i32
  %1442 = call i32 @LZ4_decompress_safe_partial(ptr noundef %1434, ptr noundef %1435, i32 noundef %1437, i32 noundef %1439, i32 noundef %1441)
  %1443 = sext i32 %1442 to i64
  %1444 = icmp eq i64 %1433, %1443
  %1445 = zext i1 %1444 to i64
  %1446 = select i1 %1444, i32 0, i32 -3
  store i32 %1446, ptr %105, align 4, !tbaa !11
  br label %1460

1447:                                             ; preds = %1418
  %1448 = load ptr, ptr %110, align 8, !tbaa !5
  %1449 = load i64, ptr %112, align 8, !tbaa !9
  %1450 = trunc i64 %1449 to i32
  %1451 = load ptr, ptr %109, align 8, !tbaa !5
  %1452 = load i64, ptr %111, align 8, !tbaa !9
  %1453 = trunc i64 %1452 to i32
  %1454 = call i32 @fastlz_decompress(ptr noundef %1448, i32 noundef %1450, ptr noundef %1451, i32 noundef %1453)
  br label %1460

1455:                                             ; preds = %1418
  %1456 = load ptr, ptr %109, align 8, !tbaa !5
  %1457 = load ptr, ptr %110, align 8, !tbaa !5
  %1458 = load i64, ptr %112, align 8, !tbaa !9
  %1459 = call i32 @uncompress(ptr noundef %1456, ptr noundef %111, ptr noundef %1457, i64 noundef %1458)
  store i32 %1459, ptr %105, align 4, !tbaa !11
  br label %1460

1460:                                             ; preds = %1455, %1447, %1432
  %1461 = load i32, ptr %44, align 4, !tbaa !11
  %1462 = load ptr, ptr %46, align 8, !tbaa !5
  %1463 = load i32, ptr %36, align 4, !tbaa !11
  %1464 = zext i32 %1463 to i64
  %1465 = getelementptr inbounds i32, ptr %1462, i64 %1464
  store i32 %1461, ptr %1465, align 4, !tbaa !11
  %1466 = load i32, ptr %106, align 4, !tbaa !11
  %1467 = load ptr, ptr %47, align 8, !tbaa !5
  %1468 = load i32, ptr %36, align 4, !tbaa !11
  %1469 = zext i32 %1468 to i64
  %1470 = getelementptr inbounds i32, ptr %1467, i64 %1469
  store i32 %1466, ptr %1470, align 4, !tbaa !11
  %1471 = load i32, ptr %106, align 4, !tbaa !11
  %1472 = load i32, ptr %44, align 4, !tbaa !11
  %1473 = add i32 %1472, %1471
  store i32 %1473, ptr %44, align 4, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 8, ptr %112) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %111) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %110) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %109) #8
  br label %1512

1474:                                             ; preds = %1364
  call void @llvm.lifetime.start.p0(i64 4, ptr %113) #8
  %1475 = load ptr, ptr %30, align 8, !tbaa !5
  %1476 = load i32, ptr %36, align 4, !tbaa !11
  %1477 = zext i32 %1476 to i64
  %1478 = getelementptr inbounds i32, ptr %1475, i64 %1477
  %1479 = load i32, ptr %1478, align 4, !tbaa !11
  %1480 = load i32, ptr %107, align 4, !tbaa !11
  %1481 = sub i32 %1479, %1480
  store i32 %1481, ptr %113, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %114) #8
  %1482 = load ptr, ptr %43, align 8, !tbaa !5
  %1483 = load i32, ptr %44, align 4, !tbaa !11
  %1484 = zext i32 %1483 to i64
  %1485 = getelementptr inbounds i8, ptr %1482, i64 %1484
  store ptr %1485, ptr %114, align 8, !tbaa !5
  %1486 = load i32, ptr %44, align 4, !tbaa !11
  %1487 = zext i32 %1486 to i64
  %1488 = load i64, ptr %42, align 8, !tbaa !9
  %1489 = icmp uge i64 %1487, %1488
  br i1 %1489, label %1490, label %1491

1490:                                             ; preds = %1474
  call void @chk_report_abort(ptr noundef @.str.52)
  br label %1491

1491:                                             ; preds = %1490, %1474
  %1492 = load ptr, ptr %114, align 8, !tbaa !5
  %1493 = load i32, ptr %113, align 4, !tbaa !11
  %1494 = sext i32 %1493 to i64
  %1495 = load ptr, ptr %12, align 8, !tbaa !5
  %1496 = getelementptr inbounds %struct.fstReaderContext, ptr %1495, i32 0, i32 0
  %1497 = load ptr, ptr %1496, align 8, !tbaa !17
  %1498 = call i64 @fstFread(ptr noundef %1492, i64 noundef %1494, i64 noundef 1, ptr noundef %1497)
  %1499 = load i32, ptr %44, align 4, !tbaa !11
  %1500 = load ptr, ptr %46, align 8, !tbaa !5
  %1501 = load i32, ptr %36, align 4, !tbaa !11
  %1502 = zext i32 %1501 to i64
  %1503 = getelementptr inbounds i32, ptr %1500, i64 %1502
  store i32 %1499, ptr %1503, align 4, !tbaa !11
  %1504 = load i32, ptr %113, align 4, !tbaa !11
  %1505 = load ptr, ptr %47, align 8, !tbaa !5
  %1506 = load i32, ptr %36, align 4, !tbaa !11
  %1507 = zext i32 %1506 to i64
  %1508 = getelementptr inbounds i32, ptr %1505, i64 %1507
  store i32 %1504, ptr %1508, align 4, !tbaa !11
  %1509 = load i32, ptr %113, align 4, !tbaa !11
  %1510 = load i32, ptr %44, align 4, !tbaa !11
  %1511 = add i32 %1510, %1509
  store i32 %1511, ptr %44, align 4, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 8, ptr %114) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %113) #8
  br label %1512

1512:                                             ; preds = %1491, %1460
  %1513 = load i32, ptr %105, align 4, !tbaa !11
  %1514 = icmp ne i32 %1513, 0
  br i1 %1514, label %1515, label %1521

1515:                                             ; preds = %1512
  %1516 = load ptr, ptr @stderr, align 8, !tbaa !5
  %1517 = load i32, ptr %36, align 4, !tbaa !11
  %1518 = load i32, ptr %106, align 4, !tbaa !11
  %1519 = load i32, ptr %105, align 4, !tbaa !11
  %1520 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1516, ptr noundef @.str.53, i32 noundef %1517, i32 noundef %1518, i32 noundef %1519) #8
  call void @exit(i32 noundef 255) #11
  unreachable

1521:                                             ; preds = %1512
  %1522 = load ptr, ptr %12, align 8, !tbaa !5
  %1523 = getelementptr inbounds %struct.fstReaderContext, ptr %1522, i32 0, i32 10
  %1524 = load ptr, ptr %1523, align 8, !tbaa !27
  %1525 = load i32, ptr %36, align 4, !tbaa !11
  %1526 = zext i32 %1525 to i64
  %1527 = getelementptr inbounds i32, ptr %1524, i64 %1526
  %1528 = load i32, ptr %1527, align 4, !tbaa !11
  %1529 = icmp eq i32 %1528, 1
  br i1 %1529, label %1530, label %1546

1530:                                             ; preds = %1521
  call void @llvm.lifetime.start.p0(i64 4, ptr %115) #8
  %1531 = load ptr, ptr %43, align 8, !tbaa !5
  %1532 = load ptr, ptr %46, align 8, !tbaa !5
  %1533 = load i32, ptr %36, align 4, !tbaa !11
  %1534 = zext i32 %1533 to i64
  %1535 = getelementptr inbounds i32, ptr %1532, i64 %1534
  %1536 = load i32, ptr %1535, align 4, !tbaa !11
  %1537 = zext i32 %1536 to i64
  %1538 = getelementptr inbounds i8, ptr %1531, i64 %1537
  %1539 = call i32 @fstGetVarint32NoSkip(ptr noundef %1538)
  store i32 %1539, ptr %115, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %116) #8
  %1540 = load i32, ptr %115, align 4, !tbaa !11
  %1541 = and i32 %1540, 1
  %1542 = shl i32 2, %1541
  store i32 %1542, ptr %116, align 4, !tbaa !11
  %1543 = load i32, ptr %115, align 4, !tbaa !11
  %1544 = load i32, ptr %116, align 4, !tbaa !11
  %1545 = lshr i32 %1543, %1544
  store i32 %1545, ptr %108, align 4, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 4, ptr %116) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %115) #8
  br label %1558

1546:                                             ; preds = %1521
  call void @llvm.lifetime.start.p0(i64 4, ptr %117) #8
  %1547 = load ptr, ptr %43, align 8, !tbaa !5
  %1548 = load ptr, ptr %46, align 8, !tbaa !5
  %1549 = load i32, ptr %36, align 4, !tbaa !11
  %1550 = zext i32 %1549 to i64
  %1551 = getelementptr inbounds i32, ptr %1548, i64 %1550
  %1552 = load i32, ptr %1551, align 4, !tbaa !11
  %1553 = zext i32 %1552 to i64
  %1554 = getelementptr inbounds i8, ptr %1547, i64 %1553
  %1555 = call i32 @fstGetVarint32NoSkip(ptr noundef %1554)
  store i32 %1555, ptr %117, align 4, !tbaa !11
  %1556 = load i32, ptr %117, align 4, !tbaa !11
  %1557 = lshr i32 %1556, 1
  store i32 %1557, ptr %108, align 4, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 4, ptr %117) #8
  br label %1558

1558:                                             ; preds = %1546, %1530
  %1559 = load i32, ptr %108, align 4, !tbaa !11
  %1560 = load i32, ptr %55, align 4, !tbaa !11
  %1561 = icmp uge i32 %1559, %1560
  br i1 %1561, label %1562, label %1563

1562:                                             ; preds = %1558
  call void @chk_report_abort(ptr noundef @.str.54)
  br label %1563

1563:                                             ; preds = %1562, %1558
  %1564 = load ptr, ptr %54, align 8, !tbaa !5
  %1565 = load i32, ptr %108, align 4, !tbaa !11
  %1566 = zext i32 %1565 to i64
  %1567 = getelementptr inbounds i32, ptr %1564, i64 %1566
  %1568 = load i32, ptr %1567, align 4, !tbaa !11
  %1569 = load ptr, ptr %45, align 8, !tbaa !5
  %1570 = load i32, ptr %36, align 4, !tbaa !11
  %1571 = zext i32 %1570 to i64
  %1572 = getelementptr inbounds i32, ptr %1569, i64 %1571
  store i32 %1568, ptr %1572, align 4, !tbaa !11
  %1573 = load i32, ptr %36, align 4, !tbaa !11
  %1574 = add i32 %1573, 1
  %1575 = load ptr, ptr %54, align 8, !tbaa !5
  %1576 = load i32, ptr %108, align 4, !tbaa !11
  %1577 = zext i32 %1576 to i64
  %1578 = getelementptr inbounds i32, ptr %1575, i64 %1577
  store i32 %1574, ptr %1578, align 4, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 4, ptr %108) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %107) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %106) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %105) #8
  br label %1579

1579:                                             ; preds = %1563, %1347
  call void @llvm.lifetime.end.p0(i64 4, ptr %104) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %103) #8
  br label %1580

1580:                                             ; preds = %1579, %1340
  br label %1581

1581:                                             ; preds = %1580
  %1582 = load i32, ptr %36, align 4, !tbaa !11
  %1583 = add i32 %1582, 1
  store i32 %1583, ptr %36, align 4, !tbaa !11
  br label %1336, !llvm.loop !42

1584:                                             ; preds = %1336
  %1585 = load ptr, ptr %50, align 8, !tbaa !5
  call void @free(ptr noundef %1585) #8
  store i32 0, ptr %36, align 4, !tbaa !11
  br label %1586

1586:                                             ; preds = %2520, %1584
  %1587 = load i32, ptr %36, align 4, !tbaa !11
  %1588 = zext i32 %1587 to i64
  %1589 = load i64, ptr %15, align 8, !tbaa !9
  %1590 = icmp ult i64 %1588, %1589
  br i1 %1590, label %1591, label %2523

1591:                                             ; preds = %1586
  call void @llvm.lifetime.start.p0(i64 4, ptr %118) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %119) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %120) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %121) #8
  %1592 = load ptr, ptr %11, align 8, !tbaa !5
  %1593 = icmp ne ptr %1592, null
  br i1 %1593, label %1594, label %1703

1594:                                             ; preds = %1591
  call void @llvm.lifetime.start.p0(i64 32, ptr %122) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %123) #8
  %1595 = load ptr, ptr %14, align 8, !tbaa !5
  %1596 = load i32, ptr %36, align 4, !tbaa !11
  %1597 = zext i32 %1596 to i64
  %1598 = getelementptr inbounds i64, ptr %1595, i64 %1597
  %1599 = load i64, ptr %1598, align 8, !tbaa !9
  %1600 = load i64, ptr %13, align 8, !tbaa !9
  %1601 = icmp ne i64 %1599, %1600
  br i1 %1601, label %1602, label %1699

1602:                                             ; preds = %1594
  %1603 = load ptr, ptr %12, align 8, !tbaa !5
  %1604 = getelementptr inbounds %struct.fstReaderContext, ptr %1603, i32 0, i32 17
  %1605 = load i8, ptr %1604, align 2
  %1606 = lshr i8 %1605, 7
  %1607 = zext i8 %1606 to i32
  %1608 = icmp ne i32 %1607, 0
  br i1 %1608, label %1609, label %1621

1609:                                             ; preds = %1602
  %1610 = load ptr, ptr %14, align 8, !tbaa !5
  %1611 = load i32, ptr %36, align 4, !tbaa !11
  %1612 = zext i32 %1611 to i64
  %1613 = getelementptr inbounds i64, ptr %1610, i64 %1612
  %1614 = load i64, ptr %1613, align 8, !tbaa !9
  %1615 = load ptr, ptr %12, align 8, !tbaa !5
  %1616 = getelementptr inbounds %struct.fstReaderContext, ptr %1615, i32 0, i32 28
  %1617 = load i64, ptr %1616, align 8, !tbaa !19
  %1618 = icmp ugt i64 %1614, %1617
  br i1 %1618, label %1619, label %1620

1619:                                             ; preds = %1609
  store i32 37, ptr %53, align 4
  br label %1700

1620:                                             ; preds = %1609
  br label %1621

1621:                                             ; preds = %1620, %1602
  %1622 = load i32, ptr %52, align 4, !tbaa !11
  %1623 = icmp eq i32 %1622, 1
  br i1 %1623, label %1624, label %1630

1624:                                             ; preds = %1621
  %1625 = getelementptr inbounds [32 x i8], ptr %122, i64 0, i64 0
  %1626 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %1625, i64 noundef 32, ptr noundef @.str.39) #8
  store i32 %1626, ptr %123, align 4, !tbaa !11
  %1627 = load ptr, ptr %12, align 8, !tbaa !5
  %1628 = getelementptr inbounds [32 x i8], ptr %122, i64 0, i64 0
  %1629 = load i32, ptr %123, align 4, !tbaa !11
  call void @fstWritex(ptr noundef %1627, ptr noundef %1628, i32 noundef %1629)
  store i32 2, ptr %52, align 4, !tbaa !11
  br label %1630

1630:                                             ; preds = %1624, %1621
  %1631 = getelementptr inbounds [32 x i8], ptr %122, i64 0, i64 0
  %1632 = load ptr, ptr %14, align 8, !tbaa !5
  %1633 = load i32, ptr %36, align 4, !tbaa !11
  %1634 = zext i32 %1633 to i64
  %1635 = getelementptr inbounds i64, ptr %1632, i64 %1634
  %1636 = load i64, ptr %1635, align 8, !tbaa !9
  %1637 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %1631, i64 noundef 32, ptr noundef @.str.40, i64 noundef %1636) #8
  store i32 %1637, ptr %123, align 4, !tbaa !11
  %1638 = load ptr, ptr %12, align 8, !tbaa !5
  %1639 = getelementptr inbounds [32 x i8], ptr %122, i64 0, i64 0
  %1640 = load i32, ptr %123, align 4, !tbaa !11
  call void @fstWritex(ptr noundef %1638, ptr noundef %1639, i32 noundef %1640)
  %1641 = load i32, ptr %52, align 4, !tbaa !11
  %1642 = icmp ne i32 %1641, 0
  br i1 %1642, label %1649, label %1643

1643:                                             ; preds = %1630
  %1644 = getelementptr inbounds [32 x i8], ptr %122, i64 0, i64 0
  %1645 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %1644, i64 noundef 32, ptr noundef @.str.41) #8
  store i32 %1645, ptr %123, align 4, !tbaa !11
  %1646 = load ptr, ptr %12, align 8, !tbaa !5
  %1647 = getelementptr inbounds [32 x i8], ptr %122, i64 0, i64 0
  %1648 = load i32, ptr %123, align 4, !tbaa !11
  call void @fstWritex(ptr noundef %1646, ptr noundef %1647, i32 noundef %1648)
  store i32 1, ptr %52, align 4, !tbaa !11
  br label %1649

1649:                                             ; preds = %1643, %1630
  %1650 = load ptr, ptr %12, align 8, !tbaa !5
  %1651 = getelementptr inbounds %struct.fstReaderContext, ptr %1650, i32 0, i32 24
  %1652 = load i32, ptr %1651, align 8, !tbaa !22
  %1653 = icmp ne i32 %1652, 0
  br i1 %1653, label %1654, label %1693

1654:                                             ; preds = %1649
  %1655 = load i32, ptr %48, align 4, !tbaa !11
  %1656 = load ptr, ptr %12, align 8, !tbaa !5
  %1657 = getelementptr inbounds %struct.fstReaderContext, ptr %1656, i32 0, i32 24
  %1658 = load i32, ptr %1657, align 8, !tbaa !22
  %1659 = icmp ne i32 %1655, %1658
  br i1 %1659, label %1660, label %1693

1660:                                             ; preds = %1654
  %1661 = load ptr, ptr %14, align 8, !tbaa !5
  %1662 = load i32, ptr %36, align 4, !tbaa !11
  %1663 = zext i32 %1662 to i64
  %1664 = getelementptr inbounds i64, ptr %1661, i64 %1663
  %1665 = load i64, ptr %1664, align 8, !tbaa !9
  %1666 = load ptr, ptr %12, align 8, !tbaa !5
  %1667 = getelementptr inbounds %struct.fstReaderContext, ptr %1666, i32 0, i32 25
  %1668 = load ptr, ptr %1667, align 8, !tbaa !23
  %1669 = load i32, ptr %48, align 4, !tbaa !11
  %1670 = zext i32 %1669 to i64
  %1671 = getelementptr inbounds i64, ptr %1668, i64 %1670
  %1672 = load i64, ptr %1671, align 8, !tbaa !9
  %1673 = icmp eq i64 %1665, %1672
  br i1 %1673, label %1674, label %1692

1674:                                             ; preds = %1660
  %1675 = getelementptr inbounds [32 x i8], ptr %122, i64 0, i64 0
  %1676 = load ptr, ptr %12, align 8, !tbaa !5
  %1677 = getelementptr inbounds %struct.fstReaderContext, ptr %1676, i32 0, i32 26
  %1678 = load ptr, ptr %1677, align 8, !tbaa !24
  %1679 = load i32, ptr %48, align 4, !tbaa !11
  %1680 = add i32 %1679, 1
  store i32 %1680, ptr %48, align 4, !tbaa !11
  %1681 = zext i32 %1679 to i64
  %1682 = getelementptr inbounds i8, ptr %1678, i64 %1681
  %1683 = load i8, ptr %1682, align 1, !tbaa !25
  %1684 = zext i8 %1683 to i32
  %1685 = icmp ne i32 %1684, 0
  %1686 = zext i1 %1685 to i64
  %1687 = select i1 %1685, ptr @.str.43, ptr @.str.44
  %1688 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %1675, i64 noundef 32, ptr noundef @.str.42, ptr noundef %1687) #8
  store i32 %1688, ptr %123, align 4, !tbaa !11
  %1689 = load ptr, ptr %12, align 8, !tbaa !5
  %1690 = getelementptr inbounds [32 x i8], ptr %122, i64 0, i64 0
  %1691 = load i32, ptr %123, align 4, !tbaa !11
  call void @fstWritex(ptr noundef %1689, ptr noundef %1690, i32 noundef %1691)
  br label %1692

1692:                                             ; preds = %1674, %1660
  br label %1693

1693:                                             ; preds = %1692, %1654, %1649
  %1694 = load ptr, ptr %14, align 8, !tbaa !5
  %1695 = load i32, ptr %36, align 4, !tbaa !11
  %1696 = zext i32 %1695 to i64
  %1697 = getelementptr inbounds i64, ptr %1694, i64 %1696
  %1698 = load i64, ptr %1697, align 8, !tbaa !9
  store i64 %1698, ptr %13, align 8, !tbaa !9
  br label %1699

1699:                                             ; preds = %1693, %1594
  store i32 0, ptr %53, align 4
  br label %1700

1700:                                             ; preds = %1699, %1619
  call void @llvm.lifetime.end.p0(i64 4, ptr %123) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %122) #8
  %1701 = load i32, ptr %53, align 4
  switch i32 %1701, label %2517 [
    i32 0, label %1702
  ]

1702:                                             ; preds = %1700
  br label %1703

1703:                                             ; preds = %1702, %1591
  br label %1704

1704:                                             ; preds = %2515, %1703
  %1705 = load ptr, ptr %54, align 8, !tbaa !5
  %1706 = load i32, ptr %36, align 4, !tbaa !11
  %1707 = zext i32 %1706 to i64
  %1708 = getelementptr inbounds i32, ptr %1705, i64 %1707
  %1709 = load i32, ptr %1708, align 4, !tbaa !11
  %1710 = icmp ne i32 %1709, 0
  br i1 %1710, label %1711, label %2516

1711:                                             ; preds = %1704
  %1712 = load ptr, ptr %54, align 8, !tbaa !5
  %1713 = load i32, ptr %36, align 4, !tbaa !11
  %1714 = zext i32 %1713 to i64
  %1715 = getelementptr inbounds i32, ptr %1712, i64 %1714
  %1716 = load i32, ptr %1715, align 4, !tbaa !11
  %1717 = sub i32 %1716, 1
  store i32 %1717, ptr %34, align 4, !tbaa !11
  %1718 = load ptr, ptr %43, align 8, !tbaa !5
  %1719 = load ptr, ptr %46, align 8, !tbaa !5
  %1720 = load i32, ptr %34, align 4, !tbaa !11
  %1721 = zext i32 %1720 to i64
  %1722 = getelementptr inbounds i32, ptr %1719, i64 %1721
  %1723 = load i32, ptr %1722, align 4, !tbaa !11
  %1724 = zext i32 %1723 to i64
  %1725 = getelementptr inbounds i8, ptr %1718, i64 %1724
  %1726 = call i32 @fstGetVarint32(ptr noundef %1725, ptr noundef %119)
  store i32 %1726, ptr %121, align 4, !tbaa !11
  %1727 = load ptr, ptr %12, align 8, !tbaa !5
  %1728 = getelementptr inbounds %struct.fstReaderContext, ptr %1727, i32 0, i32 10
  %1729 = load ptr, ptr %1728, align 8, !tbaa !27
  %1730 = load i32, ptr %34, align 4, !tbaa !11
  %1731 = zext i32 %1730 to i64
  %1732 = getelementptr inbounds i32, ptr %1729, i64 %1731
  %1733 = load i32, ptr %1732, align 4, !tbaa !11
  %1734 = icmp ule i32 %1733, 1
  br i1 %1734, label %1735, label %2050

1735:                                             ; preds = %1711
  %1736 = load ptr, ptr %12, align 8, !tbaa !5
  %1737 = getelementptr inbounds %struct.fstReaderContext, ptr %1736, i32 0, i32 10
  %1738 = load ptr, ptr %1737, align 8, !tbaa !27
  %1739 = load i32, ptr %34, align 4, !tbaa !11
  %1740 = zext i32 %1739 to i64
  %1741 = getelementptr inbounds i32, ptr %1738, i64 %1740
  %1742 = load i32, ptr %1741, align 4, !tbaa !11
  %1743 = icmp eq i32 %1742, 1
  br i1 %1743, label %1744, label %1883

1744:                                             ; preds = %1735
  call void @llvm.lifetime.start.p0(i64 1, ptr %124) #8
  %1745 = load i32, ptr %121, align 4, !tbaa !11
  %1746 = and i32 %1745, 1
  %1747 = icmp ne i32 %1746, 0
  br i1 %1747, label %1754, label %1748

1748:                                             ; preds = %1744
  %1749 = load i32, ptr %121, align 4, !tbaa !11
  %1750 = lshr i32 %1749, 1
  %1751 = and i32 %1750, 1
  %1752 = or i32 %1751, 48
  %1753 = trunc i32 %1752 to i8
  store i8 %1753, ptr %124, align 1, !tbaa !25
  br label %1761

1754:                                             ; preds = %1744
  %1755 = load i32, ptr %121, align 4, !tbaa !11
  %1756 = lshr i32 %1755, 1
  %1757 = and i32 %1756, 7
  %1758 = zext i32 %1757 to i64
  %1759 = getelementptr inbounds [9 x i8], ptr @.str.55, i64 0, i64 %1758
  %1760 = load i8, ptr %1759, align 1, !tbaa !25
  store i8 %1760, ptr %124, align 1, !tbaa !25
  br label %1761

1761:                                             ; preds = %1754, %1748
  %1762 = load ptr, ptr %8, align 8, !tbaa !5
  %1763 = icmp ne ptr %1762, null
  br i1 %1763, label %1764, label %1786

1764:                                             ; preds = %1761
  %1765 = load i8, ptr %124, align 1, !tbaa !25
  %1766 = load ptr, ptr %12, align 8, !tbaa !5
  %1767 = getelementptr inbounds %struct.fstReaderContext, ptr %1766, i32 0, i32 14
  %1768 = load ptr, ptr %1767, align 8, !tbaa !28
  %1769 = getelementptr inbounds i8, ptr %1768, i64 0
  store i8 %1765, ptr %1769, align 1, !tbaa !25
  %1770 = load ptr, ptr %12, align 8, !tbaa !5
  %1771 = getelementptr inbounds %struct.fstReaderContext, ptr %1770, i32 0, i32 14
  %1772 = load ptr, ptr %1771, align 8, !tbaa !28
  %1773 = getelementptr inbounds i8, ptr %1772, i64 1
  store i8 0, ptr %1773, align 1, !tbaa !25
  %1774 = load ptr, ptr %8, align 8, !tbaa !5
  %1775 = load ptr, ptr %10, align 8, !tbaa !5
  %1776 = load ptr, ptr %14, align 8, !tbaa !5
  %1777 = load i32, ptr %36, align 4, !tbaa !11
  %1778 = zext i32 %1777 to i64
  %1779 = getelementptr inbounds i64, ptr %1776, i64 %1778
  %1780 = load i64, ptr %1779, align 8, !tbaa !9
  %1781 = load i32, ptr %34, align 4, !tbaa !11
  %1782 = add i32 %1781, 1
  %1783 = load ptr, ptr %12, align 8, !tbaa !5
  %1784 = getelementptr inbounds %struct.fstReaderContext, ptr %1783, i32 0, i32 14
  %1785 = load ptr, ptr %1784, align 8, !tbaa !28
  call void %1774(ptr noundef %1775, i64 noundef %1780, i32 noundef %1782, ptr noundef %1785)
  br label %1806

1786:                                             ; preds = %1761
  %1787 = load ptr, ptr %11, align 8, !tbaa !5
  %1788 = icmp ne ptr %1787, null
  br i1 %1788, label %1789, label %1805

1789:                                             ; preds = %1786
  call void @llvm.lifetime.start.p0(i64 16, ptr %125) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %126) #8
  %1790 = getelementptr inbounds [16 x i8], ptr %125, i64 0, i64 0
  %1791 = getelementptr inbounds i8, ptr %1790, i64 1
  %1792 = load i32, ptr %34, align 4, !tbaa !11
  %1793 = add i32 %1792, 1
  %1794 = call i32 @fstVcdIDForFwrite(ptr noundef %1791, i32 noundef %1793)
  store i32 %1794, ptr %126, align 4, !tbaa !11
  %1795 = load i8, ptr %124, align 1, !tbaa !25
  %1796 = getelementptr inbounds [16 x i8], ptr %125, i64 0, i64 0
  store i8 %1795, ptr %1796, align 16, !tbaa !25
  %1797 = load i32, ptr %126, align 4, !tbaa !11
  %1798 = add nsw i32 %1797, 1
  %1799 = sext i32 %1798 to i64
  %1800 = getelementptr inbounds [16 x i8], ptr %125, i64 0, i64 %1799
  store i8 10, ptr %1800, align 1, !tbaa !25
  %1801 = load ptr, ptr %12, align 8, !tbaa !5
  %1802 = getelementptr inbounds [16 x i8], ptr %125, i64 0, i64 0
  %1803 = load i32, ptr %126, align 4, !tbaa !11
  %1804 = add nsw i32 %1803, 2
  call void @fstWritex(ptr noundef %1801, ptr noundef %1802, i32 noundef %1804)
  call void @llvm.lifetime.end.p0(i64 4, ptr %126) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %125) #8
  br label %1805

1805:                                             ; preds = %1789, %1786
  br label %1806

1806:                                             ; preds = %1805, %1764
  %1807 = load i32, ptr %119, align 4, !tbaa !11
  %1808 = load ptr, ptr %46, align 8, !tbaa !5
  %1809 = load i32, ptr %34, align 4, !tbaa !11
  %1810 = zext i32 %1809 to i64
  %1811 = getelementptr inbounds i32, ptr %1808, i64 %1810
  %1812 = load i32, ptr %1811, align 4, !tbaa !11
  %1813 = add i32 %1812, %1807
  store i32 %1813, ptr %1811, align 4, !tbaa !11
  %1814 = load i32, ptr %119, align 4, !tbaa !11
  %1815 = load ptr, ptr %47, align 8, !tbaa !5
  %1816 = load i32, ptr %34, align 4, !tbaa !11
  %1817 = zext i32 %1816 to i64
  %1818 = getelementptr inbounds i32, ptr %1815, i64 %1817
  %1819 = load i32, ptr %1818, align 4, !tbaa !11
  %1820 = sub i32 %1819, %1814
  store i32 %1820, ptr %1818, align 4, !tbaa !11
  %1821 = load ptr, ptr %45, align 8, !tbaa !5
  %1822 = load i32, ptr %34, align 4, !tbaa !11
  %1823 = zext i32 %1822 to i64
  %1824 = getelementptr inbounds i32, ptr %1821, i64 %1823
  %1825 = load i32, ptr %1824, align 4, !tbaa !11
  %1826 = load ptr, ptr %54, align 8, !tbaa !5
  %1827 = load i32, ptr %36, align 4, !tbaa !11
  %1828 = zext i32 %1827 to i64
  %1829 = getelementptr inbounds i32, ptr %1826, i64 %1828
  store i32 %1825, ptr %1829, align 4, !tbaa !11
  %1830 = load ptr, ptr %45, align 8, !tbaa !5
  %1831 = load i32, ptr %34, align 4, !tbaa !11
  %1832 = zext i32 %1831 to i64
  %1833 = getelementptr inbounds i32, ptr %1830, i64 %1832
  store i32 0, ptr %1833, align 4, !tbaa !11
  %1834 = load ptr, ptr %47, align 8, !tbaa !5
  %1835 = load i32, ptr %34, align 4, !tbaa !11
  %1836 = zext i32 %1835 to i64
  %1837 = getelementptr inbounds i32, ptr %1834, i64 %1836
  %1838 = load i32, ptr %1837, align 4, !tbaa !11
  %1839 = icmp ne i32 %1838, 0
  br i1 %1839, label %1840, label %1882

1840:                                             ; preds = %1806
  call void @llvm.lifetime.start.p0(i64 4, ptr %127) #8
  %1841 = load ptr, ptr %43, align 8, !tbaa !5
  %1842 = load ptr, ptr %46, align 8, !tbaa !5
  %1843 = load i32, ptr %34, align 4, !tbaa !11
  %1844 = zext i32 %1843 to i64
  %1845 = getelementptr inbounds i32, ptr %1842, i64 %1844
  %1846 = load i32, ptr %1845, align 4, !tbaa !11
  %1847 = zext i32 %1846 to i64
  %1848 = getelementptr inbounds i8, ptr %1841, i64 %1847
  %1849 = call i32 @fstGetVarint32NoSkip(ptr noundef %1848)
  store i32 %1849, ptr %121, align 4, !tbaa !11
  %1850 = load i32, ptr %121, align 4, !tbaa !11
  %1851 = and i32 %1850, 1
  %1852 = shl i32 2, %1851
  store i32 %1852, ptr %127, align 4, !tbaa !11
  %1853 = load i32, ptr %121, align 4, !tbaa !11
  %1854 = load i32, ptr %127, align 4, !tbaa !11
  %1855 = lshr i32 %1853, %1854
  store i32 %1855, ptr %118, align 4, !tbaa !11
  %1856 = load i32, ptr %118, align 4, !tbaa !11
  %1857 = load i32, ptr %36, align 4, !tbaa !11
  %1858 = add i32 %1856, %1857
  %1859 = load i32, ptr %55, align 4, !tbaa !11
  %1860 = icmp uge i32 %1858, %1859
  br i1 %1860, label %1861, label %1862

1861:                                             ; preds = %1840
  call void @chk_report_abort(ptr noundef @.str.54)
  br label %1862

1862:                                             ; preds = %1861, %1840
  %1863 = load ptr, ptr %54, align 8, !tbaa !5
  %1864 = load i32, ptr %36, align 4, !tbaa !11
  %1865 = load i32, ptr %118, align 4, !tbaa !11
  %1866 = add i32 %1864, %1865
  %1867 = zext i32 %1866 to i64
  %1868 = getelementptr inbounds i32, ptr %1863, i64 %1867
  %1869 = load i32, ptr %1868, align 4, !tbaa !11
  %1870 = load ptr, ptr %45, align 8, !tbaa !5
  %1871 = load i32, ptr %34, align 4, !tbaa !11
  %1872 = zext i32 %1871 to i64
  %1873 = getelementptr inbounds i32, ptr %1870, i64 %1872
  store i32 %1869, ptr %1873, align 4, !tbaa !11
  %1874 = load i32, ptr %34, align 4, !tbaa !11
  %1875 = add i32 %1874, 1
  %1876 = load ptr, ptr %54, align 8, !tbaa !5
  %1877 = load i32, ptr %36, align 4, !tbaa !11
  %1878 = load i32, ptr %118, align 4, !tbaa !11
  %1879 = add i32 %1877, %1878
  %1880 = zext i32 %1879 to i64
  %1881 = getelementptr inbounds i32, ptr %1876, i64 %1880
  store i32 %1875, ptr %1881, align 4, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 4, ptr %127) #8
  br label %1882

1882:                                             ; preds = %1862, %1806
  call void @llvm.lifetime.end.p0(i64 1, ptr %124) #8
  br label %2049

1883:                                             ; preds = %1735
  call void @llvm.lifetime.start.p0(i64 8, ptr %128) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %129) #8
  %1884 = load ptr, ptr %43, align 8, !tbaa !5
  %1885 = load ptr, ptr %46, align 8, !tbaa !5
  %1886 = load i32, ptr %34, align 4, !tbaa !11
  %1887 = zext i32 %1886 to i64
  %1888 = getelementptr inbounds i32, ptr %1885, i64 %1887
  %1889 = load i32, ptr %1888, align 4, !tbaa !11
  %1890 = zext i32 %1889 to i64
  %1891 = getelementptr inbounds i8, ptr %1884, i64 %1890
  %1892 = call i32 @fstGetVarint32(ptr noundef %1891, ptr noundef %119)
  store i32 %1892, ptr %121, align 4, !tbaa !11
  %1893 = load ptr, ptr %43, align 8, !tbaa !5
  %1894 = load ptr, ptr %46, align 8, !tbaa !5
  %1895 = load i32, ptr %34, align 4, !tbaa !11
  %1896 = zext i32 %1895 to i64
  %1897 = getelementptr inbounds i32, ptr %1894, i64 %1896
  %1898 = load i32, ptr %1897, align 4, !tbaa !11
  %1899 = zext i32 %1898 to i64
  %1900 = getelementptr inbounds i8, ptr %1893, i64 %1899
  %1901 = load i32, ptr %119, align 4, !tbaa !11
  %1902 = sext i32 %1901 to i64
  %1903 = getelementptr inbounds i8, ptr %1900, i64 %1902
  %1904 = call i32 @fstGetVarint32(ptr noundef %1903, ptr noundef %120)
  store i32 %1904, ptr %129, align 4, !tbaa !11
  %1905 = load i32, ptr %120, align 4, !tbaa !11
  %1906 = load i32, ptr %119, align 4, !tbaa !11
  %1907 = add nsw i32 %1906, %1905
  store i32 %1907, ptr %119, align 4, !tbaa !11
  %1908 = load ptr, ptr %43, align 8, !tbaa !5
  %1909 = load ptr, ptr %46, align 8, !tbaa !5
  %1910 = load i32, ptr %34, align 4, !tbaa !11
  %1911 = zext i32 %1910 to i64
  %1912 = getelementptr inbounds i32, ptr %1909, i64 %1911
  %1913 = load i32, ptr %1912, align 4, !tbaa !11
  %1914 = zext i32 %1913 to i64
  %1915 = getelementptr inbounds i8, ptr %1908, i64 %1914
  %1916 = load i32, ptr %119, align 4, !tbaa !11
  %1917 = sext i32 %1916 to i64
  %1918 = getelementptr inbounds i8, ptr %1915, i64 %1917
  store ptr %1918, ptr %128, align 8, !tbaa !5
  %1919 = load i32, ptr %121, align 4, !tbaa !11
  %1920 = and i32 %1919, 1
  %1921 = icmp ne i32 %1920, 0
  br i1 %1921, label %1973, label %1922

1922:                                             ; preds = %1883
  %1923 = load ptr, ptr %9, align 8, !tbaa !5
  %1924 = icmp ne ptr %1923, null
  br i1 %1924, label %1925, label %1937

1925:                                             ; preds = %1922
  %1926 = load ptr, ptr %9, align 8, !tbaa !5
  %1927 = load ptr, ptr %10, align 8, !tbaa !5
  %1928 = load ptr, ptr %14, align 8, !tbaa !5
  %1929 = load i32, ptr %36, align 4, !tbaa !11
  %1930 = zext i32 %1929 to i64
  %1931 = getelementptr inbounds i64, ptr %1928, i64 %1930
  %1932 = load i64, ptr %1931, align 8, !tbaa !9
  %1933 = load i32, ptr %34, align 4, !tbaa !11
  %1934 = add i32 %1933, 1
  %1935 = load ptr, ptr %128, align 8, !tbaa !5
  %1936 = load i32, ptr %129, align 4, !tbaa !11
  call void %1926(ptr noundef %1927, i64 noundef %1932, i32 noundef %1934, ptr noundef %1935, i32 noundef %1936)
  br label %1972

1937:                                             ; preds = %1922
  %1938 = load ptr, ptr %11, align 8, !tbaa !5
  %1939 = icmp ne ptr %1938, null
  br i1 %1939, label %1940, label %1971

1940:                                             ; preds = %1937
  call void @llvm.lifetime.start.p0(i64 16, ptr %130) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %131) #8
  %1941 = getelementptr inbounds [16 x i8], ptr %130, i64 0, i64 0
  store i8 115, ptr %1941, align 16, !tbaa !25
  %1942 = load ptr, ptr %12, align 8, !tbaa !5
  %1943 = getelementptr inbounds [16 x i8], ptr %130, i64 0, i64 0
  call void @fstWritex(ptr noundef %1942, ptr noundef %1943, i32 noundef 1)
  %1944 = getelementptr inbounds [16 x i8], ptr %130, i64 0, i64 0
  %1945 = getelementptr inbounds i8, ptr %1944, i64 1
  %1946 = load i32, ptr %34, align 4, !tbaa !11
  %1947 = add i32 %1946, 1
  %1948 = call i32 @fstVcdIDForFwrite(ptr noundef %1945, i32 noundef %1947)
  store i32 %1948, ptr %131, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %132) #8
  %1949 = load i32, ptr %129, align 4, !tbaa !11
  %1950 = mul i32 %1949, 4
  %1951 = add i32 %1950, 1
  %1952 = zext i32 %1951 to i64
  %1953 = call noalias ptr @malloc(i64 noundef %1952) #10
  store ptr %1953, ptr %132, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %133) #8
  %1954 = load ptr, ptr %132, align 8, !tbaa !5
  %1955 = load ptr, ptr %128, align 8, !tbaa !5
  %1956 = load i32, ptr %129, align 4, !tbaa !11
  %1957 = call i32 @fstUtilityBinToEsc(ptr noundef %1954, ptr noundef %1955, i32 noundef %1956)
  store i32 %1957, ptr %133, align 4, !tbaa !11
  %1958 = load ptr, ptr %12, align 8, !tbaa !5
  %1959 = load ptr, ptr %132, align 8, !tbaa !5
  %1960 = load i32, ptr %133, align 4, !tbaa !11
  call void @fstWritex(ptr noundef %1958, ptr noundef %1959, i32 noundef %1960)
  %1961 = load ptr, ptr %132, align 8, !tbaa !5
  call void @free(ptr noundef %1961) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %133) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %132) #8
  %1962 = getelementptr inbounds [16 x i8], ptr %130, i64 0, i64 0
  store i8 32, ptr %1962, align 16, !tbaa !25
  %1963 = load i32, ptr %131, align 4, !tbaa !11
  %1964 = add nsw i32 %1963, 1
  %1965 = sext i32 %1964 to i64
  %1966 = getelementptr inbounds [16 x i8], ptr %130, i64 0, i64 %1965
  store i8 10, ptr %1966, align 1, !tbaa !25
  %1967 = load ptr, ptr %12, align 8, !tbaa !5
  %1968 = getelementptr inbounds [16 x i8], ptr %130, i64 0, i64 0
  %1969 = load i32, ptr %131, align 4, !tbaa !11
  %1970 = add nsw i32 %1969, 2
  call void @fstWritex(ptr noundef %1967, ptr noundef %1968, i32 noundef %1970)
  call void @llvm.lifetime.end.p0(i64 4, ptr %131) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %130) #8
  br label %1971

1971:                                             ; preds = %1940, %1937
  br label %1972

1972:                                             ; preds = %1971, %1925
  br label %1973

1973:                                             ; preds = %1972, %1883
  %1974 = load i32, ptr %129, align 4, !tbaa !11
  %1975 = load i32, ptr %119, align 4, !tbaa !11
  %1976 = add i32 %1975, %1974
  store i32 %1976, ptr %119, align 4, !tbaa !11
  %1977 = load i32, ptr %119, align 4, !tbaa !11
  %1978 = load ptr, ptr %46, align 8, !tbaa !5
  %1979 = load i32, ptr %34, align 4, !tbaa !11
  %1980 = zext i32 %1979 to i64
  %1981 = getelementptr inbounds i32, ptr %1978, i64 %1980
  %1982 = load i32, ptr %1981, align 4, !tbaa !11
  %1983 = add i32 %1982, %1977
  store i32 %1983, ptr %1981, align 4, !tbaa !11
  %1984 = load i32, ptr %119, align 4, !tbaa !11
  %1985 = load ptr, ptr %47, align 8, !tbaa !5
  %1986 = load i32, ptr %34, align 4, !tbaa !11
  %1987 = zext i32 %1986 to i64
  %1988 = getelementptr inbounds i32, ptr %1985, i64 %1987
  %1989 = load i32, ptr %1988, align 4, !tbaa !11
  %1990 = sub i32 %1989, %1984
  store i32 %1990, ptr %1988, align 4, !tbaa !11
  %1991 = load ptr, ptr %45, align 8, !tbaa !5
  %1992 = load i32, ptr %34, align 4, !tbaa !11
  %1993 = zext i32 %1992 to i64
  %1994 = getelementptr inbounds i32, ptr %1991, i64 %1993
  %1995 = load i32, ptr %1994, align 4, !tbaa !11
  %1996 = load ptr, ptr %54, align 8, !tbaa !5
  %1997 = load i32, ptr %36, align 4, !tbaa !11
  %1998 = zext i32 %1997 to i64
  %1999 = getelementptr inbounds i32, ptr %1996, i64 %1998
  store i32 %1995, ptr %1999, align 4, !tbaa !11
  %2000 = load ptr, ptr %45, align 8, !tbaa !5
  %2001 = load i32, ptr %34, align 4, !tbaa !11
  %2002 = zext i32 %2001 to i64
  %2003 = getelementptr inbounds i32, ptr %2000, i64 %2002
  store i32 0, ptr %2003, align 4, !tbaa !11
  %2004 = load ptr, ptr %47, align 8, !tbaa !5
  %2005 = load i32, ptr %34, align 4, !tbaa !11
  %2006 = zext i32 %2005 to i64
  %2007 = getelementptr inbounds i32, ptr %2004, i64 %2006
  %2008 = load i32, ptr %2007, align 4, !tbaa !11
  %2009 = icmp ne i32 %2008, 0
  br i1 %2009, label %2010, label %2048

2010:                                             ; preds = %1973
  %2011 = load ptr, ptr %43, align 8, !tbaa !5
  %2012 = load ptr, ptr %46, align 8, !tbaa !5
  %2013 = load i32, ptr %34, align 4, !tbaa !11
  %2014 = zext i32 %2013 to i64
  %2015 = getelementptr inbounds i32, ptr %2012, i64 %2014
  %2016 = load i32, ptr %2015, align 4, !tbaa !11
  %2017 = zext i32 %2016 to i64
  %2018 = getelementptr inbounds i8, ptr %2011, i64 %2017
  %2019 = call i32 @fstGetVarint32NoSkip(ptr noundef %2018)
  store i32 %2019, ptr %121, align 4, !tbaa !11
  %2020 = load i32, ptr %121, align 4, !tbaa !11
  %2021 = lshr i32 %2020, 1
  store i32 %2021, ptr %118, align 4, !tbaa !11
  %2022 = load i32, ptr %118, align 4, !tbaa !11
  %2023 = load i32, ptr %36, align 4, !tbaa !11
  %2024 = add i32 %2022, %2023
  %2025 = load i32, ptr %55, align 4, !tbaa !11
  %2026 = icmp uge i32 %2024, %2025
  br i1 %2026, label %2027, label %2028

2027:                                             ; preds = %2010
  call void @chk_report_abort(ptr noundef @.str.54)
  br label %2028

2028:                                             ; preds = %2027, %2010
  %2029 = load ptr, ptr %54, align 8, !tbaa !5
  %2030 = load i32, ptr %36, align 4, !tbaa !11
  %2031 = load i32, ptr %118, align 4, !tbaa !11
  %2032 = add i32 %2030, %2031
  %2033 = zext i32 %2032 to i64
  %2034 = getelementptr inbounds i32, ptr %2029, i64 %2033
  %2035 = load i32, ptr %2034, align 4, !tbaa !11
  %2036 = load ptr, ptr %45, align 8, !tbaa !5
  %2037 = load i32, ptr %34, align 4, !tbaa !11
  %2038 = zext i32 %2037 to i64
  %2039 = getelementptr inbounds i32, ptr %2036, i64 %2038
  store i32 %2035, ptr %2039, align 4, !tbaa !11
  %2040 = load i32, ptr %34, align 4, !tbaa !11
  %2041 = add i32 %2040, 1
  %2042 = load ptr, ptr %54, align 8, !tbaa !5
  %2043 = load i32, ptr %36, align 4, !tbaa !11
  %2044 = load i32, ptr %118, align 4, !tbaa !11
  %2045 = add i32 %2043, %2044
  %2046 = zext i32 %2045 to i64
  %2047 = getelementptr inbounds i32, ptr %2042, i64 %2046
  store i32 %2041, ptr %2047, align 4, !tbaa !11
  br label %2048

2048:                                             ; preds = %2028, %1973
  call void @llvm.lifetime.end.p0(i64 4, ptr %129) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %128) #8
  br label %2049

2049:                                             ; preds = %2048, %1882
  br label %2515

2050:                                             ; preds = %1711
  call void @llvm.lifetime.start.p0(i64 4, ptr %134) #8
  %2051 = load ptr, ptr %12, align 8, !tbaa !5
  %2052 = getelementptr inbounds %struct.fstReaderContext, ptr %2051, i32 0, i32 10
  %2053 = load ptr, ptr %2052, align 8, !tbaa !27
  %2054 = load i32, ptr %34, align 4, !tbaa !11
  %2055 = zext i32 %2054 to i64
  %2056 = getelementptr inbounds i32, ptr %2053, i64 %2055
  %2057 = load i32, ptr %2056, align 4, !tbaa !11
  store i32 %2057, ptr %134, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %135) #8
  %2058 = load ptr, ptr %43, align 8, !tbaa !5
  %2059 = load ptr, ptr %46, align 8, !tbaa !5
  %2060 = load i32, ptr %34, align 4, !tbaa !11
  %2061 = zext i32 %2060 to i64
  %2062 = getelementptr inbounds i32, ptr %2059, i64 %2061
  %2063 = load i32, ptr %2062, align 4, !tbaa !11
  %2064 = zext i32 %2063 to i64
  %2065 = getelementptr inbounds i8, ptr %2058, i64 %2064
  %2066 = call i32 @fstGetVarint32(ptr noundef %2065, ptr noundef %119)
  store i32 %2066, ptr %121, align 4, !tbaa !11
  %2067 = load ptr, ptr %43, align 8, !tbaa !5
  %2068 = load ptr, ptr %46, align 8, !tbaa !5
  %2069 = load i32, ptr %34, align 4, !tbaa !11
  %2070 = zext i32 %2069 to i64
  %2071 = getelementptr inbounds i32, ptr %2068, i64 %2070
  %2072 = load i32, ptr %2071, align 4, !tbaa !11
  %2073 = zext i32 %2072 to i64
  %2074 = getelementptr inbounds i8, ptr %2067, i64 %2073
  %2075 = load i32, ptr %119, align 4, !tbaa !11
  %2076 = sext i32 %2075 to i64
  %2077 = getelementptr inbounds i8, ptr %2074, i64 %2076
  store ptr %2077, ptr %135, align 8, !tbaa !5
  %2078 = load ptr, ptr %12, align 8, !tbaa !5
  %2079 = getelementptr inbounds %struct.fstReaderContext, ptr %2078, i32 0, i32 11
  %2080 = load ptr, ptr %2079, align 8, !tbaa !29
  %2081 = load i32, ptr %34, align 4, !tbaa !11
  %2082 = zext i32 %2081 to i64
  %2083 = getelementptr inbounds i8, ptr %2080, i64 %2082
  %2084 = load i8, ptr %2083, align 1, !tbaa !25
  %2085 = zext i8 %2084 to i32
  %2086 = icmp ne i32 %2085, 3
  br i1 %2086, label %2087, label %2242

2087:                                             ; preds = %2050
  %2088 = load i32, ptr %134, align 4, !tbaa !11
  %2089 = load ptr, ptr %12, align 8, !tbaa !5
  %2090 = getelementptr inbounds %struct.fstReaderContext, ptr %2089, i32 0, i32 13
  %2091 = load i32, ptr %2090, align 8, !tbaa !30
  %2092 = icmp ugt i32 %2088, %2091
  br i1 %2092, label %2093, label %2094

2093:                                             ; preds = %2087
  call void @chk_report_abort(ptr noundef @.str.46)
  br label %2094

2094:                                             ; preds = %2093, %2087
  %2095 = load i32, ptr %121, align 4, !tbaa !11
  %2096 = and i32 %2095, 1
  %2097 = icmp ne i32 %2096, 0
  br i1 %2097, label %2178, label %2098

2098:                                             ; preds = %2094
  call void @llvm.lifetime.start.p0(i64 4, ptr %136) #8
  store i32 0, ptr %136, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %137) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %138) #8
  store i32 0, ptr %138, align 4, !tbaa !11
  br label %2099

2099:                                             ; preds = %2127, %2098
  %2100 = load i32, ptr %138, align 4, !tbaa !11
  %2101 = load i32, ptr %134, align 4, !tbaa !11
  %2102 = icmp ult i32 %2100, %2101
  br i1 %2102, label %2103, label %2130

2103:                                             ; preds = %2099
  call void @llvm.lifetime.start.p0(i64 1, ptr %139) #8
  %2104 = load i32, ptr %138, align 4, !tbaa !11
  %2105 = udiv i32 %2104, 8
  store i32 %2105, ptr %136, align 4, !tbaa !11
  %2106 = load i32, ptr %138, align 4, !tbaa !11
  %2107 = and i32 %2106, 7
  %2108 = sub i32 7, %2107
  store i32 %2108, ptr %137, align 4, !tbaa !11
  %2109 = load ptr, ptr %135, align 8, !tbaa !5
  %2110 = load i32, ptr %136, align 4, !tbaa !11
  %2111 = sext i32 %2110 to i64
  %2112 = getelementptr inbounds i8, ptr %2109, i64 %2111
  %2113 = load i8, ptr %2112, align 1, !tbaa !25
  %2114 = zext i8 %2113 to i32
  %2115 = load i32, ptr %137, align 4, !tbaa !11
  %2116 = ashr i32 %2114, %2115
  %2117 = and i32 %2116, 1
  %2118 = or i32 %2117, 48
  %2119 = trunc i32 %2118 to i8
  store i8 %2119, ptr %139, align 1, !tbaa !25
  %2120 = load i8, ptr %139, align 1, !tbaa !25
  %2121 = load ptr, ptr %12, align 8, !tbaa !5
  %2122 = getelementptr inbounds %struct.fstReaderContext, ptr %2121, i32 0, i32 14
  %2123 = load ptr, ptr %2122, align 8, !tbaa !28
  %2124 = load i32, ptr %138, align 4, !tbaa !11
  %2125 = zext i32 %2124 to i64
  %2126 = getelementptr inbounds i8, ptr %2123, i64 %2125
  store i8 %2120, ptr %2126, align 1, !tbaa !25
  call void @llvm.lifetime.end.p0(i64 1, ptr %139) #8
  br label %2127

2127:                                             ; preds = %2103
  %2128 = load i32, ptr %138, align 4, !tbaa !11
  %2129 = add i32 %2128, 1
  store i32 %2129, ptr %138, align 4, !tbaa !11
  br label %2099, !llvm.loop !43

2130:                                             ; preds = %2099
  %2131 = load ptr, ptr %12, align 8, !tbaa !5
  %2132 = getelementptr inbounds %struct.fstReaderContext, ptr %2131, i32 0, i32 14
  %2133 = load ptr, ptr %2132, align 8, !tbaa !28
  %2134 = load i32, ptr %138, align 4, !tbaa !11
  %2135 = zext i32 %2134 to i64
  %2136 = getelementptr inbounds i8, ptr %2133, i64 %2135
  store i8 0, ptr %2136, align 1, !tbaa !25
  %2137 = load ptr, ptr %8, align 8, !tbaa !5
  %2138 = icmp ne ptr %2137, null
  br i1 %2138, label %2139, label %2152

2139:                                             ; preds = %2130
  %2140 = load ptr, ptr %8, align 8, !tbaa !5
  %2141 = load ptr, ptr %10, align 8, !tbaa !5
  %2142 = load ptr, ptr %14, align 8, !tbaa !5
  %2143 = load i32, ptr %36, align 4, !tbaa !11
  %2144 = zext i32 %2143 to i64
  %2145 = getelementptr inbounds i64, ptr %2142, i64 %2144
  %2146 = load i64, ptr %2145, align 8, !tbaa !9
  %2147 = load i32, ptr %34, align 4, !tbaa !11
  %2148 = add i32 %2147, 1
  %2149 = load ptr, ptr %12, align 8, !tbaa !5
  %2150 = getelementptr inbounds %struct.fstReaderContext, ptr %2149, i32 0, i32 14
  %2151 = load ptr, ptr %2150, align 8, !tbaa !28
  call void %2140(ptr noundef %2141, i64 noundef %2146, i32 noundef %2148, ptr noundef %2151)
  br label %2175

2152:                                             ; preds = %2130
  %2153 = load ptr, ptr %11, align 8, !tbaa !5
  %2154 = icmp ne ptr %2153, null
  br i1 %2154, label %2155, label %2174

2155:                                             ; preds = %2152
  call void @llvm.lifetime.start.p0(i64 1, ptr %140) #8
  %2156 = load ptr, ptr %12, align 8, !tbaa !5
  %2157 = getelementptr inbounds %struct.fstReaderContext, ptr %2156, i32 0, i32 11
  %2158 = load ptr, ptr %2157, align 8, !tbaa !29
  %2159 = load i32, ptr %34, align 4, !tbaa !11
  %2160 = zext i32 %2159 to i64
  %2161 = getelementptr inbounds i8, ptr %2158, i64 %2160
  %2162 = load i8, ptr %2161, align 1, !tbaa !25
  %2163 = zext i8 %2162 to i32
  %2164 = icmp ne i32 %2163, 18
  %2165 = zext i1 %2164 to i64
  %2166 = select i1 %2164, i32 98, i32 112
  %2167 = trunc i32 %2166 to i8
  store i8 %2167, ptr %140, align 1, !tbaa !25
  %2168 = load ptr, ptr %12, align 8, !tbaa !5
  call void @fstWritex(ptr noundef %2168, ptr noundef %140, i32 noundef 1)
  %2169 = load ptr, ptr %12, align 8, !tbaa !5
  %2170 = load ptr, ptr %12, align 8, !tbaa !5
  %2171 = getelementptr inbounds %struct.fstReaderContext, ptr %2170, i32 0, i32 14
  %2172 = load ptr, ptr %2171, align 8, !tbaa !28
  %2173 = load i32, ptr %134, align 4, !tbaa !11
  call void @fstWritex(ptr noundef %2169, ptr noundef %2172, i32 noundef %2173)
  call void @llvm.lifetime.end.p0(i64 1, ptr %140) #8
  br label %2174

2174:                                             ; preds = %2155, %2152
  br label %2175

2175:                                             ; preds = %2174, %2139
  %2176 = load i32, ptr %136, align 4, !tbaa !11
  %2177 = add nsw i32 %2176, 1
  store i32 %2177, ptr %134, align 4, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 4, ptr %138) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %137) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %136) #8
  br label %2241

2178:                                             ; preds = %2094
  %2179 = load ptr, ptr %8, align 8, !tbaa !5
  %2180 = icmp ne ptr %2179, null
  br i1 %2180, label %2181, label %2206

2181:                                             ; preds = %2178
  %2182 = load ptr, ptr %12, align 8, !tbaa !5
  %2183 = getelementptr inbounds %struct.fstReaderContext, ptr %2182, i32 0, i32 14
  %2184 = load ptr, ptr %2183, align 8, !tbaa !28
  %2185 = load ptr, ptr %135, align 8, !tbaa !5
  %2186 = load i32, ptr %134, align 4, !tbaa !11
  %2187 = zext i32 %2186 to i64
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %2184, ptr align 1 %2185, i64 %2187, i1 false)
  %2188 = load ptr, ptr %12, align 8, !tbaa !5
  %2189 = getelementptr inbounds %struct.fstReaderContext, ptr %2188, i32 0, i32 14
  %2190 = load ptr, ptr %2189, align 8, !tbaa !28
  %2191 = load i32, ptr %134, align 4, !tbaa !11
  %2192 = zext i32 %2191 to i64
  %2193 = getelementptr inbounds i8, ptr %2190, i64 %2192
  store i8 0, ptr %2193, align 1, !tbaa !25
  %2194 = load ptr, ptr %8, align 8, !tbaa !5
  %2195 = load ptr, ptr %10, align 8, !tbaa !5
  %2196 = load ptr, ptr %14, align 8, !tbaa !5
  %2197 = load i32, ptr %36, align 4, !tbaa !11
  %2198 = zext i32 %2197 to i64
  %2199 = getelementptr inbounds i64, ptr %2196, i64 %2198
  %2200 = load i64, ptr %2199, align 8, !tbaa !9
  %2201 = load i32, ptr %34, align 4, !tbaa !11
  %2202 = add i32 %2201, 1
  %2203 = load ptr, ptr %12, align 8, !tbaa !5
  %2204 = getelementptr inbounds %struct.fstReaderContext, ptr %2203, i32 0, i32 14
  %2205 = load ptr, ptr %2204, align 8, !tbaa !28
  call void %2194(ptr noundef %2195, i64 noundef %2200, i32 noundef %2202, ptr noundef %2205)
  br label %2240

2206:                                             ; preds = %2178
  %2207 = load ptr, ptr %11, align 8, !tbaa !5
  %2208 = icmp ne ptr %2207, null
  br i1 %2208, label %2209, label %2239

2209:                                             ; preds = %2206
  call void @llvm.lifetime.start.p0(i64 1, ptr %141) #8
  %2210 = load ptr, ptr %12, align 8, !tbaa !5
  %2211 = getelementptr inbounds %struct.fstReaderContext, ptr %2210, i32 0, i32 11
  %2212 = load ptr, ptr %2211, align 8, !tbaa !29
  %2213 = load i32, ptr %34, align 4, !tbaa !11
  %2214 = zext i32 %2213 to i64
  %2215 = getelementptr inbounds i8, ptr %2212, i64 %2214
  %2216 = load i8, ptr %2215, align 1, !tbaa !25
  %2217 = zext i8 %2216 to i32
  %2218 = icmp ne i32 %2217, 18
  %2219 = zext i1 %2218 to i64
  %2220 = select i1 %2218, i32 98, i32 112
  %2221 = trunc i32 %2220 to i8
  store i8 %2221, ptr %141, align 1, !tbaa !25
  call void @llvm.lifetime.start.p0(i64 8, ptr %142) #8
  %2222 = load ptr, ptr %135, align 8, !tbaa !5
  %2223 = load ptr, ptr %43, align 8, !tbaa !5
  %2224 = ptrtoint ptr %2222 to i64
  %2225 = ptrtoint ptr %2223 to i64
  %2226 = sub i64 %2224, %2225
  %2227 = load i32, ptr %134, align 4, !tbaa !11
  %2228 = zext i32 %2227 to i64
  %2229 = add nsw i64 %2226, %2228
  store i64 %2229, ptr %142, align 8, !tbaa !9
  %2230 = load ptr, ptr %12, align 8, !tbaa !5
  call void @fstWritex(ptr noundef %2230, ptr noundef %141, i32 noundef 1)
  %2231 = load i64, ptr %142, align 8, !tbaa !9
  %2232 = load i64, ptr %42, align 8, !tbaa !9
  %2233 = icmp ugt i64 %2231, %2232
  br i1 %2233, label %2234, label %2235

2234:                                             ; preds = %2209
  call void @chk_report_abort(ptr noundef @.str.47)
  br label %2235

2235:                                             ; preds = %2234, %2209
  %2236 = load ptr, ptr %12, align 8, !tbaa !5
  %2237 = load ptr, ptr %135, align 8, !tbaa !5
  %2238 = load i32, ptr %134, align 4, !tbaa !11
  call void @fstWritex(ptr noundef %2236, ptr noundef %2237, i32 noundef %2238)
  call void @llvm.lifetime.end.p0(i64 8, ptr %142) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %141) #8
  br label %2239

2239:                                             ; preds = %2235, %2206
  br label %2240

2240:                                             ; preds = %2239, %2181
  br label %2241

2241:                                             ; preds = %2240, %2175
  br label %2421

2242:                                             ; preds = %2050
  call void @llvm.lifetime.start.p0(i64 8, ptr %143) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %144) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %145) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %146) #8
  %2243 = load i32, ptr %121, align 4, !tbaa !11
  %2244 = and i32 %2243, 1
  %2245 = icmp ne i32 %2244, 0
  br i1 %2245, label %2272, label %2246

2246:                                             ; preds = %2242
  call void @llvm.lifetime.start.p0(i64 4, ptr %147) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %148) #8
  store i32 0, ptr %148, align 4, !tbaa !11
  br label %2247

2247:                                             ; preds = %2267, %2246
  %2248 = load i32, ptr %148, align 4, !tbaa !11
  %2249 = icmp slt i32 %2248, 8
  br i1 %2249, label %2250, label %2270

2250:                                             ; preds = %2247
  call void @llvm.lifetime.start.p0(i64 1, ptr %149) #8
  %2251 = load i32, ptr %148, align 4, !tbaa !11
  %2252 = and i32 %2251, 7
  %2253 = sub nsw i32 7, %2252
  store i32 %2253, ptr %147, align 4, !tbaa !11
  %2254 = load ptr, ptr %135, align 8, !tbaa !5
  %2255 = getelementptr inbounds i8, ptr %2254, i64 0
  %2256 = load i8, ptr %2255, align 1, !tbaa !25
  %2257 = zext i8 %2256 to i32
  %2258 = load i32, ptr %147, align 4, !tbaa !11
  %2259 = ashr i32 %2257, %2258
  %2260 = and i32 %2259, 1
  %2261 = or i32 %2260, 48
  %2262 = trunc i32 %2261 to i8
  store i8 %2262, ptr %149, align 1, !tbaa !25
  %2263 = load i8, ptr %149, align 1, !tbaa !25
  %2264 = load i32, ptr %148, align 4, !tbaa !11
  %2265 = sext i32 %2264 to i64
  %2266 = getelementptr inbounds [8 x i8], ptr %145, i64 0, i64 %2265
  store i8 %2263, ptr %2266, align 1, !tbaa !25
  call void @llvm.lifetime.end.p0(i64 1, ptr %149) #8
  br label %2267

2267:                                             ; preds = %2250
  %2268 = load i32, ptr %148, align 4, !tbaa !11
  %2269 = add nsw i32 %2268, 1
  store i32 %2269, ptr %148, align 4, !tbaa !11
  br label %2247, !llvm.loop !44

2270:                                             ; preds = %2247
  store i32 1, ptr %134, align 4, !tbaa !11
  %2271 = getelementptr inbounds [8 x i8], ptr %145, i64 0, i64 0
  store ptr %2271, ptr %146, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 4, ptr %148) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %147) #8
  br label %2274

2272:                                             ; preds = %2242
  %2273 = load ptr, ptr %135, align 8, !tbaa !5
  store ptr %2273, ptr %146, align 8, !tbaa !5
  br label %2274

2274:                                             ; preds = %2272, %2270
  %2275 = load ptr, ptr %8, align 8, !tbaa !5
  %2276 = icmp ne ptr %2275, null
  br i1 %2276, label %2277, label %2379

2277:                                             ; preds = %2274
  %2278 = load ptr, ptr %12, align 8, !tbaa !5
  %2279 = getelementptr inbounds %struct.fstReaderContext, ptr %2278, i32 0, i32 17
  %2280 = load i8, ptr %2279, align 2
  %2281 = lshr i8 %2280, 2
  %2282 = and i8 %2281, 1
  %2283 = zext i8 %2282 to i32
  %2284 = icmp ne i32 %2283, 0
  br i1 %2284, label %2285, label %2325

2285:                                             ; preds = %2277
  %2286 = load ptr, ptr %12, align 8, !tbaa !5
  %2287 = getelementptr inbounds %struct.fstReaderContext, ptr %2286, i32 0, i32 17
  %2288 = load i8, ptr %2287, align 2
  %2289 = lshr i8 %2288, 1
  %2290 = and i8 %2289, 1
  %2291 = zext i8 %2290 to i32
  %2292 = icmp ne i32 %2291, 0
  br i1 %2292, label %2293, label %2295

2293:                                             ; preds = %2285
  %2294 = load ptr, ptr %146, align 8, !tbaa !5
  store ptr %2294, ptr %144, align 8, !tbaa !5
  br label %2314

2295:                                             ; preds = %2285
  call void @llvm.lifetime.start.p0(i64 4, ptr %150) #8
  store ptr %143, ptr %144, align 8, !tbaa !5
  store i32 0, ptr %150, align 4, !tbaa !11
  br label %2296

2296:                                             ; preds = %2310, %2295
  %2297 = load i32, ptr %150, align 4, !tbaa !11
  %2298 = icmp slt i32 %2297, 8
  br i1 %2298, label %2299, label %2313

2299:                                             ; preds = %2296
  %2300 = load ptr, ptr %146, align 8, !tbaa !5
  %2301 = load i32, ptr %150, align 4, !tbaa !11
  %2302 = sub nsw i32 7, %2301
  %2303 = sext i32 %2302 to i64
  %2304 = getelementptr inbounds i8, ptr %2300, i64 %2303
  %2305 = load i8, ptr %2304, align 1, !tbaa !25
  %2306 = load ptr, ptr %144, align 8, !tbaa !5
  %2307 = load i32, ptr %150, align 4, !tbaa !11
  %2308 = sext i32 %2307 to i64
  %2309 = getelementptr inbounds i8, ptr %2306, i64 %2308
  store i8 %2305, ptr %2309, align 1, !tbaa !25
  br label %2310

2310:                                             ; preds = %2299
  %2311 = load i32, ptr %150, align 4, !tbaa !11
  %2312 = add nsw i32 %2311, 1
  store i32 %2312, ptr %150, align 4, !tbaa !11
  br label %2296, !llvm.loop !45

2313:                                             ; preds = %2296
  call void @llvm.lifetime.end.p0(i64 4, ptr %150) #8
  br label %2314

2314:                                             ; preds = %2313, %2293
  %2315 = load ptr, ptr %8, align 8, !tbaa !5
  %2316 = load ptr, ptr %10, align 8, !tbaa !5
  %2317 = load ptr, ptr %14, align 8, !tbaa !5
  %2318 = load i32, ptr %36, align 4, !tbaa !11
  %2319 = zext i32 %2318 to i64
  %2320 = getelementptr inbounds i64, ptr %2317, i64 %2319
  %2321 = load i64, ptr %2320, align 8, !tbaa !9
  %2322 = load i32, ptr %34, align 4, !tbaa !11
  %2323 = add i32 %2322, 1
  %2324 = load ptr, ptr %144, align 8, !tbaa !5
  call void %2315(ptr noundef %2316, i64 noundef %2321, i32 noundef %2323, ptr noundef %2324)
  br label %2378

2325:                                             ; preds = %2277
  store ptr %143, ptr %144, align 8, !tbaa !5
  %2326 = load ptr, ptr %12, align 8, !tbaa !5
  %2327 = getelementptr inbounds %struct.fstReaderContext, ptr %2326, i32 0, i32 17
  %2328 = load i8, ptr %2327, align 2
  %2329 = lshr i8 %2328, 1
  %2330 = and i8 %2329, 1
  %2331 = zext i8 %2330 to i32
  %2332 = icmp ne i32 %2331, 0
  br i1 %2332, label %2333, label %2336

2333:                                             ; preds = %2325
  %2334 = load ptr, ptr %144, align 8, !tbaa !5
  %2335 = load ptr, ptr %146, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %2334, ptr align 1 %2335, i64 8, i1 false)
  br label %2355

2336:                                             ; preds = %2325
  call void @llvm.lifetime.start.p0(i64 4, ptr %151) #8
  store i32 0, ptr %151, align 4, !tbaa !11
  br label %2337

2337:                                             ; preds = %2351, %2336
  %2338 = load i32, ptr %151, align 4, !tbaa !11
  %2339 = icmp slt i32 %2338, 8
  br i1 %2339, label %2340, label %2354

2340:                                             ; preds = %2337
  %2341 = load ptr, ptr %146, align 8, !tbaa !5
  %2342 = load i32, ptr %151, align 4, !tbaa !11
  %2343 = sub nsw i32 7, %2342
  %2344 = sext i32 %2343 to i64
  %2345 = getelementptr inbounds i8, ptr %2341, i64 %2344
  %2346 = load i8, ptr %2345, align 1, !tbaa !25
  %2347 = load ptr, ptr %144, align 8, !tbaa !5
  %2348 = load i32, ptr %151, align 4, !tbaa !11
  %2349 = sext i32 %2348 to i64
  %2350 = getelementptr inbounds i8, ptr %2347, i64 %2349
  store i8 %2346, ptr %2350, align 1, !tbaa !25
  br label %2351

2351:                                             ; preds = %2340
  %2352 = load i32, ptr %151, align 4, !tbaa !11
  %2353 = add nsw i32 %2352, 1
  store i32 %2353, ptr %151, align 4, !tbaa !11
  br label %2337, !llvm.loop !46

2354:                                             ; preds = %2337
  call void @llvm.lifetime.end.p0(i64 4, ptr %151) #8
  br label %2355

2355:                                             ; preds = %2354, %2333
  %2356 = load ptr, ptr %12, align 8, !tbaa !5
  %2357 = getelementptr inbounds %struct.fstReaderContext, ptr %2356, i32 0, i32 14
  %2358 = load ptr, ptr %2357, align 8, !tbaa !28
  %2359 = load ptr, ptr %12, align 8, !tbaa !5
  %2360 = getelementptr inbounds %struct.fstReaderContext, ptr %2359, i32 0, i32 13
  %2361 = load i32, ptr %2360, align 8, !tbaa !30
  %2362 = add i32 %2361, 1
  %2363 = zext i32 %2362 to i64
  %2364 = load double, ptr %143, align 8, !tbaa !33
  %2365 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %2358, i64 noundef %2363, ptr noundef @.str.48, double noundef %2364) #8
  %2366 = load ptr, ptr %8, align 8, !tbaa !5
  %2367 = load ptr, ptr %10, align 8, !tbaa !5
  %2368 = load ptr, ptr %14, align 8, !tbaa !5
  %2369 = load i32, ptr %36, align 4, !tbaa !11
  %2370 = zext i32 %2369 to i64
  %2371 = getelementptr inbounds i64, ptr %2368, i64 %2370
  %2372 = load i64, ptr %2371, align 8, !tbaa !9
  %2373 = load i32, ptr %34, align 4, !tbaa !11
  %2374 = add i32 %2373, 1
  %2375 = load ptr, ptr %12, align 8, !tbaa !5
  %2376 = getelementptr inbounds %struct.fstReaderContext, ptr %2375, i32 0, i32 14
  %2377 = load ptr, ptr %2376, align 8, !tbaa !28
  call void %2366(ptr noundef %2367, i64 noundef %2372, i32 noundef %2374, ptr noundef %2377)
  br label %2378

2378:                                             ; preds = %2355, %2314
  br label %2420

2379:                                             ; preds = %2274
  %2380 = load ptr, ptr %11, align 8, !tbaa !5
  %2381 = icmp ne ptr %2380, null
  br i1 %2381, label %2382, label %2419

2382:                                             ; preds = %2379
  call void @llvm.lifetime.start.p0(i64 32, ptr %152) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %153) #8
  store ptr %143, ptr %144, align 8, !tbaa !5
  %2383 = load ptr, ptr %12, align 8, !tbaa !5
  %2384 = getelementptr inbounds %struct.fstReaderContext, ptr %2383, i32 0, i32 17
  %2385 = load i8, ptr %2384, align 2
  %2386 = lshr i8 %2385, 1
  %2387 = and i8 %2386, 1
  %2388 = zext i8 %2387 to i32
  %2389 = icmp ne i32 %2388, 0
  br i1 %2389, label %2390, label %2393

2390:                                             ; preds = %2382
  %2391 = load ptr, ptr %144, align 8, !tbaa !5
  %2392 = load ptr, ptr %146, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %2391, ptr align 1 %2392, i64 8, i1 false)
  br label %2412

2393:                                             ; preds = %2382
  call void @llvm.lifetime.start.p0(i64 4, ptr %154) #8
  store i32 0, ptr %154, align 4, !tbaa !11
  br label %2394

2394:                                             ; preds = %2408, %2393
  %2395 = load i32, ptr %154, align 4, !tbaa !11
  %2396 = icmp slt i32 %2395, 8
  br i1 %2396, label %2397, label %2411

2397:                                             ; preds = %2394
  %2398 = load ptr, ptr %146, align 8, !tbaa !5
  %2399 = load i32, ptr %154, align 4, !tbaa !11
  %2400 = sub nsw i32 7, %2399
  %2401 = sext i32 %2400 to i64
  %2402 = getelementptr inbounds i8, ptr %2398, i64 %2401
  %2403 = load i8, ptr %2402, align 1, !tbaa !25
  %2404 = load ptr, ptr %144, align 8, !tbaa !5
  %2405 = load i32, ptr %154, align 4, !tbaa !11
  %2406 = sext i32 %2405 to i64
  %2407 = getelementptr inbounds i8, ptr %2404, i64 %2406
  store i8 %2403, ptr %2407, align 1, !tbaa !25
  br label %2408

2408:                                             ; preds = %2397
  %2409 = load i32, ptr %154, align 4, !tbaa !11
  %2410 = add nsw i32 %2409, 1
  store i32 %2410, ptr %154, align 4, !tbaa !11
  br label %2394, !llvm.loop !47

2411:                                             ; preds = %2394
  call void @llvm.lifetime.end.p0(i64 4, ptr %154) #8
  br label %2412

2412:                                             ; preds = %2411, %2390
  %2413 = getelementptr inbounds [32 x i8], ptr %152, i64 0, i64 0
  %2414 = load double, ptr %143, align 8, !tbaa !33
  %2415 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %2413, i64 noundef 32, ptr noundef @.str.56, double noundef %2414) #8
  store i32 %2415, ptr %153, align 4, !tbaa !11
  %2416 = load ptr, ptr %12, align 8, !tbaa !5
  %2417 = getelementptr inbounds [32 x i8], ptr %152, i64 0, i64 0
  %2418 = load i32, ptr %153, align 4, !tbaa !11
  call void @fstWritex(ptr noundef %2416, ptr noundef %2417, i32 noundef %2418)
  call void @llvm.lifetime.end.p0(i64 4, ptr %153) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %152) #8
  br label %2419

2419:                                             ; preds = %2412, %2379
  br label %2420

2420:                                             ; preds = %2419, %2378
  call void @llvm.lifetime.end.p0(i64 8, ptr %146) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %145) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %144) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %143) #8
  br label %2421

2421:                                             ; preds = %2420, %2241
  %2422 = load ptr, ptr %11, align 8, !tbaa !5
  %2423 = icmp ne ptr %2422, null
  br i1 %2423, label %2424, label %2439

2424:                                             ; preds = %2421
  call void @llvm.lifetime.start.p0(i64 16, ptr %155) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %156) #8
  %2425 = getelementptr inbounds [16 x i8], ptr %155, i64 0, i64 0
  %2426 = getelementptr inbounds i8, ptr %2425, i64 1
  %2427 = load i32, ptr %34, align 4, !tbaa !11
  %2428 = add i32 %2427, 1
  %2429 = call i32 @fstVcdIDForFwrite(ptr noundef %2426, i32 noundef %2428)
  store i32 %2429, ptr %156, align 4, !tbaa !11
  %2430 = getelementptr inbounds [16 x i8], ptr %155, i64 0, i64 0
  store i8 32, ptr %2430, align 16, !tbaa !25
  %2431 = load i32, ptr %156, align 4, !tbaa !11
  %2432 = add nsw i32 %2431, 1
  %2433 = sext i32 %2432 to i64
  %2434 = getelementptr inbounds [16 x i8], ptr %155, i64 0, i64 %2433
  store i8 10, ptr %2434, align 1, !tbaa !25
  %2435 = load ptr, ptr %12, align 8, !tbaa !5
  %2436 = getelementptr inbounds [16 x i8], ptr %155, i64 0, i64 0
  %2437 = load i32, ptr %156, align 4, !tbaa !11
  %2438 = add nsw i32 %2437, 2
  call void @fstWritex(ptr noundef %2435, ptr noundef %2436, i32 noundef %2438)
  call void @llvm.lifetime.end.p0(i64 4, ptr %156) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %155) #8
  br label %2439

2439:                                             ; preds = %2424, %2421
  %2440 = load i32, ptr %134, align 4, !tbaa !11
  %2441 = load i32, ptr %119, align 4, !tbaa !11
  %2442 = add i32 %2441, %2440
  store i32 %2442, ptr %119, align 4, !tbaa !11
  %2443 = load i32, ptr %119, align 4, !tbaa !11
  %2444 = load ptr, ptr %46, align 8, !tbaa !5
  %2445 = load i32, ptr %34, align 4, !tbaa !11
  %2446 = zext i32 %2445 to i64
  %2447 = getelementptr inbounds i32, ptr %2444, i64 %2446
  %2448 = load i32, ptr %2447, align 4, !tbaa !11
  %2449 = add i32 %2448, %2443
  store i32 %2449, ptr %2447, align 4, !tbaa !11
  %2450 = load i32, ptr %119, align 4, !tbaa !11
  %2451 = load ptr, ptr %47, align 8, !tbaa !5
  %2452 = load i32, ptr %34, align 4, !tbaa !11
  %2453 = zext i32 %2452 to i64
  %2454 = getelementptr inbounds i32, ptr %2451, i64 %2453
  %2455 = load i32, ptr %2454, align 4, !tbaa !11
  %2456 = sub i32 %2455, %2450
  store i32 %2456, ptr %2454, align 4, !tbaa !11
  %2457 = load ptr, ptr %45, align 8, !tbaa !5
  %2458 = load i32, ptr %34, align 4, !tbaa !11
  %2459 = zext i32 %2458 to i64
  %2460 = getelementptr inbounds i32, ptr %2457, i64 %2459
  %2461 = load i32, ptr %2460, align 4, !tbaa !11
  %2462 = load ptr, ptr %54, align 8, !tbaa !5
  %2463 = load i32, ptr %36, align 4, !tbaa !11
  %2464 = zext i32 %2463 to i64
  %2465 = getelementptr inbounds i32, ptr %2462, i64 %2464
  store i32 %2461, ptr %2465, align 4, !tbaa !11
  %2466 = load ptr, ptr %45, align 8, !tbaa !5
  %2467 = load i32, ptr %34, align 4, !tbaa !11
  %2468 = zext i32 %2467 to i64
  %2469 = getelementptr inbounds i32, ptr %2466, i64 %2468
  store i32 0, ptr %2469, align 4, !tbaa !11
  %2470 = load ptr, ptr %47, align 8, !tbaa !5
  %2471 = load i32, ptr %34, align 4, !tbaa !11
  %2472 = zext i32 %2471 to i64
  %2473 = getelementptr inbounds i32, ptr %2470, i64 %2472
  %2474 = load i32, ptr %2473, align 4, !tbaa !11
  %2475 = icmp ne i32 %2474, 0
  br i1 %2475, label %2476, label %2514

2476:                                             ; preds = %2439
  %2477 = load ptr, ptr %43, align 8, !tbaa !5
  %2478 = load ptr, ptr %46, align 8, !tbaa !5
  %2479 = load i32, ptr %34, align 4, !tbaa !11
  %2480 = zext i32 %2479 to i64
  %2481 = getelementptr inbounds i32, ptr %2478, i64 %2480
  %2482 = load i32, ptr %2481, align 4, !tbaa !11
  %2483 = zext i32 %2482 to i64
  %2484 = getelementptr inbounds i8, ptr %2477, i64 %2483
  %2485 = call i32 @fstGetVarint32NoSkip(ptr noundef %2484)
  store i32 %2485, ptr %121, align 4, !tbaa !11
  %2486 = load i32, ptr %121, align 4, !tbaa !11
  %2487 = lshr i32 %2486, 1
  store i32 %2487, ptr %118, align 4, !tbaa !11
  %2488 = load i32, ptr %118, align 4, !tbaa !11
  %2489 = load i32, ptr %36, align 4, !tbaa !11
  %2490 = add i32 %2488, %2489
  %2491 = load i32, ptr %55, align 4, !tbaa !11
  %2492 = icmp uge i32 %2490, %2491
  br i1 %2492, label %2493, label %2494

2493:                                             ; preds = %2476
  call void @chk_report_abort(ptr noundef @.str.54)
  br label %2494

2494:                                             ; preds = %2493, %2476
  %2495 = load ptr, ptr %54, align 8, !tbaa !5
  %2496 = load i32, ptr %36, align 4, !tbaa !11
  %2497 = load i32, ptr %118, align 4, !tbaa !11
  %2498 = add i32 %2496, %2497
  %2499 = zext i32 %2498 to i64
  %2500 = getelementptr inbounds i32, ptr %2495, i64 %2499
  %2501 = load i32, ptr %2500, align 4, !tbaa !11
  %2502 = load ptr, ptr %45, align 8, !tbaa !5
  %2503 = load i32, ptr %34, align 4, !tbaa !11
  %2504 = zext i32 %2503 to i64
  %2505 = getelementptr inbounds i32, ptr %2502, i64 %2504
  store i32 %2501, ptr %2505, align 4, !tbaa !11
  %2506 = load i32, ptr %34, align 4, !tbaa !11
  %2507 = add i32 %2506, 1
  %2508 = load ptr, ptr %54, align 8, !tbaa !5
  %2509 = load i32, ptr %36, align 4, !tbaa !11
  %2510 = load i32, ptr %118, align 4, !tbaa !11
  %2511 = add i32 %2509, %2510
  %2512 = zext i32 %2511 to i64
  %2513 = getelementptr inbounds i32, ptr %2508, i64 %2512
  store i32 %2507, ptr %2513, align 4, !tbaa !11
  br label %2514

2514:                                             ; preds = %2494, %2439
  call void @llvm.lifetime.end.p0(i64 8, ptr %135) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %134) #8
  br label %2515

2515:                                             ; preds = %2514, %2049
  br label %1704, !llvm.loop !48

2516:                                             ; preds = %1704
  store i32 0, ptr %53, align 4
  br label %2517

2517:                                             ; preds = %2516, %1700
  call void @llvm.lifetime.end.p0(i64 4, ptr %121) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %120) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %119) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %118) #8
  %2518 = load i32, ptr %53, align 4
  switch i32 %2518, label %2571 [
    i32 0, label %2519
    i32 37, label %2523
  ]

2519:                                             ; preds = %2517
  br label %2520

2520:                                             ; preds = %2519
  %2521 = load i32, ptr %36, align 4, !tbaa !11
  %2522 = add i32 %2521, 1
  store i32 %2522, ptr %36, align 4, !tbaa !11
  br label %1586, !llvm.loop !49

2523:                                             ; preds = %2517, %1586
  br label %2524

2524:                                             ; preds = %2523, %1032, %974
  %2525 = load ptr, ptr %54, align 8, !tbaa !5
  call void @free(ptr noundef %2525) #8
  %2526 = load ptr, ptr %31, align 8, !tbaa !5
  call void @free(ptr noundef %2526) #8
  %2527 = load ptr, ptr %43, align 8, !tbaa !5
  call void @free(ptr noundef %2527) #8
  store ptr null, ptr %43, align 8, !tbaa !5
  %2528 = load i32, ptr %16, align 4, !tbaa !11
  %2529 = add i32 %2528, 1
  store i32 %2529, ptr %16, align 4, !tbaa !11
  %2530 = load i32, ptr %16, align 4, !tbaa !11
  %2531 = zext i32 %2530 to i64
  %2532 = load ptr, ptr %12, align 8, !tbaa !5
  %2533 = getelementptr inbounds %struct.fstReaderContext, ptr %2532, i32 0, i32 9
  %2534 = load i64, ptr %2533, align 8, !tbaa !50
  %2535 = icmp eq i64 %2531, %2534
  br i1 %2535, label %2536, label %2537

2536:                                             ; preds = %2524
  store i32 2, ptr %53, align 4
  br label %2541

2537:                                             ; preds = %2524
  %2538 = load i64, ptr %19, align 8, !tbaa !9
  %2539 = load i64, ptr %18, align 8, !tbaa !9
  %2540 = add i64 %2539, %2538
  store i64 %2540, ptr %18, align 8, !tbaa !9
  store i32 0, ptr %53, align 4
  br label %2541

2541:                                             ; preds = %2537, %2536, %405, %262, %250, %228, %221, %209
  call void @llvm.lifetime.end.p0(i64 4, ptr %55) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #8
  %2542 = load i32, ptr %53, align 4
  switch i32 %2542, label %2571 [
    i32 0, label %2543
    i32 2, label %2544
    i32 3, label %189
  ]

2543:                                             ; preds = %2541
  br label %189

2544:                                             ; preds = %2541
  %2545 = load ptr, ptr %43, align 8, !tbaa !5
  %2546 = icmp ne ptr %2545, null
  br i1 %2546, label %2547, label %2549

2547:                                             ; preds = %2544
  %2548 = load ptr, ptr %43, align 8, !tbaa !5
  call void @free(ptr noundef %2548) #8
  br label %2549

2549:                                             ; preds = %2547, %2544
  %2550 = load ptr, ptr %47, align 8, !tbaa !5
  call void @free(ptr noundef %2550) #8
  %2551 = load ptr, ptr %46, align 8, !tbaa !5
  call void @free(ptr noundef %2551) #8
  %2552 = load ptr, ptr %45, align 8, !tbaa !5
  call void @free(ptr noundef %2552) #8
  %2553 = load ptr, ptr %29, align 8, !tbaa !5
  %2554 = icmp ne ptr %2553, null
  br i1 %2554, label %2555, label %2557

2555:                                             ; preds = %2549
  %2556 = load ptr, ptr %29, align 8, !tbaa !5
  call void @free(ptr noundef %2556) #8
  br label %2557

2557:                                             ; preds = %2555, %2549
  %2558 = load ptr, ptr %30, align 8, !tbaa !5
  %2559 = icmp ne ptr %2558, null
  br i1 %2559, label %2560, label %2562

2560:                                             ; preds = %2557
  %2561 = load ptr, ptr %30, align 8, !tbaa !5
  call void @free(ptr noundef %2561) #8
  br label %2562

2562:                                             ; preds = %2560, %2557
  %2563 = load ptr, ptr %14, align 8, !tbaa !5
  call void @free(ptr noundef %2563) #8
  %2564 = load ptr, ptr %11, align 8, !tbaa !5
  %2565 = icmp ne ptr %2564, null
  br i1 %2565, label %2566, label %2568

2566:                                             ; preds = %2562
  %2567 = load ptr, ptr %12, align 8, !tbaa !5
  call void @fstWritex(ptr noundef %2567, ptr noundef null, i32 noundef 0)
  br label %2568

2568:                                             ; preds = %2566, %2562
  store i32 1, ptr %6, align 4
  store i32 1, ptr %53, align 4
  br label %2569

2569:                                             ; preds = %2568, %160
  call void @llvm.lifetime.end.p0(i64 4, ptr %52) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %51) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %49) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %48) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #8
  %2570 = load i32, ptr %6, align 4
  ret i32 %2570

2571:                                             ; preds = %2541, %2517
  unreachable
}

; Function Attrs: nounwind
declare i32 @setvbuf(ptr noundef, ptr noundef, i32 noundef, i64 noundef) #2

; Function Attrs: nounwind uwtable
declare hidden void @chk_report_abort(ptr noundef) #6

; Function Attrs: nounwind uwtable
declare hidden void @fstWritex(ptr noundef, ptr noundef, i32 noundef) #6

; Function Attrs: nounwind uwtable
declare hidden i32 @fstVcdIDForFwrite(ptr noundef, i32 noundef) #6

; Function Attrs: nounwind uwtable
declare hidden i64 @fstGetSVarint64(ptr noundef, ptr noundef) #6

; Function Attrs: nounwind uwtable
declare hidden i32 @fstReaderVarint32WithSkip(ptr noundef, ptr noundef) #6

declare i32 @LZ4_decompress_safe_partial(ptr noundef, ptr noundef, i32 noundef, i32 noundef, i32 noundef) #5

declare i32 @fastlz_decompress(ptr noundef, i32 noundef, ptr noundef, i32 noundef) #5

; Function Attrs: nounwind uwtable
declare hidden i32 @fstGetVarint32NoSkip(ptr noundef) #6

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { nounwind allocsize(0,1) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #4 = { nounwind allocsize(0) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { noreturn nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #8 = { nounwind }
attributes #9 = { nounwind allocsize(0,1) }
attributes #10 = { nounwind allocsize(0) }
attributes #11 = { noreturn nounwind }

!llvm.module.flags = !{!0, !1, !2, !3}
!llvm.ident = !{!4}

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"long", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"int", !7, i64 0}
!13 = !{!14, !12, i64 56}
!14 = !{!"fstReaderContext", !6, i64 0, !6, i64 8, !10, i64 16, !10, i64 24, !10, i64 32, !10, i64 40, !10, i64 48, !12, i64 56, !10, i64 64, !10, i64 72, !6, i64 80, !6, i64 88, !6, i64 96, !12, i64 104, !6, i64 112, !7, i64 120, !7, i64 121, !12, i64 122, !12, i64 122, !12, i64 122, !12, i64 122, !12, i64 122, !12, i64 122, !12, i64 122, !12, i64 122, !7, i64 123, !7, i64 252, !10, i64 376, !6, i64 384, !6, i64 392, !10, i64 400, !12, i64 408, !6, i64 416, !6, i64 424, !10, i64 432, !10, i64 440, !12, i64 448, !6, i64 456, !10, i64 464, !10, i64 472, !6, i64 480, !10, i64 488, !6, i64 496, !6, i64 504, !10, i64 512, !10, i64 520, !6, i64 528, !12, i64 536, !12, i64 540, !6, i64 544, !12, i64 552, !12, i64 556, !12, i64 560, !10, i64 568, !12, i64 576, !15, i64 584, !6, i64 632, !12, i64 640, !6, i64 648, !12, i64 656, !12, i64 660, !7, i64 661, !7, i64 1174, !6, i64 1688, !12, i64 1696, !12, i64 1700, !12, i64 1704, !7, i64 1708, !6, i64 67248, !6, i64 67256}
!15 = !{!"fstHier", !7, i64 0, !7, i64 8}
!16 = !{!14, !12, i64 1704}
!17 = !{!14, !6, i64 0}
!18 = !{!14, !10, i64 432}
!19 = !{!14, !10, i64 440}
!20 = distinct !{!20, !21}
!21 = !{!"llvm.loop.mustprogress"}
!22 = !{!14, !12, i64 408}
!23 = !{!14, !6, i64 416}
!24 = !{!14, !6, i64 424}
!25 = !{!7, !7, i64 0}
!26 = !{!14, !6, i64 96}
!27 = !{!14, !6, i64 80}
!28 = !{!14, !6, i64 112}
!29 = !{!14, !6, i64 88}
!30 = !{!14, !12, i64 104}
!31 = distinct !{!31, !21}
!32 = distinct !{!32, !21}
!33 = !{!34, !34, i64 0}
!34 = !{!"double", !7, i64 0}
!35 = distinct !{!35, !21}
!36 = distinct !{!36, !21}
!37 = distinct !{!37, !21}
!38 = distinct !{!38, !21}
!39 = distinct !{!39, !21}
!40 = distinct !{!40, !21}
!41 = distinct !{!41, !21}
!42 = distinct !{!42, !21}
!43 = distinct !{!43, !21}
!44 = distinct !{!44, !21}
!45 = distinct !{!45, !21}
!46 = distinct !{!46, !21}
!47 = distinct !{!47, !21}
!48 = distinct !{!48, !21}
!49 = distinct !{!49, !21}
!50 = !{!14, !10, i64 72}


; Optimized IR (opt -passes='default<O3>'):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

@stderr = external local_unnamed_addr global ptr, align 8
@.str.37 = external hidden unnamed_addr constant [69 x i8], align 1
@.str.38 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.39 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.40 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.41 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.42 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.43 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.44 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.45 = external hidden unnamed_addr constant [69 x i8], align 1
@.str.46 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.47 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.48 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.49 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.50 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.51 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.52 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.53 = external hidden unnamed_addr constant [70 x i8], align 1
@.str.54 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.55 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.56 = external hidden unnamed_addr constant [7 x i8], align 1

; Function Attrs: mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.start.p0(i64 immarg, ptr nocapture) #0

; Function Attrs: mustprogress nofree nounwind willreturn allockind("alloc,zeroed") allocsize(0,1) memory(inaccessiblemem: readwrite)
declare noalias noundef ptr @calloc(i64 noundef, i64 noundef) local_unnamed_addr #1

; Function Attrs: mustprogress nounwind willreturn allockind("free") memory(argmem: readwrite, inaccessiblemem: readwrite)
declare void @free(ptr allocptr nocapture noundef) local_unnamed_addr #2

; Function Attrs: mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #3

; Function Attrs: mustprogress nofree nounwind willreturn allockind("alloc,uninitialized") allocsize(0) memory(inaccessiblemem: readwrite)
declare noalias noundef ptr @malloc(i64 noundef) local_unnamed_addr #4

; Function Attrs: mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture) #0

; Function Attrs: nofree nounwind
declare noundef i32 @fileno(ptr nocapture noundef) local_unnamed_addr #5

; Function Attrs: nofree nounwind
declare noundef i32 @fflush(ptr nocapture noundef) local_unnamed_addr #5

; Function Attrs: nofree nounwind
declare noundef i64 @ftello(ptr nocapture noundef) local_unnamed_addr #5

; Function Attrs: nounwind uwtable
declare hidden i64 @fstFread(ptr noundef, i64 noundef, i64 noundef, ptr noundef) local_unnamed_addr #6

; Function Attrs: nofree nounwind
declare noundef i32 @snprintf(ptr noalias nocapture noundef writeonly, i64 noundef, ptr nocapture noundef readonly, ...) local_unnamed_addr #5

; Function Attrs: nofree nounwind
declare noundef i32 @fprintf(ptr nocapture noundef, ptr nocapture noundef readonly, ...) local_unnamed_addr #5

; Function Attrs: noreturn nounwind
declare void @exit(i32 noundef) local_unnamed_addr #7

; Function Attrs: nounwind uwtable
declare dso_local i32 @fstUtilityBinToEsc(ptr noundef, ptr noundef, i32 noundef) local_unnamed_addr #6

; Function Attrs: nounwind uwtable
declare dso_local i32 @fstReaderFseeko(ptr noundef, ptr noundef, i64 noundef, i32 noundef) local_unnamed_addr #6

; Function Attrs: nofree nounwind
declare noundef i32 @fgetc(ptr nocapture noundef) local_unnamed_addr #5

; Function Attrs: nounwind uwtable
declare hidden i64 @fstReaderVarint64(ptr noundef) local_unnamed_addr #6

; Function Attrs: nounwind uwtable
declare hidden i64 @fstGetVarint64(ptr noundef, ptr noundef) local_unnamed_addr #6

; Function Attrs: nounwind uwtable
declare hidden void @fstVcdID(ptr noundef, i32 noundef) local_unnamed_addr #6

; Function Attrs: nounwind uwtable
declare hidden i64 @fstReaderUint64(ptr noundef) local_unnamed_addr #6

declare i32 @uncompress(ptr noundef, ptr noundef, ptr noundef, i64 noundef) local_unnamed_addr #8

; Function Attrs: nounwind uwtable
declare hidden i32 @fstGetVarint32(ptr noundef, ptr noundef) local_unnamed_addr #6

; Function Attrs: nounwind uwtable
define dso_local range(i32 0, 2) i32 @fstReaderIterBlocks2(ptr noundef %0, ptr noundef readonly %1, ptr noundef readonly %2, ptr noundef %3, ptr noundef %4) local_unnamed_addr #6 {
  %6 = alloca i64, align 8
  %7 = alloca i32, align 4
  %8 = alloca [32 x i8], align 16
  %9 = alloca i64, align 8
  %10 = alloca [16 x i8], align 16
  %11 = alloca [16 x i8], align 16
  %12 = alloca double, align 8
  %13 = alloca [16 x i8], align 16
  %14 = alloca [64 x i8], align 16
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca i64, align 8
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  %21 = alloca [32 x i8], align 16
  %22 = alloca [16 x i8], align 16
  %23 = alloca [16 x i8], align 16
  %24 = alloca i8, align 1
  %25 = alloca i8, align 1
  %26 = alloca double, align 8
  %27 = alloca [8 x i8], align 1
  %28 = alloca [32 x i8], align 16
  %29 = alloca [16 x i8], align 16
  %.not = icmp eq ptr %0, null
  br i1 %.not, label %960, label %30

30:                                               ; preds = %5
  %31 = getelementptr inbounds i8, ptr %0, i64 56
  %32 = load i32, ptr %31, align 8, !tbaa !5
  %33 = zext i32 %32 to i64
  %34 = tail call noalias ptr @calloc(i64 noundef %33, i64 noundef 4) #10
  %35 = tail call noalias ptr @calloc(i64 noundef %33, i64 noundef 4) #10
  %36 = tail call noalias ptr @calloc(i64 noundef %33, i64 noundef 4) #10
  %.not1017 = icmp eq ptr %4, null
  br i1 %.not1017, label %42, label %37

37:                                               ; preds = %30
  %38 = tail call i32 @fflush(ptr noundef nonnull %4)
  %39 = tail call i32 @setvbuf(ptr noundef nonnull %4, ptr noundef null, i32 noundef 2, i64 noundef 0) #11
  %40 = tail call i32 @fileno(ptr noundef nonnull %4) #11
  %41 = getelementptr inbounds i8, ptr %0, i64 1704
  store i32 %40, ptr %41, align 8, !tbaa !13
  br label %42

42:                                               ; preds = %37, %30
  %43 = getelementptr inbounds i8, ptr %0, i64 122
  %44 = getelementptr inbounds i8, ptr %0, i64 432
  %45 = getelementptr inbounds i8, ptr %0, i64 440
  %46 = getelementptr inbounds i8, ptr %0, i64 408
  %47 = getelementptr inbounds i8, ptr %0, i64 416
  %48 = getelementptr inbounds i8, ptr %0, i64 424
  %49 = getelementptr inbounds i8, ptr %0, i64 96
  %50 = getelementptr inbounds i8, ptr %0, i64 80
  %51 = getelementptr inbounds i8, ptr %0, i64 88
  %.not1087 = icmp eq ptr %1, null
  %52 = getelementptr inbounds i8, ptr %0, i64 104
  %53 = getelementptr inbounds i8, ptr %0, i64 112
  %54 = getelementptr inbounds i8, ptr %11, i64 1
  %55 = getelementptr inbounds i8, ptr %10, i64 1
  %56 = getelementptr inbounds i8, ptr %29, i64 1
  %.not1065 = icmp eq ptr %2, null
  %57 = getelementptr inbounds i8, ptr %23, i64 1
  %58 = getelementptr inbounds i8, ptr %22, i64 1
  %59 = getelementptr inbounds i8, ptr %0, i64 72
  %60 = getelementptr inbounds i8, ptr %27, i64 1
  %61 = getelementptr inbounds i8, ptr %27, i64 2
  %62 = getelementptr inbounds i8, ptr %27, i64 3
  %63 = getelementptr inbounds i8, ptr %27, i64 4
  br label %.outer

.outer:                                           ; preds = %.loopexit1387, %42
  %.0940.ph = phi i32 [ %.12, %.loopexit1387 ], [ 0, %42 ]
  %.0920.ph = phi i32 [ %.10, %.loopexit1387 ], [ 0, %42 ]
  %.0906.ph = phi i64 [ %.2908, %.loopexit1387 ], [ 0, %42 ]
  %.0887.ph = phi i32 [ %.7894, %.loopexit1387 ], [ 0, %42 ]
  %.0872.ph = phi ptr [ %.2874, %.loopexit1387 ], [ null, %42 ]
  %.0866.ph = phi ptr [ %.2868, %.loopexit1387 ], [ null, %42 ]
  %.0863.ph = phi i64 [ %96, %.loopexit1387 ], [ 0, %42 ]
  %.0860.ph = phi i32 [ %.0860.ph1392, %.loopexit1387 ], [ 0, %42 ]
  %.0858.ph = phi i32 [ %950, %.loopexit1387 ], [ 0, %42 ]
  %.0849.ph = phi ptr [ %140, %.loopexit1387 ], [ null, %42 ]
  %.0846.ph = phi i64 [ %.6, %.loopexit1387 ], [ -1, %42 ]
  br label %.outer1390

.outer1390:                                       ; preds = %.outer, %85
  %.0863.ph1391 = phi i64 [ %.0863.ph, %.outer ], [ %87, %85 ]
  %.0860.ph1392 = phi i32 [ %.0860.ph, %.outer ], [ %86, %85 ]
  br label %64

64:                                               ; preds = %.outer1390, %73
  %.0863 = phi i64 [ %74, %73 ], [ %.0863.ph1391, %.outer1390 ]
  %65 = load ptr, ptr %0, align 8, !tbaa !14
  %66 = call i32 @fstReaderFseeko(ptr noundef nonnull %0, ptr noundef %65, i64 noundef %.0863, i32 noundef 0)
  %67 = load ptr, ptr %0, align 8, !tbaa !14
  %68 = call i32 @fgetc(ptr noundef %67)
  %69 = load ptr, ptr %0, align 8, !tbaa !14
  %70 = call i64 @fstReaderUint64(ptr noundef %69)
  switch i32 %68, label %71 [
    i32 -1, label %.thread1152.thread
    i32 255, label %.thread1152.thread
  ]

71:                                               ; preds = %64
  %72 = add nsw i64 %.0863, 1
  switch i32 %68, label %73 [
    i32 8, label %75
    i32 5, label %75
    i32 1, label %75
  ]

73:                                               ; preds = %71
  %74 = add i64 %70, %72
  br label %64

75:                                               ; preds = %71, %71, %71
  %.not1018 = icmp eq i64 %70, 0
  br i1 %.not1018, label %.thread1152.thread, label %76

76:                                               ; preds = %75
  %77 = load ptr, ptr %0, align 8, !tbaa !14
  %78 = call i64 @fstReaderUint64(ptr noundef %77)
  %79 = load ptr, ptr %0, align 8, !tbaa !14
  %80 = call i64 @fstReaderUint64(ptr noundef %79)
  %81 = load i8, ptr %43, align 2
  %.not1019 = icmp sgt i8 %81, -1
  br i1 %.not1019, label %.loopexit1389, label %82

82:                                               ; preds = %76
  %83 = load i64, ptr %44, align 8, !tbaa !15
  %84 = icmp ult i64 %80, %83
  br i1 %84, label %85, label %88

85:                                               ; preds = %82
  %86 = add nsw i32 %.0860.ph1392, 1
  %87 = add i64 %70, %72
  br label %.outer1390

88:                                               ; preds = %82
  %89 = load i64, ptr %45, align 8, !tbaa !16
  %90 = icmp ugt i64 %78, %89
  br i1 %90, label %.thread1152.thread, label %.loopexit1389

.loopexit1389:                                    ; preds = %76, %88
  %91 = load ptr, ptr %0, align 8, !tbaa !14
  %92 = call i64 @fstReaderUint64(ptr noundef %91)
  %93 = add i64 %92, 66
  %94 = call noalias ptr @malloc(i64 noundef %93) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %6) #11
  %95 = load ptr, ptr %0, align 8, !tbaa !14
  %96 = add i64 %70, %72
  %97 = add i64 %96, -24
  %98 = call i32 @fstReaderFseeko(ptr noundef nonnull %0, ptr noundef %95, i64 noundef %97, i32 noundef 0)
  %.not1020 = icmp eq i32 %98, 0
  br i1 %.not1020, label %99, label %.thread1152

99:                                               ; preds = %.loopexit1389
  %100 = load ptr, ptr %0, align 8, !tbaa !14
  %101 = call i64 @fstReaderUint64(ptr noundef %100)
  %102 = load ptr, ptr %0, align 8, !tbaa !14
  %103 = call i64 @fstReaderUint64(ptr noundef %102)
  %104 = load ptr, ptr %0, align 8, !tbaa !14
  %105 = call i64 @fstReaderUint64(ptr noundef %104)
  %106 = icmp ugt i64 %103, %70
  br i1 %106, label %.thread1152, label %107

107:                                              ; preds = %99
  %108 = call noalias ptr @malloc(i64 noundef %101) #12
  %.not1021 = icmp eq ptr %108, null
  br i1 %.not1021, label %.thread1152, label %109

109:                                              ; preds = %107
  store i64 %101, ptr %6, align 8, !tbaa !17
  %110 = load ptr, ptr %0, align 8, !tbaa !14
  %111 = sub nsw i64 -24, %103
  %112 = call i32 @fstReaderFseeko(ptr noundef nonnull %0, ptr noundef %110, i64 noundef %111, i32 noundef 1)
  %.not1022 = icmp eq i64 %101, %103
  br i1 %.not1022, label %122, label %113

113:                                              ; preds = %109
  %114 = call noalias ptr @malloc(i64 noundef %103) #12
  %115 = load ptr, ptr %0, align 8, !tbaa !14
  %116 = call i64 @fstFread(ptr noundef %114, i64 noundef %103, i64 noundef 1, ptr noundef %115)
  %117 = call i32 @uncompress(ptr noundef nonnull %108, ptr noundef nonnull %6, ptr noundef %114, i64 noundef %103) #11
  %.not1023 = icmp eq i32 %117, 0
  br i1 %.not1023, label %121, label %118

118:                                              ; preds = %113
  %119 = load ptr, ptr @stderr, align 8, !tbaa !18
  %120 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %119, ptr noundef nonnull @.str.37, i32 noundef %117) #13
  call void @exit(i32 noundef 255) #14
  unreachable

121:                                              ; preds = %113
  call void @free(ptr noundef %114) #11
  br label %125

122:                                              ; preds = %109
  %123 = load ptr, ptr %0, align 8, !tbaa !14
  %124 = call i64 @fstFread(ptr noundef nonnull %108, i64 noundef %101, i64 noundef 1, ptr noundef %123)
  br label %125

125:                                              ; preds = %122, %121
  call void @free(ptr noundef %.0849.ph) #11
  %.not1024 = icmp ult i64 %105, 2305843009213693952
  br i1 %.not1024, label %127, label %.thread1375

.thread1375:                                      ; preds = %125
  call void @chk_report_abort(ptr noundef nonnull @.str.38)
  %126 = call noalias ptr @calloc(i64 noundef %105, i64 noundef 8) #10
  br label %.lr.ph.preheader

127:                                              ; preds = %125
  %128 = call noalias ptr @calloc(i64 noundef %105, i64 noundef 8) #10
  %.not1285 = icmp eq i64 %105, 0
  br i1 %.not1285, label %._crit_edge, label %.lr.ph.preheader

.lr.ph.preheader:                                 ; preds = %.thread1375, %127
  %129 = phi ptr [ %126, %.thread1375 ], [ %128, %127 ]
  br label %.lr.ph

.lr.ph:                                           ; preds = %.lr.ph.preheader, %.lr.ph
  %130 = phi i64 [ %138, %.lr.ph ], [ 0, %.lr.ph.preheader ]
  %.09611233 = phi ptr [ %136, %.lr.ph ], [ %108, %.lr.ph.preheader ]
  %.09621232 = phi i64 [ %132, %.lr.ph ], [ 0, %.lr.ph.preheader ]
  %.09631231 = phi i32 [ %137, %.lr.ph ], [ 0, %.lr.ph.preheader ]
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %7) #11
  %131 = call i64 @fstGetVarint64(ptr noundef %.09611233, ptr noundef nonnull %7)
  %132 = add i64 %131, %.09621232
  %133 = getelementptr inbounds i64, ptr %129, i64 %130
  store i64 %132, ptr %133, align 8, !tbaa !17
  %134 = load i32, ptr %7, align 4, !tbaa !19
  %135 = sext i32 %134 to i64
  %136 = getelementptr inbounds i8, ptr %.09611233, i64 %135
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %7) #11
  %137 = add i32 %.09631231, 1
  %138 = zext i32 %137 to i64
  %139 = icmp ugt i64 %105, %138
  br i1 %139, label %.lr.ph, label %._crit_edge, !llvm.loop !20

._crit_edge:                                      ; preds = %.lr.ph, %127
  %.not12851378 = phi i1 [ true, %127 ], [ false, %.lr.ph ]
  %140 = phi ptr [ %128, %127 ], [ %129, %.lr.ph ]
  %141 = call i64 @llvm.umax.i64(i64 %105, i64 1)
  %142 = trunc nuw i64 %141 to i32
  %143 = call noalias ptr @calloc(i64 noundef %141, i64 noundef 4) #10
  call void @free(ptr noundef %108) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #11
  %144 = load ptr, ptr %0, align 8, !tbaa !14
  %145 = add nsw i64 %.0863, 33
  %146 = call i32 @fstReaderFseeko(ptr noundef nonnull %0, ptr noundef %144, i64 noundef %145, i32 noundef 0)
  %147 = load ptr, ptr %0, align 8, !tbaa !14
  %148 = call i64 @fstReaderVarint64(ptr noundef %147)
  %149 = load ptr, ptr %0, align 8, !tbaa !14
  %150 = call i64 @fstReaderVarint64(ptr noundef %149)
  %151 = load ptr, ptr %0, align 8, !tbaa !14
  %152 = call i64 @fstReaderVarint64(ptr noundef %151)
  %153 = icmp eq i32 %.0858.ph, 0
  br i1 %153, label %154, label %329

154:                                              ; preds = %._crit_edge
  %155 = load i64, ptr %140, align 8, !tbaa !17
  %156 = icmp ne i64 %78, %155
  %157 = icmp ne i32 %.0860.ph1392, 0
  %or.cond8 = select i1 %156, i1 true, i1 %157
  br i1 %or.cond8, label %158, label %329

158:                                              ; preds = %154
  %159 = call noalias ptr @malloc(i64 noundef %148) #12
  br i1 %.not1017, label %185, label %160

160:                                              ; preds = %158
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %8) #11
  %.not1026 = icmp eq i64 %78, 0
  br i1 %.not1026, label %169, label %161

161:                                              ; preds = %160
  %162 = icmp eq i32 %.0940.ph, 1
  br i1 %162, label %163, label %165

163:                                              ; preds = %161
  %164 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef nonnull dereferenceable(1) %8, i64 noundef 32, ptr noundef nonnull @.str.39) #11
  call void @fstWritex(ptr noundef nonnull %0, ptr noundef nonnull %8, i32 noundef %164)
  br label %165

165:                                              ; preds = %163, %161
  %.1941 = phi i32 [ 2, %163 ], [ %.0940.ph, %161 ]
  %166 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef nonnull dereferenceable(1) %8, i64 noundef 32, ptr noundef nonnull @.str.40, i64 noundef %78) #11
  call void @fstWritex(ptr noundef nonnull %0, ptr noundef nonnull %8, i32 noundef %166)
  %.not1027 = icmp eq i32 %.1941, 0
  br i1 %.not1027, label %167, label %169

167:                                              ; preds = %165
  %168 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef nonnull dereferenceable(1) %8, i64 noundef 32, ptr noundef nonnull @.str.41) #11
  call void @fstWritex(ptr noundef nonnull %0, ptr noundef nonnull %8, i32 noundef %168)
  br label %169

169:                                              ; preds = %165, %167, %160
  %.2942 = phi i32 [ %.1941, %165 ], [ 1, %167 ], [ %.0940.ph, %160 ]
  %170 = load i32, ptr %46, align 8, !tbaa !22
  %.not1028 = icmp eq i32 %170, 0
  %.not1029 = icmp eq i32 %.0920.ph, %170
  %or.cond = select i1 %.not1028, i1 true, i1 %.not1029
  br i1 %or.cond, label %184, label %171

171:                                              ; preds = %169
  %172 = load ptr, ptr %47, align 8, !tbaa !23
  %173 = zext i32 %.0920.ph to i64
  %174 = getelementptr inbounds i64, ptr %172, i64 %173
  %175 = load i64, ptr %174, align 8, !tbaa !17
  %176 = icmp eq i64 %78, %175
  br i1 %176, label %177, label %184

177:                                              ; preds = %171
  %178 = load ptr, ptr %48, align 8, !tbaa !24
  %179 = add i32 %.0920.ph, 1
  %180 = getelementptr inbounds i8, ptr %178, i64 %173
  %181 = load i8, ptr %180, align 1, !tbaa !25
  %.not1030 = icmp eq i8 %181, 0
  %182 = select i1 %.not1030, ptr @.str.44, ptr @.str.43
  %183 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef nonnull dereferenceable(1) %8, i64 noundef 32, ptr noundef nonnull @.str.42, ptr noundef nonnull %182) #11
  call void @fstWritex(ptr noundef nonnull %0, ptr noundef nonnull %8, i32 noundef %183)
  br label %184

184:                                              ; preds = %171, %177, %169
  %.1921 = phi i32 [ %179, %177 ], [ %.0920.ph, %171 ], [ %.0920.ph, %169 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %8) #11
  br label %185

185:                                              ; preds = %184, %158
  %.3943 = phi i32 [ %.2942, %184 ], [ %.0940.ph, %158 ]
  %.2922 = phi i32 [ %.1921, %184 ], [ %.0920.ph, %158 ]
  %186 = icmp eq i64 %148, %150
  br i1 %186, label %187, label %190

187:                                              ; preds = %185
  %188 = load ptr, ptr %0, align 8, !tbaa !14
  %189 = call i64 @fstFread(ptr noundef %159, i64 noundef %148, i64 noundef 1, ptr noundef %188)
  br label %199

190:                                              ; preds = %185
  %191 = call noalias ptr @malloc(i64 noundef %150) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %9) #11
  store i64 %148, ptr %9, align 8, !tbaa !17
  %192 = load ptr, ptr %0, align 8, !tbaa !14
  %193 = call i64 @fstFread(ptr noundef %191, i64 noundef %150, i64 noundef 1, ptr noundef %192)
  %194 = call i32 @uncompress(ptr noundef %159, ptr noundef nonnull %9, ptr noundef %191, i64 noundef %150) #11
  %.not1031 = icmp eq i32 %194, 0
  br i1 %.not1031, label %198, label %195

195:                                              ; preds = %190
  %196 = load ptr, ptr @stderr, align 8, !tbaa !18
  %197 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %196, ptr noundef nonnull @.str.45, i32 noundef %194) #13
  call void @exit(i32 noundef 255) #14
  unreachable

198:                                              ; preds = %190
  call void @free(ptr noundef %191) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #11
  br label %199

199:                                              ; preds = %198, %187
  %.not1286 = icmp eq i64 %152, 0
  br i1 %.not1286, label %._crit_edge1242, label %.lr.ph1241

.lr.ph1241:                                       ; preds = %199, %318
  %200 = phi i64 [ %324, %318 ], [ 0, %199 ]
  %.08791238 = phi i32 [ %323, %318 ], [ 0, %199 ]
  %.09641237 = phi i32 [ %322, %318 ], [ 0, %199 ]
  %201 = lshr i32 %.08791238, 3
  %202 = and i32 %.08791238, 7
  %203 = load ptr, ptr %49, align 8, !tbaa !26
  %204 = zext nneg i32 %201 to i64
  %205 = getelementptr inbounds i8, ptr %203, i64 %204
  %206 = load i8, ptr %205, align 1, !tbaa !25
  %207 = zext i8 %206 to i32
  %208 = shl nuw nsw i32 1, %202
  %209 = and i32 %208, %207
  %.not1080 = icmp eq i32 %209, 0
  br i1 %.not1080, label %318, label %210

210:                                              ; preds = %.lr.ph1241
  %211 = load ptr, ptr %50, align 8, !tbaa !27
  %212 = getelementptr inbounds i32, ptr %211, i64 %200
  %213 = load i32, ptr %212, align 4, !tbaa !19
  %214 = icmp ult i32 %213, 2
  br i1 %214, label %215, label %235

215:                                              ; preds = %210
  %216 = icmp eq i32 %213, 1
  br i1 %216, label %217, label %318

217:                                              ; preds = %215
  %218 = zext i32 %.09641237 to i64
  %219 = getelementptr inbounds i8, ptr %159, i64 %218
  %220 = load i8, ptr %219, align 1, !tbaa !25
  br i1 %.not1087, label %227, label %221

221:                                              ; preds = %217
  %222 = load ptr, ptr %53, align 8, !tbaa !28
  store i8 %220, ptr %222, align 1, !tbaa !25
  %223 = load ptr, ptr %53, align 8, !tbaa !28
  %224 = getelementptr inbounds i8, ptr %223, i64 1
  store i8 0, ptr %224, align 1, !tbaa !25
  %225 = add i32 %.08791238, 1
  %226 = load ptr, ptr %53, align 8, !tbaa !28
  call void %1(ptr noundef %3, i64 noundef %78, i32 noundef %225, ptr noundef %226) #11
  br label %318

227:                                              ; preds = %217
  br i1 %.not1017, label %318, label %228

228:                                              ; preds = %227
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %10) #11
  %229 = add i32 %.08791238, 1
  %230 = call i32 @fstVcdIDForFwrite(ptr noundef nonnull %55, i32 noundef %229)
  store i8 %220, ptr %10, align 16, !tbaa !25
  %231 = add nsw i32 %230, 1
  %232 = sext i32 %231 to i64
  %233 = getelementptr inbounds [16 x i8], ptr %10, i64 0, i64 %232
  store i8 10, ptr %233, align 1, !tbaa !25
  %234 = add nsw i32 %230, 2
  call void @fstWritex(ptr noundef nonnull %0, ptr noundef nonnull %10, i32 noundef %234)
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %10) #11
  br label %318

235:                                              ; preds = %210
  %236 = load ptr, ptr %51, align 8, !tbaa !29
  %237 = getelementptr inbounds i8, ptr %236, i64 %200
  %238 = load i8, ptr %237, align 1, !tbaa !25
  %.not1081 = icmp eq i8 %238, 3
  br i1 %.not1081, label %281, label %239

239:                                              ; preds = %235
  br i1 %.not1087, label %258, label %240

240:                                              ; preds = %239
  %241 = load i32, ptr %52, align 8, !tbaa !30
  %242 = icmp ugt i32 %213, %241
  br i1 %242, label %243, label %244

243:                                              ; preds = %240
  call void @chk_report_abort(ptr noundef nonnull @.str.46)
  %.pre = load ptr, ptr %50, align 8, !tbaa !27
  %.phi.trans.insert = getelementptr inbounds i32, ptr %.pre, i64 %200
  %.pre1365 = load i32, ptr %.phi.trans.insert, align 4, !tbaa !19
  br label %244

244:                                              ; preds = %243, %240
  %245 = phi i32 [ %.pre1365, %243 ], [ %213, %240 ]
  %246 = load ptr, ptr %53, align 8, !tbaa !28
  %247 = zext i32 %.09641237 to i64
  %248 = getelementptr inbounds i8, ptr %159, i64 %247
  %249 = zext i32 %245 to i64
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %246, ptr align 1 %248, i64 %249, i1 false)
  %250 = load ptr, ptr %53, align 8, !tbaa !28
  %251 = load ptr, ptr %50, align 8, !tbaa !27
  %252 = getelementptr inbounds i32, ptr %251, i64 %200
  %253 = load i32, ptr %252, align 4, !tbaa !19
  %254 = zext i32 %253 to i64
  %255 = getelementptr inbounds i8, ptr %250, i64 %254
  store i8 0, ptr %255, align 1, !tbaa !25
  %256 = add i32 %.08791238, 1
  %257 = load ptr, ptr %53, align 8, !tbaa !28
  call void %1(ptr noundef %3, i64 noundef %78, i32 noundef %256, ptr noundef %257) #11
  br label %318

258:                                              ; preds = %239
  br i1 %.not1017, label %318, label %259

259:                                              ; preds = %258
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %11) #11
  %260 = add i32 %.08791238, 1
  %261 = call i32 @fstVcdIDForFwrite(ptr noundef nonnull %54, i32 noundef %260)
  %262 = load ptr, ptr %51, align 8, !tbaa !29
  %263 = getelementptr inbounds i8, ptr %262, i64 %200
  %264 = load i8, ptr %263, align 1, !tbaa !25
  %.not1088 = icmp eq i8 %264, 18
  %265 = select i1 %.not1088, i8 112, i8 98
  store i8 %265, ptr %11, align 16, !tbaa !25
  call void @fstWritex(ptr noundef nonnull %0, ptr noundef nonnull %11, i32 noundef 1)
  %266 = load ptr, ptr %50, align 8, !tbaa !27
  %267 = getelementptr inbounds i32, ptr %266, i64 %200
  %268 = load i32, ptr %267, align 4, !tbaa !19
  %269 = add i32 %268, %.09641237
  %270 = zext i32 %269 to i64
  %271 = icmp ult i64 %148, %270
  br i1 %271, label %272, label %273

272:                                              ; preds = %259
  call void @chk_report_abort(ptr noundef nonnull @.str.47)
  %.pre1366 = load ptr, ptr %50, align 8, !tbaa !27
  %.phi.trans.insert1367 = getelementptr inbounds i32, ptr %.pre1366, i64 %200
  %.pre1368 = load i32, ptr %.phi.trans.insert1367, align 4, !tbaa !19
  br label %273

273:                                              ; preds = %272, %259
  %274 = phi i32 [ %.pre1368, %272 ], [ %268, %259 ]
  %275 = zext i32 %.09641237 to i64
  %276 = getelementptr inbounds i8, ptr %159, i64 %275
  call void @fstWritex(ptr noundef nonnull %0, ptr noundef %276, i32 noundef %274)
  store i8 32, ptr %11, align 16, !tbaa !25
  %277 = add nsw i32 %261, 1
  %278 = sext i32 %277 to i64
  %279 = getelementptr inbounds [16 x i8], ptr %11, i64 0, i64 %278
  store i8 10, ptr %279, align 1, !tbaa !25
  %280 = add nsw i32 %261, 2
  call void @fstWritex(ptr noundef nonnull %0, ptr noundef nonnull %11, i32 noundef %280)
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %11) #11
  br label %318

281:                                              ; preds = %235
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %12) #11
  %282 = zext i32 %.09641237 to i64
  %283 = getelementptr inbounds i8, ptr %159, i64 %282
  br i1 %.not1087, label %306, label %284

284:                                              ; preds = %281
  %285 = load i8, ptr %43, align 2
  %286 = and i8 %285, 4
  %.not1084 = icmp eq i8 %286, 0
  %287 = and i8 %285, 2
  %.not1085 = icmp eq i8 %287, 0
  br i1 %.not1084, label %292, label %288

288:                                              ; preds = %284
  br i1 %.not1085, label %.preheader1187.preheader, label %.loopexit1188

.preheader1187.preheader:                         ; preds = %288
  %289 = load <8 x i8>, ptr %283, align 1, !tbaa !25
  %290 = shufflevector <8 x i8> %289, <8 x i8> poison, <8 x i32> <i32 7, i32 6, i32 5, i32 4, i32 3, i32 2, i32 1, i32 0>
  store <8 x i8> %290, ptr %12, align 8, !tbaa !25
  br label %.loopexit1188

.loopexit1188:                                    ; preds = %.preheader1187.preheader, %288
  %.0968 = phi ptr [ %283, %288 ], [ %12, %.preheader1187.preheader ]
  %291 = add i32 %.08791238, 1
  call void %1(ptr noundef %3, i64 noundef %78, i32 noundef %291, ptr noundef %.0968) #11
  br label %317

292:                                              ; preds = %284
  br i1 %.not1085, label %.preheader1185.preheader, label %295

.preheader1185.preheader:                         ; preds = %292
  %293 = load <8 x i8>, ptr %283, align 1, !tbaa !25
  %294 = shufflevector <8 x i8> %293, <8 x i8> poison, <8 x i32> <i32 7, i32 6, i32 5, i32 4, i32 3, i32 2, i32 1, i32 0>
  store <8 x i8> %294, ptr %12, align 8, !tbaa !25
  %.pre1369.cast = bitcast <8 x i8> %294 to double
  br label %.loopexit1186

295:                                              ; preds = %292
  %296 = load i64, ptr %283, align 1
  store i64 %296, ptr %12, align 8
  %297 = bitcast i64 %296 to double
  br label %.loopexit1186

.loopexit1186:                                    ; preds = %.preheader1185.preheader, %295
  %298 = phi double [ %.pre1369.cast, %.preheader1185.preheader ], [ %297, %295 ]
  %299 = load ptr, ptr %53, align 8, !tbaa !28
  %300 = load i32, ptr %52, align 8, !tbaa !30
  %301 = add i32 %300, 1
  %302 = zext i32 %301 to i64
  %303 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %299, i64 noundef %302, ptr noundef nonnull @.str.48, double noundef %298) #11
  %304 = add i32 %.08791238, 1
  %305 = load ptr, ptr %53, align 8, !tbaa !28
  call void %1(ptr noundef %3, i64 noundef %78, i32 noundef %304, ptr noundef %305) #11
  br label %317

306:                                              ; preds = %281
  br i1 %.not1017, label %317, label %307

307:                                              ; preds = %306
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %13) #11
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %14) #11
  %308 = load i8, ptr %43, align 2
  %309 = and i8 %308, 2
  %.not1083 = icmp eq i8 %309, 0
  br i1 %.not1083, label %.preheader1183.preheader, label %312

.preheader1183.preheader:                         ; preds = %307
  %310 = load i64, ptr %283, align 1, !tbaa !25
  %311 = call i64 @llvm.bswap.i64(i64 %310)
  br label %.loopexit1184

312:                                              ; preds = %307
  %313 = load i64, ptr %283, align 1
  br label %.loopexit1184

.loopexit1184:                                    ; preds = %.preheader1183.preheader, %312
  %storemerge = phi i64 [ %313, %312 ], [ %311, %.preheader1183.preheader ]
  store i64 %storemerge, ptr %12, align 8
  %314 = add i32 %.08791238, 1
  call void @fstVcdID(ptr noundef nonnull %13, i32 noundef %314)
  %315 = load double, ptr %12, align 8, !tbaa !31
  %316 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef nonnull dereferenceable(1) %14, i64 noundef 64, ptr noundef nonnull @.str.49, double noundef %315, ptr noundef nonnull %13) #11
  call void @fstWritex(ptr noundef nonnull %0, ptr noundef nonnull %14, i32 noundef %316)
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %14) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %13) #11
  br label %317

317:                                              ; preds = %306, %.loopexit1184, %.loopexit1188, %.loopexit1186
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #11
  br label %318

318:                                              ; preds = %221, %228, %227, %215, %244, %273, %258, %317, %.lr.ph1241
  %319 = load ptr, ptr %50, align 8, !tbaa !27
  %320 = getelementptr inbounds i32, ptr %319, i64 %200
  %321 = load i32, ptr %320, align 4, !tbaa !19
  %322 = add i32 %321, %.09641237
  %323 = add i32 %.08791238, 1
  %324 = zext i32 %323 to i64
  %325 = icmp ugt i64 %152, %324
  br i1 %325, label %.lr.ph1241, label %._crit_edge1242, !llvm.loop !33

._crit_edge1242:                                  ; preds = %318, %199
  call void @free(ptr noundef %159) #11
  %326 = load ptr, ptr %0, align 8, !tbaa !14
  %327 = sub nsw i64 0, %150
  %328 = call i32 @fstReaderFseeko(ptr noundef nonnull %0, ptr noundef %326, i64 noundef %327, i32 noundef 1)
  br label %329

329:                                              ; preds = %._crit_edge1242, %154, %._crit_edge
  %.4944 = phi i32 [ %.3943, %._crit_edge1242 ], [ %.0940.ph, %154 ], [ %.0940.ph, %._crit_edge ]
  %.3923 = phi i32 [ %.2922, %._crit_edge1242 ], [ %.0920.ph, %154 ], [ %.0920.ph, %._crit_edge ]
  %330 = load ptr, ptr %0, align 8, !tbaa !14
  %331 = call i32 @fstReaderFseeko(ptr noundef nonnull %0, ptr noundef %330, i64 noundef %150, i32 noundef 1)
  %332 = load ptr, ptr %0, align 8, !tbaa !14
  %333 = call i64 @fstReaderVarint64(ptr noundef %332)
  %334 = load ptr, ptr %0, align 8, !tbaa !14
  %335 = call i64 @ftello(ptr noundef %334)
  %336 = load ptr, ptr %0, align 8, !tbaa !14
  %337 = call i32 @fgetc(ptr noundef %336)
  %338 = sub i64 %97, %103
  %339 = add i64 %338, -8
  %340 = load ptr, ptr %0, align 8, !tbaa !14
  %341 = call i32 @fstReaderFseeko(ptr noundef nonnull %0, ptr noundef %340, i64 noundef %339, i32 noundef 0)
  %342 = load ptr, ptr %0, align 8, !tbaa !14
  %343 = call i64 @fstReaderUint64(ptr noundef %342)
  %344 = sub nsw i64 %339, %343
  %345 = call noalias ptr @malloc(i64 noundef %343) #12
  %.not1032 = icmp eq ptr %345, null
  br i1 %.not1032, label %.loopexit1387, label %346

346:                                              ; preds = %329
  %347 = load ptr, ptr %0, align 8, !tbaa !14
  %348 = call i32 @fstReaderFseeko(ptr noundef nonnull %0, ptr noundef %347, i64 noundef %344, i32 noundef 0)
  %349 = load ptr, ptr %0, align 8, !tbaa !14
  %350 = call i64 @fstFread(ptr noundef nonnull %345, i64 noundef %343, i64 noundef 1, ptr noundef %349)
  %351 = icmp ugt i64 %333, %.0906.ph
  br i1 %351, label %352, label %362

352:                                              ; preds = %346
  call void @free(ptr noundef %.0866.ph) #11
  call void @free(ptr noundef %.0872.ph) #11
  %353 = add i64 %333, 1
  %.not1033 = icmp eq i64 %353, 0
  br i1 %.not1033, label %.thread1104, label %354

.thread1104:                                      ; preds = %352
  call void @chk_report_abort(ptr noundef nonnull @.str.50)
  br label %.thread1107

354:                                              ; preds = %352
  %.not1034 = icmp ult i64 %353, 2305843009213693952
  br i1 %.not1034, label %.thread1107, label %356

.thread1107:                                      ; preds = %.thread1104, %354
  %355 = call noalias ptr @calloc(i64 noundef %353, i64 noundef 8) #10
  br label %359

356:                                              ; preds = %354
  call void @chk_report_abort(ptr noundef nonnull @.str.50)
  %357 = call noalias ptr @calloc(i64 noundef %353, i64 noundef 8) #10
  %.not1035 = icmp ult i64 %353, 4611686018427387904
  br i1 %.not1035, label %359, label %358

358:                                              ; preds = %356
  call void @chk_report_abort(ptr noundef nonnull @.str.50)
  br label %359

359:                                              ; preds = %.thread1107, %358, %356
  %360 = phi ptr [ %355, %.thread1107 ], [ %357, %358 ], [ %357, %356 ]
  %361 = call noalias ptr @calloc(i64 noundef %353, i64 noundef 4) #10
  br label %362

362:                                              ; preds = %359, %346
  %.1907 = phi i64 [ %333, %359 ], [ %.0906.ph, %346 ]
  %.1873 = phi ptr [ %361, %359 ], [ %.0872.ph, %346 ]
  %.1867 = phi ptr [ %360, %359 ], [ %.0866.ph, %346 ]
  %363 = icmp ne ptr %.1867, null
  %364 = icmp ne ptr %.1873, null
  %or.cond10 = select i1 %363, i1 %364, i1 false
  br i1 %or.cond10, label %365, label %.loopexit1387

365:                                              ; preds = %362
  %366 = icmp eq i32 %68, 8
  %367 = getelementptr inbounds i8, ptr %345, i64 %343
  br i1 %366, label %.preheader1191, label %.preheader1193

.preheader1191:                                   ; preds = %365, %.loopexit1181
  %.0965 = phi i32 [ %.2967, %.loopexit1181 ], [ 0, %365 ]
  %.0901 = phi i64 [ %.2903, %.loopexit1181 ], [ 0, %365 ]
  %.1888 = phi i32 [ %.3890, %.loopexit1181 ], [ %.0887.ph, %365 ]
  %.1880 = phi i32 [ %.4883, %.loopexit1181 ], [ 0, %365 ]
  %.0876 = phi ptr [ %439, %.loopexit1181 ], [ %345, %365 ]
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %15) #11
  %368 = load i8, ptr %.0876, align 1, !tbaa !25
  %369 = and i8 %368, 1
  %.not1040 = icmp eq i8 %369, 0
  br i1 %.not1040, label %388, label %370

370:                                              ; preds = %.preheader1191
  %371 = call i64 @fstGetSVarint64(ptr noundef nonnull %.0876, ptr noundef nonnull %15)
  %372 = ashr i64 %371, 1
  %373 = icmp sgt i64 %372, 0
  %374 = zext i32 %.1880 to i64
  %375 = getelementptr inbounds i64, ptr %.1867, i64 %374
  br i1 %373, label %376, label %384

376:                                              ; preds = %370
  %377 = add i64 %372, %.0901
  store i64 %377, ptr %375, align 8, !tbaa !17
  %.not1041 = icmp eq i32 %.1880, 0
  br i1 %.not1041, label %387, label %378

378:                                              ; preds = %376
  %379 = zext i32 %.1888 to i64
  %380 = getelementptr inbounds i64, ptr %.1867, i64 %379
  %381 = load i64, ptr %380, align 8, !tbaa !17
  %382 = sub i64 %377, %381
  %383 = trunc i64 %382 to i32
  br label %.sink.split

384:                                              ; preds = %370
  %.not1471 = icmp ult i64 %371, 2
  store i64 0, ptr %375, align 8, !tbaa !17
  %385 = trunc i64 %372 to i32
  %spec.select1469 = select i1 %.not1471, i32 %.0965, i32 %385
  %spec.select1470 = select i1 %.not1471, i32 %.0965, i32 %385
  br label %.sink.split

.sink.split:                                      ; preds = %384, %378
  %.sink1461 = phi i64 [ %379, %378 ], [ %374, %384 ]
  %.sink = phi i32 [ %383, %378 ], [ %spec.select1469, %384 ]
  %.1966.ph = phi i32 [ %.0965, %378 ], [ %spec.select1470, %384 ]
  %.1902.ph = phi i64 [ %377, %378 ], [ %.0901, %384 ]
  %.2889.ph = phi i32 [ %.1880, %378 ], [ %.1888, %384 ]
  %386 = getelementptr inbounds i32, ptr %.1873, i64 %.sink1461
  store i32 %.sink, ptr %386, align 4, !tbaa !19
  br label %387

387:                                              ; preds = %.sink.split, %376
  %.1966 = phi i32 [ %.0965, %376 ], [ %.1966.ph, %.sink.split ]
  %.1902 = phi i64 [ %377, %376 ], [ %.1902.ph, %.sink.split ]
  %.2889 = phi i32 [ 0, %376 ], [ %.2889.ph, %.sink.split ]
  %.2881 = add i32 %.1880, 1
  br label %.loopexit1181

388:                                              ; preds = %.preheader1191
  %389 = call i32 @fstGetVarint32(ptr noundef nonnull %.0876, ptr noundef nonnull %15)
  %390 = lshr i32 %389, 1
  %391 = add i32 %.1880, -1
  %392 = add i32 %391, %390
  %393 = zext i32 %392 to i64
  %394 = icmp ult i64 %333, %393
  br i1 %394, label %395, label %396

395:                                              ; preds = %388
  call void @chk_report_abort(ptr noundef nonnull @.str.51)
  br label %396

396:                                              ; preds = %395, %388
  %.not1288 = icmp ult i32 %389, 2
  br i1 %.not1288, label %.loopexit1181, label %.lr.ph1250.preheader

.lr.ph1250.preheader:                             ; preds = %396
  %397 = add i32 %.1880, %390
  %min.iters.check = icmp ult i32 %389, 20
  %398 = sub nsw i32 0, %390
  %399 = icmp ugt i32 %.1880, %398
  %or.cond1549 = select i1 %min.iters.check, i1 true, i1 %399
  br i1 %or.cond1549, label %.lr.ph1250.preheader1552, label %vector.ph

vector.ph:                                        ; preds = %.lr.ph1250.preheader
  %n.vec = and i32 %390, 2147483644
  %ind.end = add i32 %.1880, %n.vec
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i32 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %offset.idx = add i32 %.1880, %index
  %400 = zext i32 %offset.idx to i64
  %401 = getelementptr inbounds i64, ptr %.1867, i64 %400
  %402 = getelementptr inbounds i8, ptr %401, i64 16
  store <2 x i64> zeroinitializer, ptr %401, align 8, !tbaa !17
  store <2 x i64> zeroinitializer, ptr %402, align 8, !tbaa !17
  %index.next = add nuw i32 %index, 4
  %403 = icmp eq i32 %index.next, %n.vec
  br i1 %403, label %middle.block, label %vector.body, !llvm.loop !34

middle.block:                                     ; preds = %vector.body
  %cmp.n = icmp eq i32 %390, %n.vec
  br i1 %cmp.n, label %.loopexit1181, label %.lr.ph1250.preheader1552

.lr.ph1250.preheader1552:                         ; preds = %middle.block, %.lr.ph1250.preheader
  %.38821248.ph = phi i32 [ %.1880, %.lr.ph1250.preheader ], [ %ind.end, %middle.block ]
  %404 = add i32 %.1880, %390
  %405 = sub i32 %404, %.38821248.ph
  %406 = add i32 %.1880, -1
  %407 = add i32 %406, %390
  %408 = sub i32 %407, %.38821248.ph
  %xtraiter1616 = and i32 %405, 7
  %lcmp.mod1617.not = icmp eq i32 %xtraiter1616, 0
  br i1 %lcmp.mod1617.not, label %.lr.ph1250.prol.loopexit, label %.lr.ph1250.prol

.lr.ph1250.prol:                                  ; preds = %.lr.ph1250.preheader1552, %.lr.ph1250.prol
  %.38821248.prol = phi i32 [ %409, %.lr.ph1250.prol ], [ %.38821248.ph, %.lr.ph1250.preheader1552 ]
  %prol.iter1618 = phi i32 [ %prol.iter1618.next, %.lr.ph1250.prol ], [ 0, %.lr.ph1250.preheader1552 ]
  %409 = add i32 %.38821248.prol, 1
  %410 = zext i32 %.38821248.prol to i64
  %411 = getelementptr inbounds i64, ptr %.1867, i64 %410
  store i64 0, ptr %411, align 8, !tbaa !17
  %prol.iter1618.next = add i32 %prol.iter1618, 1
  %prol.iter1618.cmp.not = icmp eq i32 %prol.iter1618.next, %xtraiter1616
  br i1 %prol.iter1618.cmp.not, label %.lr.ph1250.prol.loopexit, label %.lr.ph1250.prol, !llvm.loop !37

.lr.ph1250.prol.loopexit:                         ; preds = %.lr.ph1250.prol, %.lr.ph1250.preheader1552
  %.38821248.unr = phi i32 [ %.38821248.ph, %.lr.ph1250.preheader1552 ], [ %409, %.lr.ph1250.prol ]
  %412 = icmp ult i32 %408, 7
  br i1 %412, label %.loopexit1181, label %.lr.ph1250

.lr.ph1250:                                       ; preds = %.lr.ph1250.prol.loopexit, %.lr.ph1250
  %.38821248 = phi i32 [ %434, %.lr.ph1250 ], [ %.38821248.unr, %.lr.ph1250.prol.loopexit ]
  %413 = add i32 %.38821248, 1
  %414 = zext i32 %.38821248 to i64
  %415 = getelementptr inbounds i64, ptr %.1867, i64 %414
  store i64 0, ptr %415, align 8, !tbaa !17
  %416 = add i32 %.38821248, 2
  %417 = zext i32 %413 to i64
  %418 = getelementptr inbounds i64, ptr %.1867, i64 %417
  store i64 0, ptr %418, align 8, !tbaa !17
  %419 = add i32 %.38821248, 3
  %420 = zext i32 %416 to i64
  %421 = getelementptr inbounds i64, ptr %.1867, i64 %420
  store i64 0, ptr %421, align 8, !tbaa !17
  %422 = add i32 %.38821248, 4
  %423 = zext i32 %419 to i64
  %424 = getelementptr inbounds i64, ptr %.1867, i64 %423
  store i64 0, ptr %424, align 8, !tbaa !17
  %425 = add i32 %.38821248, 5
  %426 = zext i32 %422 to i64
  %427 = getelementptr inbounds i64, ptr %.1867, i64 %426
  store i64 0, ptr %427, align 8, !tbaa !17
  %428 = add i32 %.38821248, 6
  %429 = zext i32 %425 to i64
  %430 = getelementptr inbounds i64, ptr %.1867, i64 %429
  store i64 0, ptr %430, align 8, !tbaa !17
  %431 = add i32 %.38821248, 7
  %432 = zext i32 %428 to i64
  %433 = getelementptr inbounds i64, ptr %.1867, i64 %432
  store i64 0, ptr %433, align 8, !tbaa !17
  %434 = add i32 %.38821248, 8
  %435 = zext i32 %431 to i64
  %436 = getelementptr inbounds i64, ptr %.1867, i64 %435
  store i64 0, ptr %436, align 8, !tbaa !17
  %exitcond1335.not.7 = icmp eq i32 %434, %397
  br i1 %exitcond1335.not.7, label %.loopexit1181, label %.lr.ph1250, !llvm.loop !39

.loopexit1181:                                    ; preds = %.lr.ph1250.prol.loopexit, %.lr.ph1250, %middle.block, %396, %387
  %.2967 = phi i32 [ %.1966, %387 ], [ %.0965, %396 ], [ %.0965, %middle.block ], [ %.0965, %.lr.ph1250 ], [ %.0965, %.lr.ph1250.prol.loopexit ]
  %.2903 = phi i64 [ %.1902, %387 ], [ %.0901, %396 ], [ %.0901, %middle.block ], [ %.0901, %.lr.ph1250 ], [ %.0901, %.lr.ph1250.prol.loopexit ]
  %.3890 = phi i32 [ %.2889, %387 ], [ %.1888, %396 ], [ %.1888, %middle.block ], [ %.1888, %.lr.ph1250 ], [ %.1888, %.lr.ph1250.prol.loopexit ]
  %.4883 = phi i32 [ %.2881, %387 ], [ %.1880, %396 ], [ %397, %middle.block ], [ %397, %.lr.ph1250 ], [ %397, %.lr.ph1250.prol.loopexit ]
  %437 = load i32, ptr %15, align 4, !tbaa !19
  %438 = sext i32 %437 to i64
  %439 = getelementptr inbounds i8, ptr %.0876, i64 %438
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %15) #11
  %.not1042 = icmp eq ptr %439, %367
  br i1 %.not1042, label %.loopexit1192, label %.preheader1191, !llvm.loop !40

.preheader1193:                                   ; preds = %365, %.loopexit1182
  %.3904 = phi i64 [ %.4905, %.loopexit1182 ], [ 0, %365 ]
  %.4891 = phi i32 [ %.5892, %.loopexit1182 ], [ %.0887.ph, %365 ]
  %.5884 = phi i32 [ %.7886, %.loopexit1182 ], [ 0, %365 ]
  %.1877 = phi ptr [ %518, %.loopexit1182 ], [ %345, %365 ]
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %16) #11
  %440 = call i32 @fstGetVarint32(ptr noundef %.1877, ptr noundef nonnull %16)
  %441 = zext i32 %440 to i64
  %.not1036 = icmp eq i32 %440, 0
  br i1 %.not1036, label %442, label %452

442:                                              ; preds = %.preheader1193
  %443 = load i32, ptr %16, align 4, !tbaa !19
  %444 = sext i32 %443 to i64
  %445 = getelementptr inbounds i8, ptr %.1877, i64 %444
  %446 = call i32 @fstGetVarint32(ptr noundef %445, ptr noundef nonnull %16)
  %447 = zext i32 %.5884 to i64
  %448 = getelementptr inbounds i64, ptr %.1867, i64 %447
  store i64 0, ptr %448, align 8, !tbaa !17
  %449 = sub i32 0, %446
  %450 = getelementptr inbounds i32, ptr %.1873, i64 %447
  store i32 %449, ptr %450, align 4, !tbaa !19
  %451 = add i32 %.5884, 1
  br label %.loopexit1182

452:                                              ; preds = %.preheader1193
  %453 = and i64 %441, 1
  %.not1037 = icmp eq i64 %453, 0
  br i1 %.not1037, label %468, label %454

454:                                              ; preds = %452
  %455 = lshr i64 %441, 1
  %456 = add i64 %455, %.3904
  %457 = zext i32 %.5884 to i64
  %458 = getelementptr inbounds i64, ptr %.1867, i64 %457
  store i64 %456, ptr %458, align 8, !tbaa !17
  %.not1038 = icmp eq i32 %.5884, 0
  br i1 %.not1038, label %466, label %459

459:                                              ; preds = %454
  %460 = zext i32 %.4891 to i64
  %461 = getelementptr inbounds i64, ptr %.1867, i64 %460
  %462 = load i64, ptr %461, align 8, !tbaa !17
  %463 = sub i64 %456, %462
  %464 = trunc i64 %463 to i32
  %465 = getelementptr inbounds i32, ptr %.1873, i64 %460
  store i32 %464, ptr %465, align 4, !tbaa !19
  br label %466

466:                                              ; preds = %459, %454
  %467 = add i32 %.5884, 1
  br label %.loopexit1182

468:                                              ; preds = %452
  %469 = lshr i32 %440, 1
  %470 = add i32 %.5884, -1
  %471 = add i32 %470, %469
  %472 = zext i32 %471 to i64
  %473 = icmp ult i64 %333, %472
  br i1 %473, label %474, label %475

474:                                              ; preds = %468
  call void @chk_report_abort(ptr noundef nonnull @.str.51)
  br label %475

475:                                              ; preds = %474, %468
  %.not1287 = icmp eq i32 %440, 1
  br i1 %.not1287, label %.loopexit1182, label %.lr.ph1246.preheader

.lr.ph1246.preheader:                             ; preds = %475
  %umax = call i32 @llvm.umax.i32(i32 %469, i32 1)
  %476 = add i32 %.5884, %umax
  %min.iters.check1537 = icmp ult i32 %440, 20
  %477 = sub nsw i32 0, %umax
  %478 = icmp ugt i32 %.5884, %477
  %or.cond1551 = select i1 %min.iters.check1537, i1 true, i1 %478
  br i1 %or.cond1551, label %.lr.ph1246.preheader1553, label %vector.ph1538

vector.ph1538:                                    ; preds = %.lr.ph1246.preheader
  %n.vec1540 = and i32 %umax, 2147483644
  %ind.end1541 = add i32 %.5884, %n.vec1540
  br label %vector.body1543

vector.body1543:                                  ; preds = %vector.body1543, %vector.ph1538
  %index1544 = phi i32 [ 0, %vector.ph1538 ], [ %index.next1546, %vector.body1543 ]
  %offset.idx1545 = add i32 %.5884, %index1544
  %479 = zext i32 %offset.idx1545 to i64
  %480 = getelementptr inbounds i64, ptr %.1867, i64 %479
  %481 = getelementptr inbounds i8, ptr %480, i64 16
  store <2 x i64> zeroinitializer, ptr %480, align 8, !tbaa !17
  store <2 x i64> zeroinitializer, ptr %481, align 8, !tbaa !17
  %index.next1546 = add nuw i32 %index1544, 4
  %482 = icmp eq i32 %index.next1546, %n.vec1540
  br i1 %482, label %middle.block1535, label %vector.body1543, !llvm.loop !41

middle.block1535:                                 ; preds = %vector.body1543
  %cmp.n1547 = icmp eq i32 %469, %n.vec1540
  br i1 %cmp.n1547, label %.loopexit1182, label %.lr.ph1246.preheader1553

.lr.ph1246.preheader1553:                         ; preds = %middle.block1535, %.lr.ph1246.preheader
  %.68851244.ph = phi i32 [ %.5884, %.lr.ph1246.preheader ], [ %ind.end1541, %middle.block1535 ]
  %483 = add i32 %.5884, %umax
  %484 = sub i32 %483, %.68851244.ph
  %485 = add i32 %.5884, -1
  %486 = add i32 %485, %umax
  %487 = sub i32 %486, %.68851244.ph
  %xtraiter = and i32 %484, 7
  %lcmp.mod.not = icmp eq i32 %xtraiter, 0
  br i1 %lcmp.mod.not, label %.lr.ph1246.prol.loopexit, label %.lr.ph1246.prol

.lr.ph1246.prol:                                  ; preds = %.lr.ph1246.preheader1553, %.lr.ph1246.prol
  %.68851244.prol = phi i32 [ %488, %.lr.ph1246.prol ], [ %.68851244.ph, %.lr.ph1246.preheader1553 ]
  %prol.iter = phi i32 [ %prol.iter.next, %.lr.ph1246.prol ], [ 0, %.lr.ph1246.preheader1553 ]
  %488 = add i32 %.68851244.prol, 1
  %489 = zext i32 %.68851244.prol to i64
  %490 = getelementptr inbounds i64, ptr %.1867, i64 %489
  store i64 0, ptr %490, align 8, !tbaa !17
  %prol.iter.next = add i32 %prol.iter, 1
  %prol.iter.cmp.not = icmp eq i32 %prol.iter.next, %xtraiter
  br i1 %prol.iter.cmp.not, label %.lr.ph1246.prol.loopexit, label %.lr.ph1246.prol, !llvm.loop !42

.lr.ph1246.prol.loopexit:                         ; preds = %.lr.ph1246.prol, %.lr.ph1246.preheader1553
  %.68851244.unr = phi i32 [ %.68851244.ph, %.lr.ph1246.preheader1553 ], [ %488, %.lr.ph1246.prol ]
  %491 = icmp ult i32 %487, 7
  br i1 %491, label %.loopexit1182, label %.lr.ph1246

.lr.ph1246:                                       ; preds = %.lr.ph1246.prol.loopexit, %.lr.ph1246
  %.68851244 = phi i32 [ %513, %.lr.ph1246 ], [ %.68851244.unr, %.lr.ph1246.prol.loopexit ]
  %492 = add i32 %.68851244, 1
  %493 = zext i32 %.68851244 to i64
  %494 = getelementptr inbounds i64, ptr %.1867, i64 %493
  store i64 0, ptr %494, align 8, !tbaa !17
  %495 = add i32 %.68851244, 2
  %496 = zext i32 %492 to i64
  %497 = getelementptr inbounds i64, ptr %.1867, i64 %496
  store i64 0, ptr %497, align 8, !tbaa !17
  %498 = add i32 %.68851244, 3
  %499 = zext i32 %495 to i64
  %500 = getelementptr inbounds i64, ptr %.1867, i64 %499
  store i64 0, ptr %500, align 8, !tbaa !17
  %501 = add i32 %.68851244, 4
  %502 = zext i32 %498 to i64
  %503 = getelementptr inbounds i64, ptr %.1867, i64 %502
  store i64 0, ptr %503, align 8, !tbaa !17
  %504 = add i32 %.68851244, 5
  %505 = zext i32 %501 to i64
  %506 = getelementptr inbounds i64, ptr %.1867, i64 %505
  store i64 0, ptr %506, align 8, !tbaa !17
  %507 = add i32 %.68851244, 6
  %508 = zext i32 %504 to i64
  %509 = getelementptr inbounds i64, ptr %.1867, i64 %508
  store i64 0, ptr %509, align 8, !tbaa !17
  %510 = add i32 %.68851244, 7
  %511 = zext i32 %507 to i64
  %512 = getelementptr inbounds i64, ptr %.1867, i64 %511
  store i64 0, ptr %512, align 8, !tbaa !17
  %513 = add i32 %.68851244, 8
  %514 = zext i32 %510 to i64
  %515 = getelementptr inbounds i64, ptr %.1867, i64 %514
  store i64 0, ptr %515, align 8, !tbaa !17
  %exitcond.not.7 = icmp eq i32 %513, %476
  br i1 %exitcond.not.7, label %.loopexit1182, label %.lr.ph1246, !llvm.loop !43

.loopexit1182:                                    ; preds = %.lr.ph1246.prol.loopexit, %.lr.ph1246, %middle.block1535, %475, %466, %442
  %.4905 = phi i64 [ %456, %466 ], [ %.3904, %442 ], [ %.3904, %475 ], [ %.3904, %middle.block1535 ], [ %.3904, %.lr.ph1246 ], [ %.3904, %.lr.ph1246.prol.loopexit ]
  %.5892 = phi i32 [ %.5884, %466 ], [ %.4891, %442 ], [ %.4891, %475 ], [ %.4891, %middle.block1535 ], [ %.4891, %.lr.ph1246 ], [ %.4891, %.lr.ph1246.prol.loopexit ]
  %.7886 = phi i32 [ %467, %466 ], [ %451, %442 ], [ %.5884, %475 ], [ %476, %middle.block1535 ], [ %476, %.lr.ph1246 ], [ %476, %.lr.ph1246.prol.loopexit ]
  %.2878 = phi ptr [ %.1877, %466 ], [ %445, %442 ], [ %.1877, %475 ], [ %.1877, %middle.block1535 ], [ %.1877, %.lr.ph1246 ], [ %.1877, %.lr.ph1246.prol.loopexit ]
  %516 = load i32, ptr %16, align 4, !tbaa !19
  %517 = sext i32 %516 to i64
  %518 = getelementptr inbounds i8, ptr %.2878, i64 %517
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %16) #11
  %.not1039 = icmp eq ptr %518, %367
  br i1 %.not1039, label %.loopexit1192, label %.preheader1193, !llvm.loop !44

.loopexit1192:                                    ; preds = %.loopexit1182, %.loopexit1181
  %.6893 = phi i32 [ %.3890, %.loopexit1181 ], [ %.5892, %.loopexit1182 ]
  %.8 = phi i32 [ %.4883, %.loopexit1181 ], [ %.7886, %.loopexit1182 ]
  %519 = sub nsw i64 %344, %335
  %520 = zext i32 %.8 to i64
  %521 = getelementptr inbounds i64, ptr %.1867, i64 %520
  store i64 %519, ptr %521, align 8, !tbaa !17
  %522 = zext i32 %.6893 to i64
  %523 = getelementptr inbounds i64, ptr %.1867, i64 %522
  %524 = load i64, ptr %523, align 8, !tbaa !17
  %525 = sub nsw i64 %519, %524
  %526 = trunc i64 %525 to i32
  %527 = getelementptr inbounds i32, ptr %.1873, i64 %522
  store i32 %526, ptr %527, align 4, !tbaa !19
  %.not1289 = icmp eq i32 %.8, 0
  br i1 %.not1289, label %._crit_edge1255, label %.lr.ph1254

.lr.ph1254:                                       ; preds = %.loopexit1192, %543
  %indvars.iv = phi i64 [ %indvars.iv.next, %543 ], [ 0, %.loopexit1192 ]
  %528 = getelementptr inbounds i32, ptr %.1873, i64 %indvars.iv
  %529 = load i32, ptr %528, align 4, !tbaa !19
  %530 = icmp slt i32 %529, 0
  br i1 %530, label %531, label %543

531:                                              ; preds = %.lr.ph1254
  %532 = getelementptr inbounds i64, ptr %.1867, i64 %indvars.iv
  %533 = load i64, ptr %532, align 8, !tbaa !17
  %.not1079 = icmp eq i64 %533, 0
  br i1 %.not1079, label %534, label %543

534:                                              ; preds = %531
  %535 = xor i32 %529, -1
  %536 = zext nneg i32 %535 to i64
  %537 = icmp ugt i64 %indvars.iv, %536
  br i1 %537, label %538, label %543

538:                                              ; preds = %534
  %539 = getelementptr inbounds i64, ptr %.1867, i64 %536
  %540 = load i64, ptr %539, align 8, !tbaa !17
  store i64 %540, ptr %532, align 8, !tbaa !17
  %541 = getelementptr inbounds i32, ptr %.1873, i64 %536
  %542 = load i32, ptr %541, align 4, !tbaa !19
  store i32 %542, ptr %528, align 4, !tbaa !19
  br label %543

543:                                              ; preds = %534, %538, %531, %.lr.ph1254
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond1337.not = icmp eq i64 %indvars.iv.next, %520
  br i1 %exitcond1337.not, label %._crit_edge1255, label %.lr.ph1254, !llvm.loop !45

._crit_edge1255:                                  ; preds = %543, %.loopexit1192
  %544 = call noalias dereferenceable_or_null(16384) ptr @malloc(i64 noundef 16384) #12
  %545 = load i32, ptr %31, align 8, !tbaa !5
  %spec.select = call i32 @llvm.umin.i32(i32 %.8, i32 %545)
  %.not1290 = icmp eq i32 %spec.select, 0
  br i1 %.not1290, label %._crit_edge1265, label %.lr.ph1264.preheader

.lr.ph1264.preheader:                             ; preds = %._crit_edge1255
  %wide.trip.count1341 = zext i32 %spec.select to i64
  br label %.lr.ph1264

.lr.ph1264:                                       ; preds = %.lr.ph1264.preheader, %634
  %indvars.iv1338 = phi i64 [ 0, %.lr.ph1264.preheader ], [ %indvars.iv.next1339, %634 ]
  %546 = phi i32 [ 0, %.lr.ph1264.preheader ], [ %.3919, %634 ]
  %.09301257 = phi ptr [ %544, %.lr.ph1264.preheader ], [ %.4934, %634 ]
  %.09351256 = phi i32 [ 16384, %.lr.ph1264.preheader ], [ %.4939, %634 ]
  %547 = getelementptr inbounds i64, ptr %.1867, i64 %indvars.iv1338
  %548 = load i64, ptr %547, align 8, !tbaa !17
  %.not1072 = icmp eq i64 %548, 0
  br i1 %.not1072, label %634, label %549

549:                                              ; preds = %.lr.ph1264
  %550 = trunc nuw i64 %indvars.iv1338 to i32
  %551 = lshr i64 %indvars.iv1338, 3
  %552 = and i32 %550, 7
  %553 = load ptr, ptr %49, align 8, !tbaa !26
  %554 = and i64 %551, 536870911
  %555 = getelementptr inbounds i8, ptr %553, i64 %554
  %556 = load i8, ptr %555, align 1, !tbaa !25
  %557 = zext i8 %556 to i32
  %558 = shl nuw nsw i32 1, %552
  %559 = and i32 %558, %557
  %.not1073 = icmp eq i32 %559, 0
  br i1 %.not1073, label %634, label %560

560:                                              ; preds = %549
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %17) #11
  %561 = load ptr, ptr %0, align 8, !tbaa !14
  %562 = add nsw i64 %548, %335
  %563 = call i32 @fstReaderFseeko(ptr noundef nonnull %0, ptr noundef %561, i64 noundef %562, i32 noundef 0)
  %564 = load ptr, ptr %0, align 8, !tbaa !14
  %565 = call i32 @fstReaderVarint32WithSkip(ptr noundef %564, ptr noundef nonnull %17)
  %.not1074 = icmp eq i32 %565, 0
  br i1 %.not1074, label %594, label %566

566:                                              ; preds = %560
  %567 = zext i32 %546 to i64
  %568 = getelementptr inbounds i8, ptr %94, i64 %567
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %18) #11
  %569 = zext i32 %565 to i64
  store i64 %569, ptr %18, align 8, !tbaa !17
  %570 = getelementptr inbounds i32, ptr %.1873, i64 %indvars.iv1338
  %571 = load i32, ptr %570, align 4, !tbaa !19
  %572 = zext i32 %571 to i64
  %.not1076 = icmp ugt i64 %93, %567
  br i1 %.not1076, label %574, label %573

573:                                              ; preds = %566
  call void @chk_report_abort(ptr noundef nonnull @.str.52)
  %.pre1370 = load i32, ptr %570, align 4, !tbaa !19
  br label %574

574:                                              ; preds = %573, %566
  %575 = phi i32 [ %.pre1370, %573 ], [ %571, %566 ]
  %576 = icmp ult i32 %.09351256, %575
  br i1 %576, label %577, label %._crit_edge1373

._crit_edge1373:                                  ; preds = %574
  %.pre1374 = zext i32 %575 to i64
  br label %581

577:                                              ; preds = %574
  call void @free(ptr noundef %.09301257) #11
  %578 = load i32, ptr %570, align 4, !tbaa !19
  %579 = zext i32 %578 to i64
  %580 = call noalias ptr @malloc(i64 noundef %579) #12
  br label %581

581:                                              ; preds = %._crit_edge1373, %577
  %.pre-phi = phi i64 [ %.pre1374, %._crit_edge1373 ], [ %579, %577 ]
  %.1936 = phi i32 [ %.09351256, %._crit_edge1373 ], [ %578, %577 ]
  %.1931 = phi ptr [ %.09301257, %._crit_edge1373 ], [ %580, %577 ]
  %582 = load ptr, ptr %0, align 8, !tbaa !14
  %583 = call i64 @fstFread(ptr noundef %.1931, i64 noundef %.pre-phi, i64 noundef 1, ptr noundef %582)
  switch i32 %337, label %609 [
    i32 52, label %584
    i32 70, label %590
  ]

584:                                              ; preds = %581
  %585 = load i64, ptr %18, align 8, !tbaa !17
  %586 = trunc i64 %585 to i32
  %587 = call i32 @LZ4_decompress_safe_partial(ptr noundef %.1931, ptr noundef %568, i32 noundef %571, i32 noundef %586, i32 noundef %586) #11
  %588 = sext i32 %587 to i64
  %589 = icmp eq i64 %585, %588
  br i1 %589, label %.thread1120, label %.thread1124

.thread1124:                                      ; preds = %584
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %18) #11
  br label %.loopexit1190

590:                                              ; preds = %581
  %591 = load i64, ptr %18, align 8, !tbaa !17
  %592 = trunc i64 %591 to i32
  %593 = call i32 @fastlz_decompress(ptr noundef %.1931, i32 noundef %571, ptr noundef %568, i32 noundef %592) #11
  br label %.thread1120

594:                                              ; preds = %560
  %595 = getelementptr inbounds i32, ptr %.1873, i64 %indvars.iv1338
  %596 = load i32, ptr %595, align 4, !tbaa !19
  %597 = load i32, ptr %17, align 4, !tbaa !19
  %598 = sub i32 %596, %597
  %599 = zext i32 %546 to i64
  %600 = getelementptr inbounds i8, ptr %94, i64 %599
  %.not1075 = icmp ugt i64 %93, %599
  br i1 %.not1075, label %.thread1109, label %601

601:                                              ; preds = %594
  call void @chk_report_abort(ptr noundef nonnull @.str.52)
  br label %.thread1109

.thread1109:                                      ; preds = %594, %601
  %602 = sext i32 %598 to i64
  %603 = load ptr, ptr %0, align 8, !tbaa !14
  %604 = call i64 @fstFread(ptr noundef %600, i64 noundef %602, i64 noundef 1, ptr noundef %603)
  %605 = getelementptr inbounds i32, ptr %35, i64 %indvars.iv1338
  store i32 %546, ptr %605, align 4, !tbaa !19
  %606 = getelementptr inbounds i32, ptr %36, i64 %indvars.iv1338
  store i32 %598, ptr %606, align 4, !tbaa !19
  br label %615

.thread1120:                                      ; preds = %590, %584
  %607 = getelementptr inbounds i32, ptr %35, i64 %indvars.iv1338
  store i32 %546, ptr %607, align 4, !tbaa !19
  %608 = getelementptr inbounds i32, ptr %36, i64 %indvars.iv1338
  store i32 %565, ptr %608, align 4, !tbaa !19
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %18) #11
  br label %615

609:                                              ; preds = %581
  %610 = call i32 @uncompress(ptr noundef %568, ptr noundef nonnull %18, ptr noundef %.1931, i64 noundef %572) #11
  %611 = getelementptr inbounds i32, ptr %35, i64 %indvars.iv1338
  store i32 %546, ptr %611, align 4, !tbaa !19
  %612 = getelementptr inbounds i32, ptr %36, i64 %indvars.iv1338
  store i32 %565, ptr %612, align 4, !tbaa !19
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %18) #11
  %.not1077 = icmp eq i32 %610, 0
  br i1 %.not1077, label %615, label %.loopexit1190

.loopexit1190:                                    ; preds = %609, %.thread1124
  %.09571128 = phi i32 [ -3, %.thread1124 ], [ %610, %609 ]
  %613 = load ptr, ptr @stderr, align 8, !tbaa !18
  %614 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %613, ptr noundef nonnull @.str.53, i32 noundef %550, i32 noundef %565, i32 noundef %.09571128) #13
  call void @exit(i32 noundef 255) #14
  unreachable

615:                                              ; preds = %.thread1120, %.thread1109, %609
  %.pn = phi i32 [ %598, %.thread1109 ], [ %565, %609 ], [ %565, %.thread1120 ]
  %.29321117 = phi ptr [ %.09301257, %.thread1109 ], [ %.1931, %609 ], [ %.1931, %.thread1120 ]
  %.29371116 = phi i32 [ %.09351256, %.thread1109 ], [ %.1936, %609 ], [ %.1936, %.thread1120 ]
  %.19171118 = add i32 %.pn, %546
  %616 = load ptr, ptr %50, align 8, !tbaa !27
  %617 = getelementptr inbounds i32, ptr %616, i64 %indvars.iv1338
  %618 = load i32, ptr %617, align 4, !tbaa !19
  %619 = icmp eq i32 %618, 1
  %620 = zext i32 %546 to i64
  %621 = getelementptr inbounds i8, ptr %94, i64 %620
  %622 = call i32 @fstGetVarint32NoSkip(ptr noundef %621)
  %623 = and i32 %622, 1
  %624 = shl nuw nsw i32 2, %623
  %.sink1462 = select i1 %619, i32 %624, i32 1
  %625 = lshr i32 %622, %.sink1462
  %.not1078 = icmp ult i32 %625, %142
  br i1 %.not1078, label %627, label %626

626:                                              ; preds = %615
  call void @chk_report_abort(ptr noundef nonnull @.str.54)
  br label %627

627:                                              ; preds = %626, %615
  %628 = zext nneg i32 %625 to i64
  %629 = getelementptr inbounds i32, ptr %143, i64 %628
  %630 = load i32, ptr %629, align 4, !tbaa !19
  %631 = getelementptr inbounds i32, ptr %34, i64 %indvars.iv1338
  store i32 %630, ptr %631, align 4, !tbaa !19
  %632 = trunc i64 %indvars.iv1338 to i32
  %633 = add i32 %632, 1
  store i32 %633, ptr %629, align 4, !tbaa !19
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %17) #11
  br label %634

634:                                              ; preds = %549, %627, %.lr.ph1264
  %.4939 = phi i32 [ %.09351256, %.lr.ph1264 ], [ %.29371116, %627 ], [ %.09351256, %549 ]
  %.4934 = phi ptr [ %.09301257, %.lr.ph1264 ], [ %.29321117, %627 ], [ %.09301257, %549 ]
  %.3919 = phi i32 [ %546, %.lr.ph1264 ], [ %.19171118, %627 ], [ %546, %549 ]
  %indvars.iv.next1339 = add nuw nsw i64 %indvars.iv1338, 1
  %exitcond1342.not = icmp eq i64 %indvars.iv.next1339, %wide.trip.count1341
  br i1 %exitcond1342.not, label %._crit_edge1265, label %.lr.ph1264, !llvm.loop !46

._crit_edge1265:                                  ; preds = %634, %._crit_edge1255
  %.0930.lcssa = phi ptr [ %544, %._crit_edge1255 ], [ %.4934, %634 ]
  call void @free(ptr noundef %.0930.lcssa) #11
  br i1 %.not12851378, label %.loopexit1387, label %.lr.ph1281

.lr.ph1281:                                       ; preds = %._crit_edge1265
  %635 = ptrtoint ptr %94 to i64
  br label %636

636:                                              ; preds = %.lr.ph1281, %._crit_edge1275
  %637 = phi i64 [ 0, %.lr.ph1281 ], [ %948, %._crit_edge1275 ]
  %.11279 = phi i64 [ %.0846.ph, %.lr.ph1281 ], [ %.4, %._crit_edge1275 ]
  %.49001278 = phi i32 [ 0, %.lr.ph1281 ], [ %947, %._crit_edge1275 ]
  %.49241277 = phi i32 [ %.3923, %.lr.ph1281 ], [ %.8928, %._crit_edge1275 ]
  %.59451276 = phi i32 [ %.4944, %.lr.ph1281 ], [ %.10950, %._crit_edge1275 ]
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %19) #11
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %20) #11
  br i1 %.not1017, label %669, label %638

638:                                              ; preds = %636
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %21) #11
  %639 = getelementptr inbounds i64, ptr %140, i64 %637
  %640 = load i64, ptr %639, align 8, !tbaa !17
  %.not1043 = icmp eq i64 %640, %.11279
  br i1 %.not1043, label %.thread1130, label %641

641:                                              ; preds = %638
  %642 = load i8, ptr %43, align 2
  %.not1044 = icmp sgt i8 %642, -1
  br i1 %.not1044, label %646, label %643

643:                                              ; preds = %641
  %644 = load i64, ptr %45, align 8, !tbaa !16
  %645 = icmp ugt i64 %640, %644
  br i1 %645, label %946, label %646

646:                                              ; preds = %643, %641
  %647 = icmp eq i32 %.59451276, 1
  br i1 %647, label %648, label %650

648:                                              ; preds = %646
  %649 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef nonnull dereferenceable(1) %21, i64 noundef 32, ptr noundef nonnull @.str.39) #11
  call void @fstWritex(ptr noundef nonnull %0, ptr noundef nonnull %21, i32 noundef %649)
  br label %650

650:                                              ; preds = %648, %646
  %.6946 = phi i32 [ 2, %648 ], [ %.59451276, %646 ]
  %651 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef nonnull dereferenceable(1) %21, i64 noundef 32, ptr noundef nonnull @.str.40, i64 noundef %640) #11
  call void @fstWritex(ptr noundef nonnull %0, ptr noundef nonnull %21, i32 noundef %651)
  %.not1045 = icmp eq i32 %.6946, 0
  br i1 %.not1045, label %652, label %654

652:                                              ; preds = %650
  %653 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef nonnull dereferenceable(1) %21, i64 noundef 32, ptr noundef nonnull @.str.41) #11
  call void @fstWritex(ptr noundef nonnull %0, ptr noundef nonnull %21, i32 noundef %653)
  br label %654

654:                                              ; preds = %652, %650
  %.7947 = phi i32 [ %.6946, %650 ], [ 1, %652 ]
  %655 = load i32, ptr %46, align 8, !tbaa !22
  %.not1046 = icmp eq i32 %655, 0
  %.not1047 = icmp eq i32 %.49241277, %655
  %or.cond1093 = select i1 %.not1046, i1 true, i1 %.not1047
  br i1 %or.cond1093, label %.thread1130, label %656

656:                                              ; preds = %654
  %657 = load ptr, ptr %47, align 8, !tbaa !23
  %658 = zext i32 %.49241277 to i64
  %659 = getelementptr inbounds i64, ptr %657, i64 %658
  %660 = load i64, ptr %659, align 8, !tbaa !17
  %661 = icmp eq i64 %640, %660
  br i1 %661, label %662, label %.thread1130

662:                                              ; preds = %656
  %663 = load ptr, ptr %48, align 8, !tbaa !24
  %664 = add i32 %.49241277, 1
  %665 = getelementptr inbounds i8, ptr %663, i64 %658
  %666 = load i8, ptr %665, align 1, !tbaa !25
  %.not1048 = icmp eq i8 %666, 0
  %667 = select i1 %.not1048, ptr @.str.44, ptr @.str.43
  %668 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef nonnull dereferenceable(1) %21, i64 noundef 32, ptr noundef nonnull @.str.42, ptr noundef nonnull %667) #11
  call void @fstWritex(ptr noundef nonnull %0, ptr noundef nonnull %21, i32 noundef %668)
  br label %.thread1130

.thread1130:                                      ; preds = %654, %662, %656, %638
  %.9949.ph = phi i32 [ %.59451276, %638 ], [ %.7947, %656 ], [ %.7947, %662 ], [ %.7947, %654 ]
  %.7927.ph = phi i32 [ %.49241277, %638 ], [ %.49241277, %656 ], [ %664, %662 ], [ %.49241277, %654 ]
  %.3.ph = phi i64 [ %.11279, %638 ], [ %640, %656 ], [ %640, %662 ], [ %640, %654 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %21) #11
  br label %669

669:                                              ; preds = %.thread1130, %636
  %.10950 = phi i32 [ %.59451276, %636 ], [ %.9949.ph, %.thread1130 ]
  %.8928 = phi i32 [ %.49241277, %636 ], [ %.7927.ph, %.thread1130 ]
  %.4 = phi i64 [ %.11279, %636 ], [ %.3.ph, %.thread1130 ]
  %670 = getelementptr inbounds i32, ptr %143, i64 %637
  %671 = load i32, ptr %670, align 4, !tbaa !19
  %.not10491272 = icmp eq i32 %671, 0
  br i1 %.not10491272, label %._crit_edge1275, label %.lr.ph1274

.lr.ph1274:                                       ; preds = %669
  %672 = getelementptr inbounds i64, ptr %140, i64 %637
  br label %673

673:                                              ; preds = %.lr.ph1274, %944
  %674 = phi i32 [ %671, %.lr.ph1274 ], [ %945, %944 ]
  %675 = add i32 %674, -1
  %676 = zext i32 %675 to i64
  %677 = getelementptr inbounds i32, ptr %35, i64 %676
  %678 = load i32, ptr %677, align 4, !tbaa !19
  %679 = zext i32 %678 to i64
  %680 = getelementptr inbounds i8, ptr %94, i64 %679
  %681 = call i32 @fstGetVarint32(ptr noundef %680, ptr noundef nonnull %19)
  %682 = load ptr, ptr %50, align 8, !tbaa !27
  %683 = getelementptr inbounds i32, ptr %682, i64 %676
  %684 = load i32, ptr %683, align 4, !tbaa !19
  %685 = icmp ult i32 %684, 2
  br i1 %685, label %686, label %773

686:                                              ; preds = %673
  %687 = icmp eq i32 %684, 1
  br i1 %687, label %688, label %731

688:                                              ; preds = %686
  %689 = and i32 %681, 1
  %.not1068 = icmp eq i32 %689, 0
  br i1 %.not1068, label %690, label %695

690:                                              ; preds = %688
  %691 = trunc i32 %681 to i8
  %692 = lshr exact i8 %691, 1
  %693 = and i8 %692, 1
  %694 = or disjoint i8 %693, 48
  br label %701

695:                                              ; preds = %688
  %696 = lshr i32 %681, 1
  %697 = and i32 %696, 7
  %698 = zext nneg i32 %697 to i64
  %699 = getelementptr inbounds [9 x i8], ptr @.str.55, i64 0, i64 %698
  %700 = load i8, ptr %699, align 1, !tbaa !25
  br label %701

701:                                              ; preds = %695, %690
  %.0910 = phi i8 [ %700, %695 ], [ %694, %690 ]
  br i1 %.not1087, label %708, label %702

702:                                              ; preds = %701
  %703 = load ptr, ptr %53, align 8, !tbaa !28
  store i8 %.0910, ptr %703, align 1, !tbaa !25
  %704 = load ptr, ptr %53, align 8, !tbaa !28
  %705 = getelementptr inbounds i8, ptr %704, i64 1
  store i8 0, ptr %705, align 1, !tbaa !25
  %706 = load i64, ptr %672, align 8, !tbaa !17
  %707 = load ptr, ptr %53, align 8, !tbaa !28
  call void %1(ptr noundef %3, i64 noundef %706, i32 noundef %674, ptr noundef %707) #11
  br label %715

708:                                              ; preds = %701
  br i1 %.not1017, label %715, label %709

709:                                              ; preds = %708
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %22) #11
  %710 = call i32 @fstVcdIDForFwrite(ptr noundef nonnull %58, i32 noundef %674)
  store i8 %.0910, ptr %22, align 16, !tbaa !25
  %711 = add nsw i32 %710, 1
  %712 = sext i32 %711 to i64
  %713 = getelementptr inbounds [16 x i8], ptr %22, i64 0, i64 %712
  store i8 10, ptr %713, align 1, !tbaa !25
  %714 = add nsw i32 %710, 2
  call void @fstWritex(ptr noundef nonnull %0, ptr noundef nonnull %22, i32 noundef %714)
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %22) #11
  br label %715

715:                                              ; preds = %708, %709, %702
  %716 = load i32, ptr %19, align 4, !tbaa !19
  %717 = add i32 %716, %678
  store i32 %717, ptr %677, align 4, !tbaa !19
  %718 = getelementptr inbounds i32, ptr %36, i64 %676
  %719 = load i32, ptr %718, align 4, !tbaa !19
  %720 = sub i32 %719, %716
  store i32 %720, ptr %718, align 4, !tbaa !19
  %721 = getelementptr inbounds i32, ptr %34, i64 %676
  %722 = load i32, ptr %721, align 4, !tbaa !19
  store i32 %722, ptr %670, align 4, !tbaa !19
  store i32 0, ptr %721, align 4, !tbaa !19
  %.not1070 = icmp eq i32 %719, %716
  br i1 %.not1070, label %944, label %723

723:                                              ; preds = %715
  %724 = zext i32 %717 to i64
  %725 = getelementptr inbounds i8, ptr %94, i64 %724
  %726 = call i32 @fstGetVarint32NoSkip(ptr noundef %725)
  %727 = and i32 %726, 1
  %728 = shl nuw nsw i32 2, %727
  %729 = lshr i32 %726, %728
  %730 = add i32 %729, %.49001278
  %.not1071 = icmp ult i32 %730, %142
  br i1 %.not1071, label %thread-pre-split, label %thread-pre-split.sink.split

731:                                              ; preds = %686
  %732 = call i32 @fstGetVarint32(ptr noundef %680, ptr noundef nonnull %19)
  %733 = load i32, ptr %19, align 4, !tbaa !19
  %734 = sext i32 %733 to i64
  %735 = getelementptr inbounds i8, ptr %680, i64 %734
  %736 = call i32 @fstGetVarint32(ptr noundef %735, ptr noundef nonnull %20)
  %737 = load i32, ptr %20, align 4, !tbaa !19
  %738 = load i32, ptr %19, align 4, !tbaa !19
  %739 = add nsw i32 %738, %737
  store i32 %739, ptr %19, align 4, !tbaa !19
  %740 = sext i32 %739 to i64
  %741 = getelementptr inbounds i8, ptr %680, i64 %740
  %742 = and i32 %732, 1
  %.not1064 = icmp eq i32 %742, 0
  br i1 %.not1064, label %743, label %758

743:                                              ; preds = %731
  br i1 %.not1065, label %746, label %744

744:                                              ; preds = %743
  %745 = load i64, ptr %672, align 8, !tbaa !17
  call void %2(ptr noundef %3, i64 noundef %745, i32 noundef %674, ptr noundef %741, i32 noundef %736) #11
  br label %758

746:                                              ; preds = %743
  br i1 %.not1017, label %758, label %747

747:                                              ; preds = %746
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %23) #11
  store i8 115, ptr %23, align 16, !tbaa !25
  call void @fstWritex(ptr noundef nonnull %0, ptr noundef nonnull %23, i32 noundef 1)
  %748 = call i32 @fstVcdIDForFwrite(ptr noundef nonnull %57, i32 noundef %674)
  %749 = shl i32 %736, 2
  %750 = or disjoint i32 %749, 1
  %751 = zext i32 %750 to i64
  %752 = call noalias ptr @malloc(i64 noundef %751) #12
  %753 = call i32 @fstUtilityBinToEsc(ptr noundef %752, ptr noundef %741, i32 noundef %736)
  call void @fstWritex(ptr noundef nonnull %0, ptr noundef %752, i32 noundef %753)
  call void @free(ptr noundef %752) #11
  store i8 32, ptr %23, align 16, !tbaa !25
  %754 = add nsw i32 %748, 1
  %755 = sext i32 %754 to i64
  %756 = getelementptr inbounds [16 x i8], ptr %23, i64 0, i64 %755
  store i8 10, ptr %756, align 1, !tbaa !25
  %757 = add nsw i32 %748, 2
  call void @fstWritex(ptr noundef nonnull %0, ptr noundef nonnull %23, i32 noundef %757)
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %23) #11
  br label %758

758:                                              ; preds = %744, %747, %746, %731
  %759 = load i32, ptr %19, align 4, !tbaa !19
  %760 = add i32 %759, %736
  store i32 %760, ptr %19, align 4, !tbaa !19
  %761 = add i32 %760, %678
  store i32 %761, ptr %677, align 4, !tbaa !19
  %762 = getelementptr inbounds i32, ptr %36, i64 %676
  %763 = load i32, ptr %762, align 4, !tbaa !19
  %764 = sub i32 %763, %760
  store i32 %764, ptr %762, align 4, !tbaa !19
  %765 = getelementptr inbounds i32, ptr %34, i64 %676
  %766 = load i32, ptr %765, align 4, !tbaa !19
  store i32 %766, ptr %670, align 4, !tbaa !19
  store i32 0, ptr %765, align 4, !tbaa !19
  %.not1066 = icmp eq i32 %763, %760
  br i1 %.not1066, label %944, label %767

767:                                              ; preds = %758
  %768 = zext i32 %761 to i64
  %769 = getelementptr inbounds i8, ptr %94, i64 %768
  %770 = call i32 @fstGetVarint32NoSkip(ptr noundef %769)
  %771 = lshr i32 %770, 1
  %772 = add i32 %771, %.49001278
  %.not1067 = icmp ult i32 %772, %142
  br i1 %.not1067, label %thread-pre-split, label %thread-pre-split.sink.split

773:                                              ; preds = %673
  %774 = call i32 @fstGetVarint32(ptr noundef %680, ptr noundef nonnull %19)
  %775 = load i32, ptr %19, align 4, !tbaa !19
  %776 = sext i32 %775 to i64
  %777 = getelementptr inbounds i8, ptr %680, i64 %776
  %778 = load ptr, ptr %51, align 8, !tbaa !29
  %779 = getelementptr inbounds i8, ptr %778, i64 %676
  %780 = load i8, ptr %779, align 1, !tbaa !25
  %.not1050 = icmp eq i8 %780, 3
  br i1 %.not1050, label %862, label %781

781:                                              ; preds = %773
  %782 = load i32, ptr %52, align 8, !tbaa !30
  %783 = icmp ugt i32 %684, %782
  br i1 %783, label %784, label %785

784:                                              ; preds = %781
  call void @chk_report_abort(ptr noundef nonnull @.str.46)
  br label %785

785:                                              ; preds = %784, %781
  %786 = and i32 %774, 1
  %.not1057 = icmp eq i32 %786, 0
  br i1 %.not1057, label %.preheader1180.preheader, label %842

.preheader1180.preheader:                         ; preds = %785
  %wide.trip.count1347 = zext i32 %684 to i64
  %xtraiter1619 = and i64 %wide.trip.count1347, 1
  %unroll_iter = and i64 %wide.trip.count1347, 4294967294
  br label %.preheader1180

.preheader1180:                                   ; preds = %.preheader1180, %.preheader1180.preheader
  %indvars.iv1343 = phi i64 [ 0, %.preheader1180.preheader ], [ %indvars.iv.next1344.1, %.preheader1180 ]
  %niter = phi i64 [ 0, %.preheader1180.preheader ], [ %niter.next.1, %.preheader1180 ]
  %787 = trunc i64 %indvars.iv1343 to i8
  %788 = lshr i64 %indvars.iv1343, 3
  %789 = and i8 %787, 6
  %790 = xor i8 %789, 7
  %791 = and i64 %788, 536870911
  %792 = getelementptr inbounds i8, ptr %777, i64 %791
  %793 = load i8, ptr %792, align 1, !tbaa !25
  %794 = lshr i8 %793, %790
  %795 = and i8 %794, 1
  %796 = or disjoint i8 %795, 48
  %797 = load ptr, ptr %53, align 8, !tbaa !28
  %798 = getelementptr inbounds i8, ptr %797, i64 %indvars.iv1343
  store i8 %796, ptr %798, align 1, !tbaa !25
  %indvars.iv.next1344 = or disjoint i64 %indvars.iv1343, 1
  %799 = trunc nuw i64 %indvars.iv.next1344 to i32
  %800 = lshr i32 %799, 3
  %801 = and i32 %799, 6
  %802 = xor i32 %801, 6
  %803 = zext nneg i32 %800 to i64
  %804 = getelementptr inbounds i8, ptr %777, i64 %803
  %805 = load i8, ptr %804, align 1, !tbaa !25
  %806 = zext i8 %805 to i32
  %807 = lshr i32 %806, %802
  %808 = trunc nuw i32 %807 to i8
  %809 = and i8 %808, 1
  %810 = or disjoint i8 %809, 48
  %811 = load ptr, ptr %53, align 8, !tbaa !28
  %812 = getelementptr inbounds i8, ptr %811, i64 %indvars.iv.next1344
  store i8 %810, ptr %812, align 1, !tbaa !25
  %indvars.iv.next1344.1 = add nuw nsw i64 %indvars.iv1343, 2
  %niter.next.1 = add i64 %niter, 2
  %niter.ncmp.1 = icmp eq i64 %niter.next.1, %unroll_iter
  br i1 %niter.ncmp.1, label %.unr-lcssa, label %.preheader1180, !llvm.loop !47

.unr-lcssa:                                       ; preds = %.preheader1180
  %lcmp.mod1620.not = icmp eq i64 %xtraiter1619, 0
  br i1 %lcmp.mod1620.not, label %827, label %.preheader1180.epil

.preheader1180.epil:                              ; preds = %.unr-lcssa
  %813 = trunc nuw i64 %indvars.iv.next1344.1 to i32
  %814 = lshr i32 %813, 3
  %815 = and i32 %813, 7
  %816 = xor i32 %815, 7
  %817 = zext nneg i32 %814 to i64
  %818 = getelementptr inbounds i8, ptr %777, i64 %817
  %819 = load i8, ptr %818, align 1, !tbaa !25
  %820 = zext i8 %819 to i32
  %821 = lshr i32 %820, %816
  %822 = trunc nuw i32 %821 to i8
  %823 = and i8 %822, 1
  %824 = or disjoint i8 %823, 48
  %825 = load ptr, ptr %53, align 8, !tbaa !28
  %826 = getelementptr inbounds i8, ptr %825, i64 %indvars.iv.next1344.1
  store i8 %824, ptr %826, align 1, !tbaa !25
  br label %827

827:                                              ; preds = %.unr-lcssa, %.preheader1180.epil
  %.lcssa1584 = phi i32 [ %800, %.unr-lcssa ], [ %814, %.preheader1180.epil ]
  %828 = load ptr, ptr %53, align 8, !tbaa !28
  %829 = getelementptr inbounds i8, ptr %828, i64 %wide.trip.count1347
  store i8 0, ptr %829, align 1, !tbaa !25
  br i1 %.not1087, label %833, label %830

830:                                              ; preds = %827
  %831 = load i64, ptr %672, align 8, !tbaa !17
  %832 = load ptr, ptr %53, align 8, !tbaa !28
  call void %1(ptr noundef %3, i64 noundef %831, i32 noundef %674, ptr noundef %832) #11
  br label %840

833:                                              ; preds = %827
  br i1 %.not1017, label %840, label %834

834:                                              ; preds = %833
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %24) #11
  %835 = load ptr, ptr %51, align 8, !tbaa !29
  %836 = getelementptr inbounds i8, ptr %835, i64 %676
  %837 = load i8, ptr %836, align 1, !tbaa !25
  %.not1059 = icmp eq i8 %837, 18
  %838 = select i1 %.not1059, i8 112, i8 98
  store i8 %838, ptr %24, align 1, !tbaa !25
  call void @fstWritex(ptr noundef nonnull %0, ptr noundef nonnull %24, i32 noundef 1)
  %839 = load ptr, ptr %53, align 8, !tbaa !28
  call void @fstWritex(ptr noundef nonnull %0, ptr noundef %839, i32 noundef %684)
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %24) #11
  br label %840

840:                                              ; preds = %833, %834, %830
  %841 = add nuw nsw i32 %.lcssa1584, 1
  br label %919

842:                                              ; preds = %785
  br i1 %.not1087, label %850, label %843

843:                                              ; preds = %842
  %844 = load ptr, ptr %53, align 8, !tbaa !28
  %845 = zext i32 %684 to i64
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %844, ptr align 1 %777, i64 %845, i1 false)
  %846 = load ptr, ptr %53, align 8, !tbaa !28
  %847 = getelementptr inbounds i8, ptr %846, i64 %845
  store i8 0, ptr %847, align 1, !tbaa !25
  %848 = load i64, ptr %672, align 8, !tbaa !17
  %849 = load ptr, ptr %53, align 8, !tbaa !28
  call void %1(ptr noundef %3, i64 noundef %848, i32 noundef %674, ptr noundef %849) #11
  br label %919

850:                                              ; preds = %842
  br i1 %.not1017, label %.thread1136, label %851

851:                                              ; preds = %850
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %25) #11
  %852 = load ptr, ptr %51, align 8, !tbaa !29
  %853 = getelementptr inbounds i8, ptr %852, i64 %676
  %854 = load i8, ptr %853, align 1, !tbaa !25
  %.not1061 = icmp eq i8 %854, 18
  %855 = select i1 %.not1061, i8 112, i8 98
  store i8 %855, ptr %25, align 1, !tbaa !25
  %856 = ptrtoint ptr %777 to i64
  %857 = zext i32 %684 to i64
  %858 = sub i64 %857, %635
  %859 = add i64 %858, %856
  call void @fstWritex(ptr noundef nonnull %0, ptr noundef nonnull %25, i32 noundef 1)
  %860 = icmp ugt i64 %859, %93
  br i1 %860, label %861, label %.thread1139

861:                                              ; preds = %851
  call void @chk_report_abort(ptr noundef nonnull @.str.47)
  br label %.thread1139

.thread1139:                                      ; preds = %851, %861
  call void @fstWritex(ptr noundef nonnull %0, ptr noundef %777, i32 noundef %684)
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %25) #11
  br label %920

862:                                              ; preds = %773
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %26) #11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %27) #11
  %863 = and i32 %774, 1
  %.not1051 = icmp eq i32 %863, 0
  br i1 %.not1051, label %.preheader1178, label %.loopexit1179

.preheader1178:                                   ; preds = %862
  %864 = load i8, ptr %777, align 1, !tbaa !25
  %865 = lshr i8 %864, 7
  %866 = or disjoint i8 %865, 48
  store i8 %866, ptr %27, align 1, !tbaa !25
  %867 = lshr i8 %864, 6
  %868 = and i8 %867, 1
  %869 = or disjoint i8 %868, 48
  store i8 %869, ptr %60, align 1, !tbaa !25
  %870 = lshr i8 %864, 5
  %871 = and i8 %870, 1
  %872 = or disjoint i8 %871, 48
  store i8 %872, ptr %61, align 1, !tbaa !25
  %873 = lshr i8 %864, 4
  %874 = and i8 %873, 1
  %875 = or disjoint i8 %874, 48
  store i8 %875, ptr %62, align 1, !tbaa !25
  %876 = lshr i8 %864, 3
  %877 = lshr i8 %864, 2
  %878 = lshr i8 %864, 1
  %879 = insertelement <4 x i8> poison, i8 %876, i64 0
  %880 = insertelement <4 x i8> %879, i8 %877, i64 1
  %881 = insertelement <4 x i8> %880, i8 %878, i64 2
  %882 = insertelement <4 x i8> %881, i8 %864, i64 3
  %883 = and <4 x i8> %882, <i8 1, i8 1, i8 1, i8 1>
  %884 = or disjoint <4 x i8> %883, <i8 48, i8 48, i8 48, i8 48>
  store <4 x i8> %884, ptr %63, align 1, !tbaa !25
  br label %.loopexit1179

.loopexit1179:                                    ; preds = %.preheader1178, %862
  %.0870 = phi i32 [ %684, %862 ], [ 1, %.preheader1178 ]
  %.0856 = phi ptr [ %777, %862 ], [ %27, %.preheader1178 ]
  br i1 %.not1087, label %907, label %885

885:                                              ; preds = %.loopexit1179
  %886 = load i8, ptr %43, align 2
  %887 = and i8 %886, 4
  %.not1054 = icmp eq i8 %887, 0
  %888 = and i8 %886, 2
  %.not1055 = icmp eq i8 %888, 0
  br i1 %.not1054, label %893, label %889

889:                                              ; preds = %885
  br i1 %.not1055, label %.preheader1176.preheader, label %.loopexit1177

.preheader1176.preheader:                         ; preds = %889
  %890 = load <8 x i8>, ptr %.0856, align 1, !tbaa !25
  %891 = shufflevector <8 x i8> %890, <8 x i8> poison, <8 x i32> <i32 7, i32 6, i32 5, i32 4, i32 3, i32 2, i32 1, i32 0>
  store <8 x i8> %891, ptr %26, align 8, !tbaa !25
  br label %.loopexit1177

.loopexit1177:                                    ; preds = %.preheader1176.preheader, %889
  %.0857 = phi ptr [ %.0856, %889 ], [ %26, %.preheader1176.preheader ]
  %892 = load i64, ptr %672, align 8, !tbaa !17
  call void %1(ptr noundef %3, i64 noundef %892, i32 noundef %674, ptr noundef %.0857) #11
  br label %918

893:                                              ; preds = %885
  br i1 %.not1055, label %.preheader1174.preheader, label %896

.preheader1174.preheader:                         ; preds = %893
  %894 = load <8 x i8>, ptr %.0856, align 1, !tbaa !25
  %895 = shufflevector <8 x i8> %894, <8 x i8> poison, <8 x i32> <i32 7, i32 6, i32 5, i32 4, i32 3, i32 2, i32 1, i32 0>
  store <8 x i8> %895, ptr %26, align 8, !tbaa !25
  %.pre1371.cast = bitcast <8 x i8> %895 to double
  br label %.loopexit1175

896:                                              ; preds = %893
  %897 = load i64, ptr %.0856, align 1
  store i64 %897, ptr %26, align 8
  %898 = bitcast i64 %897 to double
  br label %.loopexit1175

.loopexit1175:                                    ; preds = %.preheader1174.preheader, %896
  %899 = phi double [ %.pre1371.cast, %.preheader1174.preheader ], [ %898, %896 ]
  %900 = load ptr, ptr %53, align 8, !tbaa !28
  %901 = load i32, ptr %52, align 8, !tbaa !30
  %902 = add i32 %901, 1
  %903 = zext i32 %902 to i64
  %904 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %900, i64 noundef %903, ptr noundef nonnull @.str.48, double noundef %899) #11
  %905 = load i64, ptr %672, align 8, !tbaa !17
  %906 = load ptr, ptr %53, align 8, !tbaa !28
  call void %1(ptr noundef %3, i64 noundef %905, i32 noundef %674, ptr noundef %906) #11
  br label %918

907:                                              ; preds = %.loopexit1179
  br i1 %.not1017, label %918, label %908

908:                                              ; preds = %907
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %28) #11
  %909 = load i8, ptr %43, align 2
  %910 = and i8 %909, 2
  %.not1053 = icmp eq i8 %910, 0
  br i1 %.not1053, label %.preheader.preheader, label %913

.preheader.preheader:                             ; preds = %908
  %911 = load <8 x i8>, ptr %.0856, align 1, !tbaa !25
  %912 = shufflevector <8 x i8> %911, <8 x i8> poison, <8 x i32> <i32 7, i32 6, i32 5, i32 4, i32 3, i32 2, i32 1, i32 0>
  store <8 x i8> %912, ptr %26, align 8, !tbaa !25
  %.pre1372.cast = bitcast <8 x i8> %912 to double
  br label %.loopexit

913:                                              ; preds = %908
  %914 = load i64, ptr %.0856, align 1
  store i64 %914, ptr %26, align 8
  %915 = bitcast i64 %914 to double
  br label %.loopexit

.loopexit:                                        ; preds = %.preheader.preheader, %913
  %916 = phi double [ %.pre1372.cast, %.preheader.preheader ], [ %915, %913 ]
  %917 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef nonnull dereferenceable(1) %28, i64 noundef 32, ptr noundef nonnull @.str.56, double noundef %916) #11
  call void @fstWritex(ptr noundef nonnull %0, ptr noundef nonnull %28, i32 noundef %917)
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %28) #11
  br label %918

918:                                              ; preds = %907, %.loopexit, %.loopexit1177, %.loopexit1175
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %27) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %26) #11
  br label %919

919:                                              ; preds = %840, %843, %918
  %.1871 = phi i32 [ %684, %843 ], [ %841, %840 ], [ %.0870, %918 ]
  br i1 %.not1017, label %.thread1136, label %920

920:                                              ; preds = %.thread1139, %919
  %.18711141 = phi i32 [ %684, %.thread1139 ], [ %.1871, %919 ]
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %29) #11
  %921 = call i32 @fstVcdIDForFwrite(ptr noundef nonnull %56, i32 noundef %674)
  store i8 32, ptr %29, align 16, !tbaa !25
  %922 = add nsw i32 %921, 1
  %923 = sext i32 %922 to i64
  %924 = getelementptr inbounds [16 x i8], ptr %29, i64 0, i64 %923
  store i8 10, ptr %924, align 1, !tbaa !25
  %925 = add nsw i32 %921, 2
  call void @fstWritex(ptr noundef nonnull %0, ptr noundef nonnull %29, i32 noundef %925)
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %29) #11
  br label %.thread1136

.thread1136:                                      ; preds = %850, %920, %919
  %.18711138 = phi i32 [ %.18711141, %920 ], [ %.1871, %919 ], [ %684, %850 ]
  %926 = load i32, ptr %19, align 4, !tbaa !19
  %927 = add i32 %926, %.18711138
  store i32 %927, ptr %19, align 4, !tbaa !19
  %928 = load i32, ptr %677, align 4, !tbaa !19
  %929 = add i32 %928, %927
  store i32 %929, ptr %677, align 4, !tbaa !19
  %930 = getelementptr inbounds i32, ptr %36, i64 %676
  %931 = load i32, ptr %930, align 4, !tbaa !19
  %932 = sub i32 %931, %927
  store i32 %932, ptr %930, align 4, !tbaa !19
  %933 = getelementptr inbounds i32, ptr %34, i64 %676
  %934 = load i32, ptr %933, align 4, !tbaa !19
  store i32 %934, ptr %670, align 4, !tbaa !19
  store i32 0, ptr %933, align 4, !tbaa !19
  %.not1062 = icmp eq i32 %931, %927
  br i1 %.not1062, label %944, label %935

935:                                              ; preds = %.thread1136
  %936 = zext i32 %929 to i64
  %937 = getelementptr inbounds i8, ptr %94, i64 %936
  %938 = call i32 @fstGetVarint32NoSkip(ptr noundef %937)
  %939 = lshr i32 %938, 1
  %940 = add i32 %939, %.49001278
  %.not1063 = icmp ult i32 %940, %142
  br i1 %.not1063, label %thread-pre-split, label %thread-pre-split.sink.split

thread-pre-split.sink.split:                      ; preds = %935, %767, %723
  %.sink1468.ph = phi i32 [ %730, %723 ], [ %772, %767 ], [ %940, %935 ]
  %.sink1465.ph = phi ptr [ %721, %723 ], [ %765, %767 ], [ %933, %935 ]
  call void @chk_report_abort(ptr noundef nonnull @.str.54)
  br label %thread-pre-split

thread-pre-split:                                 ; preds = %thread-pre-split.sink.split, %935, %767, %723
  %.sink1468 = phi i32 [ %730, %723 ], [ %772, %767 ], [ %940, %935 ], [ %.sink1468.ph, %thread-pre-split.sink.split ]
  %.sink1465 = phi ptr [ %721, %723 ], [ %765, %767 ], [ %933, %935 ], [ %.sink1465.ph, %thread-pre-split.sink.split ]
  %941 = zext i32 %.sink1468 to i64
  %942 = getelementptr inbounds i32, ptr %143, i64 %941
  %943 = load i32, ptr %942, align 4, !tbaa !19
  store i32 %943, ptr %.sink1465, align 4, !tbaa !19
  store i32 %674, ptr %942, align 4, !tbaa !19
  %.pr = load i32, ptr %670, align 4, !tbaa !19
  br label %944

944:                                              ; preds = %thread-pre-split, %.thread1136, %758, %715
  %945 = phi i32 [ %.pr, %thread-pre-split ], [ %934, %.thread1136 ], [ %766, %758 ], [ %722, %715 ]
  %.not1049 = icmp eq i32 %945, 0
  br i1 %.not1049, label %._crit_edge1275, label %673, !llvm.loop !48

946:                                              ; preds = %643
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %21) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %20) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %19) #11
  br label %.loopexit1387

._crit_edge1275:                                  ; preds = %944, %669
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %20) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %19) #11
  %947 = add i32 %.49001278, 1
  %948 = zext i32 %947 to i64
  %949 = icmp ugt i64 %105, %948
  br i1 %949, label %636, label %.loopexit1387, !llvm.loop !49

.loopexit1387:                                    ; preds = %._crit_edge1275, %329, %362, %946, %._crit_edge1265
  %.12 = phi i32 [ %.59451276, %946 ], [ %.4944, %362 ], [ %.4944, %329 ], [ %.4944, %._crit_edge1265 ], [ %.10950, %._crit_edge1275 ]
  %.10 = phi i32 [ %.49241277, %946 ], [ %.3923, %362 ], [ %.3923, %329 ], [ %.3923, %._crit_edge1265 ], [ %.8928, %._crit_edge1275 ]
  %.2908 = phi i64 [ %.1907, %946 ], [ %.1907, %362 ], [ %.0906.ph, %329 ], [ %.1907, %._crit_edge1265 ], [ %.1907, %._crit_edge1275 ]
  %.7894 = phi i32 [ %.6893, %946 ], [ %.0887.ph, %362 ], [ %.0887.ph, %329 ], [ %.6893, %._crit_edge1265 ], [ %.6893, %._crit_edge1275 ]
  %.2874 = phi ptr [ %.1873, %946 ], [ %.1873, %362 ], [ %.0872.ph, %329 ], [ %.1873, %._crit_edge1265 ], [ %.1873, %._crit_edge1275 ]
  %.2868 = phi ptr [ %.1867, %946 ], [ %.1867, %362 ], [ %.0866.ph, %329 ], [ %.1867, %._crit_edge1265 ], [ %.1867, %._crit_edge1275 ]
  %.6 = phi i64 [ %.11279, %946 ], [ %.0846.ph, %362 ], [ %.0846.ph, %329 ], [ %.0846.ph, %._crit_edge1265 ], [ %.4, %._crit_edge1275 ]
  call void @free(ptr noundef %143) #11
  call void @free(ptr noundef %345) #11
  call void @free(ptr noundef %94) #11
  %950 = add i32 %.0858.ph, 1
  %951 = zext i32 %950 to i64
  %952 = load i64, ptr %59, align 8, !tbaa !50
  %953 = icmp eq i64 %952, %951
  br i1 %953, label %.thread1152.thread, label %.outer

.thread1152:                                      ; preds = %107, %99, %.loopexit1389
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #11
  %.not1090 = icmp eq ptr %94, null
  br i1 %.not1090, label %.thread1152.thread, label %954

954:                                              ; preds = %.thread1152
  call void @free(ptr noundef nonnull %94) #11
  br label %.thread1152.thread

.thread1152.thread:                               ; preds = %88, %.loopexit1387, %75, %64, %64, %954, %.thread1152
  %.387511711386 = phi ptr [ %.0872.ph, %954 ], [ %.0872.ph, %.thread1152 ], [ %.0872.ph, %64 ], [ %.0872.ph, %64 ], [ %.0872.ph, %75 ], [ %.0872.ph, %88 ], [ %.2874, %.loopexit1387 ]
  %.386911721385 = phi ptr [ %.0866.ph, %954 ], [ %.0866.ph, %.thread1152 ], [ %.0866.ph, %64 ], [ %.0866.ph, %64 ], [ %.0866.ph, %75 ], [ %.0866.ph, %88 ], [ %.2868, %.loopexit1387 ]
  %.285111731384 = phi ptr [ %.0849.ph, %954 ], [ %.0849.ph, %.thread1152 ], [ %.0849.ph, %64 ], [ %.0849.ph, %64 ], [ %.0849.ph, %75 ], [ %.0849.ph, %88 ], [ %140, %.loopexit1387 ]
  call void @free(ptr noundef %36) #11
  call void @free(ptr noundef %35) #11
  call void @free(ptr noundef %34) #11
  %.not1091 = icmp eq ptr %.386911721385, null
  br i1 %.not1091, label %956, label %955

955:                                              ; preds = %.thread1152.thread
  call void @free(ptr noundef nonnull %.386911721385) #11
  br label %956

956:                                              ; preds = %955, %.thread1152.thread
  %.not1092 = icmp eq ptr %.387511711386, null
  br i1 %.not1092, label %958, label %957

957:                                              ; preds = %956
  call void @free(ptr noundef nonnull %.387511711386) #11
  br label %958

958:                                              ; preds = %957, %956
  call void @free(ptr noundef %.285111731384) #11
  br i1 %.not1017, label %960, label %959

959:                                              ; preds = %958
  call void @fstWritex(ptr noundef nonnull %0, ptr noundef null, i32 noundef 0)
  br label %960

960:                                              ; preds = %958, %959, %5
  %.0 = phi i32 [ 0, %5 ], [ 1, %959 ], [ 1, %958 ]
  ret i32 %.0
}

; Function Attrs: nofree nounwind
declare noundef i32 @setvbuf(ptr nocapture noundef, ptr noundef, i32 noundef, i64 noundef) local_unnamed_addr #5

; Function Attrs: nounwind uwtable
declare hidden void @chk_report_abort(ptr noundef) local_unnamed_addr #6

; Function Attrs: nounwind uwtable
declare hidden void @fstWritex(ptr noundef, ptr noundef, i32 noundef) local_unnamed_addr #6

; Function Attrs: nounwind uwtable
declare hidden i32 @fstVcdIDForFwrite(ptr noundef, i32 noundef) local_unnamed_addr #6

; Function Attrs: nounwind uwtable
declare hidden i64 @fstGetSVarint64(ptr noundef, ptr noundef) local_unnamed_addr #6

; Function Attrs: nounwind uwtable
declare hidden i32 @fstReaderVarint32WithSkip(ptr noundef, ptr noundef) local_unnamed_addr #6

declare i32 @LZ4_decompress_safe_partial(ptr noundef, ptr noundef, i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #8

declare i32 @fastlz_decompress(ptr noundef, i32 noundef, ptr noundef, i32 noundef) local_unnamed_addr #8

; Function Attrs: nounwind uwtable
declare hidden i32 @fstGetVarint32NoSkip(ptr noundef) local_unnamed_addr #6

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i64 @llvm.umax.i64(i64, i64) #9

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.umin.i32(i32, i32) #9

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.umax.i32(i32, i32) #9

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i64 @llvm.bswap.i64(i64) #9

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { mustprogress nofree nounwind willreturn allockind("alloc,zeroed") allocsize(0,1) memory(inaccessiblemem: readwrite) "alloc-family"="malloc" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { mustprogress nounwind willreturn allockind("free") memory(argmem: readwrite, inaccessiblemem: readwrite) "alloc-family"="malloc" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #4 = { mustprogress nofree nounwind willreturn allockind("alloc,uninitialized") allocsize(0) memory(inaccessiblemem: readwrite) "alloc-family"="malloc" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { nofree nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { noreturn nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #8 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #9 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #10 = { nounwind allocsize(0,1) }
attributes #11 = { nounwind }
attributes #12 = { nounwind allocsize(0) }
attributes #13 = { cold nounwind }
attributes #14 = { noreturn nounwind }

!llvm.module.flags = !{!0, !1, !2, !3}
!llvm.ident = !{!4}

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !11, i64 56}
!6 = !{!"fstReaderContext", !7, i64 0, !7, i64 8, !10, i64 16, !10, i64 24, !10, i64 32, !10, i64 40, !10, i64 48, !11, i64 56, !10, i64 64, !10, i64 72, !7, i64 80, !7, i64 88, !7, i64 96, !11, i64 104, !7, i64 112, !8, i64 120, !8, i64 121, !11, i64 122, !11, i64 122, !11, i64 122, !11, i64 122, !11, i64 122, !11, i64 122, !11, i64 122, !11, i64 122, !8, i64 123, !8, i64 252, !10, i64 376, !7, i64 384, !7, i64 392, !10, i64 400, !11, i64 408, !7, i64 416, !7, i64 424, !10, i64 432, !10, i64 440, !11, i64 448, !7, i64 456, !10, i64 464, !10, i64 472, !7, i64 480, !10, i64 488, !7, i64 496, !7, i64 504, !10, i64 512, !10, i64 520, !7, i64 528, !11, i64 536, !11, i64 540, !7, i64 544, !11, i64 552, !11, i64 556, !11, i64 560, !10, i64 568, !11, i64 576, !12, i64 584, !7, i64 632, !11, i64 640, !7, i64 648, !11, i64 656, !11, i64 660, !8, i64 661, !8, i64 1174, !7, i64 1688, !11, i64 1696, !11, i64 1700, !11, i64 1704, !8, i64 1708, !7, i64 67248, !7, i64 67256}
!7 = !{!"any pointer", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"long", !8, i64 0}
!11 = !{!"int", !8, i64 0}
!12 = !{!"fstHier", !8, i64 0, !8, i64 8}
!13 = !{!6, !11, i64 1704}
!14 = !{!6, !7, i64 0}
!15 = !{!6, !10, i64 432}
!16 = !{!6, !10, i64 440}
!17 = !{!10, !10, i64 0}
!18 = !{!7, !7, i64 0}
!19 = !{!11, !11, i64 0}
!20 = distinct !{!20, !21}
!21 = !{!"llvm.loop.mustprogress"}
!22 = !{!6, !11, i64 408}
!23 = !{!6, !7, i64 416}
!24 = !{!6, !7, i64 424}
!25 = !{!8, !8, i64 0}
!26 = !{!6, !7, i64 96}
!27 = !{!6, !7, i64 80}
!28 = !{!6, !7, i64 112}
!29 = !{!6, !7, i64 88}
!30 = !{!6, !11, i64 104}
!31 = !{!32, !32, i64 0}
!32 = !{!"double", !8, i64 0}
!33 = distinct !{!33, !21}
!34 = distinct !{!34, !21, !35, !36}
!35 = !{!"llvm.loop.isvectorized", i32 1}
!36 = !{!"llvm.loop.unroll.runtime.disable"}
!37 = distinct !{!37, !38}
!38 = !{!"llvm.loop.unroll.disable"}
!39 = distinct !{!39, !21, !35}
!40 = distinct !{!40, !21}
!41 = distinct !{!41, !21, !35, !36}
!42 = distinct !{!42, !38}
!43 = distinct !{!43, !21, !35}
!44 = distinct !{!44, !21}
!45 = distinct !{!45, !21}
!46 = distinct !{!46, !21}
!47 = distinct !{!47, !21}
!48 = distinct !{!48, !21}
!49 = distinct !{!49, !21}
!50 = !{!6, !10, i64 72}


; Effective O3 passes: ADCEPass,BDCEPass,CorrelatedValuePropagationPass,DSEPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferAlignmentPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopInstSimplifyPass,LoopLoadEliminationPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,LoopVectorizePass,PostOrderFunctionAttrsPass,ReassociatePass,SCCPPass,SLPVectorizerPass,SROAPass,SimplifyCFGPass,TailCallElimPass