; LLVM IR from specinfo-ua/UAPKI :: library/uapkif/src/asn1 (OCTET_STRING)

; 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.asn_OCTET_STRING_specifics_s = type { i32, i32, i32 }
%struct.asn_dec_rval_s = type { i32, i64 }
%struct.asn_TYPE_descriptor_s = type { ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, i32, ptr, i32, ptr, ptr, i32, ptr }
%struct.asn_struct_ctx_s = type { i16, i16, i32, ptr, i64 }
%struct.BIT_STRING_s = type { ptr, i32, i32, %struct.asn_struct_ctx_s }
%struct._stack = type { ptr, ptr }
%struct._stack_el = type { i64, i64, i32, i32, i32, i32, ptr, ptr }

@asn_DEF_OCTET_STRING_specs = external hidden constant %struct.asn_OCTET_STRING_specifics_s, align 4
@.str.2 = external hidden unnamed_addr constant [3 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local { i32, i64 } @OCTET_STRING_decode_ber(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, i64 noundef %4, i32 noundef %5) #0 {
  %7 = alloca %struct.asn_dec_rval_s, align 8
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  %11 = alloca ptr, align 8
  %12 = alloca i64, align 8
  %13 = alloca i32, align 4
  %14 = alloca ptr, align 8
  %15 = alloca ptr, align 8
  %16 = alloca %struct.asn_dec_rval_s, align 8
  %17 = alloca ptr, align 8
  %18 = alloca i64, align 8
  %19 = alloca ptr, align 8
  %20 = alloca ptr, align 8
  %21 = alloca i32, align 4
  %22 = alloca i32, align 4
  %23 = alloca i32, align 4
  %24 = alloca %struct.asn_dec_rval_s, align 8
  %25 = alloca i64, align 8
  %26 = alloca i64, align 8
  %27 = alloca i64, align 8
  %28 = alloca ptr, align 8
  %29 = alloca i64, align 8
  %30 = alloca i32, align 4
  %31 = alloca i64, align 8
  %32 = alloca i32, align 4
  %33 = alloca i64, align 8
  %34 = alloca i64, align 8
  %35 = alloca i64, align 8
  %36 = alloca i64, align 8
  %37 = alloca ptr, align 8
  %38 = alloca i64, align 8
  %39 = alloca i64, align 8
  %40 = alloca i64, align 8
  %41 = alloca ptr, align 8
  %42 = alloca i64, align 8
  %43 = alloca i32, align 4
  %44 = alloca [2 x [32 x i8]], align 16
  %45 = alloca i64, align 8
  %46 = alloca i64, align 8
  %47 = alloca i64, align 8
  %48 = alloca ptr, align 8
  %49 = alloca i64, align 8
  %50 = alloca i64, align 8
  %51 = alloca i64, align 8
  %52 = alloca i64, align 8
  %53 = alloca i64, align 8
  %54 = alloca ptr, align 8
  %55 = alloca i64, align 8
  %56 = alloca i64, align 8
  %57 = alloca i64, align 8
  %58 = alloca ptr, align 8
  %59 = alloca i64, align 8
  %60 = alloca i64, align 8
  %61 = alloca i64, align 8
  %62 = alloca i64, align 8
  %63 = alloca i64, align 8
  %64 = alloca ptr, align 8
  %65 = alloca i64, align 8
  %66 = alloca i64, align 8
  %67 = alloca i64, align 8
  %68 = alloca i64, align 8
  %69 = alloca i64, align 8
  %70 = alloca ptr, align 8
  %71 = alloca i64, align 8
  store ptr %0, ptr %8, align 8, !tbaa !5
  store ptr %1, ptr %9, align 8, !tbaa !5
  store ptr %2, ptr %10, align 8, !tbaa !5
  store ptr %3, ptr %11, align 8, !tbaa !5
  store i64 %4, ptr %12, align 8, !tbaa !9
  store i32 %5, ptr %13, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #6
  %72 = load ptr, ptr %9, align 8, !tbaa !5
  %73 = getelementptr inbounds %struct.asn_TYPE_descriptor_s, ptr %72, i32 0, i32 19
  %74 = load ptr, ptr %73, align 8, !tbaa !13
  %75 = icmp ne ptr %74, null
  br i1 %75, label %76, label %80

76:                                               ; preds = %6
  %77 = load ptr, ptr %9, align 8, !tbaa !5
  %78 = getelementptr inbounds %struct.asn_TYPE_descriptor_s, ptr %77, i32 0, i32 19
  %79 = load ptr, ptr %78, align 8, !tbaa !13
  br label %81

80:                                               ; preds = %6
  br label %81

81:                                               ; preds = %80, %76
  %82 = phi ptr [ %79, %76 ], [ @asn_DEF_OCTET_STRING_specs, %80 ]
  store ptr %82, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #6
  %83 = load ptr, ptr %10, align 8, !tbaa !5
  %84 = load ptr, ptr %83, align 8, !tbaa !5
  store ptr %84, ptr %15, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %16) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #6
  store i64 0, ptr %18, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #6
  store ptr null, ptr %20, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #6
  %85 = load ptr, ptr %14, align 8, !tbaa !5
  %86 = getelementptr inbounds %struct.asn_OCTET_STRING_specifics_s, ptr %85, i32 0, i32 2
  %87 = load i32, ptr %86, align 4, !tbaa !15
  store i32 %87, ptr %22, align 4, !tbaa !11
  %88 = load ptr, ptr %15, align 8, !tbaa !5
  %89 = icmp eq ptr %88, null
  br i1 %89, label %90, label %107

90:                                               ; preds = %81
  %91 = load ptr, ptr %14, align 8, !tbaa !5
  %92 = getelementptr inbounds %struct.asn_OCTET_STRING_specifics_s, ptr %91, i32 0, i32 0
  %93 = load i32, ptr %92, align 4, !tbaa !17
  %94 = sext i32 %93 to i64
  %95 = call noalias ptr @calloc(i64 noundef 1, i64 noundef %94) #7
  %96 = load ptr, ptr %10, align 8, !tbaa !5
  store ptr %95, ptr %96, align 8, !tbaa !5
  store ptr %95, ptr %15, align 8, !tbaa !5
  %97 = load ptr, ptr %15, align 8, !tbaa !5
  %98 = icmp eq ptr %97, null
  br i1 %98, label %99, label %106

99:                                               ; preds = %90
  br label %100

100:                                              ; preds = %99
  %101 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 0
  store i32 2, ptr %101, align 8, !tbaa !18
  %102 = load i64, ptr %18, align 8, !tbaa !9
  %103 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 1
  store i64 %102, ptr %103, align 8, !tbaa !20
  store i32 1, ptr %23, align 4
  br label %1698

104:                                              ; No predecessors!
  br label %105

105:                                              ; preds = %104
  br label %106

106:                                              ; preds = %105, %90
  br label %107

107:                                              ; preds = %106, %81
  %108 = load ptr, ptr %15, align 8, !tbaa !5
  %109 = load ptr, ptr %14, align 8, !tbaa !5
  %110 = getelementptr inbounds %struct.asn_OCTET_STRING_specifics_s, ptr %109, i32 0, i32 1
  %111 = load i32, ptr %110, align 4, !tbaa !21
  %112 = sext i32 %111 to i64
  %113 = getelementptr inbounds i8, ptr %108, i64 %112
  store ptr %113, ptr %17, align 8, !tbaa !5
  %114 = load ptr, ptr %17, align 8, !tbaa !5
  %115 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %114, i32 0, i32 0
  %116 = load i16, ptr %115, align 8, !tbaa !22
  %117 = sext i16 %116 to i32
  switch i32 %117, label %1639 [
    i32 0, label %118
    i32 1, label %322
    i32 2, label %983
    i32 3, label %1287
  ]

118:                                              ; preds = %107
  call void @llvm.lifetime.start.p0(i64 16, ptr %24) #6
  %119 = load ptr, ptr %8, align 8, !tbaa !5
  %120 = load ptr, ptr %9, align 8, !tbaa !5
  %121 = load ptr, ptr %17, align 8, !tbaa !5
  %122 = load ptr, ptr %11, align 8, !tbaa !5
  %123 = load i64, ptr %12, align 8, !tbaa !9
  %124 = load i32, ptr %13, align 4, !tbaa !11
  %125 = load ptr, ptr %17, align 8, !tbaa !5
  %126 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %125, i32 0, i32 4
  %127 = call { i32, i64 } @ber_check_tags(ptr noundef %119, ptr noundef %120, ptr noundef %121, ptr noundef %122, i64 noundef %123, i32 noundef %124, i32 noundef -1, ptr noundef %126, ptr noundef %21)
  %128 = getelementptr inbounds { i32, i64 }, ptr %24, i32 0, i32 0
  %129 = extractvalue { i32, i64 } %127, 0
  store i32 %129, ptr %128, align 8
  %130 = getelementptr inbounds { i32, i64 }, ptr %24, i32 0, i32 1
  %131 = extractvalue { i32, i64 } %127, 1
  store i64 %131, ptr %130, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %16, ptr align 8 %24, i64 16, i1 false), !tbaa.struct !25
  call void @llvm.lifetime.end.p0(i64 16, ptr %24) #6
  %132 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %16, i32 0, i32 0
  %133 = load i32, ptr %132, align 8, !tbaa !18
  %134 = icmp ne i32 %133, 0
  br i1 %134, label %135, label %136

135:                                              ; preds = %118
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %7, ptr align 8 %16, i64 16, i1 false), !tbaa.struct !25
  store i32 1, ptr %23, align 4
  br label %1698

136:                                              ; preds = %118
  %137 = load i32, ptr %21, align 4, !tbaa !11
  %138 = icmp ne i32 %137, 0
  br i1 %138, label %139, label %159

139:                                              ; preds = %136
  %140 = call ptr @_new_stack()
  %141 = load ptr, ptr %17, align 8, !tbaa !5
  %142 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %141, i32 0, i32 3
  store ptr %140, ptr %142, align 8, !tbaa !26
  %143 = load ptr, ptr %17, align 8, !tbaa !5
  %144 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %143, i32 0, i32 3
  %145 = load ptr, ptr %144, align 8, !tbaa !26
  %146 = icmp ne ptr %145, null
  br i1 %146, label %147, label %151

147:                                              ; preds = %139
  %148 = load ptr, ptr %17, align 8, !tbaa !5
  %149 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %148, i32 0, i32 3
  %150 = load ptr, ptr %149, align 8, !tbaa !26
  store ptr %150, ptr %19, align 8, !tbaa !5
  br label %158

151:                                              ; preds = %139
  br label %152

152:                                              ; preds = %151
  %153 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 0
  store i32 2, ptr %153, align 8, !tbaa !18
  %154 = load i64, ptr %18, align 8, !tbaa !9
  %155 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 1
  store i64 %154, ptr %155, align 8, !tbaa !20
  store i32 1, ptr %23, align 4
  br label %1698

156:                                              ; No predecessors!
  br label %157

157:                                              ; preds = %156
  br label %158

158:                                              ; preds = %157, %147
  br label %303

159:                                              ; preds = %136
  br label %160

160:                                              ; preds = %159
  %161 = load ptr, ptr %17, align 8, !tbaa !5
  %162 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %161, i32 0, i32 0
  %163 = load i16, ptr %162, align 8, !tbaa !22
  %164 = sext i16 %163 to i32
  %165 = icmp eq i32 %164, 0
  br i1 %165, label %166, label %169

166:                                              ; preds = %160
  %167 = load ptr, ptr %17, align 8, !tbaa !5
  %168 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %167, i32 0, i32 2
  store i32 0, ptr %168, align 4, !tbaa !27
  br label %169

169:                                              ; preds = %166, %160
  %170 = load ptr, ptr %17, align 8, !tbaa !5
  %171 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %170, i32 0, i32 0
  %172 = load i16, ptr %171, align 8, !tbaa !22
  %173 = sext i16 %172 to i32
  %174 = add nsw i32 %173, 3
  %175 = trunc i32 %174 to i16
  store i16 %175, ptr %171, align 8, !tbaa !22
  br label %176

176:                                              ; preds = %169
  br label %177

177:                                              ; preds = %176
  %178 = load i32, ptr %22, align 4, !tbaa !11
  %179 = icmp eq i32 %178, 0
  br i1 %179, label %180, label %288

180:                                              ; preds = %177
  %181 = load i32, ptr %13, align 4, !tbaa !11
  %182 = icmp ne i32 %181, 1
  br i1 %182, label %183, label %288

183:                                              ; preds = %180
  br label %184

184:                                              ; preds = %183
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #6
  %185 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %16, i32 0, i32 1
  %186 = load i64, ptr %185, align 8, !tbaa !20
  store i64 %186, ptr %25, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #6
  %187 = load ptr, ptr %17, align 8, !tbaa !5
  %188 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %187, i32 0, i32 2
  %189 = load i32, ptr %188, align 4, !tbaa !27
  %190 = sext i32 %189 to i64
  store i64 %190, ptr %26, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #6
  %191 = load ptr, ptr %15, align 8, !tbaa !5
  %192 = getelementptr inbounds %struct.BIT_STRING_s, ptr %191, i32 0, i32 1
  %193 = load i32, ptr %192, align 8, !tbaa !28
  %194 = sext i32 %193 to i64
  %195 = load i64, ptr %25, align 8, !tbaa !9
  %196 = add i64 %194, %195
  store i64 %196, ptr %27, align 8, !tbaa !9
  %197 = load i64, ptr %27, align 8, !tbaa !9
  %198 = trunc i64 %197 to i32
  %199 = icmp slt i32 %198, 0
  br i1 %199, label %200, label %207

200:                                              ; preds = %184
  br label %201

201:                                              ; preds = %200
  %202 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 0
  store i32 2, ptr %202, align 8, !tbaa !18
  %203 = load i64, ptr %18, align 8, !tbaa !9
  %204 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 1
  store i64 %203, ptr %204, align 8, !tbaa !20
  store i32 1, ptr %23, align 4
  br label %283

205:                                              ; No predecessors!
  br label %206

206:                                              ; preds = %205
  br label %207

207:                                              ; preds = %206, %184
  %208 = load i64, ptr %26, align 8, !tbaa !9
  %209 = load i64, ptr %27, align 8, !tbaa !9
  %210 = icmp ule i64 %208, %209
  br i1 %210, label %211, label %263

211:                                              ; preds = %207
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #6
  br label %212

212:                                              ; preds = %221, %211
  %213 = load i64, ptr %26, align 8, !tbaa !9
  %214 = icmp ne i64 %213, 0
  br i1 %214, label %215, label %218

215:                                              ; preds = %212
  %216 = load i64, ptr %26, align 8, !tbaa !9
  %217 = shl i64 %216, 1
  br label %219

218:                                              ; preds = %212
  br label %219

219:                                              ; preds = %218, %215
  %220 = phi i64 [ %217, %215 ], [ 16, %218 ]
  store i64 %220, ptr %26, align 8, !tbaa !9
  br label %221

221:                                              ; preds = %219
  %222 = load i64, ptr %26, align 8, !tbaa !9
  %223 = load i64, ptr %27, align 8, !tbaa !9
  %224 = icmp ule i64 %222, %223
  br i1 %224, label %212, label %225, !llvm.loop !30

225:                                              ; preds = %221
  %226 = load i64, ptr %26, align 8, !tbaa !9
  %227 = trunc i64 %226 to i32
  %228 = icmp slt i32 %227, 0
  br i1 %228, label %229, label %236

229:                                              ; preds = %225
  br label %230

230:                                              ; preds = %229
  %231 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 0
  store i32 2, ptr %231, align 8, !tbaa !18
  %232 = load i64, ptr %18, align 8, !tbaa !9
  %233 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 1
  store i64 %232, ptr %233, align 8, !tbaa !20
  store i32 1, ptr %23, align 4
  br label %260

234:                                              ; No predecessors!
  br label %235

235:                                              ; preds = %234
  br label %236

236:                                              ; preds = %235, %225
  %237 = load ptr, ptr %15, align 8, !tbaa !5
  %238 = getelementptr inbounds %struct.BIT_STRING_s, ptr %237, i32 0, i32 0
  %239 = load ptr, ptr %238, align 8, !tbaa !32
  %240 = load i64, ptr %26, align 8, !tbaa !9
  %241 = call ptr @realloc(ptr noundef %239, i64 noundef %240) #8
  store ptr %241, ptr %28, align 8, !tbaa !5
  %242 = load ptr, ptr %28, align 8, !tbaa !5
  %243 = icmp ne ptr %242, null
  br i1 %243, label %244, label %252

244:                                              ; preds = %236
  %245 = load ptr, ptr %28, align 8, !tbaa !5
  %246 = load ptr, ptr %15, align 8, !tbaa !5
  %247 = getelementptr inbounds %struct.BIT_STRING_s, ptr %246, i32 0, i32 0
  store ptr %245, ptr %247, align 8, !tbaa !32
  %248 = load i64, ptr %26, align 8, !tbaa !9
  %249 = trunc i64 %248 to i32
  %250 = load ptr, ptr %17, align 8, !tbaa !5
  %251 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %250, i32 0, i32 2
  store i32 %249, ptr %251, align 4, !tbaa !27
  br label %259

252:                                              ; preds = %236
  br label %253

253:                                              ; preds = %252
  %254 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 0
  store i32 2, ptr %254, align 8, !tbaa !18
  %255 = load i64, ptr %18, align 8, !tbaa !9
  %256 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 1
  store i64 %255, ptr %256, align 8, !tbaa !20
  store i32 1, ptr %23, align 4
  br label %260

257:                                              ; No predecessors!
  br label %258

258:                                              ; preds = %257
  br label %259

259:                                              ; preds = %258, %244
  store i32 0, ptr %23, align 4
  br label %260

260:                                              ; preds = %259, %253, %230
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #6
  %261 = load i32, ptr %23, align 4
  switch i32 %261, label %283 [
    i32 0, label %262
  ]

262:                                              ; preds = %260
  br label %263

263:                                              ; preds = %262, %207
  %264 = load ptr, ptr %15, align 8, !tbaa !5
  %265 = getelementptr inbounds %struct.BIT_STRING_s, ptr %264, i32 0, i32 0
  %266 = load ptr, ptr %265, align 8, !tbaa !32
  %267 = load ptr, ptr %15, align 8, !tbaa !5
  %268 = getelementptr inbounds %struct.BIT_STRING_s, ptr %267, i32 0, i32 1
  %269 = load i32, ptr %268, align 8, !tbaa !28
  %270 = sext i32 %269 to i64
  %271 = getelementptr inbounds i8, ptr %266, i64 %270
  %272 = load ptr, ptr %11, align 8, !tbaa !5
  %273 = load i64, ptr %25, align 8, !tbaa !9
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %271, ptr align 1 %272, i64 %273, i1 false)
  %274 = load ptr, ptr %15, align 8, !tbaa !5
  %275 = getelementptr inbounds %struct.BIT_STRING_s, ptr %274, i32 0, i32 0
  %276 = load ptr, ptr %275, align 8, !tbaa !32
  %277 = load i64, ptr %27, align 8, !tbaa !9
  %278 = getelementptr inbounds i8, ptr %276, i64 %277
  store i8 0, ptr %278, align 1, !tbaa !33
  %279 = load i64, ptr %27, align 8, !tbaa !9
  %280 = trunc i64 %279 to i32
  %281 = load ptr, ptr %15, align 8, !tbaa !5
  %282 = getelementptr inbounds %struct.BIT_STRING_s, ptr %281, i32 0, i32 1
  store i32 %280, ptr %282, align 8, !tbaa !28
  store i32 0, ptr %23, align 4
  br label %283

283:                                              ; preds = %263, %260, %201
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #6
  %284 = load i32, ptr %23, align 4
  switch i32 %284, label %1698 [
    i32 0, label %285
  ]

285:                                              ; preds = %283
  br label %286

286:                                              ; preds = %285
  br label %287

287:                                              ; preds = %286
  br label %288

288:                                              ; preds = %287, %180, %177
  br label %289

289:                                              ; preds = %288
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #6
  %290 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %16, i32 0, i32 1
  %291 = load i64, ptr %290, align 8, !tbaa !20
  store i64 %291, ptr %29, align 8, !tbaa !9
  %292 = load ptr, ptr %11, align 8, !tbaa !5
  %293 = load i64, ptr %29, align 8, !tbaa !9
  %294 = getelementptr inbounds i8, ptr %292, i64 %293
  store ptr %294, ptr %11, align 8, !tbaa !5
  %295 = load i64, ptr %29, align 8, !tbaa !9
  %296 = load i64, ptr %12, align 8, !tbaa !9
  %297 = sub i64 %296, %295
  store i64 %297, ptr %12, align 8, !tbaa !9
  %298 = load i64, ptr %29, align 8, !tbaa !9
  %299 = load i64, ptr %18, align 8, !tbaa !9
  %300 = add i64 %299, %298
  store i64 %300, ptr %18, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #6
  br label %301

301:                                              ; preds = %289
  br label %302

302:                                              ; preds = %301
  br label %1288

303:                                              ; preds = %158
  br label %304

304:                                              ; preds = %303
  %305 = load ptr, ptr %17, align 8, !tbaa !5
  %306 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %305, i32 0, i32 0
  %307 = load i16, ptr %306, align 8, !tbaa !22
  %308 = sext i16 %307 to i32
  %309 = icmp eq i32 %308, 0
  br i1 %309, label %310, label %313

310:                                              ; preds = %304
  %311 = load ptr, ptr %17, align 8, !tbaa !5
  %312 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %311, i32 0, i32 2
  store i32 0, ptr %312, align 4, !tbaa !27
  br label %313

313:                                              ; preds = %310, %304
  %314 = load ptr, ptr %17, align 8, !tbaa !5
  %315 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %314, i32 0, i32 0
  %316 = load i16, ptr %315, align 8, !tbaa !22
  %317 = sext i16 %316 to i32
  %318 = add nsw i32 %317, 1
  %319 = trunc i32 %318 to i16
  store i16 %319, ptr %315, align 8, !tbaa !22
  br label %320

320:                                              ; preds = %313
  br label %321

321:                                              ; preds = %320
  br label %322

322:                                              ; preds = %321, %107
  br label %323

323:                                              ; preds = %1285, %322
  %324 = load ptr, ptr %17, align 8, !tbaa !5
  %325 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %324, i32 0, i32 3
  %326 = load ptr, ptr %325, align 8, !tbaa !26
  store ptr %326, ptr %19, align 8, !tbaa !5
  %327 = load ptr, ptr %19, align 8, !tbaa !5
  %328 = getelementptr inbounds %struct._stack, ptr %327, i32 0, i32 1
  %329 = load ptr, ptr %328, align 8, !tbaa !34
  store ptr %329, ptr %20, align 8, !tbaa !5
  br label %330

330:                                              ; preds = %939, %323
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #6
  %331 = load ptr, ptr %20, align 8, !tbaa !5
  %332 = icmp ne ptr %331, null
  br i1 %332, label %333, label %339

333:                                              ; preds = %330
  %334 = load ptr, ptr %20, align 8, !tbaa !5
  %335 = getelementptr inbounds %struct._stack_el, ptr %334, i32 0, i32 0
  %336 = load i64, ptr %335, align 8, !tbaa !36
  %337 = load i64, ptr %12, align 8, !tbaa !9
  %338 = icmp uge i64 %336, %337
  br i1 %338, label %339, label %341

339:                                              ; preds = %333, %330
  %340 = load i64, ptr %12, align 8, !tbaa !9
  br label %345

341:                                              ; preds = %333
  %342 = load ptr, ptr %20, align 8, !tbaa !5
  %343 = getelementptr inbounds %struct._stack_el, ptr %342, i32 0, i32 0
  %344 = load i64, ptr %343, align 8, !tbaa !36
  br label %345

345:                                              ; preds = %341, %339
  %346 = phi i64 [ %340, %339 ], [ %344, %341 ]
  store i64 %346, ptr %36, align 8, !tbaa !9
  %347 = load ptr, ptr %20, align 8, !tbaa !5
  %348 = icmp ne ptr %347, null
  br i1 %348, label %349, label %410

349:                                              ; preds = %345
  %350 = load ptr, ptr %20, align 8, !tbaa !5
  %351 = getelementptr inbounds %struct._stack_el, ptr %350, i32 0, i32 0
  %352 = load i64, ptr %351, align 8, !tbaa !36
  %353 = icmp sle i64 %352, 0
  br i1 %353, label %354, label %410

354:                                              ; preds = %349
  %355 = load ptr, ptr %20, align 8, !tbaa !5
  %356 = getelementptr inbounds %struct._stack_el, ptr %355, i32 0, i32 3
  %357 = load i32, ptr %356, align 4, !tbaa !38
  %358 = icmp eq i32 %357, 0
  br i1 %358, label %359, label %410

359:                                              ; preds = %354
  %360 = load ptr, ptr %20, align 8, !tbaa !5
  %361 = getelementptr inbounds %struct._stack_el, ptr %360, i32 0, i32 6
  %362 = load ptr, ptr %361, align 8, !tbaa !39
  %363 = icmp ne ptr %362, null
  br i1 %363, label %364, label %407

364:                                              ; preds = %359
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #6
  %365 = load ptr, ptr %20, align 8, !tbaa !5
  %366 = getelementptr inbounds %struct._stack_el, ptr %365, i32 0, i32 6
  %367 = load ptr, ptr %366, align 8, !tbaa !39
  store ptr %367, ptr %37, align 8, !tbaa !5
  %368 = load ptr, ptr %37, align 8, !tbaa !5
  %369 = getelementptr inbounds %struct._stack_el, ptr %368, i32 0, i32 0
  %370 = load i64, ptr %369, align 8, !tbaa !36
  %371 = icmp ne i64 %370, -1
  br i1 %371, label %372, label %395

372:                                              ; preds = %364
  %373 = load ptr, ptr %37, align 8, !tbaa !5
  %374 = getelementptr inbounds %struct._stack_el, ptr %373, i32 0, i32 0
  %375 = load i64, ptr %374, align 8, !tbaa !36
  %376 = load ptr, ptr %20, align 8, !tbaa !5
  %377 = getelementptr inbounds %struct._stack_el, ptr %376, i32 0, i32 1
  %378 = load i64, ptr %377, align 8, !tbaa !40
  %379 = icmp slt i64 %375, %378
  br i1 %379, label %380, label %387

380:                                              ; preds = %372
  br label %381

381:                                              ; preds = %380
  %382 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 0
  store i32 2, ptr %382, align 8, !tbaa !18
  %383 = load i64, ptr %18, align 8, !tbaa !9
  %384 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 1
  store i64 %383, ptr %384, align 8, !tbaa !20
  store i32 1, ptr %23, align 4
  br label %406

385:                                              ; No predecessors!
  br label %386

386:                                              ; preds = %385
  br label %387

387:                                              ; preds = %386, %372
  %388 = load ptr, ptr %20, align 8, !tbaa !5
  %389 = getelementptr inbounds %struct._stack_el, ptr %388, i32 0, i32 1
  %390 = load i64, ptr %389, align 8, !tbaa !40
  %391 = load ptr, ptr %37, align 8, !tbaa !5
  %392 = getelementptr inbounds %struct._stack_el, ptr %391, i32 0, i32 0
  %393 = load i64, ptr %392, align 8, !tbaa !36
  %394 = sub nsw i64 %393, %390
  store i64 %394, ptr %392, align 8, !tbaa !36
  br label %395

395:                                              ; preds = %387, %364
  %396 = load ptr, ptr %20, align 8, !tbaa !5
  %397 = getelementptr inbounds %struct._stack_el, ptr %396, i32 0, i32 1
  %398 = load i64, ptr %397, align 8, !tbaa !40
  %399 = load ptr, ptr %37, align 8, !tbaa !5
  %400 = getelementptr inbounds %struct._stack_el, ptr %399, i32 0, i32 1
  %401 = load i64, ptr %400, align 8, !tbaa !40
  %402 = add nsw i64 %401, %398
  store i64 %402, ptr %400, align 8, !tbaa !40
  %403 = load ptr, ptr %37, align 8, !tbaa !5
  %404 = load ptr, ptr %19, align 8, !tbaa !5
  %405 = getelementptr inbounds %struct._stack, ptr %404, i32 0, i32 1
  store ptr %403, ptr %405, align 8, !tbaa !34
  store ptr %403, ptr %20, align 8, !tbaa !5
  store i32 1, ptr %21, align 4, !tbaa !11
  store i32 26, ptr %23, align 4
  br label %406

406:                                              ; preds = %395, %381
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #6
  br label %936

407:                                              ; preds = %359
  %408 = load ptr, ptr %19, align 8, !tbaa !5
  %409 = getelementptr inbounds %struct._stack, ptr %408, i32 0, i32 1
  store ptr null, ptr %409, align 8, !tbaa !34
  store ptr null, ptr %20, align 8, !tbaa !5
  store i32 25, ptr %23, align 4
  br label %936

410:                                              ; preds = %354, %349, %345
  %411 = load ptr, ptr %11, align 8, !tbaa !5
  %412 = load i64, ptr %36, align 8, !tbaa !9
  %413 = call i64 @ber_fetch_tag(ptr noundef %411, i64 noundef %412, ptr noundef %30)
  store i64 %413, ptr %33, align 8, !tbaa !9
  %414 = load i64, ptr %33, align 8, !tbaa !9
  switch i64 %414, label %429 [
    i64 -1, label %415
    i64 0, label %422
  ]

415:                                              ; preds = %410
  br label %416

416:                                              ; preds = %415
  %417 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 0
  store i32 2, ptr %417, align 8, !tbaa !18
  %418 = load i64, ptr %18, align 8, !tbaa !9
  %419 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 1
  store i64 %418, ptr %419, align 8, !tbaa !20
  store i32 1, ptr %23, align 4
  br label %936

420:                                              ; No predecessors!
  br label %421

421:                                              ; preds = %420
  br label %422

422:                                              ; preds = %421, %410
  br label %423

423:                                              ; preds = %422
  %424 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 0
  store i32 1, ptr %424, align 8, !tbaa !18
  %425 = load i64, ptr %18, align 8, !tbaa !9
  %426 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 1
  store i64 %425, ptr %426, align 8, !tbaa !20
  store i32 1, ptr %23, align 4
  br label %936

427:                                              ; No predecessors!
  br label %428

428:                                              ; preds = %427
  br label %429

429:                                              ; preds = %428, %410
  %430 = load ptr, ptr %11, align 8, !tbaa !5
  %431 = load i8, ptr %430, align 1, !tbaa !33
  %432 = zext i8 %431 to i32
  %433 = and i32 %432, 32
  %434 = icmp ne i32 %433, 0
  %435 = zext i1 %434 to i64
  %436 = select i1 %434, i32 1, i32 0
  store i32 %436, ptr %21, align 4, !tbaa !11
  %437 = load i32, ptr %21, align 4, !tbaa !11
  %438 = load ptr, ptr %11, align 8, !tbaa !5
  %439 = load i64, ptr %33, align 8, !tbaa !9
  %440 = getelementptr inbounds i8, ptr %438, i64 %439
  %441 = load i64, ptr %36, align 8, !tbaa !9
  %442 = load i64, ptr %33, align 8, !tbaa !9
  %443 = sub nsw i64 %441, %442
  %444 = call i64 @ber_fetch_length(i32 noundef %437, ptr noundef %440, i64 noundef %443, ptr noundef %31)
  store i64 %444, ptr %34, align 8, !tbaa !9
  %445 = load i64, ptr %34, align 8, !tbaa !9
  switch i64 %445, label %460 [
    i64 -1, label %446
    i64 0, label %453
  ]

446:                                              ; preds = %429
  br label %447

447:                                              ; preds = %446
  %448 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 0
  store i32 2, ptr %448, align 8, !tbaa !18
  %449 = load i64, ptr %18, align 8, !tbaa !9
  %450 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 1
  store i64 %449, ptr %450, align 8, !tbaa !20
  store i32 1, ptr %23, align 4
  br label %936

451:                                              ; No predecessors!
  br label %452

452:                                              ; preds = %451
  br label %453

453:                                              ; preds = %452, %429
  br label %454

454:                                              ; preds = %453
  %455 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 0
  store i32 1, ptr %455, align 8, !tbaa !18
  %456 = load i64, ptr %18, align 8, !tbaa !9
  %457 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 1
  store i64 %456, ptr %457, align 8, !tbaa !20
  store i32 1, ptr %23, align 4
  br label %936

458:                                              ; No predecessors!
  br label %459

459:                                              ; preds = %458
  br label %460

460:                                              ; preds = %459, %429
  %461 = load ptr, ptr %20, align 8, !tbaa !5
  %462 = icmp ne ptr %461, null
  br i1 %462, label %463, label %632

463:                                              ; preds = %460
  %464 = load ptr, ptr %20, align 8, !tbaa !5
  %465 = getelementptr inbounds %struct._stack_el, ptr %464, i32 0, i32 3
  %466 = load i32, ptr %465, align 4, !tbaa !38
  %467 = icmp ne i32 %466, 0
  br i1 %467, label %468, label %632

468:                                              ; preds = %463
  %469 = load ptr, ptr %11, align 8, !tbaa !5
  %470 = getelementptr inbounds i8, ptr %469, i64 0
  %471 = load i8, ptr %470, align 1, !tbaa !33
  %472 = zext i8 %471 to i32
  %473 = icmp eq i32 %472, 0
  br i1 %473, label %474, label %632

474:                                              ; preds = %468
  %475 = load ptr, ptr %11, align 8, !tbaa !5
  %476 = getelementptr inbounds i8, ptr %475, i64 1
  %477 = load i8, ptr %476, align 1, !tbaa !33
  %478 = zext i8 %477 to i32
  %479 = icmp eq i32 %478, 0
  br i1 %479, label %480, label %632

480:                                              ; preds = %474
  %481 = load i32, ptr %22, align 4, !tbaa !11
  %482 = icmp eq i32 %481, 0
  br i1 %482, label %483, label %593

483:                                              ; preds = %480
  %484 = load i32, ptr %13, align 4, !tbaa !11
  %485 = icmp ne i32 %484, 1
  br i1 %485, label %491, label %486

486:                                              ; preds = %483
  %487 = load ptr, ptr %20, align 8, !tbaa !5
  %488 = getelementptr inbounds %struct._stack_el, ptr %487, i32 0, i32 2
  %489 = load i32, ptr %488, align 8, !tbaa !41
  %490 = icmp ne i32 %489, 0
  br i1 %490, label %491, label %593

491:                                              ; preds = %486, %483
  br label %492

492:                                              ; preds = %491
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #6
  store i64 2, ptr %38, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #6
  %493 = load ptr, ptr %17, align 8, !tbaa !5
  %494 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %493, i32 0, i32 2
  %495 = load i32, ptr %494, align 4, !tbaa !27
  %496 = sext i32 %495 to i64
  store i64 %496, ptr %39, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #6
  %497 = load ptr, ptr %15, align 8, !tbaa !5
  %498 = getelementptr inbounds %struct.BIT_STRING_s, ptr %497, i32 0, i32 1
  %499 = load i32, ptr %498, align 8, !tbaa !28
  %500 = sext i32 %499 to i64
  %501 = load i64, ptr %38, align 8, !tbaa !9
  %502 = add i64 %500, %501
  store i64 %502, ptr %40, align 8, !tbaa !9
  %503 = load i64, ptr %40, align 8, !tbaa !9
  %504 = trunc i64 %503 to i32
  %505 = icmp slt i32 %504, 0
  br i1 %505, label %506, label %513

506:                                              ; preds = %492
  br label %507

507:                                              ; preds = %506
  %508 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 0
  store i32 2, ptr %508, align 8, !tbaa !18
  %509 = load i64, ptr %18, align 8, !tbaa !9
  %510 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 1
  store i64 %509, ptr %510, align 8, !tbaa !20
  store i32 1, ptr %23, align 4
  br label %588

511:                                              ; No predecessors!
  br label %512

512:                                              ; preds = %511
  br label %513

513:                                              ; preds = %512, %492
  %514 = load i64, ptr %39, align 8, !tbaa !9
  %515 = load i64, ptr %40, align 8, !tbaa !9
  %516 = icmp ule i64 %514, %515
  br i1 %516, label %517, label %569

517:                                              ; preds = %513
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #6
  br label %518

518:                                              ; preds = %527, %517
  %519 = load i64, ptr %39, align 8, !tbaa !9
  %520 = icmp ne i64 %519, 0
  br i1 %520, label %521, label %524

521:                                              ; preds = %518
  %522 = load i64, ptr %39, align 8, !tbaa !9
  %523 = shl i64 %522, 1
  br label %525

524:                                              ; preds = %518
  br label %525

525:                                              ; preds = %524, %521
  %526 = phi i64 [ %523, %521 ], [ 16, %524 ]
  store i64 %526, ptr %39, align 8, !tbaa !9
  br label %527

527:                                              ; preds = %525
  %528 = load i64, ptr %39, align 8, !tbaa !9
  %529 = load i64, ptr %40, align 8, !tbaa !9
  %530 = icmp ule i64 %528, %529
  br i1 %530, label %518, label %531, !llvm.loop !42

531:                                              ; preds = %527
  %532 = load i64, ptr %39, align 8, !tbaa !9
  %533 = trunc i64 %532 to i32
  %534 = icmp slt i32 %533, 0
  br i1 %534, label %535, label %542

535:                                              ; preds = %531
  br label %536

536:                                              ; preds = %535
  %537 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 0
  store i32 2, ptr %537, align 8, !tbaa !18
  %538 = load i64, ptr %18, align 8, !tbaa !9
  %539 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 1
  store i64 %538, ptr %539, align 8, !tbaa !20
  store i32 1, ptr %23, align 4
  br label %566

540:                                              ; No predecessors!
  br label %541

541:                                              ; preds = %540
  br label %542

542:                                              ; preds = %541, %531
  %543 = load ptr, ptr %15, align 8, !tbaa !5
  %544 = getelementptr inbounds %struct.BIT_STRING_s, ptr %543, i32 0, i32 0
  %545 = load ptr, ptr %544, align 8, !tbaa !32
  %546 = load i64, ptr %39, align 8, !tbaa !9
  %547 = call ptr @realloc(ptr noundef %545, i64 noundef %546) #8
  store ptr %547, ptr %41, align 8, !tbaa !5
  %548 = load ptr, ptr %41, align 8, !tbaa !5
  %549 = icmp ne ptr %548, null
  br i1 %549, label %550, label %558

550:                                              ; preds = %542
  %551 = load ptr, ptr %41, align 8, !tbaa !5
  %552 = load ptr, ptr %15, align 8, !tbaa !5
  %553 = getelementptr inbounds %struct.BIT_STRING_s, ptr %552, i32 0, i32 0
  store ptr %551, ptr %553, align 8, !tbaa !32
  %554 = load i64, ptr %39, align 8, !tbaa !9
  %555 = trunc i64 %554 to i32
  %556 = load ptr, ptr %17, align 8, !tbaa !5
  %557 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %556, i32 0, i32 2
  store i32 %555, ptr %557, align 4, !tbaa !27
  br label %565

558:                                              ; preds = %542
  br label %559

559:                                              ; preds = %558
  %560 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 0
  store i32 2, ptr %560, align 8, !tbaa !18
  %561 = load i64, ptr %18, align 8, !tbaa !9
  %562 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 1
  store i64 %561, ptr %562, align 8, !tbaa !20
  store i32 1, ptr %23, align 4
  br label %566

563:                                              ; No predecessors!
  br label %564

564:                                              ; preds = %563
  br label %565

565:                                              ; preds = %564, %550
  store i32 0, ptr %23, align 4
  br label %566

566:                                              ; preds = %565, %559, %536
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #6
  %567 = load i32, ptr %23, align 4
  switch i32 %567, label %588 [
    i32 0, label %568
  ]

568:                                              ; preds = %566
  br label %569

569:                                              ; preds = %568, %513
  %570 = load ptr, ptr %15, align 8, !tbaa !5
  %571 = getelementptr inbounds %struct.BIT_STRING_s, ptr %570, i32 0, i32 0
  %572 = load ptr, ptr %571, align 8, !tbaa !32
  %573 = load ptr, ptr %15, align 8, !tbaa !5
  %574 = getelementptr inbounds %struct.BIT_STRING_s, ptr %573, i32 0, i32 1
  %575 = load i32, ptr %574, align 8, !tbaa !28
  %576 = sext i32 %575 to i64
  %577 = getelementptr inbounds i8, ptr %572, i64 %576
  %578 = load i64, ptr %38, align 8, !tbaa !9
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %577, ptr align 1 @.str.2, i64 %578, i1 false)
  %579 = load ptr, ptr %15, align 8, !tbaa !5
  %580 = getelementptr inbounds %struct.BIT_STRING_s, ptr %579, i32 0, i32 0
  %581 = load ptr, ptr %580, align 8, !tbaa !32
  %582 = load i64, ptr %40, align 8, !tbaa !9
  %583 = getelementptr inbounds i8, ptr %581, i64 %582
  store i8 0, ptr %583, align 1, !tbaa !33
  %584 = load i64, ptr %40, align 8, !tbaa !9
  %585 = trunc i64 %584 to i32
  %586 = load ptr, ptr %15, align 8, !tbaa !5
  %587 = getelementptr inbounds %struct.BIT_STRING_s, ptr %586, i32 0, i32 1
  store i32 %585, ptr %587, align 8, !tbaa !28
  store i32 0, ptr %23, align 4
  br label %588

588:                                              ; preds = %569, %566, %507
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #6
  %589 = load i32, ptr %23, align 4
  switch i32 %589, label %936 [
    i32 0, label %590
  ]

590:                                              ; preds = %588
  br label %591

591:                                              ; preds = %590
  br label %592

592:                                              ; preds = %591
  br label %593

593:                                              ; preds = %592, %486, %480
  br label %594

594:                                              ; preds = %593
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #6
  store i64 2, ptr %42, align 8, !tbaa !9
  %595 = load ptr, ptr %11, align 8, !tbaa !5
  %596 = load i64, ptr %42, align 8, !tbaa !9
  %597 = getelementptr inbounds i8, ptr %595, i64 %596
  store ptr %597, ptr %11, align 8, !tbaa !5
  %598 = load i64, ptr %42, align 8, !tbaa !9
  %599 = load i64, ptr %12, align 8, !tbaa !9
  %600 = sub i64 %599, %598
  store i64 %600, ptr %12, align 8, !tbaa !9
  %601 = load i64, ptr %42, align 8, !tbaa !9
  %602 = load i64, ptr %18, align 8, !tbaa !9
  %603 = add i64 %602, %601
  store i64 %603, ptr %18, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #6
  br label %604

604:                                              ; preds = %594
  br label %605

605:                                              ; preds = %604
  %606 = load ptr, ptr %20, align 8, !tbaa !5
  %607 = getelementptr inbounds %struct._stack_el, ptr %606, i32 0, i32 1
  %608 = load i64, ptr %607, align 8, !tbaa !40
  %609 = add nsw i64 %608, 2
  store i64 %609, ptr %607, align 8, !tbaa !40
  %610 = load ptr, ptr %20, align 8, !tbaa !5
  %611 = getelementptr inbounds %struct._stack_el, ptr %610, i32 0, i32 0
  %612 = load i64, ptr %611, align 8, !tbaa !36
  %613 = icmp ne i64 %612, -1
  br i1 %613, label %614, label %619

614:                                              ; preds = %605
  %615 = load ptr, ptr %20, align 8, !tbaa !5
  %616 = getelementptr inbounds %struct._stack_el, ptr %615, i32 0, i32 0
  %617 = load i64, ptr %616, align 8, !tbaa !36
  %618 = sub nsw i64 %617, 2
  store i64 %618, ptr %616, align 8, !tbaa !36
  br label %619

619:                                              ; preds = %614, %605
  %620 = load ptr, ptr %20, align 8, !tbaa !5
  %621 = getelementptr inbounds %struct._stack_el, ptr %620, i32 0, i32 3
  %622 = load i32, ptr %621, align 4, !tbaa !38
  %623 = add nsw i32 %622, -1
  store i32 %623, ptr %621, align 4, !tbaa !38
  %624 = load ptr, ptr %20, align 8, !tbaa !5
  %625 = getelementptr inbounds %struct._stack_el, ptr %624, i32 0, i32 3
  %626 = load i32, ptr %625, align 4, !tbaa !38
  %627 = icmp eq i32 %626, 0
  br i1 %627, label %628, label %631

628:                                              ; preds = %619
  %629 = load ptr, ptr %20, align 8, !tbaa !5
  %630 = getelementptr inbounds %struct._stack_el, ptr %629, i32 0, i32 0
  store i64 0, ptr %630, align 8, !tbaa !36
  store i32 1, ptr %21, align 4, !tbaa !11
  br label %631

631:                                              ; preds = %628, %619
  store i32 26, ptr %23, align 4
  br label %936

632:                                              ; preds = %474, %468, %463, %460
  %633 = load i32, ptr %22, align 4, !tbaa !11
  switch i32 %633, label %635 [
    i32 1, label %634
    i32 2, label %634
    i32 0, label %677
  ]

634:                                              ; preds = %632, %632
  br label %635

635:                                              ; preds = %634, %632
  %636 = load ptr, ptr %20, align 8, !tbaa !5
  %637 = icmp ne ptr %636, null
  br i1 %637, label %638, label %676

638:                                              ; preds = %635
  call void @llvm.lifetime.start.p0(i64 4, ptr %43) #6
  %639 = load ptr, ptr %20, align 8, !tbaa !5
  %640 = getelementptr inbounds %struct._stack_el, ptr %639, i32 0, i32 2
  %641 = load i32, ptr %640, align 8, !tbaa !41
  store i32 %641, ptr %43, align 4, !tbaa !11
  %642 = load i32, ptr %43, align 4, !tbaa !11
  %643 = load ptr, ptr %9, align 8, !tbaa !5
  %644 = getelementptr inbounds %struct.asn_TYPE_descriptor_s, ptr %643, i32 0, i32 15
  %645 = load i32, ptr %644, align 8, !tbaa !43
  %646 = icmp slt i32 %642, %645
  br i1 %646, label %647, label %655

647:                                              ; preds = %638
  %648 = load ptr, ptr %9, align 8, !tbaa !5
  %649 = getelementptr inbounds %struct.asn_TYPE_descriptor_s, ptr %648, i32 0, i32 14
  %650 = load ptr, ptr %649, align 8, !tbaa !44
  %651 = load i32, ptr %43, align 4, !tbaa !11
  %652 = sext i32 %651 to i64
  %653 = getelementptr inbounds i32, ptr %650, i64 %652
  %654 = load i32, ptr %653, align 4, !tbaa !11
  store i32 %654, ptr %32, align 4, !tbaa !11
  store i32 51, ptr %23, align 4
  br label %673

655:                                              ; preds = %638
  %656 = load ptr, ptr %9, align 8, !tbaa !5
  %657 = getelementptr inbounds %struct.asn_TYPE_descriptor_s, ptr %656, i32 0, i32 15
  %658 = load i32, ptr %657, align 8, !tbaa !43
  %659 = icmp ne i32 %658, 0
  br i1 %659, label %660, label %671

660:                                              ; preds = %655
  %661 = load ptr, ptr %9, align 8, !tbaa !5
  %662 = getelementptr inbounds %struct.asn_TYPE_descriptor_s, ptr %661, i32 0, i32 14
  %663 = load ptr, ptr %662, align 8, !tbaa !44
  %664 = load ptr, ptr %9, align 8, !tbaa !5
  %665 = getelementptr inbounds %struct.asn_TYPE_descriptor_s, ptr %664, i32 0, i32 15
  %666 = load i32, ptr %665, align 8, !tbaa !43
  %667 = sub nsw i32 %666, 1
  %668 = sext i32 %667 to i64
  %669 = getelementptr inbounds i32, ptr %663, i64 %668
  %670 = load i32, ptr %669, align 4, !tbaa !11
  store i32 %670, ptr %32, align 4, !tbaa !11
  store i32 51, ptr %23, align 4
  br label %673

671:                                              ; preds = %655
  br label %672

672:                                              ; preds = %671
  store i32 0, ptr %23, align 4
  br label %673

673:                                              ; preds = %672, %660, %647
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #6
  %674 = load i32, ptr %23, align 4
  switch i32 %674, label %1702 [
    i32 0, label %675
    i32 51, label %679
  ]

675:                                              ; preds = %673
  br label %676

676:                                              ; preds = %675, %635
  br label %677

677:                                              ; preds = %676, %632
  %678 = load i32, ptr %30, align 4, !tbaa !11
  store i32 %678, ptr %32, align 4, !tbaa !11
  br label %679

679:                                              ; preds = %677, %673
  %680 = load i32, ptr %30, align 4, !tbaa !11
  %681 = load i32, ptr %32, align 4, !tbaa !11
  %682 = icmp ne i32 %680, %681
  br i1 %682, label %683, label %710

683:                                              ; preds = %679
  call void @llvm.lifetime.start.p0(i64 64, ptr %44) #6
  %684 = load i32, ptr %30, align 4, !tbaa !11
  %685 = getelementptr inbounds [2 x [32 x i8]], ptr %44, i64 0, i64 0
  %686 = getelementptr inbounds [32 x i8], ptr %685, i64 0, i64 0
  %687 = call i64 @ber_tlv_tag_snprint(i32 noundef %684, ptr noundef %686, i64 noundef 32)
  %688 = load ptr, ptr %9, align 8, !tbaa !5
  %689 = getelementptr inbounds %struct.asn_TYPE_descriptor_s, ptr %688, i32 0, i32 12
  %690 = load ptr, ptr %689, align 8, !tbaa !45
  %691 = load ptr, ptr %9, align 8, !tbaa !5
  %692 = getelementptr inbounds %struct.asn_TYPE_descriptor_s, ptr %691, i32 0, i32 13
  %693 = load i32, ptr %692, align 8, !tbaa !46
  %694 = sub nsw i32 %693, 1
  %695 = sext i32 %694 to i64
  %696 = getelementptr inbounds i32, ptr %690, i64 %695
  %697 = load i32, ptr %696, align 4, !tbaa !11
  %698 = getelementptr inbounds [2 x [32 x i8]], ptr %44, i64 0, i64 1
  %699 = getelementptr inbounds [32 x i8], ptr %698, i64 0, i64 0
  %700 = call i64 @ber_tlv_tag_snprint(i32 noundef %697, ptr noundef %699, i64 noundef 32)
  br label %701

701:                                              ; preds = %683
  %702 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 0
  store i32 2, ptr %702, align 8, !tbaa !18
  %703 = load i64, ptr %18, align 8, !tbaa !9
  %704 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 1
  store i64 %703, ptr %704, align 8, !tbaa !20
  store i32 1, ptr %23, align 4
  br label %707

705:                                              ; No predecessors!
  br label %706

706:                                              ; preds = %705
  store i32 0, ptr %23, align 4
  br label %707

707:                                              ; preds = %706, %701
  call void @llvm.lifetime.end.p0(i64 64, ptr %44) #6
  %708 = load i32, ptr %23, align 4
  switch i32 %708, label %936 [
    i32 0, label %709
  ]

709:                                              ; preds = %707
  br label %710

710:                                              ; preds = %709, %679
  %711 = load i64, ptr %33, align 8, !tbaa !9
  %712 = load i64, ptr %34, align 8, !tbaa !9
  %713 = add nsw i64 %711, %712
  store i64 %713, ptr %35, align 8, !tbaa !9
  %714 = load i64, ptr %31, align 8, !tbaa !9
  %715 = load i64, ptr %35, align 8, !tbaa !9
  %716 = add nsw i64 %714, %715
  %717 = icmp slt i64 %716, 0
  br i1 %717, label %718, label %725

718:                                              ; preds = %710
  br label %719

719:                                              ; preds = %718
  %720 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 0
  store i32 2, ptr %720, align 8, !tbaa !18
  %721 = load i64, ptr %18, align 8, !tbaa !9
  %722 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 1
  store i64 %721, ptr %722, align 8, !tbaa !20
  store i32 1, ptr %23, align 4
  br label %936

723:                                              ; No predecessors!
  br label %724

724:                                              ; preds = %723
  br label %725

725:                                              ; preds = %724, %710
  %726 = load ptr, ptr %19, align 8, !tbaa !5
  %727 = call ptr @OS__add_stack_el(ptr noundef %726)
  store ptr %727, ptr %20, align 8, !tbaa !5
  %728 = load ptr, ptr %20, align 8, !tbaa !5
  %729 = icmp ne ptr %728, null
  br i1 %729, label %737, label %730

730:                                              ; preds = %725
  br label %731

731:                                              ; preds = %730
  %732 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 0
  store i32 2, ptr %732, align 8, !tbaa !18
  %733 = load i64, ptr %18, align 8, !tbaa !9
  %734 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 1
  store i64 %733, ptr %734, align 8, !tbaa !20
  store i32 1, ptr %23, align 4
  br label %936

735:                                              ; No predecessors!
  br label %736

736:                                              ; preds = %735
  br label %737

737:                                              ; preds = %736, %725
  %738 = load i32, ptr %30, align 4, !tbaa !11
  %739 = load ptr, ptr %20, align 8, !tbaa !5
  %740 = getelementptr inbounds %struct._stack_el, ptr %739, i32 0, i32 5
  store i32 %738, ptr %740, align 4, !tbaa !47
  %741 = load i64, ptr %31, align 8, !tbaa !9
  %742 = icmp eq i64 %741, -1
  %743 = zext i1 %742 to i32
  %744 = load ptr, ptr %20, align 8, !tbaa !5
  %745 = getelementptr inbounds %struct._stack_el, ptr %744, i32 0, i32 3
  store i32 %743, ptr %745, align 4, !tbaa !38
  %746 = load ptr, ptr %20, align 8, !tbaa !5
  %747 = getelementptr inbounds %struct._stack_el, ptr %746, i32 0, i32 6
  %748 = load ptr, ptr %747, align 8, !tbaa !39
  %749 = icmp ne ptr %748, null
  br i1 %749, label %750, label %798

750:                                              ; preds = %737
  %751 = load ptr, ptr %20, align 8, !tbaa !5
  %752 = getelementptr inbounds %struct._stack_el, ptr %751, i32 0, i32 6
  %753 = load ptr, ptr %752, align 8, !tbaa !39
  %754 = getelementptr inbounds %struct._stack_el, ptr %753, i32 0, i32 0
  %755 = load i64, ptr %754, align 8, !tbaa !36
  %756 = icmp ne i64 %755, -1
  br i1 %756, label %757, label %798

757:                                              ; preds = %750
  %758 = load ptr, ptr %20, align 8, !tbaa !5
  %759 = getelementptr inbounds %struct._stack_el, ptr %758, i32 0, i32 6
  %760 = load ptr, ptr %759, align 8, !tbaa !39
  %761 = getelementptr inbounds %struct._stack_el, ptr %760, i32 0, i32 0
  %762 = load i64, ptr %761, align 8, !tbaa !36
  %763 = load i64, ptr %35, align 8, !tbaa !9
  %764 = load i64, ptr %31, align 8, !tbaa !9
  %765 = icmp eq i64 %764, -1
  br i1 %765, label %766, label %767

766:                                              ; preds = %757
  br label %769

767:                                              ; preds = %757
  %768 = load i64, ptr %31, align 8, !tbaa !9
  br label %769

769:                                              ; preds = %767, %766
  %770 = phi i64 [ 0, %766 ], [ %768, %767 ]
  %771 = add nsw i64 %763, %770
  %772 = icmp slt i64 %762, %771
  br i1 %772, label %773, label %780

773:                                              ; preds = %769
  br label %774

774:                                              ; preds = %773
  %775 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 0
  store i32 2, ptr %775, align 8, !tbaa !18
  %776 = load i64, ptr %18, align 8, !tbaa !9
  %777 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 1
  store i64 %776, ptr %777, align 8, !tbaa !20
  store i32 1, ptr %23, align 4
  br label %936

778:                                              ; No predecessors!
  br label %779

779:                                              ; preds = %778
  br label %780

780:                                              ; preds = %779, %769
  %781 = load i64, ptr %31, align 8, !tbaa !9
  %782 = icmp eq i64 %781, -1
  br i1 %782, label %783, label %793

783:                                              ; preds = %780
  %784 = load ptr, ptr %20, align 8, !tbaa !5
  %785 = getelementptr inbounds %struct._stack_el, ptr %784, i32 0, i32 6
  %786 = load ptr, ptr %785, align 8, !tbaa !39
  %787 = getelementptr inbounds %struct._stack_el, ptr %786, i32 0, i32 0
  %788 = load i64, ptr %787, align 8, !tbaa !36
  %789 = load i64, ptr %35, align 8, !tbaa !9
  %790 = sub nsw i64 %788, %789
  %791 = load ptr, ptr %20, align 8, !tbaa !5
  %792 = getelementptr inbounds %struct._stack_el, ptr %791, i32 0, i32 0
  store i64 %790, ptr %792, align 8, !tbaa !36
  br label %797

793:                                              ; preds = %780
  %794 = load i64, ptr %31, align 8, !tbaa !9
  %795 = load ptr, ptr %20, align 8, !tbaa !5
  %796 = getelementptr inbounds %struct._stack_el, ptr %795, i32 0, i32 0
  store i64 %794, ptr %796, align 8, !tbaa !36
  br label %797

797:                                              ; preds = %793, %783
  br label %802

798:                                              ; preds = %750, %737
  %799 = load i64, ptr %31, align 8, !tbaa !9
  %800 = load ptr, ptr %20, align 8, !tbaa !5
  %801 = getelementptr inbounds %struct._stack_el, ptr %800, i32 0, i32 0
  store i64 %799, ptr %801, align 8, !tbaa !36
  br label %802

802:                                              ; preds = %798, %797
  %803 = load i32, ptr %22, align 4, !tbaa !11
  %804 = icmp eq i32 %803, 0
  br i1 %804, label %805, label %917

805:                                              ; preds = %802
  %806 = load i32, ptr %13, align 4, !tbaa !11
  %807 = icmp ne i32 %806, 1
  br i1 %807, label %813, label %808

808:                                              ; preds = %805
  %809 = load ptr, ptr %20, align 8, !tbaa !5
  %810 = getelementptr inbounds %struct._stack_el, ptr %809, i32 0, i32 2
  %811 = load i32, ptr %810, align 8, !tbaa !41
  %812 = icmp ne i32 %811, 0
  br i1 %812, label %813, label %917

813:                                              ; preds = %808, %805
  br label %814

814:                                              ; preds = %813
  call void @llvm.lifetime.start.p0(i64 8, ptr %45) #6
  %815 = load i64, ptr %35, align 8, !tbaa !9
  store i64 %815, ptr %45, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %46) #6
  %816 = load ptr, ptr %17, align 8, !tbaa !5
  %817 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %816, i32 0, i32 2
  %818 = load i32, ptr %817, align 4, !tbaa !27
  %819 = sext i32 %818 to i64
  store i64 %819, ptr %46, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %47) #6
  %820 = load ptr, ptr %15, align 8, !tbaa !5
  %821 = getelementptr inbounds %struct.BIT_STRING_s, ptr %820, i32 0, i32 1
  %822 = load i32, ptr %821, align 8, !tbaa !28
  %823 = sext i32 %822 to i64
  %824 = load i64, ptr %45, align 8, !tbaa !9
  %825 = add i64 %823, %824
  store i64 %825, ptr %47, align 8, !tbaa !9
  %826 = load i64, ptr %47, align 8, !tbaa !9
  %827 = trunc i64 %826 to i32
  %828 = icmp slt i32 %827, 0
  br i1 %828, label %829, label %836

829:                                              ; preds = %814
  br label %830

830:                                              ; preds = %829
  %831 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 0
  store i32 2, ptr %831, align 8, !tbaa !18
  %832 = load i64, ptr %18, align 8, !tbaa !9
  %833 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 1
  store i64 %832, ptr %833, align 8, !tbaa !20
  store i32 1, ptr %23, align 4
  br label %912

834:                                              ; No predecessors!
  br label %835

835:                                              ; preds = %834
  br label %836

836:                                              ; preds = %835, %814
  %837 = load i64, ptr %46, align 8, !tbaa !9
  %838 = load i64, ptr %47, align 8, !tbaa !9
  %839 = icmp ule i64 %837, %838
  br i1 %839, label %840, label %892

840:                                              ; preds = %836
  call void @llvm.lifetime.start.p0(i64 8, ptr %48) #6
  br label %841

841:                                              ; preds = %850, %840
  %842 = load i64, ptr %46, align 8, !tbaa !9
  %843 = icmp ne i64 %842, 0
  br i1 %843, label %844, label %847

844:                                              ; preds = %841
  %845 = load i64, ptr %46, align 8, !tbaa !9
  %846 = shl i64 %845, 1
  br label %848

847:                                              ; preds = %841
  br label %848

848:                                              ; preds = %847, %844
  %849 = phi i64 [ %846, %844 ], [ 16, %847 ]
  store i64 %849, ptr %46, align 8, !tbaa !9
  br label %850

850:                                              ; preds = %848
  %851 = load i64, ptr %46, align 8, !tbaa !9
  %852 = load i64, ptr %47, align 8, !tbaa !9
  %853 = icmp ule i64 %851, %852
  br i1 %853, label %841, label %854, !llvm.loop !48

854:                                              ; preds = %850
  %855 = load i64, ptr %46, align 8, !tbaa !9
  %856 = trunc i64 %855 to i32
  %857 = icmp slt i32 %856, 0
  br i1 %857, label %858, label %865

858:                                              ; preds = %854
  br label %859

859:                                              ; preds = %858
  %860 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 0
  store i32 2, ptr %860, align 8, !tbaa !18
  %861 = load i64, ptr %18, align 8, !tbaa !9
  %862 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 1
  store i64 %861, ptr %862, align 8, !tbaa !20
  store i32 1, ptr %23, align 4
  br label %889

863:                                              ; No predecessors!
  br label %864

864:                                              ; preds = %863
  br label %865

865:                                              ; preds = %864, %854
  %866 = load ptr, ptr %15, align 8, !tbaa !5
  %867 = getelementptr inbounds %struct.BIT_STRING_s, ptr %866, i32 0, i32 0
  %868 = load ptr, ptr %867, align 8, !tbaa !32
  %869 = load i64, ptr %46, align 8, !tbaa !9
  %870 = call ptr @realloc(ptr noundef %868, i64 noundef %869) #8
  store ptr %870, ptr %48, align 8, !tbaa !5
  %871 = load ptr, ptr %48, align 8, !tbaa !5
  %872 = icmp ne ptr %871, null
  br i1 %872, label %873, label %881

873:                                              ; preds = %865
  %874 = load ptr, ptr %48, align 8, !tbaa !5
  %875 = load ptr, ptr %15, align 8, !tbaa !5
  %876 = getelementptr inbounds %struct.BIT_STRING_s, ptr %875, i32 0, i32 0
  store ptr %874, ptr %876, align 8, !tbaa !32
  %877 = load i64, ptr %46, align 8, !tbaa !9
  %878 = trunc i64 %877 to i32
  %879 = load ptr, ptr %17, align 8, !tbaa !5
  %880 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %879, i32 0, i32 2
  store i32 %878, ptr %880, align 4, !tbaa !27
  br label %888

881:                                              ; preds = %865
  br label %882

882:                                              ; preds = %881
  %883 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 0
  store i32 2, ptr %883, align 8, !tbaa !18
  %884 = load i64, ptr %18, align 8, !tbaa !9
  %885 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 1
  store i64 %884, ptr %885, align 8, !tbaa !20
  store i32 1, ptr %23, align 4
  br label %889

886:                                              ; No predecessors!
  br label %887

887:                                              ; preds = %886
  br label %888

888:                                              ; preds = %887, %873
  store i32 0, ptr %23, align 4
  br label %889

889:                                              ; preds = %888, %882, %859
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #6
  %890 = load i32, ptr %23, align 4
  switch i32 %890, label %912 [
    i32 0, label %891
  ]

891:                                              ; preds = %889
  br label %892

892:                                              ; preds = %891, %836
  %893 = load ptr, ptr %15, align 8, !tbaa !5
  %894 = getelementptr inbounds %struct.BIT_STRING_s, ptr %893, i32 0, i32 0
  %895 = load ptr, ptr %894, align 8, !tbaa !32
  %896 = load ptr, ptr %15, align 8, !tbaa !5
  %897 = getelementptr inbounds %struct.BIT_STRING_s, ptr %896, i32 0, i32 1
  %898 = load i32, ptr %897, align 8, !tbaa !28
  %899 = sext i32 %898 to i64
  %900 = getelementptr inbounds i8, ptr %895, i64 %899
  %901 = load ptr, ptr %11, align 8, !tbaa !5
  %902 = load i64, ptr %45, align 8, !tbaa !9
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %900, ptr align 1 %901, i64 %902, i1 false)
  %903 = load ptr, ptr %15, align 8, !tbaa !5
  %904 = getelementptr inbounds %struct.BIT_STRING_s, ptr %903, i32 0, i32 0
  %905 = load ptr, ptr %904, align 8, !tbaa !32
  %906 = load i64, ptr %47, align 8, !tbaa !9
  %907 = getelementptr inbounds i8, ptr %905, i64 %906
  store i8 0, ptr %907, align 1, !tbaa !33
  %908 = load i64, ptr %47, align 8, !tbaa !9
  %909 = trunc i64 %908 to i32
  %910 = load ptr, ptr %15, align 8, !tbaa !5
  %911 = getelementptr inbounds %struct.BIT_STRING_s, ptr %910, i32 0, i32 1
  store i32 %909, ptr %911, align 8, !tbaa !28
  store i32 0, ptr %23, align 4
  br label %912

912:                                              ; preds = %892, %889, %830
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #6
  %913 = load i32, ptr %23, align 4
  switch i32 %913, label %936 [
    i32 0, label %914
  ]

914:                                              ; preds = %912
  br label %915

915:                                              ; preds = %914
  br label %916

916:                                              ; preds = %915
  br label %917

917:                                              ; preds = %916, %808, %802
  %918 = load i64, ptr %35, align 8, !tbaa !9
  %919 = load ptr, ptr %20, align 8, !tbaa !5
  %920 = getelementptr inbounds %struct._stack_el, ptr %919, i32 0, i32 1
  %921 = load i64, ptr %920, align 8, !tbaa !40
  %922 = add nsw i64 %921, %918
  store i64 %922, ptr %920, align 8, !tbaa !40
  br label %923

923:                                              ; preds = %917
  call void @llvm.lifetime.start.p0(i64 8, ptr %49) #6
  %924 = load i64, ptr %35, align 8, !tbaa !9
  store i64 %924, ptr %49, align 8, !tbaa !9
  %925 = load ptr, ptr %11, align 8, !tbaa !5
  %926 = load i64, ptr %49, align 8, !tbaa !9
  %927 = getelementptr inbounds i8, ptr %925, i64 %926
  store ptr %927, ptr %11, align 8, !tbaa !5
  %928 = load i64, ptr %49, align 8, !tbaa !9
  %929 = load i64, ptr %12, align 8, !tbaa !9
  %930 = sub i64 %929, %928
  store i64 %930, ptr %12, align 8, !tbaa !9
  %931 = load i64, ptr %49, align 8, !tbaa !9
  %932 = load i64, ptr %18, align 8, !tbaa !9
  %933 = add i64 %932, %931
  store i64 %933, ptr %18, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #6
  br label %934

934:                                              ; preds = %923
  br label %935

935:                                              ; preds = %934
  store i32 0, ptr %23, align 4
  br label %936

936:                                              ; preds = %935, %912, %774, %731, %719, %707, %631, %588, %454, %447, %423, %416, %407, %406
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #6
  %937 = load i32, ptr %23, align 4
  switch i32 %937, label %1698 [
    i32 0, label %938
    i32 26, label %939
    i32 25, label %942
  ]

938:                                              ; preds = %936
  br label %939

939:                                              ; preds = %938, %936
  %940 = load i32, ptr %21, align 4, !tbaa !11
  %941 = icmp ne i32 %940, 0
  br i1 %941, label %330, label %942, !llvm.loop !49

942:                                              ; preds = %939, %936
  %943 = load ptr, ptr %20, align 8, !tbaa !5
  %944 = icmp eq ptr %943, null
  br i1 %944, label %945, label %964

945:                                              ; preds = %942
  br label %946

946:                                              ; preds = %945
  %947 = load ptr, ptr %17, align 8, !tbaa !5
  %948 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %947, i32 0, i32 0
  %949 = load i16, ptr %948, align 8, !tbaa !22
  %950 = sext i16 %949 to i32
  %951 = icmp eq i32 %950, 0
  br i1 %951, label %952, label %955

952:                                              ; preds = %946
  %953 = load ptr, ptr %17, align 8, !tbaa !5
  %954 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %953, i32 0, i32 2
  store i32 0, ptr %954, align 4, !tbaa !27
  br label %955

955:                                              ; preds = %952, %946
  %956 = load ptr, ptr %17, align 8, !tbaa !5
  %957 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %956, i32 0, i32 0
  %958 = load i16, ptr %957, align 8, !tbaa !22
  %959 = sext i16 %958 to i32
  %960 = add nsw i32 %959, 3
  %961 = trunc i32 %960 to i16
  store i16 %961, ptr %957, align 8, !tbaa !22
  br label %962

962:                                              ; preds = %955
  br label %963

963:                                              ; preds = %962
  br label %1639

964:                                              ; preds = %942
  br label %965

965:                                              ; preds = %964
  %966 = load ptr, ptr %17, align 8, !tbaa !5
  %967 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %966, i32 0, i32 0
  %968 = load i16, ptr %967, align 8, !tbaa !22
  %969 = sext i16 %968 to i32
  %970 = icmp eq i32 %969, 0
  br i1 %970, label %971, label %974

971:                                              ; preds = %965
  %972 = load ptr, ptr %17, align 8, !tbaa !5
  %973 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %972, i32 0, i32 2
  store i32 0, ptr %973, align 4, !tbaa !27
  br label %974

974:                                              ; preds = %971, %965
  %975 = load ptr, ptr %17, align 8, !tbaa !5
  %976 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %975, i32 0, i32 0
  %977 = load i16, ptr %976, align 8, !tbaa !22
  %978 = sext i16 %977 to i32
  %979 = add nsw i32 %978, 1
  %980 = trunc i32 %979 to i16
  store i16 %980, ptr %976, align 8, !tbaa !22
  br label %981

981:                                              ; preds = %974
  br label %982

982:                                              ; preds = %981
  br label %983

983:                                              ; preds = %982, %107
  %984 = load ptr, ptr %17, align 8, !tbaa !5
  %985 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %984, i32 0, i32 3
  %986 = load ptr, ptr %985, align 8, !tbaa !26
  store ptr %986, ptr %19, align 8, !tbaa !5
  %987 = load ptr, ptr %19, align 8, !tbaa !5
  %988 = getelementptr inbounds %struct._stack, ptr %987, i32 0, i32 1
  %989 = load ptr, ptr %988, align 8, !tbaa !34
  store ptr %989, ptr %20, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %50) #6
  %990 = load i64, ptr %12, align 8, !tbaa !9
  %991 = load ptr, ptr %20, align 8, !tbaa !5
  %992 = getelementptr inbounds %struct._stack_el, ptr %991, i32 0, i32 0
  %993 = load i64, ptr %992, align 8, !tbaa !36
  %994 = icmp slt i64 %990, %993
  br i1 %994, label %995, label %997

995:                                              ; preds = %983
  %996 = load i64, ptr %12, align 8, !tbaa !9
  br label %1001

997:                                              ; preds = %983
  %998 = load ptr, ptr %20, align 8, !tbaa !5
  %999 = getelementptr inbounds %struct._stack_el, ptr %998, i32 0, i32 0
  %1000 = load i64, ptr %999, align 8, !tbaa !36
  br label %1001

1001:                                             ; preds = %997, %995
  %1002 = phi i64 [ %996, %995 ], [ %1000, %997 ]
  store i64 %1002, ptr %50, align 8, !tbaa !9
  %1003 = load i64, ptr %50, align 8, !tbaa !9
  %1004 = icmp sgt i64 %1003, 0
  br i1 %1004, label %1005, label %1254

1005:                                             ; preds = %1001
  %1006 = load i32, ptr %22, align 4, !tbaa !11
  %1007 = icmp eq i32 %1006, 1
  br i1 %1007, label %1008, label %1126

1008:                                             ; preds = %1005
  %1009 = load ptr, ptr %20, align 8, !tbaa !5
  %1010 = getelementptr inbounds %struct._stack_el, ptr %1009, i32 0, i32 4
  %1011 = load i32, ptr %1010, align 8, !tbaa !50
  %1012 = icmp eq i32 %1011, 0
  br i1 %1012, label %1013, label %1126

1013:                                             ; preds = %1008
  %1014 = load ptr, ptr %11, align 8, !tbaa !5
  %1015 = load i8, ptr %1014, align 1, !tbaa !33
  %1016 = zext i8 %1015 to i32
  %1017 = load ptr, ptr %15, align 8, !tbaa !5
  %1018 = getelementptr inbounds %struct.BIT_STRING_s, ptr %1017, i32 0, i32 2
  store i32 %1016, ptr %1018, align 4, !tbaa !51
  br label %1019

1019:                                             ; preds = %1013
  call void @llvm.lifetime.start.p0(i64 8, ptr %51) #6
  %1020 = load i64, ptr %50, align 8, !tbaa !9
  %1021 = sub nsw i64 %1020, 1
  store i64 %1021, ptr %51, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %52) #6
  %1022 = load ptr, ptr %17, align 8, !tbaa !5
  %1023 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %1022, i32 0, i32 2
  %1024 = load i32, ptr %1023, align 4, !tbaa !27
  %1025 = sext i32 %1024 to i64
  store i64 %1025, ptr %52, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %53) #6
  %1026 = load ptr, ptr %15, align 8, !tbaa !5
  %1027 = getelementptr inbounds %struct.BIT_STRING_s, ptr %1026, i32 0, i32 1
  %1028 = load i32, ptr %1027, align 8, !tbaa !28
  %1029 = sext i32 %1028 to i64
  %1030 = load i64, ptr %51, align 8, !tbaa !9
  %1031 = add i64 %1029, %1030
  store i64 %1031, ptr %53, align 8, !tbaa !9
  %1032 = load i64, ptr %53, align 8, !tbaa !9
  %1033 = trunc i64 %1032 to i32
  %1034 = icmp slt i32 %1033, 0
  br i1 %1034, label %1035, label %1042

1035:                                             ; preds = %1019
  br label %1036

1036:                                             ; preds = %1035
  %1037 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 0
  store i32 2, ptr %1037, align 8, !tbaa !18
  %1038 = load i64, ptr %18, align 8, !tbaa !9
  %1039 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 1
  store i64 %1038, ptr %1039, align 8, !tbaa !20
  store i32 1, ptr %23, align 4
  br label %1119

1040:                                             ; No predecessors!
  br label %1041

1041:                                             ; preds = %1040
  br label %1042

1042:                                             ; preds = %1041, %1019
  %1043 = load i64, ptr %52, align 8, !tbaa !9
  %1044 = load i64, ptr %53, align 8, !tbaa !9
  %1045 = icmp ule i64 %1043, %1044
  br i1 %1045, label %1046, label %1098

1046:                                             ; preds = %1042
  call void @llvm.lifetime.start.p0(i64 8, ptr %54) #6
  br label %1047

1047:                                             ; preds = %1056, %1046
  %1048 = load i64, ptr %52, align 8, !tbaa !9
  %1049 = icmp ne i64 %1048, 0
  br i1 %1049, label %1050, label %1053

1050:                                             ; preds = %1047
  %1051 = load i64, ptr %52, align 8, !tbaa !9
  %1052 = shl i64 %1051, 1
  br label %1054

1053:                                             ; preds = %1047
  br label %1054

1054:                                             ; preds = %1053, %1050
  %1055 = phi i64 [ %1052, %1050 ], [ 16, %1053 ]
  store i64 %1055, ptr %52, align 8, !tbaa !9
  br label %1056

1056:                                             ; preds = %1054
  %1057 = load i64, ptr %52, align 8, !tbaa !9
  %1058 = load i64, ptr %53, align 8, !tbaa !9
  %1059 = icmp ule i64 %1057, %1058
  br i1 %1059, label %1047, label %1060, !llvm.loop !52

1060:                                             ; preds = %1056
  %1061 = load i64, ptr %52, align 8, !tbaa !9
  %1062 = trunc i64 %1061 to i32
  %1063 = icmp slt i32 %1062, 0
  br i1 %1063, label %1064, label %1071

1064:                                             ; preds = %1060
  br label %1065

1065:                                             ; preds = %1064
  %1066 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 0
  store i32 2, ptr %1066, align 8, !tbaa !18
  %1067 = load i64, ptr %18, align 8, !tbaa !9
  %1068 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 1
  store i64 %1067, ptr %1068, align 8, !tbaa !20
  store i32 1, ptr %23, align 4
  br label %1095

1069:                                             ; No predecessors!
  br label %1070

1070:                                             ; preds = %1069
  br label %1071

1071:                                             ; preds = %1070, %1060
  %1072 = load ptr, ptr %15, align 8, !tbaa !5
  %1073 = getelementptr inbounds %struct.BIT_STRING_s, ptr %1072, i32 0, i32 0
  %1074 = load ptr, ptr %1073, align 8, !tbaa !32
  %1075 = load i64, ptr %52, align 8, !tbaa !9
  %1076 = call ptr @realloc(ptr noundef %1074, i64 noundef %1075) #8
  store ptr %1076, ptr %54, align 8, !tbaa !5
  %1077 = load ptr, ptr %54, align 8, !tbaa !5
  %1078 = icmp ne ptr %1077, null
  br i1 %1078, label %1079, label %1087

1079:                                             ; preds = %1071
  %1080 = load ptr, ptr %54, align 8, !tbaa !5
  %1081 = load ptr, ptr %15, align 8, !tbaa !5
  %1082 = getelementptr inbounds %struct.BIT_STRING_s, ptr %1081, i32 0, i32 0
  store ptr %1080, ptr %1082, align 8, !tbaa !32
  %1083 = load i64, ptr %52, align 8, !tbaa !9
  %1084 = trunc i64 %1083 to i32
  %1085 = load ptr, ptr %17, align 8, !tbaa !5
  %1086 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %1085, i32 0, i32 2
  store i32 %1084, ptr %1086, align 4, !tbaa !27
  br label %1094

1087:                                             ; preds = %1071
  br label %1088

1088:                                             ; preds = %1087
  %1089 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 0
  store i32 2, ptr %1089, align 8, !tbaa !18
  %1090 = load i64, ptr %18, align 8, !tbaa !9
  %1091 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 1
  store i64 %1090, ptr %1091, align 8, !tbaa !20
  store i32 1, ptr %23, align 4
  br label %1095

1092:                                             ; No predecessors!
  br label %1093

1093:                                             ; preds = %1092
  br label %1094

1094:                                             ; preds = %1093, %1079
  store i32 0, ptr %23, align 4
  br label %1095

1095:                                             ; preds = %1094, %1088, %1065
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #6
  %1096 = load i32, ptr %23, align 4
  switch i32 %1096, label %1119 [
    i32 0, label %1097
  ]

1097:                                             ; preds = %1095
  br label %1098

1098:                                             ; preds = %1097, %1042
  %1099 = load ptr, ptr %15, align 8, !tbaa !5
  %1100 = getelementptr inbounds %struct.BIT_STRING_s, ptr %1099, i32 0, i32 0
  %1101 = load ptr, ptr %1100, align 8, !tbaa !32
  %1102 = load ptr, ptr %15, align 8, !tbaa !5
  %1103 = getelementptr inbounds %struct.BIT_STRING_s, ptr %1102, i32 0, i32 1
  %1104 = load i32, ptr %1103, align 8, !tbaa !28
  %1105 = sext i32 %1104 to i64
  %1106 = getelementptr inbounds i8, ptr %1101, i64 %1105
  %1107 = load ptr, ptr %11, align 8, !tbaa !5
  %1108 = getelementptr inbounds i8, ptr %1107, i64 1
  %1109 = load i64, ptr %51, align 8, !tbaa !9
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %1106, ptr align 1 %1108, i64 %1109, i1 false)
  %1110 = load ptr, ptr %15, align 8, !tbaa !5
  %1111 = getelementptr inbounds %struct.BIT_STRING_s, ptr %1110, i32 0, i32 0
  %1112 = load ptr, ptr %1111, align 8, !tbaa !32
  %1113 = load i64, ptr %53, align 8, !tbaa !9
  %1114 = getelementptr inbounds i8, ptr %1112, i64 %1113
  store i8 0, ptr %1114, align 1, !tbaa !33
  %1115 = load i64, ptr %53, align 8, !tbaa !9
  %1116 = trunc i64 %1115 to i32
  %1117 = load ptr, ptr %15, align 8, !tbaa !5
  %1118 = getelementptr inbounds %struct.BIT_STRING_s, ptr %1117, i32 0, i32 1
  store i32 %1116, ptr %1118, align 8, !tbaa !28
  store i32 0, ptr %23, align 4
  br label %1119

1119:                                             ; preds = %1098, %1095, %1036
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #6
  %1120 = load i32, ptr %23, align 4
  switch i32 %1120, label %1285 [
    i32 0, label %1121
  ]

1121:                                             ; preds = %1119
  br label %1122

1122:                                             ; preds = %1121
  br label %1123

1123:                                             ; preds = %1122
  %1124 = load ptr, ptr %20, align 8, !tbaa !5
  %1125 = getelementptr inbounds %struct._stack_el, ptr %1124, i32 0, i32 4
  store i32 1, ptr %1125, align 8, !tbaa !50
  br label %1230

1126:                                             ; preds = %1008, %1005
  br label %1127

1127:                                             ; preds = %1126
  call void @llvm.lifetime.start.p0(i64 8, ptr %55) #6
  %1128 = load i64, ptr %50, align 8, !tbaa !9
  store i64 %1128, ptr %55, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %56) #6
  %1129 = load ptr, ptr %17, align 8, !tbaa !5
  %1130 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %1129, i32 0, i32 2
  %1131 = load i32, ptr %1130, align 4, !tbaa !27
  %1132 = sext i32 %1131 to i64
  store i64 %1132, ptr %56, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %57) #6
  %1133 = load ptr, ptr %15, align 8, !tbaa !5
  %1134 = getelementptr inbounds %struct.BIT_STRING_s, ptr %1133, i32 0, i32 1
  %1135 = load i32, ptr %1134, align 8, !tbaa !28
  %1136 = sext i32 %1135 to i64
  %1137 = load i64, ptr %55, align 8, !tbaa !9
  %1138 = add i64 %1136, %1137
  store i64 %1138, ptr %57, align 8, !tbaa !9
  %1139 = load i64, ptr %57, align 8, !tbaa !9
  %1140 = trunc i64 %1139 to i32
  %1141 = icmp slt i32 %1140, 0
  br i1 %1141, label %1142, label %1149

1142:                                             ; preds = %1127
  br label %1143

1143:                                             ; preds = %1142
  %1144 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 0
  store i32 2, ptr %1144, align 8, !tbaa !18
  %1145 = load i64, ptr %18, align 8, !tbaa !9
  %1146 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 1
  store i64 %1145, ptr %1146, align 8, !tbaa !20
  store i32 1, ptr %23, align 4
  br label %1225

1147:                                             ; No predecessors!
  br label %1148

1148:                                             ; preds = %1147
  br label %1149

1149:                                             ; preds = %1148, %1127
  %1150 = load i64, ptr %56, align 8, !tbaa !9
  %1151 = load i64, ptr %57, align 8, !tbaa !9
  %1152 = icmp ule i64 %1150, %1151
  br i1 %1152, label %1153, label %1205

1153:                                             ; preds = %1149
  call void @llvm.lifetime.start.p0(i64 8, ptr %58) #6
  br label %1154

1154:                                             ; preds = %1163, %1153
  %1155 = load i64, ptr %56, align 8, !tbaa !9
  %1156 = icmp ne i64 %1155, 0
  br i1 %1156, label %1157, label %1160

1157:                                             ; preds = %1154
  %1158 = load i64, ptr %56, align 8, !tbaa !9
  %1159 = shl i64 %1158, 1
  br label %1161

1160:                                             ; preds = %1154
  br label %1161

1161:                                             ; preds = %1160, %1157
  %1162 = phi i64 [ %1159, %1157 ], [ 16, %1160 ]
  store i64 %1162, ptr %56, align 8, !tbaa !9
  br label %1163

1163:                                             ; preds = %1161
  %1164 = load i64, ptr %56, align 8, !tbaa !9
  %1165 = load i64, ptr %57, align 8, !tbaa !9
  %1166 = icmp ule i64 %1164, %1165
  br i1 %1166, label %1154, label %1167, !llvm.loop !53

1167:                                             ; preds = %1163
  %1168 = load i64, ptr %56, align 8, !tbaa !9
  %1169 = trunc i64 %1168 to i32
  %1170 = icmp slt i32 %1169, 0
  br i1 %1170, label %1171, label %1178

1171:                                             ; preds = %1167
  br label %1172

1172:                                             ; preds = %1171
  %1173 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 0
  store i32 2, ptr %1173, align 8, !tbaa !18
  %1174 = load i64, ptr %18, align 8, !tbaa !9
  %1175 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 1
  store i64 %1174, ptr %1175, align 8, !tbaa !20
  store i32 1, ptr %23, align 4
  br label %1202

1176:                                             ; No predecessors!
  br label %1177

1177:                                             ; preds = %1176
  br label %1178

1178:                                             ; preds = %1177, %1167
  %1179 = load ptr, ptr %15, align 8, !tbaa !5
  %1180 = getelementptr inbounds %struct.BIT_STRING_s, ptr %1179, i32 0, i32 0
  %1181 = load ptr, ptr %1180, align 8, !tbaa !32
  %1182 = load i64, ptr %56, align 8, !tbaa !9
  %1183 = call ptr @realloc(ptr noundef %1181, i64 noundef %1182) #8
  store ptr %1183, ptr %58, align 8, !tbaa !5
  %1184 = load ptr, ptr %58, align 8, !tbaa !5
  %1185 = icmp ne ptr %1184, null
  br i1 %1185, label %1186, label %1194

1186:                                             ; preds = %1178
  %1187 = load ptr, ptr %58, align 8, !tbaa !5
  %1188 = load ptr, ptr %15, align 8, !tbaa !5
  %1189 = getelementptr inbounds %struct.BIT_STRING_s, ptr %1188, i32 0, i32 0
  store ptr %1187, ptr %1189, align 8, !tbaa !32
  %1190 = load i64, ptr %56, align 8, !tbaa !9
  %1191 = trunc i64 %1190 to i32
  %1192 = load ptr, ptr %17, align 8, !tbaa !5
  %1193 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %1192, i32 0, i32 2
  store i32 %1191, ptr %1193, align 4, !tbaa !27
  br label %1201

1194:                                             ; preds = %1178
  br label %1195

1195:                                             ; preds = %1194
  %1196 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 0
  store i32 2, ptr %1196, align 8, !tbaa !18
  %1197 = load i64, ptr %18, align 8, !tbaa !9
  %1198 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 1
  store i64 %1197, ptr %1198, align 8, !tbaa !20
  store i32 1, ptr %23, align 4
  br label %1202

1199:                                             ; No predecessors!
  br label %1200

1200:                                             ; preds = %1199
  br label %1201

1201:                                             ; preds = %1200, %1186
  store i32 0, ptr %23, align 4
  br label %1202

1202:                                             ; preds = %1201, %1195, %1172
  call void @llvm.lifetime.end.p0(i64 8, ptr %58) #6
  %1203 = load i32, ptr %23, align 4
  switch i32 %1203, label %1225 [
    i32 0, label %1204
  ]

1204:                                             ; preds = %1202
  br label %1205

1205:                                             ; preds = %1204, %1149
  %1206 = load ptr, ptr %15, align 8, !tbaa !5
  %1207 = getelementptr inbounds %struct.BIT_STRING_s, ptr %1206, i32 0, i32 0
  %1208 = load ptr, ptr %1207, align 8, !tbaa !32
  %1209 = load ptr, ptr %15, align 8, !tbaa !5
  %1210 = getelementptr inbounds %struct.BIT_STRING_s, ptr %1209, i32 0, i32 1
  %1211 = load i32, ptr %1210, align 8, !tbaa !28
  %1212 = sext i32 %1211 to i64
  %1213 = getelementptr inbounds i8, ptr %1208, i64 %1212
  %1214 = load ptr, ptr %11, align 8, !tbaa !5
  %1215 = load i64, ptr %55, align 8, !tbaa !9
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %1213, ptr align 1 %1214, i64 %1215, i1 false)
  %1216 = load ptr, ptr %15, align 8, !tbaa !5
  %1217 = getelementptr inbounds %struct.BIT_STRING_s, ptr %1216, i32 0, i32 0
  %1218 = load ptr, ptr %1217, align 8, !tbaa !32
  %1219 = load i64, ptr %57, align 8, !tbaa !9
  %1220 = getelementptr inbounds i8, ptr %1218, i64 %1219
  store i8 0, ptr %1220, align 1, !tbaa !33
  %1221 = load i64, ptr %57, align 8, !tbaa !9
  %1222 = trunc i64 %1221 to i32
  %1223 = load ptr, ptr %15, align 8, !tbaa !5
  %1224 = getelementptr inbounds %struct.BIT_STRING_s, ptr %1223, i32 0, i32 1
  store i32 %1222, ptr %1224, align 8, !tbaa !28
  store i32 0, ptr %23, align 4
  br label %1225

1225:                                             ; preds = %1205, %1202, %1143
  call void @llvm.lifetime.end.p0(i64 8, ptr %57) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %56) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %55) #6
  %1226 = load i32, ptr %23, align 4
  switch i32 %1226, label %1285 [
    i32 0, label %1227
  ]

1227:                                             ; preds = %1225
  br label %1228

1228:                                             ; preds = %1227
  br label %1229

1229:                                             ; preds = %1228
  br label %1230

1230:                                             ; preds = %1229, %1123
  br label %1231

1231:                                             ; preds = %1230
  call void @llvm.lifetime.start.p0(i64 8, ptr %59) #6
  %1232 = load i64, ptr %50, align 8, !tbaa !9
  store i64 %1232, ptr %59, align 8, !tbaa !9
  %1233 = load ptr, ptr %11, align 8, !tbaa !5
  %1234 = load i64, ptr %59, align 8, !tbaa !9
  %1235 = getelementptr inbounds i8, ptr %1233, i64 %1234
  store ptr %1235, ptr %11, align 8, !tbaa !5
  %1236 = load i64, ptr %59, align 8, !tbaa !9
  %1237 = load i64, ptr %12, align 8, !tbaa !9
  %1238 = sub i64 %1237, %1236
  store i64 %1238, ptr %12, align 8, !tbaa !9
  %1239 = load i64, ptr %59, align 8, !tbaa !9
  %1240 = load i64, ptr %18, align 8, !tbaa !9
  %1241 = add i64 %1240, %1239
  store i64 %1241, ptr %18, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %59) #6
  br label %1242

1242:                                             ; preds = %1231
  br label %1243

1243:                                             ; preds = %1242
  %1244 = load i64, ptr %50, align 8, !tbaa !9
  %1245 = load ptr, ptr %20, align 8, !tbaa !5
  %1246 = getelementptr inbounds %struct._stack_el, ptr %1245, i32 0, i32 0
  %1247 = load i64, ptr %1246, align 8, !tbaa !36
  %1248 = sub nsw i64 %1247, %1244
  store i64 %1248, ptr %1246, align 8, !tbaa !36
  %1249 = load i64, ptr %50, align 8, !tbaa !9
  %1250 = load ptr, ptr %20, align 8, !tbaa !5
  %1251 = getelementptr inbounds %struct._stack_el, ptr %1250, i32 0, i32 1
  %1252 = load i64, ptr %1251, align 8, !tbaa !40
  %1253 = add nsw i64 %1252, %1249
  store i64 %1253, ptr %1251, align 8, !tbaa !40
  br label %1254

1254:                                             ; preds = %1243, %1001
  %1255 = load ptr, ptr %20, align 8, !tbaa !5
  %1256 = getelementptr inbounds %struct._stack_el, ptr %1255, i32 0, i32 0
  %1257 = load i64, ptr %1256, align 8, !tbaa !36
  %1258 = icmp ne i64 %1257, 0
  br i1 %1258, label %1259, label %1266

1259:                                             ; preds = %1254
  br label %1260

1260:                                             ; preds = %1259
  %1261 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 0
  store i32 1, ptr %1261, align 8, !tbaa !18
  %1262 = load i64, ptr %18, align 8, !tbaa !9
  %1263 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 1
  store i64 %1262, ptr %1263, align 8, !tbaa !20
  store i32 1, ptr %23, align 4
  br label %1285

1264:                                             ; No predecessors!
  br label %1265

1265:                                             ; preds = %1264
  br label %1266

1266:                                             ; preds = %1265, %1254
  br label %1267

1267:                                             ; preds = %1266
  %1268 = load ptr, ptr %17, align 8, !tbaa !5
  %1269 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %1268, i32 0, i32 0
  %1270 = load i16, ptr %1269, align 8, !tbaa !22
  %1271 = sext i16 %1270 to i32
  %1272 = icmp eq i32 %1271, 0
  br i1 %1272, label %1273, label %1276

1273:                                             ; preds = %1267
  %1274 = load ptr, ptr %17, align 8, !tbaa !5
  %1275 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %1274, i32 0, i32 2
  store i32 0, ptr %1275, align 4, !tbaa !27
  br label %1276

1276:                                             ; preds = %1273, %1267
  %1277 = load ptr, ptr %17, align 8, !tbaa !5
  %1278 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %1277, i32 0, i32 0
  %1279 = load i16, ptr %1278, align 8, !tbaa !22
  %1280 = sext i16 %1279 to i32
  %1281 = add nsw i32 %1280, -1
  %1282 = trunc i32 %1281 to i16
  store i16 %1282, ptr %1278, align 8, !tbaa !22
  br label %1283

1283:                                             ; preds = %1276
  br label %1284

1284:                                             ; preds = %1283
  store i32 24, ptr %23, align 4
  br label %1285

1285:                                             ; preds = %1284, %1260, %1225, %1119
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #6
  %1286 = load i32, ptr %23, align 4
  switch i32 %1286, label %1698 [
    i32 24, label %323
  ]

1287:                                             ; preds = %107
  br label %1288

1288:                                             ; preds = %1287, %302
  %1289 = load i64, ptr %12, align 8, !tbaa !9
  %1290 = load ptr, ptr %17, align 8, !tbaa !5
  %1291 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %1290, i32 0, i32 4
  %1292 = load i64, ptr %1291, align 8, !tbaa !54
  %1293 = icmp ult i64 %1289, %1292
  br i1 %1293, label %1294, label %1462

1294:                                             ; preds = %1288
  %1295 = load i64, ptr %12, align 8, !tbaa !9
  %1296 = icmp ne i64 %1295, 0
  br i1 %1296, label %1304, label %1297

1297:                                             ; preds = %1294
  br label %1298

1298:                                             ; preds = %1297
  %1299 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 0
  store i32 1, ptr %1299, align 8, !tbaa !18
  %1300 = load i64, ptr %18, align 8, !tbaa !9
  %1301 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 1
  store i64 %1300, ptr %1301, align 8, !tbaa !20
  store i32 1, ptr %23, align 4
  br label %1698

1302:                                             ; No predecessors!
  br label %1303

1303:                                             ; preds = %1302
  br label %1304

1304:                                             ; preds = %1303, %1294
  %1305 = load i32, ptr %22, align 4, !tbaa !11
  %1306 = icmp eq i32 %1305, 1
  br i1 %1306, label %1307, label %1334

1307:                                             ; preds = %1304
  %1308 = load ptr, ptr %17, align 8, !tbaa !5
  %1309 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %1308, i32 0, i32 2
  %1310 = load i32, ptr %1309, align 4, !tbaa !27
  %1311 = icmp ne i32 %1310, 0
  br i1 %1311, label %1334, label %1312

1312:                                             ; preds = %1307
  %1313 = load ptr, ptr %11, align 8, !tbaa !5
  %1314 = load i8, ptr %1313, align 1, !tbaa !33
  %1315 = zext i8 %1314 to i32
  %1316 = load ptr, ptr %15, align 8, !tbaa !5
  %1317 = getelementptr inbounds %struct.BIT_STRING_s, ptr %1316, i32 0, i32 2
  store i32 %1315, ptr %1317, align 4, !tbaa !51
  %1318 = load ptr, ptr %17, align 8, !tbaa !5
  %1319 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %1318, i32 0, i32 4
  %1320 = load i64, ptr %1319, align 8, !tbaa !54
  %1321 = add nsw i64 %1320, -1
  store i64 %1321, ptr %1319, align 8, !tbaa !54
  br label %1322

1322:                                             ; preds = %1312
  call void @llvm.lifetime.start.p0(i64 8, ptr %60) #6
  store i64 1, ptr %60, align 8, !tbaa !9
  %1323 = load ptr, ptr %11, align 8, !tbaa !5
  %1324 = load i64, ptr %60, align 8, !tbaa !9
  %1325 = getelementptr inbounds i8, ptr %1323, i64 %1324
  store ptr %1325, ptr %11, align 8, !tbaa !5
  %1326 = load i64, ptr %60, align 8, !tbaa !9
  %1327 = load i64, ptr %12, align 8, !tbaa !9
  %1328 = sub i64 %1327, %1326
  store i64 %1328, ptr %12, align 8, !tbaa !9
  %1329 = load i64, ptr %60, align 8, !tbaa !9
  %1330 = load i64, ptr %18, align 8, !tbaa !9
  %1331 = add i64 %1330, %1329
  store i64 %1331, ptr %18, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %60) #6
  br label %1332

1332:                                             ; preds = %1322
  br label %1333

1333:                                             ; preds = %1332
  br label %1334

1334:                                             ; preds = %1333, %1307, %1304
  br label %1335

1335:                                             ; preds = %1334
  call void @llvm.lifetime.start.p0(i64 8, ptr %61) #6
  %1336 = load i64, ptr %12, align 8, !tbaa !9
  store i64 %1336, ptr %61, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %62) #6
  %1337 = load ptr, ptr %17, align 8, !tbaa !5
  %1338 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %1337, i32 0, i32 2
  %1339 = load i32, ptr %1338, align 4, !tbaa !27
  %1340 = sext i32 %1339 to i64
  store i64 %1340, ptr %62, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %63) #6
  %1341 = load ptr, ptr %15, align 8, !tbaa !5
  %1342 = getelementptr inbounds %struct.BIT_STRING_s, ptr %1341, i32 0, i32 1
  %1343 = load i32, ptr %1342, align 8, !tbaa !28
  %1344 = sext i32 %1343 to i64
  %1345 = load i64, ptr %61, align 8, !tbaa !9
  %1346 = add i64 %1344, %1345
  store i64 %1346, ptr %63, align 8, !tbaa !9
  %1347 = load i64, ptr %63, align 8, !tbaa !9
  %1348 = trunc i64 %1347 to i32
  %1349 = icmp slt i32 %1348, 0
  br i1 %1349, label %1350, label %1357

1350:                                             ; preds = %1335
  br label %1351

1351:                                             ; preds = %1350
  %1352 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 0
  store i32 2, ptr %1352, align 8, !tbaa !18
  %1353 = load i64, ptr %18, align 8, !tbaa !9
  %1354 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 1
  store i64 %1353, ptr %1354, align 8, !tbaa !20
  store i32 1, ptr %23, align 4
  br label %1433

1355:                                             ; No predecessors!
  br label %1356

1356:                                             ; preds = %1355
  br label %1357

1357:                                             ; preds = %1356, %1335
  %1358 = load i64, ptr %62, align 8, !tbaa !9
  %1359 = load i64, ptr %63, align 8, !tbaa !9
  %1360 = icmp ule i64 %1358, %1359
  br i1 %1360, label %1361, label %1413

1361:                                             ; preds = %1357
  call void @llvm.lifetime.start.p0(i64 8, ptr %64) #6
  br label %1362

1362:                                             ; preds = %1371, %1361
  %1363 = load i64, ptr %62, align 8, !tbaa !9
  %1364 = icmp ne i64 %1363, 0
  br i1 %1364, label %1365, label %1368

1365:                                             ; preds = %1362
  %1366 = load i64, ptr %62, align 8, !tbaa !9
  %1367 = shl i64 %1366, 1
  br label %1369

1368:                                             ; preds = %1362
  br label %1369

1369:                                             ; preds = %1368, %1365
  %1370 = phi i64 [ %1367, %1365 ], [ 16, %1368 ]
  store i64 %1370, ptr %62, align 8, !tbaa !9
  br label %1371

1371:                                             ; preds = %1369
  %1372 = load i64, ptr %62, align 8, !tbaa !9
  %1373 = load i64, ptr %63, align 8, !tbaa !9
  %1374 = icmp ule i64 %1372, %1373
  br i1 %1374, label %1362, label %1375, !llvm.loop !55

1375:                                             ; preds = %1371
  %1376 = load i64, ptr %62, align 8, !tbaa !9
  %1377 = trunc i64 %1376 to i32
  %1378 = icmp slt i32 %1377, 0
  br i1 %1378, label %1379, label %1386

1379:                                             ; preds = %1375
  br label %1380

1380:                                             ; preds = %1379
  %1381 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 0
  store i32 2, ptr %1381, align 8, !tbaa !18
  %1382 = load i64, ptr %18, align 8, !tbaa !9
  %1383 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 1
  store i64 %1382, ptr %1383, align 8, !tbaa !20
  store i32 1, ptr %23, align 4
  br label %1410

1384:                                             ; No predecessors!
  br label %1385

1385:                                             ; preds = %1384
  br label %1386

1386:                                             ; preds = %1385, %1375
  %1387 = load ptr, ptr %15, align 8, !tbaa !5
  %1388 = getelementptr inbounds %struct.BIT_STRING_s, ptr %1387, i32 0, i32 0
  %1389 = load ptr, ptr %1388, align 8, !tbaa !32
  %1390 = load i64, ptr %62, align 8, !tbaa !9
  %1391 = call ptr @realloc(ptr noundef %1389, i64 noundef %1390) #8
  store ptr %1391, ptr %64, align 8, !tbaa !5
  %1392 = load ptr, ptr %64, align 8, !tbaa !5
  %1393 = icmp ne ptr %1392, null
  br i1 %1393, label %1394, label %1402

1394:                                             ; preds = %1386
  %1395 = load ptr, ptr %64, align 8, !tbaa !5
  %1396 = load ptr, ptr %15, align 8, !tbaa !5
  %1397 = getelementptr inbounds %struct.BIT_STRING_s, ptr %1396, i32 0, i32 0
  store ptr %1395, ptr %1397, align 8, !tbaa !32
  %1398 = load i64, ptr %62, align 8, !tbaa !9
  %1399 = trunc i64 %1398 to i32
  %1400 = load ptr, ptr %17, align 8, !tbaa !5
  %1401 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %1400, i32 0, i32 2
  store i32 %1399, ptr %1401, align 4, !tbaa !27
  br label %1409

1402:                                             ; preds = %1386
  br label %1403

1403:                                             ; preds = %1402
  %1404 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 0
  store i32 2, ptr %1404, align 8, !tbaa !18
  %1405 = load i64, ptr %18, align 8, !tbaa !9
  %1406 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 1
  store i64 %1405, ptr %1406, align 8, !tbaa !20
  store i32 1, ptr %23, align 4
  br label %1410

1407:                                             ; No predecessors!
  br label %1408

1408:                                             ; preds = %1407
  br label %1409

1409:                                             ; preds = %1408, %1394
  store i32 0, ptr %23, align 4
  br label %1410

1410:                                             ; preds = %1409, %1403, %1380
  call void @llvm.lifetime.end.p0(i64 8, ptr %64) #6
  %1411 = load i32, ptr %23, align 4
  switch i32 %1411, label %1433 [
    i32 0, label %1412
  ]

1412:                                             ; preds = %1410
  br label %1413

1413:                                             ; preds = %1412, %1357
  %1414 = load ptr, ptr %15, align 8, !tbaa !5
  %1415 = getelementptr inbounds %struct.BIT_STRING_s, ptr %1414, i32 0, i32 0
  %1416 = load ptr, ptr %1415, align 8, !tbaa !32
  %1417 = load ptr, ptr %15, align 8, !tbaa !5
  %1418 = getelementptr inbounds %struct.BIT_STRING_s, ptr %1417, i32 0, i32 1
  %1419 = load i32, ptr %1418, align 8, !tbaa !28
  %1420 = sext i32 %1419 to i64
  %1421 = getelementptr inbounds i8, ptr %1416, i64 %1420
  %1422 = load ptr, ptr %11, align 8, !tbaa !5
  %1423 = load i64, ptr %61, align 8, !tbaa !9
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %1421, ptr align 1 %1422, i64 %1423, i1 false)
  %1424 = load ptr, ptr %15, align 8, !tbaa !5
  %1425 = getelementptr inbounds %struct.BIT_STRING_s, ptr %1424, i32 0, i32 0
  %1426 = load ptr, ptr %1425, align 8, !tbaa !32
  %1427 = load i64, ptr %63, align 8, !tbaa !9
  %1428 = getelementptr inbounds i8, ptr %1426, i64 %1427
  store i8 0, ptr %1428, align 1, !tbaa !33
  %1429 = load i64, ptr %63, align 8, !tbaa !9
  %1430 = trunc i64 %1429 to i32
  %1431 = load ptr, ptr %15, align 8, !tbaa !5
  %1432 = getelementptr inbounds %struct.BIT_STRING_s, ptr %1431, i32 0, i32 1
  store i32 %1430, ptr %1432, align 8, !tbaa !28
  store i32 0, ptr %23, align 4
  br label %1433

1433:                                             ; preds = %1413, %1410, %1351
  call void @llvm.lifetime.end.p0(i64 8, ptr %63) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %62) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %61) #6
  %1434 = load i32, ptr %23, align 4
  switch i32 %1434, label %1698 [
    i32 0, label %1435
  ]

1435:                                             ; preds = %1433
  br label %1436

1436:                                             ; preds = %1435
  br label %1437

1437:                                             ; preds = %1436
  %1438 = load i64, ptr %12, align 8, !tbaa !9
  %1439 = load ptr, ptr %17, align 8, !tbaa !5
  %1440 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %1439, i32 0, i32 4
  %1441 = load i64, ptr %1440, align 8, !tbaa !54
  %1442 = sub i64 %1441, %1438
  store i64 %1442, ptr %1440, align 8, !tbaa !54
  br label %1443

1443:                                             ; preds = %1437
  call void @llvm.lifetime.start.p0(i64 8, ptr %65) #6
  %1444 = load i64, ptr %12, align 8, !tbaa !9
  store i64 %1444, ptr %65, align 8, !tbaa !9
  %1445 = load ptr, ptr %11, align 8, !tbaa !5
  %1446 = load i64, ptr %65, align 8, !tbaa !9
  %1447 = getelementptr inbounds i8, ptr %1445, i64 %1446
  store ptr %1447, ptr %11, align 8, !tbaa !5
  %1448 = load i64, ptr %65, align 8, !tbaa !9
  %1449 = load i64, ptr %12, align 8, !tbaa !9
  %1450 = sub i64 %1449, %1448
  store i64 %1450, ptr %12, align 8, !tbaa !9
  %1451 = load i64, ptr %65, align 8, !tbaa !9
  %1452 = load i64, ptr %18, align 8, !tbaa !9
  %1453 = add i64 %1452, %1451
  store i64 %1453, ptr %18, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %65) #6
  br label %1454

1454:                                             ; preds = %1443
  br label %1455

1455:                                             ; preds = %1454
  br label %1456

1456:                                             ; preds = %1455
  %1457 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 0
  store i32 1, ptr %1457, align 8, !tbaa !18
  %1458 = load i64, ptr %18, align 8, !tbaa !9
  %1459 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 1
  store i64 %1458, ptr %1459, align 8, !tbaa !20
  store i32 1, ptr %23, align 4
  br label %1698

1460:                                             ; No predecessors!
  br label %1461

1461:                                             ; preds = %1460
  br label %1638

1462:                                             ; preds = %1288
  %1463 = load i32, ptr %22, align 4, !tbaa !11
  %1464 = icmp eq i32 %1463, 1
  br i1 %1464, label %1465, label %1497

1465:                                             ; preds = %1462
  %1466 = load ptr, ptr %17, align 8, !tbaa !5
  %1467 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %1466, i32 0, i32 2
  %1468 = load i32, ptr %1467, align 4, !tbaa !27
  %1469 = icmp ne i32 %1468, 0
  br i1 %1469, label %1497, label %1470

1470:                                             ; preds = %1465
  %1471 = load ptr, ptr %17, align 8, !tbaa !5
  %1472 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %1471, i32 0, i32 4
  %1473 = load i64, ptr %1472, align 8, !tbaa !54
  %1474 = icmp ne i64 %1473, 0
  br i1 %1474, label %1475, label %1497

1475:                                             ; preds = %1470
  %1476 = load ptr, ptr %11, align 8, !tbaa !5
  %1477 = load i8, ptr %1476, align 1, !tbaa !33
  %1478 = zext i8 %1477 to i32
  %1479 = load ptr, ptr %15, align 8, !tbaa !5
  %1480 = getelementptr inbounds %struct.BIT_STRING_s, ptr %1479, i32 0, i32 2
  store i32 %1478, ptr %1480, align 4, !tbaa !51
  %1481 = load ptr, ptr %17, align 8, !tbaa !5
  %1482 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %1481, i32 0, i32 4
  %1483 = load i64, ptr %1482, align 8, !tbaa !54
  %1484 = add nsw i64 %1483, -1
  store i64 %1484, ptr %1482, align 8, !tbaa !54
  br label %1485

1485:                                             ; preds = %1475
  call void @llvm.lifetime.start.p0(i64 8, ptr %66) #6
  store i64 1, ptr %66, align 8, !tbaa !9
  %1486 = load ptr, ptr %11, align 8, !tbaa !5
  %1487 = load i64, ptr %66, align 8, !tbaa !9
  %1488 = getelementptr inbounds i8, ptr %1486, i64 %1487
  store ptr %1488, ptr %11, align 8, !tbaa !5
  %1489 = load i64, ptr %66, align 8, !tbaa !9
  %1490 = load i64, ptr %12, align 8, !tbaa !9
  %1491 = sub i64 %1490, %1489
  store i64 %1491, ptr %12, align 8, !tbaa !9
  %1492 = load i64, ptr %66, align 8, !tbaa !9
  %1493 = load i64, ptr %18, align 8, !tbaa !9
  %1494 = add i64 %1493, %1492
  store i64 %1494, ptr %18, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %66) #6
  br label %1495

1495:                                             ; preds = %1485
  br label %1496

1496:                                             ; preds = %1495
  br label %1497

1497:                                             ; preds = %1496, %1470, %1465, %1462
  br label %1498

1498:                                             ; preds = %1497
  call void @llvm.lifetime.start.p0(i64 8, ptr %67) #6
  %1499 = load ptr, ptr %17, align 8, !tbaa !5
  %1500 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %1499, i32 0, i32 4
  %1501 = load i64, ptr %1500, align 8, !tbaa !54
  store i64 %1501, ptr %67, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %68) #6
  %1502 = load ptr, ptr %17, align 8, !tbaa !5
  %1503 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %1502, i32 0, i32 2
  %1504 = load i32, ptr %1503, align 4, !tbaa !27
  %1505 = sext i32 %1504 to i64
  store i64 %1505, ptr %68, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %69) #6
  %1506 = load ptr, ptr %15, align 8, !tbaa !5
  %1507 = getelementptr inbounds %struct.BIT_STRING_s, ptr %1506, i32 0, i32 1
  %1508 = load i32, ptr %1507, align 8, !tbaa !28
  %1509 = sext i32 %1508 to i64
  %1510 = load i64, ptr %67, align 8, !tbaa !9
  %1511 = add i64 %1509, %1510
  store i64 %1511, ptr %69, align 8, !tbaa !9
  %1512 = load i64, ptr %69, align 8, !tbaa !9
  %1513 = trunc i64 %1512 to i32
  %1514 = icmp slt i32 %1513, 0
  br i1 %1514, label %1515, label %1522

1515:                                             ; preds = %1498
  br label %1516

1516:                                             ; preds = %1515
  %1517 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 0
  store i32 2, ptr %1517, align 8, !tbaa !18
  %1518 = load i64, ptr %18, align 8, !tbaa !9
  %1519 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 1
  store i64 %1518, ptr %1519, align 8, !tbaa !20
  store i32 1, ptr %23, align 4
  br label %1598

1520:                                             ; No predecessors!
  br label %1521

1521:                                             ; preds = %1520
  br label %1522

1522:                                             ; preds = %1521, %1498
  %1523 = load i64, ptr %68, align 8, !tbaa !9
  %1524 = load i64, ptr %69, align 8, !tbaa !9
  %1525 = icmp ule i64 %1523, %1524
  br i1 %1525, label %1526, label %1578

1526:                                             ; preds = %1522
  call void @llvm.lifetime.start.p0(i64 8, ptr %70) #6
  br label %1527

1527:                                             ; preds = %1536, %1526
  %1528 = load i64, ptr %68, align 8, !tbaa !9
  %1529 = icmp ne i64 %1528, 0
  br i1 %1529, label %1530, label %1533

1530:                                             ; preds = %1527
  %1531 = load i64, ptr %68, align 8, !tbaa !9
  %1532 = shl i64 %1531, 1
  br label %1534

1533:                                             ; preds = %1527
  br label %1534

1534:                                             ; preds = %1533, %1530
  %1535 = phi i64 [ %1532, %1530 ], [ 16, %1533 ]
  store i64 %1535, ptr %68, align 8, !tbaa !9
  br label %1536

1536:                                             ; preds = %1534
  %1537 = load i64, ptr %68, align 8, !tbaa !9
  %1538 = load i64, ptr %69, align 8, !tbaa !9
  %1539 = icmp ule i64 %1537, %1538
  br i1 %1539, label %1527, label %1540, !llvm.loop !56

1540:                                             ; preds = %1536
  %1541 = load i64, ptr %68, align 8, !tbaa !9
  %1542 = trunc i64 %1541 to i32
  %1543 = icmp slt i32 %1542, 0
  br i1 %1543, label %1544, label %1551

1544:                                             ; preds = %1540
  br label %1545

1545:                                             ; preds = %1544
  %1546 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 0
  store i32 2, ptr %1546, align 8, !tbaa !18
  %1547 = load i64, ptr %18, align 8, !tbaa !9
  %1548 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 1
  store i64 %1547, ptr %1548, align 8, !tbaa !20
  store i32 1, ptr %23, align 4
  br label %1575

1549:                                             ; No predecessors!
  br label %1550

1550:                                             ; preds = %1549
  br label %1551

1551:                                             ; preds = %1550, %1540
  %1552 = load ptr, ptr %15, align 8, !tbaa !5
  %1553 = getelementptr inbounds %struct.BIT_STRING_s, ptr %1552, i32 0, i32 0
  %1554 = load ptr, ptr %1553, align 8, !tbaa !32
  %1555 = load i64, ptr %68, align 8, !tbaa !9
  %1556 = call ptr @realloc(ptr noundef %1554, i64 noundef %1555) #8
  store ptr %1556, ptr %70, align 8, !tbaa !5
  %1557 = load ptr, ptr %70, align 8, !tbaa !5
  %1558 = icmp ne ptr %1557, null
  br i1 %1558, label %1559, label %1567

1559:                                             ; preds = %1551
  %1560 = load ptr, ptr %70, align 8, !tbaa !5
  %1561 = load ptr, ptr %15, align 8, !tbaa !5
  %1562 = getelementptr inbounds %struct.BIT_STRING_s, ptr %1561, i32 0, i32 0
  store ptr %1560, ptr %1562, align 8, !tbaa !32
  %1563 = load i64, ptr %68, align 8, !tbaa !9
  %1564 = trunc i64 %1563 to i32
  %1565 = load ptr, ptr %17, align 8, !tbaa !5
  %1566 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %1565, i32 0, i32 2
  store i32 %1564, ptr %1566, align 4, !tbaa !27
  br label %1574

1567:                                             ; preds = %1551
  br label %1568

1568:                                             ; preds = %1567
  %1569 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 0
  store i32 2, ptr %1569, align 8, !tbaa !18
  %1570 = load i64, ptr %18, align 8, !tbaa !9
  %1571 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 1
  store i64 %1570, ptr %1571, align 8, !tbaa !20
  store i32 1, ptr %23, align 4
  br label %1575

1572:                                             ; No predecessors!
  br label %1573

1573:                                             ; preds = %1572
  br label %1574

1574:                                             ; preds = %1573, %1559
  store i32 0, ptr %23, align 4
  br label %1575

1575:                                             ; preds = %1574, %1568, %1545
  call void @llvm.lifetime.end.p0(i64 8, ptr %70) #6
  %1576 = load i32, ptr %23, align 4
  switch i32 %1576, label %1598 [
    i32 0, label %1577
  ]

1577:                                             ; preds = %1575
  br label %1578

1578:                                             ; preds = %1577, %1522
  %1579 = load ptr, ptr %15, align 8, !tbaa !5
  %1580 = getelementptr inbounds %struct.BIT_STRING_s, ptr %1579, i32 0, i32 0
  %1581 = load ptr, ptr %1580, align 8, !tbaa !32
  %1582 = load ptr, ptr %15, align 8, !tbaa !5
  %1583 = getelementptr inbounds %struct.BIT_STRING_s, ptr %1582, i32 0, i32 1
  %1584 = load i32, ptr %1583, align 8, !tbaa !28
  %1585 = sext i32 %1584 to i64
  %1586 = getelementptr inbounds i8, ptr %1581, i64 %1585
  %1587 = load ptr, ptr %11, align 8, !tbaa !5
  %1588 = load i64, ptr %67, align 8, !tbaa !9
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %1586, ptr align 1 %1587, i64 %1588, i1 false)
  %1589 = load ptr, ptr %15, align 8, !tbaa !5
  %1590 = getelementptr inbounds %struct.BIT_STRING_s, ptr %1589, i32 0, i32 0
  %1591 = load ptr, ptr %1590, align 8, !tbaa !32
  %1592 = load i64, ptr %69, align 8, !tbaa !9
  %1593 = getelementptr inbounds i8, ptr %1591, i64 %1592
  store i8 0, ptr %1593, align 1, !tbaa !33
  %1594 = load i64, ptr %69, align 8, !tbaa !9
  %1595 = trunc i64 %1594 to i32
  %1596 = load ptr, ptr %15, align 8, !tbaa !5
  %1597 = getelementptr inbounds %struct.BIT_STRING_s, ptr %1596, i32 0, i32 1
  store i32 %1595, ptr %1597, align 8, !tbaa !28
  store i32 0, ptr %23, align 4
  br label %1598

1598:                                             ; preds = %1578, %1575, %1516
  call void @llvm.lifetime.end.p0(i64 8, ptr %69) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %68) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %67) #6
  %1599 = load i32, ptr %23, align 4
  switch i32 %1599, label %1698 [
    i32 0, label %1600
  ]

1600:                                             ; preds = %1598
  br label %1601

1601:                                             ; preds = %1600
  br label %1602

1602:                                             ; preds = %1601
  br label %1603

1603:                                             ; preds = %1602
  call void @llvm.lifetime.start.p0(i64 8, ptr %71) #6
  %1604 = load ptr, ptr %17, align 8, !tbaa !5
  %1605 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %1604, i32 0, i32 4
  %1606 = load i64, ptr %1605, align 8, !tbaa !54
  store i64 %1606, ptr %71, align 8, !tbaa !9
  %1607 = load ptr, ptr %11, align 8, !tbaa !5
  %1608 = load i64, ptr %71, align 8, !tbaa !9
  %1609 = getelementptr inbounds i8, ptr %1607, i64 %1608
  store ptr %1609, ptr %11, align 8, !tbaa !5
  %1610 = load i64, ptr %71, align 8, !tbaa !9
  %1611 = load i64, ptr %12, align 8, !tbaa !9
  %1612 = sub i64 %1611, %1610
  store i64 %1612, ptr %12, align 8, !tbaa !9
  %1613 = load i64, ptr %71, align 8, !tbaa !9
  %1614 = load i64, ptr %18, align 8, !tbaa !9
  %1615 = add i64 %1614, %1613
  store i64 %1615, ptr %18, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %71) #6
  br label %1616

1616:                                             ; preds = %1603
  br label %1617

1617:                                             ; preds = %1616
  %1618 = load ptr, ptr %17, align 8, !tbaa !5
  %1619 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %1618, i32 0, i32 4
  store i64 0, ptr %1619, align 8, !tbaa !54
  br label %1620

1620:                                             ; preds = %1617
  %1621 = load ptr, ptr %17, align 8, !tbaa !5
  %1622 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %1621, i32 0, i32 0
  %1623 = load i16, ptr %1622, align 8, !tbaa !22
  %1624 = sext i16 %1623 to i32
  %1625 = icmp eq i32 %1624, 0
  br i1 %1625, label %1626, label %1629

1626:                                             ; preds = %1620
  %1627 = load ptr, ptr %17, align 8, !tbaa !5
  %1628 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %1627, i32 0, i32 2
  store i32 0, ptr %1628, align 4, !tbaa !27
  br label %1629

1629:                                             ; preds = %1626, %1620
  %1630 = load ptr, ptr %17, align 8, !tbaa !5
  %1631 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %1630, i32 0, i32 0
  %1632 = load i16, ptr %1631, align 8, !tbaa !22
  %1633 = sext i16 %1632 to i32
  %1634 = add nsw i32 %1633, 1
  %1635 = trunc i32 %1634 to i16
  store i16 %1635, ptr %1631, align 8, !tbaa !22
  br label %1636

1636:                                             ; preds = %1629
  br label %1637

1637:                                             ; preds = %1636
  br label %1638

1638:                                             ; preds = %1637, %1461
  br label %1639

1639:                                             ; preds = %1638, %963, %107
  %1640 = load ptr, ptr %20, align 8, !tbaa !5
  %1641 = icmp ne ptr %1640, null
  br i1 %1641, label %1642, label %1665

1642:                                             ; preds = %1639
  %1643 = load ptr, ptr %20, align 8, !tbaa !5
  %1644 = getelementptr inbounds %struct._stack_el, ptr %1643, i32 0, i32 6
  %1645 = load ptr, ptr %1644, align 8, !tbaa !39
  %1646 = icmp ne ptr %1645, null
  br i1 %1646, label %1657, label %1647

1647:                                             ; preds = %1642
  %1648 = load ptr, ptr %20, align 8, !tbaa !5
  %1649 = getelementptr inbounds %struct._stack_el, ptr %1648, i32 0, i32 3
  %1650 = load i32, ptr %1649, align 4, !tbaa !38
  %1651 = icmp sgt i32 %1650, 1
  br i1 %1651, label %1657, label %1652

1652:                                             ; preds = %1647
  %1653 = load ptr, ptr %20, align 8, !tbaa !5
  %1654 = getelementptr inbounds %struct._stack_el, ptr %1653, i32 0, i32 0
  %1655 = load i64, ptr %1654, align 8, !tbaa !36
  %1656 = icmp sgt i64 %1655, 0
  br i1 %1656, label %1657, label %1664

1657:                                             ; preds = %1652, %1647, %1642
  br label %1658

1658:                                             ; preds = %1657
  %1659 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 0
  store i32 1, ptr %1659, align 8, !tbaa !18
  %1660 = load i64, ptr %18, align 8, !tbaa !9
  %1661 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 1
  store i64 %1660, ptr %1661, align 8, !tbaa !20
  store i32 1, ptr %23, align 4
  br label %1698

1662:                                             ; No predecessors!
  br label %1663

1663:                                             ; preds = %1662
  br label %1664

1664:                                             ; preds = %1663, %1652
  br label %1665

1665:                                             ; preds = %1664, %1639
  %1666 = load i32, ptr %22, align 4, !tbaa !11
  %1667 = icmp eq i32 %1666, 1
  br i1 %1667, label %1668, label %1691

1668:                                             ; preds = %1665
  %1669 = load ptr, ptr %15, align 8, !tbaa !5
  %1670 = getelementptr inbounds %struct.BIT_STRING_s, ptr %1669, i32 0, i32 1
  %1671 = load i32, ptr %1670, align 8, !tbaa !28
  %1672 = icmp ne i32 %1671, 0
  br i1 %1672, label %1673, label %1691

1673:                                             ; preds = %1668
  %1674 = load ptr, ptr %15, align 8, !tbaa !5
  %1675 = getelementptr inbounds %struct.BIT_STRING_s, ptr %1674, i32 0, i32 2
  %1676 = load i32, ptr %1675, align 4, !tbaa !51
  %1677 = shl i32 255, %1676
  %1678 = load ptr, ptr %15, align 8, !tbaa !5
  %1679 = getelementptr inbounds %struct.BIT_STRING_s, ptr %1678, i32 0, i32 0
  %1680 = load ptr, ptr %1679, align 8, !tbaa !32
  %1681 = load ptr, ptr %15, align 8, !tbaa !5
  %1682 = getelementptr inbounds %struct.BIT_STRING_s, ptr %1681, i32 0, i32 1
  %1683 = load i32, ptr %1682, align 8, !tbaa !28
  %1684 = sub nsw i32 %1683, 1
  %1685 = sext i32 %1684 to i64
  %1686 = getelementptr inbounds i8, ptr %1680, i64 %1685
  %1687 = load i8, ptr %1686, align 1, !tbaa !33
  %1688 = zext i8 %1687 to i32
  %1689 = and i32 %1688, %1677
  %1690 = trunc i32 %1689 to i8
  store i8 %1690, ptr %1686, align 1, !tbaa !33
  br label %1691

1691:                                             ; preds = %1673, %1668, %1665
  br label %1692

1692:                                             ; preds = %1691
  %1693 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 0
  store i32 0, ptr %1693, align 8, !tbaa !18
  %1694 = load i64, ptr %18, align 8, !tbaa !9
  %1695 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 1
  store i64 %1694, ptr %1695, align 8, !tbaa !20
  store i32 1, ptr %23, align 4
  br label %1698

1696:                                             ; No predecessors!
  br label %1697

1697:                                             ; preds = %1696
  store i32 0, ptr %23, align 4
  br label %1698

1698:                                             ; preds = %1697, %1692, %1658, %1598, %1456, %1433, %1298, %1285, %936, %283, %152, %135, %100
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %16) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #6
  %1699 = load i32, ptr %23, align 4
  switch i32 %1699, label %1702 [
    i32 0, label %1700
    i32 1, label %1700
  ]

1700:                                             ; preds = %1698, %1698
  %1701 = load { i32, i64 }, ptr %7, align 8
  ret { i32, i64 } %1701

1702:                                             ; preds = %1698, %673
  unreachable
}

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

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

declare { i32, i64 } @ber_check_tags(ptr noundef, ptr noundef, ptr noundef, ptr noundef, i64 noundef, i32 noundef, i32 noundef, ptr noundef, ptr noundef) #3

; 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) #4

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

; Function Attrs: nounwind uwtable
declare hidden ptr @_new_stack() #0

; Function Attrs: nounwind allocsize(1)
declare ptr @realloc(ptr noundef, i64 noundef) #5

declare i64 @ber_fetch_tag(ptr noundef, i64 noundef, ptr noundef) #3

declare i64 @ber_fetch_length(i32 noundef, ptr noundef, i64 noundef, ptr noundef) #3

declare i64 @ber_tlv_tag_snprint(i32 noundef, ptr noundef, i64 noundef) #3

; Function Attrs: nounwind uwtable
declare hidden ptr @OS__add_stack_el(ptr noundef) #0

attributes #0 = { 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 #1 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { 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 #3 = { "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 #4 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #5 = { nounwind allocsize(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 #6 = { nounwind }
attributes #7 = { nounwind allocsize(0,1) }
attributes #8 = { nounwind allocsize(1) }

!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, !6, i64 152}
!14 = !{!"asn_TYPE_descriptor_s", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !6, i64 48, !6, i64 56, !6, i64 64, !6, i64 72, !6, i64 80, !6, i64 88, !6, i64 96, !12, i64 104, !6, i64 112, !12, i64 120, !6, i64 128, !6, i64 136, !12, i64 144, !6, i64 152}
!15 = !{!16, !12, i64 8}
!16 = !{!"asn_OCTET_STRING_specifics_s", !12, i64 0, !12, i64 4, !12, i64 8}
!17 = !{!16, !12, i64 0}
!18 = !{!19, !12, i64 0}
!19 = !{!"asn_dec_rval_s", !12, i64 0, !10, i64 8}
!20 = !{!19, !10, i64 8}
!21 = !{!16, !12, i64 4}
!22 = !{!23, !24, i64 0}
!23 = !{!"asn_struct_ctx_s", !24, i64 0, !24, i64 2, !12, i64 4, !6, i64 8, !10, i64 16}
!24 = !{!"short", !7, i64 0}
!25 = !{i64 0, i64 4, !11, i64 8, i64 8, !9}
!26 = !{!23, !6, i64 8}
!27 = !{!23, !12, i64 4}
!28 = !{!29, !12, i64 8}
!29 = !{!"BIT_STRING_s", !6, i64 0, !12, i64 8, !12, i64 12, !23, i64 16}
!30 = distinct !{!30, !31}
!31 = !{!"llvm.loop.mustprogress"}
!32 = !{!29, !6, i64 0}
!33 = !{!7, !7, i64 0}
!34 = !{!35, !6, i64 8}
!35 = !{!"_stack", !6, i64 0, !6, i64 8}
!36 = !{!37, !10, i64 0}
!37 = !{!"_stack_el", !10, i64 0, !10, i64 8, !12, i64 16, !12, i64 20, !12, i64 24, !12, i64 28, !6, i64 32, !6, i64 40}
!38 = !{!37, !12, i64 20}
!39 = !{!37, !6, i64 32}
!40 = !{!37, !10, i64 8}
!41 = !{!37, !12, i64 16}
!42 = distinct !{!42, !31}
!43 = !{!14, !12, i64 120}
!44 = !{!14, !6, i64 112}
!45 = !{!14, !6, i64 96}
!46 = !{!14, !12, i64 104}
!47 = !{!37, !12, i64 28}
!48 = distinct !{!48, !31}
!49 = distinct !{!49, !31}
!50 = !{!37, !12, i64 24}
!51 = !{!29, !12, i64 12}
!52 = distinct !{!52, !31}
!53 = distinct !{!53, !31}
!54 = !{!23, !10, i64 16}
!55 = distinct !{!55, !31}
!56 = distinct !{!56, !31}


; 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"

%struct.asn_OCTET_STRING_specifics_s = type { i32, i32, i32 }

@asn_DEF_OCTET_STRING_specs = external hidden local_unnamed_addr constant %struct.asn_OCTET_STRING_specifics_s, align 4
@.str.2 = external hidden unnamed_addr constant [3 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local { i32, i64 } @OCTET_STRING_decode_ber(ptr noundef %0, ptr noundef %1, ptr nocapture noundef %2, ptr noundef %3, i64 noundef %4, i32 noundef %5) local_unnamed_addr #0 {
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  %9 = alloca i64, align 8
  %10 = alloca [2 x [32 x i8]], align 16
  %11 = getelementptr inbounds i8, ptr %1, i64 152
  %12 = load ptr, ptr %11, align 8, !tbaa !5
  %.not = icmp eq ptr %12, null
  %spec.select = select i1 %.not, ptr @asn_DEF_OCTET_STRING_specs, ptr %12
  %13 = load ptr, ptr %2, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %7) #7
  %14 = getelementptr inbounds i8, ptr %spec.select, i64 8
  %15 = load i32, ptr %14, align 4, !tbaa !12
  %16 = icmp eq ptr %13, null
  br i1 %16, label %17, label %22

17:                                               ; preds = %6
  %18 = load i32, ptr %spec.select, align 4, !tbaa !14
  %19 = sext i32 %18 to i64
  %20 = tail call noalias ptr @calloc(i64 noundef 1, i64 noundef %19) #8
  store ptr %20, ptr %2, align 8, !tbaa !11
  %21 = icmp eq ptr %20, null
  br i1 %21, label %.thread735, label %22

22:                                               ; preds = %17, %6
  %.0488 = phi ptr [ %20, %17 ], [ %13, %6 ]
  %23 = getelementptr inbounds i8, ptr %spec.select, i64 4
  %24 = load i32, ptr %23, align 4, !tbaa !15
  %25 = sext i32 %24 to i64
  %26 = getelementptr inbounds i8, ptr %.0488, i64 %25
  %27 = load i16, ptr %26, align 8, !tbaa !16
  switch i16 %27, label %454 [
    i16 0, label %28
    i16 1, label %80
    i16 2, label %277
    i16 3, label %363
  ]

28:                                               ; preds = %22
  %29 = getelementptr inbounds i8, ptr %26, i64 16
  %30 = call { i32, i64 } @ber_check_tags(ptr noundef %0, ptr noundef nonnull %1, ptr noundef nonnull %26, ptr noundef %3, i64 noundef %4, i32 noundef %5, i32 noundef -1, ptr noundef nonnull %29, ptr noundef nonnull %7) #7
  %31 = extractvalue { i32, i64 } %30, 0
  %32 = extractvalue { i32, i64 } %30, 1
  %.not586 = icmp eq i32 %31, 0
  br i1 %.not586, label %33, label %.thread735

33:                                               ; preds = %28
  %34 = load i32, ptr %7, align 4, !tbaa !20
  %.not587 = icmp eq i32 %34, 0
  br i1 %.not587, label %41, label %35

35:                                               ; preds = %33
  %36 = call ptr @_new_stack()
  %37 = getelementptr inbounds i8, ptr %26, i64 8
  store ptr %36, ptr %37, align 8, !tbaa !21
  %.not604 = icmp eq ptr %36, null
  br i1 %.not604, label %.thread735, label %38

38:                                               ; preds = %35
  %39 = load i16, ptr %26, align 8, !tbaa !16
  %40 = icmp eq i16 %39, 0
  br i1 %40, label %76, label %78

41:                                               ; preds = %33
  %42 = load i16, ptr %26, align 8, !tbaa !16
  %43 = icmp eq i16 %42, 0
  br i1 %43, label %44, label %46

44:                                               ; preds = %41
  %45 = getelementptr inbounds i8, ptr %26, i64 4
  store i32 0, ptr %45, align 4, !tbaa !22
  br label %46

46:                                               ; preds = %44, %41
  %47 = add i16 %42, 3
  store i16 %47, ptr %26, align 8, !tbaa !16
  %48 = icmp eq i32 %15, 0
  %49 = icmp ne i32 %5, 1
  %or.cond = and i1 %49, %48
  br i1 %or.cond, label %50, label %73

50:                                               ; preds = %46
  %51 = getelementptr inbounds i8, ptr %26, i64 4
  %52 = getelementptr inbounds i8, ptr %.0488, i64 8
  %53 = load i32, ptr %52, align 8, !tbaa !23
  %54 = sext i32 %53 to i64
  %55 = add i64 %32, %54
  %56 = trunc i64 %55 to i32
  %57 = icmp slt i32 %56, 0
  br i1 %57, label %.thread735, label %58

58:                                               ; preds = %50
  %59 = load i32, ptr %51, align 4, !tbaa !22
  %60 = sext i32 %59 to i64
  %.not588 = icmp ult i64 %55, %60
  br i1 %.not588, label %..critedge640_crit_edge, label %.preheader759

..critedge640_crit_edge:                          ; preds = %58
  %.pre803 = load ptr, ptr %.0488, align 8, !tbaa !25
  br label %.critedge640

.preheader759:                                    ; preds = %58, %.preheader759
  %.0513 = phi i64 [ %62, %.preheader759 ], [ %60, %58 ]
  %.not589 = icmp eq i64 %.0513, 0
  %61 = shl i64 %.0513, 1
  %62 = select i1 %.not589, i64 16, i64 %61
  %.not590 = icmp ugt i64 %62, %55
  br i1 %.not590, label %63, label %.preheader759, !llvm.loop !26

63:                                               ; preds = %.preheader759
  %64 = trunc i64 %62 to i32
  %65 = icmp slt i32 %64, 0
  br i1 %65, label %.thread735, label %66

66:                                               ; preds = %63
  %67 = load ptr, ptr %.0488, align 8, !tbaa !25
  %68 = call ptr @realloc(ptr noundef %67, i64 noundef %62) #9
  %.not591 = icmp eq ptr %68, null
  br i1 %.not591, label %.thread735, label %.critedge

.critedge:                                        ; preds = %66
  store ptr %68, ptr %.0488, align 8, !tbaa !25
  store i32 %64, ptr %51, align 4, !tbaa !22
  %.pre804 = load i32, ptr %52, align 8, !tbaa !23
  %.pre811 = sext i32 %.pre804 to i64
  br label %.critedge640

.critedge640:                                     ; preds = %..critedge640_crit_edge, %.critedge
  %.pre-phi = phi i64 [ %54, %..critedge640_crit_edge ], [ %.pre811, %.critedge ]
  %69 = phi ptr [ %.pre803, %..critedge640_crit_edge ], [ %68, %.critedge ]
  %70 = getelementptr inbounds i8, ptr %69, i64 %.pre-phi
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %70, ptr align 1 %3, i64 %32, i1 false)
  %71 = load ptr, ptr %.0488, align 8, !tbaa !25
  %72 = getelementptr inbounds i8, ptr %71, i64 %55
  store i8 0, ptr %72, align 1, !tbaa !28
  store i32 %56, ptr %52, align 8, !tbaa !23
  br label %73

73:                                               ; preds = %.critedge640, %46
  %74 = getelementptr inbounds i8, ptr %3, i64 %32
  %75 = sub i64 %4, %32
  br label %363

76:                                               ; preds = %38
  %77 = getelementptr inbounds i8, ptr %26, i64 4
  store i32 0, ptr %77, align 4, !tbaa !22
  br label %78

78:                                               ; preds = %76, %38
  %79 = add i16 %39, 1
  br label %.sink.split851

.sink.split851:                                   ; preds = %361, %78
  %.sink852 = phi i16 [ %79, %78 ], [ %362, %361 ]
  %.0489.ph = phi i64 [ 0, %78 ], [ %.4493, %361 ]
  %.0479.ph = phi i64 [ %4, %78 ], [ %.4483, %361 ]
  %.0.ph = phi ptr [ %3, %78 ], [ %.4, %361 ]
  store i16 %.sink852, ptr %26, align 8, !tbaa !16
  br label %80

80:                                               ; preds = %.sink.split851, %22
  %.0489 = phi i64 [ 0, %22 ], [ %.0489.ph, %.sink.split851 ]
  %.0479 = phi i64 [ %4, %22 ], [ %.0479.ph, %.sink.split851 ]
  %.0 = phi ptr [ %3, %22 ], [ %.0.ph, %.sink.split851 ]
  %81 = getelementptr inbounds i8, ptr %26, i64 8
  %82 = load ptr, ptr %81, align 8, !tbaa !21
  %83 = getelementptr inbounds i8, ptr %82, i64 8
  %84 = load ptr, ptr %83, align 8, !tbaa !29
  %85 = icmp eq i32 %15, 0
  %.not619 = icmp eq i32 %5, 1
  %86 = getelementptr inbounds i8, ptr %26, i64 4
  %87 = getelementptr inbounds i8, ptr %.0488, i64 8
  %88 = load i16, ptr @.str.2, align 1
  %89 = getelementptr inbounds i8, ptr %1, i64 120
  %90 = getelementptr inbounds i8, ptr %1, i64 112
  br label %91

91:                                               ; preds = %263, %80
  %.0498 = phi ptr [ %84, %80 ], [ %.2500.ph, %263 ]
  %.1490 = phi i64 [ %.0489, %80 ], [ %.2491.ph, %263 ]
  %.1480 = phi i64 [ %.0479, %80 ], [ %.2481.ph, %263 ]
  %.1 = phi ptr [ %.0, %80 ], [ %.2.ph, %263 ]
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %8) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %9) #7
  %.not777 = icmp eq ptr %.0498, null
  br i1 %.not777, label %111, label %92

92:                                               ; preds = %91
  %93 = load i64, ptr %.0498, align 8, !tbaa !31
  %spec.select642 = call i64 @llvm.umin.i64(i64 %93, i64 %.1480)
  %94 = icmp slt i64 %93, 1
  br i1 %94, label %95, label %111

95:                                               ; preds = %92
  %96 = getelementptr inbounds i8, ptr %.0498, i64 20
  %97 = load i32, ptr %96, align 4, !tbaa !33
  %98 = icmp eq i32 %97, 0
  br i1 %98, label %99, label %111

99:                                               ; preds = %95
  %100 = getelementptr inbounds i8, ptr %.0498, i64 32
  %101 = load ptr, ptr %100, align 8, !tbaa !34
  %.not626 = icmp eq ptr %101, null
  br i1 %.not626, label %265, label %102

102:                                              ; preds = %99
  %103 = load i64, ptr %101, align 8, !tbaa !31
  %.not627 = icmp eq i64 %103, -1
  %.phi.trans.insert = getelementptr inbounds i8, ptr %.0498, i64 8
  %.pre = load i64, ptr %.phi.trans.insert, align 8, !tbaa !35
  br i1 %.not627, label %._crit_edge, label %104

104:                                              ; preds = %102
  %105 = icmp slt i64 %103, %.pre
  br i1 %105, label %.thread671.loopexit, label %106

106:                                              ; preds = %104
  %107 = sub nsw i64 %103, %.pre
  store i64 %107, ptr %101, align 8, !tbaa !31
  br label %._crit_edge

._crit_edge:                                      ; preds = %102, %106
  %108 = getelementptr inbounds i8, ptr %101, i64 8
  %109 = load i64, ptr %108, align 8, !tbaa !35
  %110 = add nsw i64 %109, %.pre
  store i64 %110, ptr %108, align 8, !tbaa !35
  store ptr %101, ptr %83, align 8, !tbaa !29
  store i32 1, ptr %7, align 4, !tbaa !20
  br label %263

111:                                              ; preds = %91, %95, %92
  %112 = phi i64 [ %spec.select642, %95 ], [ %spec.select642, %92 ], [ %.1480, %91 ]
  %113 = call i64 @ber_fetch_tag(ptr noundef %.1, i64 noundef %112, ptr noundef nonnull %8) #7
  switch i64 %113, label %114 [
    i64 -1, label %.thread671.loopexit
    i64 0, label %.thread671
  ]

114:                                              ; preds = %111
  %115 = load i8, ptr %.1, align 1, !tbaa !28
  %116 = lshr i8 %115, 5
  %.lobit = and i8 %116, 1
  %117 = zext nneg i8 %.lobit to i32
  store i32 %117, ptr %7, align 4, !tbaa !20
  %118 = getelementptr inbounds i8, ptr %.1, i64 %113
  %119 = sub nsw i64 %112, %113
  %120 = call i64 @ber_fetch_length(i32 noundef %117, ptr noundef nonnull %118, i64 noundef %119, ptr noundef nonnull %9) #7
  switch i64 %120, label %121 [
    i64 -1, label %.thread671.loopexit
    i64 0, label %.thread671
  ]

121:                                              ; preds = %114
  br i1 %.not777, label %.thread656, label %122

122:                                              ; preds = %121
  %123 = getelementptr inbounds i8, ptr %.0498, i64 20
  %124 = load i32, ptr %123, align 4, !tbaa !33
  %.not607 = icmp eq i32 %124, 0
  br i1 %.not607, label %175, label %125

125:                                              ; preds = %122
  %126 = load i8, ptr %.1, align 1, !tbaa !28
  %127 = icmp eq i8 %126, 0
  br i1 %127, label %128, label %175

128:                                              ; preds = %125
  %129 = getelementptr inbounds i8, ptr %.1, i64 1
  %130 = load i8, ptr %129, align 1, !tbaa !28
  %131 = icmp eq i8 %130, 0
  br i1 %131, label %132, label %175

132:                                              ; preds = %128
  br i1 %85, label %133, label %160

133:                                              ; preds = %132
  br i1 %.not619, label %134, label %137

134:                                              ; preds = %133
  %135 = getelementptr inbounds i8, ptr %.0498, i64 16
  %136 = load i32, ptr %135, align 8, !tbaa !36
  %.not620 = icmp eq i32 %136, 0
  br i1 %.not620, label %160, label %137

137:                                              ; preds = %133, %134
  %138 = load i32, ptr %87, align 8, !tbaa !23
  %139 = sext i32 %138 to i64
  %140 = add nsw i64 %139, 2
  %141 = trunc i64 %140 to i32
  %142 = icmp slt i32 %141, 0
  br i1 %142, label %.thread671.loopexit, label %143

143:                                              ; preds = %137
  %144 = load i32, ptr %86, align 4, !tbaa !22
  %145 = sext i32 %144 to i64
  %.not621 = icmp ult i64 %140, %145
  br i1 %.not621, label %._crit_edge791, label %.preheader763

._crit_edge791:                                   ; preds = %143
  %.pre792 = load ptr, ptr %.0488, align 8, !tbaa !25
  br label %155

.preheader763:                                    ; preds = %143, %.preheader763
  %.0520 = phi i64 [ %147, %.preheader763 ], [ %145, %143 ]
  %.not622 = icmp eq i64 %.0520, 0
  %146 = shl i64 %.0520, 1
  %147 = select i1 %.not622, i64 16, i64 %146
  %.not623 = icmp ugt i64 %147, %140
  br i1 %.not623, label %148, label %.preheader763, !llvm.loop !37

148:                                              ; preds = %.preheader763
  %149 = trunc i64 %147 to i32
  %150 = icmp slt i32 %149, 0
  br i1 %150, label %.thread671.loopexit, label %151

151:                                              ; preds = %148
  %152 = load ptr, ptr %.0488, align 8, !tbaa !25
  %153 = call ptr @realloc(ptr noundef %152, i64 noundef %147) #9
  %.not624 = icmp eq ptr %153, null
  br i1 %.not624, label %.thread671.loopexit, label %154

154:                                              ; preds = %151
  store ptr %153, ptr %.0488, align 8, !tbaa !25
  store i32 %149, ptr %86, align 4, !tbaa !22
  %.pre793 = load i32, ptr %87, align 8, !tbaa !23
  %.pre822 = sext i32 %.pre793 to i64
  br label %155

155:                                              ; preds = %._crit_edge791, %154
  %.pre-phi823 = phi i64 [ %139, %._crit_edge791 ], [ %.pre822, %154 ]
  %156 = phi ptr [ %.pre792, %._crit_edge791 ], [ %153, %154 ]
  %157 = getelementptr inbounds i8, ptr %156, i64 %.pre-phi823
  store i16 %88, ptr %157, align 1
  %158 = load ptr, ptr %.0488, align 8, !tbaa !25
  %159 = getelementptr inbounds i8, ptr %158, i64 %140
  store i8 0, ptr %159, align 1, !tbaa !28
  store i32 %141, ptr %87, align 8, !tbaa !23
  br label %160

160:                                              ; preds = %155, %132, %134
  %161 = getelementptr inbounds i8, ptr %.1, i64 2
  %162 = add i64 %.1480, -2
  %163 = add i64 %.1490, 2
  %164 = getelementptr inbounds i8, ptr %.0498, i64 8
  %165 = load i64, ptr %164, align 8, !tbaa !35
  %166 = add nsw i64 %165, 2
  store i64 %166, ptr %164, align 8, !tbaa !35
  %167 = load i64, ptr %.0498, align 8, !tbaa !31
  %.not625 = icmp eq i64 %167, -1
  br i1 %.not625, label %170, label %168

168:                                              ; preds = %160
  %169 = add nsw i64 %167, -2
  store i64 %169, ptr %.0498, align 8, !tbaa !31
  br label %170

170:                                              ; preds = %168, %160
  %171 = load i32, ptr %123, align 4, !tbaa !33
  %172 = add nsw i32 %171, -1
  store i32 %172, ptr %123, align 4, !tbaa !33
  %173 = icmp eq i32 %172, 0
  br i1 %173, label %174, label %thread-pre-split

174:                                              ; preds = %170
  store i64 0, ptr %.0498, align 8, !tbaa !31
  store i32 1, ptr %7, align 4, !tbaa !20
  br label %263

175:                                              ; preds = %128, %125, %122
  br i1 %85, label %.thread656, label %176

176:                                              ; preds = %175
  %177 = getelementptr inbounds i8, ptr %.0498, i64 16
  %178 = load i32, ptr %177, align 8, !tbaa !36
  %179 = load i32, ptr %89, align 8, !tbaa !38
  %180 = icmp slt i32 %178, %179
  br i1 %180, label %181, label %185

181:                                              ; preds = %176
  %182 = load ptr, ptr %90, align 8, !tbaa !39
  %183 = sext i32 %178 to i64
  %184 = getelementptr inbounds i32, ptr %182, i64 %183
  br label %.thread656

185:                                              ; preds = %176
  %.not608 = icmp eq i32 %179, 0
  br i1 %.not608, label %.thread656, label %186

186:                                              ; preds = %185
  %187 = load ptr, ptr %90, align 8, !tbaa !39
  %188 = sext i32 %179 to i64
  %189 = getelementptr i32, ptr %187, i64 %188
  %190 = getelementptr i8, ptr %189, i64 -4
  br label %.thread656

.thread656:                                       ; preds = %175, %185, %121, %186, %181
  %.3517.in = phi ptr [ %190, %186 ], [ %184, %181 ], [ %8, %121 ], [ %8, %185 ], [ %8, %175 ]
  %.3517 = load i32, ptr %.3517.in, align 4, !tbaa !20
  %191 = load i32, ptr %8, align 4, !tbaa !20
  %.not609 = icmp eq i32 %191, %.3517
  br i1 %.not609, label %204, label %192

192:                                              ; preds = %.thread656
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %10) #7
  %193 = call i64 @ber_tlv_tag_snprint(i32 noundef %191, ptr noundef nonnull %10, i64 noundef 32) #7
  %194 = getelementptr inbounds i8, ptr %1, i64 96
  %195 = load ptr, ptr %194, align 8, !tbaa !40
  %196 = getelementptr inbounds i8, ptr %1, i64 104
  %197 = load i32, ptr %196, align 8, !tbaa !41
  %198 = sext i32 %197 to i64
  %199 = getelementptr i32, ptr %195, i64 %198
  %200 = getelementptr i8, ptr %199, i64 -4
  %201 = load i32, ptr %200, align 4, !tbaa !20
  %202 = getelementptr inbounds i8, ptr %10, i64 32
  %203 = call i64 @ber_tlv_tag_snprint(i32 noundef %201, ptr noundef nonnull %202, i64 noundef 32) #7
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %10) #7
  br label %.thread671

204:                                              ; preds = %.thread656
  %205 = add nsw i64 %120, %113
  %206 = load i64, ptr %9, align 8, !tbaa !42
  %207 = add nsw i64 %206, %205
  %208 = icmp slt i64 %207, 0
  br i1 %208, label %.thread671.loopexit, label %209

209:                                              ; preds = %204
  %210 = call ptr @OS__add_stack_el(ptr noundef %82)
  %.not610 = icmp eq ptr %210, null
  br i1 %.not610, label %.thread671.loopexit, label %211

211:                                              ; preds = %209
  %212 = load i32, ptr %8, align 4, !tbaa !20
  %213 = getelementptr inbounds i8, ptr %210, i64 28
  store i32 %212, ptr %213, align 4, !tbaa !43
  %214 = load i64, ptr %9, align 8
  %215 = icmp eq i64 %214, -1
  %216 = zext i1 %215 to i32
  %217 = getelementptr inbounds i8, ptr %210, i64 20
  store i32 %216, ptr %217, align 4, !tbaa !33
  %218 = getelementptr inbounds i8, ptr %210, i64 32
  %219 = load ptr, ptr %218, align 8, !tbaa !34
  %.not611 = icmp eq ptr %219, null
  br i1 %.not611, label %228, label %220

220:                                              ; preds = %211
  %221 = load i64, ptr %219, align 8, !tbaa !31
  %.not612 = icmp eq i64 %221, -1
  br i1 %.not612, label %228, label %222

222:                                              ; preds = %220
  %223 = select i1 %215, i64 0, i64 %214
  %224 = add nsw i64 %223, %205
  %225 = icmp slt i64 %221, %224
  br i1 %225, label %.thread671.loopexit, label %226

226:                                              ; preds = %222
  %227 = sub nsw i64 %221, %205
  %spec.select837 = select i1 %215, i64 %227, i64 %214
  br label %228

228:                                              ; preds = %226, %211, %220
  %.sink = phi i64 [ %214, %220 ], [ %214, %211 ], [ %spec.select837, %226 ]
  store i64 %.sink, ptr %210, align 8, !tbaa !31
  br i1 %85, label %229, label %256

229:                                              ; preds = %228
  br i1 %.not619, label %230, label %233

230:                                              ; preds = %229
  %231 = getelementptr inbounds i8, ptr %210, i64 16
  %232 = load i32, ptr %231, align 8, !tbaa !36
  %.not614 = icmp eq i32 %232, 0
  br i1 %.not614, label %256, label %233

233:                                              ; preds = %229, %230
  %234 = load i32, ptr %87, align 8, !tbaa !23
  %235 = sext i32 %234 to i64
  %236 = add i64 %205, %235
  %237 = trunc i64 %236 to i32
  %238 = icmp slt i32 %237, 0
  br i1 %238, label %.thread671.loopexit, label %239

239:                                              ; preds = %233
  %240 = load i32, ptr %86, align 4, !tbaa !22
  %241 = sext i32 %240 to i64
  %.not615 = icmp ult i64 %236, %241
  br i1 %.not615, label %._crit_edge794, label %.preheader762

._crit_edge794:                                   ; preds = %239
  %.pre795 = load ptr, ptr %.0488, align 8, !tbaa !25
  br label %251

.preheader762:                                    ; preds = %239, %.preheader762
  %.0521 = phi i64 [ %243, %.preheader762 ], [ %241, %239 ]
  %.not616 = icmp eq i64 %.0521, 0
  %242 = shl i64 %.0521, 1
  %243 = select i1 %.not616, i64 16, i64 %242
  %.not617 = icmp ugt i64 %243, %236
  br i1 %.not617, label %244, label %.preheader762, !llvm.loop !44

244:                                              ; preds = %.preheader762
  %245 = trunc i64 %243 to i32
  %246 = icmp slt i32 %245, 0
  br i1 %246, label %.thread671.loopexit, label %247

247:                                              ; preds = %244
  %248 = load ptr, ptr %.0488, align 8, !tbaa !25
  %249 = call ptr @realloc(ptr noundef %248, i64 noundef %243) #9
  %.not618 = icmp eq ptr %249, null
  br i1 %.not618, label %.thread671.loopexit, label %250

250:                                              ; preds = %247
  store ptr %249, ptr %.0488, align 8, !tbaa !25
  store i32 %245, ptr %86, align 4, !tbaa !22
  %.pre796 = load i32, ptr %87, align 8, !tbaa !23
  %.pre820 = sext i32 %.pre796 to i64
  br label %251

251:                                              ; preds = %._crit_edge794, %250
  %.pre-phi821 = phi i64 [ %235, %._crit_edge794 ], [ %.pre820, %250 ]
  %252 = phi ptr [ %.pre795, %._crit_edge794 ], [ %249, %250 ]
  %253 = getelementptr inbounds i8, ptr %252, i64 %.pre-phi821
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %253, ptr nonnull align 1 %.1, i64 %205, i1 false)
  %254 = load ptr, ptr %.0488, align 8, !tbaa !25
  %255 = getelementptr inbounds i8, ptr %254, i64 %236
  store i8 0, ptr %255, align 1, !tbaa !28
  store i32 %237, ptr %87, align 8, !tbaa !23
  br label %256

256:                                              ; preds = %251, %230, %228
  %257 = getelementptr inbounds i8, ptr %210, i64 8
  %258 = load i64, ptr %257, align 8, !tbaa !35
  %259 = add nsw i64 %258, %205
  store i64 %259, ptr %257, align 8, !tbaa !35
  %260 = getelementptr inbounds i8, ptr %.1, i64 %205
  %261 = sub i64 %.1480, %205
  %262 = add i64 %205, %.1490
  br label %thread-pre-split

.thread671.loopexit:                              ; preds = %247, %244, %233, %151, %148, %137, %222, %209, %204, %114, %111, %104
  br label %.thread671

.thread671:                                       ; preds = %114, %111, %.thread671.loopexit, %192
  %.sroa.0477.16.ph = phi i32 [ 2, %192 ], [ 2, %.thread671.loopexit ], [ 1, %111 ], [ 1, %114 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %8) #7
  br label %.thread735

thread-pre-split:                                 ; preds = %170, %256
  %.2500.ph.ph = phi ptr [ %210, %256 ], [ %.0498, %170 ]
  %.2491.ph.ph = phi i64 [ %262, %256 ], [ %163, %170 ]
  %.2481.ph.ph = phi i64 [ %261, %256 ], [ %162, %170 ]
  %.2.ph.ph = phi ptr [ %260, %256 ], [ %161, %170 ]
  %.pr = load i32, ptr %7, align 4, !tbaa !20
  br label %263

263:                                              ; preds = %thread-pre-split, %._crit_edge, %174
  %264 = phi i32 [ %.pr, %thread-pre-split ], [ 1, %._crit_edge ], [ 1, %174 ]
  %.2500.ph = phi ptr [ %.2500.ph.ph, %thread-pre-split ], [ %101, %._crit_edge ], [ %.0498, %174 ]
  %.2491.ph = phi i64 [ %.2491.ph.ph, %thread-pre-split ], [ %.1490, %._crit_edge ], [ %163, %174 ]
  %.2481.ph = phi i64 [ %.2481.ph.ph, %thread-pre-split ], [ %.1480, %._crit_edge ], [ %162, %174 ]
  %.2.ph = phi ptr [ %.2.ph.ph, %thread-pre-split ], [ %.1, %._crit_edge ], [ %161, %174 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %8) #7
  %.not628 = icmp eq i32 %264, 0
  br i1 %.not628, label %271, label %91, !llvm.loop !45

265:                                              ; preds = %99
  store ptr null, ptr %83, align 8, !tbaa !29
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %8) #7
  %266 = load i16, ptr %26, align 8, !tbaa !16
  %267 = icmp eq i16 %266, 0
  br i1 %267, label %268, label %269

268:                                              ; preds = %265
  store i32 0, ptr %86, align 4, !tbaa !22
  br label %269

269:                                              ; preds = %268, %265
  %270 = add i16 %266, 3
  br label %.sink.split

271:                                              ; preds = %263
  %272 = load i16, ptr %26, align 8, !tbaa !16
  %273 = icmp eq i16 %272, 0
  br i1 %273, label %274, label %275

274:                                              ; preds = %271
  store i32 0, ptr %86, align 4, !tbaa !22
  br label %275

275:                                              ; preds = %274, %271
  %276 = add i16 %272, 1
  store i16 %276, ptr %26, align 8, !tbaa !16
  br label %277

277:                                              ; preds = %275, %22
  %.3492 = phi i64 [ 0, %22 ], [ %.2491.ph, %275 ]
  %.3482 = phi i64 [ %4, %22 ], [ %.2481.ph, %275 ]
  %.3 = phi ptr [ %3, %22 ], [ %.2.ph, %275 ]
  %278 = getelementptr inbounds i8, ptr %26, i64 8
  %279 = load ptr, ptr %278, align 8, !tbaa !21
  %280 = getelementptr inbounds i8, ptr %279, i64 8
  %281 = load ptr, ptr %280, align 8, !tbaa !29
  %282 = load i64, ptr %281, align 8, !tbaa !31
  %.3482. = call i64 @llvm.smin.i64(i64 %.3482, i64 %282)
  %283 = icmp sgt i64 %.3482., 0
  br i1 %283, label %284, label %354

284:                                              ; preds = %277
  %285 = icmp eq i32 %15, 1
  br i1 %285, label %286, label %320

286:                                              ; preds = %284
  %287 = getelementptr inbounds i8, ptr %281, i64 24
  %288 = load i32, ptr %287, align 8, !tbaa !46
  %289 = icmp eq i32 %288, 0
  br i1 %289, label %290, label %320

290:                                              ; preds = %286
  %291 = load i8, ptr %.3, align 1, !tbaa !28
  %292 = zext i8 %291 to i32
  %293 = getelementptr inbounds i8, ptr %.0488, i64 12
  store i32 %292, ptr %293, align 4, !tbaa !47
  %294 = add nsw i64 %.3482., -1
  %295 = getelementptr inbounds i8, ptr %26, i64 4
  %296 = getelementptr inbounds i8, ptr %.0488, i64 8
  %297 = load i32, ptr %296, align 8, !tbaa !23
  %298 = sext i32 %297 to i64
  %299 = add i64 %294, %298
  %300 = trunc i64 %299 to i32
  %301 = icmp slt i32 %300, 0
  br i1 %301, label %.thread735, label %302

302:                                              ; preds = %290
  %303 = load i32, ptr %295, align 4, !tbaa !22
  %304 = sext i32 %303 to i64
  %.not633 = icmp ult i64 %299, %304
  br i1 %.not633, label %._crit_edge800, label %.preheader760

._crit_edge800:                                   ; preds = %302
  %.pre801 = load ptr, ptr %.0488, align 8, !tbaa !25
  br label %314

.preheader760:                                    ; preds = %302, %.preheader760
  %.0523 = phi i64 [ %306, %.preheader760 ], [ %304, %302 ]
  %.not634 = icmp eq i64 %.0523, 0
  %305 = shl i64 %.0523, 1
  %306 = select i1 %.not634, i64 16, i64 %305
  %.not635 = icmp ugt i64 %306, %299
  br i1 %.not635, label %307, label %.preheader760, !llvm.loop !48

307:                                              ; preds = %.preheader760
  %308 = trunc i64 %306 to i32
  %309 = icmp slt i32 %308, 0
  br i1 %309, label %.thread735, label %310

310:                                              ; preds = %307
  %311 = load ptr, ptr %.0488, align 8, !tbaa !25
  %312 = call ptr @realloc(ptr noundef %311, i64 noundef %306) #9
  %.not636 = icmp eq ptr %312, null
  br i1 %.not636, label %.thread735, label %313

313:                                              ; preds = %310
  store ptr %312, ptr %.0488, align 8, !tbaa !25
  store i32 %308, ptr %295, align 4, !tbaa !22
  %.pre802 = load i32, ptr %296, align 8, !tbaa !23
  %.pre816 = sext i32 %.pre802 to i64
  br label %314

314:                                              ; preds = %._crit_edge800, %313
  %.pre-phi817 = phi i64 [ %298, %._crit_edge800 ], [ %.pre816, %313 ]
  %315 = phi ptr [ %.pre801, %._crit_edge800 ], [ %312, %313 ]
  %316 = getelementptr inbounds i8, ptr %315, i64 %.pre-phi817
  %317 = getelementptr inbounds i8, ptr %.3, i64 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %316, ptr nonnull align 1 %317, i64 %294, i1 false)
  %318 = load ptr, ptr %.0488, align 8, !tbaa !25
  %319 = getelementptr inbounds i8, ptr %318, i64 %299
  store i8 0, ptr %319, align 1, !tbaa !28
  store i32 %300, ptr %296, align 8, !tbaa !23
  store i32 1, ptr %287, align 8, !tbaa !46
  br label %345

320:                                              ; preds = %284, %286
  %321 = getelementptr inbounds i8, ptr %26, i64 4
  %322 = getelementptr inbounds i8, ptr %.0488, i64 8
  %323 = load i32, ptr %322, align 8, !tbaa !23
  %324 = sext i32 %323 to i64
  %325 = add i64 %.3482., %324
  %326 = trunc i64 %325 to i32
  %327 = icmp slt i32 %326, 0
  br i1 %327, label %.thread735, label %328

328:                                              ; preds = %320
  %329 = load i32, ptr %321, align 4, !tbaa !22
  %330 = sext i32 %329 to i64
  %.not629 = icmp ult i64 %325, %330
  br i1 %.not629, label %._crit_edge797, label %.preheader761

._crit_edge797:                                   ; preds = %328
  %.pre798 = load ptr, ptr %.0488, align 8, !tbaa !25
  br label %340

.preheader761:                                    ; preds = %328, %.preheader761
  %.0522 = phi i64 [ %332, %.preheader761 ], [ %330, %328 ]
  %.not630 = icmp eq i64 %.0522, 0
  %331 = shl i64 %.0522, 1
  %332 = select i1 %.not630, i64 16, i64 %331
  %.not631 = icmp ugt i64 %332, %325
  br i1 %.not631, label %333, label %.preheader761, !llvm.loop !49

333:                                              ; preds = %.preheader761
  %334 = trunc i64 %332 to i32
  %335 = icmp slt i32 %334, 0
  br i1 %335, label %.thread735, label %336

336:                                              ; preds = %333
  %337 = load ptr, ptr %.0488, align 8, !tbaa !25
  %338 = call ptr @realloc(ptr noundef %337, i64 noundef %332) #9
  %.not632 = icmp eq ptr %338, null
  br i1 %.not632, label %.thread735, label %339

339:                                              ; preds = %336
  store ptr %338, ptr %.0488, align 8, !tbaa !25
  store i32 %334, ptr %321, align 4, !tbaa !22
  %.pre799 = load i32, ptr %322, align 8, !tbaa !23
  %.pre818 = sext i32 %.pre799 to i64
  br label %340

340:                                              ; preds = %._crit_edge797, %339
  %.pre-phi819 = phi i64 [ %324, %._crit_edge797 ], [ %.pre818, %339 ]
  %341 = phi ptr [ %.pre798, %._crit_edge797 ], [ %338, %339 ]
  %342 = getelementptr inbounds i8, ptr %341, i64 %.pre-phi819
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %342, ptr align 1 %.3, i64 %.3482., i1 false)
  %343 = load ptr, ptr %.0488, align 8, !tbaa !25
  %344 = getelementptr inbounds i8, ptr %343, i64 %325
  store i8 0, ptr %344, align 1, !tbaa !28
  store i32 %326, ptr %322, align 8, !tbaa !23
  br label %345

345:                                              ; preds = %340, %314
  %346 = getelementptr inbounds i8, ptr %.3, i64 %.3482.
  %347 = sub i64 %.3482, %.3482.
  %348 = add i64 %.3482., %.3492
  %349 = load i64, ptr %281, align 8, !tbaa !31
  %350 = sub nsw i64 %349, %.3482.
  store i64 %350, ptr %281, align 8, !tbaa !31
  %351 = getelementptr inbounds i8, ptr %281, i64 8
  %352 = load i64, ptr %351, align 8, !tbaa !35
  %353 = add nsw i64 %352, %.3482.
  store i64 %353, ptr %351, align 8, !tbaa !35
  br label %354

354:                                              ; preds = %345, %277
  %355 = phi i64 [ %350, %345 ], [ %282, %277 ]
  %.4493 = phi i64 [ %348, %345 ], [ %.3492, %277 ]
  %.4483 = phi i64 [ %347, %345 ], [ %.3482, %277 ]
  %.4 = phi ptr [ %346, %345 ], [ %.3, %277 ]
  %.not637 = icmp eq i64 %355, 0
  br i1 %.not637, label %356, label %.thread735

356:                                              ; preds = %354
  %357 = load i16, ptr %26, align 8, !tbaa !16
  %358 = icmp eq i16 %357, 0
  br i1 %358, label %359, label %361

359:                                              ; preds = %356
  %360 = getelementptr inbounds i8, ptr %26, i64 4
  store i32 0, ptr %360, align 4, !tbaa !22
  br label %361

361:                                              ; preds = %356, %359
  %362 = add i16 %357, -1
  br label %.sink.split851

363:                                              ; preds = %22, %73
  %.6495 = phi i64 [ 0, %22 ], [ %32, %73 ]
  %.6485 = phi i64 [ %4, %22 ], [ %75, %73 ]
  %.6 = phi ptr [ %3, %22 ], [ %74, %73 ]
  %364 = getelementptr inbounds i8, ptr %26, i64 16
  %365 = load i64, ptr %364, align 8, !tbaa !50
  %366 = icmp ult i64 %.6485, %365
  br i1 %366, label %367, label %409

367:                                              ; preds = %363
  %.not598 = icmp eq i64 %.6485, 0
  br i1 %.not598, label %.thread735, label %368

368:                                              ; preds = %367
  %369 = icmp eq i32 %15, 1
  br i1 %369, label %370, label %381

370:                                              ; preds = %368
  %371 = getelementptr inbounds i8, ptr %26, i64 4
  %372 = load i32, ptr %371, align 4, !tbaa !22
  %.not599 = icmp eq i32 %372, 0
  br i1 %.not599, label %373, label %381

373:                                              ; preds = %370
  %374 = load i8, ptr %.6, align 1, !tbaa !28
  %375 = zext i8 %374 to i32
  %376 = getelementptr inbounds i8, ptr %.0488, i64 12
  store i32 %375, ptr %376, align 4, !tbaa !47
  %377 = add nsw i64 %365, -1
  store i64 %377, ptr %364, align 8, !tbaa !50
  %378 = getelementptr inbounds i8, ptr %.6, i64 1
  %379 = add i64 %.6485, -1
  %380 = add i64 %.6495, 1
  br label %381

381:                                              ; preds = %368, %370, %373
  %.7496 = phi i64 [ %.6495, %370 ], [ %380, %373 ], [ %.6495, %368 ]
  %.7486 = phi i64 [ %.6485, %370 ], [ %379, %373 ], [ %.6485, %368 ]
  %.7 = phi ptr [ %.6, %370 ], [ %378, %373 ], [ %.6, %368 ]
  %382 = getelementptr inbounds i8, ptr %26, i64 4
  %383 = getelementptr inbounds i8, ptr %.0488, i64 8
  %384 = load i32, ptr %383, align 8, !tbaa !23
  %385 = sext i32 %384 to i64
  %386 = add i64 %.7486, %385
  %387 = trunc i64 %386 to i32
  %388 = icmp slt i32 %387, 0
  br i1 %388, label %.thread735, label %389

389:                                              ; preds = %381
  %390 = load i32, ptr %382, align 4, !tbaa !22
  %391 = sext i32 %390 to i64
  %.not600 = icmp ult i64 %386, %391
  br i1 %.not600, label %._crit_edge808, label %.preheader

._crit_edge808:                                   ; preds = %389
  %.pre809 = load ptr, ptr %.0488, align 8, !tbaa !25
  br label %401

.preheader:                                       ; preds = %389, %.preheader
  %.0502 = phi i64 [ %393, %.preheader ], [ %391, %389 ]
  %.not601 = icmp eq i64 %.0502, 0
  %392 = shl i64 %.0502, 1
  %393 = select i1 %.not601, i64 16, i64 %392
  %.not602 = icmp ugt i64 %393, %386
  br i1 %.not602, label %394, label %.preheader, !llvm.loop !51

394:                                              ; preds = %.preheader
  %395 = trunc i64 %393 to i32
  %396 = icmp slt i32 %395, 0
  br i1 %396, label %.thread735, label %397

397:                                              ; preds = %394
  %398 = load ptr, ptr %.0488, align 8, !tbaa !25
  %399 = call ptr @realloc(ptr noundef %398, i64 noundef %393) #9
  %.not603 = icmp eq ptr %399, null
  br i1 %.not603, label %.thread735, label %400

400:                                              ; preds = %397
  store ptr %399, ptr %.0488, align 8, !tbaa !25
  store i32 %395, ptr %382, align 4, !tbaa !22
  %.pre810 = load i32, ptr %383, align 8, !tbaa !23
  %.pre812 = sext i32 %.pre810 to i64
  br label %401

401:                                              ; preds = %._crit_edge808, %400
  %.pre-phi813 = phi i64 [ %385, %._crit_edge808 ], [ %.pre812, %400 ]
  %402 = phi ptr [ %.pre809, %._crit_edge808 ], [ %399, %400 ]
  %403 = getelementptr inbounds i8, ptr %402, i64 %.pre-phi813
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %403, ptr align 1 %.7, i64 %.7486, i1 false)
  %404 = load ptr, ptr %.0488, align 8, !tbaa !25
  %405 = getelementptr inbounds i8, ptr %404, i64 %386
  store i8 0, ptr %405, align 1, !tbaa !28
  store i32 %387, ptr %383, align 8, !tbaa !23
  %406 = load i64, ptr %364, align 8, !tbaa !50
  %407 = sub i64 %406, %.7486
  store i64 %407, ptr %364, align 8, !tbaa !50
  %408 = add i64 %.7486, %.7496
  br label %.thread735

409:                                              ; preds = %363
  %410 = icmp eq i32 %15, 1
  br i1 %410, label %411, label %421

411:                                              ; preds = %409
  %412 = getelementptr inbounds i8, ptr %26, i64 4
  %413 = load i32, ptr %412, align 4, !tbaa !22
  %.not592 = icmp ne i32 %413, 0
  %.not593 = icmp eq i64 %365, 0
  %or.cond641 = or i1 %.not593, %.not592
  br i1 %or.cond641, label %421, label %414

414:                                              ; preds = %411
  %415 = load i8, ptr %.6, align 1, !tbaa !28
  %416 = zext i8 %415 to i32
  %417 = getelementptr inbounds i8, ptr %.0488, i64 12
  store i32 %416, ptr %417, align 4, !tbaa !47
  %418 = add nsw i64 %365, -1
  store i64 %418, ptr %364, align 8, !tbaa !50
  %419 = getelementptr inbounds i8, ptr %.6, i64 1
  %420 = add i64 %.6495, 1
  br label %421

421:                                              ; preds = %409, %411, %414
  %422 = phi i64 [ %365, %411 ], [ %418, %414 ], [ %365, %409 ]
  %.8497 = phi i64 [ %.6495, %411 ], [ %420, %414 ], [ %.6495, %409 ]
  %.8 = phi ptr [ %.6, %411 ], [ %419, %414 ], [ %.6, %409 ]
  %423 = getelementptr inbounds i8, ptr %26, i64 4
  %424 = getelementptr inbounds i8, ptr %.0488, i64 8
  %425 = load i32, ptr %424, align 8, !tbaa !23
  %426 = sext i32 %425 to i64
  %427 = add i64 %422, %426
  %428 = trunc i64 %427 to i32
  %429 = icmp slt i32 %428, 0
  br i1 %429, label %.thread735, label %430

430:                                              ; preds = %421
  %431 = load i32, ptr %423, align 4, !tbaa !22
  %432 = sext i32 %431 to i64
  %.not594 = icmp ult i64 %427, %432
  br i1 %.not594, label %._crit_edge805, label %.preheader758

._crit_edge805:                                   ; preds = %430
  %.pre806 = load ptr, ptr %.0488, align 8, !tbaa !25
  br label %442

.preheader758:                                    ; preds = %430, %.preheader758
  %.0478 = phi i64 [ %434, %.preheader758 ], [ %432, %430 ]
  %.not595 = icmp eq i64 %.0478, 0
  %433 = shl i64 %.0478, 1
  %434 = select i1 %.not595, i64 16, i64 %433
  %.not596 = icmp ugt i64 %434, %427
  br i1 %.not596, label %435, label %.preheader758, !llvm.loop !52

435:                                              ; preds = %.preheader758
  %436 = trunc i64 %434 to i32
  %437 = icmp slt i32 %436, 0
  br i1 %437, label %.thread735, label %438

438:                                              ; preds = %435
  %439 = load ptr, ptr %.0488, align 8, !tbaa !25
  %440 = call ptr @realloc(ptr noundef %439, i64 noundef %434) #9
  %.not597 = icmp eq ptr %440, null
  br i1 %.not597, label %.thread735, label %441

441:                                              ; preds = %438
  store ptr %440, ptr %.0488, align 8, !tbaa !25
  store i32 %436, ptr %423, align 4, !tbaa !22
  %.pre807 = load i32, ptr %424, align 8, !tbaa !23
  %.pre814 = sext i32 %.pre807 to i64
  br label %442

442:                                              ; preds = %._crit_edge805, %441
  %.pre-phi815 = phi i64 [ %426, %._crit_edge805 ], [ %.pre814, %441 ]
  %443 = phi ptr [ %.pre806, %._crit_edge805 ], [ %440, %441 ]
  %444 = getelementptr inbounds i8, ptr %443, i64 %.pre-phi815
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %444, ptr align 1 %.8, i64 %422, i1 false)
  %445 = load ptr, ptr %.0488, align 8, !tbaa !25
  %446 = getelementptr inbounds i8, ptr %445, i64 %427
  store i8 0, ptr %446, align 1, !tbaa !28
  store i32 %428, ptr %424, align 8, !tbaa !23
  %447 = load i64, ptr %364, align 8, !tbaa !50
  %448 = add i64 %447, %.8497
  store i64 0, ptr %364, align 8, !tbaa !50
  %449 = load i16, ptr %26, align 8, !tbaa !16
  %450 = icmp eq i16 %449, 0
  br i1 %450, label %451, label %452

451:                                              ; preds = %442
  store i32 0, ptr %423, align 4, !tbaa !22
  br label %452

452:                                              ; preds = %451, %442
  %453 = add i16 %449, 1
  br label %.sink.split

.sink.split:                                      ; preds = %452, %269
  %.sink836 = phi i16 [ %270, %269 ], [ %453, %452 ]
  %.9.ph = phi i64 [ %.1490, %269 ], [ %448, %452 ]
  store i16 %.sink836, ptr %26, align 8, !tbaa !16
  br label %454

454:                                              ; preds = %.sink.split, %22
  %.9 = phi i64 [ 0, %22 ], [ %.9.ph, %.sink.split ]
  %455 = icmp eq i32 %15, 1
  br i1 %455, label %456, label %.thread735

456:                                              ; preds = %454
  %457 = getelementptr inbounds i8, ptr %.0488, i64 8
  %458 = load i32, ptr %457, align 8, !tbaa !23
  %.not638 = icmp eq i32 %458, 0
  br i1 %.not638, label %.thread735, label %459

459:                                              ; preds = %456
  %460 = getelementptr inbounds i8, ptr %.0488, i64 12
  %461 = load i32, ptr %460, align 4, !tbaa !47
  %462 = shl i32 255, %461
  %463 = load ptr, ptr %.0488, align 8, !tbaa !25
  %464 = sext i32 %458 to i64
  %465 = getelementptr i8, ptr %463, i64 %464
  %466 = getelementptr i8, ptr %465, i64 -1
  %467 = load i8, ptr %466, align 1, !tbaa !28
  %468 = trunc i32 %462 to i8
  %469 = and i8 %467, %468
  store i8 %469, ptr %466, align 1, !tbaa !28
  br label %.thread735

.thread735:                                       ; preds = %438, %435, %421, %397, %394, %381, %336, %333, %320, %310, %307, %290, %354, %.thread671, %459, %456, %454, %367, %50, %66, %63, %35, %28, %17, %401
  %.sroa.0477.34 = phi i32 [ 1, %401 ], [ 2, %17 ], [ %31, %28 ], [ 2, %35 ], [ 2, %63 ], [ 2, %66 ], [ 2, %50 ], [ 1, %367 ], [ 0, %454 ], [ 0, %456 ], [ 0, %459 ], [ %.sroa.0477.16.ph, %.thread671 ], [ 1, %354 ], [ 2, %290 ], [ 2, %307 ], [ 2, %310 ], [ 2, %320 ], [ 2, %333 ], [ 2, %336 ], [ 2, %381 ], [ 2, %394 ], [ 2, %397 ], [ 2, %421 ], [ 2, %435 ], [ 2, %438 ]
  %.sroa.40.34 = phi i64 [ %408, %401 ], [ 0, %17 ], [ %32, %28 ], [ 0, %35 ], [ 0, %63 ], [ 0, %66 ], [ 0, %50 ], [ %.6495, %367 ], [ %.9, %454 ], [ %.9, %456 ], [ %.9, %459 ], [ %.1490, %.thread671 ], [ %.4493, %354 ], [ %.3492, %290 ], [ %.3492, %307 ], [ %.3492, %310 ], [ %.3492, %320 ], [ %.3492, %333 ], [ %.3492, %336 ], [ %.7496, %381 ], [ %.7496, %394 ], [ %.7496, %397 ], [ %.8497, %421 ], [ %.8497, %435 ], [ %.8497, %438 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %7) #7
  %.fca.0.insert = insertvalue { i32, i64 } poison, i32 %.sroa.0477.34, 0
  %.fca.1.insert = insertvalue { i32, i64 } %.fca.0.insert, i64 %.sroa.40.34, 1
  ret { i32, i64 } %.fca.1.insert
}

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

; 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 #2

declare { i32, i64 } @ber_check_tags(ptr noundef, ptr noundef, ptr noundef, ptr noundef, i64 noundef, i32 noundef, i32 noundef, ptr noundef, ptr noundef) local_unnamed_addr #3

; 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) #4

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

; Function Attrs: nounwind uwtable
declare hidden ptr @_new_stack() local_unnamed_addr #0

; Function Attrs: mustprogress nounwind willreturn allockind("realloc") allocsize(1) memory(argmem: readwrite, inaccessiblemem: readwrite)
declare noalias noundef ptr @realloc(ptr allocptr nocapture noundef, i64 noundef) local_unnamed_addr #5

declare i64 @ber_fetch_tag(ptr noundef, i64 noundef, ptr noundef) local_unnamed_addr #3

declare i64 @ber_fetch_length(i32 noundef, ptr noundef, i64 noundef, ptr noundef) local_unnamed_addr #3

declare i64 @ber_tlv_tag_snprint(i32 noundef, ptr noundef, i64 noundef) local_unnamed_addr #3

; Function Attrs: nounwind uwtable
declare hidden ptr @OS__add_stack_el(ptr noundef) local_unnamed_addr #0

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

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

attributes #0 = { 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 #1 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { 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 #3 = { "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 #4 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #5 = { mustprogress nounwind willreturn allockind("realloc") allocsize(1) 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 #6 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #7 = { nounwind }
attributes #8 = { nounwind allocsize(0,1) }
attributes #9 = { nounwind allocsize(1) }

!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, !7, i64 152}
!6 = !{!"asn_TYPE_descriptor_s", !7, i64 0, !7, i64 8, !7, i64 16, !7, i64 24, !7, i64 32, !7, i64 40, !7, i64 48, !7, i64 56, !7, i64 64, !7, i64 72, !7, i64 80, !7, i64 88, !7, i64 96, !10, i64 104, !7, i64 112, !10, i64 120, !7, i64 128, !7, i64 136, !10, i64 144, !7, i64 152}
!7 = !{!"any pointer", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"int", !8, i64 0}
!11 = !{!7, !7, i64 0}
!12 = !{!13, !10, i64 8}
!13 = !{!"asn_OCTET_STRING_specifics_s", !10, i64 0, !10, i64 4, !10, i64 8}
!14 = !{!13, !10, i64 0}
!15 = !{!13, !10, i64 4}
!16 = !{!17, !18, i64 0}
!17 = !{!"asn_struct_ctx_s", !18, i64 0, !18, i64 2, !10, i64 4, !7, i64 8, !19, i64 16}
!18 = !{!"short", !8, i64 0}
!19 = !{!"long", !8, i64 0}
!20 = !{!10, !10, i64 0}
!21 = !{!17, !7, i64 8}
!22 = !{!17, !10, i64 4}
!23 = !{!24, !10, i64 8}
!24 = !{!"BIT_STRING_s", !7, i64 0, !10, i64 8, !10, i64 12, !17, i64 16}
!25 = !{!24, !7, i64 0}
!26 = distinct !{!26, !27}
!27 = !{!"llvm.loop.mustprogress"}
!28 = !{!8, !8, i64 0}
!29 = !{!30, !7, i64 8}
!30 = !{!"_stack", !7, i64 0, !7, i64 8}
!31 = !{!32, !19, i64 0}
!32 = !{!"_stack_el", !19, i64 0, !19, i64 8, !10, i64 16, !10, i64 20, !10, i64 24, !10, i64 28, !7, i64 32, !7, i64 40}
!33 = !{!32, !10, i64 20}
!34 = !{!32, !7, i64 32}
!35 = !{!32, !19, i64 8}
!36 = !{!32, !10, i64 16}
!37 = distinct !{!37, !27}
!38 = !{!6, !10, i64 120}
!39 = !{!6, !7, i64 112}
!40 = !{!6, !7, i64 96}
!41 = !{!6, !10, i64 104}
!42 = !{!19, !19, i64 0}
!43 = !{!32, !10, i64 28}
!44 = distinct !{!44, !27}
!45 = distinct !{!45, !27}
!46 = !{!32, !10, i64 24}
!47 = !{!24, !10, i64 12}
!48 = distinct !{!48, !27}
!49 = distinct !{!49, !27}
!50 = !{!17, !19, i64 16}
!51 = distinct !{!51, !27}
!52 = distinct !{!52, !27}


; Effective O3 passes: BDCEPass,ConstraintEliminationPass,CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopInstSimplifyPass,LoopSimplifyPass,LoopUnrollPass,PostOrderFunctionAttrsPass,ReassociatePass,SROAPass,SimplifyCFGPass,TailCallElimPass